diff options
author | Janus Weil <janus@gcc.gnu.org> | 2017-09-23 15:15:20 +0200 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2017-09-23 15:15:20 +0200 |
commit | d16d81b54f29fdb8901d01125bd00464f551c1d7 (patch) | |
tree | ccd358e62d41b796f12904b956dea9450ef1e93b /gcc/fortran/trans-types.c | |
parent | 89762a83cdc24a5a9471acdc4676d150d3c71a11 (diff) | |
download | gcc-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.c | 38 |
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) |