[gcc/f15/master] 4.6.0-7

Jakub Jelinek jakub at fedoraproject.org
Mon May 9 11:25:21 UTC 2011


commit 3e27f9e68c8ddad57a1ccff34d51ed5612c94a71
Author: Jakub Jelinek <jakub at redhat.com>
Date:   Mon May 9 13:25:02 2011 +0200

    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(-)
---
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 <jakub at redhat.com> 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 <jakub at redhat.com> 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  <dodji at redhat.com>
+
+	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 <typename T>
++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  <ook at ucw.cz>
+
+	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


More information about the scm-commits mailing list