2 Copyright (C) 2000-2013 Free Software Foundation, Inc.
3 Contributed by Andy Vaught
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
24 #include "coretypes.h"
30 /* Current statement label. Zero means no statement label. Because new_st
31 can get wiped during statement matching, we have to keep it separate. */
33 gfc_st_label *gfc_statement_label;
35 static locus label_locus;
36 static jmp_buf eof_buf;
38 gfc_state_data *gfc_state_stack;
39 static bool last_was_use_stmt = false;
41 /* TODO: Re-order functions to kill these forward decls. */
42 static void check_statement_label (gfc_statement);
43 static void undo_new_statement (void);
44 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 /* Load symbols from all USE statements encountered in this scoping unit. */
82 gfc_error_buf old_error;
84 gfc_push_error (&old_error);
88 gfc_pop_error (&old_error);
89 gfc_commit_symbols ();
91 gfc_current_ns->old_cl_list = gfc_current_ns->cl_list;
92 gfc_current_ns->old_equiv = gfc_current_ns->equiv;
93 last_was_use_stmt = false;
97 /* Figure out what the next statement is, (mostly) regardless of
98 proper ordering. The do...while(0) is there to prevent if/else
101 #define match(keyword, subr, st) \
103 if (match_word(keyword, subr, &old_locus) == MATCH_YES) \
106 undo_new_statement (); \
110 /* This is a specialist version of decode_statement that is used
111 for the specification statements in a function, whose
112 characteristics are deferred into the specification statements.
113 eg.: INTEGER (king = mykind) foo ()
114 USE mymodule, ONLY mykind.....
115 The KIND parameter needs a return after USE or IMPORT, whereas
116 derived type declarations can occur anywhere, up the executable
117 block. ST_GET_FCN_CHARACTERISTICS is returned when we have run
118 out of the correct kind of specification statements. */
120 decode_specification_statement (void)
126 if (gfc_match_eos () == MATCH_YES)
129 old_locus = gfc_current_locus;
131 if (match_word ("use", gfc_match_use, &old_locus) == MATCH_YES)
133 last_was_use_stmt = true;
138 undo_new_statement ();
139 if (last_was_use_stmt)
143 match ("import", gfc_match_import, ST_IMPORT);
145 if (gfc_current_block ()->result->ts.type != BT_DERIVED)
148 match (NULL, gfc_match_st_function, ST_STATEMENT_FUNCTION);
149 match (NULL, gfc_match_data_decl, ST_DATA_DECL);
150 match (NULL, gfc_match_enumerator_def, ST_ENUMERATOR);
152 /* General statement matching: Instead of testing every possible
153 statement, we eliminate most possibilities by peeking at the
156 c = gfc_peek_ascii_char ();
161 match ("abstract% interface", gfc_match_abstract_interface,
163 match ("allocatable", gfc_match_allocatable, ST_ATTR_DECL);
164 match ("asynchronous", gfc_match_asynchronous, ST_ATTR_DECL);
168 match (NULL, gfc_match_bind_c_stmt, ST_ATTR_DECL);
172 match ("codimension", gfc_match_codimension, ST_ATTR_DECL);
173 match ("contiguous", gfc_match_contiguous, ST_ATTR_DECL);
177 match ("data", gfc_match_data, ST_DATA);
178 match ("dimension", gfc_match_dimension, ST_ATTR_DECL);
182 match ("enum , bind ( c )", gfc_match_enum, ST_ENUM);
183 match ("entry% ", gfc_match_entry, ST_ENTRY);
184 match ("equivalence", gfc_match_equivalence, ST_EQUIVALENCE);
185 match ("external", gfc_match_external, ST_ATTR_DECL);
189 match ("format", gfc_match_format, ST_FORMAT);
196 match ("implicit", gfc_match_implicit, ST_IMPLICIT);
197 match ("implicit% none", gfc_match_implicit_none, ST_IMPLICIT_NONE);
198 match ("interface", gfc_match_interface, ST_INTERFACE);
199 match ("intent", gfc_match_intent, ST_ATTR_DECL);
200 match ("intrinsic", gfc_match_intrinsic, ST_ATTR_DECL);
207 match ("namelist", gfc_match_namelist, ST_NAMELIST);
211 match ("optional", gfc_match_optional, ST_ATTR_DECL);
215 match ("parameter", gfc_match_parameter, ST_PARAMETER);
216 match ("pointer", gfc_match_pointer, ST_ATTR_DECL);
217 if (gfc_match_private (&st) == MATCH_YES)
219 match ("procedure", gfc_match_procedure, ST_PROCEDURE);
220 if (gfc_match_public (&st) == MATCH_YES)
222 match ("protected", gfc_match_protected, ST_ATTR_DECL);
229 match ("save", gfc_match_save, ST_ATTR_DECL);
233 match ("target", gfc_match_target, ST_ATTR_DECL);
234 match ("type", gfc_match_derived_decl, ST_DERIVED_DECL);
241 match ("value", gfc_match_value, ST_ATTR_DECL);
242 match ("volatile", gfc_match_volatile, ST_ATTR_DECL);
249 /* This is not a specification statement. See if any of the matchers
250 has stored an error message of some sort. */
254 gfc_buffer_error (0);
255 gfc_current_locus = old_locus;
257 return ST_GET_FCN_CHARACTERISTICS;
261 /* This is the primary 'decode_statement'. */
263 decode_statement (void)
271 gfc_enforce_clean_symbol_state ();
273 gfc_clear_error (); /* Clear any pending errors. */
274 gfc_clear_warning (); /* Clear any pending warnings. */
276 gfc_matching_function = false;
278 if (gfc_match_eos () == MATCH_YES)
281 if (gfc_current_state () == COMP_FUNCTION
282 && gfc_current_block ()->result->ts.kind == -1)
283 return decode_specification_statement ();
285 old_locus = gfc_current_locus;
287 c = gfc_peek_ascii_char ();
291 if (match_word ("use", gfc_match_use, &old_locus) == MATCH_YES)
293 last_was_use_stmt = true;
297 undo_new_statement ();
300 if (last_was_use_stmt)
303 /* Try matching a data declaration or function declaration. The
304 input "REALFUNCTIONA(N)" can mean several things in different
305 contexts, so it (and its relatives) get special treatment. */
307 if (gfc_current_state () == COMP_NONE
308 || gfc_current_state () == COMP_INTERFACE
309 || gfc_current_state () == COMP_CONTAINS)
311 gfc_matching_function = true;
312 m = gfc_match_function_decl ();
315 else if (m == MATCH_ERROR)
319 gfc_current_locus = old_locus;
321 gfc_matching_function = false;
324 /* Match statements whose error messages are meant to be overwritten
325 by something better. */
327 match (NULL, gfc_match_assignment, ST_ASSIGNMENT);
328 match (NULL, gfc_match_pointer_assignment, ST_POINTER_ASSIGNMENT);
329 match (NULL, gfc_match_st_function, ST_STATEMENT_FUNCTION);
331 match (NULL, gfc_match_data_decl, ST_DATA_DECL);
332 match (NULL, gfc_match_enumerator_def, ST_ENUMERATOR);
334 /* Try to match a subroutine statement, which has the same optional
335 prefixes that functions can have. */
337 if (gfc_match_subroutine () == MATCH_YES)
338 return ST_SUBROUTINE;
340 gfc_current_locus = old_locus;
342 /* Check for the IF, DO, SELECT, WHERE, FORALL, CRITICAL, BLOCK and ASSOCIATE
343 statements, which might begin with a block label. The match functions for
344 these statements are unusual in that their keyword is not seen before
345 the matcher is called. */
347 if (gfc_match_if (&st) == MATCH_YES)
350 gfc_current_locus = old_locus;
352 if (gfc_match_where (&st) == MATCH_YES)
355 gfc_current_locus = old_locus;
357 if (gfc_match_forall (&st) == MATCH_YES)
360 gfc_current_locus = old_locus;
362 match (NULL, gfc_match_do, ST_DO);
363 match (NULL, gfc_match_block, ST_BLOCK);
364 match (NULL, gfc_match_associate, ST_ASSOCIATE);
365 match (NULL, gfc_match_critical, ST_CRITICAL);
366 match (NULL, gfc_match_select, ST_SELECT_CASE);
368 gfc_current_ns = gfc_build_block_ns (gfc_current_ns);
369 match (NULL, gfc_match_select_type, ST_SELECT_TYPE);
371 gfc_current_ns = gfc_current_ns->parent;
372 gfc_free_namespace (ns);
374 /* General statement matching: Instead of testing every possible
375 statement, we eliminate most possibilities by peeking at the
381 match ("abstract% interface", gfc_match_abstract_interface,
383 match ("allocate", gfc_match_allocate, ST_ALLOCATE);
384 match ("allocatable", gfc_match_allocatable, ST_ATTR_DECL);
385 match ("assign", gfc_match_assign, ST_LABEL_ASSIGNMENT);
386 match ("asynchronous", gfc_match_asynchronous, ST_ATTR_DECL);
390 match ("backspace", gfc_match_backspace, ST_BACKSPACE);
391 match ("block data", gfc_match_block_data, ST_BLOCK_DATA);
392 match (NULL, gfc_match_bind_c_stmt, ST_ATTR_DECL);
396 match ("call", gfc_match_call, ST_CALL);
397 match ("close", gfc_match_close, ST_CLOSE);
398 match ("continue", gfc_match_continue, ST_CONTINUE);
399 match ("contiguous", gfc_match_contiguous, ST_ATTR_DECL);
400 match ("cycle", gfc_match_cycle, ST_CYCLE);
401 match ("case", gfc_match_case, ST_CASE);
402 match ("common", gfc_match_common, ST_COMMON);
403 match ("contains", gfc_match_eos, ST_CONTAINS);
404 match ("class", gfc_match_class_is, ST_CLASS_IS);
405 match ("codimension", gfc_match_codimension, ST_ATTR_DECL);
409 match ("deallocate", gfc_match_deallocate, ST_DEALLOCATE);
410 match ("data", gfc_match_data, ST_DATA);
411 match ("dimension", gfc_match_dimension, ST_ATTR_DECL);
415 match ("end file", gfc_match_endfile, ST_END_FILE);
416 match ("exit", gfc_match_exit, ST_EXIT);
417 match ("else", gfc_match_else, ST_ELSE);
418 match ("else where", gfc_match_elsewhere, ST_ELSEWHERE);
419 match ("else if", gfc_match_elseif, ST_ELSEIF);
420 match ("error stop", gfc_match_error_stop, ST_ERROR_STOP);
421 match ("enum , bind ( c )", gfc_match_enum, ST_ENUM);
423 if (gfc_match_end (&st) == MATCH_YES)
426 match ("entry% ", gfc_match_entry, ST_ENTRY);
427 match ("equivalence", gfc_match_equivalence, ST_EQUIVALENCE);
428 match ("external", gfc_match_external, ST_ATTR_DECL);
432 match ("final", gfc_match_final_decl, ST_FINAL);
433 match ("flush", gfc_match_flush, ST_FLUSH);
434 match ("format", gfc_match_format, ST_FORMAT);
438 match ("generic", gfc_match_generic, ST_GENERIC);
439 match ("go to", gfc_match_goto, ST_GOTO);
443 match ("inquire", gfc_match_inquire, ST_INQUIRE);
444 match ("implicit", gfc_match_implicit, ST_IMPLICIT);
445 match ("implicit% none", gfc_match_implicit_none, ST_IMPLICIT_NONE);
446 match ("import", gfc_match_import, ST_IMPORT);
447 match ("interface", gfc_match_interface, ST_INTERFACE);
448 match ("intent", gfc_match_intent, ST_ATTR_DECL);
449 match ("intrinsic", gfc_match_intrinsic, ST_ATTR_DECL);
453 match ("lock", gfc_match_lock, ST_LOCK);
457 match ("module% procedure", gfc_match_modproc, ST_MODULE_PROC);
458 match ("module", gfc_match_module, ST_MODULE);
462 match ("nullify", gfc_match_nullify, ST_NULLIFY);
463 match ("namelist", gfc_match_namelist, ST_NAMELIST);
467 match ("open", gfc_match_open, ST_OPEN);
468 match ("optional", gfc_match_optional, ST_ATTR_DECL);
472 match ("print", gfc_match_print, ST_WRITE);
473 match ("parameter", gfc_match_parameter, ST_PARAMETER);
474 match ("pause", gfc_match_pause, ST_PAUSE);
475 match ("pointer", gfc_match_pointer, ST_ATTR_DECL);
476 if (gfc_match_private (&st) == MATCH_YES)
478 match ("procedure", gfc_match_procedure, ST_PROCEDURE);
479 match ("program", gfc_match_program, ST_PROGRAM);
480 if (gfc_match_public (&st) == MATCH_YES)
482 match ("protected", gfc_match_protected, ST_ATTR_DECL);
486 match ("read", gfc_match_read, ST_READ);
487 match ("return", gfc_match_return, ST_RETURN);
488 match ("rewind", gfc_match_rewind, ST_REWIND);
492 match ("sequence", gfc_match_eos, ST_SEQUENCE);
493 match ("stop", gfc_match_stop, ST_STOP);
494 match ("save", gfc_match_save, ST_ATTR_DECL);
495 match ("sync all", gfc_match_sync_all, ST_SYNC_ALL);
496 match ("sync images", gfc_match_sync_images, ST_SYNC_IMAGES);
497 match ("sync memory", gfc_match_sync_memory, ST_SYNC_MEMORY);
501 match ("target", gfc_match_target, ST_ATTR_DECL);
502 match ("type", gfc_match_derived_decl, ST_DERIVED_DECL);
503 match ("type is", gfc_match_type_is, ST_TYPE_IS);
507 match ("unlock", gfc_match_unlock, ST_UNLOCK);
511 match ("value", gfc_match_value, ST_ATTR_DECL);
512 match ("volatile", gfc_match_volatile, ST_ATTR_DECL);
516 match ("wait", gfc_match_wait, ST_WAIT);
517 match ("write", gfc_match_write, ST_WRITE);
521 /* All else has failed, so give up. See if any of the matchers has
522 stored an error message of some sort. */
524 if (gfc_error_check () == 0)
525 gfc_error_now ("Unclassifiable statement at %C");
529 gfc_error_recovery ();
535 decode_omp_directive (void)
540 gfc_enforce_clean_symbol_state ();
542 gfc_clear_error (); /* Clear any pending errors. */
543 gfc_clear_warning (); /* Clear any pending warnings. */
547 gfc_error_now ("OpenMP directives at %C may not appear in PURE "
548 "or ELEMENTAL procedures");
549 gfc_error_recovery ();
553 if (gfc_implicit_pure (NULL))
554 gfc_current_ns->proc_name->attr.implicit_pure = 0;
556 old_locus = gfc_current_locus;
558 /* General OpenMP directive matching: Instead of testing every possible
559 statement, we eliminate most possibilities by peeking at the
562 c = gfc_peek_ascii_char ();
567 match ("atomic", gfc_match_omp_atomic, ST_OMP_ATOMIC);
570 match ("barrier", gfc_match_omp_barrier, ST_OMP_BARRIER);
573 match ("critical", gfc_match_omp_critical, ST_OMP_CRITICAL);
576 match ("do", gfc_match_omp_do, ST_OMP_DO);
579 match ("end atomic", gfc_match_omp_eos, ST_OMP_END_ATOMIC);
580 match ("end critical", gfc_match_omp_critical, ST_OMP_END_CRITICAL);
581 match ("end do", gfc_match_omp_end_nowait, ST_OMP_END_DO);
582 match ("end master", gfc_match_omp_eos, ST_OMP_END_MASTER);
583 match ("end ordered", gfc_match_omp_eos, ST_OMP_END_ORDERED);
584 match ("end parallel do", gfc_match_omp_eos, ST_OMP_END_PARALLEL_DO);
585 match ("end parallel sections", gfc_match_omp_eos,
586 ST_OMP_END_PARALLEL_SECTIONS);
587 match ("end parallel workshare", gfc_match_omp_eos,
588 ST_OMP_END_PARALLEL_WORKSHARE);
589 match ("end parallel", gfc_match_omp_eos, ST_OMP_END_PARALLEL);
590 match ("end sections", gfc_match_omp_end_nowait, ST_OMP_END_SECTIONS);
591 match ("end single", gfc_match_omp_end_single, ST_OMP_END_SINGLE);
592 match ("end task", gfc_match_omp_eos, ST_OMP_END_TASK);
593 match ("end workshare", gfc_match_omp_end_nowait,
594 ST_OMP_END_WORKSHARE);
597 match ("flush", gfc_match_omp_flush, ST_OMP_FLUSH);
600 match ("master", gfc_match_omp_master, ST_OMP_MASTER);
603 match ("ordered", gfc_match_omp_ordered, ST_OMP_ORDERED);
606 match ("parallel do", gfc_match_omp_parallel_do, ST_OMP_PARALLEL_DO);
607 match ("parallel sections", gfc_match_omp_parallel_sections,
608 ST_OMP_PARALLEL_SECTIONS);
609 match ("parallel workshare", gfc_match_omp_parallel_workshare,
610 ST_OMP_PARALLEL_WORKSHARE);
611 match ("parallel", gfc_match_omp_parallel, ST_OMP_PARALLEL);
614 match ("sections", gfc_match_omp_sections, ST_OMP_SECTIONS);
615 match ("section", gfc_match_omp_eos, ST_OMP_SECTION);
616 match ("single", gfc_match_omp_single, ST_OMP_SINGLE);
619 match ("task", gfc_match_omp_task, ST_OMP_TASK);
620 match ("taskwait", gfc_match_omp_taskwait, ST_OMP_TASKWAIT);
621 match ("taskyield", gfc_match_omp_taskyield, ST_OMP_TASKYIELD);
622 match ("threadprivate", gfc_match_omp_threadprivate,
623 ST_OMP_THREADPRIVATE);
625 match ("workshare", gfc_match_omp_workshare, ST_OMP_WORKSHARE);
629 /* All else has failed, so give up. See if any of the matchers has
630 stored an error message of some sort. */
632 if (gfc_error_check () == 0)
633 gfc_error_now ("Unclassifiable OpenMP directive at %C");
637 gfc_error_recovery ();
643 decode_gcc_attribute (void)
647 gfc_enforce_clean_symbol_state ();
649 gfc_clear_error (); /* Clear any pending errors. */
650 gfc_clear_warning (); /* Clear any pending warnings. */
651 old_locus = gfc_current_locus;
653 match ("attributes", gfc_match_gcc_attributes, ST_ATTR_DECL);
655 /* All else has failed, so give up. See if any of the matchers has
656 stored an error message of some sort. */
658 if (gfc_error_check () == 0)
659 gfc_error_now ("Unclassifiable GCC directive at %C");
663 gfc_error_recovery ();
671 /* Get the next statement in free form source. */
680 at_bol = gfc_at_bol ();
681 gfc_gobble_whitespace ();
683 c = gfc_peek_ascii_char ();
689 /* Found a statement label? */
690 m = gfc_match_st_label (&gfc_statement_label);
692 d = gfc_peek_ascii_char ();
693 if (m != MATCH_YES || !gfc_is_whitespace (d))
695 gfc_match_small_literal_int (&i, &cnt);
698 gfc_error_now ("Too many digits in statement label at %C");
701 gfc_error_now ("Zero is not a valid statement label at %C");
704 c = gfc_next_ascii_char ();
707 if (!gfc_is_whitespace (c))
708 gfc_error_now ("Non-numeric character in statement label at %C");
714 label_locus = gfc_current_locus;
716 gfc_gobble_whitespace ();
718 if (at_bol && gfc_peek_ascii_char () == ';')
720 gfc_error_now ("Semicolon at %C needs to be preceded by "
722 gfc_next_ascii_char (); /* Eat up the semicolon. */
726 if (gfc_match_eos () == MATCH_YES)
728 gfc_warning_now ("Ignoring statement label in empty statement "
729 "at %L", &label_locus);
730 gfc_free_st_label (gfc_statement_label);
731 gfc_statement_label = NULL;
738 /* Comments have already been skipped by the time we get here,
739 except for GCC attributes and OpenMP directives. */
741 gfc_next_ascii_char (); /* Eat up the exclamation sign. */
742 c = gfc_peek_ascii_char ();
748 c = gfc_next_ascii_char ();
749 for (i = 0; i < 4; i++, c = gfc_next_ascii_char ())
750 gcc_assert (c == "gcc$"[i]);
752 gfc_gobble_whitespace ();
753 return decode_gcc_attribute ();
756 else if (c == '$' && gfc_option.gfc_flag_openmp)
760 c = gfc_next_ascii_char ();
761 for (i = 0; i < 4; i++, c = gfc_next_ascii_char ())
762 gcc_assert (c == "$omp"[i]);
764 gcc_assert (c == ' ' || c == '\t');
765 gfc_gobble_whitespace ();
766 if (last_was_use_stmt)
768 return decode_omp_directive ();
774 if (at_bol && c == ';')
776 if (!(gfc_option.allow_std & GFC_STD_F2008))
777 gfc_error_now ("Fortran 2008: Semicolon at %C without preceding "
779 gfc_next_ascii_char (); /* Eat up the semicolon. */
783 return decode_statement ();
787 /* Get the next statement in fixed-form source. */
792 int label, digit_flag, i;
797 return decode_statement ();
799 /* Skip past the current label field, parsing a statement label if
800 one is there. This is a weird number parser, since the number is
801 contained within five columns and can have any kind of embedded
802 spaces. We also check for characters that make the rest of the
808 for (i = 0; i < 5; i++)
810 c = gfc_next_char_literal (NONSTRING);
827 label = label * 10 + ((unsigned char) c - '0');
828 label_locus = gfc_current_locus;
832 /* Comments have already been skipped by the time we get
833 here, except for GCC attributes and OpenMP directives. */
836 c = gfc_next_char_literal (NONSTRING);
838 if (TOLOWER (c) == 'g')
840 for (i = 0; i < 4; i++, c = gfc_next_char_literal (NONSTRING))
841 gcc_assert (TOLOWER (c) == "gcc$"[i]);
843 return decode_gcc_attribute ();
845 else if (c == '$' && gfc_option.gfc_flag_openmp)
847 for (i = 0; i < 4; i++, c = gfc_next_char_literal (NONSTRING))
848 gcc_assert ((char) gfc_wide_tolower (c) == "$omp"[i]);
850 if (c != ' ' && c != '0')
852 gfc_buffer_error (0);
853 gfc_error ("Bad continuation line at %C");
856 if (last_was_use_stmt)
858 return decode_omp_directive ();
862 /* Comments have already been skipped by the time we get
863 here so don't bother checking for them. */
866 gfc_buffer_error (0);
867 gfc_error ("Non-numeric character in statement label at %C");
875 gfc_warning_now ("Zero is not a valid statement label at %C");
878 /* We've found a valid statement label. */
879 gfc_statement_label = gfc_get_st_label (label);
883 /* Since this line starts a statement, it cannot be a continuation
884 of a previous statement. If we see something here besides a
885 space or zero, it must be a bad continuation line. */
887 c = gfc_next_char_literal (NONSTRING);
891 if (c != ' ' && c != '0')
893 gfc_buffer_error (0);
894 gfc_error ("Bad continuation line at %C");
898 /* Now that we've taken care of the statement label columns, we have
899 to make sure that the first nonblank character is not a '!'. If
900 it is, the rest of the line is a comment. */
904 loc = gfc_current_locus;
905 c = gfc_next_char_literal (NONSTRING);
907 while (gfc_is_whitespace (c));
911 gfc_current_locus = loc;
916 gfc_error_now ("Semicolon at %C needs to be preceded by statement");
917 else if (!(gfc_option.allow_std & GFC_STD_F2008))
918 gfc_error_now ("Fortran 2008: Semicolon at %C without preceding "
923 if (gfc_match_eos () == MATCH_YES)
926 /* At this point, we've got a nonblank statement to parse. */
927 return decode_statement ();
931 gfc_warning_now ("Ignoring statement label in empty statement at %L",
934 gfc_current_locus.lb->truncated = 0;
940 /* Return the next non-ST_NONE statement to the caller. We also worry
941 about including files and the ends of include files at this stage. */
944 next_statement (void)
949 gfc_enforce_clean_symbol_state ();
951 gfc_new_block = NULL;
953 gfc_current_ns->old_cl_list = gfc_current_ns->cl_list;
954 gfc_current_ns->old_equiv = gfc_current_ns->equiv;
957 gfc_statement_label = NULL;
958 gfc_buffer_error (1);
963 gfc_skip_comments ();
971 if (gfc_define_undef_line ())
974 old_locus = gfc_current_locus;
976 st = (gfc_current_form == FORM_FIXED) ? next_fixed () : next_free ();
982 gfc_buffer_error (0);
984 if (st == ST_GET_FCN_CHARACTERISTICS && gfc_statement_label != NULL)
986 gfc_free_st_label (gfc_statement_label);
987 gfc_statement_label = NULL;
988 gfc_current_locus = old_locus;
992 check_statement_label (st);
998 /****************************** Parser ***********************************/
1000 /* The parser subroutines are of type 'try' that fail if the file ends
1003 /* Macros that expand to case-labels for various classes of
1004 statements. Start with executable statements that directly do
1007 #define case_executable case ST_ALLOCATE: case ST_BACKSPACE: case ST_CALL: \
1008 case ST_CLOSE: case ST_CONTINUE: case ST_DEALLOCATE: case ST_END_FILE: \
1009 case ST_GOTO: case ST_INQUIRE: case ST_NULLIFY: case ST_OPEN: \
1010 case ST_READ: case ST_RETURN: case ST_REWIND: case ST_SIMPLE_IF: \
1011 case ST_PAUSE: case ST_STOP: case ST_WAIT: case ST_WRITE: \
1012 case ST_POINTER_ASSIGNMENT: case ST_EXIT: case ST_CYCLE: \
1013 case ST_ASSIGNMENT: case ST_ARITHMETIC_IF: case ST_WHERE: case ST_FORALL: \
1014 case ST_LABEL_ASSIGNMENT: case ST_FLUSH: case ST_OMP_FLUSH: \
1015 case ST_OMP_BARRIER: case ST_OMP_TASKWAIT: case ST_OMP_TASKYIELD: \
1016 case ST_ERROR_STOP: case ST_SYNC_ALL: case ST_SYNC_IMAGES: \
1017 case ST_SYNC_MEMORY: case ST_LOCK: case ST_UNLOCK
1019 /* Statements that mark other executable statements. */
1021 #define case_exec_markers case ST_DO: case ST_FORALL_BLOCK: \
1022 case ST_IF_BLOCK: case ST_BLOCK: case ST_ASSOCIATE: \
1023 case ST_WHERE_BLOCK: case ST_SELECT_CASE: case ST_SELECT_TYPE: \
1024 case ST_OMP_PARALLEL: \
1025 case ST_OMP_PARALLEL_SECTIONS: case ST_OMP_SECTIONS: case ST_OMP_ORDERED: \
1026 case ST_OMP_CRITICAL: case ST_OMP_MASTER: case ST_OMP_SINGLE: \
1027 case ST_OMP_DO: case ST_OMP_PARALLEL_DO: case ST_OMP_ATOMIC: \
1028 case ST_OMP_WORKSHARE: case ST_OMP_PARALLEL_WORKSHARE: \
1029 case ST_OMP_TASK: case ST_CRITICAL
1031 /* Declaration statements */
1033 #define case_decl case ST_ATTR_DECL: case ST_COMMON: case ST_DATA_DECL: \
1034 case ST_EQUIVALENCE: case ST_NAMELIST: case ST_STATEMENT_FUNCTION: \
1035 case ST_TYPE: case ST_INTERFACE: case ST_OMP_THREADPRIVATE: \
1038 /* Block end statements. Errors associated with interchanging these
1039 are detected in gfc_match_end(). */
1041 #define case_end case ST_END_BLOCK_DATA: case ST_END_FUNCTION: \
1042 case ST_END_PROGRAM: case ST_END_SUBROUTINE: \
1043 case ST_END_BLOCK: case ST_END_ASSOCIATE
1046 /* Push a new state onto the stack. */
1049 push_state (gfc_state_data *p, gfc_compile_state new_state, gfc_symbol *sym)
1051 p->state = new_state;
1052 p->previous = gfc_state_stack;
1054 p->head = p->tail = NULL;
1055 p->do_variable = NULL;
1057 /* If this the state of a construct like BLOCK, DO or IF, the corresponding
1058 construct statement was accepted right before pushing the state. Thus,
1059 the construct's gfc_code is available as tail of the parent state. */
1060 gcc_assert (gfc_state_stack);
1061 p->construct = gfc_state_stack->tail;
1063 gfc_state_stack = p;
1067 /* Pop the current state. */
1071 gfc_state_stack = gfc_state_stack->previous;
1075 /* Try to find the given state in the state stack. */
1078 gfc_find_state (gfc_compile_state state)
1082 for (p = gfc_state_stack; p; p = p->previous)
1083 if (p->state == state)
1086 return (p == NULL) ? FAILURE : SUCCESS;
1090 /* Starts a new level in the statement list. */
1093 new_level (gfc_code *q)
1097 p = q->block = gfc_get_code ();
1099 gfc_state_stack->head = gfc_state_stack->tail = p;
1105 /* Add the current new_st code structure and adds it to the current
1106 program unit. As a side-effect, it zeroes the new_st. */
1109 add_statement (void)
1113 p = gfc_get_code ();
1116 p->loc = gfc_current_locus;
1118 if (gfc_state_stack->head == NULL)
1119 gfc_state_stack->head = p;
1121 gfc_state_stack->tail->next = p;
1123 while (p->next != NULL)
1126 gfc_state_stack->tail = p;
1128 gfc_clear_new_st ();
1134 /* Frees everything associated with the current statement. */
1137 undo_new_statement (void)
1139 gfc_free_statements (new_st.block);
1140 gfc_free_statements (new_st.next);
1141 gfc_free_statement (&new_st);
1142 gfc_clear_new_st ();
1146 /* If the current statement has a statement label, make sure that it
1147 is allowed to, or should have one. */
1150 check_statement_label (gfc_statement st)
1154 if (gfc_statement_label == NULL)
1156 if (st == ST_FORMAT)
1157 gfc_error ("FORMAT statement at %L does not have a statement label",
1164 case ST_END_PROGRAM:
1165 case ST_END_FUNCTION:
1166 case ST_END_SUBROUTINE:
1170 case ST_END_CRITICAL:
1172 case ST_END_ASSOCIATE:
1175 if (st == ST_ENDDO || st == ST_CONTINUE)
1176 type = ST_LABEL_DO_TARGET;
1178 type = ST_LABEL_TARGET;
1182 type = ST_LABEL_FORMAT;
1185 /* Statement labels are not restricted from appearing on a
1186 particular line. However, there are plenty of situations
1187 where the resulting label can't be referenced. */
1190 type = ST_LABEL_BAD_TARGET;
1194 gfc_define_st_label (gfc_statement_label, type, &label_locus);
1196 new_st.here = gfc_statement_label;
1200 /* Figures out what the enclosing program unit is. This will be a
1201 function, subroutine, program, block data or module. */
1204 gfc_enclosing_unit (gfc_compile_state * result)
1208 for (p = gfc_state_stack; p; p = p->previous)
1209 if (p->state == COMP_FUNCTION || p->state == COMP_SUBROUTINE
1210 || p->state == COMP_MODULE || p->state == COMP_BLOCK_DATA
1211 || p->state == COMP_PROGRAM)
1220 *result = COMP_PROGRAM;
1225 /* Translate a statement enum to a string. */
1228 gfc_ascii_statement (gfc_statement st)
1234 case ST_ARITHMETIC_IF:
1235 p = _("arithmetic IF");
1244 p = _("attribute declaration");
1280 p = _("data declaration");
1288 case ST_DERIVED_DECL:
1289 p = _("derived type declaration");
1303 case ST_END_ASSOCIATE:
1304 p = "END ASSOCIATE";
1309 case ST_END_BLOCK_DATA:
1310 p = "END BLOCK DATA";
1312 case ST_END_CRITICAL:
1324 case ST_END_FUNCTION:
1330 case ST_END_INTERFACE:
1331 p = "END INTERFACE";
1336 case ST_END_PROGRAM:
1342 case ST_END_SUBROUTINE:
1343 p = "END SUBROUTINE";
1354 case ST_EQUIVALENCE:
1366 case ST_FORALL_BLOCK: /* Fall through */
1388 case ST_IMPLICIT_NONE:
1389 p = "IMPLICIT NONE";
1391 case ST_IMPLIED_ENDDO:
1392 p = _("implied END DO");
1421 case ST_MODULE_PROC:
1422 p = "MODULE PROCEDURE";
1454 case ST_SYNC_IMAGES:
1457 case ST_SYNC_MEMORY:
1472 case ST_WHERE_BLOCK: /* Fall through */
1483 p = _("assignment");
1485 case ST_POINTER_ASSIGNMENT:
1486 p = _("pointer assignment");
1488 case ST_SELECT_CASE:
1491 case ST_SELECT_TYPE:
1506 case ST_STATEMENT_FUNCTION:
1507 p = "STATEMENT FUNCTION";
1509 case ST_LABEL_ASSIGNMENT:
1510 p = "LABEL ASSIGNMENT";
1513 p = "ENUM DEFINITION";
1516 p = "ENUMERATOR DEFINITION";
1524 case ST_OMP_BARRIER:
1525 p = "!$OMP BARRIER";
1527 case ST_OMP_CRITICAL:
1528 p = "!$OMP CRITICAL";
1533 case ST_OMP_END_ATOMIC:
1534 p = "!$OMP END ATOMIC";
1536 case ST_OMP_END_CRITICAL:
1537 p = "!$OMP END CRITICAL";
1542 case ST_OMP_END_MASTER:
1543 p = "!$OMP END MASTER";
1545 case ST_OMP_END_ORDERED:
1546 p = "!$OMP END ORDERED";
1548 case ST_OMP_END_PARALLEL:
1549 p = "!$OMP END PARALLEL";
1551 case ST_OMP_END_PARALLEL_DO:
1552 p = "!$OMP END PARALLEL DO";
1554 case ST_OMP_END_PARALLEL_SECTIONS:
1555 p = "!$OMP END PARALLEL SECTIONS";
1557 case ST_OMP_END_PARALLEL_WORKSHARE:
1558 p = "!$OMP END PARALLEL WORKSHARE";
1560 case ST_OMP_END_SECTIONS:
1561 p = "!$OMP END SECTIONS";
1563 case ST_OMP_END_SINGLE:
1564 p = "!$OMP END SINGLE";
1566 case ST_OMP_END_TASK:
1567 p = "!$OMP END TASK";
1569 case ST_OMP_END_WORKSHARE:
1570 p = "!$OMP END WORKSHARE";
1578 case ST_OMP_ORDERED:
1579 p = "!$OMP ORDERED";
1581 case ST_OMP_PARALLEL:
1582 p = "!$OMP PARALLEL";
1584 case ST_OMP_PARALLEL_DO:
1585 p = "!$OMP PARALLEL DO";
1587 case ST_OMP_PARALLEL_SECTIONS:
1588 p = "!$OMP PARALLEL SECTIONS";
1590 case ST_OMP_PARALLEL_WORKSHARE:
1591 p = "!$OMP PARALLEL WORKSHARE";
1593 case ST_OMP_SECTIONS:
1594 p = "!$OMP SECTIONS";
1596 case ST_OMP_SECTION:
1597 p = "!$OMP SECTION";
1605 case ST_OMP_TASKWAIT:
1606 p = "!$OMP TASKWAIT";
1608 case ST_OMP_TASKYIELD:
1609 p = "!$OMP TASKYIELD";
1611 case ST_OMP_THREADPRIVATE:
1612 p = "!$OMP THREADPRIVATE";
1614 case ST_OMP_WORKSHARE:
1615 p = "!$OMP WORKSHARE";
1618 gfc_internal_error ("gfc_ascii_statement(): Bad statement code");
1625 /* Create a symbol for the main program and assign it to ns->proc_name. */
1628 main_program_symbol (gfc_namespace *ns, const char *name)
1630 gfc_symbol *main_program;
1631 symbol_attribute attr;
1633 gfc_get_symbol (name, ns, &main_program);
1634 gfc_clear_attr (&attr);
1635 attr.flavor = FL_PROGRAM;
1636 attr.proc = PROC_UNKNOWN;
1637 attr.subroutine = 1;
1638 attr.access = ACCESS_PUBLIC;
1639 attr.is_main_program = 1;
1640 main_program->attr = attr;
1641 main_program->declared_at = gfc_current_locus;
1642 ns->proc_name = main_program;
1643 gfc_commit_symbols ();
1647 /* Do whatever is necessary to accept the last statement. */
1650 accept_statement (gfc_statement st)
1654 case ST_IMPLICIT_NONE:
1655 gfc_set_implicit_none ();
1664 gfc_current_ns->proc_name = gfc_new_block;
1667 /* If the statement is the end of a block, lay down a special code
1668 that allows a branch to the end of the block from within the
1669 construct. IF and SELECT are treated differently from DO
1670 (where EXEC_NOP is added inside the loop) for two
1672 1. END DO has a meaning in the sense that after a GOTO to
1673 it, the loop counter must be increased.
1674 2. IF blocks and SELECT blocks can consist of multiple
1675 parallel blocks (IF ... ELSE IF ... ELSE ... END IF).
1676 Putting the label before the END IF would make the jump
1677 from, say, the ELSE IF block to the END IF illegal. */
1681 case ST_END_CRITICAL:
1682 if (gfc_statement_label != NULL)
1684 new_st.op = EXEC_END_NESTED_BLOCK;
1689 /* In the case of BLOCK and ASSOCIATE blocks, there cannot be more than
1690 one parallel block. Thus, we add the special code to the nested block
1691 itself, instead of the parent one. */
1693 case ST_END_ASSOCIATE:
1694 if (gfc_statement_label != NULL)
1696 new_st.op = EXEC_END_BLOCK;
1701 /* The end-of-program unit statements do not get the special
1702 marker and require a statement of some sort if they are a
1705 case ST_END_PROGRAM:
1706 case ST_END_FUNCTION:
1707 case ST_END_SUBROUTINE:
1708 if (gfc_statement_label != NULL)
1710 new_st.op = EXEC_RETURN;
1715 new_st.op = EXEC_END_PROCEDURE;
1731 gfc_commit_symbols ();
1732 gfc_warning_check ();
1733 gfc_clear_new_st ();
1737 /* Undo anything tentative that has been built for the current
1741 reject_statement (void)
1743 /* Revert to the previous charlen chain. */
1744 gfc_free_charlen (gfc_current_ns->cl_list, gfc_current_ns->old_cl_list);
1745 gfc_current_ns->cl_list = gfc_current_ns->old_cl_list;
1747 gfc_free_equiv_until (gfc_current_ns->equiv, gfc_current_ns->old_equiv);
1748 gfc_current_ns->equiv = gfc_current_ns->old_equiv;
1750 gfc_new_block = NULL;
1751 gfc_undo_symbols ();
1752 gfc_clear_warning ();
1753 undo_new_statement ();
1757 /* Generic complaint about an out of order statement. We also do
1758 whatever is necessary to clean up. */
1761 unexpected_statement (gfc_statement st)
1763 gfc_error ("Unexpected %s statement at %C", gfc_ascii_statement (st));
1765 reject_statement ();
1769 /* Given the next statement seen by the matcher, make sure that it is
1770 in proper order with the last. This subroutine is initialized by
1771 calling it with an argument of ST_NONE. If there is a problem, we
1772 issue an error and return FAILURE. Otherwise we return SUCCESS.
1774 Individual parsers need to verify that the statements seen are
1775 valid before calling here, i.e., ENTRY statements are not allowed in
1776 INTERFACE blocks. The following diagram is taken from the standard:
1778 +---------------------------------------+
1779 | program subroutine function module |
1780 +---------------------------------------+
1782 +---------------------------------------+
1784 +---------------------------------------+
1786 | +-----------+------------------+
1787 | | parameter | implicit |
1788 | +-----------+------------------+
1789 | format | | derived type |
1790 | entry | parameter | interface |
1791 | | data | specification |
1792 | | | statement func |
1793 | +-----------+------------------+
1794 | | data | executable |
1795 +--------+-----------+------------------+
1797 +---------------------------------------+
1798 | internal module/subprogram |
1799 +---------------------------------------+
1801 +---------------------------------------+
1810 ORDER_IMPLICIT_NONE,
1818 enum state_order state;
1819 gfc_statement last_statement;
1825 verify_st_order (st_state *p, gfc_statement st, bool silent)
1831 p->state = ORDER_START;
1835 if (p->state > ORDER_USE)
1837 p->state = ORDER_USE;
1841 if (p->state > ORDER_IMPORT)
1843 p->state = ORDER_IMPORT;
1846 case ST_IMPLICIT_NONE:
1847 if (p->state > ORDER_IMPLICIT_NONE)
1850 /* The '>' sign cannot be a '>=', because a FORMAT or ENTRY
1851 statement disqualifies a USE but not an IMPLICIT NONE.
1852 Duplicate IMPLICIT NONEs are caught when the implicit types
1855 p->state = ORDER_IMPLICIT_NONE;
1859 if (p->state > ORDER_IMPLICIT)
1861 p->state = ORDER_IMPLICIT;
1866 if (p->state < ORDER_IMPLICIT_NONE)
1867 p->state = ORDER_IMPLICIT_NONE;
1871 if (p->state >= ORDER_EXEC)
1873 if (p->state < ORDER_IMPLICIT)
1874 p->state = ORDER_IMPLICIT;
1878 if (p->state < ORDER_SPEC)
1879 p->state = ORDER_SPEC;
1884 case ST_DERIVED_DECL:
1886 if (p->state >= ORDER_EXEC)
1888 if (p->state < ORDER_SPEC)
1889 p->state = ORDER_SPEC;
1894 if (p->state < ORDER_EXEC)
1895 p->state = ORDER_EXEC;
1899 gfc_internal_error ("Unexpected %s statement in verify_st_order() at %C",
1900 gfc_ascii_statement (st));
1903 /* All is well, record the statement in case we need it next time. */
1904 p->where = gfc_current_locus;
1905 p->last_statement = st;
1910 gfc_error ("%s statement at %C cannot follow %s statement at %L",
1911 gfc_ascii_statement (st),
1912 gfc_ascii_statement (p->last_statement), &p->where);
1918 /* Handle an unexpected end of file. This is a show-stopper... */
1920 static void unexpected_eof (void) ATTRIBUTE_NORETURN;
1923 unexpected_eof (void)
1927 gfc_error ("Unexpected end of file in '%s'", gfc_source_file);
1929 /* Memory cleanup. Move to "second to last". */
1930 for (p = gfc_state_stack; p && p->previous && p->previous->previous;
1933 gfc_current_ns->code = (p && p->previous) ? p->head : NULL;
1936 longjmp (eof_buf, 1);
1940 /* Parse the CONTAINS section of a derived type definition. */
1942 gfc_access gfc_typebound_default_access;
1945 parse_derived_contains (void)
1948 bool seen_private = false;
1949 bool seen_comps = false;
1950 bool error_flag = false;
1953 gcc_assert (gfc_current_state () == COMP_DERIVED);
1954 gcc_assert (gfc_current_block ());
1956 /* Derived-types with SEQUENCE and/or BIND(C) must not have a CONTAINS
1958 if (gfc_current_block ()->attr.sequence)
1959 gfc_error ("Derived-type '%s' with SEQUENCE must not have a CONTAINS"
1960 " section at %C", gfc_current_block ()->name);
1961 if (gfc_current_block ()->attr.is_bind_c)
1962 gfc_error ("Derived-type '%s' with BIND(C) must not have a CONTAINS"
1963 " section at %C", gfc_current_block ()->name);
1965 accept_statement (ST_CONTAINS);
1966 push_state (&s, COMP_DERIVED_CONTAINS, NULL);
1968 gfc_typebound_default_access = ACCESS_PUBLIC;
1974 st = next_statement ();
1982 gfc_error ("Components in TYPE at %C must precede CONTAINS");
1986 if (gfc_notify_std (GFC_STD_F2003, "Type-bound"
1987 " procedure at %C") == FAILURE)
1990 accept_statement (ST_PROCEDURE);
1995 if (gfc_notify_std (GFC_STD_F2003, "GENERIC binding"
1996 " at %C") == FAILURE)
1999 accept_statement (ST_GENERIC);
2004 if (gfc_notify_std (GFC_STD_F2003,
2005 "FINAL procedure declaration"
2006 " at %C") == FAILURE)
2009 accept_statement (ST_FINAL);
2017 && (gfc_notify_std (GFC_STD_F2008, "Derived type "
2018 "definition at %C with empty CONTAINS "
2019 "section") == FAILURE))
2022 /* ST_END_TYPE is accepted by parse_derived after return. */
2026 if (gfc_find_state (COMP_MODULE) == FAILURE)
2028 gfc_error ("PRIVATE statement in TYPE at %C must be inside "
2035 gfc_error ("PRIVATE statement at %C must precede procedure"
2042 gfc_error ("Duplicate PRIVATE statement at %C");
2046 accept_statement (ST_PRIVATE);
2047 gfc_typebound_default_access = ACCESS_PRIVATE;
2048 seen_private = true;
2052 gfc_error ("SEQUENCE statement at %C must precede CONTAINS");
2056 gfc_error ("Already inside a CONTAINS block at %C");
2060 unexpected_statement (st);
2068 reject_statement ();
2072 gcc_assert (gfc_current_state () == COMP_DERIVED);
2078 /* Parse a derived type. */
2081 parse_derived (void)
2083 int compiling_type, seen_private, seen_sequence, seen_component;
2087 gfc_component *c, *lock_comp = NULL;
2089 accept_statement (ST_DERIVED_DECL);
2090 push_state (&s, COMP_DERIVED, gfc_new_block);
2092 gfc_new_block->component_access = ACCESS_PUBLIC;
2099 while (compiling_type)
2101 st = next_statement ();
2109 accept_statement (st);
2114 gfc_error ("FINAL declaration at %C must be inside CONTAINS");
2121 if (!seen_component)
2122 gfc_notify_std (GFC_STD_F2003, "Derived type "
2123 "definition at %C without components");
2125 accept_statement (ST_END_TYPE);
2129 if (gfc_find_state (COMP_MODULE) == FAILURE)
2131 gfc_error ("PRIVATE statement in TYPE at %C must be inside "
2138 gfc_error ("PRIVATE statement at %C must precede "
2139 "structure components");
2144 gfc_error ("Duplicate PRIVATE statement at %C");
2146 s.sym->component_access = ACCESS_PRIVATE;
2148 accept_statement (ST_PRIVATE);
2155 gfc_error ("SEQUENCE statement at %C must precede "
2156 "structure components");
2160 if (gfc_current_block ()->attr.sequence)
2161 gfc_warning ("SEQUENCE attribute at %C already specified in "
2166 gfc_error ("Duplicate SEQUENCE statement at %C");
2170 gfc_add_sequence (&gfc_current_block ()->attr,
2171 gfc_current_block ()->name, NULL);
2175 gfc_notify_std (GFC_STD_F2003,
2176 "CONTAINS block in derived type"
2177 " definition at %C");
2179 accept_statement (ST_CONTAINS);
2180 parse_derived_contains ();
2184 unexpected_statement (st);
2189 /* need to verify that all fields of the derived type are
2190 * interoperable with C if the type is declared to be bind(c)
2192 sym = gfc_current_block ();
2193 for (c = sym->components; c; c = c->next)
2195 bool coarray, lock_type, allocatable, pointer;
2196 coarray = lock_type = allocatable = pointer = false;
2198 /* Look for allocatable components. */
2199 if (c->attr.allocatable
2200 || (c->ts.type == BT_CLASS && c->attr.class_ok
2201 && CLASS_DATA (c)->attr.allocatable)
2202 || (c->ts.type == BT_DERIVED && !c->attr.pointer
2203 && c->ts.u.derived->attr.alloc_comp))
2206 sym->attr.alloc_comp = 1;
2209 /* Look for pointer components. */
2211 || (c->ts.type == BT_CLASS && c->attr.class_ok
2212 && CLASS_DATA (c)->attr.class_pointer)
2213 || (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.pointer_comp))
2216 sym->attr.pointer_comp = 1;
2219 /* Look for procedure pointer components. */
2220 if (c->attr.proc_pointer
2221 || (c->ts.type == BT_DERIVED
2222 && c->ts.u.derived->attr.proc_pointer_comp))
2223 sym->attr.proc_pointer_comp = 1;
2225 /* Looking for coarray components. */
2226 if (c->attr.codimension
2227 || (c->ts.type == BT_CLASS && c->attr.class_ok
2228 && CLASS_DATA (c)->attr.codimension))
2231 sym->attr.coarray_comp = 1;
2234 if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.coarray_comp)
2237 if (!pointer && !allocatable)
2238 sym->attr.coarray_comp = 1;
2241 /* Looking for lock_type components. */
2242 if ((c->ts.type == BT_DERIVED
2243 && c->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
2244 && c->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)
2245 || (c->ts.type == BT_CLASS && c->attr.class_ok
2246 && CLASS_DATA (c)->ts.u.derived->from_intmod
2247 == INTMOD_ISO_FORTRAN_ENV
2248 && CLASS_DATA (c)->ts.u.derived->intmod_sym_id
2249 == ISOFORTRAN_LOCK_TYPE)
2250 || (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.lock_comp
2251 && !allocatable && !pointer))
2255 sym->attr.lock_comp = 1;
2258 /* Check for F2008, C1302 - and recall that pointers may not be coarrays
2259 (5.3.14) and that subobjects of coarray are coarray themselves (2.4.7),
2260 unless there are nondirect [allocatable or pointer] components
2261 involved (cf. 1.3.33.1 and 1.3.33.3). */
2263 if (pointer && !coarray && lock_type)
2264 gfc_error ("Component %s at %L of type LOCK_TYPE must have a "
2265 "codimension or be a subcomponent of a coarray, "
2266 "which is not possible as the component has the "
2267 "pointer attribute", c->name, &c->loc);
2268 else if (pointer && !coarray && c->ts.type == BT_DERIVED
2269 && c->ts.u.derived->attr.lock_comp)
2270 gfc_error ("Pointer component %s at %L has a noncoarray subcomponent "
2271 "of type LOCK_TYPE, which must have a codimension or be a "
2272 "subcomponent of a coarray", c->name, &c->loc);
2274 if (lock_type && allocatable && !coarray)
2275 gfc_error ("Allocatable component %s at %L of type LOCK_TYPE must have "
2276 "a codimension", c->name, &c->loc);
2277 else if (lock_type && allocatable && c->ts.type == BT_DERIVED
2278 && c->ts.u.derived->attr.lock_comp)
2279 gfc_error ("Allocatable component %s at %L must have a codimension as "
2280 "it has a noncoarray subcomponent of type LOCK_TYPE",
2283 if (sym->attr.coarray_comp && !coarray && lock_type)
2284 gfc_error ("Noncoarray component %s at %L of type LOCK_TYPE or with "
2285 "subcomponent of type LOCK_TYPE must have a codimension or "
2286 "be a subcomponent of a coarray. (Variables of type %s may "
2287 "not have a codimension as already a coarray "
2288 "subcomponent exists)", c->name, &c->loc, sym->name);
2290 if (sym->attr.lock_comp && coarray && !lock_type)
2291 gfc_error ("Noncoarray component %s at %L of type LOCK_TYPE or with "
2292 "subcomponent of type LOCK_TYPE must have a codimension or "
2293 "be a subcomponent of a coarray. (Variables of type %s may "
2294 "not have a codimension as %s at %L has a codimension or a "
2295 "coarray subcomponent)", lock_comp->name, &lock_comp->loc,
2296 sym->name, c->name, &c->loc);
2298 /* Look for private components. */
2299 if (sym->component_access == ACCESS_PRIVATE
2300 || c->attr.access == ACCESS_PRIVATE
2301 || (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.private_comp))
2302 sym->attr.private_comp = 1;
2305 if (!seen_component)
2306 sym->attr.zero_comp = 1;
2312 /* Parse an ENUM. */
2320 int seen_enumerator = 0;
2322 push_state (&s, COMP_ENUM, gfc_new_block);
2326 while (compiling_enum)
2328 st = next_statement ();
2336 seen_enumerator = 1;
2337 accept_statement (st);
2342 if (!seen_enumerator)
2343 gfc_error ("ENUM declaration at %C has no ENUMERATORS");
2344 accept_statement (st);
2348 gfc_free_enum_history ();
2349 unexpected_statement (st);
2357 /* Parse an interface. We must be able to deal with the possibility
2358 of recursive interfaces. The parse_spec() subroutine is mutually
2359 recursive with parse_interface(). */
2361 static gfc_statement parse_spec (gfc_statement);
2364 parse_interface (void)
2366 gfc_compile_state new_state = COMP_NONE, current_state;
2367 gfc_symbol *prog_unit, *sym;
2368 gfc_interface_info save;
2369 gfc_state_data s1, s2;
2372 accept_statement (ST_INTERFACE);
2374 current_interface.ns = gfc_current_ns;
2375 save = current_interface;
2377 sym = (current_interface.type == INTERFACE_GENERIC
2378 || current_interface.type == INTERFACE_USER_OP)
2379 ? gfc_new_block : NULL;
2381 push_state (&s1, COMP_INTERFACE, sym);
2382 current_state = COMP_NONE;
2385 gfc_current_ns = gfc_get_namespace (current_interface.ns, 0);
2387 st = next_statement ();
2395 if (st == ST_SUBROUTINE)
2396 new_state = COMP_SUBROUTINE;
2397 else if (st == ST_FUNCTION)
2398 new_state = COMP_FUNCTION;
2399 if (gfc_new_block->attr.pointer)
2401 gfc_new_block->attr.pointer = 0;
2402 gfc_new_block->attr.proc_pointer = 1;
2404 if (gfc_add_explicit_interface (gfc_new_block, IFSRC_IFBODY,
2405 gfc_new_block->formal, NULL) == FAILURE)
2407 reject_statement ();
2408 gfc_free_namespace (gfc_current_ns);
2414 case ST_MODULE_PROC: /* The module procedure matcher makes
2415 sure the context is correct. */
2416 accept_statement (st);
2417 gfc_free_namespace (gfc_current_ns);
2420 case ST_END_INTERFACE:
2421 gfc_free_namespace (gfc_current_ns);
2422 gfc_current_ns = current_interface.ns;
2426 gfc_error ("Unexpected %s statement in INTERFACE block at %C",
2427 gfc_ascii_statement (st));
2428 reject_statement ();
2429 gfc_free_namespace (gfc_current_ns);
2434 /* Make sure that the generic name has the right attribute. */
2435 if (current_interface.type == INTERFACE_GENERIC
2436 && current_state == COMP_NONE)
2438 if (new_state == COMP_FUNCTION && sym)
2439 gfc_add_function (&sym->attr, sym->name, NULL);
2440 else if (new_state == COMP_SUBROUTINE && sym)
2441 gfc_add_subroutine (&sym->attr, sym->name, NULL);
2443 current_state = new_state;
2446 if (current_interface.type == INTERFACE_ABSTRACT)
2448 gfc_add_abstract (&gfc_new_block->attr, &gfc_current_locus);
2449 if (gfc_is_intrinsic_typename (gfc_new_block->name))
2450 gfc_error ("Name '%s' of ABSTRACT INTERFACE at %C "
2451 "cannot be the same as an intrinsic type",
2452 gfc_new_block->name);
2455 push_state (&s2, new_state, gfc_new_block);
2456 accept_statement (st);
2457 prog_unit = gfc_new_block;
2458 prog_unit->formal_ns = gfc_current_ns;
2459 if (prog_unit == prog_unit->formal_ns->proc_name
2460 && prog_unit->ns != prog_unit->formal_ns)
2464 /* Read data declaration statements. */
2465 st = parse_spec (ST_NONE);
2467 /* Since the interface block does not permit an IMPLICIT statement,
2468 the default type for the function or the result must be taken
2469 from the formal namespace. */
2470 if (new_state == COMP_FUNCTION)
2472 if (prog_unit->result == prog_unit
2473 && prog_unit->ts.type == BT_UNKNOWN)
2474 gfc_set_default_type (prog_unit, 1, prog_unit->formal_ns);
2475 else if (prog_unit->result != prog_unit
2476 && prog_unit->result->ts.type == BT_UNKNOWN)
2477 gfc_set_default_type (prog_unit->result, 1,
2478 prog_unit->formal_ns);
2481 if (st != ST_END_SUBROUTINE && st != ST_END_FUNCTION)
2483 gfc_error ("Unexpected %s statement at %C in INTERFACE body",
2484 gfc_ascii_statement (st));
2485 reject_statement ();
2489 /* Add EXTERNAL attribute to function or subroutine. */
2490 if (current_interface.type != INTERFACE_ABSTRACT && !prog_unit->attr.dummy)
2491 gfc_add_external (&prog_unit->attr, &gfc_current_locus);
2493 current_interface = save;
2494 gfc_add_interface (prog_unit);
2497 if (current_interface.ns
2498 && current_interface.ns->proc_name
2499 && strcmp (current_interface.ns->proc_name->name,
2500 prog_unit->name) == 0)
2501 gfc_error ("INTERFACE procedure '%s' at %L has the same name as the "
2502 "enclosing procedure", prog_unit->name,
2503 ¤t_interface.ns->proc_name->declared_at);
2512 /* Associate function characteristics by going back to the function
2513 declaration and rematching the prefix. */
2516 match_deferred_characteristics (gfc_typespec * ts)
2519 match m = MATCH_ERROR;
2520 char name[GFC_MAX_SYMBOL_LEN + 1];
2522 loc = gfc_current_locus;
2524 gfc_current_locus = gfc_current_block ()->declared_at;
2527 gfc_buffer_error (1);
2528 m = gfc_match_prefix (ts);
2529 gfc_buffer_error (0);
2531 if (ts->type == BT_DERIVED)
2539 /* Only permit one go at the characteristic association. */
2543 /* Set the function locus correctly. If we have not found the
2544 function name, there is an error. */
2546 && gfc_match ("function% %n", name) == MATCH_YES
2547 && strcmp (name, gfc_current_block ()->name) == 0)
2549 gfc_current_block ()->declared_at = gfc_current_locus;
2550 gfc_commit_symbols ();
2555 gfc_undo_symbols ();
2558 gfc_current_locus =loc;
2563 /* Check specification-expressions in the function result of the currently
2564 parsed block and ensure they are typed (give an IMPLICIT type if necessary).
2565 For return types specified in a FUNCTION prefix, the IMPLICIT rules of the
2566 scope are not yet parsed so this has to be delayed up to parse_spec. */
2569 check_function_result_typed (void)
2571 gfc_typespec* ts = &gfc_current_ns->proc_name->result->ts;
2573 gcc_assert (gfc_current_state () == COMP_FUNCTION);
2574 gcc_assert (ts->type != BT_UNKNOWN);
2576 /* Check type-parameters, at the moment only CHARACTER lengths possible. */
2577 /* TODO: Extend when KIND type parameters are implemented. */
2578 if (ts->type == BT_CHARACTER && ts->u.cl && ts->u.cl->length)
2579 gfc_expr_check_typed (ts->u.cl->length, gfc_current_ns, true);
2583 /* Parse a set of specification statements. Returns the statement
2584 that doesn't fit. */
2586 static gfc_statement
2587 parse_spec (gfc_statement st)
2590 bool function_result_typed = false;
2591 bool bad_characteristic = false;
2594 verify_st_order (&ss, ST_NONE, false);
2596 st = next_statement ();
2598 /* If we are not inside a function or don't have a result specified so far,
2599 do nothing special about it. */
2600 if (gfc_current_state () != COMP_FUNCTION)
2601 function_result_typed = true;
2604 gfc_symbol* proc = gfc_current_ns->proc_name;
2607 if (proc->result->ts.type == BT_UNKNOWN)
2608 function_result_typed = true;
2613 /* If we're inside a BLOCK construct, some statements are disallowed.
2614 Check this here. Attribute declaration statements like INTENT, OPTIONAL
2615 or VALUE are also disallowed, but they don't have a particular ST_*
2616 key so we have to check for them individually in their matcher routine. */
2617 if (gfc_current_state () == COMP_BLOCK)
2621 case ST_IMPLICIT_NONE:
2624 case ST_EQUIVALENCE:
2625 case ST_STATEMENT_FUNCTION:
2626 gfc_error ("%s statement is not allowed inside of BLOCK at %C",
2627 gfc_ascii_statement (st));
2628 reject_statement ();
2635 /* If we find a statement that can not be followed by an IMPLICIT statement
2636 (and thus we can expect to see none any further), type the function result
2637 if it has not yet been typed. Be careful not to give the END statement
2638 to verify_st_order! */
2639 if (!function_result_typed && st != ST_GET_FCN_CHARACTERISTICS)
2641 bool verify_now = false;
2643 if (st == ST_END_FUNCTION || st == ST_CONTAINS)
2648 verify_st_order (&dummyss, ST_NONE, false);
2649 verify_st_order (&dummyss, st, false);
2651 if (verify_st_order (&dummyss, ST_IMPLICIT, true) == FAILURE)
2657 check_function_result_typed ();
2658 function_result_typed = true;
2667 case ST_IMPLICIT_NONE:
2669 if (!function_result_typed)
2671 check_function_result_typed ();
2672 function_result_typed = true;
2678 case ST_DATA: /* Not allowed in interfaces */
2679 if (gfc_current_state () == COMP_INTERFACE)
2689 case ST_DERIVED_DECL:
2692 if (verify_st_order (&ss, st, false) == FAILURE)
2694 reject_statement ();
2695 st = next_statement ();
2705 case ST_DERIVED_DECL:
2711 if (gfc_current_state () != COMP_MODULE)
2713 gfc_error ("%s statement must appear in a MODULE",
2714 gfc_ascii_statement (st));
2715 reject_statement ();
2719 if (gfc_current_ns->default_access != ACCESS_UNKNOWN)
2721 gfc_error ("%s statement at %C follows another accessibility "
2722 "specification", gfc_ascii_statement (st));
2723 reject_statement ();
2727 gfc_current_ns->default_access = (st == ST_PUBLIC)
2728 ? ACCESS_PUBLIC : ACCESS_PRIVATE;
2732 case ST_STATEMENT_FUNCTION:
2733 if (gfc_current_state () == COMP_MODULE)
2735 unexpected_statement (st);
2743 accept_statement (st);
2744 st = next_statement ();
2748 accept_statement (st);
2750 st = next_statement ();
2753 case ST_GET_FCN_CHARACTERISTICS:
2754 /* This statement triggers the association of a function's result
2756 ts = &gfc_current_block ()->result->ts;
2757 if (match_deferred_characteristics (ts) != MATCH_YES)
2758 bad_characteristic = true;
2760 st = next_statement ();
2767 /* If match_deferred_characteristics failed, then there is an error. */
2768 if (bad_characteristic)
2770 ts = &gfc_current_block ()->result->ts;
2771 if (ts->type != BT_DERIVED)
2772 gfc_error ("Bad kind expression for function '%s' at %L",
2773 gfc_current_block ()->name,
2774 &gfc_current_block ()->declared_at);
2776 gfc_error ("The type for function '%s' at %L is not accessible",
2777 gfc_current_block ()->name,
2778 &gfc_current_block ()->declared_at);
2780 gfc_current_block ()->ts.kind = 0;
2781 /* Keep the derived type; if it's bad, it will be discovered later. */
2782 if (!(ts->type == BT_DERIVED && ts->u.derived))
2783 ts->type = BT_UNKNOWN;
2790 /* Parse a WHERE block, (not a simple WHERE statement). */
2793 parse_where_block (void)
2795 int seen_empty_else;
2800 accept_statement (ST_WHERE_BLOCK);
2801 top = gfc_state_stack->tail;
2803 push_state (&s, COMP_WHERE, gfc_new_block);
2805 d = add_statement ();
2806 d->expr1 = top->expr1;
2812 seen_empty_else = 0;
2816 st = next_statement ();
2822 case ST_WHERE_BLOCK:
2823 parse_where_block ();
2828 accept_statement (st);
2832 if (seen_empty_else)
2834 gfc_error ("ELSEWHERE statement at %C follows previous "
2835 "unmasked ELSEWHERE");
2836 reject_statement ();
2840 if (new_st.expr1 == NULL)
2841 seen_empty_else = 1;
2843 d = new_level (gfc_state_stack->head);
2845 d->expr1 = new_st.expr1;
2847 accept_statement (st);
2852 accept_statement (st);
2856 gfc_error ("Unexpected %s statement in WHERE block at %C",
2857 gfc_ascii_statement (st));
2858 reject_statement ();
2862 while (st != ST_END_WHERE);
2868 /* Parse a FORALL block (not a simple FORALL statement). */
2871 parse_forall_block (void)
2877 accept_statement (ST_FORALL_BLOCK);
2878 top = gfc_state_stack->tail;
2880 push_state (&s, COMP_FORALL, gfc_new_block);
2882 d = add_statement ();
2883 d->op = EXEC_FORALL;
2888 st = next_statement ();
2893 case ST_POINTER_ASSIGNMENT:
2896 accept_statement (st);
2899 case ST_WHERE_BLOCK:
2900 parse_where_block ();
2903 case ST_FORALL_BLOCK:
2904 parse_forall_block ();
2908 accept_statement (st);
2915 gfc_error ("Unexpected %s statement in FORALL block at %C",
2916 gfc_ascii_statement (st));
2918 reject_statement ();
2922 while (st != ST_END_FORALL);
2928 static gfc_statement parse_executable (gfc_statement);
2930 /* parse the statements of an IF-THEN-ELSEIF-ELSE-ENDIF block. */
2933 parse_if_block (void)
2942 accept_statement (ST_IF_BLOCK);
2944 top = gfc_state_stack->tail;
2945 push_state (&s, COMP_IF, gfc_new_block);
2947 new_st.op = EXEC_IF;
2948 d = add_statement ();
2950 d->expr1 = top->expr1;
2956 st = parse_executable (ST_NONE);
2966 gfc_error ("ELSE IF statement at %C cannot follow ELSE "
2967 "statement at %L", &else_locus);
2969 reject_statement ();
2973 d = new_level (gfc_state_stack->head);
2975 d->expr1 = new_st.expr1;
2977 accept_statement (st);
2984 gfc_error ("Duplicate ELSE statements at %L and %C",
2986 reject_statement ();
2991 else_locus = gfc_current_locus;
2993 d = new_level (gfc_state_stack->head);
2996 accept_statement (st);
3004 unexpected_statement (st);
3008 while (st != ST_ENDIF);
3011 accept_statement (st);
3015 /* Parse a SELECT block. */
3018 parse_select_block (void)
3024 accept_statement (ST_SELECT_CASE);
3026 cp = gfc_state_stack->tail;
3027 push_state (&s, COMP_SELECT, gfc_new_block);
3029 /* Make sure that the next statement is a CASE or END SELECT. */
3032 st = next_statement ();
3035 if (st == ST_END_SELECT)
3037 /* Empty SELECT CASE is OK. */
3038 accept_statement (st);
3045 gfc_error ("Expected a CASE or END SELECT statement following SELECT "
3048 reject_statement ();
3051 /* At this point, we're got a nonempty select block. */
3052 cp = new_level (cp);
3055 accept_statement (st);
3059 st = parse_executable (ST_NONE);
3066 cp = new_level (gfc_state_stack->head);
3068 gfc_clear_new_st ();
3070 accept_statement (st);
3076 /* Can't have an executable statement because of
3077 parse_executable(). */
3079 unexpected_statement (st);
3083 while (st != ST_END_SELECT);
3086 accept_statement (st);
3090 /* Pop the current selector from the SELECT TYPE stack. */
3093 select_type_pop (void)
3095 gfc_select_type_stack *old = select_type_stack;
3096 select_type_stack = old->prev;
3101 /* Parse a SELECT TYPE construct (F03:R821). */
3104 parse_select_type_block (void)
3110 accept_statement (ST_SELECT_TYPE);
3112 cp = gfc_state_stack->tail;
3113 push_state (&s, COMP_SELECT_TYPE, gfc_new_block);
3115 /* Make sure that the next statement is a TYPE IS, CLASS IS, CLASS DEFAULT
3119 st = next_statement ();
3122 if (st == ST_END_SELECT)
3123 /* Empty SELECT CASE is OK. */
3125 if (st == ST_TYPE_IS || st == ST_CLASS_IS)
3128 gfc_error ("Expected TYPE IS, CLASS IS or END SELECT statement "
3129 "following SELECT TYPE at %C");
3131 reject_statement ();
3134 /* At this point, we're got a nonempty select block. */
3135 cp = new_level (cp);
3138 accept_statement (st);
3142 st = parse_executable (ST_NONE);
3150 cp = new_level (gfc_state_stack->head);
3152 gfc_clear_new_st ();
3154 accept_statement (st);
3160 /* Can't have an executable statement because of
3161 parse_executable(). */
3163 unexpected_statement (st);
3167 while (st != ST_END_SELECT);
3171 accept_statement (st);
3172 gfc_current_ns = gfc_current_ns->parent;
3177 /* Given a symbol, make sure it is not an iteration variable for a DO
3178 statement. This subroutine is called when the symbol is seen in a
3179 context that causes it to become redefined. If the symbol is an
3180 iterator, we generate an error message and return nonzero. */
3183 gfc_check_do_variable (gfc_symtree *st)
3187 for (s=gfc_state_stack; s; s = s->previous)
3188 if (s->do_variable == st)
3190 gfc_error_now("Variable '%s' at %C cannot be redefined inside "
3191 "loop beginning at %L", st->name, &s->head->loc);
3199 /* Checks to see if the current statement label closes an enddo.
3200 Returns 0 if not, 1 if closes an ENDDO correctly, or 2 (and issues
3201 an error) if it incorrectly closes an ENDDO. */
3204 check_do_closure (void)
3208 if (gfc_statement_label == NULL)
3211 for (p = gfc_state_stack; p; p = p->previous)
3212 if (p->state == COMP_DO || p->state == COMP_DO_CONCURRENT)
3216 return 0; /* No loops to close */
3218 if (p->ext.end_do_label == gfc_statement_label)
3220 if (p == gfc_state_stack)
3223 gfc_error ("End of nonblock DO statement at %C is within another block");
3227 /* At this point, the label doesn't terminate the innermost loop.
3228 Make sure it doesn't terminate another one. */
3229 for (; p; p = p->previous)
3230 if ((p->state == COMP_DO || p->state == COMP_DO_CONCURRENT)
3231 && p->ext.end_do_label == gfc_statement_label)
3233 gfc_error ("End of nonblock DO statement at %C is interwoven "
3234 "with another DO loop");
3242 /* Parse a series of contained program units. */
3244 static void parse_progunit (gfc_statement);
3247 /* Parse a CRITICAL block. */
3250 parse_critical_block (void)
3256 s.ext.end_do_label = new_st.label1;
3258 accept_statement (ST_CRITICAL);
3259 top = gfc_state_stack->tail;
3261 push_state (&s, COMP_CRITICAL, gfc_new_block);
3263 d = add_statement ();
3264 d->op = EXEC_CRITICAL;
3269 st = parse_executable (ST_NONE);
3277 case ST_END_CRITICAL:
3278 if (s.ext.end_do_label != NULL
3279 && s.ext.end_do_label != gfc_statement_label)
3280 gfc_error_now ("Statement label in END CRITICAL at %C does not "
3281 "match CRITICAL label");
3283 if (gfc_statement_label != NULL)
3285 new_st.op = EXEC_NOP;
3291 unexpected_statement (st);
3295 while (st != ST_END_CRITICAL);
3298 accept_statement (st);
3302 /* Set up the local namespace for a BLOCK construct. */
3305 gfc_build_block_ns (gfc_namespace *parent_ns)
3307 gfc_namespace* my_ns;
3308 static int numblock = 1;
3310 my_ns = gfc_get_namespace (parent_ns, 1);
3311 my_ns->construct_entities = 1;
3313 /* Give the BLOCK a symbol of flavor LABEL; this is later needed for correct
3314 code generation (so it must not be NULL).
3315 We set its recursive argument if our container procedure is recursive, so
3316 that local variables are accordingly placed on the stack when it
3317 will be necessary. */
3319 my_ns->proc_name = gfc_new_block;
3323 char buffer[20]; /* Enough to hold "block@2147483648\n". */
3325 snprintf(buffer, sizeof(buffer), "block@%d", numblock++);
3326 gfc_get_symbol (buffer, my_ns, &my_ns->proc_name);
3327 t = gfc_add_flavor (&my_ns->proc_name->attr, FL_LABEL,
3328 my_ns->proc_name->name, NULL);
3329 gcc_assert (t == SUCCESS);
3330 gfc_commit_symbol (my_ns->proc_name);
3333 if (parent_ns->proc_name)
3334 my_ns->proc_name->attr.recursive = parent_ns->proc_name->attr.recursive;
3340 /* Parse a BLOCK construct. */
3343 parse_block_construct (void)
3345 gfc_namespace* my_ns;
3348 gfc_notify_std (GFC_STD_F2008, "BLOCK construct at %C");
3350 my_ns = gfc_build_block_ns (gfc_current_ns);
3352 new_st.op = EXEC_BLOCK;
3353 new_st.ext.block.ns = my_ns;
3354 new_st.ext.block.assoc = NULL;
3355 accept_statement (ST_BLOCK);
3357 push_state (&s, COMP_BLOCK, my_ns->proc_name);
3358 gfc_current_ns = my_ns;
3360 parse_progunit (ST_NONE);
3362 gfc_current_ns = gfc_current_ns->parent;
3367 /* Parse an ASSOCIATE construct. This is essentially a BLOCK construct
3368 behind the scenes with compiler-generated variables. */
3371 parse_associate (void)
3373 gfc_namespace* my_ns;
3376 gfc_association_list* a;
3378 gfc_notify_std (GFC_STD_F2003, "ASSOCIATE construct at %C");
3380 my_ns = gfc_build_block_ns (gfc_current_ns);
3382 new_st.op = EXEC_BLOCK;
3383 new_st.ext.block.ns = my_ns;
3384 gcc_assert (new_st.ext.block.assoc);
3386 /* Add all associate-names as BLOCK variables. Creating them is enough
3387 for now, they'll get their values during trans-* phase. */
3388 gfc_current_ns = my_ns;
3389 for (a = new_st.ext.block.assoc; a; a = a->next)
3393 if (gfc_get_sym_tree (a->name, NULL, &a->st, false))
3397 sym->attr.flavor = FL_VARIABLE;
3399 sym->declared_at = a->where;
3400 gfc_set_sym_referenced (sym);
3402 /* Initialize the typespec. It is not available in all cases,
3403 however, as it may only be set on the target during resolution.
3404 Still, sometimes it helps to have it right now -- especially
3405 for parsing component references on the associate-name
3406 in case of association to a derived-type. */
3407 sym->ts = a->target->ts;
3410 accept_statement (ST_ASSOCIATE);
3411 push_state (&s, COMP_ASSOCIATE, my_ns->proc_name);
3414 st = parse_executable (ST_NONE);
3421 accept_statement (st);
3422 my_ns->code = gfc_state_stack->head;
3426 unexpected_statement (st);
3430 gfc_current_ns = gfc_current_ns->parent;
3435 /* Parse a DO loop. Note that the ST_CYCLE and ST_EXIT statements are
3436 handled inside of parse_executable(), because they aren't really
3440 parse_do_block (void)
3449 s.ext.end_do_label = new_st.label1;
3451 if (new_st.ext.iterator != NULL)
3452 stree = new_st.ext.iterator->var->symtree;
3456 accept_statement (ST_DO);
3458 top = gfc_state_stack->tail;
3459 push_state (&s, do_op == EXEC_DO_CONCURRENT ? COMP_DO_CONCURRENT : COMP_DO,
3462 s.do_variable = stree;
3464 top->block = new_level (top);
3465 top->block->op = EXEC_DO;
3468 st = parse_executable (ST_NONE);
3476 if (s.ext.end_do_label != NULL
3477 && s.ext.end_do_label != gfc_statement_label)
3478 gfc_error_now ("Statement label in ENDDO at %C doesn't match "
3481 if (gfc_statement_label != NULL)
3483 new_st.op = EXEC_NOP;
3488 case ST_IMPLIED_ENDDO:
3489 /* If the do-stmt of this DO construct has a do-construct-name,
3490 the corresponding end-do must be an end-do-stmt (with a matching
3491 name, but in that case we must have seen ST_ENDDO first).
3492 We only complain about this in pedantic mode. */
3493 if (gfc_current_block () != NULL)
3494 gfc_error_now ("Named block DO at %L requires matching ENDDO name",
3495 &gfc_current_block()->declared_at);
3500 unexpected_statement (st);
3505 accept_statement (st);
3509 /* Parse the statements of OpenMP do/parallel do. */
3511 static gfc_statement
3512 parse_omp_do (gfc_statement omp_st)
3518 accept_statement (omp_st);
3520 cp = gfc_state_stack->tail;
3521 push_state (&s, COMP_OMP_STRUCTURED_BLOCK, NULL);
3522 np = new_level (cp);
3528 st = next_statement ();
3531 else if (st == ST_DO)
3534 unexpected_statement (st);
3538 if (gfc_statement_label != NULL
3539 && gfc_state_stack->previous != NULL
3540 && gfc_state_stack->previous->state == COMP_DO
3541 && gfc_state_stack->previous->ext.end_do_label == gfc_statement_label)
3549 there should be no !$OMP END DO. */
3551 return ST_IMPLIED_ENDDO;
3554 check_do_closure ();
3557 st = next_statement ();
3558 if (st == (omp_st == ST_OMP_DO ? ST_OMP_END_DO : ST_OMP_END_PARALLEL_DO))
3560 if (new_st.op == EXEC_OMP_END_NOWAIT)
3561 cp->ext.omp_clauses->nowait |= new_st.ext.omp_bool;
3563 gcc_assert (new_st.op == EXEC_NOP);
3564 gfc_clear_new_st ();
3565 gfc_commit_symbols ();
3566 gfc_warning_check ();
3567 st = next_statement ();
3573 /* Parse the statements of OpenMP atomic directive. */
3575 static gfc_statement
3576 parse_omp_atomic (void)
3583 accept_statement (ST_OMP_ATOMIC);
3585 cp = gfc_state_stack->tail;
3586 push_state (&s, COMP_OMP_STRUCTURED_BLOCK, NULL);
3587 np = new_level (cp);
3590 count = 1 + (cp->ext.omp_atomic == GFC_OMP_ATOMIC_CAPTURE);
3594 st = next_statement ();
3597 else if (st == ST_ASSIGNMENT)
3599 accept_statement (st);
3603 unexpected_statement (st);
3608 st = next_statement ();
3609 if (st == ST_OMP_END_ATOMIC)
3611 gfc_clear_new_st ();
3612 gfc_commit_symbols ();
3613 gfc_warning_check ();
3614 st = next_statement ();
3616 else if (cp->ext.omp_atomic == GFC_OMP_ATOMIC_CAPTURE)
3617 gfc_error ("Missing !$OMP END ATOMIC after !$OMP ATOMIC CAPTURE at %C");
3622 /* Parse the statements of an OpenMP structured block. */
3625 parse_omp_structured_block (gfc_statement omp_st, bool workshare_stmts_only)
3627 gfc_statement st, omp_end_st;
3631 accept_statement (omp_st);
3633 cp = gfc_state_stack->tail;
3634 push_state (&s, COMP_OMP_STRUCTURED_BLOCK, NULL);
3635 np = new_level (cp);
3641 case ST_OMP_PARALLEL:
3642 omp_end_st = ST_OMP_END_PARALLEL;
3644 case ST_OMP_PARALLEL_SECTIONS:
3645 omp_end_st = ST_OMP_END_PARALLEL_SECTIONS;
3647 case ST_OMP_SECTIONS:
3648 omp_end_st = ST_OMP_END_SECTIONS;
3650 case ST_OMP_ORDERED:
3651 omp_end_st = ST_OMP_END_ORDERED;
3653 case ST_OMP_CRITICAL:
3654 omp_end_st = ST_OMP_END_CRITICAL;
3657 omp_end_st = ST_OMP_END_MASTER;
3660 omp_end_st = ST_OMP_END_SINGLE;
3663 omp_end_st = ST_OMP_END_TASK;
3665 case ST_OMP_WORKSHARE:
3666 omp_end_st = ST_OMP_END_WORKSHARE;
3668 case ST_OMP_PARALLEL_WORKSHARE:
3669 omp_end_st = ST_OMP_END_PARALLEL_WORKSHARE;
3677 if (workshare_stmts_only)
3679 /* Inside of !$omp workshare, only
3682 where statements and constructs
3683 forall statements and constructs
3687 are allowed. For !$omp critical these
3688 restrictions apply recursively. */
3691 st = next_statement ();
3702 accept_statement (st);
3705 case ST_WHERE_BLOCK:
3706 parse_where_block ();
3709 case ST_FORALL_BLOCK:
3710 parse_forall_block ();
3713 case ST_OMP_PARALLEL:
3714 case ST_OMP_PARALLEL_SECTIONS:
3715 parse_omp_structured_block (st, false);
3718 case ST_OMP_PARALLEL_WORKSHARE:
3719 case ST_OMP_CRITICAL:
3720 parse_omp_structured_block (st, true);
3723 case ST_OMP_PARALLEL_DO:
3724 st = parse_omp_do (st);
3728 st = parse_omp_atomic ();
3739 st = next_statement ();
3743 st = parse_executable (ST_NONE);
3746 else if (st == ST_OMP_SECTION
3747 && (omp_st == ST_OMP_SECTIONS
3748 || omp_st == ST_OMP_PARALLEL_SECTIONS))
3750 np = new_level (np);
3754 else if (st != omp_end_st)
3755 unexpected_statement (st);
3757 while (st != omp_end_st);
3761 case EXEC_OMP_END_NOWAIT:
3762 cp->ext.omp_clauses->nowait |= new_st.ext.omp_bool;
3764 case EXEC_OMP_CRITICAL:
3765 if (((cp->ext.omp_name == NULL) ^ (new_st.ext.omp_name == NULL))
3766 || (new_st.ext.omp_name != NULL
3767 && strcmp (cp->ext.omp_name, new_st.ext.omp_name) != 0))
3768 gfc_error ("Name after !$omp critical and !$omp end critical does "
3770 free (CONST_CAST (char *, new_st.ext.omp_name));
3772 case EXEC_OMP_END_SINGLE:
3773 cp->ext.omp_clauses->lists[OMP_LIST_COPYPRIVATE]
3774 = new_st.ext.omp_clauses->lists[OMP_LIST_COPYPRIVATE];
3775 new_st.ext.omp_clauses->lists[OMP_LIST_COPYPRIVATE] = NULL;
3776 gfc_free_omp_clauses (new_st.ext.omp_clauses);
3784 gfc_clear_new_st ();
3785 gfc_commit_symbols ();
3786 gfc_warning_check ();
3791 /* Accept a series of executable statements. We return the first
3792 statement that doesn't fit to the caller. Any block statements are
3793 passed on to the correct handler, which usually passes the buck
3796 static gfc_statement
3797 parse_executable (gfc_statement st)
3802 st = next_statement ();
3806 close_flag = check_do_closure ();
3811 case ST_END_PROGRAM:
3814 case ST_END_FUNCTION:
3819 case ST_END_SUBROUTINE:
3824 case ST_SELECT_CASE:
3825 gfc_error ("%s statement at %C cannot terminate a non-block "
3826 "DO loop", gfc_ascii_statement (st));
3839 gfc_notify_std (GFC_STD_F95_OBS, "DATA statement at %C after the "
3840 "first executable statement");
3846 accept_statement (st);
3847 if (close_flag == 1)
3848 return ST_IMPLIED_ENDDO;
3852 parse_block_construct ();
3863 case ST_SELECT_CASE:
3864 parse_select_block ();
3867 case ST_SELECT_TYPE:
3868 parse_select_type_block();
3873 if (check_do_closure () == 1)
3874 return ST_IMPLIED_ENDDO;
3878 parse_critical_block ();
3881 case ST_WHERE_BLOCK:
3882 parse_where_block ();
3885 case ST_FORALL_BLOCK:
3886 parse_forall_block ();
3889 case ST_OMP_PARALLEL:
3890 case ST_OMP_PARALLEL_SECTIONS:
3891 case ST_OMP_SECTIONS:
3892 case ST_OMP_ORDERED:
3893 case ST_OMP_CRITICAL:
3897 parse_omp_structured_block (st, false);
3900 case ST_OMP_WORKSHARE:
3901 case ST_OMP_PARALLEL_WORKSHARE:
3902 parse_omp_structured_block (st, true);
3906 case ST_OMP_PARALLEL_DO:
3907 st = parse_omp_do (st);
3908 if (st == ST_IMPLIED_ENDDO)
3913 st = parse_omp_atomic ();
3920 st = next_statement ();
3925 /* Fix the symbols for sibling functions. These are incorrectly added to
3926 the child namespace as the parser didn't know about this procedure. */
3929 gfc_fixup_sibling_symbols (gfc_symbol *sym, gfc_namespace *siblings)
3933 gfc_symbol *old_sym;
3935 for (ns = siblings; ns; ns = ns->sibling)
3937 st = gfc_find_symtree (ns->sym_root, sym->name);
3939 if (!st || (st->n.sym->attr.dummy && ns == st->n.sym->ns))
3940 goto fixup_contained;
3942 if ((st->n.sym->attr.flavor == FL_DERIVED
3943 && sym->attr.generic && sym->attr.function)
3944 ||(sym->attr.flavor == FL_DERIVED
3945 && st->n.sym->attr.generic && st->n.sym->attr.function))
3946 goto fixup_contained;
3948 old_sym = st->n.sym;
3949 if (old_sym->ns == ns
3950 && !old_sym->attr.contained
3952 /* By 14.6.1.3, host association should be excluded
3953 for the following. */
3954 && !(old_sym->attr.external
3955 || (old_sym->ts.type != BT_UNKNOWN
3956 && !old_sym->attr.implicit_type)
3957 || old_sym->attr.flavor == FL_PARAMETER
3958 || old_sym->attr.use_assoc
3959 || old_sym->attr.in_common
3960 || old_sym->attr.in_equivalence
3961 || old_sym->attr.data
3962 || old_sym->attr.dummy
3963 || old_sym->attr.result
3964 || old_sym->attr.dimension
3965 || old_sym->attr.allocatable
3966 || old_sym->attr.intrinsic
3967 || old_sym->attr.generic
3968 || old_sym->attr.flavor == FL_NAMELIST
3969 || old_sym->attr.flavor == FL_LABEL
3970 || old_sym->attr.proc == PROC_ST_FUNCTION))
3972 /* Replace it with the symbol from the parent namespace. */
3976 gfc_release_symbol (old_sym);
3980 /* Do the same for any contained procedures. */
3981 gfc_fixup_sibling_symbols (sym, ns->contained);
3986 parse_contained (int module)
3988 gfc_namespace *ns, *parent_ns, *tmp;
3989 gfc_state_data s1, s2;
3993 int contains_statements = 0;
3996 push_state (&s1, COMP_CONTAINS, NULL);
3997 parent_ns = gfc_current_ns;
4001 gfc_current_ns = gfc_get_namespace (parent_ns, 1);
4003 gfc_current_ns->sibling = parent_ns->contained;
4004 parent_ns->contained = gfc_current_ns;
4007 /* Process the next available statement. We come here if we got an error
4008 and rejected the last statement. */
4009 st = next_statement ();
4018 contains_statements = 1;
4019 accept_statement (st);
4022 (st == ST_FUNCTION) ? COMP_FUNCTION : COMP_SUBROUTINE,
4025 /* For internal procedures, create/update the symbol in the
4026 parent namespace. */
4030 if (gfc_get_symbol (gfc_new_block->name, parent_ns, &sym))
4031 gfc_error ("Contained procedure '%s' at %C is already "
4032 "ambiguous", gfc_new_block->name);
4035 if (gfc_add_procedure (&sym->attr, PROC_INTERNAL, sym->name,
4036 &gfc_new_block->declared_at) ==
4039 if (st == ST_FUNCTION)
4040 gfc_add_function (&sym->attr, sym->name,
4041 &gfc_new_block->declared_at);
4043 gfc_add_subroutine (&sym->attr, sym->name,
4044 &gfc_new_block->declared_at);
4048 gfc_commit_symbols ();
4051 sym = gfc_new_block;
4053 /* Mark this as a contained function, so it isn't replaced
4054 by other module functions. */
4055 sym->attr.contained = 1;
4057 /* Set implicit_pure so that it can be reset if any of the
4058 tests for purity fail. This is used for some optimisation
4059 during translation. */
4060 if (!sym->attr.pure)
4061 sym->attr.implicit_pure = 1;
4063 parse_progunit (ST_NONE);
4065 /* Fix up any sibling functions that refer to this one. */
4066 gfc_fixup_sibling_symbols (sym, gfc_current_ns);
4067 /* Or refer to any of its alternate entry points. */
4068 for (el = gfc_current_ns->entries; el; el = el->next)
4069 gfc_fixup_sibling_symbols (el->sym, gfc_current_ns);
4071 gfc_current_ns->code = s2.head;
4072 gfc_current_ns = parent_ns;
4077 /* These statements are associated with the end of the host unit. */
4078 case ST_END_FUNCTION:
4080 case ST_END_PROGRAM:
4081 case ST_END_SUBROUTINE:
4082 accept_statement (st);
4083 gfc_current_ns->code = s1.head;
4087 gfc_error ("Unexpected %s statement in CONTAINS section at %C",
4088 gfc_ascii_statement (st));
4089 reject_statement ();
4095 while (st != ST_END_FUNCTION && st != ST_END_SUBROUTINE
4096 && st != ST_END_MODULE && st != ST_END_PROGRAM);
4098 /* The first namespace in the list is guaranteed to not have
4099 anything (worthwhile) in it. */
4100 tmp = gfc_current_ns;
4101 gfc_current_ns = parent_ns;
4102 if (seen_error && tmp->refs > 1)
4103 gfc_free_namespace (tmp);
4105 ns = gfc_current_ns->contained;
4106 gfc_current_ns->contained = ns->sibling;
4107 gfc_free_namespace (ns);
4110 if (!contains_statements)
4111 gfc_notify_std (GFC_STD_F2008, "CONTAINS statement without "
4112 "FUNCTION or SUBROUTINE statement at %C");
4116 /* Parse a PROGRAM, SUBROUTINE, FUNCTION unit or BLOCK construct. */
4119 parse_progunit (gfc_statement st)
4124 st = parse_spec (st);
4131 /* This is not allowed within BLOCK! */
4132 if (gfc_current_state () != COMP_BLOCK)
4137 accept_statement (st);
4144 if (gfc_current_state () == COMP_FUNCTION)
4145 gfc_check_function_type (gfc_current_ns);
4150 st = parse_executable (st);
4158 /* This is not allowed within BLOCK! */
4159 if (gfc_current_state () != COMP_BLOCK)
4164 accept_statement (st);
4171 unexpected_statement (st);
4172 reject_statement ();
4173 st = next_statement ();
4179 for (p = gfc_state_stack; p; p = p->previous)
4180 if (p->state == COMP_CONTAINS)
4183 if (gfc_find_state (COMP_MODULE) == SUCCESS)
4188 gfc_error ("CONTAINS statement at %C is already in a contained "
4190 reject_statement ();
4191 st = next_statement ();
4195 parse_contained (0);
4198 gfc_current_ns->code = gfc_state_stack->head;
4202 /* Come here to complain about a global symbol already in use as
4206 gfc_global_used (gfc_gsymbol *sym, locus *where)
4211 where = &gfc_current_locus;
4221 case GSYM_SUBROUTINE:
4222 name = "SUBROUTINE";
4227 case GSYM_BLOCK_DATA:
4228 name = "BLOCK DATA";
4234 gfc_internal_error ("gfc_global_used(): Bad type");
4238 gfc_error("Global name '%s' at %L is already being used as a %s at %L",
4239 sym->name, where, name, &sym->where);
4243 /* Parse a block data program unit. */
4246 parse_block_data (void)
4249 static locus blank_locus;
4250 static int blank_block=0;
4253 gfc_current_ns->proc_name = gfc_new_block;
4254 gfc_current_ns->is_block_data = 1;
4256 if (gfc_new_block == NULL)
4259 gfc_error ("Blank BLOCK DATA at %C conflicts with "
4260 "prior BLOCK DATA at %L", &blank_locus);
4264 blank_locus = gfc_current_locus;
4269 s = gfc_get_gsymbol (gfc_new_block->name);
4271 || (s->type != GSYM_UNKNOWN && s->type != GSYM_BLOCK_DATA))
4272 gfc_global_used(s, NULL);
4275 s->type = GSYM_BLOCK_DATA;
4276 s->where = gfc_current_locus;
4281 st = parse_spec (ST_NONE);
4283 while (st != ST_END_BLOCK_DATA)
4285 gfc_error ("Unexpected %s statement in BLOCK DATA at %C",
4286 gfc_ascii_statement (st));
4287 reject_statement ();
4288 st = next_statement ();
4293 /* Parse a module subprogram. */
4302 s = gfc_get_gsymbol (gfc_new_block->name);
4303 if (s->defined || (s->type != GSYM_UNKNOWN && s->type != GSYM_MODULE))
4304 gfc_global_used(s, NULL);
4307 s->type = GSYM_MODULE;
4308 s->where = gfc_current_locus;
4312 st = parse_spec (ST_NONE);
4322 parse_contained (1);
4326 accept_statement (st);
4330 gfc_error ("Unexpected %s statement in MODULE at %C",
4331 gfc_ascii_statement (st));
4334 reject_statement ();
4335 st = next_statement ();
4339 /* Make sure not to free the namespace twice on error. */
4341 s->ns = gfc_current_ns;
4345 /* Add a procedure name to the global symbol table. */
4348 add_global_procedure (int sub)
4352 s = gfc_get_gsymbol(gfc_new_block->name);
4355 || (s->type != GSYM_UNKNOWN
4356 && s->type != (sub ? GSYM_SUBROUTINE : GSYM_FUNCTION)))
4357 gfc_global_used(s, NULL);
4360 s->type = sub ? GSYM_SUBROUTINE : GSYM_FUNCTION;
4361 s->where = gfc_current_locus;
4363 s->ns = gfc_current_ns;
4368 /* Add a program to the global symbol table. */
4371 add_global_program (void)
4375 if (gfc_new_block == NULL)
4377 s = gfc_get_gsymbol (gfc_new_block->name);
4379 if (s->defined || (s->type != GSYM_UNKNOWN && s->type != GSYM_PROGRAM))
4380 gfc_global_used(s, NULL);
4383 s->type = GSYM_PROGRAM;
4384 s->where = gfc_current_locus;
4386 s->ns = gfc_current_ns;
4391 /* Resolve all the program units when whole file scope option
4394 resolve_all_program_units (gfc_namespace *gfc_global_ns_list)
4396 gfc_free_dt_list ();
4397 gfc_current_ns = gfc_global_ns_list;
4398 for (; gfc_current_ns; gfc_current_ns = gfc_current_ns->sibling)
4400 if (gfc_current_ns->proc_name
4401 && gfc_current_ns->proc_name->attr.flavor == FL_MODULE)
4402 continue; /* Already resolved. */
4404 if (gfc_current_ns->proc_name)
4405 gfc_current_locus = gfc_current_ns->proc_name->declared_at;
4406 gfc_resolve (gfc_current_ns);
4407 gfc_current_ns->derived_types = gfc_derived_types;
4408 gfc_derived_types = NULL;
4414 clean_up_modules (gfc_gsymbol *gsym)
4419 clean_up_modules (gsym->left);
4420 clean_up_modules (gsym->right);
4422 if (gsym->type != GSYM_MODULE || !gsym->ns)
4425 gfc_current_ns = gsym->ns;
4426 gfc_derived_types = gfc_current_ns->derived_types;
4433 /* Translate all the program units when whole file scope option
4434 is active. This could be in a different order to resolution if
4435 there are forward references in the file. */
4437 translate_all_program_units (gfc_namespace *gfc_global_ns_list,
4442 gfc_current_ns = gfc_global_ns_list;
4443 gfc_get_errors (NULL, &errors);
4445 /* If the main program is in the translation unit and we have
4446 -fcoarray=libs, generate the static variables. */
4447 if (gfc_option.coarray == GFC_FCOARRAY_LIB && main_in_tu)
4448 gfc_init_coarray_decl (true);
4450 /* We first translate all modules to make sure that later parts
4451 of the program can use the decl. Then we translate the nonmodules. */
4453 for (; !errors && gfc_current_ns; gfc_current_ns = gfc_current_ns->sibling)
4455 if (!gfc_current_ns->proc_name
4456 || gfc_current_ns->proc_name->attr.flavor != FL_MODULE)
4459 gfc_current_locus = gfc_current_ns->proc_name->declared_at;
4460 gfc_derived_types = gfc_current_ns->derived_types;
4461 gfc_generate_module_code (gfc_current_ns);
4462 gfc_current_ns->translated = 1;
4465 gfc_current_ns = gfc_global_ns_list;
4466 for (; !errors && gfc_current_ns; gfc_current_ns = gfc_current_ns->sibling)
4468 if (gfc_current_ns->proc_name
4469 && gfc_current_ns->proc_name->attr.flavor == FL_MODULE)
4472 gfc_current_locus = gfc_current_ns->proc_name->declared_at;
4473 gfc_derived_types = gfc_current_ns->derived_types;
4474 gfc_generate_code (gfc_current_ns);
4475 gfc_current_ns->translated = 1;
4478 /* Clean up all the namespaces after translation. */
4479 gfc_current_ns = gfc_global_ns_list;
4480 for (;gfc_current_ns;)
4484 if (gfc_current_ns->proc_name
4485 && gfc_current_ns->proc_name->attr.flavor == FL_MODULE)
4487 gfc_current_ns = gfc_current_ns->sibling;
4491 ns = gfc_current_ns->sibling;
4492 gfc_derived_types = gfc_current_ns->derived_types;
4494 gfc_current_ns = ns;
4497 clean_up_modules (gfc_gsym_root);
4501 /* Top level parser. */
4504 gfc_parse_file (void)
4506 int seen_program, errors_before, errors;
4507 gfc_state_data top, s;
4510 gfc_namespace *next;
4512 gfc_start_source_files ();
4514 top.state = COMP_NONE;
4516 top.previous = NULL;
4517 top.head = top.tail = NULL;
4518 top.do_variable = NULL;
4520 gfc_state_stack = ⊤
4522 gfc_clear_new_st ();
4524 gfc_statement_label = NULL;
4526 if (setjmp (eof_buf))
4527 return FAILURE; /* Come here on unexpected EOF */
4529 /* Prepare the global namespace that will contain the
4531 gfc_global_ns_list = next = NULL;
4536 /* Exit early for empty files. */
4542 st = next_statement ();
4551 goto duplicate_main;
4553 prog_locus = gfc_current_locus;
4555 push_state (&s, COMP_PROGRAM, gfc_new_block);
4556 main_program_symbol(gfc_current_ns, gfc_new_block->name);
4557 accept_statement (st);
4558 add_global_program ();
4559 parse_progunit (ST_NONE);
4560 if (gfc_option.flag_whole_file)
4565 add_global_procedure (1);
4566 push_state (&s, COMP_SUBROUTINE, gfc_new_block);
4567 accept_statement (st);
4568 parse_progunit (ST_NONE);
4569 if (gfc_option.flag_whole_file)
4574 add_global_procedure (0);
4575 push_state (&s, COMP_FUNCTION, gfc_new_block);
4576 accept_statement (st);
4577 parse_progunit (ST_NONE);
4578 if (gfc_option.flag_whole_file)
4583 push_state (&s, COMP_BLOCK_DATA, gfc_new_block);
4584 accept_statement (st);
4585 parse_block_data ();
4589 push_state (&s, COMP_MODULE, gfc_new_block);
4590 accept_statement (st);
4592 gfc_get_errors (NULL, &errors_before);
4596 /* Anything else starts a nameless main program block. */
4599 goto duplicate_main;
4601 prog_locus = gfc_current_locus;
4603 push_state (&s, COMP_PROGRAM, gfc_new_block);
4604 main_program_symbol (gfc_current_ns, "MAIN__");
4605 parse_progunit (st);
4606 if (gfc_option.flag_whole_file)
4611 /* Handle the non-program units. */
4612 gfc_current_ns->code = s.head;
4614 gfc_resolve (gfc_current_ns);
4616 /* Dump the parse tree if requested. */
4617 if (gfc_option.dump_fortran_original)
4618 gfc_dump_parse_tree (gfc_current_ns, stdout);
4620 gfc_get_errors (NULL, &errors);
4621 if (s.state == COMP_MODULE)
4623 gfc_dump_module (s.sym->name, errors_before == errors);
4624 if (!gfc_option.flag_whole_file)
4627 gfc_generate_module_code (gfc_current_ns);
4633 gfc_current_ns->derived_types = gfc_derived_types;
4634 gfc_derived_types = NULL;
4641 gfc_generate_code (gfc_current_ns);
4649 /* The main program and non-contained procedures are put
4650 in the global namespace list, so that they can be processed
4651 later and all their interfaces resolved. */
4652 gfc_current_ns->code = s.head;
4655 for (; next->sibling; next = next->sibling)
4657 next->sibling = gfc_current_ns;
4660 gfc_global_ns_list = gfc_current_ns;
4662 next = gfc_current_ns;
4669 if (!gfc_option.flag_whole_file)
4672 /* Do the resolution. */
4673 resolve_all_program_units (gfc_global_ns_list);
4675 /* Do the parse tree dump. */
4677 = gfc_option.dump_fortran_original ? gfc_global_ns_list : NULL;
4679 for (; gfc_current_ns; gfc_current_ns = gfc_current_ns->sibling)
4680 if (!gfc_current_ns->proc_name
4681 || gfc_current_ns->proc_name->attr.flavor != FL_MODULE)
4683 gfc_dump_parse_tree (gfc_current_ns, stdout);
4684 fputs ("------------------------------------------\n\n", stdout);
4687 /* Do the translation. */
4688 translate_all_program_units (gfc_global_ns_list, seen_program);
4692 gfc_end_source_files ();
4696 /* If we see a duplicate main program, shut down. If the second
4697 instance is an implied main program, i.e. data decls or executable
4698 statements, we're in for lots of errors. */
4699 gfc_error ("Two main PROGRAMs at %L and %C", &prog_locus);
4700 reject_statement ();