Denormal behaviour is well defined for IEEE128 long doubles, so XFAIL some gfortran tests only for targets with the IBM128 long double ABI.
gcc/testsuite/ChangeLog: PR testsuite/118127 * lib/target-supports.exp (check_effective_target_long_double_is_ibm128): New procedure. * gfortran.dg/default_format_2.f90: xfail for long_double_is_ibm128. * gfortran.dg/default_format_denormal_2.f90: Likewise. * gfortran.dg/large_real_kind_form_io_2.f90: Likewise. Signed-off-by: Siddhesh Poyarekar <siddh...@gotplt.org> --- Change from v5: - bring back v4 and change proc name and comment. gcc/testsuite/gfortran.dg/default_format_2.f90 | 2 +- .../gfortran.dg/default_format_denormal_2.f90 | 2 +- .../gfortran.dg/large_real_kind_form_io_2.f90 | 2 +- gcc/testsuite/lib/target-supports.exp | 14 ++++++++++++++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/gcc/testsuite/gfortran.dg/default_format_2.f90 b/gcc/testsuite/gfortran.dg/default_format_2.f90 index 5ad7b3a6429..dd04d3aae98 100644 --- a/gcc/testsuite/gfortran.dg/default_format_2.f90 +++ b/gcc/testsuite/gfortran.dg/default_format_2.f90 @@ -1,4 +1,4 @@ -! { dg-do run { xfail powerpc*-apple-darwin* powerpc*-*-linux* } } +! { dg-do run { xfail long_double_is_ibm128 } } ! { dg-require-effective-target fortran_large_real } ! Test XFAILed on these platforms because the system's printf() lacks ! proper support for denormalized long doubles. See PR24685 diff --git a/gcc/testsuite/gfortran.dg/default_format_denormal_2.f90 b/gcc/testsuite/gfortran.dg/default_format_denormal_2.f90 index e9ccf5e8f61..ae056d506a2 100644 --- a/gcc/testsuite/gfortran.dg/default_format_denormal_2.f90 +++ b/gcc/testsuite/gfortran.dg/default_format_denormal_2.f90 @@ -1,4 +1,4 @@ -! { dg-do run { xfail powerpc*-*-* } } +! { dg-do run { xfail long_double_is_ibm128 } } ! { dg-require-effective-target fortran_large_real } ! Test XFAILed on this platform because the system's printf() lacks ! proper support for denormalized long doubles. See PR24685 diff --git a/gcc/testsuite/gfortran.dg/large_real_kind_form_io_2.f90 b/gcc/testsuite/gfortran.dg/large_real_kind_form_io_2.f90 index 34b8aec462c..7b5ca645b62 100644 --- a/gcc/testsuite/gfortran.dg/large_real_kind_form_io_2.f90 +++ b/gcc/testsuite/gfortran.dg/large_real_kind_form_io_2.f90 @@ -1,4 +1,4 @@ -! { dg-do run { xfail powerpc*-apple-darwin* powerpc*-*-linux* } } +! { dg-do run { xfail long_double_is_ibm128 } } ! Test XFAILed on these platforms because the system's printf() lacks ! proper support for denormalized long doubles. See PR24685 ! { dg-require-effective-target fortran_large_real } diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 9ad1e1965bb..60e24129bd5 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -1854,6 +1854,20 @@ proc check_effective_target_fortran_integer_16 { } { }] } +# Check if long double on the target defaults to the IBM extended format. + +proc check_effective_target_long_double_is_ibm128 { } { + if { ![istarget powerpc*-*-*] } { + return 0 + } + + return [check_no_compiler_messages long_double_is_ibm128 assembly { + #ifndef __LONG_DOUBLE_IBM128__ + #error "__LONG_DOUBLE_IBM128__ not defined" + #endif + }] +} + # Return 1 if we can statically link libgfortran, 0 otherwise. # # When the target name changes, replace the cached result. -- 2.47.1