forked from OSchip/llvm-project
[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
This commit is contained in:
parent
8842da8e07
commit
e70e5fcc7e
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
Loading…
Reference in New Issue