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