[Bug target/20126] [3.3/3.4/4.0 Regression] Inlined memcmp makes one argument null on entry
jakub at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Tue Feb 22 15:55:00 GMT 2005
------- Additional Comments From jakub at gcc dot gnu dot org 2005-02-22 10:25 -------
Looks like a strength reduction bug.
Smaller self-contained testcase:
extern void abort (void);
typedef struct { int a; char b[3]; } S;
S c = { 2, "aa" }, d = { 2, "aa" };
void *
bar (const void *x, int y, int z)
{
return (void *) 0;
}
int
foo (S *x, S *y)
{
const char *e, *f, *g;
int h;
h = y->a;
f = y->b;
e = x->b;
if (h == 1)
return bar (e, *f, x->a) != 0;
g = e + x->a - h;
while (e <= g)
{
const char *t = e + 1;
if (__builtin_memcmp (e, f, h) == 0)
return 1;
e = t;
}
return 0;
}
int
main (void)
{
if (foo (&c, &d) != 1)
abort ();
return 0;
}
Fails on both i386 and x86_64.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20126
More information about the Gcc-bugs
mailing list