From 1b13a6e0dc2f61fc26ebfd33ee8549da45286f34 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Tue, 3 May 2022 10:36:30 +0200 Subject: [PATCH] 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 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. (cherry picked from commit 6b4cc784806ac8676a08ecbbeadbd1bfa56073bb) --- 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 diff --git a/gcc/opts.cc b/gcc/opts.cc index 1378ef7..2ffbf42 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 0000000..1e6743c --- /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); +} -- 2.7.4