From: Sergey Matveev Date: Tue, 17 Feb 2015 15:09:33 +0000 (+0000) Subject: Append -fno-assume-sane-operator-new in ASan builds. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=51108a12a34f0084c701ee0a58b1045058214d24;p=clang Append -fno-assume-sane-operator-new in ASan builds. This should help LSan detect leaks where operator new would otherwise be optimized out. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@229498 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Driver/SanitizerArgs.cpp b/lib/Driver/SanitizerArgs.cpp index 037fff29ab..310f5e81f9 100644 --- a/lib/Driver/SanitizerArgs.cpp +++ b/lib/Driver/SanitizerArgs.cpp @@ -424,8 +424,13 @@ void SanitizerArgs::addArgs(const llvm::opt::ArgList &Args, if (SanitizeCoverage) CmdArgs.push_back(Args.MakeArgString("-fsanitize-coverage=" + llvm::utostr(SanitizeCoverage))); - // Workaround for PR16386. - if (Sanitizers.has(SanitizerKind::Memory)) + // MSan: Workaround for PR16386. + // ASan: This is mainly to help LSan with cases such as + // https://code.google.com/p/address-sanitizer/issues/detail?id=373 + // We can't make this conditional on -fsanitize=leak, as that flag shouldn't + // affect compilation. + if (Sanitizers.has(SanitizerKind::Memory) || + Sanitizers.has(SanitizerKind::Address)) CmdArgs.push_back(Args.MakeArgString("-fno-assume-sane-operator-new")); } diff --git a/test/Driver/fsanitize.c b/test/Driver/fsanitize.c index 1988503f67..a5eea44614 100644 --- a/test/Driver/fsanitize.c +++ b/test/Driver/fsanitize.c @@ -157,6 +157,8 @@ // RUN: %clang -target x86_64-linux-gnu -fsanitize=memory %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-MSAN // CHECK-MSAN: "-fno-assume-sane-operator-new" +// RUN: %clang -target x86_64-linux-gnu -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-ASAN +// CHECK-ASAN: "-fno-assume-sane-operator-new" // RUN: %clang -target x86_64-linux-gnu -fsanitize=zzz %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-DIAG1 // CHECK-DIAG1: unsupported argument 'zzz' to option 'fsanitize='