1 | // RUN: %clang_tysan -O0 %s -o %t && %run %t >%t.out 2>&1 |
2 | // RUN: FileCheck %s < %t.out |
3 | |
4 | #include <stdint.h> |
5 | #include <stdio.h> |
6 | |
7 | // CHECK-NOT: TypeSanitizer |
8 | |
9 | union a { |
10 | int16_t b; |
11 | uint64_t c; |
12 | } d; |
13 | |
14 | uint64_t *e = &d.c; |
15 | static uint16_t f(int16_t a, int32_t b, uint64_t c); |
16 | static int64_t g(int32_t aa, uint8_t h, union a bb) { |
17 | int16_t *i = &d.b; |
18 | f(a: 0, b: h, c: 0); |
19 | *i = h; |
20 | return 0; |
21 | } |
22 | uint16_t f(int16_t a, int32_t b, uint64_t c) { |
23 | for (d.c = 0; 0;) |
24 | ; |
25 | *e = 0; |
26 | return 0; |
27 | } |
28 | |
29 | int main() { |
30 | uint32_t j = 8; |
31 | g(aa: 1, h: j, bb: d); |
32 | printf(format: "%d\n" , d.b); |
33 | return 0; |
34 | } |
35 | |