aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/io.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/fortran/io.c')
-rw-r--r--gcc/fortran/io.c330
1 files changed, 157 insertions, 173 deletions
diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c
index cb424c4..312bb39 100644
--- a/gcc/fortran/io.c
+++ b/gcc/fortran/io.c
@@ -1,6 +1,6 @@
/* Deal with I/O statements & related stuff.
- Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software
- Foundation, Inc.
+ Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
Contributed by Andy Vaught
This file is part of GCC.
@@ -27,9 +27,9 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#include "match.h"
#include "parse.h"
-gfc_st_label format_asterisk =
- {0, NULL, NULL, -1, ST_LABEL_FORMAT, ST_LABEL_FORMAT, NULL,
- 0, {NULL, NULL}};
+gfc_st_label
+format_asterisk = {0, NULL, NULL, -1, ST_LABEL_FORMAT, ST_LABEL_FORMAT, NULL,
+ 0, {NULL, NULL}};
typedef struct
{
@@ -52,7 +52,7 @@ static const io_tag
tag_unit = {"UNIT", " unit = %e", BT_INTEGER},
tag_advance = {"ADVANCE", " advance = %e", BT_CHARACTER},
tag_rec = {"REC", " rec = %e", BT_INTEGER},
- tag_spos = {"POSITION", " pos = %e", BT_INTEGER},
+ tag_spos = {"POSITION", " pos = %e", BT_INTEGER},
tag_format = {"FORMAT", NULL, BT_CHARACTER},
tag_iomsg = {"IOMSG", " iomsg = %e", BT_CHARACTER},
tag_iostat = {"IOSTAT", " iostat = %v", BT_INTEGER},
@@ -152,14 +152,13 @@ next_char (int in_string)
static void
unget_char (void)
{
-
use_last_char = 1;
}
/* Eat up the spaces and return a character. */
static char
-next_char_not_space(void)
+next_char_not_space (void)
{
char c;
do
@@ -210,15 +209,15 @@ format_lex (void)
do
{
c = next_char_not_space ();
- if(ISDIGIT (c))
- value = 10 * value + c - '0';
+ if (ISDIGIT (c))
+ value = 10 * value + c - '0';
}
while (ISDIGIT (c));
unget_char ();
if (negative_flag)
- value = -value;
+ value = -value;
token = FMT_SIGNED_INT;
break;
@@ -242,8 +241,8 @@ format_lex (void)
c = next_char_not_space ();
if (c != '0')
zflag = 0;
- if (ISDIGIT (c))
- value = 10 * value + c - '0';
+ if (ISDIGIT (c))
+ value = 10 * value + c - '0';
}
while (ISDIGIT (c));
@@ -343,7 +342,7 @@ format_lex (void)
break;
}
}
- value++;
+ value++;
}
break;
@@ -506,8 +505,8 @@ format_item_1:
t = format_lex ();
if (gfc_notify_std (GFC_STD_GNU, "Extension: $ descriptor at %C")
- == FAILURE)
- return FAILURE;
+ == FAILURE)
+ return FAILURE;
if (t != FMT_RPAREN || level > 0)
{
gfc_warning ("$ should be the last specifier in format at %C");
@@ -573,8 +572,8 @@ data_desc:
switch (gfc_notification_std (GFC_STD_GNU))
{
case WARNING:
- gfc_warning
- ("Extension: Missing positive width after L descriptor at %C");
+ gfc_warning ("Extension: Missing positive width after L "
+ "descriptor at %C");
saved_token = t;
break;
@@ -660,7 +659,7 @@ data_desc:
if (t != FMT_PERIOD)
{
/* Warn if -std=legacy, otherwise error. */
- if (gfc_option.warn_std != 0)
+ if (gfc_option.warn_std != 0)
gfc_error_now ("Period required in format specifier at %C");
else
gfc_warning ("Period required in format specifier at %C");
@@ -680,16 +679,16 @@ data_desc:
case FMT_H:
if(mode == MODE_STRING)
{
- format_string += value;
- format_length -= value;
+ format_string += value;
+ format_length -= value;
}
else
{
- while(repeat >0)
- {
- next_char(1);
- repeat -- ;
- }
+ while (repeat >0)
+ {
+ next_char (1);
+ repeat -- ;
+ }
}
break;
@@ -821,7 +820,7 @@ syntax:
gfc_warning ("%s in format string at %C", error);
/* TODO: More elaborate measures are needed to show where a problem
- is within a format string that has been calculated. */
+ is within a format string that has been calculated. */
}
rv = FAILURE;
@@ -835,9 +834,8 @@ finished:
like a format string. */
static void
-check_format_string (gfc_expr * e)
+check_format_string (gfc_expr *e)
{
-
mode = MODE_STRING;
format_string = e->value.character.string;
check_format ();
@@ -857,7 +855,7 @@ gfc_match_format (void)
locus start;
if (gfc_current_ns->proc_name
- && gfc_current_ns->proc_name->attr.flavor == FL_MODULE)
+ && gfc_current_ns->proc_name->attr.flavor == FL_MODULE)
{
gfc_error ("Format statement in module main block at %C");
return MATCH_ERROR;
@@ -897,7 +895,7 @@ gfc_match_format (void)
e->ts.type = BT_CHARACTER;
e->ts.kind = gfc_default_character_kind;
e->where = start;
- e->value.character.string = format_string = gfc_getmem(format_length+1);
+ e->value.character.string = format_string = gfc_getmem (format_length + 1);
e->value.character.length = format_length;
gfc_statement_label->format = e;
@@ -912,7 +910,7 @@ gfc_match_format (void)
/* Match an expression I/O tag of some sort. */
static match
-match_etag (const io_tag * tag, gfc_expr ** v)
+match_etag (const io_tag *tag, gfc_expr **v)
{
gfc_expr *result;
match m;
@@ -936,7 +934,7 @@ match_etag (const io_tag * tag, gfc_expr ** v)
/* Match a variable I/O tag of some sort. */
static match
-match_vtag (const io_tag * tag, gfc_expr ** v)
+match_vtag (const io_tag *tag, gfc_expr **v)
{
gfc_expr *result;
match m;
@@ -989,7 +987,7 @@ match_out_tag(const io_tag *tag, gfc_expr **result)
/* Match a label I/O tag. */
static match
-match_ltag (const io_tag * tag, gfc_st_label ** label)
+match_ltag (const io_tag *tag, gfc_st_label ** label)
{
match m;
gfc_st_label *old;
@@ -1013,9 +1011,8 @@ match_ltag (const io_tag * tag, gfc_st_label ** label)
/* Do expression resolution and type-checking on an expression tag. */
static try
-resolve_tag (const io_tag * tag, gfc_expr * e)
+resolve_tag (const io_tag *tag, gfc_expr *e)
{
-
if (e == NULL)
return SUCCESS;
@@ -1025,7 +1022,7 @@ resolve_tag (const io_tag * tag, gfc_expr * e)
if (e->ts.type != tag->type && tag != &tag_format)
{
gfc_error ("%s tag at %L must be of type %s", tag->name,
- &e->where, gfc_basic_typename (tag->type));
+ &e->where, gfc_basic_typename (tag->type));
return FAILURE;
}
@@ -1044,32 +1041,34 @@ resolve_tag (const io_tag * tag, gfc_expr * e)
of integer or character type. The integer variable should be
ASSIGNED. */
if (e->symtree == NULL || e->symtree->n.sym->as == NULL
- || e->symtree->n.sym->as->rank == 0)
+ || e->symtree->n.sym->as->rank == 0)
{
if (e->ts.type != BT_CHARACTER && e->ts.type != BT_INTEGER)
{
gfc_error ("%s tag at %L must be of type %s or %s", tag->name,
- &e->where, gfc_basic_typename (BT_CHARACTER),
- gfc_basic_typename (BT_INTEGER));
+ &e->where, gfc_basic_typename (BT_CHARACTER),
+ gfc_basic_typename (BT_INTEGER));
return FAILURE;
}
else if (e->ts.type == BT_INTEGER && e->expr_type == EXPR_VARIABLE)
{
- if (gfc_notify_std (GFC_STD_F95_DEL,
- "Obsolete: ASSIGNED variable in FORMAT tag at %L",
- &e->where) == FAILURE)
+ if (gfc_notify_std (GFC_STD_F95_DEL, "Obsolete: ASSIGNED "
+ "variable in FORMAT tag at %L", &e->where)
+ == FAILURE)
return FAILURE;
if (e->symtree->n.sym->attr.assign != 1)
{
gfc_error ("Variable '%s' at %L has not been assigned a "
- "format label", e->symtree->n.sym->name, &e->where);
+ "format label", e->symtree->n.sym->name,
+ &e->where);
return FAILURE;
}
}
else if (e->ts.type == BT_INTEGER)
{
gfc_error ("scalar '%s' FORMAT tag at %L is not an ASSIGNED "
- "variable", gfc_basic_typename (e->ts.type), &e->where);
+ "variable", gfc_basic_typename (e->ts.type),
+ &e->where);
return FAILURE;
}
@@ -1082,16 +1081,16 @@ resolve_tag (const io_tag * tag, gfc_expr * e)
assigned an Hollerith constant. */
if (e->ts.type == BT_CHARACTER)
{
- if (gfc_notify_std (GFC_STD_GNU,
- "Extension: Character array in FORMAT tag at %L",
- &e->where) == FAILURE)
+ if (gfc_notify_std (GFC_STD_GNU, "Extension: Character array "
+ "in FORMAT tag at %L", &e->where)
+ == FAILURE)
return FAILURE;
}
else
{
- if (gfc_notify_std (GFC_STD_LEGACY,
- "Extension: Non-character in FORMAT tag at %L",
- &e->where) == FAILURE)
+ if (gfc_notify_std (GFC_STD_LEGACY, "Extension: Non-character "
+ "in FORMAT tag at %L", &e->where)
+ == FAILURE)
return FAILURE;
}
return SUCCESS;
@@ -1115,16 +1114,16 @@ resolve_tag (const io_tag * tag, gfc_expr * e)
if (tag == &tag_iostat && e->ts.kind != gfc_default_integer_kind)
{
if (gfc_notify_std (GFC_STD_GNU, "Fortran 95 requires default "
- "INTEGER in IOSTAT tag at %L",
- &e->where) == FAILURE)
+ "INTEGER in IOSTAT tag at %L", &e->where)
+ == FAILURE)
return FAILURE;
}
if (tag == &tag_size && e->ts.kind != gfc_default_integer_kind)
{
if (gfc_notify_std (GFC_STD_F2003, "Fortran 95 requires default "
- "INTEGER in SIZE tag at %L",
- &e->where) == FAILURE)
+ "INTEGER in SIZE tag at %L", &e->where)
+ == FAILURE)
return FAILURE;
}
@@ -1138,8 +1137,8 @@ resolve_tag (const io_tag * tag, gfc_expr * e)
if (tag == &tag_iolength && e->ts.kind != gfc_default_integer_kind)
{
if (gfc_notify_std (GFC_STD_F2003, "Fortran 95 requires default "
- "INTEGER in IOLENGTH tag at %L",
- &e->where) == FAILURE)
+ "INTEGER in IOLENGTH tag at %L", &e->where)
+ == FAILURE)
return FAILURE;
}
}
@@ -1151,7 +1150,7 @@ resolve_tag (const io_tag * tag, gfc_expr * e)
/* Match a single tag of an OPEN statement. */
static match
-match_open_element (gfc_open * open)
+match_open_element (gfc_open *open)
{
match m;
@@ -1208,9 +1207,8 @@ match_open_element (gfc_open * open)
/* Free the gfc_open structure and all the expressions it contains. */
void
-gfc_free_open (gfc_open * open)
+gfc_free_open (gfc_open *open)
{
-
if (open == NULL)
return;
@@ -1228,7 +1226,6 @@ gfc_free_open (gfc_open * open)
gfc_free_expr (open->delim);
gfc_free_expr (open->pad);
gfc_free_expr (open->convert);
-
gfc_free (open);
}
@@ -1236,7 +1233,7 @@ gfc_free_open (gfc_open * open)
/* Resolve everything in a gfc_open structure. */
try
-gfc_resolve_open (gfc_open * open)
+gfc_resolve_open (gfc_open *open)
{
RESOLVE_TAG (&tag_unit, open->unit);
@@ -1247,7 +1244,6 @@ gfc_resolve_open (gfc_open * open)
RESOLVE_TAG (&tag_e_access, open->access);
RESOLVE_TAG (&tag_e_form, open->form);
RESOLVE_TAG (&tag_e_recl, open->recl);
-
RESOLVE_TAG (&tag_e_blank, open->blank);
RESOLVE_TAG (&tag_e_position, open->position);
RESOLVE_TAG (&tag_e_action, open->action);
@@ -1262,20 +1258,20 @@ gfc_resolve_open (gfc_open * open)
}
-
/* Check if a given value for a SPECIFIER is either in the list of values
allowed in F95 or F2003, issuing an error message and returning a zero
value if it is not allowed. */
+
static int
-compare_to_allowed_values (const char * specifier, const char * allowed[],
- const char * allowed_f2003[],
- const char * allowed_gnu[], char * value,
- const char * statement, bool warn)
+compare_to_allowed_values (const char *specifier, const char *allowed[],
+ const char *allowed_f2003[],
+ const char *allowed_gnu[], char *value,
+ const char *statement, bool warn)
{
int i;
unsigned int len;
- len = strlen(value);
+ len = strlen (value);
if (len > 0)
{
for (len--; len > 0; len--)
@@ -1285,13 +1281,14 @@ compare_to_allowed_values (const char * specifier, const char * allowed[],
}
for (i = 0; allowed[i]; i++)
- if (len == strlen(allowed[i])
- && strncasecmp (value, allowed[i], strlen(allowed[i])) == 0)
+ if (len == strlen (allowed[i])
+ && strncasecmp (value, allowed[i], strlen (allowed[i])) == 0)
return 1;
for (i = 0; allowed_f2003 && allowed_f2003[i]; i++)
- if (len == strlen(allowed_f2003[i])
- && strncasecmp (value, allowed_f2003[i], strlen(allowed_f2003[i])) == 0)
+ if (len == strlen (allowed_f2003[i])
+ && strncasecmp (value, allowed_f2003[i], strlen (allowed_f2003[i]))
+ == 0)
{
notification n = gfc_notification_std (GFC_STD_F2003);
@@ -1316,8 +1313,8 @@ compare_to_allowed_values (const char * specifier, const char * allowed[],
}
for (i = 0; allowed_gnu && allowed_gnu[i]; i++)
- if (len == strlen(allowed_gnu[i])
- && strncasecmp (value, allowed_gnu[i], strlen(allowed_gnu[i])) == 0)
+ if (len == strlen (allowed_gnu[i])
+ && strncasecmp (value, allowed_gnu[i], strlen (allowed_gnu[i])) == 0)
{
notification n = gfc_notification_std (GFC_STD_GNU);
@@ -1355,6 +1352,7 @@ compare_to_allowed_values (const char * specifier, const char * allowed[],
}
}
+
/* Match an OPEN statement. */
match
@@ -1410,9 +1408,9 @@ gfc_match_open (void)
/* Checks on the ACCESS specifier. */
if (open->access && open->access->expr_type == EXPR_CONSTANT)
{
- static const char * access_f95[] = { "SEQUENTIAL", "DIRECT", NULL };
- static const char * access_f2003[] = { "STREAM", NULL };
- static const char * access_gnu[] = { "APPEND", NULL };
+ static const char *access_f95[] = { "SEQUENTIAL", "DIRECT", NULL };
+ static const char *access_f2003[] = { "STREAM", NULL };
+ static const char *access_gnu[] = { "APPEND", NULL };
if (!compare_to_allowed_values ("ACCESS", access_f95, access_f2003,
access_gnu,
@@ -1424,7 +1422,7 @@ gfc_match_open (void)
/* Checks on the ACTION specifier. */
if (open->action && open->action->expr_type == EXPR_CONSTANT)
{
- static const char * action[] = { "READ", "WRITE", "READWRITE", NULL };
+ static const char *action[] = { "READ", "WRITE", "READWRITE", NULL };
if (!compare_to_allowed_values ("ACTION", action, NULL, NULL,
open->action->value.character.string,
@@ -1448,7 +1446,7 @@ gfc_match_open (void)
/* Checks on the BLANK specifier. */
if (open->blank && open->blank->expr_type == EXPR_CONSTANT)
{
- static const char * blank[] = { "ZERO", "NULL", NULL };
+ static const char *blank[] = { "ZERO", "NULL", NULL };
if (!compare_to_allowed_values ("BLANK", blank, NULL, NULL,
open->blank->value.character.string,
@@ -1471,7 +1469,7 @@ gfc_match_open (void)
/* Checks on the DELIM specifier. */
if (open->delim && open->delim->expr_type == EXPR_CONSTANT)
{
- static const char * delim[] = { "APOSTROPHE", "QUOTE", "NONE", NULL };
+ static const char *delim[] = { "APOSTROPHE", "QUOTE", "NONE", NULL };
if (!compare_to_allowed_values ("DELIM", delim, NULL, NULL,
open->delim->value.character.string,
@@ -1494,7 +1492,7 @@ gfc_match_open (void)
/* Checks on the FORM specifier. */
if (open->form && open->form->expr_type == EXPR_CONSTANT)
{
- static const char * form[] = { "FORMATTED", "UNFORMATTED", NULL };
+ static const char *form[] = { "FORMATTED", "UNFORMATTED", NULL };
if (!compare_to_allowed_values ("FORM", form, NULL, NULL,
open->form->value.character.string,
@@ -1505,7 +1503,7 @@ gfc_match_open (void)
/* Checks on the PAD specifier. */
if (open->pad && open->pad->expr_type == EXPR_CONSTANT)
{
- static const char * pad[] = { "YES", "NO", NULL };
+ static const char *pad[] = { "YES", "NO", NULL };
if (!compare_to_allowed_values ("PAD", pad, NULL, NULL,
open->pad->value.character.string,
@@ -1516,7 +1514,7 @@ gfc_match_open (void)
/* Checks on the POSITION specifier. */
if (open->position && open->position->expr_type == EXPR_CONSTANT)
{
- static const char * position[] = { "ASIS", "REWIND", "APPEND", NULL };
+ static const char *position[] = { "ASIS", "REWIND", "APPEND", NULL };
if (!compare_to_allowed_values ("POSITION", position, NULL, NULL,
open->position->value.character.string,
@@ -1572,7 +1570,7 @@ gfc_match_open (void)
/* Checks on the STATUS specifier. */
if (open->status && open->status->expr_type == EXPR_CONSTANT)
{
- static const char * status[] = { "OLD", "NEW", "SCRATCH",
+ static const char *status[] = { "OLD", "NEW", "SCRATCH",
"REPLACE", "UNKNOWN", NULL };
if (!compare_to_allowed_values ("STATUS", status, NULL, NULL,
@@ -1581,23 +1579,25 @@ gfc_match_open (void)
goto cleanup;
/* F2003, 9.4.5: If the STATUS= specifier has the value NEW or REPLACE,
- the FILE= specifier shall appear. */
- if (open->file == NULL &&
- (strncasecmp (open->status->value.character.string, "replace", 7) == 0
- || strncasecmp (open->status->value.character.string, "new", 3) == 0))
+ the FILE= specifier shall appear. */
+ if (open->file == NULL
+ && (strncasecmp (open->status->value.character.string, "replace", 7)
+ == 0
+ || strncasecmp (open->status->value.character.string, "new", 3)
+ == 0))
{
- warn_or_error ("The STATUS specified in OPEN statement at %C is '%s' "
- "and no FILE specifier is present",
+ warn_or_error ("The STATUS specified in OPEN statement at %C is "
+ "'%s' and no FILE specifier is present",
open->status->value.character.string);
}
/* F2003, 9.4.5: If the STATUS= specifier has the value SCRATCH,
the FILE= specifier shall not appear. */
- if (strncasecmp (open->status->value.character.string, "scratch", 7) == 0
- && open->file)
+ if (strncasecmp (open->status->value.character.string, "scratch", 7)
+ == 0 && open->file)
{
- warn_or_error ("The STATUS specified in OPEN statement at %C cannot "
- "have the value SCRATCH if a FILE specifier "
+ warn_or_error ("The STATUS specified in OPEN statement at %C "
+ "cannot have the value SCRATCH if a FILE specifier "
"is present");
}
}
@@ -1612,10 +1612,11 @@ gfc_match_open (void)
&& strncasecmp (open->form->value.character.string,
"unformatted", 11) == 0)
{
- const char * spec = (open->delim ? "DELIM " : (open->pad ? "PAD " :
- open->blank ? "BLANK " : ""));
+ const char *spec = (open->delim ? "DELIM "
+ : (open->pad ? "PAD " : open->blank
+ ? "BLANK " : ""));
- warn_or_error ("%sspecifier at %C not allowed in OPEN statement for "
+ warn_or_error ("%s specifier at %C not allowed in OPEN statement for "
"unformatted I/O", spec);
}
@@ -1626,7 +1627,8 @@ gfc_match_open (void)
"stream I/O");
}
- if (open->position && open->access && open->access->expr_type == EXPR_CONSTANT
+ if (open->position
+ && open->access && open->access->expr_type == EXPR_CONSTANT
&& !(strncasecmp (open->access->value.character.string,
"sequential", 10) == 0
|| strncasecmp (open->access->value.character.string,
@@ -1656,9 +1658,8 @@ cleanup:
/* Free a gfc_close structure an all its expressions. */
void
-gfc_free_close (gfc_close * close)
+gfc_free_close (gfc_close *close)
{
-
if (close == NULL)
return;
@@ -1666,7 +1667,6 @@ gfc_free_close (gfc_close * close)
gfc_free_expr (close->iomsg);
gfc_free_expr (close->iostat);
gfc_free_expr (close->status);
-
gfc_free (close);
}
@@ -1674,7 +1674,7 @@ gfc_free_close (gfc_close * close)
/* Match elements of a CLOSE statement. */
static match
-match_close_element (gfc_close * close)
+match_close_element (gfc_close *close)
{
match m;
@@ -1754,7 +1754,7 @@ gfc_match_close (void)
/* Checks on the STATUS specifier. */
if (close->status && close->status->expr_type == EXPR_CONSTANT)
{
- static const char * status[] = { "KEEP", "DELETE", NULL };
+ static const char *status[] = { "KEEP", "DELETE", NULL };
if (!compare_to_allowed_values ("STATUS", status, NULL, NULL,
close->status->value.character.string,
@@ -1778,9 +1778,8 @@ cleanup:
/* Resolve everything in a gfc_close structure. */
try
-gfc_resolve_close (gfc_close * close)
+gfc_resolve_close (gfc_close *close)
{
-
RESOLVE_TAG (&tag_unit, close->unit);
RESOLVE_TAG (&tag_iomsg, close->iomsg);
RESOLVE_TAG (&tag_iostat, close->iostat);
@@ -1796,9 +1795,8 @@ gfc_resolve_close (gfc_close * close)
/* Free a gfc_filepos structure. */
void
-gfc_free_filepos (gfc_filepos * fp)
+gfc_free_filepos (gfc_filepos *fp)
{
-
gfc_free_expr (fp->unit);
gfc_free_expr (fp->iomsg);
gfc_free_expr (fp->iostat);
@@ -1809,7 +1807,7 @@ gfc_free_filepos (gfc_filepos * fp)
/* Match elements of a REWIND, BACKSPACE, ENDFILE, or FLUSH statement. */
static match
-match_file_element (gfc_filepos * fp)
+match_file_element (gfc_filepos *fp)
{
match m;
@@ -1904,9 +1902,8 @@ cleanup:
try
-gfc_resolve_filepos (gfc_filepos * fp)
+gfc_resolve_filepos (gfc_filepos *fp)
{
-
RESOLVE_TAG (&tag_unit, fp->unit);
RESOLVE_TAG (&tag_iostat, fp->iostat);
RESOLVE_TAG (&tag_iomsg, fp->iomsg);
@@ -1923,28 +1920,26 @@ gfc_resolve_filepos (gfc_filepos * fp)
match
gfc_match_endfile (void)
{
-
return match_filepos (ST_END_FILE, EXEC_ENDFILE);
}
match
gfc_match_backspace (void)
{
-
return match_filepos (ST_BACKSPACE, EXEC_BACKSPACE);
}
match
gfc_match_rewind (void)
{
-
return match_filepos (ST_REWIND, EXEC_REWIND);
}
match
gfc_match_flush (void)
{
- if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: FLUSH statement at %C") == FAILURE)
+ if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: FLUSH statement at %C")
+ == FAILURE)
return MATCH_ERROR;
return match_filepos (ST_FLUSH, EXEC_FLUSH);
@@ -1976,7 +1971,7 @@ default_unit (io_kind k)
/* Match a unit specification for a data transfer statement. */
static match
-match_dt_unit (io_kind k, gfc_dt * dt)
+match_dt_unit (io_kind k, gfc_dt *dt)
{
gfc_expr *e;
@@ -2012,7 +2007,7 @@ conflict:
/* Match a format specification. */
static match
-match_dt_format (gfc_dt * dt)
+match_dt_format (gfc_dt *dt)
{
locus where;
gfc_expr *e;
@@ -2070,7 +2065,7 @@ conflict:
nonzero if we find such a variable. */
static int
-check_namelist (gfc_symbol * sym)
+check_namelist (gfc_symbol *sym)
{
gfc_namelist *p;
@@ -2089,7 +2084,7 @@ check_namelist (gfc_symbol * sym)
/* Match a single data transfer element. */
static match
-match_dt_element (io_kind k, gfc_dt * dt)
+match_dt_element (io_kind k, gfc_dt *dt)
{
char name[GFC_MAX_SYMBOL_LEN + 1];
gfc_symbol *sym;
@@ -2163,8 +2158,8 @@ match_dt_element (io_kind k, gfc_dt * dt)
{
if (k == M_WRITE)
{
- gfc_error ("END tag at %C not allowed in output statement");
- return MATCH_ERROR;
+ gfc_error ("END tag at %C not allowed in output statement");
+ return MATCH_ERROR;
}
dt->end_where = gfc_current_locus;
}
@@ -2184,9 +2179,8 @@ match_dt_element (io_kind k, gfc_dt * dt)
/* Free a data transfer structure and everything below it. */
void
-gfc_free_dt (gfc_dt * dt)
+gfc_free_dt (gfc_dt *dt)
{
-
if (dt == NULL)
return;
@@ -2197,7 +2191,6 @@ gfc_free_dt (gfc_dt * dt)
gfc_free_expr (dt->iomsg);
gfc_free_expr (dt->iostat);
gfc_free_expr (dt->size);
-
gfc_free (dt);
}
@@ -2205,7 +2198,7 @@ gfc_free_dt (gfc_dt * dt)
/* Resolve everything in a gfc_dt structure. */
try
-gfc_resolve_dt (gfc_dt * dt)
+gfc_resolve_dt (gfc_dt *dt)
{
gfc_expr *e;
@@ -2220,12 +2213,10 @@ gfc_resolve_dt (gfc_dt * dt)
e = dt->io_unit;
if (gfc_resolve_expr (e) == SUCCESS
&& (e->ts.type != BT_INTEGER
- && (e->ts.type != BT_CHARACTER
- || e->expr_type != EXPR_VARIABLE)))
+ && (e->ts.type != BT_CHARACTER || e->expr_type != EXPR_VARIABLE)))
{
- gfc_error
- ("UNIT specification at %L must be an INTEGER expression or a "
- "CHARACTER variable", &e->where);
+ gfc_error ("UNIT specification at %L must be an INTEGER expression "
+ "or a CHARACTER variable", &e->where);
return FAILURE;
}
@@ -2233,8 +2224,7 @@ gfc_resolve_dt (gfc_dt * dt)
{
if (gfc_has_vector_index (e))
{
- gfc_error ("Internal unit with vector subscript at %L",
- &e->where);
+ gfc_error ("Internal unit with vector subscript at %L", &e->where);
return FAILURE;
}
}
@@ -2286,7 +2276,7 @@ gfc_resolve_dt (gfc_dt * dt)
&& dt->format_label->defined == ST_LABEL_UNKNOWN)
{
gfc_error ("FORMAT label %d at %L not defined", dt->format_label->value,
- &dt->format_label->where);
+ &dt->format_label->where);
return FAILURE;
}
return SUCCESS;
@@ -2329,10 +2319,10 @@ io_kind_name (io_kind k)
which is equivalent to a single IO element. This function is
mutually recursive with match_io_element(). */
-static match match_io_element (io_kind k, gfc_code **);
+static match match_io_element (io_kind, gfc_code **);
static match
-match_io_iterator (io_kind k, gfc_code ** result)
+match_io_iterator (io_kind k, gfc_code **result)
{
gfc_code *head, *tail, *new;
gfc_iterator *iter;
@@ -2421,7 +2411,7 @@ cleanup:
expression or an IO Iterator. */
static match
-match_io_element (io_kind k, gfc_code ** cpp)
+match_io_element (io_kind k, gfc_code **cpp)
{
gfc_expr *expr;
gfc_code *cp;
@@ -2453,9 +2443,8 @@ match_io_element (io_kind k, gfc_code ** cpp)
case M_READ:
if (expr->symtree->n.sym->attr.intent == INTENT_IN)
{
- gfc_error
- ("Variable '%s' in input list at %C cannot be INTENT(IN)",
- expr->symtree->n.sym->name);
+ gfc_error ("Variable '%s' in input list at %C cannot be "
+ "INTENT(IN)", expr->symtree->n.sym->name);
m = MATCH_ERROR;
}
@@ -2479,9 +2468,9 @@ match_io_element (io_kind k, gfc_code ** cpp)
&& current_dt->io_unit->expr_type == EXPR_VARIABLE
&& gfc_impure_variable (current_dt->io_unit->symtree->n.sym))
{
- gfc_error
- ("Cannot write to internal file unit '%s' at %C inside a "
- "PURE procedure", current_dt->io_unit->symtree->n.sym->name);
+ gfc_error ("Cannot write to internal file unit '%s' at %C "
+ "inside a PURE procedure",
+ current_dt->io_unit->symtree->n.sym->name);
m = MATCH_ERROR;
}
@@ -2509,7 +2498,7 @@ match_io_element (io_kind k, gfc_code ** cpp)
/* Match an I/O list, building gfc_code structures as we go. */
static match
-match_io_list (io_kind k, gfc_code ** head_p)
+match_io_list (io_kind k, gfc_code **head_p)
{
gfc_code *head, *tail, *new;
match m;
@@ -2551,7 +2540,7 @@ cleanup:
/* Attach the data transfer end node. */
static void
-terminate_io (gfc_code * io_code)
+terminate_io (gfc_code *io_code)
{
gfc_code *c;
@@ -2572,7 +2561,8 @@ terminate_io (gfc_code * io_code)
in resolve_tag and others in gfc_resolve_dt. */
static match
-check_io_constraints (io_kind k, gfc_dt *dt, gfc_code * io_code, locus * spec_end)
+check_io_constraints (io_kind k, gfc_dt *dt, gfc_code *io_code,
+ locus *spec_end)
{
#define io_constraint(condition,msg,arg)\
if (condition) \
@@ -2582,14 +2572,14 @@ if (condition) \
}
match m;
- gfc_expr * expr;
- gfc_symbol * sym = NULL;
+ gfc_expr *expr;
+ gfc_symbol *sym = NULL;
m = MATCH_YES;
expr = dt->io_unit;
if (expr && expr->expr_type == EXPR_VARIABLE
- && expr->ts.type == BT_CHARACTER)
+ && expr->ts.type == BT_CHARACTER)
{
sym = expr->symtree->n.sym;
@@ -2606,12 +2596,12 @@ if (condition) \
&dt->rec->where);
if (dt->namelist != NULL)
- {
- if (gfc_notify_std(GFC_STD_F2003,
- "Fortran 2003: Internal file at %L with namelist",
- &expr->where) == FAILURE)
- m = MATCH_ERROR;
- }
+ {
+ if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Internal file "
+ "at %L with namelist", &expr->where)
+ == FAILURE)
+ m = MATCH_ERROR;
+ }
io_constraint (dt->advance != NULL,
"ADVANCE tag at %L is incompatible with internal file",
@@ -2621,8 +2611,7 @@ if (condition) \
if (expr && expr->ts.type != BT_CHARACTER)
{
- io_constraint (gfc_pure (NULL)
- && (k == M_READ || k == M_WRITE),
+ io_constraint (gfc_pure (NULL) && (k == M_READ || k == M_WRITE),
"IO UNIT in %s statement at %C must be "
"an internal file in a PURE procedure",
io_kind_name (k));
@@ -2631,12 +2620,10 @@ if (condition) \
if (k != M_READ)
{
- io_constraint (dt->end,
- "END tag not allowed with output at %L",
+ io_constraint (dt->end, "END tag not allowed with output at %L",
&dt->end_where);
- io_constraint (dt->eor,
- "EOR tag not allowed with output at %L",
+ io_constraint (dt->eor, "EOR tag not allowed with output at %L",
&dt->eor_where);
io_constraint (k != M_READ && dt->size,
@@ -2701,9 +2688,8 @@ if (condition) \
"List directed format(*) is not allowed with a "
"ADVANCE=specifier at %L.", &expr->where);
- io_constraint (dt->format_expr == NULL
- && dt->format_label == NULL
- && dt->namelist == NULL,
+ io_constraint (dt->format_expr == NULL && dt->format_label == NULL
+ && dt->namelist == NULL,
"the ADVANCE=specifier at %L must appear with an "
"explicit format expression", &expr->where);
@@ -2740,6 +2726,7 @@ if (condition) \
}
#undef io_constraint
+
/* Match a READ, WRITE or PRINT statement. */
static match
@@ -2812,7 +2799,6 @@ match_io (io_kind k)
{
/* Before issuing an error for a malformed 'print (1,*)' type of
error, check for a default-char-expr of the form ('(I0)'). */
-
if (k == M_PRINT && m == MATCH_YES)
{
/* Reset current locus to get the initial '(' in an expression. */
@@ -2988,7 +2974,7 @@ gfc_match_print (void)
/* Free a gfc_inquire structure. */
void
-gfc_free_inquire (gfc_inquire * inquire)
+gfc_free_inquire (gfc_inquire *inquire)
{
if (inquire == NULL)
@@ -3022,7 +3008,6 @@ gfc_free_inquire (gfc_inquire * inquire)
gfc_free_expr (inquire->iolength);
gfc_free_expr (inquire->convert);
gfc_free_expr (inquire->strm_pos);
-
gfc_free (inquire);
}
@@ -3032,7 +3017,7 @@ gfc_free_inquire (gfc_inquire * inquire)
#define RETM if (m != MATCH_NO) return m;
static match
-match_inquire_element (gfc_inquire * inquire)
+match_inquire_element (gfc_inquire *inquire)
{
match m;
@@ -3155,15 +3140,15 @@ gfc_match_inquire (void)
if (inquire->unit != NULL && inquire->file != NULL)
{
- gfc_error ("INQUIRE statement at %L cannot contain both FILE and"
- " UNIT specifiers", &loc);
+ gfc_error ("INQUIRE statement at %L cannot contain both FILE and "
+ "UNIT specifiers", &loc);
goto cleanup;
}
if (inquire->unit == NULL && inquire->file == NULL)
{
- gfc_error ("INQUIRE statement at %L requires either FILE or"
- " UNIT specifier", &loc);
+ gfc_error ("INQUIRE statement at %L requires either FILE or "
+ "UNIT specifier", &loc);
goto cleanup;
}
@@ -3189,9 +3174,8 @@ cleanup:
/* Resolve everything in a gfc_inquire structure. */
try
-gfc_resolve_inquire (gfc_inquire * inquire)
+gfc_resolve_inquire (gfc_inquire *inquire)
{
-
RESOLVE_TAG (&tag_unit, inquire->unit);
RESOLVE_TAG (&tag_file, inquire->file);
RESOLVE_TAG (&tag_iomsg, inquire->iomsg);