• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
main()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