https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105537

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
So the issue is that finish_options consistently produces the
flag_var_tracking = flag_var_tracking_assignments = -1 state but for the
toplev.cc invocation via decode_options we then override this from
process_options with 0 in

  /* We know which debug output will be used so we can set flag_var_tracking
     and flag_var_tracking_uninit if the user has not specified them.  */
  if (debug_info_level < DINFO_LEVEL_NORMAL
      || !dwarf_debuginfo_p ()
      || debug_hooks->var_location == do_nothing_debug_hooks.var_location)
    {
...
      flag_var_tracking = 0;
      flag_var_tracking_uninit = 0;
      flag_var_tracking_assignments = 0;
    }

but that's only done once.  I'll note that finish_options has

  /* One could use EnabledBy, but it would lead to a circular dependency.  */
  if (!opts_set->x_flag_var_tracking_uninit)
    opts->x_flag_var_tracking_uninit = opts->x_flag_var_tracking;

but before the -1 setting but after resetting flag_var_tracking to false
for < DINFO_LEVEL_NORMAL.

Reply via email to