Skip to content

Commit 3e91330

Browse files
author
ematejska
authored
Merge pull request #10349 from slavapestov/dso-handle-fixes-4.0
Fixes for #dsohandle default arguments [4.0]
2 parents 5e9bdb6 + fef958d commit 3e91330

File tree

5 files changed

+41
-20
lines changed

5 files changed

+41
-20
lines changed

lib/SILGen/SILGen.cpp

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -916,7 +916,29 @@ void SILGenModule::emitDestructor(ClassDecl *cd, DestructorDecl *dd) {
916916
}
917917
}
918918

919-
void SILGenModule::emitDefaultArgGenerator(SILDeclRef constant, Expr *arg) {
919+
void SILGenModule::emitDefaultArgGenerator(SILDeclRef constant, Expr *arg,
920+
DefaultArgumentKind kind) {
921+
switch (kind) {
922+
case DefaultArgumentKind::None:
923+
llvm_unreachable("No default argument here?");
924+
925+
case DefaultArgumentKind::Normal:
926+
break;
927+
928+
case DefaultArgumentKind::Inherited:
929+
return;
930+
931+
case DefaultArgumentKind::Column:
932+
case DefaultArgumentKind::File:
933+
case DefaultArgumentKind::Line:
934+
case DefaultArgumentKind::Function:
935+
case DefaultArgumentKind::DSOHandle:
936+
case DefaultArgumentKind::Nil:
937+
case DefaultArgumentKind::EmptyArray:
938+
case DefaultArgumentKind::EmptyDictionary:
939+
return;
940+
}
941+
920942
emitOrDelayFunction(*this, constant, [this,constant,arg](SILFunction *f) {
921943
preEmitFunction(constant, arg, f, arg);
922944
PrettyStackTraceSILFunction X("silgen emitDefaultArgGenerator ", f);
@@ -1004,7 +1026,7 @@ void SILGenModule::emitDefaultArgGenerators(SILDeclRef::Loc decl,
10041026
for (auto param : *paramList) {
10051027
if (auto defaultArg = param->getDefaultValue())
10061028
emitDefaultArgGenerator(SILDeclRef::getDefaultArgGenerator(decl, index),
1007-
defaultArg);
1029+
defaultArg, param->getDefaultArgumentKind());
10081030
++index;
10091031
}
10101032
}

lib/SILGen/SILGen.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,8 @@ class LLVM_LIBRARY_VISIBILITY SILGenModule : public ASTVisitor<SILGenModule> {
264264
void emitEnumConstructor(EnumElementDecl *decl);
265265

266266
/// Emits the default argument generator with the given expression.
267-
void emitDefaultArgGenerator(SILDeclRef constant, Expr *arg);
267+
void emitDefaultArgGenerator(SILDeclRef constant, Expr *arg,
268+
DefaultArgumentKind kind);
268269

269270
/// Emits the stored property initializer for the given pattern.
270271
void emitStoredPropertyInitialization(PatternBindingDecl *pd, unsigned i);

lib/SILGen/SILGenExpr.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2927,7 +2927,7 @@ visitMagicIdentifierLiteralExpr(MagicIdentifierLiteralExpr *E, SGFContext C) {
29272927
auto DSOGlobal = SGF.SGM.M.lookUpGlobalVariable("__dso_handle");
29282928
if (!DSOGlobal)
29292929
DSOGlobal = SILGlobalVariable::create(SGF.SGM.M,
2930-
SILLinkage::HiddenExternal,
2930+
SILLinkage::PublicExternal,
29312931
IsNotSerialized, "__dso_handle",
29322932
BuiltinRawPtrTy);
29332933
auto DSOAddr = SGF.B.createGlobalAddr(SILLoc, DSOGlobal);

test/SILGen/default_arguments.swift

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// RUN: %target-swift-frontend -Xllvm -sil-full-demangle -emit-silgen %s | %FileCheck %s
2+
// RUN: %target-swift-frontend -Xllvm -sil-full-demangle -emit-silgen %s | %FileCheck %s --check-prefix=NEGATIVE
23

34
// __FUNCTION__ used as top-level parameter produces the module name.
45
// CHECK-LABEL: sil @main
@@ -74,17 +75,13 @@ func testMagicLiterals(file: String = #file,
7475
// Check that default argument generator functions don't leak information about
7576
// user's source.
7677
//
77-
// CHECK-LABEL: sil hidden @_T017default_arguments17testMagicLiteralsySS4file_SS8functionSi4lineSi6columntFfA_
78-
// CHECK: string_literal utf16 ""
78+
// NEGATIVE-NOT: sil hidden @_T017default_arguments17testMagicLiteralsySS4file_SS8functionSi4lineSi6columntFfA_
7979
//
80-
// CHECK-LABEL: sil hidden @_T017default_arguments17testMagicLiteralsySS4file_SS8functionSi4lineSi6columntFfA0_
81-
// CHECK: string_literal utf16 ""
80+
// NEGATIVE-NOT: sil hidden @_T017default_arguments17testMagicLiteralsySS4file_SS8functionSi4lineSi6columntFfA0_
8281
//
83-
// CHECK-LABEL: sil hidden @_T017default_arguments17testMagicLiteralsySS4file_SS8functionSi4lineSi6columntFfA1_
84-
// CHECK: integer_literal $Builtin.Int2048, 0
82+
// NEGATIVE-NOT: sil hidden @_T017default_arguments17testMagicLiteralsySS4file_SS8functionSi4lineSi6columntFfA1_
8583
//
86-
// CHECK-LABEL: sil hidden @_T017default_arguments17testMagicLiteralsySS4file_SS8functionSi4lineSi6columntFfA2_
87-
// CHECK: integer_literal $Builtin.Int2048, 0
84+
// NEGATIVE-NOT: sil hidden @_T017default_arguments17testMagicLiteralsySS4file_SS8functionSi4lineSi6columntFfA2_
8885

8986
func closure(_: () -> ()) {}
9087
func autoclosure(_: @autoclosure () -> ()) {}

test/SILGen/dso_handle.swift

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
11
// RUN: %target-swift-frontend -Xllvm -sil-full-demangle -emit-silgen %s | %FileCheck %s
22

3-
// CHECK: sil_global hidden_external [[DSO:@__dso_handle]] : $Builtin.RawPointer
3+
// CHECK: sil_global [[DSO:@__dso_handle]] : $Builtin.RawPointer
44

55
// CHECK-LABEL: sil @main : $@convention(c)
66
// CHECK: bb0
77
// CHECK: [[DSOAddr:%[0-9]+]] = global_addr [[DSO]] : $*Builtin.RawPointer
88
// CHECK-NEXT: [[DSOPtr:%[0-9]+]] = address_to_pointer [[DSOAddr]] : $*Builtin.RawPointer to $Builtin.RawPointer
99
// CHECK-NEXT: [[DSOPtrStruct:[0-9]+]] = struct $UnsafeRawPointer ([[DSOPtr]] : $Builtin.RawPointer)
1010

11-
12-
// CHECK-LABEL: sil hidden @_T010dso_handle14printDSOHandleS2V0A0_tFfA_
13-
// CHECK: [[DSOAddr:%[0-9]+]] = global_addr [[DSO]] : $*Builtin.RawPointer
14-
// CHECK-NEXT: [[DSOPtr:%[0-9]+]] = address_to_pointer [[DSOAddr]] : $*Builtin.RawPointer to $Builtin.RawPointer
15-
// CHECK-NEXT: [[DSOPtrStruct:%[0-9]+]] = struct $UnsafeRawPointer ([[DSOPtr]] : $Builtin.RawPointer)
16-
// CHECK-NEXT: return [[DSOPtrStruct]] : $UnsafeRawPointer
1711
func printDSOHandle(dso: UnsafeRawPointer = #dsohandle) -> UnsafeRawPointer {
1812
print(dso)
1913
return dso
2014
}
2115

22-
_ = printDSOHandle()
16+
@_inlineable public func printDSOHandleInlineable(dso: UnsafeRawPointer = #dsohandle) -> UnsafeRawPointer {
17+
return dso
18+
}
19+
20+
@_inlineable public func callsPrintDSOHandleInlineable() {
21+
printDSOHandleInlineable()
22+
}
2323

24+
_ = printDSOHandle()

0 commit comments

Comments
 (0)