middle-end/105461 - opts processing of -fvar-tracking

Message ID 20220503103244.8665C13ABE@imap2.suse-dmz.suse.de
State Committed
Commit 6b4cc784806ac8676a08ecbbeadbd1bfa56073bb
Headers
Series middle-end/105461 - opts processing of -fvar-tracking |

Commit Message

Richard Biener May 3, 2022, 10:32 a.m. UTC
  The flag_var_tracking reset in finish_options doesn't match the
condition in process_options, in particular we fail to reset it
when the option was specified on the command line.  The following
fixes this and also alters the debug info level guard to match
the one in process_options.

Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed to trunk 
sofar.

2022-05-03  Richard Biener  <rguenther@suse.de>

	PR middle-end/105461
	* opts.cc (finish_options): Match the condition to
	disable flag_var_tracking to that of process_options.

	* gcc.dg/pr105461.c: New testcase.
---
 gcc/opts.cc                     |  3 +--
 gcc/testsuite/gcc.dg/pr105461.c | 16 ++++++++++++++++
 2 files changed, 17 insertions(+), 2 deletions(-)
 create mode 100644 gcc/testsuite/gcc.dg/pr105461.c
  

Patch

diff --git a/gcc/opts.cc b/gcc/opts.cc
index 1378ef781d0..2ffbf429b7b 100644
--- a/gcc/opts.cc
+++ b/gcc/opts.cc
@@ -1329,8 +1329,7 @@  finish_options (struct gcc_options *opts, struct gcc_options *opts_set,
 
   /* Note -fvar-tracking is enabled automatically with OPT_LEVELS_1_PLUS and
      so we need to drop it if we are called from optimize attribute.  */
-  if (debug_info_level == DINFO_LEVEL_NONE
-      && !opts_set->x_flag_var_tracking)
+  if (debug_info_level < DINFO_LEVEL_NORMAL)
     flag_var_tracking = false;
 
   /* One could use EnabledBy, but it would lead to a circular dependency.  */
diff --git a/gcc/testsuite/gcc.dg/pr105461.c b/gcc/testsuite/gcc.dg/pr105461.c
new file mode 100644
index 00000000000..1e6743ccac2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr105461.c
@@ -0,0 +1,16 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O2 -fassociative-math -fsignaling-nans -fvar-tracking  -w" } */
+
+int
+bar (float *x, int y)
+{
+  *x = y;
+
+  return *x;
+}
+
+__attribute__ ((optimize ("O2"))) void
+foo (float *x, int y)
+{
+  int a = bar (x, y);
+}