1// Constexpr:
2// We need to check that a global variable initialized with a constexpr
3// constructor can be accessed during dynamic initialization (as a constexpr
4// constructor implies that it was initialized during constant initialization,
5// not dynamic initialization).
6
7// RUN: %clangxx_asan -O0 %s %p/Helpers/initialization-constexpr-extra.cpp --std=c++11 -o %t
8// RUN: %env_asan_opts=check_initialization_order=true %run %t 2>&1
9// RUN: %clangxx_asan -O1 %s %p/Helpers/initialization-constexpr-extra.cpp --std=c++11 -o %t
10// RUN: %env_asan_opts=check_initialization_order=true %run %t 2>&1
11// RUN: %clangxx_asan -O2 %s %p/Helpers/initialization-constexpr-extra.cpp --std=c++11 -o %t
12// RUN: %env_asan_opts=check_initialization_order=true %run %t 2>&1
13// RUN: %clangxx_asan -O3 %s %p/Helpers/initialization-constexpr-extra.cpp --std=c++11 -o %t
14// RUN: %env_asan_opts=check_initialization_order=true %run %t 2>&1
15
16class Integer {
17private:
18 int value;
19
20public:
21 explicit constexpr Integer(int x = 0) : value(x) {}
22 int getValue() {return value;}
23};
24Integer coolestInteger(42);
25int getCoolestInteger() { return coolestInteger.getValue(); }
26
27int main() { return 0; }
28

source code of compiler-rt/test/asan/TestCases/initialization-constexpr.cpp