• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // A collection of various initializers which shouldn't trip up initialization
2 // order checking.  If successful, this will just return 0.
3 
4 // RUN: %clangxx_asan -m64 -O0 %s %p/Helpers/initialization-nobug-extra.cc\
5 // RUN:   --std=c++11 -fsanitize=init-order -o %t
6 // RUN: ASAN_OPTIONS=check_initialization_order=true %t 2>&1
7 // RUN: %clangxx_asan -m64 -O1 %s %p/Helpers/initialization-nobug-extra.cc\
8 // RUN:   --std=c++11 -fsanitize=init-order -o %t
9 // RUN: ASAN_OPTIONS=check_initialization_order=true %t 2>&1
10 // RUN: %clangxx_asan -m64 -O2 %s %p/Helpers/initialization-nobug-extra.cc\
11 // RUN:   --std=c++11 -fsanitize=init-order -o %t
12 // RUN: ASAN_OPTIONS=check_initialization_order=true %t 2>&1
13 // RUN: %clangxx_asan -m64 -O3 %s %p/Helpers/initialization-nobug-extra.cc\
14 // RUN:   --std=c++11 -fsanitize=init-order -o %t
15 // RUN: ASAN_OPTIONS=check_initialization_order=true %t 2>&1
16 // RUN: %clangxx_asan -m32 -O0 %s %p/Helpers/initialization-nobug-extra.cc\
17 // RUN:   --std=c++11 -fsanitize=init-order -o %t
18 // RUN: ASAN_OPTIONS=check_initialization_order=true %t 2>&1
19 // RUN: %clangxx_asan -m32 -O0 %s %p/Helpers/initialization-nobug-extra.cc\
20 // RUN:   --std=c++11 -fsanitize=init-order -o %t
21 // RUN: ASAN_OPTIONS=check_initialization_order=true %t 2>&1
22 // RUN: %clangxx_asan -m32 -O1 %s %p/Helpers/initialization-nobug-extra.cc\
23 // RUN:   --std=c++11 -fsanitize=init-order -o %t
24 // RUN: ASAN_OPTIONS=check_initialization_order=true %t 2>&1
25 // RUN: %clangxx_asan -m32 -O2 %s %p/Helpers/initialization-nobug-extra.cc\
26 // RUN:   --std=c++11 -fsanitize=init-order -o %t
27 // RUN: ASAN_OPTIONS=check_initialization_order=true %t 2>&1
28 // RUN: %clangxx_asan -m32 -O3 %s %p/Helpers/initialization-nobug-extra.cc\
29 // RUN:   --std=c++11 -fsanitize=init-order -o %t
30 // RUN: ASAN_OPTIONS=check_initialization_order=true %t 2>&1
31 
32 // Simple access:
33 // Make sure that accessing a global in the same TU is safe
34 
35 bool condition = true;
initializeSameTU()36 int initializeSameTU() {
37   return condition ? 0x2a : 052;
38 }
39 int sameTU = initializeSameTU();
40 
41 // Linker initialized:
42 // Check that access to linker initialized globals originating from a different
43 // TU's initializer is safe.
44 
45 int A = (1 << 1) + (1 << 3) + (1 << 5), B;
getAB()46 int getAB() {
47   return A * B;
48 }
49 
50 // Function local statics:
51 // Check that access to function local statics originating from a different
52 // TU's initializer is safe.
53 
countCalls()54 int countCalls() {
55   static int calls;
56   return ++calls;
57 }
58 
59 // Constexpr:
60 // We need to check that a global variable initialized with a constexpr
61 // constructor can be accessed during dynamic initialization (as a constexpr
62 // constructor implies that it was initialized during constant initialization,
63 // not dynamic initialization).
64 
65 class Integer {
66   private:
67   int value;
68 
69   public:
Integer(int x=0)70   constexpr Integer(int x = 0) : value(x) {}
getValue()71   int getValue() {return value;}
72 };
73 Integer coolestInteger(42);
getCoolestInteger()74 int getCoolestInteger() { return coolestInteger.getValue(); }
75 
main()76 int main() { return 0; }
77