xref: /llvm-project/clang/test/CodeGen/memtag-globals.cpp (revision 514580b43898921cc95659de47b383bd2c9b4b12)
1 // RUN: %clang_cc1 -triple aarch64-linux-android34 \
2 // RUN:   -include %S/Inputs/sanitizer-extra-source.cpp \
3 // RUN:   -fsanitize-ignorelist=%S/Inputs/sanitizer-ignorelist-global.txt \
4 // RUN:   -fsanitize=memtag-globals -emit-llvm -o - %s | FileCheck %s
5 
6 // RUN: %clang_cc1 -triple aarch64-linux-android34 \
7 // RUN:    -include %S/Inputs/sanitizer-extra-source.cpp \
8 // RUN:   -fsanitize-ignorelist=%S/Inputs/sanitizer-ignorelist-src.txt \
9 // RUN:   -fsanitize=memtag-globals -emit-llvm -o - %s | \
10 // RUN:   FileCheck %s --check-prefix=IGNORELIST
11 
12 int global;
13 int __attribute__((__section__("my_section"))) section_global;
14 int __attribute__((no_sanitize("memtag"))) attributed_global;
15 int __attribute__((disable_sanitizer_instrumentation)) disable_instrumentation_global;
16 int ignorelisted_global;
17 extern int external_global;
18 
19 void func() {
20   static int static_var = 0;
21   const char *literal = "Hello, world!";
22   external_global = 1;
23 }
24 
25 // CHECK: @{{.*}}extra_global{{.*}} ={{.*}} sanitize_memtag
26 // CHECK: @{{.*}}global{{.*}} ={{.*}} sanitize_memtag
27 
28 // CHECK:     @{{.*}}section_global{{.*}} =
29 // CHECK-NOT: sanitize_memtag
30 // CHECK:     @{{.*}}attributed_global{{.*}} =
31 // CHECK-NOT: sanitize_memtag
32 // CHECK:     @{{.*}}disable_instrumentation_global{{.*}} =
33 // CHECK-NOT: sanitize_memtag
34 // CHECK:     @{{.*}}ignorelisted_global{{.*}} =
35 // CHECK-NOT: sanitize_memtag
36 
37 // CHECK: @{{.*}}static_var{{.*}} ={{.*}} sanitize_memtag
38 // CHECK: @{{.*}} = {{.*}} c"Hello, world!\00"{{.*}}
39 // CHECK: @{{.*}}external_global{{.*}} ={{.*}} sanitize_memtag
40 
41 // IGNORELIST: @{{.*}}extra_global{{.*}} ={{.*}} sanitize_memtag
42 
43 // IGNORELIST:     @{{.*}}global{{.*}} =
44 // IGNORELIST-NOT: sanitize_memtag
45 // IGNORELIST:     @{{.*}}attributed_global{{.*}} =
46 // IGNORELIST-NOT: sanitize_memtag
47 // IGNORELIST:     @{{.*}}disable_instrumentation_global{{.*}} =
48 // IGNORELIST-NOT: sanitize_memtag
49 // IGNORELIST:     @{{.*}}ignorelisted_globa{{.*}} =
50 // IGNORELIST-NOT: sanitize_memtag
51 // IGNORELIST:     @{{.*}}static_var{{.*}} =
52 // IGNORELIST-NOT: sanitize_memtag
53 // IGNORELIST:     @{{.*}} = {{.*}} c"Hello, world!\00"{{.*}}
54 // IGNORELIST-NOT: sanitize_memtag
55 // IGNORELIST:     @{{.*}}external_global{{.*}} =
56 // IGNORELIST-NOT: sanitize_memtag
57