1 /* Matching subroutines in all sizes, shapes and colors.
2 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
3 Free Software Foundation, Inc.
4 Contributed by Andy Vaught
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
29 /* For matching and debugging purposes. Order matters here! The
30 unary operators /must/ precede the binary plus and minus, or
31 the expression parser breaks. */
33 mstring intrinsic_operators[] = {
34 minit ("+", INTRINSIC_UPLUS),
35 minit ("-", INTRINSIC_UMINUS),
36 minit ("+", INTRINSIC_PLUS),
37 minit ("-", INTRINSIC_MINUS),
38 minit ("**", INTRINSIC_POWER),
39 minit ("//", INTRINSIC_CONCAT),
40 minit ("*", INTRINSIC_TIMES),
41 minit ("/", INTRINSIC_DIVIDE),
42 minit (".and.", INTRINSIC_AND),
43 minit (".or.", INTRINSIC_OR),
44 minit (".eqv.", INTRINSIC_EQV),
45 minit (".neqv.", INTRINSIC_NEQV),
46 minit (".eq.", INTRINSIC_EQ_OS),
47 minit ("==", INTRINSIC_EQ),
48 minit (".ne.", INTRINSIC_NE_OS),
49 minit ("/=", INTRINSIC_NE),
50 minit (".ge.", INTRINSIC_GE_OS),
51 minit (">=", INTRINSIC_GE),
52 minit (".le.", INTRINSIC_LE_OS),
53 minit ("<=", INTRINSIC_LE),
54 minit (".lt.", INTRINSIC_LT_OS),
55 minit ("<", INTRINSIC_LT),
56 minit (".gt.", INTRINSIC_GT_OS),
57 minit (">", INTRINSIC_GT),
58 minit (".not.", INTRINSIC_NOT),
59 minit ("parens", INTRINSIC_PARENTHESES),
60 minit (NULL, INTRINSIC_NONE)
64 /******************** Generic matching subroutines ************************/
66 /* See if the next character is a special character that has
67 escaped by a \ via the -fbackslash option. */
70 gfc_match_special_char (int *c)
77 switch (gfc_next_char_literal (1))
107 /* Unknown backslash codes are simply not expanded. */
116 /* In free form, match at least one space. Always matches in fixed
120 gfc_match_space (void)
125 if (gfc_current_form == FORM_FIXED)
128 old_loc = gfc_current_locus;
130 c = gfc_next_char ();
131 if (!gfc_is_whitespace (c))
133 gfc_current_locus = old_loc;
137 gfc_gobble_whitespace ();
143 /* Match an end of statement. End of statement is optional
144 whitespace, followed by a ';' or '\n' or comment '!'. If a
145 semicolon is found, we continue to eat whitespace and semicolons. */
157 old_loc = gfc_current_locus;
158 gfc_gobble_whitespace ();
160 c = gfc_next_char ();
166 c = gfc_next_char ();
183 gfc_current_locus = old_loc;
184 return (flag) ? MATCH_YES : MATCH_NO;
188 /* Match a literal integer on the input, setting the value on
189 MATCH_YES. Literal ints occur in kind-parameters as well as
190 old-style character length specifications. If cnt is non-NULL it
191 will be set to the number of digits. */
194 gfc_match_small_literal_int (int *value, int *cnt)
200 old_loc = gfc_current_locus;
202 gfc_gobble_whitespace ();
203 c = gfc_next_char ();
209 gfc_current_locus = old_loc;
218 old_loc = gfc_current_locus;
219 c = gfc_next_char ();
224 i = 10 * i + c - '0';
229 gfc_error ("Integer too large at %C");
234 gfc_current_locus = old_loc;
243 /* Match a small, constant integer expression, like in a kind
244 statement. On MATCH_YES, 'value' is set. */
247 gfc_match_small_int (int *value)
254 m = gfc_match_expr (&expr);
258 p = gfc_extract_int (expr, &i);
259 gfc_free_expr (expr);
272 /* This function is the same as the gfc_match_small_int, except that
273 we're keeping the pointer to the expr. This function could just be
274 removed and the previously mentioned one modified, though all calls
275 to it would have to be modified then (and there were a number of
276 them). Return MATCH_ERROR if fail to extract the int; otherwise,
277 return the result of gfc_match_expr(). The expr (if any) that was
278 matched is returned in the parameter expr. */
281 gfc_match_small_int_expr (int *value, gfc_expr **expr)
287 m = gfc_match_expr (expr);
291 p = gfc_extract_int (*expr, &i);
304 /* Matches a statement label. Uses gfc_match_small_literal_int() to
305 do most of the work. */
308 gfc_match_st_label (gfc_st_label **label)
314 old_loc = gfc_current_locus;
316 m = gfc_match_small_literal_int (&i, &cnt);
322 gfc_error ("Too many digits in statement label at %C");
328 gfc_error ("Statement label at %C is zero");
332 *label = gfc_get_st_label (i);
337 gfc_current_locus = old_loc;
342 /* Match and validate a label associated with a named IF, DO or SELECT
343 statement. If the symbol does not have the label attribute, we add
344 it. We also make sure the symbol does not refer to another
345 (active) block. A matched label is pointed to by gfc_new_block. */
348 gfc_match_label (void)
350 char name[GFC_MAX_SYMBOL_LEN + 1];
353 gfc_new_block = NULL;
355 m = gfc_match (" %n :", name);
359 if (gfc_get_symbol (name, NULL, &gfc_new_block))
361 gfc_error ("Label name '%s' at %C is ambiguous", name);
365 if (gfc_new_block->attr.flavor == FL_LABEL)
367 gfc_error ("Duplicate construct label '%s' at %C", name);
371 if (gfc_add_flavor (&gfc_new_block->attr, FL_LABEL,
372 gfc_new_block->name, NULL) == FAILURE)
379 /* Try and match the input against an array of possibilities. If one
380 potential matching string is a substring of another, the longest
381 match takes precedence. Spaces in the target strings are optional
382 spaces that do not necessarily have to be found in the input
383 stream. In fixed mode, spaces never appear. If whitespace is
384 matched, it matches unlimited whitespace in the input. For this
385 reason, the 'mp' member of the mstring structure is used to track
386 the progress of each potential match.
388 If there is no match we return the tag associated with the
389 terminating NULL mstring structure and leave the locus pointer
390 where it started. If there is a match we return the tag member of
391 the matched mstring and leave the locus pointer after the matched
394 A '%' character is a mandatory space. */
397 gfc_match_strings (mstring *a)
399 mstring *p, *best_match;
400 int no_match, c, possibles;
405 for (p = a; p->string != NULL; p++)
414 match_loc = gfc_current_locus;
416 gfc_gobble_whitespace ();
418 while (possibles > 0)
420 c = gfc_next_char ();
422 /* Apply the next character to the current possibilities. */
423 for (p = a; p->string != NULL; p++)
430 /* Space matches 1+ whitespace(s). */
431 if ((gfc_current_form == FORM_FREE) && gfc_is_whitespace (c))
449 match_loc = gfc_current_locus;
457 gfc_current_locus = match_loc;
459 return (best_match == NULL) ? no_match : best_match->tag;
463 /* See if the current input looks like a name of some sort. Modifies
464 the passed buffer which must be GFC_MAX_SYMBOL_LEN+1 bytes long.
465 Note that options.c restricts max_identifier_length to not more
466 than GFC_MAX_SYMBOL_LEN. */
469 gfc_match_name (char *buffer)
474 old_loc = gfc_current_locus;
475 gfc_gobble_whitespace ();
477 c = gfc_next_char ();
478 if (!(ISALPHA (c) || (c == '_' && gfc_option.flag_allow_leading_underscore)))
480 if (gfc_error_flag_test() == 0)
481 gfc_error ("Invalid character in name at %C");
482 gfc_current_locus = old_loc;
492 if (i > gfc_option.max_identifier_length)
494 gfc_error ("Name at %C is too long");
498 old_loc = gfc_current_locus;
499 c = gfc_next_char ();
501 while (ISALNUM (c) || c == '_' || (gfc_option.flag_dollar_ok && c == '$'));
504 gfc_current_locus = old_loc;
510 /* Match a valid name for C, which is almost the same as for Fortran,
511 except that you can start with an underscore, etc.. It could have
512 been done by modifying the gfc_match_name, but this way other
513 things C allows can be added, such as no limits on the length.
514 Right now, the length is limited to the same thing as Fortran..
515 Also, by rewriting it, we use the gfc_next_char_C() to prevent the
516 input characters from being automatically lower cased, since C is
517 case sensitive. The parameter, buffer, is used to return the name
518 that is matched. Return MATCH_ERROR if the name is too long
519 (though this is a self-imposed limit), MATCH_NO if what we're
520 seeing isn't a name, and MATCH_YES if we successfully match a C
524 gfc_match_name_C (char *buffer)
530 old_loc = gfc_current_locus;
531 gfc_gobble_whitespace ();
533 /* Get the next char (first possible char of name) and see if
534 it's valid for C (either a letter or an underscore). */
535 c = gfc_next_char_literal (1);
537 /* If the user put nothing expect spaces between the quotes, it is valid
538 and simply means there is no name= specifier and the name is the fortran
539 symbol name, all lowercase. */
540 if (c == '"' || c == '\'')
543 gfc_current_locus = old_loc;
547 if (!ISALPHA (c) && c != '_')
549 gfc_error ("Invalid C name in NAME= specifier at %C");
553 /* Continue to read valid variable name characters. */
558 /* C does not define a maximum length of variable names, to my
559 knowledge, but the compiler typically places a limit on them.
560 For now, i'll use the same as the fortran limit for simplicity,
561 but this may need to be changed to a dynamic buffer that can
562 be realloc'ed here if necessary, or more likely, a larger
564 if (i > gfc_option.max_identifier_length)
566 gfc_error ("Name at %C is too long");
570 old_loc = gfc_current_locus;
572 /* Get next char; param means we're in a string. */
573 c = gfc_next_char_literal (1);
574 } while (ISALNUM (c) || c == '_');
577 gfc_current_locus = old_loc;
579 /* See if we stopped because of whitespace. */
582 gfc_gobble_whitespace ();
583 c = gfc_peek_char ();
584 if (c != '"' && c != '\'')
586 gfc_error ("Embedded space in NAME= specifier at %C");
591 /* If we stopped because we had an invalid character for a C name, report
592 that to the user by returning MATCH_NO. */
593 if (c != '"' && c != '\'')
595 gfc_error ("Invalid C name in NAME= specifier at %C");
603 /* Match a symbol on the input. Modifies the pointer to the symbol
604 pointer if successful. */
607 gfc_match_sym_tree (gfc_symtree **matched_symbol, int host_assoc)
609 char buffer[GFC_MAX_SYMBOL_LEN + 1];
612 m = gfc_match_name (buffer);
617 return (gfc_get_ha_sym_tree (buffer, matched_symbol))
618 ? MATCH_ERROR : MATCH_YES;
620 if (gfc_get_sym_tree (buffer, NULL, matched_symbol))
628 gfc_match_symbol (gfc_symbol **matched_symbol, int host_assoc)
633 m = gfc_match_sym_tree (&st, host_assoc);
638 *matched_symbol = st->n.sym;
640 *matched_symbol = NULL;
643 *matched_symbol = NULL;
648 /* Match an intrinsic operator. Returns an INTRINSIC enum. While matching,
649 we always find INTRINSIC_PLUS before INTRINSIC_UPLUS. We work around this
653 gfc_match_intrinsic_op (gfc_intrinsic_op *result)
657 op = (gfc_intrinsic_op) gfc_match_strings (intrinsic_operators);
659 if (op == INTRINSIC_NONE)
667 /* Match a loop control phrase:
669 <LVALUE> = <EXPR>, <EXPR> [, <EXPR> ]
671 If the final integer expression is not present, a constant unity
672 expression is returned. We don't return MATCH_ERROR until after
673 the equals sign is seen. */
676 gfc_match_iterator (gfc_iterator *iter, int init_flag)
678 char name[GFC_MAX_SYMBOL_LEN + 1];
679 gfc_expr *var, *e1, *e2, *e3;
683 /* Match the start of an iterator without affecting the symbol table. */
685 start = gfc_current_locus;
686 m = gfc_match (" %n =", name);
687 gfc_current_locus = start;
692 m = gfc_match_variable (&var, 0);
696 gfc_match_char ('=');
700 if (var->ref != NULL)
702 gfc_error ("Loop variable at %C cannot be a sub-component");
706 if (var->symtree->n.sym->attr.intent == INTENT_IN)
708 gfc_error ("Loop variable '%s' at %C cannot be INTENT(IN)",
709 var->symtree->n.sym->name);
713 var->symtree->n.sym->attr.implied_index = 1;
715 m = init_flag ? gfc_match_init_expr (&e1) : gfc_match_expr (&e1);
718 if (m == MATCH_ERROR)
721 if (gfc_match_char (',') != MATCH_YES)
724 m = init_flag ? gfc_match_init_expr (&e2) : gfc_match_expr (&e2);
727 if (m == MATCH_ERROR)
730 if (gfc_match_char (',') != MATCH_YES)
732 e3 = gfc_int_expr (1);
736 m = init_flag ? gfc_match_init_expr (&e3) : gfc_match_expr (&e3);
737 if (m == MATCH_ERROR)
741 gfc_error ("Expected a step value in iterator at %C");
753 gfc_error ("Syntax error in iterator at %C");
764 /* Tries to match the next non-whitespace character on the input.
765 This subroutine does not return MATCH_ERROR. */
768 gfc_match_char (char c)
772 where = gfc_current_locus;
773 gfc_gobble_whitespace ();
775 if (gfc_next_char () == c)
778 gfc_current_locus = where;
783 /* General purpose matching subroutine. The target string is a
784 scanf-like format string in which spaces correspond to arbitrary
785 whitespace (including no whitespace), characters correspond to
786 themselves. The %-codes are:
788 %% Literal percent sign
789 %e Expression, pointer to a pointer is set
790 %s Symbol, pointer to the symbol is set
791 %n Name, character buffer is set to name
792 %t Matches end of statement.
793 %o Matches an intrinsic operator, returned as an INTRINSIC enum.
794 %l Matches a statement label
795 %v Matches a variable expression (an lvalue)
796 % Matches a required space (in free form) and optional spaces. */
799 gfc_match (const char *target, ...)
801 gfc_st_label **label;
810 old_loc = gfc_current_locus;
811 va_start (argp, target);
821 gfc_gobble_whitespace ();
832 vp = va_arg (argp, void **);
833 n = gfc_match_expr ((gfc_expr **) vp);
844 vp = va_arg (argp, void **);
845 n = gfc_match_variable ((gfc_expr **) vp, 0);
856 vp = va_arg (argp, void **);
857 n = gfc_match_symbol ((gfc_symbol **) vp, 0);
868 np = va_arg (argp, char *);
869 n = gfc_match_name (np);
880 label = va_arg (argp, gfc_st_label **);
881 n = gfc_match_st_label (label);
892 ip = va_arg (argp, int *);
893 n = gfc_match_intrinsic_op ((gfc_intrinsic_op *) ip);
904 if (gfc_match_eos () != MATCH_YES)
912 if (gfc_match_space () == MATCH_YES)
918 break; /* Fall through to character matcher. */
921 gfc_internal_error ("gfc_match(): Bad match code %c", c);
925 if (c == gfc_next_char ())
935 /* Clean up after a failed match. */
936 gfc_current_locus = old_loc;
937 va_start (argp, target);
940 for (; matches > 0; matches--)
950 /* Matches that don't have to be undone */
955 (void) va_arg (argp, void **);
960 vp = va_arg (argp, void **);
974 /*********************** Statement level matching **********************/
976 /* Matches the start of a program unit, which is the program keyword
977 followed by an obligatory symbol. */
980 gfc_match_program (void)
985 m = gfc_match ("% %s%t", &sym);
989 gfc_error ("Invalid form of PROGRAM statement at %C");
993 if (m == MATCH_ERROR)
996 if (gfc_add_flavor (&sym->attr, FL_PROGRAM, sym->name, NULL) == FAILURE)
1005 /* Match a simple assignment statement. */
1008 gfc_match_assignment (void)
1010 gfc_expr *lvalue, *rvalue;
1014 old_loc = gfc_current_locus;
1017 m = gfc_match (" %v =", &lvalue);
1020 gfc_current_locus = old_loc;
1021 gfc_free_expr (lvalue);
1025 if (lvalue->symtree->n.sym->attr.protected
1026 && lvalue->symtree->n.sym->attr.use_assoc)
1028 gfc_current_locus = old_loc;
1029 gfc_free_expr (lvalue);
1030 gfc_error ("Setting value of PROTECTED variable at %C");
1035 m = gfc_match (" %e%t", &rvalue);
1038 gfc_current_locus = old_loc;
1039 gfc_free_expr (lvalue);
1040 gfc_free_expr (rvalue);
1044 gfc_set_sym_referenced (lvalue->symtree->n.sym);
1046 new_st.op = EXEC_ASSIGN;
1047 new_st.expr = lvalue;
1048 new_st.expr2 = rvalue;
1050 gfc_check_do_variable (lvalue->symtree);
1056 /* Match a pointer assignment statement. */
1059 gfc_match_pointer_assignment (void)
1061 gfc_expr *lvalue, *rvalue;
1065 old_loc = gfc_current_locus;
1067 lvalue = rvalue = NULL;
1069 m = gfc_match (" %v =>", &lvalue);
1076 m = gfc_match (" %e%t", &rvalue);
1080 if (lvalue->symtree->n.sym->attr.protected
1081 && lvalue->symtree->n.sym->attr.use_assoc)
1083 gfc_error ("Assigning to a PROTECTED pointer at %C");
1088 new_st.op = EXEC_POINTER_ASSIGN;
1089 new_st.expr = lvalue;
1090 new_st.expr2 = rvalue;
1095 gfc_current_locus = old_loc;
1096 gfc_free_expr (lvalue);
1097 gfc_free_expr (rvalue);
1102 /* We try to match an easy arithmetic IF statement. This only happens
1103 when just after having encountered a simple IF statement. This code
1104 is really duplicate with parts of the gfc_match_if code, but this is
1108 match_arithmetic_if (void)
1110 gfc_st_label *l1, *l2, *l3;
1114 m = gfc_match (" ( %e ) %l , %l , %l%t", &expr, &l1, &l2, &l3);
1118 if (gfc_reference_st_label (l1, ST_LABEL_TARGET) == FAILURE
1119 || gfc_reference_st_label (l2, ST_LABEL_TARGET) == FAILURE
1120 || gfc_reference_st_label (l3, ST_LABEL_TARGET) == FAILURE)
1122 gfc_free_expr (expr);
1126 if (gfc_notify_std (GFC_STD_F95_OBS, "Obsolescent: arithmetic IF statement "
1127 "at %C") == FAILURE)
1130 new_st.op = EXEC_ARITHMETIC_IF;
1140 /* The IF statement is a bit of a pain. First of all, there are three
1141 forms of it, the simple IF, the IF that starts a block and the
1144 There is a problem with the simple IF and that is the fact that we
1145 only have a single level of undo information on symbols. What this
1146 means is for a simple IF, we must re-match the whole IF statement
1147 multiple times in order to guarantee that the symbol table ends up
1148 in the proper state. */
1150 static match match_simple_forall (void);
1151 static match match_simple_where (void);
1154 gfc_match_if (gfc_statement *if_type)
1157 gfc_st_label *l1, *l2, *l3;
1162 n = gfc_match_label ();
1163 if (n == MATCH_ERROR)
1166 old_loc = gfc_current_locus;
1168 m = gfc_match (" if ( %e", &expr);
1172 if (gfc_match_char (')') != MATCH_YES)
1174 gfc_error ("Syntax error in IF-expression at %C");
1175 gfc_free_expr (expr);
1179 m = gfc_match (" %l , %l , %l%t", &l1, &l2, &l3);
1185 gfc_error ("Block label not appropriate for arithmetic IF "
1187 gfc_free_expr (expr);
1191 if (gfc_reference_st_label (l1, ST_LABEL_TARGET) == FAILURE
1192 || gfc_reference_st_label (l2, ST_LABEL_TARGET) == FAILURE
1193 || gfc_reference_st_label (l3, ST_LABEL_TARGET) == FAILURE)
1195 gfc_free_expr (expr);
1199 if (gfc_notify_std (GFC_STD_F95_OBS, "Obsolescent: arithmetic IF "
1200 "statement at %C") == FAILURE)
1203 new_st.op = EXEC_ARITHMETIC_IF;
1209 *if_type = ST_ARITHMETIC_IF;
1213 if (gfc_match (" then%t") == MATCH_YES)
1215 new_st.op = EXEC_IF;
1217 *if_type = ST_IF_BLOCK;
1223 gfc_error ("Block label is not appropriate IF statement at %C");
1224 gfc_free_expr (expr);
1228 /* At this point the only thing left is a simple IF statement. At
1229 this point, n has to be MATCH_NO, so we don't have to worry about
1230 re-matching a block label. From what we've got so far, try
1231 matching an assignment. */
1233 *if_type = ST_SIMPLE_IF;
1235 m = gfc_match_assignment ();
1239 gfc_free_expr (expr);
1240 gfc_undo_symbols ();
1241 gfc_current_locus = old_loc;
1243 /* m can be MATCH_NO or MATCH_ERROR, here. For MATCH_ERROR, a mangled
1244 assignment was found. For MATCH_NO, continue to call the various
1246 if (m == MATCH_ERROR)
1249 gfc_match (" if ( %e ) ", &expr); /* Guaranteed to match. */
1251 m = gfc_match_pointer_assignment ();
1255 gfc_free_expr (expr);
1256 gfc_undo_symbols ();
1257 gfc_current_locus = old_loc;
1259 gfc_match (" if ( %e ) ", &expr); /* Guaranteed to match. */
1261 /* Look at the next keyword to see which matcher to call. Matching
1262 the keyword doesn't affect the symbol table, so we don't have to
1263 restore between tries. */
1265 #define match(string, subr, statement) \
1266 if (gfc_match(string) == MATCH_YES) { m = subr(); goto got_match; }
1270 match ("allocate", gfc_match_allocate, ST_ALLOCATE)
1271 match ("assign", gfc_match_assign, ST_LABEL_ASSIGNMENT)
1272 match ("backspace", gfc_match_backspace, ST_BACKSPACE)
1273 match ("call", gfc_match_call, ST_CALL)
1274 match ("close", gfc_match_close, ST_CLOSE)
1275 match ("continue", gfc_match_continue, ST_CONTINUE)
1276 match ("cycle", gfc_match_cycle, ST_CYCLE)
1277 match ("deallocate", gfc_match_deallocate, ST_DEALLOCATE)
1278 match ("end file", gfc_match_endfile, ST_END_FILE)
1279 match ("exit", gfc_match_exit, ST_EXIT)
1280 match ("flush", gfc_match_flush, ST_FLUSH)
1281 match ("forall", match_simple_forall, ST_FORALL)
1282 match ("go to", gfc_match_goto, ST_GOTO)
1283 match ("if", match_arithmetic_if, ST_ARITHMETIC_IF)
1284 match ("inquire", gfc_match_inquire, ST_INQUIRE)
1285 match ("nullify", gfc_match_nullify, ST_NULLIFY)
1286 match ("open", gfc_match_open, ST_OPEN)
1287 match ("pause", gfc_match_pause, ST_NONE)
1288 match ("print", gfc_match_print, ST_WRITE)
1289 match ("read", gfc_match_read, ST_READ)
1290 match ("return", gfc_match_return, ST_RETURN)
1291 match ("rewind", gfc_match_rewind, ST_REWIND)
1292 match ("stop", gfc_match_stop, ST_STOP)
1293 match ("where", match_simple_where, ST_WHERE)
1294 match ("write", gfc_match_write, ST_WRITE)
1296 /* The gfc_match_assignment() above may have returned a MATCH_NO
1297 where the assignment was to a named constant. Check that
1298 special case here. */
1299 m = gfc_match_assignment ();
1302 gfc_error ("Cannot assign to a named constant at %C");
1303 gfc_free_expr (expr);
1304 gfc_undo_symbols ();
1305 gfc_current_locus = old_loc;
1309 /* All else has failed, so give up. See if any of the matchers has
1310 stored an error message of some sort. */
1311 if (gfc_error_check () == 0)
1312 gfc_error ("Unclassifiable statement in IF-clause at %C");
1314 gfc_free_expr (expr);
1319 gfc_error ("Syntax error in IF-clause at %C");
1322 gfc_free_expr (expr);
1326 /* At this point, we've matched the single IF and the action clause
1327 is in new_st. Rearrange things so that the IF statement appears
1330 p = gfc_get_code ();
1331 p->next = gfc_get_code ();
1333 p->next->loc = gfc_current_locus;
1338 gfc_clear_new_st ();
1340 new_st.op = EXEC_IF;
1349 /* Match an ELSE statement. */
1352 gfc_match_else (void)
1354 char name[GFC_MAX_SYMBOL_LEN + 1];
1356 if (gfc_match_eos () == MATCH_YES)
1359 if (gfc_match_name (name) != MATCH_YES
1360 || gfc_current_block () == NULL
1361 || gfc_match_eos () != MATCH_YES)
1363 gfc_error ("Unexpected junk after ELSE statement at %C");
1367 if (strcmp (name, gfc_current_block ()->name) != 0)
1369 gfc_error ("Label '%s' at %C doesn't match IF label '%s'",
1370 name, gfc_current_block ()->name);
1378 /* Match an ELSE IF statement. */
1381 gfc_match_elseif (void)
1383 char name[GFC_MAX_SYMBOL_LEN + 1];
1387 m = gfc_match (" ( %e ) then", &expr);
1391 if (gfc_match_eos () == MATCH_YES)
1394 if (gfc_match_name (name) != MATCH_YES
1395 || gfc_current_block () == NULL
1396 || gfc_match_eos () != MATCH_YES)
1398 gfc_error ("Unexpected junk after ELSE IF statement at %C");
1402 if (strcmp (name, gfc_current_block ()->name) != 0)
1404 gfc_error ("Label '%s' at %C doesn't match IF label '%s'",
1405 name, gfc_current_block ()->name);
1410 new_st.op = EXEC_IF;
1415 gfc_free_expr (expr);
1420 /* Free a gfc_iterator structure. */
1423 gfc_free_iterator (gfc_iterator *iter, int flag)
1429 gfc_free_expr (iter->var);
1430 gfc_free_expr (iter->start);
1431 gfc_free_expr (iter->end);
1432 gfc_free_expr (iter->step);
1439 /* Match a DO statement. */
1444 gfc_iterator iter, *ip;
1446 gfc_st_label *label;
1449 old_loc = gfc_current_locus;
1452 iter.var = iter.start = iter.end = iter.step = NULL;
1454 m = gfc_match_label ();
1455 if (m == MATCH_ERROR)
1458 if (gfc_match (" do") != MATCH_YES)
1461 m = gfc_match_st_label (&label);
1462 if (m == MATCH_ERROR)
1465 /* Match an infinite DO, make it like a DO WHILE(.TRUE.). */
1467 if (gfc_match_eos () == MATCH_YES)
1469 iter.end = gfc_logical_expr (1, NULL);
1470 new_st.op = EXEC_DO_WHILE;
1474 /* Match an optional comma, if no comma is found, a space is obligatory. */
1475 if (gfc_match_char (',') != MATCH_YES && gfc_match ("% ") != MATCH_YES)
1478 /* See if we have a DO WHILE. */
1479 if (gfc_match (" while ( %e )%t", &iter.end) == MATCH_YES)
1481 new_st.op = EXEC_DO_WHILE;
1485 /* The abortive DO WHILE may have done something to the symbol
1486 table, so we start over. */
1487 gfc_undo_symbols ();
1488 gfc_current_locus = old_loc;
1490 gfc_match_label (); /* This won't error. */
1491 gfc_match (" do "); /* This will work. */
1493 gfc_match_st_label (&label); /* Can't error out. */
1494 gfc_match_char (','); /* Optional comma. */
1496 m = gfc_match_iterator (&iter, 0);
1499 if (m == MATCH_ERROR)
1502 iter.var->symtree->n.sym->attr.implied_index = 0;
1503 gfc_check_do_variable (iter.var->symtree);
1505 if (gfc_match_eos () != MATCH_YES)
1507 gfc_syntax_error (ST_DO);
1511 new_st.op = EXEC_DO;
1515 && gfc_reference_st_label (label, ST_LABEL_TARGET) == FAILURE)
1518 new_st.label = label;
1520 if (new_st.op == EXEC_DO_WHILE)
1521 new_st.expr = iter.end;
1524 new_st.ext.iterator = ip = gfc_get_iterator ();
1531 gfc_free_iterator (&iter, 0);
1537 /* Match an EXIT or CYCLE statement. */
1540 match_exit_cycle (gfc_statement st, gfc_exec_op op)
1542 gfc_state_data *p, *o;
1546 if (gfc_match_eos () == MATCH_YES)
1550 m = gfc_match ("% %s%t", &sym);
1551 if (m == MATCH_ERROR)
1555 gfc_syntax_error (st);
1559 if (sym->attr.flavor != FL_LABEL)
1561 gfc_error ("Name '%s' in %s statement at %C is not a loop name",
1562 sym->name, gfc_ascii_statement (st));
1567 /* Find the loop mentioned specified by the label (or lack of a label). */
1568 for (o = NULL, p = gfc_state_stack; p; p = p->previous)
1569 if (p->state == COMP_DO && (sym == NULL || sym == p->sym))
1571 else if (o == NULL && p->state == COMP_OMP_STRUCTURED_BLOCK)
1577 gfc_error ("%s statement at %C is not within a loop",
1578 gfc_ascii_statement (st));
1580 gfc_error ("%s statement at %C is not within loop '%s'",
1581 gfc_ascii_statement (st), sym->name);
1588 gfc_error ("%s statement at %C leaving OpenMP structured block",
1589 gfc_ascii_statement (st));
1592 else if (st == ST_EXIT
1593 && p->previous != NULL
1594 && p->previous->state == COMP_OMP_STRUCTURED_BLOCK
1595 && (p->previous->head->op == EXEC_OMP_DO
1596 || p->previous->head->op == EXEC_OMP_PARALLEL_DO))
1598 gcc_assert (p->previous->head->next != NULL);
1599 gcc_assert (p->previous->head->next->op == EXEC_DO
1600 || p->previous->head->next->op == EXEC_DO_WHILE);
1601 gfc_error ("EXIT statement at %C terminating !$OMP DO loop");
1605 /* Save the first statement in the loop - needed by the backend. */
1606 new_st.ext.whichloop = p->head;
1614 /* Match the EXIT statement. */
1617 gfc_match_exit (void)
1619 return match_exit_cycle (ST_EXIT, EXEC_EXIT);
1623 /* Match the CYCLE statement. */
1626 gfc_match_cycle (void)
1628 return match_exit_cycle (ST_CYCLE, EXEC_CYCLE);
1632 /* Match a number or character constant after a STOP or PAUSE statement. */
1635 gfc_match_stopcode (gfc_statement st)
1645 if (gfc_match_eos () != MATCH_YES)
1647 m = gfc_match_small_literal_int (&stop_code, &cnt);
1648 if (m == MATCH_ERROR)
1651 if (m == MATCH_YES && cnt > 5)
1653 gfc_error ("Too many digits in STOP code at %C");
1659 /* Try a character constant. */
1660 m = gfc_match_expr (&e);
1661 if (m == MATCH_ERROR)
1665 if (e->ts.type != BT_CHARACTER || e->expr_type != EXPR_CONSTANT)
1669 if (gfc_match_eos () != MATCH_YES)
1673 if (gfc_pure (NULL))
1675 gfc_error ("%s statement not allowed in PURE procedure at %C",
1676 gfc_ascii_statement (st));
1680 new_st.op = st == ST_STOP ? EXEC_STOP : EXEC_PAUSE;
1682 new_st.ext.stop_code = stop_code;
1687 gfc_syntax_error (st);
1696 /* Match the (deprecated) PAUSE statement. */
1699 gfc_match_pause (void)
1703 m = gfc_match_stopcode (ST_PAUSE);
1706 if (gfc_notify_std (GFC_STD_F95_DEL, "Deleted feature: PAUSE statement"
1715 /* Match the STOP statement. */
1718 gfc_match_stop (void)
1720 return gfc_match_stopcode (ST_STOP);
1724 /* Match a CONTINUE statement. */
1727 gfc_match_continue (void)
1729 if (gfc_match_eos () != MATCH_YES)
1731 gfc_syntax_error (ST_CONTINUE);
1735 new_st.op = EXEC_CONTINUE;
1740 /* Match the (deprecated) ASSIGN statement. */
1743 gfc_match_assign (void)
1746 gfc_st_label *label;
1748 if (gfc_match (" %l", &label) == MATCH_YES)
1750 if (gfc_reference_st_label (label, ST_LABEL_UNKNOWN) == FAILURE)
1752 if (gfc_match (" to %v%t", &expr) == MATCH_YES)
1754 if (gfc_notify_std (GFC_STD_F95_DEL, "Deleted feature: ASSIGN "
1759 expr->symtree->n.sym->attr.assign = 1;
1761 new_st.op = EXEC_LABEL_ASSIGN;
1762 new_st.label = label;
1771 /* Match the GO TO statement. As a computed GOTO statement is
1772 matched, it is transformed into an equivalent SELECT block. No
1773 tree is necessary, and the resulting jumps-to-jumps are
1774 specifically optimized away by the back end. */
1777 gfc_match_goto (void)
1779 gfc_code *head, *tail;
1782 gfc_st_label *label;
1786 if (gfc_match (" %l%t", &label) == MATCH_YES)
1788 if (gfc_reference_st_label (label, ST_LABEL_TARGET) == FAILURE)
1791 new_st.op = EXEC_GOTO;
1792 new_st.label = label;
1796 /* The assigned GO TO statement. */
1798 if (gfc_match_variable (&expr, 0) == MATCH_YES)
1800 if (gfc_notify_std (GFC_STD_F95_DEL, "Deleted feature: Assigned GOTO "
1805 new_st.op = EXEC_GOTO;
1808 if (gfc_match_eos () == MATCH_YES)
1811 /* Match label list. */
1812 gfc_match_char (',');
1813 if (gfc_match_char ('(') != MATCH_YES)
1815 gfc_syntax_error (ST_GOTO);
1822 m = gfc_match_st_label (&label);
1826 if (gfc_reference_st_label (label, ST_LABEL_TARGET) == FAILURE)
1830 head = tail = gfc_get_code ();
1833 tail->block = gfc_get_code ();
1837 tail->label = label;
1838 tail->op = EXEC_GOTO;
1840 while (gfc_match_char (',') == MATCH_YES);
1842 if (gfc_match (")%t") != MATCH_YES)
1847 gfc_error ("Statement label list in GOTO at %C cannot be empty");
1850 new_st.block = head;
1855 /* Last chance is a computed GO TO statement. */
1856 if (gfc_match_char ('(') != MATCH_YES)
1858 gfc_syntax_error (ST_GOTO);
1867 m = gfc_match_st_label (&label);
1871 if (gfc_reference_st_label (label, ST_LABEL_TARGET) == FAILURE)
1875 head = tail = gfc_get_code ();
1878 tail->block = gfc_get_code ();
1882 cp = gfc_get_case ();
1883 cp->low = cp->high = gfc_int_expr (i++);
1885 tail->op = EXEC_SELECT;
1886 tail->ext.case_list = cp;
1888 tail->next = gfc_get_code ();
1889 tail->next->op = EXEC_GOTO;
1890 tail->next->label = label;
1892 while (gfc_match_char (',') == MATCH_YES);
1894 if (gfc_match_char (')') != MATCH_YES)
1899 gfc_error ("Statement label list in GOTO at %C cannot be empty");
1903 /* Get the rest of the statement. */
1904 gfc_match_char (',');
1906 if (gfc_match (" %e%t", &expr) != MATCH_YES)
1909 /* At this point, a computed GOTO has been fully matched and an
1910 equivalent SELECT statement constructed. */
1912 new_st.op = EXEC_SELECT;
1915 /* Hack: For a "real" SELECT, the expression is in expr. We put
1916 it in expr2 so we can distinguish then and produce the correct
1918 new_st.expr2 = expr;
1919 new_st.block = head;
1923 gfc_syntax_error (ST_GOTO);
1925 gfc_free_statements (head);
1930 /* Frees a list of gfc_alloc structures. */
1933 gfc_free_alloc_list (gfc_alloc *p)
1940 gfc_free_expr (p->expr);
1946 /* Match an ALLOCATE statement. */
1949 gfc_match_allocate (void)
1951 gfc_alloc *head, *tail;
1958 if (gfc_match_char ('(') != MATCH_YES)
1964 head = tail = gfc_get_alloc ();
1967 tail->next = gfc_get_alloc ();
1971 m = gfc_match_variable (&tail->expr, 0);
1974 if (m == MATCH_ERROR)
1977 if (gfc_check_do_variable (tail->expr->symtree))
1981 && gfc_impure_variable (tail->expr->symtree->n.sym))
1983 gfc_error ("Bad allocate-object in ALLOCATE statement at %C for a "
1988 if (tail->expr->ts.type == BT_DERIVED)
1989 tail->expr->ts.derived = gfc_use_derived (tail->expr->ts.derived);
1991 if (gfc_match_char (',') != MATCH_YES)
1994 m = gfc_match (" stat = %v", &stat);
1995 if (m == MATCH_ERROR)
2005 if (stat->symtree->n.sym->attr.intent == INTENT_IN)
2007 gfc_error ("STAT variable '%s' of ALLOCATE statement at %C cannot "
2008 "be INTENT(IN)", stat->symtree->n.sym->name);
2012 if (gfc_pure (NULL) && gfc_impure_variable (stat->symtree->n.sym))
2014 gfc_error ("Illegal STAT variable in ALLOCATE statement at %C "
2015 "for a PURE procedure");
2019 is_variable = false;
2020 if (stat->symtree->n.sym->attr.flavor == FL_VARIABLE)
2022 else if (stat->symtree->n.sym->attr.function
2023 && stat->symtree->n.sym->result == stat->symtree->n.sym
2024 && (gfc_current_ns->proc_name == stat->symtree->n.sym
2025 || (gfc_current_ns->parent
2026 && gfc_current_ns->parent->proc_name
2027 == stat->symtree->n.sym)))
2029 else if (gfc_current_ns->entries
2030 && stat->symtree->n.sym->result == stat->symtree->n.sym)
2033 for (el = gfc_current_ns->entries; el; el = el->next)
2034 if (el->sym == stat->symtree->n.sym)
2039 else if (gfc_current_ns->parent && gfc_current_ns->parent->entries
2040 && stat->symtree->n.sym->result == stat->symtree->n.sym)
2043 for (el = gfc_current_ns->parent->entries; el; el = el->next)
2044 if (el->sym == stat->symtree->n.sym)
2052 gfc_error ("STAT expression at %C must be a variable");
2056 gfc_check_do_variable(stat->symtree);
2059 if (gfc_match (" )%t") != MATCH_YES)
2062 new_st.op = EXEC_ALLOCATE;
2064 new_st.ext.alloc_list = head;
2069 gfc_syntax_error (ST_ALLOCATE);
2072 gfc_free_expr (stat);
2073 gfc_free_alloc_list (head);
2078 /* Match a NULLIFY statement. A NULLIFY statement is transformed into
2079 a set of pointer assignments to intrinsic NULL(). */
2082 gfc_match_nullify (void)
2090 if (gfc_match_char ('(') != MATCH_YES)
2095 m = gfc_match_variable (&p, 0);
2096 if (m == MATCH_ERROR)
2101 if (gfc_check_do_variable (p->symtree))
2104 if (gfc_pure (NULL) && gfc_impure_variable (p->symtree->n.sym))
2106 gfc_error ("Illegal variable in NULLIFY at %C for a PURE procedure");
2110 /* build ' => NULL() '. */
2111 e = gfc_get_expr ();
2112 e->where = gfc_current_locus;
2113 e->expr_type = EXPR_NULL;
2114 e->ts.type = BT_UNKNOWN;
2116 /* Chain to list. */
2121 tail->next = gfc_get_code ();
2125 tail->op = EXEC_POINTER_ASSIGN;
2129 if (gfc_match (" )%t") == MATCH_YES)
2131 if (gfc_match_char (',') != MATCH_YES)
2138 gfc_syntax_error (ST_NULLIFY);
2141 gfc_free_statements (new_st.next);
2146 /* Match a DEALLOCATE statement. */
2149 gfc_match_deallocate (void)
2151 gfc_alloc *head, *tail;
2158 if (gfc_match_char ('(') != MATCH_YES)
2164 head = tail = gfc_get_alloc ();
2167 tail->next = gfc_get_alloc ();
2171 m = gfc_match_variable (&tail->expr, 0);
2172 if (m == MATCH_ERROR)
2177 if (gfc_check_do_variable (tail->expr->symtree))
2181 && gfc_impure_variable (tail->expr->symtree->n.sym))
2183 gfc_error ("Illegal deallocate-expression in DEALLOCATE at %C "
2184 "for a PURE procedure");
2188 if (gfc_match_char (',') != MATCH_YES)
2191 m = gfc_match (" stat = %v", &stat);
2192 if (m == MATCH_ERROR)
2200 if (stat->symtree->n.sym->attr.intent == INTENT_IN)
2202 gfc_error ("STAT variable '%s' of DEALLOCATE statement at %C "
2203 "cannot be INTENT(IN)", stat->symtree->n.sym->name);
2207 if (gfc_pure(NULL) && gfc_impure_variable (stat->symtree->n.sym))
2209 gfc_error ("Illegal STAT variable in DEALLOCATE statement at %C "
2210 "for a PURE procedure");
2214 if (stat->symtree->n.sym->attr.flavor != FL_VARIABLE)
2216 gfc_error ("STAT expression at %C must be a variable");
2220 gfc_check_do_variable(stat->symtree);
2223 if (gfc_match (" )%t") != MATCH_YES)
2226 new_st.op = EXEC_DEALLOCATE;
2228 new_st.ext.alloc_list = head;
2233 gfc_syntax_error (ST_DEALLOCATE);
2236 gfc_free_expr (stat);
2237 gfc_free_alloc_list (head);
2242 /* Match a RETURN statement. */
2245 gfc_match_return (void)
2249 gfc_compile_state s;
2253 if (gfc_match_eos () == MATCH_YES)
2256 if (gfc_find_state (COMP_SUBROUTINE) == FAILURE)
2258 gfc_error ("Alternate RETURN statement at %C is only allowed within "
2263 if (gfc_current_form == FORM_FREE)
2265 /* The following are valid, so we can't require a blank after the
2269 c = gfc_peek_char ();
2270 if (ISALPHA (c) || ISDIGIT (c))
2274 m = gfc_match (" %e%t", &e);
2277 if (m == MATCH_ERROR)
2280 gfc_syntax_error (ST_RETURN);
2287 gfc_enclosing_unit (&s);
2288 if (s == COMP_PROGRAM
2289 && gfc_notify_std (GFC_STD_GNU, "Extension: RETURN statement in "
2290 "main program at %C") == FAILURE)
2293 new_st.op = EXEC_RETURN;
2300 /* Match a CALL statement. The tricky part here are possible
2301 alternate return specifiers. We handle these by having all
2302 "subroutines" actually return an integer via a register that gives
2303 the return number. If the call specifies alternate returns, we
2304 generate code for a SELECT statement whose case clauses contain
2305 GOTOs to the various labels. */
2308 gfc_match_call (void)
2310 char name[GFC_MAX_SYMBOL_LEN + 1];
2311 gfc_actual_arglist *a, *arglist;
2321 m = gfc_match ("% %n", name);
2327 if (gfc_get_ha_sym_tree (name, &st))
2332 /* If it does not seem to be callable... */
2333 if (!sym->attr.generic
2334 && !sym->attr.subroutine)
2336 if (!(sym->attr.external && !sym->attr.referenced))
2338 /* ...create a symbol in this scope... */
2339 if (sym->ns != gfc_current_ns
2340 && gfc_get_sym_tree (name, NULL, &st) == 1)
2343 if (sym != st->n.sym)
2347 /* ...and then to try to make the symbol into a subroutine. */
2348 if (gfc_add_subroutine (&sym->attr, sym->name, NULL) == FAILURE)
2352 gfc_set_sym_referenced (sym);
2354 if (gfc_match_eos () != MATCH_YES)
2356 m = gfc_match_actual_arglist (1, &arglist);
2359 if (m == MATCH_ERROR)
2362 if (gfc_match_eos () != MATCH_YES)
2366 /* If any alternate return labels were found, construct a SELECT
2367 statement that will jump to the right place. */
2370 for (a = arglist; a; a = a->next)
2371 if (a->expr == NULL)
2376 gfc_symtree *select_st;
2377 gfc_symbol *select_sym;
2378 char name[GFC_MAX_SYMBOL_LEN + 1];
2380 new_st.next = c = gfc_get_code ();
2381 c->op = EXEC_SELECT;
2382 sprintf (name, "_result_%s", sym->name);
2383 gfc_get_ha_sym_tree (name, &select_st); /* Can't fail. */
2385 select_sym = select_st->n.sym;
2386 select_sym->ts.type = BT_INTEGER;
2387 select_sym->ts.kind = gfc_default_integer_kind;
2388 gfc_set_sym_referenced (select_sym);
2389 c->expr = gfc_get_expr ();
2390 c->expr->expr_type = EXPR_VARIABLE;
2391 c->expr->symtree = select_st;
2392 c->expr->ts = select_sym->ts;
2393 c->expr->where = gfc_current_locus;
2396 for (a = arglist; a; a = a->next)
2398 if (a->expr != NULL)
2401 if (gfc_reference_st_label (a->label, ST_LABEL_TARGET) == FAILURE)
2406 c->block = gfc_get_code ();
2408 c->op = EXEC_SELECT;
2410 new_case = gfc_get_case ();
2411 new_case->high = new_case->low = gfc_int_expr (i);
2412 c->ext.case_list = new_case;
2414 c->next = gfc_get_code ();
2415 c->next->op = EXEC_GOTO;
2416 c->next->label = a->label;
2420 new_st.op = EXEC_CALL;
2421 new_st.symtree = st;
2422 new_st.ext.actual = arglist;
2427 gfc_syntax_error (ST_CALL);
2430 gfc_free_actual_arglist (arglist);
2435 /* Given a name, return a pointer to the common head structure,
2436 creating it if it does not exist. If FROM_MODULE is nonzero, we
2437 mangle the name so that it doesn't interfere with commons defined
2438 in the using namespace.
2439 TODO: Add to global symbol tree. */
2442 gfc_get_common (const char *name, int from_module)
2445 static int serial = 0;
2446 char mangled_name[GFC_MAX_SYMBOL_LEN + 1];
2450 /* A use associated common block is only needed to correctly layout
2451 the variables it contains. */
2452 snprintf (mangled_name, GFC_MAX_SYMBOL_LEN, "_%d_%s", serial++, name);
2453 st = gfc_new_symtree (&gfc_current_ns->common_root, mangled_name);
2457 st = gfc_find_symtree (gfc_current_ns->common_root, name);
2460 st = gfc_new_symtree (&gfc_current_ns->common_root, name);
2463 if (st->n.common == NULL)
2465 st->n.common = gfc_get_common_head ();
2466 st->n.common->where = gfc_current_locus;
2467 strcpy (st->n.common->name, name);
2470 return st->n.common;
2474 /* Match a common block name. */
2476 match match_common_name (char *name)
2480 if (gfc_match_char ('/') == MATCH_NO)
2486 if (gfc_match_char ('/') == MATCH_YES)
2492 m = gfc_match_name (name);
2494 if (m == MATCH_ERROR)
2496 if (m == MATCH_YES && gfc_match_char ('/') == MATCH_YES)
2499 gfc_error ("Syntax error in common block name at %C");
2504 /* Match a COMMON statement. */
2507 gfc_match_common (void)
2509 gfc_symbol *sym, **head, *tail, *other, *old_blank_common;
2510 char name[GFC_MAX_SYMBOL_LEN + 1];
2517 old_blank_common = gfc_current_ns->blank_common.head;
2518 if (old_blank_common)
2520 while (old_blank_common->common_next)
2521 old_blank_common = old_blank_common->common_next;
2528 m = match_common_name (name);
2529 if (m == MATCH_ERROR)
2532 gsym = gfc_get_gsymbol (name);
2533 if (gsym->type != GSYM_UNKNOWN && gsym->type != GSYM_COMMON)
2535 gfc_error ("Symbol '%s' at %C is already an external symbol that "
2536 "is not COMMON", name);
2540 if (gsym->type == GSYM_UNKNOWN)
2542 gsym->type = GSYM_COMMON;
2543 gsym->where = gfc_current_locus;
2549 if (name[0] == '\0')
2551 if (gfc_current_ns->is_block_data)
2553 gfc_warning ("BLOCK DATA unit cannot contain blank COMMON "
2556 t = &gfc_current_ns->blank_common;
2557 if (t->head == NULL)
2558 t->where = gfc_current_locus;
2562 t = gfc_get_common (name, 0);
2571 while (tail->common_next)
2572 tail = tail->common_next;
2575 /* Grab the list of symbols. */
2578 m = gfc_match_symbol (&sym, 0);
2579 if (m == MATCH_ERROR)
2584 /* Store a ref to the common block for error checking. */
2585 sym->common_block = t;
2587 /* See if we know the current common block is bind(c), and if
2588 so, then see if we can check if the symbol is (which it'll
2589 need to be). This can happen if the bind(c) attr stmt was
2590 applied to the common block, and the variable(s) already
2591 defined, before declaring the common block. */
2592 if (t->is_bind_c == 1)
2594 if (sym->ts.type != BT_UNKNOWN && sym->ts.is_c_interop != 1)
2596 /* If we find an error, just print it and continue,
2597 cause it's just semantic, and we can see if there
2599 gfc_error_now ("Variable '%s' at %L in common block '%s' "
2600 "at %C must be declared with a C "
2601 "interoperable kind since common block "
2603 sym->name, &(sym->declared_at), t->name,
2607 if (sym->attr.is_bind_c == 1)
2608 gfc_error_now ("Variable '%s' in common block "
2609 "'%s' at %C can not be bind(c) since "
2610 "it is not global", sym->name, t->name);
2613 if (sym->attr.in_common)
2615 gfc_error ("Symbol '%s' at %C is already in a COMMON block",
2620 if (gfc_add_in_common (&sym->attr, sym->name, NULL) == FAILURE)
2623 if (sym->value != NULL && sym->value->expr_type != EXPR_NULL
2624 && (name[0] == '\0' || !sym->attr.data))
2626 if (name[0] == '\0')
2627 gfc_error ("Previously initialized symbol '%s' in "
2628 "blank COMMON block at %C", sym->name);
2630 gfc_error ("Previously initialized symbol '%s' in "
2631 "COMMON block '%s' at %C", sym->name, name);
2635 if (gfc_add_in_common (&sym->attr, sym->name, NULL) == FAILURE)
2638 /* Derived type names must have the SEQUENCE attribute. */
2639 if (sym->ts.type == BT_DERIVED && !sym->ts.derived->attr.sequence)
2641 gfc_error ("Derived type variable in COMMON at %C does not "
2642 "have the SEQUENCE attribute");
2647 tail->common_next = sym;
2653 /* Deal with an optional array specification after the
2655 m = gfc_match_array_spec (&as);
2656 if (m == MATCH_ERROR)
2661 if (as->type != AS_EXPLICIT)
2663 gfc_error ("Array specification for symbol '%s' in COMMON "
2664 "at %C must be explicit", sym->name);
2668 if (gfc_add_dimension (&sym->attr, sym->name, NULL) == FAILURE)
2671 if (sym->attr.pointer)
2673 gfc_error ("Symbol '%s' in COMMON at %C cannot be a "
2674 "POINTER array", sym->name);
2683 sym->common_head = t;
2685 /* Check to see if the symbol is already in an equivalence group.
2686 If it is, set the other members as being in common. */
2687 if (sym->attr.in_equivalence)
2689 for (e1 = gfc_current_ns->equiv; e1; e1 = e1->next)
2691 for (e2 = e1; e2; e2 = e2->eq)
2692 if (e2->expr->symtree->n.sym == sym)
2699 for (e2 = e1; e2; e2 = e2->eq)
2701 other = e2->expr->symtree->n.sym;
2702 if (other->common_head
2703 && other->common_head != sym->common_head)
2705 gfc_error ("Symbol '%s', in COMMON block '%s' at "
2706 "%C is being indirectly equivalenced to "
2707 "another COMMON block '%s'",
2708 sym->name, sym->common_head->name,
2709 other->common_head->name);
2712 other->attr.in_common = 1;
2713 other->common_head = t;
2719 gfc_gobble_whitespace ();
2720 if (gfc_match_eos () == MATCH_YES)
2722 if (gfc_peek_char () == '/')
2724 if (gfc_match_char (',') != MATCH_YES)
2726 gfc_gobble_whitespace ();
2727 if (gfc_peek_char () == '/')
2736 gfc_syntax_error (ST_COMMON);
2739 if (old_blank_common)
2740 old_blank_common->common_next = NULL;
2742 gfc_current_ns->blank_common.head = NULL;
2743 gfc_free_array_spec (as);
2748 /* Match a BLOCK DATA program unit. */
2751 gfc_match_block_data (void)
2753 char name[GFC_MAX_SYMBOL_LEN + 1];
2757 if (gfc_match_eos () == MATCH_YES)
2759 gfc_new_block = NULL;
2763 m = gfc_match ("% %n%t", name);
2767 if (gfc_get_symbol (name, NULL, &sym))
2770 if (gfc_add_flavor (&sym->attr, FL_BLOCK_DATA, sym->name, NULL) == FAILURE)
2773 gfc_new_block = sym;
2779 /* Free a namelist structure. */
2782 gfc_free_namelist (gfc_namelist *name)
2786 for (; name; name = n)
2794 /* Match a NAMELIST statement. */
2797 gfc_match_namelist (void)
2799 gfc_symbol *group_name, *sym;
2803 m = gfc_match (" / %s /", &group_name);
2806 if (m == MATCH_ERROR)
2811 if (group_name->ts.type != BT_UNKNOWN)
2813 gfc_error ("Namelist group name '%s' at %C already has a basic "
2814 "type of %s", group_name->name,
2815 gfc_typename (&group_name->ts));
2819 if (group_name->attr.flavor == FL_NAMELIST
2820 && group_name->attr.use_assoc
2821 && gfc_notify_std (GFC_STD_GNU, "Namelist group name '%s' "
2822 "at %C already is USE associated and can"
2823 "not be respecified.", group_name->name)
2827 if (group_name->attr.flavor != FL_NAMELIST
2828 && gfc_add_flavor (&group_name->attr, FL_NAMELIST,
2829 group_name->name, NULL) == FAILURE)
2834 m = gfc_match_symbol (&sym, 1);
2837 if (m == MATCH_ERROR)
2840 if (sym->attr.in_namelist == 0
2841 && gfc_add_in_namelist (&sym->attr, sym->name, NULL) == FAILURE)
2844 /* Use gfc_error_check here, rather than goto error, so that
2845 these are the only errors for the next two lines. */
2846 if (sym->as && sym->as->type == AS_ASSUMED_SIZE)
2848 gfc_error ("Assumed size array '%s' in namelist '%s' at "
2849 "%C is not allowed", sym->name, group_name->name);
2853 if (sym->ts.type == BT_CHARACTER && sym->ts.cl->length == NULL)
2855 gfc_error ("Assumed character length '%s' in namelist '%s' at "
2856 "%C is not allowed", sym->name, group_name->name);
2860 nl = gfc_get_namelist ();
2864 if (group_name->namelist == NULL)
2865 group_name->namelist = group_name->namelist_tail = nl;
2868 group_name->namelist_tail->next = nl;
2869 group_name->namelist_tail = nl;
2872 if (gfc_match_eos () == MATCH_YES)
2875 m = gfc_match_char (',');
2877 if (gfc_match_char ('/') == MATCH_YES)
2879 m2 = gfc_match (" %s /", &group_name);
2880 if (m2 == MATCH_YES)
2882 if (m2 == MATCH_ERROR)
2896 gfc_syntax_error (ST_NAMELIST);
2903 /* Match a MODULE statement. */
2906 gfc_match_module (void)
2910 m = gfc_match (" %s%t", &gfc_new_block);
2914 if (gfc_add_flavor (&gfc_new_block->attr, FL_MODULE,
2915 gfc_new_block->name, NULL) == FAILURE)
2922 /* Free equivalence sets and lists. Recursively is the easiest way to
2926 gfc_free_equiv (gfc_equiv *eq)
2931 gfc_free_equiv (eq->eq);
2932 gfc_free_equiv (eq->next);
2933 gfc_free_expr (eq->expr);
2938 /* Match an EQUIVALENCE statement. */
2941 gfc_match_equivalence (void)
2943 gfc_equiv *eq, *set, *tail;
2947 gfc_common_head *common_head = NULL;
2955 eq = gfc_get_equiv ();
2959 eq->next = gfc_current_ns->equiv;
2960 gfc_current_ns->equiv = eq;
2962 if (gfc_match_char ('(') != MATCH_YES)
2966 common_flag = FALSE;
2971 m = gfc_match_equiv_variable (&set->expr);
2972 if (m == MATCH_ERROR)
2977 /* count the number of objects. */
2980 if (gfc_match_char ('%') == MATCH_YES)
2982 gfc_error ("Derived type component %C is not a "
2983 "permitted EQUIVALENCE member");
2987 for (ref = set->expr->ref; ref; ref = ref->next)
2988 if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION)
2990 gfc_error ("Array reference in EQUIVALENCE at %C cannot "
2991 "be an array section");
2995 sym = set->expr->symtree->n.sym;
2997 if (gfc_add_in_equivalence (&sym->attr, sym->name, NULL) == FAILURE)
3000 if (sym->attr.in_common)
3003 common_head = sym->common_head;
3006 if (gfc_match_char (')') == MATCH_YES)
3009 if (gfc_match_char (',') != MATCH_YES)
3012 set->eq = gfc_get_equiv ();
3018 gfc_error ("EQUIVALENCE at %C requires two or more objects");
3022 /* If one of the members of an equivalence is in common, then
3023 mark them all as being in common. Before doing this, check
3024 that members of the equivalence group are not in different
3027 for (set = eq; set; set = set->eq)
3029 sym = set->expr->symtree->n.sym;
3030 if (sym->common_head && sym->common_head != common_head)
3032 gfc_error ("Attempt to indirectly overlap COMMON "
3033 "blocks %s and %s by EQUIVALENCE at %C",
3034 sym->common_head->name, common_head->name);
3037 sym->attr.in_common = 1;
3038 sym->common_head = common_head;
3041 if (gfc_match_eos () == MATCH_YES)
3043 if (gfc_match_char (',') != MATCH_YES)
3050 gfc_syntax_error (ST_EQUIVALENCE);
3056 gfc_free_equiv (gfc_current_ns->equiv);
3057 gfc_current_ns->equiv = eq;
3063 /* Check that a statement function is not recursive. This is done by looking
3064 for the statement function symbol(sym) by looking recursively through its
3065 expression(e). If a reference to sym is found, true is returned.
3066 12.5.4 requires that any variable of function that is implicitly typed
3067 shall have that type confirmed by any subsequent type declaration. The
3068 implicit typing is conveniently done here. */
3071 recursive_stmt_fcn (gfc_expr *e, gfc_symbol *sym)
3073 gfc_actual_arglist *arg;
3080 switch (e->expr_type)
3083 for (arg = e->value.function.actual; arg; arg = arg->next)
3085 if (sym->name == arg->name || recursive_stmt_fcn (arg->expr, sym))
3089 if (e->symtree == NULL)
3092 /* Check the name before testing for nested recursion! */
3093 if (sym->name == e->symtree->n.sym->name)
3096 /* Catch recursion via other statement functions. */
3097 if (e->symtree->n.sym->attr.proc == PROC_ST_FUNCTION
3098 && e->symtree->n.sym->value
3099 && recursive_stmt_fcn (e->symtree->n.sym->value, sym))
3102 if (e->symtree->n.sym->ts.type == BT_UNKNOWN)
3103 gfc_set_default_type (e->symtree->n.sym, 0, NULL);
3108 if (e->symtree && sym->name == e->symtree->n.sym->name)
3111 if (e->symtree->n.sym->ts.type == BT_UNKNOWN)
3112 gfc_set_default_type (e->symtree->n.sym, 0, NULL);
3116 if (recursive_stmt_fcn (e->value.op.op1, sym)
3117 || recursive_stmt_fcn (e->value.op.op2, sym))
3125 /* Component references do not need to be checked. */
3128 for (ref = e->ref; ref; ref = ref->next)
3133 for (i = 0; i < ref->u.ar.dimen; i++)
3135 if (recursive_stmt_fcn (ref->u.ar.start[i], sym)
3136 || recursive_stmt_fcn (ref->u.ar.end[i], sym)
3137 || recursive_stmt_fcn (ref->u.ar.stride[i], sym))
3143 if (recursive_stmt_fcn (ref->u.ss.start, sym)
3144 || recursive_stmt_fcn (ref->u.ss.end, sym))
3158 /* Match a statement function declaration. It is so easy to match
3159 non-statement function statements with a MATCH_ERROR as opposed to
3160 MATCH_NO that we suppress error message in most cases. */
3163 gfc_match_st_function (void)
3165 gfc_error_buf old_error;
3170 m = gfc_match_symbol (&sym, 0);
3174 gfc_push_error (&old_error);
3176 if (gfc_add_procedure (&sym->attr, PROC_ST_FUNCTION,
3177 sym->name, NULL) == FAILURE)
3180 if (gfc_match_formal_arglist (sym, 1, 0) != MATCH_YES)
3183 m = gfc_match (" = %e%t", &expr);
3187 gfc_free_error (&old_error);
3188 if (m == MATCH_ERROR)
3191 if (recursive_stmt_fcn (expr, sym))
3193 gfc_error ("Statement function at %L is recursive", &expr->where);
3202 gfc_pop_error (&old_error);
3207 /***************** SELECT CASE subroutines ******************/
3209 /* Free a single case structure. */
3212 free_case (gfc_case *p)
3214 if (p->low == p->high)
3216 gfc_free_expr (p->low);
3217 gfc_free_expr (p->high);
3222 /* Free a list of case structures. */
3225 gfc_free_case_list (gfc_case *p)
3237 /* Match a single case selector. */
3240 match_case_selector (gfc_case **cp)
3245 c = gfc_get_case ();
3246 c->where = gfc_current_locus;
3248 if (gfc_match_char (':') == MATCH_YES)
3250 m = gfc_match_init_expr (&c->high);
3253 if (m == MATCH_ERROR)
3258 m = gfc_match_init_expr (&c->low);
3259 if (m == MATCH_ERROR)
3264 /* If we're not looking at a ':' now, make a range out of a single
3265 target. Else get the upper bound for the case range. */
3266 if (gfc_match_char (':') != MATCH_YES)
3270 m = gfc_match_init_expr (&c->high);
3271 if (m == MATCH_ERROR)
3273 /* MATCH_NO is fine. It's OK if nothing is there! */
3281 gfc_error ("Expected initialization expression in CASE at %C");
3289 /* Match the end of a case statement. */
3292 match_case_eos (void)
3294 char name[GFC_MAX_SYMBOL_LEN + 1];
3297 if (gfc_match_eos () == MATCH_YES)
3300 /* If the case construct doesn't have a case-construct-name, we
3301 should have matched the EOS. */
3302 if (!gfc_current_block ())
3304 gfc_error ("Expected the name of the SELECT CASE construct at %C");
3308 gfc_gobble_whitespace ();
3310 m = gfc_match_name (name);
3314 if (strcmp (name, gfc_current_block ()->name) != 0)
3316 gfc_error ("Expected case name of '%s' at %C",
3317 gfc_current_block ()->name);
3321 return gfc_match_eos ();
3325 /* Match a SELECT statement. */
3328 gfc_match_select (void)
3333 m = gfc_match_label ();
3334 if (m == MATCH_ERROR)
3337 m = gfc_match (" select case ( %e )%t", &expr);
3341 new_st.op = EXEC_SELECT;
3348 /* Match a CASE statement. */
3351 gfc_match_case (void)
3353 gfc_case *c, *head, *tail;
3358 if (gfc_current_state () != COMP_SELECT)
3360 gfc_error ("Unexpected CASE statement at %C");
3364 if (gfc_match ("% default") == MATCH_YES)
3366 m = match_case_eos ();
3369 if (m == MATCH_ERROR)
3372 new_st.op = EXEC_SELECT;
3373 c = gfc_get_case ();
3374 c->where = gfc_current_locus;
3375 new_st.ext.case_list = c;
3379 if (gfc_match_char ('(') != MATCH_YES)
3384 if (match_case_selector (&c) == MATCH_ERROR)
3394 if (gfc_match_char (')') == MATCH_YES)
3396 if (gfc_match_char (',') != MATCH_YES)
3400 m = match_case_eos ();
3403 if (m == MATCH_ERROR)
3406 new_st.op = EXEC_SELECT;
3407 new_st.ext.case_list = head;
3412 gfc_error ("Syntax error in CASE-specification at %C");
3415 gfc_free_case_list (head); /* new_st is cleaned up in parse.c. */
3419 /********************* WHERE subroutines ********************/
3421 /* Match the rest of a simple WHERE statement that follows an IF statement.
3425 match_simple_where (void)
3431 m = gfc_match (" ( %e )", &expr);
3435 m = gfc_match_assignment ();
3438 if (m == MATCH_ERROR)
3441 if (gfc_match_eos () != MATCH_YES)
3444 c = gfc_get_code ();
3448 c->next = gfc_get_code ();
3451 gfc_clear_new_st ();
3453 new_st.op = EXEC_WHERE;
3459 gfc_syntax_error (ST_WHERE);
3462 gfc_free_expr (expr);
3467 /* Match a WHERE statement. */
3470 gfc_match_where (gfc_statement *st)
3476 m0 = gfc_match_label ();
3477 if (m0 == MATCH_ERROR)
3480 m = gfc_match (" where ( %e )", &expr);
3484 if (gfc_match_eos () == MATCH_YES)
3486 *st = ST_WHERE_BLOCK;
3487 new_st.op = EXEC_WHERE;
3492 m = gfc_match_assignment ();
3494 gfc_syntax_error (ST_WHERE);
3498 gfc_free_expr (expr);
3502 /* We've got a simple WHERE statement. */
3504 c = gfc_get_code ();
3508 c->next = gfc_get_code ();
3511 gfc_clear_new_st ();
3513 new_st.op = EXEC_WHERE;
3520 /* Match an ELSEWHERE statement. We leave behind a WHERE node in
3521 new_st if successful. */
3524 gfc_match_elsewhere (void)
3526 char name[GFC_MAX_SYMBOL_LEN + 1];
3530 if (gfc_current_state () != COMP_WHERE)
3532 gfc_error ("ELSEWHERE statement at %C not enclosed in WHERE block");
3538 if (gfc_match_char ('(') == MATCH_YES)
3540 m = gfc_match_expr (&expr);
3543 if (m == MATCH_ERROR)
3546 if (gfc_match_char (')') != MATCH_YES)
3550 if (gfc_match_eos () != MATCH_YES)
3552 /* Only makes sense if we have a where-construct-name. */
3553 if (!gfc_current_block ())
3558 /* Better be a name at this point. */
3559 m = gfc_match_name (name);
3562 if (m == MATCH_ERROR)
3565 if (gfc_match_eos () != MATCH_YES)
3568 if (strcmp (name, gfc_current_block ()->name) != 0)
3570 gfc_error ("Label '%s' at %C doesn't match WHERE label '%s'",
3571 name, gfc_current_block ()->name);
3576 new_st.op = EXEC_WHERE;
3581 gfc_syntax_error (ST_ELSEWHERE);
3584 gfc_free_expr (expr);
3589 /******************** FORALL subroutines ********************/
3591 /* Free a list of FORALL iterators. */
3594 gfc_free_forall_iterator (gfc_forall_iterator *iter)
3596 gfc_forall_iterator *next;
3601 gfc_free_expr (iter->var);
3602 gfc_free_expr (iter->start);
3603 gfc_free_expr (iter->end);
3604 gfc_free_expr (iter->stride);
3611 /* Match an iterator as part of a FORALL statement. The format is:
3613 <var> = <start>:<end>[:<stride>]
3615 On MATCH_NO, the caller tests for the possibility that there is a
3616 scalar mask expression. */
3619 match_forall_iterator (gfc_forall_iterator **result)
3621 gfc_forall_iterator *iter;
3625 where = gfc_current_locus;
3626 iter = gfc_getmem (sizeof (gfc_forall_iterator));
3628 m = gfc_match_expr (&iter->var);
3632 if (gfc_match_char ('=') != MATCH_YES
3633 || iter->var->expr_type != EXPR_VARIABLE)
3639 m = gfc_match_expr (&iter->start);
3643 if (gfc_match_char (':') != MATCH_YES)
3646 m = gfc_match_expr (&iter->end);
3649 if (m == MATCH_ERROR)
3652 if (gfc_match_char (':') == MATCH_NO)
3653 iter->stride = gfc_int_expr (1);
3656 m = gfc_match_expr (&iter->stride);
3659 if (m == MATCH_ERROR)
3663 /* Mark the iteration variable's symbol as used as a FORALL index. */
3664 iter->var->symtree->n.sym->forall_index = true;
3670 gfc_error ("Syntax error in FORALL iterator at %C");
3675 gfc_current_locus = where;
3676 gfc_free_forall_iterator (iter);
3681 /* Match the header of a FORALL statement. */
3684 match_forall_header (gfc_forall_iterator **phead, gfc_expr **mask)
3686 gfc_forall_iterator *head, *tail, *new;
3690 gfc_gobble_whitespace ();
3695 if (gfc_match_char ('(') != MATCH_YES)
3698 m = match_forall_iterator (&new);
3699 if (m == MATCH_ERROR)
3708 if (gfc_match_char (',') != MATCH_YES)
3711 m = match_forall_iterator (&new);
3712 if (m == MATCH_ERROR)
3722 /* Have to have a mask expression. */
3724 m = gfc_match_expr (&msk);
3727 if (m == MATCH_ERROR)
3733 if (gfc_match_char (')') == MATCH_NO)
3741 gfc_syntax_error (ST_FORALL);
3744 gfc_free_expr (msk);
3745 gfc_free_forall_iterator (head);
3750 /* Match the rest of a simple FORALL statement that follows an
3754 match_simple_forall (void)
3756 gfc_forall_iterator *head;
3765 m = match_forall_header (&head, &mask);
3772 m = gfc_match_assignment ();
3774 if (m == MATCH_ERROR)
3778 m = gfc_match_pointer_assignment ();
3779 if (m == MATCH_ERROR)
3785 c = gfc_get_code ();
3787 c->loc = gfc_current_locus;
3789 if (gfc_match_eos () != MATCH_YES)
3792 gfc_clear_new_st ();
3793 new_st.op = EXEC_FORALL;
3795 new_st.ext.forall_iterator = head;
3796 new_st.block = gfc_get_code ();
3798 new_st.block->op = EXEC_FORALL;
3799 new_st.block->next = c;
3804 gfc_syntax_error (ST_FORALL);
3807 gfc_free_forall_iterator (head);
3808 gfc_free_expr (mask);
3814 /* Match a FORALL statement. */
3817 gfc_match_forall (gfc_statement *st)
3819 gfc_forall_iterator *head;
3828 m0 = gfc_match_label ();
3829 if (m0 == MATCH_ERROR)
3832 m = gfc_match (" forall");
3836 m = match_forall_header (&head, &mask);
3837 if (m == MATCH_ERROR)
3842 if (gfc_match_eos () == MATCH_YES)
3844 *st = ST_FORALL_BLOCK;
3845 new_st.op = EXEC_FORALL;
3847 new_st.ext.forall_iterator = head;
3851 m = gfc_match_assignment ();
3852 if (m == MATCH_ERROR)
3856 m = gfc_match_pointer_assignment ();
3857 if (m == MATCH_ERROR)
3863 c = gfc_get_code ();
3865 c->loc = gfc_current_locus;
3867 gfc_clear_new_st ();
3868 new_st.op = EXEC_FORALL;
3870 new_st.ext.forall_iterator = head;
3871 new_st.block = gfc_get_code ();
3872 new_st.block->op = EXEC_FORALL;
3873 new_st.block->next = c;
3879 gfc_syntax_error (ST_FORALL);
3882 gfc_free_forall_iterator (head);
3883 gfc_free_expr (mask);
3884 gfc_free_statements (c);