1 /* Declaration statement matcher
2 Copyright (C) 2002, 2004 Free Software Foundation, Inc.
3 Contributed by Andy Vaught
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
30 /* This flag is set if a an old-style length selector is matched
31 during a type-declaration statement. */
33 static int old_char_selector;
35 /* When variables aquire types and attributes from a declaration
36 statement, they get them from the following static variables. The
37 first part of a declaration sets these variables and the second
38 part copies these into symbol structures. */
40 static gfc_typespec current_ts;
42 static symbol_attribute current_attr;
43 static gfc_array_spec *current_as;
44 static int colon_seen;
46 /* gfc_new_block points to the symbol of a newly matched block. */
48 gfc_symbol *gfc_new_block;
51 /********************* DATA statement subroutines *********************/
53 /* Free a gfc_data_variable structure and everything beneath it. */
56 free_variable (gfc_data_variable * p)
63 gfc_free_expr (p->expr);
64 gfc_free_iterator (&p->iter, 0);
65 free_variable (p->list);
72 /* Free a gfc_data_value structure and everything beneath it. */
75 free_value (gfc_data_value * p)
82 gfc_free_expr (p->expr);
88 /* Free a list of gfc_data structures. */
91 gfc_free_data (gfc_data * p)
99 free_variable (p->var);
100 free_value (p->value);
107 static match var_element (gfc_data_variable *);
109 /* Match a list of variables terminated by an iterator and a right
113 var_list (gfc_data_variable * parent)
115 gfc_data_variable *tail, var;
118 m = var_element (&var);
119 if (m == MATCH_ERROR)
124 tail = gfc_get_data_variable ();
131 if (gfc_match_char (',') != MATCH_YES)
134 m = gfc_match_iterator (&parent->iter, 1);
137 if (m == MATCH_ERROR)
140 m = var_element (&var);
141 if (m == MATCH_ERROR)
146 tail->next = gfc_get_data_variable ();
152 if (gfc_match_char (')') != MATCH_YES)
157 gfc_syntax_error (ST_DATA);
162 /* Match a single element in a data variable list, which can be a
163 variable-iterator list. */
166 var_element (gfc_data_variable * new)
171 memset (new, 0, sizeof (gfc_data_variable));
173 if (gfc_match_char ('(') == MATCH_YES)
174 return var_list (new);
176 m = gfc_match_variable (&new->expr, 0);
180 sym = new->expr->symtree->n.sym;
182 if(sym->value != NULL)
184 gfc_error ("Variable '%s' at %C already has an initialization",
189 #if 0 // TODO: Find out where to move this message
190 if (sym->attr.in_common)
191 /* See if sym is in the blank common block. */
192 for (t = &sym->ns->blank_common; t; t = t->common_next)
195 gfc_error ("DATA statement at %C may not initialize variable "
196 "'%s' from blank COMMON", sym->name);
201 if (gfc_add_data (&sym->attr, &new->expr->where) == FAILURE)
208 /* Match the top-level list of data variables. */
211 top_var_list (gfc_data * d)
213 gfc_data_variable var, *tail, *new;
220 m = var_element (&var);
223 if (m == MATCH_ERROR)
226 new = gfc_get_data_variable ();
236 if (gfc_match_char ('/') == MATCH_YES)
238 if (gfc_match_char (',') != MATCH_YES)
245 gfc_syntax_error (ST_DATA);
251 match_data_constant (gfc_expr ** result)
253 char name[GFC_MAX_SYMBOL_LEN + 1];
258 m = gfc_match_literal_constant (&expr, 1);
265 if (m == MATCH_ERROR)
268 m = gfc_match_null (result);
272 m = gfc_match_name (name);
276 if (gfc_find_symbol (name, NULL, 1, &sym))
280 || (sym->attr.flavor != FL_PARAMETER && sym->attr.flavor != FL_DERIVED))
282 gfc_error ("Symbol '%s' must be a PARAMETER in DATA statement at %C",
286 else if (sym->attr.flavor == FL_DERIVED)
287 return gfc_match_structure_constructor (sym, result);
289 *result = gfc_copy_expr (sym->value);
294 /* Match a list of values in a DATA statement. The leading '/' has
295 already been seen at this point. */
298 top_val_list (gfc_data * data)
300 gfc_data_value *new, *tail;
309 m = match_data_constant (&expr);
312 if (m == MATCH_ERROR)
315 new = gfc_get_data_value ();
324 if (expr->ts.type != BT_INTEGER || gfc_match_char ('*') != MATCH_YES)
332 msg = gfc_extract_int (expr, &tmp);
333 gfc_free_expr (expr);
341 m = match_data_constant (&tail->expr);
344 if (m == MATCH_ERROR)
348 if (gfc_match_char ('/') == MATCH_YES)
350 if (gfc_match_char (',') == MATCH_NO)
357 gfc_syntax_error (ST_DATA);
362 /* Matches an old style initialization. */
365 match_old_style_init (const char *name)
371 /* Set up data structure to hold initializers. */
372 gfc_find_sym_tree (name, NULL, 0, &st);
374 newdata = gfc_get_data ();
375 newdata->var = gfc_get_data_variable ();
376 newdata->var->expr = gfc_get_variable_expr (st);
378 /* Match initial value list. This also eats the terminal
380 m = top_val_list (newdata);
389 gfc_error ("Initialization at %C is not allowed in a PURE procedure");
394 /* Chain in namespace list of DATA initializers. */
395 newdata->next = gfc_current_ns->data;
396 gfc_current_ns->data = newdata;
401 /* Match the stuff following a DATA statement. If ERROR_FLAG is set,
402 we are matching a DATA statement and are therefore issuing an error
403 if we encounter something unexpected, if not, we're trying to match
404 an old-style intialization expression of the form INTEGER I /2/. */
407 gfc_match_data (void)
414 new = gfc_get_data ();
415 new->where = gfc_current_locus;
417 m = top_var_list (new);
421 m = top_val_list (new);
425 new->next = gfc_current_ns->data;
426 gfc_current_ns->data = new;
428 if (gfc_match_eos () == MATCH_YES)
431 gfc_match_char (','); /* Optional comma */
436 gfc_error ("DATA statement at %C is not allowed in a PURE procedure");
448 /************************ Declaration statements *********************/
450 /* Match an intent specification. Since this can only happen after an
451 INTENT word, a legal intent-spec must follow. */
454 match_intent_spec (void)
457 if (gfc_match (" ( in out )") == MATCH_YES)
459 if (gfc_match (" ( in )") == MATCH_YES)
461 if (gfc_match (" ( out )") == MATCH_YES)
464 gfc_error ("Bad INTENT specification at %C");
465 return INTENT_UNKNOWN;
469 /* Matches a character length specification, which is either a
470 specification expression or a '*'. */
473 char_len_param_value (gfc_expr ** expr)
476 if (gfc_match_char ('*') == MATCH_YES)
482 return gfc_match_expr (expr);
486 /* A character length is a '*' followed by a literal integer or a
487 char_len_param_value in parenthesis. */
490 match_char_length (gfc_expr ** expr)
495 m = gfc_match_char ('*');
499 m = gfc_match_small_literal_int (&length);
500 if (m == MATCH_ERROR)
505 *expr = gfc_int_expr (length);
509 if (gfc_match_char ('(') == MATCH_NO)
512 m = char_len_param_value (expr);
513 if (m == MATCH_ERROR)
518 if (gfc_match_char (')') == MATCH_NO)
520 gfc_free_expr (*expr);
528 gfc_error ("Syntax error in character length specification at %C");
533 /* Special subroutine for finding a symbol. If we're compiling a
534 function or subroutine and the parent compilation unit is an
535 interface, then check to see if the name we've been given is the
536 name of the interface (located in another namespace). If so,
537 return that symbol. If not, use gfc_get_symbol(). */
540 find_special (const char *name, gfc_symbol ** result)
544 if (gfc_current_state () != COMP_SUBROUTINE
545 && gfc_current_state () != COMP_FUNCTION)
548 s = gfc_state_stack->previous;
552 if (s->state != COMP_INTERFACE)
555 goto normal; /* Nameless interface */
557 if (strcmp (name, s->sym->name) == 0)
564 return gfc_get_symbol (name, NULL, result);
568 /* Special subroutine for getting a symbol node associated with a
569 procedure name, used in SUBROUTINE and FUNCTION statements. The
570 symbol is created in the parent using with symtree node in the
571 child unit pointing to the symbol. If the current namespace has no
572 parent, then the symbol is just created in the current unit. */
575 get_proc_name (const char *name, gfc_symbol ** result)
581 if (gfc_current_ns->parent == NULL)
582 return gfc_get_symbol (name, NULL, result);
584 rc = gfc_get_symbol (name, gfc_current_ns->parent, result);
588 /* ??? Deal with ENTRY problem */
590 st = gfc_new_symtree (&gfc_current_ns->sym_root, name);
596 /* See if the procedure should be a module procedure */
598 if (sym->ns->proc_name != NULL
599 && sym->ns->proc_name->attr.flavor == FL_MODULE
600 && sym->attr.proc != PROC_MODULE
601 && gfc_add_procedure (&sym->attr, PROC_MODULE, NULL) == FAILURE)
608 /* Function called by variable_decl() that adds a name to the symbol
612 build_sym (const char *name, gfc_charlen * cl,
613 gfc_array_spec ** as, locus * var_locus)
615 symbol_attribute attr;
618 if (find_special (name, &sym))
621 /* Start updating the symbol table. Add basic type attribute
623 if (current_ts.type != BT_UNKNOWN
624 &&(sym->attr.implicit_type == 0
625 || !gfc_compare_types (&sym->ts, ¤t_ts))
626 && gfc_add_type (sym, ¤t_ts, var_locus) == FAILURE)
629 if (sym->ts.type == BT_CHARACTER)
632 /* Add dimension attribute if present. */
633 if (gfc_set_array_spec (sym, *as, var_locus) == FAILURE)
637 /* Add attribute to symbol. The copy is so that we can reset the
638 dimension attribute. */
642 if (gfc_copy_attr (&sym->attr, &attr, var_locus) == FAILURE)
649 /* Function called by variable_decl() that adds an initialization
650 expression to a symbol. */
653 add_init_expr_to_sym (const char *name, gfc_expr ** initp,
656 symbol_attribute attr;
661 if (find_special (name, &sym))
666 /* If this symbol is confirming an implicit parameter type,
667 then an initialization expression is not allowed. */
668 if (attr.flavor == FL_PARAMETER
669 && sym->value != NULL
672 gfc_error ("Initializer not allowed for PARAMETER '%s' at %C",
681 gfc_error ("Initializer not allowed for COMMON variable '%s' at %C",
688 /* An initializer is required for PARAMETER declarations. */
689 if (attr.flavor == FL_PARAMETER)
691 gfc_error ("PARAMETER at %L is missing an initializer", var_locus);
697 /* If a variable appears in a DATA block, it cannot have an
702 ("Variable '%s' at %C with an initializer already appears "
703 "in a DATA statement", sym->name);
707 /* Check if the assignment can happen. This has to be put off
708 until later for a derived type variable. */
709 if (sym->ts.type != BT_DERIVED && init->ts.type != BT_DERIVED
710 && gfc_check_assign_symbol (sym, init) == FAILURE)
713 /* Add initializer. Make sure we keep the ranks sane. */
714 if (sym->attr.dimension && init->rank == 0)
715 init->rank = sym->as->rank;
725 /* Function called by variable_decl() that adds a name to a structure
729 build_struct (const char *name, gfc_charlen * cl, gfc_expr ** init,
730 gfc_array_spec ** as)
734 /* If the current symbol is of the same derived type that we're
735 constructing, it must have the pointer attribute. */
736 if (current_ts.type == BT_DERIVED
737 && current_ts.derived == gfc_current_block ()
738 && current_attr.pointer == 0)
740 gfc_error ("Component at %C must have the POINTER attribute");
744 if (gfc_current_block ()->attr.pointer
747 if ((*as)->type != AS_DEFERRED && (*as)->type != AS_EXPLICIT)
749 gfc_error ("Array component of structure at %C must have explicit "
750 "or deferred shape");
755 if (gfc_add_component (gfc_current_block (), name, &c) == FAILURE)
760 gfc_set_component_attr (c, ¤t_attr);
762 c->initializer = *init;
770 /* Check array components. */
776 if (c->as->type != AS_DEFERRED)
778 gfc_error ("Pointer array component of structure at %C "
779 "must have a deferred shape");
785 if (c->as->type != AS_EXPLICIT)
788 ("Array component of structure at %C must have an explicit "
798 /* Match a 'NULL()', and possibly take care of some side effects. */
801 gfc_match_null (gfc_expr ** result)
807 m = gfc_match (" null ( )");
811 /* The NULL symbol now has to be/become an intrinsic function. */
812 if (gfc_get_symbol ("null", NULL, &sym))
814 gfc_error ("NULL() initialization at %C is ambiguous");
818 gfc_intrinsic_symbol (sym);
820 if (sym->attr.proc != PROC_INTRINSIC
821 && (gfc_add_procedure (&sym->attr, PROC_INTRINSIC, NULL) == FAILURE
822 || gfc_add_function (&sym->attr, NULL) == FAILURE))
826 e->where = gfc_current_locus;
827 e->expr_type = EXPR_NULL;
828 e->ts.type = BT_UNKNOWN;
836 /* Match a variable name with an optional initializer. When this
837 subroutine is called, a variable is expected to be parsed next.
838 Depending on what is happening at the moment, updates either the
839 symbol table or the current interface. */
844 char name[GFC_MAX_SYMBOL_LEN + 1];
845 gfc_expr *initializer, *char_len;
855 /* When we get here, we've just matched a list of attributes and
856 maybe a type and a double colon. The next thing we expect to see
857 is the name of the symbol. */
858 m = gfc_match_name (name);
862 var_locus = gfc_current_locus;
864 /* Now we could see the optional array spec. or character length. */
865 m = gfc_match_array_spec (&as);
866 if (m == MATCH_ERROR)
869 as = gfc_copy_array_spec (current_as);
874 if (current_ts.type == BT_CHARACTER)
876 switch (match_char_length (&char_len))
879 cl = gfc_get_charlen ();
880 cl->next = gfc_current_ns->cl_list;
881 gfc_current_ns->cl_list = cl;
883 cl->length = char_len;
895 /* OK, we've successfully matched the declaration. Now put the
896 symbol in the current namespace, because it might be used in the
897 optional intialization expression for this symbol, e.g. this is
900 integer, parameter :: i = huge(i)
902 This is only true for parameters or variables of a basic type.
903 For components of derived types, it is not true, so we don't
904 create a symbol for those yet. If we fail to create the symbol,
906 if (gfc_current_state () != COMP_DERIVED
907 && build_sym (name, cl, &as, &var_locus) == FAILURE)
913 /* In functions that have a RESULT variable defined, the function
914 name always refers to function calls. Therefore, the name is
915 not allowed to appear in specification statements. */
916 if (gfc_current_state () == COMP_FUNCTION
917 && gfc_current_block () != NULL
918 && gfc_current_block ()->result != NULL
919 && gfc_current_block ()->result != gfc_current_block ()
920 && strcmp (gfc_current_block ()->name, name) == 0)
922 gfc_error ("Function name '%s' not allowed at %C", name);
927 /* We allow old-style initializations of the form
928 integer i /2/, j(4) /3*3, 1/
929 (if no colon has been seen). These are different from data
930 statements in that initializers are only allowed to apply to the
931 variable immediately preceding, i.e.
933 is not allowed. Therefore we have to do some work manually, that
934 could otherwise be left to the matchers for DATA statements. */
936 if (!colon_seen && gfc_match (" /") == MATCH_YES)
938 if (gfc_notify_std (GFC_STD_GNU, "Extension: Old-style "
939 "initialization at %C") == FAILURE)
942 return match_old_style_init (name);
945 /* The double colon must be present in order to have initializers.
946 Otherwise the statement is ambiguous with an assignment statement. */
949 if (gfc_match (" =>") == MATCH_YES)
952 if (!current_attr.pointer)
954 gfc_error ("Initialization at %C isn't for a pointer variable");
959 m = gfc_match_null (&initializer);
962 gfc_error ("Pointer initialization requires a NULL at %C");
969 ("Initialization of pointer at %C is not allowed in a "
977 initializer->ts = current_ts;
980 else if (gfc_match_char ('=') == MATCH_YES)
982 if (current_attr.pointer)
985 ("Pointer initialization at %C requires '=>', not '='");
990 m = gfc_match_init_expr (&initializer);
993 gfc_error ("Expected an initialization expression at %C");
997 if (current_attr.flavor != FL_PARAMETER && gfc_pure (NULL))
1000 ("Initialization of variable at %C is not allowed in a "
1010 /* Add the initializer. Note that it is fine if initializer is
1011 NULL here, because we sometimes also need to check if a
1012 declaration *must* have an initialization expression. */
1013 if (gfc_current_state () != COMP_DERIVED)
1014 t = add_init_expr_to_sym (name, &initializer, &var_locus);
1017 if (current_ts.type == BT_DERIVED && !initializer)
1018 initializer = gfc_default_initializer (¤t_ts);
1019 t = build_struct (name, cl, &initializer, &as);
1022 m = (t == SUCCESS) ? MATCH_YES : MATCH_ERROR;
1025 /* Free stuff up and return. */
1026 gfc_free_expr (initializer);
1027 gfc_free_array_spec (as);
1033 /* Match an extended-f77 kind specification. */
1036 gfc_match_old_kind_spec (gfc_typespec * ts)
1040 if (gfc_match_char ('*') != MATCH_YES)
1043 m = gfc_match_small_literal_int (&ts->kind);
1047 /* Massage the kind numbers for complex types. */
1048 if (ts->type == BT_COMPLEX && ts->kind == 8)
1050 if (ts->type == BT_COMPLEX && ts->kind == 16)
1053 if (gfc_validate_kind (ts->type, ts->kind, true) < 0)
1055 gfc_error ("Old-style kind %d not supported for type %s at %C",
1056 ts->kind, gfc_basic_typename (ts->type));
1065 /* Match a kind specification. Since kinds are generally optional, we
1066 usually return MATCH_NO if something goes wrong. If a "kind="
1067 string is found, then we know we have an error. */
1070 gfc_match_kind_spec (gfc_typespec * ts)
1080 where = gfc_current_locus;
1082 if (gfc_match_char ('(') == MATCH_NO)
1085 /* Also gobbles optional text. */
1086 if (gfc_match (" kind = ") == MATCH_YES)
1089 n = gfc_match_init_expr (&e);
1091 gfc_error ("Expected initialization expression at %C");
1097 gfc_error ("Expected scalar initialization expression at %C");
1102 msg = gfc_extract_int (e, &ts->kind);
1113 if (gfc_validate_kind (ts->type, ts->kind, true) < 0)
1115 gfc_error ("Kind %d not supported for type %s at %C", ts->kind,
1116 gfc_basic_typename (ts->type));
1122 if (gfc_match_char (')') != MATCH_YES)
1124 gfc_error ("Missing right paren at %C");
1132 gfc_current_locus = where;
1137 /* Match the various kind/length specifications in a CHARACTER
1138 declaration. We don't return MATCH_NO. */
1141 match_char_spec (gfc_typespec * ts)
1143 int i, kind, seen_length;
1148 kind = gfc_default_character_kind;
1152 /* Try the old-style specification first. */
1153 old_char_selector = 0;
1155 m = match_char_length (&len);
1159 old_char_selector = 1;
1164 m = gfc_match_char ('(');
1167 m = MATCH_YES; /* character without length is a single char */
1171 /* Try the weird case: ( KIND = <int> [ , LEN = <len-param> ] ) */
1172 if (gfc_match (" kind =") == MATCH_YES)
1174 m = gfc_match_small_int (&kind);
1175 if (m == MATCH_ERROR)
1180 if (gfc_match (" , len =") == MATCH_NO)
1183 m = char_len_param_value (&len);
1186 if (m == MATCH_ERROR)
1193 /* Try to match ( LEN = <len-param> ) or ( LEN = <len-param>, KIND = <int> ) */
1194 if (gfc_match (" len =") == MATCH_YES)
1196 m = char_len_param_value (&len);
1199 if (m == MATCH_ERROR)
1203 if (gfc_match_char (')') == MATCH_YES)
1206 if (gfc_match (" , kind =") != MATCH_YES)
1209 gfc_match_small_int (&kind);
1211 if (gfc_validate_kind (BT_CHARACTER, kind, true) < 0)
1213 gfc_error ("Kind %d is not a CHARACTER kind at %C", kind);
1220 /* Try to match ( <len-param> ) or ( <len-param> , [ KIND = ] <int> ) */
1221 m = char_len_param_value (&len);
1224 if (m == MATCH_ERROR)
1228 m = gfc_match_char (')');
1232 if (gfc_match_char (',') != MATCH_YES)
1235 gfc_match (" kind ="); /* Gobble optional text */
1237 m = gfc_match_small_int (&kind);
1238 if (m == MATCH_ERROR)
1244 /* Require a right-paren at this point. */
1245 m = gfc_match_char (')');
1250 gfc_error ("Syntax error in CHARACTER declaration at %C");
1254 if (m == MATCH_YES && gfc_validate_kind (BT_CHARACTER, kind, true) < 0)
1256 gfc_error ("Kind %d is not a CHARACTER kind at %C", kind);
1262 gfc_free_expr (len);
1266 /* Do some final massaging of the length values. */
1267 cl = gfc_get_charlen ();
1268 cl->next = gfc_current_ns->cl_list;
1269 gfc_current_ns->cl_list = cl;
1271 if (seen_length == 0)
1272 cl->length = gfc_int_expr (1);
1275 if (len == NULL || gfc_extract_int (len, &i) != NULL || i >= 0)
1279 gfc_free_expr (len);
1280 cl->length = gfc_int_expr (0);
1291 /* Matches a type specification. If successful, sets the ts structure
1292 to the matched specification. This is necessary for FUNCTION and
1293 IMPLICIT statements.
1295 If implicit_flag is nonzero, then we don't check for the optional
1296 kind specification. Not doing so is needed for matching an IMPLICIT
1297 statement correctly. */
1300 match_type_spec (gfc_typespec * ts, int implicit_flag)
1302 char name[GFC_MAX_SYMBOL_LEN + 1];
1309 if (gfc_match (" integer") == MATCH_YES)
1311 ts->type = BT_INTEGER;
1312 ts->kind = gfc_default_integer_kind;
1316 if (gfc_match (" character") == MATCH_YES)
1318 ts->type = BT_CHARACTER;
1319 if (implicit_flag == 0)
1320 return match_char_spec (ts);
1325 if (gfc_match (" real") == MATCH_YES)
1328 ts->kind = gfc_default_real_kind;
1332 if (gfc_match (" double precision") == MATCH_YES)
1335 ts->kind = gfc_default_double_kind;
1339 if (gfc_match (" complex") == MATCH_YES)
1341 ts->type = BT_COMPLEX;
1342 ts->kind = gfc_default_complex_kind;
1346 if (gfc_match (" double complex") == MATCH_YES)
1348 ts->type = BT_COMPLEX;
1349 ts->kind = gfc_default_double_kind;
1353 if (gfc_match (" logical") == MATCH_YES)
1355 ts->type = BT_LOGICAL;
1356 ts->kind = gfc_default_logical_kind;
1360 m = gfc_match (" type ( %n )", name);
1364 /* Search for the name but allow the components to be defined later. */
1365 if (gfc_get_ha_symbol (name, &sym))
1367 gfc_error ("Type name '%s' at %C is ambiguous", name);
1371 if (sym->attr.flavor != FL_DERIVED
1372 && gfc_add_flavor (&sym->attr, FL_DERIVED, NULL) == FAILURE)
1375 ts->type = BT_DERIVED;
1382 /* For all types except double, derived and character, look for an
1383 optional kind specifier. MATCH_NO is actually OK at this point. */
1384 if (implicit_flag == 1)
1387 if (gfc_current_form == FORM_FREE)
1389 c = gfc_peek_char();
1390 if (!gfc_is_whitespace(c) && c != '*' && c != '('
1391 && c != ':' && c != ',')
1395 m = gfc_match_kind_spec (ts);
1396 if (m == MATCH_NO && ts->type != BT_CHARACTER)
1397 m = gfc_match_old_kind_spec (ts);
1400 m = MATCH_YES; /* No kind specifier found. */
1406 /* Match an IMPLICIT NONE statement. Actually, this statement is
1407 already matched in parse.c, or we would not end up here in the
1408 first place. So the only thing we need to check, is if there is
1409 trailing garbage. If not, the match is successful. */
1412 gfc_match_implicit_none (void)
1415 return (gfc_match_eos () == MATCH_YES) ? MATCH_YES : MATCH_NO;
1419 /* Match the letter range(s) of an IMPLICIT statement. */
1422 match_implicit_range (void)
1424 int c, c1, c2, inner;
1427 cur_loc = gfc_current_locus;
1429 gfc_gobble_whitespace ();
1430 c = gfc_next_char ();
1433 gfc_error ("Missing character range in IMPLICIT at %C");
1440 gfc_gobble_whitespace ();
1441 c1 = gfc_next_char ();
1445 gfc_gobble_whitespace ();
1446 c = gfc_next_char ();
1451 inner = 0; /* Fall through */
1458 gfc_gobble_whitespace ();
1459 c2 = gfc_next_char ();
1463 gfc_gobble_whitespace ();
1464 c = gfc_next_char ();
1466 if ((c != ',') && (c != ')'))
1479 gfc_error ("Letters must be in alphabetic order in "
1480 "IMPLICIT statement at %C");
1484 /* See if we can add the newly matched range to the pending
1485 implicits from this IMPLICIT statement. We do not check for
1486 conflicts with whatever earlier IMPLICIT statements may have
1487 set. This is done when we've successfully finished matching
1489 if (gfc_add_new_implicit_range (c1, c2) != SUCCESS)
1496 gfc_syntax_error (ST_IMPLICIT);
1498 gfc_current_locus = cur_loc;
1503 /* Match an IMPLICIT statement, storing the types for
1504 gfc_set_implicit() if the statement is accepted by the parser.
1505 There is a strange looking, but legal syntactic construction
1506 possible. It looks like:
1508 IMPLICIT INTEGER (a-b) (c-d)
1510 This is legal if "a-b" is a constant expression that happens to
1511 equal one of the legal kinds for integers. The real problem
1512 happens with an implicit specification that looks like:
1514 IMPLICIT INTEGER (a-b)
1516 In this case, a typespec matcher that is "greedy" (as most of the
1517 matchers are) gobbles the character range as a kindspec, leaving
1518 nothing left. We therefore have to go a bit more slowly in the
1519 matching process by inhibiting the kindspec checking during
1520 typespec matching and checking for a kind later. */
1523 gfc_match_implicit (void)
1530 /* We don't allow empty implicit statements. */
1531 if (gfc_match_eos () == MATCH_YES)
1533 gfc_error ("Empty IMPLICIT statement at %C");
1539 /* First cleanup. */
1540 gfc_clear_new_implicit ();
1542 /* A basic type is mandatory here. */
1543 m = match_type_spec (&ts, 1);
1544 if (m == MATCH_ERROR)
1549 cur_loc = gfc_current_locus;
1550 m = match_implicit_range ();
1554 /* We may have <TYPE> (<RANGE>). */
1555 gfc_gobble_whitespace ();
1556 c = gfc_next_char ();
1557 if ((c == '\n') || (c == ','))
1559 /* Check for CHARACTER with no length parameter. */
1560 if (ts.type == BT_CHARACTER && !ts.cl)
1562 ts.kind = gfc_default_character_kind;
1563 ts.cl = gfc_get_charlen ();
1564 ts.cl->next = gfc_current_ns->cl_list;
1565 gfc_current_ns->cl_list = ts.cl;
1566 ts.cl->length = gfc_int_expr (1);
1569 /* Record the Successful match. */
1570 if (gfc_merge_new_implicit (&ts) != SUCCESS)
1575 gfc_current_locus = cur_loc;
1578 /* Discard the (incorrectly) matched range. */
1579 gfc_clear_new_implicit ();
1581 /* Last chance -- check <TYPE> <SELECTOR> (<RANGE>). */
1582 if (ts.type == BT_CHARACTER)
1583 m = match_char_spec (&ts);
1586 m = gfc_match_kind_spec (&ts);
1589 m = gfc_match_old_kind_spec (&ts);
1590 if (m == MATCH_ERROR)
1596 if (m == MATCH_ERROR)
1599 m = match_implicit_range ();
1600 if (m == MATCH_ERROR)
1605 gfc_gobble_whitespace ();
1606 c = gfc_next_char ();
1607 if ((c != '\n') && (c != ','))
1610 if (gfc_merge_new_implicit (&ts) != SUCCESS)
1618 gfc_syntax_error (ST_IMPLICIT);
1625 /* Matches an attribute specification including array specs. If
1626 successful, leaves the variables current_attr and current_as
1627 holding the specification. Also sets the colon_seen variable for
1628 later use by matchers associated with initializations.
1630 This subroutine is a little tricky in the sense that we don't know
1631 if we really have an attr-spec until we hit the double colon.
1632 Until that time, we can only return MATCH_NO. This forces us to
1633 check for duplicate specification at this level. */
1636 match_attr_spec (void)
1639 /* Modifiers that can exist in a type statement. */
1641 { GFC_DECL_BEGIN = 0,
1642 DECL_ALLOCATABLE = GFC_DECL_BEGIN, DECL_DIMENSION, DECL_EXTERNAL,
1643 DECL_IN, DECL_OUT, DECL_INOUT, DECL_INTRINSIC, DECL_OPTIONAL,
1644 DECL_PARAMETER, DECL_POINTER, DECL_PRIVATE, DECL_PUBLIC, DECL_SAVE,
1645 DECL_TARGET, DECL_COLON, DECL_NONE,
1646 GFC_DECL_END /* Sentinel */
1650 /* GFC_DECL_END is the sentinel, index starts at 0. */
1651 #define NUM_DECL GFC_DECL_END
1653 static mstring decls[] = {
1654 minit (", allocatable", DECL_ALLOCATABLE),
1655 minit (", dimension", DECL_DIMENSION),
1656 minit (", external", DECL_EXTERNAL),
1657 minit (", intent ( in )", DECL_IN),
1658 minit (", intent ( out )", DECL_OUT),
1659 minit (", intent ( in out )", DECL_INOUT),
1660 minit (", intrinsic", DECL_INTRINSIC),
1661 minit (", optional", DECL_OPTIONAL),
1662 minit (", parameter", DECL_PARAMETER),
1663 minit (", pointer", DECL_POINTER),
1664 minit (", private", DECL_PRIVATE),
1665 minit (", public", DECL_PUBLIC),
1666 minit (", save", DECL_SAVE),
1667 minit (", target", DECL_TARGET),
1668 minit ("::", DECL_COLON),
1669 minit (NULL, DECL_NONE)
1672 locus start, seen_at[NUM_DECL];
1679 gfc_clear_attr (¤t_attr);
1680 start = gfc_current_locus;
1685 /* See if we get all of the keywords up to the final double colon. */
1686 for (d = GFC_DECL_BEGIN; d != GFC_DECL_END; d++)
1691 d = (decl_types) gfc_match_strings (decls);
1692 if (d == DECL_NONE || d == DECL_COLON)
1696 seen_at[d] = gfc_current_locus;
1698 if (d == DECL_DIMENSION)
1700 m = gfc_match_array_spec (¤t_as);
1704 gfc_error ("Missing dimension specification at %C");
1708 if (m == MATCH_ERROR)
1713 /* No double colon, so assume that we've been looking at something
1714 else the whole time. */
1721 /* Since we've seen a double colon, we have to be looking at an
1722 attr-spec. This means that we can now issue errors. */
1723 for (d = GFC_DECL_BEGIN; d != GFC_DECL_END; d++)
1728 case DECL_ALLOCATABLE:
1729 attr = "ALLOCATABLE";
1731 case DECL_DIMENSION:
1738 attr = "INTENT (IN)";
1741 attr = "INTENT (OUT)";
1744 attr = "INTENT (IN OUT)";
1746 case DECL_INTRINSIC:
1752 case DECL_PARAMETER:
1771 attr = NULL; /* This shouldn't happen */
1774 gfc_error ("Duplicate %s attribute at %L", attr, &seen_at[d]);
1779 /* Now that we've dealt with duplicate attributes, add the attributes
1780 to the current attribute. */
1781 for (d = GFC_DECL_BEGIN; d != GFC_DECL_END; d++)
1786 if (gfc_current_state () == COMP_DERIVED
1787 && d != DECL_DIMENSION && d != DECL_POINTER
1788 && d != DECL_COLON && d != DECL_NONE)
1791 gfc_error ("Attribute at %L is not allowed in a TYPE definition",
1799 case DECL_ALLOCATABLE:
1800 t = gfc_add_allocatable (¤t_attr, &seen_at[d]);
1803 case DECL_DIMENSION:
1804 t = gfc_add_dimension (¤t_attr, &seen_at[d]);
1808 t = gfc_add_external (¤t_attr, &seen_at[d]);
1812 t = gfc_add_intent (¤t_attr, INTENT_IN, &seen_at[d]);
1816 t = gfc_add_intent (¤t_attr, INTENT_OUT, &seen_at[d]);
1820 t = gfc_add_intent (¤t_attr, INTENT_INOUT, &seen_at[d]);
1823 case DECL_INTRINSIC:
1824 t = gfc_add_intrinsic (¤t_attr, &seen_at[d]);
1828 t = gfc_add_optional (¤t_attr, &seen_at[d]);
1831 case DECL_PARAMETER:
1832 t = gfc_add_flavor (¤t_attr, FL_PARAMETER, &seen_at[d]);
1836 t = gfc_add_pointer (¤t_attr, &seen_at[d]);
1840 t = gfc_add_access (¤t_attr, ACCESS_PRIVATE, &seen_at[d]);
1844 t = gfc_add_access (¤t_attr, ACCESS_PUBLIC, &seen_at[d]);
1848 t = gfc_add_save (¤t_attr, &seen_at[d]);
1852 t = gfc_add_target (¤t_attr, &seen_at[d]);
1856 gfc_internal_error ("match_attr_spec(): Bad attribute");
1870 gfc_current_locus = start;
1871 gfc_free_array_spec (current_as);
1877 /* Match a data declaration statement. */
1880 gfc_match_data_decl (void)
1885 m = match_type_spec (¤t_ts, 0);
1889 if (current_ts.type == BT_DERIVED && gfc_current_state () != COMP_DERIVED)
1891 sym = gfc_use_derived (current_ts.derived);
1899 current_ts.derived = sym;
1902 m = match_attr_spec ();
1903 if (m == MATCH_ERROR)
1909 if (current_ts.type == BT_DERIVED && current_ts.derived->components == NULL)
1912 if (current_attr.pointer && gfc_current_state () == COMP_DERIVED)
1915 if (gfc_find_symbol (current_ts.derived->name,
1916 current_ts.derived->ns->parent, 1, &sym) == 0)
1919 /* Hope that an ambiguous symbol is itself masked by a type definition. */
1920 if (sym != NULL && sym->attr.flavor == FL_DERIVED)
1923 gfc_error ("Derived type at %C has not been previously defined");
1929 /* If we have an old-style character declaration, and no new-style
1930 attribute specifications, then there a comma is optional between
1931 the type specification and the variable list. */
1932 if (m == MATCH_NO && current_ts.type == BT_CHARACTER && old_char_selector)
1933 gfc_match_char (',');
1935 /* Give the types/attributes to symbols that follow. */
1938 m = variable_decl ();
1939 if (m == MATCH_ERROR)
1944 if (gfc_match_eos () == MATCH_YES)
1946 if (gfc_match_char (',') != MATCH_YES)
1950 gfc_error ("Syntax error in data declaration at %C");
1954 gfc_free_array_spec (current_as);
1960 /* Match a prefix associated with a function or subroutine
1961 declaration. If the typespec pointer is nonnull, then a typespec
1962 can be matched. Note that if nothing matches, MATCH_YES is
1963 returned (the null string was matched). */
1966 match_prefix (gfc_typespec * ts)
1970 gfc_clear_attr (¤t_attr);
1974 if (!seen_type && ts != NULL
1975 && match_type_spec (ts, 0) == MATCH_YES
1976 && gfc_match_space () == MATCH_YES)
1983 if (gfc_match ("elemental% ") == MATCH_YES)
1985 if (gfc_add_elemental (¤t_attr, NULL) == FAILURE)
1991 if (gfc_match ("pure% ") == MATCH_YES)
1993 if (gfc_add_pure (¤t_attr, NULL) == FAILURE)
1999 if (gfc_match ("recursive% ") == MATCH_YES)
2001 if (gfc_add_recursive (¤t_attr, NULL) == FAILURE)
2007 /* At this point, the next item is not a prefix. */
2012 /* Copy attributes matched by match_prefix() to attributes on a symbol. */
2015 copy_prefix (symbol_attribute * dest, locus * where)
2018 if (current_attr.pure && gfc_add_pure (dest, where) == FAILURE)
2021 if (current_attr.elemental && gfc_add_elemental (dest, where) == FAILURE)
2024 if (current_attr.recursive && gfc_add_recursive (dest, where) == FAILURE)
2031 /* Match a formal argument list. */
2034 gfc_match_formal_arglist (gfc_symbol * progname, int st_flag, int null_flag)
2036 gfc_formal_arglist *head, *tail, *p, *q;
2037 char name[GFC_MAX_SYMBOL_LEN + 1];
2043 if (gfc_match_char ('(') != MATCH_YES)
2050 if (gfc_match_char (')') == MATCH_YES)
2055 if (gfc_match_char ('*') == MATCH_YES)
2059 m = gfc_match_name (name);
2063 if (gfc_get_symbol (name, NULL, &sym))
2067 p = gfc_get_formal_arglist ();
2079 /* We don't add the VARIABLE flavor because the name could be a
2080 dummy procedure. We don't apply these attributes to formal
2081 arguments of statement functions. */
2082 if (sym != NULL && !st_flag
2083 && (gfc_add_dummy (&sym->attr, NULL) == FAILURE
2084 || gfc_missing_attr (&sym->attr, NULL) == FAILURE))
2090 /* The name of a program unit can be in a different namespace,
2091 so check for it explicitly. After the statement is accepted,
2092 the name is checked for especially in gfc_get_symbol(). */
2093 if (gfc_new_block != NULL && sym != NULL
2094 && strcmp (sym->name, gfc_new_block->name) == 0)
2096 gfc_error ("Name '%s' at %C is the name of the procedure",
2102 if (gfc_match_char (')') == MATCH_YES)
2105 m = gfc_match_char (',');
2108 gfc_error ("Unexpected junk in formal argument list at %C");
2114 /* Check for duplicate symbols in the formal argument list. */
2117 for (p = head; p->next; p = p->next)
2122 for (q = p->next; q; q = q->next)
2123 if (p->sym == q->sym)
2126 ("Duplicate symbol '%s' in formal argument list at %C",
2135 if (gfc_add_explicit_interface (progname, IFSRC_DECL, head, NULL) ==
2145 gfc_free_formal_arglist (head);
2150 /* Match a RESULT specification following a function declaration or
2151 ENTRY statement. Also matches the end-of-statement. */
2154 match_result (gfc_symbol * function, gfc_symbol ** result)
2156 char name[GFC_MAX_SYMBOL_LEN + 1];
2160 if (gfc_match (" result (") != MATCH_YES)
2163 m = gfc_match_name (name);
2167 if (gfc_match (" )%t") != MATCH_YES)
2169 gfc_error ("Unexpected junk following RESULT variable at %C");
2173 if (strcmp (function->name, name) == 0)
2176 ("RESULT variable at %C must be different than function name");
2180 if (gfc_get_symbol (name, NULL, &r))
2183 if (gfc_add_flavor (&r->attr, FL_VARIABLE, NULL) == FAILURE
2184 || gfc_add_result (&r->attr, NULL) == FAILURE)
2193 /* Match a function declaration. */
2196 gfc_match_function_decl (void)
2198 char name[GFC_MAX_SYMBOL_LEN + 1];
2199 gfc_symbol *sym, *result;
2203 if (gfc_current_state () != COMP_NONE
2204 && gfc_current_state () != COMP_INTERFACE
2205 && gfc_current_state () != COMP_CONTAINS)
2208 gfc_clear_ts (¤t_ts);
2210 old_loc = gfc_current_locus;
2212 m = match_prefix (¤t_ts);
2215 gfc_current_locus = old_loc;
2219 if (gfc_match ("function% %n", name) != MATCH_YES)
2221 gfc_current_locus = old_loc;
2225 if (get_proc_name (name, &sym))
2227 gfc_new_block = sym;
2229 m = gfc_match_formal_arglist (sym, 0, 0);
2231 gfc_error ("Expected formal argument list in function definition at %C");
2232 else if (m == MATCH_ERROR)
2237 if (gfc_match_eos () != MATCH_YES)
2239 /* See if a result variable is present. */
2240 m = match_result (sym, &result);
2242 gfc_error ("Unexpected junk after function declaration at %C");
2251 /* Make changes to the symbol. */
2254 if (gfc_add_function (&sym->attr, NULL) == FAILURE)
2257 if (gfc_missing_attr (&sym->attr, NULL) == FAILURE
2258 || copy_prefix (&sym->attr, &sym->declared_at) == FAILURE)
2261 if (current_ts.type != BT_UNKNOWN && sym->ts.type != BT_UNKNOWN)
2263 gfc_error ("Function '%s' at %C already has a type of %s", name,
2264 gfc_basic_typename (sym->ts.type));
2270 sym->ts = current_ts;
2275 result->ts = current_ts;
2276 sym->result = result;
2282 gfc_current_locus = old_loc;
2287 /* Match an ENTRY statement. */
2290 gfc_match_entry (void)
2295 char name[GFC_MAX_SYMBOL_LEN + 1];
2296 gfc_compile_state state;
2300 m = gfc_match_name (name);
2304 state = gfc_current_state ();
2305 if (state != COMP_SUBROUTINE
2306 && state != COMP_FUNCTION)
2308 gfc_error ("ENTRY statement at %C cannot appear within %s",
2309 gfc_state_name (gfc_current_state ()));
2313 if (gfc_current_ns->parent != NULL
2314 && gfc_current_ns->parent->proc_name
2315 && gfc_current_ns->parent->proc_name->attr.flavor != FL_MODULE)
2317 gfc_error("ENTRY statement at %C cannot appear in a "
2318 "contained procedure");
2322 if (get_proc_name (name, &entry))
2325 proc = gfc_current_block ();
2327 if (state == COMP_SUBROUTINE)
2329 /* And entry in a subroutine. */
2330 m = gfc_match_formal_arglist (entry, 0, 1);
2334 if (gfc_add_entry (&entry->attr, NULL) == FAILURE
2335 || gfc_add_subroutine (&entry->attr, NULL) == FAILURE)
2340 /* An entry in a function. */
2341 m = gfc_match_formal_arglist (entry, 0, 0);
2347 if (gfc_match_eos () == MATCH_YES)
2349 if (gfc_add_entry (&entry->attr, NULL) == FAILURE
2350 || gfc_add_function (&entry->attr, NULL) == FAILURE)
2353 entry->result = proc->result;
2358 m = match_result (proc, &result);
2360 gfc_syntax_error (ST_ENTRY);
2364 if (gfc_add_result (&result->attr, NULL) == FAILURE
2365 || gfc_add_entry (&entry->attr, NULL) == FAILURE
2366 || gfc_add_function (&entry->attr, NULL) == FAILURE)
2370 if (proc->attr.recursive && result == NULL)
2372 gfc_error ("RESULT attribute required in ENTRY statement at %C");
2377 if (gfc_match_eos () != MATCH_YES)
2379 gfc_syntax_error (ST_ENTRY);
2383 entry->attr.recursive = proc->attr.recursive;
2384 entry->attr.elemental = proc->attr.elemental;
2385 entry->attr.pure = proc->attr.pure;
2387 el = gfc_get_entry_list ();
2389 el->next = gfc_current_ns->entries;
2390 gfc_current_ns->entries = el;
2392 el->id = el->next->id + 1;
2396 new_st.op = EXEC_ENTRY;
2397 new_st.ext.entry = el;
2403 /* Match a subroutine statement, including optional prefixes. */
2406 gfc_match_subroutine (void)
2408 char name[GFC_MAX_SYMBOL_LEN + 1];
2412 if (gfc_current_state () != COMP_NONE
2413 && gfc_current_state () != COMP_INTERFACE
2414 && gfc_current_state () != COMP_CONTAINS)
2417 m = match_prefix (NULL);
2421 m = gfc_match ("subroutine% %n", name);
2425 if (get_proc_name (name, &sym))
2427 gfc_new_block = sym;
2429 if (gfc_add_subroutine (&sym->attr, NULL) == FAILURE)
2432 if (gfc_match_formal_arglist (sym, 0, 1) != MATCH_YES)
2435 if (gfc_match_eos () != MATCH_YES)
2437 gfc_syntax_error (ST_SUBROUTINE);
2441 if (copy_prefix (&sym->attr, &sym->declared_at) == FAILURE)
2448 /* Return nonzero if we're currently compiling a contained procedure. */
2451 contained_procedure (void)
2455 for (s=gfc_state_stack; s; s=s->previous)
2456 if ((s->state == COMP_SUBROUTINE || s->state == COMP_FUNCTION)
2457 && s->previous != NULL
2458 && s->previous->state == COMP_CONTAINS)
2464 /* Match any of the various end-block statements. Returns the type of
2465 END to the caller. The END INTERFACE, END IF, END DO and END
2466 SELECT statements cannot be replaced by a single END statement. */
2469 gfc_match_end (gfc_statement * st)
2471 char name[GFC_MAX_SYMBOL_LEN + 1];
2472 gfc_compile_state state;
2474 const char *block_name;
2479 old_loc = gfc_current_locus;
2480 if (gfc_match ("end") != MATCH_YES)
2483 state = gfc_current_state ();
2485 gfc_current_block () == NULL ? NULL : gfc_current_block ()->name;
2487 if (state == COMP_CONTAINS)
2489 state = gfc_state_stack->previous->state;
2490 block_name = gfc_state_stack->previous->sym == NULL ? NULL
2491 : gfc_state_stack->previous->sym->name;
2498 *st = ST_END_PROGRAM;
2499 target = " program";
2503 case COMP_SUBROUTINE:
2504 *st = ST_END_SUBROUTINE;
2505 target = " subroutine";
2506 eos_ok = !contained_procedure ();
2510 *st = ST_END_FUNCTION;
2511 target = " function";
2512 eos_ok = !contained_procedure ();
2515 case COMP_BLOCK_DATA:
2516 *st = ST_END_BLOCK_DATA;
2517 target = " block data";
2522 *st = ST_END_MODULE;
2527 case COMP_INTERFACE:
2528 *st = ST_END_INTERFACE;
2529 target = " interface";
2552 *st = ST_END_SELECT;
2558 *st = ST_END_FORALL;
2570 gfc_error ("Unexpected END statement at %C");
2574 if (gfc_match_eos () == MATCH_YES)
2578 /* We would have required END [something] */
2579 gfc_error ("%s statement expected at %C",
2580 gfc_ascii_statement (*st));
2587 /* Verify that we've got the sort of end-block that we're expecting. */
2588 if (gfc_match (target) != MATCH_YES)
2590 gfc_error ("Expecting %s statement at %C", gfc_ascii_statement (*st));
2594 /* If we're at the end, make sure a block name wasn't required. */
2595 if (gfc_match_eos () == MATCH_YES)
2598 if (*st != ST_ENDDO && *st != ST_ENDIF && *st != ST_END_SELECT)
2601 if (gfc_current_block () == NULL)
2604 gfc_error ("Expected block name of '%s' in %s statement at %C",
2605 block_name, gfc_ascii_statement (*st));
2610 /* END INTERFACE has a special handler for its several possible endings. */
2611 if (*st == ST_END_INTERFACE)
2612 return gfc_match_end_interface ();
2614 /* We haven't hit the end of statement, so what is left must be an end-name. */
2615 m = gfc_match_space ();
2617 m = gfc_match_name (name);
2620 gfc_error ("Expected terminating name at %C");
2624 if (block_name == NULL)
2627 if (strcmp (name, block_name) != 0)
2629 gfc_error ("Expected label '%s' for %s statement at %C", block_name,
2630 gfc_ascii_statement (*st));
2634 if (gfc_match_eos () == MATCH_YES)
2638 gfc_syntax_error (*st);
2641 gfc_current_locus = old_loc;
2647 /***************** Attribute declaration statements ****************/
2649 /* Set the attribute of a single variable. */
2654 char name[GFC_MAX_SYMBOL_LEN + 1];
2662 m = gfc_match_name (name);
2666 if (find_special (name, &sym))
2669 var_locus = gfc_current_locus;
2671 /* Deal with possible array specification for certain attributes. */
2672 if (current_attr.dimension
2673 || current_attr.allocatable
2674 || current_attr.pointer
2675 || current_attr.target)
2677 m = gfc_match_array_spec (&as);
2678 if (m == MATCH_ERROR)
2681 if (current_attr.dimension && m == MATCH_NO)
2684 ("Missing array specification at %L in DIMENSION statement",
2690 if ((current_attr.allocatable || current_attr.pointer)
2691 && (m == MATCH_YES) && (as->type != AS_DEFERRED))
2693 gfc_error ("Array specification must be deferred at %L",
2700 /* Update symbol table. DIMENSION attribute is set in gfc_set_array_spec(). */
2701 if (current_attr.dimension == 0
2702 && gfc_copy_attr (&sym->attr, ¤t_attr, NULL) == FAILURE)
2708 if (gfc_set_array_spec (sym, as, &var_locus) == FAILURE)
2714 if ((current_attr.external || current_attr.intrinsic)
2715 && sym->attr.flavor != FL_PROCEDURE
2716 && gfc_add_flavor (&sym->attr, FL_PROCEDURE, NULL) == FAILURE)
2725 gfc_free_array_spec (as);
2730 /* Generic attribute declaration subroutine. Used for attributes that
2731 just have a list of names. */
2738 /* Gobble the optional double colon, by simply ignoring the result
2748 if (gfc_match_eos () == MATCH_YES)
2754 if (gfc_match_char (',') != MATCH_YES)
2756 gfc_error ("Unexpected character in variable list at %C");
2767 gfc_match_external (void)
2770 gfc_clear_attr (¤t_attr);
2771 gfc_add_external (¤t_attr, NULL);
2773 return attr_decl ();
2779 gfc_match_intent (void)
2783 intent = match_intent_spec ();
2784 if (intent == INTENT_UNKNOWN)
2787 gfc_clear_attr (¤t_attr);
2788 gfc_add_intent (¤t_attr, intent, NULL); /* Can't fail */
2790 return attr_decl ();
2795 gfc_match_intrinsic (void)
2798 gfc_clear_attr (¤t_attr);
2799 gfc_add_intrinsic (¤t_attr, NULL);
2801 return attr_decl ();
2806 gfc_match_optional (void)
2809 gfc_clear_attr (¤t_attr);
2810 gfc_add_optional (¤t_attr, NULL);
2812 return attr_decl ();
2817 gfc_match_pointer (void)
2820 gfc_clear_attr (¤t_attr);
2821 gfc_add_pointer (¤t_attr, NULL);
2823 return attr_decl ();
2828 gfc_match_allocatable (void)
2831 gfc_clear_attr (¤t_attr);
2832 gfc_add_allocatable (¤t_attr, NULL);
2834 return attr_decl ();
2839 gfc_match_dimension (void)
2842 gfc_clear_attr (¤t_attr);
2843 gfc_add_dimension (¤t_attr, NULL);
2845 return attr_decl ();
2850 gfc_match_target (void)
2853 gfc_clear_attr (¤t_attr);
2854 gfc_add_target (¤t_attr, NULL);
2856 return attr_decl ();
2860 /* Match the list of entities being specified in a PUBLIC or PRIVATE
2864 access_attr_decl (gfc_statement st)
2866 char name[GFC_MAX_SYMBOL_LEN + 1];
2867 interface_type type;
2870 gfc_intrinsic_op operator;
2873 if (gfc_match (" ::") == MATCH_NO && gfc_match_space () == MATCH_NO)
2878 m = gfc_match_generic_spec (&type, name, &operator);
2881 if (m == MATCH_ERROR)
2886 case INTERFACE_NAMELESS:
2889 case INTERFACE_GENERIC:
2890 if (gfc_get_symbol (name, NULL, &sym))
2893 if (gfc_add_access (&sym->attr,
2895 ST_PUBLIC) ? ACCESS_PUBLIC : ACCESS_PRIVATE,
2901 case INTERFACE_INTRINSIC_OP:
2902 if (gfc_current_ns->operator_access[operator] == ACCESS_UNKNOWN)
2904 gfc_current_ns->operator_access[operator] =
2905 (st == ST_PUBLIC) ? ACCESS_PUBLIC : ACCESS_PRIVATE;
2909 gfc_error ("Access specification of the %s operator at %C has "
2910 "already been specified", gfc_op2string (operator));
2916 case INTERFACE_USER_OP:
2917 uop = gfc_get_uop (name);
2919 if (uop->access == ACCESS_UNKNOWN)
2922 (st == ST_PUBLIC) ? ACCESS_PUBLIC : ACCESS_PRIVATE;
2927 ("Access specification of the .%s. operator at %C has "
2928 "already been specified", sym->name);
2935 if (gfc_match_char (',') == MATCH_NO)
2939 if (gfc_match_eos () != MATCH_YES)
2944 gfc_syntax_error (st);
2951 /* The PRIVATE statement is a bit weird in that it can be a attribute
2952 declaration, but also works as a standlone statement inside of a
2953 type declaration or a module. */
2956 gfc_match_private (gfc_statement * st)
2959 if (gfc_match ("private") != MATCH_YES)
2962 if (gfc_current_state () == COMP_DERIVED)
2964 if (gfc_match_eos () == MATCH_YES)
2970 gfc_syntax_error (ST_PRIVATE);
2974 if (gfc_match_eos () == MATCH_YES)
2981 return access_attr_decl (ST_PRIVATE);
2986 gfc_match_public (gfc_statement * st)
2989 if (gfc_match ("public") != MATCH_YES)
2992 if (gfc_match_eos () == MATCH_YES)
2999 return access_attr_decl (ST_PUBLIC);
3003 /* Workhorse for gfc_match_parameter. */
3012 m = gfc_match_symbol (&sym, 0);
3014 gfc_error ("Expected variable name at %C in PARAMETER statement");
3019 if (gfc_match_char ('=') == MATCH_NO)
3021 gfc_error ("Expected = sign in PARAMETER statement at %C");
3025 m = gfc_match_init_expr (&init);
3027 gfc_error ("Expected expression at %C in PARAMETER statement");
3031 if (sym->ts.type == BT_UNKNOWN
3032 && gfc_set_default_type (sym, 1, NULL) == FAILURE)
3038 if (gfc_check_assign_symbol (sym, init) == FAILURE
3039 || gfc_add_flavor (&sym->attr, FL_PARAMETER, NULL) == FAILURE)
3049 gfc_free_expr (init);
3054 /* Match a parameter statement, with the weird syntax that these have. */
3057 gfc_match_parameter (void)
3061 if (gfc_match_char ('(') == MATCH_NO)
3070 if (gfc_match (" )%t") == MATCH_YES)
3073 if (gfc_match_char (',') != MATCH_YES)
3075 gfc_error ("Unexpected characters in PARAMETER statement at %C");
3085 /* Save statements have a special syntax. */
3088 gfc_match_save (void)
3090 char n[GFC_MAX_SYMBOL_LEN+1];
3095 if (gfc_match_eos () == MATCH_YES)
3097 if (gfc_current_ns->seen_save)
3099 gfc_error ("Blanket SAVE statement at %C follows previous "
3105 gfc_current_ns->save_all = gfc_current_ns->seen_save = 1;
3109 if (gfc_current_ns->save_all)
3111 gfc_error ("SAVE statement at %C follows blanket SAVE statement");
3119 m = gfc_match_symbol (&sym, 0);
3123 if (gfc_add_save (&sym->attr, &gfc_current_locus) == FAILURE)
3134 m = gfc_match (" / %n /", &n);
3135 if (m == MATCH_ERROR)
3140 c = gfc_get_common (n, 0);
3143 gfc_current_ns->seen_save = 1;
3146 if (gfc_match_eos () == MATCH_YES)
3148 if (gfc_match_char (',') != MATCH_YES)
3155 gfc_error ("Syntax error in SAVE statement at %C");
3160 /* Match a module procedure statement. Note that we have to modify
3161 symbols in the parent's namespace because the current one was there
3162 to receive symbols that are in a interface's formal argument list. */
3165 gfc_match_modproc (void)
3167 char name[GFC_MAX_SYMBOL_LEN + 1];
3171 if (gfc_state_stack->state != COMP_INTERFACE
3172 || gfc_state_stack->previous == NULL
3173 || current_interface.type == INTERFACE_NAMELESS)
3176 ("MODULE PROCEDURE at %C must be in a generic module interface");
3182 m = gfc_match_name (name);
3188 if (gfc_get_symbol (name, gfc_current_ns->parent, &sym))
3191 if (sym->attr.proc != PROC_MODULE
3192 && gfc_add_procedure (&sym->attr, PROC_MODULE, NULL) == FAILURE)
3195 if (gfc_add_interface (sym) == FAILURE)
3198 if (gfc_match_eos () == MATCH_YES)
3200 if (gfc_match_char (',') != MATCH_YES)
3207 gfc_syntax_error (ST_MODULE_PROC);
3212 /* Match the beginning of a derived type declaration. If a type name
3213 was the result of a function, then it is possible to have a symbol
3214 already to be known as a derived type yet have no components. */
3217 gfc_match_derived_decl (void)
3219 char name[GFC_MAX_SYMBOL_LEN + 1];
3220 symbol_attribute attr;
3224 if (gfc_current_state () == COMP_DERIVED)
3227 gfc_clear_attr (&attr);
3230 if (gfc_match (" , private") == MATCH_YES)
3232 if (gfc_find_state (COMP_MODULE) == FAILURE)
3235 ("Derived type at %C can only be PRIVATE within a MODULE");
3239 if (gfc_add_access (&attr, ACCESS_PRIVATE, NULL) == FAILURE)
3244 if (gfc_match (" , public") == MATCH_YES)
3246 if (gfc_find_state (COMP_MODULE) == FAILURE)
3248 gfc_error ("Derived type at %C can only be PUBLIC within a MODULE");
3252 if (gfc_add_access (&attr, ACCESS_PUBLIC, NULL) == FAILURE)
3257 if (gfc_match (" ::") != MATCH_YES && attr.access != ACCESS_UNKNOWN)
3259 gfc_error ("Expected :: in TYPE definition at %C");
3263 m = gfc_match (" %n%t", name);
3267 /* Make sure the name isn't the name of an intrinsic type. The
3268 'double precision' type doesn't get past the name matcher. */
3269 if (strcmp (name, "integer") == 0
3270 || strcmp (name, "real") == 0
3271 || strcmp (name, "character") == 0
3272 || strcmp (name, "logical") == 0
3273 || strcmp (name, "complex") == 0)
3276 ("Type name '%s' at %C cannot be the same as an intrinsic type",
3281 if (gfc_get_symbol (name, NULL, &sym))
3284 if (sym->ts.type != BT_UNKNOWN)
3286 gfc_error ("Derived type name '%s' at %C already has a basic type "
3287 "of %s", sym->name, gfc_typename (&sym->ts));
3291 /* The symbol may already have the derived attribute without the
3292 components. The ways this can happen is via a function
3293 definition, an INTRINSIC statement or a subtype in another
3294 derived type that is a pointer. The first part of the AND clause
3295 is true if a the symbol is not the return value of a function. */
3296 if (sym->attr.flavor != FL_DERIVED
3297 && gfc_add_flavor (&sym->attr, FL_DERIVED, NULL) == FAILURE)
3300 if (sym->components != NULL)
3303 ("Derived type definition of '%s' at %C has already been defined",
3308 if (attr.access != ACCESS_UNKNOWN
3309 && gfc_add_access (&sym->attr, attr.access, NULL) == FAILURE)
3312 gfc_new_block = sym;