#include "analyzer-decls.h" int a[1024]; int b[1024]; extern void escape (void *ptr); void test_1 (int *p) { int c, d; escape (&c); a[16] = 42; b[16] = 17; c = 33; d = 44; __analyzer_eval (a[16] == 42); /* { dg-warning "TRUE" } */ __analyzer_eval (b[16] == 17); /* { dg-warning "TRUE" } */ __analyzer_eval (c == 33); /* { dg-warning "TRUE" } */ __analyzer_eval (d == 44); /* { dg-warning "TRUE" } */ /* Write through an externally-provided pointer. */ *p = 100; /* It could clobber our writes to the global arrays... */ __analyzer_eval (a[16] == 42); /* { dg-warning "UNKNOWN" } */ __analyzer_eval (b[16] == 17); /* { dg-warning "UNKNOWN" } */ /* ...but can't clobber locals, even ones like "c" that have escaped. */ __analyzer_eval (c == 33); /* { dg-warning "TRUE" } */ __analyzer_eval (d == 44); /* { dg-warning "TRUE" } */ }