https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121801
--- Comment #1 from Matthias Kretz (Vir) <mkretz at gcc dot gnu.org> ---
Untested patch:
diff --git i/gcc/cp/mangle.cc w/gcc/cp/mangle.cc
index f10f791ac72..b03398b29c9 100644
--- i/gcc/cp/mangle.cc
+++ w/gcc/cp/mangle.cc
@@ -2157,6 +2157,19 @@ write_real_cst (const tree value)
tree type = TREE_TYPE (value);
int words = GET_MODE_BITSIZE (SCALAR_FLOAT_TYPE_MODE (type)) / 32;
+ if (words == 0)
+ {
+ int bytes = GET_MODE_BITSIZE (SCALAR_FLOAT_TYPE_MODE (type)) / 8;
+ real_to_target (target_real, &TREE_REAL_CST (value),
+ TYPE_MODE (type));
+ sprintf (buffer, "%04lx", (unsigned long) target_real[0]);
+ if (bytes == 2)
+ write_chars (buffer, 4);
+ else
+ write_chars (buffer + 2, 2);
+ return;
+ }
+
real_to_target (target_real, &TREE_REAL_CST (value),
TYPE_MODE (type));