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
16void AccessC();
17
18class A {
19 public:
20 A() { }
21 ~A() { AccessC(); printf(format: "PASSED\n"); }
22 // CHECK-NOT: AddressSanitizer
23 // CHECK: PASSED
24};
25
26A a;
27
28class B {
29 public:
30 B() { exit(status: 1); }
31 ~B() { }
32};
33
34B b;
35

source code of compiler-rt/test/asan/TestCases/init-order-atexit.cpp