// RUN: %clang_cc1 -analyze -analyzer-checker=core,experimental.core -analyzer-store=region -analyzer-constraints=range -verify -fblocks %s // <rdar://problem/6776949> // main's 'argc' argument is always > 0 int main(int argc, char* argv[]) { int *p = 0; if (argc == 0) *p = 1; if (argc == 1) return 1; int x = 1; int i; for(i=1;i<argc;i++){ p = &x; } return *p; // no-warning } // PR 5969: the comparison of argc < 3 || argc > 4 should constraint the switch // statement from having the 'default' branch taken. This previously reported a false // positive with the use of 'v'. int pr5969(int argc, char *argv[]) { int v; if ((argc < 3) || (argc > 4)) return 0; switch(argc) { case 3: v = 33; break; case 4: v = 44; break; } return v; // no-warning } int pr5969_positive(int argc, char *argv[]) { int v; if ((argc < 3) || (argc > 4)) return 0; switch(argc) { case 3: v = 33; break; } return v; // expected-warning{{Undefined or garbage value returned to caller}} }