xref: /llvm-project/compiler-rt/test/tysan/int-long.c (revision 641fbf1524338c86c952ebb1ec8d2b497ada3cef)
1*641fbf15SFlorian Hahn // RUN: %clang_tysan -O0 %s -o %t && %run %t >%t.out 2>&1
2*641fbf15SFlorian Hahn // RUN: FileCheck %s < %t.out
3*641fbf15SFlorian Hahn 
4*641fbf15SFlorian Hahn #include <stdio.h>
5*641fbf15SFlorian Hahn 
6*641fbf15SFlorian Hahn long foo(int *x, long *y) {
7*641fbf15SFlorian Hahn   *x = 0;
8*641fbf15SFlorian Hahn   *y = 1;
9*641fbf15SFlorian Hahn   // CHECK: ERROR: TypeSanitizer: type-aliasing-violation
10*641fbf15SFlorian Hahn   // CHECK: WRITE of size 8 at {{.*}} with type long accesses an existing object of type int
11*641fbf15SFlorian Hahn   // CHECK: {{#0 0x.* in foo .*int-long.c:}}[[@LINE-3]]
12*641fbf15SFlorian Hahn 
13*641fbf15SFlorian Hahn   return *x;
14*641fbf15SFlorian Hahn }
15*641fbf15SFlorian Hahn 
16*641fbf15SFlorian Hahn int main(void) {
17*641fbf15SFlorian Hahn   long l;
18*641fbf15SFlorian Hahn   printf("%ld\n", foo((int *)&l, &l));
19*641fbf15SFlorian Hahn }
20*641fbf15SFlorian Hahn 
21*641fbf15SFlorian Hahn // CHECK-NOT: ERROR: TypeSanitizer: type-aliasing-violation
22