1 /* Perform type resolution on the various stuctures.
2 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
4 Contributed by Andy Vaught
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to the Free
20 Software Foundation, 51 Franklin Street, Fifth Floor,Boston, MA
28 #include "arith.h" /* For gfc_compare_expr(). */
29 #include "dependency.h"
31 /* Types used in equivalence statements. */
35 SEQ_NONDEFAULT, SEQ_NUMERIC, SEQ_CHARACTER, SEQ_MIXED
39 /* Stack to push the current if we descend into a block during
40 resolution. See resolve_branch() and resolve_code(). */
42 typedef struct code_stack
44 struct gfc_code *head, *current;
45 struct code_stack *prev;
49 static code_stack *cs_base = NULL;
52 /* Nonzero if we're inside a FORALL block. */
54 static int forall_flag;
56 /* Nonzero if we're inside a OpenMP WORKSHARE or PARALLEL WORKSHARE block. */
58 static int omp_workshare_flag;
60 /* Nonzero if we are processing a formal arglist. The corresponding function
61 resets the flag each time that it is read. */
62 static int formal_arg_flag = 0;
64 /* True if we are resolving a specification expression. */
65 static int specification_expr = 0;
67 /* The id of the last entry seen. */
68 static int current_entry_id;
71 gfc_is_formal_arg (void)
73 return formal_arg_flag;
76 /* Resolve types of formal argument lists. These have to be done early so that
77 the formal argument lists of module procedures can be copied to the
78 containing module before the individual procedures are resolved
79 individually. We also resolve argument lists of procedures in interface
80 blocks because they are self-contained scoping units.
82 Since a dummy argument cannot be a non-dummy procedure, the only
83 resort left for untyped names are the IMPLICIT types. */
86 resolve_formal_arglist (gfc_symbol * proc)
88 gfc_formal_arglist *f;
92 /* TODO: Procedures whose return character length parameter is not constant
93 or assumed must also have explicit interfaces. */
94 if (proc->result != NULL)
99 if (gfc_elemental (proc)
100 || sym->attr.pointer || sym->attr.allocatable
101 || (sym->as && sym->as->rank > 0))
102 proc->attr.always_explicit = 1;
106 for (f = proc->formal; f; f = f->next)
112 /* Alternate return placeholder. */
113 if (gfc_elemental (proc))
114 gfc_error ("Alternate return specifier in elemental subroutine "
115 "'%s' at %L is not allowed", proc->name,
117 if (proc->attr.function)
118 gfc_error ("Alternate return specifier in function "
119 "'%s' at %L is not allowed", proc->name,
124 if (sym->attr.if_source != IFSRC_UNKNOWN)
125 resolve_formal_arglist (sym);
127 if (sym->attr.subroutine || sym->attr.external || sym->attr.intrinsic)
129 if (gfc_pure (proc) && !gfc_pure (sym))
132 ("Dummy procedure '%s' of PURE procedure at %L must also "
133 "be PURE", sym->name, &sym->declared_at);
137 if (gfc_elemental (proc))
140 ("Dummy procedure at %L not allowed in ELEMENTAL procedure",
148 if (sym->ts.type == BT_UNKNOWN)
150 if (!sym->attr.function || sym->result == sym)
151 gfc_set_default_type (sym, 1, sym->ns);
154 gfc_resolve_array_spec (sym->as, 0);
156 /* We can't tell if an array with dimension (:) is assumed or deferred
157 shape until we know if it has the pointer or allocatable attributes.
159 if (sym->as && sym->as->rank > 0 && sym->as->type == AS_DEFERRED
160 && !(sym->attr.pointer || sym->attr.allocatable))
162 sym->as->type = AS_ASSUMED_SHAPE;
163 for (i = 0; i < sym->as->rank; i++)
164 sym->as->lower[i] = gfc_int_expr (1);
167 if ((sym->as && sym->as->rank > 0 && sym->as->type == AS_ASSUMED_SHAPE)
168 || sym->attr.pointer || sym->attr.allocatable || sym->attr.target
169 || sym->attr.optional)
170 proc->attr.always_explicit = 1;
172 /* If the flavor is unknown at this point, it has to be a variable.
173 A procedure specification would have already set the type. */
175 if (sym->attr.flavor == FL_UNKNOWN)
176 gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, &sym->declared_at);
180 if (proc->attr.function && !sym->attr.pointer
181 && sym->attr.flavor != FL_PROCEDURE
182 && sym->attr.intent != INTENT_IN)
184 gfc_error ("Argument '%s' of pure function '%s' at %L must be "
185 "INTENT(IN)", sym->name, proc->name,
188 if (proc->attr.subroutine && !sym->attr.pointer
189 && sym->attr.intent == INTENT_UNKNOWN)
192 ("Argument '%s' of pure subroutine '%s' at %L must have "
193 "its INTENT specified", sym->name, proc->name,
198 if (gfc_elemental (proc))
203 ("Argument '%s' of elemental procedure at %L must be scalar",
204 sym->name, &sym->declared_at);
208 if (sym->attr.pointer)
211 ("Argument '%s' of elemental procedure at %L cannot have "
212 "the POINTER attribute", sym->name, &sym->declared_at);
217 /* Each dummy shall be specified to be scalar. */
218 if (proc->attr.proc == PROC_ST_FUNCTION)
223 ("Argument '%s' of statement function at %L must be scalar",
224 sym->name, &sym->declared_at);
228 if (sym->ts.type == BT_CHARACTER)
230 gfc_charlen *cl = sym->ts.cl;
231 if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
234 ("Character-valued argument '%s' of statement function at "
235 "%L must has constant length",
236 sym->name, &sym->declared_at);
246 /* Work function called when searching for symbols that have argument lists
247 associated with them. */
250 find_arglists (gfc_symbol * sym)
253 if (sym->attr.if_source == IFSRC_UNKNOWN || sym->ns != gfc_current_ns)
256 resolve_formal_arglist (sym);
260 /* Given a namespace, resolve all formal argument lists within the namespace.
264 resolve_formal_arglists (gfc_namespace * ns)
270 gfc_traverse_ns (ns, find_arglists);
275 resolve_contained_fntype (gfc_symbol * sym, gfc_namespace * ns)
279 /* If this namespace is not a function, ignore it. */
281 || !(sym->attr.function
282 || sym->attr.flavor == FL_VARIABLE))
285 /* Try to find out of what the return type is. */
286 if (sym->result != NULL)
289 if (sym->ts.type == BT_UNKNOWN)
291 t = gfc_set_default_type (sym, 0, ns);
293 if (t == FAILURE && !sym->attr.untyped)
295 gfc_error ("Contained function '%s' at %L has no IMPLICIT type",
296 sym->name, &sym->declared_at); /* FIXME */
297 sym->attr.untyped = 1;
301 /*Fortran 95 Draft Standard, page 51, Section 5.1.1.5, on the Character type,
302 lists the only ways a character length value of * can be used: dummy arguments
303 of procedures, named constants, and function results in external functions.
304 Internal function results are not on that list; ergo, not permitted. */
306 if (sym->ts.type == BT_CHARACTER)
308 gfc_charlen *cl = sym->ts.cl;
309 if (!cl || !cl->length)
310 gfc_error ("Character-valued internal function '%s' at %L must "
311 "not be assumed length", sym->name, &sym->declared_at);
316 /* Add NEW_ARGS to the formal argument list of PROC, taking care not to
317 introduce duplicates. */
320 merge_argument_lists (gfc_symbol *proc, gfc_formal_arglist *new_args)
322 gfc_formal_arglist *f, *new_arglist;
325 for (; new_args != NULL; new_args = new_args->next)
327 new_sym = new_args->sym;
328 /* See if this arg is already in the formal argument list. */
329 for (f = proc->formal; f; f = f->next)
331 if (new_sym == f->sym)
338 /* Add a new argument. Argument order is not important. */
339 new_arglist = gfc_get_formal_arglist ();
340 new_arglist->sym = new_sym;
341 new_arglist->next = proc->formal;
342 proc->formal = new_arglist;
347 /* Resolve alternate entry points. If a symbol has multiple entry points we
348 create a new master symbol for the main routine, and turn the existing
349 symbol into an entry point. */
352 resolve_entries (gfc_namespace * ns)
354 gfc_namespace *old_ns;
358 char name[GFC_MAX_SYMBOL_LEN + 1];
359 static int master_count = 0;
361 if (ns->proc_name == NULL)
364 /* No need to do anything if this procedure doesn't have alternate entry
369 /* We may already have resolved alternate entry points. */
370 if (ns->proc_name->attr.entry_master)
373 /* If this isn't a procedure something has gone horribly wrong. */
374 gcc_assert (ns->proc_name->attr.flavor == FL_PROCEDURE);
376 /* Remember the current namespace. */
377 old_ns = gfc_current_ns;
381 /* Add the main entry point to the list of entry points. */
382 el = gfc_get_entry_list ();
383 el->sym = ns->proc_name;
385 el->next = ns->entries;
387 ns->proc_name->attr.entry = 1;
389 /* If it is a module function, it needs to be in the right namespace
390 so that gfc_get_fake_result_decl can gather up the results. The
391 need for this arose in get_proc_name, where these beasts were
392 left in their own namespace, to keep prior references linked to
393 the entry declaration.*/
394 if (ns->proc_name->attr.function
396 && ns->parent->proc_name->attr.flavor == FL_MODULE)
399 /* Add an entry statement for it. */
406 /* Create a new symbol for the master function. */
407 /* Give the internal function a unique name (within this file).
408 Also include the function name so the user has some hope of figuring
409 out what is going on. */
410 snprintf (name, GFC_MAX_SYMBOL_LEN, "master.%d.%s",
411 master_count++, ns->proc_name->name);
412 gfc_get_ha_symbol (name, &proc);
413 gcc_assert (proc != NULL);
415 gfc_add_procedure (&proc->attr, PROC_INTERNAL, proc->name, NULL);
416 if (ns->proc_name->attr.subroutine)
417 gfc_add_subroutine (&proc->attr, proc->name, NULL);
421 gfc_typespec *ts, *fts;
422 gfc_array_spec *as, *fas;
423 gfc_add_function (&proc->attr, proc->name, NULL);
425 fas = ns->entries->sym->as;
426 fas = fas ? fas : ns->entries->sym->result->as;
427 fts = &ns->entries->sym->result->ts;
428 if (fts->type == BT_UNKNOWN)
429 fts = gfc_get_default_type (ns->entries->sym->result, NULL);
430 for (el = ns->entries->next; el; el = el->next)
432 ts = &el->sym->result->ts;
434 as = as ? as : el->sym->result->as;
435 if (ts->type == BT_UNKNOWN)
436 ts = gfc_get_default_type (el->sym->result, NULL);
438 if (! gfc_compare_types (ts, fts)
439 || (el->sym->result->attr.dimension
440 != ns->entries->sym->result->attr.dimension)
441 || (el->sym->result->attr.pointer
442 != ns->entries->sym->result->attr.pointer))
445 else if (as && fas && gfc_compare_array_spec (as, fas) == 0)
446 gfc_error ("Procedure %s at %L has entries with mismatched "
447 "array specifications", ns->entries->sym->name,
448 &ns->entries->sym->declared_at);
453 sym = ns->entries->sym->result;
454 /* All result types the same. */
456 if (sym->attr.dimension)
457 gfc_set_array_spec (proc, gfc_copy_array_spec (sym->as), NULL);
458 if (sym->attr.pointer)
459 gfc_add_pointer (&proc->attr, NULL);
463 /* Otherwise the result will be passed through a union by
465 proc->attr.mixed_entry_master = 1;
466 for (el = ns->entries; el; el = el->next)
468 sym = el->sym->result;
469 if (sym->attr.dimension)
471 if (el == ns->entries)
473 ("FUNCTION result %s can't be an array in FUNCTION %s at %L",
474 sym->name, ns->entries->sym->name, &sym->declared_at);
477 ("ENTRY result %s can't be an array in FUNCTION %s at %L",
478 sym->name, ns->entries->sym->name, &sym->declared_at);
480 else if (sym->attr.pointer)
482 if (el == ns->entries)
484 ("FUNCTION result %s can't be a POINTER in FUNCTION %s at %L",
485 sym->name, ns->entries->sym->name, &sym->declared_at);
488 ("ENTRY result %s can't be a POINTER in FUNCTION %s at %L",
489 sym->name, ns->entries->sym->name, &sym->declared_at);
494 if (ts->type == BT_UNKNOWN)
495 ts = gfc_get_default_type (sym, NULL);
499 if (ts->kind == gfc_default_integer_kind)
503 if (ts->kind == gfc_default_real_kind
504 || ts->kind == gfc_default_double_kind)
508 if (ts->kind == gfc_default_complex_kind)
512 if (ts->kind == gfc_default_logical_kind)
516 /* We will issue error elsewhere. */
524 if (el == ns->entries)
526 ("FUNCTION result %s can't be of type %s in FUNCTION %s at %L",
527 sym->name, gfc_typename (ts), ns->entries->sym->name,
531 ("ENTRY result %s can't be of type %s in FUNCTION %s at %L",
532 sym->name, gfc_typename (ts), ns->entries->sym->name,
539 proc->attr.access = ACCESS_PRIVATE;
540 proc->attr.entry_master = 1;
542 /* Merge all the entry point arguments. */
543 for (el = ns->entries; el; el = el->next)
544 merge_argument_lists (proc, el->sym->formal);
546 /* Use the master function for the function body. */
547 ns->proc_name = proc;
549 /* Finalize the new symbols. */
550 gfc_commit_symbols ();
552 /* Restore the original namespace. */
553 gfc_current_ns = old_ns;
557 /* Resolve contained function types. Because contained functions can call one
558 another, they have to be worked out before any of the contained procedures
561 The good news is that if a function doesn't already have a type, the only
562 way it can get one is through an IMPLICIT type or a RESULT variable, because
563 by definition contained functions are contained namespace they're contained
564 in, not in a sibling or parent namespace. */
567 resolve_contained_functions (gfc_namespace * ns)
569 gfc_namespace *child;
572 resolve_formal_arglists (ns);
574 for (child = ns->contained; child; child = child->sibling)
576 /* Resolve alternate entry points first. */
577 resolve_entries (child);
579 /* Then check function return types. */
580 resolve_contained_fntype (child->proc_name, child);
581 for (el = child->entries; el; el = el->next)
582 resolve_contained_fntype (el->sym, child);
587 /* Resolve all of the elements of a structure constructor and make sure that
588 the types are correct. */
591 resolve_structure_cons (gfc_expr * expr)
593 gfc_constructor *cons;
599 cons = expr->value.constructor;
600 /* A constructor may have references if it is the result of substituting a
601 parameter variable. In this case we just pull out the component we
604 comp = expr->ref->u.c.sym->components;
606 comp = expr->ts.derived->components;
608 for (; comp; comp = comp->next, cons = cons->next)
613 if (gfc_resolve_expr (cons->expr) == FAILURE)
619 if (cons->expr->expr_type != EXPR_NULL
620 && comp->as && comp->as->rank != cons->expr->rank
621 && (comp->allocatable || cons->expr->rank))
623 gfc_error ("The rank of the element in the derived type "
624 "constructor at %L does not match that of the "
625 "component (%d/%d)", &cons->expr->where,
626 cons->expr->rank, comp->as ? comp->as->rank : 0);
630 /* If we don't have the right type, try to convert it. */
632 if (!gfc_compare_types (&cons->expr->ts, &comp->ts))
635 if (comp->pointer && cons->expr->ts.type != BT_UNKNOWN)
636 gfc_error ("The element in the derived type constructor at %L, "
637 "for pointer component '%s', is %s but should be %s",
638 &cons->expr->where, comp->name,
639 gfc_basic_typename (cons->expr->ts.type),
640 gfc_basic_typename (comp->ts.type));
642 t = gfc_convert_type (cons->expr, &comp->ts, 1);
645 if (!comp->pointer || cons->expr->expr_type == EXPR_NULL)
648 a = gfc_expr_attr (cons->expr);
650 if (!a.pointer && !a.target)
653 gfc_error ("The element in the derived type constructor at %L, "
654 "for pointer component '%s' should be a POINTER or "
655 "a TARGET", &cons->expr->where, comp->name);
664 /****************** Expression name resolution ******************/
666 /* Returns 0 if a symbol was not declared with a type or
667 attribute declaration statement, nonzero otherwise. */
670 was_declared (gfc_symbol * sym)
676 if (!a.implicit_type && sym->ts.type != BT_UNKNOWN)
679 if (a.allocatable || a.dimension || a.dummy || a.external || a.intrinsic
680 || a.optional || a.pointer || a.save || a.target
681 || a.access != ACCESS_UNKNOWN || a.intent != INTENT_UNKNOWN)
688 /* Determine if a symbol is generic or not. */
691 generic_sym (gfc_symbol * sym)
695 if (sym->attr.generic ||
696 (sym->attr.intrinsic && gfc_generic_intrinsic (sym->name)))
699 if (was_declared (sym) || sym->ns->parent == NULL)
702 gfc_find_symbol (sym->name, sym->ns->parent, 1, &s);
704 return (s == NULL) ? 0 : generic_sym (s);
708 /* Determine if a symbol is specific or not. */
711 specific_sym (gfc_symbol * sym)
715 if (sym->attr.if_source == IFSRC_IFBODY
716 || sym->attr.proc == PROC_MODULE
717 || sym->attr.proc == PROC_INTERNAL
718 || sym->attr.proc == PROC_ST_FUNCTION
719 || (sym->attr.intrinsic &&
720 gfc_specific_intrinsic (sym->name))
721 || sym->attr.external)
724 if (was_declared (sym) || sym->ns->parent == NULL)
727 gfc_find_symbol (sym->name, sym->ns->parent, 1, &s);
729 return (s == NULL) ? 0 : specific_sym (s);
733 /* Figure out if the procedure is specific, generic or unknown. */
736 { PTYPE_GENERIC = 1, PTYPE_SPECIFIC, PTYPE_UNKNOWN }
740 procedure_kind (gfc_symbol * sym)
743 if (generic_sym (sym))
744 return PTYPE_GENERIC;
746 if (specific_sym (sym))
747 return PTYPE_SPECIFIC;
749 return PTYPE_UNKNOWN;
752 /* Check references to assumed size arrays. The flag need_full_assumed_size
753 is nonzero when matching actual arguments. */
755 static int need_full_assumed_size = 0;
758 check_assumed_size_reference (gfc_symbol * sym, gfc_expr * e)
764 if (need_full_assumed_size
765 || !(sym->as && sym->as->type == AS_ASSUMED_SIZE))
768 for (ref = e->ref; ref; ref = ref->next)
769 if (ref->type == REF_ARRAY)
770 for (dim = 0; dim < ref->u.ar.as->rank; dim++)
771 last = (ref->u.ar.end[dim] == NULL) && (ref->u.ar.type == DIMEN_ELEMENT);
775 gfc_error ("The upper bound in the last dimension must "
776 "appear in the reference to the assumed size "
777 "array '%s' at %L.", sym->name, &e->where);
784 /* Look for bad assumed size array references in argument expressions
785 of elemental and array valued intrinsic procedures. Since this is
786 called from procedure resolution functions, it only recurses at
790 resolve_assumed_size_actual (gfc_expr *e)
795 switch (e->expr_type)
799 && check_assumed_size_reference (e->symtree->n.sym, e))
804 if (resolve_assumed_size_actual (e->value.op.op1)
805 || resolve_assumed_size_actual (e->value.op.op2))
816 /* Resolve an actual argument list. Most of the time, this is just
817 resolving the expressions in the list.
818 The exception is that we sometimes have to decide whether arguments
819 that look like procedure arguments are really simple variable
823 resolve_actual_arglist (gfc_actual_arglist * arg)
826 gfc_symtree *parent_st;
829 for (; arg; arg = arg->next)
835 /* Check the label is a valid branching target. */
838 if (arg->label->defined == ST_LABEL_UNKNOWN)
840 gfc_error ("Label %d referenced at %L is never defined",
841 arg->label->value, &arg->label->where);
848 if (e->ts.type != BT_PROCEDURE)
850 if (gfc_resolve_expr (e) != SUCCESS)
855 /* See if the expression node should really be a variable
858 sym = e->symtree->n.sym;
860 if (sym->attr.flavor == FL_PROCEDURE
861 || sym->attr.intrinsic
862 || sym->attr.external)
866 /* If a procedure is not already determined to be something else
867 check if it is intrinsic. */
868 if (!sym->attr.intrinsic
869 && !(sym->attr.external || sym->attr.use_assoc
870 || sym->attr.if_source == IFSRC_IFBODY)
871 && gfc_intrinsic_name (sym->name, sym->attr.subroutine))
872 sym->attr.intrinsic = 1;
874 if (sym->attr.proc == PROC_ST_FUNCTION)
876 gfc_error ("Statement function '%s' at %L is not allowed as an "
877 "actual argument", sym->name, &e->where);
880 actual_ok = gfc_intrinsic_actual_ok (sym->name, sym->attr.subroutine);
881 if (sym->attr.intrinsic && actual_ok == 0)
883 gfc_error ("Intrinsic '%s' at %L is not allowed as an "
884 "actual argument", sym->name, &e->where);
886 else if (sym->attr.intrinsic && actual_ok == 2)
887 /* We need a special case for CHAR, which is the only intrinsic
888 function allowed as actual argument in F2003 and not allowed
890 gfc_notify_std (GFC_STD_F2003, "Fortran 2003: CHAR intrinsic "
891 "allowed as actual argument at %L", &e->where);
893 if (sym->attr.contained && !sym->attr.use_assoc
894 && sym->ns->proc_name->attr.flavor != FL_MODULE)
896 gfc_error ("Internal procedure '%s' is not allowed as an "
897 "actual argument at %L", sym->name, &e->where);
900 if (sym->attr.elemental && !sym->attr.intrinsic)
902 gfc_error ("ELEMENTAL non-INTRINSIC procedure '%s' is not "
903 "allowed as an actual argument at %L", sym->name,
907 if (sym->attr.generic)
909 gfc_error ("GENERIC non-INTRINSIC procedure '%s' is not "
910 "allowed as an actual argument at %L", sym->name,
914 /* If the symbol is the function that names the current (or
915 parent) scope, then we really have a variable reference. */
917 if (sym->attr.function && sym->result == sym
918 && (sym->ns->proc_name == sym
919 || (sym->ns->parent != NULL
920 && sym->ns->parent->proc_name == sym)))
926 /* See if the name is a module procedure in a parent unit. */
928 if (was_declared (sym) || sym->ns->parent == NULL)
931 if (gfc_find_sym_tree (sym->name, sym->ns->parent, 1, &parent_st))
933 gfc_error ("Symbol '%s' at %L is ambiguous", sym->name, &e->where);
937 if (parent_st == NULL)
940 sym = parent_st->n.sym;
941 e->symtree = parent_st; /* Point to the right thing. */
943 if (sym->attr.flavor == FL_PROCEDURE
944 || sym->attr.intrinsic
945 || sym->attr.external)
951 e->expr_type = EXPR_VARIABLE;
955 e->rank = sym->as->rank;
956 e->ref = gfc_get_ref ();
957 e->ref->type = REF_ARRAY;
958 e->ref->u.ar.type = AR_FULL;
959 e->ref->u.ar.as = sym->as;
967 /* Do the checks of the actual argument list that are specific to elemental
968 procedures. If called with c == NULL, we have a function, otherwise if
969 expr == NULL, we have a subroutine. */
971 resolve_elemental_actual (gfc_expr *expr, gfc_code *c)
973 gfc_actual_arglist *arg0;
974 gfc_actual_arglist *arg;
975 gfc_symbol *esym = NULL;
976 gfc_intrinsic_sym *isym = NULL;
978 gfc_intrinsic_arg *iformal = NULL;
979 gfc_formal_arglist *eformal = NULL;
980 bool formal_optional = false;
981 bool set_by_optional = false;
985 /* Is this an elemental procedure? */
986 if (expr && expr->value.function.actual != NULL)
988 if (expr->value.function.esym != NULL
989 && expr->value.function.esym->attr.elemental)
991 arg0 = expr->value.function.actual;
992 esym = expr->value.function.esym;
994 else if (expr->value.function.isym != NULL
995 && expr->value.function.isym->elemental)
997 arg0 = expr->value.function.actual;
998 isym = expr->value.function.isym;
1003 else if (c && c->ext.actual != NULL
1004 && c->symtree->n.sym->attr.elemental)
1006 arg0 = c->ext.actual;
1007 esym = c->symtree->n.sym;
1012 /* The rank of an elemental is the rank of its array argument(s). */
1013 for (arg = arg0; arg; arg = arg->next)
1015 if (arg->expr != NULL && arg->expr->rank > 0)
1017 rank = arg->expr->rank;
1018 if (arg->expr->expr_type == EXPR_VARIABLE
1019 && arg->expr->symtree->n.sym->attr.optional)
1020 set_by_optional = true;
1022 /* Function specific; set the result rank and shape. */
1026 if (!expr->shape && arg->expr->shape)
1028 expr->shape = gfc_get_shape (rank);
1029 for (i = 0; i < rank; i++)
1030 mpz_init_set (expr->shape[i], arg->expr->shape[i]);
1037 /* If it is an array, it shall not be supplied as an actual argument
1038 to an elemental procedure unless an array of the same rank is supplied
1039 as an actual argument corresponding to a nonoptional dummy argument of
1040 that elemental procedure(12.4.1.5). */
1041 formal_optional = false;
1043 iformal = isym->formal;
1045 eformal = esym->formal;
1047 for (arg = arg0; arg; arg = arg->next)
1051 if (eformal->sym && eformal->sym->attr.optional)
1052 formal_optional = true;
1053 eformal = eformal->next;
1055 else if (isym && iformal)
1057 if (iformal->optional)
1058 formal_optional = true;
1059 iformal = iformal->next;
1062 formal_optional = true;
1064 if (pedantic && arg->expr != NULL
1065 && arg->expr->expr_type == EXPR_VARIABLE
1066 && arg->expr->symtree->n.sym->attr.optional
1069 && (set_by_optional || arg->expr->rank != rank)
1070 && !(isym && isym->generic_id == GFC_ISYM_CONVERSION))
1072 gfc_warning ("'%s' at %L is an array and OPTIONAL; IF IT IS "
1073 "MISSING, it cannot be the actual argument of an "
1074 "ELEMENTAL procedure unless there is a non-optional"
1075 "argument with the same rank (12.4.1.5)",
1076 arg->expr->symtree->n.sym->name, &arg->expr->where);
1081 for (arg = arg0; arg; arg = arg->next)
1083 if (arg->expr == NULL || arg->expr->rank == 0)
1086 /* Being elemental, the last upper bound of an assumed size array
1087 argument must be present. */
1088 if (resolve_assumed_size_actual (arg->expr))
1094 /* Elemental subroutine array actual arguments must conform. */
1097 if (gfc_check_conformance ("elemental subroutine", arg->expr, e)
1109 /* Go through each actual argument in ACTUAL and see if it can be
1110 implemented as an inlined, non-copying intrinsic. FNSYM is the
1111 function being called, or NULL if not known. */
1114 find_noncopying_intrinsics (gfc_symbol * fnsym, gfc_actual_arglist * actual)
1116 gfc_actual_arglist *ap;
1119 for (ap = actual; ap; ap = ap->next)
1121 && (expr = gfc_get_noncopying_intrinsic_argument (ap->expr))
1122 && !gfc_check_fncall_dependency (expr, INTENT_IN, fnsym, actual))
1123 ap->expr->inline_noncopying_intrinsic = 1;
1126 /* This function does the checking of references to global procedures
1127 as defined in sections 18.1 and 14.1, respectively, of the Fortran
1128 77 and 95 standards. It checks for a gsymbol for the name, making
1129 one if it does not already exist. If it already exists, then the
1130 reference being resolved must correspond to the type of gsymbol.
1131 Otherwise, the new symbol is equipped with the attributes of the
1132 reference. The corresponding code that is called in creating
1133 global entities is parse.c. */
1136 resolve_global_procedure (gfc_symbol *sym, locus *where, int sub)
1141 type = sub ? GSYM_SUBROUTINE : GSYM_FUNCTION;
1143 gsym = gfc_get_gsymbol (sym->name);
1145 if ((gsym->type != GSYM_UNKNOWN && gsym->type != type))
1146 global_used (gsym, where);
1148 if (gsym->type == GSYM_UNKNOWN)
1151 gsym->where = *where;
1157 /************* Function resolution *************/
1159 /* Resolve a function call known to be generic.
1160 Section 14.1.2.4.1. */
1163 resolve_generic_f0 (gfc_expr * expr, gfc_symbol * sym)
1167 if (sym->attr.generic)
1170 gfc_search_interface (sym->generic, 0, &expr->value.function.actual);
1173 expr->value.function.name = s->name;
1174 expr->value.function.esym = s;
1176 if (s->ts.type != BT_UNKNOWN)
1178 else if (s->result != NULL && s->result->ts.type != BT_UNKNOWN)
1179 expr->ts = s->result->ts;
1182 expr->rank = s->as->rank;
1183 else if (s->result != NULL && s->result->as != NULL)
1184 expr->rank = s->result->as->rank;
1189 /* TODO: Need to search for elemental references in generic interface */
1192 if (sym->attr.intrinsic)
1193 return gfc_intrinsic_func_interface (expr, 0);
1200 resolve_generic_f (gfc_expr * expr)
1205 sym = expr->symtree->n.sym;
1209 m = resolve_generic_f0 (expr, sym);
1212 else if (m == MATCH_ERROR)
1216 if (sym->ns->parent == NULL)
1218 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
1222 if (!generic_sym (sym))
1226 /* Last ditch attempt. */
1228 if (!gfc_generic_intrinsic (expr->symtree->n.sym->name))
1230 gfc_error ("There is no specific function for the generic '%s' at %L",
1231 expr->symtree->n.sym->name, &expr->where);
1235 m = gfc_intrinsic_func_interface (expr, 0);
1240 ("Generic function '%s' at %L is not consistent with a specific "
1241 "intrinsic interface", expr->symtree->n.sym->name, &expr->where);
1247 /* Resolve a function call known to be specific. */
1250 resolve_specific_f0 (gfc_symbol * sym, gfc_expr * expr)
1254 if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
1256 if (sym->attr.dummy)
1258 sym->attr.proc = PROC_DUMMY;
1262 sym->attr.proc = PROC_EXTERNAL;
1266 if (sym->attr.proc == PROC_MODULE
1267 || sym->attr.proc == PROC_ST_FUNCTION
1268 || sym->attr.proc == PROC_INTERNAL)
1271 if (sym->attr.intrinsic)
1273 m = gfc_intrinsic_func_interface (expr, 1);
1278 ("Function '%s' at %L is INTRINSIC but is not compatible with "
1279 "an intrinsic", sym->name, &expr->where);
1287 gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
1290 expr->value.function.name = sym->name;
1291 expr->value.function.esym = sym;
1292 if (sym->as != NULL)
1293 expr->rank = sym->as->rank;
1300 resolve_specific_f (gfc_expr * expr)
1305 sym = expr->symtree->n.sym;
1309 m = resolve_specific_f0 (sym, expr);
1312 if (m == MATCH_ERROR)
1315 if (sym->ns->parent == NULL)
1318 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
1324 gfc_error ("Unable to resolve the specific function '%s' at %L",
1325 expr->symtree->n.sym->name, &expr->where);
1331 /* Resolve a procedure call not known to be generic nor specific. */
1334 resolve_unknown_f (gfc_expr * expr)
1339 sym = expr->symtree->n.sym;
1341 if (sym->attr.dummy)
1343 sym->attr.proc = PROC_DUMMY;
1344 expr->value.function.name = sym->name;
1348 /* See if we have an intrinsic function reference. */
1350 if (gfc_intrinsic_name (sym->name, 0))
1352 if (gfc_intrinsic_func_interface (expr, 1) == MATCH_YES)
1357 /* The reference is to an external name. */
1359 sym->attr.proc = PROC_EXTERNAL;
1360 expr->value.function.name = sym->name;
1361 expr->value.function.esym = expr->symtree->n.sym;
1363 if (sym->as != NULL)
1364 expr->rank = sym->as->rank;
1366 /* Type of the expression is either the type of the symbol or the
1367 default type of the symbol. */
1370 gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
1372 if (sym->ts.type != BT_UNKNOWN)
1376 ts = gfc_get_default_type (sym, sym->ns);
1378 if (ts->type == BT_UNKNOWN)
1380 gfc_error ("Function '%s' at %L has no IMPLICIT type",
1381 sym->name, &expr->where);
1392 /* Figure out if a function reference is pure or not. Also set the name
1393 of the function for a potential error message. Return nonzero if the
1394 function is PURE, zero if not. */
1397 pure_function (gfc_expr * e, const char **name)
1401 if (e->value.function.esym)
1403 pure = gfc_pure (e->value.function.esym);
1404 *name = e->value.function.esym->name;
1406 else if (e->value.function.isym)
1408 pure = e->value.function.isym->pure
1409 || e->value.function.isym->elemental;
1410 *name = e->value.function.isym->name;
1414 /* Implicit functions are not pure. */
1416 *name = e->value.function.name;
1423 /* Resolve a function call, which means resolving the arguments, then figuring
1424 out which entity the name refers to. */
1425 /* TODO: Check procedure arguments so that an INTENT(IN) isn't passed
1426 to INTENT(OUT) or INTENT(INOUT). */
1429 resolve_function (gfc_expr * expr)
1431 gfc_actual_arglist *arg;
1439 sym = expr->symtree->n.sym;
1441 /* If the procedure is not internal, a statement function or a module
1442 procedure,it must be external and should be checked for usage. */
1443 if (sym && !sym->attr.dummy && !sym->attr.contained
1444 && sym->attr.proc != PROC_ST_FUNCTION
1445 && !sym->attr.use_assoc)
1446 resolve_global_procedure (sym, &expr->where, 0);
1448 /* Switch off assumed size checking and do this again for certain kinds
1449 of procedure, once the procedure itself is resolved. */
1450 need_full_assumed_size++;
1452 if (resolve_actual_arglist (expr->value.function.actual) == FAILURE)
1455 /* Resume assumed_size checking. */
1456 need_full_assumed_size--;
1458 if (sym && sym->ts.type == BT_CHARACTER
1460 && sym->ts.cl->length == NULL
1462 && expr->value.function.esym == NULL
1463 && !sym->attr.contained)
1465 /* Internal procedures are taken care of in resolve_contained_fntype. */
1466 gfc_error ("Function '%s' is declared CHARACTER(*) and cannot "
1467 "be used at %L since it is not a dummy argument",
1468 sym->name, &expr->where);
1472 /* See if function is already resolved. */
1474 if (expr->value.function.name != NULL)
1476 if (expr->ts.type == BT_UNKNOWN)
1482 /* Apply the rules of section 14.1.2. */
1484 switch (procedure_kind (sym))
1487 t = resolve_generic_f (expr);
1490 case PTYPE_SPECIFIC:
1491 t = resolve_specific_f (expr);
1495 t = resolve_unknown_f (expr);
1499 gfc_internal_error ("resolve_function(): bad function type");
1503 /* If the expression is still a function (it might have simplified),
1504 then we check to see if we are calling an elemental function. */
1506 if (expr->expr_type != EXPR_FUNCTION)
1509 temp = need_full_assumed_size;
1510 need_full_assumed_size = 0;
1512 if (resolve_elemental_actual (expr, NULL) == FAILURE)
1515 if (omp_workshare_flag
1516 && expr->value.function.esym
1517 && ! gfc_elemental (expr->value.function.esym))
1519 gfc_error ("User defined non-ELEMENTAL function '%s' at %L not allowed"
1520 " in WORKSHARE construct", expr->value.function.esym->name,
1525 else if (expr->value.function.actual != NULL
1526 && expr->value.function.isym != NULL
1527 && expr->value.function.isym->generic_id != GFC_ISYM_LBOUND
1528 && expr->value.function.isym->generic_id != GFC_ISYM_LOC
1529 && expr->value.function.isym->generic_id != GFC_ISYM_PRESENT)
1531 /* Array intrinsics must also have the last upper bound of an
1532 assumed size array argument. UBOUND and SIZE have to be
1533 excluded from the check if the second argument is anything
1536 inquiry = expr->value.function.isym->generic_id == GFC_ISYM_UBOUND
1537 || expr->value.function.isym->generic_id == GFC_ISYM_SIZE;
1539 for (arg = expr->value.function.actual; arg; arg = arg->next)
1541 if (inquiry && arg->next != NULL && arg->next->expr
1542 && arg->next->expr->expr_type != EXPR_CONSTANT)
1545 if (arg->expr != NULL
1546 && arg->expr->rank > 0
1547 && resolve_assumed_size_actual (arg->expr))
1552 need_full_assumed_size = temp;
1554 if (!pure_function (expr, &name) && name)
1559 ("reference to non-PURE function '%s' at %L inside a "
1560 "FORALL %s", name, &expr->where, forall_flag == 2 ?
1564 else if (gfc_pure (NULL))
1566 gfc_error ("Function reference to '%s' at %L is to a non-PURE "
1567 "procedure within a PURE procedure", name, &expr->where);
1572 /* Functions without the RECURSIVE attribution are not allowed to
1573 * call themselves. */
1574 if (expr->value.function.esym && !expr->value.function.esym->attr.recursive)
1576 gfc_symbol *esym, *proc;
1577 esym = expr->value.function.esym;
1578 proc = gfc_current_ns->proc_name;
1581 gfc_error ("Function '%s' at %L cannot call itself, as it is not "
1582 "RECURSIVE", name, &expr->where);
1586 if (esym->attr.entry && esym->ns->entries && proc->ns->entries
1587 && esym->ns->entries->sym == proc->ns->entries->sym)
1589 gfc_error ("Call to ENTRY '%s' at %L is recursive, but function "
1590 "'%s' is not declared as RECURSIVE",
1591 esym->name, &expr->where, esym->ns->entries->sym->name);
1596 /* Character lengths of use associated functions may contains references to
1597 symbols not referenced from the current program unit otherwise. Make sure
1598 those symbols are marked as referenced. */
1600 if (expr->ts.type == BT_CHARACTER && expr->value.function.esym
1601 && expr->value.function.esym->attr.use_assoc)
1603 gfc_expr_set_symbols_referenced (expr->ts.cl->length);
1607 find_noncopying_intrinsics (expr->value.function.esym,
1608 expr->value.function.actual);
1613 /************* Subroutine resolution *************/
1616 pure_subroutine (gfc_code * c, gfc_symbol * sym)
1623 gfc_error ("Subroutine call to '%s' in FORALL block at %L is not PURE",
1624 sym->name, &c->loc);
1625 else if (gfc_pure (NULL))
1626 gfc_error ("Subroutine call to '%s' at %L is not PURE", sym->name,
1632 resolve_generic_s0 (gfc_code * c, gfc_symbol * sym)
1636 if (sym->attr.generic)
1638 s = gfc_search_interface (sym->generic, 1, &c->ext.actual);
1641 c->resolved_sym = s;
1642 pure_subroutine (c, s);
1646 /* TODO: Need to search for elemental references in generic interface. */
1649 if (sym->attr.intrinsic)
1650 return gfc_intrinsic_sub_interface (c, 0);
1657 resolve_generic_s (gfc_code * c)
1662 sym = c->symtree->n.sym;
1666 m = resolve_generic_s0 (c, sym);
1669 else if (m == MATCH_ERROR)
1673 if (sym->ns->parent == NULL)
1675 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
1679 if (!generic_sym (sym))
1683 /* Last ditch attempt. */
1684 sym = c->symtree->n.sym;
1685 if (!gfc_generic_intrinsic (sym->name))
1688 ("There is no specific subroutine for the generic '%s' at %L",
1689 sym->name, &c->loc);
1693 m = gfc_intrinsic_sub_interface (c, 0);
1697 gfc_error ("Generic subroutine '%s' at %L is not consistent with an "
1698 "intrinsic subroutine interface", sym->name, &c->loc);
1704 /* Resolve a subroutine call known to be specific. */
1707 resolve_specific_s0 (gfc_code * c, gfc_symbol * sym)
1711 if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
1713 if (sym->attr.dummy)
1715 sym->attr.proc = PROC_DUMMY;
1719 sym->attr.proc = PROC_EXTERNAL;
1723 if (sym->attr.proc == PROC_MODULE || sym->attr.proc == PROC_INTERNAL)
1726 if (sym->attr.intrinsic)
1728 m = gfc_intrinsic_sub_interface (c, 1);
1732 gfc_error ("Subroutine '%s' at %L is INTRINSIC but is not compatible "
1733 "with an intrinsic", sym->name, &c->loc);
1741 gfc_procedure_use (sym, &c->ext.actual, &c->loc);
1743 c->resolved_sym = sym;
1744 pure_subroutine (c, sym);
1751 resolve_specific_s (gfc_code * c)
1756 sym = c->symtree->n.sym;
1760 m = resolve_specific_s0 (c, sym);
1763 if (m == MATCH_ERROR)
1766 if (sym->ns->parent == NULL)
1769 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
1775 sym = c->symtree->n.sym;
1776 gfc_error ("Unable to resolve the specific subroutine '%s' at %L",
1777 sym->name, &c->loc);
1783 /* Resolve a subroutine call not known to be generic nor specific. */
1786 resolve_unknown_s (gfc_code * c)
1790 sym = c->symtree->n.sym;
1792 if (sym->attr.dummy)
1794 sym->attr.proc = PROC_DUMMY;
1798 /* See if we have an intrinsic function reference. */
1800 if (gfc_intrinsic_name (sym->name, 1))
1802 if (gfc_intrinsic_sub_interface (c, 1) == MATCH_YES)
1807 /* The reference is to an external name. */
1810 gfc_procedure_use (sym, &c->ext.actual, &c->loc);
1812 c->resolved_sym = sym;
1814 pure_subroutine (c, sym);
1820 /* Resolve a subroutine call. Although it was tempting to use the same code
1821 for functions, subroutines and functions are stored differently and this
1822 makes things awkward. */
1825 resolve_call (gfc_code * c)
1829 if (c->symtree && c->symtree->n.sym
1830 && c->symtree->n.sym->ts.type != BT_UNKNOWN)
1832 gfc_error ("'%s' at %L has a type, which is not consistent with "
1833 "the CALL at %L", c->symtree->n.sym->name,
1834 &c->symtree->n.sym->declared_at, &c->loc);
1838 /* If the procedure is not internal or module, it must be external and
1839 should be checked for usage. */
1840 if (c->symtree && c->symtree->n.sym
1841 && !c->symtree->n.sym->attr.dummy
1842 && !c->symtree->n.sym->attr.contained
1843 && !c->symtree->n.sym->attr.use_assoc)
1844 resolve_global_procedure (c->symtree->n.sym, &c->loc, 1);
1846 /* Subroutines without the RECURSIVE attribution are not allowed to
1847 * call themselves. */
1848 if (c->symtree && c->symtree->n.sym && !c->symtree->n.sym->attr.recursive)
1850 gfc_symbol *csym, *proc;
1851 csym = c->symtree->n.sym;
1852 proc = gfc_current_ns->proc_name;
1855 gfc_error ("SUBROUTINE '%s' at %L cannot call itself, as it is not "
1856 "RECURSIVE", csym->name, &c->loc);
1860 if (csym->attr.entry && csym->ns->entries && proc->ns->entries
1861 && csym->ns->entries->sym == proc->ns->entries->sym)
1863 gfc_error ("Call to ENTRY '%s' at %L is recursive, but subroutine "
1864 "'%s' is not declared as RECURSIVE",
1865 csym->name, &c->loc, csym->ns->entries->sym->name);
1870 /* Switch off assumed size checking and do this again for certain kinds
1871 of procedure, once the procedure itself is resolved. */
1872 need_full_assumed_size++;
1874 if (resolve_actual_arglist (c->ext.actual) == FAILURE)
1877 /* Resume assumed_size checking. */
1878 need_full_assumed_size--;
1882 if (c->resolved_sym == NULL)
1883 switch (procedure_kind (c->symtree->n.sym))
1886 t = resolve_generic_s (c);
1889 case PTYPE_SPECIFIC:
1890 t = resolve_specific_s (c);
1894 t = resolve_unknown_s (c);
1898 gfc_internal_error ("resolve_subroutine(): bad function type");
1901 /* Some checks of elemental subroutine actual arguments. */
1902 if (resolve_elemental_actual (NULL, c) == FAILURE)
1906 find_noncopying_intrinsics (c->resolved_sym, c->ext.actual);
1910 /* Compare the shapes of two arrays that have non-NULL shapes. If both
1911 op1->shape and op2->shape are non-NULL return SUCCESS if their shapes
1912 match. If both op1->shape and op2->shape are non-NULL return FAILURE
1913 if their shapes do not match. If either op1->shape or op2->shape is
1914 NULL, return SUCCESS. */
1917 compare_shapes (gfc_expr * op1, gfc_expr * op2)
1924 if (op1->shape != NULL && op2->shape != NULL)
1926 for (i = 0; i < op1->rank; i++)
1928 if (mpz_cmp (op1->shape[i], op2->shape[i]) != 0)
1930 gfc_error ("Shapes for operands at %L and %L are not conformable",
1931 &op1->where, &op2->where);
1941 /* Resolve an operator expression node. This can involve replacing the
1942 operation with a user defined function call. */
1945 resolve_operator (gfc_expr * e)
1947 gfc_expr *op1, *op2;
1951 /* Resolve all subnodes-- give them types. */
1953 switch (e->value.op.operator)
1956 if (gfc_resolve_expr (e->value.op.op2) == FAILURE)
1959 /* Fall through... */
1962 case INTRINSIC_UPLUS:
1963 case INTRINSIC_UMINUS:
1964 case INTRINSIC_PARENTHESES:
1965 if (gfc_resolve_expr (e->value.op.op1) == FAILURE)
1970 /* Typecheck the new node. */
1972 op1 = e->value.op.op1;
1973 op2 = e->value.op.op2;
1975 switch (e->value.op.operator)
1977 case INTRINSIC_UPLUS:
1978 case INTRINSIC_UMINUS:
1979 if (op1->ts.type == BT_INTEGER
1980 || op1->ts.type == BT_REAL
1981 || op1->ts.type == BT_COMPLEX)
1987 sprintf (msg, _("Operand of unary numeric operator '%s' at %%L is %s"),
1988 gfc_op2string (e->value.op.operator), gfc_typename (&e->ts));
1991 case INTRINSIC_PLUS:
1992 case INTRINSIC_MINUS:
1993 case INTRINSIC_TIMES:
1994 case INTRINSIC_DIVIDE:
1995 case INTRINSIC_POWER:
1996 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
1998 gfc_type_convert_binary (e);
2003 _("Operands of binary numeric operator '%s' at %%L are %s/%s"),
2004 gfc_op2string (e->value.op.operator), gfc_typename (&op1->ts),
2005 gfc_typename (&op2->ts));
2008 case INTRINSIC_CONCAT:
2009 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER)
2011 e->ts.type = BT_CHARACTER;
2012 e->ts.kind = op1->ts.kind;
2017 _("Operands of string concatenation operator at %%L are %s/%s"),
2018 gfc_typename (&op1->ts), gfc_typename (&op2->ts));
2024 case INTRINSIC_NEQV:
2025 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
2027 e->ts.type = BT_LOGICAL;
2028 e->ts.kind = gfc_kind_max (op1, op2);
2029 if (op1->ts.kind < e->ts.kind)
2030 gfc_convert_type (op1, &e->ts, 2);
2031 else if (op2->ts.kind < e->ts.kind)
2032 gfc_convert_type (op2, &e->ts, 2);
2036 sprintf (msg, _("Operands of logical operator '%s' at %%L are %s/%s"),
2037 gfc_op2string (e->value.op.operator), gfc_typename (&op1->ts),
2038 gfc_typename (&op2->ts));
2043 if (op1->ts.type == BT_LOGICAL)
2045 e->ts.type = BT_LOGICAL;
2046 e->ts.kind = op1->ts.kind;
2050 sprintf (msg, _("Operand of .NOT. operator at %%L is %s"),
2051 gfc_typename (&op1->ts));
2058 if (op1->ts.type == BT_COMPLEX || op2->ts.type == BT_COMPLEX)
2060 strcpy (msg, _("COMPLEX quantities cannot be compared at %L"));
2064 /* Fall through... */
2068 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER)
2070 e->ts.type = BT_LOGICAL;
2071 e->ts.kind = gfc_default_logical_kind;
2075 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
2077 gfc_type_convert_binary (e);
2079 e->ts.type = BT_LOGICAL;
2080 e->ts.kind = gfc_default_logical_kind;
2084 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
2086 _("Logicals at %%L must be compared with %s instead of %s"),
2087 e->value.op.operator == INTRINSIC_EQ ? ".EQV." : ".NEQV.",
2088 gfc_op2string (e->value.op.operator));
2091 _("Operands of comparison operator '%s' at %%L are %s/%s"),
2092 gfc_op2string (e->value.op.operator), gfc_typename (&op1->ts),
2093 gfc_typename (&op2->ts));
2097 case INTRINSIC_USER:
2099 sprintf (msg, _("Operand of user operator '%s' at %%L is %s"),
2100 e->value.op.uop->name, gfc_typename (&op1->ts));
2102 sprintf (msg, _("Operands of user operator '%s' at %%L are %s/%s"),
2103 e->value.op.uop->name, gfc_typename (&op1->ts),
2104 gfc_typename (&op2->ts));
2108 case INTRINSIC_PARENTHESES:
2112 gfc_internal_error ("resolve_operator(): Bad intrinsic");
2115 /* Deal with arrayness of an operand through an operator. */
2119 switch (e->value.op.operator)
2121 case INTRINSIC_PLUS:
2122 case INTRINSIC_MINUS:
2123 case INTRINSIC_TIMES:
2124 case INTRINSIC_DIVIDE:
2125 case INTRINSIC_POWER:
2126 case INTRINSIC_CONCAT:
2130 case INTRINSIC_NEQV:
2138 if (op1->rank == 0 && op2->rank == 0)
2141 if (op1->rank == 0 && op2->rank != 0)
2143 e->rank = op2->rank;
2145 if (e->shape == NULL)
2146 e->shape = gfc_copy_shape (op2->shape, op2->rank);
2149 if (op1->rank != 0 && op2->rank == 0)
2151 e->rank = op1->rank;
2153 if (e->shape == NULL)
2154 e->shape = gfc_copy_shape (op1->shape, op1->rank);
2157 if (op1->rank != 0 && op2->rank != 0)
2159 if (op1->rank == op2->rank)
2161 e->rank = op1->rank;
2162 if (e->shape == NULL)
2164 t = compare_shapes(op1, op2);
2168 e->shape = gfc_copy_shape (op1->shape, op1->rank);
2173 gfc_error ("Inconsistent ranks for operator at %L and %L",
2174 &op1->where, &op2->where);
2177 /* Allow higher level expressions to work. */
2185 case INTRINSIC_UPLUS:
2186 case INTRINSIC_UMINUS:
2187 case INTRINSIC_PARENTHESES:
2188 e->rank = op1->rank;
2190 if (e->shape == NULL)
2191 e->shape = gfc_copy_shape (op1->shape, op1->rank);
2193 /* Simply copy arrayness attribute */
2200 /* Attempt to simplify the expression. */
2202 t = gfc_simplify_expr (e, 0);
2207 if (gfc_extend_expr (e) == SUCCESS)
2210 gfc_error (msg, &e->where);
2216 /************** Array resolution subroutines **************/
2220 { CMP_LT, CMP_EQ, CMP_GT, CMP_UNKNOWN }
2223 /* Compare two integer expressions. */
2226 compare_bound (gfc_expr * a, gfc_expr * b)
2230 if (a == NULL || a->expr_type != EXPR_CONSTANT
2231 || b == NULL || b->expr_type != EXPR_CONSTANT)
2234 if (a->ts.type != BT_INTEGER || b->ts.type != BT_INTEGER)
2235 gfc_internal_error ("compare_bound(): Bad expression");
2237 i = mpz_cmp (a->value.integer, b->value.integer);
2247 /* Compare an integer expression with an integer. */
2250 compare_bound_int (gfc_expr * a, int b)
2254 if (a == NULL || a->expr_type != EXPR_CONSTANT)
2257 if (a->ts.type != BT_INTEGER)
2258 gfc_internal_error ("compare_bound_int(): Bad expression");
2260 i = mpz_cmp_si (a->value.integer, b);
2270 /* Compare an integer expression with a mpz_t. */
2273 compare_bound_mpz_t (gfc_expr * a, mpz_t b)
2277 if (a == NULL || a->expr_type != EXPR_CONSTANT)
2280 if (a->ts.type != BT_INTEGER)
2281 gfc_internal_error ("compare_bound_int(): Bad expression");
2283 i = mpz_cmp (a->value.integer, b);
2293 /* Compute the last value of a sequence given by a triplet.
2294 Return 0 if it wasn't able to compute the last value, or if the
2295 sequence if empty, and 1 otherwise. */
2298 compute_last_value_for_triplet (gfc_expr * start, gfc_expr * end,
2299 gfc_expr * stride, mpz_t last)
2303 if (start == NULL || start->expr_type != EXPR_CONSTANT
2304 || end == NULL || end->expr_type != EXPR_CONSTANT
2305 || (stride != NULL && stride->expr_type != EXPR_CONSTANT))
2308 if (start->ts.type != BT_INTEGER || end->ts.type != BT_INTEGER
2309 || (stride != NULL && stride->ts.type != BT_INTEGER))
2312 if (stride == NULL || compare_bound_int(stride, 1) == CMP_EQ)
2314 if (compare_bound (start, end) == CMP_GT)
2316 mpz_set (last, end->value.integer);
2320 if (compare_bound_int (stride, 0) == CMP_GT)
2322 /* Stride is positive */
2323 if (mpz_cmp (start->value.integer, end->value.integer) > 0)
2328 /* Stride is negative */
2329 if (mpz_cmp (start->value.integer, end->value.integer) < 0)
2334 mpz_sub (rem, end->value.integer, start->value.integer);
2335 mpz_tdiv_r (rem, rem, stride->value.integer);
2336 mpz_sub (last, end->value.integer, rem);
2343 /* Compare a single dimension of an array reference to the array
2347 check_dimension (int i, gfc_array_ref * ar, gfc_array_spec * as)
2351 /* Given start, end and stride values, calculate the minimum and
2352 maximum referenced indexes. */
2360 if (compare_bound (ar->start[i], as->lower[i]) == CMP_LT)
2362 if (compare_bound (ar->start[i], as->upper[i]) == CMP_GT)
2368 if (compare_bound_int (ar->stride[i], 0) == CMP_EQ)
2370 gfc_error ("Illegal stride of zero at %L", &ar->c_where[i]);
2374 #define AR_START (ar->start[i] ? ar->start[i] : as->lower[i])
2375 #define AR_END (ar->end[i] ? ar->end[i] : as->upper[i])
2377 if (compare_bound (AR_START, AR_END) == CMP_EQ
2378 && (compare_bound (AR_START, as->lower[i]) == CMP_LT
2379 || compare_bound (AR_START, as->upper[i]) == CMP_GT))
2382 if (((compare_bound_int (ar->stride[i], 0) == CMP_GT
2383 || ar->stride[i] == NULL)
2384 && compare_bound (AR_START, AR_END) != CMP_GT)
2385 || (compare_bound_int (ar->stride[i], 0) == CMP_LT
2386 && compare_bound (AR_START, AR_END) != CMP_LT))
2388 if (compare_bound (AR_START, as->lower[i]) == CMP_LT)
2390 if (compare_bound (AR_START, as->upper[i]) == CMP_GT)
2394 mpz_init (last_value);
2395 if (compute_last_value_for_triplet (AR_START, AR_END, ar->stride[i],
2398 if (compare_bound_mpz_t (as->lower[i], last_value) == CMP_GT
2399 || compare_bound_mpz_t (as->upper[i], last_value) == CMP_LT)
2401 mpz_clear (last_value);
2405 mpz_clear (last_value);
2413 gfc_internal_error ("check_dimension(): Bad array reference");
2419 gfc_warning ("Array reference at %L is out of bounds", &ar->c_where[i]);
2424 /* Compare an array reference with an array specification. */
2427 compare_spec_to_ref (gfc_array_ref * ar)
2434 /* TODO: Full array sections are only allowed as actual parameters. */
2435 if (as->type == AS_ASSUMED_SIZE
2436 && (/*ar->type == AR_FULL
2437 ||*/ (ar->type == AR_SECTION
2438 && ar->dimen_type[i] == DIMEN_RANGE && ar->end[i] == NULL)))
2440 gfc_error ("Rightmost upper bound of assumed size array section"
2441 " not specified at %L", &ar->where);
2445 if (ar->type == AR_FULL)
2448 if (as->rank != ar->dimen)
2450 gfc_error ("Rank mismatch in array reference at %L (%d/%d)",
2451 &ar->where, ar->dimen, as->rank);
2455 for (i = 0; i < as->rank; i++)
2456 if (check_dimension (i, ar, as) == FAILURE)
2463 /* Resolve one part of an array index. */
2466 gfc_resolve_index (gfc_expr * index, int check_scalar)
2473 if (gfc_resolve_expr (index) == FAILURE)
2476 if (check_scalar && index->rank != 0)
2478 gfc_error ("Array index at %L must be scalar", &index->where);
2482 if (index->ts.type != BT_INTEGER && index->ts.type != BT_REAL)
2484 gfc_error ("Array index at %L must be of INTEGER type",
2489 if (index->ts.type == BT_REAL)
2490 if (gfc_notify_std (GFC_STD_LEGACY, "Extension: REAL array index at %L",
2491 &index->where) == FAILURE)
2494 if (index->ts.kind != gfc_index_integer_kind
2495 || index->ts.type != BT_INTEGER)
2498 ts.type = BT_INTEGER;
2499 ts.kind = gfc_index_integer_kind;
2501 gfc_convert_type_warn (index, &ts, 2, 0);
2507 /* Resolve a dim argument to an intrinsic function. */
2510 gfc_resolve_dim_arg (gfc_expr *dim)
2515 if (gfc_resolve_expr (dim) == FAILURE)
2520 gfc_error ("Argument dim at %L must be scalar", &dim->where);
2524 if (dim->ts.type != BT_INTEGER)
2526 gfc_error ("Argument dim at %L must be of INTEGER type", &dim->where);
2529 if (dim->ts.kind != gfc_index_integer_kind)
2533 ts.type = BT_INTEGER;
2534 ts.kind = gfc_index_integer_kind;
2536 gfc_convert_type_warn (dim, &ts, 2, 0);
2542 /* Given an expression that contains array references, update those array
2543 references to point to the right array specifications. While this is
2544 filled in during matching, this information is difficult to save and load
2545 in a module, so we take care of it here.
2547 The idea here is that the original array reference comes from the
2548 base symbol. We traverse the list of reference structures, setting
2549 the stored reference to references. Component references can
2550 provide an additional array specification. */
2553 find_array_spec (gfc_expr * e)
2557 gfc_symbol *derived;
2560 as = e->symtree->n.sym->as;
2563 for (ref = e->ref; ref; ref = ref->next)
2568 gfc_internal_error ("find_array_spec(): Missing spec");
2575 if (derived == NULL)
2576 derived = e->symtree->n.sym->ts.derived;
2578 c = derived->components;
2580 for (; c; c = c->next)
2581 if (c == ref->u.c.component)
2583 /* Track the sequence of component references. */
2584 if (c->ts.type == BT_DERIVED)
2585 derived = c->ts.derived;
2590 gfc_internal_error ("find_array_spec(): Component not found");
2595 gfc_internal_error ("find_array_spec(): unused as(1)");
2606 gfc_internal_error ("find_array_spec(): unused as(2)");
2610 /* Resolve an array reference. */
2613 resolve_array_ref (gfc_array_ref * ar)
2615 int i, check_scalar;
2618 for (i = 0; i < ar->dimen; i++)
2620 check_scalar = ar->dimen_type[i] == DIMEN_RANGE;
2622 if (gfc_resolve_index (ar->start[i], check_scalar) == FAILURE)
2624 if (gfc_resolve_index (ar->end[i], check_scalar) == FAILURE)
2626 if (gfc_resolve_index (ar->stride[i], check_scalar) == FAILURE)
2631 if (ar->dimen_type[i] == DIMEN_UNKNOWN)
2635 ar->dimen_type[i] = DIMEN_ELEMENT;
2639 ar->dimen_type[i] = DIMEN_VECTOR;
2640 if (e->expr_type == EXPR_VARIABLE
2641 && e->symtree->n.sym->ts.type == BT_DERIVED)
2642 ar->start[i] = gfc_get_parentheses (e);
2646 gfc_error ("Array index at %L is an array of rank %d",
2647 &ar->c_where[i], e->rank);
2652 /* If the reference type is unknown, figure out what kind it is. */
2654 if (ar->type == AR_UNKNOWN)
2656 ar->type = AR_ELEMENT;
2657 for (i = 0; i < ar->dimen; i++)
2658 if (ar->dimen_type[i] == DIMEN_RANGE
2659 || ar->dimen_type[i] == DIMEN_VECTOR)
2661 ar->type = AR_SECTION;
2666 if (!ar->as->cray_pointee && compare_spec_to_ref (ar) == FAILURE)
2674 resolve_substring (gfc_ref * ref)
2677 if (ref->u.ss.start != NULL)
2679 if (gfc_resolve_expr (ref->u.ss.start) == FAILURE)
2682 if (ref->u.ss.start->ts.type != BT_INTEGER)
2684 gfc_error ("Substring start index at %L must be of type INTEGER",
2685 &ref->u.ss.start->where);
2689 if (ref->u.ss.start->rank != 0)
2691 gfc_error ("Substring start index at %L must be scalar",
2692 &ref->u.ss.start->where);
2696 if (compare_bound_int (ref->u.ss.start, 1) == CMP_LT
2697 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
2698 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
2700 gfc_error ("Substring start index at %L is less than one",
2701 &ref->u.ss.start->where);
2706 if (ref->u.ss.end != NULL)
2708 if (gfc_resolve_expr (ref->u.ss.end) == FAILURE)
2711 if (ref->u.ss.end->ts.type != BT_INTEGER)
2713 gfc_error ("Substring end index at %L must be of type INTEGER",
2714 &ref->u.ss.end->where);
2718 if (ref->u.ss.end->rank != 0)
2720 gfc_error ("Substring end index at %L must be scalar",
2721 &ref->u.ss.end->where);
2725 if (ref->u.ss.length != NULL
2726 && compare_bound (ref->u.ss.end, ref->u.ss.length->length) == CMP_GT
2727 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
2728 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
2730 gfc_error ("Substring end index at %L exceeds the string length",
2731 &ref->u.ss.start->where);
2740 /* Resolve subtype references. */
2743 resolve_ref (gfc_expr * expr)
2745 int current_part_dimension, n_components, seen_part_dimension;
2748 for (ref = expr->ref; ref; ref = ref->next)
2749 if (ref->type == REF_ARRAY && ref->u.ar.as == NULL)
2751 find_array_spec (expr);
2755 for (ref = expr->ref; ref; ref = ref->next)
2759 if (resolve_array_ref (&ref->u.ar) == FAILURE)
2767 resolve_substring (ref);
2771 /* Check constraints on part references. */
2773 current_part_dimension = 0;
2774 seen_part_dimension = 0;
2777 for (ref = expr->ref; ref; ref = ref->next)
2782 switch (ref->u.ar.type)
2786 current_part_dimension = 1;
2790 current_part_dimension = 0;
2794 gfc_internal_error ("resolve_ref(): Bad array reference");
2800 if ((current_part_dimension || seen_part_dimension)
2801 && ref->u.c.component->pointer)
2804 ("Component to the right of a part reference with nonzero "
2805 "rank must not have the POINTER attribute at %L",
2817 if (((ref->type == REF_COMPONENT && n_components > 1)
2818 || ref->next == NULL)
2819 && current_part_dimension
2820 && seen_part_dimension)
2823 gfc_error ("Two or more part references with nonzero rank must "
2824 "not be specified at %L", &expr->where);
2828 if (ref->type == REF_COMPONENT)
2830 if (current_part_dimension)
2831 seen_part_dimension = 1;
2833 /* reset to make sure */
2834 current_part_dimension = 0;
2842 /* Given an expression, determine its shape. This is easier than it sounds.
2843 Leaves the shape array NULL if it is not possible to determine the shape. */
2846 expression_shape (gfc_expr * e)
2848 mpz_t array[GFC_MAX_DIMENSIONS];
2851 if (e->rank == 0 || e->shape != NULL)
2854 for (i = 0; i < e->rank; i++)
2855 if (gfc_array_dimen_size (e, i, &array[i]) == FAILURE)
2858 e->shape = gfc_get_shape (e->rank);
2860 memcpy (e->shape, array, e->rank * sizeof (mpz_t));
2865 for (i--; i >= 0; i--)
2866 mpz_clear (array[i]);
2870 /* Given a variable expression node, compute the rank of the expression by
2871 examining the base symbol and any reference structures it may have. */
2874 expression_rank (gfc_expr * e)
2881 if (e->expr_type == EXPR_ARRAY)
2883 /* Constructors can have a rank different from one via RESHAPE(). */
2885 if (e->symtree == NULL)
2891 e->rank = (e->symtree->n.sym->as == NULL)
2892 ? 0 : e->symtree->n.sym->as->rank;
2898 for (ref = e->ref; ref; ref = ref->next)
2900 if (ref->type != REF_ARRAY)
2903 if (ref->u.ar.type == AR_FULL)
2905 rank = ref->u.ar.as->rank;
2909 if (ref->u.ar.type == AR_SECTION)
2911 /* Figure out the rank of the section. */
2913 gfc_internal_error ("expression_rank(): Two array specs");
2915 for (i = 0; i < ref->u.ar.dimen; i++)
2916 if (ref->u.ar.dimen_type[i] == DIMEN_RANGE
2917 || ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
2927 expression_shape (e);
2931 /* Resolve a variable expression. */
2934 resolve_variable (gfc_expr * e)
2941 if (e->symtree == NULL)
2944 if (e->ref && resolve_ref (e) == FAILURE)
2947 sym = e->symtree->n.sym;
2948 if (sym->attr.flavor == FL_PROCEDURE && !sym->attr.function)
2950 e->ts.type = BT_PROCEDURE;
2954 if (sym->ts.type != BT_UNKNOWN)
2955 gfc_variable_attr (e, &e->ts);
2958 /* Must be a simple variable reference. */
2959 if (gfc_set_default_type (sym, 1, NULL) == FAILURE)
2964 if (check_assumed_size_reference (sym, e))
2967 /* Deal with forward references to entries during resolve_code, to
2968 satisfy, at least partially, 12.5.2.5. */
2969 if (gfc_current_ns->entries
2970 && current_entry_id == sym->entry_id
2973 && cs_base->current->op != EXEC_ENTRY)
2975 gfc_entry_list *entry;
2976 gfc_formal_arglist *formal;
2980 /* If the symbol is a dummy... */
2981 if (sym->attr.dummy)
2983 entry = gfc_current_ns->entries;
2986 /* ...test if the symbol is a parameter of previous entries. */
2987 for (; entry && entry->id <= current_entry_id; entry = entry->next)
2988 for (formal = entry->sym->formal; formal; formal = formal->next)
2990 if (formal->sym && sym->name == formal->sym->name)
2994 /* If it has not been seen as a dummy, this is an error. */
2997 if (specification_expr)
2998 gfc_error ("Variable '%s',used in a specification expression, "
2999 "is referenced at %L before the ENTRY statement "
3000 "in which it is a parameter",
3001 sym->name, &cs_base->current->loc);
3003 gfc_error ("Variable '%s' is used at %L before the ENTRY "
3004 "statement in which it is a parameter",
3005 sym->name, &cs_base->current->loc);
3010 /* Now do the same check on the specification expressions. */
3011 specification_expr = 1;
3012 if (sym->ts.type == BT_CHARACTER
3013 && gfc_resolve_expr (sym->ts.cl->length) == FAILURE)
3017 for (n = 0; n < sym->as->rank; n++)
3019 specification_expr = 1;
3020 if (gfc_resolve_expr (sym->as->lower[n]) == FAILURE)
3022 specification_expr = 1;
3023 if (gfc_resolve_expr (sym->as->upper[n]) == FAILURE)
3026 specification_expr = 0;
3029 /* Update the symbol's entry level. */
3030 sym->entry_id = current_entry_id + 1;
3037 /* Resolve an expression. That is, make sure that types of operands agree
3038 with their operators, intrinsic operators are converted to function calls
3039 for overloaded types and unresolved function references are resolved. */
3042 gfc_resolve_expr (gfc_expr * e)
3049 switch (e->expr_type)
3052 t = resolve_operator (e);
3056 t = resolve_function (e);
3060 t = resolve_variable (e);
3062 expression_rank (e);
3065 case EXPR_SUBSTRING:
3066 t = resolve_ref (e);
3076 if (resolve_ref (e) == FAILURE)
3079 t = gfc_resolve_array_constructor (e);
3080 /* Also try to expand a constructor. */
3083 expression_rank (e);
3084 gfc_expand_constructor (e);
3087 /* This provides the opportunity for the length of constructors with character
3088 valued function elements to propogate the string length to the expression. */
3089 if (e->ts.type == BT_CHARACTER)
3090 gfc_resolve_character_array_constructor (e);
3094 case EXPR_STRUCTURE:
3095 t = resolve_ref (e);
3099 t = resolve_structure_cons (e);
3103 t = gfc_simplify_expr (e, 0);
3107 gfc_internal_error ("gfc_resolve_expr(): Bad expression type");
3114 /* Resolve an expression from an iterator. They must be scalar and have
3115 INTEGER or (optionally) REAL type. */
3118 gfc_resolve_iterator_expr (gfc_expr * expr, bool real_ok,
3119 const char * name_msgid)
3121 if (gfc_resolve_expr (expr) == FAILURE)
3124 if (expr->rank != 0)
3126 gfc_error ("%s at %L must be a scalar", _(name_msgid), &expr->where);
3130 if (!(expr->ts.type == BT_INTEGER
3131 || (expr->ts.type == BT_REAL && real_ok)))
3134 gfc_error ("%s at %L must be INTEGER or REAL", _(name_msgid),
3137 gfc_error ("%s at %L must be INTEGER", _(name_msgid), &expr->where);
3144 /* Resolve the expressions in an iterator structure. If REAL_OK is
3145 false allow only INTEGER type iterators, otherwise allow REAL types. */
3148 gfc_resolve_iterator (gfc_iterator * iter, bool real_ok)
3151 if (iter->var->ts.type == BT_REAL)
3152 gfc_notify_std (GFC_STD_F95_DEL,
3153 "Obsolete: REAL DO loop iterator at %L",
3156 if (gfc_resolve_iterator_expr (iter->var, real_ok, "Loop variable")
3160 if (gfc_pure (NULL) && gfc_impure_variable (iter->var->symtree->n.sym))
3162 gfc_error ("Cannot assign to loop variable in PURE procedure at %L",
3167 if (gfc_resolve_iterator_expr (iter->start, real_ok,
3168 "Start expression in DO loop") == FAILURE)
3171 if (gfc_resolve_iterator_expr (iter->end, real_ok,
3172 "End expression in DO loop") == FAILURE)
3175 if (gfc_resolve_iterator_expr (iter->step, real_ok,
3176 "Step expression in DO loop") == FAILURE)
3179 if (iter->step->expr_type == EXPR_CONSTANT)
3181 if ((iter->step->ts.type == BT_INTEGER
3182 && mpz_cmp_ui (iter->step->value.integer, 0) == 0)
3183 || (iter->step->ts.type == BT_REAL
3184 && mpfr_sgn (iter->step->value.real) == 0))
3186 gfc_error ("Step expression in DO loop at %L cannot be zero",
3187 &iter->step->where);
3192 /* Convert start, end, and step to the same type as var. */
3193 if (iter->start->ts.kind != iter->var->ts.kind
3194 || iter->start->ts.type != iter->var->ts.type)
3195 gfc_convert_type (iter->start, &iter->var->ts, 2);
3197 if (iter->end->ts.kind != iter->var->ts.kind
3198 || iter->end->ts.type != iter->var->ts.type)
3199 gfc_convert_type (iter->end, &iter->var->ts, 2);
3201 if (iter->step->ts.kind != iter->var->ts.kind
3202 || iter->step->ts.type != iter->var->ts.type)
3203 gfc_convert_type (iter->step, &iter->var->ts, 2);
3209 /* Resolve a list of FORALL iterators. The FORALL index-name is constrained
3210 to be a scalar INTEGER variable. The subscripts and stride are scalar
3211 INTEGERs, and if stride is a constant it must be nonzero. */
3214 resolve_forall_iterators (gfc_forall_iterator * iter)
3219 if (gfc_resolve_expr (iter->var) == SUCCESS
3220 && (iter->var->ts.type != BT_INTEGER || iter->var->rank != 0))
3221 gfc_error ("FORALL index-name at %L must be a scalar INTEGER",
3224 if (gfc_resolve_expr (iter->start) == SUCCESS
3225 && (iter->start->ts.type != BT_INTEGER || iter->start->rank != 0))
3226 gfc_error ("FORALL start expression at %L must be a scalar INTEGER",
3227 &iter->start->where);
3228 if (iter->var->ts.kind != iter->start->ts.kind)
3229 gfc_convert_type (iter->start, &iter->var->ts, 2);
3231 if (gfc_resolve_expr (iter->end) == SUCCESS
3232 && (iter->end->ts.type != BT_INTEGER || iter->end->rank != 0))
3233 gfc_error ("FORALL end expression at %L must be a scalar INTEGER",
3235 if (iter->var->ts.kind != iter->end->ts.kind)
3236 gfc_convert_type (iter->end, &iter->var->ts, 2);
3238 if (gfc_resolve_expr (iter->stride) == SUCCESS)
3240 if (iter->stride->ts.type != BT_INTEGER || iter->stride->rank != 0)
3241 gfc_error ("FORALL stride expression at %L must be a scalar %s",
3242 &iter->stride->where, "INTEGER");
3244 if (iter->stride->expr_type == EXPR_CONSTANT
3245 && mpz_cmp_ui(iter->stride->value.integer, 0) == 0)
3246 gfc_error ("FORALL stride expression at %L cannot be zero",
3247 &iter->stride->where);
3249 if (iter->var->ts.kind != iter->stride->ts.kind)
3250 gfc_convert_type (iter->stride, &iter->var->ts, 2);
3257 /* Given a pointer to a symbol that is a derived type, see if any components
3258 have the POINTER attribute. The search is recursive if necessary.
3259 Returns zero if no pointer components are found, nonzero otherwise. */
3262 derived_pointer (gfc_symbol * sym)
3266 for (c = sym->components; c; c = c->next)
3271 if (c->ts.type == BT_DERIVED && derived_pointer (c->ts.derived))
3279 /* Given a pointer to a symbol that is a derived type, see if it's
3280 inaccessible, i.e. if it's defined in another module and the components are
3281 PRIVATE. The search is recursive if necessary. Returns zero if no
3282 inaccessible components are found, nonzero otherwise. */
3285 derived_inaccessible (gfc_symbol *sym)
3289 if (sym->attr.use_assoc && sym->component_access == ACCESS_PRIVATE)
3292 for (c = sym->components; c; c = c->next)
3294 if (c->ts.type == BT_DERIVED && derived_inaccessible (c->ts.derived))
3302 /* Resolve the argument of a deallocate expression. The expression must be
3303 a pointer or a full array. */
3306 resolve_deallocate_expr (gfc_expr * e)
3308 symbol_attribute attr;
3312 if (gfc_resolve_expr (e) == FAILURE)
3315 attr = gfc_expr_attr (e);
3319 if (e->expr_type != EXPR_VARIABLE)
3322 allocatable = e->symtree->n.sym->attr.allocatable;
3323 for (ref = e->ref; ref; ref = ref->next)
3327 if (ref->u.ar.type != AR_FULL)
3332 allocatable = (ref->u.c.component->as != NULL
3333 && ref->u.c.component->as->type == AS_DEFERRED);
3341 if (allocatable == 0)
3344 gfc_error ("Expression in DEALLOCATE statement at %L must be "
3345 "ALLOCATABLE or a POINTER", &e->where);
3348 if (e->symtree->n.sym->attr.intent == INTENT_IN)
3350 gfc_error ("Can't deallocate INTENT(IN) variable '%s' at %L",
3351 e->symtree->n.sym->name, &e->where);
3358 /* Returns true if the expression e contains a reference the symbol sym. */
3360 find_sym_in_expr (gfc_symbol *sym, gfc_expr *e)
3362 gfc_actual_arglist *arg;
3370 switch (e->expr_type)
3373 for (arg = e->value.function.actual; arg; arg = arg->next)
3374 rv = rv || find_sym_in_expr (sym, arg->expr);
3377 /* If the variable is not the same as the dependent, 'sym', and
3378 it is not marked as being declared and it is in the same
3379 namespace as 'sym', add it to the local declarations. */
3381 if (sym == e->symtree->n.sym)
3386 rv = rv || find_sym_in_expr (sym, e->value.op.op1);
3387 rv = rv || find_sym_in_expr (sym, e->value.op.op2);
3396 for (ref = e->ref; ref; ref = ref->next)
3401 for (i = 0; i < ref->u.ar.dimen; i++)
3403 rv = rv || find_sym_in_expr (sym, ref->u.ar.start[i]);
3404 rv = rv || find_sym_in_expr (sym, ref->u.ar.end[i]);
3405 rv = rv || find_sym_in_expr (sym, ref->u.ar.stride[i]);
3410 rv = rv || find_sym_in_expr (sym, ref->u.ss.start);
3411 rv = rv || find_sym_in_expr (sym, ref->u.ss.end);
3415 if (ref->u.c.component->ts.type == BT_CHARACTER
3416 && ref->u.c.component->ts.cl->length->expr_type
3418 rv = rv || find_sym_in_expr (sym, ref->u.c.component->ts.cl->length);
3420 if (ref->u.c.component->as)
3421 for (i = 0; i < ref->u.c.component->as->rank; i++)
3423 rv = rv || find_sym_in_expr (sym, ref->u.c.component->as->lower[i]);
3424 rv = rv || find_sym_in_expr (sym, ref->u.c.component->as->upper[i]);
3434 /* Given the expression node e for an allocatable/pointer of derived type to be
3435 allocated, get the expression node to be initialized afterwards (needed for
3436 derived types with default initializers, and derived types with allocatable
3437 components that need nullification.) */
3440 expr_to_initialize (gfc_expr * e)
3446 result = gfc_copy_expr (e);
3448 /* Change the last array reference from AR_ELEMENT to AR_FULL. */
3449 for (ref = result->ref; ref; ref = ref->next)
3450 if (ref->type == REF_ARRAY && ref->next == NULL)
3452 ref->u.ar.type = AR_FULL;
3454 for (i = 0; i < ref->u.ar.dimen; i++)
3455 ref->u.ar.start[i] = ref->u.ar.end[i] = ref->u.ar.stride[i] = NULL;
3457 result->rank = ref->u.ar.dimen;
3465 /* Resolve the expression in an ALLOCATE statement, doing the additional
3466 checks to see whether the expression is OK or not. The expression must
3467 have a trailing array reference that gives the size of the array. */
3470 resolve_allocate_expr (gfc_expr * e, gfc_code * code)
3472 int i, pointer, allocatable, dimension;
3473 symbol_attribute attr;
3474 gfc_ref *ref, *ref2;
3481 if (gfc_resolve_expr (e) == FAILURE)
3484 if (code->expr && code->expr->expr_type == EXPR_VARIABLE)
3485 sym = code->expr->symtree->n.sym;
3489 /* Make sure the expression is allocatable or a pointer. If it is
3490 pointer, the next-to-last reference must be a pointer. */
3494 if (e->expr_type != EXPR_VARIABLE)
3498 attr = gfc_expr_attr (e);
3499 pointer = attr.pointer;
3500 dimension = attr.dimension;
3505 allocatable = e->symtree->n.sym->attr.allocatable;
3506 pointer = e->symtree->n.sym->attr.pointer;
3507 dimension = e->symtree->n.sym->attr.dimension;
3509 if (sym == e->symtree->n.sym && sym->ts.type != BT_DERIVED)
3511 gfc_error ("The STAT variable '%s' in an ALLOCATE statement must "
3512 "not be allocated in the same statement at %L",
3513 sym->name, &e->where);
3517 for (ref = e->ref; ref; ref2 = ref, ref = ref->next)
3521 if (ref->next != NULL)
3526 allocatable = (ref->u.c.component->as != NULL
3527 && ref->u.c.component->as->type == AS_DEFERRED);
3529 pointer = ref->u.c.component->pointer;
3530 dimension = ref->u.c.component->dimension;
3540 if (allocatable == 0 && pointer == 0)
3542 gfc_error ("Expression in ALLOCATE statement at %L must be "
3543 "ALLOCATABLE or a POINTER", &e->where);
3547 if (e->symtree->n.sym->attr.intent == INTENT_IN)
3549 gfc_error ("Can't allocate INTENT(IN) variable '%s' at %L",
3550 e->symtree->n.sym->name, &e->where);
3554 /* Add default initializer for those derived types that need them. */
3555 if (e->ts.type == BT_DERIVED && (init_e = gfc_default_initializer (&e->ts)))
3557 init_st = gfc_get_code ();
3558 init_st->loc = code->loc;
3559 init_st->op = EXEC_ASSIGN;
3560 init_st->expr = expr_to_initialize (e);
3561 init_st->expr2 = init_e;
3562 init_st->next = code->next;
3563 code->next = init_st;
3566 if (pointer && dimension == 0)