[PATCH] unbreak gcc.dg/tree-ssa/ssa-ccp-33.c on m68k (PR testsuite/47954)

Mikael Pettersson mikpe@it.uu.se
Tue Mar 8 09:44:00 GMT 2011


gcc.dg/tree-ssa/ssa-ccp-33.c fails with gcc trunk on m68k-linux:

ssa-ccp-33.c:(.text+0x2a): undefined reference to `link_error'
ssa-ccp-33.c:(.text+0x2a): undefined reference to `link_error'
FAIL: gcc.dg/tree-ssa/ssa-ccp-33.c (test for excess errors)
ssa-ccp-33.c:(.text+0x2a): undefined reference to `link_error'

The test case checks that the compiler is able to eliminate a
runtime check that an aligned pointer-to-int remains aligned after
a loop of increments.  It uses sizeof to compute the alignment
of int, but on m68k (and possibly others) the alignment of int
is less than its size.  The compiler is then unable to eliminate
the broken alignment check, and the call to link_error () is not
removed.

Fixed by using __alignof__ instead.  Regression tested on m68k-linux
where it eliminated the FAIL for gcc.dg/tree-ssa/ssa-ccp-33.c.
Also tested on i686-linux, no changes there.

Ok for trunk?

(Richard G. pre-approved this change on the PR entry, however I
cannot commit it myself.)

gcc/testsuite/

2011-03-08  Mikael Pettersson  <mikpe@it.uu.se>

	PR testsuite/47954
	* gcc.dg/tree-ssa/ssa-ccp-33.c: Use __alignof__ not
	sizeof to compute alignment.

--- gcc-4.6-20110305/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-33.c.~1~	2010-08-06 13:47:31.000000000 +0200
+++ gcc-4.6-20110305/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-33.c	2011-03-08 10:34:13.000000000 +0100
@@ -8,7 +8,7 @@ void foo(int n)
   int *p;
   for (p = a; n != 0; --n, ++p)
     ;
-  if ((__SIZE_TYPE__)p & (sizeof (int) - 1))
+  if ((__SIZE_TYPE__)p & (__alignof__ (int) - 1))
     link_error ();
 }
 int main()



More information about the Gcc-patches mailing list