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 Hahnfeldstruct 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 Hahnfeldinline 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