Message ID | orbk34jc95.fsf@lxoliva.fsfla.org |
---|---|
State | New |
Headers | show |
Series | [libstdc++,testsuite] xfail 128bit from_chars on all aarch64-*-* | expand |
On Thu, 11 Jul 2024 at 14:21, Alexandre Oliva <oliva@adacore.com> wrote: > > > Having observed failures of these two tests on yet another aarch64 > operating system, and having concluded that the conditions that > trigger the problem ought to be present on all aarch64 targets, I'm > now matching any aarch64 target_os to enable the workaround. That's concerning, aarch64-unknown-linux-gnu with glibc should work OK for float128_t, because aarch64 already has 128-bit long double, so there's no good reason that float128_t wouldn't work. What are the conditions that trigger the problem? I've only just noticed that the macro name makes no sense, as this is about float128_t, not long double. They're distinct types (although for aarch64 they have the same representation). So we should at the very least rename the macro to something like SKIP_FLOAT128, but I'd also like to understand why float128_t fails on a target where long double works OK and has the same binary128 representation. > > Regstrapped on x86_64-linux-gnu, also tested with gcc-13 targeting > aarch64. Ok to install? > > > for libstdc++-v3/ChangeLog > > * testsuite/20_util/from_chars/8.cc: Define SKIP_LONG_DOUBLE > on all aarch64-*-* targets. > * testsuite/20_util/to_chars/float128_c++23.cc: Xfail on all > aarch64-*-* targets. > --- > libstdc++-v3/testsuite/20_util/from_chars/8.cc | 2 +- > .../testsuite/20_util/to_chars/float128_c++23.cc | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/libstdc++-v3/testsuite/20_util/from_chars/8.cc b/libstdc++-v3/testsuite/20_util/from_chars/8.cc > index bacad89943b5f..e92b64349025e 100644 > --- a/libstdc++-v3/testsuite/20_util/from_chars/8.cc > +++ b/libstdc++-v3/testsuite/20_util/from_chars/8.cc > @@ -17,7 +17,7 @@ > > // { dg-do run { target c++23 } } > // { dg-add-options ieee } > -// { dg-additional-options "-DSKIP_LONG_DOUBLE" { target aarch64-*-vxworks* aarch64-*-rtems* } } > +// { dg-additional-options "-DSKIP_LONG_DOUBLE" { target aarch64-*-* } } > > #include <charconv> > #include <string> > diff --git a/libstdc++-v3/testsuite/20_util/to_chars/float128_c++23.cc b/libstdc++-v3/testsuite/20_util/to_chars/float128_c++23.cc > index 6cb9cadcd2041..840131c1e5691 100644 > --- a/libstdc++-v3/testsuite/20_util/to_chars/float128_c++23.cc > +++ b/libstdc++-v3/testsuite/20_util/to_chars/float128_c++23.cc > @@ -19,7 +19,7 @@ > // { dg-require-effective-target ieee_floats } > // { dg-require-effective-target size32plus } > // { dg-add-options ieee } > -// { dg-xfail-run-if "from_chars limited to double-precision" { aarch64-*-vxworks* aarch64-*-rtems* } } > +// { dg-xfail-run-if "from_chars limited to double-precision" { aarch64-*-* } } > > #include <charconv> > #include <stdfloat> > > > -- > Alexandre Oliva, happy hacker https://FSFLA.org/blogs/lxo/ > Free Software Activist GNU Toolchain Engineer > More tolerance and less prejudice are key for inclusion and diversity > Excluding neuro-others for not behaving ""normal"" is *not* inclusive >
On Jul 11 2024, Jonathan Wakely wrote: > On Thu, 11 Jul 2024 at 14:21, Alexandre Oliva <oliva@adacore.com> wrote: >> >> >> Having observed failures of these two tests on yet another aarch64 >> operating system, and having concluded that the conditions that >> trigger the problem ought to be present on all aarch64 targets, I'm >> now matching any aarch64 target_os to enable the workaround. > > That's concerning, aarch64-unknown-linux-gnu with glibc should work OK > for float128_t, because aarch64 already has 128-bit long double, so > there's no good reason that float128_t wouldn't work. What are the > conditions that trigger the problem? Both tests run sucessfully on aarch64-linux.
On Jul 11, 2024, Andreas Schwab <schwab@suse.de> wrote: > On Jul 11 2024, Jonathan Wakely wrote: >> On Thu, 11 Jul 2024 at 14:21, Alexandre Oliva <oliva@adacore.com> wrote: >>> >>> >>> Having observed failures of these two tests on yet another aarch64 >>> operating system, and having concluded that the conditions that >>> trigger the problem ought to be present on all aarch64 targets, I'm >>> now matching any aarch64 target_os to enable the workaround. >> >> That's concerning, aarch64-unknown-linux-gnu with glibc should work OK >> for float128_t, because aarch64 already has 128-bit long double, so >> there's no good reason that float128_t wouldn't work. What are the >> conditions that trigger the problem? > Both tests run sucessfully on aarch64-linux. Thanks, I stand corrected. I got the right answer for the wrong question. All aarch64 have '# define USE_LIB_FAST_FLOAT 1', but that won't limit the precision of from_char for 128-bit float types when strtold et al can be used for the conversion. Patch withdrawn, on the grounds of... general failure to engage brain ;-D
diff --git a/libstdc++-v3/testsuite/20_util/from_chars/8.cc b/libstdc++-v3/testsuite/20_util/from_chars/8.cc index bacad89943b5f..e92b64349025e 100644 --- a/libstdc++-v3/testsuite/20_util/from_chars/8.cc +++ b/libstdc++-v3/testsuite/20_util/from_chars/8.cc @@ -17,7 +17,7 @@ // { dg-do run { target c++23 } } // { dg-add-options ieee } -// { dg-additional-options "-DSKIP_LONG_DOUBLE" { target aarch64-*-vxworks* aarch64-*-rtems* } } +// { dg-additional-options "-DSKIP_LONG_DOUBLE" { target aarch64-*-* } } #include <charconv> #include <string> diff --git a/libstdc++-v3/testsuite/20_util/to_chars/float128_c++23.cc b/libstdc++-v3/testsuite/20_util/to_chars/float128_c++23.cc index 6cb9cadcd2041..840131c1e5691 100644 --- a/libstdc++-v3/testsuite/20_util/to_chars/float128_c++23.cc +++ b/libstdc++-v3/testsuite/20_util/to_chars/float128_c++23.cc @@ -19,7 +19,7 @@ // { dg-require-effective-target ieee_floats } // { dg-require-effective-target size32plus } // { dg-add-options ieee } -// { dg-xfail-run-if "from_chars limited to double-precision" { aarch64-*-vxworks* aarch64-*-rtems* } } +// { dg-xfail-run-if "from_chars limited to double-precision" { aarch64-*-* } } #include <charconv> #include <stdfloat>