Skip to content

Commit fe0ca8c

Browse files
bitjammertkremenek
authored andcommitted
[SILGen] Utilize _silgen_name for implicit global variables (#3641)
The known __dso_handle symbol name wasn't getting used when emitting references to #dsohandle, causing link time failures for a mangled name that didn't exist. rdar://problem/26565092
1 parent 799d054 commit fe0ca8c

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

lib/SILGen/SILGenGlobalVariable.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,10 @@ SILGlobalVariable *SILGenModule::getSILGlobalVariable(VarDecl *gDecl,
2626
ForDefinition_t forDef) {
2727
// First, get a mangled name for the declaration.
2828
std::string mangledName;
29-
{
29+
30+
if (auto SILGenName = gDecl->getAttrs().getAttribute<SILGenNameAttr>()) {
31+
mangledName = SILGenName->Name;
32+
} else {
3033
Mangler mangler;
3134
mangler.mangleGlobalVariableFull(gDecl);
3235
mangledName = mangler.finalize();

test/SILGen/default_arguments.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ func takeDSOHandle(_ handle: UnsafeMutablePointer<Void> = #dsohandle) { }
193193

194194
// CHECK-LABEL: sil hidden @_TF17default_arguments13testDSOHandleFT_T_
195195
func testDSOHandle() {
196-
// CHECK: [[DSO_HANDLE:%[0-9]+]] = global_addr @_Tv17default_arguments12__dso_handleGSpT__ : $*UnsafeMutablePointer<()>
196+
// CHECK: [[DSO_HANDLE:%[0-9]+]] = global_addr @__dso_handle : $*UnsafeMutablePointer<()>
197197
takeDSOHandle()
198198
}
199199

test/SILGen/dso_handle.swift

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// RUN: %target-swift-frontend -Xllvm -sil-full-demangle -emit-silgen %s | FileCheck %s
2+
3+
// CHECK: sil_global hidden_external @__dso_handle : $UnsafeMutablePointer<()>
4+
5+
// CHECK-LABEL: sil @main : $@convention(c)
6+
// CHECK: bb0
7+
// CHECK: [[DSO:%[0-9]+]] = global_addr @__dso_handle : $*UnsafeMutablePointer<()>
8+
// CHECK: load [[DSO]]
9+
10+
// CHECK-LABEL: sil hidden @_TIF10dso_handle14printDSOHandleFT3dsoGSpT___GSpT__A_
11+
// CHECK: [[DSO:%[0-9]+]] = global_addr @__dso_handle : $*UnsafeMutablePointer<()>
12+
// CHECK: load [[DSO]]
13+
func printDSOHandle(dso: UnsafeMutablePointer<Void> = #dsohandle) -> UnsafeMutablePointer<Void> {
14+
print(dso)
15+
}
16+
17+
printDSOHandle()
18+

0 commit comments

Comments
 (0)