1 /* Perform type resolution on the various stuctures.
2 Copyright (C) 2001, 2002, 2003, 2004, 2005 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, 51 Franklin Street, Fifth Floor,Boston, MA
26 #include "arith.h" /* For gfc_compare_expr(). */
29 /* Stack to push the current if we descend into a block during
30 resolution. See resolve_branch() and resolve_code(). */
32 typedef struct code_stack
34 struct gfc_code *head, *current;
35 struct code_stack *prev;
39 static code_stack *cs_base = NULL;
42 /* Nonzero if we're inside a FORALL block */
44 static int forall_flag;
46 /* Resolve types of formal argument lists. These have to be done early so that
47 the formal argument lists of module procedures can be copied to the
48 containing module before the individual procedures are resolved
49 individually. We also resolve argument lists of procedures in interface
50 blocks because they are self-contained scoping units.
52 Since a dummy argument cannot be a non-dummy procedure, the only
53 resort left for untyped names are the IMPLICIT types. */
56 resolve_formal_arglist (gfc_symbol * proc)
58 gfc_formal_arglist *f;
62 /* TODO: Procedures whose return character length parameter is not constant
63 or assumed must also have explicit interfaces. */
64 if (proc->result != NULL)
69 if (gfc_elemental (proc)
70 || sym->attr.pointer || sym->attr.allocatable
71 || (sym->as && sym->as->rank > 0))
72 proc->attr.always_explicit = 1;
74 for (f = proc->formal; f; f = f->next)
80 /* Alternate return placeholder. */
81 if (gfc_elemental (proc))
82 gfc_error ("Alternate return specifier in elemental subroutine "
83 "'%s' at %L is not allowed", proc->name,
85 if (proc->attr.function)
86 gfc_error ("Alternate return specifier in function "
87 "'%s' at %L is not allowed", proc->name,
92 if (sym->attr.if_source != IFSRC_UNKNOWN)
93 resolve_formal_arglist (sym);
95 if (sym->attr.subroutine || sym->attr.external || sym->attr.intrinsic)
97 if (gfc_pure (proc) && !gfc_pure (sym))
100 ("Dummy procedure '%s' of PURE procedure at %L must also "
101 "be PURE", sym->name, &sym->declared_at);
105 if (gfc_elemental (proc))
108 ("Dummy procedure at %L not allowed in ELEMENTAL procedure",
116 if (sym->ts.type == BT_UNKNOWN)
118 if (!sym->attr.function || sym->result == sym)
119 gfc_set_default_type (sym, 1, sym->ns);
122 /* Set the type of the RESULT, then copy. */
123 if (sym->result->ts.type == BT_UNKNOWN)
124 gfc_set_default_type (sym->result, 1, sym->result->ns);
126 sym->ts = sym->result->ts;
128 sym->as = gfc_copy_array_spec (sym->result->as);
132 gfc_resolve_array_spec (sym->as, 0);
134 /* We can't tell if an array with dimension (:) is assumed or deferred
135 shape until we know if it has the pointer or allocatable attributes.
137 if (sym->as && sym->as->rank > 0 && sym->as->type == AS_DEFERRED
138 && !(sym->attr.pointer || sym->attr.allocatable))
140 sym->as->type = AS_ASSUMED_SHAPE;
141 for (i = 0; i < sym->as->rank; i++)
142 sym->as->lower[i] = gfc_int_expr (1);
145 if ((sym->as && sym->as->rank > 0 && sym->as->type == AS_ASSUMED_SHAPE)
146 || sym->attr.pointer || sym->attr.allocatable || sym->attr.target
147 || sym->attr.optional)
148 proc->attr.always_explicit = 1;
150 /* If the flavor is unknown at this point, it has to be a variable.
151 A procedure specification would have already set the type. */
153 if (sym->attr.flavor == FL_UNKNOWN)
154 gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, &sym->declared_at);
158 if (proc->attr.function && !sym->attr.pointer
159 && sym->attr.flavor != FL_PROCEDURE
160 && sym->attr.intent != INTENT_IN)
162 gfc_error ("Argument '%s' of pure function '%s' at %L must be "
163 "INTENT(IN)", sym->name, proc->name,
166 if (proc->attr.subroutine && !sym->attr.pointer
167 && sym->attr.intent == INTENT_UNKNOWN)
170 ("Argument '%s' of pure subroutine '%s' at %L must have "
171 "its INTENT specified", sym->name, proc->name,
176 if (gfc_elemental (proc))
181 ("Argument '%s' of elemental procedure at %L must be scalar",
182 sym->name, &sym->declared_at);
186 if (sym->attr.pointer)
189 ("Argument '%s' of elemental procedure at %L cannot have "
190 "the POINTER attribute", sym->name, &sym->declared_at);
195 /* Each dummy shall be specified to be scalar. */
196 if (proc->attr.proc == PROC_ST_FUNCTION)
201 ("Argument '%s' of statement function at %L must be scalar",
202 sym->name, &sym->declared_at);
206 if (sym->ts.type == BT_CHARACTER)
208 gfc_charlen *cl = sym->ts.cl;
209 if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
212 ("Character-valued argument '%s' of statement function at "
213 "%L must has constant length",
214 sym->name, &sym->declared_at);
223 /* Work function called when searching for symbols that have argument lists
224 associated with them. */
227 find_arglists (gfc_symbol * sym)
230 if (sym->attr.if_source == IFSRC_UNKNOWN || sym->ns != gfc_current_ns)
233 resolve_formal_arglist (sym);
237 /* Given a namespace, resolve all formal argument lists within the namespace.
241 resolve_formal_arglists (gfc_namespace * ns)
247 gfc_traverse_ns (ns, find_arglists);
252 resolve_contained_fntype (gfc_symbol * sym, gfc_namespace * ns)
256 /* If this namespace is not a function, ignore it. */
258 || !(sym->attr.function
259 || sym->attr.flavor == FL_VARIABLE))
262 /* Try to find out of what the return type is. */
263 if (sym->result != NULL)
266 if (sym->ts.type == BT_UNKNOWN)
268 t = gfc_set_default_type (sym, 0, ns);
270 if (t == FAILURE && !sym->attr.untyped)
272 gfc_error ("Contained function '%s' at %L has no IMPLICIT type",
273 sym->name, &sym->declared_at); /* FIXME */
274 sym->attr.untyped = 1;
280 /* Add NEW_ARGS to the formal argument list of PROC, taking care not to
281 introduce duplicates. */
284 merge_argument_lists (gfc_symbol *proc, gfc_formal_arglist *new_args)
286 gfc_formal_arglist *f, *new_arglist;
289 for (; new_args != NULL; new_args = new_args->next)
291 new_sym = new_args->sym;
292 /* See if ths arg is already in the formal argument list. */
293 for (f = proc->formal; f; f = f->next)
295 if (new_sym == f->sym)
302 /* Add a new argument. Argument order is not important. */
303 new_arglist = gfc_get_formal_arglist ();
304 new_arglist->sym = new_sym;
305 new_arglist->next = proc->formal;
306 proc->formal = new_arglist;
311 /* Resolve alternate entry points. If a symbol has multiple entry points we
312 create a new master symbol for the main routine, and turn the existing
313 symbol into an entry point. */
316 resolve_entries (gfc_namespace * ns)
318 gfc_namespace *old_ns;
322 char name[GFC_MAX_SYMBOL_LEN + 1];
323 static int master_count = 0;
325 if (ns->proc_name == NULL)
328 /* No need to do anything if this procedure doesn't have alternate entry
333 /* We may already have resolved alternate entry points. */
334 if (ns->proc_name->attr.entry_master)
337 /* If this isn't a procedure something has gone horribly wrong. */
338 gcc_assert (ns->proc_name->attr.flavor == FL_PROCEDURE);
340 /* Remember the current namespace. */
341 old_ns = gfc_current_ns;
345 /* Add the main entry point to the list of entry points. */
346 el = gfc_get_entry_list ();
347 el->sym = ns->proc_name;
349 el->next = ns->entries;
351 ns->proc_name->attr.entry = 1;
353 /* Add an entry statement for it. */
360 /* Create a new symbol for the master function. */
361 /* Give the internal function a unique name (within this file).
362 Also include the function name so the user has some hope of figuring
363 out what is going on. */
364 snprintf (name, GFC_MAX_SYMBOL_LEN, "master.%d.%s",
365 master_count++, ns->proc_name->name);
366 gfc_get_ha_symbol (name, &proc);
367 gcc_assert (proc != NULL);
369 gfc_add_procedure (&proc->attr, PROC_INTERNAL, proc->name, NULL);
370 if (ns->proc_name->attr.subroutine)
371 gfc_add_subroutine (&proc->attr, proc->name, NULL);
375 gfc_typespec *ts, *fts;
377 gfc_add_function (&proc->attr, proc->name, NULL);
379 fts = &ns->entries->sym->result->ts;
380 if (fts->type == BT_UNKNOWN)
381 fts = gfc_get_default_type (ns->entries->sym->result, NULL);
382 for (el = ns->entries->next; el; el = el->next)
384 ts = &el->sym->result->ts;
385 if (ts->type == BT_UNKNOWN)
386 ts = gfc_get_default_type (el->sym->result, NULL);
387 if (! gfc_compare_types (ts, fts)
388 || (el->sym->result->attr.dimension
389 != ns->entries->sym->result->attr.dimension)
390 || (el->sym->result->attr.pointer
391 != ns->entries->sym->result->attr.pointer))
397 sym = ns->entries->sym->result;
398 /* All result types the same. */
400 if (sym->attr.dimension)
401 gfc_set_array_spec (proc, gfc_copy_array_spec (sym->as), NULL);
402 if (sym->attr.pointer)
403 gfc_add_pointer (&proc->attr, NULL);
407 /* Otherwise the result will be passed through an union by
409 proc->attr.mixed_entry_master = 1;
410 for (el = ns->entries; el; el = el->next)
412 sym = el->sym->result;
413 if (sym->attr.dimension)
414 gfc_error ("%s result %s can't be an array in FUNCTION %s at %L",
415 el == ns->entries ? "FUNCTION" : "ENTRY", sym->name,
416 ns->entries->sym->name, &sym->declared_at);
417 else if (sym->attr.pointer)
418 gfc_error ("%s result %s can't be a POINTER in FUNCTION %s at %L",
419 el == ns->entries ? "FUNCTION" : "ENTRY", sym->name,
420 ns->entries->sym->name, &sym->declared_at);
424 if (ts->type == BT_UNKNOWN)
425 ts = gfc_get_default_type (sym, NULL);
429 if (ts->kind == gfc_default_integer_kind)
433 if (ts->kind == gfc_default_real_kind
434 || ts->kind == gfc_default_double_kind)
438 if (ts->kind == gfc_default_complex_kind)
442 if (ts->kind == gfc_default_logical_kind)
446 /* We will issue error elsewhere. */
453 gfc_error ("%s result %s can't be of type %s in FUNCTION %s at %L",
454 el == ns->entries ? "FUNCTION" : "ENTRY", sym->name,
455 gfc_typename (ts), ns->entries->sym->name,
461 proc->attr.access = ACCESS_PRIVATE;
462 proc->attr.entry_master = 1;
464 /* Merge all the entry point arguments. */
465 for (el = ns->entries; el; el = el->next)
466 merge_argument_lists (proc, el->sym->formal);
468 /* Use the master function for the function body. */
469 ns->proc_name = proc;
471 /* Finalize the new symbols. */
472 gfc_commit_symbols ();
474 /* Restore the original namespace. */
475 gfc_current_ns = old_ns;
479 /* Resolve contained function types. Because contained functions can call one
480 another, they have to be worked out before any of the contained procedures
483 The good news is that if a function doesn't already have a type, the only
484 way it can get one is through an IMPLICIT type or a RESULT variable, because
485 by definition contained functions are contained namespace they're contained
486 in, not in a sibling or parent namespace. */
489 resolve_contained_functions (gfc_namespace * ns)
491 gfc_namespace *child;
494 resolve_formal_arglists (ns);
496 for (child = ns->contained; child; child = child->sibling)
498 /* Resolve alternate entry points first. */
499 resolve_entries (child);
501 /* Then check function return types. */
502 resolve_contained_fntype (child->proc_name, child);
503 for (el = child->entries; el; el = el->next)
504 resolve_contained_fntype (el->sym, child);
509 /* Resolve all of the elements of a structure constructor and make sure that
510 the types are correct. */
513 resolve_structure_cons (gfc_expr * expr)
515 gfc_constructor *cons;
520 cons = expr->value.constructor;
521 /* A constructor may have references if it is the result of substituting a
522 parameter variable. In this case we just pull out the component we
525 comp = expr->ref->u.c.sym->components;
527 comp = expr->ts.derived->components;
529 for (; comp; comp = comp->next, cons = cons->next)
537 if (gfc_resolve_expr (cons->expr) == FAILURE)
543 /* If we don't have the right type, try to convert it. */
545 if (!gfc_compare_types (&cons->expr->ts, &comp->ts)
546 && gfc_convert_type (cons->expr, &comp->ts, 1) == FAILURE)
555 /****************** Expression name resolution ******************/
557 /* Returns 0 if a symbol was not declared with a type or
558 attribute declaration statement, nonzero otherwise. */
561 was_declared (gfc_symbol * sym)
567 if (!a.implicit_type && sym->ts.type != BT_UNKNOWN)
570 if (a.allocatable || a.dimension || a.dummy || a.external || a.intrinsic
571 || a.optional || a.pointer || a.save || a.target
572 || a.access != ACCESS_UNKNOWN || a.intent != INTENT_UNKNOWN)
579 /* Determine if a symbol is generic or not. */
582 generic_sym (gfc_symbol * sym)
586 if (sym->attr.generic ||
587 (sym->attr.intrinsic && gfc_generic_intrinsic (sym->name)))
590 if (was_declared (sym) || sym->ns->parent == NULL)
593 gfc_find_symbol (sym->name, sym->ns->parent, 1, &s);
595 return (s == NULL) ? 0 : generic_sym (s);
599 /* Determine if a symbol is specific or not. */
602 specific_sym (gfc_symbol * sym)
606 if (sym->attr.if_source == IFSRC_IFBODY
607 || sym->attr.proc == PROC_MODULE
608 || sym->attr.proc == PROC_INTERNAL
609 || sym->attr.proc == PROC_ST_FUNCTION
610 || (sym->attr.intrinsic &&
611 gfc_specific_intrinsic (sym->name))
612 || sym->attr.external)
615 if (was_declared (sym) || sym->ns->parent == NULL)
618 gfc_find_symbol (sym->name, sym->ns->parent, 1, &s);
620 return (s == NULL) ? 0 : specific_sym (s);
624 /* Figure out if the procedure is specific, generic or unknown. */
627 { PTYPE_GENERIC = 1, PTYPE_SPECIFIC, PTYPE_UNKNOWN }
631 procedure_kind (gfc_symbol * sym)
634 if (generic_sym (sym))
635 return PTYPE_GENERIC;
637 if (specific_sym (sym))
638 return PTYPE_SPECIFIC;
640 return PTYPE_UNKNOWN;
644 /* Resolve an actual argument list. Most of the time, this is just
645 resolving the expressions in the list.
646 The exception is that we sometimes have to decide whether arguments
647 that look like procedure arguments are really simple variable
651 resolve_actual_arglist (gfc_actual_arglist * arg)
654 gfc_symtree *parent_st;
657 for (; arg; arg = arg->next)
663 /* Check the label is a valid branching target. */
666 if (arg->label->defined == ST_LABEL_UNKNOWN)
668 gfc_error ("Label %d referenced at %L is never defined",
669 arg->label->value, &arg->label->where);
676 if (e->ts.type != BT_PROCEDURE)
678 if (gfc_resolve_expr (e) != SUCCESS)
683 /* See if the expression node should really be a variable
686 sym = e->symtree->n.sym;
688 if (sym->attr.flavor == FL_PROCEDURE
689 || sym->attr.intrinsic
690 || sym->attr.external)
693 if (sym->attr.proc == PROC_ST_FUNCTION)
695 gfc_error ("Statement function '%s' at %L is not allowed as an "
696 "actual argument", sym->name, &e->where);
699 /* If the symbol is the function that names the current (or
700 parent) scope, then we really have a variable reference. */
702 if (sym->attr.function && sym->result == sym
703 && (sym->ns->proc_name == sym
704 || (sym->ns->parent != NULL
705 && sym->ns->parent->proc_name == sym)))
711 /* See if the name is a module procedure in a parent unit. */
713 if (was_declared (sym) || sym->ns->parent == NULL)
716 if (gfc_find_sym_tree (sym->name, sym->ns->parent, 1, &parent_st))
718 gfc_error ("Symbol '%s' at %L is ambiguous", sym->name, &e->where);
722 if (parent_st == NULL)
725 sym = parent_st->n.sym;
726 e->symtree = parent_st; /* Point to the right thing. */
728 if (sym->attr.flavor == FL_PROCEDURE
729 || sym->attr.intrinsic
730 || sym->attr.external)
736 e->expr_type = EXPR_VARIABLE;
740 e->rank = sym->as->rank;
741 e->ref = gfc_get_ref ();
742 e->ref->type = REF_ARRAY;
743 e->ref->u.ar.type = AR_FULL;
744 e->ref->u.ar.as = sym->as;
752 /************* Function resolution *************/
754 /* Resolve a function call known to be generic.
755 Section 14.1.2.4.1. */
758 resolve_generic_f0 (gfc_expr * expr, gfc_symbol * sym)
762 if (sym->attr.generic)
765 gfc_search_interface (sym->generic, 0, &expr->value.function.actual);
768 expr->value.function.name = s->name;
769 expr->value.function.esym = s;
772 expr->rank = s->as->rank;
776 /* TODO: Need to search for elemental references in generic interface */
779 if (sym->attr.intrinsic)
780 return gfc_intrinsic_func_interface (expr, 0);
787 resolve_generic_f (gfc_expr * expr)
792 sym = expr->symtree->n.sym;
796 m = resolve_generic_f0 (expr, sym);
799 else if (m == MATCH_ERROR)
803 if (sym->ns->parent == NULL)
805 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
809 if (!generic_sym (sym))
813 /* Last ditch attempt. */
815 if (!gfc_generic_intrinsic (expr->symtree->n.sym->name))
817 gfc_error ("Generic function '%s' at %L is not an intrinsic function",
818 expr->symtree->n.sym->name, &expr->where);
822 m = gfc_intrinsic_func_interface (expr, 0);
827 ("Generic function '%s' at %L is not consistent with a specific "
828 "intrinsic interface", expr->symtree->n.sym->name, &expr->where);
834 /* Resolve a function call known to be specific. */
837 resolve_specific_f0 (gfc_symbol * sym, gfc_expr * expr)
841 if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
845 sym->attr.proc = PROC_DUMMY;
849 sym->attr.proc = PROC_EXTERNAL;
853 if (sym->attr.proc == PROC_MODULE
854 || sym->attr.proc == PROC_ST_FUNCTION
855 || sym->attr.proc == PROC_INTERNAL)
858 if (sym->attr.intrinsic)
860 m = gfc_intrinsic_func_interface (expr, 1);
865 ("Function '%s' at %L is INTRINSIC but is not compatible with "
866 "an intrinsic", sym->name, &expr->where);
874 gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
877 expr->value.function.name = sym->name;
878 expr->value.function.esym = sym;
880 expr->rank = sym->as->rank;
887 resolve_specific_f (gfc_expr * expr)
892 sym = expr->symtree->n.sym;
896 m = resolve_specific_f0 (sym, expr);
899 if (m == MATCH_ERROR)
902 if (sym->ns->parent == NULL)
905 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
911 gfc_error ("Unable to resolve the specific function '%s' at %L",
912 expr->symtree->n.sym->name, &expr->where);
918 /* Resolve a procedure call not known to be generic nor specific. */
921 resolve_unknown_f (gfc_expr * expr)
926 sym = expr->symtree->n.sym;
930 sym->attr.proc = PROC_DUMMY;
931 expr->value.function.name = sym->name;
935 /* See if we have an intrinsic function reference. */
937 if (gfc_intrinsic_name (sym->name, 0))
939 if (gfc_intrinsic_func_interface (expr, 1) == MATCH_YES)
944 /* The reference is to an external name. */
946 sym->attr.proc = PROC_EXTERNAL;
947 expr->value.function.name = sym->name;
948 expr->value.function.esym = expr->symtree->n.sym;
951 expr->rank = sym->as->rank;
953 /* Type of the expression is either the type of the symbol or the
954 default type of the symbol. */
957 gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
959 if (sym->ts.type != BT_UNKNOWN)
963 ts = gfc_get_default_type (sym, sym->ns);
965 if (ts->type == BT_UNKNOWN)
967 gfc_error ("Function '%s' at %L has no IMPLICIT type",
968 sym->name, &expr->where);
979 /* Figure out if a function reference is pure or not. Also set the name
980 of the function for a potential error message. Return nonzero if the
981 function is PURE, zero if not. */
984 pure_function (gfc_expr * e, const char **name)
988 if (e->value.function.esym)
990 pure = gfc_pure (e->value.function.esym);
991 *name = e->value.function.esym->name;
993 else if (e->value.function.isym)
995 pure = e->value.function.isym->pure
996 || e->value.function.isym->elemental;
997 *name = e->value.function.isym->name;
1001 /* Implicit functions are not pure. */
1003 *name = e->value.function.name;
1010 /* Resolve a function call, which means resolving the arguments, then figuring
1011 out which entity the name refers to. */
1012 /* TODO: Check procedure arguments so that an INTENT(IN) isn't passed
1013 to INTENT(OUT) or INTENT(INOUT). */
1016 resolve_function (gfc_expr * expr)
1018 gfc_actual_arglist *arg;
1022 if (resolve_actual_arglist (expr->value.function.actual) == FAILURE)
1025 /* See if function is already resolved. */
1027 if (expr->value.function.name != NULL)
1029 if (expr->ts.type == BT_UNKNOWN)
1030 expr->ts = expr->symtree->n.sym->ts;
1035 /* Apply the rules of section 14.1.2. */
1037 switch (procedure_kind (expr->symtree->n.sym))
1040 t = resolve_generic_f (expr);
1043 case PTYPE_SPECIFIC:
1044 t = resolve_specific_f (expr);
1048 t = resolve_unknown_f (expr);
1052 gfc_internal_error ("resolve_function(): bad function type");
1056 /* If the expression is still a function (it might have simplified),
1057 then we check to see if we are calling an elemental function. */
1059 if (expr->expr_type != EXPR_FUNCTION)
1062 if (expr->value.function.actual != NULL
1063 && ((expr->value.function.esym != NULL
1064 && expr->value.function.esym->attr.elemental)
1065 || (expr->value.function.isym != NULL
1066 && expr->value.function.isym->elemental)))
1069 /* The rank of an elemental is the rank of its array argument(s). */
1071 for (arg = expr->value.function.actual; arg; arg = arg->next)
1073 if (arg->expr != NULL && arg->expr->rank > 0)
1075 expr->rank = arg->expr->rank;
1081 if (!pure_function (expr, &name))
1086 ("Function reference to '%s' at %L is inside a FORALL block",
1087 name, &expr->where);
1090 else if (gfc_pure (NULL))
1092 gfc_error ("Function reference to '%s' at %L is to a non-PURE "
1093 "procedure within a PURE procedure", name, &expr->where);
1102 /************* Subroutine resolution *************/
1105 pure_subroutine (gfc_code * c, gfc_symbol * sym)
1112 gfc_error ("Subroutine call to '%s' in FORALL block at %L is not PURE",
1113 sym->name, &c->loc);
1114 else if (gfc_pure (NULL))
1115 gfc_error ("Subroutine call to '%s' at %L is not PURE", sym->name,
1121 resolve_generic_s0 (gfc_code * c, gfc_symbol * sym)
1125 if (sym->attr.generic)
1127 s = gfc_search_interface (sym->generic, 1, &c->ext.actual);
1130 c->resolved_sym = s;
1131 pure_subroutine (c, s);
1135 /* TODO: Need to search for elemental references in generic interface. */
1138 if (sym->attr.intrinsic)
1139 return gfc_intrinsic_sub_interface (c, 0);
1146 resolve_generic_s (gfc_code * c)
1151 sym = c->symtree->n.sym;
1153 m = resolve_generic_s0 (c, sym);
1156 if (m == MATCH_ERROR)
1159 if (sym->ns->parent != NULL)
1161 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
1164 m = resolve_generic_s0 (c, sym);
1167 if (m == MATCH_ERROR)
1172 /* Last ditch attempt. */
1174 if (!gfc_generic_intrinsic (sym->name))
1177 ("Generic subroutine '%s' at %L is not an intrinsic subroutine",
1178 sym->name, &c->loc);
1182 m = gfc_intrinsic_sub_interface (c, 0);
1186 gfc_error ("Generic subroutine '%s' at %L is not consistent with an "
1187 "intrinsic subroutine interface", sym->name, &c->loc);
1193 /* Resolve a subroutine call known to be specific. */
1196 resolve_specific_s0 (gfc_code * c, gfc_symbol * sym)
1200 if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
1202 if (sym->attr.dummy)
1204 sym->attr.proc = PROC_DUMMY;
1208 sym->attr.proc = PROC_EXTERNAL;
1212 if (sym->attr.proc == PROC_MODULE || sym->attr.proc == PROC_INTERNAL)
1215 if (sym->attr.intrinsic)
1217 m = gfc_intrinsic_sub_interface (c, 1);
1221 gfc_error ("Subroutine '%s' at %L is INTRINSIC but is not compatible "
1222 "with an intrinsic", sym->name, &c->loc);
1230 gfc_procedure_use (sym, &c->ext.actual, &c->loc);
1232 c->resolved_sym = sym;
1233 pure_subroutine (c, sym);
1240 resolve_specific_s (gfc_code * c)
1245 sym = c->symtree->n.sym;
1247 m = resolve_specific_s0 (c, sym);
1250 if (m == MATCH_ERROR)
1253 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
1257 m = resolve_specific_s0 (c, sym);
1260 if (m == MATCH_ERROR)
1264 gfc_error ("Unable to resolve the specific subroutine '%s' at %L",
1265 sym->name, &c->loc);
1271 /* Resolve a subroutine call not known to be generic nor specific. */
1274 resolve_unknown_s (gfc_code * c)
1278 sym = c->symtree->n.sym;
1280 if (sym->attr.dummy)
1282 sym->attr.proc = PROC_DUMMY;
1286 /* See if we have an intrinsic function reference. */
1288 if (gfc_intrinsic_name (sym->name, 1))
1290 if (gfc_intrinsic_sub_interface (c, 1) == MATCH_YES)
1295 /* The reference is to an external name. */
1298 gfc_procedure_use (sym, &c->ext.actual, &c->loc);
1300 c->resolved_sym = sym;
1302 pure_subroutine (c, sym);
1308 /* Resolve a subroutine call. Although it was tempting to use the same code
1309 for functions, subroutines and functions are stored differently and this
1310 makes things awkward. */
1313 resolve_call (gfc_code * c)
1317 if (resolve_actual_arglist (c->ext.actual) == FAILURE)
1320 if (c->resolved_sym != NULL)
1323 switch (procedure_kind (c->symtree->n.sym))
1326 t = resolve_generic_s (c);
1329 case PTYPE_SPECIFIC:
1330 t = resolve_specific_s (c);
1334 t = resolve_unknown_s (c);
1338 gfc_internal_error ("resolve_subroutine(): bad function type");
1344 /* Compare the shapes of two arrays that have non-NULL shapes. If both
1345 op1->shape and op2->shape are non-NULL return SUCCESS if their shapes
1346 match. If both op1->shape and op2->shape are non-NULL return FAILURE
1347 if their shapes do not match. If either op1->shape or op2->shape is
1348 NULL, return SUCCESS. */
1351 compare_shapes (gfc_expr * op1, gfc_expr * op2)
1358 if (op1->shape != NULL && op2->shape != NULL)
1360 for (i = 0; i < op1->rank; i++)
1362 if (mpz_cmp (op1->shape[i], op2->shape[i]) != 0)
1364 gfc_error ("Shapes for operands at %L and %L are not conformable",
1365 &op1->where, &op2->where);
1375 /* Resolve an operator expression node. This can involve replacing the
1376 operation with a user defined function call. */
1379 resolve_operator (gfc_expr * e)
1381 gfc_expr *op1, *op2;
1385 /* Resolve all subnodes-- give them types. */
1387 switch (e->value.op.operator)
1390 if (gfc_resolve_expr (e->value.op.op2) == FAILURE)
1393 /* Fall through... */
1396 case INTRINSIC_UPLUS:
1397 case INTRINSIC_UMINUS:
1398 if (gfc_resolve_expr (e->value.op.op1) == FAILURE)
1403 /* Typecheck the new node. */
1405 op1 = e->value.op.op1;
1406 op2 = e->value.op.op2;
1408 switch (e->value.op.operator)
1410 case INTRINSIC_UPLUS:
1411 case INTRINSIC_UMINUS:
1412 if (op1->ts.type == BT_INTEGER
1413 || op1->ts.type == BT_REAL
1414 || op1->ts.type == BT_COMPLEX)
1420 sprintf (msg, "Operand of unary numeric operator '%s' at %%L is %s",
1421 gfc_op2string (e->value.op.operator), gfc_typename (&e->ts));
1424 case INTRINSIC_PLUS:
1425 case INTRINSIC_MINUS:
1426 case INTRINSIC_TIMES:
1427 case INTRINSIC_DIVIDE:
1428 case INTRINSIC_POWER:
1429 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
1431 gfc_type_convert_binary (e);
1436 "Operands of binary numeric operator '%s' at %%L are %s/%s",
1437 gfc_op2string (e->value.op.operator), gfc_typename (&op1->ts),
1438 gfc_typename (&op2->ts));
1441 case INTRINSIC_CONCAT:
1442 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER)
1444 e->ts.type = BT_CHARACTER;
1445 e->ts.kind = op1->ts.kind;
1450 "Operands of string concatenation operator at %%L are %s/%s",
1451 gfc_typename (&op1->ts), gfc_typename (&op2->ts));
1457 case INTRINSIC_NEQV:
1458 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
1460 e->ts.type = BT_LOGICAL;
1461 e->ts.kind = gfc_kind_max (op1, op2);
1462 if (op1->ts.kind < e->ts.kind)
1463 gfc_convert_type (op1, &e->ts, 2);
1464 else if (op2->ts.kind < e->ts.kind)
1465 gfc_convert_type (op2, &e->ts, 2);
1469 sprintf (msg, "Operands of logical operator '%s' at %%L are %s/%s",
1470 gfc_op2string (e->value.op.operator), gfc_typename (&op1->ts),
1471 gfc_typename (&op2->ts));
1476 if (op1->ts.type == BT_LOGICAL)
1478 e->ts.type = BT_LOGICAL;
1479 e->ts.kind = op1->ts.kind;
1483 sprintf (msg, "Operand of .NOT. operator at %%L is %s",
1484 gfc_typename (&op1->ts));
1491 if (op1->ts.type == BT_COMPLEX || op2->ts.type == BT_COMPLEX)
1493 strcpy (msg, "COMPLEX quantities cannot be compared at %L");
1497 /* Fall through... */
1501 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER)
1503 e->ts.type = BT_LOGICAL;
1504 e->ts.kind = gfc_default_logical_kind;
1508 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
1510 gfc_type_convert_binary (e);
1512 e->ts.type = BT_LOGICAL;
1513 e->ts.kind = gfc_default_logical_kind;
1517 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
1518 sprintf (msg, "Logicals at %%L must be compared with %s instead of %s",
1519 e->value.op.operator == INTRINSIC_EQ ? ".EQV." : ".NEQV.",
1520 gfc_op2string (e->value.op.operator));
1522 sprintf (msg, "Operands of comparison operator '%s' at %%L are %s/%s",
1523 gfc_op2string (e->value.op.operator), gfc_typename (&op1->ts),
1524 gfc_typename (&op2->ts));
1528 case INTRINSIC_USER:
1530 sprintf (msg, "Operand of user operator '%s' at %%L is %s",
1531 e->value.op.uop->name, gfc_typename (&op1->ts));
1533 sprintf (msg, "Operands of user operator '%s' at %%L are %s/%s",
1534 e->value.op.uop->name, gfc_typename (&op1->ts),
1535 gfc_typename (&op2->ts));
1540 gfc_internal_error ("resolve_operator(): Bad intrinsic");
1543 /* Deal with arrayness of an operand through an operator. */
1547 switch (e->value.op.operator)
1549 case INTRINSIC_PLUS:
1550 case INTRINSIC_MINUS:
1551 case INTRINSIC_TIMES:
1552 case INTRINSIC_DIVIDE:
1553 case INTRINSIC_POWER:
1554 case INTRINSIC_CONCAT:
1558 case INTRINSIC_NEQV:
1566 if (op1->rank == 0 && op2->rank == 0)
1569 if (op1->rank == 0 && op2->rank != 0)
1571 e->rank = op2->rank;
1573 if (e->shape == NULL)
1574 e->shape = gfc_copy_shape (op2->shape, op2->rank);
1577 if (op1->rank != 0 && op2->rank == 0)
1579 e->rank = op1->rank;
1581 if (e->shape == NULL)
1582 e->shape = gfc_copy_shape (op1->shape, op1->rank);
1585 if (op1->rank != 0 && op2->rank != 0)
1587 if (op1->rank == op2->rank)
1589 e->rank = op1->rank;
1590 if (e->shape == NULL)
1592 t = compare_shapes(op1, op2);
1596 e->shape = gfc_copy_shape (op1->shape, op1->rank);
1601 gfc_error ("Inconsistent ranks for operator at %L and %L",
1602 &op1->where, &op2->where);
1605 /* Allow higher level expressions to work. */
1613 case INTRINSIC_UPLUS:
1614 case INTRINSIC_UMINUS:
1615 e->rank = op1->rank;
1617 if (e->shape == NULL)
1618 e->shape = gfc_copy_shape (op1->shape, op1->rank);
1620 /* Simply copy arrayness attribute */
1627 /* Attempt to simplify the expression. */
1629 t = gfc_simplify_expr (e, 0);
1634 if (gfc_extend_expr (e) == SUCCESS)
1637 gfc_error (msg, &e->where);
1643 /************** Array resolution subroutines **************/
1647 { CMP_LT, CMP_EQ, CMP_GT, CMP_UNKNOWN }
1650 /* Compare two integer expressions. */
1653 compare_bound (gfc_expr * a, gfc_expr * b)
1657 if (a == NULL || a->expr_type != EXPR_CONSTANT
1658 || b == NULL || b->expr_type != EXPR_CONSTANT)
1661 if (a->ts.type != BT_INTEGER || b->ts.type != BT_INTEGER)
1662 gfc_internal_error ("compare_bound(): Bad expression");
1664 i = mpz_cmp (a->value.integer, b->value.integer);
1674 /* Compare an integer expression with an integer. */
1677 compare_bound_int (gfc_expr * a, int b)
1681 if (a == NULL || a->expr_type != EXPR_CONSTANT)
1684 if (a->ts.type != BT_INTEGER)
1685 gfc_internal_error ("compare_bound_int(): Bad expression");
1687 i = mpz_cmp_si (a->value.integer, b);
1697 /* Compare a single dimension of an array reference to the array
1701 check_dimension (int i, gfc_array_ref * ar, gfc_array_spec * as)
1704 /* Given start, end and stride values, calculate the minimum and
1705 maximum referenced indexes. */
1713 if (compare_bound (ar->start[i], as->lower[i]) == CMP_LT)
1715 if (compare_bound (ar->start[i], as->upper[i]) == CMP_GT)
1721 if (compare_bound_int (ar->stride[i], 0) == CMP_EQ)
1723 gfc_error ("Illegal stride of zero at %L", &ar->c_where[i]);
1727 if (compare_bound (ar->start[i], as->lower[i]) == CMP_LT)
1729 if (compare_bound (ar->start[i], as->upper[i]) == CMP_GT)
1732 /* TODO: Possibly, we could warn about end[i] being out-of-bound although
1733 it is legal (see 6.2.2.3.1). */
1738 gfc_internal_error ("check_dimension(): Bad array reference");
1744 gfc_warning ("Array reference at %L is out of bounds", &ar->c_where[i]);
1749 /* Compare an array reference with an array specification. */
1752 compare_spec_to_ref (gfc_array_ref * ar)
1759 /* TODO: Full array sections are only allowed as actual parameters. */
1760 if (as->type == AS_ASSUMED_SIZE
1761 && (/*ar->type == AR_FULL
1762 ||*/ (ar->type == AR_SECTION
1763 && ar->dimen_type[i] == DIMEN_RANGE && ar->end[i] == NULL)))
1765 gfc_error ("Rightmost upper bound of assumed size array section"
1766 " not specified at %L", &ar->where);
1770 if (ar->type == AR_FULL)
1773 if (as->rank != ar->dimen)
1775 gfc_error ("Rank mismatch in array reference at %L (%d/%d)",
1776 &ar->where, ar->dimen, as->rank);
1780 for (i = 0; i < as->rank; i++)
1781 if (check_dimension (i, ar, as) == FAILURE)
1788 /* Resolve one part of an array index. */
1791 gfc_resolve_index (gfc_expr * index, int check_scalar)
1798 if (gfc_resolve_expr (index) == FAILURE)
1801 if (check_scalar && index->rank != 0)
1803 gfc_error ("Array index at %L must be scalar", &index->where);
1807 if (index->ts.type != BT_INTEGER && index->ts.type != BT_REAL)
1809 gfc_error ("Array index at %L must be of INTEGER type",
1814 if (index->ts.type == BT_REAL)
1815 if (gfc_notify_std (GFC_STD_GNU, "Extension: REAL array index at %L",
1816 &index->where) == FAILURE)
1819 if (index->ts.kind != gfc_index_integer_kind
1820 || index->ts.type != BT_INTEGER)
1822 ts.type = BT_INTEGER;
1823 ts.kind = gfc_index_integer_kind;
1825 gfc_convert_type_warn (index, &ts, 2, 0);
1832 /* Given an expression that contains array references, update those array
1833 references to point to the right array specifications. While this is
1834 filled in during matching, this information is difficult to save and load
1835 in a module, so we take care of it here.
1837 The idea here is that the original array reference comes from the
1838 base symbol. We traverse the list of reference structures, setting
1839 the stored reference to references. Component references can
1840 provide an additional array specification. */
1843 find_array_spec (gfc_expr * e)
1849 as = e->symtree->n.sym->as;
1850 c = e->symtree->n.sym->components;
1852 for (ref = e->ref; ref; ref = ref->next)
1857 gfc_internal_error ("find_array_spec(): Missing spec");
1864 for (; c; c = c->next)
1865 if (c == ref->u.c.component)
1869 gfc_internal_error ("find_array_spec(): Component not found");
1874 gfc_internal_error ("find_array_spec(): unused as(1)");
1878 c = c->ts.derived->components;
1886 gfc_internal_error ("find_array_spec(): unused as(2)");
1890 /* Resolve an array reference. */
1893 resolve_array_ref (gfc_array_ref * ar)
1895 int i, check_scalar;
1897 for (i = 0; i < ar->dimen; i++)
1899 check_scalar = ar->dimen_type[i] == DIMEN_RANGE;
1901 if (gfc_resolve_index (ar->start[i], check_scalar) == FAILURE)
1903 if (gfc_resolve_index (ar->end[i], check_scalar) == FAILURE)
1905 if (gfc_resolve_index (ar->stride[i], check_scalar) == FAILURE)
1908 if (ar->dimen_type[i] == DIMEN_UNKNOWN)
1909 switch (ar->start[i]->rank)
1912 ar->dimen_type[i] = DIMEN_ELEMENT;
1916 ar->dimen_type[i] = DIMEN_VECTOR;
1920 gfc_error ("Array index at %L is an array of rank %d",
1921 &ar->c_where[i], ar->start[i]->rank);
1926 /* If the reference type is unknown, figure out what kind it is. */
1928 if (ar->type == AR_UNKNOWN)
1930 ar->type = AR_ELEMENT;
1931 for (i = 0; i < ar->dimen; i++)
1932 if (ar->dimen_type[i] == DIMEN_RANGE
1933 || ar->dimen_type[i] == DIMEN_VECTOR)
1935 ar->type = AR_SECTION;
1940 if (compare_spec_to_ref (ar) == FAILURE)
1948 resolve_substring (gfc_ref * ref)
1951 if (ref->u.ss.start != NULL)
1953 if (gfc_resolve_expr (ref->u.ss.start) == FAILURE)
1956 if (ref->u.ss.start->ts.type != BT_INTEGER)
1958 gfc_error ("Substring start index at %L must be of type INTEGER",
1959 &ref->u.ss.start->where);
1963 if (ref->u.ss.start->rank != 0)
1965 gfc_error ("Substring start index at %L must be scalar",
1966 &ref->u.ss.start->where);
1970 if (compare_bound_int (ref->u.ss.start, 1) == CMP_LT)
1972 gfc_error ("Substring start index at %L is less than one",
1973 &ref->u.ss.start->where);
1978 if (ref->u.ss.end != NULL)
1980 if (gfc_resolve_expr (ref->u.ss.end) == FAILURE)
1983 if (ref->u.ss.end->ts.type != BT_INTEGER)
1985 gfc_error ("Substring end index at %L must be of type INTEGER",
1986 &ref->u.ss.end->where);
1990 if (ref->u.ss.end->rank != 0)
1992 gfc_error ("Substring end index at %L must be scalar",
1993 &ref->u.ss.end->where);
1997 if (ref->u.ss.length != NULL
1998 && compare_bound (ref->u.ss.end, ref->u.ss.length->length) == CMP_GT)
2000 gfc_error ("Substring end index at %L is out of bounds",
2001 &ref->u.ss.start->where);
2010 /* Resolve subtype references. */
2013 resolve_ref (gfc_expr * expr)
2015 int current_part_dimension, n_components, seen_part_dimension;
2018 for (ref = expr->ref; ref; ref = ref->next)
2019 if (ref->type == REF_ARRAY && ref->u.ar.as == NULL)
2021 find_array_spec (expr);
2025 for (ref = expr->ref; ref; ref = ref->next)
2029 if (resolve_array_ref (&ref->u.ar) == FAILURE)
2037 resolve_substring (ref);
2041 /* Check constraints on part references. */
2043 current_part_dimension = 0;
2044 seen_part_dimension = 0;
2047 for (ref = expr->ref; ref; ref = ref->next)
2052 switch (ref->u.ar.type)
2056 current_part_dimension = 1;
2060 current_part_dimension = 0;
2064 gfc_internal_error ("resolve_ref(): Bad array reference");
2070 if ((current_part_dimension || seen_part_dimension)
2071 && ref->u.c.component->pointer)
2074 ("Component to the right of a part reference with nonzero "
2075 "rank must not have the POINTER attribute at %L",
2087 if (((ref->type == REF_COMPONENT && n_components > 1)
2088 || ref->next == NULL)
2089 && current_part_dimension
2090 && seen_part_dimension)
2093 gfc_error ("Two or more part references with nonzero rank must "
2094 "not be specified at %L", &expr->where);
2098 if (ref->type == REF_COMPONENT)
2100 if (current_part_dimension)
2101 seen_part_dimension = 1;
2103 /* reset to make sure */
2104 current_part_dimension = 0;
2112 /* Given an expression, determine its shape. This is easier than it sounds.
2113 Leaves the shape array NULL if it is not possible to determine the shape. */
2116 expression_shape (gfc_expr * e)
2118 mpz_t array[GFC_MAX_DIMENSIONS];
2121 if (e->rank == 0 || e->shape != NULL)
2124 for (i = 0; i < e->rank; i++)
2125 if (gfc_array_dimen_size (e, i, &array[i]) == FAILURE)
2128 e->shape = gfc_get_shape (e->rank);
2130 memcpy (e->shape, array, e->rank * sizeof (mpz_t));
2135 for (i--; i >= 0; i--)
2136 mpz_clear (array[i]);
2140 /* Given a variable expression node, compute the rank of the expression by
2141 examining the base symbol and any reference structures it may have. */
2144 expression_rank (gfc_expr * e)
2151 if (e->expr_type == EXPR_ARRAY)
2153 /* Constructors can have a rank different from one via RESHAPE(). */
2155 if (e->symtree == NULL)
2161 e->rank = (e->symtree->n.sym->as == NULL)
2162 ? 0 : e->symtree->n.sym->as->rank;
2168 for (ref = e->ref; ref; ref = ref->next)
2170 if (ref->type != REF_ARRAY)
2173 if (ref->u.ar.type == AR_FULL)
2175 rank = ref->u.ar.as->rank;
2179 if (ref->u.ar.type == AR_SECTION)
2181 /* Figure out the rank of the section. */
2183 gfc_internal_error ("expression_rank(): Two array specs");
2185 for (i = 0; i < ref->u.ar.dimen; i++)
2186 if (ref->u.ar.dimen_type[i] == DIMEN_RANGE
2187 || ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
2197 expression_shape (e);
2201 /* Resolve a variable expression. */
2204 resolve_variable (gfc_expr * e)
2208 if (e->ref && resolve_ref (e) == FAILURE)
2211 if (e->symtree == NULL)
2214 sym = e->symtree->n.sym;
2215 if (sym->attr.flavor == FL_PROCEDURE && !sym->attr.function)
2217 e->ts.type = BT_PROCEDURE;
2221 if (sym->ts.type != BT_UNKNOWN)
2222 gfc_variable_attr (e, &e->ts);
2225 /* Must be a simple variable reference. */
2226 if (gfc_set_default_type (sym, 1, NULL) == FAILURE)
2235 /* Resolve an expression. That is, make sure that types of operands agree
2236 with their operators, intrinsic operators are converted to function calls
2237 for overloaded types and unresolved function references are resolved. */
2240 gfc_resolve_expr (gfc_expr * e)
2247 switch (e->expr_type)
2250 t = resolve_operator (e);
2254 t = resolve_function (e);
2258 t = resolve_variable (e);
2260 expression_rank (e);
2263 case EXPR_SUBSTRING:
2264 t = resolve_ref (e);
2274 if (resolve_ref (e) == FAILURE)
2277 t = gfc_resolve_array_constructor (e);
2278 /* Also try to expand a constructor. */
2281 expression_rank (e);
2282 gfc_expand_constructor (e);
2287 case EXPR_STRUCTURE:
2288 t = resolve_ref (e);
2292 t = resolve_structure_cons (e);
2296 t = gfc_simplify_expr (e, 0);
2300 gfc_internal_error ("gfc_resolve_expr(): Bad expression type");
2307 /* Resolve an expression from an iterator. They must be scalar and have
2308 INTEGER or (optionally) REAL type. */
2311 gfc_resolve_iterator_expr (gfc_expr * expr, bool real_ok, const char * name)
2313 if (gfc_resolve_expr (expr) == FAILURE)
2316 if (expr->rank != 0)
2318 gfc_error ("%s at %L must be a scalar", name, &expr->where);
2322 if (!(expr->ts.type == BT_INTEGER
2323 || (expr->ts.type == BT_REAL && real_ok)))
2325 gfc_error ("%s at %L must be INTEGER%s",
2328 real_ok ? " or REAL" : "");
2335 /* Resolve the expressions in an iterator structure. If REAL_OK is
2336 false allow only INTEGER type iterators, otherwise allow REAL types. */
2339 gfc_resolve_iterator (gfc_iterator * iter, bool real_ok)
2342 if (iter->var->ts.type == BT_REAL)
2343 gfc_notify_std (GFC_STD_F95_DEL,
2344 "Obsolete: REAL DO loop iterator at %L",
2347 if (gfc_resolve_iterator_expr (iter->var, real_ok, "Loop variable")
2351 if (gfc_pure (NULL) && gfc_impure_variable (iter->var->symtree->n.sym))
2353 gfc_error ("Cannot assign to loop variable in PURE procedure at %L",
2358 if (gfc_resolve_iterator_expr (iter->start, real_ok,
2359 "Start expression in DO loop") == FAILURE)
2362 if (gfc_resolve_iterator_expr (iter->end, real_ok,
2363 "End expression in DO loop") == FAILURE)
2366 if (gfc_resolve_iterator_expr (iter->step, real_ok,
2367 "Step expression in DO loop") == FAILURE)
2370 if (iter->step->expr_type == EXPR_CONSTANT)
2372 if ((iter->step->ts.type == BT_INTEGER
2373 && mpz_cmp_ui (iter->step->value.integer, 0) == 0)
2374 || (iter->step->ts.type == BT_REAL
2375 && mpfr_sgn (iter->step->value.real) == 0))
2377 gfc_error ("Step expression in DO loop at %L cannot be zero",
2378 &iter->step->where);
2383 /* Convert start, end, and step to the same type as var. */
2384 if (iter->start->ts.kind != iter->var->ts.kind
2385 || iter->start->ts.type != iter->var->ts.type)
2386 gfc_convert_type (iter->start, &iter->var->ts, 2);
2388 if (iter->end->ts.kind != iter->var->ts.kind
2389 || iter->end->ts.type != iter->var->ts.type)
2390 gfc_convert_type (iter->end, &iter->var->ts, 2);
2392 if (iter->step->ts.kind != iter->var->ts.kind
2393 || iter->step->ts.type != iter->var->ts.type)
2394 gfc_convert_type (iter->step, &iter->var->ts, 2);
2400 /* Resolve a list of FORALL iterators. */
2403 resolve_forall_iterators (gfc_forall_iterator * iter)
2408 if (gfc_resolve_expr (iter->var) == SUCCESS
2409 && iter->var->ts.type != BT_INTEGER)
2410 gfc_error ("FORALL Iteration variable at %L must be INTEGER",
2413 if (gfc_resolve_expr (iter->start) == SUCCESS
2414 && iter->start->ts.type != BT_INTEGER)
2415 gfc_error ("FORALL start expression at %L must be INTEGER",
2416 &iter->start->where);
2417 if (iter->var->ts.kind != iter->start->ts.kind)
2418 gfc_convert_type (iter->start, &iter->var->ts, 2);
2420 if (gfc_resolve_expr (iter->end) == SUCCESS
2421 && iter->end->ts.type != BT_INTEGER)
2422 gfc_error ("FORALL end expression at %L must be INTEGER",
2424 if (iter->var->ts.kind != iter->end->ts.kind)
2425 gfc_convert_type (iter->end, &iter->var->ts, 2);
2427 if (gfc_resolve_expr (iter->stride) == SUCCESS
2428 && iter->stride->ts.type != BT_INTEGER)
2429 gfc_error ("FORALL Stride expression at %L must be INTEGER",
2430 &iter->stride->where);
2431 if (iter->var->ts.kind != iter->stride->ts.kind)
2432 gfc_convert_type (iter->stride, &iter->var->ts, 2);
2439 /* Given a pointer to a symbol that is a derived type, see if any components
2440 have the POINTER attribute. The search is recursive if necessary.
2441 Returns zero if no pointer components are found, nonzero otherwise. */
2444 derived_pointer (gfc_symbol * sym)
2448 for (c = sym->components; c; c = c->next)
2453 if (c->ts.type == BT_DERIVED && derived_pointer (c->ts.derived))
2461 /* Resolve the argument of a deallocate expression. The expression must be
2462 a pointer or a full array. */
2465 resolve_deallocate_expr (gfc_expr * e)
2467 symbol_attribute attr;
2471 if (gfc_resolve_expr (e) == FAILURE)
2474 attr = gfc_expr_attr (e);
2478 if (e->expr_type != EXPR_VARIABLE)
2481 allocatable = e->symtree->n.sym->attr.allocatable;
2482 for (ref = e->ref; ref; ref = ref->next)
2486 if (ref->u.ar.type != AR_FULL)
2491 allocatable = (ref->u.c.component->as != NULL
2492 && ref->u.c.component->as->type == AS_DEFERRED);
2500 if (allocatable == 0)
2503 gfc_error ("Expression in DEALLOCATE statement at %L must be "
2504 "ALLOCATABLE or a POINTER", &e->where);
2511 /* Resolve the expression in an ALLOCATE statement, doing the additional
2512 checks to see whether the expression is OK or not. The expression must
2513 have a trailing array reference that gives the size of the array. */
2516 resolve_allocate_expr (gfc_expr * e)
2518 int i, pointer, allocatable, dimension;
2519 symbol_attribute attr;
2520 gfc_ref *ref, *ref2;
2523 if (gfc_resolve_expr (e) == FAILURE)
2526 /* Make sure the expression is allocatable or a pointer. If it is
2527 pointer, the next-to-last reference must be a pointer. */
2531 if (e->expr_type != EXPR_VARIABLE)
2535 attr = gfc_expr_attr (e);
2536 pointer = attr.pointer;
2537 dimension = attr.dimension;
2542 allocatable = e->symtree->n.sym->attr.allocatable;
2543 pointer = e->symtree->n.sym->attr.pointer;
2544 dimension = e->symtree->n.sym->attr.dimension;
2546 for (ref = e->ref; ref; ref2 = ref, ref = ref->next)
2550 if (ref->next != NULL)
2555 allocatable = (ref->u.c.component->as != NULL
2556 && ref->u.c.component->as->type == AS_DEFERRED);
2558 pointer = ref->u.c.component->pointer;
2559 dimension = ref->u.c.component->dimension;
2569 if (allocatable == 0 && pointer == 0)
2571 gfc_error ("Expression in ALLOCATE statement at %L must be "
2572 "ALLOCATABLE or a POINTER", &e->where);
2576 if (pointer && dimension == 0)
2579 /* Make sure the next-to-last reference node is an array specification. */
2581 if (ref2 == NULL || ref2->type != REF_ARRAY || ref2->u.ar.type == AR_FULL)
2583 gfc_error ("Array specification required in ALLOCATE statement "
2584 "at %L", &e->where);
2588 if (ref2->u.ar.type == AR_ELEMENT)
2591 /* Make sure that the array section reference makes sense in the
2592 context of an ALLOCATE specification. */
2596 for (i = 0; i < ar->dimen; i++)
2597 switch (ar->dimen_type[i])
2603 if (ar->start[i] != NULL
2604 && ar->end[i] != NULL
2605 && ar->stride[i] == NULL)
2608 /* Fall Through... */
2612 gfc_error ("Bad array specification in ALLOCATE statement at %L",
2621 /************ SELECT CASE resolution subroutines ************/
2623 /* Callback function for our mergesort variant. Determines interval
2624 overlaps for CASEs. Return <0 if op1 < op2, 0 for overlap, >0 for
2625 op1 > op2. Assumes we're not dealing with the default case.
2626 We have op1 = (:L), (K:L) or (K:) and op2 = (:N), (M:N) or (M:).
2627 There are nine situations to check. */
2630 compare_cases (const gfc_case * op1, const gfc_case * op2)
2634 if (op1->low == NULL) /* op1 = (:L) */
2636 /* op2 = (:N), so overlap. */
2638 /* op2 = (M:) or (M:N), L < M */
2639 if (op2->low != NULL
2640 && gfc_compare_expr (op1->high, op2->low) < 0)
2643 else if (op1->high == NULL) /* op1 = (K:) */
2645 /* op2 = (M:), so overlap. */
2647 /* op2 = (:N) or (M:N), K > N */
2648 if (op2->high != NULL
2649 && gfc_compare_expr (op1->low, op2->high) > 0)
2652 else /* op1 = (K:L) */
2654 if (op2->low == NULL) /* op2 = (:N), K > N */
2655 retval = (gfc_compare_expr (op1->low, op2->high) > 0) ? 1 : 0;
2656 else if (op2->high == NULL) /* op2 = (M:), L < M */
2657 retval = (gfc_compare_expr (op1->high, op2->low) < 0) ? -1 : 0;
2658 else /* op2 = (M:N) */
2662 if (gfc_compare_expr (op1->high, op2->low) < 0)
2665 else if (gfc_compare_expr (op1->low, op2->high) > 0)
2674 /* Merge-sort a double linked case list, detecting overlap in the
2675 process. LIST is the head of the double linked case list before it
2676 is sorted. Returns the head of the sorted list if we don't see any
2677 overlap, or NULL otherwise. */
2680 check_case_overlap (gfc_case * list)
2682 gfc_case *p, *q, *e, *tail;
2683 int insize, nmerges, psize, qsize, cmp, overlap_seen;
2685 /* If the passed list was empty, return immediately. */
2692 /* Loop unconditionally. The only exit from this loop is a return
2693 statement, when we've finished sorting the case list. */
2700 /* Count the number of merges we do in this pass. */
2703 /* Loop while there exists a merge to be done. */
2708 /* Count this merge. */
2711 /* Cut the list in two pieces by stepping INSIZE places
2712 forward in the list, starting from P. */
2715 for (i = 0; i < insize; i++)
2724 /* Now we have two lists. Merge them! */
2725 while (psize > 0 || (qsize > 0 && q != NULL))
2728 /* See from which the next case to merge comes from. */
2731 /* P is empty so the next case must come from Q. */
2736 else if (qsize == 0 || q == NULL)
2745 cmp = compare_cases (p, q);
2748 /* The whole case range for P is less than the
2756 /* The whole case range for Q is greater than
2757 the case range for P. */
2764 /* The cases overlap, or they are the same
2765 element in the list. Either way, we must
2766 issue an error and get the next case from P. */
2767 /* FIXME: Sort P and Q by line number. */
2768 gfc_error ("CASE label at %L overlaps with CASE "
2769 "label at %L", &p->where, &q->where);
2777 /* Add the next element to the merged list. */
2786 /* P has now stepped INSIZE places along, and so has Q. So
2787 they're the same. */
2792 /* If we have done only one merge or none at all, we've
2793 finished sorting the cases. */
2802 /* Otherwise repeat, merging lists twice the size. */
2808 /* Check to see if an expression is suitable for use in a CASE statement.
2809 Makes sure that all case expressions are scalar constants of the same
2810 type. Return FAILURE if anything is wrong. */
2813 validate_case_label_expr (gfc_expr * e, gfc_expr * case_expr)
2815 if (e == NULL) return SUCCESS;
2817 if (e->ts.type != case_expr->ts.type)
2819 gfc_error ("Expression in CASE statement at %L must be of type %s",
2820 &e->where, gfc_basic_typename (case_expr->ts.type));
2824 /* C805 (R808) For a given case-construct, each case-value shall be of
2825 the same type as case-expr. For character type, length differences
2826 are allowed, but the kind type parameters shall be the same. */
2828 if (case_expr->ts.type == BT_CHARACTER && e->ts.kind != case_expr->ts.kind)
2830 gfc_error("Expression in CASE statement at %L must be kind %d",
2831 &e->where, case_expr->ts.kind);
2835 /* Convert the case value kind to that of case expression kind, if needed.
2836 FIXME: Should a warning be issued? */
2837 if (e->ts.kind != case_expr->ts.kind)
2838 gfc_convert_type_warn (e, &case_expr->ts, 2, 0);
2842 gfc_error ("Expression in CASE statement at %L must be scalar",
2851 /* Given a completely parsed select statement, we:
2853 - Validate all expressions and code within the SELECT.
2854 - Make sure that the selection expression is not of the wrong type.
2855 - Make sure that no case ranges overlap.
2856 - Eliminate unreachable cases and unreachable code resulting from
2857 removing case labels.
2859 The standard does allow unreachable cases, e.g. CASE (5:3). But
2860 they are a hassle for code generation, and to prevent that, we just
2861 cut them out here. This is not necessary for overlapping cases
2862 because they are illegal and we never even try to generate code.
2864 We have the additional caveat that a SELECT construct could have
2865 been a computed GOTO in the source code. Fortunately we can fairly
2866 easily work around that here: The case_expr for a "real" SELECT CASE
2867 is in code->expr1, but for a computed GOTO it is in code->expr2. All
2868 we have to do is make sure that the case_expr is a scalar integer
2872 resolve_select (gfc_code * code)
2875 gfc_expr *case_expr;
2876 gfc_case *cp, *default_case, *tail, *head;
2877 int seen_unreachable;
2882 if (code->expr == NULL)
2884 /* This was actually a computed GOTO statement. */
2885 case_expr = code->expr2;
2886 if (case_expr->ts.type != BT_INTEGER
2887 || case_expr->rank != 0)
2888 gfc_error ("Selection expression in computed GOTO statement "
2889 "at %L must be a scalar integer expression",
2892 /* Further checking is not necessary because this SELECT was built
2893 by the compiler, so it should always be OK. Just move the
2894 case_expr from expr2 to expr so that we can handle computed
2895 GOTOs as normal SELECTs from here on. */
2896 code->expr = code->expr2;
2901 case_expr = code->expr;
2903 type = case_expr->ts.type;
2904 if (type != BT_LOGICAL && type != BT_INTEGER && type != BT_CHARACTER)
2906 gfc_error ("Argument of SELECT statement at %L cannot be %s",
2907 &case_expr->where, gfc_typename (&case_expr->ts));
2909 /* Punt. Going on here just produce more garbage error messages. */
2913 if (case_expr->rank != 0)
2915 gfc_error ("Argument of SELECT statement at %L must be a scalar "
2916 "expression", &case_expr->where);
2922 /* PR 19168 has a long discussion concerning a mismatch of the kinds
2923 of the SELECT CASE expression and its CASE values. Walk the lists
2924 of case values, and if we find a mismatch, promote case_expr to
2925 the appropriate kind. */
2927 if (type == BT_LOGICAL || type == BT_INTEGER)
2929 for (body = code->block; body; body = body->block)
2931 /* Walk the case label list. */
2932 for (cp = body->ext.case_list; cp; cp = cp->next)
2934 /* Intercept the DEFAULT case. It does not have a kind. */
2935 if (cp->low == NULL && cp->high == NULL)
2938 /* Unreachable case ranges are discarded, so ignore. */
2939 if (cp->low != NULL && cp->high != NULL
2940 && cp->low != cp->high
2941 && gfc_compare_expr (cp->low, cp->high) > 0)
2944 /* FIXME: Should a warning be issued? */
2946 && case_expr->ts.kind != gfc_kind_max(case_expr, cp->low))
2947 gfc_convert_type_warn (case_expr, &cp->low->ts, 2, 0);
2949 if (cp->high != NULL
2950 && case_expr->ts.kind != gfc_kind_max(case_expr, cp->high))
2951 gfc_convert_type_warn (case_expr, &cp->high->ts, 2, 0);
2956 /* Assume there is no DEFAULT case. */
2957 default_case = NULL;
2961 for (body = code->block; body; body = body->block)
2963 /* Assume the CASE list is OK, and all CASE labels can be matched. */
2965 seen_unreachable = 0;
2967 /* Walk the case label list, making sure that all case labels
2969 for (cp = body->ext.case_list; cp; cp = cp->next)
2971 /* Count the number of cases in the whole construct. */
2974 /* Intercept the DEFAULT case. */
2975 if (cp->low == NULL && cp->high == NULL)
2977 if (default_case != NULL)
2979 gfc_error ("The DEFAULT CASE at %L cannot be followed "
2980 "by a second DEFAULT CASE at %L",
2981 &default_case->where, &cp->where);
2992 /* Deal with single value cases and case ranges. Errors are
2993 issued from the validation function. */
2994 if(validate_case_label_expr (cp->low, case_expr) != SUCCESS
2995 || validate_case_label_expr (cp->high, case_expr) != SUCCESS)
3001 if (type == BT_LOGICAL
3002 && ((cp->low == NULL || cp->high == NULL)
3003 || cp->low != cp->high))
3006 ("Logical range in CASE statement at %L is not allowed",
3012 if (cp->low != NULL && cp->high != NULL
3013 && cp->low != cp->high
3014 && gfc_compare_expr (cp->low, cp->high) > 0)
3016 if (gfc_option.warn_surprising)
3017 gfc_warning ("Range specification at %L can never "
3018 "be matched", &cp->where);
3020 cp->unreachable = 1;
3021 seen_unreachable = 1;
3025 /* If the case range can be matched, it can also overlap with
3026 other cases. To make sure it does not, we put it in a
3027 double linked list here. We sort that with a merge sort
3028 later on to detect any overlapping cases. */
3032 head->right = head->left = NULL;
3037 tail->right->left = tail;
3044 /* It there was a failure in the previous case label, give up
3045 for this case label list. Continue with the next block. */
3049 /* See if any case labels that are unreachable have been seen.
3050 If so, we eliminate them. This is a bit of a kludge because
3051 the case lists for a single case statement (label) is a
3052 single forward linked lists. */
3053 if (seen_unreachable)
3055 /* Advance until the first case in the list is reachable. */
3056 while (body->ext.case_list != NULL
3057 && body->ext.case_list->unreachable)
3059 gfc_case *n = body->ext.case_list;
3060 body->ext.case_list = body->ext.case_list->next;
3062 gfc_free_case_list (n);
3065 /* Strip all other unreachable cases. */
3066 if (body->ext.case_list)
3068 for (cp = body->ext.case_list; cp->next; cp = cp->next)
3070 if (cp->next->unreachable)
3072 gfc_case *n = cp->next;
3073 cp->next = cp->next->next;
3075 gfc_free_case_list (n);
3082 /* See if there were overlapping cases. If the check returns NULL,
3083 there was overlap. In that case we don't do anything. If head
3084 is non-NULL, we prepend the DEFAULT case. The sorted list can
3085 then used during code generation for SELECT CASE constructs with
3086 a case expression of a CHARACTER type. */
3089 head = check_case_overlap (head);
3091 /* Prepend the default_case if it is there. */
3092 if (head != NULL && default_case)
3094 default_case->left = NULL;
3095 default_case->right = head;
3096 head->left = default_case;
3100 /* Eliminate dead blocks that may be the result if we've seen
3101 unreachable case labels for a block. */
3102 for (body = code; body && body->block; body = body->block)
3104 if (body->block->ext.case_list == NULL)
3106 /* Cut the unreachable block from the code chain. */
3107 gfc_code *c = body->block;
3108 body->block = c->block;
3110 /* Kill the dead block, but not the blocks below it. */
3112 gfc_free_statements (c);
3116 /* More than two cases is legal but insane for logical selects.
3117 Issue a warning for it. */
3118 if (gfc_option.warn_surprising && type == BT_LOGICAL
3120 gfc_warning ("Logical SELECT CASE block at %L has more that two cases",
3125 /* Resolve a transfer statement. This is making sure that:
3126 -- a derived type being transferred has only non-pointer components
3127 -- a derived type being transferred doesn't have private components
3128 -- we're not trying to transfer a whole assumed size array. */
3131 resolve_transfer (gfc_code * code)
3140 if (exp->expr_type != EXPR_VARIABLE)
3143 sym = exp->symtree->n.sym;
3146 /* Go to actual component transferred. */
3147 for (ref = code->expr->ref; ref; ref = ref->next)
3148 if (ref->type == REF_COMPONENT)
3149 ts = &ref->u.c.component->ts;
3151 if (ts->type == BT_DERIVED)
3153 /* Check that transferred derived type doesn't contain POINTER
3155 if (derived_pointer (ts->derived))
3157 gfc_error ("Data transfer element at %L cannot have "
3158 "POINTER components", &code->loc);
3162 if (ts->derived->component_access == ACCESS_PRIVATE)
3164 gfc_error ("Data transfer element at %L cannot have "
3165 "PRIVATE components",&code->loc);
3170 if (sym->as != NULL && sym->as->type == AS_ASSUMED_SIZE
3171 && exp->ref->type == REF_ARRAY && exp->ref->u.ar.type == AR_FULL)
3173 gfc_error ("Data transfer element at %L cannot be a full reference to "
3174 "an assumed-size array", &code->loc);
3180 /*********** Toplevel code resolution subroutines ***********/
3182 /* Given a branch to a label and a namespace, if the branch is conforming.
3183 The code node described where the branch is located. */
3186 resolve_branch (gfc_st_label * label, gfc_code * code)
3188 gfc_code *block, *found;
3196 /* Step one: is this a valid branching target? */
3198 if (lp->defined == ST_LABEL_UNKNOWN)
3200 gfc_error ("Label %d referenced at %L is never defined", lp->value,
3205 if (lp->defined != ST_LABEL_TARGET)
3207 gfc_error ("Statement at %L is not a valid branch target statement "
3208 "for the branch statement at %L", &lp->where, &code->loc);
3212 /* Step two: make sure this branch is not a branch to itself ;-) */
3214 if (code->here == label)
3216 gfc_warning ("Branch at %L causes an infinite loop", &code->loc);
3220 /* Step three: Try to find the label in the parse tree. To do this,
3221 we traverse the tree block-by-block: first the block that
3222 contains this GOTO, then the block that it is nested in, etc. We
3223 can ignore other blocks because branching into another block is
3228 for (stack = cs_base; stack; stack = stack->prev)
3230 for (block = stack->head; block; block = block->next)
3232 if (block->here == label)
3245 /* still nothing, so illegal. */
3246 gfc_error_now ("Label at %L is not in the same block as the "
3247 "GOTO statement at %L", &lp->where, &code->loc);
3251 /* Step four: Make sure that the branching target is legal if
3252 the statement is an END {SELECT,DO,IF}. */
3254 if (found->op == EXEC_NOP)
3256 for (stack = cs_base; stack; stack = stack->prev)
3257 if (stack->current->next == found)
3261 gfc_notify_std (GFC_STD_F95_DEL,
3262 "Obsolete: GOTO at %L jumps to END of construct at %L",
3263 &code->loc, &found->loc);
3268 /* Check whether EXPR1 has the same shape as EXPR2. */
3271 resolve_where_shape (gfc_expr *expr1, gfc_expr *expr2)
3273 mpz_t shape[GFC_MAX_DIMENSIONS];
3274 mpz_t shape2[GFC_MAX_DIMENSIONS];
3275 try result = FAILURE;
3278 /* Compare the rank. */
3279 if (expr1->rank != expr2->rank)
3282 /* Compare the size of each dimension. */
3283 for (i=0; i<expr1->rank; i++)
3285 if (gfc_array_dimen_size (expr1, i, &shape[i]) == FAILURE)
3288 if (gfc_array_dimen_size (expr2, i, &shape2[i]) == FAILURE)
3291 if (mpz_cmp (shape[i], shape2[i]))
3295 /* When either of the two expression is an assumed size array, we
3296 ignore the comparison of dimension sizes. */
3301 for (i--; i>=0; i--)
3303 mpz_clear (shape[i]);
3304 mpz_clear (shape2[i]);
3310 /* Check whether a WHERE assignment target or a WHERE mask expression
3311 has the same shape as the outmost WHERE mask expression. */
3314 resolve_where (gfc_code *code, gfc_expr *mask)
3320 cblock = code->block;
3322 /* Store the first WHERE mask-expr of the WHERE statement or construct.
3323 In case of nested WHERE, only the outmost one is stored. */
3324 if (mask == NULL) /* outmost WHERE */
3326 else /* inner WHERE */
3333 /* Check if the mask-expr has a consistent shape with the
3334 outmost WHERE mask-expr. */
3335 if (resolve_where_shape (cblock->expr, e) == FAILURE)
3336 gfc_error ("WHERE mask at %L has inconsistent shape",
3337 &cblock->expr->where);
3340 /* the assignment statement of a WHERE statement, or the first
3341 statement in where-body-construct of a WHERE construct */
3342 cnext = cblock->next;
3347 /* WHERE assignment statement */
3350 /* Check shape consistent for WHERE assignment target. */
3351 if (e && resolve_where_shape (cnext->expr, e) == FAILURE)
3352 gfc_error ("WHERE assignment target at %L has "
3353 "inconsistent shape", &cnext->expr->where);
3356 /* WHERE or WHERE construct is part of a where-body-construct */
3358 resolve_where (cnext, e);
3362 gfc_error ("Unsupported statement inside WHERE at %L",
3365 /* the next statement within the same where-body-construct */
3366 cnext = cnext->next;
3368 /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
3369 cblock = cblock->block;
3374 /* Check whether the FORALL index appears in the expression or not. */
3377 gfc_find_forall_index (gfc_expr *expr, gfc_symbol *symbol)
3381 gfc_actual_arglist *args;
3384 switch (expr->expr_type)
3387 gcc_assert (expr->symtree->n.sym);
3389 /* A scalar assignment */
3392 if (expr->symtree->n.sym == symbol)
3398 /* the expr is array ref, substring or struct component. */
3405 /* Check if the symbol appears in the array subscript. */
3407 for (i = 0; i < GFC_MAX_DIMENSIONS; i++)
3410 if (gfc_find_forall_index (ar.start[i], symbol) == SUCCESS)
3414 if (gfc_find_forall_index (ar.end[i], symbol) == SUCCESS)
3418 if (gfc_find_forall_index (ar.stride[i], symbol) == SUCCESS)
3424 if (expr->symtree->n.sym == symbol)
3427 /* Check if the symbol appears in the substring section. */
3428 if (gfc_find_forall_index (tmp->u.ss.start, symbol) == SUCCESS)
3430 if (gfc_find_forall_index (tmp->u.ss.end, symbol) == SUCCESS)
3438 gfc_error("expresion reference type error at %L", &expr->where);
3444 /* If the expression is a function call, then check if the symbol
3445 appears in the actual arglist of the function. */
3447 for (args = expr->value.function.actual; args; args = args->next)
3449 if (gfc_find_forall_index(args->expr,symbol) == SUCCESS)
3454 /* It seems not to happen. */
3455 case EXPR_SUBSTRING:
3459 gcc_assert (expr->ref->type == REF_SUBSTRING);
3460 if (gfc_find_forall_index (tmp->u.ss.start, symbol) == SUCCESS)
3462 if (gfc_find_forall_index (tmp->u.ss.end, symbol) == SUCCESS)
3467 /* It seems not to happen. */
3468 case EXPR_STRUCTURE:
3470 gfc_error ("Unsupported statement while finding forall index in "
3475 /* Find the FORALL index in the first operand. */
3476 if (expr->value.op.op1)
3478 if (gfc_find_forall_index (expr->value.op.op1, symbol) == SUCCESS)
3482 /* Find the FORALL index in the second operand. */
3483 if (expr->value.op.op2)
3485 if (gfc_find_forall_index (expr->value.op.op2, symbol) == SUCCESS)
3498 /* Resolve assignment in FORALL construct.
3499 NVAR is the number of FORALL index variables, and VAR_EXPR records the
3500 FORALL index variables. */
3503 gfc_resolve_assign_in_forall (gfc_code *code, int nvar, gfc_expr **var_expr)
3507 for (n = 0; n < nvar; n++)
3509 gfc_symbol *forall_index;
3511 forall_index = var_expr[n]->symtree->n.sym;
3513 /* Check whether the assignment target is one of the FORALL index
3515 if ((code->expr->expr_type == EXPR_VARIABLE)
3516 && (code->expr->symtree->n.sym == forall_index))
3517 gfc_error ("Assignment to a FORALL index variable at %L",
3518 &code->expr->where);
3521 /* If one of the FORALL index variables doesn't appear in the
3522 assignment target, then there will be a many-to-one
3524 if (gfc_find_forall_index (code->expr, forall_index) == FAILURE)
3525 gfc_error ("The FORALL with index '%s' cause more than one "
3526 "assignment to this object at %L",
3527 var_expr[n]->symtree->name, &code->expr->where);
3533 /* Resolve WHERE statement in FORALL construct. */
3536 gfc_resolve_where_code_in_forall (gfc_code *code, int nvar, gfc_expr **var_expr){
3540 cblock = code->block;
3543 /* the assignment statement of a WHERE statement, or the first
3544 statement in where-body-construct of a WHERE construct */
3545 cnext = cblock->next;
3550 /* WHERE assignment statement */
3552 gfc_resolve_assign_in_forall (cnext, nvar, var_expr);
3555 /* WHERE or WHERE construct is part of a where-body-construct */
3557 gfc_resolve_where_code_in_forall (cnext, nvar, var_expr);
3561 gfc_error ("Unsupported statement inside WHERE at %L",
3564 /* the next statement within the same where-body-construct */
3565 cnext = cnext->next;
3567 /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
3568 cblock = cblock->block;
3573 /* Traverse the FORALL body to check whether the following errors exist:
3574 1. For assignment, check if a many-to-one assignment happens.
3575 2. For WHERE statement, check the WHERE body to see if there is any
3576 many-to-one assignment. */
3579 gfc_resolve_forall_body (gfc_code *code, int nvar, gfc_expr **var_expr)
3583 c = code->block->next;
3589 case EXEC_POINTER_ASSIGN:
3590 gfc_resolve_assign_in_forall (c, nvar, var_expr);
3593 /* Because the resolve_blocks() will handle the nested FORALL,
3594 there is no need to handle it here. */
3598 gfc_resolve_where_code_in_forall(c, nvar, var_expr);
3603 /* The next statement in the FORALL body. */
3609 /* Given a FORALL construct, first resolve the FORALL iterator, then call
3610 gfc_resolve_forall_body to resolve the FORALL body. */
3612 static void resolve_blocks (gfc_code *, gfc_namespace *);
3615 gfc_resolve_forall (gfc_code *code, gfc_namespace *ns, int forall_save)
3617 static gfc_expr **var_expr;
3618 static int total_var = 0;
3619 static int nvar = 0;
3620 gfc_forall_iterator *fa;
3621 gfc_symbol *forall_index;
3625 /* Start to resolve a FORALL construct */
3626 if (forall_save == 0)
3628 /* Count the total number of FORALL index in the nested FORALL
3629 construct in order to allocate the VAR_EXPR with proper size. */
3631 while ((next != NULL) && (next->op == EXEC_FORALL))
3633 for (fa = next->ext.forall_iterator; fa; fa = fa->next)
3635 next = next->block->next;
3638 /* Allocate VAR_EXPR with NUMBER_OF_FORALL_INDEX elements. */
3639 var_expr = (gfc_expr **) gfc_getmem (total_var * sizeof (gfc_expr *));
3642 /* The information about FORALL iterator, including FORALL index start, end
3643 and stride. The FORALL index can not appear in start, end or stride. */
3644 for (fa = code->ext.forall_iterator; fa; fa = fa->next)
3646 /* Check if any outer FORALL index name is the same as the current
3648 for (i = 0; i < nvar; i++)
3650 if (fa->var->symtree->n.sym == var_expr[i]->symtree->n.sym)
3652 gfc_error ("An outer FORALL construct already has an index "
3653 "with this name %L", &fa->var->where);
3657 /* Record the current FORALL index. */
3658 var_expr[nvar] = gfc_copy_expr (fa->var);
3660 forall_index = fa->var->symtree->n.sym;
3662 /* Check if the FORALL index appears in start, end or stride. */
3663 if (gfc_find_forall_index (fa->start, forall_index) == SUCCESS)
3664 gfc_error ("A FORALL index must not appear in a limit or stride "
3665 "expression in the same FORALL at %L", &fa->start->where);
3666 if (gfc_find_forall_index (fa->end, forall_index) == SUCCESS)
3667 gfc_error ("A FORALL index must not appear in a limit or stride "
3668 "expression in the same FORALL at %L", &fa->end->where);
3669 if (gfc_find_forall_index (fa->stride, forall_index) == SUCCESS)
3670 gfc_error ("A FORALL index must not appear in a limit or stride "
3671 "expression in the same FORALL at %L", &fa->stride->where);
3675 /* Resolve the FORALL body. */
3676 gfc_resolve_forall_body (code, nvar, var_expr);
3678 /* May call gfc_resolve_forall to resolve the inner FORALL loop. */
3679 resolve_blocks (code->block, ns);
3681 /* Free VAR_EXPR after the whole FORALL construct resolved. */
3682 for (i = 0; i < total_var; i++)
3683 gfc_free_expr (var_expr[i]);
3685 /* Reset the counters. */
3691 /* Resolve lists of blocks found in IF, SELECT CASE, WHERE, FORALL ,GOTO and
3694 static void resolve_code (gfc_code *, gfc_namespace *);
3697 resolve_blocks (gfc_code * b, gfc_namespace * ns)
3701 for (; b; b = b->block)
3703 t = gfc_resolve_expr (b->expr);
3704 if (gfc_resolve_expr (b->expr2) == FAILURE)
3710 if (t == SUCCESS && b->expr != NULL
3711 && (b->expr->ts.type != BT_LOGICAL || b->expr->rank != 0))
3713 ("ELSE IF clause at %L requires a scalar LOGICAL expression",
3720 && (b->expr->ts.type != BT_LOGICAL
3721 || b->expr->rank == 0))
3723 ("WHERE/ELSEWHERE clause at %L requires a LOGICAL array",
3728 resolve_branch (b->label, b);
3738 gfc_internal_error ("resolve_block(): Bad block type");
3741 resolve_code (b->next, ns);
3746 /* Given a block of code, recursively resolve everything pointed to by this
3750 resolve_code (gfc_code * code, gfc_namespace * ns)
3752 int forall_save = 0;
3757 frame.prev = cs_base;
3761 for (; code; code = code->next)
3763 frame.current = code;
3765 if (code->op == EXEC_FORALL)
3767 forall_save = forall_flag;
3769 gfc_resolve_forall (code, ns, forall_save);
3772 resolve_blocks (code->block, ns);
3774 if (code->op == EXEC_FORALL)
3775 forall_flag = forall_save;
3777 t = gfc_resolve_expr (code->expr);
3778 if (gfc_resolve_expr (code->expr2) == FAILURE)
3794 resolve_where (code, NULL);
3798 if (code->expr != NULL)
3800 if (code->expr->ts.type != BT_INTEGER)
3801 gfc_error ("ASSIGNED GOTO statement at %L requires an INTEGER "
3802 "variable", &code->expr->where);
3803 else if (code->expr->symtree->n.sym->attr.assign != 1)
3804 gfc_error ("Variable '%s' has not been assigned a target label "
3805 "at %L", code->expr->symtree->n.sym->name,
3806 &code->expr->where);
3809 resolve_branch (code->label, code);
3813 if (code->expr != NULL && code->expr->ts.type != BT_INTEGER)
3814 gfc_error ("Alternate RETURN statement at %L requires an INTEGER "
3815 "return specifier", &code->expr->where);
3822 if (gfc_extend_assign (code, ns) == SUCCESS)
3825 if (gfc_pure (NULL))
3827 if (gfc_impure_variable (code->expr->symtree->n.sym))
3830 ("Cannot assign to variable '%s' in PURE procedure at %L",
3831 code->expr->symtree->n.sym->name, &code->expr->where);
3835 if (code->expr2->ts.type == BT_DERIVED
3836 && derived_pointer (code->expr2->ts.derived))
3839 ("Right side of assignment at %L is a derived type "
3840 "containing a POINTER in a PURE procedure",
3841 &code->expr2->where);
3846 gfc_check_assign (code->expr, code->expr2, 1);
3849 case EXEC_LABEL_ASSIGN:
3850 if (code->label->defined == ST_LABEL_UNKNOWN)
3851 gfc_error ("Label %d referenced at %L is never defined",
3852 code->label->value, &code->label->where);
3854 && (code->expr->expr_type != EXPR_VARIABLE
3855 || code->expr->symtree->n.sym->ts.type != BT_INTEGER
3856 || code->expr->symtree->n.sym->ts.kind
3857 != gfc_default_integer_kind
3858 || code->expr->symtree->n.sym->as != NULL))
3859 gfc_error ("ASSIGN statement at %L requires a scalar "
3860 "default INTEGER variable", &code->expr->where);
3863 case EXEC_POINTER_ASSIGN:
3867 gfc_check_pointer_assign (code->expr, code->expr2);
3870 case EXEC_ARITHMETIC_IF:
3872 && code->expr->ts.type != BT_INTEGER
3873 && code->expr->ts.type != BT_REAL)
3874 gfc_error ("Arithmetic IF statement at %L requires a numeric "
3875 "expression", &code->expr->where);
3877 resolve_branch (code->label, code);
3878 resolve_branch (code->label2, code);
3879 resolve_branch (code->label3, code);
3883 if (t == SUCCESS && code->expr != NULL
3884 && (code->expr->ts.type != BT_LOGICAL
3885 || code->expr->rank != 0))
3886 gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
3887 &code->expr->where);
3892 resolve_call (code);
3896 /* Select is complicated. Also, a SELECT construct could be
3897 a transformed computed GOTO. */
3898 resolve_select (code);
3902 if (code->ext.iterator != NULL)
3903 gfc_resolve_iterator (code->ext.iterator, true);
3907 if (code->expr == NULL)
3908 gfc_internal_error ("resolve_code(): No expression on DO WHILE");
3910 && (code->expr->rank != 0
3911 || code->expr->ts.type != BT_LOGICAL))
3912 gfc_error ("Exit condition of DO WHILE loop at %L must be "
3913 "a scalar LOGICAL expression", &code->expr->where);
3917 if (t == SUCCESS && code->expr != NULL
3918 && code->expr->ts.type != BT_INTEGER)
3919 gfc_error ("STAT tag in ALLOCATE statement at %L must be "
3920 "of type INTEGER", &code->expr->where);
3922 for (a = code->ext.alloc_list; a; a = a->next)
3923 resolve_allocate_expr (a->expr);
3927 case EXEC_DEALLOCATE:
3928 if (t == SUCCESS && code->expr != NULL
3929 && code->expr->ts.type != BT_INTEGER)
3931 ("STAT tag in DEALLOCATE statement at %L must be of type "
3932 "INTEGER", &code->expr->where);
3934 for (a = code->ext.alloc_list; a; a = a->next)
3935 resolve_deallocate_expr (a->expr);
3940 if (gfc_resolve_open (code->ext.open) == FAILURE)
3943 resolve_branch (code->ext.open->err, code);
3947 if (gfc_resolve_close (code->ext.close) == FAILURE)
3950 resolve_branch (code->ext.close->err, code);
3953 case EXEC_BACKSPACE:
3956 if (gfc_resolve_filepos (code->ext.filepos) == FAILURE)
3959 resolve_branch (code->ext.filepos->err, code);
3963 if (gfc_resolve_inquire (code->ext.inquire) == FAILURE)
3966 resolve_branch (code->ext.inquire->err, code);
3970 gcc_assert (code->ext.inquire != NULL);
3971 if (gfc_resolve_inquire (code->ext.inquire) == FAILURE)
3974 resolve_branch (code->ext.inquire->err, code);
3979 if (gfc_resolve_dt (code->ext.dt) == FAILURE)
3982 resolve_branch (code->ext.dt->err, code);
3983 resolve_branch (code->ext.dt->end, code);
3984 resolve_branch (code->ext.dt->eor, code);
3988 resolve_transfer (code);
3992 resolve_forall_iterators (code->ext.forall_iterator);
3994 if (code->expr != NULL && code->expr->ts.type != BT_LOGICAL)
3996 ("FORALL mask clause at %L requires a LOGICAL expression",
3997 &code->expr->where);
4001 gfc_internal_error ("resolve_code(): Bad statement code");
4005 cs_base = frame.prev;
4009 /* Resolve initial values and make sure they are compatible with
4013 resolve_values (gfc_symbol * sym)
4016 if (sym->value == NULL)
4019 if (gfc_resolve_expr (sym->value) == FAILURE)
4022 gfc_check_assign_symbol (sym, sym->value);
4026 /* Do anything necessary to resolve a symbol. Right now, we just
4027 assume that an otherwise unknown symbol is a variable. This sort
4028 of thing commonly happens for symbols in module. */
4031 resolve_symbol (gfc_symbol * sym)
4033 /* Zero if we are checking a formal namespace. */
4034 static int formal_ns_flag = 1;
4035 int formal_ns_save, check_constant, mp_flag;
4039 gfc_symtree * symtree;
4040 gfc_symtree * this_symtree;
4043 if (sym->attr.flavor == FL_UNKNOWN)
4046 /* If we find that a flavorless symbol is an interface in one of the
4047 parent namespaces, find its symtree in this namespace, free the
4048 symbol and set the symtree to point to the interface symbol. */
4049 for (ns = gfc_current_ns->parent; ns; ns = ns->parent)
4051 symtree = gfc_find_symtree (ns->sym_root, sym->name);
4052 if (symtree && symtree->n.sym->generic)
4054 this_symtree = gfc_find_symtree (gfc_current_ns->sym_root,
4058 gfc_free_symbol (sym);
4059 symtree->n.sym->refs++;
4060 this_symtree->n.sym = symtree->n.sym;
4065 /* Otherwise give it a flavor according to such attributes as
4067 if (sym->attr.external == 0 && sym->attr.intrinsic == 0)
4068 sym->attr.flavor = FL_VARIABLE;
4071 sym->attr.flavor = FL_PROCEDURE;
4072 if (sym->attr.dimension)
4073 sym->attr.function = 1;
4077 /* Symbols that are module procedures with results (functions) have
4078 the types and array specification copied for type checking in
4079 procedures that call them, as well as for saving to a module
4080 file. These symbols can't stand the scrutiny that their results
4082 mp_flag = (sym->result != NULL && sym->result != sym);
4084 /* Assign default type to symbols that need one and don't have one. */
4085 if (sym->ts.type == BT_UNKNOWN)
4087 if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER)
4088 gfc_set_default_type (sym, 1, NULL);
4090 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.function)
4093 gfc_set_default_type (sym, 0, NULL);
4096 /* Result may be in another namespace. */
4097 resolve_symbol (sym->result);
4099 sym->ts = sym->result->ts;
4100 sym->as = gfc_copy_array_spec (sym->result->as);
4101 sym->attr.dimension = sym->result->attr.dimension;
4102 sym->attr.pointer = sym->result->attr.pointer;
4107 /* Assumed size arrays and assumed shape arrays must be dummy
4111 && (sym->as->type == AS_ASSUMED_SIZE
4112 || sym->as->type == AS_ASSUMED_SHAPE)
4113 && sym->attr.dummy == 0)
4115 gfc_error ("Assumed %s array at %L must be a dummy argument",
4116 sym->as->type == AS_ASSUMED_SIZE ? "size" : "shape",
4121 /* A parameter array's shape needs to be constant. */
4123 if (sym->attr.flavor == FL_PARAMETER && sym->as != NULL
4124 && !gfc_is_compile_time_shape (sym->as))
4126 gfc_error ("Parameter array '%s' at %L cannot be automatic "
4127 "or assumed shape", sym->name, &sym->declared_at);
4131 /* Make sure that character string variables with assumed length are
4134 if (sym->attr.flavor == FL_VARIABLE && !sym->attr.result
4135 && sym->ts.type == BT_CHARACTER
4136 && sym->ts.cl->length == NULL && sym->attr.dummy == 0)
4138 gfc_error ("Entity with assumed character length at %L must be a "
4139 "dummy argument or a PARAMETER", &sym->declared_at);
4143 /* Make sure a parameter that has been implicitly typed still
4144 matches the implicit type, since PARAMETER statements can precede
4145 IMPLICIT statements. */
4147 if (sym->attr.flavor == FL_PARAMETER
4148 && sym->attr.implicit_type
4149 && !gfc_compare_types (&sym->ts, gfc_get_default_type (sym, sym->ns)))
4150 gfc_error ("Implicitly typed PARAMETER '%s' at %L doesn't match a "
4151 "later IMPLICIT type", sym->name, &sym->declared_at);
4153 /* Make sure the types of derived parameters are consistent. This
4154 type checking is deferred until resolution because the type may
4155 refer to a derived type from the host. */
4157 if (sym->attr.flavor == FL_PARAMETER
4158 && sym->ts.type == BT_DERIVED
4159 && !gfc_compare_types (&sym->ts, &sym->value->ts))
4160 gfc_error ("Incompatible derived type in PARAMETER at %L",
4161 &sym->value->where);
4163 /* Make sure symbols with known intent or optional are really dummy
4164 variable. Because of ENTRY statement, this has to be deferred
4165 until resolution time. */
4167 if (! sym->attr.dummy
4168 && (sym->attr.optional
4169 || sym->attr.intent != INTENT_UNKNOWN))
4171 gfc_error ("Symbol at %L is not a DUMMY variable", &sym->declared_at);
4175 if (sym->attr.proc == PROC_ST_FUNCTION)
4177 if (sym->ts.type == BT_CHARACTER)
4179 gfc_charlen *cl = sym->ts.cl;
4180 if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
4182 gfc_error ("Character-valued statement function '%s' at %L must "
4183 "have constant length", sym->name, &sym->declared_at);
4189 /* Constraints on deferred shape variable. */
4190 if (sym->attr.flavor == FL_VARIABLE
4191 || (sym->attr.flavor == FL_PROCEDURE
4192 && sym->attr.function))
4194 if (sym->as == NULL || sym->as->type != AS_DEFERRED)
4196 if (sym->attr.allocatable)
4198 if (sym->attr.dimension)
4199 gfc_error ("Allocatable array at %L must have a deferred shape",
4202 gfc_error ("Object at %L may not be ALLOCATABLE",
4207 if (sym->attr.pointer && sym->attr.dimension)
4209 gfc_error ("Pointer to array at %L must have a deferred shape",
4217 if (!mp_flag && !sym->attr.allocatable
4218 && !sym->attr.pointer && !sym->attr.dummy)
4220 gfc_error ("Array at %L cannot have a deferred shape",
4227 switch (sym->attr.flavor)
4230 /* Can the sybol have an initializer? */
4232 if (sym->attr.allocatable)
4233 whynot = "Allocatable";
4234 else if (sym->attr.external)
4235 whynot = "External";
4236 else if (sym->attr.dummy)
4238 else if (sym->attr.intrinsic)
4239 whynot = "Intrinsic";
4240 else if (sym->attr.result)
4241 whynot = "Function Result";
4242 else if (sym->attr.dimension && !sym->attr.pointer)
4244 /* Don't allow initialization of automatic arrays. */
4245 for (i = 0; i < sym->as->rank; i++)
4247 if (sym->as->lower[i] == NULL
4248 || sym->as->lower[i]->expr_type != EXPR_CONSTANT
4249 || sym->as->upper[i] == NULL
4250 || sym->as->upper[i]->expr_type != EXPR_CONSTANT)
4252 whynot = "Automatic array";
4258 /* Reject illegal initializers. */
4259 if (sym->value && whynot)
4261 gfc_error ("%s '%s' at %L cannot have an initializer",
4262 whynot, sym->name, &sym->declared_at);
4266 /* Assign default initializer. */
4267 if (sym->ts.type == BT_DERIVED && !(sym->value || whynot))
4268 sym->value = gfc_default_initializer (&sym->ts);
4272 /* Reject PRIVATE objects in a PUBLIC namelist. */
4273 if (gfc_check_access(sym->attr.access, sym->ns->default_access))
4275 for (nl = sym->namelist; nl; nl = nl->next)
4277 if (!gfc_check_access(nl->sym->attr.access,
4278 nl->sym->ns->default_access))
4279 gfc_error ("PRIVATE symbol '%s' cannot be member of "
4280 "PUBLIC namelist at %L", nl->sym->name,
4291 /* Make sure that intrinsic exist */
4292 if (sym->attr.intrinsic
4293 && ! gfc_intrinsic_name(sym->name, 0)
4294 && ! gfc_intrinsic_name(sym->name, 1))
4295 gfc_error("Intrinsic at %L does not exist", &sym->declared_at);
4297 /* Resolve array specifier. Check as well some constraints
4298 on COMMON blocks. */
4300 check_constant = sym->attr.in_common && !sym->attr.pointer;
4301 gfc_resolve_array_spec (sym->as, check_constant);
4303 /* Resolve formal namespaces. */
4305 if (formal_ns_flag && sym != NULL && sym->formal_ns != NULL)
4307 formal_ns_save = formal_ns_flag;
4309 gfc_resolve (sym->formal_ns);
4310 formal_ns_flag = formal_ns_save;
4316 /************* Resolve DATA statements *************/
4320 gfc_data_value *vnode;
4326 /* Advance the values structure to point to the next value in the data list. */
4329 next_data_value (void)
4331 while (values.left == 0)
4333 if (values.vnode->next == NULL)
4336 values.vnode = values.vnode->next;
4337 values.left = values.vnode->repeat;
4345 check_data_variable (gfc_data_variable * var, locus * where)
4351 ar_type mark = AR_UNKNOWN;
4353 mpz_t section_index[GFC_MAX_DIMENSIONS];
4357 if (gfc_resolve_expr (var->expr) == FAILURE)
4361 mpz_init_set_si (offset, 0);
4364 if (e->expr_type != EXPR_VARIABLE)
4365 gfc_internal_error ("check_data_variable(): Bad expression");
4369 mpz_init_set_ui (size, 1);
4376 /* Find the array section reference. */
4377 for (ref = e->ref; ref; ref = ref->next)
4379 if (ref->type != REF_ARRAY)
4381 if (ref->u.ar.type == AR_ELEMENT)
4387 /* Set marks according to the reference pattern. */
4388 switch (ref->u.ar.type)
4396 /* Get the start position of array section. */
4397 gfc_get_section_index (ar, section_index, &offset);
4405 if (gfc_array_size (e, &size) == FAILURE)
4407 gfc_error ("Nonconstant array section at %L in DATA statement",
4416 while (mpz_cmp_ui (size, 0) > 0)
4418 if (next_data_value () == FAILURE)
4420 gfc_error ("DATA statement at %L has more variables than values",
4426 t = gfc_check_assign (var->expr, values.vnode->expr, 0);
4430 /* If we have more than one element left in the repeat count,
4431 and we have more than one element left in the target variable,
4432 then create a range assignment. */
4433 /* ??? Only done for full arrays for now, since array sections
4435 if (mark == AR_FULL && ref && ref->next == NULL
4436 && values.left > 1 && mpz_cmp_ui (size, 1) > 0)
4440 if (mpz_cmp_ui (size, values.left) >= 0)
4442 mpz_init_set_ui (range, values.left);
4443 mpz_sub_ui (size, size, values.left);
4448 mpz_init_set (range, size);
4449 values.left -= mpz_get_ui (size);
4450 mpz_set_ui (size, 0);
4453 gfc_assign_data_value_range (var->expr, values.vnode->expr,
4456 mpz_add (offset, offset, range);
4460 /* Assign initial value to symbol. */
4464 mpz_sub_ui (size, size, 1);
4466 gfc_assign_data_value (var->expr, values.vnode->expr, offset);
4468 if (mark == AR_FULL)
4469 mpz_add_ui (offset, offset, 1);
4471 /* Modify the array section indexes and recalculate the offset
4472 for next element. */
4473 else if (mark == AR_SECTION)
4474 gfc_advance_section (section_index, ar, &offset);
4478 if (mark == AR_SECTION)
4480 for (i = 0; i < ar->dimen; i++)
4481 mpz_clear (section_index[i]);
4491 static try traverse_data_var (gfc_data_variable *, locus *);
4493 /* Iterate over a list of elements in a DATA statement. */
4496 traverse_data_list (gfc_data_variable * var, locus * where)
4499 iterator_stack frame;
4502 mpz_init (frame.value);
4504 mpz_init_set (trip, var->iter.end->value.integer);
4505 mpz_sub (trip, trip, var->iter.start->value.integer);
4506 mpz_add (trip, trip, var->iter.step->value.integer);
4508 mpz_div (trip, trip, var->iter.step->value.integer);
4510 mpz_set (frame.value, var->iter.start->value.integer);
4512 frame.prev = iter_stack;
4513 frame.variable = var->iter.var->symtree;
4514 iter_stack = &frame;
4516 while (mpz_cmp_ui (trip, 0) > 0)
4518 if (traverse_data_var (var->list, where) == FAILURE)
4524 e = gfc_copy_expr (var->expr);
4525 if (gfc_simplify_expr (e, 1) == FAILURE)
4531 mpz_add (frame.value, frame.value, var->iter.step->value.integer);
4533 mpz_sub_ui (trip, trip, 1);
4537 mpz_clear (frame.value);
4539 iter_stack = frame.prev;
4544 /* Type resolve variables in the variable list of a DATA statement. */
4547 traverse_data_var (gfc_data_variable * var, locus * where)
4551 for (; var; var = var->next)
4553 if (var->expr == NULL)
4554 t = traverse_data_list (var, where);
4556 t = check_data_variable (var, where);
4566 /* Resolve the expressions and iterators associated with a data statement.
4567 This is separate from the assignment checking because data lists should
4568 only be resolved once. */
4571 resolve_data_variables (gfc_data_variable * d)
4573 for (; d; d = d->next)
4575 if (d->list == NULL)
4577 if (gfc_resolve_expr (d->expr) == FAILURE)
4582 if (gfc_resolve_iterator (&d->iter, false) == FAILURE)
4585 if (d->iter.start->expr_type != EXPR_CONSTANT
4586 || d->iter.end->expr_type != EXPR_CONSTANT
4587 || d->iter.step->expr_type != EXPR_CONSTANT)
4588 gfc_internal_error ("resolve_data_variables(): Bad iterator");
4590 if (resolve_data_variables (d->list) == FAILURE)
4599 /* Resolve a single DATA statement. We implement this by storing a pointer to
4600 the value list into static variables, and then recursively traversing the
4601 variables list, expanding iterators and such. */
4604 resolve_data (gfc_data * d)
4606 if (resolve_data_variables (d->var) == FAILURE)
4609 values.vnode = d->value;
4610 values.left = (d->value == NULL) ? 0 : d->value->repeat;
4612 if (traverse_data_var (d->var, &d->where) == FAILURE)
4615 /* At this point, we better not have any values left. */
4617 if (next_data_value () == SUCCESS)
4618 gfc_error ("DATA statement at %L has more values than variables",
4623 /* Determines if a variable is not 'pure', ie not assignable within a pure
4624 procedure. Returns zero if assignment is OK, nonzero if there is a problem.
4628 gfc_impure_variable (gfc_symbol * sym)
4630 if (sym->attr.use_assoc || sym->attr.in_common)
4633 if (sym->ns != gfc_current_ns)
4634 return !sym->attr.function;
4636 /* TODO: Check storage association through EQUIVALENCE statements */
4642 /* Test whether a symbol is pure or not. For a NULL pointer, checks the
4643 symbol of the current procedure. */
4646 gfc_pure (gfc_symbol * sym)
4648 symbol_attribute attr;
4651 sym = gfc_current_ns->proc_name;
4657 return attr.flavor == FL_PROCEDURE && (attr.pure || attr.elemental);
4661 /* Test whether the current procedure is elemental or not. */
4664 gfc_elemental (gfc_symbol * sym)
4666 symbol_attribute attr;
4669 sym = gfc_current_ns->proc_name;
4674 return attr.flavor == FL_PROCEDURE && attr.elemental;
4678 /* Warn about unused labels. */
4681 warn_unused_label (gfc_namespace * ns)
4692 for (; l; l = l->prev)
4694 if (l->defined == ST_LABEL_UNKNOWN)
4697 switch (l->referenced)
4699 case ST_LABEL_UNKNOWN:
4700 gfc_warning ("Label %d at %L defined but not used", l->value,
4704 case ST_LABEL_BAD_TARGET:
4705 gfc_warning ("Label %d at %L defined but cannot be used", l->value,
4716 /* Resolve derived type EQUIVALENCE object. */
4719 resolve_equivalence_derived (gfc_symbol *derived, gfc_symbol *sym, gfc_expr *e)
4722 gfc_component *c = derived->components;
4727 /* Shall not be an object of nonsequence derived type. */
4728 if (!derived->attr.sequence)
4730 gfc_error ("Derived type variable '%s' at %L must have SEQUENCE "
4731 "attribute to be an EQUIVALENCE object", sym->name, &e->where);
4735 for (; c ; c = c->next)
4738 if (d && (resolve_equivalence_derived (c->ts.derived, sym, e) == FAILURE))
4741 /* Shall not be an object of sequence derived type containing a pointer
4742 in the structure. */
4745 gfc_error ("Derived type variable '%s' at %L has pointer componet(s) "
4746 "cannot be an EQUIVALENCE object", sym->name, &e->where);
4754 /* Resolve equivalence object.
4755 An EQUIVALENCE object shall not be a dummy argument, a pointer, an
4756 allocatable array, an object of nonsequence derived type, an object of
4757 sequence derived type containing a pointer at any level of component
4758 selection, an automatic object, a function name, an entry name, a result
4759 name, a named constant, a structure component, or a subobject of any of
4760 the preceding objects. */
4763 resolve_equivalence (gfc_equiv *eq)
4766 gfc_symbol *derived;
4770 for (; eq; eq = eq->eq)
4773 if (gfc_resolve_expr (e) == FAILURE)
4776 sym = e->symtree->n.sym;
4778 /* Shall not be a dummy argument. */
4779 if (sym->attr.dummy)
4781 gfc_error ("Dummy argument '%s' at %L cannot be an EQUIVALENCE "
4782 "object", sym->name, &e->where);
4786 /* Shall not be an allocatable array. */
4787 if (sym->attr.allocatable)
4789 gfc_error ("Allocatable array '%s' at %L cannot be an EQUIVALENCE "
4790 "object", sym->name, &e->where);
4794 /* Shall not be a pointer. */
4795 if (sym->attr.pointer)
4797 gfc_error ("Pointer '%s' at %L cannot be an EQUIVALENCE object",
4798 sym->name, &e->where);
4802 /* Shall not be a function name, ... */
4803 if (sym->attr.function || sym->attr.result || sym->attr.entry
4804 || sym->attr.subroutine)
4806 gfc_error ("Entity '%s' at %L cannot be an EQUIVALENCE object",
4807 sym->name, &e->where);
4811 /* Shall not be a named constant. */
4812 if (e->expr_type == EXPR_CONSTANT)
4814 gfc_error ("Named constant '%s' at %L cannot be an EQUIVALENCE "
4815 "object", sym->name, &e->where);
4819 derived = e->ts.derived;
4820 if (derived && resolve_equivalence_derived (derived, sym, e) == FAILURE)
4826 /* Shall not be an automatic array. */
4827 if (e->ref->type == REF_ARRAY
4828 && gfc_resolve_array_spec (e->ref->u.ar.as, 1) == FAILURE)
4830 gfc_error ("Array '%s' at %L with non-constant bounds cannot be "
4831 "an EQUIVALENCE object", sym->name, &e->where);
4835 /* Shall not be a structure component. */
4839 if (r->type == REF_COMPONENT)
4841 gfc_error ("Structure component '%s' at %L cannot be an "
4842 "EQUIVALENCE object",
4843 r->u.c.component->name, &e->where);
4852 /* Resolve function and ENTRY types, issue diagnostics if needed. */
4855 resolve_fntype (gfc_namespace * ns)
4860 if (ns->proc_name == NULL || !ns->proc_name->attr.function)
4863 /* If there are any entries, ns->proc_name is the entry master
4864 synthetic symbol and ns->entries->sym actual FUNCTION symbol. */
4866 sym = ns->entries->sym;
4868 sym = ns->proc_name;
4869 if (sym->result == sym
4870 && sym->ts.type == BT_UNKNOWN
4871 && gfc_set_default_type (sym, 0, NULL) == FAILURE
4872 && !sym->attr.untyped)
4874 gfc_error ("Function '%s' at %L has no IMPLICIT type",
4875 sym->name, &sym->declared_at);
4876 sym->attr.untyped = 1;
4880 for (el = ns->entries->next; el; el = el->next)
4882 if (el->sym->result == el->sym
4883 && el->sym->ts.type == BT_UNKNOWN
4884 && gfc_set_default_type (el->sym, 0, NULL) == FAILURE
4885 && !el->sym->attr.untyped)
4887 gfc_error ("ENTRY '%s' at %L has no IMPLICIT type",
4888 el->sym->name, &el->sym->declared_at);
4889 el->sym->attr.untyped = 1;
4895 /* This function is called after a complete program unit has been compiled.
4896 Its purpose is to examine all of the expressions associated with a program
4897 unit, assign types to all intermediate expressions, make sure that all
4898 assignments are to compatible types and figure out which names refer to
4899 which functions or subroutines. */
4902 gfc_resolve (gfc_namespace * ns)
4904 gfc_namespace *old_ns, *n;
4909 old_ns = gfc_current_ns;
4910 gfc_current_ns = ns;
4912 resolve_entries (ns);
4914 resolve_contained_functions (ns);
4916 gfc_traverse_ns (ns, resolve_symbol);
4918 resolve_fntype (ns);
4920 for (n = ns->contained; n; n = n->sibling)
4922 if (gfc_pure (ns->proc_name) && !gfc_pure (n->proc_name))
4923 gfc_error ("Contained procedure '%s' at %L of a PURE procedure must "
4924 "also be PURE", n->proc_name->name,
4925 &n->proc_name->declared_at);
4931 gfc_check_interfaces (ns);
4933 for (cl = ns->cl_list; cl; cl = cl->next)
4935 if (cl->length == NULL || gfc_resolve_expr (cl->length) == FAILURE)
4938 if (gfc_simplify_expr (cl->length, 0) == FAILURE)
4941 if (gfc_specification_expr (cl->length) == FAILURE)
4945 gfc_traverse_ns (ns, resolve_values);
4951 for (d = ns->data; d; d = d->next)
4955 gfc_traverse_ns (ns, gfc_formalize_init_value);
4957 for (eq = ns->equiv; eq; eq = eq->next)
4958 resolve_equivalence (eq);
4961 resolve_code (ns->code, ns);
4963 /* Warn about unused labels. */
4964 if (gfc_option.warn_unused_labels)
4965 warn_unused_label (ns);
4967 gfc_current_ns = old_ns;