From 5636c0d8a1a4948e06cedef5e4b0bb7065082b8b Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Aug 18 2006 08:02:11 +0000 Subject: 4.1.1-18 --- diff --git a/.cvsignore b/.cvsignore index 4ef9c16..86100af 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -gcc-4.1.1-20060816.tar.bz2 +gcc-4.1.1-20060818.tar.bz2 diff --git a/gcc41-pr27898.patch b/gcc41-pr27898.patch index 9e11955..86bf862 100644 --- a/gcc41-pr27898.patch +++ b/gcc41-pr27898.patch @@ -22,13 +22,13 @@ +extern int foo (union u *); --- gcc/c-typeck.c.jj 2006-08-17 09:55:11.000000000 +0200 +++ gcc/c-typeck.c 2006-08-18 09:14:15.000000000 +0200 -@@ -1126,11 +1126,12 @@ tagged_types_tu_compatible_p (tree t1, t +@@ -1072,11 +1072,12 @@ tagged_types_tu_compatible_p (tree t1, t { int result; - -- + +- - if (DECL_NAME (s1) == NULL -- || DECL_NAME (s1) != DECL_NAME (s2)) +- || DECL_NAME (s1) != DECL_NAME (s2)) + if (DECL_NAME (s1) != DECL_NAME (s2)) break; result = comptypes_internal (TREE_TYPE (s1), TREE_TYPE (s2)); @@ -38,7 +38,7 @@ if (result == 0) { tu->val = 0; -@@ -1157,28 +1158,31 @@ tagged_types_tu_compatible_p (tree t1, t +@@ -1103,28 +1104,31 @@ tagged_types_tu_compatible_p (tree t1, t { bool ok = false; diff --git a/gcc41-pr28755.patch b/gcc41-pr28755.patch new file mode 100644 index 0000000..bef8ce8 --- /dev/null +++ b/gcc41-pr28755.patch @@ -0,0 +1,64 @@ +2006-08-17 Jakub Jelinek + + PR middle-end/28755 + * expr.c (expand_expr_real_1) : Make sure + the const array field optimization doesn't create an extra constant + MEM. + + * gcc.dg/pr28755.c: New test. + +--- gcc/expr.c.jj 2006-08-09 17:54:03.000000000 +0200 ++++ gcc/expr.c 2006-08-17 13:00:33.000000000 +0200 +@@ -7105,13 +7105,25 @@ expand_expr_real_1 (tree exp, rtx target + field, value) + if (tree_int_cst_equal (field, index)) + { +- if (!TREE_SIDE_EFFECTS (value)) ++ if (TREE_SIDE_EFFECTS (value)) ++ break; ++ ++ if (TREE_CODE (value) != CONSTRUCTOR) + return expand_expr (fold (value), target, tmode, + modifier); ++ ++ /* For CONSTRUCTOR this optimization is not always ++ a win - if expand_expr creates a temporary ++ constant, we just waste unnecessarily rodata ++ space. */ ++ temp = expand_expr (value, target, tmode, modifier); ++ if (temp == target ++ || (temp && GET_CODE (temp) != MEM)) ++ return temp; + break; + } + } +- else if(TREE_CODE (init) == STRING_CST) ++ else if (TREE_CODE (init) == STRING_CST) + { + tree index1 = index; + tree low_bound = array_ref_low_bound (exp); +--- gcc/testsuite/gcc.dg/pr28755.c.jj 2006-08-17 12:59:57.000000000 +0200 ++++ gcc/testsuite/gcc.dg/pr28755.c 2006-08-17 12:59:57.000000000 +0200 +@@ -0,0 +1,22 @@ ++/* PR middle-end/28755 */ ++/* { dg-do compile } */ ++/* { dg-options "-Os" } */ ++/* { dg-final { scan-assembler-times "2112543726\|7deadbee" 2 } } */ ++ ++struct S ++{ ++ void *s1; ++ unsigned s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14; ++}; ++ ++const struct S array[] = { ++ { (void *) 0, 60, 640, 2112543726, 39682, 48, 16, 33, 10, 96, 2, 0, 0, 4 }, ++ { (void *) 0, 60, 2112543726, 192, 18251, 16, 33, 10, 96, 2, 0, 0, 4, 212 } ++}; ++ ++void ++foo (struct S *x) ++{ ++ x[0] = array[0]; ++ x[5] = array[1]; ++} diff --git a/gcc41.spec b/gcc41.spec index 4fd6193..98104f6 100644 --- a/gcc41.spec +++ b/gcc41.spec @@ -1,6 +1,6 @@ -%define DATE 20060816 +%define DATE 20060818 %define gcc_version 4.1.1 -%define gcc_release 17 +%define gcc_release 18 %define _unpackaged_files_terminate_build 0 %define multilib_64_archs sparc64 ppc64 s390x x86_64 %ifarch %{ix86} x86_64 ia64 @@ -144,6 +144,8 @@ Patch36: gcc41-pr28725.patch Patch37: gcc41-pr28709.patch Patch38: gcc41-pr28744.patch Patch39: gcc41-x86_64-kernel-ssp.patch +Patch40: gcc41-pr28755.patch +Patch41: gcc41-pr27898.patch %define _gnu %{nil} %ifarch sparc @@ -464,6 +466,8 @@ which are required to run programs compiled with the GNAT. %patch37 -p0 -b .pr28709~ %patch38 -p0 -b .pr28744~ %patch39 -p0 -b .x86_64-kernel-ssp~ +%patch40 -p0 -b .pr28755~ +%patch41 -p0 -b .pr27898~ sed -i -e 's/4\.1\.2/4.1.1/' gcc/BASE-VER gcc/version.c sed -i -e 's/" (Red Hat[^)]*)"/" (Red Hat %{version}-%{gcc_release})"/' gcc/version.c @@ -1524,6 +1528,17 @@ fi %doc rpm.doc/changelogs/libmudflap/ChangeLog* %changelog +* Fri Aug 18 2006 Jakub Jelinek 4.1.1-18 +- update from gcc-4_1-branch (-r116176:116223) + - PRs c++/28593, c++/28606, c++/28710, c/27697, middle-end/20256, + middle-end/25211, middle-end/26435 +- don't waste .rodata space when copying from const array with large + entries (PR middle-end/28755) +- fix --combine with anonymous structures in unions (Alexandre Oliva, + PR c/27898) +- rebuilt with latest binutils to pick up 64K -z commonpagesize on ppc* + (#203001) + * Wed Aug 16 2006 Jakub Jelinek 4.1.1-17 - update from gcc-4_1-branch (-r116082:116176) - PRs c++/27894, c++/28677, c/28649, middle-end/28075, diff --git a/sources b/sources index 5fa5b15..afcea7e 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -3743f891cb127e18bca681d57c07a2c0 gcc-4.1.1-20060816.tar.bz2 +6c13068f0da00ac2e7fcef129cc6e555 gcc-4.1.1-20060818.tar.bz2