[demangler] Reorder parseNestedName loop
authorNathan Sidwell <nathan@acm.org>
Tue, 25 Jan 2022 20:31:01 +0000 (12:31 -0800)
committerNathan Sidwell <nathan@acm.org>
Wed, 16 Feb 2022 12:30:47 +0000 (04:30 -0800)
commit6244730e29f66ae3d0ba80c2341f9f17c7eb78d3
tree357f343bd4e5bb103b7eff2fee6e7486034424e0
parent082f328899be9ed8a38b04a4e52be936f4875495
[demangler] Reorder parseNestedName loop

parseNestedName's main loop allowed parsing a grammar that was more
flexible than the actual grammar.  This refactors that to rule out
some more incorrect manglings.

1) The 'L' extension only applies to unqualified-name components, so
check it just there.

2) The 'M' suffix is, AFAICT, removed from the grammar.  Rather than
eliminate it, let's parse it after we've parsed a component.

Added some additional bad mangling tests, which are now rejected.

I don't break the 'T' and 'D[tT]' cases out of the loop, even though
they can only appear at first position, as it seems simpler to just
check there is nothing SoFar.

Reviewed By: ChuanqiXu

Differential Revision: https://reviews.llvm.org/D119542
libcxxabi/src/demangle/ItaniumDemangle.h
libcxxabi/test/test_demangle.pass.cpp
llvm/include/llvm/Demangle/ItaniumDemangle.h