a3fa6e22a1
Otherwise they are emitted as internal and we get double-construction and -destruction on the same memory address due to the way we promote internal declarations in KeepLocalGVPass. According to upstream tests, the de-duplication doesn't work on Windows (yet), but I think this problem is severe enough to fix it on the other platforms sooner rather than later. Fixes #13429
38 lines
925 B
C
38 lines
925 B
C
//------------------------------------------------------------------------------
|
|
// CLING - the C++ LLVM-based InterpreterG :)
|
|
//
|
|
// This file is dual-licensed: you can choose to license it under the University
|
|
// of Illinois Open Source License or the GNU Lesser General Public License. See
|
|
// LICENSE.TXT for details.
|
|
//------------------------------------------------------------------------------
|
|
|
|
// RUN: cat %s | %cling 2>&1 | FileCheck %s
|
|
|
|
extern "C" int printf(const char*, ...);
|
|
|
|
struct A {
|
|
int val;
|
|
A(int v) : val(v) {
|
|
printf("A(%d), this = %p\n", val, this);
|
|
}
|
|
~A() {
|
|
printf("~A(%d), this = %p\n", val, this);
|
|
}
|
|
int getVal() const { return val; }
|
|
};
|
|
|
|
const A a(1);
|
|
// CHECK: A(1), this = [[PTR:.+]]
|
|
|
|
a.val
|
|
// CHECK-NEXT: (const int) 1
|
|
a.getVal()
|
|
// CHECK-NEXT: (int) 1
|
|
a.val
|
|
// CHECK-NEXT: (const int) 1
|
|
a.getVal()
|
|
// CHECK-NEXT: (int) 1
|
|
|
|
// CHECK-NEXT: ~A(1), this = [[PTR]]
|
|
// CHECK-NOT: ~A
|