[all-commits] [llvm/llvm-project] ad46cf: [demangler] Stricter NestedName parsing
Nathan Sidwell via All-commits
all-commits at lists.llvm.org
Mon Feb 7 08:21:21 PST 2022
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: ad46cf14d408018edad17defe6d2911093d35503
https://github.com/llvm/llvm-project/commit/ad46cf14d408018edad17defe6d2911093d35503
Author: Nathan Sidwell <nathan at acm.org>
Date: 2022-02-07 (Mon, 07 Feb 2022)
Changed paths:
M libcxxabi/src/demangle/ItaniumDemangle.h
M libcxxabi/test/test_demangle.pass.cpp
M llvm/include/llvm/Demangle/ItaniumDemangle.h
Log Message:
-----------
[demangler] Stricter NestedName parsing
The parsing of nested names is a little lax. This corrects that.
1) The 'L' local name prefix cannot appear before a NestedName -- only
within it. Let's remove that check from parseName, and then adjust
parseUnscopedName to allow it with or without the 'St' prefix.
2) In a nested name, a <template-param>, <decltype> or <substitution>
can only appear as the first element. Let's enforce that. Note I do
not remove these from the loop, to make the change easier to follow
(such a change will come later).
3) Given that, there's no need to special case 'St' outside of the
loop, handle it with the other 'S' elements.
4) There's no need to reset 'EndsWithTemplateArgs' after each
non-template-arg component. Rather, always clear it and then set it
in the template-args case.
5) An template-args cannot immediately follow a template-args.
6) The parsing of a CDtor name with ABITags would attach the tags to
the NestedName node, rather than the CDTor node. This is different to
how ABITags are attached to an unscopedName. Make it consistent.
7) We remain with only CDTor and UnscopedName requireing construction
of a NestedName, so let's drop the PushComponent lambda.
8) Add some tests to catch the new rejected manglings.
Reviewed By: ChuanqiXu
Differential Revision: https://reviews.llvm.org/D118132
More information about the All-commits
mailing list