options: Fix variable tracking option processing.
PR debug/102585 PR bootstrap/102766 gcc/ChangeLog: * opts.c (finish_options): Process flag_var_tracking* options here as they can be adjusted by optimize attribute. Process also flag_syntax_only and flag_gtoggle. * toplev.c (process_options): Remove it here. * common.opt: Make debug_nonbind_markers_p as PerFunction attribute as it depends on optimization level. gcc/testsuite/ChangeLog: * gcc.dg/pr102585.c: New test.
This commit is contained in:
parent
701ee06780
commit
b470227661
@ -3284,7 +3284,7 @@ Common Driver JoinedOrMissing Negative(gvms)
|
||||
Generate debug information in extended STABS format.
|
||||
|
||||
gstatement-frontiers
|
||||
Common Driver Var(debug_nonbind_markers_p)
|
||||
Common Driver Var(debug_nonbind_markers_p) PerFunction
|
||||
Emit progressive recommended breakpoint locations.
|
||||
|
||||
gstrict-dwarf
|
||||
|
45
gcc/opts.c
45
gcc/opts.c
@ -1349,6 +1349,51 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set,
|
||||
SET_OPTION_IF_UNSET (opts, opts_set, flag_vect_cost_model,
|
||||
VECT_COST_MODEL_CHEAP);
|
||||
|
||||
/* One could use EnabledBy, but it would lead to a circular dependency. */
|
||||
if (!OPTION_SET_P (flag_var_tracking_uninit))
|
||||
flag_var_tracking_uninit = flag_var_tracking;
|
||||
|
||||
if (!OPTION_SET_P (flag_var_tracking_assignments))
|
||||
flag_var_tracking_assignments
|
||||
= (flag_var_tracking
|
||||
&& !(flag_selective_scheduling || flag_selective_scheduling2));
|
||||
|
||||
if (flag_var_tracking_assignments_toggle)
|
||||
flag_var_tracking_assignments = !flag_var_tracking_assignments;
|
||||
|
||||
if (flag_var_tracking_assignments && !flag_var_tracking)
|
||||
flag_var_tracking = flag_var_tracking_assignments = -1;
|
||||
|
||||
if (flag_var_tracking_assignments
|
||||
&& (flag_selective_scheduling || flag_selective_scheduling2))
|
||||
warning_at (loc, 0,
|
||||
"var-tracking-assignments changes selective scheduling");
|
||||
|
||||
if (flag_syntax_only)
|
||||
{
|
||||
write_symbols = NO_DEBUG;
|
||||
profile_flag = 0;
|
||||
}
|
||||
|
||||
if (flag_gtoggle)
|
||||
{
|
||||
if (debug_info_level == DINFO_LEVEL_NONE)
|
||||
{
|
||||
debug_info_level = DINFO_LEVEL_NORMAL;
|
||||
|
||||
if (write_symbols == NO_DEBUG)
|
||||
write_symbols = PREFERRED_DEBUGGING_TYPE;
|
||||
}
|
||||
else
|
||||
debug_info_level = DINFO_LEVEL_NONE;
|
||||
}
|
||||
|
||||
if (!OPTION_SET_P (debug_nonbind_markers_p))
|
||||
debug_nonbind_markers_p
|
||||
= (optimize
|
||||
&& debug_info_level >= DINFO_LEVEL_NORMAL
|
||||
&& dwarf_debuginfo_p ()
|
||||
&& !(flag_selective_scheduling || flag_selective_scheduling2));
|
||||
}
|
||||
|
||||
#define LEFT_COLUMN 27
|
||||
|
6
gcc/testsuite/gcc.dg/pr102585.c
Normal file
6
gcc/testsuite/gcc.dg/pr102585.c
Normal file
@ -0,0 +1,6 @@
|
||||
/* PR debug/102585 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-fvar-tracking-assignments -fno-var-tracking" } */
|
||||
|
||||
#pragma GCC optimize 0
|
||||
void d_demangle_callback_Og() { int c = 0; }
|
47
gcc/toplev.c
47
gcc/toplev.c
@ -1375,25 +1375,6 @@ process_options (bool no_backend)
|
||||
}
|
||||
}
|
||||
|
||||
if (flag_syntax_only)
|
||||
{
|
||||
write_symbols = NO_DEBUG;
|
||||
profile_flag = 0;
|
||||
}
|
||||
|
||||
if (flag_gtoggle)
|
||||
{
|
||||
if (debug_info_level == DINFO_LEVEL_NONE)
|
||||
{
|
||||
debug_info_level = DINFO_LEVEL_NORMAL;
|
||||
|
||||
if (write_symbols == NO_DEBUG)
|
||||
write_symbols = PREFERRED_DEBUGGING_TYPE;
|
||||
}
|
||||
else
|
||||
debug_info_level = DINFO_LEVEL_NONE;
|
||||
}
|
||||
|
||||
/* CTF is supported for only C at this time. */
|
||||
if (!lang_GNU_C ()
|
||||
&& ctf_debug_info_level > CTFINFO_LEVEL_NONE)
|
||||
@ -1496,6 +1477,7 @@ process_options (bool no_backend)
|
||||
}
|
||||
flag_var_tracking = 0;
|
||||
flag_var_tracking_uninit = 0;
|
||||
flag_var_tracking_assignments = 0;
|
||||
}
|
||||
|
||||
/* The debug hooks are used to implement -fdump-go-spec because it
|
||||
@ -1504,33 +1486,6 @@ process_options (bool no_backend)
|
||||
if (flag_dump_go_spec != NULL)
|
||||
debug_hooks = dump_go_spec_init (flag_dump_go_spec, debug_hooks);
|
||||
|
||||
/* One could use EnabledBy, but it would lead to a circular dependency. */
|
||||
if (!OPTION_SET_P (flag_var_tracking_uninit))
|
||||
flag_var_tracking_uninit = flag_var_tracking;
|
||||
|
||||
if (!OPTION_SET_P (flag_var_tracking_assignments))
|
||||
flag_var_tracking_assignments
|
||||
= (flag_var_tracking
|
||||
&& !(flag_selective_scheduling || flag_selective_scheduling2));
|
||||
|
||||
if (flag_var_tracking_assignments_toggle)
|
||||
flag_var_tracking_assignments = !flag_var_tracking_assignments;
|
||||
|
||||
if (flag_var_tracking_assignments && !flag_var_tracking)
|
||||
flag_var_tracking = flag_var_tracking_assignments = -1;
|
||||
|
||||
if (flag_var_tracking_assignments
|
||||
&& (flag_selective_scheduling || flag_selective_scheduling2))
|
||||
warning_at (UNKNOWN_LOCATION, 0,
|
||||
"var-tracking-assignments changes selective scheduling");
|
||||
|
||||
if (!OPTION_SET_P (debug_nonbind_markers_p))
|
||||
debug_nonbind_markers_p
|
||||
= (optimize
|
||||
&& debug_info_level >= DINFO_LEVEL_NORMAL
|
||||
&& dwarf_debuginfo_p ()
|
||||
&& !(flag_selective_scheduling || flag_selective_scheduling2));
|
||||
|
||||
if (!OPTION_SET_P (dwarf2out_as_loc_support))
|
||||
dwarf2out_as_loc_support = dwarf2out_default_as_loc_support ();
|
||||
if (!OPTION_SET_P (dwarf2out_as_locview_support))
|
||||
|
Loading…
Reference in New Issue
Block a user