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

login
register
mail settings
Submitter Mikael Pettersson
Date March 8, 2011, 9:43 a.m.
Message ID <19829.64093.712016.937815@pilspetsen.it.uu.se>
Download mbox | patch
Permalink /patch/85946/
State New
Headers show

Comments

Mikael Pettersson - March 8, 2011, 9:43 a.m.
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.
Richard Guenther - March 8, 2011, 10:45 a.m.
On Tue, Mar 8, 2011 at 10:43 AM, Mikael Pettersson <mikpe@it.uu.se> wrote:
> 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.)

Committed.
Richard.

> 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()
>
Mikael Pettersson - March 8, 2011, 12:49 p.m.
Richard Guenther writes:
 > On Tue, Mar 8, 2011 at 10:43 AM, Mikael Pettersson <mikpe@it.uu.se> wrote:
 > > 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.)
 > 
 > Committed.
 > Richard.

Thanks!

Patch

--- 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()