blob: 101d0d63f7a13cd775b9356939390806512de1fe [file] [log] [blame]
/* { dg-do compile } */
/* Disable FRE1 because that for the sake of __builtin_object_size
will not consider the equality but still valueize 'i', defeating
the purpose of the check. */
/* { dg-options "-O -fdump-tree-fre3 -fdisable-tree-fre1" } */
struct S { int a[4]; };
int i;
int bar (struct S *p)
{
char *q = (char *)p + 4;
i = 1;
int *r = &((struct S *)p)->a[i];
return q == (char *)r;
}
int baz (struct S *p)
{
i = 1;
int *r = &((struct S *)p)->a[i];
char *q = (char *)p + 4;
return q == (char *)r;
}
/* Verify FRE can handle valueizing &p->a[i] and value-numbering it
equal to a POINTER_PLUS_EXPR. */
/* { dg-final { scan-tree-dump-times "return 1;" 2 "fre3" } } */