// Verifies that speculative loads from unions do not happen under asan. // RUN: %clangxx_asan -O0 %s -o %t && %run %t 2>&1 // RUN: %clangxx_asan -O1 %s -o %t && %run %t 2>&1 // RUN: %clangxx_asan -O2 %s -o %t && %run %t 2>&1 // RUN: %clangxx_asan -O3 %s -o %t && %run %t 2>&1 typedef union { short q; struct { short x; short y; int for_alignment; } w; } U; int main() { char *buf = new char[2]; buf[0] = buf[1] = 0x0; U *u = (U *)buf; short result = u->q == 0 ? 0 : u->w.y; delete[] buf; return result; }