Viewing file: pr15262-1.c (1.1 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* PR 15262. The alias analyzer only considers relations between pointers and symbols. If two pointers P and Q point to the same symbol S, then their respective memory tags will either be the same or they will have S in their alias set. However, if there are no common symbols between P and Q, TBAA will currently miss their alias relationship altogether. */ struct A { int t; int i; };
int foo () { return 3; }
main () { struct A loc, *locp; float f, g, *p; int T355, *T356;
/* Avoid the partial hack in TBAA that would consider memory tags if the program had no addressable symbols. */ f = 3; g = 2; p = foo () ? &g : &f; if (*p > 0.0) g = 1;
/* Store into *locp and cache its current value. */ locp = malloc (sizeof (*locp)); locp->i = 10; T355 = locp->i;
/* Take the address of one of locp's fields and write to it. */ T356 = &locp->i; *T356 = 1;
/* Read the recently stored value. If TBAA fails, this will appear as a redundant load that will be replaced with '10'. */ T355 = locp->i; if (T355 != 1) abort ();
return 0; }
|