forked from OSchip/llvm-project
25 lines
539 B
C++
25 lines
539 B
C++
// 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;
|
|
}
|
|
|