[compiler-rt] r281472 - [asan] Enable -asan-use-private-alias on Darwin/Mach-O, add test for ODR false positive with LTO (compiler-rt part)
Kuba Brecka via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 14 07:09:18 PDT 2016
Author: kuba.brecka
Date: Wed Sep 14 09:09:18 2016
New Revision: 281472
URL: http://llvm.org/viewvc/llvm-project?rev=281472&view=rev
Log:
[asan] Enable -asan-use-private-alias on Darwin/Mach-O, add test for ODR false positive with LTO (compiler-rt part)
The '-asan-use-private-alias’ option (disabled by default) option is currently only enabled for Linux and ELF, but it also works on Darwin and Mach-O. This option also fixes a known problem with LTO on Darwin (https://github.com/google/sanitizers/issues/647). This patch enables the support for Darwin (but still keeps it off by default) and adds the LTO test case.
Differential Revision: https://reviews.llvm.org/D24292
Added:
compiler-rt/trunk/test/asan/TestCases/Darwin/odr-lto.cc
Modified:
compiler-rt/trunk/test/lit.common.cfg
compiler-rt/trunk/test/safestack/lit.cfg
Added: compiler-rt/trunk/test/asan/TestCases/Darwin/odr-lto.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/Darwin/odr-lto.cc?rev=281472&view=auto
==============================================================================
--- compiler-rt/trunk/test/asan/TestCases/Darwin/odr-lto.cc (added)
+++ compiler-rt/trunk/test/asan/TestCases/Darwin/odr-lto.cc Wed Sep 14 09:09:18 2016
@@ -0,0 +1,41 @@
+// Check that -asan-use-private-alias and use_odr_indicator=1 silence the false
+// positive ODR violation on Darwin with LTO.
+
+// REQUIRES: lto
+
+// RUN: %clangxx_asan -DPART=0 -c %s -o %t-1.o -flto
+// RUN: %clangxx_asan -DPART=1 -c %s -o %t-2.o -flto
+// RUN: %clangxx_asan %t-1.o %t-2.o -o %t -flto
+// RUN: not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-ODR
+
+// RUN: %clangxx_asan -DPART=0 -c %s -o %t-1.o -flto -mllvm -asan-use-private-alias
+// RUN: %clangxx_asan -DPART=1 -c %s -o %t-2.o -flto -mllvm -asan-use-private-alias
+// RUN: %clangxx_asan %t-1.o %t-2.o -o %t -flto
+// RUN: %env_asan_opts=use_odr_indicator=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ODR
+
+#include <stdio.h>
+#include <stdlib.h>
+void putstest();
+
+#if PART == 1
+
+int main()
+{
+ fputs("test\n", stderr);
+ putstest();
+ fprintf(stderr, "Done.\n");
+ return 0;
+}
+
+#else // PART == 1
+
+void putstest()
+{
+ fputs("test\n", stderr);
+}
+
+#endif // PART == 1
+
+// CHECK-ODR: ERROR: AddressSanitizer: odr-violation
+// CHECK-NO-ODR-NOT: ERROR: AddressSanitizer: odr-violation
+// CHECK-NO-ODR: Done.
Modified: compiler-rt/trunk/test/lit.common.cfg
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/lit.common.cfg?rev=281472&r1=281471&r2=281472&view=diff
==============================================================================
--- compiler-rt/trunk/test/lit.common.cfg (original)
+++ compiler-rt/trunk/test/lit.common.cfg Wed Sep 14 09:09:18 2016
@@ -177,6 +177,9 @@ elif config.host_os == 'Windows' and is_
else:
config.lto_supported = False
+if config.lto_supported:
+ config.available_features.add('lto')
+
# Ask llvm-config about assertion mode.
try:
llvm_config_cmd = subprocess.Popen(
Modified: compiler-rt/trunk/test/safestack/lit.cfg
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/safestack/lit.cfg?rev=281472&r1=281471&r2=281472&view=diff
==============================================================================
--- compiler-rt/trunk/test/safestack/lit.cfg (original)
+++ compiler-rt/trunk/test/safestack/lit.cfg Wed Sep 14 09:09:18 2016
@@ -16,7 +16,6 @@ config.substitutions.append( ("%clang_no
config.substitutions.append( ("%clang_safestack ", config.clang + " -O0 -fsanitize=safe-stack ") )
if config.lto_supported:
- config.available_features.add('lto')
config.substitutions.append((r"%clang_lto_safestack ", ' '.join(config.lto_launch + [config.clang] + config.lto_flags + ['-flto -fsanitize=safe-stack '])))
# SafeStack tests are currently supported on Linux, FreeBSD and Darwin only.
More information about the llvm-commits
mailing list