blob: 8c2fc4891182b57566e945c59a1eb88795b25b54 [file] [edit]
// 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