From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa4.mentor.iphmx.com (esa4.mentor.iphmx.com [68.232.137.252]) by sourceware.org (Postfix) with ESMTPS id 373B33857C68; Wed, 3 Mar 2021 11:45:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 373B33857C68 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=Tobias_Burnus@mentor.com IronPort-SDR: zKBkTmfPdK7lbvKz9Ndk1PQfl1iQa0elBik6DEpr3zcYC1yfEWYJLqXBYqB6Q1pGNgzpzGYSuP uXfdsTYr8Qb1phhjjFsZBK1boa6llvtt9v2X3L97L5kzoZmHY7mx0/A0WepuU0fTBtXUc53nO/ pNZ0eSlz8WqNEdqfDEUe1EXxhD7J8ZH8GAJ4MAH80++C7l81lgc70ov8KDlVsuB6ez+1lHW5aF Fh5lPjUT11onywOzp6HkLMRMbOQC13x5U88QVtpSAFrY0A9nUVPg+uZ6zAWsg+OVtUXT8YBXPS WYU= X-IronPort-AV: E=Sophos;i="5.81,219,1610438400"; d="diff'?scan'208";a="58840595" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa4.mentor.iphmx.com with ESMTP; 03 Mar 2021 03:45:45 -0800 IronPort-SDR: BhOwbA5pwu2wp85bk6YEoOAC5pxQtA/hSfpuy2nmHvSsCK7hWqpUrg3pi7x9mk7gW7bJ9QclKB kM2ZAUxoLpm+sWxtyxpXPG73cWni1IrYtr1pOG876hkPtvHsoEqKvsTSez1h+4sFyl15yq5shA CM8+koJWiHNhfjfEtQaTqqfA65ETUWLUngoQkKG/iEy9w0mw2ECwLevwux+N0b/LEfaKEVL+Ec DOrf2yn6cGQo04dgAwt0xlEbudbEsJxoHhwiKQ7XczYD2bcjUYMkJgAwVZXBjS7NWtrUFRI4ot YnI= To: gcc-patches , fortran From: Tobias Burnus Subject: [Patch] Fortran: Fix -freal-{4,8}-real* handling [PR99355] Message-ID: Date: Wed, 3 Mar 2021 12:45:35 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------6C66918E150A03A463C92CF0" Content-Language: en-US X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-06.mgc.mentorg.com (139.181.222.6) To svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, SCC_10_SHORT_WORD_LINES, SCC_20_SHORT_WORD_LINES, SCC_5_SHORT_WORD_LINES, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: fortran@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Fortran mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Mar 2021 11:45:50 -0000 --------------6C66918E150A03A463C92CF0 Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: quoted-printable Rather obvious change =E2=80=93 don't apply replacement multiple times. OK for mainline? Tobias ----------------- Mentor Graphics (Deutschland) GmbH, Arnulfstrasse 201, 80634 M=C3=BCnchen R= egistergericht M=C3=BCnchen HRB 106955, Gesch=C3=A4ftsf=C3=BChrer: Thomas H= eurung, Frank Th=C3=BCrauf --------------6C66918E150A03A463C92CF0 Content-Type: text/x-patch; charset="UTF-8"; name="realconv.diff" Content-Transfer-Encoding: 8bit Content-Disposition: attachment; filename="realconv.diff" 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 --------------6C66918E150A03A463C92CF0--