// RUN: %clangxx_asan -O0 -fsanitize-address-use-after-scope %s -o %t // RUN: not %run %t 'A' 2>&1 | FileCheck %s // RUN: not %run %t 'B' 2>&1 | FileCheck %s // Missing lifetime markers in test_a // https://bugs.llvm.org/show_bug.cgi?id=34353 // XFAIL: * struct B { B() : p('B') {} char p; }; struct C { const char *p; explicit C(const char *c) : p(c) {} C(const B &b) : p(&b.p) {} // NOLINT }; struct A { char p; explicit A() : p('C') {} const operator C() const { return C(&p); } }; volatile char r; void test_a() { C s = A(); r = *s.p; } void test_b() { C s = B(); r = *s.p; } int main(int argc, char **argv) { switch (argv[1][0]) { case 'A': test_a(); return 0; case 'B': test_b(); return 0; } return 1; } // CHECK: ERROR: AddressSanitizer: stack-use-after-scope