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

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.
This commit is contained in:
Richard Biener 2022-05-03 10:36:30 +02:00
parent 99f55024b0
commit 6b4cc78480
2 changed files with 17 additions and 2 deletions

View 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. */

View File

@ -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);
}