Hi,
this is a regression present on the mainline and 4.7 branch. -fvar-tracking
is automatically enabled on Darwin when -g is passed, including at -O0. This
results in bloated and incomplete debug info.
This comes from a latent issue in the handling of flag_var_tracking_uninit in
the Darwin back-end, which wasn't updated for the new option machinery.
Tested on x86_64-apple-darwin10.8.0, OK for mainline and 4.7 branch?
2012-11-09 Eric Botcazou <ebotca...@adacore.com>
* common.opt (fvar-tracking-uninit): Document.
* toplev.c (process_options): Fix handling of flag_var_tracking_uninit.
* config/darwin.c (darwin_override_options): Likewise.
--
Eric Botcazou
Index: toplev.c
===================================================================
--- toplev.c (revision 193322)
+++ toplev.c (working copy)
@@ -1416,12 +1416,15 @@ process_options (void)
/* If the user specifically requested variable tracking with tagging
uninitialized variables, we need to turn on variable tracking.
(We already determined above that variable tracking is feasible.) */
- if (flag_var_tracking_uninit)
+ if (flag_var_tracking_uninit == 1)
flag_var_tracking = 1;
if (flag_var_tracking == AUTODETECT_VALUE)
flag_var_tracking = optimize >= 1;
+ if (flag_var_tracking_uninit == AUTODETECT_VALUE)
+ flag_var_tracking_uninit = flag_var_tracking;
+
if (flag_var_tracking_assignments == AUTODETECT_VALUE)
flag_var_tracking_assignments = flag_var_tracking
&& !(flag_selective_scheduling || flag_selective_scheduling2);
Index: common.opt
===================================================================
--- common.opt (revision 193322)
+++ common.opt (working copy)
@@ -2189,6 +2189,10 @@ fvar-tracking-assignments-toggle
Common Report Var(flag_var_tracking_assignments_toggle) Optimization
Toggle -fvar-tracking-assignments
+; Positive if we should track uninitialized variables, negative if
+; we should run the var-tracking pass only to discard debug
+; annotations. When flag_var_tracking_uninit == AUTODETECT_VALUE it
+; will be set according to flag_var_tracking.
fvar-tracking-uninit
Common Report Var(flag_var_tracking_uninit) Optimization
Perform variable tracking and also tag variables that are uninitialized
Index: config/darwin.c
===================================================================
--- config/darwin.c (revision 193322)
+++ config/darwin.c (working copy)
@@ -3038,12 +3038,12 @@ darwin_override_options (void)
darwin_emit_branch_islands = true;
}
- if (flag_var_tracking
+ if (flag_var_tracking_uninit == 0
&& generating_for_darwin_version >= 9
&& (flag_gtoggle ? (debug_info_level == DINFO_LEVEL_NONE)
: (debug_info_level >= DINFO_LEVEL_NORMAL))
&& write_symbols == DWARF2_DEBUG)
- flag_var_tracking_uninit = 1;
+ flag_var_tracking_uninit = flag_var_tracking;
if (MACHO_DYNAMIC_NO_PIC_P)
{