Home | History | Annotate | Download | only in lit_tests
      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;
     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;
     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 
     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:
     70   constexpr Integer(int x = 0) : value(x) {}
     71   int getValue() {return value;}
     72 };
     73 Integer coolestInteger(42);
     74 int getCoolestInteger() { return coolestInteger.getValue(); }
     75 
     76 int main() { return 0; }
     77