| /* { dg-do compile } */ |
| /* { dg-options "-O2 -fdump-tree-store_ccp" } */ |
| /* LLVM LOCAL test not applicable */ |
| /* { dg-require-fdump "" } */ |
| |
| extern void link_error (void); |
| |
| /* some addresses clearly cannot be equal, check that some address |
| expressions can be evaluated as constants */ |
| |
| char g1, g2; |
| void test6 (char p1, char p2) |
| { |
| char l1 = 1, l2 = 2; |
| static char s1 = 5, s2 = 7; |
| if (&l1 == &l2) |
| link_error (); |
| |
| if (&p1 == &p2) |
| link_error (); |
| |
| if (&s1 == &s2) |
| link_error (); |
| |
| if (&g1 == &g2) |
| link_error (); |
| |
| if (&p1 == &l1) |
| link_error (); |
| |
| if (&p1 == &s1) |
| link_error (); |
| |
| if (&p1 == &l2) |
| link_error (); |
| |
| if (&p1 == &g1) |
| link_error (); |
| |
| if (&l1 == &g1) |
| link_error (); |
| |
| if (&s1 == &g1) |
| link_error (); |
| } |
| |
| extern void *alloc (int) __attribute__ ((malloc)); |
| char gca1[128]; |
| char* __restrict__ rgc1; |
| char* test66 (char * __restrict__ rp1, char * __restrict__ rp2, char *p1) |
| { |
| char * __restrict__ rl1 = p1; |
| char * l1 = (char*) alloc (20); |
| |
| if (l1 == rgc1) |
| link_error (); |
| |
| if (l1 == rp1) |
| link_error (); |
| |
| if (l1 == rl1) |
| link_error (); |
| |
| if (l1 == gca1) |
| link_error (); |
| |
| if (rl1 == rgc1) |
| link_error (); |
| |
| if (rl1 == rp1) |
| link_error (); |
| |
| if (rl1 == gca1) |
| link_error (); |
| |
| if (rp1 == rp2) |
| link_error (); |
| |
| if (rp1 == rgc1) |
| link_error (); |
| |
| if (rp1 == gca1) |
| link_error (); |
| |
| if (gca1 == rgc1) |
| link_error (); |
| |
| } |
| |
| int gci1[128]; |
| int* __restrict__ rgi1; |
| int* test666 (int * __restrict__ rp1, int * __restrict__ rp2, int *p1) |
| { |
| int * __restrict__ rl1 = p1; |
| int * l1 = (int*) alloc (20); |
| |
| if (l1 == rgi1) |
| link_error (); |
| |
| if (l1 == rp1) |
| link_error (); |
| |
| if (l1 == rl1) |
| link_error (); |
| |
| if (l1 == gci1) |
| link_error (); |
| |
| if (rl1 == rgi1) |
| link_error (); |
| |
| if (rl1 == rp1) |
| link_error (); |
| |
| if (rl1 == gci1) |
| link_error (); |
| |
| if (rp1 == rp2) |
| link_error (); |
| |
| if (rp1 == rgi1) |
| link_error (); |
| |
| if (rp1 == gci1) |
| link_error (); |
| |
| if (gci1 == rgi1) |
| link_error (); |
| } |
| |
| |
| /* There should be not link_error calls, if there is any the |
| optimization has failed */ |
| /* ??? While we indeed don't handle some of these, a couple of the |
| restrict tests are incorrect. */ |
| /* { dg-final { scan-tree-dump-times "link_error" 0 "store_ccp" { xfail *-*-* } } } */ |
| /* { dg-final { cleanup-tree-dump "store_ccp" } } */ |