During bootstrap line 3072 of varasm.c generates a warning that
        shift >= width of type, and the build dies due to -Werror.
        This diagnosis is correct but the shift is unreachable.

Environment:
System: Linux dps 2.6.15 #2 PREEMPT Sat Jan 7 17:47:27 GMT 2006 i686 GNU/Linux
Architecture: i686
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: ../gcc/configure --prefix=/usr --enable-shared
--cache-file=config.cache

How-To-Repeat:
        bootstrap with HOST_WIDE_INT intendical to unsinged int (e.g.
        almost any 32 bit x86 box).


------- Comment #1 from dps at simpson dot demon dot co dot uk  2006-03-14 
14:24 -------
Fix:
        This patch uses reprocessor logic to elinminate the (harmless,
        without -Werrror, warning. 
--- gcc/varasm.c.dist   2006-03-08 11:53:25.000000000 +0000
+++ gcc/varasm.c        2006-03-14 14:12:15.000000000 +0000
@@ -3067,11 +3067,16 @@
        int i;

        h ^= (hashval_t) hwi;
+#if HOST_BITS_PER_WIDE_INT != SIZEOF_UNSIGNED_INT * CHAR_BIT
+       /* Leaving this in emits a warning, so stop compilation, if n=1 */
        for (i = 1; i < n; ++i)
          {
            hwi >>= shift;
            h ^= (hashval_t) hwi;
          }
+#else
+       i=shift; i=n; /* Squash compiler warnings */
+#endif
       }
       break;

--- gcc/configure.ac.dist       2006-03-08 11:53:25.000000000 +0000
+++ gcc/configure.ac    2006-03-14 02:37:17.000000000 +0000
@@ -289,6 +289,7 @@
 AC_CHECK_SIZEOF(void *)
 AC_CHECK_SIZEOF(short)
 AC_CHECK_SIZEOF(int)
+AC_CHECK_SIZEOF(unsigned int)
 AC_CHECK_SIZEOF(long)
 AC_CHECK_TYPES([long long], [AC_CHECK_SIZEOF(long long)])
 AC_CHECK_TYPES([__int64], [AC_CHECK_SIZEOF(__int64)])
--- gcc/config.in.dist  2006-03-08 11:53:25.000000000 +0000
+++ gcc/config.in       2006-03-14 02:41:09.000000000 +0000
@@ -1240,6 +1240,11 @@
 #undef SIZEOF_INT
 #endif

+/* The size of a `usigned int` as computed by sizeof. */
+#ifndef USED_FOR_TARGET
+#undef SIZEOF_UNSIGNED_INT
+#endif
+

 /* The size of a `long', as computed by sizeof. */
 #ifndef USED_FOR_TARGET


-- 
           Summary: boostrap failure due to warning in gcc/varasm.c
           Product: gcc
           Version: 2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: bootstrap
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: dps at simpson dot demon dot co dot uk
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26679

Reply via email to