nullptr.cpp revision dd1d7d88f1fe6d7d7e79acaec3f83bc10d9f7b97
1// RUN: %clang_cc1 -std=c++11 -Wno-conversion-null -analyze -analyzer-checker=core -analyzer-store region -verify %s 2 3// test to see if nullptr is detected as a null pointer 4void foo1(void) { 5 char *np = nullptr; 6 *np = 0; // expected-warning{{Dereference of null pointer}} 7} 8 9// check if comparing nullptr to nullptr is detected properly 10void foo2(void) { 11 char *np1 = nullptr; 12 char *np2 = np1; 13 char c; 14 if (np1 == np2) 15 np1 = &c; 16 *np1 = 0; // no-warning 17} 18 19// invoving a nullptr in a more complex operation should be cause a warning 20void foo3(void) { 21 struct foo { 22 int a, f; 23 }; 24 char *np = nullptr; 25 // casting a nullptr to anything should be caught eventually 26 int *ip = &(((struct foo *)np)->f); // expected-warning{{Access to field 'f' results in a dereference of a null pointer (loaded from variable 'np')}} 27 28 // Analysis stops at the first problem case, so we won't actually warn here. 29 *ip = 0; 30 *np = 0; 31} 32 33// nullptr is implemented as a zero integer value, so should be able to compare 34void foo4(void) { 35 char *np = nullptr; 36 if (np != 0) 37 *np = 0; // no-warning 38 char *cp = 0; 39 if (np != cp) 40 *np = 0; // no-warning 41} 42 43int pr10372(void *& x) { 44 // GNU null is a pointer-sized integer, not a pointer. 45 x = __null; 46 // This used to crash. 47 return __null; 48} 49 50void zoo1() { 51 char **p = 0; 52 delete *(p + 0); // expected-warning{{Dereference of null pointer}} 53} 54 55void zoo2() { 56 int **a = 0; 57 int **b = 0; 58 asm ("nop" 59 :"=r"(*a) 60 :"0"(*b) // expected-warning{{Dereference of null pointer}} 61 ); 62} 63 64int exprWithCleanups() { 65 struct S { 66 S(int a):a(a){} 67 ~S() {} 68 69 int a; 70 }; 71 72 int *x = 0; 73 return S(*x).a; // expected-warning{{Dereference of null pointer}} 74} 75 76int materializeTempExpr() { 77 int *n = 0; 78 struct S { 79 int a; 80 S(int i): a(i) {} 81 }; 82 const S &s = S(*n); // expected-warning{{Dereference of null pointer}} 83 return s.a; 84} 85