1 // Test for the following situation: 2 // (1) global A is constructed. 3 // (2) exit() is called during construction of global B. 4 // (3) destructor of A reads uninitialized global C from another module. 5 // We do *not* want to report init-order bug in this case. 6 7 // RUN: %clangxx_asan -O0 %s %p/Helpers/init-order-atexit-extra.cpp -o %t 8 // RUN: %env_asan_opts=strict_init_order=true not %run %t 2>&1 | FileCheck %s 9 10 // FIXME: Investigate failure on MinGW 11 // XFAIL: target={{.*-windows-gnu}} 12 13 #include <stdio.h> 14 #include <stdlib.h> 15 16 void AccessC(); 17 18 class A { 19 public: A()20 A() { } ~A()21 ~A() { AccessC(); printf("PASSED\n"); } 22 // CHECK-NOT: AddressSanitizer 23 // CHECK: PASSED 24 }; 25 26 A a; 27 28 class B { 29 public: B()30 B() { exit(1); } ~B()31 ~B() { } 32 }; 33 34 B b; 35