1 // RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s
2 // RUN: %clang_cc1 -emit-llvm -o - %s -faddress-sanitizer | FileCheck -check-prefix ASAN %s
3 
4 // The address_safety attribute should be attached to functions
5 // when AddressSanitizer is enabled, unless no_address_safety_analysis attribute
6 // is present.
7 
8 // CHECK-NOT:  NoAddressSafety1{{.*}} address_safety
9 // ASAN-NOT:  NoAddressSafety1{{.*}} address_safety
10 __attribute__((no_address_safety_analysis))
11 int NoAddressSafety1(int *a) { return *a; }
12 
13 // CHECK-NOT:  NoAddressSafety2{{.*}} address_safety
14 // ASAN-NOT:  NoAddressSafety2{{.*}} address_safety
15 __attribute__((no_address_safety_analysis))
16 int NoAddressSafety2(int *a);
17 int NoAddressSafety2(int *a) { return *a; }
18 
19 // CHECK-NOT:  AddressSafetyOk{{.*}} address_safety
20 // ASAN: AddressSafetyOk{{.*}} address_safety
21 int AddressSafetyOk(int *a) { return *a; }
22 
23 // CHECK-NOT:  TemplateNoAddressSafety{{.*}} address_safety
24 // ASAN-NOT: TemplateNoAddressSafety{{.*}} address_safety
25 template<int i>
26 __attribute__((no_address_safety_analysis))
27 int TemplateNoAddressSafety() { return i; }
28 
29 // CHECK-NOT:  TemplateAddressSafetyOk{{.*}} address_safety
30 // ASAN: TemplateAddressSafetyOk{{.*}} address_safety
31 template<int i>
32 int TemplateAddressSafetyOk() { return i; }
33 
34 int force_instance = TemplateAddressSafetyOk<42>()
35                    + TemplateNoAddressSafety<42>();
36