2 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
3 Free Software Foundation, Inc.
4 Contributed by Andy Vaught
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
29 /* Current statement label. Zero means no statement label. Because new_st
30 can get wiped during statement matching, we have to keep it separate. */
32 gfc_st_label *gfc_statement_label;
34 static locus label_locus;
35 static jmp_buf eof_buf;
37 gfc_state_data *gfc_state_stack;
39 /* TODO: Re-order functions to kill these forward decls. */
40 static void check_statement_label (gfc_statement);
41 static void undo_new_statement (void);
42 static void reject_statement (void);
45 /* A sort of half-matching function. We try to match the word on the
46 input with the passed string. If this succeeds, we call the
47 keyword-dependent matching function that will match the rest of the
48 statement. For single keywords, the matching subroutine is
52 match_word (const char *str, match (*subr) (void), locus *old_locus)
67 gfc_current_locus = *old_locus;
75 /* Figure out what the next statement is, (mostly) regardless of
76 proper ordering. The do...while(0) is there to prevent if/else
79 #define match(keyword, subr, st) \
81 if (match_word(keyword, subr, &old_locus) == MATCH_YES) \
84 undo_new_statement (); \
88 decode_statement (void)
99 gfc_clear_error (); /* Clear any pending errors. */
100 gfc_clear_warning (); /* Clear any pending warnings. */
102 if (gfc_match_eos () == MATCH_YES)
105 old_locus = gfc_current_locus;
107 /* Try matching a data declaration or function declaration. The
108 input "REALFUNCTIONA(N)" can mean several things in different
109 contexts, so it (and its relatives) get special treatment. */
111 if (gfc_current_state () == COMP_NONE
112 || gfc_current_state () == COMP_INTERFACE
113 || gfc_current_state () == COMP_CONTAINS)
115 m = gfc_match_function_decl ();
118 else if (m == MATCH_ERROR)
122 gfc_current_locus = old_locus;
125 /* Match statements whose error messages are meant to be overwritten
126 by something better. */
128 match (NULL, gfc_match_assignment, ST_ASSIGNMENT);
129 match (NULL, gfc_match_pointer_assignment, ST_POINTER_ASSIGNMENT);
130 match (NULL, gfc_match_st_function, ST_STATEMENT_FUNCTION);
132 match (NULL, gfc_match_data_decl, ST_DATA_DECL);
133 match (NULL, gfc_match_enumerator_def, ST_ENUMERATOR);
135 /* Try to match a subroutine statement, which has the same optional
136 prefixes that functions can have. */
138 if (gfc_match_subroutine () == MATCH_YES)
139 return ST_SUBROUTINE;
141 gfc_current_locus = old_locus;
143 /* Check for the IF, DO, SELECT, WHERE and FORALL statements, which
144 might begin with a block label. The match functions for these
145 statements are unusual in that their keyword is not seen before
146 the matcher is called. */
148 if (gfc_match_if (&st) == MATCH_YES)
151 gfc_current_locus = old_locus;
153 if (gfc_match_where (&st) == MATCH_YES)
156 gfc_current_locus = old_locus;
158 if (gfc_match_forall (&st) == MATCH_YES)
161 gfc_current_locus = old_locus;
163 match (NULL, gfc_match_do, ST_DO);
164 match (NULL, gfc_match_select, ST_SELECT_CASE);
166 /* General statement matching: Instead of testing every possible
167 statement, we eliminate most possibilities by peeking at the
170 c = gfc_peek_char ();
175 match ("allocate", gfc_match_allocate, ST_ALLOCATE);
176 match ("allocatable", gfc_match_allocatable, ST_ATTR_DECL);
177 match ("assign", gfc_match_assign, ST_LABEL_ASSIGNMENT);
181 match ("backspace", gfc_match_backspace, ST_BACKSPACE);
182 match ("block data", gfc_match_block_data, ST_BLOCK_DATA);
183 match (NULL, gfc_match_bind_c_stmt, ST_ATTR_DECL);
187 match ("call", gfc_match_call, ST_CALL);
188 match ("close", gfc_match_close, ST_CLOSE);
189 match ("continue", gfc_match_continue, ST_CONTINUE);
190 match ("cycle", gfc_match_cycle, ST_CYCLE);
191 match ("case", gfc_match_case, ST_CASE);
192 match ("common", gfc_match_common, ST_COMMON);
193 match ("contains", gfc_match_eos, ST_CONTAINS);
197 match ("deallocate", gfc_match_deallocate, ST_DEALLOCATE);
198 match ("data", gfc_match_data, ST_DATA);
199 match ("dimension", gfc_match_dimension, ST_ATTR_DECL);
203 match ("end file", gfc_match_endfile, ST_END_FILE);
204 match ("exit", gfc_match_exit, ST_EXIT);
205 match ("else", gfc_match_else, ST_ELSE);
206 match ("else where", gfc_match_elsewhere, ST_ELSEWHERE);
207 match ("else if", gfc_match_elseif, ST_ELSEIF);
208 match ("enum , bind ( c )", gfc_match_enum, ST_ENUM);
210 if (gfc_match_end (&st) == MATCH_YES)
213 match ("entry% ", gfc_match_entry, ST_ENTRY);
214 match ("equivalence", gfc_match_equivalence, ST_EQUIVALENCE);
215 match ("external", gfc_match_external, ST_ATTR_DECL);
219 match ("flush", gfc_match_flush, ST_FLUSH);
220 match ("format", gfc_match_format, ST_FORMAT);
224 match ("go to", gfc_match_goto, ST_GOTO);
228 match ("inquire", gfc_match_inquire, ST_INQUIRE);
229 match ("implicit", gfc_match_implicit, ST_IMPLICIT);
230 match ("implicit% none", gfc_match_implicit_none, ST_IMPLICIT_NONE);
231 match ("import", gfc_match_import, ST_IMPORT);
232 match ("interface", gfc_match_interface, ST_INTERFACE);
233 match ("intent", gfc_match_intent, ST_ATTR_DECL);
234 match ("intrinsic", gfc_match_intrinsic, ST_ATTR_DECL);
238 match ("module% procedure% ", gfc_match_modproc, ST_MODULE_PROC);
239 match ("module", gfc_match_module, ST_MODULE);
243 match ("nullify", gfc_match_nullify, ST_NULLIFY);
244 match ("namelist", gfc_match_namelist, ST_NAMELIST);
248 match ("open", gfc_match_open, ST_OPEN);
249 match ("optional", gfc_match_optional, ST_ATTR_DECL);
253 match ("print", gfc_match_print, ST_WRITE);
254 match ("parameter", gfc_match_parameter, ST_PARAMETER);
255 match ("pause", gfc_match_pause, ST_PAUSE);
256 match ("pointer", gfc_match_pointer, ST_ATTR_DECL);
257 if (gfc_match_private (&st) == MATCH_YES)
259 match ("program", gfc_match_program, ST_PROGRAM);
260 if (gfc_match_public (&st) == MATCH_YES)
262 match ("protected", gfc_match_protected, ST_ATTR_DECL);
266 match ("read", gfc_match_read, ST_READ);
267 match ("return", gfc_match_return, ST_RETURN);
268 match ("rewind", gfc_match_rewind, ST_REWIND);
272 match ("sequence", gfc_match_eos, ST_SEQUENCE);
273 match ("stop", gfc_match_stop, ST_STOP);
274 match ("save", gfc_match_save, ST_ATTR_DECL);
278 match ("target", gfc_match_target, ST_ATTR_DECL);
279 match ("type", gfc_match_derived_decl, ST_DERIVED_DECL);
283 match ("use", gfc_match_use, ST_USE);
287 match ("value", gfc_match_value, ST_ATTR_DECL);
288 match ("volatile", gfc_match_volatile, ST_ATTR_DECL);
292 match ("write", gfc_match_write, ST_WRITE);
296 /* All else has failed, so give up. See if any of the matchers has
297 stored an error message of some sort. */
299 if (gfc_error_check () == 0)
300 gfc_error_now ("Unclassifiable statement at %C");
304 gfc_error_recovery ();
310 decode_omp_directive (void)
319 gfc_clear_error (); /* Clear any pending errors. */
320 gfc_clear_warning (); /* Clear any pending warnings. */
324 gfc_error_now ("OpenMP directives at %C may not appear in PURE "
325 "or ELEMENTAL procedures");
326 gfc_error_recovery ();
330 old_locus = gfc_current_locus;
332 /* General OpenMP directive matching: Instead of testing every possible
333 statement, we eliminate most possibilities by peeking at the
336 c = gfc_peek_char ();
341 match ("atomic", gfc_match_omp_atomic, ST_OMP_ATOMIC);
344 match ("barrier", gfc_match_omp_barrier, ST_OMP_BARRIER);
347 match ("critical", gfc_match_omp_critical, ST_OMP_CRITICAL);
350 match ("do", gfc_match_omp_do, ST_OMP_DO);
353 match ("end critical", gfc_match_omp_critical, ST_OMP_END_CRITICAL);
354 match ("end do", gfc_match_omp_end_nowait, ST_OMP_END_DO);
355 match ("end master", gfc_match_omp_eos, ST_OMP_END_MASTER);
356 match ("end ordered", gfc_match_omp_eos, ST_OMP_END_ORDERED);
357 match ("end parallel do", gfc_match_omp_eos, ST_OMP_END_PARALLEL_DO);
358 match ("end parallel sections", gfc_match_omp_eos,
359 ST_OMP_END_PARALLEL_SECTIONS);
360 match ("end parallel workshare", gfc_match_omp_eos,
361 ST_OMP_END_PARALLEL_WORKSHARE);
362 match ("end parallel", gfc_match_omp_eos, ST_OMP_END_PARALLEL);
363 match ("end sections", gfc_match_omp_end_nowait, ST_OMP_END_SECTIONS);
364 match ("end single", gfc_match_omp_end_single, ST_OMP_END_SINGLE);
365 match ("end workshare", gfc_match_omp_end_nowait,
366 ST_OMP_END_WORKSHARE);
369 match ("flush", gfc_match_omp_flush, ST_OMP_FLUSH);
372 match ("master", gfc_match_omp_master, ST_OMP_MASTER);
375 match ("ordered", gfc_match_omp_ordered, ST_OMP_ORDERED);
378 match ("parallel do", gfc_match_omp_parallel_do, ST_OMP_PARALLEL_DO);
379 match ("parallel sections", gfc_match_omp_parallel_sections,
380 ST_OMP_PARALLEL_SECTIONS);
381 match ("parallel workshare", gfc_match_omp_parallel_workshare,
382 ST_OMP_PARALLEL_WORKSHARE);
383 match ("parallel", gfc_match_omp_parallel, ST_OMP_PARALLEL);
386 match ("sections", gfc_match_omp_sections, ST_OMP_SECTIONS);
387 match ("section", gfc_match_omp_eos, ST_OMP_SECTION);
388 match ("single", gfc_match_omp_single, ST_OMP_SINGLE);
391 match ("threadprivate", gfc_match_omp_threadprivate,
392 ST_OMP_THREADPRIVATE);
394 match ("workshare", gfc_match_omp_workshare, ST_OMP_WORKSHARE);
398 /* All else has failed, so give up. See if any of the matchers has
399 stored an error message of some sort. */
401 if (gfc_error_check () == 0)
402 gfc_error_now ("Unclassifiable OpenMP directive at %C");
406 gfc_error_recovery ();
414 /* Get the next statement in free form source. */
420 int c, d, cnt, at_bol;
422 at_bol = gfc_at_bol ();
423 gfc_gobble_whitespace ();
425 c = gfc_peek_char ();
429 /* Found a statement label? */
430 m = gfc_match_st_label (&gfc_statement_label);
432 d = gfc_peek_char ();
433 if (m != MATCH_YES || !gfc_is_whitespace (d))
435 gfc_match_small_literal_int (&c, &cnt);
438 gfc_error_now ("Too many digits in statement label at %C");
441 gfc_error_now ("Zero is not a valid statement label at %C");
444 c = gfc_next_char ();
447 if (!gfc_is_whitespace (c))
448 gfc_error_now ("Non-numeric character in statement label at %C");
454 label_locus = gfc_current_locus;
456 gfc_gobble_whitespace ();
458 if (at_bol && gfc_peek_char () == ';')
460 gfc_error_now ("Semicolon at %C needs to be preceded by "
462 gfc_next_char (); /* Eat up the semicolon. */
466 if (gfc_match_eos () == MATCH_YES)
468 gfc_warning_now ("Ignoring statement label in empty statement "
470 gfc_free_st_label (gfc_statement_label);
471 gfc_statement_label = NULL;
478 /* Comments have already been skipped by the time we get here,
479 except for OpenMP directives. */
480 if (gfc_option.flag_openmp)
484 c = gfc_next_char ();
485 for (i = 0; i < 5; i++, c = gfc_next_char ())
486 gcc_assert (c == "!$omp"[i]);
488 gcc_assert (c == ' ');
489 gfc_gobble_whitespace ();
490 return decode_omp_directive ();
494 if (at_bol && c == ';')
496 gfc_error_now ("Semicolon at %C needs to be preceded by statement");
497 gfc_next_char (); /* Eat up the semicolon. */
501 return decode_statement ();
505 /* Get the next statement in fixed-form source. */
510 int label, digit_flag, i;
515 return decode_statement ();
517 /* Skip past the current label field, parsing a statement label if
518 one is there. This is a weird number parser, since the number is
519 contained within five columns and can have any kind of embedded
520 spaces. We also check for characters that make the rest of the
526 for (i = 0; i < 5; i++)
528 c = gfc_next_char_literal (0);
545 label = label * 10 + c - '0';
546 label_locus = gfc_current_locus;
550 /* Comments have already been skipped by the time we get
551 here, except for OpenMP directives. */
553 if (gfc_option.flag_openmp)
555 for (i = 0; i < 5; i++, c = gfc_next_char_literal (0))
556 gcc_assert (TOLOWER (c) == "*$omp"[i]);
558 if (c != ' ' && c != '0')
560 gfc_buffer_error (0);
561 gfc_error ("Bad continuation line at %C");
565 return decode_omp_directive ();
569 /* Comments have already been skipped by the time we get
570 here so don't bother checking for them. */
573 gfc_buffer_error (0);
574 gfc_error ("Non-numeric character in statement label at %C");
582 gfc_warning_now ("Zero is not a valid statement label at %C");
585 /* We've found a valid statement label. */
586 gfc_statement_label = gfc_get_st_label (label);
590 /* Since this line starts a statement, it cannot be a continuation
591 of a previous statement. If we see something here besides a
592 space or zero, it must be a bad continuation line. */
594 c = gfc_next_char_literal (0);
598 if (c != ' ' && c != '0')
600 gfc_buffer_error (0);
601 gfc_error ("Bad continuation line at %C");
605 /* Now that we've taken care of the statement label columns, we have
606 to make sure that the first nonblank character is not a '!'. If
607 it is, the rest of the line is a comment. */
611 loc = gfc_current_locus;
612 c = gfc_next_char_literal (0);
614 while (gfc_is_whitespace (c));
618 gfc_current_locus = loc;
622 gfc_error_now ("Semicolon at %C needs to be preceded by statement");
626 if (gfc_match_eos () == MATCH_YES)
629 /* At this point, we've got a nonblank statement to parse. */
630 return decode_statement ();
634 gfc_warning ("Ignoring statement label in empty statement at %C");
640 /* Return the next non-ST_NONE statement to the caller. We also worry
641 about including files and the ends of include files at this stage. */
644 next_statement (void)
648 gfc_new_block = NULL;
652 gfc_statement_label = NULL;
653 gfc_buffer_error (1);
657 if ((gfc_option.warn_line_truncation || gfc_current_form == FORM_FREE)
658 && gfc_current_locus.lb
659 && gfc_current_locus.lb->truncated)
660 gfc_warning_now ("Line truncated at %C");
665 gfc_skip_comments ();
673 st = (gfc_current_form == FORM_FIXED) ? next_fixed () : next_free ();
679 gfc_buffer_error (0);
682 check_statement_label (st);
688 /****************************** Parser ***********************************/
690 /* The parser subroutines are of type 'try' that fail if the file ends
693 /* Macros that expand to case-labels for various classes of
694 statements. Start with executable statements that directly do
697 #define case_executable case ST_ALLOCATE: case ST_BACKSPACE: case ST_CALL: \
698 case ST_CLOSE: case ST_CONTINUE: case ST_DEALLOCATE: case ST_END_FILE: \
699 case ST_GOTO: case ST_INQUIRE: case ST_NULLIFY: case ST_OPEN: \
700 case ST_READ: case ST_RETURN: case ST_REWIND: case ST_SIMPLE_IF: \
701 case ST_PAUSE: case ST_STOP: case ST_WRITE: case ST_ASSIGNMENT: \
702 case ST_POINTER_ASSIGNMENT: case ST_EXIT: case ST_CYCLE: \
703 case ST_ARITHMETIC_IF: case ST_WHERE: case ST_FORALL: \
704 case ST_LABEL_ASSIGNMENT: case ST_FLUSH: case ST_OMP_FLUSH: \
707 /* Statements that mark other executable statements. */
709 #define case_exec_markers case ST_DO: case ST_FORALL_BLOCK: case ST_IF_BLOCK: \
710 case ST_WHERE_BLOCK: case ST_SELECT_CASE: case ST_OMP_PARALLEL: \
711 case ST_OMP_PARALLEL_SECTIONS: case ST_OMP_SECTIONS: case ST_OMP_ORDERED: \
712 case ST_OMP_CRITICAL: case ST_OMP_MASTER: case ST_OMP_SINGLE: \
713 case ST_OMP_DO: case ST_OMP_PARALLEL_DO: case ST_OMP_ATOMIC: \
714 case ST_OMP_WORKSHARE: case ST_OMP_PARALLEL_WORKSHARE
716 /* Declaration statements */
718 #define case_decl case ST_ATTR_DECL: case ST_COMMON: case ST_DATA_DECL: \
719 case ST_EQUIVALENCE: case ST_NAMELIST: case ST_STATEMENT_FUNCTION: \
720 case ST_TYPE: case ST_INTERFACE: case ST_OMP_THREADPRIVATE
722 /* Block end statements. Errors associated with interchanging these
723 are detected in gfc_match_end(). */
725 #define case_end case ST_END_BLOCK_DATA: case ST_END_FUNCTION: \
726 case ST_END_PROGRAM: case ST_END_SUBROUTINE
729 /* Push a new state onto the stack. */
732 push_state (gfc_state_data *p, gfc_compile_state new_state, gfc_symbol *sym)
734 p->state = new_state;
735 p->previous = gfc_state_stack;
737 p->head = p->tail = NULL;
738 p->do_variable = NULL;
743 /* Pop the current state. */
747 gfc_state_stack = gfc_state_stack->previous;
751 /* Try to find the given state in the state stack. */
754 gfc_find_state (gfc_compile_state state)
758 for (p = gfc_state_stack; p; p = p->previous)
759 if (p->state == state)
762 return (p == NULL) ? FAILURE : SUCCESS;
766 /* Starts a new level in the statement list. */
769 new_level (gfc_code *q)
773 p = q->block = gfc_get_code ();
775 gfc_state_stack->head = gfc_state_stack->tail = p;
781 /* Add the current new_st code structure and adds it to the current
782 program unit. As a side-effect, it zeroes the new_st. */
792 p->loc = gfc_current_locus;
794 if (gfc_state_stack->head == NULL)
795 gfc_state_stack->head = p;
797 gfc_state_stack->tail->next = p;
799 while (p->next != NULL)
802 gfc_state_stack->tail = p;
810 /* Frees everything associated with the current statement. */
813 undo_new_statement (void)
815 gfc_free_statements (new_st.block);
816 gfc_free_statements (new_st.next);
817 gfc_free_statement (&new_st);
822 /* If the current statement has a statement label, make sure that it
823 is allowed to, or should have one. */
826 check_statement_label (gfc_statement st)
830 if (gfc_statement_label == NULL)
833 gfc_error ("FORMAT statement at %L does not have a statement label",
841 case ST_END_FUNCTION:
842 case ST_END_SUBROUTINE:
848 type = ST_LABEL_TARGET;
852 type = ST_LABEL_FORMAT;
855 /* Statement labels are not restricted from appearing on a
856 particular line. However, there are plenty of situations
857 where the resulting label can't be referenced. */
860 type = ST_LABEL_BAD_TARGET;
864 gfc_define_st_label (gfc_statement_label, type, &label_locus);
866 new_st.here = gfc_statement_label;
870 /* Figures out what the enclosing program unit is. This will be a
871 function, subroutine, program, block data or module. */
874 gfc_enclosing_unit (gfc_compile_state * result)
878 for (p = gfc_state_stack; p; p = p->previous)
879 if (p->state == COMP_FUNCTION || p->state == COMP_SUBROUTINE
880 || p->state == COMP_MODULE || p->state == COMP_BLOCK_DATA
881 || p->state == COMP_PROGRAM)
890 *result = COMP_PROGRAM;
895 /* Translate a statement enum to a string. */
898 gfc_ascii_statement (gfc_statement st)
904 case ST_ARITHMETIC_IF:
905 p = _("arithmetic IF");
911 p = _("attribute declaration");
941 p = _("data declaration");
949 case ST_DERIVED_DECL:
950 p = _("derived type declaration");
964 case ST_END_BLOCK_DATA:
965 p = "END BLOCK DATA";
976 case ST_END_FUNCTION:
982 case ST_END_INTERFACE:
994 case ST_END_SUBROUTINE:
995 p = "END SUBROUTINE";
1006 case ST_EQUIVALENCE:
1015 case ST_FORALL_BLOCK: /* Fall through */
1034 case ST_IMPLICIT_NONE:
1035 p = "IMPLICIT NONE";
1037 case ST_IMPLIED_ENDDO:
1038 p = _("implied END DO");
1064 case ST_MODULE_PROC:
1065 p = "MODULE PROCEDURE";
1100 case ST_WHERE_BLOCK: /* Fall through */
1108 p = _("assignment");
1110 case ST_POINTER_ASSIGNMENT:
1111 p = _("pointer assignment");
1113 case ST_SELECT_CASE:
1122 case ST_STATEMENT_FUNCTION:
1123 p = "STATEMENT FUNCTION";
1125 case ST_LABEL_ASSIGNMENT:
1126 p = "LABEL ASSIGNMENT";
1129 p = "ENUM DEFINITION";
1132 p = "ENUMERATOR DEFINITION";
1140 case ST_OMP_BARRIER:
1141 p = "!$OMP BARRIER";
1143 case ST_OMP_CRITICAL:
1144 p = "!$OMP CRITICAL";
1149 case ST_OMP_END_CRITICAL:
1150 p = "!$OMP END CRITICAL";
1155 case ST_OMP_END_MASTER:
1156 p = "!$OMP END MASTER";
1158 case ST_OMP_END_ORDERED:
1159 p = "!$OMP END ORDERED";
1161 case ST_OMP_END_PARALLEL:
1162 p = "!$OMP END PARALLEL";
1164 case ST_OMP_END_PARALLEL_DO:
1165 p = "!$OMP END PARALLEL DO";
1167 case ST_OMP_END_PARALLEL_SECTIONS:
1168 p = "!$OMP END PARALLEL SECTIONS";
1170 case ST_OMP_END_PARALLEL_WORKSHARE:
1171 p = "!$OMP END PARALLEL WORKSHARE";
1173 case ST_OMP_END_SECTIONS:
1174 p = "!$OMP END SECTIONS";
1176 case ST_OMP_END_SINGLE:
1177 p = "!$OMP END SINGLE";
1179 case ST_OMP_END_WORKSHARE:
1180 p = "!$OMP END WORKSHARE";
1188 case ST_OMP_ORDERED:
1189 p = "!$OMP ORDERED";
1191 case ST_OMP_PARALLEL:
1192 p = "!$OMP PARALLEL";
1194 case ST_OMP_PARALLEL_DO:
1195 p = "!$OMP PARALLEL DO";
1197 case ST_OMP_PARALLEL_SECTIONS:
1198 p = "!$OMP PARALLEL SECTIONS";
1200 case ST_OMP_PARALLEL_WORKSHARE:
1201 p = "!$OMP PARALLEL WORKSHARE";
1203 case ST_OMP_SECTIONS:
1204 p = "!$OMP SECTIONS";
1206 case ST_OMP_SECTION:
1207 p = "!$OMP SECTION";
1212 case ST_OMP_THREADPRIVATE:
1213 p = "!$OMP THREADPRIVATE";
1215 case ST_OMP_WORKSHARE:
1216 p = "!$OMP WORKSHARE";
1219 gfc_internal_error ("gfc_ascii_statement(): Bad statement code");
1226 /* Create a symbol for the main program and assign it to ns->proc_name. */
1229 main_program_symbol (gfc_namespace *ns)
1231 gfc_symbol *main_program;
1232 symbol_attribute attr;
1234 gfc_get_symbol ("MAIN__", ns, &main_program);
1235 gfc_clear_attr (&attr);
1236 attr.flavor = FL_PROCEDURE;
1237 attr.proc = PROC_UNKNOWN;
1238 attr.subroutine = 1;
1239 attr.access = ACCESS_PUBLIC;
1240 attr.is_main_program = 1;
1241 main_program->attr = attr;
1242 main_program->declared_at = gfc_current_locus;
1243 ns->proc_name = main_program;
1244 gfc_commit_symbols ();
1248 /* Do whatever is necessary to accept the last statement. */
1251 accept_statement (gfc_statement st)
1259 case ST_IMPLICIT_NONE:
1260 gfc_set_implicit_none ();
1269 gfc_current_ns->proc_name = gfc_new_block;
1272 /* If the statement is the end of a block, lay down a special code
1273 that allows a branch to the end of the block from within the
1278 if (gfc_statement_label != NULL)
1280 new_st.op = EXEC_NOP;
1286 /* The end-of-program unit statements do not get the special
1287 marker and require a statement of some sort if they are a
1290 case ST_END_PROGRAM:
1291 case ST_END_FUNCTION:
1292 case ST_END_SUBROUTINE:
1293 if (gfc_statement_label != NULL)
1295 new_st.op = EXEC_RETURN;
1311 gfc_commit_symbols ();
1312 gfc_warning_check ();
1313 gfc_clear_new_st ();
1317 /* Undo anything tentative that has been built for the current
1321 reject_statement (void)
1323 gfc_new_block = NULL;
1324 gfc_undo_symbols ();
1325 gfc_clear_warning ();
1326 undo_new_statement ();
1330 /* Generic complaint about an out of order statement. We also do
1331 whatever is necessary to clean up. */
1334 unexpected_statement (gfc_statement st)
1336 gfc_error ("Unexpected %s statement at %C", gfc_ascii_statement (st));
1338 reject_statement ();
1342 /* Given the next statement seen by the matcher, make sure that it is
1343 in proper order with the last. This subroutine is initialized by
1344 calling it with an argument of ST_NONE. If there is a problem, we
1345 issue an error and return FAILURE. Otherwise we return SUCCESS.
1347 Individual parsers need to verify that the statements seen are
1348 valid before calling here, ie ENTRY statements are not allowed in
1349 INTERFACE blocks. The following diagram is taken from the standard:
1351 +---------------------------------------+
1352 | program subroutine function module |
1353 +---------------------------------------+
1355 +---------------------------------------+
1357 +---------------------------------------+
1359 | +-----------+------------------+
1360 | | parameter | implicit |
1361 | +-----------+------------------+
1362 | format | | derived type |
1363 | entry | parameter | interface |
1364 | | data | specification |
1365 | | | statement func |
1366 | +-----------+------------------+
1367 | | data | executable |
1368 +--------+-----------+------------------+
1370 +---------------------------------------+
1371 | internal module/subprogram |
1372 +---------------------------------------+
1374 +---------------------------------------+
1381 { ORDER_START, ORDER_USE, ORDER_IMPORT, ORDER_IMPLICIT_NONE,
1382 ORDER_IMPLICIT, ORDER_SPEC, ORDER_EXEC
1385 gfc_statement last_statement;
1391 verify_st_order (st_state *p, gfc_statement st)
1397 p->state = ORDER_START;
1401 if (p->state > ORDER_USE)
1403 p->state = ORDER_USE;
1407 if (p->state > ORDER_IMPORT)
1409 p->state = ORDER_IMPORT;
1412 case ST_IMPLICIT_NONE:
1413 if (p->state > ORDER_IMPLICIT_NONE)
1416 /* The '>' sign cannot be a '>=', because a FORMAT or ENTRY
1417 statement disqualifies a USE but not an IMPLICIT NONE.
1418 Duplicate IMPLICIT NONEs are caught when the implicit types
1421 p->state = ORDER_IMPLICIT_NONE;
1425 if (p->state > ORDER_IMPLICIT)
1427 p->state = ORDER_IMPLICIT;
1432 if (p->state < ORDER_IMPLICIT_NONE)
1433 p->state = ORDER_IMPLICIT_NONE;
1437 if (p->state >= ORDER_EXEC)
1439 if (p->state < ORDER_IMPLICIT)
1440 p->state = ORDER_IMPLICIT;
1444 if (p->state < ORDER_SPEC)
1445 p->state = ORDER_SPEC;
1450 case ST_DERIVED_DECL:
1452 if (p->state >= ORDER_EXEC)
1454 if (p->state < ORDER_SPEC)
1455 p->state = ORDER_SPEC;
1460 if (p->state < ORDER_EXEC)
1461 p->state = ORDER_EXEC;
1465 gfc_internal_error ("Unexpected %s statement in verify_st_order() at %C",
1466 gfc_ascii_statement (st));
1469 /* All is well, record the statement in case we need it next time. */
1470 p->where = gfc_current_locus;
1471 p->last_statement = st;
1475 gfc_error ("%s statement at %C cannot follow %s statement at %L",
1476 gfc_ascii_statement (st),
1477 gfc_ascii_statement (p->last_statement), &p->where);
1483 /* Handle an unexpected end of file. This is a show-stopper... */
1485 static void unexpected_eof (void) ATTRIBUTE_NORETURN;
1488 unexpected_eof (void)
1492 gfc_error ("Unexpected end of file in '%s'", gfc_source_file);
1494 /* Memory cleanup. Move to "second to last". */
1495 for (p = gfc_state_stack; p && p->previous && p->previous->previous;
1498 gfc_current_ns->code = (p && p->previous) ? p->head : NULL;
1501 longjmp (eof_buf, 1);
1505 /* Parse a derived type. */
1508 parse_derived (void)
1510 int compiling_type, seen_private, seen_sequence, seen_component, error_flag;
1513 gfc_symbol *derived_sym = NULL;
1519 accept_statement (ST_DERIVED_DECL);
1520 push_state (&s, COMP_DERIVED, gfc_new_block);
1522 gfc_new_block->component_access = ACCESS_PUBLIC;
1529 while (compiling_type)
1531 st = next_statement ();
1538 accept_statement (st);
1545 if (!seen_component)
1547 gfc_error ("Derived type definition at %C has no components");
1551 accept_statement (ST_END_TYPE);
1555 if (gfc_find_state (COMP_MODULE) == FAILURE)
1557 gfc_error ("PRIVATE statement in TYPE at %C must be inside "
1565 gfc_error ("PRIVATE statement at %C must precede "
1566 "structure components");
1573 gfc_error ("Duplicate PRIVATE statement at %C");
1577 s.sym->component_access = ACCESS_PRIVATE;
1578 accept_statement (ST_PRIVATE);
1585 gfc_error ("SEQUENCE statement at %C must precede "
1586 "structure components");
1591 if (gfc_current_block ()->attr.sequence)
1592 gfc_warning ("SEQUENCE attribute at %C already specified in "
1597 gfc_error ("Duplicate SEQUENCE statement at %C");
1602 gfc_add_sequence (&gfc_current_block ()->attr,
1603 gfc_current_block ()->name, NULL);
1607 unexpected_statement (st);
1612 /* need to verify that all fields of the derived type are
1613 * interoperable with C if the type is declared to be bind(c)
1615 derived_sym = gfc_current_block();
1617 sym = gfc_current_block ();
1618 for (c = sym->components; c; c = c->next)
1620 /* Look for allocatable components. */
1622 || (c->ts.type == BT_DERIVED && c->ts.derived->attr.alloc_comp))
1624 sym->attr.alloc_comp = 1;
1628 /* Look for pointer components. */
1630 || (c->ts.type == BT_DERIVED && c->ts.derived->attr.pointer_comp))
1632 sym->attr.pointer_comp = 1;
1636 /* Look for private components. */
1637 if (sym->component_access == ACCESS_PRIVATE
1638 || c->access == ACCESS_PRIVATE
1639 || (c->ts.type == BT_DERIVED && c->ts.derived->attr.private_comp))
1641 sym->attr.private_comp = 1;
1650 /* Parse an ENUM. */
1659 int seen_enumerator = 0;
1663 push_state (&s, COMP_ENUM, gfc_new_block);
1667 while (compiling_enum)
1669 st = next_statement ();
1677 seen_enumerator = 1;
1678 accept_statement (st);
1683 if (!seen_enumerator)
1685 gfc_error ("ENUM declaration at %C has no ENUMERATORS");
1688 accept_statement (st);
1692 gfc_free_enum_history ();
1693 unexpected_statement (st);
1701 /* Parse an interface. We must be able to deal with the possibility
1702 of recursive interfaces. The parse_spec() subroutine is mutually
1703 recursive with parse_interface(). */
1705 static gfc_statement parse_spec (gfc_statement);
1708 parse_interface (void)
1710 gfc_compile_state new_state, current_state;
1711 gfc_symbol *prog_unit, *sym;
1712 gfc_interface_info save;
1713 gfc_state_data s1, s2;
1717 accept_statement (ST_INTERFACE);
1719 current_interface.ns = gfc_current_ns;
1720 save = current_interface;
1722 sym = (current_interface.type == INTERFACE_GENERIC
1723 || current_interface.type == INTERFACE_USER_OP)
1724 ? gfc_new_block : NULL;
1726 push_state (&s1, COMP_INTERFACE, sym);
1727 current_state = COMP_NONE;
1730 gfc_current_ns = gfc_get_namespace (current_interface.ns, 0);
1732 st = next_statement ();
1739 new_state = COMP_SUBROUTINE;
1740 gfc_add_explicit_interface (gfc_new_block, IFSRC_IFBODY,
1741 gfc_new_block->formal, NULL);
1745 new_state = COMP_FUNCTION;
1746 gfc_add_explicit_interface (gfc_new_block, IFSRC_IFBODY,
1747 gfc_new_block->formal, NULL);
1750 case ST_MODULE_PROC: /* The module procedure matcher makes
1751 sure the context is correct. */
1752 accept_statement (st);
1753 gfc_free_namespace (gfc_current_ns);
1756 case ST_END_INTERFACE:
1757 gfc_free_namespace (gfc_current_ns);
1758 gfc_current_ns = current_interface.ns;
1762 gfc_error ("Unexpected %s statement in INTERFACE block at %C",
1763 gfc_ascii_statement (st));
1764 reject_statement ();
1765 gfc_free_namespace (gfc_current_ns);
1770 /* Make sure that a generic interface has only subroutines or
1771 functions and that the generic name has the right attribute. */
1772 if (current_interface.type == INTERFACE_GENERIC)
1774 if (current_state == COMP_NONE)
1776 if (new_state == COMP_FUNCTION)
1777 gfc_add_function (&sym->attr, sym->name, NULL);
1778 else if (new_state == COMP_SUBROUTINE)
1779 gfc_add_subroutine (&sym->attr, sym->name, NULL);
1781 current_state = new_state;
1785 if (new_state != current_state)
1787 if (new_state == COMP_SUBROUTINE)
1788 gfc_error ("SUBROUTINE at %C does not belong in a "
1789 "generic function interface");
1791 if (new_state == COMP_FUNCTION)
1792 gfc_error ("FUNCTION at %C does not belong in a "
1793 "generic subroutine interface");
1798 push_state (&s2, new_state, gfc_new_block);
1799 accept_statement (st);
1800 prog_unit = gfc_new_block;
1801 prog_unit->formal_ns = gfc_current_ns;
1802 proc_locus = gfc_current_locus;
1805 /* Read data declaration statements. */
1806 st = parse_spec (ST_NONE);
1808 /* Since the interface block does not permit an IMPLICIT statement,
1809 the default type for the function or the result must be taken
1810 from the formal namespace. */
1811 if (new_state == COMP_FUNCTION)
1813 if (prog_unit->result == prog_unit
1814 && prog_unit->ts.type == BT_UNKNOWN)
1815 gfc_set_default_type (prog_unit, 1, prog_unit->formal_ns);
1816 else if (prog_unit->result != prog_unit
1817 && prog_unit->result->ts.type == BT_UNKNOWN)
1818 gfc_set_default_type (prog_unit->result, 1,
1819 prog_unit->formal_ns);
1822 if (st != ST_END_SUBROUTINE && st != ST_END_FUNCTION)
1824 gfc_error ("Unexpected %s statement at %C in INTERFACE body",
1825 gfc_ascii_statement (st));
1826 reject_statement ();
1830 current_interface = save;
1831 gfc_add_interface (prog_unit);
1834 if (current_interface.ns
1835 && current_interface.ns->proc_name
1836 && strcmp (current_interface.ns->proc_name->name,
1837 prog_unit->name) == 0)
1838 gfc_error ("INTERFACE procedure '%s' at %L has the same name as the "
1839 "enclosing procedure", prog_unit->name, &proc_locus);
1848 /* Parse a set of specification statements. Returns the statement
1849 that doesn't fit. */
1851 static gfc_statement
1852 parse_spec (gfc_statement st)
1856 verify_st_order (&ss, ST_NONE);
1858 st = next_statement ();
1868 case ST_DATA: /* Not allowed in interfaces */
1869 if (gfc_current_state () == COMP_INTERFACE)
1876 case ST_IMPLICIT_NONE:
1881 case ST_DERIVED_DECL:
1883 if (verify_st_order (&ss, st) == FAILURE)
1885 reject_statement ();
1886 st = next_statement ();
1896 case ST_DERIVED_DECL:
1902 if (gfc_current_state () != COMP_MODULE)
1904 gfc_error ("%s statement must appear in a MODULE",
1905 gfc_ascii_statement (st));
1909 if (gfc_current_ns->default_access != ACCESS_UNKNOWN)
1911 gfc_error ("%s statement at %C follows another accessibility "
1912 "specification", gfc_ascii_statement (st));
1916 gfc_current_ns->default_access = (st == ST_PUBLIC)
1917 ? ACCESS_PUBLIC : ACCESS_PRIVATE;
1921 case ST_STATEMENT_FUNCTION:
1922 if (gfc_current_state () == COMP_MODULE)
1924 unexpected_statement (st);
1932 accept_statement (st);
1933 st = next_statement ();
1937 accept_statement (st);
1939 st = next_statement ();
1950 /* Parse a WHERE block, (not a simple WHERE statement). */
1953 parse_where_block (void)
1955 int seen_empty_else;
1960 accept_statement (ST_WHERE_BLOCK);
1961 top = gfc_state_stack->tail;
1963 push_state (&s, COMP_WHERE, gfc_new_block);
1965 d = add_statement ();
1966 d->expr = top->expr;
1972 seen_empty_else = 0;
1976 st = next_statement ();
1982 case ST_WHERE_BLOCK:
1983 parse_where_block ();
1988 accept_statement (st);
1992 if (seen_empty_else)
1994 gfc_error ("ELSEWHERE statement at %C follows previous "
1995 "unmasked ELSEWHERE");
1999 if (new_st.expr == NULL)
2000 seen_empty_else = 1;
2002 d = new_level (gfc_state_stack->head);
2004 d->expr = new_st.expr;
2006 accept_statement (st);
2011 accept_statement (st);
2015 gfc_error ("Unexpected %s statement in WHERE block at %C",
2016 gfc_ascii_statement (st));
2017 reject_statement ();
2021 while (st != ST_END_WHERE);
2027 /* Parse a FORALL block (not a simple FORALL statement). */
2030 parse_forall_block (void)
2036 accept_statement (ST_FORALL_BLOCK);
2037 top = gfc_state_stack->tail;
2039 push_state (&s, COMP_FORALL, gfc_new_block);
2041 d = add_statement ();
2042 d->op = EXEC_FORALL;
2047 st = next_statement ();
2052 case ST_POINTER_ASSIGNMENT:
2055 accept_statement (st);
2058 case ST_WHERE_BLOCK:
2059 parse_where_block ();
2062 case ST_FORALL_BLOCK:
2063 parse_forall_block ();
2067 accept_statement (st);
2074 gfc_error ("Unexpected %s statement in FORALL block at %C",
2075 gfc_ascii_statement (st));
2077 reject_statement ();
2081 while (st != ST_END_FORALL);
2087 static gfc_statement parse_executable (gfc_statement);
2089 /* parse the statements of an IF-THEN-ELSEIF-ELSE-ENDIF block. */
2092 parse_if_block (void)
2101 accept_statement (ST_IF_BLOCK);
2103 top = gfc_state_stack->tail;
2104 push_state (&s, COMP_IF, gfc_new_block);
2106 new_st.op = EXEC_IF;
2107 d = add_statement ();
2109 d->expr = top->expr;
2115 st = parse_executable (ST_NONE);
2125 gfc_error ("ELSE IF statement at %C cannot follow ELSE "
2126 "statement at %L", &else_locus);
2128 reject_statement ();
2132 d = new_level (gfc_state_stack->head);
2134 d->expr = new_st.expr;
2136 accept_statement (st);
2143 gfc_error ("Duplicate ELSE statements at %L and %C",
2145 reject_statement ();
2150 else_locus = gfc_current_locus;
2152 d = new_level (gfc_state_stack->head);
2155 accept_statement (st);
2163 unexpected_statement (st);
2167 while (st != ST_ENDIF);
2170 accept_statement (st);
2174 /* Parse a SELECT block. */
2177 parse_select_block (void)
2183 accept_statement (ST_SELECT_CASE);
2185 cp = gfc_state_stack->tail;
2186 push_state (&s, COMP_SELECT, gfc_new_block);
2188 /* Make sure that the next statement is a CASE or END SELECT. */
2191 st = next_statement ();
2194 if (st == ST_END_SELECT)
2196 /* Empty SELECT CASE is OK. */
2197 accept_statement (st);
2204 gfc_error ("Expected a CASE or END SELECT statement following SELECT "
2207 reject_statement ();
2210 /* At this point, we're got a nonempty select block. */
2211 cp = new_level (cp);
2214 accept_statement (st);
2218 st = parse_executable (ST_NONE);
2225 cp = new_level (gfc_state_stack->head);
2227 gfc_clear_new_st ();
2229 accept_statement (st);
2235 /* Can't have an executable statement because of
2236 parse_executable(). */
2238 unexpected_statement (st);
2242 while (st != ST_END_SELECT);
2245 accept_statement (st);
2249 /* Given a symbol, make sure it is not an iteration variable for a DO
2250 statement. This subroutine is called when the symbol is seen in a
2251 context that causes it to become redefined. If the symbol is an
2252 iterator, we generate an error message and return nonzero. */
2255 gfc_check_do_variable (gfc_symtree *st)
2259 for (s=gfc_state_stack; s; s = s->previous)
2260 if (s->do_variable == st)
2262 gfc_error_now("Variable '%s' at %C cannot be redefined inside "
2263 "loop beginning at %L", st->name, &s->head->loc);
2271 /* Checks to see if the current statement label closes an enddo.
2272 Returns 0 if not, 1 if closes an ENDDO correctly, or 2 (and issues
2273 an error) if it incorrectly closes an ENDDO. */
2276 check_do_closure (void)
2280 if (gfc_statement_label == NULL)
2283 for (p = gfc_state_stack; p; p = p->previous)
2284 if (p->state == COMP_DO)
2288 return 0; /* No loops to close */
2290 if (p->ext.end_do_label == gfc_statement_label)
2293 if (p == gfc_state_stack)
2296 gfc_error ("End of nonblock DO statement at %C is within another block");
2300 /* At this point, the label doesn't terminate the innermost loop.
2301 Make sure it doesn't terminate another one. */
2302 for (; p; p = p->previous)
2303 if (p->state == COMP_DO && p->ext.end_do_label == gfc_statement_label)
2305 gfc_error ("End of nonblock DO statement at %C is interwoven "
2306 "with another DO loop");
2314 /* Parse a DO loop. Note that the ST_CYCLE and ST_EXIT statements are
2315 handled inside of parse_executable(), because they aren't really
2319 parse_do_block (void)
2326 s.ext.end_do_label = new_st.label;
2328 if (new_st.ext.iterator != NULL)
2329 stree = new_st.ext.iterator->var->symtree;
2333 accept_statement (ST_DO);
2335 top = gfc_state_stack->tail;
2336 push_state (&s, COMP_DO, gfc_new_block);
2338 s.do_variable = stree;
2340 top->block = new_level (top);
2341 top->block->op = EXEC_DO;
2344 st = parse_executable (ST_NONE);
2352 if (s.ext.end_do_label != NULL
2353 && s.ext.end_do_label != gfc_statement_label)
2354 gfc_error_now ("Statement label in ENDDO at %C doesn't match "
2357 if (gfc_statement_label != NULL)
2359 new_st.op = EXEC_NOP;
2364 case ST_IMPLIED_ENDDO:
2365 /* If the do-stmt of this DO construct has a do-construct-name,
2366 the corresponding end-do must be an end-do-stmt (with a matching
2367 name, but in that case we must have seen ST_ENDDO first).
2368 We only complain about this in pedantic mode. */
2369 if (gfc_current_block () != NULL)
2370 gfc_error_now ("named block DO at %L requires matching ENDDO name",
2371 &gfc_current_block()->declared_at);
2376 unexpected_statement (st);
2381 accept_statement (st);
2385 /* Parse the statements of OpenMP do/parallel do. */
2387 static gfc_statement
2388 parse_omp_do (gfc_statement omp_st)
2394 accept_statement (omp_st);
2396 cp = gfc_state_stack->tail;
2397 push_state (&s, COMP_OMP_STRUCTURED_BLOCK, NULL);
2398 np = new_level (cp);
2404 st = next_statement ();
2407 else if (st == ST_DO)
2410 unexpected_statement (st);
2414 if (gfc_statement_label != NULL
2415 && gfc_state_stack->previous != NULL
2416 && gfc_state_stack->previous->state == COMP_DO
2417 && gfc_state_stack->previous->ext.end_do_label == gfc_statement_label)
2425 there should be no !$OMP END DO. */
2427 return ST_IMPLIED_ENDDO;
2430 check_do_closure ();
2433 st = next_statement ();
2434 if (st == (omp_st == ST_OMP_DO ? ST_OMP_END_DO : ST_OMP_END_PARALLEL_DO))
2436 if (new_st.op == EXEC_OMP_END_NOWAIT)
2437 cp->ext.omp_clauses->nowait |= new_st.ext.omp_bool;
2439 gcc_assert (new_st.op == EXEC_NOP);
2440 gfc_clear_new_st ();
2441 gfc_commit_symbols ();
2442 gfc_warning_check ();
2443 st = next_statement ();
2449 /* Parse the statements of OpenMP atomic directive. */
2452 parse_omp_atomic (void)
2458 accept_statement (ST_OMP_ATOMIC);
2460 cp = gfc_state_stack->tail;
2461 push_state (&s, COMP_OMP_STRUCTURED_BLOCK, NULL);
2462 np = new_level (cp);
2468 st = next_statement ();
2471 else if (st == ST_ASSIGNMENT)
2474 unexpected_statement (st);
2477 accept_statement (st);
2483 /* Parse the statements of an OpenMP structured block. */
2486 parse_omp_structured_block (gfc_statement omp_st, bool workshare_stmts_only)
2488 gfc_statement st, omp_end_st;
2492 accept_statement (omp_st);
2494 cp = gfc_state_stack->tail;
2495 push_state (&s, COMP_OMP_STRUCTURED_BLOCK, NULL);
2496 np = new_level (cp);
2502 case ST_OMP_PARALLEL:
2503 omp_end_st = ST_OMP_END_PARALLEL;
2505 case ST_OMP_PARALLEL_SECTIONS:
2506 omp_end_st = ST_OMP_END_PARALLEL_SECTIONS;
2508 case ST_OMP_SECTIONS:
2509 omp_end_st = ST_OMP_END_SECTIONS;
2511 case ST_OMP_ORDERED:
2512 omp_end_st = ST_OMP_END_ORDERED;
2514 case ST_OMP_CRITICAL:
2515 omp_end_st = ST_OMP_END_CRITICAL;
2518 omp_end_st = ST_OMP_END_MASTER;
2521 omp_end_st = ST_OMP_END_SINGLE;
2523 case ST_OMP_WORKSHARE:
2524 omp_end_st = ST_OMP_END_WORKSHARE;
2526 case ST_OMP_PARALLEL_WORKSHARE:
2527 omp_end_st = ST_OMP_END_PARALLEL_WORKSHARE;
2535 if (workshare_stmts_only)
2537 /* Inside of !$omp workshare, only
2540 where statements and constructs
2541 forall statements and constructs
2545 are allowed. For !$omp critical these
2546 restrictions apply recursively. */
2549 st = next_statement ();
2560 accept_statement (st);
2563 case ST_WHERE_BLOCK:
2564 parse_where_block ();
2567 case ST_FORALL_BLOCK:
2568 parse_forall_block ();
2571 case ST_OMP_PARALLEL:
2572 case ST_OMP_PARALLEL_SECTIONS:
2573 parse_omp_structured_block (st, false);
2576 case ST_OMP_PARALLEL_WORKSHARE:
2577 case ST_OMP_CRITICAL:
2578 parse_omp_structured_block (st, true);
2581 case ST_OMP_PARALLEL_DO:
2582 st = parse_omp_do (st);
2586 parse_omp_atomic ();
2597 st = next_statement ();
2601 st = parse_executable (ST_NONE);
2604 else if (st == ST_OMP_SECTION
2605 && (omp_st == ST_OMP_SECTIONS
2606 || omp_st == ST_OMP_PARALLEL_SECTIONS))
2608 np = new_level (np);
2612 else if (st != omp_end_st)
2613 unexpected_statement (st);
2615 while (st != omp_end_st);
2619 case EXEC_OMP_END_NOWAIT:
2620 cp->ext.omp_clauses->nowait |= new_st.ext.omp_bool;
2622 case EXEC_OMP_CRITICAL:
2623 if (((cp->ext.omp_name == NULL) ^ (new_st.ext.omp_name == NULL))
2624 || (new_st.ext.omp_name != NULL
2625 && strcmp (cp->ext.omp_name, new_st.ext.omp_name) != 0))
2626 gfc_error ("Name after !$omp critical and !$omp end critical does "
2628 gfc_free (CONST_CAST (new_st.ext.omp_name));
2630 case EXEC_OMP_END_SINGLE:
2631 cp->ext.omp_clauses->lists[OMP_LIST_COPYPRIVATE]
2632 = new_st.ext.omp_clauses->lists[OMP_LIST_COPYPRIVATE];
2633 new_st.ext.omp_clauses->lists[OMP_LIST_COPYPRIVATE] = NULL;
2634 gfc_free_omp_clauses (new_st.ext.omp_clauses);
2642 gfc_clear_new_st ();
2643 gfc_commit_symbols ();
2644 gfc_warning_check ();
2649 /* Accept a series of executable statements. We return the first
2650 statement that doesn't fit to the caller. Any block statements are
2651 passed on to the correct handler, which usually passes the buck
2654 static gfc_statement
2655 parse_executable (gfc_statement st)
2660 st = next_statement ();
2664 close_flag = check_do_closure ();
2669 case ST_END_PROGRAM:
2672 case ST_END_FUNCTION:
2676 case ST_END_SUBROUTINE:
2681 case ST_SELECT_CASE:
2682 gfc_error ("%s statement at %C cannot terminate a non-block "
2683 "DO loop", gfc_ascii_statement (st));
2699 accept_statement (st);
2700 if (close_flag == 1)
2701 return ST_IMPLIED_ENDDO;
2708 case ST_SELECT_CASE:
2709 parse_select_block ();
2714 if (check_do_closure () == 1)
2715 return ST_IMPLIED_ENDDO;
2718 case ST_WHERE_BLOCK:
2719 parse_where_block ();
2722 case ST_FORALL_BLOCK:
2723 parse_forall_block ();
2726 case ST_OMP_PARALLEL:
2727 case ST_OMP_PARALLEL_SECTIONS:
2728 case ST_OMP_SECTIONS:
2729 case ST_OMP_ORDERED:
2730 case ST_OMP_CRITICAL:
2733 parse_omp_structured_block (st, false);
2736 case ST_OMP_WORKSHARE:
2737 case ST_OMP_PARALLEL_WORKSHARE:
2738 parse_omp_structured_block (st, true);
2742 case ST_OMP_PARALLEL_DO:
2743 st = parse_omp_do (st);
2744 if (st == ST_IMPLIED_ENDDO)
2749 parse_omp_atomic ();
2756 st = next_statement ();
2761 /* Parse a series of contained program units. */
2763 static void parse_progunit (gfc_statement);
2766 /* Fix the symbols for sibling functions. These are incorrectly added to
2767 the child namespace as the parser didn't know about this procedure. */
2770 gfc_fixup_sibling_symbols (gfc_symbol *sym, gfc_namespace *siblings)
2774 gfc_symbol *old_sym;
2776 sym->attr.referenced = 1;
2777 for (ns = siblings; ns; ns = ns->sibling)
2779 gfc_find_sym_tree (sym->name, ns, 0, &st);
2781 if (!st || (st->n.sym->attr.dummy && ns == st->n.sym->ns))
2784 old_sym = st->n.sym;
2785 if ((old_sym->attr.flavor == FL_PROCEDURE
2786 || old_sym->ts.type == BT_UNKNOWN)
2787 && old_sym->ns == ns
2788 && !old_sym->attr.contained
2789 && old_sym->attr.flavor != FL_NAMELIST)
2791 /* Replace it with the symbol from the parent namespace. */
2795 /* Free the old (local) symbol. */
2797 if (old_sym->refs == 0)
2798 gfc_free_symbol (old_sym);
2801 /* Do the same for any contained procedures. */
2802 gfc_fixup_sibling_symbols (sym, ns->contained);
2807 parse_contained (int module)
2809 gfc_namespace *ns, *parent_ns, *tmp;
2810 gfc_state_data s1, s2;
2814 int contains_statements = 0;
2817 push_state (&s1, COMP_CONTAINS, NULL);
2818 parent_ns = gfc_current_ns;
2822 gfc_current_ns = gfc_get_namespace (parent_ns, 1);
2824 gfc_current_ns->sibling = parent_ns->contained;
2825 parent_ns->contained = gfc_current_ns;
2828 /* Process the next available statement. We come here if we got an error
2829 and rejected the last statement. */
2830 st = next_statement ();
2839 contains_statements = 1;
2840 accept_statement (st);
2843 (st == ST_FUNCTION) ? COMP_FUNCTION : COMP_SUBROUTINE,
2846 /* For internal procedures, create/update the symbol in the
2847 parent namespace. */
2851 if (gfc_get_symbol (gfc_new_block->name, parent_ns, &sym))
2852 gfc_error ("Contained procedure '%s' at %C is already "
2853 "ambiguous", gfc_new_block->name);
2856 if (gfc_add_procedure (&sym->attr, PROC_INTERNAL, sym->name,
2857 &gfc_new_block->declared_at) ==
2860 if (st == ST_FUNCTION)
2861 gfc_add_function (&sym->attr, sym->name,
2862 &gfc_new_block->declared_at);
2864 gfc_add_subroutine (&sym->attr, sym->name,
2865 &gfc_new_block->declared_at);
2869 gfc_commit_symbols ();
2872 sym = gfc_new_block;
2874 /* Mark this as a contained function, so it isn't replaced
2875 by other module functions. */
2876 sym->attr.contained = 1;
2877 sym->attr.referenced = 1;
2879 parse_progunit (ST_NONE);
2881 /* Fix up any sibling functions that refer to this one. */
2882 gfc_fixup_sibling_symbols (sym, gfc_current_ns);
2883 /* Or refer to any of its alternate entry points. */
2884 for (el = gfc_current_ns->entries; el; el = el->next)
2885 gfc_fixup_sibling_symbols (el->sym, gfc_current_ns);
2887 gfc_current_ns->code = s2.head;
2888 gfc_current_ns = parent_ns;
2893 /* These statements are associated with the end of the host unit. */
2894 case ST_END_FUNCTION:
2896 case ST_END_PROGRAM:
2897 case ST_END_SUBROUTINE:
2898 accept_statement (st);
2902 gfc_error ("Unexpected %s statement in CONTAINS section at %C",
2903 gfc_ascii_statement (st));
2904 reject_statement ();
2910 while (st != ST_END_FUNCTION && st != ST_END_SUBROUTINE
2911 && st != ST_END_MODULE && st != ST_END_PROGRAM);
2913 /* The first namespace in the list is guaranteed to not have
2914 anything (worthwhile) in it. */
2915 tmp = gfc_current_ns;
2916 gfc_current_ns = parent_ns;
2917 if (seen_error && tmp->refs > 1)
2918 gfc_free_namespace (tmp);
2920 ns = gfc_current_ns->contained;
2921 gfc_current_ns->contained = ns->sibling;
2922 gfc_free_namespace (ns);
2925 if (!contains_statements)
2926 /* This is valid in Fortran 2008. */
2927 gfc_notify_std (GFC_STD_GNU, "Extension: CONTAINS statement without "
2928 "FUNCTION or SUBROUTINE statement at %C");
2932 /* Parse a PROGRAM, SUBROUTINE or FUNCTION unit. */
2935 parse_progunit (gfc_statement st)
2940 st = parse_spec (st);
2950 accept_statement (st);
2957 if (gfc_current_state () == COMP_FUNCTION)
2958 gfc_check_function_type (gfc_current_ns);
2963 st = parse_executable (st);
2974 accept_statement (st);
2981 unexpected_statement (st);
2982 reject_statement ();
2983 st = next_statement ();
2989 for (p = gfc_state_stack; p; p = p->previous)
2990 if (p->state == COMP_CONTAINS)
2993 if (gfc_find_state (COMP_MODULE) == SUCCESS)
2998 gfc_error ("CONTAINS statement at %C is already in a contained "
3000 st = next_statement ();
3004 parse_contained (0);
3007 gfc_current_ns->code = gfc_state_stack->head;
3011 /* Come here to complain about a global symbol already in use as
3015 global_used (gfc_gsymbol *sym, locus *where)
3020 where = &gfc_current_locus;
3030 case GSYM_SUBROUTINE:
3031 name = "SUBROUTINE";
3036 case GSYM_BLOCK_DATA:
3037 name = "BLOCK DATA";
3043 gfc_internal_error ("gfc_gsymbol_type(): Bad type");
3047 gfc_error("Global name '%s' at %L is already being used as a %s at %L",
3048 sym->name, where, name, &sym->where);
3052 /* Parse a block data program unit. */
3055 parse_block_data (void)
3058 static locus blank_locus;
3059 static int blank_block=0;
3062 gfc_current_ns->proc_name = gfc_new_block;
3063 gfc_current_ns->is_block_data = 1;
3065 if (gfc_new_block == NULL)
3068 gfc_error ("Blank BLOCK DATA at %C conflicts with "
3069 "prior BLOCK DATA at %L", &blank_locus);
3073 blank_locus = gfc_current_locus;
3078 s = gfc_get_gsymbol (gfc_new_block->name);
3080 || (s->type != GSYM_UNKNOWN && s->type != GSYM_BLOCK_DATA))
3081 global_used(s, NULL);
3084 s->type = GSYM_BLOCK_DATA;
3085 s->where = gfc_current_locus;
3090 st = parse_spec (ST_NONE);
3092 while (st != ST_END_BLOCK_DATA)
3094 gfc_error ("Unexpected %s statement in BLOCK DATA at %C",
3095 gfc_ascii_statement (st));
3096 reject_statement ();
3097 st = next_statement ();
3102 /* Parse a module subprogram. */
3110 s = gfc_get_gsymbol (gfc_new_block->name);
3111 if (s->defined || (s->type != GSYM_UNKNOWN && s->type != GSYM_MODULE))
3112 global_used(s, NULL);
3115 s->type = GSYM_MODULE;
3116 s->where = gfc_current_locus;
3120 st = parse_spec (ST_NONE);
3129 parse_contained (1);
3133 accept_statement (st);
3137 gfc_error ("Unexpected %s statement in MODULE at %C",
3138 gfc_ascii_statement (st));
3140 reject_statement ();
3141 st = next_statement ();
3147 /* Add a procedure name to the global symbol table. */
3150 add_global_procedure (int sub)
3154 s = gfc_get_gsymbol(gfc_new_block->name);
3157 || (s->type != GSYM_UNKNOWN
3158 && s->type != (sub ? GSYM_SUBROUTINE : GSYM_FUNCTION)))
3159 global_used(s, NULL);
3162 s->type = sub ? GSYM_SUBROUTINE : GSYM_FUNCTION;
3163 s->where = gfc_current_locus;
3169 /* Add a program to the global symbol table. */
3172 add_global_program (void)
3176 if (gfc_new_block == NULL)
3178 s = gfc_get_gsymbol (gfc_new_block->name);
3180 if (s->defined || (s->type != GSYM_UNKNOWN && s->type != GSYM_PROGRAM))
3181 global_used(s, NULL);
3184 s->type = GSYM_PROGRAM;
3185 s->where = gfc_current_locus;
3191 /* Top level parser. */
3194 gfc_parse_file (void)
3196 int seen_program, errors_before, errors;
3197 gfc_state_data top, s;
3201 top.state = COMP_NONE;
3203 top.previous = NULL;
3204 top.head = top.tail = NULL;
3205 top.do_variable = NULL;
3207 gfc_state_stack = ⊤
3209 gfc_clear_new_st ();
3211 gfc_statement_label = NULL;
3213 if (setjmp (eof_buf))
3214 return FAILURE; /* Come here on unexpected EOF */
3218 /* Exit early for empty files. */
3224 st = next_statement ();
3233 goto duplicate_main;
3235 prog_locus = gfc_current_locus;
3237 push_state (&s, COMP_PROGRAM, gfc_new_block);
3238 main_program_symbol(gfc_current_ns);
3239 accept_statement (st);
3240 add_global_program ();
3241 parse_progunit (ST_NONE);
3245 add_global_procedure (1);
3246 push_state (&s, COMP_SUBROUTINE, gfc_new_block);
3247 accept_statement (st);
3248 parse_progunit (ST_NONE);
3252 add_global_procedure (0);
3253 push_state (&s, COMP_FUNCTION, gfc_new_block);
3254 accept_statement (st);
3255 parse_progunit (ST_NONE);
3259 push_state (&s, COMP_BLOCK_DATA, gfc_new_block);
3260 accept_statement (st);
3261 parse_block_data ();
3265 push_state (&s, COMP_MODULE, gfc_new_block);
3266 accept_statement (st);
3268 gfc_get_errors (NULL, &errors_before);
3272 /* Anything else starts a nameless main program block. */
3275 goto duplicate_main;
3277 prog_locus = gfc_current_locus;
3279 push_state (&s, COMP_PROGRAM, gfc_new_block);
3280 main_program_symbol (gfc_current_ns);
3281 parse_progunit (st);
3285 gfc_current_ns->code = s.head;
3287 gfc_resolve (gfc_current_ns);
3289 /* Dump the parse tree if requested. */
3290 if (gfc_option.verbose)
3291 gfc_show_namespace (gfc_current_ns);
3293 gfc_get_errors (NULL, &errors);
3294 if (s.state == COMP_MODULE)
3296 gfc_dump_module (s.sym->name, errors_before == errors);
3298 gfc_generate_module_code (gfc_current_ns);
3303 gfc_generate_code (gfc_current_ns);
3314 /* If we see a duplicate main program, shut down. If the second
3315 instance is an implied main program, ie data decls or executable
3316 statements, we're in for lots of errors. */
3317 gfc_error ("Two main PROGRAMs at %L and %C", &prog_locus);
3318 reject_statement ();