llvm-project/clang/test/CodeGen/address-safety-attr.cpp
Kostya Serebryany 588d6abf7d The following patch adds __attribute__((no_address_safety_analysis)) which will allow to disable
address safety analysis (such as e.g. AddressSanitizer or SAFECode) for a specific function.

When building with AddressSanitizer, add AddressSafety function attribute to every generated function
except for those that have __attribute__((no_address_safety_analysis)).

With this patch we will be able to
1. disable AddressSanitizer for a particular function
2. disable AddressSanitizer-hostile optimizations (such as some cases of load widening) when AddressSanitizer is on.

llvm-svn: 148842
2012-01-24 19:25:38 +00:00

36 lines
1.3 KiB
C++

// RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s
// RUN: %clang_cc1 -emit-llvm -o - %s -faddress-sanitizer | FileCheck -check-prefix ASAN %s
// The address_safety attribute should be attached to functions
// when AddressSanitizer is enabled, unless no_address_safety_analysis attribute
// is present.
// CHECK-NOT: NoAddressSafety1{{.*}} address_safety
// ASAN-NOT: NoAddressSafety1{{.*}} address_safety
__attribute__((no_address_safety_analysis))
int NoAddressSafety1(int *a) { return *a; }
// CHECK-NOT: NoAddressSafety2{{.*}} address_safety
// ASAN-NOT: NoAddressSafety2{{.*}} address_safety
__attribute__((no_address_safety_analysis))
int NoAddressSafety2(int *a);
int NoAddressSafety2(int *a) { return *a; }
// CHECK-NOT: AddressSafetyOk{{.*}} address_safety
// ASAN: AddressSafetyOk{{.*}} address_safety
int AddressSafetyOk(int *a) { return *a; }
// CHECK-NOT: TemplateNoAddressSafety{{.*}} address_safety
// ASAN-NOT: TemplateNoAddressSafety{{.*}} address_safety
template<int i>
__attribute__((no_address_safety_analysis))
int TemplateNoAddressSafety() { return i; }
// CHECK-NOT: TemplateAddressSafetyOk{{.*}} address_safety
// ASAN: TemplateAddressSafetyOk{{.*}} address_safety
template<int i>
int TemplateAddressSafetyOk() { return i; }
int force_instance = TemplateAddressSafetyOk<42>()
+ TemplateNoAddressSafety<42>();