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, 59 Temple Place - Suite 330,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->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);
271 gfc_error ("Contained function '%s' at %L has no IMPLICIT type",
272 sym->name, &sym->declared_at); /* FIXME */
277 /* Add NEW_ARGS to the formal argument list of PROC, taking care not to
278 introduce duplicates. */
281 merge_argument_lists (gfc_symbol *proc, gfc_formal_arglist *new_args)
283 gfc_formal_arglist *f, *new_arglist;
286 for (; new_args != NULL; new_args = new_args->next)
288 new_sym = new_args->sym;
289 /* See if ths arg is already in the formal argument list. */
290 for (f = proc->formal; f; f = f->next)
292 if (new_sym == f->sym)
299 /* Add a new argument. Argument order is not important. */
300 new_arglist = gfc_get_formal_arglist ();
301 new_arglist->sym = new_sym;
302 new_arglist->next = proc->formal;
303 proc->formal = new_arglist;
308 /* Resolve alternate entry points. If a symbol has multiple entry points we
309 create a new master symbol for the main routine, and turn the existing
310 symbol into an entry point. */
313 resolve_entries (gfc_namespace * ns)
315 gfc_namespace *old_ns;
319 char name[GFC_MAX_SYMBOL_LEN + 1];
320 static int master_count = 0;
322 if (ns->proc_name == NULL)
325 /* No need to do anything if this procedure doesn't have alternate entry
330 /* We may already have resolved alternate entry points. */
331 if (ns->proc_name->attr.entry_master)
334 /* If this isn't a procedure something has gone horribly wrong. */
335 gcc_assert (ns->proc_name->attr.flavor == FL_PROCEDURE);
337 /* Remember the current namespace. */
338 old_ns = gfc_current_ns;
342 /* Add the main entry point to the list of entry points. */
343 el = gfc_get_entry_list ();
344 el->sym = ns->proc_name;
346 el->next = ns->entries;
348 ns->proc_name->attr.entry = 1;
350 /* Add an entry statement for it. */
357 /* Create a new symbol for the master function. */
358 /* Give the internal function a unique name (within this file).
359 Also include the function name so the user has some hope of figuring
360 out what is going on. */
361 snprintf (name, GFC_MAX_SYMBOL_LEN, "master.%d.%s",
362 master_count++, ns->proc_name->name);
363 name[GFC_MAX_SYMBOL_LEN] = '\0';
364 gfc_get_ha_symbol (name, &proc);
365 gcc_assert (proc != NULL);
367 gfc_add_procedure (&proc->attr, PROC_INTERNAL, NULL);
368 if (ns->proc_name->attr.subroutine)
369 gfc_add_subroutine (&proc->attr, NULL);
372 gfc_add_function (&proc->attr, NULL);
373 gfc_internal_error ("TODO: Functions with alternate entry points");
375 proc->attr.access = ACCESS_PRIVATE;
376 proc->attr.entry_master = 1;
378 /* Merge all the entry point arguments. */
379 for (el = ns->entries; el; el = el->next)
380 merge_argument_lists (proc, el->sym->formal);
382 /* Use the master function for the function body. */
383 ns->proc_name = proc;
385 /* Finalize the new symbols. */
386 gfc_commit_symbols ();
388 /* Restore the original namespace. */
389 gfc_current_ns = old_ns;
393 /* Resolve contained function types. Because contained functions can call one
394 another, they have to be worked out before any of the contained procedures
397 The good news is that if a function doesn't already have a type, the only
398 way it can get one is through an IMPLICIT type or a RESULT variable, because
399 by definition contained functions are contained namespace they're contained
400 in, not in a sibling or parent namespace. */
403 resolve_contained_functions (gfc_namespace * ns)
405 gfc_namespace *child;
408 resolve_formal_arglists (ns);
410 for (child = ns->contained; child; child = child->sibling)
412 /* Resolve alternate entry points first. */
413 resolve_entries (child);
415 /* Then check function return types. */
416 resolve_contained_fntype (child->proc_name, child);
417 for (el = child->entries; el; el = el->next)
418 resolve_contained_fntype (el->sym, child);
423 /* Resolve all of the elements of a structure constructor and make sure that
424 the types are correct. */
427 resolve_structure_cons (gfc_expr * expr)
429 gfc_constructor *cons;
434 cons = expr->value.constructor;
435 /* A constructor may have references if it is the result of substituting a
436 parameter variable. In this case we just pull out the component we
439 comp = expr->ref->u.c.sym->components;
441 comp = expr->ts.derived->components;
443 for (; comp; comp = comp->next, cons = cons->next)
451 if (gfc_resolve_expr (cons->expr) == FAILURE)
457 /* If we don't have the right type, try to convert it. */
459 if (!gfc_compare_types (&cons->expr->ts, &comp->ts)
460 && gfc_convert_type (cons->expr, &comp->ts, 1) == FAILURE)
469 /****************** Expression name resolution ******************/
471 /* Returns 0 if a symbol was not declared with a type or
472 attribute declaration statement, nonzero otherwise. */
475 was_declared (gfc_symbol * sym)
481 if (!a.implicit_type && sym->ts.type != BT_UNKNOWN)
484 if (a.allocatable || a.dimension || a.external || a.intrinsic
485 || a.optional || a.pointer || a.save || a.target
486 || a.access != ACCESS_UNKNOWN || a.intent != INTENT_UNKNOWN)
493 /* Determine if a symbol is generic or not. */
496 generic_sym (gfc_symbol * sym)
500 if (sym->attr.generic ||
501 (sym->attr.intrinsic && gfc_generic_intrinsic (sym->name)))
504 if (was_declared (sym) || sym->ns->parent == NULL)
507 gfc_find_symbol (sym->name, sym->ns->parent, 1, &s);
509 return (s == NULL) ? 0 : generic_sym (s);
513 /* Determine if a symbol is specific or not. */
516 specific_sym (gfc_symbol * sym)
520 if (sym->attr.if_source == IFSRC_IFBODY
521 || sym->attr.proc == PROC_MODULE
522 || sym->attr.proc == PROC_INTERNAL
523 || sym->attr.proc == PROC_ST_FUNCTION
524 || (sym->attr.intrinsic &&
525 gfc_specific_intrinsic (sym->name))
526 || sym->attr.external)
529 if (was_declared (sym) || sym->ns->parent == NULL)
532 gfc_find_symbol (sym->name, sym->ns->parent, 1, &s);
534 return (s == NULL) ? 0 : specific_sym (s);
538 /* Figure out if the procedure is specific, generic or unknown. */
541 { PTYPE_GENERIC = 1, PTYPE_SPECIFIC, PTYPE_UNKNOWN }
545 procedure_kind (gfc_symbol * sym)
548 if (generic_sym (sym))
549 return PTYPE_GENERIC;
551 if (specific_sym (sym))
552 return PTYPE_SPECIFIC;
554 return PTYPE_UNKNOWN;
558 /* Resolve an actual argument list. Most of the time, this is just
559 resolving the expressions in the list.
560 The exception is that we sometimes have to decide whether arguments
561 that look like procedure arguments are really simple variable
565 resolve_actual_arglist (gfc_actual_arglist * arg)
568 gfc_symtree *parent_st;
571 for (; arg; arg = arg->next)
577 /* Check the label is a valid branching target. */
580 if (arg->label->defined == ST_LABEL_UNKNOWN)
582 gfc_error ("Label %d referenced at %L is never defined",
583 arg->label->value, &arg->label->where);
590 if (e->ts.type != BT_PROCEDURE)
592 if (gfc_resolve_expr (e) != SUCCESS)
597 /* See if the expression node should really be a variable
600 sym = e->symtree->n.sym;
602 if (sym->attr.flavor == FL_PROCEDURE
603 || sym->attr.intrinsic
604 || sym->attr.external)
607 /* If the symbol is the function that names the current (or
608 parent) scope, then we really have a variable reference. */
610 if (sym->attr.function && sym->result == sym
611 && (sym->ns->proc_name == sym
612 || (sym->ns->parent != NULL
613 && sym->ns->parent->proc_name == sym)))
619 /* See if the name is a module procedure in a parent unit. */
621 if (was_declared (sym) || sym->ns->parent == NULL)
624 if (gfc_find_sym_tree (sym->name, sym->ns->parent, 1, &parent_st))
626 gfc_error ("Symbol '%s' at %L is ambiguous", sym->name, &e->where);
630 if (parent_st == NULL)
633 sym = parent_st->n.sym;
634 e->symtree = parent_st; /* Point to the right thing. */
636 if (sym->attr.flavor == FL_PROCEDURE
637 || sym->attr.intrinsic
638 || sym->attr.external)
644 e->expr_type = EXPR_VARIABLE;
648 e->rank = sym->as->rank;
649 e->ref = gfc_get_ref ();
650 e->ref->type = REF_ARRAY;
651 e->ref->u.ar.type = AR_FULL;
652 e->ref->u.ar.as = sym->as;
660 /************* Function resolution *************/
662 /* Resolve a function call known to be generic.
663 Section 14.1.2.4.1. */
666 resolve_generic_f0 (gfc_expr * expr, gfc_symbol * sym)
670 if (sym->attr.generic)
673 gfc_search_interface (sym->generic, 0, &expr->value.function.actual);
676 expr->value.function.name = s->name;
677 expr->value.function.esym = s;
680 expr->rank = s->as->rank;
684 /* TODO: Need to search for elemental references in generic interface */
687 if (sym->attr.intrinsic)
688 return gfc_intrinsic_func_interface (expr, 0);
695 resolve_generic_f (gfc_expr * expr)
700 sym = expr->symtree->n.sym;
704 m = resolve_generic_f0 (expr, sym);
707 else if (m == MATCH_ERROR)
711 if (sym->ns->parent == NULL)
713 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
717 if (!generic_sym (sym))
721 /* Last ditch attempt. */
723 if (!gfc_generic_intrinsic (expr->symtree->n.sym->name))
725 gfc_error ("Generic function '%s' at %L is not an intrinsic function",
726 expr->symtree->n.sym->name, &expr->where);
730 m = gfc_intrinsic_func_interface (expr, 0);
735 ("Generic function '%s' at %L is not consistent with a specific "
736 "intrinsic interface", expr->symtree->n.sym->name, &expr->where);
742 /* Resolve a function call known to be specific. */
745 resolve_specific_f0 (gfc_symbol * sym, gfc_expr * expr)
749 if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
753 sym->attr.proc = PROC_DUMMY;
757 sym->attr.proc = PROC_EXTERNAL;
761 if (sym->attr.proc == PROC_MODULE
762 || sym->attr.proc == PROC_ST_FUNCTION
763 || sym->attr.proc == PROC_INTERNAL)
766 if (sym->attr.intrinsic)
768 m = gfc_intrinsic_func_interface (expr, 1);
773 ("Function '%s' at %L is INTRINSIC but is not compatible with "
774 "an intrinsic", sym->name, &expr->where);
782 gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
785 expr->value.function.name = sym->name;
786 expr->value.function.esym = sym;
788 expr->rank = sym->as->rank;
795 resolve_specific_f (gfc_expr * expr)
800 sym = expr->symtree->n.sym;
804 m = resolve_specific_f0 (sym, expr);
807 if (m == MATCH_ERROR)
810 if (sym->ns->parent == NULL)
813 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
819 gfc_error ("Unable to resolve the specific function '%s' at %L",
820 expr->symtree->n.sym->name, &expr->where);
826 /* Resolve a procedure call not known to be generic nor specific. */
829 resolve_unknown_f (gfc_expr * expr)
834 sym = expr->symtree->n.sym;
838 sym->attr.proc = PROC_DUMMY;
839 expr->value.function.name = sym->name;
843 /* See if we have an intrinsic function reference. */
845 if (gfc_intrinsic_name (sym->name, 0))
847 if (gfc_intrinsic_func_interface (expr, 1) == MATCH_YES)
852 /* The reference is to an external name. */
854 sym->attr.proc = PROC_EXTERNAL;
855 expr->value.function.name = sym->name;
856 expr->value.function.esym = expr->symtree->n.sym;
859 expr->rank = sym->as->rank;
861 /* Type of the expression is either the type of the symbol or the
862 default type of the symbol. */
865 gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
867 if (sym->ts.type != BT_UNKNOWN)
871 ts = gfc_get_default_type (sym, sym->ns);
873 if (ts->type == BT_UNKNOWN)
875 gfc_error ("Function '%s' at %L has no implicit type",
876 sym->name, &expr->where);
887 /* Figure out if if a function reference is pure or not. Also sets the name
888 of the function for a potential error message. Returns nonzero if the
889 function is PURE, zero if not. */
892 pure_function (gfc_expr * e, const char **name)
896 if (e->value.function.esym)
898 pure = gfc_pure (e->value.function.esym);
899 *name = e->value.function.esym->name;
901 else if (e->value.function.isym)
903 pure = e->value.function.isym->pure
904 || e->value.function.isym->elemental;
905 *name = e->value.function.isym->name;
909 /* Implicit functions are not pure. */
911 *name = e->value.function.name;
918 /* Resolve a function call, which means resolving the arguments, then figuring
919 out which entity the name refers to. */
920 /* TODO: Check procedure arguments so that an INTENT(IN) isn't passed
921 to INTENT(OUT) or INTENT(INOUT). */
924 resolve_function (gfc_expr * expr)
926 gfc_actual_arglist *arg;
930 if (resolve_actual_arglist (expr->value.function.actual) == FAILURE)
933 /* See if function is already resolved. */
935 if (expr->value.function.name != NULL)
937 if (expr->ts.type == BT_UNKNOWN)
938 expr->ts = expr->symtree->n.sym->ts;
943 /* Apply the rules of section 14.1.2. */
945 switch (procedure_kind (expr->symtree->n.sym))
948 t = resolve_generic_f (expr);
952 t = resolve_specific_f (expr);
956 t = resolve_unknown_f (expr);
960 gfc_internal_error ("resolve_function(): bad function type");
964 /* If the expression is still a function (it might have simplified),
965 then we check to see if we are calling an elemental function. */
967 if (expr->expr_type != EXPR_FUNCTION)
970 if (expr->value.function.actual != NULL
971 && ((expr->value.function.esym != NULL
972 && expr->value.function.esym->attr.elemental)
973 || (expr->value.function.isym != NULL
974 && expr->value.function.isym->elemental)))
977 /* The rank of an elemental is the rank of its array argument(s). */
979 for (arg = expr->value.function.actual; arg; arg = arg->next)
981 if (arg->expr != NULL && arg->expr->rank > 0)
983 expr->rank = arg->expr->rank;
989 if (!pure_function (expr, &name))
994 ("Function reference to '%s' at %L is inside a FORALL block",
998 else if (gfc_pure (NULL))
1000 gfc_error ("Function reference to '%s' at %L is to a non-PURE "
1001 "procedure within a PURE procedure", name, &expr->where);
1010 /************* Subroutine resolution *************/
1013 pure_subroutine (gfc_code * c, gfc_symbol * sym)
1020 gfc_error ("Subroutine call to '%s' in FORALL block at %L is not PURE",
1021 sym->name, &c->loc);
1022 else if (gfc_pure (NULL))
1023 gfc_error ("Subroutine call to '%s' at %L is not PURE", sym->name,
1029 resolve_generic_s0 (gfc_code * c, gfc_symbol * sym)
1033 if (sym->attr.generic)
1035 s = gfc_search_interface (sym->generic, 1, &c->ext.actual);
1038 c->resolved_sym = s;
1039 pure_subroutine (c, s);
1043 /* TODO: Need to search for elemental references in generic interface. */
1046 if (sym->attr.intrinsic)
1047 return gfc_intrinsic_sub_interface (c, 0);
1054 resolve_generic_s (gfc_code * c)
1059 sym = c->symtree->n.sym;
1061 m = resolve_generic_s0 (c, sym);
1064 if (m == MATCH_ERROR)
1067 if (sym->ns->parent != NULL)
1069 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
1072 m = resolve_generic_s0 (c, sym);
1075 if (m == MATCH_ERROR)
1080 /* Last ditch attempt. */
1082 if (!gfc_generic_intrinsic (sym->name))
1085 ("Generic subroutine '%s' at %L is not an intrinsic subroutine",
1086 sym->name, &c->loc);
1090 m = gfc_intrinsic_sub_interface (c, 0);
1094 gfc_error ("Generic subroutine '%s' at %L is not consistent with an "
1095 "intrinsic subroutine interface", sym->name, &c->loc);
1101 /* Resolve a subroutine call known to be specific. */
1104 resolve_specific_s0 (gfc_code * c, gfc_symbol * sym)
1108 if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
1110 if (sym->attr.dummy)
1112 sym->attr.proc = PROC_DUMMY;
1116 sym->attr.proc = PROC_EXTERNAL;
1120 if (sym->attr.proc == PROC_MODULE || sym->attr.proc == PROC_INTERNAL)
1123 if (sym->attr.intrinsic)
1125 m = gfc_intrinsic_sub_interface (c, 1);
1129 gfc_error ("Subroutine '%s' at %L is INTRINSIC but is not compatible "
1130 "with an intrinsic", sym->name, &c->loc);
1138 gfc_procedure_use (sym, &c->ext.actual, &c->loc);
1140 c->resolved_sym = sym;
1141 pure_subroutine (c, sym);
1148 resolve_specific_s (gfc_code * c)
1153 sym = c->symtree->n.sym;
1155 m = resolve_specific_s0 (c, sym);
1158 if (m == MATCH_ERROR)
1161 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
1165 m = resolve_specific_s0 (c, sym);
1168 if (m == MATCH_ERROR)
1172 gfc_error ("Unable to resolve the specific subroutine '%s' at %L",
1173 sym->name, &c->loc);
1179 /* Resolve a subroutine call not known to be generic nor specific. */
1182 resolve_unknown_s (gfc_code * c)
1186 sym = c->symtree->n.sym;
1188 if (sym->attr.dummy)
1190 sym->attr.proc = PROC_DUMMY;
1194 /* See if we have an intrinsic function reference. */
1196 if (gfc_intrinsic_name (sym->name, 1))
1198 if (gfc_intrinsic_sub_interface (c, 1) == MATCH_YES)
1203 /* The reference is to an external name. */
1206 gfc_procedure_use (sym, &c->ext.actual, &c->loc);
1208 c->resolved_sym = sym;
1210 pure_subroutine (c, sym);
1216 /* Resolve a subroutine call. Although it was tempting to use the same code
1217 for functions, subroutines and functions are stored differently and this
1218 makes things awkward. */
1221 resolve_call (gfc_code * c)
1225 if (resolve_actual_arglist (c->ext.actual) == FAILURE)
1228 if (c->resolved_sym != NULL)
1231 switch (procedure_kind (c->symtree->n.sym))
1234 t = resolve_generic_s (c);
1237 case PTYPE_SPECIFIC:
1238 t = resolve_specific_s (c);
1242 t = resolve_unknown_s (c);
1246 gfc_internal_error ("resolve_subroutine(): bad function type");
1253 /* Resolve an operator expression node. This can involve replacing the
1254 operation with a user defined function call. */
1257 resolve_operator (gfc_expr * e)
1259 gfc_expr *op1, *op2;
1263 /* Resolve all subnodes-- give them types. */
1265 switch (e->operator)
1268 if (gfc_resolve_expr (e->op2) == FAILURE)
1271 /* Fall through... */
1274 case INTRINSIC_UPLUS:
1275 case INTRINSIC_UMINUS:
1276 if (gfc_resolve_expr (e->op1) == FAILURE)
1281 /* Typecheck the new node. */
1286 switch (e->operator)
1288 case INTRINSIC_UPLUS:
1289 case INTRINSIC_UMINUS:
1290 if (op1->ts.type == BT_INTEGER
1291 || op1->ts.type == BT_REAL
1292 || op1->ts.type == BT_COMPLEX)
1298 sprintf (msg, "Operand of unary numeric operator '%s' at %%L is %s",
1299 gfc_op2string (e->operator), gfc_typename (&e->ts));
1302 case INTRINSIC_PLUS:
1303 case INTRINSIC_MINUS:
1304 case INTRINSIC_TIMES:
1305 case INTRINSIC_DIVIDE:
1306 case INTRINSIC_POWER:
1307 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
1309 gfc_type_convert_binary (e);
1314 "Operands of binary numeric operator '%s' at %%L are %s/%s",
1315 gfc_op2string (e->operator), gfc_typename (&op1->ts),
1316 gfc_typename (&op2->ts));
1319 case INTRINSIC_CONCAT:
1320 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER)
1322 e->ts.type = BT_CHARACTER;
1323 e->ts.kind = op1->ts.kind;
1328 "Operands of string concatenation operator at %%L are %s/%s",
1329 gfc_typename (&op1->ts), gfc_typename (&op2->ts));
1335 case INTRINSIC_NEQV:
1336 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
1338 e->ts.type = BT_LOGICAL;
1339 e->ts.kind = gfc_kind_max (op1, op2);
1340 if (op1->ts.kind < e->ts.kind)
1341 gfc_convert_type (op1, &e->ts, 2);
1342 else if (op2->ts.kind < e->ts.kind)
1343 gfc_convert_type (op2, &e->ts, 2);
1347 sprintf (msg, "Operands of logical operator '%s' at %%L are %s/%s",
1348 gfc_op2string (e->operator), gfc_typename (&op1->ts),
1349 gfc_typename (&op2->ts));
1354 if (op1->ts.type == BT_LOGICAL)
1356 e->ts.type = BT_LOGICAL;
1357 e->ts.kind = op1->ts.kind;
1361 sprintf (msg, "Operand of .NOT. operator at %%L is %s",
1362 gfc_typename (&op1->ts));
1369 if (op1->ts.type == BT_COMPLEX || op2->ts.type == BT_COMPLEX)
1371 strcpy (msg, "COMPLEX quantities cannot be compared at %L");
1375 /* Fall through... */
1379 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER)
1381 e->ts.type = BT_LOGICAL;
1382 e->ts.kind = gfc_default_logical_kind;
1386 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
1388 gfc_type_convert_binary (e);
1390 e->ts.type = BT_LOGICAL;
1391 e->ts.kind = gfc_default_logical_kind;
1395 sprintf (msg, "Operands of comparison operator '%s' at %%L are %s/%s",
1396 gfc_op2string (e->operator), gfc_typename (&op1->ts),
1397 gfc_typename (&op2->ts));
1401 case INTRINSIC_USER:
1403 sprintf (msg, "Operand of user operator '%s' at %%L is %s",
1404 e->uop->name, gfc_typename (&op1->ts));
1406 sprintf (msg, "Operands of user operator '%s' at %%L are %s/%s",
1407 e->uop->name, gfc_typename (&op1->ts),
1408 gfc_typename (&op2->ts));
1413 gfc_internal_error ("resolve_operator(): Bad intrinsic");
1416 /* Deal with arrayness of an operand through an operator. */
1420 switch (e->operator)
1422 case INTRINSIC_PLUS:
1423 case INTRINSIC_MINUS:
1424 case INTRINSIC_TIMES:
1425 case INTRINSIC_DIVIDE:
1426 case INTRINSIC_POWER:
1427 case INTRINSIC_CONCAT:
1431 case INTRINSIC_NEQV:
1439 if (op1->rank == 0 && op2->rank == 0)
1442 if (op1->rank == 0 && op2->rank != 0)
1444 e->rank = op2->rank;
1446 if (e->shape == NULL)
1447 e->shape = gfc_copy_shape (op2->shape, op2->rank);
1450 if (op1->rank != 0 && op2->rank == 0)
1452 e->rank = op1->rank;
1454 if (e->shape == NULL)
1455 e->shape = gfc_copy_shape (op1->shape, op1->rank);
1458 if (op1->rank != 0 && op2->rank != 0)
1460 if (op1->rank == op2->rank)
1462 e->rank = op1->rank;
1464 if (e->shape == NULL)
1465 e->shape = gfc_copy_shape (op1->shape, op1->rank);
1470 gfc_error ("Inconsistent ranks for operator at %L and %L",
1471 &op1->where, &op2->where);
1474 /* Allow higher level expressions to work. */
1482 case INTRINSIC_UPLUS:
1483 case INTRINSIC_UMINUS:
1484 e->rank = op1->rank;
1486 if (e->shape == NULL)
1487 e->shape = gfc_copy_shape (op1->shape, op1->rank);
1489 /* Simply copy arrayness attribute */
1496 /* Attempt to simplify the expression. */
1498 t = gfc_simplify_expr (e, 0);
1502 if (gfc_extend_expr (e) == SUCCESS)
1505 gfc_error (msg, &e->where);
1510 /************** Array resolution subroutines **************/
1514 { CMP_LT, CMP_EQ, CMP_GT, CMP_UNKNOWN }
1517 /* Compare two integer expressions. */
1520 compare_bound (gfc_expr * a, gfc_expr * b)
1524 if (a == NULL || a->expr_type != EXPR_CONSTANT
1525 || b == NULL || b->expr_type != EXPR_CONSTANT)
1528 if (a->ts.type != BT_INTEGER || b->ts.type != BT_INTEGER)
1529 gfc_internal_error ("compare_bound(): Bad expression");
1531 i = mpz_cmp (a->value.integer, b->value.integer);
1541 /* Compare an integer expression with an integer. */
1544 compare_bound_int (gfc_expr * a, int b)
1548 if (a == NULL || a->expr_type != EXPR_CONSTANT)
1551 if (a->ts.type != BT_INTEGER)
1552 gfc_internal_error ("compare_bound_int(): Bad expression");
1554 i = mpz_cmp_si (a->value.integer, b);
1564 /* Compare a single dimension of an array reference to the array
1568 check_dimension (int i, gfc_array_ref * ar, gfc_array_spec * as)
1571 /* Given start, end and stride values, calculate the minimum and
1572 maximum referenced indexes. */
1580 if (compare_bound (ar->start[i], as->lower[i]) == CMP_LT)
1582 if (compare_bound (ar->start[i], as->upper[i]) == CMP_GT)
1588 if (compare_bound_int (ar->stride[i], 0) == CMP_EQ)
1590 gfc_error ("Illegal stride of zero at %L", &ar->c_where[i]);
1594 if (compare_bound (ar->start[i], as->lower[i]) == CMP_LT)
1596 if (compare_bound (ar->start[i], as->upper[i]) == CMP_GT)
1599 /* TODO: Possibly, we could warn about end[i] being out-of-bound although
1600 it is legal (see 6.2.2.3.1). */
1605 gfc_internal_error ("check_dimension(): Bad array reference");
1611 gfc_warning ("Array reference at %L is out of bounds", &ar->c_where[i]);
1616 /* Compare an array reference with an array specification. */
1619 compare_spec_to_ref (gfc_array_ref * ar)
1626 /* TODO: Full array sections are only allowed as actual parameters. */
1627 if (as->type == AS_ASSUMED_SIZE
1628 && (/*ar->type == AR_FULL
1629 ||*/ (ar->type == AR_SECTION
1630 && ar->dimen_type[i] == DIMEN_RANGE && ar->end[i] == NULL)))
1632 gfc_error ("Rightmost upper bound of assumed size array section"
1633 " not specified at %L", &ar->where);
1637 if (ar->type == AR_FULL)
1640 if (as->rank != ar->dimen)
1642 gfc_error ("Rank mismatch in array reference at %L (%d/%d)",
1643 &ar->where, ar->dimen, as->rank);
1647 for (i = 0; i < as->rank; i++)
1648 if (check_dimension (i, ar, as) == FAILURE)
1655 /* Resolve one part of an array index. */
1658 gfc_resolve_index (gfc_expr * index, int check_scalar)
1665 if (gfc_resolve_expr (index) == FAILURE)
1668 if (index->ts.type != BT_INTEGER)
1670 gfc_error ("Array index at %L must be of INTEGER type", &index->where);
1674 if (check_scalar && index->rank != 0)
1676 gfc_error ("Array index at %L must be scalar", &index->where);
1680 if (index->ts.kind != gfc_index_integer_kind)
1682 ts.type = BT_INTEGER;
1683 ts.kind = gfc_index_integer_kind;
1685 gfc_convert_type_warn (index, &ts, 2, 0);
1692 /* Given an expression that contains array references, update those array
1693 references to point to the right array specifications. While this is
1694 filled in during matching, this information is difficult to save and load
1695 in a module, so we take care of it here.
1697 The idea here is that the original array reference comes from the
1698 base symbol. We traverse the list of reference structures, setting
1699 the stored reference to references. Component references can
1700 provide an additional array specification. */
1703 find_array_spec (gfc_expr * e)
1709 as = e->symtree->n.sym->as;
1710 c = e->symtree->n.sym->components;
1712 for (ref = e->ref; ref; ref = ref->next)
1717 gfc_internal_error ("find_array_spec(): Missing spec");
1724 for (; c; c = c->next)
1725 if (c == ref->u.c.component)
1729 gfc_internal_error ("find_array_spec(): Component not found");
1734 gfc_internal_error ("find_array_spec(): unused as(1)");
1738 c = c->ts.derived->components;
1746 gfc_internal_error ("find_array_spec(): unused as(2)");
1750 /* Resolve an array reference. */
1753 resolve_array_ref (gfc_array_ref * ar)
1755 int i, check_scalar;
1757 for (i = 0; i < ar->dimen; i++)
1759 check_scalar = ar->dimen_type[i] == DIMEN_RANGE;
1761 if (gfc_resolve_index (ar->start[i], check_scalar) == FAILURE)
1763 if (gfc_resolve_index (ar->end[i], check_scalar) == FAILURE)
1765 if (gfc_resolve_index (ar->stride[i], check_scalar) == FAILURE)
1768 if (ar->dimen_type[i] == DIMEN_UNKNOWN)
1769 switch (ar->start[i]->rank)
1772 ar->dimen_type[i] = DIMEN_ELEMENT;
1776 ar->dimen_type[i] = DIMEN_VECTOR;
1780 gfc_error ("Array index at %L is an array of rank %d",
1781 &ar->c_where[i], ar->start[i]->rank);
1786 /* If the reference type is unknown, figure out what kind it is. */
1788 if (ar->type == AR_UNKNOWN)
1790 ar->type = AR_ELEMENT;
1791 for (i = 0; i < ar->dimen; i++)
1792 if (ar->dimen_type[i] == DIMEN_RANGE
1793 || ar->dimen_type[i] == DIMEN_VECTOR)
1795 ar->type = AR_SECTION;
1800 if (compare_spec_to_ref (ar) == FAILURE)
1808 resolve_substring (gfc_ref * ref)
1811 if (ref->u.ss.start != NULL)
1813 if (gfc_resolve_expr (ref->u.ss.start) == FAILURE)
1816 if (ref->u.ss.start->ts.type != BT_INTEGER)
1818 gfc_error ("Substring start index at %L must be of type INTEGER",
1819 &ref->u.ss.start->where);
1823 if (ref->u.ss.start->rank != 0)
1825 gfc_error ("Substring start index at %L must be scalar",
1826 &ref->u.ss.start->where);
1830 if (compare_bound_int (ref->u.ss.start, 1) == CMP_LT)
1832 gfc_error ("Substring start index at %L is less than one",
1833 &ref->u.ss.start->where);
1838 if (ref->u.ss.end != NULL)
1840 if (gfc_resolve_expr (ref->u.ss.end) == FAILURE)
1843 if (ref->u.ss.end->ts.type != BT_INTEGER)
1845 gfc_error ("Substring end index at %L must be of type INTEGER",
1846 &ref->u.ss.end->where);
1850 if (ref->u.ss.end->rank != 0)
1852 gfc_error ("Substring end index at %L must be scalar",
1853 &ref->u.ss.end->where);
1857 if (ref->u.ss.length != NULL
1858 && compare_bound (ref->u.ss.end, ref->u.ss.length->length) == CMP_GT)
1860 gfc_error ("Substring end index at %L is out of bounds",
1861 &ref->u.ss.start->where);
1870 /* Resolve subtype references. */
1873 resolve_ref (gfc_expr * expr)
1875 int current_part_dimension, n_components, seen_part_dimension;
1878 for (ref = expr->ref; ref; ref = ref->next)
1879 if (ref->type == REF_ARRAY && ref->u.ar.as == NULL)
1881 find_array_spec (expr);
1885 for (ref = expr->ref; ref; ref = ref->next)
1889 if (resolve_array_ref (&ref->u.ar) == FAILURE)
1897 resolve_substring (ref);
1901 /* Check constraints on part references. */
1903 current_part_dimension = 0;
1904 seen_part_dimension = 0;
1907 for (ref = expr->ref; ref; ref = ref->next)
1912 switch (ref->u.ar.type)
1916 current_part_dimension = 1;
1920 current_part_dimension = 0;
1924 gfc_internal_error ("resolve_ref(): Bad array reference");
1930 if ((current_part_dimension || seen_part_dimension)
1931 && ref->u.c.component->pointer)
1934 ("Component to the right of a part reference with nonzero "
1935 "rank must not have the POINTER attribute at %L",
1947 if (((ref->type == REF_COMPONENT && n_components > 1)
1948 || ref->next == NULL)
1949 && current_part_dimension
1950 && seen_part_dimension)
1953 gfc_error ("Two or more part references with nonzero rank must "
1954 "not be specified at %L", &expr->where);
1958 if (ref->type == REF_COMPONENT)
1960 if (current_part_dimension)
1961 seen_part_dimension = 1;
1963 /* reset to make sure */
1964 current_part_dimension = 0;
1972 /* Given an expression, determine its shape. This is easier than it sounds.
1973 Leaves the shape array NULL if it is not possible to determine the shape. */
1976 expression_shape (gfc_expr * e)
1978 mpz_t array[GFC_MAX_DIMENSIONS];
1981 if (e->rank == 0 || e->shape != NULL)
1984 for (i = 0; i < e->rank; i++)
1985 if (gfc_array_dimen_size (e, i, &array[i]) == FAILURE)
1988 e->shape = gfc_get_shape (e->rank);
1990 memcpy (e->shape, array, e->rank * sizeof (mpz_t));
1995 for (i--; i >= 0; i--)
1996 mpz_clear (array[i]);
2000 /* Given a variable expression node, compute the rank of the expression by
2001 examining the base symbol and any reference structures it may have. */
2004 expression_rank (gfc_expr * e)
2011 if (e->expr_type == EXPR_ARRAY)
2013 /* Constructors can have a rank different from one via RESHAPE(). */
2015 if (e->symtree == NULL)
2021 e->rank = (e->symtree->n.sym->as == NULL)
2022 ? 0 : e->symtree->n.sym->as->rank;
2028 for (ref = e->ref; ref; ref = ref->next)
2030 if (ref->type != REF_ARRAY)
2033 if (ref->u.ar.type == AR_FULL)
2035 rank = ref->u.ar.as->rank;
2039 if (ref->u.ar.type == AR_SECTION)
2041 /* Figure out the rank of the section. */
2043 gfc_internal_error ("expression_rank(): Two array specs");
2045 for (i = 0; i < ref->u.ar.dimen; i++)
2046 if (ref->u.ar.dimen_type[i] == DIMEN_RANGE
2047 || ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
2057 expression_shape (e);
2061 /* Resolve a variable expression. */
2064 resolve_variable (gfc_expr * e)
2068 if (e->ref && resolve_ref (e) == FAILURE)
2071 sym = e->symtree->n.sym;
2072 if (sym->attr.flavor == FL_PROCEDURE && !sym->attr.function)
2074 e->ts.type = BT_PROCEDURE;
2078 if (sym->ts.type != BT_UNKNOWN)
2079 gfc_variable_attr (e, &e->ts);
2082 /* Must be a simple variable reference. */
2083 if (gfc_set_default_type (sym, 1, NULL) == FAILURE)
2092 /* Resolve an expression. That is, make sure that types of operands agree
2093 with their operators, intrinsic operators are converted to function calls
2094 for overloaded types and unresolved function references are resolved. */
2097 gfc_resolve_expr (gfc_expr * e)
2104 switch (e->expr_type)
2107 t = resolve_operator (e);
2111 t = resolve_function (e);
2115 t = resolve_variable (e);
2117 expression_rank (e);
2120 case EXPR_SUBSTRING:
2121 t = resolve_ref (e);
2131 if (resolve_ref (e) == FAILURE)
2134 t = gfc_resolve_array_constructor (e);
2135 /* Also try to expand a constructor. */
2138 expression_rank (e);
2139 gfc_expand_constructor (e);
2144 case EXPR_STRUCTURE:
2145 t = resolve_ref (e);
2149 t = resolve_structure_cons (e);
2153 t = gfc_simplify_expr (e, 0);
2157 gfc_internal_error ("gfc_resolve_expr(): Bad expression type");
2164 /* Resolve an expression from an iterator. They must be scalar and have
2165 INTEGER or (optionally) REAL type. */
2168 gfc_resolve_iterator_expr (gfc_expr * expr, bool real_ok, const char * name)
2170 if (gfc_resolve_expr (expr) == FAILURE)
2173 if (expr->rank != 0)
2175 gfc_error ("%s at %L must be a scalar", name, &expr->where);
2179 if (!(expr->ts.type == BT_INTEGER
2180 || (expr->ts.type == BT_REAL && real_ok)))
2182 gfc_error ("%s at %L must be INTEGER%s",
2185 real_ok ? " or REAL" : "");
2192 /* Resolve the expressions in an iterator structure. If REAL_OK is
2193 false allow only INTEGER type iterators, otherwise allow REAL types. */
2196 gfc_resolve_iterator (gfc_iterator * iter, bool real_ok)
2199 if (iter->var->ts.type == BT_REAL)
2200 gfc_notify_std (GFC_STD_F95_DEL,
2201 "Obsolete: REAL DO loop iterator at %L",
2204 if (gfc_resolve_iterator_expr (iter->var, real_ok, "Loop variable")
2208 if (gfc_pure (NULL) && gfc_impure_variable (iter->var->symtree->n.sym))
2210 gfc_error ("Cannot assign to loop variable in PURE procedure at %L",
2215 if (gfc_resolve_iterator_expr (iter->start, real_ok,
2216 "Start expression in DO loop") == FAILURE)
2219 if (gfc_resolve_iterator_expr (iter->end, real_ok,
2220 "End expression in DO loop") == FAILURE)
2223 if (gfc_resolve_iterator_expr (iter->step, real_ok,
2224 "Step expression in DO loop") == FAILURE)
2227 if (iter->step->expr_type == EXPR_CONSTANT)
2229 if ((iter->step->ts.type == BT_INTEGER
2230 && mpz_cmp_ui (iter->step->value.integer, 0) == 0)
2231 || (iter->step->ts.type == BT_REAL
2232 && mpfr_sgn (iter->step->value.real) == 0))
2234 gfc_error ("Step expression in DO loop at %L cannot be zero",
2235 &iter->step->where);
2240 /* Convert start, end, and step to the same type as var. */
2241 if (iter->start->ts.kind != iter->var->ts.kind
2242 || iter->start->ts.type != iter->var->ts.type)
2243 gfc_convert_type (iter->start, &iter->var->ts, 2);
2245 if (iter->end->ts.kind != iter->var->ts.kind
2246 || iter->end->ts.type != iter->var->ts.type)
2247 gfc_convert_type (iter->end, &iter->var->ts, 2);
2249 if (iter->step->ts.kind != iter->var->ts.kind
2250 || iter->step->ts.type != iter->var->ts.type)
2251 gfc_convert_type (iter->step, &iter->var->ts, 2);
2257 /* Resolve a list of FORALL iterators. */
2260 resolve_forall_iterators (gfc_forall_iterator * iter)
2265 if (gfc_resolve_expr (iter->var) == SUCCESS
2266 && iter->var->ts.type != BT_INTEGER)
2267 gfc_error ("FORALL Iteration variable at %L must be INTEGER",
2270 if (gfc_resolve_expr (iter->start) == SUCCESS
2271 && iter->start->ts.type != BT_INTEGER)
2272 gfc_error ("FORALL start expression at %L must be INTEGER",
2273 &iter->start->where);
2274 if (iter->var->ts.kind != iter->start->ts.kind)
2275 gfc_convert_type (iter->start, &iter->var->ts, 2);
2277 if (gfc_resolve_expr (iter->end) == SUCCESS
2278 && iter->end->ts.type != BT_INTEGER)
2279 gfc_error ("FORALL end expression at %L must be INTEGER",
2281 if (iter->var->ts.kind != iter->end->ts.kind)
2282 gfc_convert_type (iter->end, &iter->var->ts, 2);
2284 if (gfc_resolve_expr (iter->stride) == SUCCESS
2285 && iter->stride->ts.type != BT_INTEGER)
2286 gfc_error ("FORALL Stride expression at %L must be INTEGER",
2287 &iter->stride->where);
2288 if (iter->var->ts.kind != iter->stride->ts.kind)
2289 gfc_convert_type (iter->stride, &iter->var->ts, 2);
2296 /* Given a pointer to a symbol that is a derived type, see if any components
2297 have the POINTER attribute. The search is recursive if necessary.
2298 Returns zero if no pointer components are found, nonzero otherwise. */
2301 derived_pointer (gfc_symbol * sym)
2305 for (c = sym->components; c; c = c->next)
2310 if (c->ts.type == BT_DERIVED && derived_pointer (c->ts.derived))
2318 /* Resolve the argument of a deallocate expression. The expression must be
2319 a pointer or a full array. */
2322 resolve_deallocate_expr (gfc_expr * e)
2324 symbol_attribute attr;
2328 if (gfc_resolve_expr (e) == FAILURE)
2331 attr = gfc_expr_attr (e);
2335 if (e->expr_type != EXPR_VARIABLE)
2338 allocatable = e->symtree->n.sym->attr.allocatable;
2339 for (ref = e->ref; ref; ref = ref->next)
2343 if (ref->u.ar.type != AR_FULL)
2348 allocatable = (ref->u.c.component->as != NULL
2349 && ref->u.c.component->as->type == AS_DEFERRED);
2357 if (allocatable == 0)
2360 gfc_error ("Expression in DEALLOCATE statement at %L must be "
2361 "ALLOCATABLE or a POINTER", &e->where);
2368 /* Resolve the expression in an ALLOCATE statement, doing the additional
2369 checks to see whether the expression is OK or not. The expression must
2370 have a trailing array reference that gives the size of the array. */
2373 resolve_allocate_expr (gfc_expr * e)
2375 int i, pointer, allocatable, dimension;
2376 symbol_attribute attr;
2377 gfc_ref *ref, *ref2;
2380 if (gfc_resolve_expr (e) == FAILURE)
2383 /* Make sure the expression is allocatable or a pointer. If it is
2384 pointer, the next-to-last reference must be a pointer. */
2388 if (e->expr_type != EXPR_VARIABLE)
2392 attr = gfc_expr_attr (e);
2393 pointer = attr.pointer;
2394 dimension = attr.dimension;
2399 allocatable = e->symtree->n.sym->attr.allocatable;
2400 pointer = e->symtree->n.sym->attr.pointer;
2401 dimension = e->symtree->n.sym->attr.dimension;
2403 for (ref = e->ref; ref; ref2 = ref, ref = ref->next)
2407 if (ref->next != NULL)
2412 allocatable = (ref->u.c.component->as != NULL
2413 && ref->u.c.component->as->type == AS_DEFERRED);
2415 pointer = ref->u.c.component->pointer;
2416 dimension = ref->u.c.component->dimension;
2426 if (allocatable == 0 && pointer == 0)
2428 gfc_error ("Expression in ALLOCATE statement at %L must be "
2429 "ALLOCATABLE or a POINTER", &e->where);
2433 if (pointer && dimension == 0)
2436 /* Make sure the next-to-last reference node is an array specification. */
2438 if (ref2 == NULL || ref2->type != REF_ARRAY || ref2->u.ar.type == AR_FULL)
2440 gfc_error ("Array specification required in ALLOCATE statement "
2441 "at %L", &e->where);
2445 if (ref2->u.ar.type == AR_ELEMENT)
2448 /* Make sure that the array section reference makes sense in the
2449 context of an ALLOCATE specification. */
2453 for (i = 0; i < ar->dimen; i++)
2454 switch (ar->dimen_type[i])
2460 if (ar->start[i] != NULL
2461 && ar->end[i] != NULL
2462 && ar->stride[i] == NULL)
2465 /* Fall Through... */
2469 gfc_error ("Bad array specification in ALLOCATE statement at %L",
2478 /************ SELECT CASE resolution subroutines ************/
2480 /* Callback function for our mergesort variant. Determines interval
2481 overlaps for CASEs. Return <0 if op1 < op2, 0 for overlap, >0 for
2482 op1 > op2. Assumes we're not dealing with the default case.
2483 We have op1 = (:L), (K:L) or (K:) and op2 = (:N), (M:N) or (M:).
2484 There are nine situations to check. */
2487 compare_cases (const gfc_case * op1, const gfc_case * op2)
2491 if (op1->low == NULL) /* op1 = (:L) */
2493 /* op2 = (:N), so overlap. */
2495 /* op2 = (M:) or (M:N), L < M */
2496 if (op2->low != NULL
2497 && gfc_compare_expr (op1->high, op2->low) < 0)
2500 else if (op1->high == NULL) /* op1 = (K:) */
2502 /* op2 = (M:), so overlap. */
2504 /* op2 = (:N) or (M:N), K > N */
2505 if (op2->high != NULL
2506 && gfc_compare_expr (op1->low, op2->high) > 0)
2509 else /* op1 = (K:L) */
2511 if (op2->low == NULL) /* op2 = (:N), K > N */
2512 retval = (gfc_compare_expr (op1->low, op2->high) > 0) ? 1 : 0;
2513 else if (op2->high == NULL) /* op2 = (M:), L < M */
2514 retval = (gfc_compare_expr (op1->high, op2->low) < 0) ? -1 : 0;
2515 else /* op2 = (M:N) */
2519 if (gfc_compare_expr (op1->high, op2->low) < 0)
2522 else if (gfc_compare_expr (op1->low, op2->high) > 0)
2531 /* Merge-sort a double linked case list, detecting overlap in the
2532 process. LIST is the head of the double linked case list before it
2533 is sorted. Returns the head of the sorted list if we don't see any
2534 overlap, or NULL otherwise. */
2537 check_case_overlap (gfc_case * list)
2539 gfc_case *p, *q, *e, *tail;
2540 int insize, nmerges, psize, qsize, cmp, overlap_seen;
2542 /* If the passed list was empty, return immediately. */
2549 /* Loop unconditionally. The only exit from this loop is a return
2550 statement, when we've finished sorting the case list. */
2557 /* Count the number of merges we do in this pass. */
2560 /* Loop while there exists a merge to be done. */
2565 /* Count this merge. */
2568 /* Cut the list in two pieces by stepping INSIZE places
2569 forward in the list, starting from P. */
2572 for (i = 0; i < insize; i++)
2581 /* Now we have two lists. Merge them! */
2582 while (psize > 0 || (qsize > 0 && q != NULL))
2585 /* See from which the next case to merge comes from. */
2588 /* P is empty so the next case must come from Q. */
2593 else if (qsize == 0 || q == NULL)
2602 cmp = compare_cases (p, q);
2605 /* The whole case range for P is less than the
2613 /* The whole case range for Q is greater than
2614 the case range for P. */
2621 /* The cases overlap, or they are the same
2622 element in the list. Either way, we must
2623 issue an error and get the next case from P. */
2624 /* FIXME: Sort P and Q by line number. */
2625 gfc_error ("CASE label at %L overlaps with CASE "
2626 "label at %L", &p->where, &q->where);
2634 /* Add the next element to the merged list. */
2643 /* P has now stepped INSIZE places along, and so has Q. So
2644 they're the same. */
2649 /* If we have done only one merge or none at all, we've
2650 finished sorting the cases. */
2659 /* Otherwise repeat, merging lists twice the size. */
2665 /* Check to see if an expression is suitable for use in a CASE statement.
2666 Makes sure that all case expressions are scalar constants of the same
2667 type. Return FAILURE if anything is wrong. */
2670 validate_case_label_expr (gfc_expr * e, gfc_expr * case_expr)
2672 if (e == NULL) return SUCCESS;
2674 if (e->ts.type != case_expr->ts.type)
2676 gfc_error ("Expression in CASE statement at %L must be of type %s",
2677 &e->where, gfc_basic_typename (case_expr->ts.type));
2681 /* C805 (R808) For a given case-construct, each case-value shall be of
2682 the same type as case-expr. For character type, length differences
2683 are allowed, but the kind type parameters shall be the same. */
2685 if (case_expr->ts.type == BT_CHARACTER && e->ts.kind != case_expr->ts.kind)
2687 gfc_error("Expression in CASE statement at %L must be kind %d",
2688 &e->where, case_expr->ts.kind);
2692 /* Convert the case value kind to that of case expression kind, if needed.
2693 FIXME: Should a warning be issued? */
2694 if (e->ts.kind != case_expr->ts.kind)
2695 gfc_convert_type_warn (e, &case_expr->ts, 2, 0);
2699 gfc_error ("Expression in CASE statement at %L must be scalar",
2708 /* Given a completely parsed select statement, we:
2710 - Validate all expressions and code within the SELECT.
2711 - Make sure that the selection expression is not of the wrong type.
2712 - Make sure that no case ranges overlap.
2713 - Eliminate unreachable cases and unreachable code resulting from
2714 removing case labels.
2716 The standard does allow unreachable cases, e.g. CASE (5:3). But
2717 they are a hassle for code generation, and to prevent that, we just
2718 cut them out here. This is not necessary for overlapping cases
2719 because they are illegal and we never even try to generate code.
2721 We have the additional caveat that a SELECT construct could have
2722 been a computed GOTO in the source code. Fortunately we can fairly
2723 easily work around that here: The case_expr for a "real" SELECT CASE
2724 is in code->expr1, but for a computed GOTO it is in code->expr2. All
2725 we have to do is make sure that the case_expr is a scalar integer
2729 resolve_select (gfc_code * code)
2732 gfc_expr *case_expr;
2733 gfc_case *cp, *default_case, *tail, *head;
2734 int seen_unreachable;
2739 if (code->expr == NULL)
2741 /* This was actually a computed GOTO statement. */
2742 case_expr = code->expr2;
2743 if (case_expr->ts.type != BT_INTEGER
2744 || case_expr->rank != 0)
2745 gfc_error ("Selection expression in computed GOTO statement "
2746 "at %L must be a scalar integer expression",
2749 /* Further checking is not necessary because this SELECT was built
2750 by the compiler, so it should always be OK. Just move the
2751 case_expr from expr2 to expr so that we can handle computed
2752 GOTOs as normal SELECTs from here on. */
2753 code->expr = code->expr2;
2758 case_expr = code->expr;
2760 type = case_expr->ts.type;
2761 if (type != BT_LOGICAL && type != BT_INTEGER && type != BT_CHARACTER)
2763 gfc_error ("Argument of SELECT statement at %L cannot be %s",
2764 &case_expr->where, gfc_typename (&case_expr->ts));
2766 /* Punt. Going on here just produce more garbage error messages. */
2770 if (case_expr->rank != 0)
2772 gfc_error ("Argument of SELECT statement at %L must be a scalar "
2773 "expression", &case_expr->where);
2779 /* PR 19168 has a long discussion concerning a mismatch of the kinds
2780 of the SELECT CASE expression and its CASE values. Walk the lists
2781 of case values, and if we find a mismatch, promote case_expr to
2782 the appropriate kind. */
2784 if (type == BT_LOGICAL || type == BT_INTEGER)
2786 for (body = code->block; body; body = body->block)
2788 /* Walk the case label list. */
2789 for (cp = body->ext.case_list; cp; cp = cp->next)
2791 /* Intercept the DEFAULT case. It does not have a kind. */
2792 if (cp->low == NULL && cp->high == NULL)
2795 /* Unreachable case ranges are discarded, so ignore. */
2796 if (cp->low != NULL && cp->high != NULL
2797 && cp->low != cp->high
2798 && gfc_compare_expr (cp->low, cp->high) > 0)
2801 /* FIXME: Should a warning be issued? */
2803 && case_expr->ts.kind != gfc_kind_max(case_expr, cp->low))
2804 gfc_convert_type_warn (case_expr, &cp->low->ts, 2, 0);
2806 if (cp->high != NULL
2807 && case_expr->ts.kind != gfc_kind_max(case_expr, cp->high))
2808 gfc_convert_type_warn (case_expr, &cp->high->ts, 2, 0);
2813 /* Assume there is no DEFAULT case. */
2814 default_case = NULL;
2818 for (body = code->block; body; body = body->block)
2820 /* Assume the CASE list is OK, and all CASE labels can be matched. */
2822 seen_unreachable = 0;
2824 /* Walk the case label list, making sure that all case labels
2826 for (cp = body->ext.case_list; cp; cp = cp->next)
2828 /* Count the number of cases in the whole construct. */
2831 /* Intercept the DEFAULT case. */
2832 if (cp->low == NULL && cp->high == NULL)
2834 if (default_case != NULL)
2836 gfc_error ("The DEFAULT CASE at %L cannot be followed "
2837 "by a second DEFAULT CASE at %L",
2838 &default_case->where, &cp->where);
2849 /* Deal with single value cases and case ranges. Errors are
2850 issued from the validation function. */
2851 if(validate_case_label_expr (cp->low, case_expr) != SUCCESS
2852 || validate_case_label_expr (cp->high, case_expr) != SUCCESS)
2858 if (type == BT_LOGICAL
2859 && ((cp->low == NULL || cp->high == NULL)
2860 || cp->low != cp->high))
2863 ("Logical range in CASE statement at %L is not allowed",
2869 if (cp->low != NULL && cp->high != NULL
2870 && cp->low != cp->high
2871 && gfc_compare_expr (cp->low, cp->high) > 0)
2873 if (gfc_option.warn_surprising)
2874 gfc_warning ("Range specification at %L can never "
2875 "be matched", &cp->where);
2877 cp->unreachable = 1;
2878 seen_unreachable = 1;
2882 /* If the case range can be matched, it can also overlap with
2883 other cases. To make sure it does not, we put it in a
2884 double linked list here. We sort that with a merge sort
2885 later on to detect any overlapping cases. */
2889 head->right = head->left = NULL;
2894 tail->right->left = tail;
2901 /* It there was a failure in the previous case label, give up
2902 for this case label list. Continue with the next block. */
2906 /* See if any case labels that are unreachable have been seen.
2907 If so, we eliminate them. This is a bit of a kludge because
2908 the case lists for a single case statement (label) is a
2909 single forward linked lists. */
2910 if (seen_unreachable)
2912 /* Advance until the first case in the list is reachable. */
2913 while (body->ext.case_list != NULL
2914 && body->ext.case_list->unreachable)
2916 gfc_case *n = body->ext.case_list;
2917 body->ext.case_list = body->ext.case_list->next;
2919 gfc_free_case_list (n);
2922 /* Strip all other unreachable cases. */
2923 if (body->ext.case_list)
2925 for (cp = body->ext.case_list; cp->next; cp = cp->next)
2927 if (cp->next->unreachable)
2929 gfc_case *n = cp->next;
2930 cp->next = cp->next->next;
2932 gfc_free_case_list (n);
2939 /* See if there were overlapping cases. If the check returns NULL,
2940 there was overlap. In that case we don't do anything. If head
2941 is non-NULL, we prepend the DEFAULT case. The sorted list can
2942 then used during code generation for SELECT CASE constructs with
2943 a case expression of a CHARACTER type. */
2946 head = check_case_overlap (head);
2948 /* Prepend the default_case if it is there. */
2949 if (head != NULL && default_case)
2951 default_case->left = NULL;
2952 default_case->right = head;
2953 head->left = default_case;
2957 /* Eliminate dead blocks that may be the result if we've seen
2958 unreachable case labels for a block. */
2959 for (body = code; body && body->block; body = body->block)
2961 if (body->block->ext.case_list == NULL)
2963 /* Cut the unreachable block from the code chain. */
2964 gfc_code *c = body->block;
2965 body->block = c->block;
2967 /* Kill the dead block, but not the blocks below it. */
2969 gfc_free_statements (c);
2973 /* More than two cases is legal but insane for logical selects.
2974 Issue a warning for it. */
2975 if (gfc_option.warn_surprising && type == BT_LOGICAL
2977 gfc_warning ("Logical SELECT CASE block at %L has more that two cases",
2982 /* Resolve a transfer statement. This is making sure that:
2983 -- a derived type being transferred has only non-pointer components
2984 -- a derived type being transferred doesn't have private components
2985 -- we're not trying to transfer a whole assumed size array. */
2988 resolve_transfer (gfc_code * code)
2997 if (exp->expr_type != EXPR_VARIABLE)
3000 sym = exp->symtree->n.sym;
3003 /* Go to actual component transferred. */
3004 for (ref = code->expr->ref; ref; ref = ref->next)
3005 if (ref->type == REF_COMPONENT)
3006 ts = &ref->u.c.component->ts;
3008 if (ts->type == BT_DERIVED)
3010 /* Check that transferred derived type doesn't contain POINTER
3012 if (derived_pointer (ts->derived))
3014 gfc_error ("Data transfer element at %L cannot have "
3015 "POINTER components", &code->loc);
3019 if (ts->derived->component_access == ACCESS_PRIVATE)
3021 gfc_error ("Data transfer element at %L cannot have "
3022 "PRIVATE components",&code->loc);
3027 if (sym->as != NULL && sym->as->type == AS_ASSUMED_SIZE
3028 && exp->ref->type == REF_ARRAY && exp->ref->u.ar.type == AR_FULL)
3030 gfc_error ("Data transfer element at %L cannot be a full reference to "
3031 "an assumed-size array", &code->loc);
3037 /*********** Toplevel code resolution subroutines ***********/
3039 /* Given a branch to a label and a namespace, if the branch is conforming.
3040 The code node described where the branch is located. */
3043 resolve_branch (gfc_st_label * label, gfc_code * code)
3045 gfc_code *block, *found;
3053 /* Step one: is this a valid branching target? */
3055 if (lp->defined == ST_LABEL_UNKNOWN)
3057 gfc_error ("Label %d referenced at %L is never defined", lp->value,
3062 if (lp->defined != ST_LABEL_TARGET)
3064 gfc_error ("Statement at %L is not a valid branch target statement "
3065 "for the branch statement at %L", &lp->where, &code->loc);
3069 /* Step two: make sure this branch is not a branch to itself ;-) */
3071 if (code->here == label)
3073 gfc_warning ("Branch at %L causes an infinite loop", &code->loc);
3077 /* Step three: Try to find the label in the parse tree. To do this,
3078 we traverse the tree block-by-block: first the block that
3079 contains this GOTO, then the block that it is nested in, etc. We
3080 can ignore other blocks because branching into another block is
3085 for (stack = cs_base; stack; stack = stack->prev)
3087 for (block = stack->head; block; block = block->next)
3089 if (block->here == label)
3102 /* still nothing, so illegal. */
3103 gfc_error_now ("Label at %L is not in the same block as the "
3104 "GOTO statement at %L", &lp->where, &code->loc);
3108 /* Step four: Make sure that the branching target is legal if
3109 the statement is an END {SELECT,DO,IF}. */
3111 if (found->op == EXEC_NOP)
3113 for (stack = cs_base; stack; stack = stack->prev)
3114 if (stack->current->next == found)
3118 gfc_notify_std (GFC_STD_F95_DEL,
3119 "Obsolete: GOTO at %L jumps to END of construct at %L",
3120 &code->loc, &found->loc);
3125 /* Check whether EXPR1 has the same shape as EXPR2. */
3128 resolve_where_shape (gfc_expr *expr1, gfc_expr *expr2)
3130 mpz_t shape[GFC_MAX_DIMENSIONS];
3131 mpz_t shape2[GFC_MAX_DIMENSIONS];
3132 try result = FAILURE;
3135 /* Compare the rank. */
3136 if (expr1->rank != expr2->rank)
3139 /* Compare the size of each dimension. */
3140 for (i=0; i<expr1->rank; i++)
3142 if (gfc_array_dimen_size (expr1, i, &shape[i]) == FAILURE)
3145 if (gfc_array_dimen_size (expr2, i, &shape2[i]) == FAILURE)
3148 if (mpz_cmp (shape[i], shape2[i]))
3152 /* When either of the two expression is an assumed size array, we
3153 ignore the comparison of dimension sizes. */
3158 for (i--; i>=0; i--)
3160 mpz_clear (shape[i]);
3161 mpz_clear (shape2[i]);
3167 /* Check whether a WHERE assignment target or a WHERE mask expression
3168 has the same shape as the outmost WHERE mask expression. */
3171 resolve_where (gfc_code *code, gfc_expr *mask)
3177 cblock = code->block;
3179 /* Store the first WHERE mask-expr of the WHERE statement or construct.
3180 In case of nested WHERE, only the outmost one is stored. */
3181 if (mask == NULL) /* outmost WHERE */
3183 else /* inner WHERE */
3190 /* Check if the mask-expr has a consistent shape with the
3191 outmost WHERE mask-expr. */
3192 if (resolve_where_shape (cblock->expr, e) == FAILURE)
3193 gfc_error ("WHERE mask at %L has inconsistent shape",
3194 &cblock->expr->where);
3197 /* the assignment statement of a WHERE statement, or the first
3198 statement in where-body-construct of a WHERE construct */
3199 cnext = cblock->next;
3204 /* WHERE assignment statement */
3207 /* Check shape consistent for WHERE assignment target. */
3208 if (e && resolve_where_shape (cnext->expr, e) == FAILURE)
3209 gfc_error ("WHERE assignment target at %L has "
3210 "inconsistent shape", &cnext->expr->where);
3213 /* WHERE or WHERE construct is part of a where-body-construct */
3215 resolve_where (cnext, e);
3219 gfc_error ("Unsupported statement inside WHERE at %L",
3222 /* the next statement within the same where-body-construct */
3223 cnext = cnext->next;
3225 /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
3226 cblock = cblock->block;
3231 /* Check whether the FORALL index appears in the expression or not. */
3234 gfc_find_forall_index (gfc_expr *expr, gfc_symbol *symbol)
3238 gfc_actual_arglist *args;
3241 switch (expr->expr_type)
3244 gcc_assert (expr->symtree->n.sym);
3246 /* A scalar assignment */
3249 if (expr->symtree->n.sym == symbol)
3255 /* the expr is array ref, substring or struct component. */
3262 /* Check if the symbol appears in the array subscript. */
3264 for (i = 0; i < GFC_MAX_DIMENSIONS; i++)
3267 if (gfc_find_forall_index (ar.start[i], symbol) == SUCCESS)
3271 if (gfc_find_forall_index (ar.end[i], symbol) == SUCCESS)
3275 if (gfc_find_forall_index (ar.stride[i], symbol) == SUCCESS)
3281 if (expr->symtree->n.sym == symbol)
3284 /* Check if the symbol appears in the substring section. */
3285 if (gfc_find_forall_index (tmp->u.ss.start, symbol) == SUCCESS)
3287 if (gfc_find_forall_index (tmp->u.ss.end, symbol) == SUCCESS)
3295 gfc_error("expresion reference type error at %L", &expr->where);
3301 /* If the expression is a function call, then check if the symbol
3302 appears in the actual arglist of the function. */
3304 for (args = expr->value.function.actual; args; args = args->next)
3306 if (gfc_find_forall_index(args->expr,symbol) == SUCCESS)
3311 /* It seems not to happen. */
3312 case EXPR_SUBSTRING:
3316 gcc_assert (expr->ref->type == REF_SUBSTRING);
3317 if (gfc_find_forall_index (tmp->u.ss.start, symbol) == SUCCESS)
3319 if (gfc_find_forall_index (tmp->u.ss.end, symbol) == SUCCESS)
3324 /* It seems not to happen. */
3325 case EXPR_STRUCTURE:
3327 gfc_error ("Unsupported statement while finding forall index in "
3334 /* Find the FORALL index in the first operand. */
3337 if (gfc_find_forall_index (expr->op1, symbol) == SUCCESS)
3341 /* Find the FORALL index in the second operand. */
3344 if (gfc_find_forall_index (expr->op2, symbol) == SUCCESS)
3351 /* Resolve assignment in FORALL construct.
3352 NVAR is the number of FORALL index variables, and VAR_EXPR records the
3353 FORALL index variables. */
3356 gfc_resolve_assign_in_forall (gfc_code *code, int nvar, gfc_expr **var_expr)
3360 for (n = 0; n < nvar; n++)
3362 gfc_symbol *forall_index;
3364 forall_index = var_expr[n]->symtree->n.sym;
3366 /* Check whether the assignment target is one of the FORALL index
3368 if ((code->expr->expr_type == EXPR_VARIABLE)
3369 && (code->expr->symtree->n.sym == forall_index))
3370 gfc_error ("Assignment to a FORALL index variable at %L",
3371 &code->expr->where);
3374 /* If one of the FORALL index variables doesn't appear in the
3375 assignment target, then there will be a many-to-one
3377 if (gfc_find_forall_index (code->expr, forall_index) == FAILURE)
3378 gfc_error ("The FORALL with index '%s' cause more than one "
3379 "assignment to this object at %L",
3380 var_expr[n]->symtree->name, &code->expr->where);
3386 /* Resolve WHERE statement in FORALL construct. */
3389 gfc_resolve_where_code_in_forall (gfc_code *code, int nvar, gfc_expr **var_expr){
3393 cblock = code->block;
3396 /* the assignment statement of a WHERE statement, or the first
3397 statement in where-body-construct of a WHERE construct */
3398 cnext = cblock->next;
3403 /* WHERE assignment statement */
3405 gfc_resolve_assign_in_forall (cnext, nvar, var_expr);
3408 /* WHERE or WHERE construct is part of a where-body-construct */
3410 gfc_resolve_where_code_in_forall (cnext, nvar, var_expr);
3414 gfc_error ("Unsupported statement inside WHERE at %L",
3417 /* the next statement within the same where-body-construct */
3418 cnext = cnext->next;
3420 /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
3421 cblock = cblock->block;
3426 /* Traverse the FORALL body to check whether the following errors exist:
3427 1. For assignment, check if a many-to-one assignment happens.
3428 2. For WHERE statement, check the WHERE body to see if there is any
3429 many-to-one assignment. */
3432 gfc_resolve_forall_body (gfc_code *code, int nvar, gfc_expr **var_expr)
3436 c = code->block->next;
3442 case EXEC_POINTER_ASSIGN:
3443 gfc_resolve_assign_in_forall (c, nvar, var_expr);
3446 /* Because the resolve_blocks() will handle the nested FORALL,
3447 there is no need to handle it here. */
3451 gfc_resolve_where_code_in_forall(c, nvar, var_expr);
3456 /* The next statement in the FORALL body. */
3462 /* Given a FORALL construct, first resolve the FORALL iterator, then call
3463 gfc_resolve_forall_body to resolve the FORALL body. */
3465 static void resolve_blocks (gfc_code *, gfc_namespace *);
3468 gfc_resolve_forall (gfc_code *code, gfc_namespace *ns, int forall_save)
3470 static gfc_expr **var_expr;
3471 static int total_var = 0;
3472 static int nvar = 0;
3473 gfc_forall_iterator *fa;
3474 gfc_symbol *forall_index;
3478 /* Start to resolve a FORALL construct */
3479 if (forall_save == 0)
3481 /* Count the total number of FORALL index in the nested FORALL
3482 construct in order to allocate the VAR_EXPR with proper size. */
3484 while ((next != NULL) && (next->op == EXEC_FORALL))
3486 for (fa = next->ext.forall_iterator; fa; fa = fa->next)
3488 next = next->block->next;
3491 /* Allocate VAR_EXPR with NUMBER_OF_FORALL_INDEX elements. */
3492 var_expr = (gfc_expr **) gfc_getmem (total_var * sizeof (gfc_expr *));
3495 /* The information about FORALL iterator, including FORALL index start, end
3496 and stride. The FORALL index can not appear in start, end or stride. */
3497 for (fa = code->ext.forall_iterator; fa; fa = fa->next)
3499 /* Check if any outer FORALL index name is the same as the current
3501 for (i = 0; i < nvar; i++)
3503 if (fa->var->symtree->n.sym == var_expr[i]->symtree->n.sym)
3505 gfc_error ("An outer FORALL construct already has an index "
3506 "with this name %L", &fa->var->where);
3510 /* Record the current FORALL index. */
3511 var_expr[nvar] = gfc_copy_expr (fa->var);
3513 forall_index = fa->var->symtree->n.sym;
3515 /* Check if the FORALL index appears in start, end or stride. */
3516 if (gfc_find_forall_index (fa->start, forall_index) == SUCCESS)
3517 gfc_error ("A FORALL index must not appear in a limit or stride "
3518 "expression in the same FORALL at %L", &fa->start->where);
3519 if (gfc_find_forall_index (fa->end, forall_index) == SUCCESS)
3520 gfc_error ("A FORALL index must not appear in a limit or stride "
3521 "expression in the same FORALL at %L", &fa->end->where);
3522 if (gfc_find_forall_index (fa->stride, forall_index) == SUCCESS)
3523 gfc_error ("A FORALL index must not appear in a limit or stride "
3524 "expression in the same FORALL at %L", &fa->stride->where);
3528 /* Resolve the FORALL body. */
3529 gfc_resolve_forall_body (code, nvar, var_expr);
3531 /* May call gfc_resolve_forall to resolve the inner FORALL loop. */
3532 resolve_blocks (code->block, ns);
3534 /* Free VAR_EXPR after the whole FORALL construct resolved. */
3535 for (i = 0; i < total_var; i++)
3536 gfc_free_expr (var_expr[i]);
3538 /* Reset the counters. */
3544 /* Resolve lists of blocks found in IF, SELECT CASE, WHERE, FORALL ,GOTO and
3547 static void resolve_code (gfc_code *, gfc_namespace *);
3550 resolve_blocks (gfc_code * b, gfc_namespace * ns)
3554 for (; b; b = b->block)
3556 t = gfc_resolve_expr (b->expr);
3557 if (gfc_resolve_expr (b->expr2) == FAILURE)
3563 if (t == SUCCESS && b->expr != NULL
3564 && (b->expr->ts.type != BT_LOGICAL || b->expr->rank != 0))
3566 ("ELSE IF clause at %L requires a scalar LOGICAL expression",
3573 && (b->expr->ts.type != BT_LOGICAL
3574 || b->expr->rank == 0))
3576 ("WHERE/ELSEWHERE clause at %L requires a LOGICAL array",
3581 resolve_branch (b->label, b);
3591 gfc_internal_error ("resolve_block(): Bad block type");
3594 resolve_code (b->next, ns);
3599 /* Given a block of code, recursively resolve everything pointed to by this
3603 resolve_code (gfc_code * code, gfc_namespace * ns)
3605 int forall_save = 0;
3610 frame.prev = cs_base;
3614 for (; code; code = code->next)
3616 frame.current = code;
3618 if (code->op == EXEC_FORALL)
3620 forall_save = forall_flag;
3622 gfc_resolve_forall (code, ns, forall_save);
3625 resolve_blocks (code->block, ns);
3627 if (code->op == EXEC_FORALL)
3628 forall_flag = forall_save;
3630 t = gfc_resolve_expr (code->expr);
3631 if (gfc_resolve_expr (code->expr2) == FAILURE)
3647 resolve_where (code, NULL);
3651 if (code->expr != NULL && code->expr->ts.type != BT_INTEGER)
3652 gfc_error ("ASSIGNED GOTO statement at %L requires an INTEGER "
3653 "variable", &code->expr->where);
3655 resolve_branch (code->label, code);
3659 if (code->expr != NULL && code->expr->ts.type != BT_INTEGER)
3660 gfc_error ("Alternate RETURN statement at %L requires an INTEGER "
3661 "return specifier", &code->expr->where);
3668 if (gfc_extend_assign (code, ns) == SUCCESS)
3671 if (gfc_pure (NULL))
3673 if (gfc_impure_variable (code->expr->symtree->n.sym))
3676 ("Cannot assign to variable '%s' in PURE procedure at %L",
3677 code->expr->symtree->n.sym->name, &code->expr->where);
3681 if (code->expr2->ts.type == BT_DERIVED
3682 && derived_pointer (code->expr2->ts.derived))
3685 ("Right side of assignment at %L is a derived type "
3686 "containing a POINTER in a PURE procedure",
3687 &code->expr2->where);
3692 gfc_check_assign (code->expr, code->expr2, 1);
3695 case EXEC_LABEL_ASSIGN:
3696 if (code->label->defined == ST_LABEL_UNKNOWN)
3697 gfc_error ("Label %d referenced at %L is never defined",
3698 code->label->value, &code->label->where);
3700 && (code->expr->expr_type != EXPR_VARIABLE
3701 || code->expr->symtree->n.sym->ts.type != BT_INTEGER
3702 || code->expr->symtree->n.sym->ts.kind
3703 != gfc_default_integer_kind
3704 || code->expr->symtree->n.sym->as != NULL))
3705 gfc_error ("ASSIGN statement at %L requires a scalar "
3706 "default INTEGER variable", &code->expr->where);
3709 case EXEC_POINTER_ASSIGN:
3713 gfc_check_pointer_assign (code->expr, code->expr2);
3716 case EXEC_ARITHMETIC_IF:
3718 && code->expr->ts.type != BT_INTEGER
3719 && code->expr->ts.type != BT_REAL)
3720 gfc_error ("Arithmetic IF statement at %L requires a numeric "
3721 "expression", &code->expr->where);
3723 resolve_branch (code->label, code);
3724 resolve_branch (code->label2, code);
3725 resolve_branch (code->label3, code);
3729 if (t == SUCCESS && code->expr != NULL
3730 && (code->expr->ts.type != BT_LOGICAL
3731 || code->expr->rank != 0))
3732 gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
3733 &code->expr->where);
3738 resolve_call (code);
3742 /* Select is complicated. Also, a SELECT construct could be
3743 a transformed computed GOTO. */
3744 resolve_select (code);
3748 if (code->ext.iterator != NULL)
3749 gfc_resolve_iterator (code->ext.iterator, true);
3753 if (code->expr == NULL)
3754 gfc_internal_error ("resolve_code(): No expression on DO WHILE");
3756 && (code->expr->rank != 0
3757 || code->expr->ts.type != BT_LOGICAL))
3758 gfc_error ("Exit condition of DO WHILE loop at %L must be "
3759 "a scalar LOGICAL expression", &code->expr->where);
3763 if (t == SUCCESS && code->expr != NULL
3764 && code->expr->ts.type != BT_INTEGER)
3765 gfc_error ("STAT tag in ALLOCATE statement at %L must be "
3766 "of type INTEGER", &code->expr->where);
3768 for (a = code->ext.alloc_list; a; a = a->next)
3769 resolve_allocate_expr (a->expr);
3773 case EXEC_DEALLOCATE:
3774 if (t == SUCCESS && code->expr != NULL
3775 && code->expr->ts.type != BT_INTEGER)
3777 ("STAT tag in DEALLOCATE statement at %L must be of type "
3778 "INTEGER", &code->expr->where);
3780 for (a = code->ext.alloc_list; a; a = a->next)
3781 resolve_deallocate_expr (a->expr);
3786 if (gfc_resolve_open (code->ext.open) == FAILURE)
3789 resolve_branch (code->ext.open->err, code);
3793 if (gfc_resolve_close (code->ext.close) == FAILURE)
3796 resolve_branch (code->ext.close->err, code);
3799 case EXEC_BACKSPACE:
3802 if (gfc_resolve_filepos (code->ext.filepos) == FAILURE)
3805 resolve_branch (code->ext.filepos->err, code);
3809 if (gfc_resolve_inquire (code->ext.inquire) == FAILURE)
3812 resolve_branch (code->ext.inquire->err, code);
3816 gcc_assert (code->ext.inquire != NULL);
3817 if (gfc_resolve_inquire (code->ext.inquire) == FAILURE)
3820 resolve_branch (code->ext.inquire->err, code);
3825 if (gfc_resolve_dt (code->ext.dt) == FAILURE)
3828 resolve_branch (code->ext.dt->err, code);
3829 resolve_branch (code->ext.dt->end, code);
3830 resolve_branch (code->ext.dt->eor, code);
3834 resolve_transfer (code);
3838 resolve_forall_iterators (code->ext.forall_iterator);
3840 if (code->expr != NULL && code->expr->ts.type != BT_LOGICAL)
3842 ("FORALL mask clause at %L requires a LOGICAL expression",
3843 &code->expr->where);
3847 gfc_internal_error ("resolve_code(): Bad statement code");
3851 cs_base = frame.prev;
3855 /* Resolve initial values and make sure they are compatible with
3859 resolve_values (gfc_symbol * sym)
3862 if (sym->value == NULL)
3865 if (gfc_resolve_expr (sym->value) == FAILURE)
3868 gfc_check_assign_symbol (sym, sym->value);
3872 /* Do anything necessary to resolve a symbol. Right now, we just
3873 assume that an otherwise unknown symbol is a variable. This sort
3874 of thing commonly happens for symbols in module. */
3877 resolve_symbol (gfc_symbol * sym)
3879 /* Zero if we are checking a formal namespace. */
3880 static int formal_ns_flag = 1;
3881 int formal_ns_save, check_constant, mp_flag;
3886 if (sym->attr.flavor == FL_UNKNOWN)
3888 if (sym->attr.external == 0 && sym->attr.intrinsic == 0)
3889 sym->attr.flavor = FL_VARIABLE;
3892 sym->attr.flavor = FL_PROCEDURE;
3893 if (sym->attr.dimension)
3894 sym->attr.function = 1;
3898 /* Symbols that are module procedures with results (functions) have
3899 the types and array specification copied for type checking in
3900 procedures that call them, as well as for saving to a module
3901 file. These symbols can't stand the scrutiny that their results
3903 mp_flag = (sym->result != NULL && sym->result != sym);
3905 /* Assign default type to symbols that need one and don't have one. */
3906 if (sym->ts.type == BT_UNKNOWN)
3908 if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER)
3909 gfc_set_default_type (sym, 1, NULL);
3911 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.function)
3914 gfc_set_default_type (sym, 0, NULL);
3917 /* Result may be in another namespace. */
3918 resolve_symbol (sym->result);
3920 sym->ts = sym->result->ts;
3921 sym->as = gfc_copy_array_spec (sym->result->as);
3926 /* Assumed size arrays and assumed shape arrays must be dummy
3930 && (sym->as->type == AS_ASSUMED_SIZE
3931 || sym->as->type == AS_ASSUMED_SHAPE)
3932 && sym->attr.dummy == 0)
3934 gfc_error ("Assumed %s array at %L must be a dummy argument",
3935 sym->as->type == AS_ASSUMED_SIZE ? "size" : "shape",
3940 /* A parameter array's shape needs to be constant. */
3942 if (sym->attr.flavor == FL_PARAMETER && sym->as != NULL
3943 && !gfc_is_compile_time_shape (sym->as))
3945 gfc_error ("Parameter array '%s' at %L cannot be automatic "
3946 "or assumed shape", sym->name, &sym->declared_at);
3950 /* Make sure that character string variables with assumed length are
3953 if (sym->attr.flavor == FL_VARIABLE && !sym->attr.result
3954 && sym->ts.type == BT_CHARACTER
3955 && sym->ts.cl->length == NULL && sym->attr.dummy == 0)
3957 gfc_error ("Entity with assumed character length at %L must be a "
3958 "dummy argument or a PARAMETER", &sym->declared_at);
3962 /* Make sure a parameter that has been implicitly typed still
3963 matches the implicit type, since PARAMETER statements can precede
3964 IMPLICIT statements. */
3966 if (sym->attr.flavor == FL_PARAMETER
3967 && sym->attr.implicit_type
3968 && !gfc_compare_types (&sym->ts, gfc_get_default_type (sym, sym->ns)))
3969 gfc_error ("Implicitly typed PARAMETER '%s' at %L doesn't match a "
3970 "later IMPLICIT type", sym->name, &sym->declared_at);
3972 /* Make sure the types of derived parameters are consistent. This
3973 type checking is deferred until resolution because the type may
3974 refer to a derived type from the host. */
3976 if (sym->attr.flavor == FL_PARAMETER
3977 && sym->ts.type == BT_DERIVED
3978 && !gfc_compare_types (&sym->ts, &sym->value->ts))
3979 gfc_error ("Incompatible derived type in PARAMETER at %L",
3980 &sym->value->where);
3982 /* Make sure symbols with known intent or optional are really dummy
3983 variable. Because of ENTRY statement, this has to be deferred
3984 until resolution time. */
3986 if (! sym->attr.dummy
3987 && (sym->attr.optional
3988 || sym->attr.intent != INTENT_UNKNOWN))
3990 gfc_error ("Symbol at %L is not a DUMMY variable", &sym->declared_at);
3994 if (sym->attr.proc == PROC_ST_FUNCTION)
3996 if (sym->ts.type == BT_CHARACTER)
3998 gfc_charlen *cl = sym->ts.cl;
3999 if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
4001 gfc_error ("Character-valued statement function '%s' at %L must "
4002 "have constant length", sym->name, &sym->declared_at);
4008 /* Constraints on deferred shape variable. */
4009 if (sym->attr.flavor == FL_VARIABLE
4010 || (sym->attr.flavor == FL_PROCEDURE
4011 && sym->attr.function))
4013 if (sym->as == NULL || sym->as->type != AS_DEFERRED)
4015 if (sym->attr.allocatable)
4017 if (sym->attr.dimension)
4018 gfc_error ("Allocatable array at %L must have a deferred shape",
4021 gfc_error ("Object at %L may not be ALLOCATABLE",
4026 if (sym->attr.pointer && sym->attr.dimension)
4028 gfc_error ("Pointer to array at %L must have a deferred shape",
4036 if (!mp_flag && !sym->attr.allocatable
4037 && !sym->attr.pointer && !sym->attr.dummy)
4039 gfc_error ("Array at %L cannot have a deferred shape",
4046 if (sym->attr.flavor == FL_VARIABLE)
4048 /* Can the sybol have an initializer? */
4050 if (sym->attr.allocatable)
4051 whynot = "Allocatable";
4052 else if (sym->attr.external)
4053 whynot = "External";
4054 else if (sym->attr.dummy)
4056 else if (sym->attr.intrinsic)
4057 whynot = "Intrinsic";
4058 else if (sym->attr.result)
4059 whynot = "Function Result";
4060 else if (sym->attr.dimension && !sym->attr.pointer)
4062 /* Don't allow initialization of automatic arrays. */
4063 for (i = 0; i < sym->as->rank; i++)
4065 if (sym->as->lower[i] == NULL
4066 || sym->as->lower[i]->expr_type != EXPR_CONSTANT
4067 || sym->as->upper[i] == NULL
4068 || sym->as->upper[i]->expr_type != EXPR_CONSTANT)
4070 whynot = "Automatic array";
4076 /* Reject illegal initializers. */
4077 if (sym->value && whynot)
4079 gfc_error ("%s '%s' at %L cannot have an initializer",
4080 whynot, sym->name, &sym->declared_at);
4084 /* Assign default initializer. */
4085 if (sym->ts.type == BT_DERIVED && !(sym->value || whynot))
4086 sym->value = gfc_default_initializer (&sym->ts);
4090 /* Make sure that intrinsic exist */
4091 if (sym->attr.intrinsic
4092 && ! gfc_intrinsic_name(sym->name, 0)
4093 && ! gfc_intrinsic_name(sym->name, 1))
4094 gfc_error("Intrinsic at %L does not exist", &sym->declared_at);
4096 /* Resolve array specifier. Check as well some constraints
4097 on COMMON blocks. */
4099 check_constant = sym->attr.in_common && !sym->attr.pointer;
4100 gfc_resolve_array_spec (sym->as, check_constant);
4102 /* Resolve formal namespaces. */
4104 if (formal_ns_flag && sym != NULL && sym->formal_ns != NULL)
4106 formal_ns_save = formal_ns_flag;
4108 gfc_resolve (sym->formal_ns);
4109 formal_ns_flag = formal_ns_save;
4115 /************* Resolve DATA statements *************/
4119 gfc_data_value *vnode;
4125 /* Advance the values structure to point to the next value in the data list. */
4128 next_data_value (void)
4130 while (values.left == 0)
4132 if (values.vnode->next == NULL)
4135 values.vnode = values.vnode->next;
4136 values.left = values.vnode->repeat;
4144 check_data_variable (gfc_data_variable * var, locus * where)
4150 ar_type mark = AR_UNKNOWN;
4152 mpz_t section_index[GFC_MAX_DIMENSIONS];
4156 if (gfc_resolve_expr (var->expr) == FAILURE)
4160 mpz_init_set_si (offset, 0);
4163 if (e->expr_type != EXPR_VARIABLE)
4164 gfc_internal_error ("check_data_variable(): Bad expression");
4168 mpz_init_set_ui (size, 1);
4175 /* Find the array section reference. */
4176 for (ref = e->ref; ref; ref = ref->next)
4178 if (ref->type != REF_ARRAY)
4180 if (ref->u.ar.type == AR_ELEMENT)
4186 /* Set marks according to the reference pattern. */
4187 switch (ref->u.ar.type)
4195 /* Get the start position of array section. */
4196 gfc_get_section_index (ar, section_index, &offset);
4204 if (gfc_array_size (e, &size) == FAILURE)
4206 gfc_error ("Nonconstant array section at %L in DATA statement",
4215 while (mpz_cmp_ui (size, 0) > 0)
4217 if (next_data_value () == FAILURE)
4219 gfc_error ("DATA statement at %L has more variables than values",
4225 t = gfc_check_assign (var->expr, values.vnode->expr, 0);
4229 /* If we have more than one element left in the repeat count,
4230 and we have more than one element left in the target variable,
4231 then create a range assignment. */
4232 /* ??? Only done for full arrays for now, since array sections
4234 if (mark == AR_FULL && ref && ref->next == NULL
4235 && values.left > 1 && mpz_cmp_ui (size, 1) > 0)
4239 if (mpz_cmp_ui (size, values.left) >= 0)
4241 mpz_init_set_ui (range, values.left);
4242 mpz_sub_ui (size, size, values.left);
4247 mpz_init_set (range, size);
4248 values.left -= mpz_get_ui (size);
4249 mpz_set_ui (size, 0);
4252 gfc_assign_data_value_range (var->expr, values.vnode->expr,
4255 mpz_add (offset, offset, range);
4259 /* Assign initial value to symbol. */
4263 mpz_sub_ui (size, size, 1);
4265 gfc_assign_data_value (var->expr, values.vnode->expr, offset);
4267 if (mark == AR_FULL)
4268 mpz_add_ui (offset, offset, 1);
4270 /* Modify the array section indexes and recalculate the offset
4271 for next element. */
4272 else if (mark == AR_SECTION)
4273 gfc_advance_section (section_index, ar, &offset);
4277 if (mark == AR_SECTION)
4279 for (i = 0; i < ar->dimen; i++)
4280 mpz_clear (section_index[i]);
4290 static try traverse_data_var (gfc_data_variable *, locus *);
4292 /* Iterate over a list of elements in a DATA statement. */
4295 traverse_data_list (gfc_data_variable * var, locus * where)
4298 iterator_stack frame;
4301 mpz_init (frame.value);
4303 mpz_init_set (trip, var->iter.end->value.integer);
4304 mpz_sub (trip, trip, var->iter.start->value.integer);
4305 mpz_add (trip, trip, var->iter.step->value.integer);
4307 mpz_div (trip, trip, var->iter.step->value.integer);
4309 mpz_set (frame.value, var->iter.start->value.integer);
4311 frame.prev = iter_stack;
4312 frame.variable = var->iter.var->symtree;
4313 iter_stack = &frame;
4315 while (mpz_cmp_ui (trip, 0) > 0)
4317 if (traverse_data_var (var->list, where) == FAILURE)
4323 e = gfc_copy_expr (var->expr);
4324 if (gfc_simplify_expr (e, 1) == FAILURE)
4330 mpz_add (frame.value, frame.value, var->iter.step->value.integer);
4332 mpz_sub_ui (trip, trip, 1);
4336 mpz_clear (frame.value);
4338 iter_stack = frame.prev;
4343 /* Type resolve variables in the variable list of a DATA statement. */
4346 traverse_data_var (gfc_data_variable * var, locus * where)
4350 for (; var; var = var->next)
4352 if (var->expr == NULL)
4353 t = traverse_data_list (var, where);
4355 t = check_data_variable (var, where);
4365 /* Resolve the expressions and iterators associated with a data statement.
4366 This is separate from the assignment checking because data lists should
4367 only be resolved once. */
4370 resolve_data_variables (gfc_data_variable * d)
4372 for (; d; d = d->next)
4374 if (d->list == NULL)
4376 if (gfc_resolve_expr (d->expr) == FAILURE)
4381 if (gfc_resolve_iterator (&d->iter, false) == FAILURE)
4384 if (d->iter.start->expr_type != EXPR_CONSTANT
4385 || d->iter.end->expr_type != EXPR_CONSTANT
4386 || d->iter.step->expr_type != EXPR_CONSTANT)
4387 gfc_internal_error ("resolve_data_variables(): Bad iterator");
4389 if (resolve_data_variables (d->list) == FAILURE)
4398 /* Resolve a single DATA statement. We implement this by storing a pointer to
4399 the value list into static variables, and then recursively traversing the
4400 variables list, expanding iterators and such. */
4403 resolve_data (gfc_data * d)
4405 if (resolve_data_variables (d->var) == FAILURE)
4408 values.vnode = d->value;
4409 values.left = (d->value == NULL) ? 0 : d->value->repeat;
4411 if (traverse_data_var (d->var, &d->where) == FAILURE)
4414 /* At this point, we better not have any values left. */
4416 if (next_data_value () == SUCCESS)
4417 gfc_error ("DATA statement at %L has more values than variables",
4422 /* Determines if a variable is not 'pure', ie not assignable within a pure
4423 procedure. Returns zero if assignment is OK, nonzero if there is a problem.
4427 gfc_impure_variable (gfc_symbol * sym)
4429 if (sym->attr.use_assoc || sym->attr.in_common)
4432 if (sym->ns != gfc_current_ns)
4433 return !sym->attr.function;
4435 /* TODO: Check storage association through EQUIVALENCE statements */
4441 /* Test whether a symbol is pure or not. For a NULL pointer, checks the
4442 symbol of the current procedure. */
4445 gfc_pure (gfc_symbol * sym)
4447 symbol_attribute attr;
4450 sym = gfc_current_ns->proc_name;
4456 return attr.flavor == FL_PROCEDURE && (attr.pure || attr.elemental);
4460 /* Test whether the current procedure is elemental or not. */
4463 gfc_elemental (gfc_symbol * sym)
4465 symbol_attribute attr;
4468 sym = gfc_current_ns->proc_name;
4473 return attr.flavor == FL_PROCEDURE && attr.elemental;
4477 /* Warn about unused labels. */
4480 warn_unused_label (gfc_namespace * ns)
4491 for (; l; l = l->prev)
4493 if (l->defined == ST_LABEL_UNKNOWN)
4496 switch (l->referenced)
4498 case ST_LABEL_UNKNOWN:
4499 gfc_warning ("Label %d at %L defined but not used", l->value,
4503 case ST_LABEL_BAD_TARGET:
4504 gfc_warning ("Label %d at %L defined but cannot be used", l->value,
4515 /* Resolve derived type EQUIVALENCE object. */
4518 resolve_equivalence_derived (gfc_symbol *derived, gfc_symbol *sym, gfc_expr *e)
4521 gfc_component *c = derived->components;
4526 /* Shall not be an object of nonsequence derived type. */
4527 if (!derived->attr.sequence)
4529 gfc_error ("Derived type variable '%s' at %L must have SEQUENCE "
4530 "attribute to be an EQUIVALENCE object", sym->name, &e->where);
4534 for (; c ; c = c->next)
4537 if (d && (resolve_equivalence_derived (c->ts.derived, sym, e) == FAILURE))
4540 /* Shall not be an object of sequence derived type containing a pointer
4541 in the structure. */
4544 gfc_error ("Derived type variable '%s' at %L has pointer componet(s) "
4545 "cannot be an EQUIVALENCE object", sym->name, &e->where);
4553 /* Resolve equivalence object.
4554 An EQUIVALENCE object shall not be a dummy argument, a pointer, an
4555 allocatable array, an object of nonsequence derived type, an object of
4556 sequence derived type containing a pointer at any level of component
4557 selection, an automatic object, a function name, an entry name, a result
4558 name, a named constant, a structure component, or a subobject of any of
4559 the preceding objects. */
4562 resolve_equivalence (gfc_equiv *eq)
4565 gfc_symbol *derived;
4569 for (; eq; eq = eq->eq)
4572 if (gfc_resolve_expr (e) == FAILURE)
4575 sym = e->symtree->n.sym;
4577 /* Shall not be a dummy argument. */
4578 if (sym->attr.dummy)
4580 gfc_error ("Dummy argument '%s' at %L cannot be an EQUIVALENCE "
4581 "object", sym->name, &e->where);
4585 /* Shall not be an allocatable array. */
4586 if (sym->attr.allocatable)
4588 gfc_error ("Allocatable array '%s' at %L cannot be an EQUIVALENCE "
4589 "object", sym->name, &e->where);
4593 /* Shall not be a pointer. */
4594 if (sym->attr.pointer)
4596 gfc_error ("Pointer '%s' at %L cannot be an EQUIVALENCE object",
4597 sym->name, &e->where);
4601 /* Shall not be a function name, ... */
4602 if (sym->attr.function || sym->attr.result || sym->attr.entry
4603 || sym->attr.subroutine)
4605 gfc_error ("Entity '%s' at %L cannot be an EQUIVALENCE object",
4606 sym->name, &e->where);
4610 /* Shall not be a named constant. */
4611 if (e->expr_type == EXPR_CONSTANT)
4613 gfc_error ("Named constant '%s' at %L cannot be an EQUIVALENCE "
4614 "object", sym->name, &e->where);
4618 derived = e->ts.derived;
4619 if (derived && resolve_equivalence_derived (derived, sym, e) == FAILURE)
4625 /* Shall not be an automatic array. */
4626 if (e->ref->type == REF_ARRAY
4627 && gfc_resolve_array_spec (e->ref->u.ar.as, 1) == FAILURE)
4629 gfc_error ("Array '%s' at %L with non-constant bounds cannot be "
4630 "an EQUIVALENCE object", sym->name, &e->where);
4634 /* Shall not be a structure component. */
4638 if (r->type == REF_COMPONENT)
4640 gfc_error ("Structure component '%s' at %L cannot be an "
4641 "EQUIVALENCE object",
4642 r->u.c.component->name, &e->where);
4651 /* This function is called after a complete program unit has been compiled.
4652 Its purpose is to examine all of the expressions associated with a program
4653 unit, assign types to all intermediate expressions, make sure that all
4654 assignments are to compatible types and figure out which names refer to
4655 which functions or subroutines. */
4658 gfc_resolve (gfc_namespace * ns)
4660 gfc_namespace *old_ns, *n;
4665 old_ns = gfc_current_ns;
4666 gfc_current_ns = ns;
4668 resolve_entries (ns);
4670 resolve_contained_functions (ns);
4672 gfc_traverse_ns (ns, resolve_symbol);
4674 for (n = ns->contained; n; n = n->sibling)
4676 if (gfc_pure (ns->proc_name) && !gfc_pure (n->proc_name))
4677 gfc_error ("Contained procedure '%s' at %L of a PURE procedure must "
4678 "also be PURE", n->proc_name->name,
4679 &n->proc_name->declared_at);
4685 gfc_check_interfaces (ns);
4687 for (cl = ns->cl_list; cl; cl = cl->next)
4689 if (cl->length == NULL || gfc_resolve_expr (cl->length) == FAILURE)
4692 if (cl->length->ts.type != BT_INTEGER)
4694 ("Character length specification at %L must be of type INTEGER",
4695 &cl->length->where);
4698 gfc_traverse_ns (ns, resolve_values);
4704 for (d = ns->data; d; d = d->next)
4708 gfc_traverse_ns (ns, gfc_formalize_init_value);
4710 for (eq = ns->equiv; eq; eq = eq->next)
4711 resolve_equivalence (eq);
4714 resolve_code (ns->code, ns);
4716 /* Warn about unused labels. */
4717 if (gfc_option.warn_unused_labels)
4718 warn_unused_label (ns);
4720 gfc_current_ns = old_ns;