1 /* Declaration statement matcher
2 Copyright (C) 2002 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 /* Match an intent specification. Since this can only happen after an
52 INTENT word, a legal intent-spec must follow. */
55 match_intent_spec (void)
58 if (gfc_match (" ( in out )") == MATCH_YES)
60 if (gfc_match (" ( in )") == MATCH_YES)
62 if (gfc_match (" ( out )") == MATCH_YES)
65 gfc_error ("Bad INTENT specification at %C");
66 return INTENT_UNKNOWN;
70 /* Matches a character length specification, which is either a
71 specification expression or a '*'. */
74 char_len_param_value (gfc_expr ** expr)
77 if (gfc_match_char ('*') == MATCH_YES)
83 return gfc_match_expr (expr);
87 /* A character length is a '*' followed by a literal integer or a
88 char_len_param_value in parenthesis. */
91 match_char_length (gfc_expr ** expr)
96 m = gfc_match_char ('*');
100 m = gfc_match_small_literal_int (&length);
101 if (m == MATCH_ERROR)
106 *expr = gfc_int_expr (length);
110 if (gfc_match_char ('(') == MATCH_NO)
113 m = char_len_param_value (expr);
114 if (m == MATCH_ERROR)
119 if (gfc_match_char (')') == MATCH_NO)
121 gfc_free_expr (*expr);
129 gfc_error ("Syntax error in character length specification at %C");
134 /* Special subroutine for finding a symbol. If we're compiling a
135 function or subroutine and the parent compilation unit is an
136 interface, then check to see if the name we've been given is the
137 name of the interface (located in another namespace). If so,
138 return that symbol. If not, use gfc_get_symbol(). */
141 find_special (const char *name, gfc_symbol ** result)
145 if (gfc_current_state () != COMP_SUBROUTINE
146 && gfc_current_state () != COMP_FUNCTION)
149 s = gfc_state_stack->previous;
153 if (s->state != COMP_INTERFACE)
156 goto normal; /* Nameless interface */
158 if (strcmp (name, s->sym->name) == 0)
165 return gfc_get_symbol (name, NULL, result);
169 /* Special subroutine for getting a symbol node associated with a
170 procedure name, used in SUBROUTINE and FUNCTION statements. The
171 symbol is created in the parent using with symtree node in the
172 child unit pointing to the symbol. If the current namespace has no
173 parent, then the symbol is just created in the current unit. */
176 get_proc_name (const char *name, gfc_symbol ** result)
182 if (gfc_current_ns->parent == NULL)
183 return gfc_get_symbol (name, NULL, result);
185 rc = gfc_get_symbol (name, gfc_current_ns->parent, result);
189 /* Deal with ENTRY problem */
191 st = gfc_new_symtree (&gfc_current_ns->sym_root, name);
197 /* See if the procedure should be a module procedure */
199 if (sym->ns->proc_name != NULL
200 && sym->ns->proc_name->attr.flavor == FL_MODULE
201 && sym->attr.proc != PROC_MODULE
202 && gfc_add_procedure (&sym->attr, PROC_MODULE, NULL) == FAILURE)
209 /* Function called by variable_decl() that adds a name to the symbol
213 build_sym (const char *name, gfc_charlen * cl,
214 gfc_array_spec ** as, locus * var_locus)
216 symbol_attribute attr;
219 if (find_special (name, &sym))
222 /* Start updating the symbol table. Add basic type attribute
224 if (current_ts.type != BT_UNKNOWN
225 &&(sym->attr.implicit_type == 0
226 || !gfc_compare_types (&sym->ts, ¤t_ts))
227 && gfc_add_type (sym, ¤t_ts, var_locus) == FAILURE)
230 if (sym->ts.type == BT_CHARACTER)
233 /* Add dimension attribute if present. */
234 if (gfc_set_array_spec (sym, *as, var_locus) == FAILURE)
238 /* Add attribute to symbol. The copy is so that we can reset the
239 dimension attribute. */
243 if (gfc_copy_attr (&sym->attr, &attr, var_locus) == FAILURE)
250 /* Function called by variable_decl() that adds an initialization
251 expression to a symbol. */
254 add_init_expr_to_sym (const char *name, gfc_expr ** initp,
257 symbol_attribute attr;
262 if (find_special (name, &sym))
267 /* If this symbol is confirming an implicit parameter type,
268 then an initialization expression is not allowed. */
269 if (attr.flavor == FL_PARAMETER
270 && sym->value != NULL
273 gfc_error ("Initializer not allowed for PARAMETER '%s' at %C",
282 gfc_error ("Initializer not allowed for COMMON variable '%s' at %C",
289 /* An initializer is required for PARAMETER declarations. */
290 if (attr.flavor == FL_PARAMETER)
292 gfc_error ("PARAMETER at %L is missing an initializer", var_locus);
298 /* If a variable appears in a DATA block, it cannot have an
303 ("Variable '%s' at %C with an initializer already appears "
304 "in a DATA statement", sym->name);
308 /* Checking a derived type parameter has to be put off until later. */
309 if (sym->ts.type != BT_DERIVED && init->ts.type != BT_DERIVED
310 && gfc_check_assign_symbol (sym, init) == FAILURE)
313 /* Add initializer. Make sure we keep the ranks sane. */
314 if (sym->attr.dimension && init->rank == 0)
315 init->rank = sym->as->rank;
325 /* Function called by variable_decl() that adds a name to a structure
329 build_struct (const char *name, gfc_charlen * cl, gfc_expr ** init,
330 gfc_array_spec ** as)
334 /* If the current symbol is of the same derived type that we're
335 constructing, it must have the pointer attribute. */
336 if (current_ts.type == BT_DERIVED
337 && current_ts.derived == gfc_current_block ()
338 && current_attr.pointer == 0)
340 gfc_error ("Component at %C must have the POINTER attribute");
344 if (gfc_current_block ()->attr.pointer
347 if ((*as)->type != AS_DEFERRED && (*as)->type != AS_EXPLICIT)
349 gfc_error ("Array component of structure at %C must have explicit "
350 "or deferred shape");
355 if (gfc_add_component (gfc_current_block (), name, &c) == FAILURE)
360 gfc_set_component_attr (c, ¤t_attr);
362 c->initializer = *init;
370 /* Check array components. */
376 if (c->as->type != AS_DEFERRED)
378 gfc_error ("Pointer array component of structure at %C "
379 "must have a deferred shape");
385 if (c->as->type != AS_EXPLICIT)
388 ("Array component of structure at %C must have an explicit "
398 /* Match a 'NULL()', and possibly take care of some side effects. */
401 gfc_match_null (gfc_expr ** result)
407 m = gfc_match (" null ( )");
411 /* The NULL symbol now has to be/become an intrinsic function. */
412 if (gfc_get_symbol ("null", NULL, &sym))
414 gfc_error ("NULL() initialization at %C is ambiguous");
418 gfc_intrinsic_symbol (sym);
420 if (sym->attr.proc != PROC_INTRINSIC
421 && (gfc_add_procedure (&sym->attr, PROC_INTRINSIC, NULL) == FAILURE
422 || gfc_add_function (&sym->attr, NULL) == FAILURE))
426 e->where = gfc_current_locus;
427 e->expr_type = EXPR_NULL;
428 e->ts.type = BT_UNKNOWN;
436 /* Match a variable name with an optional initializer. When this
437 subroutine is called, a variable is expected to be parsed next.
438 Depending on what is happening at the moment, updates either the
439 symbol table or the current interface. */
444 char name[GFC_MAX_SYMBOL_LEN + 1];
445 gfc_expr *initializer, *char_len;
455 /* When we get here, we've just matched a list of attributes and
456 maybe a type and a double colon. The next thing we expect to see
457 is the name of the symbol. */
458 m = gfc_match_name (name);
462 var_locus = gfc_current_locus;
464 /* Now we could see the optional array spec. or character length. */
465 m = gfc_match_array_spec (&as);
466 if (m == MATCH_ERROR)
469 as = gfc_copy_array_spec (current_as);
474 if (current_ts.type == BT_CHARACTER)
476 switch (match_char_length (&char_len))
479 cl = gfc_get_charlen ();
480 cl->next = gfc_current_ns->cl_list;
481 gfc_current_ns->cl_list = cl;
483 cl->length = char_len;
495 /* OK, we've successfully matched the declaration. Now put the
496 symbol in the current namespace, because it might be used in the
497 optional intialization expression for this symbol, e.g. this is
500 integer, parameter :: i = huge(i)
502 This is only true for parameters or variables of a basic type.
503 For components of derived types, it is not true, so we don't
504 create a symbol for those yet. If we fail to create the symbol,
506 if (gfc_current_state () != COMP_DERIVED
507 && build_sym (name, cl, &as, &var_locus) == FAILURE)
513 /* In functions that have a RESULT variable defined, the function
514 name always refers to function calls. Therefore, the name is
515 not allowed to appear in specification statements. */
516 if (gfc_current_state () == COMP_FUNCTION
517 && gfc_current_block () != NULL
518 && gfc_current_block ()->result != NULL
519 && gfc_current_block ()->result != gfc_current_block ()
520 && strcmp (gfc_current_block ()->name, name) == 0)
522 gfc_error ("Function name '%s' not allowed at %C", name);
527 /* The double colon must be present in order to have initializers.
528 Otherwise the statement is ambiguous with an assignment statement. */
531 if (gfc_match (" =>") == MATCH_YES)
534 if (!current_attr.pointer)
536 gfc_error ("Initialization at %C isn't for a pointer variable");
541 m = gfc_match_null (&initializer);
544 gfc_error ("Pointer initialization requires a NULL at %C");
551 ("Initialization of pointer at %C is not allowed in a "
559 initializer->ts = current_ts;
562 else if (gfc_match_char ('=') == MATCH_YES)
564 if (current_attr.pointer)
567 ("Pointer initialization at %C requires '=>', not '='");
572 m = gfc_match_init_expr (&initializer);
575 gfc_error ("Expected an initialization expression at %C");
579 if (current_attr.flavor != FL_PARAMETER && gfc_pure (NULL))
582 ("Initialization of variable at %C is not allowed in a "
592 /* Add the initializer. Note that it is fine if initializer is
593 NULL here, because we sometimes also need to check if a
594 declaration *must* have an initialization expression. */
595 if (gfc_current_state () != COMP_DERIVED)
596 t = add_init_expr_to_sym (name, &initializer, &var_locus);
599 if (current_ts.type == BT_DERIVED && !initializer)
600 initializer = gfc_default_initializer (¤t_ts);
601 t = build_struct (name, cl, &initializer, &as);
604 m = (t == SUCCESS) ? MATCH_YES : MATCH_ERROR;
607 /* Free stuff up and return. */
608 gfc_free_expr (initializer);
609 gfc_free_array_spec (as);
615 /* Match an extended-f77 kind specification. */
618 gfc_match_old_kind_spec (gfc_typespec * ts)
622 if (gfc_match_char ('*') != MATCH_YES)
625 m = gfc_match_small_literal_int (&ts->kind);
629 /* Massage the kind numbers for complex types. */
630 if (ts->type == BT_COMPLEX && ts->kind == 8)
632 if (ts->type == BT_COMPLEX && ts->kind == 16)
635 if (gfc_validate_kind (ts->type, ts->kind) == -1)
637 gfc_error ("Old-style kind %d not supported for type %s at %C",
638 ts->kind, gfc_basic_typename (ts->type));
647 /* Match a kind specification. Since kinds are generally optional, we
648 usually return MATCH_NO if something goes wrong. If a "kind="
649 string is found, then we know we have an error. */
652 gfc_match_kind_spec (gfc_typespec * ts)
662 where = gfc_current_locus;
664 if (gfc_match_char ('(') == MATCH_NO)
667 /* Also gobbles optional text. */
668 if (gfc_match (" kind = ") == MATCH_YES)
671 n = gfc_match_init_expr (&e);
673 gfc_error ("Expected initialization expression at %C");
679 gfc_error ("Expected scalar initialization expression at %C");
684 msg = gfc_extract_int (e, &ts->kind);
695 if (gfc_validate_kind (ts->type, ts->kind) == -1)
697 gfc_error ("Kind %d not supported for type %s at %C", ts->kind,
698 gfc_basic_typename (ts->type));
704 if (gfc_match_char (')') != MATCH_YES)
706 gfc_error ("Missing right paren at %C");
714 gfc_current_locus = where;
719 /* Match the various kind/length specifications in a CHARACTER
720 declaration. We don't return MATCH_NO. */
723 match_char_spec (gfc_typespec * ts)
725 int i, kind, seen_length;
730 kind = gfc_default_character_kind ();
734 /* Try the old-style specification first. */
735 old_char_selector = 0;
737 m = match_char_length (&len);
741 old_char_selector = 1;
746 m = gfc_match_char ('(');
749 m = MATCH_YES; /* character without length is a single char */
753 /* Try the weird case: ( KIND = <int> [ , LEN = <len-param> ] ) */
754 if (gfc_match (" kind =") == MATCH_YES)
756 m = gfc_match_small_int (&kind);
757 if (m == MATCH_ERROR)
762 if (gfc_match (" , len =") == MATCH_NO)
765 m = char_len_param_value (&len);
768 if (m == MATCH_ERROR)
775 /* Try to match ( LEN = <len-param> ) or ( LEN = <len-param>, KIND = <int> ) */
776 if (gfc_match (" len =") == MATCH_YES)
778 m = char_len_param_value (&len);
781 if (m == MATCH_ERROR)
785 if (gfc_match_char (')') == MATCH_YES)
788 if (gfc_match (" , kind =") != MATCH_YES)
791 gfc_match_small_int (&kind);
793 if (gfc_validate_kind (BT_CHARACTER, kind) == -1)
795 gfc_error ("Kind %d is not a CHARACTER kind at %C", kind);
802 /* Try to match ( <len-param> ) or ( <len-param> , [ KIND = ] <int> ) */
803 m = char_len_param_value (&len);
806 if (m == MATCH_ERROR)
810 m = gfc_match_char (')');
814 if (gfc_match_char (',') != MATCH_YES)
817 gfc_match (" kind ="); /* Gobble optional text */
819 m = gfc_match_small_int (&kind);
820 if (m == MATCH_ERROR)
826 /* Require a right-paren at this point. */
827 m = gfc_match_char (')');
832 gfc_error ("Syntax error in CHARACTER declaration at %C");
836 if (m == MATCH_YES && gfc_validate_kind (BT_CHARACTER, kind) == -1)
838 gfc_error ("Kind %d is not a CHARACTER kind at %C", kind);
848 /* Do some final massaging of the length values. */
849 cl = gfc_get_charlen ();
850 cl->next = gfc_current_ns->cl_list;
851 gfc_current_ns->cl_list = cl;
853 if (seen_length == 0)
854 cl->length = gfc_int_expr (1);
857 if (len == NULL || gfc_extract_int (len, &i) != NULL || i >= 0)
862 cl->length = gfc_int_expr (0);
873 /* Matches a type specification. If successful, sets the ts structure
874 to the matched specification. This is necessary for FUNCTION and
877 If kind_flag is nonzero, then we check for the optional kind
878 specification. Not doing so is needed for matching an IMPLICIT
879 statement correctly. */
882 gfc_match_type_spec (gfc_typespec * ts, int kind_flag)
884 char name[GFC_MAX_SYMBOL_LEN + 1];
891 if (gfc_match (" integer") == MATCH_YES)
893 ts->type = BT_INTEGER;
894 ts->kind = gfc_default_integer_kind ();
898 if (gfc_match (" character") == MATCH_YES)
900 ts->type = BT_CHARACTER;
901 return match_char_spec (ts);
904 if (gfc_match (" real") == MATCH_YES)
907 ts->kind = gfc_default_real_kind ();
911 if (gfc_match (" double precision") == MATCH_YES)
914 ts->kind = gfc_default_double_kind ();
918 if (gfc_match (" complex") == MATCH_YES)
920 ts->type = BT_COMPLEX;
921 ts->kind = gfc_default_complex_kind ();
925 if (gfc_match (" double complex") == MATCH_YES)
927 ts->type = BT_COMPLEX;
928 ts->kind = gfc_default_double_kind ();
932 if (gfc_match (" logical") == MATCH_YES)
934 ts->type = BT_LOGICAL;
935 ts->kind = gfc_default_logical_kind ();
939 m = gfc_match (" type ( %n )", name);
943 /* Search for the name but allow the components to be defined later. */
944 if (gfc_get_ha_symbol (name, &sym))
946 gfc_error ("Type name '%s' at %C is ambiguous", name);
950 if (sym->attr.flavor != FL_DERIVED
951 && gfc_add_flavor (&sym->attr, FL_DERIVED, NULL) == FAILURE)
954 ts->type = BT_DERIVED;
961 /* For all types except double, derived and character, look for an
962 optional kind specifier. MATCH_NO is actually OK at this point. */
966 if (gfc_current_form == FORM_FREE)
969 if (!gfc_is_whitespace(c) && c != '*' && c != '('
970 && c != ':' && c != ',')
974 m = gfc_match_kind_spec (ts);
975 if (m == MATCH_NO && ts->type != BT_CHARACTER)
976 m = gfc_match_old_kind_spec (ts);
979 m = MATCH_YES; /* No kind specifier found. */
985 /* Matches an attribute specification including array specs. If
986 successful, leaves the variables current_attr and current_as
987 holding the specification. Also sets the colon_seen variable for
988 later use by matchers associated with initializations.
990 This subroutine is a little tricky in the sense that we don't know
991 if we really have an attr-spec until we hit the double colon.
992 Until that time, we can only return MATCH_NO. This forces us to
993 check for duplicate specification at this level. */
996 match_attr_spec (void)
999 /* Modifiers that can exist in a type statement. */
1001 { GFC_DECL_BEGIN = 0,
1002 DECL_ALLOCATABLE = GFC_DECL_BEGIN, DECL_DIMENSION, DECL_EXTERNAL,
1003 DECL_IN, DECL_OUT, DECL_INOUT, DECL_INTRINSIC, DECL_OPTIONAL,
1004 DECL_PARAMETER, DECL_POINTER, DECL_PRIVATE, DECL_PUBLIC, DECL_SAVE,
1005 DECL_TARGET, DECL_COLON, DECL_NONE,
1006 GFC_DECL_END /* Sentinel */
1010 /* GFC_DECL_END is the sentinel, index starts at 0. */
1011 #define NUM_DECL GFC_DECL_END
1013 static mstring decls[] = {
1014 minit (", allocatable", DECL_ALLOCATABLE),
1015 minit (", dimension", DECL_DIMENSION),
1016 minit (", external", DECL_EXTERNAL),
1017 minit (", intent ( in )", DECL_IN),
1018 minit (", intent ( out )", DECL_OUT),
1019 minit (", intent ( in out )", DECL_INOUT),
1020 minit (", intrinsic", DECL_INTRINSIC),
1021 minit (", optional", DECL_OPTIONAL),
1022 minit (", parameter", DECL_PARAMETER),
1023 minit (", pointer", DECL_POINTER),
1024 minit (", private", DECL_PRIVATE),
1025 minit (", public", DECL_PUBLIC),
1026 minit (", save", DECL_SAVE),
1027 minit (", target", DECL_TARGET),
1028 minit ("::", DECL_COLON),
1029 minit (NULL, DECL_NONE)
1032 locus start, seen_at[NUM_DECL];
1039 gfc_clear_attr (¤t_attr);
1040 start = gfc_current_locus;
1045 /* See if we get all of the keywords up to the final double colon. */
1046 for (d = GFC_DECL_BEGIN; d != GFC_DECL_END; d++)
1051 d = (decl_types) gfc_match_strings (decls);
1052 if (d == DECL_NONE || d == DECL_COLON)
1056 seen_at[d] = gfc_current_locus;
1058 if (d == DECL_DIMENSION)
1060 m = gfc_match_array_spec (¤t_as);
1064 gfc_error ("Missing dimension specification at %C");
1068 if (m == MATCH_ERROR)
1073 /* No double colon, so assume that we've been looking at something
1074 else the whole time. */
1081 /* Since we've seen a double colon, we have to be looking at an
1082 attr-spec. This means that we can now issue errors. */
1083 for (d = GFC_DECL_BEGIN; d != GFC_DECL_END; d++)
1088 case DECL_ALLOCATABLE:
1089 attr = "ALLOCATABLE";
1091 case DECL_DIMENSION:
1098 attr = "INTENT (IN)";
1101 attr = "INTENT (OUT)";
1104 attr = "INTENT (IN OUT)";
1106 case DECL_INTRINSIC:
1112 case DECL_PARAMETER:
1131 attr = NULL; /* This shouldn't happen */
1134 gfc_error ("Duplicate %s attribute at %L", attr, &seen_at[d]);
1139 /* Now that we've dealt with duplicate attributes, add the attributes
1140 to the current attribute. */
1141 for (d = GFC_DECL_BEGIN; d != GFC_DECL_END; d++)
1146 if (gfc_current_state () == COMP_DERIVED
1147 && d != DECL_DIMENSION && d != DECL_POINTER
1148 && d != DECL_COLON && d != DECL_NONE)
1151 gfc_error ("Attribute at %L is not allowed in a TYPE definition",
1159 case DECL_ALLOCATABLE:
1160 t = gfc_add_allocatable (¤t_attr, &seen_at[d]);
1163 case DECL_DIMENSION:
1164 t = gfc_add_dimension (¤t_attr, &seen_at[d]);
1168 t = gfc_add_external (¤t_attr, &seen_at[d]);
1172 t = gfc_add_intent (¤t_attr, INTENT_IN, &seen_at[d]);
1176 t = gfc_add_intent (¤t_attr, INTENT_OUT, &seen_at[d]);
1180 t = gfc_add_intent (¤t_attr, INTENT_INOUT, &seen_at[d]);
1183 case DECL_INTRINSIC:
1184 t = gfc_add_intrinsic (¤t_attr, &seen_at[d]);
1188 t = gfc_add_optional (¤t_attr, &seen_at[d]);
1191 case DECL_PARAMETER:
1192 t = gfc_add_flavor (¤t_attr, FL_PARAMETER, &seen_at[d]);
1196 t = gfc_add_pointer (¤t_attr, &seen_at[d]);
1200 t = gfc_add_access (¤t_attr, ACCESS_PRIVATE, &seen_at[d]);
1204 t = gfc_add_access (¤t_attr, ACCESS_PUBLIC, &seen_at[d]);
1208 t = gfc_add_save (¤t_attr, &seen_at[d]);
1212 t = gfc_add_target (¤t_attr, &seen_at[d]);
1216 gfc_internal_error ("match_attr_spec(): Bad attribute");
1230 gfc_current_locus = start;
1231 gfc_free_array_spec (current_as);
1237 /* Match a data declaration statement. */
1240 gfc_match_data_decl (void)
1245 m = gfc_match_type_spec (¤t_ts, 1);
1249 if (current_ts.type == BT_DERIVED && gfc_current_state () != COMP_DERIVED)
1251 sym = gfc_use_derived (current_ts.derived);
1259 current_ts.derived = sym;
1262 m = match_attr_spec ();
1263 if (m == MATCH_ERROR)
1269 if (current_ts.type == BT_DERIVED && current_ts.derived->components == NULL)
1272 if (current_attr.pointer && gfc_current_state () == COMP_DERIVED)
1275 if (gfc_find_symbol (current_ts.derived->name,
1276 current_ts.derived->ns->parent, 1, &sym) == 0)
1279 /* Hope that an ambiguous symbol is itself masked by a type definition. */
1280 if (sym != NULL && sym->attr.flavor == FL_DERIVED)
1283 gfc_error ("Derived type at %C has not been previously defined");
1289 /* If we have an old-style character declaration, and no new-style
1290 attribute specifications, then there a comma is optional between
1291 the type specification and the variable list. */
1292 if (m == MATCH_NO && current_ts.type == BT_CHARACTER && old_char_selector)
1293 gfc_match_char (',');
1295 /* Give the types/attributes to symbols that follow. */
1298 m = variable_decl ();
1299 if (m == MATCH_ERROR)
1304 if (gfc_match_eos () == MATCH_YES)
1306 if (gfc_match_char (',') != MATCH_YES)
1310 gfc_error ("Syntax error in data declaration at %C");
1314 gfc_free_array_spec (current_as);
1320 /* Match a prefix associated with a function or subroutine
1321 declaration. If the typespec pointer is nonnull, then a typespec
1322 can be matched. Note that if nothing matches, MATCH_YES is
1323 returned (the null string was matched). */
1326 match_prefix (gfc_typespec * ts)
1330 gfc_clear_attr (¤t_attr);
1334 if (!seen_type && ts != NULL
1335 && gfc_match_type_spec (ts, 1) == MATCH_YES
1336 && gfc_match_space () == MATCH_YES)
1343 if (gfc_match ("elemental% ") == MATCH_YES)
1345 if (gfc_add_elemental (¤t_attr, NULL) == FAILURE)
1351 if (gfc_match ("pure% ") == MATCH_YES)
1353 if (gfc_add_pure (¤t_attr, NULL) == FAILURE)
1359 if (gfc_match ("recursive% ") == MATCH_YES)
1361 if (gfc_add_recursive (¤t_attr, NULL) == FAILURE)
1367 /* At this point, the next item is not a prefix. */
1372 /* Copy attributes matched by match_prefix() to attributes on a symbol. */
1375 copy_prefix (symbol_attribute * dest, locus * where)
1378 if (current_attr.pure && gfc_add_pure (dest, where) == FAILURE)
1381 if (current_attr.elemental && gfc_add_elemental (dest, where) == FAILURE)
1384 if (current_attr.recursive && gfc_add_recursive (dest, where) == FAILURE)
1391 /* Match a formal argument list. */
1394 gfc_match_formal_arglist (gfc_symbol * progname, int st_flag, int null_flag)
1396 gfc_formal_arglist *head, *tail, *p, *q;
1397 char name[GFC_MAX_SYMBOL_LEN + 1];
1403 if (gfc_match_char ('(') != MATCH_YES)
1410 if (gfc_match_char (')') == MATCH_YES)
1415 if (gfc_match_char ('*') == MATCH_YES)
1419 m = gfc_match_name (name);
1423 if (gfc_get_symbol (name, NULL, &sym))
1427 p = gfc_get_formal_arglist ();
1439 /* We don't add the VARIABLE flavor because the name could be a
1440 dummy procedure. We don't apply these attributes to formal
1441 arguments of statement functions. */
1442 if (sym != NULL && !st_flag
1443 && (gfc_add_dummy (&sym->attr, NULL) == FAILURE
1444 || gfc_missing_attr (&sym->attr, NULL) == FAILURE))
1450 /* The name of a program unit can be in a different namespace,
1451 so check for it explicitly. After the statement is accepted,
1452 the name is checked for especially in gfc_get_symbol(). */
1453 if (gfc_new_block != NULL && sym != NULL
1454 && strcmp (sym->name, gfc_new_block->name) == 0)
1456 gfc_error ("Name '%s' at %C is the name of the procedure",
1462 if (gfc_match_char (')') == MATCH_YES)
1465 m = gfc_match_char (',');
1468 gfc_error ("Unexpected junk in formal argument list at %C");
1474 /* Check for duplicate symbols in the formal argument list. */
1477 for (p = head; p->next; p = p->next)
1482 for (q = p->next; q; q = q->next)
1483 if (p->sym == q->sym)
1486 ("Duplicate symbol '%s' in formal argument list at %C",
1495 if (gfc_add_explicit_interface (progname, IFSRC_DECL, head, NULL) ==
1505 gfc_free_formal_arglist (head);
1510 /* Match a RESULT specification following a function declaration or
1511 ENTRY statement. Also matches the end-of-statement. */
1514 match_result (gfc_symbol * function, gfc_symbol ** result)
1516 char name[GFC_MAX_SYMBOL_LEN + 1];
1520 if (gfc_match (" result (") != MATCH_YES)
1523 m = gfc_match_name (name);
1527 if (gfc_match (" )%t") != MATCH_YES)
1529 gfc_error ("Unexpected junk following RESULT variable at %C");
1533 if (strcmp (function->name, name) == 0)
1536 ("RESULT variable at %C must be different than function name");
1540 if (gfc_get_symbol (name, NULL, &r))
1543 if (gfc_add_flavor (&r->attr, FL_VARIABLE, NULL) == FAILURE
1544 || gfc_add_result (&r->attr, NULL) == FAILURE)
1553 /* Match a function declaration. */
1556 gfc_match_function_decl (void)
1558 char name[GFC_MAX_SYMBOL_LEN + 1];
1559 gfc_symbol *sym, *result;
1563 if (gfc_current_state () != COMP_NONE
1564 && gfc_current_state () != COMP_INTERFACE
1565 && gfc_current_state () != COMP_CONTAINS)
1568 gfc_clear_ts (¤t_ts);
1570 old_loc = gfc_current_locus;
1572 m = match_prefix (¤t_ts);
1575 gfc_current_locus = old_loc;
1579 if (gfc_match ("function% %n", name) != MATCH_YES)
1581 gfc_current_locus = old_loc;
1585 if (get_proc_name (name, &sym))
1587 gfc_new_block = sym;
1589 m = gfc_match_formal_arglist (sym, 0, 0);
1591 gfc_error ("Expected formal argument list in function definition at %C");
1592 else if (m == MATCH_ERROR)
1597 if (gfc_match_eos () != MATCH_YES)
1599 /* See if a result variable is present. */
1600 m = match_result (sym, &result);
1602 gfc_error ("Unexpected junk after function declaration at %C");
1611 /* Make changes to the symbol. */
1614 if (gfc_add_function (&sym->attr, NULL) == FAILURE)
1617 if (gfc_missing_attr (&sym->attr, NULL) == FAILURE
1618 || copy_prefix (&sym->attr, &sym->declared_at) == FAILURE)
1621 if (current_ts.type != BT_UNKNOWN && sym->ts.type != BT_UNKNOWN)
1623 gfc_error ("Function '%s' at %C already has a type of %s", name,
1624 gfc_basic_typename (sym->ts.type));
1630 sym->ts = current_ts;
1635 result->ts = current_ts;
1636 sym->result = result;
1642 gfc_current_locus = old_loc;
1647 /* Match an ENTRY statement. */
1650 gfc_match_entry (void)
1652 gfc_symbol *function, *result, *entry;
1653 char name[GFC_MAX_SYMBOL_LEN + 1];
1654 gfc_compile_state state;
1657 m = gfc_match_name (name);
1661 if (get_proc_name (name, &entry))
1664 gfc_enclosing_unit (&state);
1667 case COMP_SUBROUTINE:
1668 m = gfc_match_formal_arglist (entry, 0, 1);
1672 if (gfc_current_state () != COMP_SUBROUTINE)
1673 goto exec_construct;
1675 if (gfc_add_entry (&entry->attr, NULL) == FAILURE
1676 || gfc_add_subroutine (&entry->attr, NULL) == FAILURE)
1682 m = gfc_match_formal_arglist (entry, 0, 0);
1686 if (gfc_current_state () != COMP_FUNCTION)
1687 goto exec_construct;
1688 function = gfc_state_stack->sym;
1692 if (gfc_match_eos () == MATCH_YES)
1694 if (gfc_add_entry (&entry->attr, NULL) == FAILURE
1695 || gfc_add_function (&entry->attr, NULL) == FAILURE)
1698 entry->result = function->result;
1703 m = match_result (function, &result);
1705 gfc_syntax_error (ST_ENTRY);
1709 if (gfc_add_result (&result->attr, NULL) == FAILURE
1710 || gfc_add_entry (&entry->attr, NULL) == FAILURE
1711 || gfc_add_function (&entry->attr, NULL) == FAILURE)
1715 if (function->attr.recursive && result == NULL)
1717 gfc_error ("RESULT attribute required in ENTRY statement at %C");
1724 goto exec_construct;
1727 if (gfc_match_eos () != MATCH_YES)
1729 gfc_syntax_error (ST_ENTRY);
1736 gfc_error ("ENTRY statement at %C cannot appear within %s",
1737 gfc_state_name (gfc_current_state ()));
1743 /* Match a subroutine statement, including optional prefixes. */
1746 gfc_match_subroutine (void)
1748 char name[GFC_MAX_SYMBOL_LEN + 1];
1752 if (gfc_current_state () != COMP_NONE
1753 && gfc_current_state () != COMP_INTERFACE
1754 && gfc_current_state () != COMP_CONTAINS)
1757 m = match_prefix (NULL);
1761 m = gfc_match ("subroutine% %n", name);
1765 if (get_proc_name (name, &sym))
1767 gfc_new_block = sym;
1769 if (gfc_add_subroutine (&sym->attr, NULL) == FAILURE)
1772 if (gfc_match_formal_arglist (sym, 0, 1) != MATCH_YES)
1775 if (gfc_match_eos () != MATCH_YES)
1777 gfc_syntax_error (ST_SUBROUTINE);
1781 if (copy_prefix (&sym->attr, &sym->declared_at) == FAILURE)
1788 /* Return nonzero if we're currenly compiling a contained procedure. */
1791 contained_procedure (void)
1795 for (s=gfc_state_stack; s; s=s->previous)
1796 if ((s->state == COMP_SUBROUTINE || s->state == COMP_FUNCTION)
1797 && s->previous != NULL
1798 && s->previous->state == COMP_CONTAINS)
1804 /* Match any of the various end-block statements. Returns the type of
1805 END to the caller. The END INTERFACE, END IF, END DO and END
1806 SELECT statements cannot be replaced by a single END statement. */
1809 gfc_match_end (gfc_statement * st)
1811 char name[GFC_MAX_SYMBOL_LEN + 1];
1812 gfc_compile_state state;
1814 const char *block_name;
1819 old_loc = gfc_current_locus;
1820 if (gfc_match ("end") != MATCH_YES)
1823 state = gfc_current_state ();
1825 gfc_current_block () == NULL ? NULL : gfc_current_block ()->name;
1827 if (state == COMP_CONTAINS)
1829 state = gfc_state_stack->previous->state;
1830 block_name = gfc_state_stack->previous->sym == NULL ? NULL
1831 : gfc_state_stack->previous->sym->name;
1838 *st = ST_END_PROGRAM;
1839 target = " program";
1843 case COMP_SUBROUTINE:
1844 *st = ST_END_SUBROUTINE;
1845 target = " subroutine";
1846 eos_ok = !contained_procedure ();
1850 *st = ST_END_FUNCTION;
1851 target = " function";
1852 eos_ok = !contained_procedure ();
1855 case COMP_BLOCK_DATA:
1856 *st = ST_END_BLOCK_DATA;
1857 target = " block data";
1862 *st = ST_END_MODULE;
1867 case COMP_INTERFACE:
1868 *st = ST_END_INTERFACE;
1869 target = " interface";
1892 *st = ST_END_SELECT;
1898 *st = ST_END_FORALL;
1910 gfc_error ("Unexpected END statement at %C");
1914 if (gfc_match_eos () == MATCH_YES)
1918 /* We would have required END [something] */
1919 gfc_error ("%s statement expected at %C",
1920 gfc_ascii_statement (*st));
1927 /* Verify that we've got the sort of end-block that we're expecting. */
1928 if (gfc_match (target) != MATCH_YES)
1930 gfc_error ("Expecting %s statement at %C", gfc_ascii_statement (*st));
1934 /* If we're at the end, make sure a block name wasn't required. */
1935 if (gfc_match_eos () == MATCH_YES)
1938 if (*st != ST_ENDDO && *st != ST_ENDIF && *st != ST_END_SELECT)
1941 if (gfc_current_block () == NULL)
1944 gfc_error ("Expected block name of '%s' in %s statement at %C",
1945 block_name, gfc_ascii_statement (*st));
1950 /* END INTERFACE has a special handler for its several possible endings. */
1951 if (*st == ST_END_INTERFACE)
1952 return gfc_match_end_interface ();
1954 /* We haven't hit the end of statement, so what is left must be an end-name. */
1955 m = gfc_match_space ();
1957 m = gfc_match_name (name);
1960 gfc_error ("Expected terminating name at %C");
1964 if (block_name == NULL)
1967 if (strcmp (name, block_name) != 0)
1969 gfc_error ("Expected label '%s' for %s statement at %C", block_name,
1970 gfc_ascii_statement (*st));
1974 if (gfc_match_eos () == MATCH_YES)
1978 gfc_syntax_error (*st);
1981 gfc_current_locus = old_loc;
1987 /***************** Attribute declaration statements ****************/
1989 /* Set the attribute of a single variable. */
1994 char name[GFC_MAX_SYMBOL_LEN + 1];
2002 m = gfc_match_name (name);
2006 if (find_special (name, &sym))
2009 var_locus = gfc_current_locus;
2011 /* Deal with possible array specification for certain attributes. */
2012 if (current_attr.dimension
2013 || current_attr.allocatable
2014 || current_attr.pointer
2015 || current_attr.target)
2017 m = gfc_match_array_spec (&as);
2018 if (m == MATCH_ERROR)
2021 if (current_attr.dimension && m == MATCH_NO)
2024 ("Missing array specification at %L in DIMENSION statement",
2030 if ((current_attr.allocatable || current_attr.pointer)
2031 && (m == MATCH_YES) && (as->type != AS_DEFERRED))
2033 gfc_error ("Array specification must be deferred at %L",
2040 /* Update symbol table. DIMENSION attribute is set in gfc_set_array_spec(). */
2041 if (current_attr.dimension == 0
2042 && gfc_copy_attr (&sym->attr, ¤t_attr, NULL) == FAILURE)
2048 if (gfc_set_array_spec (sym, as, &var_locus) == FAILURE)
2054 if ((current_attr.external || current_attr.intrinsic)
2055 && sym->attr.flavor != FL_PROCEDURE
2056 && gfc_add_flavor (&sym->attr, FL_PROCEDURE, NULL) == FAILURE)
2065 gfc_free_array_spec (as);
2070 /* Generic attribute declaration subroutine. Used for attributes that
2071 just have a list of names. */
2078 /* Gobble the optional double colon, by simply ignoring the result
2088 if (gfc_match_eos () == MATCH_YES)
2094 if (gfc_match_char (',') != MATCH_YES)
2096 gfc_error ("Unexpected character in variable list at %C");
2107 gfc_match_external (void)
2110 gfc_clear_attr (¤t_attr);
2111 gfc_add_external (¤t_attr, NULL);
2113 return attr_decl ();
2119 gfc_match_intent (void)
2123 intent = match_intent_spec ();
2124 if (intent == INTENT_UNKNOWN)
2127 gfc_clear_attr (¤t_attr);
2128 gfc_add_intent (¤t_attr, intent, NULL); /* Can't fail */
2130 return attr_decl ();
2135 gfc_match_intrinsic (void)
2138 gfc_clear_attr (¤t_attr);
2139 gfc_add_intrinsic (¤t_attr, NULL);
2141 return attr_decl ();
2146 gfc_match_optional (void)
2149 gfc_clear_attr (¤t_attr);
2150 gfc_add_optional (¤t_attr, NULL);
2152 return attr_decl ();
2157 gfc_match_pointer (void)
2160 gfc_clear_attr (¤t_attr);
2161 gfc_add_pointer (¤t_attr, NULL);
2163 return attr_decl ();
2168 gfc_match_allocatable (void)
2171 gfc_clear_attr (¤t_attr);
2172 gfc_add_allocatable (¤t_attr, NULL);
2174 return attr_decl ();
2179 gfc_match_dimension (void)
2182 gfc_clear_attr (¤t_attr);
2183 gfc_add_dimension (¤t_attr, NULL);
2185 return attr_decl ();
2190 gfc_match_target (void)
2193 gfc_clear_attr (¤t_attr);
2194 gfc_add_target (¤t_attr, NULL);
2196 return attr_decl ();
2200 /* Match the list of entities being specified in a PUBLIC or PRIVATE
2204 access_attr_decl (gfc_statement st)
2206 char name[GFC_MAX_SYMBOL_LEN + 1];
2207 interface_type type;
2210 gfc_intrinsic_op operator;
2213 if (gfc_match (" ::") == MATCH_NO && gfc_match_space () == MATCH_NO)
2218 m = gfc_match_generic_spec (&type, name, &operator);
2221 if (m == MATCH_ERROR)
2226 case INTERFACE_NAMELESS:
2229 case INTERFACE_GENERIC:
2230 if (gfc_get_symbol (name, NULL, &sym))
2233 if (gfc_add_access (&sym->attr,
2235 ST_PUBLIC) ? ACCESS_PUBLIC : ACCESS_PRIVATE,
2241 case INTERFACE_INTRINSIC_OP:
2242 if (gfc_current_ns->operator_access[operator] == ACCESS_UNKNOWN)
2244 gfc_current_ns->operator_access[operator] =
2245 (st == ST_PUBLIC) ? ACCESS_PUBLIC : ACCESS_PRIVATE;
2249 gfc_error ("Access specification of the %s operator at %C has "
2250 "already been specified", gfc_op2string (operator));
2256 case INTERFACE_USER_OP:
2257 uop = gfc_get_uop (name);
2259 if (uop->access == ACCESS_UNKNOWN)
2262 (st == ST_PUBLIC) ? ACCESS_PUBLIC : ACCESS_PRIVATE;
2267 ("Access specification of the .%s. operator at %C has "
2268 "already been specified", sym->name);
2275 if (gfc_match_char (',') == MATCH_NO)
2279 if (gfc_match_eos () != MATCH_YES)
2284 gfc_syntax_error (st);
2291 /* The PRIVATE statement is a bit weird in that it can be a attribute
2292 declaration, but also works as a standlone statement inside of a
2293 type declaration or a module. */
2296 gfc_match_private (gfc_statement * st)
2299 if (gfc_match ("private") != MATCH_YES)
2302 if (gfc_current_state () == COMP_DERIVED)
2304 if (gfc_match_eos () == MATCH_YES)
2310 gfc_syntax_error (ST_PRIVATE);
2314 if (gfc_match_eos () == MATCH_YES)
2321 return access_attr_decl (ST_PRIVATE);
2326 gfc_match_public (gfc_statement * st)
2329 if (gfc_match ("public") != MATCH_YES)
2332 if (gfc_match_eos () == MATCH_YES)
2339 return access_attr_decl (ST_PUBLIC);
2343 /* Workhorse for gfc_match_parameter. */
2352 m = gfc_match_symbol (&sym, 0);
2354 gfc_error ("Expected variable name at %C in PARAMETER statement");
2359 if (gfc_match_char ('=') == MATCH_NO)
2361 gfc_error ("Expected = sign in PARAMETER statement at %C");
2365 m = gfc_match_init_expr (&init);
2367 gfc_error ("Expected expression at %C in PARAMETER statement");
2371 if (sym->ts.type == BT_UNKNOWN
2372 && gfc_set_default_type (sym, 1, NULL) == FAILURE)
2378 if (gfc_check_assign_symbol (sym, init) == FAILURE
2379 || gfc_add_flavor (&sym->attr, FL_PARAMETER, NULL) == FAILURE)
2389 gfc_free_expr (init);
2394 /* Match a parameter statement, with the weird syntax that these have. */
2397 gfc_match_parameter (void)
2401 if (gfc_match_char ('(') == MATCH_NO)
2410 if (gfc_match (" )%t") == MATCH_YES)
2413 if (gfc_match_char (',') != MATCH_YES)
2415 gfc_error ("Unexpected characters in PARAMETER statement at %C");
2425 /* Save statements have a special syntax. */
2428 gfc_match_save (void)
2430 char n[GFC_MAX_SYMBOL_LEN+1];
2435 if (gfc_match_eos () == MATCH_YES)
2437 if (gfc_current_ns->seen_save)
2439 gfc_error ("Blanket SAVE statement at %C follows previous "
2445 gfc_current_ns->save_all = gfc_current_ns->seen_save = 1;
2449 if (gfc_current_ns->save_all)
2451 gfc_error ("SAVE statement at %C follows blanket SAVE statement");
2459 m = gfc_match_symbol (&sym, 0);
2463 if (gfc_add_save (&sym->attr, &gfc_current_locus) == FAILURE)
2474 m = gfc_match (" / %n /", &n);
2475 if (m == MATCH_ERROR)
2480 c = gfc_get_common (n);
2484 gfc_error("COMMON block '%s' at %C is already USE associated", n);
2490 gfc_current_ns->seen_save = 1;
2493 if (gfc_match_eos () == MATCH_YES)
2495 if (gfc_match_char (',') != MATCH_YES)
2502 gfc_error ("Syntax error in SAVE statement at %C");
2507 /* Match a module procedure statement. Note that we have to modify
2508 symbols in the parent's namespace because the current one was there
2509 to receive symbols that are in a interface's formal argument list. */
2512 gfc_match_modproc (void)
2514 char name[GFC_MAX_SYMBOL_LEN + 1];
2518 if (gfc_state_stack->state != COMP_INTERFACE
2519 || gfc_state_stack->previous == NULL
2520 || current_interface.type == INTERFACE_NAMELESS)
2523 ("MODULE PROCEDURE at %C must be in a generic module interface");
2529 m = gfc_match_name (name);
2535 if (gfc_get_symbol (name, gfc_current_ns->parent, &sym))
2538 if (sym->attr.proc != PROC_MODULE
2539 && gfc_add_procedure (&sym->attr, PROC_MODULE, NULL) == FAILURE)
2542 if (gfc_add_interface (sym) == FAILURE)
2545 if (gfc_match_eos () == MATCH_YES)
2547 if (gfc_match_char (',') != MATCH_YES)
2554 gfc_syntax_error (ST_MODULE_PROC);
2559 /* Match the beginning of a derived type declaration. If a type name
2560 was the result of a function, then it is possible to have a symbol
2561 already to be known as a derived type yet have no components. */
2564 gfc_match_derived_decl (void)
2566 char name[GFC_MAX_SYMBOL_LEN + 1];
2567 symbol_attribute attr;
2571 if (gfc_current_state () == COMP_DERIVED)
2574 gfc_clear_attr (&attr);
2577 if (gfc_match (" , private") == MATCH_YES)
2579 if (gfc_find_state (COMP_MODULE) == FAILURE)
2582 ("Derived type at %C can only be PRIVATE within a MODULE");
2586 if (gfc_add_access (&attr, ACCESS_PRIVATE, NULL) == FAILURE)
2591 if (gfc_match (" , public") == MATCH_YES)
2593 if (gfc_find_state (COMP_MODULE) == FAILURE)
2595 gfc_error ("Derived type at %C can only be PUBLIC within a MODULE");
2599 if (gfc_add_access (&attr, ACCESS_PUBLIC, NULL) == FAILURE)
2604 if (gfc_match (" ::") != MATCH_YES && attr.access != ACCESS_UNKNOWN)
2606 gfc_error ("Expected :: in TYPE definition at %C");
2610 m = gfc_match (" %n%t", name);
2614 /* Make sure the name isn't the name of an intrinsic type. The
2615 'double precision' type doesn't get past the name matcher. */
2616 if (strcmp (name, "integer") == 0
2617 || strcmp (name, "real") == 0
2618 || strcmp (name, "character") == 0
2619 || strcmp (name, "logical") == 0
2620 || strcmp (name, "complex") == 0)
2623 ("Type name '%s' at %C cannot be the same as an intrinsic type",
2628 if (gfc_get_symbol (name, NULL, &sym))
2631 if (sym->ts.type != BT_UNKNOWN)
2633 gfc_error ("Derived type name '%s' at %C already has a basic type "
2634 "of %s", sym->name, gfc_typename (&sym->ts));
2638 /* The symbol may already have the derived attribute without the
2639 components. The ways this can happen is via a function
2640 definition, an INTRINSIC statement or a subtype in another
2641 derived type that is a pointer. The first part of the AND clause
2642 is true if a the symbol is not the return value of a function. */
2643 if (sym->attr.flavor != FL_DERIVED
2644 && gfc_add_flavor (&sym->attr, FL_DERIVED, NULL) == FAILURE)
2647 if (sym->components != NULL)
2650 ("Derived type definition of '%s' at %C has already been defined",
2655 if (attr.access != ACCESS_UNKNOWN
2656 && gfc_add_access (&sym->attr, attr.access, NULL) == FAILURE)
2659 gfc_new_block = sym;