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
This commit is contained in:
@@ -1019,6 +1019,14 @@ CodeGenModule::GetOrCreateLLVMFunction(StringRef MangledName,
|
||||
if (ExtraAttrs != llvm::Attribute::None)
|
||||
F->addFnAttr(ExtraAttrs);
|
||||
|
||||
if (Features.AddressSanitizer) {
|
||||
// When AddressSanitizer is enabled, set AddressSafety attribute
|
||||
// unless __attribute__((no_address_safety_analysis)) is used.
|
||||
const FunctionDecl *FD = cast_or_null<FunctionDecl>(D.getDecl());
|
||||
if (!FD || !FD->hasAttr<NoAddressSafetyAnalysisAttr>())
|
||||
F->addFnAttr(llvm::Attribute::AddressSafety);
|
||||
}
|
||||
|
||||
// This is the first use or definition of a mangled name. If there is a
|
||||
// deferred decl with this name, remember that we need to emit it at the end
|
||||
// of the file.
|
||||
|
||||
Reference in New Issue
Block a user