This reverts commit 05e31438ac9491cfc72c48664480796de874c860. There was quite a bit of churn with this patch, everytime related to the executable no longer being in the same directory as the shared objects. This reland ensures that all of the executables in the tests touched are in the same directory as the shared objects in the substitutions.
74 lines
4.0 KiB
C++
74 lines
4.0 KiB
C++
// FIXME: https://code.google.com/p/address-sanitizer/issues/detail?id=316
|
|
// XFAIL: android
|
|
// Fails with debug checks: https://bugs.llvm.org/show_bug.cgi?id=46862
|
|
// XFAIL: !compiler-rt-optimized && !target=riscv64{{.*}}
|
|
//
|
|
// We use fast_unwind_on_malloc=0 to have full unwinding even w/o frame
|
|
// pointers. This setting is not on by default because it's too expensive.
|
|
//
|
|
// Note, -asan-use-private-alias=1 -asan-use-odr-indicator=1 is the default.
|
|
// -fno-sanitize-address-use-odr-indicator turns off both.
|
|
//
|
|
// Different size: detect a bug if detect_odr_violation>=1
|
|
// RUN: mkdir -p %t.dir && cd %t.dir
|
|
// RUN: %clangxx_asan -g -DBUILD_SO=1 -fPIC -shared -fno-sanitize-address-use-odr-indicator %s -o %dynamiclib
|
|
// RUN: %clangxx_asan -g -fno-sanitize-address-use-odr-indicator %s %ld_flags_rpath_exe -o %t.dir/ODR-EXE
|
|
// RUN: %env_asan_opts=fast_unwind_on_malloc=0:detect_odr_violation=1 not %run %t.dir/ODR-EXE 2>&1 | FileCheck %s
|
|
// RUN: %env_asan_opts=fast_unwind_on_malloc=0:detect_odr_violation=2 not %run %t.dir/ODR-EXE 2>&1 | FileCheck %s
|
|
// RUN: %env_asan_opts=fast_unwind_on_malloc=0:detect_odr_violation=0 %run %t.dir/ODR-EXE 2>&1 | FileCheck %s --check-prefix=DISABLED
|
|
// RUN: %env_asan_opts=fast_unwind_on_malloc=0 not %run %t.dir/ODR-EXE 2>&1 | FileCheck %s
|
|
//
|
|
// Same size: report a bug only if detect_odr_violation>=2.
|
|
// RUN: %clangxx_asan -g -DBUILD_SO=1 -fPIC -shared -fno-sanitize-address-use-odr-indicator %s -o %dynamiclib -DSZ=100
|
|
// RUN: %env_asan_opts=fast_unwind_on_malloc=0:detect_odr_violation=1 %run %t.dir/ODR-EXE 2>&1 | FileCheck %s --check-prefix=DISABLED
|
|
// RUN: %env_asan_opts=fast_unwind_on_malloc=0:detect_odr_violation=2 not %run %t.dir/ODR-EXE 2>&1 | FileCheck %s
|
|
// RUN: %env_asan_opts=fast_unwind_on_malloc=0 not %run %t.dir/ODR-EXE 2>&1 | FileCheck %s
|
|
// RUN: echo "odr_violation:foo::ZZZ" > %t.dir/supp
|
|
// RUN: %env_asan_opts=fast_unwind_on_malloc=0:detect_odr_violation=2:suppressions=%t.dir/supp not %run %t.dir/ODR-EXE 2>&1 | FileCheck %s
|
|
// RUN: echo "odr_violation:foo::G" > %t.dir/supp
|
|
// RUN: %env_asan_opts=fast_unwind_on_malloc=0:detect_odr_violation=2:suppressions=%t.dir/supp %run %t.dir/ODR-EXE 2>&1 | FileCheck %s --check-prefix=DISABLED
|
|
// RUN: rm -f %t.dir/supp
|
|
//
|
|
// Use private aliases for global variables without indicator symbol.
|
|
// RUN: %clangxx_asan -g -DBUILD_SO=1 -fPIC -shared -mllvm -asan-use-odr-indicator=0 %s -o %dynamiclib -DSZ=100
|
|
// RUN: %clangxx_asan -g -mllvm -asan-use-odr-indicator=0 %s %ld_flags_rpath_exe -o %t.dir/ODR-EXE
|
|
// RUN: %env_asan_opts=fast_unwind_on_malloc=0 %run %t.dir/ODR-EXE 2>&1 | FileCheck %s --check-prefix=DISABLED
|
|
|
|
// Use private aliases for global variables: use indicator symbol to detect ODR violation.
|
|
// RUN: %clangxx_asan -g -DBUILD_SO=1 -fPIC -shared %s -o %dynamiclib -DSZ=100
|
|
// RUN: %clangxx_asan -g %s %ld_flags_rpath_exe -o %t.dir/ODR-EXE
|
|
// RUN: %env_asan_opts=fast_unwind_on_malloc=0 not %run %t.dir/ODR-EXE 2>&1 | FileCheck %s
|
|
|
|
// Same as above but with clang switches.
|
|
// RUN: %clangxx_asan -g -DBUILD_SO=1 -fPIC -shared -fsanitize-address-use-odr-indicator %s -o %dynamiclib -DSZ=100
|
|
// RUN: %clangxx_asan -g -fsanitize-address-use-odr-indicator %s %ld_flags_rpath_exe -o %t.dir/ODR-EXE
|
|
// RUN: %env_asan_opts=fast_unwind_on_malloc=0 not %run %t.dir/ODR-EXE 2>&1 | FileCheck %s
|
|
|
|
// GNU driver doesn't handle .so files properly.
|
|
// REQUIRES: Clang
|
|
|
|
// REQUIRES: fast-unwinder-works
|
|
|
|
#ifndef SZ
|
|
# define SZ 4
|
|
#endif
|
|
|
|
#if BUILD_SO
|
|
namespace foo { char G[SZ]; }
|
|
#else
|
|
#include <stdio.h>
|
|
namespace foo { char G[100]; }
|
|
// CHECK: ERROR: AddressSanitizer: odr-violation
|
|
// CHECK: size=100 'foo::G' {{.*}}odr-violation.cpp:[[@LINE-2]] in {{.*}}/ODR-EXE
|
|
// CHECK: size={{4|100}} 'foo::G'
|
|
int main(int argc, char **argv) {
|
|
printf("PASS: %p\n", &foo::G);
|
|
}
|
|
#endif
|
|
|
|
// CHECK: These globals were registered at these points:
|
|
// CHECK: {{odr-violation.cpp|ODR-EXE}}
|
|
// CHECK: odr-violation.cpp{{$}}
|
|
// CHECK: SUMMARY: AddressSanitizer: odr-violation: global 'foo::G' at {{.*}}odr-violation.cpp
|
|
// DISABLED: PASS
|