Back in GCC 8, with r8-5241-g8697bf9f46f361 (-gstatement-frontiers), r8-6658-g58006663903200, r8-6657-gbd2b9f1e2d67ec (-gvariable-location-views), some advanced GNU extensions to DWARF were introduced and enabled by default with the aim of improving debugging optimized code.
Unfortunately, as of yet, consumer support has't materialised in neither GDB nor LLDB and there's no sign of any progress on those fronts. On the GCC side, there's a large number of -fcompare-debug issues involving -gstatement-frontiers, and some others involving -gvariable-location-views, and there's nobody working on those at present. (For arm the other day, bootstrap w/ compare-debug failed as well for the same reason.) The format even seems to confuse LLDB. It'd be easier to lobby for that being fixed if GDB itself had support, but it doesn't. I've only made the change for DWARF as I'm only certain about the ecosystem there. Alexandre Oliva was the architct of the work and has recommended they be turned off by default for the foreseeable future. Implement that. (In researching afterwards, I found Jakub submitted a similar change in the past: https://inbox.sourceware.org/gcc-patches/YmA%2Fbyg8CdYQAG6u@tucnak/) In terms of the testsuite: * inline{2,6}.c simply relied on features we're now disabling, so re-enable them. We already pass a bunch of flags there for similar reasons; * deallocator.C loses a reference to a source line which was only being added for a LV, but there's already one right below it. The testcase has had a lot of tweaks in the past and given what the comment describing it says, this doesn't seem to be a problem; * guality churn (a wash); * A bunch of improvements for -fcompare-debug issues that appeared after r16-2197-g385d9937f0e23c too which is expected because we're disabling statement frontiers. * c-c++-common/goacc/kernels-decompose-pr100400-1-2.c now has many XPASS and some XFAIL. Looking at PR103836, it's not immediately obvious what tweak to make here. gdb's testsuite shows no changes. Bug: https://sourceware.org/PR25507 Bug: https://github.com/llvm/llvm-project/issues/102433 Link: https://inbox.sourceware.org/gcc-patches/[email protected]/ Link: https://inbox.sourceware.org/gcc-patches/[email protected]/ gcc/ChangeLog: PR debug/99654 PR debug/104277 PR middle-end/103836 PR debug/121045 * common.opt (gvariable-location-views): Default to 0, not 1. (gvariable-location-views=incompat5): Default to 0, not 2. * opts.cc (finish_options): Don't default-enable opts->x_debug_nonbind_markers_p for DWARF. * toplev.cc (process_options): Don't default-enable debug_variable_location_views. gcc/testsuite/ChangeLog: * g++.dg/debug/dwarf2/deallocator.C: Adjust test. * gcc.dg/debug/dwarf2/inline2.c: Pass -gstatement-frontiers -gvariable-location-views. * gcc.dg/debug/dwarf2/inline6.c: Ditto. --- Bootstrapped and tested on x86_64-pc-linux-gnu. OK? gcc/common.opt | 4 ++-- gcc/opts.cc | 2 +- gcc/testsuite/g++.dg/debug/dwarf2/deallocator.C | 1 - gcc/testsuite/gcc.dg/debug/dwarf2/inline2.c | 2 +- gcc/testsuite/gcc.dg/debug/dwarf2/inline6.c | 2 +- gcc/toplev.cc | 12 +++--------- 6 files changed, 8 insertions(+), 15 deletions(-) diff --git a/gcc/common.opt b/gcc/common.opt index cd6a224c9a9a..a16329bfef9b 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -3758,11 +3758,11 @@ Common Driver Var(flag_gtoggle) Toggle debug information generation. gvariable-location-views -Common Driver Var(debug_variable_location_views, 1) +Common Driver Var(debug_variable_location_views) Init(0) Augment variable location lists with progressive views. gvariable-location-views=incompat5 -Common Driver RejectNegative Var(debug_variable_location_views, -1) Init(2) +Common Driver RejectNegative Var(debug_variable_location_views, -1) Init(0) gvms Common Driver JoinedOrMissing RejectNegative diff --git a/gcc/opts.cc b/gcc/opts.cc index 3ab993aea573..ba1e2a0c1852 100644 --- a/gcc/opts.cc +++ b/gcc/opts.cc @@ -1424,7 +1424,7 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set, opts->x_debug_nonbind_markers_p = (opts->x_optimize && ((opts->x_debug_info_level >= DINFO_LEVEL_NORMAL - && (dwarf_debuginfo_p (opts) || codeview_debuginfo_p ())) + && codeview_debuginfo_p ()) || opts->x_flag_auto_profile) && !(opts->x_flag_selective_scheduling || opts->x_flag_selective_scheduling2)); diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/deallocator.C b/gcc/testsuite/g++.dg/debug/dwarf2/deallocator.C index c1d387922ba2..8cab6ccb0277 100644 --- a/gcc/testsuite/g++.dg/debug/dwarf2/deallocator.C +++ b/gcc/testsuite/g++.dg/debug/dwarf2/deallocator.C @@ -40,6 +40,5 @@ void foo(int i) test_outside.foo(); return; } -// { dg-final { scan-assembler "deallocator.C:29" } } // { dg-final { scan-assembler "deallocator.C:24" } } // { dg-final { scan-assembler "deallocator.C:21" } } diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/inline2.c b/gcc/testsuite/gcc.dg/debug/dwarf2/inline2.c index f5d7e4efd161..b55a9d5600eb 100644 --- a/gcc/testsuite/gcc.dg/debug/dwarf2/inline2.c +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/inline2.c @@ -16,7 +16,7 @@ /* Explicitly use dwarf-2 because dwarf-5 might use DW_FORM_implicit_const which is hard to scan for. */ -/* { dg-options "-O -g3 -gdwarf-2 -gno-strict-dwarf -dA -fgnu89-inline" } */ +/* { dg-options "-O -g3 -gdwarf-2 -gstatement-frontiers -gvariable-location-views -gno-strict-dwarf -dA -fgnu89-inline" } */ /* { dg-do compile } */ /* There are 6 inlined subroutines: diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/inline6.c b/gcc/testsuite/gcc.dg/debug/dwarf2/inline6.c index f271ebbcc803..4ca830ee4495 100644 --- a/gcc/testsuite/gcc.dg/debug/dwarf2/inline6.c +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/inline6.c @@ -16,7 +16,7 @@ /* Explicitly use dwarf-5 which uses DW_FORM_implicit_const. */ /* { dg-do compile } */ -/* { dg-options "-O -g3 -gdwarf-5 -gno-strict-dwarf -dA -fgnu89-inline -gno-as-loc-support" } */ +/* { dg-options "-O -g3 -gdwarf-5 -gstatement-frontiers -gvariable-location-views -gno-strict-dwarf -dA -fgnu89-inline -gno-as-loc-support" } */ /* There are 6 inlined subroutines: - One for each subroutine inlined into main, that's 3. diff --git a/gcc/toplev.cc b/gcc/toplev.cc index d26467450e37..5a7656647651 100644 --- a/gcc/toplev.cc +++ b/gcc/toplev.cc @@ -1523,15 +1523,9 @@ process_options () dwarf2out_as_locview_support = false; } - if (!OPTION_SET_P (debug_variable_location_views)) - { - debug_variable_location_views - = (flag_var_tracking - && debug_info_level >= DINFO_LEVEL_NORMAL - && dwarf_debuginfo_p () - && !dwarf_strict); - } - else if (debug_variable_location_views == -1 && dwarf_version != 5) + if (OPTION_SET_P (debug_variable_location_views) + && debug_variable_location_views == -1 + && dwarf_version != 5) { warning_at (UNKNOWN_LOCATION, 0, "without %<-gdwarf-5%>, " -- 2.51.0
