From 61e721f41f3e9de4e3a9ef97b32700f84d26ea3b Mon Sep 17 00:00:00 2001 From: Chris Mihelich Date: Fri, 7 Jun 2024 09:25:38 -0700 Subject: Demangle fully general vendor extended types (any ). PiperOrigin-RevId: 641271471 Change-Id: Ibeedb4dea3b961955d073f048d293b19aa917792 --- absl/debugging/internal/demangle.cc | 17 ++++------------- absl/debugging/internal/demangle_test.cc | 5 +++-- 2 files changed, 7 insertions(+), 15 deletions(-) (limited to 'absl') diff --git a/absl/debugging/internal/demangle.cc b/absl/debugging/internal/demangle.cc index 9f4a8352..46a63964 100644 --- a/absl/debugging/internal/demangle.cc +++ b/absl/debugging/internal/demangle.cc @@ -1444,8 +1444,6 @@ static bool ParseCVQualifiers(State *state) { // // Not supported: // ::= DF _ # _FloatN (N bits) -// -// NOTE: [I E] is a vendor extension (http://shortn/_FrINpH1XC5). static bool ParseBuiltinType(State *state) { ComplexityGuard guard(state); if (guard.IsTooComplex()) return false; @@ -1466,22 +1464,15 @@ static bool ParseBuiltinType(State *state) { return ParseVendorExtendedType(state); } -// ::= u [I E] -// -// NOTE: [I E] is a vendor extension (http://shortn/_FrINpH1XC5). +// ::= u [] static bool ParseVendorExtendedType(State *state) { ComplexityGuard guard(state); if (guard.IsTooComplex()) return false; ParseState copy = state->parse_state; - if (ParseOneCharToken(state, 'u') && ParseSourceName(state)) { - copy = state->parse_state; - if (ParseOneCharToken(state, 'I') && ParseType(state) && - ParseOneCharToken(state, 'E')) { - return true; // ::= u I E - } - state->parse_state = copy; - return true; // ::= u + if (ParseOneCharToken(state, 'u') && ParseSourceName(state) && + Optional(ParseTemplateArgs(state))) { + return true; } state->parse_state = copy; return false; diff --git a/absl/debugging/internal/demangle_test.cc b/absl/debugging/internal/demangle_test.cc index 974b15f0..6f69cff9 100644 --- a/absl/debugging/internal/demangle_test.cc +++ b/absl/debugging/internal/demangle_test.cc @@ -209,15 +209,16 @@ TEST(Demangle, SingleArgTemplateBuiltinType) { EXPECT_STREQ(tmp, "foo<>()"); } -TEST(Demangle, FailsOnTwoArgTemplateBuiltinType) { +TEST(Demangle, TwoArgTemplateBuiltinType) { char tmp[100]; // template // __my_builtin_type foo(); // // foo(); - ASSERT_FALSE( + ASSERT_TRUE( Demangle("_Z3fooIicEu17__my_builtin_typeIT_T0_Ev", tmp, sizeof(tmp))); + EXPECT_STREQ(tmp, "foo<>()"); } TEST(Demangle, TypeNestedUnderTemplatedBuiltinType) { -- cgit v1.2.3