aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIain Sandoe <iain@codesourcery.com>2014-01-05 21:47:43 +0000
committerIain Sandoe <iains@gcc.gnu.org>2014-01-05 21:47:43 +0000
commite0c70bd7274fff77833da4d359df4c8694912609 (patch)
treedf51baabc67181372ee80c2a0caba3e693ed3dfa
parentc8cc8a5e42746656b5d20e25638fbade432bc019 (diff)
downloadgcc-e0c70bd7274fff77833da4d359df4c8694912609.zip
gcc-e0c70bd7274fff77833da4d359df4c8694912609.tar.gz
gcc-e0c70bd7274fff77833da4d359df4c8694912609.tar.bz2
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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/darwin.c75
2 files changed, 33 insertions, 48 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 600c24b..1969671 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2014-01-05 Iain Sandoe <iain@codesourcery.com>
+
+ 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 <ubizjak@gmail.com>
* config/i386/i386.c (ix86_data_alignment): Calculate max_align
diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c
index 63a385c..adf370d 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