Skip to content

Commit 159a1d9

Browse files
authored
Merge pull request #6077 from nkcsgexi/ide-crash-012
2 parents c14391d + 5699b5a commit 159a1d9

File tree

3 files changed

+10
-8
lines changed

3 files changed

+10
-8
lines changed

lib/AST/Mangle.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -198,12 +198,14 @@ namespace {
198198
/// assumes that field and global-variable bindings always bind at
199199
/// least one name, which is probably a reasonable assumption but may
200200
/// not be adequately enforced.
201-
static VarDecl *findFirstVariable(PatternBindingDecl *binding) {
201+
static Optional<VarDecl*> findFirstVariable(PatternBindingDecl *binding) {
202202
for (auto entry : binding->getPatternList()) {
203203
auto var = FindFirstVariable().visit(entry.getPattern());
204204
if (var) return var;
205205
}
206-
llvm_unreachable("pattern-binding bound no variables?");
206+
// Pattern-binding bound without variables exists in erroneous code, e.g.
207+
// during code completion.
208+
return None;
207209
}
208210

209211
void Mangler::mangleContext(const DeclContext *ctx) {
@@ -230,8 +232,8 @@ void Mangler::mangleContext(const DeclContext *ctx) {
230232
}
231233
case LocalDeclContextKind::PatternBindingInitializer: {
232234
auto patternInit = cast<SerializedPatternBindingInitializer>(local);
233-
auto var = findFirstVariable(patternInit->getBinding());
234-
mangleInitializerEntity(var);
235+
if (auto var = findFirstVariable(patternInit->getBinding()))
236+
mangleInitializerEntity(var.getValue());
235237
return;
236238
}
237239
case LocalDeclContextKind::TopLevelCodeDecl:
@@ -318,8 +320,8 @@ void Mangler::mangleContext(const DeclContext *ctx) {
318320

319321
case InitializerKind::PatternBinding: {
320322
auto patternInit = cast<PatternBindingInitializer>(ctx);
321-
auto var = findFirstVariable(patternInit->getBinding());
322-
mangleInitializerEntity(var);
323+
if (auto var = findFirstVariable(patternInit->getBinding()))
324+
mangleInitializerEntity(var.getValue());
323325
return;
324326
}
325327
}

validation-test/IDE/crashers/012-swift-mangle-mangler-manglecontext.swift

Lines changed: 0 additions & 2 deletions
This file was deleted.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
// RUN: %target-swift-ide-test -code-completion -code-completion-token=A -source-filename=%s
2+
class a{var _={func b#^A^#

0 commit comments

Comments
 (0)