diff --git a/lib/AST/Mangle.cpp b/lib/AST/Mangle.cpp index ed0aecc95ae24..270c26f0c2c58 100644 --- a/lib/AST/Mangle.cpp +++ b/lib/AST/Mangle.cpp @@ -1590,7 +1590,7 @@ void Mangler::mangleEntity(const ValueDecl *decl, unsigned uncurryLevel) { assert(!isa(decl)); assert(!isa(decl)); - + // entity ::= static? entity-kind context entity-name if (decl->isStatic()) Buffer << 'Z'; @@ -1603,7 +1603,12 @@ void Mangler::mangleEntity(const ValueDecl *decl, return mangleAccessorEntity(accessorKind, func->getAddressorKind(), func->getAccessorStorageDecl()); } - + + // Avoid mangling nameless entity. This may happen in erroneous code as code + // completion. + if (!decl->hasName()) + return; + if (isa(decl)) { Buffer << 'v'; } else if (isa(decl)) { diff --git a/validation-test/IDE/crashers/016-swift-mangle-mangler-mangleidentifier.swift b/validation-test/IDE/crashers/016-swift-mangle-mangler-mangleidentifier.swift deleted file mode 100644 index 207dc5daa3507..0000000000000 --- a/validation-test/IDE/crashers/016-swift-mangle-mangler-mangleidentifier.swift +++ /dev/null @@ -1,3 +0,0 @@ -// RUN: not --crash %target-swift-ide-test -code-completion -code-completion-token=A -source-filename=%s -// REQUIRES: asserts -var d{let:{func a#^A^# diff --git a/validation-test/IDE/crashers/100-swift-mangle-mangler-mangledeclname.swift b/validation-test/IDE/crashers/100-swift-mangle-mangler-mangledeclname.swift deleted file mode 100644 index 16c6814c63438..0000000000000 --- a/validation-test/IDE/crashers/100-swift-mangle-mangler-mangledeclname.swift +++ /dev/null @@ -1,3 +0,0 @@ -// RUN: not --crash %target-swift-ide-test -code-completion -code-completion-token=A -source-filename=%s -// REQUIRES: asserts -{let:{class S(}#^A^# \ No newline at end of file diff --git a/validation-test/IDE/crashers_fixed/016-swift-mangle-mangler-mangleidentifier.swift b/validation-test/IDE/crashers_fixed/016-swift-mangle-mangler-mangleidentifier.swift new file mode 100644 index 0000000000000..10652d26ef427 --- /dev/null +++ b/validation-test/IDE/crashers_fixed/016-swift-mangle-mangler-mangleidentifier.swift @@ -0,0 +1,3 @@ +// RUN: %target-swift-ide-test -code-completion -code-completion-token=A -source-filename=%s +// REQUIRES: asserts +var d{let:{func a#^A^# diff --git a/validation-test/IDE/crashers_fixed/100-swift-mangle-mangler-mangledeclname.swift b/validation-test/IDE/crashers_fixed/100-swift-mangle-mangler-mangledeclname.swift new file mode 100644 index 0000000000000..75cc436ba073c --- /dev/null +++ b/validation-test/IDE/crashers_fixed/100-swift-mangle-mangler-mangledeclname.swift @@ -0,0 +1,2 @@ +// RUN: %target-swift-ide-test -code-completion -code-completion-token=A -source-filename=%s +{let:{class S(}#^A^#