diff options
| author | Nico Weber <nicolasweber@gmx.de> | 2019-04-23 16:20:27 +0000 |
|---|---|---|
| committer | Nico Weber <nicolasweber@gmx.de> | 2019-04-23 16:20:27 +0000 |
| commit | e8f21b1a6b01e75f247f8aa84bdfefc17bf71dd8 (patch) | |
| tree | 1373c3bcec6d42f7dc6dff039974701203987a9c | |
| parent | 171b74e31c7264b9f27d088bac886c4233acb3d2 (diff) | |
| download | bcm5719-llvm-e8f21b1a6b01e75f247f8aa84bdfefc17bf71dd8.tar.gz bcm5719-llvm-e8f21b1a6b01e75f247f8aa84bdfefc17bf71dd8.zip | |
llvm-undname: Support demangling the spaceship operator
Also add a test for demanling the co_await operator.
llvm-svn: 359007
| -rw-r--r-- | llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h | 4 | ||||
| -rw-r--r-- | llvm/lib/Demangle/MicrosoftDemangle.cpp | 5 | ||||
| -rw-r--r-- | llvm/lib/Demangle/MicrosoftDemangleNodes.cpp | 5 | ||||
| -rw-r--r-- | llvm/test/Demangle/ms-cxx20.test | 9 |
4 files changed, 16 insertions, 7 deletions
diff --git a/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h b/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h index b478418086b..6638cb8e721 100644 --- a/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h +++ b/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h @@ -170,8 +170,8 @@ enum class IntrinsicFunctionKind : uint8_t { VectorCopyCtorIter, // ?__G vector copy constructor iterator VectorVbaseCopyCtorIter, // ?__H vector vbase copy constructor iterator ManVectorVbaseCopyCtorIter, // ?__I managed vector vbase copy constructor - CoAwait, // ?__L co_await - Spaceship, // operator<=> + CoAwait, // ?__L operator co_await + Spaceship, // ?__M operator<=> MaxIntrinsic }; diff --git a/llvm/lib/Demangle/MicrosoftDemangle.cpp b/llvm/lib/Demangle/MicrosoftDemangle.cpp index beb51695fc1..14c6e1e5ef5 100644 --- a/llvm/lib/Demangle/MicrosoftDemangle.cpp +++ b/llvm/lib/Demangle/MicrosoftDemangle.cpp @@ -626,8 +626,8 @@ Demangler::translateIntrinsicFunctionCode(char CH, // iter IFK::None, // ?__J local static thread guard IFK::None, // ?__K operator ""_name - IFK::CoAwait, // ?__L co_await - IFK::None, // ?__M <unused> + IFK::CoAwait, // ?__L operator co_await + IFK::Spaceship, // ?__M operator<=> IFK::None, // ?__N <unused> IFK::None, // ?__O <unused> IFK::None, // ?__P <unused> @@ -687,7 +687,6 @@ Demangler::demangleFunctionIdentifierCode(StringView &MangledName, translateIntrinsicFunctionCode(CH, Group)); } } - // No Mangling Yet: Spaceship, // operator<=> DEMANGLE_UNREACHABLE; } diff --git a/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp b/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp index e19d041b90e..a3ee5f9d91d 100644 --- a/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp +++ b/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp @@ -337,8 +337,9 @@ void IntrinsicFunctionIdentifierNode::output(OutputStream &OS, "`vector vbase copy constructor iterator'"); OUTPUT_ENUM_CLASS_VALUE(IntrinsicFunctionKind, ManVectorVbaseCopyCtorIter, "`managed vector vbase copy constructor iterator'"); - OUTPUT_ENUM_CLASS_VALUE(IntrinsicFunctionKind, CoAwait, "co_await"); - OUTPUT_ENUM_CLASS_VALUE(IntrinsicFunctionKind, Spaceship, "operator <=>"); + OUTPUT_ENUM_CLASS_VALUE(IntrinsicFunctionKind, CoAwait, + "operator co_await"); + OUTPUT_ENUM_CLASS_VALUE(IntrinsicFunctionKind, Spaceship, "operator<=>"); case IntrinsicFunctionKind::MaxIntrinsic: case IntrinsicFunctionKind::None: break; diff --git a/llvm/test/Demangle/ms-cxx20.test b/llvm/test/Demangle/ms-cxx20.test new file mode 100644 index 00000000000..7e116f1ebcd --- /dev/null +++ b/llvm/test/Demangle/ms-cxx20.test @@ -0,0 +1,9 @@ +; RUN: llvm-undname < %s | FileCheck %s + +; CHECK-NOT: Invalid mangled name + +??__LA@@QEAA?AUno_suspend@@XZ +; CHECK: struct no_suspend __cdecl A::operator co_await(void) + +??__MS@@QEAA?AVstrong_ordering@std@@AEBU0@@Z' +; CHECK: class std::strong_ordering __cdecl S::operator<=>(struct S const &) |

