Message ID | 19829.64093.712016.937815@pilspetsen.it.uu.se |
---|---|
State | New |
Headers | show |
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() >
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!
--- 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()