xref: /llvm-project/compiler-rt/test/tysan/anon-same-struct.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 // The two anonymous structs are structurally identical. As a result, we don't
7*641fbf15SFlorian Hahn // report an aliasing violation here.
8*641fbf15SFlorian Hahn // CHECK-NOT: ERROR: TypeSanitizer: type-aliasing-violation
9*641fbf15SFlorian Hahn 
10*641fbf15SFlorian Hahn typedef struct {
11*641fbf15SFlorian Hahn   int i1;
12*641fbf15SFlorian Hahn } s1;
13*641fbf15SFlorian Hahn typedef struct {
14*641fbf15SFlorian Hahn   int i2;
15*641fbf15SFlorian Hahn } s2;
16*641fbf15SFlorian Hahn 
17*641fbf15SFlorian Hahn void f(s1 *s1p, s2 *s2p) {
18*641fbf15SFlorian Hahn   s1p->i1 = 2;
19*641fbf15SFlorian Hahn   s2p->i2 = 3;
20*641fbf15SFlorian Hahn   printf("%i\n", s1p->i1);
21*641fbf15SFlorian Hahn }
22*641fbf15SFlorian Hahn 
23*641fbf15SFlorian Hahn int main() {
24*641fbf15SFlorian Hahn   s1 s = {.i1 = 1};
25*641fbf15SFlorian Hahn   f(&s, (s2 *)&s);
26*641fbf15SFlorian Hahn }
27