Add sanitizer attributes.

If the sanitizer is enabled (e.g. -sanitize=address) then the corresponding
attribute (e.g. llvm::Attribute::SanitizerAddress) must be set.
This commit is contained in:
Kai Nacke 2014-01-19 13:03:37 +01:00
parent ea9c996dcd
commit 49599f71e9

View file

@ -25,6 +25,7 @@
#include "gen/llvmhelpers.h"
#include "gen/logger.h"
#include "gen/nested.h"
#include "gen/optimizer.h"
#include "gen/pragma.h"
#include "gen/runtime.h"
#include "gen/tollvm.h"
@ -989,6 +990,22 @@ void DtoDefineFunction(FuncDeclaration* fd)
{
func->addFnAttr(llvm::Attribute::UWTable);
}
#if LDC_LLVM_VER >= 303
if (opts::sanitize != opts::None) {
// Set the required sanitizer attribute.
if (opts::sanitize == opts::AddressSanitizer) {
func->addFnAttr(llvm::Attribute::SanitizeAddress);
}
if (opts::sanitize == opts::MemorySanitizer) {
func->addFnAttr(llvm::Attribute::SanitizeMemory);
}
if (opts::sanitize == opts::ThreadSanitizer) {
func->addFnAttr(llvm::Attribute::SanitizeThread);
}
}
#endif
std::string entryname("entry");