From 8ece6dc4356abe76d3cd7b4742d01f53a95a8e3b Mon Sep 17 00:00:00 2001 From: Chris Mihelich Date: Wed, 5 Jun 2024 11:26:26 -0700 Subject: Demangle nx... syntax for noexcept(e) as an expression in a dependent signature. PiperOrigin-RevId: 640590102 Change-Id: I2641cddd35119062328a197162bb700d8309fc05 --- absl/debugging/internal/demangle.cc | 7 +++++++ absl/debugging/internal/demangle_test.cc | 15 +++++++++++++++ 2 files changed, 22 insertions(+) (limited to 'absl/debugging') diff --git a/absl/debugging/internal/demangle.cc b/absl/debugging/internal/demangle.cc index 79246e9b..787edcee 100644 --- a/absl/debugging/internal/demangle.cc +++ b/absl/debugging/internal/demangle.cc @@ -1998,6 +1998,7 @@ static bool ParseBracedExpression(State *state) { // ::= st // ::= at // ::= az +// ::= nx // ::= // ::= // ::= sZ @@ -2136,6 +2137,12 @@ static bool ParseExpression(State *state) { } state->parse_state = copy; + // noexcept(expression) appearing as an expression in a dependent signature + if (ParseTwoCharToken(state, "nx") && ParseExpression(state)) { + return true; + } + state->parse_state = copy; + // sizeof...(pack) // // ::= sZ diff --git a/absl/debugging/internal/demangle_test.cc b/absl/debugging/internal/demangle_test.cc index a91935f4..5dc2d03b 100644 --- a/absl/debugging/internal/demangle_test.cc +++ b/absl/debugging/internal/demangle_test.cc @@ -1128,6 +1128,21 @@ TEST(Demangle, AlignofExpression) { EXPECT_STREQ("f<>()", tmp); } +TEST(Demangle, NoexceptExpression) { + char tmp[80]; + + // Source: + // + // template void f(T (&a)[noexcept(T{})]) {} + // template void f(int (&)[noexcept(int{})]); + // + // Full LLVM demangling of the instantiation of f: + // + // void f(int (&) [noexcept (int{})]) + EXPECT_TRUE(Demangle("_Z1fIiEvRAnxtlT_E_S0_", tmp, sizeof(tmp))); + EXPECT_STREQ("f<>()", tmp); +} + TEST(Demangle, ThreadLocalWrappers) { char tmp[80]; -- cgit v1.2.3