This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/49743] New: -g enables var_tracking on -O0 - causes long compilations
- From: "nenad at intrepid dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 14 Jul 2011 02:36:17 +0000
- Subject: [Bug c/49743] New: -g enables var_tracking on -O0 - causes long compilations
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49743
Summary: -g enables var_tracking on -O0 - causes long
compilations
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: nenad@intrepid.com
CC: jh@suse.cz, gary@intrepid.com, PHHargrove@lbl.gov
Host: x86_64-apple-darwin10.8.0
Target: x86_64-apple-darwin10.8.0
I have a test program written in UPC that takes a long time to compile on Mac
OS X. This is caused by the var_tracking code that I think is getting
erroneously enabled for no-optimization case - only "-g" option is used on a
command line.
When process_options (in toplevel.c) is called, flag_var_tracking has a value
of 2 which is AUTODETECT_VALUE, and is getting set based on the optimization
level:
1466 if (flag_var_tracking == AUTODETECT_VALUE)
1467 flag_var_tracking = optimize >= 1;
For x86_64 on Linux box this would set flag_var_tracking to 0.
However, for Darwin, "target_option.override" is used and
darwin_override_options() is called at the beginning of the
process_options() and this code is getting executed (darwin.c):
2929 if (flag_var_tracking
2930 && generating_for_darwin_version >= 9
2931 && (flag_gtoggle ? (debug_info_level == DINFO_LEVEL_NONE)
2932 : (debug_info_level >= DINFO_LEVEL_NORMAL))
2933 && write_symbols == DWARF2_DEBUG)
2934 flag_var_tracking_uninit = 1;
The above will set "flag_var_tracking_uninit" as all conditions are there:
flag_var_tracking == 2
generating_for_darwin_version == 10
debug_info_level >= DINFO_LEVEL_NORMAL
write_symbols == DWARF2_DEBUG
Once code returns to process_options:
1460 /* If the user specifically requested variable tracking with tagging
1461 uninitialized variables, we need to turn on variable tracking.
1462 (We already determined above that variable tracking is feasible.) */
1463 if (flag_var_tracking_uninit)
1464 flag_var_tracking = 1;
1465
1466 if (flag_var_tracking == AUTODETECT_VALUE)
1467 flag_var_tracking = optimize >= 1;
flag_var_tracking is getting unconditionally set based debug level (not
optimization).
The net effect is that for Darwin, var_tracking is always enabled, even for the
optim level of 0.
If I specify "-g -fvar-tracking" on the Linux x86_64 box I also get long
compile times on my test.
I think that var_tracking needs to be disabled on -O0.