| 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 | |