]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
middle-end/105461 - opts processing of -fvar-tracking
authorRichard Biener <rguenther@suse.de>
Tue, 3 May 2022 08:36:30 +0000 (10:36 +0200)
committerRichard Biener <rguenther@suse.de>
Tue, 3 May 2022 09:19:20 +0000 (11:19 +0200)
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.

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
gcc/testsuite/gcc.dg/pr105461.c [new file with mode: 0644]

index 1378ef781d089092adc5fcd7488027c582e43383..2ffbf429b7b8f4234f69e34c7ad9f15cd2cfafa9 100644 (file)
@@ -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 (file)
index 0000000..1e6743c
--- /dev/null
@@ -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);
+}