diff options
-rw-r--r-- | libcxxabi/src/demangle/ItaniumDemangle.h | 5 | ||||
-rw-r--r-- | libcxxabi/test/test_demangle.pass.cpp | 4 | ||||
-rw-r--r-- | llvm/include/llvm/Demangle/ItaniumDemangle.h | 5 |
3 files changed, 11 insertions, 3 deletions
diff --git a/libcxxabi/src/demangle/ItaniumDemangle.h b/libcxxabi/src/demangle/ItaniumDemangle.h index e4752be..3df41b5 100644 --- a/libcxxabi/src/demangle/ItaniumDemangle.h +++ b/libcxxabi/src/demangle/ItaniumDemangle.h @@ -4330,9 +4330,12 @@ Node *AbstractManglingParser<Derived, Alloc>::parseType() { case 'h': First += 2; return make<NameType>("half"); - // ::= DF <number> _ # ISO/IEC TS 18661 binary floating point (N bits) + // ::= DF16b # C++23 std::bfloat16_t + // ::= DF <number> _ # ISO/IEC TS 18661 binary floating point (N bits) case 'F': { First += 2; + if (consumeIf("16b")) + return make<NameType>("std::bfloat16_t"); Node *DimensionNumber = make<NameType>(parseNumber()); if (!DimensionNumber) return nullptr; diff --git a/libcxxabi/test/test_demangle.pass.cpp b/libcxxabi/test/test_demangle.pass.cpp index 67b9df2..e9c74f7 100644 --- a/libcxxabi/test/test_demangle.pass.cpp +++ b/libcxxabi/test/test_demangle.pass.cpp @@ -33,7 +33,7 @@ // Is long double fp128? #define LDBL_FP128 (__LDBL_MANT_DIG__ == 113) -const char *cases[][2] = { +const char* cases[][2] = { // clang-format off {"_Z1A", "A"}, {"_Z1Av", "A()"}, @@ -30245,6 +30245,8 @@ const char *cases[][2] = { {"_Z1fDSDRj", "f(_Sat unsigned _Fract)"}, {"_Z1fDSDRl", "f(_Sat long _Fract)"}, {"_Z1fDSDRm", "f(_Sat unsigned long _Fract)"}, + + {"_Z11bfloat16addDF16bDF16b", "bfloat16add(std::bfloat16_t, std::bfloat16_t)"}, // clang-format on }; diff --git a/llvm/include/llvm/Demangle/ItaniumDemangle.h b/llvm/include/llvm/Demangle/ItaniumDemangle.h index 7fba3fd..b0363c1 100644 --- a/llvm/include/llvm/Demangle/ItaniumDemangle.h +++ b/llvm/include/llvm/Demangle/ItaniumDemangle.h @@ -4330,9 +4330,12 @@ Node *AbstractManglingParser<Derived, Alloc>::parseType() { case 'h': First += 2; return make<NameType>("half"); - // ::= DF <number> _ # ISO/IEC TS 18661 binary floating point (N bits) + // ::= DF16b # C++23 std::bfloat16_t + // ::= DF <number> _ # ISO/IEC TS 18661 binary floating point (N bits) case 'F': { First += 2; + if (consumeIf("16b")) + return make<NameType>("std::bfloat16_t"); Node *DimensionNumber = make<NameType>(parseNumber()); if (!DimensionNumber) return nullptr; |