Commit d16d81b5 by Janus Weil

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
parent 89762a83
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-21 Paul Thomas <pault@gcc.gnu.org>
PR fortran/52832
......
......@@ -119,8 +119,8 @@ by type. Explanations are in the following sections.
@gccoptlist{-fall-intrinsics -fbackslash -fcray-pointer -fd-lines-as-code @gol
-fd-lines-as-comments @gol
-fdec -fdec-structure -fdec-intrinsic-ints -fdec-static -fdec-math @gol
-fdefault-double-8 -fdefault-integer-8 @gol
-fdefault-real-8 -fdollar-ok -ffixed-line-length-@var{n} @gol
-fdefault-double-8 -fdefault-integer-8 -fdefault-real-8 @gol
-fdefault-real-10 -fdefault-real-16 -fdollar-ok -ffixed-line-length-@var{n} @gol
-ffixed-line-length-none -ffree-form -ffree-line-length-@var{n} @gol
-ffree-line-length-none -fimplicit-none -finteger-4-integer-8 @gol
-fmax-identifier-length -fmodule-private -ffixed-form -fno-range-check @gol
......@@ -404,6 +404,22 @@ the default width of @code{DOUBLE PRECISION} to 16 bytes if possible, unless
@code{-fdefault-double-8} is given, too. Unlike @option{-freal-4-real-8},
it does not promote variables with explicit kind declaration.
@item -fdefault-real-10
@opindex @code{fdefault-real-10}
Set the default real type to a 10 byte wide type. This option also affects
the kind of non-double real constants like @code{1.0}, and does promote
the default width of @code{DOUBLE PRECISION} to 16 bytes if possible, unless
@code{-fdefault-double-8} is given. Unlike @option{-freal-4-real-10},
it does not promote variables with explicit kind declaration.
@item -fdefault-real-16
@opindex @code{fdefault-real-16}
Set the default real type to a 16 byte wide type. This option also affects
the kind of non-double real constants like @code{1.0}, and does promote
the default width of @code{DOUBLE PRECISION} to 16 bytes if possible, unless
@code{-fdefault-double-8} is given. Unlike @option{-freal-4-real-16},
it does not promote variables with explicit kind declaration.
@item -fdefault-double-8
@opindex @code{fdefault-double-8}
Set the @code{DOUBLE PRECISION} type to an 8 byte wide type. Do nothing if this
......
......@@ -457,9 +457,17 @@ Fortran Var(flag_default_integer)
Set the default integer kind to an 8 byte wide type.
fdefault-real-8
Fortran Var(flag_default_real)
Fortran Var(flag_default_real_8)
Set the default real kind to an 8 byte wide type.
fdefault-real-10
Fortran Var(flag_default_real_10)
Set the default real kind to an 10 byte wide type.
fdefault-real-16
Fortran Var(flag_default_real_16)
Set the default real kind to an 16 byte wide type.
fdollar-ok
Fortran Var(flag_dollar_ok)
Allow dollar signs in entity names.
......
......@@ -6741,7 +6741,7 @@ use_iso_fortran_env_module (void)
"standard", symbol[i].name, &u->where))
continue;
if ((flag_default_integer || flag_default_real)
if ((flag_default_integer || flag_default_real_8)
&& symbol[i].id == ISOFORTRANENV_NUMERIC_STORAGE_SIZE)
gfc_warning_now (0, "Use of the NUMERIC_STORAGE_SIZE named "
"constant from intrinsic module "
......@@ -6808,7 +6808,7 @@ use_iso_fortran_env_module (void)
if ((gfc_option.allow_std & symbol[i].standard) == 0)
continue;
if ((flag_default_integer || flag_default_real)
if ((flag_default_integer || flag_default_real_8)
&& symbol[i].id == ISOFORTRANENV_NUMERIC_STORAGE_SIZE)
gfc_warning_now (0,
"Use of the NUMERIC_STORAGE_SIZE named constant "
......
......@@ -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)
......
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.
2017-09-23 Daniel Santos <daniel.santos@pobox.com>
* gcc.target/i386/pr82196-1.c: (b): Remove volatile asm.
......
! { dg-do run }
! { dg-options "-fdefault-real-16" }
!
! PR 82143: add a -fdefault-real-16 flag
!
! Contributed by Janus Weil <janus@gcc.gnu.org>
real :: r
real(kind=4) :: r4
real(kind=8) :: r8
double precision :: d
if (kind(r4) /= 4) call abort
if (kind(r8) /= 8) call abort
if (kind(r) /= 16) call abort
if (kind(d) /= 16) call abort
end
! { dg-do run }
! { dg-options "-fdefault-real-10" }
!
! PR 82143: add a -fdefault-real-16 flag
!
! Contributed by Janus Weil <janus@gcc.gnu.org>
real :: r
real(kind=4) :: r4
real(kind=8) :: r8
double precision :: d
if (kind(r4) /= 4) call abort
if (kind(r8) /= 8) call abort
if (kind(r) /= 10) call abort
if (kind(d) /= 16) call abort
end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment