From 3a166e2b1091e6d5ad2e77a4fa2f74cbfe7cf13e Mon Sep 17 00:00:00 2001
From: Evgeniy Stepanov <eugeni.stepanov@gmail.com>
Date: Thu, 20 Jun 2013 10:49:46 +0000
Subject: [PATCH] Add -fno-assume-sane-operator-new when building with MSan.

A workaroudn for PR16386. MSan's operator new aften has side-effects that are
miscompiled without this flag.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184410 91177308-0d34-0410-b5e6-96231b3b80d8
---
 lib/Driver/SanitizerArgs.h | 8 ++++++--
 test/Driver/fsanitize.c    | 3 +++
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/lib/Driver/SanitizerArgs.h b/lib/Driver/SanitizerArgs.h
index 2ca93bff35f..da6f4f6a9fb 100644
--- a/lib/Driver/SanitizerArgs.h
+++ b/lib/Driver/SanitizerArgs.h
@@ -94,8 +94,12 @@ class SanitizerArgs {
       CmdArgs.push_back(Args.MakeArgString("-fsanitize-memory-track-origins"));
 
     if (AsanZeroBaseShadow)
-      CmdArgs.push_back(Args.MakeArgString(
-          "-fsanitize-address-zero-base-shadow"));
+      CmdArgs.push_back(
+          Args.MakeArgString("-fsanitize-address-zero-base-shadow"));
+
+    // Workaround for PR16386.
+    if (needsMsanRt())
+      CmdArgs.push_back(Args.MakeArgString("-fno-assume-sane-operator-new"));
   }
 
  private:
diff --git a/test/Driver/fsanitize.c b/test/Driver/fsanitize.c
index 4899a2e75be..07e7f1e0f1d 100644
--- a/test/Driver/fsanitize.c
+++ b/test/Driver/fsanitize.c
@@ -139,3 +139,6 @@
 
 // RUN: %clang -target x86_64-linux-gnu -fsanitize=address,leak -fno-sanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANA-SANL-NO-SANA
 // CHECK-SANA-SANL-NO-SANA: "-fsanitize=leak"
+
+// 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"
-- 
GitLab