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));

Reply via email to