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

Submitted by Mikael Pettersson on March 8, 2011, 9:43 a.m.

Details

Message ID 19829.64093.712016.937815@pilspetsen.it.uu.se
State New
Headers show

Commit Message

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.

Comments

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 hide | download patch | download mbox

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