From faa78bd73df46418298a20a1744b0a1d301db4fc Mon Sep 17 00:00:00 2001 From: Xi Ge Date: Mon, 5 Dec 2016 12:02:18 -0800 Subject: [PATCH 1/3] Fixing /IDE/crashers/016-swift-mangle-mangler-mangleidentifier.swift --- lib/AST/Mangle.cpp | 7 ++++++- .../016-swift-mangle-mangler-mangleidentifier.swift | 3 --- .../016-swift-mangle-mangler-mangleidentifier.swift | 3 +++ 3 files changed, 9 insertions(+), 4 deletions(-) delete mode 100644 validation-test/IDE/crashers/016-swift-mangle-mangler-mangleidentifier.swift create mode 100644 validation-test/IDE/crashers_fixed/016-swift-mangle-mangler-mangleidentifier.swift diff --git a/lib/AST/Mangle.cpp b/lib/AST/Mangle.cpp index ed0aecc95ae24..57ee2a37b5f04 100644 --- a/lib/AST/Mangle.cpp +++ b/lib/AST/Mangle.cpp @@ -1590,7 +1590,12 @@ void Mangler::mangleEntity(const ValueDecl *decl, unsigned uncurryLevel) { assert(!isa(decl)); assert(!isa(decl)); - + + // Avoid mangling nameless entity. This may happen in erroneous code as code + // completion. + if (!decl->hasName()) + return; + // entity ::= static? entity-kind context entity-name if (decl->isStatic()) Buffer << 'Z'; 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_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^# From 3bbd7861ecb04ed04695770ba8e8966c1c89d705 Mon Sep 17 00:00:00 2001 From: Xi Ge Date: Mon, 5 Dec 2016 13:05:27 -0800 Subject: [PATCH 2/3] Allow mangling accessors, which are nameless. --- lib/AST/Mangle.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/AST/Mangle.cpp b/lib/AST/Mangle.cpp index 57ee2a37b5f04..270c26f0c2c58 100644 --- a/lib/AST/Mangle.cpp +++ b/lib/AST/Mangle.cpp @@ -1591,11 +1591,6 @@ void Mangler::mangleEntity(const ValueDecl *decl, assert(!isa(decl)); assert(!isa(decl)); - // Avoid mangling nameless entity. This may happen in erroneous code as code - // completion. - if (!decl->hasName()) - return; - // entity ::= static? entity-kind context entity-name if (decl->isStatic()) Buffer << 'Z'; @@ -1608,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)) { From 4370807261b09d928b0d4fe4a4d5fc68749e180b Mon Sep 17 00:00:00 2001 From: Xi Ge Date: Mon, 5 Dec 2016 17:59:26 -0800 Subject: [PATCH 3/3] Mark IDE/crashers/100-swift-mangle-mangler-mangledeclname.swift as fixed. --- .../IDE/crashers/100-swift-mangle-mangler-mangledeclname.swift | 3 --- .../100-swift-mangle-mangler-mangledeclname.swift | 2 ++ 2 files changed, 2 insertions(+), 3 deletions(-) delete mode 100644 validation-test/IDE/crashers/100-swift-mangle-mangler-mangledeclname.swift create mode 100644 validation-test/IDE/crashers_fixed/100-swift-mangle-mangler-mangledeclname.swift 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/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^#