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

Reply via email to