1*67e74705SXin Li// RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.core -analyzer-store=region -analyzer-constraints=range -verify -fblocks %s 2*67e74705SXin Li 3*67e74705SXin Li// <rdar://problem/6776949> 4*67e74705SXin Li// main's 'argc' argument is always > 0 5*67e74705SXin Liint main(int argc, char* argv[]) { 6*67e74705SXin Li int *p = 0; 7*67e74705SXin Li 8*67e74705SXin Li if (argc == 0) 9*67e74705SXin Li *p = 1; 10*67e74705SXin Li 11*67e74705SXin Li if (argc == 1) 12*67e74705SXin Li return 1; 13*67e74705SXin Li 14*67e74705SXin Li int x = 1; 15*67e74705SXin Li int i; 16*67e74705SXin Li 17*67e74705SXin Li for(i=1;i<argc;i++){ 18*67e74705SXin Li p = &x; 19*67e74705SXin Li } 20*67e74705SXin Li 21*67e74705SXin Li return *p; // no-warning 22*67e74705SXin Li} 23*67e74705SXin Li 24*67e74705SXin Li// PR 5969: the comparison of argc < 3 || argc > 4 should constraint the switch 25*67e74705SXin Li// statement from having the 'default' branch taken. This previously reported a false 26*67e74705SXin Li// positive with the use of 'v'. 27*67e74705SXin Li 28*67e74705SXin Liint pr5969(int argc, char *argv[]) { 29*67e74705SXin Li 30*67e74705SXin Li int v; 31*67e74705SXin Li 32*67e74705SXin Li if ((argc < 3) || (argc > 4)) return 0; 33*67e74705SXin Li 34*67e74705SXin Li switch(argc) { 35*67e74705SXin Li case 3: 36*67e74705SXin Li v = 33; 37*67e74705SXin Li break; 38*67e74705SXin Li case 4: 39*67e74705SXin Li v = 44; 40*67e74705SXin Li break; 41*67e74705SXin Li } 42*67e74705SXin Li 43*67e74705SXin Li return v; // no-warning 44*67e74705SXin Li} 45*67e74705SXin Li 46*67e74705SXin Liint pr5969_positive(int argc, char *argv[]) { 47*67e74705SXin Li 48*67e74705SXin Li int v; 49*67e74705SXin Li 50*67e74705SXin Li if ((argc < 3) || (argc > 4)) return 0; 51*67e74705SXin Li 52*67e74705SXin Li switch(argc) { 53*67e74705SXin Li case 3: 54*67e74705SXin Li v = 33; 55*67e74705SXin Li break; 56*67e74705SXin Li } 57*67e74705SXin Li 58*67e74705SXin Li return v; // expected-warning{{Undefined or garbage value returned to caller}} 59*67e74705SXin Li} 60