1// Fails with debug checks: https://bugs.llvm.org/show_bug.cgi?id=46862
2// XFAIL: !compiler-rt-optimized && !target=riscv64{{.*}}
3
4// REQUIRES: shared_cxxabi
5
6/// Not using private alias or enabling ODR indicator can detect ODR issues.
7// RUN: %clangxx_asan -fno-rtti -DBUILD_SO1 -fPIC -shared -mllvm -asan-use-private-alias=0 %s -o %dynamiclib1
8// RUN: %clangxx_asan -fno-rtti -DBUILD_SO2 -fPIC -shared -mllvm -asan-use-private-alias=0 %s -o %dynamiclib2
9// RUN: %clangxx_asan -fno-rtti %s %ld_flags_rpath_exe1 %ld_flags_rpath_exe2 -o %t
10// RUN: %env_asan_opts=fast_unwind_on_malloc=0:detect_odr_violation=2 not %run %t 2>&1 | FileCheck %s
11
12// RUN: %clangxx_asan -fno-rtti -DBUILD_SO1 -fPIC -shared -mllvm -asan-use-odr-indicator=1 %s -o %dynamiclib1
13// RUN: %clangxx_asan -fno-rtti -DBUILD_SO2 -fPIC -shared -mllvm -asan-use-odr-indicator=1 %s -o %dynamiclib2
14// RUN: %env_asan_opts=fast_unwind_on_malloc=0:detect_odr_violation=2 not %run %t 2>&1 | FileCheck %s
15
16/// By default we can detect ODR issues in vtables.
17// RUN: %clangxx_asan -fno-rtti -DBUILD_SO1 -fPIC -shared %s -o %dynamiclib1
18// RUN: %clangxx_asan -fno-rtti -DBUILD_SO2 -fPIC -shared %s -o %dynamiclib2
19// RUN: %env_asan_opts=fast_unwind_on_malloc=0:detect_odr_violation=2 not %run %t 2>&1 | FileCheck %s
20
21struct XYZ {
22 virtual void foo();
23};
24
25#if defined(BUILD_SO1)
26
27void XYZ::foo() {}
28
29#elif defined(BUILD_SO2)
30
31void XYZ::foo() {}
32
33#else
34
35int main() {}
36
37#endif
38
39// CHECK: AddressSanitizer: odr-violation
40// CHECK-NEXT: 'vtable for XYZ'
41// CHECK-NEXT: 'vtable for XYZ'
42

source code of compiler-rt/test/asan/TestCases/Linux/odr-vtable.cpp