1 | // RUN: %clang_cc1 -fsanitize=address -emit-llvm -o - %s | FileCheck %s |
2 | |
3 | // Test blacklist functionality. |
4 | // RUN: echo "src:%s=init" | sed -e 's/\\/\\\\/g' > %t-file.blacklist |
5 | // RUN: echo "type:PODWithCtorAndDtor=init" > %t-type.blacklist |
6 | // RUN: echo "type:NS::PODWithCtor=init" >> %t-type.blacklist |
7 | // RUN: %clang_cc1 -fsanitize=address -fsanitize-blacklist=%t-file.blacklist -emit-llvm -o - %s | FileCheck %s --check-prefix=BLACKLIST |
8 | // RUN: %clang_cc1 -fsanitize=address -fsanitize-blacklist=%t-type.blacklist -emit-llvm -o - %s | FileCheck %s --check-prefix=BLACKLIST |
9 | |
10 | struct PODStruct { |
11 | int x; |
12 | }; |
13 | PODStruct s1; |
14 | |
15 | struct PODWithDtor { |
16 | ~PODWithDtor() { } |
17 | int x; |
18 | }; |
19 | PODWithDtor s2; |
20 | |
21 | struct PODWithCtorAndDtor { |
22 | PODWithCtorAndDtor() { } |
23 | ~PODWithCtorAndDtor() { } |
24 | int x; |
25 | }; |
26 | PODWithCtorAndDtor s3; |
27 | |
28 | namespace NS { |
29 | class PODWithCtor { |
30 | public: |
31 | PODWithCtor() {} |
32 | }; |
33 | |
34 | const volatile PODWithCtor array[5][5]; |
35 | } |
36 | |
37 | // Check that ASan init-order checking ignores structs with trivial default |
38 | // constructor. |
39 | // CHECK: !llvm.asan.globals = !{![[GLOB_1:[0-9]+]], ![[GLOB_2:[0-9]+]], ![[GLOB_3:[0-9]+]], ![[GLOB_4:[0-9]+]] |
40 | // CHECK: ![[GLOB_1]] = !{%struct.PODStruct* {{.*}}, i1 false, i1 false} |
41 | // CHECK: ![[GLOB_2]] = !{%struct.PODWithDtor* {{.*}}, i1 false, i1 false} |
42 | // CHECK: ![[GLOB_3]] = !{%struct.PODWithCtorAndDtor* {{.*}}, i1 true, i1 false} |
43 | // CHECK: ![[GLOB_4]] = !{{{.*}}class.NS::PODWithCtor{{.*}}, i1 true, i1 false} |
44 | |
45 | // BLACKLIST: !llvm.asan.globals = !{![[GLOB_1:[0-9]+]], ![[GLOB_2:[0-9]+]], ![[GLOB_3:[0-9]+]], ![[GLOB_4:[0-9]+]]} |
46 | // BLACKLIST: ![[GLOB_1]] = !{%struct.PODStruct* {{.*}}, i1 false, i1 false} |
47 | // BLACKLIST: ![[GLOB_2]] = !{%struct.PODWithDtor* {{.*}}, i1 false, i1 false} |
48 | // BLACKLIST: ![[GLOB_3]] = !{%struct.PODWithCtorAndDtor* {{.*}}, i1 false, i1 false} |
49 | // BLACKLIST: ![[GLOB_4]] = !{{{.*}}class.NS::PODWithCtor{{.*}}, i1 false, i1 false} |
50 | |