зеркало из https://github.com/microsoft/clang-1.git
Add a new option for and disable column number information as there
are no known current users of column info. Robustify and fix up a few tests in the process. Reduces the size of debug information by a small amount. Part of PR14106 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166236 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
5b341da0eb
Коммит
da3301eec8
|
@ -143,6 +143,8 @@ def fdebug_compilation_dir : Separate<"-fdebug-compilation-dir">,
|
||||||
HelpText<"The compilation directory to embed in the debug info.">;
|
HelpText<"The compilation directory to embed in the debug info.">;
|
||||||
def dwarf_debug_flags : Separate<"-dwarf-debug-flags">,
|
def dwarf_debug_flags : Separate<"-dwarf-debug-flags">,
|
||||||
HelpText<"The string to embed in the Dwarf debug flags record.">;
|
HelpText<"The string to embed in the Dwarf debug flags record.">;
|
||||||
|
def dwarf_column_info : Flag<"-dwarf-column-info">,
|
||||||
|
HelpText<"Turn on column location information.">;
|
||||||
def fforbid_guard_variables : Flag<"-fforbid-guard-variables">,
|
def fforbid_guard_variables : Flag<"-fforbid-guard-variables">,
|
||||||
HelpText<"Emit an error if a C++ static local initializer would need a guard variable">;
|
HelpText<"Emit an error if a C++ static local initializer would need a guard variable">;
|
||||||
def no_implicit_float : Flag<"-no-implicit-float">,
|
def no_implicit_float : Flag<"-no-implicit-float">,
|
||||||
|
|
|
@ -716,6 +716,7 @@ def gno_record_gcc_switches : Flag<"-gno-record-gcc-switches">,
|
||||||
Group<g_flags_Group>;
|
Group<g_flags_Group>;
|
||||||
def gstrict_dwarf : Flag<"-gstrict-dwarf">, Group<g_flags_Group>;
|
def gstrict_dwarf : Flag<"-gstrict-dwarf">, Group<g_flags_Group>;
|
||||||
def gno_strict_dwarf : Flag<"-gno-strict-dwarf">, Group<g_flags_Group>;
|
def gno_strict_dwarf : Flag<"-gno-strict-dwarf">, Group<g_flags_Group>;
|
||||||
|
def gcolumn_info : Flag<"-gcolumn-info">, Group<g_flags_Group>;
|
||||||
def headerpad__max__install__names : Joined<"-headerpad_max_install_names">;
|
def headerpad__max__install__names : Joined<"-headerpad_max_install_names">;
|
||||||
def help : Flag<"-help">, Flags<[CC1Option]>,
|
def help : Flag<"-help">, Flags<[CC1Option]>,
|
||||||
HelpText<"Display available options">;
|
HelpText<"Display available options">;
|
||||||
|
|
|
@ -145,6 +145,9 @@ public:
|
||||||
/// The kind of generated debug info.
|
/// The kind of generated debug info.
|
||||||
DebugInfoKind DebugInfo;
|
DebugInfoKind DebugInfo;
|
||||||
|
|
||||||
|
/// Whether or not to use column information in debug info.
|
||||||
|
bool DebugColumnInfo;
|
||||||
|
|
||||||
/// The string to embed in the debug information for the compile unit, if
|
/// The string to embed in the debug information for the compile unit, if
|
||||||
/// non-empty.
|
/// non-empty.
|
||||||
std::string DwarfDebugFlags;
|
std::string DwarfDebugFlags;
|
||||||
|
|
|
@ -259,6 +259,8 @@ unsigned CGDebugInfo::getLineNumber(SourceLocation Loc) {
|
||||||
unsigned CGDebugInfo::getColumnNumber(SourceLocation Loc) {
|
unsigned CGDebugInfo::getColumnNumber(SourceLocation Loc) {
|
||||||
if (Loc.isInvalid() && CurLoc.isInvalid())
|
if (Loc.isInvalid() && CurLoc.isInvalid())
|
||||||
return 0;
|
return 0;
|
||||||
|
if (!CGM.getCodeGenOpts().DebugColumnInfo)
|
||||||
|
return 0;
|
||||||
SourceManager &SM = CGM.getContext().getSourceManager();
|
SourceManager &SM = CGM.getContext().getSourceManager();
|
||||||
PresumedLoc PLoc = SM.getPresumedLoc(Loc.isValid() ? Loc : CurLoc);
|
PresumedLoc PLoc = SM.getPresumedLoc(Loc.isValid() ? Loc : CurLoc);
|
||||||
return PLoc.isValid()? PLoc.getColumn() : 0;
|
return PLoc.isValid()? PLoc.getColumn() : 0;
|
||||||
|
|
|
@ -2050,6 +2050,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
||||||
|
|
||||||
// We ignore flags -gstrict-dwarf and -grecord-gcc-switches for now.
|
// We ignore flags -gstrict-dwarf and -grecord-gcc-switches for now.
|
||||||
Args.ClaimAllArgs(options::OPT_g_flags_Group);
|
Args.ClaimAllArgs(options::OPT_g_flags_Group);
|
||||||
|
if (Args.hasArg(options::OPT_gcolumn_info))
|
||||||
|
CmdArgs.push_back("-dwarf-column-info");
|
||||||
|
|
||||||
Args.AddAllArgs(CmdArgs, options::OPT_ffunction_sections);
|
Args.AddAllArgs(CmdArgs, options::OPT_ffunction_sections);
|
||||||
Args.AddAllArgs(CmdArgs, options::OPT_fdata_sections);
|
Args.AddAllArgs(CmdArgs, options::OPT_fdata_sections);
|
||||||
|
|
|
@ -197,6 +197,8 @@ static void CodeGenOptsToArgs(const CodeGenOptions &Opts, ToArgsList &Res) {
|
||||||
Res.push_back("-fno-limit-debug-info");
|
Res.push_back("-fno-limit-debug-info");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (Opts.DebugColumnInfo)
|
||||||
|
Res.push_back("-gcolumn-info");
|
||||||
if (Opts.DisableLLVMOpts)
|
if (Opts.DisableLLVMOpts)
|
||||||
Res.push_back("-disable-llvm-optzns");
|
Res.push_back("-disable-llvm-optzns");
|
||||||
if (Opts.DisableRedZone)
|
if (Opts.DisableRedZone)
|
||||||
|
@ -1228,6 +1230,7 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
|
||||||
else
|
else
|
||||||
Opts.DebugInfo = CodeGenOptions::FullDebugInfo;
|
Opts.DebugInfo = CodeGenOptions::FullDebugInfo;
|
||||||
}
|
}
|
||||||
|
Opts.DebugColumnInfo = Args.hasArg(OPT_dwarf_column_info);
|
||||||
|
|
||||||
Opts.DisableLLVMOpts = Args.hasArg(OPT_disable_llvm_optzns);
|
Opts.DisableLLVMOpts = Args.hasArg(OPT_disable_llvm_optzns);
|
||||||
Opts.DisableRedZone = Args.hasArg(OPT_disable_red_zone);
|
Opts.DisableRedZone = Args.hasArg(OPT_disable_red_zone);
|
||||||
|
|
|
@ -27,7 +27,7 @@ int main() {
|
||||||
Array[i][j] = 0;
|
Array[i][j] = 0;
|
||||||
test_indvars(Array[0], Array);
|
test_indvars(Array[0], Array);
|
||||||
|
|
||||||
//CHECK: .loc 2 31 8
|
//CHECK: .loc 2 31
|
||||||
for (i=0; i < 100; i+=2)
|
for (i=0; i < 100; i+=2)
|
||||||
for (j=0; j < 200; j++)
|
for (j=0; j < 200; j++)
|
||||||
sum += Array[i][j];
|
sum += Array[i][j];
|
||||||
|
|
|
@ -12,5 +12,5 @@ void func(char c, char* d)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK: ret void, !dbg !17
|
// CHECK: ret void, !dbg [[LINE:.*]]
|
||||||
// CHECK: !17 = metadata !{i32 6,
|
// CHECK: [[LINE]] = metadata !{i32 6,
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
// RUN: %clang %s -g -gcolumn-info -S -emit-llvm -o - | FileCheck %s
|
||||||
|
// Checks that clang emits column information when -gcolumn-info is passed.
|
||||||
|
|
||||||
|
int foo(int a, int b) { int c = a + b;
|
||||||
|
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Without column information we wouldn't change locations for b.
|
||||||
|
// CHECK: metadata !{i32 4, i32 20,
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
// Check to make sure that we emit the block for the break so that we can count the line.
|
// Check to make sure that we emit the block for the break so that we can count the line.
|
||||||
// CHECK: sw.bb: ; preds = %entry
|
// CHECK: sw.bb: ; preds = %entry
|
||||||
// CHECK: br label %sw.epilog, !dbg !19
|
// CHECK: br label %sw.epilog, !dbg !
|
||||||
|
|
||||||
extern int atoi(const char *);
|
extern int atoi(const char *);
|
||||||
|
|
||||||
|
|
|
@ -27,4 +27,4 @@ int main(void) {}
|
||||||
// CHECK-NOT: dbg
|
// CHECK-NOT: dbg
|
||||||
// CHECK: store i32 %[[C1]], i32* @_ZL1j, align 4
|
// CHECK: store i32 %[[C1]], i32* @_ZL1j, align 4
|
||||||
//
|
//
|
||||||
// CHECK: ![[LINE]] = metadata !{i32 13, i32 16
|
// CHECK: ![[LINE]] = metadata !{i32 13, i32
|
||||||
|
|
|
@ -19,4 +19,4 @@ void foo() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Check there is a line number entry for line 19 where b1 is destructed.
|
// Check there is a line number entry for line 19 where b1 is destructed.
|
||||||
// CHECK: i32 19, i32 3, metadata
|
// CHECK: i32 19, i32 0, metadata
|
||||||
|
|
Загрузка…
Ссылка в новой задаче