Skip to content

Commit 85c0555

Browse files
authored
Merge pull request #74288 from hamishknight/invalid-enum-mangle
[Mangler] Mangle function type for invalid enum element
2 parents 88d420f + d98cb9e commit 85c0555

File tree

4 files changed

+42
-22
lines changed

4 files changed

+42
-22
lines changed

lib/AST/ASTMangler.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3842,8 +3842,11 @@ CanType ASTMangler::getDeclTypeForMangling(
38423842
parentGenericSig = GenericSignature();
38433843

38443844
auto &C = decl->getASTContext();
3845-
if (decl->isInvalid()) {
3846-
if (isa<AbstractFunctionDecl>(decl)) {
3845+
3846+
auto ty = decl->getInterfaceType()->getReferenceStorageReferent();
3847+
if (ty->hasError()) {
3848+
if (isa<AbstractFunctionDecl>(decl) || isa<EnumElementDecl>(decl) ||
3849+
isa<SubscriptDecl>(decl)) {
38473850
// FIXME: Verify ExtInfo state is correct, not working by accident.
38483851
CanFunctionType::ExtInfo info;
38493852
return CanFunctionType::get({AnyFunctionType::Param(C.TheErrorType)},
@@ -3852,8 +3855,6 @@ CanType ASTMangler::getDeclTypeForMangling(
38523855
return C.TheErrorType;
38533856
}
38543857

3855-
Type ty = decl->getInterfaceType()->getReferenceStorageReferent();
3856-
38573858
// If this declaration predates concurrency, adjust its type to not
38583859
// contain type features that were not available pre-concurrency. This
38593860
// cannot alter the ABI in any way.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
enum MyEnum {
2+
// RUN: %target-swift-ide-test -print-indexed-symbols -source-filename %s | %FileCheck %s
3+
case test(artifactID: String, hostTriple: Triple)
4+
// CHECK: enumerator/Swift | test(artifactID:hostTriple:)
5+
// CHECK: param/Swift | artifactID
6+
// CHECK: param/Swift | hostTriple
7+
}

test/Index/rdar129065620.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: not %target-swift-frontend -typecheck %s -index-store-path %t
3+
4+
// rdar://129065620 - Make sure we don't crash when verifying the mangling.
5+
enum Foo {
6+
case bar(id: UInt32)
7+
case bar(id: UInt32)
8+
}
9+
10+
struct S {
11+
subscript(x: Invalid) -> Invalid {}
12+
}

test/SourceKit/Indexing/index_effective_access_level.swift.response

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1302,14 +1302,14 @@
13021302
{
13031303
key.kind: source.lang.swift.decl.function.subscript,
13041304
key.name: "subscript(_:)",
1305-
key.usr: "s:28index_effective_access_level18ScopeReducerStruct33_2295DDF1454D6A6D9229E8222CD85214LLVXeip",
1305+
key.usr: "s:28index_effective_access_level18ScopeReducerStruct33_2295DDF1454D6A6D9229E8222CD85214LLVyXeXecip",
13061306
key.line: 93,
13071307
key.column: 5,
13081308
key.entities: [
13091309
{
13101310
key.kind: source.lang.swift.decl.function.accessor.getter,
13111311
key.name: "getter:subscript(_:)",
1312-
key.usr: "s:28index_effective_access_level18ScopeReducerStruct33_2295DDF1454D6A6D9229E8222CD85214LLVXeig",
1312+
key.usr: "s:28index_effective_access_level18ScopeReducerStruct33_2295DDF1454D6A6D9229E8222CD85214LLVyXeXecig",
13131313
key.line: 93,
13141314
key.column: 46
13151315
},
@@ -1333,14 +1333,14 @@
13331333
{
13341334
key.kind: source.lang.swift.decl.function.subscript,
13351335
key.name: "subscript(_:)",
1336-
key.usr: "s:28index_effective_access_level18ScopeReducerStruct33_2295DDF1454D6A6D9229E8222CD85214LLVXeip",
1336+
key.usr: "s:28index_effective_access_level18ScopeReducerStruct33_2295DDF1454D6A6D9229E8222CD85214LLVyXeXecip",
13371337
key.line: 94,
13381338
key.column: 17,
13391339
key.entities: [
13401340
{
13411341
key.kind: source.lang.swift.decl.function.accessor.getter,
13421342
key.name: "getter:subscript(_:)",
1343-
key.usr: "s:28index_effective_access_level18ScopeReducerStruct33_2295DDF1454D6A6D9229E8222CD85214LLVXeig",
1343+
key.usr: "s:28index_effective_access_level18ScopeReducerStruct33_2295DDF1454D6A6D9229E8222CD85214LLVyXeXecig",
13441344
key.line: 94,
13451345
key.column: 61
13461346
},
@@ -1369,14 +1369,14 @@
13691369
{
13701370
key.kind: source.lang.swift.decl.function.subscript,
13711371
key.name: "subscript(_:)",
1372-
key.usr: "s:28index_effective_access_level18ScopeReducerStruct33_2295DDF1454D6A6D9229E8222CD85214LLVXeip",
1372+
key.usr: "s:28index_effective_access_level18ScopeReducerStruct33_2295DDF1454D6A6D9229E8222CD85214LLVyXeXecip",
13731373
key.line: 95,
13741374
key.column: 13,
13751375
key.entities: [
13761376
{
13771377
key.kind: source.lang.swift.decl.function.accessor.getter,
13781378
key.name: "getter:subscript(_:)",
1379-
key.usr: "s:28index_effective_access_level18ScopeReducerStruct33_2295DDF1454D6A6D9229E8222CD85214LLVXeig",
1379+
key.usr: "s:28index_effective_access_level18ScopeReducerStruct33_2295DDF1454D6A6D9229E8222CD85214LLVyXeXecig",
13801380
key.line: 95,
13811381
key.column: 53
13821382
},
@@ -2077,14 +2077,14 @@
20772077
{
20782078
key.kind: source.lang.swift.decl.function.subscript,
20792079
key.name: "subscript(_:)",
2080-
key.usr: "s:28index_effective_access_level17ScopeKeeperStructVXeip",
2080+
key.usr: "s:28index_effective_access_level17ScopeKeeperStructVyXeXecip",
20812081
key.line: 121,
20822082
key.column: 5,
20832083
key.entities: [
20842084
{
20852085
key.kind: source.lang.swift.decl.function.accessor.getter,
20862086
key.name: "getter:subscript(_:)",
2087-
key.usr: "s:28index_effective_access_level17ScopeKeeperStructVXeig",
2087+
key.usr: "s:28index_effective_access_level17ScopeKeeperStructVyXeXecig",
20882088
key.line: 121,
20892089
key.column: 46
20902090
},
@@ -2108,14 +2108,14 @@
21082108
{
21092109
key.kind: source.lang.swift.decl.function.subscript,
21102110
key.name: "subscript(_:)",
2111-
key.usr: "s:28index_effective_access_level17ScopeKeeperStructVXe33_2295DDF1454D6A6D9229E8222CD85214Llip",
2111+
key.usr: "s:28index_effective_access_level17ScopeKeeperStructVyXeXec33_2295DDF1454D6A6D9229E8222CD85214Llip",
21122112
key.line: 122,
21132113
key.column: 17,
21142114
key.entities: [
21152115
{
21162116
key.kind: source.lang.swift.decl.function.accessor.getter,
21172117
key.name: "getter:subscript(_:)",
2118-
key.usr: "s:28index_effective_access_level17ScopeKeeperStructVXe33_2295DDF1454D6A6D9229E8222CD85214Llig",
2118+
key.usr: "s:28index_effective_access_level17ScopeKeeperStructVyXeXec33_2295DDF1454D6A6D9229E8222CD85214Llig",
21192119
key.line: 122,
21202120
key.column: 61
21212121
},
@@ -2144,14 +2144,14 @@
21442144
{
21452145
key.kind: source.lang.swift.decl.function.subscript,
21462146
key.name: "subscript(_:)",
2147-
key.usr: "s:28index_effective_access_level17ScopeKeeperStructVXe33_2295DDF1454D6A6D9229E8222CD85214Llip",
2147+
key.usr: "s:28index_effective_access_level17ScopeKeeperStructVyXeXec33_2295DDF1454D6A6D9229E8222CD85214Llip",
21482148
key.line: 123,
21492149
key.column: 13,
21502150
key.entities: [
21512151
{
21522152
key.kind: source.lang.swift.decl.function.accessor.getter,
21532153
key.name: "getter:subscript(_:)",
2154-
key.usr: "s:28index_effective_access_level17ScopeKeeperStructVXe33_2295DDF1454D6A6D9229E8222CD85214Llig",
2154+
key.usr: "s:28index_effective_access_level17ScopeKeeperStructVyXeXec33_2295DDF1454D6A6D9229E8222CD85214Llig",
21552155
key.line: 123,
21562156
key.column: 53
21572157
},
@@ -2852,14 +2852,14 @@
28522852
{
28532853
key.kind: source.lang.swift.decl.function.subscript,
28542854
key.name: "subscript(_:)",
2855-
key.usr: "s:28index_effective_access_level25PartialScopeReducerStructVXeip",
2855+
key.usr: "s:28index_effective_access_level25PartialScopeReducerStructVyXeXecip",
28562856
key.line: 149,
28572857
key.column: 5,
28582858
key.entities: [
28592859
{
28602860
key.kind: source.lang.swift.decl.function.accessor.getter,
28612861
key.name: "getter:subscript(_:)",
2862-
key.usr: "s:28index_effective_access_level25PartialScopeReducerStructVXeig",
2862+
key.usr: "s:28index_effective_access_level25PartialScopeReducerStructVyXeXecig",
28632863
key.line: 149,
28642864
key.column: 46
28652865
},
@@ -2883,14 +2883,14 @@
28832883
{
28842884
key.kind: source.lang.swift.decl.function.subscript,
28852885
key.name: "subscript(_:)",
2886-
key.usr: "s:28index_effective_access_level25PartialScopeReducerStructVXe33_2295DDF1454D6A6D9229E8222CD85214Llip",
2886+
key.usr: "s:28index_effective_access_level25PartialScopeReducerStructVyXeXec33_2295DDF1454D6A6D9229E8222CD85214Llip",
28872887
key.line: 150,
28882888
key.column: 17,
28892889
key.entities: [
28902890
{
28912891
key.kind: source.lang.swift.decl.function.accessor.getter,
28922892
key.name: "getter:subscript(_:)",
2893-
key.usr: "s:28index_effective_access_level25PartialScopeReducerStructVXe33_2295DDF1454D6A6D9229E8222CD85214Llig",
2893+
key.usr: "s:28index_effective_access_level25PartialScopeReducerStructVyXeXec33_2295DDF1454D6A6D9229E8222CD85214Llig",
28942894
key.line: 150,
28952895
key.column: 61
28962896
},
@@ -2919,14 +2919,14 @@
29192919
{
29202920
key.kind: source.lang.swift.decl.function.subscript,
29212921
key.name: "subscript(_:)",
2922-
key.usr: "s:28index_effective_access_level25PartialScopeReducerStructVXe33_2295DDF1454D6A6D9229E8222CD85214Llip",
2922+
key.usr: "s:28index_effective_access_level25PartialScopeReducerStructVyXeXec33_2295DDF1454D6A6D9229E8222CD85214Llip",
29232923
key.line: 151,
29242924
key.column: 13,
29252925
key.entities: [
29262926
{
29272927
key.kind: source.lang.swift.decl.function.accessor.getter,
29282928
key.name: "getter:subscript(_:)",
2929-
key.usr: "s:28index_effective_access_level25PartialScopeReducerStructVXe33_2295DDF1454D6A6D9229E8222CD85214Llig",
2929+
key.usr: "s:28index_effective_access_level25PartialScopeReducerStructVyXeXec33_2295DDF1454D6A6D9229E8222CD85214Llig",
29302930
key.line: 151,
29312931
key.column: 53
29322932
},

0 commit comments

Comments
 (0)