http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47148
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Keywords| |wrong-code
Last reconfirmed| |2011.01.01 20:07:21
Component|c |tree-optimization
CC| |hubicka at gcc dot gnu.org,
| |jakub at gcc dot gnu.org
Ever Confirmed|0 |1
Summary|likely wrong code bug |[4.6 Regression] likely
| |wrong code bug
Target Milestone|--- |4.6.0
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-01-01
20:07:21 UTC ---
/* PR tree-optimization/47148 */
static inline unsigned
bar (unsigned x, unsigned y)
{
if (y >= 32)
return x;
else
return x >> y;
}
static unsigned a = 1, b = 1;
static inline void
foo (unsigned char x, unsigned y)
{
if (!y)
return;
unsigned c = (0x7000U / (x - 2)) ^ a;
unsigned d = bar (a, a);
b &= ((a - d) && (a - 1)) + c;
}
int
main (void)
{
foo (1, 1);
foo (-1, 1);
if (b && ((unsigned char) -1) == 255)
__builtin_abort ();
return 0;
}
Indeed, seems to be caused by partial inlining. With -fno-partial-inlining it
works fine.