[arch-commits] Commit in gcc/trunk (PKGBUILD gcc-commit158826.patch)

Ronald van Haren ronald at archlinux.org
Tue Jun 1 18:32:43 UTC 2010


    Date: Tuesday, June 1, 2010 @ 14:32:43
  Author: ronald
Revision: 81596

upgpkg: gcc 4.5.0-4
reverse upstream commit 158826, it causes gcc to create corrupted binaries for khtml FS#19633

Added:
  gcc/trunk/gcc-commit158826.patch
Modified:
  gcc/trunk/PKGBUILD

------------------------+
 PKGBUILD               |   15 ++++--
 gcc-commit158826.patch |  117 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 127 insertions(+), 5 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2010-06-01 18:30:47 UTC (rev 81595)
+++ PKGBUILD	2010-06-01 18:32:43 UTC (rev 81596)
@@ -7,7 +7,7 @@
 
 pkgname=('gcc' 'gcc-libs' 'gcc-fortran' 'gcc-objc' 'gcc-ada')
 pkgver=4.5.0
-pkgrel=3
+pkgrel=4
 _snapshot=4.5-20100520
 _libstdcppmanver=20100312	# Note: check source directory name when updating this
 pkgdesc="The GNU Compiler Collection"
@@ -20,7 +20,8 @@
 	ftp://gcc.gnu.org/pub/gcc/snapshots/${_snapshot}/gcc-{core,g++,fortran,objc,ada}-${_snapshot}.tar.bz2
 	ftp://gcc.gnu.org/pub/gcc/libstdc++/doxygen/libstdc++-man.${_libstdcppmanver}.tar.bz2
 	gcc_pure64.patch
-	gcc-hash-style-both.patch)
+	gcc-hash-style-both.patch
+        gcc-commit158826.patch)
 md5sums=('dc1490dc7f2a75b751c04836a88cf44b'
          'cd082a94fedaf17a89ff6f237d4fa513'
          'a32d7bd7babf3f0c8d96c39675d7feb0'
@@ -28,9 +29,10 @@
          '244487eeb6d9af63c51e5c50fecb8131'
          'f9a21b9dfc174f49a09ddaacfd3ac78f'
          '4030ee1c08dd1e843c0225b772360e76'
-         '6fd395bacbd7b6e47c7b74854b478363')
+         '6fd395bacbd7b6e47c7b74854b478363'
+	 'fad48c68e6898735a9e4b47d84558529')
 
-if [ -n "${_snapshot}" ]; then 
+if [ -n "${_snapshot}" ]; then
   _basedir="${srcdir}/gcc-${_snapshot}"
 else
   _basedir="${srcdir}/gcc-${pkgver}"
@@ -43,7 +45,7 @@
   fi
   
   cd ${_basedir}
-  
+
   # Do not install libiberty
   sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
 
@@ -55,6 +57,9 @@
   fi
   patch -Np0 -i ${srcdir}/gcc-hash-style-both.patch || return 1
 
+  # revert commit 158826, causing creating of broken khtml binaries FS#19633, upstream bug#44258
+  patch -Np2 -R -i ${srcdir}/gcc-commit158826.patch || return 1
+
   echo ${pkgver} > gcc/BASE-VER
 
   mkdir build && cd build      

Added: gcc-commit158826.patch
===================================================================
--- gcc-commit158826.patch	                        (rev 0)
+++ gcc-commit158826.patch	2010-06-01 18:32:43 UTC (rev 81596)
@@ -0,0 +1,117 @@
+--- branches/gcc-4_5-branch/gcc/tree-sra.c	2010/04/23 16:15:39	158674
++++ branches/gcc-4_5-branch/gcc/tree-sra.c	2010/04/28 13:09:56	158826
+@@ -182,6 +182,10 @@
+      access tree.  */
+   unsigned grp_read : 1;
+ 
++  /* Does this group contain a read access that comes from an assignment
++     statement?  This flag is propagated down the access tree.  */
++  unsigned grp_assignment_read : 1;
++
+   /* Other passes of the analysis use this bit to make function
+      analyze_access_subtree create scalar replacements for this group if
+      possible.  */
+@@ -1031,9 +1035,13 @@
+   racc = build_access_from_expr_1 (rhs_ptr, stmt, false);
+   lacc = build_access_from_expr_1 (lhs_ptr, stmt, true);
+ 
+-  if (should_scalarize_away_bitmap && !gimple_has_volatile_ops (stmt)
+-      && racc && !is_gimple_reg_type (racc->type))
+-    bitmap_set_bit (should_scalarize_away_bitmap, DECL_UID (racc->base));
++  if (racc)
++    {
++      racc->grp_assignment_read = 1;
++      if (should_scalarize_away_bitmap && !gimple_has_volatile_ops (stmt)
++	  && !is_gimple_reg_type (racc->type))
++	bitmap_set_bit (should_scalarize_away_bitmap, DECL_UID (racc->base));
++    }
+ 
+   if (lacc && racc
+       && (sra_mode == SRA_MODE_EARLY_INTRA || sra_mode == SRA_MODE_INTRA)
+@@ -1578,6 +1586,7 @@
+       struct access *access = VEC_index (access_p, access_vec, i);
+       bool grp_write = access->write;
+       bool grp_read = !access->write;
++      bool grp_assignment_read = access->grp_assignment_read;
+       bool multiple_reads = false;
+       bool total_scalarization = access->total_scalarization;
+       bool grp_partial_lhs = access->grp_partial_lhs;
+@@ -1611,6 +1620,7 @@
+ 	      else
+ 		grp_read = true;
+ 	    }
++	  grp_assignment_read |= ac2->grp_assignment_read;
+ 	  grp_partial_lhs |= ac2->grp_partial_lhs;
+ 	  unscalarizable_region |= ac2->grp_unscalarizable_region;
+ 	  total_scalarization |= ac2->total_scalarization;
+@@ -1629,6 +1639,7 @@
+       access->group_representative = access;
+       access->grp_write = grp_write;
+       access->grp_read = grp_read;
++      access->grp_assignment_read = grp_assignment_read;
+       access->grp_hint = multiple_reads || total_scalarization;
+       access->grp_partial_lhs = grp_partial_lhs;
+       access->grp_unscalarizable_region = unscalarizable_region;
+@@ -1763,14 +1774,17 @@
+   return false;
+ }
+ 
++enum mark_read_status { SRA_MR_NOT_READ, SRA_MR_READ, SRA_MR_ASSIGN_READ};
++
+ /* Analyze the subtree of accesses rooted in ROOT, scheduling replacements when
+-   both seeming beneficial and when ALLOW_REPLACEMENTS allows it.  Also set
+-   all sorts of access flags appropriately along the way, notably always ser
+-   grp_read when MARK_READ is true and grp_write when MARK_WRITE is true.  */
++   both seeming beneficial and when ALLOW_REPLACEMENTS allows it.  Also set all
++   sorts of access flags appropriately along the way, notably always set
++   grp_read and grp_assign_read according to MARK_READ and grp_write when
++   MARK_WRITE is true.  */
+ 
+ static bool
+ analyze_access_subtree (struct access *root, bool allow_replacements,
+-			bool mark_read, bool mark_write)
++			enum mark_read_status mark_read, bool mark_write)
+ {
+   struct access *child;
+   HOST_WIDE_INT limit = root->offset + root->size;
+@@ -1779,10 +1793,17 @@
+   bool hole = false, sth_created = false;
+   bool direct_read = root->grp_read;
+ 
+-  if (mark_read)
+-    root->grp_read = true;
++  if (mark_read == SRA_MR_ASSIGN_READ)
++    {
++      root->grp_read = 1;
++      root->grp_assignment_read = 1;
++    }
++  if (mark_read == SRA_MR_READ)
++    root->grp_read = 1;
++  else if (root->grp_assignment_read)
++    mark_read = SRA_MR_ASSIGN_READ;
+   else if (root->grp_read)
+-    mark_read = true;
++    mark_read = SRA_MR_READ;
+ 
+   if (mark_write)
+     root->grp_write = true;
+@@ -1811,7 +1832,7 @@
+ 
+   if (allow_replacements && scalar && !root->first_child
+       && (root->grp_hint
+-	  || (direct_read && root->grp_write))
++	  || (root->grp_write && (direct_read || root->grp_assignment_read)))
+       /* We must not ICE later on when trying to build an access to the
+ 	 original data within the aggregate even when it is impossible to do in
+ 	 a defined way like in the PR 42703 testcase.  Therefore we check
+@@ -1856,7 +1877,7 @@
+ 
+   while (access)
+     {
+-      if (analyze_access_subtree (access, true, false, false))
++      if (analyze_access_subtree (access, true, SRA_MR_NOT_READ, false))
+ 	ret = true;
+       access = access->next_grp;
+     }
+
+




More information about the arch-commits mailing list