diff options
author | Benjamin Barenblat <bbaren@google.com> | 2022-07-12 21:47:19 -0400 |
---|---|---|
committer | Benjamin Barenblat <bbaren@google.com> | 2022-07-12 21:47:19 -0400 |
commit | d055841ab4147dac20d5c46d04ca3a2fb13748b7 (patch) | |
tree | 15a01389c86f10a8844ff2a86bddf46640d065e8 /absl/debugging/internal/demangle.cc | |
parent | 2d23a3e16abfcf8f22ba850d67e972cc77e98874 (diff) | |
parent | 273292d1cfc0a94a65082ee350509af1d113344d (diff) | |
download | abseil-d055841ab4147dac20d5c46d04ca3a2fb13748b7.tar.gz abseil-d055841ab4147dac20d5c46d04ca3a2fb13748b7.tar.bz2 abseil-d055841ab4147dac20d5c46d04ca3a2fb13748b7.zip |
Merge new upstream LTS 20220623.0
Diffstat (limited to 'absl/debugging/internal/demangle.cc')
-rw-r--r-- | absl/debugging/internal/demangle.cc | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/absl/debugging/internal/demangle.cc b/absl/debugging/internal/demangle.cc index 5cd56320..93ae3279 100644 --- a/absl/debugging/internal/demangle.cc +++ b/absl/debugging/internal/demangle.cc @@ -1617,6 +1617,7 @@ static bool ParseUnresolvedName(State *state) { // ::= <2-ary operator-name> <expression> <expression> // ::= <3-ary operator-name> <expression> <expression> <expression> // ::= cl <expression>+ E +// ::= cp <simple-id> <expression>* E # Clang-specific. // ::= cv <type> <expression> # type (expression) // ::= cv <type> _ <expression>* E # type (expr-list) // ::= st <type> @@ -1639,14 +1640,23 @@ static bool ParseExpression(State *state) { return true; } - // Object/function call expression. ParseState copy = state->parse_state; + + // Object/function call expression. if (ParseTwoCharToken(state, "cl") && OneOrMore(ParseExpression, state) && ParseOneCharToken(state, 'E')) { return true; } state->parse_state = copy; + // Clang-specific "cp <simple-id> <expression>* E" + // https://clang.llvm.org/doxygen/ItaniumMangle_8cpp_source.html#l04338 + if (ParseTwoCharToken(state, "cp") && ParseSimpleId(state) && + ZeroOrMore(ParseExpression, state) && ParseOneCharToken(state, 'E')) { + return true; + } + state->parse_state = copy; + // Function-param expression (level 0). if (ParseTwoCharToken(state, "fp") && Optional(ParseCVQualifiers(state)) && Optional(ParseNumber(state, nullptr)) && ParseOneCharToken(state, '_')) { |