File tree Expand file tree Collapse file tree 3 files changed +72
-0
lines changed Expand file tree Collapse file tree 3 files changed +72
-0
lines changed Original file line number Diff line number Diff line change
1
+ // RUN: %clang_tysan %s -o %t && %run %t 10 >%t.out.0 2>&1
2
+ // RUN: FileCheck --check-prefixes=CHECK,CHECK-BOTH %s < %t.out.0
3
+ // RUN: echo "fun:typeViolationignored" > %tmp
4
+ // RUN: echo "src:*ignorelist.h" > %tmp
5
+ // RUN: %clang_tysan -fsanitize-ignorelist=%tmp %s -o %t && %run %t 10 >%t.out 2>&1
6
+ // RUN: FileCheck --check-prefixes=CHECK-IGNORELIST,CHECK-BOTH %s < %t.out
7
+
8
+ #include "ignorelist.h"
9
+ #include <stdio.h>
10
+ #include <stdlib.h>
11
+
12
+ void typeViolationIgnored (float * fPtr ) { printf ("As int: %d\n" , * (int * )fPtr ); }
13
+
14
+ void typeViolation (int * fPtr ) { printf ("As float: %f\n" , * (float * )fPtr ); }
15
+
16
+ int main () {
17
+ float * f = (float * )malloc (sizeof (float ));
18
+ * f = 413.0f ;
19
+ typeViolationIgnored (f );
20
+ // CHECK: TypeSanitizer: type-aliasing-violation on address 0x{{.*}}
21
+ // CHECK-NEXT: READ of size 4 at 0x{{.*}} with type int accesses an existing object of type float
22
+ // CHECK-IGNORELIST-NOT: TypeSanitizer: type-aliasing-violation on address 0x{{.*}}
23
+
24
+ int * i = (int * )malloc (sizeof (int ));
25
+ * i = 612 ;
26
+ typeViolation (i );
27
+ // CHECK-BOTH: TypeSanitizer: type-aliasing-violation on address 0x{{.*}}
28
+ // CHECK-BOTH: READ of size 4 at 0x{{.*}} with type float accesses an existing object of type int
29
+
30
+ typeViolationMultiFile ((void * )i );
31
+ // CHECK: TypeSanitizer: type-aliasing-violation on address 0x{{.*}}
32
+ // CHECK-IGNORELIST-NOT: TypeSanitizer: type-aliasing-violation on address 0x{{.*}}
33
+
34
+ return 0 ;
35
+ }
Original file line number Diff line number Diff line change
1
+ // Used as part of the ignorelist.c test
2
+ // tests if the "src:" ignorelist directive works
3
+ #include <stdio.h>
4
+
5
+ void typeViolationMultiFile (void * value ) {
6
+ printf ("As long: %ld\n" , * (long * )value );
7
+ }
Original file line number Diff line number Diff line change
1
+ // RUN: %clang_tysan -O0 %s -o %t && %run %t >%t.out 2>&1 && FileCheck --check-prefix=CHECK-SANITIZED %s < %t.out
2
+ // RUN: %clang_tysan -DNOSAN -O0 %s -o %t && %run %t >%t.out 2>&1 && FileCheck --check-prefix=CHECK-NOSAN %s < %t.out
3
+ // RUN: %clang -O0 %s -o %t && %run %t >%t.out 2>&1 && FileCheck --check-prefix=CHECK-SIMPLE %s < %t.out
4
+
5
+ #include <stdio.h>
6
+
7
+ #if __has_feature (type_sanitizer )
8
+
9
+ # ifdef NOSAN
10
+ __attribute__((no_sanitize ("type" )))
11
+ # endif
12
+ int main (){
13
+
14
+ int value = 42 ;
15
+ printf ("As float: %f\n" , * (float * )& value );
16
+ // CHECK-SANITIZED: ERROR: TypeSanitizer
17
+ // CHECK-NOSAN-NOT: ERROR: TypeSanitizer
18
+
19
+ return 0 ;
20
+ }
21
+
22
+ #else
23
+
24
+ int main () {
25
+ printf ("Nothing interesting here\n" );
26
+ return 0 ;
27
+ }
28
+ // CHECK-SIMPLE: Nothing interesting here
29
+
30
+ #endif
You can’t perform that action at this time.
0 commit comments