aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorSandra Loosemore <sandra@codesourcery.com>2021-09-17 08:20:51 -0700
committerSandra Loosemore <sandra@codesourcery.com>2021-09-17 08:20:51 -0700
commit00b1324f9285f49a6f9516f408f6be5bc6545219 (patch)
tree781ce4ee84126469035a921f890f347d3fb663b9 /gcc/testsuite
parent2578a3870ef849dc77e98796600181b64ae4fd61 (diff)
downloadgcc-00b1324f9285f49a6f9516f408f6be5bc6545219.zip
gcc-00b1324f9285f49a6f9516f408f6be5bc6545219.tar.gz
gcc-00b1324f9285f49a6f9516f408f6be5bc6545219.tar.bz2
Fortran: Use _Float128 rather than __float128 for c_float128 kind.
The GNU Fortran manual documents that the c_float128 kind corresponds to __float128, but in fact the implementation uses float128_type_node, which is _Float128. Both refer to the 128-bit IEEE/ISO encoding, but some targets including aarch64 only define _Float128 and not __float128, and do not provide quadmath.h. This caused errors in some test cases referring to __float128. This patch changes the documentation (including code comments) and test cases to use _Float128 to match the implementation. 2021-09-16 Sandra Loosemore <sandra@codesourcery.com> gcc/fortran/ * intrinsic.texi (ISO_C_BINDING): Change C_FLOAT128 to correspond to _Float128 rather than __float128. * iso-c-binding.def (c_float128): Update comments. * trans-intrinsic.c (gfc_builtin_decl_for_float_kind): Likewise. (build_round_expr): Likewise. (gfc_build_intrinsic_lib_fndcecls): Likewise. * trans-types.h (gfc_real16_is_float128): Likewise. gcc/testsuite/ * gfortran.dg/PR100914.c: Do not include quadmath.h. Use _Float128 _Complex instead of __complex128. * gfortran.dg/PR100914.f90: Add -Wno-pedantic to suppress error about use of _Float128. * gfortran.dg/c-interop/typecodes-array-float128-c.c: Use _Float128 instead of __float128. * gfortran.dg/c-interop/typecodes-sanity-c.c: Likewise. * gfortran.dg/c-interop/typecodes-scalar-float128-c.c: Likewise. * lib/target-supports.exp (check_effective_target_fortran_real_c_float128): Update comments. libgfortran/ * ISO_Fortran_binding.h: Update comments. * runtime/ISO_Fortran_binding.c: Likewise.
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/gfortran.dg/PR100914.c5
-rw-r--r--gcc/testsuite/gfortran.dg/PR100914.f901
-rw-r--r--gcc/testsuite/gfortran.dg/c-interop/typecodes-array-float128-c.c4
-rw-r--r--gcc/testsuite/gfortran.dg/c-interop/typecodes-sanity-c.c7
-rw-r--r--gcc/testsuite/gfortran.dg/c-interop/typecodes-scalar-float128-c.c4
-rw-r--r--gcc/testsuite/lib/target-supports.exp4
6 files changed, 12 insertions, 13 deletions
diff --git a/gcc/testsuite/gfortran.dg/PR100914.c b/gcc/testsuite/gfortran.dg/PR100914.c
index c6bd973..ea339e7 100644
--- a/gcc/testsuite/gfortran.dg/PR100914.c
+++ b/gcc/testsuite/gfortran.dg/PR100914.c
@@ -5,7 +5,6 @@
#include <stdbool.h>
#include <stdio.h>
#include <math.h>
-#include <quadmath.h>
#include <ISO_Fortran_binding.h>
@@ -29,7 +28,7 @@
#define CMPLXL(x, y) ((long double complex)((long double)(x) + (long double complex)I * (long double)(y)))
#undef CMPLX
-#define CMPLX(x, y) ((__complex128 )((double)(x) + (double complex)I * (double)(y)))
+#define CMPLX(x, y) ((_Float128 _Complex )((double)(x) + (double complex)I * (double)(y)))
#define N 11
#define M 7
@@ -37,7 +36,7 @@
typedef float _Complex c_float_complex;
typedef double _Complex c_double_complex;
typedef long double _Complex c_long_double_complex;
-typedef __complex128 c_float128_complex;
+typedef _Float128 _Complex c_float128_complex;
bool c_vrfy_c_float_complex (const CFI_cdesc_t *restrict);
diff --git a/gcc/testsuite/gfortran.dg/PR100914.f90 b/gcc/testsuite/gfortran.dg/PR100914.f90
index 64b3335..d8057fd 100644
--- a/gcc/testsuite/gfortran.dg/PR100914.f90
+++ b/gcc/testsuite/gfortran.dg/PR100914.f90
@@ -2,6 +2,7 @@
! { dg-do run { xfail { { x86_64*-*-* i?86*-*-* } && longdouble128 } } }
! { dg-additional-sources PR100914.c }
! { dg-require-effective-target fortran_real_c_float128 }
+! { dg-additional-options "-Wno-pedantic" }
!
! Test the fix for PR100914
!
diff --git a/gcc/testsuite/gfortran.dg/c-interop/typecodes-array-float128-c.c b/gcc/testsuite/gfortran.dg/c-interop/typecodes-array-float128-c.c
index d081feb..4fcb6e2 100644
--- a/gcc/testsuite/gfortran.dg/c-interop/typecodes-array-float128-c.c
+++ b/gcc/testsuite/gfortran.dg/c-interop/typecodes-array-float128-c.c
@@ -32,7 +32,7 @@ void
ctest (CFI_cdesc_t *arg_float128,
CFI_cdesc_t *arg_complex128)
{
- check (arg_float128, sizeof (__float128), CFI_type_float128);
- check (arg_complex128, sizeof (__float128) * 2,
+ check (arg_float128, sizeof (_Float128), CFI_type_float128);
+ check (arg_complex128, sizeof (_Float128) * 2,
CFI_type_float128_Complex);
}
diff --git a/gcc/testsuite/gfortran.dg/c-interop/typecodes-sanity-c.c b/gcc/testsuite/gfortran.dg/c-interop/typecodes-sanity-c.c
index a1d044b..90f0b20 100644
--- a/gcc/testsuite/gfortran.dg/c-interop/typecodes-sanity-c.c
+++ b/gcc/testsuite/gfortran.dg/c-interop/typecodes-sanity-c.c
@@ -23,8 +23,7 @@ static struct tc_info tc_table[] =
{
/* Extension types.
Note there is no portable C equivalent type for CFI_type_ucs4_char type
- (4-byte Unicode characters), and GCC rejects "__float128 _Complex",
- so this is kind of hacky... */
+ (4-byte Unicode characters), so this is kind of hacky... */
#if CFI_type_int128_t > 0
{ CFI_type_int128_t, "CFI_type_int128_t",
sizeof (__int128), 1 },
@@ -38,9 +37,9 @@ static struct tc_info tc_table[] =
#endif
#if CFI_type_float128 > 0
{ CFI_type_float128, "CFI_type_float128",
- sizeof (__float128), 1 },
+ sizeof (_Float128), 1 },
{ CFI_type_float128_Complex, "CFI_type_float128_Complex",
- sizeof (__float128) * 2, 1 },
+ sizeof (_Float128 _Complex), 1 },
#endif
#if CFI_type_cfunptr > 0
{ CFI_type_cfunptr, "CFI_type_cfunptr",
diff --git a/gcc/testsuite/gfortran.dg/c-interop/typecodes-scalar-float128-c.c b/gcc/testsuite/gfortran.dg/c-interop/typecodes-scalar-float128-c.c
index f1833aa..7eafa93 100644
--- a/gcc/testsuite/gfortran.dg/c-interop/typecodes-scalar-float128-c.c
+++ b/gcc/testsuite/gfortran.dg/c-interop/typecodes-scalar-float128-c.c
@@ -31,8 +31,8 @@ void
ctest (CFI_cdesc_t *arg_float128,
CFI_cdesc_t *arg_complex128)
{
- check (arg_float128, sizeof (__float128), CFI_type_float128);
- check (arg_complex128, sizeof (__float128) * 2,
+ check (arg_float128, sizeof (_Float128), CFI_type_float128);
+ check (arg_complex128, sizeof (_Float128) * 2,
CFI_type_float128_Complex);
}
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 8697ceb..f11c4e6 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -1578,8 +1578,8 @@ proc check_effective_target_fortran_real_10 { } {
# Return 1 if the target supports Fortran real kind C_FLOAT128,
# 0 otherwise. This differs from check_effective_target_fortran_real_16
-# because __float128 has the additional requirement that it be the
-# 128-bit IEEE encoding; even if __float128 is available in C, it may not
+# because _Float128 has the additional requirement that it be the
+# 128-bit IEEE encoding; even if _Float128 is available in C, it may not
# have a corresponding Fortran kind on targets (PowerPC) that use some
# other encoding for long double/TFmode/real(16).
proc check_effective_target_fortran_real_c_float128 { } {