]> granicus.if.org Git - clang/commitdiff
Disable source fortification on Darwin with AddressSanitizer.
authorAlexander Potapenko <glider@google.com>
Thu, 20 Sep 2012 10:10:01 +0000 (10:10 +0000)
committerAlexander Potapenko <glider@google.com>
Thu, 20 Sep 2012 10:10:01 +0000 (10:10 +0000)
ASan doesn't play well with -D_FORTIFY_SOURCE, which is enabled by default starting at OS X 10.7

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164299 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Basic/Targets.cpp
test/Driver/darwin-asan-nofortify.c [new file with mode: 0644]
test/lit.cfg

index 3720d47e55cfef7dbd5c1528d49b1850b11e3db2..d5cb514b0311a59ba33663895005ffda86d6de4d 100644 (file)
@@ -92,6 +92,9 @@ static void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts,
   Builder.defineMacro("__APPLE__");
   Builder.defineMacro("__MACH__");
   Builder.defineMacro("OBJC_NEW_PROPERTIES");
+  // AddressSanitizer doesn't play well with source fortification, which is on
+  // by default on Darwin.
+  if (Opts.AddressSanitizer) Builder.defineMacro("_FORTIFY_SOURCE", "0");
 
   if (!Opts.ObjCAutoRefCount) {
     // __weak is always defined, for use in blocks and with objc pointers.
diff --git a/test/Driver/darwin-asan-nofortify.c b/test/Driver/darwin-asan-nofortify.c
new file mode 100644 (file)
index 0000000..59f00ff
--- /dev/null
@@ -0,0 +1,5 @@
+// Make sure AddressSanitizer disables _FORTIFY_SOURCE on Darwin.
+
+// REQUIRES: system-darwin
+// RUN: %clang -faddress-sanitizer %s -E -dM -o - | FileCheck %s
+// CHECK: #define _FORTIFY_SOURCE 0
index d7c3de4a3d8d574682eb9f54d8f3052b011f2c7c..b2d666d564ae5b1a1bf30a0bebaa83e7cb0c60c4 100644 (file)
@@ -222,6 +222,10 @@ if platform.system() not in ['FreeBSD']:
 if platform.system() not in ['Windows'] or lit.getBashPath() != '':
     config.available_features.add('shell')
 
+# For tests that require Darwin to run.
+if platform.system() in ['Darwin']:
+    config.available_features.add('system-darwin')
+
 # ANSI escape sequences in non-dumb terminal
 if platform.system() not in ['Windows']:
     config.available_features.add('ansi-escape-sequences')