aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libcxxabi/src/demangle/ItaniumDemangle.h5
-rw-r--r--libcxxabi/test/test_demangle.pass.cpp4
-rw-r--r--llvm/include/llvm/Demangle/ItaniumDemangle.h5
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;