From: Iain Sandoe Date: Sun, 5 Jan 2014 21:47:43 +0000 (+0000) Subject: re PR bootstrap/59541 (Revision 206070 breaks bootstrap on Darwin: config/darwin... X-Git-Tag: releases/gcc-4.9.0~1832 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e0c70bd7274fff77833da4d359df4c8694912609;p=thirdparty%2Fgcc.git re PR bootstrap/59541 (Revision 206070 breaks bootstrap on Darwin: config/darwin.c:3665:1: error: control reaches end of non-void function [-Werror=return-type]) gcc: PR bootstrap/59541 * config/darwin.c (darwin_function_section): Adjust return values to correspond to optimisation changes made in r206070. From-SVN: r206348 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 600c24bed733..1969671af12a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-01-05 Iain Sandoe + + PR bootstrap/59541 + * config/darwin.c (darwin_function_section): Adjust return values to + correspond to optimisation changes made in r206070. + 2014-01-05 Uros Bizjak * config/i386/i386.c (ix86_data_alignment): Calculate max_align diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c index 63a385c49b88..adf370d4d072 100644 --- a/gcc/config/darwin.c +++ b/gcc/config/darwin.c @@ -3611,57 +3611,36 @@ darwin_function_section (tree decl, enum node_frequency freq, if (decl && DECL_SECTION_NAME (decl) != NULL_TREE) return get_named_section (decl, NULL, 0); - /* Default when there is no function re-ordering. */ - if (!flag_reorder_functions) - return (weak) - ? darwin_sections[text_coal_section] - : text_section; - - /* Startup code should go to startup subsection unless it is - unlikely executed (this happens especially with function splitting - where we can split away unnecessary parts of static constructors). */ - if (startup && freq != NODE_FREQUENCY_UNLIKELY_EXECUTED) - { - /* If we do have a profile or(and) LTO phase is executed, we do not need - these ELF section. */ - if (!in_lto_p || !flag_profile_values) - return (weak) - ? darwin_sections[text_startup_coal_section] - : darwin_sections[text_startup_section]; - else - return text_section; - } + /* We always put unlikely executed stuff in the cold section. */ + if (freq == NODE_FREQUENCY_UNLIKELY_EXECUTED) + return (weak) ? darwin_sections[text_cold_coal_section] + : darwin_sections[text_cold_section]; + + /* If we have LTO *and* feedback information, then let LTO handle + the function ordering, it makes a better job (for normal, hot, + startup and exit - hence the bailout for cold above). */ + if (in_lto_p && flag_profile_values) + goto default_function_sections; + + /* Non-cold startup code should go to startup subsection. */ + if (startup) + return (weak) ? darwin_sections[text_startup_coal_section] + : darwin_sections[text_startup_section]; /* Similarly for exit. */ - if (exit && freq != NODE_FREQUENCY_UNLIKELY_EXECUTED) - return (weak) - ? darwin_sections[text_exit_coal_section] - : darwin_sections[text_exit_section]; - - /* Group cold functions together, similarly for hot code. */ - switch (freq) - { - case NODE_FREQUENCY_UNLIKELY_EXECUTED: - return (weak) - ? darwin_sections[text_cold_coal_section] - : darwin_sections[text_cold_section]; - break; - case NODE_FREQUENCY_HOT: - { - /* If we do have a profile or(and) LTO phase is executed, we do not need - these ELF section. */ - if (!in_lto_p || !flag_profile_values) - return (weak) - ? darwin_sections[text_hot_coal_section] - : darwin_sections[text_hot_section]; - break; - } - default: - return (weak) - ? darwin_sections[text_coal_section] + if (exit) + return (weak) ? darwin_sections[text_exit_coal_section] + : darwin_sections[text_exit_section]; + + /* Place hot code. */ + if (freq == NODE_FREQUENCY_HOT) + return (weak) ? darwin_sections[text_hot_coal_section] + : darwin_sections[text_hot_section]; + + /* Otherwise, default to the 'normal' non-reordered sections. */ +default_function_sections: + return (weak) ? darwin_sections[text_coal_section] : text_section; - break; - } } /* When a function is partitioned between sections, we need to insert a label