aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-types.c
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2017-09-23 15:15:20 +0200
committerJanus Weil <janus@gcc.gnu.org>2017-09-23 15:15:20 +0200
commitd16d81b54f29fdb8901d01125bd00464f551c1d7 (patch)
treeccd358e62d41b796f12904b956dea9450ef1e93b /gcc/fortran/trans-types.c
parent89762a83cdc24a5a9471acdc4676d150d3c71a11 (diff)
downloadgcc-d16d81b54f29fdb8901d01125bd00464f551c1d7.zip
gcc-d16d81b54f29fdb8901d01125bd00464f551c1d7.tar.gz
gcc-d16d81b54f29fdb8901d01125bd00464f551c1d7.tar.bz2
re PR fortran/82143 (add a -fdefault-real-16 flag)
2017-09-23 Janus Weil <janus@gcc.gnu.org> PR fortran/82143 * lang.opt: Add the options -fdefault-real-10 and -fdefault-real-16. Rename flag_default_real to flag_default_real_8. * invoke.texi: Add documentation. * module.c (use_iso_fortran_env_module): flag_default_real is renamed. * trans-types.c (gfc_init_kinds): Implement the flags -fdefault-real-10 and -fdefault-real-16. Make -fdefault-double-8 work without -fdefault-real-8. 2017-09-23 Janus Weil <janus@gcc.gnu.org> PR fortran/82143 * gfortran.dg/promotion_3.f90: New test case. * gfortran.dg/promotion_4.f90: New test case. From-SVN: r253117
Diffstat (limited to 'gcc/fortran/trans-types.c')
-rw-r--r--gcc/fortran/trans-types.c38
1 files changed, 30 insertions, 8 deletions
diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c
index b106794..78477a9 100644
--- a/gcc/fortran/trans-types.c
+++ b/gcc/fortran/trans-types.c
@@ -530,7 +530,7 @@ gfc_init_kinds (void)
}
/* Choose the default real kind. Again, we choose 4 when possible. */
- if (flag_default_real)
+ if (flag_default_real_8)
{
if (!saw_r8)
gfc_fatal_error ("REAL(KIND=8) is not available for "
@@ -538,6 +538,22 @@ gfc_init_kinds (void)
gfc_default_real_kind = 8;
}
+ else if (flag_default_real_10)
+ {
+ if (!saw_r10)
+ gfc_fatal_error ("REAL(KIND=10) is not available for "
+ "%<-fdefault-real-10%> option");
+
+ gfc_default_real_kind = 10;
+ }
+ else if (flag_default_real_16)
+ {
+ if (!saw_r16)
+ gfc_fatal_error ("REAL(KIND=16) is not available for "
+ "%<-fdefault-real-16%> option");
+
+ gfc_default_real_kind = 16;
+ }
else if (flag_real4_kind == 8)
{
if (!saw_r8)
@@ -571,14 +587,20 @@ gfc_init_kinds (void)
are specified, we use kind=8, if it's available. If -fdefault-real is
specified without -fdefault-double, we use kind=16, if it's available.
Otherwise we do not change anything. */
- if (flag_default_double && !flag_default_real)
- gfc_fatal_error ("Use of %<-fdefault-double-8%> requires "
- "%<-fdefault-real-8%>");
-
- if (flag_default_real && flag_default_double && saw_r8)
+ if (flag_default_double && saw_r8)
gfc_default_double_kind = 8;
- else if (flag_default_real && saw_r16)
- gfc_default_double_kind = 16;
+ else if (flag_default_real_8 || flag_default_real_10 || flag_default_real_16)
+ {
+ /* Use largest available kind. */
+ if (saw_r16)
+ gfc_default_double_kind = 16;
+ else if (saw_r10)
+ gfc_default_double_kind = 10;
+ else if (saw_r8)
+ gfc_default_double_kind = 8;
+ else
+ gfc_default_double_kind = gfc_default_real_kind;
+ }
else if (flag_real8_kind == 4)
{
if (!saw_r4)