1 // Verifies that speculative loads from unions do not happen under asan. 2 // RUN: %clangxx_asan -O0 %s -o %t && %run %t 2>&1 3 // RUN: %clangxx_asan -O1 %s -o %t && %run %t 2>&1 4 // RUN: %clangxx_asan -O2 %s -o %t && %run %t 2>&1 5 // RUN: %clangxx_asan -O3 %s -o %t && %run %t 2>&1 6 7 typedef union { 8 short q; 9 struct { 10 short x; 11 short y; 12 int for_alignment; 13 } w; 14 } U; 15 16 int main() { 17 char *buf = new char[2]; 18 buf[0] = buf[1] = 0x0; 19 U *u = (U *)buf; 20 short result = u->q == 0 ? 0 : u->w.y; 21 delete[] buf; 22 return result; 23 } 24 25