diff --git a/docs/UsersManual.rst b/docs/UsersManual.rst index 90a0e53b506efe61c81dcbdcca2c943398be9fbe..393222672e1829c359227048b314133779acab73 100644 --- a/docs/UsersManual.rst +++ b/docs/UsersManual.rst @@ -577,17 +577,12 @@ feature. Current limitations ^^^^^^^^^^^^^^^^^^^ -1. For :option:`-Rpass` to provide column information, you - need to enable it explicitly. That is, you need to add - :option:`-gcolumn-info`. If you omit this, remarks will only show - line information. - -2. Optimization remarks that refer to function names will display the +1. Optimization remarks that refer to function names will display the mangled name of the function. Since these remarks are emitted by the back end of the compiler, it does not know anything about the input language, nor its mangling rules. -3. Some source locations are not displayed correctly. The front end has +2. Some source locations are not displayed correctly. The front end has a more detailed source location tracking than the locations included in the debug info (e.g., the front end can locate code inside macro expansions). However, the locations used by :option:`-Rpass` are diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td index c37d2d88a4099e7157847779c54267b557cd7471..0cb02728602040bd4af68f94e9e93af9f4656219 100644 --- a/include/clang/Driver/Options.td +++ b/include/clang/Driver/Options.td @@ -958,6 +958,7 @@ def gno_record_gcc_switches : Flag<["-"], "gno-record-gcc-switches">, def gstrict_dwarf : Flag<["-"], "gstrict-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 gno_column_info : Flag<["-"], "gno-column-info">, Group<g_flags_Group>; def gsplit_dwarf : Flag<["-"], "gsplit-dwarf">, Group<g_flags_Group>; def ggnu_pubnames : Flag<["-"], "ggnu-pubnames">, Group<g_flags_Group>; def gdwarf_aranges : Flag<["-"], "gdwarf-aranges">, Group<g_flags_Group>; diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 0c2f5264d26ed52f870cce5072bde6db790502d7..cac20a15196cac48e2f54abf734e95579770f88e 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -2947,7 +2947,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, // We ignore flags -gstrict-dwarf and -grecord-gcc-switches for now. Args.ClaimAllArgs(options::OPT_g_flags_Group); - if (Args.hasArg(options::OPT_gcolumn_info)) + if (Args.hasFlag(options::OPT_gcolumn_info, options::OPT_gno_column_info, + /*Default*/ true)) CmdArgs.push_back("-dwarf-column-info"); // FIXME: Move backend command line options to the module. diff --git a/test/CodeGenCXX/debug-info-line-if.cpp b/test/CodeGenCXX/debug-info-line-if.cpp index 0d4d22345a6de743d2929f01a0e62d3844bad65d..e14090f03f984714df729a711eda89a3209a240d 100644 --- a/test/CodeGenCXX/debug-info-line-if.cpp +++ b/test/CodeGenCXX/debug-info-line-if.cpp @@ -1,4 +1,4 @@ -// RUN: %clang -g -std=c++11 -S -emit-llvm %s -o - | FileCheck %s +// RUN: %clang_cc1 -g -std=c++11 -S -emit-llvm %s -o - | FileCheck %s // PR19864 int main() { int v[] = {13, 21, 8, 3, 34, 1, 5, 2}; diff --git a/test/CodeGenCXX/debug-info-namespace.cpp b/test/CodeGenCXX/debug-info-namespace.cpp index 2eb942e04aff383c760f6b724388b69f94057a5e..a1284d2d27710db33f7ed0b62b9f7865f4fd657a 100644 --- a/test/CodeGenCXX/debug-info-namespace.cpp +++ b/test/CodeGenCXX/debug-info-namespace.cpp @@ -1,6 +1,6 @@ -// RUN: %clang -g -fno-standalone-debug -S -emit-llvm %s -o - | FileCheck %s -// RUN: %clang -g -gline-tables-only -S -emit-llvm %s -o - | FileCheck -check-prefix=CHECK-GMLT %s -// RUN: %clang -g -fstandalone-debug -S -emit-llvm %s -o - | FileCheck -check-prefix=CHECK-NOLIMIT %s +// RUN: %clang_cc1 -g -fno-standalone-debug -S -emit-llvm %s -o - | FileCheck %s +// RUN: %clang_cc1 -g -gline-tables-only -S -emit-llvm %s -o - | FileCheck -check-prefix=CHECK-GMLT %s +// RUN: %clang_cc1 -g -fstandalone-debug -S -emit-llvm %s -o - | FileCheck -check-prefix=CHECK-NOLIMIT %s namespace A { #line 1 "foo.cpp" @@ -44,11 +44,11 @@ using B::i; // but it doesn't yet. // CHECK: [[CU:![0-9]*]] = {{.*}}[[MODULES:![0-9]*]], metadata !"", i32 1} ; [ DW_TAG_compile_unit ] -// CHECK: [[FILE:![0-9]*]] {{.*}}debug-info-namespace.cpp" // CHECK: [[FOO:![0-9]*]] {{.*}} ; [ DW_TAG_structure_type ] [foo] [line 5, size 0, align 0, offset 0] [decl] [from ] // CHECK: [[FOOCPP:![0-9]*]] = metadata !{metadata !"foo.cpp", {{.*}} // CHECK: [[NS:![0-9]*]] = {{.*}}, metadata [[FILE2:![0-9]*]], metadata [[CTXT:![0-9]*]], {{.*}} ; [ DW_TAG_namespace ] [B] [line 1] -// CHECK: [[CTXT]] = {{.*}}, metadata [[FILE]], null, {{.*}} ; [ DW_TAG_namespace ] [A] [line 5] +// CHECK: [[CTXT]] = {{.*}}, metadata [[FILE:![0-9]*]], null, {{.*}} ; [ DW_TAG_namespace ] [A] [line 5] +// CHECK: [[FILE]] {{.*}}debug-info-namespace.cpp" // CHECK: [[BAR:![0-9]*]] {{.*}} ; [ DW_TAG_structure_type ] [bar] [line 6, {{.*}}] [decl] [from ] // CHECK: [[F1:![0-9]*]] {{.*}} ; [ DW_TAG_subprogram ] [line 4] [def] [f1] // CHECK: [[FUNC:![0-9]*]] {{.*}} ; [ DW_TAG_subprogram ] {{.*}} [def] [func] diff --git a/test/Driver/debug-options.c b/test/Driver/debug-options.c index e179ef0eb7817d932a8a60af606eee1f42e73ddc..a8fadb36e74b647ece4139c2dbc4e7629788bb27 100644 --- a/test/Driver/debug-options.c +++ b/test/Driver/debug-options.c @@ -68,6 +68,10 @@ // RUN: %clang -### -fdebug-types-section -fno-debug-types-section %s 2>&1 \ // RUN: | FileCheck -check-prefix=NOFDTS %s // +// RUN: %clang -### -g -gno-column-info %s 2>&1 \ +// RUN: | FileCheck -check-prefix=NOCI %s +// +// RUN: %clang -### -g %s 2>&1 | FileCheck -check-prefix=CI %s // // G: "-cc1" // G: "-g" @@ -114,3 +118,7 @@ // FDTS: "-backend-option" "-generate-type-units" // // NOFDTS-NOT: "-backend-option" "-generate-type-units" +// +// CI: "-dwarf-column-info" +// +// NOCI-NOT: "-dwarf-column-info"