19b925ac059089dfe74e3b8fa5effe519fb9ee885Anna Zaks// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=text -verify %s 29b925ac059089dfe74e3b8fa5effe519fb9ee885Anna Zaks 39b925ac059089dfe74e3b8fa5effe519fb9ee885Anna Zaksstruct S { 49b925ac059089dfe74e3b8fa5effe519fb9ee885Anna Zaks int *x; 59b925ac059089dfe74e3b8fa5effe519fb9ee885Anna Zaks int y; 69b925ac059089dfe74e3b8fa5effe519fb9ee885Anna Zaks}; 79b925ac059089dfe74e3b8fa5effe519fb9ee885Anna Zaks 89b925ac059089dfe74e3b8fa5effe519fb9ee885Anna ZaksS &getSomeReference(); 99b925ac059089dfe74e3b8fa5effe519fb9ee885Anna Zaksvoid test(S *p) { 104238f41d484729aca260140fbbc53a68769bf60aTed Kremenek S &r = *p; //expected-note {{'r' initialized here}} 119b925ac059089dfe74e3b8fa5effe519fb9ee885Anna Zaks if (p) return; 129b925ac059089dfe74e3b8fa5effe519fb9ee885Anna Zaks //expected-note@-1{{Taking false branch}} 13b85cce094887ab5cf1c47acfe306e2fb1d3cfbb1Ted Kremenek //expected-note@-2{{Assuming 'p' is null}} 149b925ac059089dfe74e3b8fa5effe519fb9ee885Anna Zaks r.y = 5; // expected-warning {{Access to field 'y' results in a dereference of a null pointer (loaded from variable 'r')}} 159b925ac059089dfe74e3b8fa5effe519fb9ee885Anna Zaks // expected-note@-1{{Access to field 'y' results in a dereference of a null pointer (loaded from variable 'r')}} 169b925ac059089dfe74e3b8fa5effe519fb9ee885Anna Zaks} 176cc4e25e76981ae47019bc47911724eaaf2f9a3fAnna Zaks 186cc4e25e76981ae47019bc47911724eaaf2f9a3fAnna Zaksvoid testRefParam(int *ptr) { 196cc4e25e76981ae47019bc47911724eaaf2f9a3fAnna Zaks int &ref = *ptr; // expected-note {{'ref' initialized here}} 206cc4e25e76981ae47019bc47911724eaaf2f9a3fAnna Zaks if (ptr) 216cc4e25e76981ae47019bc47911724eaaf2f9a3fAnna Zaks // expected-note@-1{{Assuming 'ptr' is null}} 226cc4e25e76981ae47019bc47911724eaaf2f9a3fAnna Zaks // expected-note@-2{{Taking false branch}} 236cc4e25e76981ae47019bc47911724eaaf2f9a3fAnna Zaks return; 246cc4e25e76981ae47019bc47911724eaaf2f9a3fAnna Zaks 256cc4e25e76981ae47019bc47911724eaaf2f9a3fAnna Zaks extern void use(int &ref); 266cc4e25e76981ae47019bc47911724eaaf2f9a3fAnna Zaks use(ref); // expected-warning{{Forming reference to null pointer}} 276cc4e25e76981ae47019bc47911724eaaf2f9a3fAnna Zaks // expected-note@-1{{Forming reference to null pointer}} 286022c4e17c0d2ad9c43ef6bc830d394b670a4705Anna Zaks} 296022c4e17c0d2ad9c43ef6bc830d394b670a4705Anna Zaks 306022c4e17c0d2ad9c43ef6bc830d394b670a4705Anna Zaksint testRefToNullPtr() { 316022c4e17c0d2ad9c43ef6bc830d394b670a4705Anna Zaks int *p = 0; // expected-note {{'p' initialized to a null pointer value}} 326022c4e17c0d2ad9c43ef6bc830d394b670a4705Anna Zaks int *const &p2 = p; // expected-note{{'p2' initialized here}} 336022c4e17c0d2ad9c43ef6bc830d394b670a4705Anna Zaks int *p3 = p2; // expected-note {{'p3' initialized to a null pointer value}} 346022c4e17c0d2ad9c43ef6bc830d394b670a4705Anna Zaks return *p3; // expected-warning {{Dereference of null pointer}} 356022c4e17c0d2ad9c43ef6bc830d394b670a4705Anna Zaks // expected-note@-1{{Dereference of null pointer}} 366022c4e17c0d2ad9c43ef6bc830d394b670a4705Anna Zaks} 376022c4e17c0d2ad9c43ef6bc830d394b670a4705Anna Zaks 386022c4e17c0d2ad9c43ef6bc830d394b670a4705Anna Zaksint testRefToNullPtr2() { 396022c4e17c0d2ad9c43ef6bc830d394b670a4705Anna Zaks int *p = 0; // expected-note {{'p' initialized to a null pointer value}} 406022c4e17c0d2ad9c43ef6bc830d394b670a4705Anna Zaks int *const &p2 = p;// expected-note{{'p2' initialized here}} 416022c4e17c0d2ad9c43ef6bc830d394b670a4705Anna Zaks return *p2; //expected-warning {{Dereference of null pointer}} 426022c4e17c0d2ad9c43ef6bc830d394b670a4705Anna Zaks // expected-note@-1{{Dereference of null pointer}} 436cc4e25e76981ae47019bc47911724eaaf2f9a3fAnna Zaks}