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: unassig...@gcc.gnu.org ReportedBy: ne...@intrepid.com CC: j...@suse.cz, g...@intrepid.com, phhargr...@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.