public inbox for fortran@gcc.gnu.org
 help / color / mirror / Atom feed
From: Tobias Burnus <tobias@codesourcery.com>
To: gcc-patches <gcc-patches@gcc.gnu.org>, fortran <fortran@gcc.gnu.org>
Subject: [Patch] Fortran: Fix -freal-{4,8}-real* handling [PR99355]
Date: Wed, 3 Mar 2021 12:45:35 +0100	[thread overview]
Message-ID: <c734eaa1-58da-f2ae-b148-21617603827a@codesourcery.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 276 bytes --]

Rather obvious change – don't apply replacement multiple times.

OK for mainline?

Tobias

-----------------
Mentor Graphics (Deutschland) GmbH, Arnulfstrasse 201, 80634 München Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Frank Thürauf

[-- Attachment #2: realconv.diff --]
[-- Type: text/x-patch, Size: 18808 bytes --]

Fortran: Fix -freal-{4,8}-real* handling [PR99355]

Avoid chain kind conversion for, e.g., -freal-4-real-8 -freal-8-real-10.
Note that gfc_default_double_kind/gfc_default_double_kind already
honors the -freal flags.

gcc/fortran/ChangeLog:

	PR fortran/99355
	* decl.c (gfc_match_old_kind_spec, gfc_match_kind_spec): Avoid
	redoing kind conversions.
	* primary.c (match_real_constant): Likewise.

gcc/testsuite/ChangeLog:

	PR fortran/99355
	* gfortran.dg/real4-10-real8-10.f90: New test.
	* gfortran.dg/real4-10-real8-16.f90: New test.
	* gfortran.dg/real4-10-real8-4.f90: New test.
	* gfortran.dg/real4-10.f90: New test.
	* gfortran.dg/real4-16-real8-10.f90: New test.
	* gfortran.dg/real4-16-real8-16.f90: New test.
	* gfortran.dg/real4-16-real8-4.f90: New test.
	* gfortran.dg/real4-16.f90: New test.
	* gfortran.dg/real4-8-real8-10.f90: New test.
	* gfortran.dg/real4-8-real8-16.f90: New test.
	* gfortran.dg/real4-8-real8-4.f90: New test.
	* gfortran.dg/real4-8.f90: New test.
	* gfortran.dg/real8-10.f90: New test.
	* gfortran.dg/real8-16.f90: New test.
	* gfortran.dg/real8-4.f90: New test.

 gcc/fortran/decl.c                              |  6 ++--
 gcc/fortran/primary.c                           | 40 -------------------------
 gcc/testsuite/gfortran.dg/real4-10-real8-10.f90 | 23 ++++++++++++++
 gcc/testsuite/gfortran.dg/real4-10-real8-16.f90 | 24 +++++++++++++++
 gcc/testsuite/gfortran.dg/real4-10-real8-4.f90  | 23 ++++++++++++++
 gcc/testsuite/gfortran.dg/real4-10.f90          | 23 ++++++++++++++
 gcc/testsuite/gfortran.dg/real4-16-real8-10.f90 | 24 +++++++++++++++
 gcc/testsuite/gfortran.dg/real4-16-real8-16.f90 | 24 +++++++++++++++
 gcc/testsuite/gfortran.dg/real4-16-real8-4.f90  | 24 +++++++++++++++
 gcc/testsuite/gfortran.dg/real4-16.f90          | 24 +++++++++++++++
 gcc/testsuite/gfortran.dg/real4-8-real8-10.f90  | 23 ++++++++++++++
 gcc/testsuite/gfortran.dg/real4-8-real8-16.f90  | 24 +++++++++++++++
 gcc/testsuite/gfortran.dg/real4-8-real8-4.f90   | 23 ++++++++++++++
 gcc/testsuite/gfortran.dg/real4-8.f90           | 23 ++++++++++++++
 gcc/testsuite/gfortran.dg/real8-10.f90          | 23 ++++++++++++++
 gcc/testsuite/gfortran.dg/real8-16.f90          | 24 +++++++++++++++
 gcc/testsuite/gfortran.dg/real8-4.f90           | 23 ++++++++++++++
 17 files changed, 354 insertions(+), 44 deletions(-)

diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
index 723915822f3..947e4f868a1 100644
--- a/gcc/fortran/decl.c
+++ b/gcc/fortran/decl.c
@@ -3066,8 +3066,7 @@ gfc_match_old_kind_spec (gfc_typespec *ts)
 	  if (flag_real4_kind == 16)
 	    ts->kind = 16;
 	}
-
-      if (ts->kind == 8)
+      else if (ts->kind == 8)
 	{
 	  if (flag_real8_kind == 4)
 	    ts->kind = 4;
@@ -3246,8 +3245,7 @@ close_brackets:
 	  if (flag_real4_kind == 16)
 	    ts->kind = 16;
 	}
-
-      if (ts->kind == 8)
+      else if (ts->kind == 8)
 	{
 	  if (flag_real8_kind == 4)
 	    ts->kind = 4;
diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c
index 7633e77909f..9dd1a86f275 100644
--- a/gcc/fortran/primary.c
+++ b/gcc/fortran/primary.c
@@ -676,26 +676,6 @@ done:
 	  goto cleanup;
 	}
       kind = gfc_default_double_kind;
-
-      if (kind == 4)
-	{
-	  if (flag_real4_kind == 8)
-	    kind = 8;
-	  if (flag_real4_kind == 10)
-	    kind = 10;
-	  if (flag_real4_kind == 16)
-	    kind = 16;
-	}
-
-      if (kind == 8)
-	{
-	  if (flag_real8_kind == 4)
-	    kind = 4;
-	  if (flag_real8_kind == 10)
-	    kind = 10;
-	  if (flag_real8_kind == 16)
-	    kind = 16;
-	}
       break;
 
     case 'q':
@@ -726,26 +706,6 @@ done:
       if (kind == -2)
 	kind = gfc_default_real_kind;
 
-      if (kind == 4)
-	{
-	  if (flag_real4_kind == 8)
-	    kind = 8;
-	  if (flag_real4_kind == 10)
-	    kind = 10;
-	  if (flag_real4_kind == 16)
-	    kind = 16;
-	}
-
-      if (kind == 8)
-	{
-	  if (flag_real8_kind == 4)
-	    kind = 4;
-	  if (flag_real8_kind == 10)
-	    kind = 10;
-	  if (flag_real8_kind == 16)
-	    kind = 16;
-	}
-
       if (gfc_validate_kind (BT_REAL, kind, true) < 0)
 	{
 	  gfc_error ("Invalid real kind %d at %C", kind);
diff --git a/gcc/testsuite/gfortran.dg/real4-10-real8-10.f90 b/gcc/testsuite/gfortran.dg/real4-10-real8-10.f90
new file mode 100644
index 00000000000..af4f1b2b4e6
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/real4-10-real8-10.f90
@@ -0,0 +1,23 @@
+! { dg-do run { target i?86-*-* x86_64-*-* } }
+! { dg-additional-options "-w -freal-4-real-10 -freal-8-real-10" }
+!
+! PR fortran/99355
+!
+
+program test
+  real :: r1
+  real*4:: r2
+  real(4) :: r3
+  real(selected_real_kind(p=6)) :: r4
+
+  double precision :: d1
+  real*8 :: d2
+  real(8) :: d3
+  real(kind(1.d0)) :: d4
+  real(selected_real_kind(p=15)) :: d5
+
+  !print '(tr3,a10,10(tr1,i2))', 'single', kind(r1), kind(r2), kind(r3), kind(r4)
+  !print '(tr3,a10,10(tr1,i2))', 'double', kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)
+  if (any ([kind(1.0), kind(r1), kind(r2), kind(r3), kind(r4)] /= 10)) stop 1
+  if (any ([kind(1.d0), kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)] /= 10)) stop 2
+end program test
diff --git a/gcc/testsuite/gfortran.dg/real4-10-real8-16.f90 b/gcc/testsuite/gfortran.dg/real4-10-real8-16.f90
new file mode 100644
index 00000000000..408d3475499
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/real4-10-real8-16.f90
@@ -0,0 +1,24 @@
+! { dg-do run { target i?86-*-* x86_64-*-* } }
+! { dg-additional-options "-w -freal-4-real-10 -freal-8-real-16" }
+! { dg-require-effective-target fortran_real_16 }
+!
+! PR fortran/99355
+!
+
+program test
+  real :: r1
+  real*4:: r2
+  real(4) :: r3
+  real(selected_real_kind(p=6)) :: r4
+
+  double precision :: d1
+  real*8 :: d2
+  real(8) :: d3
+  real(kind(1.d0)) :: d4
+  real(selected_real_kind(p=15)) :: d5
+
+  !print '(tr3,a10,10(tr1,i2))', 'single', kind(r1), kind(r2), kind(r3), kind(r4)
+  !print '(tr3,a10,10(tr1,i2))', 'double', kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)
+  if (any ([kind(1.0), kind(r1), kind(r2), kind(r3), kind(r4)] /= 10)) stop 1
+  if (any ([kind(1.d0), kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)] /= 16)) stop 2
+end program test
diff --git a/gcc/testsuite/gfortran.dg/real4-10-real8-4.f90 b/gcc/testsuite/gfortran.dg/real4-10-real8-4.f90
new file mode 100644
index 00000000000..7e52cdb0ac1
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/real4-10-real8-4.f90
@@ -0,0 +1,23 @@
+! { dg-do run { target i?86-*-* x86_64-*-* } }
+! { dg-additional-options "-w -freal-4-real-10 -freal-8-real-4" }
+!
+! PR fortran/99355
+!
+
+program test
+  real :: r1
+  real*4:: r2
+  real(4) :: r3
+  real(selected_real_kind(p=6)) :: r4
+
+  double precision :: d1
+  real*8 :: d2
+  real(8) :: d3
+  real(kind(1.d0)) :: d4 ! << this is ambiguous: kind=8 → 4 → 10 or 8 → 4; thus,excluded below
+  real(selected_real_kind(p=15)) :: d5
+
+  !print '(tr3,a10,10(tr1,i2))', 'single', kind(r1), kind(r2), kind(r3), kind(r4)
+  !print '(tr3,a10,10(tr1,i2))', 'double', kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)
+  if (any ([kind(1.0), kind(r1), kind(r2), kind(r3), kind(r4)] /= 10)) stop 1
+  if (any ([kind(1.d0), kind(d1), kind(d2), kind(d3), kind(d5)] /= 4)) stop 2
+end program test
diff --git a/gcc/testsuite/gfortran.dg/real4-10.f90 b/gcc/testsuite/gfortran.dg/real4-10.f90
new file mode 100644
index 00000000000..44fcd83a002
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/real4-10.f90
@@ -0,0 +1,23 @@
+! { dg-do run { target i?86-*-* x86_64-*-* } }
+! { dg-additional-options "-w -freal-4-real-10" }
+!
+! PR fortran/99355
+!
+
+program test
+  real :: r1
+  real*4:: r2
+  real(4) :: r3
+  real(selected_real_kind(p=6)) :: r4
+
+  double precision :: d1
+  real*8 :: d2
+  real(8) :: d3
+  real(kind(1.d0)) :: d4
+  real(selected_real_kind(p=15)) :: d5
+
+  !print '(tr3,a10,10(tr1,i2))', 'single', kind(r1), kind(r2), kind(r3), kind(r4)
+  !print '(tr3,a10,10(tr1,i2))', 'double', kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)
+  if (any ([kind(1.0), kind(r1), kind(r2), kind(r3), kind(r4)] /= 10)) stop 1
+  if (any ([kind(1.d0), kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)] /= 8)) stop 2
+end program test
diff --git a/gcc/testsuite/gfortran.dg/real4-16-real8-10.f90 b/gcc/testsuite/gfortran.dg/real4-16-real8-10.f90
new file mode 100644
index 00000000000..d080a1004c0
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/real4-16-real8-10.f90
@@ -0,0 +1,24 @@
+! { dg-do run { target i?86-*-* x86_64-*-* } }
+! { dg-additional-options "-w -freal-4-real-16 -freal-8-real-10" }
+! { dg-require-effective-target fortran_real_16 }
+!
+! PR fortran/99355
+!
+
+program test
+  real :: r1
+  real*4:: r2
+  real(4) :: r3
+  real(selected_real_kind(p=6)) :: r4
+
+  double precision :: d1
+  real*8 :: d2
+  real(8) :: d3
+  real(kind(1.d0)) :: d4
+  real(selected_real_kind(p=15)) :: d5
+
+  !print '(tr3,a10,10(tr1,i2))', 'single', kind(r1), kind(r2), kind(r3), kind(r4)
+  !print '(tr3,a10,10(tr1,i2))', 'double', kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)
+  if (any ([kind(1.0), kind(r1), kind(r2), kind(r3), kind(r4)] /= 16)) stop 1
+  if (any ([kind(1.d0), kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)] /= 10)) stop 2
+end program test
diff --git a/gcc/testsuite/gfortran.dg/real4-16-real8-16.f90 b/gcc/testsuite/gfortran.dg/real4-16-real8-16.f90
new file mode 100644
index 00000000000..d525c6014aa
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/real4-16-real8-16.f90
@@ -0,0 +1,24 @@
+! { dg-do run }
+! { dg-additional-options "-w -freal-4-real-16 -freal-8-real-16" }
+! { dg-require-effective-target fortran_real_16 }
+!
+! PR fortran/99355
+!
+
+program test
+  real :: r1
+  real*4:: r2
+  real(4) :: r3
+  real(selected_real_kind(p=6)) :: r4
+
+  double precision :: d1
+  real*8 :: d2
+  real(8) :: d3
+  real(kind(1.d0)) :: d4
+  real(selected_real_kind(p=15)) :: d5
+
+  !print '(tr3,a10,10(tr1,i2))', 'single', kind(r1), kind(r2), kind(r3), kind(r4)
+  !print '(tr3,a10,10(tr1,i2))', 'double', kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)
+  if (any ([kind(1.0), kind(r1), kind(r2), kind(r3), kind(r4)] /= 16)) stop 1
+  if (any ([kind(1.d0), kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)] /= 16)) stop 2
+end program test
diff --git a/gcc/testsuite/gfortran.dg/real4-16-real8-4.f90 b/gcc/testsuite/gfortran.dg/real4-16-real8-4.f90
new file mode 100644
index 00000000000..e508819350e
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/real4-16-real8-4.f90
@@ -0,0 +1,24 @@
+! { dg-do run }
+! { dg-additional-options "-w -freal-4-real-16 -freal-8-real-4" }
+! { dg-require-effective-target fortran_real_16 }
+!
+! PR fortran/99355
+!
+
+program test
+  real :: r1
+  real*4:: r2
+  real(4) :: r3
+  real(selected_real_kind(p=6)) :: r4
+
+  double precision :: d1
+  real*8 :: d2
+  real(8) :: d3
+  real(kind(1.d0)) :: d4 ! << this is ambiguous: kind=8 → 4 → 16 or 8 → 4; thus,excluded below
+  real(selected_real_kind(p=15)) :: d5
+
+  !print '(tr3,a10,10(tr1,i2))', 'single', kind(r1), kind(r2), kind(r3), kind(r4)
+  !print '(tr3,a10,10(tr1,i2))', 'double', kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)
+  if (any ([kind(1.0), kind(r1), kind(r2), kind(r3), kind(r4)] /= 16)) stop 1
+  if (any ([kind(1.d0), kind(d1), kind(d2), kind(d3), kind(d5)] /= 4)) stop 2
+end program test
diff --git a/gcc/testsuite/gfortran.dg/real4-16.f90 b/gcc/testsuite/gfortran.dg/real4-16.f90
new file mode 100644
index 00000000000..5cd2f1f4822
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/real4-16.f90
@@ -0,0 +1,24 @@
+! { dg-do run }
+! { dg-additional-options "-w -freal-4-real-16" }
+! { dg-require-effective-target fortran_real_16 }
+!
+! PR fortran/99355
+!
+
+program test
+  real :: r1
+  real*4:: r2
+  real(4) :: r3
+  real(selected_real_kind(p=6)) :: r4
+
+  double precision :: d1
+  real*8 :: d2
+  real(8) :: d3
+  real(kind(1.d0)) :: d4
+  real(selected_real_kind(p=15)) :: d5
+
+  !print '(tr3,a10,10(tr1,i2))', 'single', kind(r1), kind(r2), kind(r3), kind(r4)
+  !print '(tr3,a10,10(tr1,i2))', 'double', kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)
+  if (any ([kind(1.0), kind(r1), kind(r2), kind(r3), kind(r4)] /= 16)) stop 1
+  if (any ([kind(1.d0), kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)] /= 8)) stop 2
+end program test
diff --git a/gcc/testsuite/gfortran.dg/real4-8-real8-10.f90 b/gcc/testsuite/gfortran.dg/real4-8-real8-10.f90
new file mode 100644
index 00000000000..742d3524827
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/real4-8-real8-10.f90
@@ -0,0 +1,23 @@
+! { dg-do run { target i?86-*-* x86_64-*-* } }
+! { dg-additional-options "-w -freal-4-real-8 -freal-8-real-10" }
+!
+! PR fortran/99355
+!
+
+program test
+  real :: r1
+  real*4:: r2
+  real(4) :: r3
+  real(selected_real_kind(p=6)) :: r4
+
+  double precision :: d1
+  real*8 :: d2
+  real(8) :: d3
+  real(kind(1.d0)) :: d4
+  real(selected_real_kind(p=15)) :: d5
+
+  print '(tr3,a10,10(tr1,i2))', 'single', kind(r1), kind(r2), kind(r3), kind(r4)
+  print '(tr3,a10,10(tr1,i2))', 'double', kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)
+  if (any ([kind(r1), kind(r2), kind(r3), kind(r4)] /= 8)) stop 1
+  if (any ([kind(1.d0), kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)] /= 10)) stop 2
+end program test
diff --git a/gcc/testsuite/gfortran.dg/real4-8-real8-16.f90 b/gcc/testsuite/gfortran.dg/real4-8-real8-16.f90
new file mode 100644
index 00000000000..3733c343d2a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/real4-8-real8-16.f90
@@ -0,0 +1,24 @@
+! { dg-do run }
+! { dg-additional-options "-w -freal-4-real-8 -freal-8-real-16" }
+! { dg-require-effective-target fortran_real_16 }
+!
+! PR fortran/99355
+!
+
+program test
+  real :: r1
+  real*4:: r2
+  real(4) :: r3
+  real(selected_real_kind(p=6)) :: r4
+
+  double precision :: d1
+  real*8 :: d2
+  real(8) :: d3
+  real(kind(1.d0)) :: d4
+  real(selected_real_kind(p=15)) :: d5
+
+  !print '(tr3,a10,10(tr1,i2))', 'single', kind(r1), kind(r2), kind(r3), kind(r4)
+  !print '(tr3,a10,10(tr1,i2))', 'double', kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)
+  if (any ([kind(1.0), kind(r1), kind(r2), kind(r3), kind(r4)] /= 8)) stop 1
+  if (any ([kind(1.d0), kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)] /= 16)) stop 2
+end program test
diff --git a/gcc/testsuite/gfortran.dg/real4-8-real8-4.f90 b/gcc/testsuite/gfortran.dg/real4-8-real8-4.f90
new file mode 100644
index 00000000000..b83b2438a58
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/real4-8-real8-4.f90
@@ -0,0 +1,23 @@
+! { dg-do run }
+! { dg-additional-options "-w -freal-4-real-8 -freal-8-real-4" }
+!
+! PR fortran/99355
+!
+
+program test
+  real :: r1
+  real*4:: r2
+  real(4) :: r3
+  real(selected_real_kind(p=6)) :: r4
+
+  double precision :: d1
+  real*8 :: d2
+  real(8) :: d3
+  real(kind(1.d0)) :: d4 ! << this is ambiguous: kind=8 → 4 → 8 or 8 → 4; thus,excluded below
+  real(selected_real_kind(p=15)) :: d5
+
+  print '(tr3,a10,10(tr1,i2))', 'single', kind(r1), kind(r2), kind(r3), kind(r4)
+  print '(tr3,a10,10(tr1,i2))', 'double', kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)
+  if (any ([kind(1.0), kind(r1), kind(r2), kind(r3), kind(r4)] /= 8)) stop 1
+  if (any ([kind(1.d0), kind(d1), kind(d2), kind(d3), kind(d5)] /= 4)) stop 2
+end program test
diff --git a/gcc/testsuite/gfortran.dg/real4-8.f90 b/gcc/testsuite/gfortran.dg/real4-8.f90
new file mode 100644
index 00000000000..50577dd5fa8
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/real4-8.f90
@@ -0,0 +1,23 @@
+! { dg-do run }
+! { dg-additional-options "-w -freal-4-real-8" }
+!
+! PR fortran/99355
+!
+
+program test
+  real :: r1
+  real*4:: r2
+  real(4) :: r3
+  real(selected_real_kind(p=6)) :: r4
+
+  double precision :: d1
+  real*8 :: d2
+  real(8) :: d3
+  real(kind(1.d0)) :: d4
+  real(selected_real_kind(p=15)) :: d5
+
+  !print '(tr3,a10,10(tr1,i2))', 'single', kind(r1), kind(r2), kind(r3), kind(r4)
+  !print '(tr3,a10,10(tr1,i2))', 'double', kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)
+  if (any ([kind(1.0), kind(r1), kind(r2), kind(r3), kind(r4)] /= 8)) stop 1
+  if (any ([kind(1.d0), kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)] /= 8)) stop 2
+end program test
diff --git a/gcc/testsuite/gfortran.dg/real8-10.f90 b/gcc/testsuite/gfortran.dg/real8-10.f90
new file mode 100644
index 00000000000..68f6bc46bce
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/real8-10.f90
@@ -0,0 +1,23 @@
+! { dg-do run { target i?86-*-* x86_64-*-* } }
+! { dg-additional-options "-w -freal-8-real-10" }
+!
+! PR fortran/99355
+!
+
+program test
+  real :: r1
+  real*4:: r2
+  real(4) :: r3
+  real(selected_real_kind(p=6)) :: r4
+
+  double precision :: d1
+  real*8 :: d2
+  real(8) :: d3
+  real(kind(1.d0)) :: d4
+  real(selected_real_kind(p=15)) :: d5
+
+  !print '(tr3,a10,10(tr1,i2))', 'single', kind(r1), kind(r2), kind(r3), kind(r4)
+  !print '(tr3,a10,10(tr1,i2))', 'double', kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)
+  if (any ([kind(1.0), kind(r1), kind(r2), kind(r3), kind(r4)] /= 4)) stop 1
+  if (any ([kind(1.d0), kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)] /= 10)) stop 2
+end program test
diff --git a/gcc/testsuite/gfortran.dg/real8-16.f90 b/gcc/testsuite/gfortran.dg/real8-16.f90
new file mode 100644
index 00000000000..5ddd9e17bb6
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/real8-16.f90
@@ -0,0 +1,24 @@
+! { dg-do run }
+! { dg-additional-options "-w -freal-8-real-16" }
+! { dg-require-effective-target fortran_real_16 }
+!
+! PR fortran/99355
+!
+
+program test
+  real :: r1
+  real*4:: r2
+  real(4) :: r3
+  real(selected_real_kind(p=6)) :: r4
+
+  double precision :: d1
+  real*8 :: d2
+  real(8) :: d3
+  real(kind(1.d0)) :: d4
+  real(selected_real_kind(p=15)) :: d5
+
+  !print '(tr3,a10,10(tr1,i2))', 'single', kind(r1), kind(r2), kind(r3), kind(r4)
+  !print '(tr3,a10,10(tr1,i2))', 'double', kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)
+  if (any ([kind(1.0), kind(r1), kind(r2), kind(r3), kind(r4)] /= 4)) stop 1
+  if (any ([kind(1.d0), kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)] /= 16)) stop 2
+end program test
diff --git a/gcc/testsuite/gfortran.dg/real8-4.f90 b/gcc/testsuite/gfortran.dg/real8-4.f90
new file mode 100644
index 00000000000..a68559a26ad
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/real8-4.f90
@@ -0,0 +1,23 @@
+! { dg-do run }
+! { dg-additional-options "-w -freal-8-real-4" }
+!
+! PR fortran/99355
+!
+
+program test
+  real :: r1
+  real*4:: r2
+  real(4) :: r3
+  real(selected_real_kind(p=6)) :: r4
+
+  double precision :: d1
+  real*8 :: d2
+  real(8) :: d3
+  real(kind(1.d0)) :: d4
+  real(selected_real_kind(p=15)) :: d5
+
+  !print '(tr3,a10,10(tr1,i2))', 'single', kind(r1), kind(r2), kind(r3), kind(r4)
+  !print '(tr3,a10,10(tr1,i2))', 'double', kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)
+  if (any ([kind(1.0), kind(r1), kind(r2), kind(r3), kind(r4)] /= 4)) stop 1
+  if (any ([kind(1.d0), kind(d1), kind(d2), kind(d3), kind(d4), kind(d5)] /= 4)) stop 2
+end program test

             reply	other threads:[~2021-03-03 11:45 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-03 11:45 Tobias Burnus [this message]
2021-03-04  2:06 ` Jerry DeLisle
2021-03-04 17:02 ` [Patch] Fortran: Follow fixes to -freal-{4,8}-real* handling [PR99355,PR57871] (was: Re: [Patch] Fortran: Fix -freal-{4,8}-real* handling [PR99355]) Tobias Burnus
2021-03-05  1:03   ` Jerry DeLisle

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c734eaa1-58da-f2ae-b148-21617603827a@codesourcery.com \
    --to=tobias@codesourcery.com \
    --cc=fortran@gcc.gnu.org \
    --cc=gcc-patches@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).