diff --git a/.gitignore b/.gitignore index 6dbc88f..fe94c82 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ /gcc-4.9.1-20140815.tar.bz2 /gcc-4.9.1-20140912.tar.bz2 /gcc-4.9.1-20140922.tar.bz2 +/gcc-4.9.1-20140930.tar.bz2 diff --git a/gcc.spec b/gcc.spec index ebe81f1..7ea3de4 100644 --- a/gcc.spec +++ b/gcc.spec @@ -1,9 +1,9 @@ -%global DATE 20140922 -%global SVNREV 215456 +%global DATE 20140930 +%global SVNREV 215732 %global gcc_version 4.9.1 # Note, gcc_release must be integer, if you want to add suffixes to # %{release}, append them after %{gcc_release} on Release: line. -%global gcc_release 10 +%global gcc_release 11 %global _unpackaged_files_terminate_build 0 %global _performance_build 1 %global multilib_64_archs sparc64 ppc64 ppc64p7 s390x x86_64 @@ -201,6 +201,7 @@ Patch16: gcc49-libgo-p224.patch Patch17: gcc49-aarch64-async-unw-tables.patch Patch18: gcc49-aarch64-unwind-opt.patch Patch19: gcc49-pr63285.patch +Patch20: gcc49-pr63186.patch Patch1100: cloog-%{cloog_version}-ppc64le-config.patch @@ -730,6 +731,7 @@ rm -f libgo/go/crypto/elliptic/p224{,_test}.go %patch17 -p0 -b .aarch64-async-unw-tables~ %patch18 -p0 -b .aarch64-unwind-opt~ %patch19 -p0 -b .pr63285~ +%patch20 -p0 -b .pr63186~ %if 0%{?_enable_debug_packages} cat > split-debuginfo.sh <<\EOF @@ -2802,6 +2804,14 @@ fi %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/plugin %changelog +* Tue Sep 30 2014 Jakub Jelinek 4.9.1-11 +- update from the 4.9 branch + - PRs c++/61465, c++/62219, c++/63249, inline-asm/63282, middle-end/63247, + plugins/63410, sanitizer/61272, target/49423, target/61407, + target/62218, target/63335, tree-optimization/63341 +- avoid fnsplit if there are forced labels accessed in between the partitions + (#1106758, PR tree-optimization/63186) + * Mon Sep 22 2014 Jakub Jelinek 4.9.1-10 - update from the 4.9 branch - PRs c++/62017, c++/63241, c++/63248, debug/63284, debug/63328, ipa/61654, diff --git a/gcc49-pr63186.patch b/gcc49-pr63186.patch new file mode 100644 index 0000000..ed3dcf9 --- /dev/null +++ b/gcc49-pr63186.patch @@ -0,0 +1,129 @@ +2014-09-10 Jan Hubicka + + PR tree-optimization/63186 + * ipa-split.c (test_nonssa_use): Skip nonforced labels. + (mark_nonssa_use): Likewise. + (verify_non_ssa_vars): Verify all header blocks for label + definitions. + + * gcc.dg/pr63186.c: New testcase. + +--- gcc/ipa-split.c (revision 215148) ++++ gcc/ipa-split.c (revision 215149) +@@ -167,7 +167,11 @@ test_nonssa_use (gimple, tree t, tree, v + || (TREE_CODE (t) == VAR_DECL + && auto_var_in_fn_p (t, current_function_decl)) + || TREE_CODE (t) == RESULT_DECL +- || TREE_CODE (t) == LABEL_DECL) ++ /* Normal labels are part of CFG and will be handled gratefuly. ++ Forced labels however can be used directly by statements and ++ need to stay in one partition along with their uses. */ ++ || (TREE_CODE (t) == LABEL_DECL ++ && FORCED_LABEL (t))) + return bitmap_bit_p ((bitmap)data, DECL_UID (t)); + + /* For DECL_BY_REFERENCE, the return value is actually a pointer. We want +@@ -213,6 +217,7 @@ verify_non_ssa_vars (struct split_point + edge e; + edge_iterator ei; + bool ok = true; ++ basic_block bb; + + FOR_EACH_EDGE (e, ei, current->entry_bb->preds) + if (e->src != ENTRY_BLOCK_PTR_FOR_FN (cfun) +@@ -225,8 +230,8 @@ verify_non_ssa_vars (struct split_point + while (!worklist.is_empty ()) + { + gimple_stmt_iterator bsi; +- basic_block bb = worklist.pop (); + ++ bb = worklist.pop (); + FOR_EACH_EDGE (e, ei, bb->preds) + if (e->src != ENTRY_BLOCK_PTR_FOR_FN (cfun) + && bitmap_set_bit (seen, e->src->index)) +@@ -250,10 +255,10 @@ verify_non_ssa_vars (struct split_point + if (gimple_code (stmt) == GIMPLE_LABEL + && test_nonssa_use (stmt, gimple_label_label (stmt), + NULL_TREE, non_ssa_vars)) +- { +- ok = false; +- goto done; +- } ++ { ++ ok = false; ++ goto done; ++ } + } + for (bsi = gsi_start_phis (bb); !gsi_end_p (bsi); gsi_next (&bsi)) + { +@@ -286,6 +291,27 @@ verify_non_ssa_vars (struct split_point + } + } + } ++ ++ /* Verify that the rest of function does not define any label ++ used by the split part. */ ++ FOR_EACH_BB_FN (bb, cfun) ++ if (!bitmap_bit_p (current->split_bbs, bb->index) ++ && !bitmap_bit_p (seen, bb->index)) ++ { ++ gimple_stmt_iterator bsi; ++ for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi); gsi_next (&bsi)) ++ if (gimple_code (gsi_stmt (bsi)) == GIMPLE_LABEL ++ && test_nonssa_use (gsi_stmt (bsi), ++ gimple_label_label (gsi_stmt (bsi)), ++ NULL_TREE, non_ssa_vars)) ++ { ++ ok = false; ++ goto done; ++ } ++ else if (gimple_code (gsi_stmt (bsi)) != GIMPLE_LABEL) ++ break; ++ } ++ + done: + BITMAP_FREE (seen); + worklist.release (); +@@ -735,7 +761,8 @@ mark_nonssa_use (gimple, tree t, tree, v + if ((TREE_CODE (t) == VAR_DECL + && auto_var_in_fn_p (t, current_function_decl)) + || TREE_CODE (t) == RESULT_DECL +- || TREE_CODE (t) == LABEL_DECL) ++ || (TREE_CODE (t) == LABEL_DECL ++ && FORCED_LABEL (t))) + bitmap_set_bit ((bitmap)data, DECL_UID (t)); + + /* For DECL_BY_REFERENCE, the return value is actually a pointer. We want +--- gcc/testsuite/gcc.dg/pr63186.c (revision 0) ++++ gcc/testsuite/gcc.dg/pr63186.c (revision 215149) +@@ -0,0 +1,30 @@ ++/* { dg-do link } */ ++/* { dg-options "-O2" } */ ++void *a; ++int b, c, d; ++ ++void ++bar () ++{ ++ switch (c) ++ { ++ case 0: ++ lab: ++ __asm__ (""); ++ return; ++ default: ++ break; ++ } ++ b = 0; ++ d = 0; ++ a = &&lab; ++} ++ ++void ++foo () ++{ ++ bar (); ++} ++main() ++{ ++} diff --git a/sources b/sources index ecf1397..d059d61 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ e34fca0540d840e5d0f6427e98c92252 cloog-0.18.1.tar.gz -2293d26b82a5fef7f8beff816ee424c8 gcc-4.9.1-20140922.tar.bz2 +34bc914fdab7381cc4371b317880d1ed gcc-4.9.1-20140930.tar.bz2 e039bfcfb6c2ab039b8ee69bf883e824 isl-0.12.2.tar.bz2