зеркало из https://github.com/microsoft/clang-1.git
implement __has_feature(address_sanitizer); also use LangOpts.AddressSanitizer instead of CodeGenOpts.AddressSanitizer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145054 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
3fa45bb44a
Коммит
b61968857f
|
@ -121,6 +121,7 @@ LANGOPT(NoConstantCFStrings , 1, 0, "no constant CoreFoundation strings")
|
|||
BENIGN_LANGOPT(InlineVisibilityHidden , 1, 0, "hidden default visibility for inline C++ methods")
|
||||
BENIGN_LANGOPT(ParseUnknownAnytype, 1, 0, "__unknown_anytype")
|
||||
BENIGN_LANGOPT(DebuggerSupport , 1, 0, "debugger support")
|
||||
BENIGN_LANGOPT(AddressSanitizer , 1, 0, "AddressSanitizer enabled")
|
||||
|
||||
BENIGN_LANGOPT(SpellChecking , 1, 1, "spell-checking")
|
||||
LANGOPT(SinglePrecisionConstants , 1, 0, "treating double-precision floating point constants as single precision constants")
|
||||
|
|
|
@ -35,7 +35,6 @@ public:
|
|||
Mixed = 2
|
||||
};
|
||||
|
||||
unsigned AddressSanitizer : 1; /// Enable AddressSanitizer.
|
||||
unsigned AsmVerbose : 1; /// -dA, -fverbose-asm.
|
||||
unsigned ObjCAutoRefCountExceptions : 1; /// Whether ARC should be EH-safe.
|
||||
unsigned CUDAIsDevice : 1; /// Set when compiling for CUDA device.
|
||||
|
@ -152,7 +151,6 @@ public:
|
|||
|
||||
public:
|
||||
CodeGenOptions() {
|
||||
AddressSanitizer = 0;
|
||||
AsmVerbose = 0;
|
||||
CUDAIsDevice = 0;
|
||||
CXAAtExit = 1;
|
||||
|
|
|
@ -147,7 +147,7 @@ void EmitAssemblyHelper::CreatePasses() {
|
|||
addObjCARCOptPass);
|
||||
}
|
||||
|
||||
if (CodeGenOpts.AddressSanitizer) {
|
||||
if (LangOpts.AddressSanitizer) {
|
||||
PMBuilder.addExtension(PassManagerBuilder::EP_ScalarOptimizerLate,
|
||||
addAddressSanitizerPass);
|
||||
}
|
||||
|
|
|
@ -153,8 +153,6 @@ static void CodeGenOptsToArgs(const CodeGenOptions &Opts,
|
|||
Res.push_back("-dwarf-debug-flags");
|
||||
Res.push_back(Opts.DwarfDebugFlags);
|
||||
}
|
||||
if (Opts.AddressSanitizer)
|
||||
Res.push_back("-faddress-sanitizer");
|
||||
if (Opts.ObjCRuntimeHasARC)
|
||||
Res.push_back("-fobjc-runtime-has-arc");
|
||||
if (Opts.ObjCRuntimeHasTerminate)
|
||||
|
@ -669,6 +667,8 @@ static void LangOptsToArgs(const LangOptions &Opts,
|
|||
Res.push_back("-fpascal-strings");
|
||||
if (Opts.CatchUndefined)
|
||||
Res.push_back("-fcatch-undefined-behavior");
|
||||
if (Opts.AddressSanitizer)
|
||||
Res.push_back("-faddress-sanitizer");
|
||||
if (Opts.WritableStrings)
|
||||
Res.push_back("-fwritable-strings");
|
||||
if (Opts.ConstStrings)
|
||||
|
@ -1069,7 +1069,6 @@ static void ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
|
|||
Opts.UnrollLoops = Args.hasArg(OPT_funroll_loops) ||
|
||||
(Opts.OptimizationLevel > 1 && !Opts.OptimizeSize);
|
||||
|
||||
Opts.AddressSanitizer = Args.hasArg(OPT_faddress_sanitizer);
|
||||
Opts.AsmVerbose = Args.hasArg(OPT_masm_verbose);
|
||||
Opts.ObjCAutoRefCountExceptions = Args.hasArg(OPT_fobjc_arc_exceptions);
|
||||
Opts.ObjCRuntimeHasARC = Args.hasArg(OPT_fobjc_runtime_has_arc);
|
||||
|
@ -1812,6 +1811,7 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
|
|||
Opts.FakeAddressSpaceMap = Args.hasArg(OPT_ffake_address_space_map);
|
||||
Opts.ParseUnknownAnytype = Args.hasArg(OPT_funknown_anytype);
|
||||
Opts.DebuggerSupport = Args.hasArg(OPT_fdebugger_support);
|
||||
Opts.AddressSanitizer = Args.hasArg(OPT_faddress_sanitizer);
|
||||
Opts.ApplePragmaPack = Args.hasArg(OPT_fapple_pragma_pack);
|
||||
Opts.CurrentModule = Args.getLastArgValue(OPT_fmodule_name);
|
||||
|
||||
|
|
|
@ -583,6 +583,7 @@ static bool HasFeature(const Preprocessor &PP, const IdentifierInfo *II) {
|
|||
const LangOptions &LangOpts = PP.getLangOptions();
|
||||
|
||||
return llvm::StringSwitch<bool>(II->getName())
|
||||
.Case("address_sanitizer", LangOpts.AddressSanitizer)
|
||||
.Case("attribute_analyzer_noreturn", true)
|
||||
.Case("attribute_availability", true)
|
||||
.Case("attribute_cf_returns_not_retained", true)
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
// RUN: %clang_cc1 -E -faddress-sanitizer %s -o - | FileCheck --check-prefix=CHECK-ASAN %s
|
||||
// RUN: %clang_cc1 -E %s -o - | FileCheck --check-prefix=CHECK-NO-ASAN %s
|
||||
|
||||
#if __has_feature(address_sanitizer)
|
||||
int AddressSanitizerEnabled();
|
||||
#else
|
||||
int AddressSanitizerDisabled();
|
||||
#endif
|
||||
|
||||
// CHECK-ASAN: AddressSanitizerEnabled
|
||||
// CHECK-NO-ASAN: AddressSanitizerDisabled
|
Загрузка…
Ссылка в новой задаче