| // Test safe ICF works with binaries that contain relative vtable. |
| |
| // REQUIRES: system-linux,asserts |
| |
| // RUN: %clang %cxxflags -o %t.so %s -Wl,-q -fno-rtti |
| // RUN: llvm-bolt %t.so -o %t.bolt --no-threads --icf=safe \ |
| // RUN: --debug-only=bolt-icf 2>&1 | FileCheck %s |
| |
| // RUN: %clang %cxxflags -o %t.so %s -Wl,-q -fno-rtti \ |
| // RUN: -fexperimental-relative-c++-abi-vtables |
| // RUN: llvm-bolt %t.so -o %t.bolt --no-threads --icf=safe \ |
| // RUN: --debug-only=bolt-icf 2>&1 | FileCheck %s |
| |
| // CHECK: folding {{.*bar.*}} into {{.*foo.*}} |
| // CHECK-NOT: skipping function with reference taken {{.*bar.*}} |
| |
| class TT { |
| public: |
| virtual int foo(int a) { return ++a; } |
| virtual int bar(int a) { return ++a; } |
| }; |
| |
| int main() { |
| TT T; |
| return T.foo(0) + T.bar(1); |
| } |