[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