Emit const variables only once (#13614)
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
This commit is contained in:
parent
45318c5a0e
commit
a3fa6e22a1
37
test/CodeGeneration/const.C
Normal file
37
test/CodeGeneration/const.C
Normal file
@ -0,0 +1,37 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// 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
|
Loading…
Reference in New Issue
Block a user