From 3e27f9e68c8ddad57a1ccff34d51ed5612c94a71 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 9 May 2011 13:25:02 +0200 Subject: [PATCH] 4.6.0-7 --- .gitignore | 1 + gcc.spec | 23 +++++++++++++++--- gcc46-pr48574.patch | 47 ++++++++++++++++++++++++++++++++++++ gcc46-pr48837.patch | 58 +++++++++++++++++++++++++++++++++++++++++++++ sources | 2 +- 5 files changed, 127 insertions(+), 4 deletions(-) create mode 100644 gcc46-pr48574.patch create mode 100644 gcc46-pr48837.patch diff --git a/.gitignore b/.gitignore index d01a749..1f3670b 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ /gcc-4.6.0-20110413.tar.bz2 /gcc-4.6.0-20110419.tar.bz2 /gcc-4.6.0-20110428.tar.bz2 +/gcc-4.6.0-20110509.tar.bz2 diff --git a/gcc.spec b/gcc.spec index 2c325c0..8508898 100644 --- a/gcc.spec +++ b/gcc.spec @@ -1,9 +1,9 @@ -%global DATE 20110428 -%global SVNREV 173071 +%global DATE 20110509 +%global SVNREV 173563 %global gcc_version 4.6.0 # 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 6 +%global gcc_release 7 %global _unpackaged_files_terminate_build 0 %global multilib_64_archs sparc64 ppc64 s390x x86_64 %ifarch %{ix86} x86_64 ia64 ppc ppc64 alpha @@ -170,6 +170,8 @@ Patch15: gcc46-libstdc++-docs.patch Patch17: gcc46-no-add-needed.patch Patch18: gcc46-ppl-0.10.patch Patch19: gcc46-pr47858.patch +Patch20: gcc46-pr48574.patch +Patch21: gcc46-pr48837.patch Patch1000: fastjar-0.97-segfault.patch Patch1001: fastjar-0.97-len1.patch @@ -603,6 +605,8 @@ not stable, so plugins must be rebuilt any time GCC is updated. %patch18 -p0 -b .ppl-0.10~ %endif %patch19 -p0 -b .pr47858~ +%patch20 -p0 -b .pr48574~ +%patch21 -p0 -b .pr48837~ # This testcase doesn't compile. rm libjava/testsuite/libjava.lang/PR35020* @@ -2342,6 +2346,19 @@ fi %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/plugin %changelog +* Mon May 9 2011 Jakub Jelinek 4.6.0-7 +- update from the 4.6 branch + - PRs ada/48844, c++/40975, c++/48089, c++/48446, c++/48656, c++/48749, + c++/48838, c++/48909, c++/48911, fortran/48112, fortran/48279, + fortran/48462, fortran/48720, fortran/48746, fortran/48788, + fortran/48800, fortran/48810, fortran/48894, libgfortran/48030, + libstdc++/48750, libstdc++/48760, lto/48846, middle-end/48597, + preprocessor/48192, target/48226, target/48252, target/48262, + target/48774, target/48900, tree-optimization/48809 +- fix ICE with references in templates (PR c++/48574) +- disable tail call optimization if tail recursion needs accumulators + (PR PR tree-optimization/48837) + * Thu Apr 28 2011 Jakub Jelinek 4.6.0-6 - update from the 4.6 branch - PRs c++/42687, c++/46304, c++/48046, c++/48657, c++/48707, c++/48726, diff --git a/gcc46-pr48574.patch b/gcc46-pr48574.patch new file mode 100644 index 0000000..620cd43 --- /dev/null +++ b/gcc46-pr48574.patch @@ -0,0 +1,47 @@ +2011-05-06 Dodji Seketeli + + PR c++/48574 + * class.c (fixed_type_or_null): Use type_dependent_p_push to test if + the instance has a dependent initializer. + + * g++.dg/template/dependent-expr8.C: New test case. + +--- gcc/cp/class.c ++++ gcc/cp/class.c +@@ -5939,7 +5939,7 @@ fixed_type_or_null (tree instance, int *nonnull, int *cdtorp) + itself. */ + if (TREE_CODE (instance) == VAR_DECL + && DECL_INITIAL (instance) +- && !type_dependent_expression_p (DECL_INITIAL (instance)) ++ && !type_dependent_expression_p_push (DECL_INITIAL (instance)) + && !htab_find (ht, instance)) + { + tree type; +--- gcc/testsuite/g++.dg/template/dependent-expr8.C ++++ gcc/testsuite/g++.dg/template/dependent-expr8.C +@@ -0,0 +1,25 @@ ++// Origin PR c++/48574 ++// { dg-options "-std=c++0x" } ++// { dg-do compile } ++ ++struct A ++{ ++ virtual int foo(); ++}; ++ ++void baz (int); ++ ++template ++void ++bar(T x) ++{ ++ A &b = *x; ++ baz (b.foo ()); ++} ++ ++void ++foo() ++{ ++ A a; ++ bar(&a); ++} diff --git a/gcc46-pr48837.patch b/gcc46-pr48837.patch new file mode 100644 index 0000000..1498478 --- /dev/null +++ b/gcc46-pr48837.patch @@ -0,0 +1,58 @@ +2011-05-07 Zdenek Dvorak + + PR tree-optimization/48837 + * tree-tailcall.c (tree_optimize_tail_calls_1): Do not mark tailcalls + when accumulator transformation is performed. + + * gcc.dg/pr48837.c: New testcase. + +--- gcc/tree-tailcall.c (revision 173533) ++++ gcc/tree-tailcall.c (revision 173534) +@@ -1021,6 +1021,14 @@ tree_optimize_tail_calls_1 (bool opt_tai + integer_one_node); + } + ++ if (a_acc || m_acc) ++ { ++ /* When the tail call elimination using accumulators is performed, ++ statements adding the accumulated value are inserted at all exits. ++ This turns all other tail calls to non-tail ones. */ ++ opt_tailcalls = false; ++ } ++ + for (; tailcalls; tailcalls = next) + { + next = tailcalls->next; +--- gcc/testsuite/gcc.dg/pr48837.c (revision 0) ++++ gcc/testsuite/gcc.dg/pr48837.c (revision 173534) +@@ -0,0 +1,30 @@ ++/* PR tree-optimization/48837 */ ++/* { dg-do run } */ ++/* { dg-options "-O2" } */ ++ ++void abort (void); ++ ++__attribute__((noinline)) ++int baz(void) ++{ ++ return 1; ++} ++ ++inline const int *bar(const int *a, const int *b) ++{ ++ return *a ? a : b; ++} ++ ++int foo(int a, int b) ++{ ++ return a || b ? baz() : foo(*bar(&a, &b), 1) + foo(1, 0); ++} ++ ++int main(void) ++{ ++ if (foo(0, 0) != 2) ++ abort(); ++ ++ return 0; ++} ++ diff --git a/sources b/sources index 65afbaf..239e915 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ 2659f09c2e43ef8b7d4406321753f1b2 fastjar-0.97.tar.gz -be7ba999b28a132aa8d82e6146038a58 gcc-4.6.0-20110428.tar.bz2 +9ed94a5e9644951bf4b5ddef37799df2 gcc-4.6.0-20110509.tar.bz2