diff --git a/clang/lib/Driver/SanitizerArgs.cpp b/clang/lib/Driver/SanitizerArgs.cpp --- a/clang/lib/Driver/SanitizerArgs.cpp +++ b/clang/lib/Driver/SanitizerArgs.cpp @@ -825,6 +825,12 @@ AsanInvalidPointerSub = true; } + if (TC.getTriple().isOSDarwin() && + (Args.hasArg(options::OPT_mkernel) || + Args.hasArg(options::OPT_fapple_kext))) { + AsanDtorKind = llvm::AsanDtorKind::None; + } + if (const auto *Arg = Args.getLastArg(options::OPT_sanitize_address_destructor_kind_EQ)) { auto parsedAsanDtorKind = AsanDtorKindFromString(Arg->getValue()); diff --git a/clang/test/Driver/darwin-asan-mkernel-kext.c b/clang/test/Driver/darwin-asan-mkernel-kext.c new file mode 100644 --- /dev/null +++ b/clang/test/Driver/darwin-asan-mkernel-kext.c @@ -0,0 +1,15 @@ +// RUN: %clang -target x86_64-apple-darwin10 -fsanitize=address -mkernel -### \ +// RUN: %s 2>&1 | FileCheck %s +// RUN: %clang -target x86_64-apple-darwin10 -fsanitize=address -fapple-kext \ +// RUN: -### %s 2>&1 | FileCheck %s +// RUN: %clang -target x86_64-apple-darwin10 -fsanitize=address -fapple-kext \ +// RUN: -mkernel -### %s 2>&1 | FileCheck %s + +// CHECK: "-fsanitize-address-destructor-kind=none" + +// Check it's possible to override the driver's decision. +// RUN: %clang -target x86_64-apple-darwin10 -fsanitize=address -fapple-kext \ +// RUN: -mkernel -### -fsanitize-address-destructor-kind=global %s 2>&1 | \ +// RUN: FileCheck -check-prefix=CHECK-OVERRIDE %s + +// CHECK-OVERRIDE: "-fsanitize-address-destructor-kind=global"