aboutsummaryrefslogtreecommitdiff
path: root/test/asan/TestCases/initialization-constexpr.cc
diff options
context:
space:
mode:
Diffstat (limited to 'test/asan/TestCases/initialization-constexpr.cc')
-rw-r--r--test/asan/TestCases/initialization-constexpr.cc27
1 files changed, 27 insertions, 0 deletions
diff --git a/test/asan/TestCases/initialization-constexpr.cc b/test/asan/TestCases/initialization-constexpr.cc
new file mode 100644
index 000000000000..644246186e02
--- /dev/null
+++ b/test/asan/TestCases/initialization-constexpr.cc
@@ -0,0 +1,27 @@
+// Constexpr:
+// We need to check that a global variable initialized with a constexpr
+// constructor can be accessed during dynamic initialization (as a constexpr
+// constructor implies that it was initialized during constant initialization,
+// not dynamic initialization).
+
+// RUN: %clangxx_asan -O0 %s %p/Helpers/initialization-constexpr-extra.cc --std=c++11 -o %t
+// RUN: env ASAN_OPTIONS=check_initialization_order=true %run %t 2>&1
+// RUN: %clangxx_asan -O1 %s %p/Helpers/initialization-constexpr-extra.cc --std=c++11 -o %t
+// RUN: env ASAN_OPTIONS=check_initialization_order=true %run %t 2>&1
+// RUN: %clangxx_asan -O2 %s %p/Helpers/initialization-constexpr-extra.cc --std=c++11 -o %t
+// RUN: env ASAN_OPTIONS=check_initialization_order=true %run %t 2>&1
+// RUN: %clangxx_asan -O3 %s %p/Helpers/initialization-constexpr-extra.cc --std=c++11 -o %t
+// RUN: env ASAN_OPTIONS=check_initialization_order=true %run %t 2>&1
+
+class Integer {
+ private:
+ int value;
+
+ public:
+ constexpr Integer(int x = 0) : value(x) {}
+ int getValue() {return value;}
+};
+Integer coolestInteger(42);
+int getCoolestInteger() { return coolestInteger.getValue(); }
+
+int main() { return 0; }