Skip to content

Commit d4c0acf

Browse files
author
Nathan Hawes
committed
[ASTMangler] Don't verify the USR mangling for invalid decls
USRs generated for the index store and sourcekit requests for invalid decls are best-effort – we don't need to guarantee they can be de- or re-mangled.
1 parent fae3590 commit d4c0acf

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

lib/AST/ASTMangler.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -518,8 +518,10 @@ std::string ASTMangler::mangleDeclAsUSR(const ValueDecl *Decl,
518518
appendEntity(Decl);
519519
}
520520

521-
// We have a custom prefix, so finalize() won't verify for us. Do it manually.
522-
verify(Storage.str().drop_front(USRPrefix.size()));
521+
// We have a custom prefix, so finalize() won't verify for us. If we're not
522+
// in invalid code (coming from an IDE caller) verify manually.
523+
if (!Decl->isInvalid())
524+
verify(Storage.str().drop_front(USRPrefix.size()));
523525
return finalize();
524526
}
525527

test/SourceKit/CursorInfo/cursor_invalid.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ func resyncParser2() {}
2424

2525
Swift(label: 3)
2626

27+
enum Outer {
28+
case Inner(IDontExist)
29+
}
30+
2731
// RUN: %sourcekitd-test -req=cursor -pos=4:13 %s -- %s | %FileCheck -check-prefix=CHECK1 %s
2832
// CHECK1: source.lang.swift.decl.var.local (4:13-4:14)
2933
// CHECK1: c
@@ -63,3 +67,7 @@ Swift(label: 3)
6367
// EQEQ3: <decl.function.operator.infix><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>== </decl.name>(<decl.var.parameter><decl.var.parameter.name>x</decl.var.parameter.name>: <decl.var.parameter.type><ref.class usr="s:14cursor_invalid1CC">C</ref.class></decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.name>y</decl.var.parameter.name>: <decl.var.parameter.type><ref.class usr="s:14cursor_invalid1CC">C</ref.class></decl.var.parameter.type></decl.var.parameter>)</decl.function.operator.infix>
6468

6569
// RUN: %sourcekitd-test -req=cursor -pos=25:7 %s -- %s | %FileCheck -check-prefix=DIAG %s
70+
71+
// RUN: %sourcekitd-test -req=cursor -pos=28:8 %s -- %s | %FileCheck -check-prefix=INVALID_ENUM %s
72+
// INVALID_ENUM: source.lang.swift.decl.enumelement (28:8-28:13)
73+
// INVALID_ENUM: Inner(_:)

0 commit comments

Comments
 (0)