blob: 9d0fb9596330a6202a56249f55ee9e43a6acd6cc [file] [log] [blame]
Kostya Serebryany71efba02012-01-24 19:25:38 +00001// 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))
11int NoAddressSafety1(int *a) { return *a; }
12
13// CHECK-NOT: NoAddressSafety2{{.*}} address_safety
14// ASAN-NOT: NoAddressSafety2{{.*}} address_safety
15__attribute__((no_address_safety_analysis))
16int NoAddressSafety2(int *a);
17int NoAddressSafety2(int *a) { return *a; }
18
19// CHECK-NOT: AddressSafetyOk{{.*}} address_safety
20// ASAN: AddressSafetyOk{{.*}} address_safety
21int AddressSafetyOk(int *a) { return *a; }
22
23// CHECK-NOT: TemplateNoAddressSafety{{.*}} address_safety
24// ASAN-NOT: TemplateNoAddressSafety{{.*}} address_safety
25template<int i>
26__attribute__((no_address_safety_analysis))
27int TemplateNoAddressSafety() { return i; }
28
29// CHECK-NOT: TemplateAddressSafetyOk{{.*}} address_safety
30// ASAN: TemplateAddressSafetyOk{{.*}} address_safety
31template<int i>
32int TemplateAddressSafetyOk() { return i; }
33
34int force_instance = TemplateAddressSafetyOk<42>()
35 + TemplateNoAddressSafety<42>();