summaryrefslogtreecommitdiffstats
path: root/compiler-rt
diff options
context:
space:
mode:
authorKuba Mracek <mracek@apple.com>2018-03-08 21:02:52 +0000
committerKuba Mracek <mracek@apple.com>2018-03-08 21:02:52 +0000
commite70e5fcc7eb07acf7ec45930ba3eff035c068f45 (patch)
tree8ce97af50ea91d5b47b47d1491c5d74163596474 /compiler-rt
parent8842da8e070866d9e09dd19e2869f395ffd1d7da (diff)
downloadbcm5719-llvm-e70e5fcc7eb07acf7ec45930ba3eff035c068f45.tar.gz
bcm5719-llvm-e70e5fcc7eb07acf7ec45930ba3eff035c068f45.zip
[asan] Fix a false positive ODR violation due to LTO ConstantMerge pass [compiler-rt part, take 3]
This fixes a false positive ODR violation that is reported by ASan when using LTO. In cases, where two constant globals have the same value, LTO will merge them, which breaks ASan's ODR detection. See the included testcase for an example. Differential Revision: https://reviews.llvm.org/D43959 llvm-svn: 327062
Diffstat (limited to 'compiler-rt')
-rw-r--r--compiler-rt/test/asan/TestCases/Darwin/odr-lto.cc12
-rw-r--r--compiler-rt/test/asan/TestCases/lto-constmerge-odr.cc14
2 files changed, 17 insertions, 9 deletions
diff --git a/compiler-rt/test/asan/TestCases/Darwin/odr-lto.cc b/compiler-rt/test/asan/TestCases/Darwin/odr-lto.cc
index 40abec5827d..56dd89b164c 100644
--- a/compiler-rt/test/asan/TestCases/Darwin/odr-lto.cc
+++ b/compiler-rt/test/asan/TestCases/Darwin/odr-lto.cc
@@ -3,15 +3,10 @@
// 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
+// RUN: %env_asan_opts=use_odr_indicator=1 %run %t 2>&1 | FileCheck %s
#include <stdio.h>
#include <stdlib.h>
@@ -40,6 +35,5 @@ void putstest()
#endif // PART == 1
-// CHECK-ODR: ERROR: AddressSanitizer: odr-violation
-// CHECK-NO-ODR-NOT: ERROR: AddressSanitizer: odr-violation
-// CHECK-NO-ODR: Done.
+// CHECK-NOT: ERROR: AddressSanitizer: odr-violation
+// CHECK: Done.
diff --git a/compiler-rt/test/asan/TestCases/lto-constmerge-odr.cc b/compiler-rt/test/asan/TestCases/lto-constmerge-odr.cc
new file mode 100644
index 00000000000..9dc1397f6f0
--- /dev/null
+++ b/compiler-rt/test/asan/TestCases/lto-constmerge-odr.cc
@@ -0,0 +1,14 @@
+// RUN: %clangxx_asan -O3 -flto %s -o %t
+// RUN: %run %t 2>&1
+
+// REQUIRES: lto
+
+int main(int argc, const char * argv[]) {
+ struct { long width, height; } a = {16, 16};
+ struct { long width, height; } b = {16, 16};
+
+ // Just to make sure 'a' and 'b' don't get optimized out.
+ asm volatile("" : : "r" (&a), "r" (&b));
+
+ return 0;
+}
OpenPOWER on IntegriCloud