1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-globals --include-generated-funcs
2 ; RUN: opt -passes='tysan' -S %s | FileCheck %s
4 !llvm.tysan.globals = !{!0}
6 !0 = distinct !{ptr null, !1}
7 !1 = !{!"any pointer", !2, i64 0}
8 !2 = !{!"omnipotent char", !3, i64 0}
9 !3 = !{!"Simple C/C++ TBAA"}
11 ; CHECK: @llvm.used = appending global [1 x ptr] [ptr @tysan.module_ctor], section "llvm.metadata"
12 ; CHECK: @__tysan_shadow_memory_address = external global i64
13 ; CHECK: @__tysan_app_memory_mask = external global i64
14 ; CHECK: @llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 0, ptr @tysan.module_ctor, ptr null }]
16 ; CHECK-LABEL: define {{[^@]+}}@tysan.module_ctor
17 ; CHECK-SAME: () #[[ATTR0:[0-9]+]] {
18 ; CHECK-NEXT: call void @__tysan_init()
19 ; CHECK-NEXT: call void @__tysan_set_globals_types()
20 ; CHECK-NEXT: ret void
23 ; CHECK-LABEL: define {{[^@]+}}@__tysan_set_globals_types() {
24 ; CHECK-NEXT: [[APP_MEM_MASK:%.*]] = load i64, ptr @__tysan_app_memory_mask, align 4
25 ; CHECK-NEXT: [[SHADOW_BASE:%.*]] = load i64, ptr @__tysan_shadow_memory_address, align 4
26 ; CHECK-NEXT: ret void
29 ; CHECK: attributes #[[ATTR0]] = { nounwind }
31 ; CHECK: [[META0:![0-9]+]] = distinct !{ptr null, [[META1:![0-9]+]]}
32 ; CHECK: [[META1]] = !{!"any pointer", [[META2:![0-9]+]], i64 0}
33 ; CHECK: [[META2]] = !{!"omnipotent char", [[META3:![0-9]+]], i64 0}
34 ; CHECK: [[META3]] = !{!"Simple C/C++ TBAA"}