-
Notifications
You must be signed in to change notification settings - Fork 10.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[clang-repl] Emit const variables only once (#65257)
Disable internal linkage for const variables if IncrementalExtensions are enabled. Otherwise the variables are emitted multiple times, with multiple constructions at unique memory locations, during every PTU.
- Loading branch information
Showing
2 changed files
with
39 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
// UNSUPPORTED: system-aix | ||
// RUN: cat %s | clang-repl | FileCheck %s | ||
// RUN: cat %s | clang-repl -Xcc -O2 | FileCheck %s | ||
|
||
extern "C" int printf(const char*, ...); | ||
|
||
struct A { int val; A(int v); ~A(); void f() const; }; | ||
A::A(int v) : val(v) { printf("A(%d), this = %p\n", val, this); } | ||
A::~A() { printf("~A, this = %p, val = %d\n", this, val); } | ||
void A::f() const { printf("f: this = %p, val = %d\n", this, val); } | ||
|
||
const A a(1); | ||
// CHECK: A(1), this = [[THIS:0x[0-9a-f]+]] | ||
// The constructor must only be called once! | ||
// CHECK-NOT: A(1) | ||
|
||
a.f(); | ||
// CHECK-NEXT: f: this = [[THIS]], val = 1 | ||
a.f(); | ||
// CHECK-NEXT: f: this = [[THIS]], val = 1 | ||
|
||
%quit | ||
// There must still be no other constructor! | ||
// CHECK-NOT: A(1) | ||
|
||
// At the end, we expect exactly one destructor call | ||
// CHECK: ~A | ||
// CHECK-SAME: this = [[THIS]], val = 1 | ||
// CHECK-NOT: ~A |
05137ec
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@hahnjo This is causing fails on windows builds - please can you take a look? https://lab.llvm.org/buildbot/#/builders/216/builds/28266
05137ec
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, I'm on it. I need to relax the regular expression to capture the pointer value, will commit shortly
05137ec
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
committed b6ee41f
05137ec
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
still failing, it seems the JIT doesn't deduplicate the variable on Windows. Tracked as #68092, but
XFAIL
ed for now in commit 4812eec.