Skip to content

Commit 27b8451

Browse files
committed
Ensure that generic parameters always have a valid access level.
...just in case they end up in a situation where we want to check their access level. Like code completion. rdar://problem/21197042 Swift SVN r29453
1 parent 8ad5297 commit 27b8451

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

lib/Sema/TypeCheckDecl.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -995,10 +995,19 @@ static void finalizeGenericParamList(ArchetypeBuilder &builder,
995995
GenericParamList *genericParams,
996996
DeclContext *dc,
997997
TypeChecker &TC) {
998+
Accessibility access;
999+
if (auto *fd = dyn_cast<FuncDecl>(dc))
1000+
access = fd->getFormalAccess();
1001+
else if (auto *nominal = dyn_cast<NominalTypeDecl>(dc))
1002+
access = nominal->getFormalAccess();
1003+
else
1004+
access = Accessibility::Internal;
1005+
9981006
// Wire up the archetypes.
9991007
for (auto GP : *genericParams) {
10001008
GP->setArchetype(builder.getArchetype(GP));
10011009
TC.checkInheritanceClause(GP);
1010+
GP->setAccessibility(access);
10021011
}
10031012
genericParams->setAllArchetypes(
10041013
TC.Context.AllocateCopy(builder.getAllArchetypes()));

test/IDE/complete_crashes.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,15 @@ while true {
5555
}
5656
}
5757

58+
// rdar://problem/21197042
59+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=GENERIC_PARAM_AND_ASSOC_TYPE | FileCheck %s -check-prefix=GENERIC_PARAM_AND_ASSOC_TYPE
60+
struct CustomGenericCollection<Key> : DictionaryLiteralConvertible {
61+
// GENERIC_PARAM_AND_ASSOC_TYPE: Begin completions
62+
// GENERIC_PARAM_AND_ASSOC_TYPE-DAG: Decl[InstanceVar]/CurrNominal: count[#Int#]; name=count
63+
// GENERIC_PARAM_AND_ASSOC_TYPE-DAG: Decl[TypeAlias]/CurrNominal: Key[#Key#]; name=Key
64+
// GENERIC_PARAM_AND_ASSOC_TYPE-DAG: Decl[TypeAlias]/CurrNominal: Value[#Value#]; name=Value
65+
// GENERIC_PARAM_AND_ASSOC_TYPE: End completions
66+
67+
var count: Int { #^GENERIC_PARAM_AND_ASSOC_TYPE^# }
68+
}
69+

0 commit comments

Comments
 (0)