Desire to allocate bit in DT_PARM bitmask for DEC FORMAT compatibility purposes
Jakub Jelinek
jakub@redhat.com
Mon Mar 26 07:42:00 GMT 2018
On Sun, Mar 25, 2018 at 08:44:41PM -0700, Steve Kargl wrote:
> Now that you mention it, -std=dec would prevent a user from
> specifically requesting, say, only Fortran 95 with DEC
> extensions (i.e, -std=f95 -fdec).
>
> So, to prevent a bikeshed and micro-engineering, I think you
> should go with using bit 28 to comunicate with the runtime
> and put everything under -fdec in the FE.
In that case, we would have two bits that are always set based on flag_dec
in the compiler.
Thus, wouldn't following patch be better? I.e. just rename the existing bit
from a single particular DEC extension to indicate it turns on all runtime
DEC extensions we support, now or in the future?
Is this ok for trunk now (if it passes bootstrap/regtest)? Jeff then can
follow with his patch in stage1 just using this bit.
2018-03-26 Jakub Jelinek <jakub@redhat.com>
* gfortran.h (gfc_dt): Rename default_exp field to dec_ext.
* ioparm.def (IOPARM_dt_default_exp): Rename to ...
(IOPARM_dt_dec_ext): ... this.
* trans-io.c (build_dt): Adjust for default_exp renaming to
dec_ext and IOPARM_dt_default_exp renaming to IOPARM_dt_dec_ext.
* io.c (match_io): Likewise.
* io/io.h (IOPARM_DT_DEFAULT_EXP): Rename to ...
(IOPARM_DT_DEC_EXT): ... this.
* io/list_read.c (parse_real): Adjust for IOPARM_DT_DEFAULT_EXP
renaming to IOPARM_DT_DEC_EXT.
(read_real): Likewise.
* io/read.c (read_f): Likewise.
--- gcc/fortran/gfortran.h.jj 2018-03-07 10:11:43.270758837 +0100
+++ gcc/fortran/gfortran.h 2018-03-26 09:29:40.049578634 +0200
@@ -2437,7 +2437,7 @@ typedef struct
gfc_expr *io_unit, *format_expr, *rec, *advance, *iostat, *size, *iomsg,
*id, *pos, *asynchronous, *blank, *decimal, *delim, *pad, *round,
*sign, *extra_comma, *dt_io_kind, *udtio;
- char default_exp;
+ char dec_ext;
gfc_symbol *namelist;
/* A format_label of `format_asterisk' indicates the "*" format */
--- gcc/fortran/ioparm.def.jj 2018-01-03 10:20:23.234538447 +0100
+++ gcc/fortran/ioparm.def 2018-03-26 09:30:59.289568901 +0200
@@ -118,5 +118,5 @@ IOPARM (dt, round, 1 << 23, char2)
IOPARM (dt, sign, 1 << 24, char1)
#define IOPARM_dt_f2003 (1 << 25)
#define IOPARM_dt_dtio (1 << 26)
-#define IOPARM_dt_default_exp (1 << 27)
+#define IOPARM_dt_dec_ext (1 << 27)
IOPARM (dt, u, 0, pad)
--- gcc/fortran/trans-io.c.jj 2018-02-26 10:46:02.880316251 +0100
+++ gcc/fortran/trans-io.c 2018-03-26 09:30:35.492571824 +0200
@@ -1958,8 +1958,8 @@ build_dt (tree function, gfc_code * code
if (dt->udtio)
mask |= IOPARM_dt_dtio;
- if (dt->default_exp)
- mask |= IOPARM_dt_default_exp;
+ if (dt->dec_ext)
+ mask |= IOPARM_dt_dec_ext;
if (dt->namelist)
{
--- gcc/fortran/io.c.jj 2018-02-19 10:30:02.385160922 +0100
+++ gcc/fortran/io.c 2018-03-26 09:30:08.919575086 +0200
@@ -4249,9 +4249,10 @@ get_io_list:
goto syntax;
}
- /* See if we want to use defaults for missing exponents in real transfers. */
+ /* See if we want to use defaults for missing exponents in real transfers
+ and other DEC runtime extensions. */
if (flag_dec)
- dt->default_exp = 1;
+ dt->dec_ext = 1;
/* A full IO statement has been matched. Check the constraints. spec_end is
supplied for cases where no locus is supplied. */
--- libgfortran/io/io.h.jj 2018-01-07 20:28:45.921749740 +0100
+++ libgfortran/io/io.h 2018-03-26 09:32:06.789560623 +0200
@@ -442,7 +442,7 @@ st_parameter_inquire;
#define IOPARM_DT_HAS_SIGN (1 << 24)
#define IOPARM_DT_HAS_F2003 (1 << 25)
#define IOPARM_DT_HAS_UDTIO (1 << 26)
-#define IOPARM_DT_DEFAULT_EXP (1 << 27)
+#define IOPARM_DT_DEC_EXT (1 << 27)
/* Internal use bit. */
#define IOPARM_DT_IONML_SET (1u << 31)
--- libgfortran/io/list_read.c.jj 2018-02-12 23:24:50.961483597 +0100
+++ libgfortran/io/list_read.c 2018-03-26 09:32:48.077555544 +0200
@@ -1380,7 +1380,7 @@ parse_real (st_parameter_dt *dtp, void *
if (!isdigit (c))
{
/* Extension: allow default exponent of 0 when omitted. */
- if (dtp->common.flags & IOPARM_DT_DEFAULT_EXP)
+ if (dtp->common.flags & IOPARM_DT_DEC_EXP)
{
push_char (dtp, '0');
goto done;
@@ -1831,7 +1831,7 @@ read_real (st_parameter_dt *dtp, void *d
if (!isdigit (c))
{
/* Extension: allow default exponent of 0 when omitted. */
- if (dtp->common.flags & IOPARM_DT_DEFAULT_EXP)
+ if (dtp->common.flags & IOPARM_DT_DEC_EXT)
{
push_char (dtp, '0');
goto done;
--- libgfortran/io/read.c.jj 2018-01-07 20:28:45.921749740 +0100
+++ libgfortran/io/read.c 2018-03-26 09:33:02.538553768 +0200
@@ -1093,7 +1093,7 @@ exponent:
if (w == 0)
{
/* Extension: allow default exponent of 0 when omitted. */
- if (dtp->common.flags & IOPARM_DT_DEFAULT_EXP)
+ if (dtp->common.flags & IOPARM_DT_DEC_EXT)
goto done;
else
goto bad_float;
Jakub
More information about the Fortran
mailing list