Oh great, while replacing the '*' I messed up the indent. It's now using 
spaces where it should use a Tab. OK for trunk like this?

--------------- 8< --------------

Signed-off-by: Matthias Kretz <m.kr...@gsi.de>

gcc/cp/ChangeLog:

        * mangle.cc (write_real_cst): Replace 8 spaces with Tab.
---
 gcc/cp/mangle.cc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gcc/cp/mangle.cc b/gcc/cp/mangle.cc
index c1aae2de52b..a0a75479666 100644
--- a/gcc/cp/mangle.cc
+++ b/gcc/cp/mangle.cc
@@ -2185,7 +2185,7 @@ write_real_cst (const tree value)
   if (words == 0)
     {
       /* _Float16 and std::bfloat16_t are the only supported types smaller 
than
-         32 bits.  */
+        32 bits.  */
       gcc_assert (bits == 16);
       sprintf (buffer, "%04lx", (unsigned long) target_real[0]);
       write_chars (buffer, 4);

Matthias Kretz [Tuesday, 9 September 2025, 08:01:22 CEST]:
> Pushed to trunk with fixed commit message (PR was missing) and one '*'
> removed from comment.
> 
> Will backport later.
> 
> Matthias Kretz [Monday, 8 September 2025, 12:51:13 CEST]:
> > * renamed the test to abi/pr121801.C
> > 
> > * changed the comment to include std::bfloat16_t and another space.
> > 
> > ----------------- 8< ---------------
> > 
> > Signed-off-by: Matthias Kretz <m.kr...@gsi.de>
> > 
> > gcc/testsuite/ChangeLog:
> >     * g++.dg/abi/pr121801.C: New test.
> > 
> > gcc/cp/ChangeLog:
> >     * mangle.cc (write_real_cst): Handle 16-bit real and assert
> >     that reals have 16 bits or a multiple of 32 bits.
> > 
> > ---
> > 
> >  gcc/cp/mangle.cc                    | 15 ++++++++++++++-
> >  gcc/testsuite/g++.dg/abi/pr121801.C | 13 +++++++++++++
> >  2 files changed, 27 insertions(+), 1 deletion(-)
> >  create mode 100644 gcc/testsuite/g++.dg/abi/pr121801.C
> > 
> > diff --git a/gcc/cp/mangle.cc b/gcc/cp/mangle.cc
> > index 80be40d2dce..2c7a92ac1c4 100644
> > --- a/gcc/cp/mangle.cc
> > +++ b/gcc/cp/mangle.cc
> > @@ -2176,11 +2176,24 @@ write_real_cst (const tree value)
> > 
> >    int i, limit, dir;
> >    
> >    tree type = TREE_TYPE (value);
> > 
> > -  int words = GET_MODE_BITSIZE (SCALAR_FLOAT_TYPE_MODE (type)) / 32;
> > +  int bits = GET_MODE_BITSIZE (SCALAR_FLOAT_TYPE_MODE (type));
> > +  int words = bits / 32;
> > 
> >    real_to_target (target_real, &TREE_REAL_CST (value),
> >    
> >               TYPE_MODE (type));
> > 
> > +  if (words == 0)
> > +    {
> > +      /* _Float16 and std::bfloat16_t are the only supported types
> > smaller
> > than
> > +       * 32 bits.  */
> > +      gcc_assert (bits == 16);
> > +      sprintf (buffer, "%04lx", (unsigned long) target_real[0]);
> > +      write_chars (buffer, 4);
> > +      return;
> > +    }
> > +
> > +  gcc_assert (bits % 32 == 0);
> > +
> > 
> >    /* The value in target_real is in the target word order,
> >    
> >       so we must write it out backward if that happens to be
> >       little-endian.  write_number cannot be used, it will
> > 
> > diff --git a/gcc/testsuite/g++.dg/abi/pr121801.C
> > b/gcc/testsuite/g++.dg/abi/ pr121801.C
> > new file mode 100644
> > index 00000000000..cd35186d888
> > --- /dev/null
> > +++ b/gcc/testsuite/g++.dg/abi/pr121801.C
> > @@ -0,0 +1,13 @@
> > +// PR c++/121801
> > +// { dg-do compile { target { c++20 && float16 } } }
> > +// { dg-add-options float16 }
> > +
> > +template<_Float16 T> void f() {}
> > +
> > +void uses() {
> > +  f<_Float16(1)>();
> > +  f<_Float16(2)>();
> > +}
> > +
> > +// { dg-final { scan-assembler "_Z1fILDF16_3c00EEvv" } }
> > +// { dg-final { scan-assembler "_Z1fILDF16_4000EEvv" } }


-- 
──────────────────────────────────────────────────────────────────────────
 Dr. Matthias Kretz                           https://mattkretz.github.io
 GSI Helmholtz Center for Heavy Ion Research               https://gsi.de
 std::simd
──────────────────────────────────────────────────────────────────────────



Reply via email to