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 2, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to the Free
20 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
30 /* For matching and debugging purposes. Order matters here! The
31 unary operators /must/ precede the binary plus and minus, or
32 the expression parser breaks. */
34 mstring intrinsic_operators[] = {
35 minit ("+", INTRINSIC_UPLUS),
36 minit ("-", INTRINSIC_UMINUS),
37 minit ("+", INTRINSIC_PLUS),
38 minit ("-", INTRINSIC_MINUS),
39 minit ("**", INTRINSIC_POWER),
40 minit ("//", INTRINSIC_CONCAT),
41 minit ("*", INTRINSIC_TIMES),
42 minit ("/", INTRINSIC_DIVIDE),
43 minit (".and.", INTRINSIC_AND),
44 minit (".or.", INTRINSIC_OR),
45 minit (".eqv.", INTRINSIC_EQV),
46 minit (".neqv.", INTRINSIC_NEQV),
47 minit (".eq.", INTRINSIC_EQ_OS),
48 minit ("==", INTRINSIC_EQ),
49 minit (".ne.", INTRINSIC_NE_OS),
50 minit ("/=", INTRINSIC_NE),
51 minit (".ge.", INTRINSIC_GE_OS),
52 minit (">=", INTRINSIC_GE),
53 minit (".le.", INTRINSIC_LE_OS),
54 minit ("<=", INTRINSIC_LE),
55 minit (".lt.", INTRINSIC_LT_OS),
56 minit ("<", INTRINSIC_LT),
57 minit (".gt.", INTRINSIC_GT_OS),
58 minit (">", INTRINSIC_GT),
59 minit (".not.", INTRINSIC_NOT),
60 minit ("parens", INTRINSIC_PARENTHESES),
61 minit (NULL, INTRINSIC_NONE)
65 /******************** Generic matching subroutines ************************/
67 /* See if the next character is a special character that has
68 escaped by a \ via the -fbackslash option. */
71 gfc_match_special_char (int *c)
78 switch (gfc_next_char_literal (1))
108 /* Unknown backslash codes are simply not expanded. */
117 /* In free form, match at least one space. Always matches in fixed
121 gfc_match_space (void)
126 if (gfc_current_form == FORM_FIXED)
129 old_loc = gfc_current_locus;
131 c = gfc_next_char ();
132 if (!gfc_is_whitespace (c))
134 gfc_current_locus = old_loc;
138 gfc_gobble_whitespace ();
144 /* Match an end of statement. End of statement is optional
145 whitespace, followed by a ';' or '\n' or comment '!'. If a
146 semicolon is found, we continue to eat whitespace and semicolons. */
158 old_loc = gfc_current_locus;
159 gfc_gobble_whitespace ();
161 c = gfc_next_char ();
167 c = gfc_next_char ();
184 gfc_current_locus = old_loc;
185 return (flag) ? MATCH_YES : MATCH_NO;
189 /* Match a literal integer on the input, setting the value on
190 MATCH_YES. Literal ints occur in kind-parameters as well as
191 old-style character length specifications. If cnt is non-NULL it
192 will be set to the number of digits. */
195 gfc_match_small_literal_int (int *value, int *cnt)
201 old_loc = gfc_current_locus;
203 gfc_gobble_whitespace ();
204 c = gfc_next_char ();
210 gfc_current_locus = old_loc;
219 old_loc = gfc_current_locus;
220 c = gfc_next_char ();
225 i = 10 * i + c - '0';
230 gfc_error ("Integer too large at %C");
235 gfc_current_locus = old_loc;
244 /* Match a small, constant integer expression, like in a kind
245 statement. On MATCH_YES, 'value' is set. */
248 gfc_match_small_int (int *value)
255 m = gfc_match_expr (&expr);
259 p = gfc_extract_int (expr, &i);
260 gfc_free_expr (expr);
273 /* This function is the same as the gfc_match_small_int, except that
274 we're keeping the pointer to the expr. This function could just be
275 removed and the previously mentioned one modified, though all calls
276 to it would have to be modified then (and there were a number of
277 them). Return MATCH_ERROR if fail to extract the int; otherwise,
278 return the result of gfc_match_expr(). The expr (if any) that was
279 matched is returned in the parameter expr. */
282 gfc_match_small_int_expr (int *value, gfc_expr **expr)
288 m = gfc_match_expr (expr);
292 p = gfc_extract_int (*expr, &i);
305 /* Matches a statement label. Uses gfc_match_small_literal_int() to
306 do most of the work. */
309 gfc_match_st_label (gfc_st_label **label)
315 old_loc = gfc_current_locus;
317 m = gfc_match_small_literal_int (&i, &cnt);
323 gfc_error ("Too many digits in statement label at %C");
329 gfc_error ("Statement label at %C is zero");
333 *label = gfc_get_st_label (i);
338 gfc_current_locus = old_loc;
343 /* Match and validate a label associated with a named IF, DO or SELECT
344 statement. If the symbol does not have the label attribute, we add
345 it. We also make sure the symbol does not refer to another
346 (active) block. A matched label is pointed to by gfc_new_block. */
349 gfc_match_label (void)
351 char name[GFC_MAX_SYMBOL_LEN + 1];
354 gfc_new_block = NULL;
356 m = gfc_match (" %n :", name);
360 if (gfc_get_symbol (name, NULL, &gfc_new_block))
362 gfc_error ("Label name '%s' at %C is ambiguous", name);
366 if (gfc_new_block->attr.flavor == FL_LABEL)
368 gfc_error ("Duplicate construct label '%s' at %C", name);
372 if (gfc_add_flavor (&gfc_new_block->attr, FL_LABEL,
373 gfc_new_block->name, NULL) == FAILURE)
380 /* Try and match the input against an array of possibilities. If one
381 potential matching string is a substring of another, the longest
382 match takes precedence. Spaces in the target strings are optional
383 spaces that do not necessarily have to be found in the input
384 stream. In fixed mode, spaces never appear. If whitespace is
385 matched, it matches unlimited whitespace in the input. For this
386 reason, the 'mp' member of the mstring structure is used to track
387 the progress of each potential match.
389 If there is no match we return the tag associated with the
390 terminating NULL mstring structure and leave the locus pointer
391 where it started. If there is a match we return the tag member of
392 the matched mstring and leave the locus pointer after the matched
395 A '%' character is a mandatory space. */
398 gfc_match_strings (mstring *a)
400 mstring *p, *best_match;
401 int no_match, c, possibles;
406 for (p = a; p->string != NULL; p++)
415 match_loc = gfc_current_locus;
417 gfc_gobble_whitespace ();
419 while (possibles > 0)
421 c = gfc_next_char ();
423 /* Apply the next character to the current possibilities. */
424 for (p = a; p->string != NULL; p++)
431 /* Space matches 1+ whitespace(s). */
432 if ((gfc_current_form == FORM_FREE) && gfc_is_whitespace (c))
450 match_loc = gfc_current_locus;
458 gfc_current_locus = match_loc;
460 return (best_match == NULL) ? no_match : best_match->tag;
464 /* See if the current input looks like a name of some sort. Modifies
465 the passed buffer which must be GFC_MAX_SYMBOL_LEN+1 bytes long.
466 Note that options.c restricts max_identifier_length to not more
467 than GFC_MAX_SYMBOL_LEN. */
470 gfc_match_name (char *buffer)
475 old_loc = gfc_current_locus;
476 gfc_gobble_whitespace ();
478 c = gfc_next_char ();
479 if (!(ISALPHA (c) || (c == '_' && gfc_option.flag_allow_leading_underscore)))
481 if (gfc_error_flag_test() == 0)
482 gfc_error ("Invalid character in name at %C");
483 gfc_current_locus = old_loc;
493 if (i > gfc_option.max_identifier_length)
495 gfc_error ("Name at %C is too long");
499 old_loc = gfc_current_locus;
500 c = gfc_next_char ();
502 while (ISALNUM (c) || c == '_' || (gfc_option.flag_dollar_ok && c == '$'));
505 gfc_current_locus = old_loc;
511 /* Match a valid name for C, which is almost the same as for Fortran,
512 except that you can start with an underscore, etc.. It could have
513 been done by modifying the gfc_match_name, but this way other
514 things C allows can be added, such as no limits on the length.
515 Right now, the length is limited to the same thing as Fortran..
516 Also, by rewriting it, we use the gfc_next_char_C() to prevent the
517 input characters from being automatically lower cased, since C is
518 case sensitive. The parameter, buffer, is used to return the name
519 that is matched. Return MATCH_ERROR if the name is too long
520 (though this is a self-imposed limit), MATCH_NO if what we're
521 seeing isn't a name, and MATCH_YES if we successfully match a C
525 gfc_match_name_C (char *buffer)
531 old_loc = gfc_current_locus;
532 gfc_gobble_whitespace ();
534 /* Get the next char (first possible char of name) and see if
535 it's valid for C (either a letter or an underscore). */
536 c = gfc_next_char_literal (1);
538 /* If the user put nothing expect spaces between the quotes, it is valid
539 and simply means there is no name= specifier and the name is the fortran
540 symbol name, all lowercase. */
541 if (c == '"' || c == '\'')
544 gfc_current_locus = old_loc;
548 if (!ISALPHA (c) && c != '_')
550 gfc_error ("Invalid C name in NAME= specifier at %C");
554 /* Continue to read valid variable name characters. */
559 /* C does not define a maximum length of variable names, to my
560 knowledge, but the compiler typically places a limit on them.
561 For now, i'll use the same as the fortran limit for simplicity,
562 but this may need to be changed to a dynamic buffer that can
563 be realloc'ed here if necessary, or more likely, a larger
565 if (i > gfc_option.max_identifier_length)
567 gfc_error ("Name at %C is too long");
571 old_loc = gfc_current_locus;
573 /* Get next char; param means we're in a string. */
574 c = gfc_next_char_literal (1);
575 } while (ISALNUM (c) || c == '_');
578 gfc_current_locus = old_loc;
580 /* See if we stopped because of whitespace. */
583 gfc_gobble_whitespace ();
584 c = gfc_peek_char ();
585 if (c != '"' && c != '\'')
587 gfc_error ("Embedded space in NAME= specifier at %C");
592 /* If we stopped because we had an invalid character for a C name, report
593 that to the user by returning MATCH_NO. */
594 if (c != '"' && c != '\'')
596 gfc_error ("Invalid C name in NAME= specifier at %C");
604 /* Match a symbol on the input. Modifies the pointer to the symbol
605 pointer if successful. */
608 gfc_match_sym_tree (gfc_symtree **matched_symbol, int host_assoc)
610 char buffer[GFC_MAX_SYMBOL_LEN + 1];
613 m = gfc_match_name (buffer);
618 return (gfc_get_ha_sym_tree (buffer, matched_symbol))
619 ? MATCH_ERROR : MATCH_YES;
621 if (gfc_get_sym_tree (buffer, NULL, matched_symbol))
629 gfc_match_symbol (gfc_symbol **matched_symbol, int host_assoc)
634 m = gfc_match_sym_tree (&st, host_assoc);
639 *matched_symbol = st->n.sym;
641 *matched_symbol = NULL;
644 *matched_symbol = NULL;
649 /* Match an intrinsic operator. Returns an INTRINSIC enum. While matching,
650 we always find INTRINSIC_PLUS before INTRINSIC_UPLUS. We work around this
654 gfc_match_intrinsic_op (gfc_intrinsic_op *result)
658 op = (gfc_intrinsic_op) gfc_match_strings (intrinsic_operators);
660 if (op == INTRINSIC_NONE)
668 /* Match a loop control phrase:
670 <LVALUE> = <EXPR>, <EXPR> [, <EXPR> ]
672 If the final integer expression is not present, a constant unity
673 expression is returned. We don't return MATCH_ERROR until after
674 the equals sign is seen. */
677 gfc_match_iterator (gfc_iterator *iter, int init_flag)
679 char name[GFC_MAX_SYMBOL_LEN + 1];
680 gfc_expr *var, *e1, *e2, *e3;
684 /* Match the start of an iterator without affecting the symbol table. */
686 start = gfc_current_locus;
687 m = gfc_match (" %n =", name);
688 gfc_current_locus = start;
693 m = gfc_match_variable (&var, 0);
697 gfc_match_char ('=');
701 if (var->ref != NULL)
703 gfc_error ("Loop variable at %C cannot be a sub-component");
707 if (var->symtree->n.sym->attr.intent == INTENT_IN)
709 gfc_error ("Loop variable '%s' at %C cannot be INTENT(IN)",
710 var->symtree->n.sym->name);
714 var->symtree->n.sym->attr.implied_index = 1;
716 m = init_flag ? gfc_match_init_expr (&e1) : gfc_match_expr (&e1);
719 if (m == MATCH_ERROR)
722 if (gfc_match_char (',') != MATCH_YES)
725 m = init_flag ? gfc_match_init_expr (&e2) : gfc_match_expr (&e2);
728 if (m == MATCH_ERROR)
731 if (gfc_match_char (',') != MATCH_YES)
733 e3 = gfc_int_expr (1);
737 m = init_flag ? gfc_match_init_expr (&e3) : gfc_match_expr (&e3);
738 if (m == MATCH_ERROR)
742 gfc_error ("Expected a step value in iterator at %C");
754 gfc_error ("Syntax error in iterator at %C");
765 /* Tries to match the next non-whitespace character on the input.
766 This subroutine does not return MATCH_ERROR. */
769 gfc_match_char (char c)
773 where = gfc_current_locus;
774 gfc_gobble_whitespace ();
776 if (gfc_next_char () == c)
779 gfc_current_locus = where;
784 /* General purpose matching subroutine. The target string is a
785 scanf-like format string in which spaces correspond to arbitrary
786 whitespace (including no whitespace), characters correspond to
787 themselves. The %-codes are:
789 %% Literal percent sign
790 %e Expression, pointer to a pointer is set
791 %s Symbol, pointer to the symbol is set
792 %n Name, character buffer is set to name
793 %t Matches end of statement.
794 %o Matches an intrinsic operator, returned as an INTRINSIC enum.
795 %l Matches a statement label
796 %v Matches a variable expression (an lvalue)
797 % Matches a required space (in free form) and optional spaces. */
800 gfc_match (const char *target, ...)
802 gfc_st_label **label;
811 old_loc = gfc_current_locus;
812 va_start (argp, target);
822 gfc_gobble_whitespace ();
833 vp = va_arg (argp, void **);
834 n = gfc_match_expr ((gfc_expr **) vp);
845 vp = va_arg (argp, void **);
846 n = gfc_match_variable ((gfc_expr **) vp, 0);
857 vp = va_arg (argp, void **);
858 n = gfc_match_symbol ((gfc_symbol **) vp, 0);
869 np = va_arg (argp, char *);
870 n = gfc_match_name (np);
881 label = va_arg (argp, gfc_st_label **);
882 n = gfc_match_st_label (label);
893 ip = va_arg (argp, int *);
894 n = gfc_match_intrinsic_op ((gfc_intrinsic_op *) ip);
905 if (gfc_match_eos () != MATCH_YES)
913 if (gfc_match_space () == MATCH_YES)
919 break; /* Fall through to character matcher. */
922 gfc_internal_error ("gfc_match(): Bad match code %c", c);
926 if (c == gfc_next_char ())
936 /* Clean up after a failed match. */
937 gfc_current_locus = old_loc;
938 va_start (argp, target);
941 for (; matches > 0; matches--)
951 /* Matches that don't have to be undone */
956 (void) va_arg (argp, void **);
961 vp = va_arg (argp, void **);
975 /*********************** Statement level matching **********************/
977 /* Matches the start of a program unit, which is the program keyword
978 followed by an obligatory symbol. */
981 gfc_match_program (void)
986 m = gfc_match ("% %s%t", &sym);
990 gfc_error ("Invalid form of PROGRAM statement at %C");
994 if (m == MATCH_ERROR)
997 if (gfc_add_flavor (&sym->attr, FL_PROGRAM, sym->name, NULL) == FAILURE)
1000 gfc_new_block = sym;
1006 /* Match a simple assignment statement. */
1009 gfc_match_assignment (void)
1011 gfc_expr *lvalue, *rvalue;
1015 old_loc = gfc_current_locus;
1018 m = gfc_match (" %v =", &lvalue);
1021 gfc_current_locus = old_loc;
1022 gfc_free_expr (lvalue);
1026 if (lvalue->symtree->n.sym->attr.protected
1027 && lvalue->symtree->n.sym->attr.use_assoc)
1029 gfc_current_locus = old_loc;
1030 gfc_free_expr (lvalue);
1031 gfc_error ("Setting value of PROTECTED variable at %C");
1036 m = gfc_match (" %e%t", &rvalue);
1039 gfc_current_locus = old_loc;
1040 gfc_free_expr (lvalue);
1041 gfc_free_expr (rvalue);
1045 gfc_set_sym_referenced (lvalue->symtree->n.sym);
1047 new_st.op = EXEC_ASSIGN;
1048 new_st.expr = lvalue;
1049 new_st.expr2 = rvalue;
1051 gfc_check_do_variable (lvalue->symtree);
1057 /* Match a pointer assignment statement. */
1060 gfc_match_pointer_assignment (void)
1062 gfc_expr *lvalue, *rvalue;
1066 old_loc = gfc_current_locus;
1068 lvalue = rvalue = NULL;
1070 m = gfc_match (" %v =>", &lvalue);
1077 m = gfc_match (" %e%t", &rvalue);
1081 if (lvalue->symtree->n.sym->attr.protected
1082 && lvalue->symtree->n.sym->attr.use_assoc)
1084 gfc_error ("Assigning to a PROTECTED pointer at %C");
1089 new_st.op = EXEC_POINTER_ASSIGN;
1090 new_st.expr = lvalue;
1091 new_st.expr2 = rvalue;
1096 gfc_current_locus = old_loc;
1097 gfc_free_expr (lvalue);
1098 gfc_free_expr (rvalue);
1103 /* We try to match an easy arithmetic IF statement. This only happens
1104 when just after having encountered a simple IF statement. This code
1105 is really duplicate with parts of the gfc_match_if code, but this is
1109 match_arithmetic_if (void)
1111 gfc_st_label *l1, *l2, *l3;
1115 m = gfc_match (" ( %e ) %l , %l , %l%t", &expr, &l1, &l2, &l3);
1119 if (gfc_reference_st_label (l1, ST_LABEL_TARGET) == FAILURE
1120 || gfc_reference_st_label (l2, ST_LABEL_TARGET) == FAILURE
1121 || gfc_reference_st_label (l3, ST_LABEL_TARGET) == FAILURE)
1123 gfc_free_expr (expr);
1127 if (gfc_notify_std (GFC_STD_F95_OBS, "Obsolescent: arithmetic IF statement "
1128 "at %C") == FAILURE)
1131 new_st.op = EXEC_ARITHMETIC_IF;
1141 /* The IF statement is a bit of a pain. First of all, there are three
1142 forms of it, the simple IF, the IF that starts a block and the
1145 There is a problem with the simple IF and that is the fact that we
1146 only have a single level of undo information on symbols. What this
1147 means is for a simple IF, we must re-match the whole IF statement
1148 multiple times in order to guarantee that the symbol table ends up
1149 in the proper state. */
1151 static match match_simple_forall (void);
1152 static match match_simple_where (void);
1155 gfc_match_if (gfc_statement *if_type)
1158 gfc_st_label *l1, *l2, *l3;
1163 n = gfc_match_label ();
1164 if (n == MATCH_ERROR)
1167 old_loc = gfc_current_locus;
1169 m = gfc_match (" if ( %e", &expr);
1173 if (gfc_match_char (')') != MATCH_YES)
1175 gfc_error ("Syntax error in IF-expression at %C");
1176 gfc_free_expr (expr);
1180 m = gfc_match (" %l , %l , %l%t", &l1, &l2, &l3);
1186 gfc_error ("Block label not appropriate for arithmetic IF "
1188 gfc_free_expr (expr);
1192 if (gfc_reference_st_label (l1, ST_LABEL_TARGET) == FAILURE
1193 || gfc_reference_st_label (l2, ST_LABEL_TARGET) == FAILURE
1194 || gfc_reference_st_label (l3, ST_LABEL_TARGET) == FAILURE)
1196 gfc_free_expr (expr);
1200 if (gfc_notify_std (GFC_STD_F95_OBS, "Obsolescent: arithmetic IF "
1201 "statement at %C") == FAILURE)
1204 new_st.op = EXEC_ARITHMETIC_IF;
1210 *if_type = ST_ARITHMETIC_IF;
1214 if (gfc_match (" then%t") == MATCH_YES)
1216 new_st.op = EXEC_IF;
1218 *if_type = ST_IF_BLOCK;
1224 gfc_error ("Block label is not appropriate IF statement at %C");
1225 gfc_free_expr (expr);
1229 /* At this point the only thing left is a simple IF statement. At
1230 this point, n has to be MATCH_NO, so we don't have to worry about
1231 re-matching a block label. From what we've got so far, try
1232 matching an assignment. */
1234 *if_type = ST_SIMPLE_IF;
1236 m = gfc_match_assignment ();
1240 gfc_free_expr (expr);
1241 gfc_undo_symbols ();
1242 gfc_current_locus = old_loc;
1244 /* m can be MATCH_NO or MATCH_ERROR, here. For MATCH_ERROR, a mangled
1245 assignment was found. For MATCH_NO, continue to call the various
1247 if (m == MATCH_ERROR)
1250 gfc_match (" if ( %e ) ", &expr); /* Guaranteed to match. */
1252 m = gfc_match_pointer_assignment ();
1256 gfc_free_expr (expr);
1257 gfc_undo_symbols ();
1258 gfc_current_locus = old_loc;
1260 gfc_match (" if ( %e ) ", &expr); /* Guaranteed to match. */
1262 /* Look at the next keyword to see which matcher to call. Matching
1263 the keyword doesn't affect the symbol table, so we don't have to
1264 restore between tries. */
1266 #define match(string, subr, statement) \
1267 if (gfc_match(string) == MATCH_YES) { m = subr(); goto got_match; }
1271 match ("allocate", gfc_match_allocate, ST_ALLOCATE)
1272 match ("assign", gfc_match_assign, ST_LABEL_ASSIGNMENT)
1273 match ("backspace", gfc_match_backspace, ST_BACKSPACE)
1274 match ("call", gfc_match_call, ST_CALL)
1275 match ("close", gfc_match_close, ST_CLOSE)
1276 match ("continue", gfc_match_continue, ST_CONTINUE)
1277 match ("cycle", gfc_match_cycle, ST_CYCLE)
1278 match ("deallocate", gfc_match_deallocate, ST_DEALLOCATE)
1279 match ("end file", gfc_match_endfile, ST_END_FILE)
1280 match ("exit", gfc_match_exit, ST_EXIT)
1281 match ("flush", gfc_match_flush, ST_FLUSH)
1282 match ("forall", match_simple_forall, ST_FORALL)
1283 match ("go to", gfc_match_goto, ST_GOTO)
1284 match ("if", match_arithmetic_if, ST_ARITHMETIC_IF)
1285 match ("inquire", gfc_match_inquire, ST_INQUIRE)
1286 match ("nullify", gfc_match_nullify, ST_NULLIFY)
1287 match ("open", gfc_match_open, ST_OPEN)
1288 match ("pause", gfc_match_pause, ST_NONE)
1289 match ("print", gfc_match_print, ST_WRITE)
1290 match ("read", gfc_match_read, ST_READ)
1291 match ("return", gfc_match_return, ST_RETURN)
1292 match ("rewind", gfc_match_rewind, ST_REWIND)
1293 match ("stop", gfc_match_stop, ST_STOP)
1294 match ("where", match_simple_where, ST_WHERE)
1295 match ("write", gfc_match_write, ST_WRITE)
1297 /* The gfc_match_assignment() above may have returned a MATCH_NO
1298 where the assignment was to a named constant. Check that
1299 special case here. */
1300 m = gfc_match_assignment ();
1303 gfc_error ("Cannot assign to a named constant at %C");
1304 gfc_free_expr (expr);
1305 gfc_undo_symbols ();
1306 gfc_current_locus = old_loc;
1310 /* All else has failed, so give up. See if any of the matchers has
1311 stored an error message of some sort. */
1312 if (gfc_error_check () == 0)
1313 gfc_error ("Unclassifiable statement in IF-clause at %C");
1315 gfc_free_expr (expr);
1320 gfc_error ("Syntax error in IF-clause at %C");
1323 gfc_free_expr (expr);
1327 /* At this point, we've matched the single IF and the action clause
1328 is in new_st. Rearrange things so that the IF statement appears
1331 p = gfc_get_code ();
1332 p->next = gfc_get_code ();
1334 p->next->loc = gfc_current_locus;
1339 gfc_clear_new_st ();
1341 new_st.op = EXEC_IF;
1350 /* Match an ELSE statement. */
1353 gfc_match_else (void)
1355 char name[GFC_MAX_SYMBOL_LEN + 1];
1357 if (gfc_match_eos () == MATCH_YES)
1360 if (gfc_match_name (name) != MATCH_YES
1361 || gfc_current_block () == NULL
1362 || gfc_match_eos () != MATCH_YES)
1364 gfc_error ("Unexpected junk after ELSE statement at %C");
1368 if (strcmp (name, gfc_current_block ()->name) != 0)
1370 gfc_error ("Label '%s' at %C doesn't match IF label '%s'",
1371 name, gfc_current_block ()->name);
1379 /* Match an ELSE IF statement. */
1382 gfc_match_elseif (void)
1384 char name[GFC_MAX_SYMBOL_LEN + 1];
1388 m = gfc_match (" ( %e ) then", &expr);
1392 if (gfc_match_eos () == MATCH_YES)
1395 if (gfc_match_name (name) != MATCH_YES
1396 || gfc_current_block () == NULL
1397 || gfc_match_eos () != MATCH_YES)
1399 gfc_error ("Unexpected junk after ELSE IF statement at %C");
1403 if (strcmp (name, gfc_current_block ()->name) != 0)
1405 gfc_error ("Label '%s' at %C doesn't match IF label '%s'",
1406 name, gfc_current_block ()->name);
1411 new_st.op = EXEC_IF;
1416 gfc_free_expr (expr);
1421 /* Free a gfc_iterator structure. */
1424 gfc_free_iterator (gfc_iterator *iter, int flag)
1430 gfc_free_expr (iter->var);
1431 gfc_free_expr (iter->start);
1432 gfc_free_expr (iter->end);
1433 gfc_free_expr (iter->step);
1440 /* Match a DO statement. */
1445 gfc_iterator iter, *ip;
1447 gfc_st_label *label;
1450 old_loc = gfc_current_locus;
1453 iter.var = iter.start = iter.end = iter.step = NULL;
1455 m = gfc_match_label ();
1456 if (m == MATCH_ERROR)
1459 if (gfc_match (" do") != MATCH_YES)
1462 m = gfc_match_st_label (&label);
1463 if (m == MATCH_ERROR)
1466 /* Match an infinite DO, make it like a DO WHILE(.TRUE.). */
1468 if (gfc_match_eos () == MATCH_YES)
1470 iter.end = gfc_logical_expr (1, NULL);
1471 new_st.op = EXEC_DO_WHILE;
1475 /* Match an optional comma, if no comma is found, a space is obligatory. */
1476 if (gfc_match_char (',') != MATCH_YES && gfc_match ("% ") != MATCH_YES)
1479 /* See if we have a DO WHILE. */
1480 if (gfc_match (" while ( %e )%t", &iter.end) == MATCH_YES)
1482 new_st.op = EXEC_DO_WHILE;
1486 /* The abortive DO WHILE may have done something to the symbol
1487 table, so we start over. */
1488 gfc_undo_symbols ();
1489 gfc_current_locus = old_loc;
1491 gfc_match_label (); /* This won't error. */
1492 gfc_match (" do "); /* This will work. */
1494 gfc_match_st_label (&label); /* Can't error out. */
1495 gfc_match_char (','); /* Optional comma. */
1497 m = gfc_match_iterator (&iter, 0);
1500 if (m == MATCH_ERROR)
1503 iter.var->symtree->n.sym->attr.implied_index = 0;
1504 gfc_check_do_variable (iter.var->symtree);
1506 if (gfc_match_eos () != MATCH_YES)
1508 gfc_syntax_error (ST_DO);
1512 new_st.op = EXEC_DO;
1516 && gfc_reference_st_label (label, ST_LABEL_TARGET) == FAILURE)
1519 new_st.label = label;
1521 if (new_st.op == EXEC_DO_WHILE)
1522 new_st.expr = iter.end;
1525 new_st.ext.iterator = ip = gfc_get_iterator ();
1532 gfc_free_iterator (&iter, 0);
1538 /* Match an EXIT or CYCLE statement. */
1541 match_exit_cycle (gfc_statement st, gfc_exec_op op)
1543 gfc_state_data *p, *o;
1547 if (gfc_match_eos () == MATCH_YES)
1551 m = gfc_match ("% %s%t", &sym);
1552 if (m == MATCH_ERROR)
1556 gfc_syntax_error (st);
1560 if (sym->attr.flavor != FL_LABEL)
1562 gfc_error ("Name '%s' in %s statement at %C is not a loop name",
1563 sym->name, gfc_ascii_statement (st));
1568 /* Find the loop mentioned specified by the label (or lack of a label). */
1569 for (o = NULL, p = gfc_state_stack; p; p = p->previous)
1570 if (p->state == COMP_DO && (sym == NULL || sym == p->sym))
1572 else if (o == NULL && p->state == COMP_OMP_STRUCTURED_BLOCK)
1578 gfc_error ("%s statement at %C is not within a loop",
1579 gfc_ascii_statement (st));
1581 gfc_error ("%s statement at %C is not within loop '%s'",
1582 gfc_ascii_statement (st), sym->name);
1589 gfc_error ("%s statement at %C leaving OpenMP structured block",
1590 gfc_ascii_statement (st));
1593 else if (st == ST_EXIT
1594 && p->previous != NULL
1595 && p->previous->state == COMP_OMP_STRUCTURED_BLOCK
1596 && (p->previous->head->op == EXEC_OMP_DO
1597 || p->previous->head->op == EXEC_OMP_PARALLEL_DO))
1599 gcc_assert (p->previous->head->next != NULL);
1600 gcc_assert (p->previous->head->next->op == EXEC_DO
1601 || p->previous->head->next->op == EXEC_DO_WHILE);
1602 gfc_error ("EXIT statement at %C terminating !$OMP DO loop");
1606 /* Save the first statement in the loop - needed by the backend. */
1607 new_st.ext.whichloop = p->head;
1615 /* Match the EXIT statement. */
1618 gfc_match_exit (void)
1620 return match_exit_cycle (ST_EXIT, EXEC_EXIT);
1624 /* Match the CYCLE statement. */
1627 gfc_match_cycle (void)
1629 return match_exit_cycle (ST_CYCLE, EXEC_CYCLE);
1633 /* Match a number or character constant after a STOP or PAUSE statement. */
1636 gfc_match_stopcode (gfc_statement st)
1646 if (gfc_match_eos () != MATCH_YES)
1648 m = gfc_match_small_literal_int (&stop_code, &cnt);
1649 if (m == MATCH_ERROR)
1652 if (m == MATCH_YES && cnt > 5)
1654 gfc_error ("Too many digits in STOP code at %C");
1660 /* Try a character constant. */
1661 m = gfc_match_expr (&e);
1662 if (m == MATCH_ERROR)
1666 if (e->ts.type != BT_CHARACTER || e->expr_type != EXPR_CONSTANT)
1670 if (gfc_match_eos () != MATCH_YES)
1674 if (gfc_pure (NULL))
1676 gfc_error ("%s statement not allowed in PURE procedure at %C",
1677 gfc_ascii_statement (st));
1681 new_st.op = st == ST_STOP ? EXEC_STOP : EXEC_PAUSE;
1683 new_st.ext.stop_code = stop_code;
1688 gfc_syntax_error (st);
1697 /* Match the (deprecated) PAUSE statement. */
1700 gfc_match_pause (void)
1704 m = gfc_match_stopcode (ST_PAUSE);
1707 if (gfc_notify_std (GFC_STD_F95_DEL, "Deleted feature: PAUSE statement"
1716 /* Match the STOP statement. */
1719 gfc_match_stop (void)
1721 return gfc_match_stopcode (ST_STOP);
1725 /* Match a CONTINUE statement. */
1728 gfc_match_continue (void)
1730 if (gfc_match_eos () != MATCH_YES)
1732 gfc_syntax_error (ST_CONTINUE);
1736 new_st.op = EXEC_CONTINUE;
1741 /* Match the (deprecated) ASSIGN statement. */
1744 gfc_match_assign (void)
1747 gfc_st_label *label;
1749 if (gfc_match (" %l", &label) == MATCH_YES)
1751 if (gfc_reference_st_label (label, ST_LABEL_UNKNOWN) == FAILURE)
1753 if (gfc_match (" to %v%t", &expr) == MATCH_YES)
1755 if (gfc_notify_std (GFC_STD_F95_DEL, "Deleted feature: ASSIGN "
1760 expr->symtree->n.sym->attr.assign = 1;
1762 new_st.op = EXEC_LABEL_ASSIGN;
1763 new_st.label = label;
1772 /* Match the GO TO statement. As a computed GOTO statement is
1773 matched, it is transformed into an equivalent SELECT block. No
1774 tree is necessary, and the resulting jumps-to-jumps are
1775 specifically optimized away by the back end. */
1778 gfc_match_goto (void)
1780 gfc_code *head, *tail;
1783 gfc_st_label *label;
1787 if (gfc_match (" %l%t", &label) == MATCH_YES)
1789 if (gfc_reference_st_label (label, ST_LABEL_TARGET) == FAILURE)
1792 new_st.op = EXEC_GOTO;
1793 new_st.label = label;
1797 /* The assigned GO TO statement. */
1799 if (gfc_match_variable (&expr, 0) == MATCH_YES)
1801 if (gfc_notify_std (GFC_STD_F95_DEL, "Deleted feature: Assigned GOTO "
1806 new_st.op = EXEC_GOTO;
1809 if (gfc_match_eos () == MATCH_YES)
1812 /* Match label list. */
1813 gfc_match_char (',');
1814 if (gfc_match_char ('(') != MATCH_YES)
1816 gfc_syntax_error (ST_GOTO);
1823 m = gfc_match_st_label (&label);
1827 if (gfc_reference_st_label (label, ST_LABEL_TARGET) == FAILURE)
1831 head = tail = gfc_get_code ();
1834 tail->block = gfc_get_code ();
1838 tail->label = label;
1839 tail->op = EXEC_GOTO;
1841 while (gfc_match_char (',') == MATCH_YES);
1843 if (gfc_match (")%t") != MATCH_YES)
1848 gfc_error ("Statement label list in GOTO at %C cannot be empty");
1851 new_st.block = head;
1856 /* Last chance is a computed GO TO statement. */
1857 if (gfc_match_char ('(') != MATCH_YES)
1859 gfc_syntax_error (ST_GOTO);
1868 m = gfc_match_st_label (&label);
1872 if (gfc_reference_st_label (label, ST_LABEL_TARGET) == FAILURE)
1876 head = tail = gfc_get_code ();
1879 tail->block = gfc_get_code ();
1883 cp = gfc_get_case ();
1884 cp->low = cp->high = gfc_int_expr (i++);
1886 tail->op = EXEC_SELECT;
1887 tail->ext.case_list = cp;
1889 tail->next = gfc_get_code ();
1890 tail->next->op = EXEC_GOTO;
1891 tail->next->label = label;
1893 while (gfc_match_char (',') == MATCH_YES);
1895 if (gfc_match_char (')') != MATCH_YES)
1900 gfc_error ("Statement label list in GOTO at %C cannot be empty");
1904 /* Get the rest of the statement. */
1905 gfc_match_char (',');
1907 if (gfc_match (" %e%t", &expr) != MATCH_YES)
1910 /* At this point, a computed GOTO has been fully matched and an
1911 equivalent SELECT statement constructed. */
1913 new_st.op = EXEC_SELECT;
1916 /* Hack: For a "real" SELECT, the expression is in expr. We put
1917 it in expr2 so we can distinguish then and produce the correct
1919 new_st.expr2 = expr;
1920 new_st.block = head;
1924 gfc_syntax_error (ST_GOTO);
1926 gfc_free_statements (head);
1931 /* Frees a list of gfc_alloc structures. */
1934 gfc_free_alloc_list (gfc_alloc *p)
1941 gfc_free_expr (p->expr);
1947 /* Match an ALLOCATE statement. */
1950 gfc_match_allocate (void)
1952 gfc_alloc *head, *tail;
1959 if (gfc_match_char ('(') != MATCH_YES)
1965 head = tail = gfc_get_alloc ();
1968 tail->next = gfc_get_alloc ();
1972 m = gfc_match_variable (&tail->expr, 0);
1975 if (m == MATCH_ERROR)
1978 if (gfc_check_do_variable (tail->expr->symtree))
1982 && gfc_impure_variable (tail->expr->symtree->n.sym))
1984 gfc_error ("Bad allocate-object in ALLOCATE statement at %C for a "
1989 if (tail->expr->ts.type == BT_DERIVED)
1990 tail->expr->ts.derived = gfc_use_derived (tail->expr->ts.derived);
1992 if (gfc_match_char (',') != MATCH_YES)
1995 m = gfc_match (" stat = %v", &stat);
1996 if (m == MATCH_ERROR)
2004 if (stat->symtree->n.sym->attr.intent == INTENT_IN)
2006 gfc_error ("STAT variable '%s' of ALLOCATE statement at %C cannot "
2007 "be INTENT(IN)", stat->symtree->n.sym->name);
2011 if (gfc_pure (NULL) && gfc_impure_variable (stat->symtree->n.sym))
2013 gfc_error ("Illegal STAT variable in ALLOCATE statement at %C "
2014 "for a PURE procedure");
2018 if (stat->symtree->n.sym->attr.flavor != FL_VARIABLE)
2020 gfc_error ("STAT expression at %C must be a variable");
2024 gfc_check_do_variable(stat->symtree);
2027 if (gfc_match (" )%t") != MATCH_YES)
2030 new_st.op = EXEC_ALLOCATE;
2032 new_st.ext.alloc_list = head;
2037 gfc_syntax_error (ST_ALLOCATE);
2040 gfc_free_expr (stat);
2041 gfc_free_alloc_list (head);
2046 /* Match a NULLIFY statement. A NULLIFY statement is transformed into
2047 a set of pointer assignments to intrinsic NULL(). */
2050 gfc_match_nullify (void)
2058 if (gfc_match_char ('(') != MATCH_YES)
2063 m = gfc_match_variable (&p, 0);
2064 if (m == MATCH_ERROR)
2069 if (gfc_check_do_variable (p->symtree))
2072 if (gfc_pure (NULL) && gfc_impure_variable (p->symtree->n.sym))
2074 gfc_error ("Illegal variable in NULLIFY at %C for a PURE procedure");
2078 /* build ' => NULL() '. */
2079 e = gfc_get_expr ();
2080 e->where = gfc_current_locus;
2081 e->expr_type = EXPR_NULL;
2082 e->ts.type = BT_UNKNOWN;
2084 /* Chain to list. */
2089 tail->next = gfc_get_code ();
2093 tail->op = EXEC_POINTER_ASSIGN;
2097 if (gfc_match (" )%t") == MATCH_YES)
2099 if (gfc_match_char (',') != MATCH_YES)
2106 gfc_syntax_error (ST_NULLIFY);
2109 gfc_free_statements (new_st.next);
2114 /* Match a DEALLOCATE statement. */
2117 gfc_match_deallocate (void)
2119 gfc_alloc *head, *tail;
2126 if (gfc_match_char ('(') != MATCH_YES)
2132 head = tail = gfc_get_alloc ();
2135 tail->next = gfc_get_alloc ();
2139 m = gfc_match_variable (&tail->expr, 0);
2140 if (m == MATCH_ERROR)
2145 if (gfc_check_do_variable (tail->expr->symtree))
2149 && gfc_impure_variable (tail->expr->symtree->n.sym))
2151 gfc_error ("Illegal deallocate-expression in DEALLOCATE at %C "
2152 "for a PURE procedure");
2156 if (gfc_match_char (',') != MATCH_YES)
2159 m = gfc_match (" stat = %v", &stat);
2160 if (m == MATCH_ERROR)
2168 if (stat->symtree->n.sym->attr.intent == INTENT_IN)
2170 gfc_error ("STAT variable '%s' of DEALLOCATE statement at %C "
2171 "cannot be INTENT(IN)", stat->symtree->n.sym->name);
2175 if (gfc_pure(NULL) && gfc_impure_variable (stat->symtree->n.sym))
2177 gfc_error ("Illegal STAT variable in DEALLOCATE statement at %C "
2178 "for a PURE procedure");
2182 if (stat->symtree->n.sym->attr.flavor != FL_VARIABLE)
2184 gfc_error ("STAT expression at %C must be a variable");
2188 gfc_check_do_variable(stat->symtree);
2191 if (gfc_match (" )%t") != MATCH_YES)
2194 new_st.op = EXEC_DEALLOCATE;
2196 new_st.ext.alloc_list = head;
2201 gfc_syntax_error (ST_DEALLOCATE);
2204 gfc_free_expr (stat);
2205 gfc_free_alloc_list (head);
2210 /* Match a RETURN statement. */
2213 gfc_match_return (void)
2217 gfc_compile_state s;
2221 if (gfc_match_eos () == MATCH_YES)
2224 if (gfc_find_state (COMP_SUBROUTINE) == FAILURE)
2226 gfc_error ("Alternate RETURN statement at %C is only allowed within "
2231 if (gfc_current_form == FORM_FREE)
2233 /* The following are valid, so we can't require a blank after the
2237 c = gfc_peek_char ();
2238 if (ISALPHA (c) || ISDIGIT (c))
2242 m = gfc_match (" %e%t", &e);
2245 if (m == MATCH_ERROR)
2248 gfc_syntax_error (ST_RETURN);
2255 gfc_enclosing_unit (&s);
2256 if (s == COMP_PROGRAM
2257 && gfc_notify_std (GFC_STD_GNU, "Extension: RETURN statement in "
2258 "main program at %C") == FAILURE)
2261 new_st.op = EXEC_RETURN;
2268 /* Match a CALL statement. The tricky part here are possible
2269 alternate return specifiers. We handle these by having all
2270 "subroutines" actually return an integer via a register that gives
2271 the return number. If the call specifies alternate returns, we
2272 generate code for a SELECT statement whose case clauses contain
2273 GOTOs to the various labels. */
2276 gfc_match_call (void)
2278 char name[GFC_MAX_SYMBOL_LEN + 1];
2279 gfc_actual_arglist *a, *arglist;
2289 m = gfc_match ("% %n", name);
2295 if (gfc_get_ha_sym_tree (name, &st))
2300 /* If it does not seem to be callable... */
2301 if (!sym->attr.generic
2302 && !sym->attr.subroutine)
2304 /* ...create a symbol in this scope... */
2305 if (sym->ns != gfc_current_ns
2306 && gfc_get_sym_tree (name, NULL, &st) == 1)
2309 if (sym != st->n.sym)
2312 /* ...and then to try to make the symbol into a subroutine. */
2313 if (gfc_add_subroutine (&sym->attr, sym->name, NULL) == FAILURE)
2317 gfc_set_sym_referenced (sym);
2319 if (gfc_match_eos () != MATCH_YES)
2321 m = gfc_match_actual_arglist (1, &arglist);
2324 if (m == MATCH_ERROR)
2327 if (gfc_match_eos () != MATCH_YES)
2331 /* If any alternate return labels were found, construct a SELECT
2332 statement that will jump to the right place. */
2335 for (a = arglist; a; a = a->next)
2336 if (a->expr == NULL)
2341 gfc_symtree *select_st;
2342 gfc_symbol *select_sym;
2343 char name[GFC_MAX_SYMBOL_LEN + 1];
2345 new_st.next = c = gfc_get_code ();
2346 c->op = EXEC_SELECT;
2347 sprintf (name, "_result_%s", sym->name);
2348 gfc_get_ha_sym_tree (name, &select_st); /* Can't fail. */
2350 select_sym = select_st->n.sym;
2351 select_sym->ts.type = BT_INTEGER;
2352 select_sym->ts.kind = gfc_default_integer_kind;
2353 gfc_set_sym_referenced (select_sym);
2354 c->expr = gfc_get_expr ();
2355 c->expr->expr_type = EXPR_VARIABLE;
2356 c->expr->symtree = select_st;
2357 c->expr->ts = select_sym->ts;
2358 c->expr->where = gfc_current_locus;
2361 for (a = arglist; a; a = a->next)
2363 if (a->expr != NULL)
2366 if (gfc_reference_st_label (a->label, ST_LABEL_TARGET) == FAILURE)
2371 c->block = gfc_get_code ();
2373 c->op = EXEC_SELECT;
2375 new_case = gfc_get_case ();
2376 new_case->high = new_case->low = gfc_int_expr (i);
2377 c->ext.case_list = new_case;
2379 c->next = gfc_get_code ();
2380 c->next->op = EXEC_GOTO;
2381 c->next->label = a->label;
2385 new_st.op = EXEC_CALL;
2386 new_st.symtree = st;
2387 new_st.ext.actual = arglist;
2392 gfc_syntax_error (ST_CALL);
2395 gfc_free_actual_arglist (arglist);
2400 /* Given a name, return a pointer to the common head structure,
2401 creating it if it does not exist. If FROM_MODULE is nonzero, we
2402 mangle the name so that it doesn't interfere with commons defined
2403 in the using namespace.
2404 TODO: Add to global symbol tree. */
2407 gfc_get_common (const char *name, int from_module)
2410 static int serial = 0;
2411 char mangled_name[GFC_MAX_SYMBOL_LEN + 1];
2415 /* A use associated common block is only needed to correctly layout
2416 the variables it contains. */
2417 snprintf (mangled_name, GFC_MAX_SYMBOL_LEN, "_%d_%s", serial++, name);
2418 st = gfc_new_symtree (&gfc_current_ns->common_root, mangled_name);
2422 st = gfc_find_symtree (gfc_current_ns->common_root, name);
2425 st = gfc_new_symtree (&gfc_current_ns->common_root, name);
2428 if (st->n.common == NULL)
2430 st->n.common = gfc_get_common_head ();
2431 st->n.common->where = gfc_current_locus;
2432 strcpy (st->n.common->name, name);
2435 return st->n.common;
2439 /* Match a common block name. */
2441 match match_common_name (char *name)
2445 if (gfc_match_char ('/') == MATCH_NO)
2451 if (gfc_match_char ('/') == MATCH_YES)
2457 m = gfc_match_name (name);
2459 if (m == MATCH_ERROR)
2461 if (m == MATCH_YES && gfc_match_char ('/') == MATCH_YES)
2464 gfc_error ("Syntax error in common block name at %C");
2469 /* Match a COMMON statement. */
2472 gfc_match_common (void)
2474 gfc_symbol *sym, **head, *tail, *other, *old_blank_common;
2475 char name[GFC_MAX_SYMBOL_LEN + 1];
2482 old_blank_common = gfc_current_ns->blank_common.head;
2483 if (old_blank_common)
2485 while (old_blank_common->common_next)
2486 old_blank_common = old_blank_common->common_next;
2493 m = match_common_name (name);
2494 if (m == MATCH_ERROR)
2497 gsym = gfc_get_gsymbol (name);
2498 if (gsym->type != GSYM_UNKNOWN && gsym->type != GSYM_COMMON)
2500 gfc_error ("Symbol '%s' at %C is already an external symbol that "
2501 "is not COMMON", name);
2505 if (gsym->type == GSYM_UNKNOWN)
2507 gsym->type = GSYM_COMMON;
2508 gsym->where = gfc_current_locus;
2514 if (name[0] == '\0')
2516 if (gfc_current_ns->is_block_data)
2518 gfc_warning ("BLOCK DATA unit cannot contain blank COMMON "
2521 t = &gfc_current_ns->blank_common;
2522 if (t->head == NULL)
2523 t->where = gfc_current_locus;
2527 t = gfc_get_common (name, 0);
2536 while (tail->common_next)
2537 tail = tail->common_next;
2540 /* Grab the list of symbols. */
2543 m = gfc_match_symbol (&sym, 0);
2544 if (m == MATCH_ERROR)
2549 /* Store a ref to the common block for error checking. */
2550 sym->common_block = t;
2552 /* See if we know the current common block is bind(c), and if
2553 so, then see if we can check if the symbol is (which it'll
2554 need to be). This can happen if the bind(c) attr stmt was
2555 applied to the common block, and the variable(s) already
2556 defined, before declaring the common block. */
2557 if (t->is_bind_c == 1)
2559 if (sym->ts.type != BT_UNKNOWN && sym->ts.is_c_interop != 1)
2561 /* If we find an error, just print it and continue,
2562 cause it's just semantic, and we can see if there
2564 gfc_error_now ("Variable '%s' at %L in common block '%s' "
2565 "at %C must be declared with a C "
2566 "interoperable kind since common block "
2568 sym->name, &(sym->declared_at), t->name,
2572 if (sym->attr.is_bind_c == 1)
2573 gfc_error_now ("Variable '%s' in common block "
2574 "'%s' at %C can not be bind(c) since "
2575 "it is not global", sym->name, t->name);
2578 if (sym->attr.in_common)
2580 gfc_error ("Symbol '%s' at %C is already in a COMMON block",
2585 if (gfc_add_in_common (&sym->attr, sym->name, NULL) == FAILURE)
2588 if (sym->value != NULL && sym->value->expr_type != EXPR_NULL
2589 && (name[0] == '\0' || !sym->attr.data))
2591 if (name[0] == '\0')
2592 gfc_error ("Previously initialized symbol '%s' in "
2593 "blank COMMON block at %C", sym->name);
2595 gfc_error ("Previously initialized symbol '%s' in "
2596 "COMMON block '%s' at %C", sym->name, name);
2600 if (gfc_add_in_common (&sym->attr, sym->name, NULL) == FAILURE)
2603 /* Derived type names must have the SEQUENCE attribute. */
2604 if (sym->ts.type == BT_DERIVED && !sym->ts.derived->attr.sequence)
2606 gfc_error ("Derived type variable in COMMON at %C does not "
2607 "have the SEQUENCE attribute");
2612 tail->common_next = sym;
2618 /* Deal with an optional array specification after the
2620 m = gfc_match_array_spec (&as);
2621 if (m == MATCH_ERROR)
2626 if (as->type != AS_EXPLICIT)
2628 gfc_error ("Array specification for symbol '%s' in COMMON "
2629 "at %C must be explicit", sym->name);
2633 if (gfc_add_dimension (&sym->attr, sym->name, NULL) == FAILURE)
2636 if (sym->attr.pointer)
2638 gfc_error ("Symbol '%s' in COMMON at %C cannot be a "
2639 "POINTER array", sym->name);
2648 sym->common_head = t;
2650 /* Check to see if the symbol is already in an equivalence group.
2651 If it is, set the other members as being in common. */
2652 if (sym->attr.in_equivalence)
2654 for (e1 = gfc_current_ns->equiv; e1; e1 = e1->next)
2656 for (e2 = e1; e2; e2 = e2->eq)
2657 if (e2->expr->symtree->n.sym == sym)
2664 for (e2 = e1; e2; e2 = e2->eq)
2666 other = e2->expr->symtree->n.sym;
2667 if (other->common_head
2668 && other->common_head != sym->common_head)
2670 gfc_error ("Symbol '%s', in COMMON block '%s' at "
2671 "%C is being indirectly equivalenced to "
2672 "another COMMON block '%s'",
2673 sym->name, sym->common_head->name,
2674 other->common_head->name);
2677 other->attr.in_common = 1;
2678 other->common_head = t;
2684 gfc_gobble_whitespace ();
2685 if (gfc_match_eos () == MATCH_YES)
2687 if (gfc_peek_char () == '/')
2689 if (gfc_match_char (',') != MATCH_YES)
2691 gfc_gobble_whitespace ();
2692 if (gfc_peek_char () == '/')
2701 gfc_syntax_error (ST_COMMON);
2704 if (old_blank_common)
2705 old_blank_common->common_next = NULL;
2707 gfc_current_ns->blank_common.head = NULL;
2708 gfc_free_array_spec (as);
2713 /* Match a BLOCK DATA program unit. */
2716 gfc_match_block_data (void)
2718 char name[GFC_MAX_SYMBOL_LEN + 1];
2722 if (gfc_match_eos () == MATCH_YES)
2724 gfc_new_block = NULL;
2728 m = gfc_match ("% %n%t", name);
2732 if (gfc_get_symbol (name, NULL, &sym))
2735 if (gfc_add_flavor (&sym->attr, FL_BLOCK_DATA, sym->name, NULL) == FAILURE)
2738 gfc_new_block = sym;
2744 /* Free a namelist structure. */
2747 gfc_free_namelist (gfc_namelist *name)
2751 for (; name; name = n)
2759 /* Match a NAMELIST statement. */
2762 gfc_match_namelist (void)
2764 gfc_symbol *group_name, *sym;
2768 m = gfc_match (" / %s /", &group_name);
2771 if (m == MATCH_ERROR)
2776 if (group_name->ts.type != BT_UNKNOWN)
2778 gfc_error ("Namelist group name '%s' at %C already has a basic "
2779 "type of %s", group_name->name,
2780 gfc_typename (&group_name->ts));
2784 if (group_name->attr.flavor == FL_NAMELIST
2785 && group_name->attr.use_assoc
2786 && gfc_notify_std (GFC_STD_GNU, "Namelist group name '%s' "
2787 "at %C already is USE associated and can"
2788 "not be respecified.", group_name->name)
2792 if (group_name->attr.flavor != FL_NAMELIST
2793 && gfc_add_flavor (&group_name->attr, FL_NAMELIST,
2794 group_name->name, NULL) == FAILURE)
2799 m = gfc_match_symbol (&sym, 1);
2802 if (m == MATCH_ERROR)
2805 if (sym->attr.in_namelist == 0
2806 && gfc_add_in_namelist (&sym->attr, sym->name, NULL) == FAILURE)
2809 /* Use gfc_error_check here, rather than goto error, so that
2810 these are the only errors for the next two lines. */
2811 if (sym->as && sym->as->type == AS_ASSUMED_SIZE)
2813 gfc_error ("Assumed size array '%s' in namelist '%s' at "
2814 "%C is not allowed", sym->name, group_name->name);
2818 if (sym->ts.type == BT_CHARACTER && sym->ts.cl->length == NULL)
2820 gfc_error ("Assumed character length '%s' in namelist '%s' at "
2821 "%C is not allowed", sym->name, group_name->name);
2825 if (sym->as && sym->as->type == AS_ASSUMED_SHAPE
2826 && gfc_notify_std (GFC_STD_GNU, "Assumed shape array '%s' in "
2827 "namelist '%s' at %C is an extension.",
2828 sym->name, group_name->name) == FAILURE)
2831 nl = gfc_get_namelist ();
2835 if (group_name->namelist == NULL)
2836 group_name->namelist = group_name->namelist_tail = nl;
2839 group_name->namelist_tail->next = nl;
2840 group_name->namelist_tail = nl;
2843 if (gfc_match_eos () == MATCH_YES)
2846 m = gfc_match_char (',');
2848 if (gfc_match_char ('/') == MATCH_YES)
2850 m2 = gfc_match (" %s /", &group_name);
2851 if (m2 == MATCH_YES)
2853 if (m2 == MATCH_ERROR)
2867 gfc_syntax_error (ST_NAMELIST);
2874 /* Match a MODULE statement. */
2877 gfc_match_module (void)
2881 m = gfc_match (" %s%t", &gfc_new_block);
2885 if (gfc_add_flavor (&gfc_new_block->attr, FL_MODULE,
2886 gfc_new_block->name, NULL) == FAILURE)
2893 /* Free equivalence sets and lists. Recursively is the easiest way to
2897 gfc_free_equiv (gfc_equiv *eq)
2902 gfc_free_equiv (eq->eq);
2903 gfc_free_equiv (eq->next);
2904 gfc_free_expr (eq->expr);
2909 /* Match an EQUIVALENCE statement. */
2912 gfc_match_equivalence (void)
2914 gfc_equiv *eq, *set, *tail;
2918 gfc_common_head *common_head = NULL;
2926 eq = gfc_get_equiv ();
2930 eq->next = gfc_current_ns->equiv;
2931 gfc_current_ns->equiv = eq;
2933 if (gfc_match_char ('(') != MATCH_YES)
2937 common_flag = FALSE;
2942 m = gfc_match_equiv_variable (&set->expr);
2943 if (m == MATCH_ERROR)
2948 /* count the number of objects. */
2951 if (gfc_match_char ('%') == MATCH_YES)
2953 gfc_error ("Derived type component %C is not a "
2954 "permitted EQUIVALENCE member");
2958 for (ref = set->expr->ref; ref; ref = ref->next)
2959 if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION)
2961 gfc_error ("Array reference in EQUIVALENCE at %C cannot "
2962 "be an array section");
2966 sym = set->expr->symtree->n.sym;
2968 if (gfc_add_in_equivalence (&sym->attr, sym->name, NULL) == FAILURE)
2971 if (sym->attr.in_common)
2974 common_head = sym->common_head;
2977 if (gfc_match_char (')') == MATCH_YES)
2980 if (gfc_match_char (',') != MATCH_YES)
2983 set->eq = gfc_get_equiv ();
2989 gfc_error ("EQUIVALENCE at %C requires two or more objects");
2993 /* If one of the members of an equivalence is in common, then
2994 mark them all as being in common. Before doing this, check
2995 that members of the equivalence group are not in different
2998 for (set = eq; set; set = set->eq)
3000 sym = set->expr->symtree->n.sym;
3001 if (sym->common_head && sym->common_head != common_head)
3003 gfc_error ("Attempt to indirectly overlap COMMON "
3004 "blocks %s and %s by EQUIVALENCE at %C",
3005 sym->common_head->name, common_head->name);
3008 sym->attr.in_common = 1;
3009 sym->common_head = common_head;
3012 if (gfc_match_eos () == MATCH_YES)
3014 if (gfc_match_char (',') != MATCH_YES)
3021 gfc_syntax_error (ST_EQUIVALENCE);
3027 gfc_free_equiv (gfc_current_ns->equiv);
3028 gfc_current_ns->equiv = eq;
3034 /* Check that a statement function is not recursive. This is done by looking
3035 for the statement function symbol(sym) by looking recursively through its
3036 expression(e). If a reference to sym is found, true is returned.
3037 12.5.4 requires that any variable of function that is implicitly typed
3038 shall have that type confirmed by any subsequent type declaration. The
3039 implicit typing is conveniently done here. */
3042 recursive_stmt_fcn (gfc_expr *e, gfc_symbol *sym)
3044 gfc_actual_arglist *arg;
3051 switch (e->expr_type)
3054 for (arg = e->value.function.actual; arg; arg = arg->next)
3056 if (sym->name == arg->name || recursive_stmt_fcn (arg->expr, sym))
3060 if (e->symtree == NULL)
3063 /* Check the name before testing for nested recursion! */
3064 if (sym->name == e->symtree->n.sym->name)
3067 /* Catch recursion via other statement functions. */
3068 if (e->symtree->n.sym->attr.proc == PROC_ST_FUNCTION
3069 && e->symtree->n.sym->value
3070 && recursive_stmt_fcn (e->symtree->n.sym->value, sym))
3073 if (e->symtree->n.sym->ts.type == BT_UNKNOWN)
3074 gfc_set_default_type (e->symtree->n.sym, 0, NULL);
3079 if (e->symtree && sym->name == e->symtree->n.sym->name)
3082 if (e->symtree->n.sym->ts.type == BT_UNKNOWN)
3083 gfc_set_default_type (e->symtree->n.sym, 0, NULL);
3087 if (recursive_stmt_fcn (e->value.op.op1, sym)
3088 || recursive_stmt_fcn (e->value.op.op2, sym))
3096 /* Component references do not need to be checked. */
3099 for (ref = e->ref; ref; ref = ref->next)
3104 for (i = 0; i < ref->u.ar.dimen; i++)
3106 if (recursive_stmt_fcn (ref->u.ar.start[i], sym)
3107 || recursive_stmt_fcn (ref->u.ar.end[i], sym)
3108 || recursive_stmt_fcn (ref->u.ar.stride[i], sym))
3114 if (recursive_stmt_fcn (ref->u.ss.start, sym)
3115 || recursive_stmt_fcn (ref->u.ss.end, sym))
3129 /* Match a statement function declaration. It is so easy to match
3130 non-statement function statements with a MATCH_ERROR as opposed to
3131 MATCH_NO that we suppress error message in most cases. */
3134 gfc_match_st_function (void)
3136 gfc_error_buf old_error;
3141 m = gfc_match_symbol (&sym, 0);
3145 gfc_push_error (&old_error);
3147 if (gfc_add_procedure (&sym->attr, PROC_ST_FUNCTION,
3148 sym->name, NULL) == FAILURE)
3151 if (gfc_match_formal_arglist (sym, 1, 0) != MATCH_YES)
3154 m = gfc_match (" = %e%t", &expr);
3158 gfc_free_error (&old_error);
3159 if (m == MATCH_ERROR)
3162 if (recursive_stmt_fcn (expr, sym))
3164 gfc_error ("Statement function at %L is recursive", &expr->where);
3173 gfc_pop_error (&old_error);
3178 /***************** SELECT CASE subroutines ******************/
3180 /* Free a single case structure. */
3183 free_case (gfc_case *p)
3185 if (p->low == p->high)
3187 gfc_free_expr (p->low);
3188 gfc_free_expr (p->high);
3193 /* Free a list of case structures. */
3196 gfc_free_case_list (gfc_case *p)
3208 /* Match a single case selector. */
3211 match_case_selector (gfc_case **cp)
3216 c = gfc_get_case ();
3217 c->where = gfc_current_locus;
3219 if (gfc_match_char (':') == MATCH_YES)
3221 m = gfc_match_init_expr (&c->high);
3224 if (m == MATCH_ERROR)
3229 m = gfc_match_init_expr (&c->low);
3230 if (m == MATCH_ERROR)
3235 /* If we're not looking at a ':' now, make a range out of a single
3236 target. Else get the upper bound for the case range. */
3237 if (gfc_match_char (':') != MATCH_YES)
3241 m = gfc_match_init_expr (&c->high);
3242 if (m == MATCH_ERROR)
3244 /* MATCH_NO is fine. It's OK if nothing is there! */
3252 gfc_error ("Expected initialization expression in CASE at %C");
3260 /* Match the end of a case statement. */
3263 match_case_eos (void)
3265 char name[GFC_MAX_SYMBOL_LEN + 1];
3268 if (gfc_match_eos () == MATCH_YES)
3271 /* If the case construct doesn't have a case-construct-name, we
3272 should have matched the EOS. */
3273 if (!gfc_current_block ())
3275 gfc_error ("Expected the name of the SELECT CASE construct at %C");
3279 gfc_gobble_whitespace ();
3281 m = gfc_match_name (name);
3285 if (strcmp (name, gfc_current_block ()->name) != 0)
3287 gfc_error ("Expected case name of '%s' at %C",
3288 gfc_current_block ()->name);
3292 return gfc_match_eos ();
3296 /* Match a SELECT statement. */
3299 gfc_match_select (void)
3304 m = gfc_match_label ();
3305 if (m == MATCH_ERROR)
3308 m = gfc_match (" select case ( %e )%t", &expr);
3312 new_st.op = EXEC_SELECT;
3319 /* Match a CASE statement. */
3322 gfc_match_case (void)
3324 gfc_case *c, *head, *tail;
3329 if (gfc_current_state () != COMP_SELECT)
3331 gfc_error ("Unexpected CASE statement at %C");
3335 if (gfc_match ("% default") == MATCH_YES)
3337 m = match_case_eos ();
3340 if (m == MATCH_ERROR)
3343 new_st.op = EXEC_SELECT;
3344 c = gfc_get_case ();
3345 c->where = gfc_current_locus;
3346 new_st.ext.case_list = c;
3350 if (gfc_match_char ('(') != MATCH_YES)
3355 if (match_case_selector (&c) == MATCH_ERROR)
3365 if (gfc_match_char (')') == MATCH_YES)
3367 if (gfc_match_char (',') != MATCH_YES)
3371 m = match_case_eos ();
3374 if (m == MATCH_ERROR)
3377 new_st.op = EXEC_SELECT;
3378 new_st.ext.case_list = head;
3383 gfc_error ("Syntax error in CASE-specification at %C");
3386 gfc_free_case_list (head); /* new_st is cleaned up in parse.c. */
3390 /********************* WHERE subroutines ********************/
3392 /* Match the rest of a simple WHERE statement that follows an IF statement.
3396 match_simple_where (void)
3402 m = gfc_match (" ( %e )", &expr);
3406 m = gfc_match_assignment ();
3409 if (m == MATCH_ERROR)
3412 if (gfc_match_eos () != MATCH_YES)
3415 c = gfc_get_code ();
3419 c->next = gfc_get_code ();
3422 gfc_clear_new_st ();
3424 new_st.op = EXEC_WHERE;
3430 gfc_syntax_error (ST_WHERE);
3433 gfc_free_expr (expr);
3438 /* Match a WHERE statement. */
3441 gfc_match_where (gfc_statement *st)
3447 m0 = gfc_match_label ();
3448 if (m0 == MATCH_ERROR)
3451 m = gfc_match (" where ( %e )", &expr);
3455 if (gfc_match_eos () == MATCH_YES)
3457 *st = ST_WHERE_BLOCK;
3458 new_st.op = EXEC_WHERE;
3463 m = gfc_match_assignment ();
3465 gfc_syntax_error (ST_WHERE);
3469 gfc_free_expr (expr);
3473 /* We've got a simple WHERE statement. */
3475 c = gfc_get_code ();
3479 c->next = gfc_get_code ();
3482 gfc_clear_new_st ();
3484 new_st.op = EXEC_WHERE;
3491 /* Match an ELSEWHERE statement. We leave behind a WHERE node in
3492 new_st if successful. */
3495 gfc_match_elsewhere (void)
3497 char name[GFC_MAX_SYMBOL_LEN + 1];
3501 if (gfc_current_state () != COMP_WHERE)
3503 gfc_error ("ELSEWHERE statement at %C not enclosed in WHERE block");
3509 if (gfc_match_char ('(') == MATCH_YES)
3511 m = gfc_match_expr (&expr);
3514 if (m == MATCH_ERROR)
3517 if (gfc_match_char (')') != MATCH_YES)
3521 if (gfc_match_eos () != MATCH_YES)
3523 /* Only makes sense if we have a where-construct-name. */
3524 if (!gfc_current_block ())
3529 /* Better be a name at this point. */
3530 m = gfc_match_name (name);
3533 if (m == MATCH_ERROR)
3536 if (gfc_match_eos () != MATCH_YES)
3539 if (strcmp (name, gfc_current_block ()->name) != 0)
3541 gfc_error ("Label '%s' at %C doesn't match WHERE label '%s'",
3542 name, gfc_current_block ()->name);
3547 new_st.op = EXEC_WHERE;
3552 gfc_syntax_error (ST_ELSEWHERE);
3555 gfc_free_expr (expr);
3560 /******************** FORALL subroutines ********************/
3562 /* Free a list of FORALL iterators. */
3565 gfc_free_forall_iterator (gfc_forall_iterator *iter)
3567 gfc_forall_iterator *next;
3572 gfc_free_expr (iter->var);
3573 gfc_free_expr (iter->start);
3574 gfc_free_expr (iter->end);
3575 gfc_free_expr (iter->stride);
3582 /* Match an iterator as part of a FORALL statement. The format is:
3584 <var> = <start>:<end>[:<stride>]
3586 On MATCH_NO, the caller tests for the possibility that there is a
3587 scalar mask expression. */
3590 match_forall_iterator (gfc_forall_iterator **result)
3592 gfc_forall_iterator *iter;
3596 where = gfc_current_locus;
3597 iter = gfc_getmem (sizeof (gfc_forall_iterator));
3599 m = gfc_match_expr (&iter->var);
3603 if (gfc_match_char ('=') != MATCH_YES
3604 || iter->var->expr_type != EXPR_VARIABLE)
3610 m = gfc_match_expr (&iter->start);
3614 if (gfc_match_char (':') != MATCH_YES)
3617 m = gfc_match_expr (&iter->end);
3620 if (m == MATCH_ERROR)
3623 if (gfc_match_char (':') == MATCH_NO)
3624 iter->stride = gfc_int_expr (1);
3627 m = gfc_match_expr (&iter->stride);
3630 if (m == MATCH_ERROR)
3634 /* Mark the iteration variable's symbol as used as a FORALL index. */
3635 iter->var->symtree->n.sym->forall_index = true;
3641 gfc_error ("Syntax error in FORALL iterator at %C");
3646 gfc_current_locus = where;
3647 gfc_free_forall_iterator (iter);
3652 /* Match the header of a FORALL statement. */
3655 match_forall_header (gfc_forall_iterator **phead, gfc_expr **mask)
3657 gfc_forall_iterator *head, *tail, *new;
3661 gfc_gobble_whitespace ();
3666 if (gfc_match_char ('(') != MATCH_YES)
3669 m = match_forall_iterator (&new);
3670 if (m == MATCH_ERROR)
3679 if (gfc_match_char (',') != MATCH_YES)
3682 m = match_forall_iterator (&new);
3683 if (m == MATCH_ERROR)
3693 /* Have to have a mask expression. */
3695 m = gfc_match_expr (&msk);
3698 if (m == MATCH_ERROR)
3704 if (gfc_match_char (')') == MATCH_NO)
3712 gfc_syntax_error (ST_FORALL);
3715 gfc_free_expr (msk);
3716 gfc_free_forall_iterator (head);
3721 /* Match the rest of a simple FORALL statement that follows an
3725 match_simple_forall (void)
3727 gfc_forall_iterator *head;
3736 m = match_forall_header (&head, &mask);
3743 m = gfc_match_assignment ();
3745 if (m == MATCH_ERROR)
3749 m = gfc_match_pointer_assignment ();
3750 if (m == MATCH_ERROR)
3756 c = gfc_get_code ();
3758 c->loc = gfc_current_locus;
3760 if (gfc_match_eos () != MATCH_YES)
3763 gfc_clear_new_st ();
3764 new_st.op = EXEC_FORALL;
3766 new_st.ext.forall_iterator = head;
3767 new_st.block = gfc_get_code ();
3769 new_st.block->op = EXEC_FORALL;
3770 new_st.block->next = c;
3775 gfc_syntax_error (ST_FORALL);
3778 gfc_free_forall_iterator (head);
3779 gfc_free_expr (mask);
3785 /* Match a FORALL statement. */
3788 gfc_match_forall (gfc_statement *st)
3790 gfc_forall_iterator *head;
3799 m0 = gfc_match_label ();
3800 if (m0 == MATCH_ERROR)
3803 m = gfc_match (" forall");
3807 m = match_forall_header (&head, &mask);
3808 if (m == MATCH_ERROR)
3813 if (gfc_match_eos () == MATCH_YES)
3815 *st = ST_FORALL_BLOCK;
3816 new_st.op = EXEC_FORALL;
3818 new_st.ext.forall_iterator = head;
3822 m = gfc_match_assignment ();
3823 if (m == MATCH_ERROR)
3827 m = gfc_match_pointer_assignment ();
3828 if (m == MATCH_ERROR)
3834 c = gfc_get_code ();
3836 c->loc = gfc_current_locus;
3838 gfc_clear_new_st ();
3839 new_st.op = EXEC_FORALL;
3841 new_st.ext.forall_iterator = head;
3842 new_st.block = gfc_get_code ();
3843 new_st.block->op = EXEC_FORALL;
3844 new_st.block->next = c;
3850 gfc_syntax_error (ST_FORALL);
3853 gfc_free_forall_iterator (head);
3854 gfc_free_expr (mask);
3855 gfc_free_statements (c);