aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/parse.c
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2007-01-20 22:01:41 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2007-01-20 22:01:41 +0000
commitedf1eac29ebf11051dfcba996ac4fb3064e3c95c (patch)
treea5e1dd4c7002a6118aa4d0e313e2d22c3b3aa8ad /gcc/fortran/parse.c
parent70fadd09be30c98ab6fccf3a97eede5f5c253c1e (diff)
downloadgcc-edf1eac29ebf11051dfcba996ac4fb3064e3c95c.zip
gcc-edf1eac29ebf11051dfcba996ac4fb3064e3c95c.tar.gz
gcc-edf1eac29ebf11051dfcba996ac4fb3064e3c95c.tar.bz2
openmp.c, [...]: Next installment in the massive whitespace patch.
* openmp.c, matchexp.c, module.c, scanner.c, resolve.c, st.c, parse.c, primary.c, options.c, misc.c, simplify.c: Next installment in the massive whitespace patch. From-SVN: r121012
Diffstat (limited to 'gcc/fortran/parse.c')
-rw-r--r--gcc/fortran/parse.c309
1 files changed, 146 insertions, 163 deletions
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c
index cbbf734..eb7802e 100644
--- a/gcc/fortran/parse.c
+++ b/gcc/fortran/parse.c
@@ -1,6 +1,6 @@
/* Main parser.
- 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.
@@ -20,7 +20,6 @@ along with GCC; see the file COPYING. If not, write to the Free
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA. */
-
#include "config.h"
#include "system.h"
#include <setjmp.h>
@@ -28,9 +27,8 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#include "match.h"
#include "parse.h"
-/* Current statement label. Zero means no statement label. Because
- new_st can get wiped during statement matching, we have to keep it
- separate. */
+/* Current statement label. Zero means no statement label. Because new_st
+ can get wiped during statement matching, we have to keep it separate. */
gfc_st_label *gfc_statement_label;
@@ -51,7 +49,7 @@ static void reject_statement (void);
gfc_match_eos(). */
static match
-match_word (const char *str, match (*subr) (void), locus * old_locus)
+match_word (const char *str, match (*subr) (void), locus *old_locus)
{
match m;
@@ -79,11 +77,11 @@ match_word (const char *str, match (*subr) (void), locus * old_locus)
ambiguity. */
#define match(keyword, subr, st) \
- do { \
+ do { \
if (match_word(keyword, subr, &old_locus) == MATCH_YES) \
- return st; \
+ return st; \
else \
- undo_new_statement (); \
+ undo_new_statement (); \
} while (0);
static gfc_statement
@@ -322,7 +320,8 @@ decode_omp_directive (void)
if (gfc_pure (NULL))
{
- gfc_error_now ("OpenMP directives at %C may not appear in PURE or ELEMENTAL procedures");
+ gfc_error_now ("OpenMP directives at %C may not appear in PURE "
+ "or ELEMENTAL procedures");
gfc_error_recovery ();
return ST_NONE;
}
@@ -434,7 +433,7 @@ next_free (void)
{
gfc_match_small_literal_int (&c, &cnt);
- if (cnt > 5)
+ if (cnt > 5)
gfc_error_now ("Too many digits in statement label at %C");
if (c == 0)
@@ -457,16 +456,16 @@ next_free (void)
if (at_bol && gfc_peek_char () == ';')
{
- gfc_error_now
- ("Semicolon at %C needs to be preceded by statement");
+ gfc_error_now ("Semicolon at %C needs to be preceded by "
+ "statement");
gfc_next_char (); /* Eat up the semicolon. */
return ST_NONE;
}
if (gfc_match_eos () == MATCH_YES)
{
- gfc_warning_now
- ("Ignoring statement label in empty statement at %C");
+ gfc_warning_now ("Ignoring statement label in empty statement "
+ "at %C");
gfc_free_st_label (gfc_statement_label);
gfc_statement_label = NULL;
return ST_NONE;
@@ -669,8 +668,7 @@ next_statement (void)
break;
}
- st =
- (gfc_current_form == FORM_FIXED) ? next_fixed () : next_free ();
+ st = (gfc_current_form == FORM_FIXED) ? next_fixed () : next_free ();
if (st != ST_NONE)
break;
@@ -723,21 +721,19 @@ next_statement (void)
are detected in gfc_match_end(). */
#define case_end case ST_END_BLOCK_DATA: case ST_END_FUNCTION: \
- case ST_END_PROGRAM: case ST_END_SUBROUTINE
+ case ST_END_PROGRAM: case ST_END_SUBROUTINE
/* Push a new state onto the stack. */
static void
-push_state (gfc_state_data * p, gfc_compile_state new_state, gfc_symbol * sym)
+push_state (gfc_state_data *p, gfc_compile_state new_state, gfc_symbol *sym)
{
-
p->state = new_state;
p->previous = gfc_state_stack;
p->sym = sym;
p->head = p->tail = NULL;
p->do_variable = NULL;
-
gfc_state_stack = p;
}
@@ -747,7 +743,6 @@ push_state (gfc_state_data * p, gfc_compile_state new_state, gfc_symbol * sym)
static void
pop_state (void)
{
-
gfc_state_stack = gfc_state_stack->previous;
}
@@ -770,7 +765,7 @@ gfc_find_state (gfc_compile_state state)
/* Starts a new level in the statement list. */
static gfc_code *
-new_level (gfc_code * q)
+new_level (gfc_code *q)
{
gfc_code *p;
@@ -857,8 +852,8 @@ check_statement_label (gfc_statement st)
break;
/* Statement labels are not restricted from appearing on a
- particular line. However, there are plenty of situations
- where the resulting label can't be referenced. */
+ particular line. However, there are plenty of situations
+ where the resulting label can't be referenced. */
default:
type = ST_LABEL_BAD_TARGET;
@@ -1230,7 +1225,7 @@ gfc_ascii_statement (gfc_statement st)
/* Create a symbol for the main program and assign it to ns->proc_name. */
static void
-main_program_symbol (gfc_namespace * ns)
+main_program_symbol (gfc_namespace *ns)
{
gfc_symbol *main_program;
symbol_attribute attr;
@@ -1254,7 +1249,6 @@ main_program_symbol (gfc_namespace * ns)
static void
accept_statement (gfc_statement st)
{
-
switch (st)
{
case ST_USE:
@@ -1275,8 +1269,8 @@ accept_statement (gfc_statement st)
break;
/* If the statement is the end of a block, lay down a special code
- that allows a branch to the end of the block from within the
- construct. */
+ that allows a branch to the end of the block from within the
+ construct. */
case ST_ENDIF:
case ST_END_SELECT:
@@ -1289,8 +1283,8 @@ accept_statement (gfc_statement st)
break;
/* The end-of-program unit statements do not get the special
- marker and require a statement of some sort if they are a
- branch target. */
+ marker and require a statement of some sort if they are a
+ branch target. */
case ST_END_PROGRAM:
case ST_END_FUNCTION:
@@ -1338,7 +1332,6 @@ reject_statement (void)
static void
unexpected_statement (gfc_statement st)
{
-
gfc_error ("Unexpected %s statement at %C", gfc_ascii_statement (st));
reject_statement ();
@@ -1354,30 +1347,30 @@ unexpected_statement (gfc_statement st)
valid before calling here, ie ENTRY statements are not allowed in
INTERFACE blocks. The following diagram is taken from the standard:
- +---------------------------------------+
- | program subroutine function module |
- +---------------------------------------+
- | use |
- +---------------------------------------+
- | import |
- +---------------------------------------+
- | | implicit none |
- | +-----------+------------------+
- | | parameter | implicit |
- | +-----------+------------------+
- | format | | derived type |
- | entry | parameter | interface |
- | | data | specification |
- | | | statement func |
- | +-----------+------------------+
- | | data | executable |
- +--------+-----------+------------------+
- | contains |
- +---------------------------------------+
- | internal module/subprogram |
- +---------------------------------------+
- | end |
- +---------------------------------------+
+ +---------------------------------------+
+ | program subroutine function module |
+ +---------------------------------------+
+ | use |
+ +---------------------------------------+
+ | import |
+ +---------------------------------------+
+ | | implicit none |
+ | +-----------+------------------+
+ | | parameter | implicit |
+ | +-----------+------------------+
+ | format | | derived type |
+ | entry | parameter | interface |
+ | | data | specification |
+ | | | statement func |
+ | +-----------+------------------+
+ | | data | executable |
+ +--------+-----------+------------------+
+ | contains |
+ +---------------------------------------+
+ | internal module/subprogram |
+ +---------------------------------------+
+ | end |
+ +---------------------------------------+
*/
@@ -1394,7 +1387,7 @@ typedef struct
st_state;
static try
-verify_st_order (st_state * p, gfc_statement st)
+verify_st_order (st_state *p, gfc_statement st)
{
switch (st)
@@ -1419,10 +1412,10 @@ verify_st_order (st_state * p, gfc_statement st)
if (p->state > ORDER_IMPLICIT_NONE)
goto order;
- /* The '>' sign cannot be a '>=', because a FORMAT or ENTRY
- statement disqualifies a USE but not an IMPLICIT NONE.
- Duplicate IMPLICIT NONEs are caught when the implicit types
- are set. */
+ /* The '>' sign cannot be a '>=', because a FORMAT or ENTRY
+ statement disqualifies a USE but not an IMPLICIT NONE.
+ Duplicate IMPLICIT NONEs are caught when the implicit types
+ are set. */
p->state = ORDER_IMPLICIT_NONE;
break;
@@ -1468,9 +1461,8 @@ verify_st_order (st_state * p, gfc_statement st)
break;
default:
- gfc_internal_error
- ("Unexpected %s statement in verify_st_order() at %C",
- gfc_ascii_statement (st));
+ gfc_internal_error ("Unexpected %s statement in verify_st_order() at %C",
+ gfc_ascii_statement (st));
}
/* All is well, record the statement in case we need it next time. */
@@ -1560,8 +1552,8 @@ parse_derived (void)
case ST_PRIVATE:
if (gfc_find_state (COMP_MODULE) == FAILURE)
{
- gfc_error
- ("PRIVATE statement in TYPE at %C must be inside a MODULE");
+ gfc_error ("PRIVATE statement in TYPE at %C must be inside "
+ "a MODULE");
error_flag = 1;
break;
}
@@ -1619,8 +1611,8 @@ parse_derived (void)
sym = gfc_current_block ();
for (c = sym->components; c; c = c->next)
{
- if (c->allocatable || (c->ts.type == BT_DERIVED
- && c->ts.derived->attr.alloc_comp))
+ if (c->allocatable
+ || (c->ts.type == BT_DERIVED && c->ts.derived->attr.alloc_comp))
{
sym->attr.alloc_comp = 1;
break;
@@ -1631,7 +1623,6 @@ parse_derived (void)
}
-
/* Parse an ENUM. */
static void
@@ -1653,35 +1644,36 @@ parse_enum (void)
{
st = next_statement ();
switch (st)
- {
- case ST_NONE:
- unexpected_eof ();
- break;
+ {
+ case ST_NONE:
+ unexpected_eof ();
+ break;
- case ST_ENUMERATOR:
+ case ST_ENUMERATOR:
seen_enumerator = 1;
- accept_statement (st);
- break;
+ accept_statement (st);
+ break;
- case ST_END_ENUM:
- compiling_enum = 0;
+ case ST_END_ENUM:
+ compiling_enum = 0;
if (!seen_enumerator)
- {
- gfc_error ("ENUM declaration at %C has no ENUMERATORS");
+ {
+ gfc_error ("ENUM declaration at %C has no ENUMERATORS");
error_flag = 1;
- }
- accept_statement (st);
- break;
-
- default:
- gfc_free_enum_history ();
- unexpected_statement (st);
- break;
- }
+ }
+ accept_statement (st);
+ break;
+
+ default:
+ gfc_free_enum_history ();
+ unexpected_statement (st);
+ break;
+ }
}
pop_state ();
}
+
/* Parse an interface. We must be able to deal with the possibility
of recursive interfaces. The parse_spec() subroutine is mutually
recursive with parse_interface(). */
@@ -1704,7 +1696,8 @@ parse_interface (void)
save = current_interface;
sym = (current_interface.type == INTERFACE_GENERIC
- || current_interface.type == INTERFACE_USER_OP) ? gfc_new_block : NULL;
+ || current_interface.type == INTERFACE_USER_OP)
+ ? gfc_new_block : NULL;
push_state (&s1, COMP_INTERFACE, sym);
current_state = COMP_NONE;
@@ -1768,14 +1761,12 @@ loop:
if (new_state != current_state)
{
if (new_state == COMP_SUBROUTINE)
- gfc_error
- ("SUBROUTINE at %C does not belong in a generic function "
- "interface");
+ gfc_error ("SUBROUTINE at %C does not belong in a "
+ "generic function interface");
if (new_state == COMP_FUNCTION)
- gfc_error
- ("FUNCTION at %C does not belong in a generic subroutine "
- "interface");
+ gfc_error ("FUNCTION at %C does not belong in a "
+ "generic subroutine interface");
}
}
}
@@ -1945,7 +1936,7 @@ parse_where_block (void)
case ST_WHERE_BLOCK:
parse_where_block ();
- break;
+ break;
case ST_ASSIGNMENT:
case ST_WHERE:
@@ -1955,9 +1946,8 @@ parse_where_block (void)
case ST_ELSEWHERE:
if (seen_empty_else)
{
- gfc_error
- ("ELSEWHERE statement at %C follows previous unmasked "
- "ELSEWHERE");
+ gfc_error ("ELSEWHERE statement at %C follows previous "
+ "unmasked ELSEWHERE");
break;
}
@@ -1982,7 +1972,6 @@ parse_where_block (void)
reject_statement ();
break;
}
-
}
while (st != ST_END_WHERE);
@@ -2088,9 +2077,8 @@ parse_if_block (void)
case ST_ELSEIF:
if (seen_else)
{
- gfc_error
- ("ELSE IF statement at %C cannot follow ELSE statement at %L",
- &else_locus);
+ gfc_error ("ELSE IF statement at %C cannot follow ELSE "
+ "statement at %L", &else_locus);
reject_statement ();
break;
@@ -2168,9 +2156,8 @@ parse_select_block (void)
if (st == ST_CASE)
break;
- gfc_error
- ("Expected a CASE or END SELECT statement following SELECT CASE "
- "at %C");
+ gfc_error ("Expected a CASE or END SELECT statement following SELECT "
+ "CASE at %C");
reject_statement ();
}
@@ -2200,8 +2187,8 @@ parse_select_block (void)
case ST_END_SELECT:
break;
- /* Can't have an executable statement because of
- parse_executable(). */
+ /* Can't have an executable statement because of
+ parse_executable(). */
default:
unexpected_statement (st);
break;
@@ -2261,8 +2248,7 @@ check_do_closure (void)
if (p == gfc_state_stack)
return 1;
- gfc_error
- ("End of nonblock DO statement at %C is within another block");
+ gfc_error ("End of nonblock DO statement at %C is within another block");
return 2;
}
@@ -2320,8 +2306,8 @@ loop:
case ST_ENDDO:
if (s.ext.end_do_label != NULL
&& s.ext.end_do_label != gfc_statement_label)
- gfc_error_now
- ("Statement label in ENDDO at %C doesn't match DO label");
+ gfc_error_now ("Statement label in ENDDO at %C doesn't match "
+ "DO label");
if (gfc_statement_label != NULL)
{
@@ -2336,9 +2322,8 @@ loop:
name, but in that case we must have seen ST_ENDDO first).
We only complain about this in pedantic mode. */
if (gfc_current_block () != NULL)
- gfc_error_now
- ("named block DO at %L requires matching ENDDO name",
- &gfc_current_block()->declared_at);
+ gfc_error_now ("named block DO at %L requires matching ENDDO name",
+ &gfc_current_block()->declared_at);
break;
@@ -2387,12 +2372,12 @@ parse_omp_do (gfc_statement omp_st)
&& gfc_state_stack->previous->ext.end_do_label == gfc_statement_label)
{
/* In
- DO 100 I=1,10
- !$OMP DO
- DO J=1,10
- ...
- 100 CONTINUE
- there should be no !$OMP END DO. */
+ DO 100 I=1,10
+ !$OMP DO
+ DO J=1,10
+ ...
+ 100 CONTINUE
+ there should be no !$OMP END DO. */
pop_state ();
return ST_IMPLIED_ENDDO;
}
@@ -2593,8 +2578,8 @@ parse_omp_structured_block (gfc_statement omp_st, bool workshare_stmts_only)
if (((cp->ext.omp_name == NULL) ^ (new_st.ext.omp_name == NULL))
|| (new_st.ext.omp_name != NULL
&& strcmp (cp->ext.omp_name, new_st.ext.omp_name) != 0))
- gfc_error ("Name after !$omp critical and !$omp end critical does"
- " not match at %C");
+ gfc_error ("Name after !$omp critical and !$omp end critical does "
+ "not match at %C");
gfc_free ((char *) new_st.ext.omp_name);
break;
case EXEC_OMP_END_SINGLE:
@@ -2649,9 +2634,8 @@ parse_executable (gfc_statement st)
case ST_FORALL:
case ST_WHERE:
case ST_SELECT_CASE:
- gfc_error
- ("%s statement at %C cannot terminate a non-block DO loop",
- gfc_ascii_statement (st));
+ gfc_error ("%s statement at %C cannot terminate a non-block "
+ "DO loop", gfc_ascii_statement (st));
break;
default:
@@ -2738,7 +2722,7 @@ static void parse_progunit (gfc_statement);
the child namespace as the parser didn't know about this procedure. */
static void
-gfc_fixup_sibling_symbols (gfc_symbol * sym, gfc_namespace * siblings)
+gfc_fixup_sibling_symbols (gfc_symbol *sym, gfc_namespace *siblings)
{
gfc_namespace *ns;
gfc_symtree *st;
@@ -2756,17 +2740,17 @@ gfc_fixup_sibling_symbols (gfc_symbol * sym, gfc_namespace * siblings)
if ((old_sym->attr.flavor == FL_PROCEDURE
|| old_sym->ts.type == BT_UNKNOWN)
&& old_sym->ns == ns
- && ! old_sym->attr.contained)
- {
- /* Replace it with the symbol from the parent namespace. */
- st->n.sym = sym;
- sym->refs++;
-
- /* Free the old (local) symbol. */
- old_sym->refs--;
- if (old_sym->refs == 0)
- gfc_free_symbol (old_sym);
- }
+ && !old_sym->attr.contained)
+ {
+ /* Replace it with the symbol from the parent namespace. */
+ st->n.sym = sym;
+ sym->refs++;
+
+ /* Free the old (local) symbol. */
+ old_sym->refs--;
+ if (old_sym->refs == 0)
+ gfc_free_symbol (old_sym);
+ }
/* Do the same for any contained procedures. */
gfc_fixup_sibling_symbols (sym, ns->contained);
@@ -2815,9 +2799,8 @@ parse_contained (int module)
if (!module)
{
if (gfc_get_symbol (gfc_new_block->name, parent_ns, &sym))
- gfc_error
- ("Contained procedure '%s' at %C is already ambiguous",
- gfc_new_block->name);
+ gfc_error ("Contained procedure '%s' at %C is already "
+ "ambiguous", gfc_new_block->name);
else
{
if (gfc_add_procedure (&sym->attr, PROC_INTERNAL, sym->name,
@@ -2835,18 +2818,18 @@ parse_contained (int module)
gfc_commit_symbols ();
}
- else
- sym = gfc_new_block;
+ else
+ sym = gfc_new_block;
- /* Mark this as a contained function, so it isn't replaced
- by other module functions. */
- sym->attr.contained = 1;
+ /* Mark this as a contained function, so it isn't replaced
+ by other module functions. */
+ sym->attr.contained = 1;
sym->attr.referenced = 1;
parse_progunit (ST_NONE);
- /* Fix up any sibling functions that refer to this one. */
- gfc_fixup_sibling_symbols (sym, gfc_current_ns);
+ /* Fix up any sibling functions that refer to this one. */
+ gfc_fixup_sibling_symbols (sym, gfc_current_ns);
/* Or refer to any of its alternate entry points. */
for (el = gfc_current_ns->entries; el; el = el->next)
gfc_fixup_sibling_symbols (el->sym, gfc_current_ns);
@@ -2857,8 +2840,7 @@ parse_contained (int module)
pop_state ();
break;
- /* These statements are associated with the end of the host
- unit. */
+ /* These statements are associated with the end of the host unit. */
case ST_END_FUNCTION:
case ST_END_MODULE:
case ST_END_PROGRAM:
@@ -2888,9 +2870,8 @@ parse_contained (int module)
pop_state ();
if (!contains_statements)
/* This is valid in Fortran 2008. */
- gfc_notify_std (GFC_STD_GNU, "Extension: "
- "CONTAINS statement without FUNCTION "
- "or SUBROUTINE statement at %C");
+ gfc_notify_std (GFC_STD_GNU, "Extension: CONTAINS statement without "
+ "FUNCTION or SUBROUTINE statement at %C");
}
@@ -3028,22 +3009,23 @@ parse_block_data (void)
{
if (blank_block)
gfc_error ("Blank BLOCK DATA at %C conflicts with "
- "prior BLOCK DATA at %L", &blank_locus);
+ "prior BLOCK DATA at %L", &blank_locus);
else
{
- blank_block = 1;
- blank_locus = gfc_current_locus;
+ blank_block = 1;
+ blank_locus = gfc_current_locus;
}
}
else
{
s = gfc_get_gsymbol (gfc_new_block->name);
- if (s->defined || (s->type != GSYM_UNKNOWN && s->type != GSYM_BLOCK_DATA))
+ if (s->defined
+ || (s->type != GSYM_UNKNOWN && s->type != GSYM_BLOCK_DATA))
global_used(s, NULL);
else
{
- s->type = GSYM_BLOCK_DATA;
- s->where = gfc_current_locus;
+ s->type = GSYM_BLOCK_DATA;
+ s->where = gfc_current_locus;
s->defined = 1;
}
}
@@ -3115,7 +3097,8 @@ add_global_procedure (int sub)
s = gfc_get_gsymbol(gfc_new_block->name);
if (s->defined
- || (s->type != GSYM_UNKNOWN && s->type != (sub ? GSYM_SUBROUTINE : GSYM_FUNCTION)))
+ || (s->type != GSYM_UNKNOWN
+ && s->type != (sub ? GSYM_SUBROUTINE : GSYM_FUNCTION)))
global_used(s, NULL);
else
{
@@ -3237,7 +3220,7 @@ loop:
prog_locus = gfc_current_locus;
push_state (&s, COMP_PROGRAM, gfc_new_block);
- main_program_symbol(gfc_current_ns);
+ main_program_symbol (gfc_current_ns);
parse_progunit (st);
break;
}