Skip to content

Commit 42e23c1

Browse files
authored
Merge pull request #5579 from eeckstein/globalopt-fix
2 parents 9d618ed + 695edc0 commit 42e23c1

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

lib/SILOptimizer/IPO/GlobalOpt.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ static SILFunction *genGetterFromInit(StoreInst *Store,
197197
auto *varDecl = SILG->getDecl();
198198

199199
Mangle::Mangler getterMangler;
200+
getterMangler.append("_T");
200201
getterMangler.mangleGlobalGetterEntity(varDecl);
201202
auto getterName = getterMangler.finalize();
202203

@@ -231,7 +232,7 @@ static SILFunction *genGetterFromInit(StoreInst *Store,
231232
ParameterConvention::Direct_Owned, { }, Results, None,
232233
Store->getModule().getASTContext());
233234
auto *GetterF = Store->getModule().getOrCreateFunction(Store->getLoc(),
234-
getterName, SILLinkage::PrivateExternal, LoweredType,
235+
getterName, SILLinkage::Private, LoweredType,
235236
IsBare_t::IsBare, IsTransparent_t::IsNotTransparent,
236237
IsFragile_t::IsFragile);
237238
GetterF->setDebugScope(Store->getFunction()->getDebugScope());
@@ -470,6 +471,7 @@ static SILFunction *genGetterFromInit(SILFunction *InitF, VarDecl *varDecl) {
470471
// Generate a getter from the global init function without side-effects.
471472

472473
Mangle::Mangler getterMangler;
474+
getterMangler.append("_T");
473475
getterMangler.mangleGlobalGetterEntity(varDecl);
474476
auto getterName = getterMangler.finalize();
475477

@@ -486,7 +488,7 @@ static SILFunction *genGetterFromInit(SILFunction *InitF, VarDecl *varDecl) {
486488
ParameterConvention::Direct_Owned, { }, Results, None,
487489
InitF->getASTContext());
488490
auto *GetterF = InitF->getModule().getOrCreateFunction(InitF->getLocation(),
489-
getterName, SILLinkage::PrivateExternal, LoweredType,
491+
getterName, SILLinkage::Private, LoweredType,
490492
IsBare_t::IsBare, IsTransparent_t::IsNotTransparent,
491493
IsFragile_t::IsFragile);
492494
if (InitF->hasUnqualifiedOwnership())
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// RUN: %target-swift-frontend -O -Xllvm -sil-disable-pass=Inliner -emit-sil -primary-file %s | %FileCheck %s
2+
3+
// Check if GlobalOpt generates the getters with the right linkage and the right mangling
4+
5+
struct MyStruct {
6+
static let StaticVar = 10
7+
}
8+
9+
let Global = 27
10+
11+
func testit() -> Int {
12+
return MyStruct.StaticVar + Global
13+
}
14+
15+
_ = testit()
16+
17+
// CHECK: sil hidden @{{.*}}testit
18+
19+
// CHECK: // MyStruct.StaticVar.getter
20+
// CHECK-NEXT: sil private [fragile] @_{{.*}}StaticVar
21+
22+
// CHECK: // Global.getter
23+
// CHECK-NEXT: sil private [fragile] @_{{.*}}Global

0 commit comments

Comments
 (0)