xref: /llvm-project/clang/test/Interpreter/inline-virtual.cpp (revision c63b9a5af72a7d83d936c12ae4bc79828c073edf)
1c861d32dSJonas Hahnfeld // REQUIRES: host-supports-jit
2c861d32dSJonas Hahnfeld // UNSUPPORTED: system-aix
3c861d32dSJonas Hahnfeld //
4c861d32dSJonas Hahnfeld // We disable RTTI to avoid problems on Windows for non-RTTI builds of LLVM
5c861d32dSJonas Hahnfeld // where the JIT cannot find ??_7type_info@@6B@.
6*c63b9a5aSNico Weber // RUN: cat %s | clang-repl -Xcc -fno-rtti -Xcc -fno-sized-deallocation \
7*c63b9a5aSNico Weber // RUN:     | FileCheck %s
8*c63b9a5aSNico Weber // RUN: cat %s | clang-repl -Xcc -fno-rtti -Xcc -fno-sized-deallocation \
9*c63b9a5aSNico Weber // RUN:     -Xcc -O2 | FileCheck %s
10c861d32dSJonas Hahnfeld 
11c861d32dSJonas Hahnfeld extern "C" int printf(const char *, ...);
12c861d32dSJonas Hahnfeld 
AA13c861d32dSJonas Hahnfeld struct A { int a; A(int a) : a(a) {} virtual ~A(); };
14c861d32dSJonas Hahnfeld 
15c861d32dSJonas Hahnfeld // Then define the virtual destructor as inline out-of-line, in a separate
16c861d32dSJonas Hahnfeld // PartialTranslationUnit.
~A()17c861d32dSJonas Hahnfeld inline A::~A() { printf("~A(%d)\n", a); }
18c861d32dSJonas Hahnfeld 
19cb7995a1SStefan Gränitz // Create one instance with new and delete it. We crash here now:
20c861d32dSJonas Hahnfeld A *a1 = new A(1);
21c861d32dSJonas Hahnfeld delete a1;
22c861d32dSJonas Hahnfeld // CHECK: ~A(1)
23c861d32dSJonas Hahnfeld 
24c861d32dSJonas Hahnfeld // Also create one global that will be auto-destructed.
25c861d32dSJonas Hahnfeld A a2(2);
26c861d32dSJonas Hahnfeld // CHECK: ~A(2)
27