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

Reply via email to