On 23/05/2019 11:38, Christophe Lyon wrote:
On Wed, 22 May 2019 at 13:57, Janne Blomqvist <blomqvist.ja...@gmail.com> wrote:
On Wed, May 22, 2019 at 10:58 AM Mark Eggleston
<mark.eggles...@codethink.co.uk> wrote:
On 13/05/2019 10:45, Mark Eggleston wrote:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89100 see comment 4
Please can someone commit the attached patch as I do not have commit
rights.
Change logs:
For gcc/fortran
Jeff Law <l...@redhat.com>
Mark Eggleston <mark.eggles...@codethink.com>
PR fortran/89100
* gfortran.texi: Add Default widths for F, G and I format descriptors
to Extensions section.
* invoke.texi: Add -fdec-format-defaults
* io.c (check_format): Use default widths for i, f and g when
flag_dec_format_defaults is enabled.
* lang.opt: Add new option.
* options.c (set_dec_flags): Add SET_BITFLAG for
flag_dec_format_defaults.
For gcc/testsuite
Mark Eggleston <mark.eggles...@codethink.com>
PR fortran/89100
* gfortran.dg/fmt_f_default_field_width_1.f90: New test.
* gfortran.dg/fmt_f_default_field_width_2.f90: New test.
* gfortran.dg/fmt_f_default_field_width_3.f90: New test.
* gfortran.dg/fmt_g_default_field_width_1.f90: New test.
* gfortran.dg/fmt_g_default_field_width_2.f90: New test.
* gfortran.dg/fmt_g_default_field_width_3.f90: New test.
* gfortran.dg/fmt_i_default_field_width_1.f90: New test.
* gfortran.dg/fmt_i_default_field_width_2.f90: New test.
* gfortran.dg/fmt_i_default_field_width_3.f90: New test.
For libgfortran
Jeff Law <l...@redhat.com>
PR fortran/89100
* io/format.c (parse_format_list): set default width when the
IOPARM_DT_DEC_EXT flag is set for i, f and g.
* io/io.h: add default_width_for_integer, default_width_for_float
and default_precision_for_float.
* io/write.c (write_boz): extra parameter giving length of data
corresponding to the type's kind.
(write_b): pass data length as extra parameter in calls to write_boz.
(write_o): pass data length as extra parameter in calls to write_boz.
(write_z): pass data length as extra parameter in calls to write_boz.
(size_from_kind): also set size is default width is set.
* io/write_float.def (build_float_string): new paramter inserted
before
result parameter. If default width use values passed instead of the
values in fnode.
(FORMAT_FLOAT): macro modified to check for default width and
calls to
build_float_string to pass in default width.
(get_float_string): set width and precision to defaults when needed.
ping?
Committed as r271511.
Hi,
I've noticed new failures on arm:
gfortran.dg/fmt_f_default_field_width_1.f90 -O0 (test for excess errors)
gfortran.dg/fmt_f_default_field_width_1.f90 -O1 (test for excess errors)
gfortran.dg/fmt_f_default_field_width_1.f90 -O2 (test for excess errors)
gfortran.dg/fmt_f_default_field_width_1.f90 -O3
-fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer
-finline-functions (test for excess errors)
gfortran.dg/fmt_f_default_field_width_1.f90 -O3 -g (test for
excess errors)
gfortran.dg/fmt_f_default_field_width_1.f90 -Os (test for excess errors)
gfortran.dg/fmt_f_default_field_width_2.f90 -O0 (test for excess errors)
gfortran.dg/fmt_f_default_field_width_2.f90 -O1 (test for excess errors)
gfortran.dg/fmt_f_default_field_width_2.f90 -O2 (test for excess errors)
gfortran.dg/fmt_f_default_field_width_2.f90 -O3
-fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer
-finline-functions (test for excess errors)
gfortran.dg/fmt_f_default_field_width_2.f90 -O3 -g (test for
excess errors)
gfortran.dg/fmt_f_default_field_width_2.f90 -Os (test for excess errors)
gfortran.dg/fmt_f_default_field_width_3.f90 -O (test for excess errors)
gfortran.dg/fmt_g_default_field_width_1.f90 -O0 (test for excess errors)
gfortran.dg/fmt_g_default_field_width_1.f90 -O1 (test for excess errors)
gfortran.dg/fmt_g_default_field_width_1.f90 -O2 (test for excess errors)
gfortran.dg/fmt_g_default_field_width_1.f90 -O3
-fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer
-finline-functions (test for excess errors)
gfortran.dg/fmt_g_default_field_width_1.f90 -O3 -g (test for
excess errors)
gfortran.dg/fmt_g_default_field_width_1.f90 -Os (test for excess errors)
gfortran.dg/fmt_g_default_field_width_2.f90 -O0 (test for excess errors)
gfortran.dg/fmt_g_default_field_width_2.f90 -O1 (test for excess errors)
gfortran.dg/fmt_g_default_field_width_2.f90 -O2 (test for excess errors)
gfortran.dg/fmt_g_default_field_width_2.f90 -O3
-fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer
-finline-functions (test for excess errors)
gfortran.dg/fmt_g_default_field_width_2.f90 -O3 -g (test for
excess errors)
gfortran.dg/fmt_g_default_field_width_2.f90 -Os (test for excess errors)
gfortran.dg/fmt_g_default_field_width_3.f90 -O (test for excess errors)
The logs contain:
/gcc/testsuite/gfortran.dg/fmt_f_default_field_width_1.f90:15:11:
Error: Kind 16 not supported for type REAL at (1)
Christophe
Apologies, I'd forgotten that kind=16 is not always defined. The
attached patch modifies the test cases to take this into account. I
currently have no means of verifying this.
Please confirm that this patch solves the problem.
Mark
--
Janne Blomqvist
--
https://www.codethink.co.uk/privacy.html
>From ecd9ea5f505dd839e311f1496094d87f805d075f Mon Sep 17 00:00:00 2001
From: Mark Eggleston <markeggles...@codethink.com>
Date: Thu, 23 May 2019 14:30:35 +0100
Subject: [PATCH] Correct test cases for default fields where kind=16 is
missing
---
gcc/testsuite/gfortran.dg/fmt_f_default_field_width_1.f90 | 7 ++++++-
gcc/testsuite/gfortran.dg/fmt_f_default_field_width_2.f90 | 7 ++++++-
gcc/testsuite/gfortran.dg/fmt_f_default_field_width_3.f90 | 7 ++++++-
gcc/testsuite/gfortran.dg/fmt_g_default_field_width_1.f90 | 7 ++++++-
gcc/testsuite/gfortran.dg/fmt_g_default_field_width_2.f90 | 7 ++++++-
gcc/testsuite/gfortran.dg/fmt_g_default_field_width_3.f90 | 7 ++++++-
6 files changed, 36 insertions(+), 6 deletions(-)
diff --git a/gcc/testsuite/gfortran.dg/fmt_f_default_field_width_1.f90 b/gcc/testsuite/gfortran.dg/fmt_f_default_field_width_1.f90
index 5c0834211ff..a2b14b7fee6 100644
--- a/gcc/testsuite/gfortran.dg/fmt_f_default_field_width_1.f90
+++ b/gcc/testsuite/gfortran.dg/fmt_f_default_field_width_1.f90
@@ -1,5 +1,5 @@
! { dg-do run }
-! { dg-options -fdec }
+! { dg-options "-cpp -fdec" }
!
! Test case for the default field widths enabled by the -fdec-format-defaults flag.
!
@@ -8,11 +8,14 @@
!
program test
+ implicit none
character(50) :: buffer
real(4) :: real_4
real(8) :: real_8
+#ifdef __GFC_REAL_16__
real(16) :: real_16
+#endif
integer :: len
character(*), parameter :: fmt = "(A, F, A)"
@@ -32,9 +35,11 @@ program test
len = len_trim(buffer)
if (len /= 27) stop 3
+#ifdef __GFC_REAL_16__
real_16 = 4.18
write(buffer, fmt) ':',real_16,':'
print *,buffer
len = len_trim(buffer)
if (len /= 44) stop 4
+#endif
end
diff --git a/gcc/testsuite/gfortran.dg/fmt_f_default_field_width_2.f90 b/gcc/testsuite/gfortran.dg/fmt_f_default_field_width_2.f90
index fd5b1d25a56..1896197580a 100644
--- a/gcc/testsuite/gfortran.dg/fmt_f_default_field_width_2.f90
+++ b/gcc/testsuite/gfortran.dg/fmt_f_default_field_width_2.f90
@@ -1,5 +1,5 @@
! { dg-do run }
-! { dg-options -fdec-format-defaults }
+! { dg-options "-cpp -fdec-format-defaults" }
!
! Test case for the default field widths enabled by the -fdec-format-defaults flag.
!
@@ -11,11 +11,14 @@
!
program test
+ implicit none
character(50) :: buffer
real(4) :: real_4
real(8) :: real_8
+#ifdef __GFC_REAL_16__
real(16) :: real_16
+#endif
integer :: len
character(*), parameter :: fmt = "(A, F, A)"
@@ -35,9 +38,11 @@ program test
len = len_trim(buffer)
if (len /= 27) stop 3
+#ifdef __GFC_REAL_16__
real_16 = 4.18
write(buffer, fmt) ':',real_16,':'
print *,buffer
len = len_trim(buffer)
if (len /= 44) stop 4
+#endif
end
diff --git a/gcc/testsuite/gfortran.dg/fmt_f_default_field_width_3.f90 b/gcc/testsuite/gfortran.dg/fmt_f_default_field_width_3.f90
index 6852f8e9aa2..81ed35255ba 100644
--- a/gcc/testsuite/gfortran.dg/fmt_f_default_field_width_3.f90
+++ b/gcc/testsuite/gfortran.dg/fmt_f_default_field_width_3.f90
@@ -1,5 +1,5 @@
! { dg-do compile }
-! { dg-options "-fdec -fno-dec-format-defaults" }
+! { dg-options "-cpp -fdec -fno-dec-format-defaults" }
!
! Test case for the default field widths not enabled.
!
@@ -8,11 +8,14 @@
!
program test
+ implicit none
character(50) :: buffer
real*4 :: real_4
real*8 :: real_8
+#ifdef __GFC_REAL_16__
real*16 :: real_16
+#endif
integer :: len
character(*), parameter :: fmt = "(A, F, A)"
@@ -25,6 +28,8 @@ program test
real_8 = 4.18
write(buffer, fmt) ':',real_8,':' ! { dg-error "Nonnegative width required" }
+#ifdef __GFC_REAL_16__
real_16 = 4.18
write(buffer, fmt) ':',real_16,':' ! { dg-error "Nonnegative width required" }
+#endif
end
diff --git a/gcc/testsuite/gfortran.dg/fmt_g_default_field_width_1.f90 b/gcc/testsuite/gfortran.dg/fmt_g_default_field_width_1.f90
index 028cd113929..859e648ac39 100644
--- a/gcc/testsuite/gfortran.dg/fmt_g_default_field_width_1.f90
+++ b/gcc/testsuite/gfortran.dg/fmt_g_default_field_width_1.f90
@@ -1,5 +1,5 @@
! { dg-do run }
-! { dg-options -fdec }
+! { dg-options "-cpp -fdec" }
!
! Test case for the default field widths enabled by the -fdec-format-defaults flag.
!
@@ -8,11 +8,14 @@
!
program test
+ implicit none
character(50) :: buffer
real(4) :: real_4
real(8) :: real_8
+#ifdef __GFC_REAL_16__
real(16) :: real_16
+#endif
integer :: len
character(*), parameter :: fmt = "(A, G, A)"
@@ -37,9 +40,11 @@ program test
len = len_trim(buffer)
if (len /= 27) stop 4
+#ifdef __GFC_REAL_16__
real_16 = 4.18
write(buffer, fmt) ':',real_16,':'
print *,buffer
len = len_trim(buffer)
if (len /= 44) stop 5
+#endif
end
diff --git a/gcc/testsuite/gfortran.dg/fmt_g_default_field_width_2.f90 b/gcc/testsuite/gfortran.dg/fmt_g_default_field_width_2.f90
index 45c98c7c300..207dcc7ce09 100644
--- a/gcc/testsuite/gfortran.dg/fmt_g_default_field_width_2.f90
+++ b/gcc/testsuite/gfortran.dg/fmt_g_default_field_width_2.f90
@@ -1,5 +1,5 @@
! { dg-do run }
-! { dg-options -fdec-format-defaults }
+! { dg-options "-cpp -fdec-format-defaults" }
!
! Test case for the default field widths enabled by the -fdec-format-defaults flag.
!
@@ -11,11 +11,14 @@
!
program test
+ implicit none
character(50) :: buffer
real(4) :: real_4
real(8) :: real_8
+#ifdef __GFC_REAL_16__
real(16) :: real_16
+#endif
integer :: len
character(*), parameter :: fmt = "(A, G, A)"
@@ -40,9 +43,11 @@ program test
len = len_trim(buffer)
if (len /= 27) stop 4
+#ifdef __GFC_REAL_16__
real_16 = 4.18
write(buffer, fmt) ':',real_16,':'
print *,buffer
len = len_trim(buffer)
if (len /= 44) stop 5
+#endif
end
diff --git a/gcc/testsuite/gfortran.dg/fmt_g_default_field_width_3.f90 b/gcc/testsuite/gfortran.dg/fmt_g_default_field_width_3.f90
index 3db4fddd162..1fea3957c7a 100644
--- a/gcc/testsuite/gfortran.dg/fmt_g_default_field_width_3.f90
+++ b/gcc/testsuite/gfortran.dg/fmt_g_default_field_width_3.f90
@@ -1,5 +1,5 @@
! { dg-do compile }
-! { dg-options "-fdec -fno-dec-format-defaults" }
+! { dg-options "-cpp -fdec -fno-dec-format-defaults" }
!
! Test case for the default field widths not enabled.
!
@@ -8,11 +8,14 @@
!
program test
+ implicit none
character(50) :: buffer
real(4) :: real_4
real(8) :: real_8
+#ifdef __GFC_REAL_16__
real(16) :: real_16
+#endif
integer :: len
character(*), parameter :: fmt = "(A, G, A)"
@@ -28,6 +31,8 @@ program test
real_8 = 4.18
write(buffer, fmt) ':',real_8,':' ! { dg-error "Positive width required" }
+#ifdef __GFC_REAL_16__
real_16 = 4.18
write(buffer, fmt) ':',real_16,':' ! { dg-error "Positive width required" }
+#endif
end
--
2.11.0