2 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
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 2, 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 COPYING. If not, write to the Free
20 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
31 /* Current statement label. Zero means no statement label. Because
32 new_st can get wiped during statement matching, we have to keep it
35 gfc_st_label *gfc_statement_label;
37 static locus label_locus;
38 static jmp_buf eof_buf;
40 gfc_state_data *gfc_state_stack;
42 /* TODO: Re-order functions to kill these forward decls. */
43 static void check_statement_label (gfc_statement);
44 static void undo_new_statement (void);
45 static void reject_statement (void);
47 /* A sort of half-matching function. We try to match the word on the
48 input with the passed string. If this succeeds, we call the
49 keyword-dependent matching function that will match the rest of the
50 statement. For single keywords, the matching subroutine is
54 match_word (const char *str, match (*subr) (void), locus * old_locus)
69 gfc_current_locus = *old_locus;
77 /* Figure out what the next statement is, (mostly) regardless of
78 proper ordering. The do...while(0) is there to prevent if/else
81 #define match(keyword, subr, st) \
83 if (match_word(keyword, subr, &old_locus) == MATCH_YES) \
86 undo_new_statement (); \
90 decode_statement (void)
101 gfc_clear_error (); /* Clear any pending errors. */
102 gfc_clear_warning (); /* Clear any pending warnings. */
104 if (gfc_match_eos () == MATCH_YES)
107 old_locus = gfc_current_locus;
109 /* Try matching a data declaration or function declaration. The
110 input "REALFUNCTIONA(N)" can mean several things in different
111 contexts, so it (and its relatives) get special treatment. */
113 if (gfc_current_state () == COMP_NONE
114 || gfc_current_state () == COMP_INTERFACE
115 || gfc_current_state () == COMP_CONTAINS)
117 m = gfc_match_function_decl ();
120 else if (m == MATCH_ERROR)
124 gfc_current_locus = old_locus;
127 /* Match statements whose error messages are meant to be overwritten
128 by something better. */
130 match (NULL, gfc_match_assignment, ST_ASSIGNMENT);
131 match (NULL, gfc_match_pointer_assignment, ST_POINTER_ASSIGNMENT);
132 match (NULL, gfc_match_st_function, ST_STATEMENT_FUNCTION);
134 match (NULL, gfc_match_data_decl, ST_DATA_DECL);
135 match (NULL, gfc_match_enumerator_def, ST_ENUMERATOR);
137 /* Try to match a subroutine statement, which has the same optional
138 prefixes that functions can have. */
140 if (gfc_match_subroutine () == MATCH_YES)
141 return ST_SUBROUTINE;
143 gfc_current_locus = old_locus;
145 /* Check for the IF, DO, SELECT, WHERE and FORALL statements, which
146 might begin with a block label. The match functions for these
147 statements are unusual in that their keyword is not seen before
148 the matcher is called. */
150 if (gfc_match_if (&st) == MATCH_YES)
153 gfc_current_locus = old_locus;
155 if (gfc_match_where (&st) == MATCH_YES)
158 gfc_current_locus = old_locus;
160 if (gfc_match_forall (&st) == MATCH_YES)
163 gfc_current_locus = old_locus;
165 match (NULL, gfc_match_do, ST_DO);
166 match (NULL, gfc_match_select, ST_SELECT_CASE);
168 /* General statement matching: Instead of testing every possible
169 statement, we eliminate most possibilities by peeking at the
172 c = gfc_peek_char ();
177 match ("allocate", gfc_match_allocate, ST_ALLOCATE);
178 match ("allocatable", gfc_match_allocatable, ST_ATTR_DECL);
179 match ("assign", gfc_match_assign, ST_LABEL_ASSIGNMENT);
183 match ("backspace", gfc_match_backspace, ST_BACKSPACE);
184 match ("block data", gfc_match_block_data, ST_BLOCK_DATA);
188 match ("call", gfc_match_call, ST_CALL);
189 match ("close", gfc_match_close, ST_CLOSE);
190 match ("continue", gfc_match_continue, ST_CONTINUE);
191 match ("cycle", gfc_match_cycle, ST_CYCLE);
192 match ("case", gfc_match_case, ST_CASE);
193 match ("common", gfc_match_common, ST_COMMON);
194 match ("contains", gfc_match_eos, ST_CONTAINS);
198 match ("deallocate", gfc_match_deallocate, ST_DEALLOCATE);
199 match ("data", gfc_match_data, ST_DATA);
200 match ("dimension", gfc_match_dimension, ST_ATTR_DECL);
204 match ("end file", gfc_match_endfile, ST_END_FILE);
205 match ("exit", gfc_match_exit, ST_EXIT);
206 match ("else", gfc_match_else, ST_ELSE);
207 match ("else where", gfc_match_elsewhere, ST_ELSEWHERE);
208 match ("else if", gfc_match_elseif, ST_ELSEIF);
209 match ("enum , bind ( c )", gfc_match_enum, ST_ENUM);
211 if (gfc_match_end (&st) == MATCH_YES)
214 match ("entry% ", gfc_match_entry, ST_ENTRY);
215 match ("equivalence", gfc_match_equivalence, ST_EQUIVALENCE);
216 match ("external", gfc_match_external, ST_ATTR_DECL);
220 match ("flush", gfc_match_flush, ST_FLUSH);
221 match ("format", gfc_match_format, ST_FORMAT);
225 match ("go to", gfc_match_goto, ST_GOTO);
229 match ("inquire", gfc_match_inquire, ST_INQUIRE);
230 match ("implicit", gfc_match_implicit, ST_IMPLICIT);
231 match ("implicit% none", gfc_match_implicit_none, ST_IMPLICIT_NONE);
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)
265 match ("read", gfc_match_read, ST_READ);
266 match ("return", gfc_match_return, ST_RETURN);
267 match ("rewind", gfc_match_rewind, ST_REWIND);
271 match ("sequence", gfc_match_eos, ST_SEQUENCE);
272 match ("stop", gfc_match_stop, ST_STOP);
273 match ("save", gfc_match_save, ST_ATTR_DECL);
277 match ("target", gfc_match_target, ST_ATTR_DECL);
278 match ("type", gfc_match_derived_decl, ST_DERIVED_DECL);
282 match ("use% ", gfc_match_use, ST_USE);
286 match ("write", gfc_match_write, ST_WRITE);
290 /* All else has failed, so give up. See if any of the matchers has
291 stored an error message of some sort. */
293 if (gfc_error_check () == 0)
294 gfc_error_now ("Unclassifiable statement at %C");
298 gfc_error_recovery ();
304 decode_omp_directive (void)
313 gfc_clear_error (); /* Clear any pending errors. */
314 gfc_clear_warning (); /* Clear any pending warnings. */
318 gfc_error_now ("OpenMP directives at %C may not appear in PURE or ELEMENTAL procedures");
319 gfc_error_recovery ();
323 old_locus = gfc_current_locus;
325 /* General OpenMP directive matching: Instead of testing every possible
326 statement, we eliminate most possibilities by peeking at the
329 c = gfc_peek_char ();
334 match ("atomic", gfc_match_omp_atomic, ST_OMP_ATOMIC);
337 match ("barrier", gfc_match_omp_barrier, ST_OMP_BARRIER);
340 match ("critical", gfc_match_omp_critical, ST_OMP_CRITICAL);
343 match ("do", gfc_match_omp_do, ST_OMP_DO);
346 match ("end critical", gfc_match_omp_critical, ST_OMP_END_CRITICAL);
347 match ("end do", gfc_match_omp_end_nowait, ST_OMP_END_DO);
348 match ("end master", gfc_match_omp_eos, ST_OMP_END_MASTER);
349 match ("end ordered", gfc_match_omp_eos, ST_OMP_END_ORDERED);
350 match ("end parallel do", gfc_match_omp_eos, ST_OMP_END_PARALLEL_DO);
351 match ("end parallel sections", gfc_match_omp_eos,
352 ST_OMP_END_PARALLEL_SECTIONS);
353 match ("end parallel workshare", gfc_match_omp_eos,
354 ST_OMP_END_PARALLEL_WORKSHARE);
355 match ("end parallel", gfc_match_omp_eos, ST_OMP_END_PARALLEL);
356 match ("end sections", gfc_match_omp_end_nowait, ST_OMP_END_SECTIONS);
357 match ("end single", gfc_match_omp_end_single, ST_OMP_END_SINGLE);
358 match ("end workshare", gfc_match_omp_end_nowait,
359 ST_OMP_END_WORKSHARE);
362 match ("flush", gfc_match_omp_flush, ST_OMP_FLUSH);
365 match ("master", gfc_match_omp_master, ST_OMP_MASTER);
368 match ("ordered", gfc_match_omp_ordered, ST_OMP_ORDERED);
371 match ("parallel do", gfc_match_omp_parallel_do, ST_OMP_PARALLEL_DO);
372 match ("parallel sections", gfc_match_omp_parallel_sections,
373 ST_OMP_PARALLEL_SECTIONS);
374 match ("parallel workshare", gfc_match_omp_parallel_workshare,
375 ST_OMP_PARALLEL_WORKSHARE);
376 match ("parallel", gfc_match_omp_parallel, ST_OMP_PARALLEL);
379 match ("sections", gfc_match_omp_sections, ST_OMP_SECTIONS);
380 match ("section", gfc_match_omp_eos, ST_OMP_SECTION);
381 match ("single", gfc_match_omp_single, ST_OMP_SINGLE);
384 match ("threadprivate", gfc_match_omp_threadprivate,
385 ST_OMP_THREADPRIVATE);
387 match ("workshare", gfc_match_omp_workshare, ST_OMP_WORKSHARE);
391 /* All else has failed, so give up. See if any of the matchers has
392 stored an error message of some sort. */
394 if (gfc_error_check () == 0)
395 gfc_error_now ("Unclassifiable OpenMP directive at %C");
399 gfc_error_recovery ();
407 /* Get the next statement in free form source. */
415 gfc_gobble_whitespace ();
417 c = gfc_peek_char ();
421 /* Found a statement label? */
422 m = gfc_match_st_label (&gfc_statement_label);
424 d = gfc_peek_char ();
425 if (m != MATCH_YES || !gfc_is_whitespace (d))
427 gfc_match_small_literal_int (&c, &cnt);
430 gfc_error_now ("Too many digits in statement label at %C");
433 gfc_error_now ("Zero is not a valid statement label at %C");
436 c = gfc_next_char ();
439 if (!gfc_is_whitespace (c))
440 gfc_error_now ("Non-numeric character in statement label at %C");
445 label_locus = gfc_current_locus;
447 gfc_gobble_whitespace ();
449 if (gfc_match_eos () == MATCH_YES)
452 ("Ignoring statement label in empty statement at %C");
453 gfc_free_st_label (gfc_statement_label);
454 gfc_statement_label = NULL;
461 /* Comments have already been skipped by the time we get here,
462 except for OpenMP directives. */
463 if (gfc_option.flag_openmp)
467 c = gfc_next_char ();
468 for (i = 0; i < 5; i++, c = gfc_next_char ())
469 gcc_assert (c == "!$omp"[i]);
471 gcc_assert (c == ' ');
472 return decode_omp_directive ();
476 return decode_statement ();
480 /* Get the next statement in fixed-form source. */
485 int label, digit_flag, i;
490 return decode_statement ();
492 /* Skip past the current label field, parsing a statement label if
493 one is there. This is a weird number parser, since the number is
494 contained within five columns and can have any kind of embedded
495 spaces. We also check for characters that make the rest of the
501 for (i = 0; i < 5; i++)
503 c = gfc_next_char_literal (0);
520 label = label * 10 + c - '0';
521 label_locus = gfc_current_locus;
525 /* Comments have already been skipped by the time we get
526 here, except for OpenMP directives. */
528 if (gfc_option.flag_openmp)
530 for (i = 0; i < 5; i++, c = gfc_next_char_literal (0))
531 gcc_assert (TOLOWER (c) == "*$omp"[i]);
533 if (c != ' ' && c != '0')
535 gfc_buffer_error (0);
536 gfc_error ("Bad continuation line at %C");
540 return decode_omp_directive ();
544 /* Comments have already been skipped by the time we get
545 here so don't bother checking for them. */
548 gfc_buffer_error (0);
549 gfc_error ("Non-numeric character in statement label at %C");
557 gfc_warning_now ("Zero is not a valid statement label at %C");
560 /* We've found a valid statement label. */
561 gfc_statement_label = gfc_get_st_label (label);
565 /* Since this line starts a statement, it cannot be a continuation
566 of a previous statement. If we see something here besides a
567 space or zero, it must be a bad continuation line. */
569 c = gfc_next_char_literal (0);
573 if (c != ' ' && c!= '0')
575 gfc_buffer_error (0);
576 gfc_error ("Bad continuation line at %C");
580 /* Now that we've taken care of the statement label columns, we have
581 to make sure that the first nonblank character is not a '!'. If
582 it is, the rest of the line is a comment. */
586 loc = gfc_current_locus;
587 c = gfc_next_char_literal (0);
589 while (gfc_is_whitespace (c));
593 gfc_current_locus = loc;
595 if (gfc_match_eos () == MATCH_YES)
598 /* At this point, we've got a nonblank statement to parse. */
599 return decode_statement ();
603 gfc_warning ("Ignoring statement label in empty statement at %C");
609 /* Return the next non-ST_NONE statement to the caller. We also worry
610 about including files and the ends of include files at this stage. */
613 next_statement (void)
617 gfc_new_block = NULL;
621 gfc_statement_label = NULL;
622 gfc_buffer_error (1);
626 if (gfc_option.warn_line_truncation
627 && gfc_current_locus.lb
628 && gfc_current_locus.lb->truncated)
629 gfc_warning_now ("Line truncated at %C");
634 gfc_skip_comments ();
643 (gfc_current_form == FORM_FIXED) ? next_fixed () : next_free ();
649 gfc_buffer_error (0);
652 check_statement_label (st);
658 /****************************** Parser ***********************************/
660 /* The parser subroutines are of type 'try' that fail if the file ends
663 /* Macros that expand to case-labels for various classes of
664 statements. Start with executable statements that directly do
667 #define case_executable case ST_ALLOCATE: case ST_BACKSPACE: case ST_CALL: \
668 case ST_CLOSE: case ST_CONTINUE: case ST_DEALLOCATE: case ST_END_FILE: \
669 case ST_GOTO: case ST_INQUIRE: case ST_NULLIFY: case ST_OPEN: \
670 case ST_READ: case ST_RETURN: case ST_REWIND: case ST_SIMPLE_IF: \
671 case ST_PAUSE: case ST_STOP: case ST_WRITE: case ST_ASSIGNMENT: \
672 case ST_POINTER_ASSIGNMENT: case ST_EXIT: case ST_CYCLE: \
673 case ST_ARITHMETIC_IF: case ST_WHERE: case ST_FORALL: \
674 case ST_LABEL_ASSIGNMENT: case ST_FLUSH: case ST_OMP_FLUSH: \
677 /* Statements that mark other executable statements. */
679 #define case_exec_markers case ST_DO: case ST_FORALL_BLOCK: case ST_IF_BLOCK: \
680 case ST_WHERE_BLOCK: case ST_SELECT_CASE: case ST_OMP_PARALLEL: \
681 case ST_OMP_PARALLEL_SECTIONS: case ST_OMP_SECTIONS: case ST_OMP_ORDERED: \
682 case ST_OMP_CRITICAL: case ST_OMP_MASTER: case ST_OMP_SINGLE: \
683 case ST_OMP_DO: case ST_OMP_PARALLEL_DO: case ST_OMP_ATOMIC: \
684 case ST_OMP_WORKSHARE: case ST_OMP_PARALLEL_WORKSHARE
686 /* Declaration statements */
688 #define case_decl case ST_ATTR_DECL: case ST_COMMON: case ST_DATA_DECL: \
689 case ST_EQUIVALENCE: case ST_NAMELIST: case ST_STATEMENT_FUNCTION: \
690 case ST_TYPE: case ST_INTERFACE: case ST_OMP_THREADPRIVATE
692 /* Block end statements. Errors associated with interchanging these
693 are detected in gfc_match_end(). */
695 #define case_end case ST_END_BLOCK_DATA: case ST_END_FUNCTION: \
696 case ST_END_PROGRAM: case ST_END_SUBROUTINE
699 /* Push a new state onto the stack. */
702 push_state (gfc_state_data * p, gfc_compile_state new_state, gfc_symbol * sym)
705 p->state = new_state;
706 p->previous = gfc_state_stack;
708 p->head = p->tail = NULL;
709 p->do_variable = NULL;
715 /* Pop the current state. */
721 gfc_state_stack = gfc_state_stack->previous;
725 /* Try to find the given state in the state stack. */
728 gfc_find_state (gfc_compile_state state)
732 for (p = gfc_state_stack; p; p = p->previous)
733 if (p->state == state)
736 return (p == NULL) ? FAILURE : SUCCESS;
740 /* Starts a new level in the statement list. */
743 new_level (gfc_code * q)
747 p = q->block = gfc_get_code ();
749 gfc_state_stack->head = gfc_state_stack->tail = p;
755 /* Add the current new_st code structure and adds it to the current
756 program unit. As a side-effect, it zeroes the new_st. */
766 p->loc = gfc_current_locus;
768 if (gfc_state_stack->head == NULL)
769 gfc_state_stack->head = p;
771 gfc_state_stack->tail->next = p;
773 while (p->next != NULL)
776 gfc_state_stack->tail = p;
784 /* Frees everything associated with the current statement. */
787 undo_new_statement (void)
789 gfc_free_statements (new_st.block);
790 gfc_free_statements (new_st.next);
791 gfc_free_statement (&new_st);
796 /* If the current statement has a statement label, make sure that it
797 is allowed to, or should have one. */
800 check_statement_label (gfc_statement st)
804 if (gfc_statement_label == NULL)
807 gfc_error ("FORMAT statement at %L does not have a statement label",
815 case ST_END_FUNCTION:
816 case ST_END_SUBROUTINE:
822 type = ST_LABEL_TARGET;
826 type = ST_LABEL_FORMAT;
829 /* Statement labels are not restricted from appearing on a
830 particular line. However, there are plenty of situations
831 where the resulting label can't be referenced. */
834 type = ST_LABEL_BAD_TARGET;
838 gfc_define_st_label (gfc_statement_label, type, &label_locus);
840 new_st.here = gfc_statement_label;
844 /* Figures out what the enclosing program unit is. This will be a
845 function, subroutine, program, block data or module. */
848 gfc_enclosing_unit (gfc_compile_state * result)
852 for (p = gfc_state_stack; p; p = p->previous)
853 if (p->state == COMP_FUNCTION || p->state == COMP_SUBROUTINE
854 || p->state == COMP_MODULE || p->state == COMP_BLOCK_DATA
855 || p->state == COMP_PROGRAM)
864 *result = COMP_PROGRAM;
869 /* Translate a statement enum to a string. */
872 gfc_ascii_statement (gfc_statement st)
878 case ST_ARITHMETIC_IF:
879 p = _("arithmetic IF");
885 p = _("attribute declaration");
915 p = _("data declaration");
923 case ST_DERIVED_DECL:
924 p = _("derived type declaration");
938 case ST_END_BLOCK_DATA:
939 p = "END BLOCK DATA";
950 case ST_END_FUNCTION:
956 case ST_END_INTERFACE:
968 case ST_END_SUBROUTINE:
969 p = "END SUBROUTINE";
989 case ST_FORALL_BLOCK: /* Fall through */
1008 case ST_IMPLICIT_NONE:
1009 p = "IMPLICIT NONE";
1011 case ST_IMPLIED_ENDDO:
1012 p = _("implied END DO");
1035 case ST_MODULE_PROC:
1036 p = "MODULE PROCEDURE";
1071 case ST_WHERE_BLOCK: /* Fall through */
1079 p = _("assignment");
1081 case ST_POINTER_ASSIGNMENT:
1082 p = _("pointer assignment");
1084 case ST_SELECT_CASE:
1093 case ST_STATEMENT_FUNCTION:
1094 p = "STATEMENT FUNCTION";
1096 case ST_LABEL_ASSIGNMENT:
1097 p = "LABEL ASSIGNMENT";
1100 p = "ENUM DEFINITION";
1103 p = "ENUMERATOR DEFINITION";
1111 case ST_OMP_BARRIER:
1112 p = "!$OMP BARRIER";
1114 case ST_OMP_CRITICAL:
1115 p = "!$OMP CRITICAL";
1120 case ST_OMP_END_CRITICAL:
1121 p = "!$OMP END CRITICAL";
1126 case ST_OMP_END_MASTER:
1127 p = "!$OMP END MASTER";
1129 case ST_OMP_END_ORDERED:
1130 p = "!$OMP END ORDERED";
1132 case ST_OMP_END_PARALLEL:
1133 p = "!$OMP END PARALLEL";
1135 case ST_OMP_END_PARALLEL_DO:
1136 p = "!$OMP END PARALLEL DO";
1138 case ST_OMP_END_PARALLEL_SECTIONS:
1139 p = "!$OMP END PARALLEL SECTIONS";
1141 case ST_OMP_END_PARALLEL_WORKSHARE:
1142 p = "!$OMP END PARALLEL WORKSHARE";
1144 case ST_OMP_END_SECTIONS:
1145 p = "!$OMP END SECTIONS";
1147 case ST_OMP_END_SINGLE:
1148 p = "!$OMP END SINGLE";
1150 case ST_OMP_END_WORKSHARE:
1151 p = "!$OMP END WORKSHARE";
1159 case ST_OMP_ORDERED:
1160 p = "!$OMP ORDERED";
1162 case ST_OMP_PARALLEL:
1163 p = "!$OMP PARALLEL";
1165 case ST_OMP_PARALLEL_DO:
1166 p = "!$OMP PARALLEL DO";
1168 case ST_OMP_PARALLEL_SECTIONS:
1169 p = "!$OMP PARALLEL SECTIONS";
1171 case ST_OMP_PARALLEL_WORKSHARE:
1172 p = "!$OMP PARALLEL WORKSHARE";
1174 case ST_OMP_SECTIONS:
1175 p = "!$OMP SECTIONS";
1177 case ST_OMP_SECTION:
1178 p = "!$OMP SECTION";
1183 case ST_OMP_THREADPRIVATE:
1184 p = "!$OMP THREADPRIVATE";
1186 case ST_OMP_WORKSHARE:
1187 p = "!$OMP WORKSHARE";
1190 gfc_internal_error ("gfc_ascii_statement(): Bad statement code");
1197 /* Create a symbol for the main program and assign it to ns->proc_name. */
1200 main_program_symbol (gfc_namespace * ns)
1202 gfc_symbol *main_program;
1203 symbol_attribute attr;
1205 gfc_get_symbol ("MAIN__", ns, &main_program);
1206 gfc_clear_attr (&attr);
1207 attr.flavor = FL_PROCEDURE;
1208 attr.proc = PROC_UNKNOWN;
1209 attr.subroutine = 1;
1210 attr.access = ACCESS_PUBLIC;
1211 attr.is_main_program = 1;
1212 main_program->attr = attr;
1213 main_program->declared_at = gfc_current_locus;
1214 ns->proc_name = main_program;
1215 gfc_commit_symbols ();
1219 /* Do whatever is necessary to accept the last statement. */
1222 accept_statement (gfc_statement st)
1231 case ST_IMPLICIT_NONE:
1232 gfc_set_implicit_none ();
1241 gfc_current_ns->proc_name = gfc_new_block;
1244 /* If the statement is the end of a block, lay down a special code
1245 that allows a branch to the end of the block from within the
1250 if (gfc_statement_label != NULL)
1252 new_st.op = EXEC_NOP;
1258 /* The end-of-program unit statements do not get the special
1259 marker and require a statement of some sort if they are a
1262 case ST_END_PROGRAM:
1263 case ST_END_FUNCTION:
1264 case ST_END_SUBROUTINE:
1265 if (gfc_statement_label != NULL)
1267 new_st.op = EXEC_RETURN;
1283 gfc_commit_symbols ();
1284 gfc_warning_check ();
1285 gfc_clear_new_st ();
1289 /* Undo anything tentative that has been built for the current
1293 reject_statement (void)
1295 gfc_new_block = NULL;
1296 gfc_undo_symbols ();
1297 gfc_clear_warning ();
1298 undo_new_statement ();
1302 /* Generic complaint about an out of order statement. We also do
1303 whatever is necessary to clean up. */
1306 unexpected_statement (gfc_statement st)
1309 gfc_error ("Unexpected %s statement at %C", gfc_ascii_statement (st));
1311 reject_statement ();
1315 /* Given the next statement seen by the matcher, make sure that it is
1316 in proper order with the last. This subroutine is initialized by
1317 calling it with an argument of ST_NONE. If there is a problem, we
1318 issue an error and return FAILURE. Otherwise we return SUCCESS.
1320 Individual parsers need to verify that the statements seen are
1321 valid before calling here, ie ENTRY statements are not allowed in
1322 INTERFACE blocks. The following diagram is taken from the standard:
1324 +---------------------------------------+
1325 | program subroutine function module |
1326 +---------------------------------------+
1328 |---------------------------------------+
1330 | +-----------+------------------+
1331 | | parameter | implicit |
1332 | +-----------+------------------+
1333 | format | | derived type |
1334 | entry | parameter | interface |
1335 | | data | specification |
1336 | | | statement func |
1337 | +-----------+------------------+
1338 | | data | executable |
1339 +--------+-----------+------------------+
1341 +---------------------------------------+
1342 | internal module/subprogram |
1343 +---------------------------------------+
1345 +---------------------------------------+
1352 { ORDER_START, ORDER_USE, ORDER_IMPLICIT_NONE, ORDER_IMPLICIT,
1353 ORDER_SPEC, ORDER_EXEC
1356 gfc_statement last_statement;
1362 verify_st_order (st_state * p, gfc_statement st)
1368 p->state = ORDER_START;
1372 if (p->state > ORDER_USE)
1374 p->state = ORDER_USE;
1377 case ST_IMPLICIT_NONE:
1378 if (p->state > ORDER_IMPLICIT_NONE)
1381 /* The '>' sign cannot be a '>=', because a FORMAT or ENTRY
1382 statement disqualifies a USE but not an IMPLICIT NONE.
1383 Duplicate IMPLICIT NONEs are caught when the implicit types
1386 p->state = ORDER_IMPLICIT_NONE;
1390 if (p->state > ORDER_IMPLICIT)
1392 p->state = ORDER_IMPLICIT;
1397 if (p->state < ORDER_IMPLICIT_NONE)
1398 p->state = ORDER_IMPLICIT_NONE;
1402 if (p->state >= ORDER_EXEC)
1404 if (p->state < ORDER_IMPLICIT)
1405 p->state = ORDER_IMPLICIT;
1409 if (p->state < ORDER_SPEC)
1410 p->state = ORDER_SPEC;
1415 case ST_DERIVED_DECL:
1417 if (p->state >= ORDER_EXEC)
1419 if (p->state < ORDER_SPEC)
1420 p->state = ORDER_SPEC;
1425 if (p->state < ORDER_EXEC)
1426 p->state = ORDER_EXEC;
1431 ("Unexpected %s statement in verify_st_order() at %C",
1432 gfc_ascii_statement (st));
1435 /* All is well, record the statement in case we need it next time. */
1436 p->where = gfc_current_locus;
1437 p->last_statement = st;
1441 gfc_error ("%s statement at %C cannot follow %s statement at %L",
1442 gfc_ascii_statement (st),
1443 gfc_ascii_statement (p->last_statement), &p->where);
1449 /* Handle an unexpected end of file. This is a show-stopper... */
1451 static void unexpected_eof (void) ATTRIBUTE_NORETURN;
1454 unexpected_eof (void)
1458 gfc_error ("Unexpected end of file in '%s'", gfc_source_file);
1460 /* Memory cleanup. Move to "second to last". */
1461 for (p = gfc_state_stack; p && p->previous && p->previous->previous;
1464 gfc_current_ns->code = (p && p->previous) ? p->head : NULL;
1467 longjmp (eof_buf, 1);
1471 /* Parse a derived type. */
1474 parse_derived (void)
1476 int compiling_type, seen_private, seen_sequence, seen_component, error_flag;
1483 accept_statement (ST_DERIVED_DECL);
1484 push_state (&s, COMP_DERIVED, gfc_new_block);
1486 gfc_new_block->component_access = ACCESS_PUBLIC;
1493 while (compiling_type)
1495 st = next_statement ();
1502 accept_statement (st);
1509 if (!seen_component)
1511 gfc_error ("Derived type definition at %C has no components");
1515 accept_statement (ST_END_TYPE);
1519 if (gfc_find_state (COMP_MODULE) == FAILURE)
1522 ("PRIVATE statement in TYPE at %C must be inside a MODULE");
1529 gfc_error ("PRIVATE statement at %C must precede "
1530 "structure components");
1537 gfc_error ("Duplicate PRIVATE statement at %C");
1541 s.sym->component_access = ACCESS_PRIVATE;
1542 accept_statement (ST_PRIVATE);
1549 gfc_error ("SEQUENCE statement at %C must precede "
1550 "structure components");
1555 if (gfc_current_block ()->attr.sequence)
1556 gfc_warning ("SEQUENCE attribute at %C already specified in "
1561 gfc_error ("Duplicate SEQUENCE statement at %C");
1566 gfc_add_sequence (&gfc_current_block ()->attr,
1567 gfc_current_block ()->name, NULL);
1571 unexpected_statement (st);
1576 /* Sanity checks on the structure. If the structure has the
1577 SEQUENCE attribute, then all component structures must also have
1579 if (error_flag == 0 && gfc_current_block ()->attr.sequence)
1580 for (c = gfc_current_block ()->components; c; c = c->next)
1582 if (c->ts.type == BT_DERIVED && c->ts.derived->attr.sequence == 0)
1585 ("Component %s of SEQUENCE type declared at %C does not "
1586 "have the SEQUENCE attribute", c->ts.derived->name);
1595 /* Parse an ENUM. */
1604 int seen_enumerator = 0;
1608 push_state (&s, COMP_ENUM, gfc_new_block);
1612 while (compiling_enum)
1614 st = next_statement ();
1622 seen_enumerator = 1;
1623 accept_statement (st);
1628 if (!seen_enumerator)
1630 gfc_error ("ENUM declaration at %C has no ENUMERATORS");
1633 accept_statement (st);
1637 gfc_free_enum_history ();
1638 unexpected_statement (st);
1645 /* Parse an interface. We must be able to deal with the possibility
1646 of recursive interfaces. The parse_spec() subroutine is mutually
1647 recursive with parse_interface(). */
1649 static gfc_statement parse_spec (gfc_statement);
1652 parse_interface (void)
1654 gfc_compile_state new_state, current_state;
1655 gfc_symbol *prog_unit, *sym;
1656 gfc_interface_info save;
1657 gfc_state_data s1, s2;
1660 accept_statement (ST_INTERFACE);
1662 current_interface.ns = gfc_current_ns;
1663 save = current_interface;
1665 sym = (current_interface.type == INTERFACE_GENERIC
1666 || current_interface.type == INTERFACE_USER_OP) ? gfc_new_block : NULL;
1668 push_state (&s1, COMP_INTERFACE, sym);
1669 current_state = COMP_NONE;
1672 gfc_current_ns = gfc_get_namespace (current_interface.ns, 0);
1674 st = next_statement ();
1681 new_state = COMP_SUBROUTINE;
1682 gfc_add_explicit_interface (gfc_new_block, IFSRC_IFBODY,
1683 gfc_new_block->formal, NULL);
1687 new_state = COMP_FUNCTION;
1688 gfc_add_explicit_interface (gfc_new_block, IFSRC_IFBODY,
1689 gfc_new_block->formal, NULL);
1692 case ST_MODULE_PROC: /* The module procedure matcher makes
1693 sure the context is correct. */
1694 accept_statement (st);
1695 gfc_free_namespace (gfc_current_ns);
1698 case ST_END_INTERFACE:
1699 gfc_free_namespace (gfc_current_ns);
1700 gfc_current_ns = current_interface.ns;
1704 gfc_error ("Unexpected %s statement in INTERFACE block at %C",
1705 gfc_ascii_statement (st));
1706 reject_statement ();
1707 gfc_free_namespace (gfc_current_ns);
1712 /* Make sure that a generic interface has only subroutines or
1713 functions and that the generic name has the right attribute. */
1714 if (current_interface.type == INTERFACE_GENERIC)
1716 if (current_state == COMP_NONE)
1718 if (new_state == COMP_FUNCTION)
1719 gfc_add_function (&sym->attr, sym->name, NULL);
1720 else if (new_state == COMP_SUBROUTINE)
1721 gfc_add_subroutine (&sym->attr, sym->name, NULL);
1723 current_state = new_state;
1727 if (new_state != current_state)
1729 if (new_state == COMP_SUBROUTINE)
1731 ("SUBROUTINE at %C does not belong in a generic function "
1734 if (new_state == COMP_FUNCTION)
1736 ("FUNCTION at %C does not belong in a generic subroutine "
1742 push_state (&s2, new_state, gfc_new_block);
1743 accept_statement (st);
1744 prog_unit = gfc_new_block;
1745 prog_unit->formal_ns = gfc_current_ns;
1748 /* Read data declaration statements. */
1749 st = parse_spec (ST_NONE);
1751 if (st != ST_END_SUBROUTINE && st != ST_END_FUNCTION)
1753 gfc_error ("Unexpected %s statement at %C in INTERFACE body",
1754 gfc_ascii_statement (st));
1755 reject_statement ();
1759 current_interface = save;
1760 gfc_add_interface (prog_unit);
1770 /* Parse a set of specification statements. Returns the statement
1771 that doesn't fit. */
1773 static gfc_statement
1774 parse_spec (gfc_statement st)
1778 verify_st_order (&ss, ST_NONE);
1780 st = next_statement ();
1790 case ST_DATA: /* Not allowed in interfaces */
1791 if (gfc_current_state () == COMP_INTERFACE)
1797 case ST_IMPLICIT_NONE:
1802 case ST_DERIVED_DECL:
1804 if (verify_st_order (&ss, st) == FAILURE)
1806 reject_statement ();
1807 st = next_statement ();
1817 case ST_DERIVED_DECL:
1823 if (gfc_current_state () != COMP_MODULE)
1825 gfc_error ("%s statement must appear in a MODULE",
1826 gfc_ascii_statement (st));
1830 if (gfc_current_ns->default_access != ACCESS_UNKNOWN)
1832 gfc_error ("%s statement at %C follows another accessibility "
1833 "specification", gfc_ascii_statement (st));
1837 gfc_current_ns->default_access = (st == ST_PUBLIC)
1838 ? ACCESS_PUBLIC : ACCESS_PRIVATE;
1846 accept_statement (st);
1847 st = next_statement ();
1851 accept_statement (st);
1853 st = next_statement ();
1864 /* Parse a WHERE block, (not a simple WHERE statement). */
1867 parse_where_block (void)
1869 int seen_empty_else;
1874 accept_statement (ST_WHERE_BLOCK);
1875 top = gfc_state_stack->tail;
1877 push_state (&s, COMP_WHERE, gfc_new_block);
1879 d = add_statement ();
1880 d->expr = top->expr;
1886 seen_empty_else = 0;
1890 st = next_statement ();
1896 case ST_WHERE_BLOCK:
1897 parse_where_block ();
1902 accept_statement (st);
1906 if (seen_empty_else)
1909 ("ELSEWHERE statement at %C follows previous unmasked "
1914 if (new_st.expr == NULL)
1915 seen_empty_else = 1;
1917 d = new_level (gfc_state_stack->head);
1919 d->expr = new_st.expr;
1921 accept_statement (st);
1926 accept_statement (st);
1930 gfc_error ("Unexpected %s statement in WHERE block at %C",
1931 gfc_ascii_statement (st));
1932 reject_statement ();
1937 while (st != ST_END_WHERE);
1943 /* Parse a FORALL block (not a simple FORALL statement). */
1946 parse_forall_block (void)
1952 accept_statement (ST_FORALL_BLOCK);
1953 top = gfc_state_stack->tail;
1955 push_state (&s, COMP_FORALL, gfc_new_block);
1957 d = add_statement ();
1958 d->op = EXEC_FORALL;
1963 st = next_statement ();
1968 case ST_POINTER_ASSIGNMENT:
1971 accept_statement (st);
1974 case ST_WHERE_BLOCK:
1975 parse_where_block ();
1978 case ST_FORALL_BLOCK:
1979 parse_forall_block ();
1983 accept_statement (st);
1990 gfc_error ("Unexpected %s statement in FORALL block at %C",
1991 gfc_ascii_statement (st));
1993 reject_statement ();
1997 while (st != ST_END_FORALL);
2003 static gfc_statement parse_executable (gfc_statement);
2005 /* parse the statements of an IF-THEN-ELSEIF-ELSE-ENDIF block. */
2008 parse_if_block (void)
2017 accept_statement (ST_IF_BLOCK);
2019 top = gfc_state_stack->tail;
2020 push_state (&s, COMP_IF, gfc_new_block);
2022 new_st.op = EXEC_IF;
2023 d = add_statement ();
2025 d->expr = top->expr;
2031 st = parse_executable (ST_NONE);
2042 ("ELSE IF statement at %C cannot follow ELSE statement at %L",
2045 reject_statement ();
2049 d = new_level (gfc_state_stack->head);
2051 d->expr = new_st.expr;
2053 accept_statement (st);
2060 gfc_error ("Duplicate ELSE statements at %L and %C",
2062 reject_statement ();
2067 else_locus = gfc_current_locus;
2069 d = new_level (gfc_state_stack->head);
2072 accept_statement (st);
2080 unexpected_statement (st);
2084 while (st != ST_ENDIF);
2087 accept_statement (st);
2091 /* Parse a SELECT block. */
2094 parse_select_block (void)
2100 accept_statement (ST_SELECT_CASE);
2102 cp = gfc_state_stack->tail;
2103 push_state (&s, COMP_SELECT, gfc_new_block);
2105 /* Make sure that the next statement is a CASE or END SELECT. */
2108 st = next_statement ();
2111 if (st == ST_END_SELECT)
2113 /* Empty SELECT CASE is OK. */
2114 accept_statement (st);
2122 ("Expected a CASE or END SELECT statement following SELECT CASE "
2125 reject_statement ();
2128 /* At this point, we're got a nonempty select block. */
2129 cp = new_level (cp);
2132 accept_statement (st);
2136 st = parse_executable (ST_NONE);
2143 cp = new_level (gfc_state_stack->head);
2145 gfc_clear_new_st ();
2147 accept_statement (st);
2153 /* Can't have an executable statement because of
2154 parse_executable(). */
2156 unexpected_statement (st);
2160 while (st != ST_END_SELECT);
2163 accept_statement (st);
2167 /* Given a symbol, make sure it is not an iteration variable for a DO
2168 statement. This subroutine is called when the symbol is seen in a
2169 context that causes it to become redefined. If the symbol is an
2170 iterator, we generate an error message and return nonzero. */
2173 gfc_check_do_variable (gfc_symtree *st)
2177 for (s=gfc_state_stack; s; s = s->previous)
2178 if (s->do_variable == st)
2180 gfc_error_now("Variable '%s' at %C cannot be redefined inside "
2181 "loop beginning at %L", st->name, &s->head->loc);
2189 /* Checks to see if the current statement label closes an enddo.
2190 Returns 0 if not, 1 if closes an ENDDO correctly, or 2 (and issues
2191 an error) if it incorrectly closes an ENDDO. */
2194 check_do_closure (void)
2198 if (gfc_statement_label == NULL)
2201 for (p = gfc_state_stack; p; p = p->previous)
2202 if (p->state == COMP_DO)
2206 return 0; /* No loops to close */
2208 if (p->ext.end_do_label == gfc_statement_label)
2211 if (p == gfc_state_stack)
2215 ("End of nonblock DO statement at %C is within another block");
2219 /* At this point, the label doesn't terminate the innermost loop.
2220 Make sure it doesn't terminate another one. */
2221 for (; p; p = p->previous)
2222 if (p->state == COMP_DO && p->ext.end_do_label == gfc_statement_label)
2224 gfc_error ("End of nonblock DO statement at %C is interwoven "
2225 "with another DO loop");
2233 /* Parse a DO loop. Note that the ST_CYCLE and ST_EXIT statements are
2234 handled inside of parse_executable(), because they aren't really
2238 parse_do_block (void)
2245 s.ext.end_do_label = new_st.label;
2247 if (new_st.ext.iterator != NULL)
2248 stree = new_st.ext.iterator->var->symtree;
2252 accept_statement (ST_DO);
2254 top = gfc_state_stack->tail;
2255 push_state (&s, COMP_DO, gfc_new_block);
2257 s.do_variable = stree;
2259 top->block = new_level (top);
2260 top->block->op = EXEC_DO;
2263 st = parse_executable (ST_NONE);
2271 if (s.ext.end_do_label != NULL
2272 && s.ext.end_do_label != gfc_statement_label)
2274 ("Statement label in ENDDO at %C doesn't match DO label");
2276 if (gfc_statement_label != NULL)
2278 new_st.op = EXEC_NOP;
2283 case ST_IMPLIED_ENDDO:
2287 unexpected_statement (st);
2292 accept_statement (st);
2296 /* Parse the statements of OpenMP do/parallel do. */
2298 static gfc_statement
2299 parse_omp_do (gfc_statement omp_st)
2305 accept_statement (omp_st);
2307 cp = gfc_state_stack->tail;
2308 push_state (&s, COMP_OMP_STRUCTURED_BLOCK, NULL);
2309 np = new_level (cp);
2315 st = next_statement ();
2318 else if (st == ST_DO)
2321 unexpected_statement (st);
2325 if (gfc_statement_label != NULL
2326 && gfc_state_stack->previous != NULL
2327 && gfc_state_stack->previous->state == COMP_DO
2328 && gfc_state_stack->previous->ext.end_do_label == gfc_statement_label)
2336 there should be no !$OMP END DO. */
2338 return ST_IMPLIED_ENDDO;
2341 check_do_closure ();
2344 st = next_statement ();
2345 if (st == (omp_st == ST_OMP_DO ? ST_OMP_END_DO : ST_OMP_END_PARALLEL_DO))
2347 if (new_st.op == EXEC_OMP_END_NOWAIT)
2348 cp->ext.omp_clauses->nowait |= new_st.ext.omp_bool;
2350 gcc_assert (new_st.op == EXEC_NOP);
2351 gfc_clear_new_st ();
2352 gfc_commit_symbols ();
2353 gfc_warning_check ();
2354 st = next_statement ();
2360 /* Parse the statements of OpenMP atomic directive. */
2363 parse_omp_atomic (void)
2369 accept_statement (ST_OMP_ATOMIC);
2371 cp = gfc_state_stack->tail;
2372 push_state (&s, COMP_OMP_STRUCTURED_BLOCK, NULL);
2373 np = new_level (cp);
2379 st = next_statement ();
2382 else if (st == ST_ASSIGNMENT)
2385 unexpected_statement (st);
2388 accept_statement (st);
2394 /* Parse the statements of an OpenMP structured block. */
2397 parse_omp_structured_block (gfc_statement omp_st, bool workshare_stmts_only)
2399 gfc_statement st, omp_end_st;
2403 accept_statement (omp_st);
2405 cp = gfc_state_stack->tail;
2406 push_state (&s, COMP_OMP_STRUCTURED_BLOCK, NULL);
2407 np = new_level (cp);
2413 case ST_OMP_PARALLEL:
2414 omp_end_st = ST_OMP_END_PARALLEL;
2416 case ST_OMP_PARALLEL_SECTIONS:
2417 omp_end_st = ST_OMP_END_PARALLEL_SECTIONS;
2419 case ST_OMP_SECTIONS:
2420 omp_end_st = ST_OMP_END_SECTIONS;
2422 case ST_OMP_ORDERED:
2423 omp_end_st = ST_OMP_END_ORDERED;
2425 case ST_OMP_CRITICAL:
2426 omp_end_st = ST_OMP_END_CRITICAL;
2429 omp_end_st = ST_OMP_END_MASTER;
2432 omp_end_st = ST_OMP_END_SINGLE;
2434 case ST_OMP_WORKSHARE:
2435 omp_end_st = ST_OMP_END_WORKSHARE;
2437 case ST_OMP_PARALLEL_WORKSHARE:
2438 omp_end_st = ST_OMP_END_PARALLEL_WORKSHARE;
2446 if (workshare_stmts_only)
2448 /* Inside of !$omp workshare, only
2451 where statements and constructs
2452 forall statements and constructs
2456 are allowed. For !$omp critical these
2457 restrictions apply recursively. */
2460 st = next_statement ();
2471 accept_statement (st);
2474 case ST_WHERE_BLOCK:
2475 parse_where_block ();
2478 case ST_FORALL_BLOCK:
2479 parse_forall_block ();
2482 case ST_OMP_PARALLEL:
2483 case ST_OMP_PARALLEL_SECTIONS:
2484 parse_omp_structured_block (st, false);
2487 case ST_OMP_PARALLEL_WORKSHARE:
2488 case ST_OMP_CRITICAL:
2489 parse_omp_structured_block (st, true);
2492 case ST_OMP_PARALLEL_DO:
2493 st = parse_omp_do (st);
2497 parse_omp_atomic ();
2508 st = next_statement ();
2512 st = parse_executable (ST_NONE);
2515 else if (st == ST_OMP_SECTION
2516 && (omp_st == ST_OMP_SECTIONS
2517 || omp_st == ST_OMP_PARALLEL_SECTIONS))
2519 np = new_level (np);
2523 else if (st != omp_end_st)
2524 unexpected_statement (st);
2526 while (st != omp_end_st);
2530 case EXEC_OMP_END_NOWAIT:
2531 cp->ext.omp_clauses->nowait |= new_st.ext.omp_bool;
2533 case EXEC_OMP_CRITICAL:
2534 if (((cp->ext.omp_name == NULL) ^ (new_st.ext.omp_name == NULL))
2535 || (new_st.ext.omp_name != NULL
2536 && strcmp (cp->ext.omp_name, new_st.ext.omp_name) != 0))
2537 gfc_error ("Name after !$omp critical and !$omp end critical does"
2538 " not match at %C");
2539 gfc_free ((char *) new_st.ext.omp_name);
2541 case EXEC_OMP_END_SINGLE:
2542 cp->ext.omp_clauses->lists[OMP_LIST_COPYPRIVATE]
2543 = new_st.ext.omp_clauses->lists[OMP_LIST_COPYPRIVATE];
2544 new_st.ext.omp_clauses->lists[OMP_LIST_COPYPRIVATE] = NULL;
2545 gfc_free_omp_clauses (new_st.ext.omp_clauses);
2553 gfc_clear_new_st ();
2554 gfc_commit_symbols ();
2555 gfc_warning_check ();
2560 /* Accept a series of executable statements. We return the first
2561 statement that doesn't fit to the caller. Any block statements are
2562 passed on to the correct handler, which usually passes the buck
2565 static gfc_statement
2566 parse_executable (gfc_statement st)
2571 st = next_statement ();
2575 close_flag = check_do_closure ();
2580 case ST_END_PROGRAM:
2583 case ST_END_FUNCTION:
2587 case ST_END_SUBROUTINE:
2592 case ST_SELECT_CASE:
2594 ("%s statement at %C cannot terminate a non-block DO loop",
2595 gfc_ascii_statement (st));
2611 accept_statement (st);
2612 if (close_flag == 1)
2613 return ST_IMPLIED_ENDDO;
2620 case ST_SELECT_CASE:
2621 parse_select_block ();
2626 if (check_do_closure () == 1)
2627 return ST_IMPLIED_ENDDO;
2630 case ST_WHERE_BLOCK:
2631 parse_where_block ();
2634 case ST_FORALL_BLOCK:
2635 parse_forall_block ();
2638 case ST_OMP_PARALLEL:
2639 case ST_OMP_PARALLEL_SECTIONS:
2640 case ST_OMP_SECTIONS:
2641 case ST_OMP_ORDERED:
2642 case ST_OMP_CRITICAL:
2645 parse_omp_structured_block (st, false);
2648 case ST_OMP_WORKSHARE:
2649 case ST_OMP_PARALLEL_WORKSHARE:
2650 parse_omp_structured_block (st, true);
2654 case ST_OMP_PARALLEL_DO:
2655 st = parse_omp_do (st);
2656 if (st == ST_IMPLIED_ENDDO)
2661 parse_omp_atomic ();
2668 st = next_statement ();
2673 /* Parse a series of contained program units. */
2675 static void parse_progunit (gfc_statement);
2678 /* Fix the symbols for sibling functions. These are incorrectly added to
2679 the child namespace as the parser didn't know about this procedure. */
2682 gfc_fixup_sibling_symbols (gfc_symbol * sym, gfc_namespace * siblings)
2686 gfc_symbol *old_sym;
2688 sym->attr.referenced = 1;
2689 for (ns = siblings; ns; ns = ns->sibling)
2691 gfc_find_sym_tree (sym->name, ns, 0, &st);
2695 old_sym = st->n.sym;
2696 if ((old_sym->attr.flavor == FL_PROCEDURE
2697 || old_sym->ts.type == BT_UNKNOWN)
2698 && old_sym->ns == ns
2699 && ! old_sym->attr.contained)
2701 /* Replace it with the symbol from the parent namespace. */
2705 /* Free the old (local) symbol. */
2707 if (old_sym->refs == 0)
2708 gfc_free_symbol (old_sym);
2711 /* Do the same for any contained procedures. */
2712 gfc_fixup_sibling_symbols (sym, ns->contained);
2717 parse_contained (int module)
2719 gfc_namespace *ns, *parent_ns;
2720 gfc_state_data s1, s2;
2725 push_state (&s1, COMP_CONTAINS, NULL);
2726 parent_ns = gfc_current_ns;
2730 gfc_current_ns = gfc_get_namespace (parent_ns, 1);
2732 gfc_current_ns->sibling = parent_ns->contained;
2733 parent_ns->contained = gfc_current_ns;
2735 st = next_statement ();
2744 accept_statement (st);
2747 (st == ST_FUNCTION) ? COMP_FUNCTION : COMP_SUBROUTINE,
2750 /* For internal procedures, create/update the symbol in the
2751 parent namespace. */
2755 if (gfc_get_symbol (gfc_new_block->name, parent_ns, &sym))
2757 ("Contained procedure '%s' at %C is already ambiguous",
2758 gfc_new_block->name);
2761 if (gfc_add_procedure (&sym->attr, PROC_INTERNAL, sym->name,
2762 &gfc_new_block->declared_at) ==
2765 if (st == ST_FUNCTION)
2766 gfc_add_function (&sym->attr, sym->name,
2767 &gfc_new_block->declared_at);
2769 gfc_add_subroutine (&sym->attr, sym->name,
2770 &gfc_new_block->declared_at);
2774 gfc_commit_symbols ();
2777 sym = gfc_new_block;
2779 /* Mark this as a contained function, so it isn't replaced
2780 by other module functions. */
2781 sym->attr.contained = 1;
2782 sym->attr.referenced = 1;
2784 parse_progunit (ST_NONE);
2786 /* Fix up any sibling functions that refer to this one. */
2787 gfc_fixup_sibling_symbols (sym, gfc_current_ns);
2788 /* Or refer to any of its alternate entry points. */
2789 for (el = gfc_current_ns->entries; el; el = el->next)
2790 gfc_fixup_sibling_symbols (el->sym, gfc_current_ns);
2792 gfc_current_ns->code = s2.head;
2793 gfc_current_ns = parent_ns;
2798 /* These statements are associated with the end of the host
2800 case ST_END_FUNCTION:
2802 case ST_END_PROGRAM:
2803 case ST_END_SUBROUTINE:
2804 accept_statement (st);
2808 gfc_error ("Unexpected %s statement in CONTAINS section at %C",
2809 gfc_ascii_statement (st));
2810 reject_statement ();
2814 while (st != ST_END_FUNCTION && st != ST_END_SUBROUTINE
2815 && st != ST_END_MODULE && st != ST_END_PROGRAM);
2817 /* The first namespace in the list is guaranteed to not have
2818 anything (worthwhile) in it. */
2820 gfc_current_ns = parent_ns;
2822 ns = gfc_current_ns->contained;
2823 gfc_current_ns->contained = ns->sibling;
2824 gfc_free_namespace (ns);
2830 /* Parse a PROGRAM, SUBROUTINE or FUNCTION unit. */
2833 parse_progunit (gfc_statement st)
2838 st = parse_spec (st);
2848 accept_statement (st);
2858 st = parse_executable (st);
2869 accept_statement (st);
2876 unexpected_statement (st);
2877 reject_statement ();
2878 st = next_statement ();
2884 for (p = gfc_state_stack; p; p = p->previous)
2885 if (p->state == COMP_CONTAINS)
2888 if (gfc_find_state (COMP_MODULE) == SUCCESS)
2893 gfc_error ("CONTAINS statement at %C is already in a contained "
2895 st = next_statement ();
2899 parse_contained (0);
2902 gfc_current_ns->code = gfc_state_stack->head;
2906 /* Come here to complain about a global symbol already in use as
2910 global_used (gfc_gsymbol *sym, locus *where)
2915 where = &gfc_current_locus;
2925 case GSYM_SUBROUTINE:
2926 name = "SUBROUTINE";
2931 case GSYM_BLOCK_DATA:
2932 name = "BLOCK DATA";
2938 gfc_internal_error ("gfc_gsymbol_type(): Bad type");
2942 gfc_error("Global name '%s' at %L is already being used as a %s at %L",
2943 sym->name, where, name, &sym->where);
2947 /* Parse a block data program unit. */
2950 parse_block_data (void)
2953 static locus blank_locus;
2954 static int blank_block=0;
2957 gfc_current_ns->proc_name = gfc_new_block;
2958 gfc_current_ns->is_block_data = 1;
2960 if (gfc_new_block == NULL)
2963 gfc_error ("Blank BLOCK DATA at %C conflicts with "
2964 "prior BLOCK DATA at %L", &blank_locus);
2968 blank_locus = gfc_current_locus;
2973 s = gfc_get_gsymbol (gfc_new_block->name);
2974 if (s->defined || (s->type != GSYM_UNKNOWN && s->type != GSYM_BLOCK_DATA))
2975 global_used(s, NULL);
2978 s->type = GSYM_BLOCK_DATA;
2979 s->where = gfc_current_locus;
2984 st = parse_spec (ST_NONE);
2986 while (st != ST_END_BLOCK_DATA)
2988 gfc_error ("Unexpected %s statement in BLOCK DATA at %C",
2989 gfc_ascii_statement (st));
2990 reject_statement ();
2991 st = next_statement ();
2996 /* Parse a module subprogram. */
3004 s = gfc_get_gsymbol (gfc_new_block->name);
3005 if (s->defined || (s->type != GSYM_UNKNOWN && s->type != GSYM_MODULE))
3006 global_used(s, NULL);
3009 s->type = GSYM_MODULE;
3010 s->where = gfc_current_locus;
3014 st = parse_spec (ST_NONE);
3023 parse_contained (1);
3027 accept_statement (st);
3031 gfc_error ("Unexpected %s statement in MODULE at %C",
3032 gfc_ascii_statement (st));
3034 reject_statement ();
3035 st = next_statement ();
3041 /* Add a procedure name to the global symbol table. */
3044 add_global_procedure (int sub)
3048 s = gfc_get_gsymbol(gfc_new_block->name);
3051 || (s->type != GSYM_UNKNOWN && s->type != (sub ? GSYM_SUBROUTINE : GSYM_FUNCTION)))
3052 global_used(s, NULL);
3055 s->type = sub ? GSYM_SUBROUTINE : GSYM_FUNCTION;
3056 s->where = gfc_current_locus;
3062 /* Add a program to the global symbol table. */
3065 add_global_program (void)
3069 if (gfc_new_block == NULL)
3071 s = gfc_get_gsymbol (gfc_new_block->name);
3073 if (s->defined || (s->type != GSYM_UNKNOWN && s->type != GSYM_PROGRAM))
3074 global_used(s, NULL);
3077 s->type = GSYM_PROGRAM;
3078 s->where = gfc_current_locus;
3084 /* Top level parser. */
3087 gfc_parse_file (void)
3089 int seen_program, errors_before, errors;
3090 gfc_state_data top, s;
3094 top.state = COMP_NONE;
3096 top.previous = NULL;
3097 top.head = top.tail = NULL;
3098 top.do_variable = NULL;
3100 gfc_state_stack = ⊤
3102 gfc_clear_new_st ();
3104 gfc_statement_label = NULL;
3106 if (setjmp (eof_buf))
3107 return FAILURE; /* Come here on unexpected EOF */
3111 /* Exit early for empty files. */
3117 st = next_statement ();
3126 goto duplicate_main;
3128 prog_locus = gfc_current_locus;
3130 push_state (&s, COMP_PROGRAM, gfc_new_block);
3131 main_program_symbol(gfc_current_ns);
3132 accept_statement (st);
3133 add_global_program ();
3134 parse_progunit (ST_NONE);
3138 add_global_procedure (1);
3139 push_state (&s, COMP_SUBROUTINE, gfc_new_block);
3140 accept_statement (st);
3141 parse_progunit (ST_NONE);
3145 add_global_procedure (0);
3146 push_state (&s, COMP_FUNCTION, gfc_new_block);
3147 accept_statement (st);
3148 parse_progunit (ST_NONE);
3152 push_state (&s, COMP_BLOCK_DATA, gfc_new_block);
3153 accept_statement (st);
3154 parse_block_data ();
3158 push_state (&s, COMP_MODULE, gfc_new_block);
3159 accept_statement (st);
3161 gfc_get_errors (NULL, &errors_before);
3165 /* Anything else starts a nameless main program block. */
3168 goto duplicate_main;
3170 prog_locus = gfc_current_locus;
3172 push_state (&s, COMP_PROGRAM, gfc_new_block);
3173 main_program_symbol(gfc_current_ns);
3174 parse_progunit (st);
3178 gfc_current_ns->code = s.head;
3180 gfc_resolve (gfc_current_ns);
3182 /* Dump the parse tree if requested. */
3183 if (gfc_option.verbose)
3184 gfc_show_namespace (gfc_current_ns);
3186 gfc_get_errors (NULL, &errors);
3187 if (s.state == COMP_MODULE)
3189 gfc_dump_module (s.sym->name, errors_before == errors);
3190 if (errors == 0 && ! gfc_option.flag_no_backend)
3191 gfc_generate_module_code (gfc_current_ns);
3195 if (errors == 0 && ! gfc_option.flag_no_backend)
3196 gfc_generate_code (gfc_current_ns);
3207 /* If we see a duplicate main program, shut down. If the second
3208 instance is an implied main program, ie data decls or executable
3209 statements, we're in for lots of errors. */
3210 gfc_error ("Two main PROGRAMs at %L and %C", &prog_locus);
3211 reject_statement ();