path-notes.c revision 685379965c1b105ce89cf4f6c60810932b7f4d0d
1// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-ipa=inlining -analyzer-output=text -verify %s 2 3void zero(int **p) { 4 *p = 0; 5 // expected-note@-1 {{Null pointer value stored to 'a'}} 6} 7 8void testZero(int *a) { 9 zero(&a); 10 // expected-note@-1 {{Calling 'zero'}} 11 // expected-note@-2 {{Returning from 'zero'}} 12 *a = 1; // expected-warning{{Dereference of null pointer}} 13 // expected-note@-1 {{Dereference of null pointer (loaded from variable 'a')}} 14} 15 16 17void check(int *p) { 18 if (p) { 19 // expected-note@-1 + {{Assuming 'p' is null}} 20 // expected-note@-2 + {{Assuming pointer value is null}} 21 // expected-note@-3 + {{Taking false branch}} 22 return; 23 } 24 return; 25} 26 27void testCheck(int *a) { 28 check(a); 29 // expected-note@-1 {{Calling 'check'}} 30 // expected-note@-2 {{Returning from 'check'}} 31 *a = 1; // expected-warning{{Dereference of null pointer}} 32 // expected-note@-1 {{Dereference of null pointer (loaded from variable 'a')}} 33} 34 35 36int *getPointer(); 37 38void testInitCheck() { 39 int *a = getPointer(); 40 // expected-note@-1 {{Variable 'a' initialized here}} 41 check(a); 42 // expected-note@-1 {{Calling 'check'}} 43 // expected-note@-2 {{Returning from 'check'}} 44 *a = 1; // expected-warning{{Dereference of null pointer}} 45 // expected-note@-1 {{Dereference of null pointer (loaded from variable 'a')}} 46} 47 48void testStoreCheck(int *a) { 49 a = getPointer(); 50 // expected-note@-1 {{Value assigned to 'a'}} 51 check(a); 52 // expected-note@-1 {{Calling 'check'}} 53 // expected-note@-2 {{Returning from 'check'}} 54 *a = 1; // expected-warning{{Dereference of null pointer}} 55 // expected-note@-1 {{Dereference of null pointer (loaded from variable 'a')}} 56} 57