1 // RUN: %clangxx_asan -O0 -fsanitize-address-use-after-scope %s -o %t 2 3 // RUN: not %run %t 'A' 2>&1 | FileCheck %s 4 // RUN: not %run %t 'B' 2>&1 | FileCheck %s 5 6 // Missing lifetime markers in test_a 7 // https://bugs.llvm.org/show_bug.cgi?id=34353 8 // XFAIL: * 9 10 struct B { BB11 B() : p('B') {} 12 char p; 13 }; 14 15 struct C { 16 const char *p; CC17 explicit C(const char *c) : p(c) {} CC18 explicit C(const B &b) : p(&b.p) {} 19 }; 20 21 struct A { 22 char p; AA23 A() : p('C') {} operator CA24 const operator C() const { return C(&p); } 25 }; 26 27 volatile char r; test_a()28void test_a() { 29 C s = A(); 30 r = *s.p; 31 } 32 test_b()33void test_b() { 34 C s = B(); 35 r = *s.p; 36 } 37 main(int argc,char ** argv)38int main(int argc, char **argv) { 39 switch (argv[1][0]) { 40 case 'A': 41 test_a(); 42 return 0; 43 case 'B': 44 test_b(); 45 return 0; 46 } 47 return 1; 48 } 49 50 // CHECK: ERROR: AddressSanitizer: stack-use-after-scope 51