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.