149d29ed950f9e309a7b755b2a0601ed483ce3adePeter Collingbourne// RUN: %clangxx -fsanitize=null %s -O3 -o %t 22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %run %t l 2>&1 | FileCheck %s --check-prefix=CHECK-LOAD 32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %run %t s 2>&1 | FileCheck %s --check-prefix=CHECK-STORE 42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %run %t r 2>&1 | FileCheck %s --check-prefix=CHECK-REFERENCE 52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %run %t m 2>&1 | FileCheck %s --check-prefix=CHECK-MEMBER 62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %run %t f 2>&1 | FileCheck %s --check-prefix=CHECK-MEMFUN 76ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith 86ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smithstruct S { 96ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith int f() { return 0; } 106ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith int k; 116ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith}; 126ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith 136ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smithint main(int, char **argv) { 146ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith int *p = 0; 156ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith S *s = 0; 166ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith 176ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith (void)*p; // ok! 186ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith 196ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith switch (argv[1][0]) { 206ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith case 'l': 217cbd7e502e993320a3a1578179d336c268b80604Will Dietz // CHECK-LOAD: null.cpp:22:12: runtime error: load of null pointer of type 'int' 226ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith return *p; 236ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith case 's': 247cbd7e502e993320a3a1578179d336c268b80604Will Dietz // CHECK-STORE: null.cpp:25:5: runtime error: store to null pointer of type 'int' 256ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith *p = 1; 266ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith break; 276ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith case 'r': 287cbd7e502e993320a3a1578179d336c268b80604Will Dietz // CHECK-REFERENCE: null.cpp:29:15: runtime error: reference binding to null pointer of type 'int' 296ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith {int &r = *p;} 306ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith break; 316ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith case 'm': 327cbd7e502e993320a3a1578179d336c268b80604Will Dietz // CHECK-MEMBER: null.cpp:33:15: runtime error: member access within null pointer of type 'S' 336ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith return s->k; 346ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith case 'f': 357cbd7e502e993320a3a1578179d336c268b80604Will Dietz // CHECK-MEMFUN: null.cpp:36:12: runtime error: member call on null pointer of type 'S' 366ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith return s->f(); 376ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith } 386ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith} 39