Index: compiler-rt/trunk/test/asan/TestCases/speculative_load2.cc =================================================================== --- compiler-rt/trunk/test/asan/TestCases/speculative_load2.cc +++ compiler-rt/trunk/test/asan/TestCases/speculative_load2.cc @@ -0,0 +1,21 @@ +// Verifies that speculative loads from unions do not happen under asan. +// RUN: %clangxx_asan -O0 %s -o %t && ASAN_OPTIONS=detect_leaks=0 %run %t 2>&1 +// RUN: %clangxx_asan -O1 %s -o %t && ASAN_OPTIONS=detect_leaks=0 %run %t 2>&1 +// RUN: %clangxx_asan -O2 %s -o %t && ASAN_OPTIONS=detect_leaks=0 %run %t 2>&1 +// RUN: %clangxx_asan -O3 %s -o %t && ASAN_OPTIONS=detect_leaks=0 %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; + return u->q == 0 ? 0 : u->w.y; +} +