| // REQUIRES: host-supports-jit |
| // RUN: cat %s | clang-repl | FileCheck %s |
| // virtual functions defined outside of class had duplicate symbols: |
| // duplicate definition of symbol '__ZTV3Two' (i.e., vtable for Two) |
| // see https://github.com/llvm/llvm-project/issues/141039. |
| // fixed in PR #185648 |
| |
| extern "C" int printf(const char *, ...); |
| |
| struct X1 { virtual void vi() { printf("1vi\n"); } }; |
| X1().vi(); |
| // CHECK: 1vi |
| |
| struct X2 { virtual void vo(); }; |
| void X2::vo() { printf("2vo\n"); } |
| X2().vo(); |
| // CHECK: 2vo |
| |
| struct X3 { \ |
| void ni() { printf("3ni\n"); } \ |
| void no(); \ |
| virtual void vi() { printf("3vi\n"); } \ |
| virtual void vo(); \ |
| virtual ~X3() { printf("3d\n"); } \ |
| }; |
| void X3::no() { printf("3no\n"); } |
| void X3::vo() { printf("3vo\n"); } |
| auto x3 = new X3; |
| x3->ni(); |
| // CHECK: 3ni |
| x3->no(); |
| // CHECK: 3no |
| x3->vi(); |
| // CHECK: 3vi |
| x3->vo(); |
| // CHECK: 3vo |
| delete x3; |
| // CHECK: 3d |
| |
| %quit |