array-struct-region.c revision be0ee875d8a91c031a085cbbd73ad9e8dc1aa8ff
1// RUN: %clang_cc1 -analyze -analyzer-checker=core,experimental.core,experimental.deadcode.UnreachableCode -analyzer-store=region -analyzer-constraints=basic -verify %s 2// RUN: %clang_cc1 -analyze -analyzer-checker=core,experimental.core,experimental.deadcode.UnreachableCode -analyzer-store=region -analyzer-constraints=range -verify %s 3 4int string_literal_init() { 5 char a[] = "abc"; 6 char b[2] = "abc"; // expected-warning{{too long}} 7 char c[5] = "abc"; 8 9 if (a[1] != 'b') 10 return 0; // expected-warning{{never executed}} 11 if (b[1] != 'b') 12 return 0; // expected-warning{{never executed}} 13 if (c[1] != 'b') 14 return 0; // expected-warning{{never executed}} 15 16 if (a[3] != 0) 17 return 0; // expected-warning{{never executed}} 18 if (c[3] != 0) 19 return 0; // expected-warning{{never executed}} 20 21 if (c[4] != 0) 22 return 0; // expected-warning{{never executed}} 23 24 return 42; 25} 26 27void nested_compound_literals(int rad) { 28 int vec[6][2] = {{0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169}, // expected-warning 6 {{implicit conversion from 'double' to 'int' changes value from}} 29 {0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}}; // expected-warning 6 {{implicit conversion from 'double' to 'int' changes value from}} 30 int a; 31 32 for (a = 0; a < 6; ++a) { 33 vec[a][0] *= rad; // no-warning 34 vec[a][1] *= rad; // no-warning 35 } 36} 37 38void nested_compound_literals_float(float rad) { 39 float vec[6][2] = {{0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169}, 40 {0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}}; 41 int a; 42 43 for (a = 0; a < 6; ++a) { 44 vec[a][0] *= rad; // no-warning 45 vec[a][1] *= rad; // no-warning 46 } 47} 48 49 50void struct_as_array() { 51 struct simple { int x; }; 52 struct simple a; 53 struct simple *p = &a; 54 p->x = 5; 55 if (!p[0].x) 56 return; // expected-warning{{never executed}} 57 if (p[0].x) 58 return; // no-warning 59} 60 61