summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Demangle
diff options
context:
space:
mode:
authorNico Weber <nicolasweber@gmx.de>2019-06-04 18:49:05 +0000
committerNico Weber <nicolasweber@gmx.de>2019-06-04 18:49:05 +0000
commit463854846853c3e4e099d31c51edec18e00730c0 (patch)
tree5bfc0117de6660f0c756741e5430a53b149b5942 /llvm/lib/Demangle
parentaed7227b71784fb1c1e8fc7a0a5ac65647cd463f (diff)
downloadbcm5719-llvm-463854846853c3e4e099d31c51edec18e00730c0.tar.gz
bcm5719-llvm-463854846853c3e4e099d31c51edec18e00730c0.zip
llvm-undname: More coverage-related cleanups
- The loop in demangleFunctionParameterList() only exits on Error, @, and Z. All 3 cases were handled, so the rest of the function is DEMANGLE_UNREACHABLE. - The loop in demangleTemplateParameterList() always returns on Error, so there's no need to check for that in the loop header and after the loop. - Add test cases for invalid function parameter manglings. - Add a (redundant) test case for a simple template parameter list mangling. - Add a test case pointing out that varargs functions aren't demangled correctly. llvm-svn: 362540
Diffstat (limited to 'llvm/lib/Demangle')
-rw-r--r--llvm/lib/Demangle/MicrosoftDemangle.cpp20
1 files changed, 9 insertions, 11 deletions
diff --git a/llvm/lib/Demangle/MicrosoftDemangle.cpp b/llvm/lib/Demangle/MicrosoftDemangle.cpp
index c8f7502ce2c..e28420c4a13 100644
--- a/llvm/lib/Demangle/MicrosoftDemangle.cpp
+++ b/llvm/lib/Demangle/MicrosoftDemangle.cpp
@@ -2093,7 +2093,7 @@ ArrayTypeNode *Demangler::demangleArrayType(StringView &MangledName) {
return ATy;
}
-// Reads a function or a template parameters.
+// Reads a function's parameters.
NodeArrayNode *
Demangler::demangleFunctionParameterList(StringView &MangledName) {
// Empty parameter list.
@@ -2157,8 +2157,7 @@ Demangler::demangleFunctionParameterList(StringView &MangledName) {
return NA;
}
- Error = true;
- return nullptr;
+ DEMANGLE_UNREACHABLE;
}
NodeArrayNode *
@@ -2167,7 +2166,7 @@ Demangler::demangleTemplateParameterList(StringView &MangledName) {
NodeList **Current = &Head;
size_t Count = 0;
- while (!Error && !MangledName.startsWith('@')) {
+ while (!MangledName.startsWith('@')) {
if (MangledName.consumeFront("$S") || MangledName.consumeFront("$$V") ||
MangledName.consumeFront("$$$V") || MangledName.consumeFront("$$Z")) {
// parameter pack separator
@@ -2278,15 +2277,14 @@ Demangler::demangleTemplateParameterList(StringView &MangledName) {
Current = &TP.Next;
}
- if (Error)
- return nullptr;
+ // The loop above returns nullptr on Error.
+ assert(!Error);
// Template parameter lists cannot be variadic, so it can only be terminated
- // by @.
- if (MangledName.consumeFront('@'))
- return nodeListToNodeArray(Arena, Head, Count);
- Error = true;
- return nullptr;
+ // by @ (as opposed to 'Z' in the function parameter case).
+ assert(MangledName.startsWith('@')); // The above loop exits only on '@'.
+ MangledName.consumeFront('@');
+ return nodeListToNodeArray(Arena, Head, Count);
}
void Demangler::dumpBackReferences() {
OpenPOWER on IntegriCloud