Merged revisions 208012,208018-208019,208021,208023-208030,208033,208037,208040-20804...
[official-gcc.git] / main / gcc / fortran / resolve.c
blob6e23e570b179da2e2db8cbf8b1ab82fafe4701c8
1 /* Perform type resolution on the various structures.
2 Copyright (C) 2001-2014 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 3, or (at your option) any later
10 version.
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
15 for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "flags.h"
25 #include "gfortran.h"
26 #include "obstack.h"
27 #include "bitmap.h"
28 #include "arith.h" /* For gfc_compare_expr(). */
29 #include "dependency.h"
30 #include "data.h"
31 #include "target-memory.h" /* for gfc_simplify_transfer */
32 #include "constructor.h"
34 /* Types used in equivalence statements. */
36 typedef enum seq_type
38 SEQ_NONDEFAULT, SEQ_NUMERIC, SEQ_CHARACTER, SEQ_MIXED
40 seq_type;
42 /* Stack to keep track of the nesting of blocks as we move through the
43 code. See resolve_branch() and resolve_code(). */
45 typedef struct code_stack
47 struct gfc_code *head, *current;
48 struct code_stack *prev;
50 /* This bitmap keeps track of the targets valid for a branch from
51 inside this block except for END {IF|SELECT}s of enclosing
52 blocks. */
53 bitmap reachable_labels;
55 code_stack;
57 static code_stack *cs_base = NULL;
60 /* Nonzero if we're inside a FORALL or DO CONCURRENT block. */
62 static int forall_flag;
63 int gfc_do_concurrent_flag;
65 /* True when we are resolving an expression that is an actual argument to
66 a procedure. */
67 static bool actual_arg = false;
68 /* True when we are resolving an expression that is the first actual argument
69 to a procedure. */
70 static bool first_actual_arg = false;
73 /* Nonzero if we're inside a OpenMP WORKSHARE or PARALLEL WORKSHARE block. */
75 static int omp_workshare_flag;
77 /* Nonzero if we are processing a formal arglist. The corresponding function
78 resets the flag each time that it is read. */
79 static int formal_arg_flag = 0;
81 /* True if we are resolving a specification expression. */
82 static bool specification_expr = false;
84 /* The id of the last entry seen. */
85 static int current_entry_id;
87 /* We use bitmaps to determine if a branch target is valid. */
88 static bitmap_obstack labels_obstack;
90 /* True when simplifying a EXPR_VARIABLE argument to an inquiry function. */
91 static bool inquiry_argument = false;
94 int
95 gfc_is_formal_arg (void)
97 return formal_arg_flag;
100 /* Is the symbol host associated? */
101 static bool
102 is_sym_host_assoc (gfc_symbol *sym, gfc_namespace *ns)
104 for (ns = ns->parent; ns; ns = ns->parent)
106 if (sym->ns == ns)
107 return true;
110 return false;
113 /* Ensure a typespec used is valid; for instance, TYPE(t) is invalid if t is
114 an ABSTRACT derived-type. If where is not NULL, an error message with that
115 locus is printed, optionally using name. */
117 static bool
118 resolve_typespec_used (gfc_typespec* ts, locus* where, const char* name)
120 if (ts->type == BT_DERIVED && ts->u.derived->attr.abstract)
122 if (where)
124 if (name)
125 gfc_error ("'%s' at %L is of the ABSTRACT type '%s'",
126 name, where, ts->u.derived->name);
127 else
128 gfc_error ("ABSTRACT type '%s' used at %L",
129 ts->u.derived->name, where);
132 return false;
135 return true;
139 static bool
140 check_proc_interface (gfc_symbol *ifc, locus *where)
142 /* Several checks for F08:C1216. */
143 if (ifc->attr.procedure)
145 gfc_error ("Interface '%s' at %L is declared "
146 "in a later PROCEDURE statement", ifc->name, where);
147 return false;
149 if (ifc->generic)
151 /* For generic interfaces, check if there is
152 a specific procedure with the same name. */
153 gfc_interface *gen = ifc->generic;
154 while (gen && strcmp (gen->sym->name, ifc->name) != 0)
155 gen = gen->next;
156 if (!gen)
158 gfc_error ("Interface '%s' at %L may not be generic",
159 ifc->name, where);
160 return false;
163 if (ifc->attr.proc == PROC_ST_FUNCTION)
165 gfc_error ("Interface '%s' at %L may not be a statement function",
166 ifc->name, where);
167 return false;
169 if (gfc_is_intrinsic (ifc, 0, ifc->declared_at)
170 || gfc_is_intrinsic (ifc, 1, ifc->declared_at))
171 ifc->attr.intrinsic = 1;
172 if (ifc->attr.intrinsic && !gfc_intrinsic_actual_ok (ifc->name, 0))
174 gfc_error ("Intrinsic procedure '%s' not allowed in "
175 "PROCEDURE statement at %L", ifc->name, where);
176 return false;
178 if (!ifc->attr.if_source && !ifc->attr.intrinsic && ifc->name[0] != '\0')
180 gfc_error ("Interface '%s' at %L must be explicit", ifc->name, where);
181 return false;
183 return true;
187 static void resolve_symbol (gfc_symbol *sym);
190 /* Resolve the interface for a PROCEDURE declaration or procedure pointer. */
192 static bool
193 resolve_procedure_interface (gfc_symbol *sym)
195 gfc_symbol *ifc = sym->ts.interface;
197 if (!ifc)
198 return true;
200 if (ifc == sym)
202 gfc_error ("PROCEDURE '%s' at %L may not be used as its own interface",
203 sym->name, &sym->declared_at);
204 return false;
206 if (!check_proc_interface (ifc, &sym->declared_at))
207 return false;
209 if (ifc->attr.if_source || ifc->attr.intrinsic)
211 /* Resolve interface and copy attributes. */
212 resolve_symbol (ifc);
213 if (ifc->attr.intrinsic)
214 gfc_resolve_intrinsic (ifc, &ifc->declared_at);
216 if (ifc->result)
218 sym->ts = ifc->result->ts;
219 sym->result = sym;
221 else
222 sym->ts = ifc->ts;
223 sym->ts.interface = ifc;
224 sym->attr.function = ifc->attr.function;
225 sym->attr.subroutine = ifc->attr.subroutine;
227 sym->attr.allocatable = ifc->attr.allocatable;
228 sym->attr.pointer = ifc->attr.pointer;
229 sym->attr.pure = ifc->attr.pure;
230 sym->attr.elemental = ifc->attr.elemental;
231 sym->attr.dimension = ifc->attr.dimension;
232 sym->attr.contiguous = ifc->attr.contiguous;
233 sym->attr.recursive = ifc->attr.recursive;
234 sym->attr.always_explicit = ifc->attr.always_explicit;
235 sym->attr.ext_attr |= ifc->attr.ext_attr;
236 sym->attr.is_bind_c = ifc->attr.is_bind_c;
237 sym->attr.class_ok = ifc->attr.class_ok;
238 /* Copy array spec. */
239 sym->as = gfc_copy_array_spec (ifc->as);
240 /* Copy char length. */
241 if (ifc->ts.type == BT_CHARACTER && ifc->ts.u.cl)
243 sym->ts.u.cl = gfc_new_charlen (sym->ns, ifc->ts.u.cl);
244 if (sym->ts.u.cl->length && !sym->ts.u.cl->resolved
245 && !gfc_resolve_expr (sym->ts.u.cl->length))
246 return false;
250 return true;
254 /* Resolve types of formal argument lists. These have to be done early so that
255 the formal argument lists of module procedures can be copied to the
256 containing module before the individual procedures are resolved
257 individually. We also resolve argument lists of procedures in interface
258 blocks because they are self-contained scoping units.
260 Since a dummy argument cannot be a non-dummy procedure, the only
261 resort left for untyped names are the IMPLICIT types. */
263 static void
264 resolve_formal_arglist (gfc_symbol *proc)
266 gfc_formal_arglist *f;
267 gfc_symbol *sym;
268 bool saved_specification_expr;
269 int i;
271 if (proc->result != NULL)
272 sym = proc->result;
273 else
274 sym = proc;
276 if (gfc_elemental (proc)
277 || sym->attr.pointer || sym->attr.allocatable
278 || (sym->as && sym->as->rank != 0))
280 proc->attr.always_explicit = 1;
281 sym->attr.always_explicit = 1;
284 formal_arg_flag = 1;
286 for (f = proc->formal; f; f = f->next)
288 gfc_array_spec *as;
290 sym = f->sym;
292 if (sym == NULL)
294 /* Alternate return placeholder. */
295 if (gfc_elemental (proc))
296 gfc_error ("Alternate return specifier in elemental subroutine "
297 "'%s' at %L is not allowed", proc->name,
298 &proc->declared_at);
299 if (proc->attr.function)
300 gfc_error ("Alternate return specifier in function "
301 "'%s' at %L is not allowed", proc->name,
302 &proc->declared_at);
303 continue;
305 else if (sym->attr.procedure && sym->attr.if_source != IFSRC_DECL
306 && !resolve_procedure_interface (sym))
307 return;
309 if (strcmp (proc->name, sym->name) == 0)
311 gfc_error ("Self-referential argument "
312 "'%s' at %L is not allowed", sym->name,
313 &proc->declared_at);
314 return;
317 if (sym->attr.if_source != IFSRC_UNKNOWN)
318 resolve_formal_arglist (sym);
320 if (sym->attr.subroutine || sym->attr.external)
322 if (sym->attr.flavor == FL_UNKNOWN)
323 gfc_add_flavor (&sym->attr, FL_PROCEDURE, sym->name, &sym->declared_at);
325 else
327 if (sym->ts.type == BT_UNKNOWN && !proc->attr.intrinsic
328 && (!sym->attr.function || sym->result == sym))
329 gfc_set_default_type (sym, 1, sym->ns);
332 as = sym->ts.type == BT_CLASS && sym->attr.class_ok
333 ? CLASS_DATA (sym)->as : sym->as;
335 saved_specification_expr = specification_expr;
336 specification_expr = true;
337 gfc_resolve_array_spec (as, 0);
338 specification_expr = saved_specification_expr;
340 /* We can't tell if an array with dimension (:) is assumed or deferred
341 shape until we know if it has the pointer or allocatable attributes.
343 if (as && as->rank > 0 && as->type == AS_DEFERRED
344 && ((sym->ts.type != BT_CLASS
345 && !(sym->attr.pointer || sym->attr.allocatable))
346 || (sym->ts.type == BT_CLASS
347 && !(CLASS_DATA (sym)->attr.class_pointer
348 || CLASS_DATA (sym)->attr.allocatable)))
349 && sym->attr.flavor != FL_PROCEDURE)
351 as->type = AS_ASSUMED_SHAPE;
352 for (i = 0; i < as->rank; i++)
353 as->lower[i] = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
356 if ((as && as->rank > 0 && as->type == AS_ASSUMED_SHAPE)
357 || (as && as->type == AS_ASSUMED_RANK)
358 || sym->attr.pointer || sym->attr.allocatable || sym->attr.target
359 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
360 && (CLASS_DATA (sym)->attr.class_pointer
361 || CLASS_DATA (sym)->attr.allocatable
362 || CLASS_DATA (sym)->attr.target))
363 || sym->attr.optional)
365 proc->attr.always_explicit = 1;
366 if (proc->result)
367 proc->result->attr.always_explicit = 1;
370 /* If the flavor is unknown at this point, it has to be a variable.
371 A procedure specification would have already set the type. */
373 if (sym->attr.flavor == FL_UNKNOWN)
374 gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, &sym->declared_at);
376 if (gfc_pure (proc))
378 if (sym->attr.flavor == FL_PROCEDURE)
380 /* F08:C1279. */
381 if (!gfc_pure (sym))
383 gfc_error ("Dummy procedure '%s' of PURE procedure at %L must "
384 "also be PURE", sym->name, &sym->declared_at);
385 continue;
388 else if (!sym->attr.pointer)
390 if (proc->attr.function && sym->attr.intent != INTENT_IN)
392 if (sym->attr.value)
393 gfc_notify_std (GFC_STD_F2008, "Argument '%s'"
394 " of pure function '%s' at %L with VALUE "
395 "attribute but without INTENT(IN)",
396 sym->name, proc->name, &sym->declared_at);
397 else
398 gfc_error ("Argument '%s' of pure function '%s' at %L must "
399 "be INTENT(IN) or VALUE", sym->name, proc->name,
400 &sym->declared_at);
403 if (proc->attr.subroutine && sym->attr.intent == INTENT_UNKNOWN)
405 if (sym->attr.value)
406 gfc_notify_std (GFC_STD_F2008, "Argument '%s'"
407 " of pure subroutine '%s' at %L with VALUE "
408 "attribute but without INTENT", sym->name,
409 proc->name, &sym->declared_at);
410 else
411 gfc_error ("Argument '%s' of pure subroutine '%s' at %L "
412 "must have its INTENT specified or have the "
413 "VALUE attribute", sym->name, proc->name,
414 &sym->declared_at);
419 if (proc->attr.implicit_pure)
421 if (sym->attr.flavor == FL_PROCEDURE)
423 if (!gfc_pure (sym))
424 proc->attr.implicit_pure = 0;
426 else if (!sym->attr.pointer)
428 if (proc->attr.function && sym->attr.intent != INTENT_IN
429 && !sym->value)
430 proc->attr.implicit_pure = 0;
432 if (proc->attr.subroutine && sym->attr.intent == INTENT_UNKNOWN
433 && !sym->value)
434 proc->attr.implicit_pure = 0;
438 if (gfc_elemental (proc))
440 /* F08:C1289. */
441 if (sym->attr.codimension
442 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
443 && CLASS_DATA (sym)->attr.codimension))
445 gfc_error ("Coarray dummy argument '%s' at %L to elemental "
446 "procedure", sym->name, &sym->declared_at);
447 continue;
450 if (sym->as || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
451 && CLASS_DATA (sym)->as))
453 gfc_error ("Argument '%s' of elemental procedure at %L must "
454 "be scalar", sym->name, &sym->declared_at);
455 continue;
458 if (sym->attr.allocatable
459 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
460 && CLASS_DATA (sym)->attr.allocatable))
462 gfc_error ("Argument '%s' of elemental procedure at %L cannot "
463 "have the ALLOCATABLE attribute", sym->name,
464 &sym->declared_at);
465 continue;
468 if (sym->attr.pointer
469 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
470 && CLASS_DATA (sym)->attr.class_pointer))
472 gfc_error ("Argument '%s' of elemental procedure at %L cannot "
473 "have the POINTER attribute", sym->name,
474 &sym->declared_at);
475 continue;
478 if (sym->attr.flavor == FL_PROCEDURE)
480 gfc_error ("Dummy procedure '%s' not allowed in elemental "
481 "procedure '%s' at %L", sym->name, proc->name,
482 &sym->declared_at);
483 continue;
486 /* Fortran 2008 Corrigendum 1, C1290a. */
487 if (sym->attr.intent == INTENT_UNKNOWN && !sym->attr.value)
489 gfc_error ("Argument '%s' of elemental procedure '%s' at %L must "
490 "have its INTENT specified or have the VALUE "
491 "attribute", sym->name, proc->name,
492 &sym->declared_at);
493 continue;
497 /* Each dummy shall be specified to be scalar. */
498 if (proc->attr.proc == PROC_ST_FUNCTION)
500 if (sym->as != NULL)
502 gfc_error ("Argument '%s' of statement function at %L must "
503 "be scalar", sym->name, &sym->declared_at);
504 continue;
507 if (sym->ts.type == BT_CHARACTER)
509 gfc_charlen *cl = sym->ts.u.cl;
510 if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
512 gfc_error ("Character-valued argument '%s' of statement "
513 "function at %L must have constant length",
514 sym->name, &sym->declared_at);
515 continue;
520 formal_arg_flag = 0;
524 /* Work function called when searching for symbols that have argument lists
525 associated with them. */
527 static void
528 find_arglists (gfc_symbol *sym)
530 if (sym->attr.if_source == IFSRC_UNKNOWN || sym->ns != gfc_current_ns
531 || sym->attr.flavor == FL_DERIVED || sym->attr.intrinsic)
532 return;
534 resolve_formal_arglist (sym);
538 /* Given a namespace, resolve all formal argument lists within the namespace.
541 static void
542 resolve_formal_arglists (gfc_namespace *ns)
544 if (ns == NULL)
545 return;
547 gfc_traverse_ns (ns, find_arglists);
551 static void
552 resolve_contained_fntype (gfc_symbol *sym, gfc_namespace *ns)
554 bool t;
556 /* If this namespace is not a function or an entry master function,
557 ignore it. */
558 if (! sym || !(sym->attr.function || sym->attr.flavor == FL_VARIABLE)
559 || sym->attr.entry_master)
560 return;
562 /* Try to find out of what the return type is. */
563 if (sym->result->ts.type == BT_UNKNOWN && sym->result->ts.interface == NULL)
565 t = gfc_set_default_type (sym->result, 0, ns);
567 if (!t && !sym->result->attr.untyped)
569 if (sym->result == sym)
570 gfc_error ("Contained function '%s' at %L has no IMPLICIT type",
571 sym->name, &sym->declared_at);
572 else if (!sym->result->attr.proc_pointer)
573 gfc_error ("Result '%s' of contained function '%s' at %L has "
574 "no IMPLICIT type", sym->result->name, sym->name,
575 &sym->result->declared_at);
576 sym->result->attr.untyped = 1;
580 /* Fortran 95 Draft Standard, page 51, Section 5.1.1.5, on the Character
581 type, lists the only ways a character length value of * can be used:
582 dummy arguments of procedures, named constants, and function results
583 in external functions. Internal function results and results of module
584 procedures are not on this list, ergo, not permitted. */
586 if (sym->result->ts.type == BT_CHARACTER)
588 gfc_charlen *cl = sym->result->ts.u.cl;
589 if ((!cl || !cl->length) && !sym->result->ts.deferred)
591 /* See if this is a module-procedure and adapt error message
592 accordingly. */
593 bool module_proc;
594 gcc_assert (ns->parent && ns->parent->proc_name);
595 module_proc = (ns->parent->proc_name->attr.flavor == FL_MODULE);
597 gfc_error ("Character-valued %s '%s' at %L must not be"
598 " assumed length",
599 module_proc ? _("module procedure")
600 : _("internal function"),
601 sym->name, &sym->declared_at);
607 /* Add NEW_ARGS to the formal argument list of PROC, taking care not to
608 introduce duplicates. */
610 static void
611 merge_argument_lists (gfc_symbol *proc, gfc_formal_arglist *new_args)
613 gfc_formal_arglist *f, *new_arglist;
614 gfc_symbol *new_sym;
616 for (; new_args != NULL; new_args = new_args->next)
618 new_sym = new_args->sym;
619 /* See if this arg is already in the formal argument list. */
620 for (f = proc->formal; f; f = f->next)
622 if (new_sym == f->sym)
623 break;
626 if (f)
627 continue;
629 /* Add a new argument. Argument order is not important. */
630 new_arglist = gfc_get_formal_arglist ();
631 new_arglist->sym = new_sym;
632 new_arglist->next = proc->formal;
633 proc->formal = new_arglist;
638 /* Flag the arguments that are not present in all entries. */
640 static void
641 check_argument_lists (gfc_symbol *proc, gfc_formal_arglist *new_args)
643 gfc_formal_arglist *f, *head;
644 head = new_args;
646 for (f = proc->formal; f; f = f->next)
648 if (f->sym == NULL)
649 continue;
651 for (new_args = head; new_args; new_args = new_args->next)
653 if (new_args->sym == f->sym)
654 break;
657 if (new_args)
658 continue;
660 f->sym->attr.not_always_present = 1;
665 /* Resolve alternate entry points. If a symbol has multiple entry points we
666 create a new master symbol for the main routine, and turn the existing
667 symbol into an entry point. */
669 static void
670 resolve_entries (gfc_namespace *ns)
672 gfc_namespace *old_ns;
673 gfc_code *c;
674 gfc_symbol *proc;
675 gfc_entry_list *el;
676 char name[GFC_MAX_SYMBOL_LEN + 1];
677 static int master_count = 0;
679 if (ns->proc_name == NULL)
680 return;
682 /* No need to do anything if this procedure doesn't have alternate entry
683 points. */
684 if (!ns->entries)
685 return;
687 /* We may already have resolved alternate entry points. */
688 if (ns->proc_name->attr.entry_master)
689 return;
691 /* If this isn't a procedure something has gone horribly wrong. */
692 gcc_assert (ns->proc_name->attr.flavor == FL_PROCEDURE);
694 /* Remember the current namespace. */
695 old_ns = gfc_current_ns;
697 gfc_current_ns = ns;
699 /* Add the main entry point to the list of entry points. */
700 el = gfc_get_entry_list ();
701 el->sym = ns->proc_name;
702 el->id = 0;
703 el->next = ns->entries;
704 ns->entries = el;
705 ns->proc_name->attr.entry = 1;
707 /* If it is a module function, it needs to be in the right namespace
708 so that gfc_get_fake_result_decl can gather up the results. The
709 need for this arose in get_proc_name, where these beasts were
710 left in their own namespace, to keep prior references linked to
711 the entry declaration.*/
712 if (ns->proc_name->attr.function
713 && ns->parent && ns->parent->proc_name->attr.flavor == FL_MODULE)
714 el->sym->ns = ns;
716 /* Do the same for entries where the master is not a module
717 procedure. These are retained in the module namespace because
718 of the module procedure declaration. */
719 for (el = el->next; el; el = el->next)
720 if (el->sym->ns->proc_name->attr.flavor == FL_MODULE
721 && el->sym->attr.mod_proc)
722 el->sym->ns = ns;
723 el = ns->entries;
725 /* Add an entry statement for it. */
726 c = gfc_get_code (EXEC_ENTRY);
727 c->ext.entry = el;
728 c->next = ns->code;
729 ns->code = c;
731 /* Create a new symbol for the master function. */
732 /* Give the internal function a unique name (within this file).
733 Also include the function name so the user has some hope of figuring
734 out what is going on. */
735 snprintf (name, GFC_MAX_SYMBOL_LEN, "master.%d.%s",
736 master_count++, ns->proc_name->name);
737 gfc_get_ha_symbol (name, &proc);
738 gcc_assert (proc != NULL);
740 gfc_add_procedure (&proc->attr, PROC_INTERNAL, proc->name, NULL);
741 if (ns->proc_name->attr.subroutine)
742 gfc_add_subroutine (&proc->attr, proc->name, NULL);
743 else
745 gfc_symbol *sym;
746 gfc_typespec *ts, *fts;
747 gfc_array_spec *as, *fas;
748 gfc_add_function (&proc->attr, proc->name, NULL);
749 proc->result = proc;
750 fas = ns->entries->sym->as;
751 fas = fas ? fas : ns->entries->sym->result->as;
752 fts = &ns->entries->sym->result->ts;
753 if (fts->type == BT_UNKNOWN)
754 fts = gfc_get_default_type (ns->entries->sym->result->name, NULL);
755 for (el = ns->entries->next; el; el = el->next)
757 ts = &el->sym->result->ts;
758 as = el->sym->as;
759 as = as ? as : el->sym->result->as;
760 if (ts->type == BT_UNKNOWN)
761 ts = gfc_get_default_type (el->sym->result->name, NULL);
763 if (! gfc_compare_types (ts, fts)
764 || (el->sym->result->attr.dimension
765 != ns->entries->sym->result->attr.dimension)
766 || (el->sym->result->attr.pointer
767 != ns->entries->sym->result->attr.pointer))
768 break;
769 else if (as && fas && ns->entries->sym->result != el->sym->result
770 && gfc_compare_array_spec (as, fas) == 0)
771 gfc_error ("Function %s at %L has entries with mismatched "
772 "array specifications", ns->entries->sym->name,
773 &ns->entries->sym->declared_at);
774 /* The characteristics need to match and thus both need to have
775 the same string length, i.e. both len=*, or both len=4.
776 Having both len=<variable> is also possible, but difficult to
777 check at compile time. */
778 else if (ts->type == BT_CHARACTER && ts->u.cl && fts->u.cl
779 && (((ts->u.cl->length && !fts->u.cl->length)
780 ||(!ts->u.cl->length && fts->u.cl->length))
781 || (ts->u.cl->length
782 && ts->u.cl->length->expr_type
783 != fts->u.cl->length->expr_type)
784 || (ts->u.cl->length
785 && ts->u.cl->length->expr_type == EXPR_CONSTANT
786 && mpz_cmp (ts->u.cl->length->value.integer,
787 fts->u.cl->length->value.integer) != 0)))
788 gfc_notify_std (GFC_STD_GNU, "Function %s at %L with "
789 "entries returning variables of different "
790 "string lengths", ns->entries->sym->name,
791 &ns->entries->sym->declared_at);
794 if (el == NULL)
796 sym = ns->entries->sym->result;
797 /* All result types the same. */
798 proc->ts = *fts;
799 if (sym->attr.dimension)
800 gfc_set_array_spec (proc, gfc_copy_array_spec (sym->as), NULL);
801 if (sym->attr.pointer)
802 gfc_add_pointer (&proc->attr, NULL);
804 else
806 /* Otherwise the result will be passed through a union by
807 reference. */
808 proc->attr.mixed_entry_master = 1;
809 for (el = ns->entries; el; el = el->next)
811 sym = el->sym->result;
812 if (sym->attr.dimension)
814 if (el == ns->entries)
815 gfc_error ("FUNCTION result %s can't be an array in "
816 "FUNCTION %s at %L", sym->name,
817 ns->entries->sym->name, &sym->declared_at);
818 else
819 gfc_error ("ENTRY result %s can't be an array in "
820 "FUNCTION %s at %L", sym->name,
821 ns->entries->sym->name, &sym->declared_at);
823 else if (sym->attr.pointer)
825 if (el == ns->entries)
826 gfc_error ("FUNCTION result %s can't be a POINTER in "
827 "FUNCTION %s at %L", sym->name,
828 ns->entries->sym->name, &sym->declared_at);
829 else
830 gfc_error ("ENTRY result %s can't be a POINTER in "
831 "FUNCTION %s at %L", sym->name,
832 ns->entries->sym->name, &sym->declared_at);
834 else
836 ts = &sym->ts;
837 if (ts->type == BT_UNKNOWN)
838 ts = gfc_get_default_type (sym->name, NULL);
839 switch (ts->type)
841 case BT_INTEGER:
842 if (ts->kind == gfc_default_integer_kind)
843 sym = NULL;
844 break;
845 case BT_REAL:
846 if (ts->kind == gfc_default_real_kind
847 || ts->kind == gfc_default_double_kind)
848 sym = NULL;
849 break;
850 case BT_COMPLEX:
851 if (ts->kind == gfc_default_complex_kind)
852 sym = NULL;
853 break;
854 case BT_LOGICAL:
855 if (ts->kind == gfc_default_logical_kind)
856 sym = NULL;
857 break;
858 case BT_UNKNOWN:
859 /* We will issue error elsewhere. */
860 sym = NULL;
861 break;
862 default:
863 break;
865 if (sym)
867 if (el == ns->entries)
868 gfc_error ("FUNCTION result %s can't be of type %s "
869 "in FUNCTION %s at %L", sym->name,
870 gfc_typename (ts), ns->entries->sym->name,
871 &sym->declared_at);
872 else
873 gfc_error ("ENTRY result %s can't be of type %s "
874 "in FUNCTION %s at %L", sym->name,
875 gfc_typename (ts), ns->entries->sym->name,
876 &sym->declared_at);
882 proc->attr.access = ACCESS_PRIVATE;
883 proc->attr.entry_master = 1;
885 /* Merge all the entry point arguments. */
886 for (el = ns->entries; el; el = el->next)
887 merge_argument_lists (proc, el->sym->formal);
889 /* Check the master formal arguments for any that are not
890 present in all entry points. */
891 for (el = ns->entries; el; el = el->next)
892 check_argument_lists (proc, el->sym->formal);
894 /* Use the master function for the function body. */
895 ns->proc_name = proc;
897 /* Finalize the new symbols. */
898 gfc_commit_symbols ();
900 /* Restore the original namespace. */
901 gfc_current_ns = old_ns;
905 /* Resolve common variables. */
906 static void
907 resolve_common_vars (gfc_symbol *sym, bool named_common)
909 gfc_symbol *csym = sym;
911 for (; csym; csym = csym->common_next)
913 if (csym->value || csym->attr.data)
915 if (!csym->ns->is_block_data)
916 gfc_notify_std (GFC_STD_GNU, "Variable '%s' at %L is in COMMON "
917 "but only in BLOCK DATA initialization is "
918 "allowed", csym->name, &csym->declared_at);
919 else if (!named_common)
920 gfc_notify_std (GFC_STD_GNU, "Initialized variable '%s' at %L is "
921 "in a blank COMMON but initialization is only "
922 "allowed in named common blocks", csym->name,
923 &csym->declared_at);
926 if (UNLIMITED_POLY (csym))
927 gfc_error_now ("'%s' in cannot appear in COMMON at %L "
928 "[F2008:C5100]", csym->name, &csym->declared_at);
930 if (csym->ts.type != BT_DERIVED)
931 continue;
933 if (!(csym->ts.u.derived->attr.sequence
934 || csym->ts.u.derived->attr.is_bind_c))
935 gfc_error_now ("Derived type variable '%s' in COMMON at %L "
936 "has neither the SEQUENCE nor the BIND(C) "
937 "attribute", csym->name, &csym->declared_at);
938 if (csym->ts.u.derived->attr.alloc_comp)
939 gfc_error_now ("Derived type variable '%s' in COMMON at %L "
940 "has an ultimate component that is "
941 "allocatable", csym->name, &csym->declared_at);
942 if (gfc_has_default_initializer (csym->ts.u.derived))
943 gfc_error_now ("Derived type variable '%s' in COMMON at %L "
944 "may not have default initializer", csym->name,
945 &csym->declared_at);
947 if (csym->attr.flavor == FL_UNKNOWN && !csym->attr.proc_pointer)
948 gfc_add_flavor (&csym->attr, FL_VARIABLE, csym->name, &csym->declared_at);
952 /* Resolve common blocks. */
953 static void
954 resolve_common_blocks (gfc_symtree *common_root)
956 gfc_symbol *sym;
957 gfc_gsymbol * gsym;
959 if (common_root == NULL)
960 return;
962 if (common_root->left)
963 resolve_common_blocks (common_root->left);
964 if (common_root->right)
965 resolve_common_blocks (common_root->right);
967 resolve_common_vars (common_root->n.common->head, true);
969 /* The common name is a global name - in Fortran 2003 also if it has a
970 C binding name, since Fortran 2008 only the C binding name is a global
971 identifier. */
972 if (!common_root->n.common->binding_label
973 || gfc_notification_std (GFC_STD_F2008))
975 gsym = gfc_find_gsymbol (gfc_gsym_root,
976 common_root->n.common->name);
978 if (gsym && gfc_notification_std (GFC_STD_F2008)
979 && gsym->type == GSYM_COMMON
980 && ((common_root->n.common->binding_label
981 && (!gsym->binding_label
982 || strcmp (common_root->n.common->binding_label,
983 gsym->binding_label) != 0))
984 || (!common_root->n.common->binding_label
985 && gsym->binding_label)))
987 gfc_error ("In Fortran 2003 COMMON '%s' block at %L is a global "
988 "identifier and must thus have the same binding name "
989 "as the same-named COMMON block at %L: %s vs %s",
990 common_root->n.common->name, &common_root->n.common->where,
991 &gsym->where,
992 common_root->n.common->binding_label
993 ? common_root->n.common->binding_label : "(blank)",
994 gsym->binding_label ? gsym->binding_label : "(blank)");
995 return;
998 if (gsym && gsym->type != GSYM_COMMON
999 && !common_root->n.common->binding_label)
1001 gfc_error ("COMMON block '%s' at %L uses the same global identifier "
1002 "as entity at %L",
1003 common_root->n.common->name, &common_root->n.common->where,
1004 &gsym->where);
1005 return;
1007 if (gsym && gsym->type != GSYM_COMMON)
1009 gfc_error ("Fortran 2008: COMMON block '%s' with binding label at "
1010 "%L sharing the identifier with global non-COMMON-block "
1011 "entity at %L", common_root->n.common->name,
1012 &common_root->n.common->where, &gsym->where);
1013 return;
1015 if (!gsym)
1017 gsym = gfc_get_gsymbol (common_root->n.common->name);
1018 gsym->type = GSYM_COMMON;
1019 gsym->where = common_root->n.common->where;
1020 gsym->defined = 1;
1022 gsym->used = 1;
1025 if (common_root->n.common->binding_label)
1027 gsym = gfc_find_gsymbol (gfc_gsym_root,
1028 common_root->n.common->binding_label);
1029 if (gsym && gsym->type != GSYM_COMMON)
1031 gfc_error ("COMMON block at %L with binding label %s uses the same "
1032 "global identifier as entity at %L",
1033 &common_root->n.common->where,
1034 common_root->n.common->binding_label, &gsym->where);
1035 return;
1037 if (!gsym)
1039 gsym = gfc_get_gsymbol (common_root->n.common->binding_label);
1040 gsym->type = GSYM_COMMON;
1041 gsym->where = common_root->n.common->where;
1042 gsym->defined = 1;
1044 gsym->used = 1;
1047 gfc_find_symbol (common_root->name, gfc_current_ns, 0, &sym);
1048 if (sym == NULL)
1049 return;
1051 if (sym->attr.flavor == FL_PARAMETER)
1052 gfc_error ("COMMON block '%s' at %L is used as PARAMETER at %L",
1053 sym->name, &common_root->n.common->where, &sym->declared_at);
1055 if (sym->attr.external)
1056 gfc_error ("COMMON block '%s' at %L can not have the EXTERNAL attribute",
1057 sym->name, &common_root->n.common->where);
1059 if (sym->attr.intrinsic)
1060 gfc_error ("COMMON block '%s' at %L is also an intrinsic procedure",
1061 sym->name, &common_root->n.common->where);
1062 else if (sym->attr.result
1063 || gfc_is_function_return_value (sym, gfc_current_ns))
1064 gfc_notify_std (GFC_STD_F2003, "COMMON block '%s' at %L "
1065 "that is also a function result", sym->name,
1066 &common_root->n.common->where);
1067 else if (sym->attr.flavor == FL_PROCEDURE && sym->attr.proc != PROC_INTERNAL
1068 && sym->attr.proc != PROC_ST_FUNCTION)
1069 gfc_notify_std (GFC_STD_F2003, "COMMON block '%s' at %L "
1070 "that is also a global procedure", sym->name,
1071 &common_root->n.common->where);
1075 /* Resolve contained function types. Because contained functions can call one
1076 another, they have to be worked out before any of the contained procedures
1077 can be resolved.
1079 The good news is that if a function doesn't already have a type, the only
1080 way it can get one is through an IMPLICIT type or a RESULT variable, because
1081 by definition contained functions are contained namespace they're contained
1082 in, not in a sibling or parent namespace. */
1084 static void
1085 resolve_contained_functions (gfc_namespace *ns)
1087 gfc_namespace *child;
1088 gfc_entry_list *el;
1090 resolve_formal_arglists (ns);
1092 for (child = ns->contained; child; child = child->sibling)
1094 /* Resolve alternate entry points first. */
1095 resolve_entries (child);
1097 /* Then check function return types. */
1098 resolve_contained_fntype (child->proc_name, child);
1099 for (el = child->entries; el; el = el->next)
1100 resolve_contained_fntype (el->sym, child);
1105 static bool resolve_fl_derived0 (gfc_symbol *sym);
1108 /* Resolve all of the elements of a structure constructor and make sure that
1109 the types are correct. The 'init' flag indicates that the given
1110 constructor is an initializer. */
1112 static bool
1113 resolve_structure_cons (gfc_expr *expr, int init)
1115 gfc_constructor *cons;
1116 gfc_component *comp;
1117 bool t;
1118 symbol_attribute a;
1120 t = true;
1122 if (expr->ts.type == BT_DERIVED)
1123 resolve_fl_derived0 (expr->ts.u.derived);
1125 cons = gfc_constructor_first (expr->value.constructor);
1127 /* A constructor may have references if it is the result of substituting a
1128 parameter variable. In this case we just pull out the component we
1129 want. */
1130 if (expr->ref)
1131 comp = expr->ref->u.c.sym->components;
1132 else
1133 comp = expr->ts.u.derived->components;
1135 for (; comp && cons; comp = comp->next, cons = gfc_constructor_next (cons))
1137 int rank;
1139 if (!cons->expr)
1140 continue;
1142 if (!gfc_resolve_expr (cons->expr))
1144 t = false;
1145 continue;
1148 rank = comp->as ? comp->as->rank : 0;
1149 if (cons->expr->expr_type != EXPR_NULL && rank != cons->expr->rank
1150 && (comp->attr.allocatable || cons->expr->rank))
1152 gfc_error ("The rank of the element in the structure "
1153 "constructor at %L does not match that of the "
1154 "component (%d/%d)", &cons->expr->where,
1155 cons->expr->rank, rank);
1156 t = false;
1159 /* If we don't have the right type, try to convert it. */
1161 if (!comp->attr.proc_pointer &&
1162 !gfc_compare_types (&cons->expr->ts, &comp->ts))
1164 if (strcmp (comp->name, "_extends") == 0)
1166 /* Can afford to be brutal with the _extends initializer.
1167 The derived type can get lost because it is PRIVATE
1168 but it is not usage constrained by the standard. */
1169 cons->expr->ts = comp->ts;
1171 else if (comp->attr.pointer && cons->expr->ts.type != BT_UNKNOWN)
1173 gfc_error ("The element in the structure constructor at %L, "
1174 "for pointer component '%s', is %s but should be %s",
1175 &cons->expr->where, comp->name,
1176 gfc_basic_typename (cons->expr->ts.type),
1177 gfc_basic_typename (comp->ts.type));
1178 t = false;
1180 else
1182 bool t2 = gfc_convert_type (cons->expr, &comp->ts, 1);
1183 if (t)
1184 t = t2;
1188 /* For strings, the length of the constructor should be the same as
1189 the one of the structure, ensure this if the lengths are known at
1190 compile time and when we are dealing with PARAMETER or structure
1191 constructors. */
1192 if (cons->expr->ts.type == BT_CHARACTER && comp->ts.u.cl
1193 && comp->ts.u.cl->length
1194 && comp->ts.u.cl->length->expr_type == EXPR_CONSTANT
1195 && cons->expr->ts.u.cl && cons->expr->ts.u.cl->length
1196 && cons->expr->ts.u.cl->length->expr_type == EXPR_CONSTANT
1197 && cons->expr->rank != 0
1198 && mpz_cmp (cons->expr->ts.u.cl->length->value.integer,
1199 comp->ts.u.cl->length->value.integer) != 0)
1201 if (cons->expr->expr_type == EXPR_VARIABLE
1202 && cons->expr->symtree->n.sym->attr.flavor == FL_PARAMETER)
1204 /* Wrap the parameter in an array constructor (EXPR_ARRAY)
1205 to make use of the gfc_resolve_character_array_constructor
1206 machinery. The expression is later simplified away to
1207 an array of string literals. */
1208 gfc_expr *para = cons->expr;
1209 cons->expr = gfc_get_expr ();
1210 cons->expr->ts = para->ts;
1211 cons->expr->where = para->where;
1212 cons->expr->expr_type = EXPR_ARRAY;
1213 cons->expr->rank = para->rank;
1214 cons->expr->shape = gfc_copy_shape (para->shape, para->rank);
1215 gfc_constructor_append_expr (&cons->expr->value.constructor,
1216 para, &cons->expr->where);
1218 if (cons->expr->expr_type == EXPR_ARRAY)
1220 gfc_constructor *p;
1221 p = gfc_constructor_first (cons->expr->value.constructor);
1222 if (cons->expr->ts.u.cl != p->expr->ts.u.cl)
1224 gfc_charlen *cl, *cl2;
1226 cl2 = NULL;
1227 for (cl = gfc_current_ns->cl_list; cl; cl = cl->next)
1229 if (cl == cons->expr->ts.u.cl)
1230 break;
1231 cl2 = cl;
1234 gcc_assert (cl);
1236 if (cl2)
1237 cl2->next = cl->next;
1239 gfc_free_expr (cl->length);
1240 free (cl);
1243 cons->expr->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
1244 cons->expr->ts.u.cl->length_from_typespec = true;
1245 cons->expr->ts.u.cl->length = gfc_copy_expr (comp->ts.u.cl->length);
1246 gfc_resolve_character_array_constructor (cons->expr);
1250 if (cons->expr->expr_type == EXPR_NULL
1251 && !(comp->attr.pointer || comp->attr.allocatable
1252 || comp->attr.proc_pointer || comp->ts.f90_type == BT_VOID
1253 || (comp->ts.type == BT_CLASS
1254 && (CLASS_DATA (comp)->attr.class_pointer
1255 || CLASS_DATA (comp)->attr.allocatable))))
1257 t = false;
1258 gfc_error ("The NULL in the structure constructor at %L is "
1259 "being applied to component '%s', which is neither "
1260 "a POINTER nor ALLOCATABLE", &cons->expr->where,
1261 comp->name);
1264 if (comp->attr.proc_pointer && comp->ts.interface)
1266 /* Check procedure pointer interface. */
1267 gfc_symbol *s2 = NULL;
1268 gfc_component *c2;
1269 const char *name;
1270 char err[200];
1272 c2 = gfc_get_proc_ptr_comp (cons->expr);
1273 if (c2)
1275 s2 = c2->ts.interface;
1276 name = c2->name;
1278 else if (cons->expr->expr_type == EXPR_FUNCTION)
1280 s2 = cons->expr->symtree->n.sym->result;
1281 name = cons->expr->symtree->n.sym->result->name;
1283 else if (cons->expr->expr_type != EXPR_NULL)
1285 s2 = cons->expr->symtree->n.sym;
1286 name = cons->expr->symtree->n.sym->name;
1289 if (s2 && !gfc_compare_interfaces (comp->ts.interface, s2, name, 0, 1,
1290 err, sizeof (err), NULL, NULL))
1292 gfc_error ("Interface mismatch for procedure-pointer component "
1293 "'%s' in structure constructor at %L: %s",
1294 comp->name, &cons->expr->where, err);
1295 return false;
1299 if (!comp->attr.pointer || comp->attr.proc_pointer
1300 || cons->expr->expr_type == EXPR_NULL)
1301 continue;
1303 a = gfc_expr_attr (cons->expr);
1305 if (!a.pointer && !a.target)
1307 t = false;
1308 gfc_error ("The element in the structure constructor at %L, "
1309 "for pointer component '%s' should be a POINTER or "
1310 "a TARGET", &cons->expr->where, comp->name);
1313 if (init)
1315 /* F08:C461. Additional checks for pointer initialization. */
1316 if (a.allocatable)
1318 t = false;
1319 gfc_error ("Pointer initialization target at %L "
1320 "must not be ALLOCATABLE ", &cons->expr->where);
1322 if (!a.save)
1324 t = false;
1325 gfc_error ("Pointer initialization target at %L "
1326 "must have the SAVE attribute", &cons->expr->where);
1330 /* F2003, C1272 (3). */
1331 bool impure = cons->expr->expr_type == EXPR_VARIABLE
1332 && (gfc_impure_variable (cons->expr->symtree->n.sym)
1333 || gfc_is_coindexed (cons->expr));
1334 if (impure && gfc_pure (NULL))
1336 t = false;
1337 gfc_error ("Invalid expression in the structure constructor for "
1338 "pointer component '%s' at %L in PURE procedure",
1339 comp->name, &cons->expr->where);
1342 if (impure)
1343 gfc_unset_implicit_pure (NULL);
1346 return t;
1350 /****************** Expression name resolution ******************/
1352 /* Returns 0 if a symbol was not declared with a type or
1353 attribute declaration statement, nonzero otherwise. */
1355 static int
1356 was_declared (gfc_symbol *sym)
1358 symbol_attribute a;
1360 a = sym->attr;
1362 if (!a.implicit_type && sym->ts.type != BT_UNKNOWN)
1363 return 1;
1365 if (a.allocatable || a.dimension || a.dummy || a.external || a.intrinsic
1366 || a.optional || a.pointer || a.save || a.target || a.volatile_
1367 || a.value || a.access != ACCESS_UNKNOWN || a.intent != INTENT_UNKNOWN
1368 || a.asynchronous || a.codimension)
1369 return 1;
1371 return 0;
1375 /* Determine if a symbol is generic or not. */
1377 static int
1378 generic_sym (gfc_symbol *sym)
1380 gfc_symbol *s;
1382 if (sym->attr.generic ||
1383 (sym->attr.intrinsic && gfc_generic_intrinsic (sym->name)))
1384 return 1;
1386 if (was_declared (sym) || sym->ns->parent == NULL)
1387 return 0;
1389 gfc_find_symbol (sym->name, sym->ns->parent, 1, &s);
1391 if (s != NULL)
1393 if (s == sym)
1394 return 0;
1395 else
1396 return generic_sym (s);
1399 return 0;
1403 /* Determine if a symbol is specific or not. */
1405 static int
1406 specific_sym (gfc_symbol *sym)
1408 gfc_symbol *s;
1410 if (sym->attr.if_source == IFSRC_IFBODY
1411 || sym->attr.proc == PROC_MODULE
1412 || sym->attr.proc == PROC_INTERNAL
1413 || sym->attr.proc == PROC_ST_FUNCTION
1414 || (sym->attr.intrinsic && gfc_specific_intrinsic (sym->name))
1415 || sym->attr.external)
1416 return 1;
1418 if (was_declared (sym) || sym->ns->parent == NULL)
1419 return 0;
1421 gfc_find_symbol (sym->name, sym->ns->parent, 1, &s);
1423 return (s == NULL) ? 0 : specific_sym (s);
1427 /* Figure out if the procedure is specific, generic or unknown. */
1429 typedef enum
1430 { PTYPE_GENERIC = 1, PTYPE_SPECIFIC, PTYPE_UNKNOWN }
1431 proc_type;
1433 static proc_type
1434 procedure_kind (gfc_symbol *sym)
1436 if (generic_sym (sym))
1437 return PTYPE_GENERIC;
1439 if (specific_sym (sym))
1440 return PTYPE_SPECIFIC;
1442 return PTYPE_UNKNOWN;
1445 /* Check references to assumed size arrays. The flag need_full_assumed_size
1446 is nonzero when matching actual arguments. */
1448 static int need_full_assumed_size = 0;
1450 static bool
1451 check_assumed_size_reference (gfc_symbol *sym, gfc_expr *e)
1453 if (need_full_assumed_size || !(sym->as && sym->as->type == AS_ASSUMED_SIZE))
1454 return false;
1456 /* FIXME: The comparison "e->ref->u.ar.type == AR_FULL" is wrong.
1457 What should it be? */
1458 if (e->ref && (e->ref->u.ar.end[e->ref->u.ar.as->rank - 1] == NULL)
1459 && (e->ref->u.ar.as->type == AS_ASSUMED_SIZE)
1460 && (e->ref->u.ar.type == AR_FULL))
1462 gfc_error ("The upper bound in the last dimension must "
1463 "appear in the reference to the assumed size "
1464 "array '%s' at %L", sym->name, &e->where);
1465 return true;
1467 return false;
1471 /* Look for bad assumed size array references in argument expressions
1472 of elemental and array valued intrinsic procedures. Since this is
1473 called from procedure resolution functions, it only recurses at
1474 operators. */
1476 static bool
1477 resolve_assumed_size_actual (gfc_expr *e)
1479 if (e == NULL)
1480 return false;
1482 switch (e->expr_type)
1484 case EXPR_VARIABLE:
1485 if (e->symtree && check_assumed_size_reference (e->symtree->n.sym, e))
1486 return true;
1487 break;
1489 case EXPR_OP:
1490 if (resolve_assumed_size_actual (e->value.op.op1)
1491 || resolve_assumed_size_actual (e->value.op.op2))
1492 return true;
1493 break;
1495 default:
1496 break;
1498 return false;
1502 /* Check a generic procedure, passed as an actual argument, to see if
1503 there is a matching specific name. If none, it is an error, and if
1504 more than one, the reference is ambiguous. */
1505 static int
1506 count_specific_procs (gfc_expr *e)
1508 int n;
1509 gfc_interface *p;
1510 gfc_symbol *sym;
1512 n = 0;
1513 sym = e->symtree->n.sym;
1515 for (p = sym->generic; p; p = p->next)
1516 if (strcmp (sym->name, p->sym->name) == 0)
1518 e->symtree = gfc_find_symtree (p->sym->ns->sym_root,
1519 sym->name);
1520 n++;
1523 if (n > 1)
1524 gfc_error ("'%s' at %L is ambiguous", e->symtree->n.sym->name,
1525 &e->where);
1527 if (n == 0)
1528 gfc_error ("GENERIC procedure '%s' is not allowed as an actual "
1529 "argument at %L", sym->name, &e->where);
1531 return n;
1535 /* See if a call to sym could possibly be a not allowed RECURSION because of
1536 a missing RECURSIVE declaration. This means that either sym is the current
1537 context itself, or sym is the parent of a contained procedure calling its
1538 non-RECURSIVE containing procedure.
1539 This also works if sym is an ENTRY. */
1541 static bool
1542 is_illegal_recursion (gfc_symbol* sym, gfc_namespace* context)
1544 gfc_symbol* proc_sym;
1545 gfc_symbol* context_proc;
1546 gfc_namespace* real_context;
1548 if (sym->attr.flavor == FL_PROGRAM
1549 || sym->attr.flavor == FL_DERIVED)
1550 return false;
1552 gcc_assert (sym->attr.flavor == FL_PROCEDURE);
1554 /* If we've got an ENTRY, find real procedure. */
1555 if (sym->attr.entry && sym->ns->entries)
1556 proc_sym = sym->ns->entries->sym;
1557 else
1558 proc_sym = sym;
1560 /* If sym is RECURSIVE, all is well of course. */
1561 if (proc_sym->attr.recursive || gfc_option.flag_recursive)
1562 return false;
1564 /* Find the context procedure's "real" symbol if it has entries.
1565 We look for a procedure symbol, so recurse on the parents if we don't
1566 find one (like in case of a BLOCK construct). */
1567 for (real_context = context; ; real_context = real_context->parent)
1569 /* We should find something, eventually! */
1570 gcc_assert (real_context);
1572 context_proc = (real_context->entries ? real_context->entries->sym
1573 : real_context->proc_name);
1575 /* In some special cases, there may not be a proc_name, like for this
1576 invalid code:
1577 real(bad_kind()) function foo () ...
1578 when checking the call to bad_kind ().
1579 In these cases, we simply return here and assume that the
1580 call is ok. */
1581 if (!context_proc)
1582 return false;
1584 if (context_proc->attr.flavor != FL_LABEL)
1585 break;
1588 /* A call from sym's body to itself is recursion, of course. */
1589 if (context_proc == proc_sym)
1590 return true;
1592 /* The same is true if context is a contained procedure and sym the
1593 containing one. */
1594 if (context_proc->attr.contained)
1596 gfc_symbol* parent_proc;
1598 gcc_assert (context->parent);
1599 parent_proc = (context->parent->entries ? context->parent->entries->sym
1600 : context->parent->proc_name);
1602 if (parent_proc == proc_sym)
1603 return true;
1606 return false;
1610 /* Resolve an intrinsic procedure: Set its function/subroutine attribute,
1611 its typespec and formal argument list. */
1613 bool
1614 gfc_resolve_intrinsic (gfc_symbol *sym, locus *loc)
1616 gfc_intrinsic_sym* isym = NULL;
1617 const char* symstd;
1619 if (sym->formal)
1620 return true;
1622 /* Already resolved. */
1623 if (sym->from_intmod && sym->ts.type != BT_UNKNOWN)
1624 return true;
1626 /* We already know this one is an intrinsic, so we don't call
1627 gfc_is_intrinsic for full checking but rather use gfc_find_function and
1628 gfc_find_subroutine directly to check whether it is a function or
1629 subroutine. */
1631 if (sym->intmod_sym_id && sym->attr.subroutine)
1633 gfc_isym_id id = gfc_isym_id_by_intmod_sym (sym);
1634 isym = gfc_intrinsic_subroutine_by_id (id);
1636 else if (sym->intmod_sym_id)
1638 gfc_isym_id id = gfc_isym_id_by_intmod_sym (sym);
1639 isym = gfc_intrinsic_function_by_id (id);
1641 else if (!sym->attr.subroutine)
1642 isym = gfc_find_function (sym->name);
1644 if (isym && !sym->attr.subroutine)
1646 if (sym->ts.type != BT_UNKNOWN && gfc_option.warn_surprising
1647 && !sym->attr.implicit_type)
1648 gfc_warning ("Type specified for intrinsic function '%s' at %L is"
1649 " ignored", sym->name, &sym->declared_at);
1651 if (!sym->attr.function &&
1652 !gfc_add_function(&sym->attr, sym->name, loc))
1653 return false;
1655 sym->ts = isym->ts;
1657 else if (isym || (isym = gfc_find_subroutine (sym->name)))
1659 if (sym->ts.type != BT_UNKNOWN && !sym->attr.implicit_type)
1661 gfc_error ("Intrinsic subroutine '%s' at %L shall not have a type"
1662 " specifier", sym->name, &sym->declared_at);
1663 return false;
1666 if (!sym->attr.subroutine &&
1667 !gfc_add_subroutine(&sym->attr, sym->name, loc))
1668 return false;
1670 else
1672 gfc_error ("'%s' declared INTRINSIC at %L does not exist", sym->name,
1673 &sym->declared_at);
1674 return false;
1677 gfc_copy_formal_args_intr (sym, isym);
1679 sym->attr.pure = isym->pure;
1680 sym->attr.elemental = isym->elemental;
1682 /* Check it is actually available in the standard settings. */
1683 if (!gfc_check_intrinsic_standard (isym, &symstd, false, sym->declared_at))
1685 gfc_error ("The intrinsic '%s' declared INTRINSIC at %L is not"
1686 " available in the current standard settings but %s. Use"
1687 " an appropriate -std=* option or enable -fall-intrinsics"
1688 " in order to use it.",
1689 sym->name, &sym->declared_at, symstd);
1690 return false;
1693 return true;
1697 /* Resolve a procedure expression, like passing it to a called procedure or as
1698 RHS for a procedure pointer assignment. */
1700 static bool
1701 resolve_procedure_expression (gfc_expr* expr)
1703 gfc_symbol* sym;
1705 if (expr->expr_type != EXPR_VARIABLE)
1706 return true;
1707 gcc_assert (expr->symtree);
1709 sym = expr->symtree->n.sym;
1711 if (sym->attr.intrinsic)
1712 gfc_resolve_intrinsic (sym, &expr->where);
1714 if (sym->attr.flavor != FL_PROCEDURE
1715 || (sym->attr.function && sym->result == sym))
1716 return true;
1718 /* A non-RECURSIVE procedure that is used as procedure expression within its
1719 own body is in danger of being called recursively. */
1720 if (is_illegal_recursion (sym, gfc_current_ns))
1721 gfc_warning ("Non-RECURSIVE procedure '%s' at %L is possibly calling"
1722 " itself recursively. Declare it RECURSIVE or use"
1723 " -frecursive", sym->name, &expr->where);
1725 return true;
1729 /* Resolve an actual argument list. Most of the time, this is just
1730 resolving the expressions in the list.
1731 The exception is that we sometimes have to decide whether arguments
1732 that look like procedure arguments are really simple variable
1733 references. */
1735 static bool
1736 resolve_actual_arglist (gfc_actual_arglist *arg, procedure_type ptype,
1737 bool no_formal_args)
1739 gfc_symbol *sym;
1740 gfc_symtree *parent_st;
1741 gfc_expr *e;
1742 int save_need_full_assumed_size;
1743 bool return_value = false;
1744 bool actual_arg_sav = actual_arg, first_actual_arg_sav = first_actual_arg;
1746 actual_arg = true;
1747 first_actual_arg = true;
1749 for (; arg; arg = arg->next)
1751 e = arg->expr;
1752 if (e == NULL)
1754 /* Check the label is a valid branching target. */
1755 if (arg->label)
1757 if (arg->label->defined == ST_LABEL_UNKNOWN)
1759 gfc_error ("Label %d referenced at %L is never defined",
1760 arg->label->value, &arg->label->where);
1761 goto cleanup;
1764 first_actual_arg = false;
1765 continue;
1768 if (e->expr_type == EXPR_VARIABLE
1769 && e->symtree->n.sym->attr.generic
1770 && no_formal_args
1771 && count_specific_procs (e) != 1)
1772 goto cleanup;
1774 if (e->ts.type != BT_PROCEDURE)
1776 save_need_full_assumed_size = need_full_assumed_size;
1777 if (e->expr_type != EXPR_VARIABLE)
1778 need_full_assumed_size = 0;
1779 if (!gfc_resolve_expr (e))
1780 goto cleanup;
1781 need_full_assumed_size = save_need_full_assumed_size;
1782 goto argument_list;
1785 /* See if the expression node should really be a variable reference. */
1787 sym = e->symtree->n.sym;
1789 if (sym->attr.flavor == FL_PROCEDURE
1790 || sym->attr.intrinsic
1791 || sym->attr.external)
1793 int actual_ok;
1795 /* If a procedure is not already determined to be something else
1796 check if it is intrinsic. */
1797 if (gfc_is_intrinsic (sym, sym->attr.subroutine, e->where))
1798 sym->attr.intrinsic = 1;
1800 if (sym->attr.proc == PROC_ST_FUNCTION)
1802 gfc_error ("Statement function '%s' at %L is not allowed as an "
1803 "actual argument", sym->name, &e->where);
1806 actual_ok = gfc_intrinsic_actual_ok (sym->name,
1807 sym->attr.subroutine);
1808 if (sym->attr.intrinsic && actual_ok == 0)
1810 gfc_error ("Intrinsic '%s' at %L is not allowed as an "
1811 "actual argument", sym->name, &e->where);
1814 if (sym->attr.contained && !sym->attr.use_assoc
1815 && sym->ns->proc_name->attr.flavor != FL_MODULE)
1817 if (!gfc_notify_std (GFC_STD_F2008, "Internal procedure '%s' is"
1818 " used as actual argument at %L",
1819 sym->name, &e->where))
1820 goto cleanup;
1823 if (sym->attr.elemental && !sym->attr.intrinsic)
1825 gfc_error ("ELEMENTAL non-INTRINSIC procedure '%s' is not "
1826 "allowed as an actual argument at %L", sym->name,
1827 &e->where);
1830 /* Check if a generic interface has a specific procedure
1831 with the same name before emitting an error. */
1832 if (sym->attr.generic && count_specific_procs (e) != 1)
1833 goto cleanup;
1835 /* Just in case a specific was found for the expression. */
1836 sym = e->symtree->n.sym;
1838 /* If the symbol is the function that names the current (or
1839 parent) scope, then we really have a variable reference. */
1841 if (gfc_is_function_return_value (sym, sym->ns))
1842 goto got_variable;
1844 /* If all else fails, see if we have a specific intrinsic. */
1845 if (sym->ts.type == BT_UNKNOWN && sym->attr.intrinsic)
1847 gfc_intrinsic_sym *isym;
1849 isym = gfc_find_function (sym->name);
1850 if (isym == NULL || !isym->specific)
1852 gfc_error ("Unable to find a specific INTRINSIC procedure "
1853 "for the reference '%s' at %L", sym->name,
1854 &e->where);
1855 goto cleanup;
1857 sym->ts = isym->ts;
1858 sym->attr.intrinsic = 1;
1859 sym->attr.function = 1;
1862 if (!gfc_resolve_expr (e))
1863 goto cleanup;
1864 goto argument_list;
1867 /* See if the name is a module procedure in a parent unit. */
1869 if (was_declared (sym) || sym->ns->parent == NULL)
1870 goto got_variable;
1872 if (gfc_find_sym_tree (sym->name, sym->ns->parent, 1, &parent_st))
1874 gfc_error ("Symbol '%s' at %L is ambiguous", sym->name, &e->where);
1875 goto cleanup;
1878 if (parent_st == NULL)
1879 goto got_variable;
1881 sym = parent_st->n.sym;
1882 e->symtree = parent_st; /* Point to the right thing. */
1884 if (sym->attr.flavor == FL_PROCEDURE
1885 || sym->attr.intrinsic
1886 || sym->attr.external)
1888 if (!gfc_resolve_expr (e))
1889 goto cleanup;
1890 goto argument_list;
1893 got_variable:
1894 e->expr_type = EXPR_VARIABLE;
1895 e->ts = sym->ts;
1896 if ((sym->as != NULL && sym->ts.type != BT_CLASS)
1897 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
1898 && CLASS_DATA (sym)->as))
1900 e->rank = sym->ts.type == BT_CLASS
1901 ? CLASS_DATA (sym)->as->rank : sym->as->rank;
1902 e->ref = gfc_get_ref ();
1903 e->ref->type = REF_ARRAY;
1904 e->ref->u.ar.type = AR_FULL;
1905 e->ref->u.ar.as = sym->ts.type == BT_CLASS
1906 ? CLASS_DATA (sym)->as : sym->as;
1909 /* Expressions are assigned a default ts.type of BT_PROCEDURE in
1910 primary.c (match_actual_arg). If above code determines that it
1911 is a variable instead, it needs to be resolved as it was not
1912 done at the beginning of this function. */
1913 save_need_full_assumed_size = need_full_assumed_size;
1914 if (e->expr_type != EXPR_VARIABLE)
1915 need_full_assumed_size = 0;
1916 if (!gfc_resolve_expr (e))
1917 goto cleanup;
1918 need_full_assumed_size = save_need_full_assumed_size;
1920 argument_list:
1921 /* Check argument list functions %VAL, %LOC and %REF. There is
1922 nothing to do for %REF. */
1923 if (arg->name && arg->name[0] == '%')
1925 if (strncmp ("%VAL", arg->name, 4) == 0)
1927 if (e->ts.type == BT_CHARACTER || e->ts.type == BT_DERIVED)
1929 gfc_error ("By-value argument at %L is not of numeric "
1930 "type", &e->where);
1931 goto cleanup;
1934 if (e->rank)
1936 gfc_error ("By-value argument at %L cannot be an array or "
1937 "an array section", &e->where);
1938 goto cleanup;
1941 /* Intrinsics are still PROC_UNKNOWN here. However,
1942 since same file external procedures are not resolvable
1943 in gfortran, it is a good deal easier to leave them to
1944 intrinsic.c. */
1945 if (ptype != PROC_UNKNOWN
1946 && ptype != PROC_DUMMY
1947 && ptype != PROC_EXTERNAL
1948 && ptype != PROC_MODULE)
1950 gfc_error ("By-value argument at %L is not allowed "
1951 "in this context", &e->where);
1952 goto cleanup;
1956 /* Statement functions have already been excluded above. */
1957 else if (strncmp ("%LOC", arg->name, 4) == 0
1958 && e->ts.type == BT_PROCEDURE)
1960 if (e->symtree->n.sym->attr.proc == PROC_INTERNAL)
1962 gfc_error ("Passing internal procedure at %L by location "
1963 "not allowed", &e->where);
1964 goto cleanup;
1969 /* Fortran 2008, C1237. */
1970 if (e->expr_type == EXPR_VARIABLE && gfc_is_coindexed (e)
1971 && gfc_has_ultimate_pointer (e))
1973 gfc_error ("Coindexed actual argument at %L with ultimate pointer "
1974 "component", &e->where);
1975 goto cleanup;
1978 first_actual_arg = false;
1981 return_value = true;
1983 cleanup:
1984 actual_arg = actual_arg_sav;
1985 first_actual_arg = first_actual_arg_sav;
1987 return return_value;
1991 /* Do the checks of the actual argument list that are specific to elemental
1992 procedures. If called with c == NULL, we have a function, otherwise if
1993 expr == NULL, we have a subroutine. */
1995 static bool
1996 resolve_elemental_actual (gfc_expr *expr, gfc_code *c)
1998 gfc_actual_arglist *arg0;
1999 gfc_actual_arglist *arg;
2000 gfc_symbol *esym = NULL;
2001 gfc_intrinsic_sym *isym = NULL;
2002 gfc_expr *e = NULL;
2003 gfc_intrinsic_arg *iformal = NULL;
2004 gfc_formal_arglist *eformal = NULL;
2005 bool formal_optional = false;
2006 bool set_by_optional = false;
2007 int i;
2008 int rank = 0;
2010 /* Is this an elemental procedure? */
2011 if (expr && expr->value.function.actual != NULL)
2013 if (expr->value.function.esym != NULL
2014 && expr->value.function.esym->attr.elemental)
2016 arg0 = expr->value.function.actual;
2017 esym = expr->value.function.esym;
2019 else if (expr->value.function.isym != NULL
2020 && expr->value.function.isym->elemental)
2022 arg0 = expr->value.function.actual;
2023 isym = expr->value.function.isym;
2025 else
2026 return true;
2028 else if (c && c->ext.actual != NULL)
2030 arg0 = c->ext.actual;
2032 if (c->resolved_sym)
2033 esym = c->resolved_sym;
2034 else
2035 esym = c->symtree->n.sym;
2036 gcc_assert (esym);
2038 if (!esym->attr.elemental)
2039 return true;
2041 else
2042 return true;
2044 /* The rank of an elemental is the rank of its array argument(s). */
2045 for (arg = arg0; arg; arg = arg->next)
2047 if (arg->expr != NULL && arg->expr->rank != 0)
2049 rank = arg->expr->rank;
2050 if (arg->expr->expr_type == EXPR_VARIABLE
2051 && arg->expr->symtree->n.sym->attr.optional)
2052 set_by_optional = true;
2054 /* Function specific; set the result rank and shape. */
2055 if (expr)
2057 expr->rank = rank;
2058 if (!expr->shape && arg->expr->shape)
2060 expr->shape = gfc_get_shape (rank);
2061 for (i = 0; i < rank; i++)
2062 mpz_init_set (expr->shape[i], arg->expr->shape[i]);
2065 break;
2069 /* If it is an array, it shall not be supplied as an actual argument
2070 to an elemental procedure unless an array of the same rank is supplied
2071 as an actual argument corresponding to a nonoptional dummy argument of
2072 that elemental procedure(12.4.1.5). */
2073 formal_optional = false;
2074 if (isym)
2075 iformal = isym->formal;
2076 else
2077 eformal = esym->formal;
2079 for (arg = arg0; arg; arg = arg->next)
2081 if (eformal)
2083 if (eformal->sym && eformal->sym->attr.optional)
2084 formal_optional = true;
2085 eformal = eformal->next;
2087 else if (isym && iformal)
2089 if (iformal->optional)
2090 formal_optional = true;
2091 iformal = iformal->next;
2093 else if (isym)
2094 formal_optional = true;
2096 if (pedantic && arg->expr != NULL
2097 && arg->expr->expr_type == EXPR_VARIABLE
2098 && arg->expr->symtree->n.sym->attr.optional
2099 && formal_optional
2100 && arg->expr->rank
2101 && (set_by_optional || arg->expr->rank != rank)
2102 && !(isym && isym->id == GFC_ISYM_CONVERSION))
2104 gfc_warning ("'%s' at %L is an array and OPTIONAL; IF IT IS "
2105 "MISSING, it cannot be the actual argument of an "
2106 "ELEMENTAL procedure unless there is a non-optional "
2107 "argument with the same rank (12.4.1.5)",
2108 arg->expr->symtree->n.sym->name, &arg->expr->where);
2112 for (arg = arg0; arg; arg = arg->next)
2114 if (arg->expr == NULL || arg->expr->rank == 0)
2115 continue;
2117 /* Being elemental, the last upper bound of an assumed size array
2118 argument must be present. */
2119 if (resolve_assumed_size_actual (arg->expr))
2120 return false;
2122 /* Elemental procedure's array actual arguments must conform. */
2123 if (e != NULL)
2125 if (!gfc_check_conformance (arg->expr, e, "elemental procedure"))
2126 return false;
2128 else
2129 e = arg->expr;
2132 /* INTENT(OUT) is only allowed for subroutines; if any actual argument
2133 is an array, the intent inout/out variable needs to be also an array. */
2134 if (rank > 0 && esym && expr == NULL)
2135 for (eformal = esym->formal, arg = arg0; arg && eformal;
2136 arg = arg->next, eformal = eformal->next)
2137 if ((eformal->sym->attr.intent == INTENT_OUT
2138 || eformal->sym->attr.intent == INTENT_INOUT)
2139 && arg->expr && arg->expr->rank == 0)
2141 gfc_error ("Actual argument at %L for INTENT(%s) dummy '%s' of "
2142 "ELEMENTAL subroutine '%s' is a scalar, but another "
2143 "actual argument is an array", &arg->expr->where,
2144 (eformal->sym->attr.intent == INTENT_OUT) ? "OUT"
2145 : "INOUT", eformal->sym->name, esym->name);
2146 return false;
2148 return true;
2152 /* This function does the checking of references to global procedures
2153 as defined in sections 18.1 and 14.1, respectively, of the Fortran
2154 77 and 95 standards. It checks for a gsymbol for the name, making
2155 one if it does not already exist. If it already exists, then the
2156 reference being resolved must correspond to the type of gsymbol.
2157 Otherwise, the new symbol is equipped with the attributes of the
2158 reference. The corresponding code that is called in creating
2159 global entities is parse.c.
2161 In addition, for all but -std=legacy, the gsymbols are used to
2162 check the interfaces of external procedures from the same file.
2163 The namespace of the gsymbol is resolved and then, once this is
2164 done the interface is checked. */
2167 static bool
2168 not_in_recursive (gfc_symbol *sym, gfc_namespace *gsym_ns)
2170 if (!gsym_ns->proc_name->attr.recursive)
2171 return true;
2173 if (sym->ns == gsym_ns)
2174 return false;
2176 if (sym->ns->parent && sym->ns->parent == gsym_ns)
2177 return false;
2179 return true;
2182 static bool
2183 not_entry_self_reference (gfc_symbol *sym, gfc_namespace *gsym_ns)
2185 if (gsym_ns->entries)
2187 gfc_entry_list *entry = gsym_ns->entries;
2189 for (; entry; entry = entry->next)
2191 if (strcmp (sym->name, entry->sym->name) == 0)
2193 if (strcmp (gsym_ns->proc_name->name,
2194 sym->ns->proc_name->name) == 0)
2195 return false;
2197 if (sym->ns->parent
2198 && strcmp (gsym_ns->proc_name->name,
2199 sym->ns->parent->proc_name->name) == 0)
2200 return false;
2204 return true;
2208 /* Check for the requirement of an explicit interface. F08:12.4.2.2. */
2210 bool
2211 gfc_explicit_interface_required (gfc_symbol *sym, char *errmsg, int err_len)
2213 gfc_formal_arglist *arg = gfc_sym_get_dummy_args (sym);
2215 for ( ; arg; arg = arg->next)
2217 if (!arg->sym)
2218 continue;
2220 if (arg->sym->attr.allocatable) /* (2a) */
2222 strncpy (errmsg, _("allocatable argument"), err_len);
2223 return true;
2225 else if (arg->sym->attr.asynchronous)
2227 strncpy (errmsg, _("asynchronous argument"), err_len);
2228 return true;
2230 else if (arg->sym->attr.optional)
2232 strncpy (errmsg, _("optional argument"), err_len);
2233 return true;
2235 else if (arg->sym->attr.pointer)
2237 strncpy (errmsg, _("pointer argument"), err_len);
2238 return true;
2240 else if (arg->sym->attr.target)
2242 strncpy (errmsg, _("target argument"), err_len);
2243 return true;
2245 else if (arg->sym->attr.value)
2247 strncpy (errmsg, _("value argument"), err_len);
2248 return true;
2250 else if (arg->sym->attr.volatile_)
2252 strncpy (errmsg, _("volatile argument"), err_len);
2253 return true;
2255 else if (arg->sym->as && arg->sym->as->type == AS_ASSUMED_SHAPE) /* (2b) */
2257 strncpy (errmsg, _("assumed-shape argument"), err_len);
2258 return true;
2260 else if (arg->sym->as && arg->sym->as->type == AS_ASSUMED_RANK) /* TS 29113, 6.2. */
2262 strncpy (errmsg, _("assumed-rank argument"), err_len);
2263 return true;
2265 else if (arg->sym->attr.codimension) /* (2c) */
2267 strncpy (errmsg, _("coarray argument"), err_len);
2268 return true;
2270 else if (false) /* (2d) TODO: parametrized derived type */
2272 strncpy (errmsg, _("parametrized derived type argument"), err_len);
2273 return true;
2275 else if (arg->sym->ts.type == BT_CLASS) /* (2e) */
2277 strncpy (errmsg, _("polymorphic argument"), err_len);
2278 return true;
2280 else if (arg->sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
2282 strncpy (errmsg, _("NO_ARG_CHECK attribute"), err_len);
2283 return true;
2285 else if (arg->sym->ts.type == BT_ASSUMED)
2287 /* As assumed-type is unlimited polymorphic (cf. above).
2288 See also TS 29113, Note 6.1. */
2289 strncpy (errmsg, _("assumed-type argument"), err_len);
2290 return true;
2294 if (sym->attr.function)
2296 gfc_symbol *res = sym->result ? sym->result : sym;
2298 if (res->attr.dimension) /* (3a) */
2300 strncpy (errmsg, _("array result"), err_len);
2301 return true;
2303 else if (res->attr.pointer || res->attr.allocatable) /* (3b) */
2305 strncpy (errmsg, _("pointer or allocatable result"), err_len);
2306 return true;
2308 else if (res->ts.type == BT_CHARACTER && res->ts.u.cl
2309 && res->ts.u.cl->length
2310 && res->ts.u.cl->length->expr_type != EXPR_CONSTANT) /* (3c) */
2312 strncpy (errmsg, _("result with non-constant character length"), err_len);
2313 return true;
2317 if (sym->attr.elemental && !sym->attr.intrinsic) /* (4) */
2319 strncpy (errmsg, _("elemental procedure"), err_len);
2320 return true;
2322 else if (sym->attr.is_bind_c) /* (5) */
2324 strncpy (errmsg, _("bind(c) procedure"), err_len);
2325 return true;
2328 return false;
2332 static void
2333 resolve_global_procedure (gfc_symbol *sym, locus *where,
2334 gfc_actual_arglist **actual, int sub)
2336 gfc_gsymbol * gsym;
2337 gfc_namespace *ns;
2338 enum gfc_symbol_type type;
2339 char reason[200];
2341 type = sub ? GSYM_SUBROUTINE : GSYM_FUNCTION;
2343 gsym = gfc_get_gsymbol (sym->binding_label ? sym->binding_label : sym->name);
2345 if ((gsym->type != GSYM_UNKNOWN && gsym->type != type))
2346 gfc_global_used (gsym, where);
2348 if ((sym->attr.if_source == IFSRC_UNKNOWN
2349 || sym->attr.if_source == IFSRC_IFBODY)
2350 && gsym->type != GSYM_UNKNOWN
2351 && !gsym->binding_label
2352 && gsym->ns
2353 && gsym->ns->resolved != -1
2354 && gsym->ns->proc_name
2355 && not_in_recursive (sym, gsym->ns)
2356 && not_entry_self_reference (sym, gsym->ns))
2358 gfc_symbol *def_sym;
2360 /* Resolve the gsymbol namespace if needed. */
2361 if (!gsym->ns->resolved)
2363 gfc_dt_list *old_dt_list;
2364 struct gfc_omp_saved_state old_omp_state;
2366 /* Stash away derived types so that the backend_decls do not
2367 get mixed up. */
2368 old_dt_list = gfc_derived_types;
2369 gfc_derived_types = NULL;
2370 /* And stash away openmp state. */
2371 gfc_omp_save_and_clear_state (&old_omp_state);
2373 gfc_resolve (gsym->ns);
2375 /* Store the new derived types with the global namespace. */
2376 if (gfc_derived_types)
2377 gsym->ns->derived_types = gfc_derived_types;
2379 /* Restore the derived types of this namespace. */
2380 gfc_derived_types = old_dt_list;
2381 /* And openmp state. */
2382 gfc_omp_restore_state (&old_omp_state);
2385 /* Make sure that translation for the gsymbol occurs before
2386 the procedure currently being resolved. */
2387 ns = gfc_global_ns_list;
2388 for (; ns && ns != gsym->ns; ns = ns->sibling)
2390 if (ns->sibling == gsym->ns)
2392 ns->sibling = gsym->ns->sibling;
2393 gsym->ns->sibling = gfc_global_ns_list;
2394 gfc_global_ns_list = gsym->ns;
2395 break;
2399 def_sym = gsym->ns->proc_name;
2401 /* This can happen if a binding name has been specified. */
2402 if (gsym->binding_label && gsym->sym_name != def_sym->name)
2403 gfc_find_symbol (gsym->sym_name, gsym->ns, 0, &def_sym);
2405 if (def_sym->attr.entry_master)
2407 gfc_entry_list *entry;
2408 for (entry = gsym->ns->entries; entry; entry = entry->next)
2409 if (strcmp (entry->sym->name, sym->name) == 0)
2411 def_sym = entry->sym;
2412 break;
2416 if (sym->attr.function && !gfc_compare_types (&sym->ts, &def_sym->ts))
2418 gfc_error ("Return type mismatch of function '%s' at %L (%s/%s)",
2419 sym->name, &sym->declared_at, gfc_typename (&sym->ts),
2420 gfc_typename (&def_sym->ts));
2421 goto done;
2424 if (sym->attr.if_source == IFSRC_UNKNOWN
2425 && gfc_explicit_interface_required (def_sym, reason, sizeof(reason)))
2427 gfc_error ("Explicit interface required for '%s' at %L: %s",
2428 sym->name, &sym->declared_at, reason);
2429 goto done;
2432 if (!pedantic && (gfc_option.allow_std & GFC_STD_GNU))
2433 /* Turn erros into warnings with -std=gnu and -std=legacy. */
2434 gfc_errors_to_warnings (1);
2436 if (!gfc_compare_interfaces (sym, def_sym, sym->name, 0, 1,
2437 reason, sizeof(reason), NULL, NULL))
2439 gfc_error ("Interface mismatch in global procedure '%s' at %L: %s ",
2440 sym->name, &sym->declared_at, reason);
2441 goto done;
2444 if (!pedantic
2445 || ((gfc_option.warn_std & GFC_STD_LEGACY)
2446 && !(gfc_option.warn_std & GFC_STD_GNU)))
2447 gfc_errors_to_warnings (1);
2449 if (sym->attr.if_source != IFSRC_IFBODY)
2450 gfc_procedure_use (def_sym, actual, where);
2453 done:
2454 gfc_errors_to_warnings (0);
2456 if (gsym->type == GSYM_UNKNOWN)
2458 gsym->type = type;
2459 gsym->where = *where;
2462 gsym->used = 1;
2466 /************* Function resolution *************/
2468 /* Resolve a function call known to be generic.
2469 Section 14.1.2.4.1. */
2471 static match
2472 resolve_generic_f0 (gfc_expr *expr, gfc_symbol *sym)
2474 gfc_symbol *s;
2476 if (sym->attr.generic)
2478 s = gfc_search_interface (sym->generic, 0, &expr->value.function.actual);
2479 if (s != NULL)
2481 expr->value.function.name = s->name;
2482 expr->value.function.esym = s;
2484 if (s->ts.type != BT_UNKNOWN)
2485 expr->ts = s->ts;
2486 else if (s->result != NULL && s->result->ts.type != BT_UNKNOWN)
2487 expr->ts = s->result->ts;
2489 if (s->as != NULL)
2490 expr->rank = s->as->rank;
2491 else if (s->result != NULL && s->result->as != NULL)
2492 expr->rank = s->result->as->rank;
2494 gfc_set_sym_referenced (expr->value.function.esym);
2496 return MATCH_YES;
2499 /* TODO: Need to search for elemental references in generic
2500 interface. */
2503 if (sym->attr.intrinsic)
2504 return gfc_intrinsic_func_interface (expr, 0);
2506 return MATCH_NO;
2510 static bool
2511 resolve_generic_f (gfc_expr *expr)
2513 gfc_symbol *sym;
2514 match m;
2515 gfc_interface *intr = NULL;
2517 sym = expr->symtree->n.sym;
2519 for (;;)
2521 m = resolve_generic_f0 (expr, sym);
2522 if (m == MATCH_YES)
2523 return true;
2524 else if (m == MATCH_ERROR)
2525 return false;
2527 generic:
2528 if (!intr)
2529 for (intr = sym->generic; intr; intr = intr->next)
2530 if (intr->sym->attr.flavor == FL_DERIVED)
2531 break;
2533 if (sym->ns->parent == NULL)
2534 break;
2535 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
2537 if (sym == NULL)
2538 break;
2539 if (!generic_sym (sym))
2540 goto generic;
2543 /* Last ditch attempt. See if the reference is to an intrinsic
2544 that possesses a matching interface. 14.1.2.4 */
2545 if (sym && !intr && !gfc_is_intrinsic (sym, 0, expr->where))
2547 gfc_error ("There is no specific function for the generic '%s' "
2548 "at %L", expr->symtree->n.sym->name, &expr->where);
2549 return false;
2552 if (intr)
2554 if (!gfc_convert_to_structure_constructor (expr, intr->sym, NULL,
2555 NULL, false))
2556 return false;
2557 return resolve_structure_cons (expr, 0);
2560 m = gfc_intrinsic_func_interface (expr, 0);
2561 if (m == MATCH_YES)
2562 return true;
2564 if (m == MATCH_NO)
2565 gfc_error ("Generic function '%s' at %L is not consistent with a "
2566 "specific intrinsic interface", expr->symtree->n.sym->name,
2567 &expr->where);
2569 return false;
2573 /* Resolve a function call known to be specific. */
2575 static match
2576 resolve_specific_f0 (gfc_symbol *sym, gfc_expr *expr)
2578 match m;
2580 if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
2582 if (sym->attr.dummy)
2584 sym->attr.proc = PROC_DUMMY;
2585 goto found;
2588 sym->attr.proc = PROC_EXTERNAL;
2589 goto found;
2592 if (sym->attr.proc == PROC_MODULE
2593 || sym->attr.proc == PROC_ST_FUNCTION
2594 || sym->attr.proc == PROC_INTERNAL)
2595 goto found;
2597 if (sym->attr.intrinsic)
2599 m = gfc_intrinsic_func_interface (expr, 1);
2600 if (m == MATCH_YES)
2601 return MATCH_YES;
2602 if (m == MATCH_NO)
2603 gfc_error ("Function '%s' at %L is INTRINSIC but is not compatible "
2604 "with an intrinsic", sym->name, &expr->where);
2606 return MATCH_ERROR;
2609 return MATCH_NO;
2611 found:
2612 gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
2614 if (sym->result)
2615 expr->ts = sym->result->ts;
2616 else
2617 expr->ts = sym->ts;
2618 expr->value.function.name = sym->name;
2619 expr->value.function.esym = sym;
2620 if (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as)
2621 expr->rank = CLASS_DATA (sym)->as->rank;
2622 else if (sym->as != NULL)
2623 expr->rank = sym->as->rank;
2625 return MATCH_YES;
2629 static bool
2630 resolve_specific_f (gfc_expr *expr)
2632 gfc_symbol *sym;
2633 match m;
2635 sym = expr->symtree->n.sym;
2637 for (;;)
2639 m = resolve_specific_f0 (sym, expr);
2640 if (m == MATCH_YES)
2641 return true;
2642 if (m == MATCH_ERROR)
2643 return false;
2645 if (sym->ns->parent == NULL)
2646 break;
2648 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
2650 if (sym == NULL)
2651 break;
2654 gfc_error ("Unable to resolve the specific function '%s' at %L",
2655 expr->symtree->n.sym->name, &expr->where);
2657 return true;
2661 /* Resolve a procedure call not known to be generic nor specific. */
2663 static bool
2664 resolve_unknown_f (gfc_expr *expr)
2666 gfc_symbol *sym;
2667 gfc_typespec *ts;
2669 sym = expr->symtree->n.sym;
2671 if (sym->attr.dummy)
2673 sym->attr.proc = PROC_DUMMY;
2674 expr->value.function.name = sym->name;
2675 goto set_type;
2678 /* See if we have an intrinsic function reference. */
2680 if (gfc_is_intrinsic (sym, 0, expr->where))
2682 if (gfc_intrinsic_func_interface (expr, 1) == MATCH_YES)
2683 return true;
2684 return false;
2687 /* The reference is to an external name. */
2689 sym->attr.proc = PROC_EXTERNAL;
2690 expr->value.function.name = sym->name;
2691 expr->value.function.esym = expr->symtree->n.sym;
2693 if (sym->as != NULL)
2694 expr->rank = sym->as->rank;
2696 /* Type of the expression is either the type of the symbol or the
2697 default type of the symbol. */
2699 set_type:
2700 gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
2702 if (sym->ts.type != BT_UNKNOWN)
2703 expr->ts = sym->ts;
2704 else
2706 ts = gfc_get_default_type (sym->name, sym->ns);
2708 if (ts->type == BT_UNKNOWN)
2710 gfc_error ("Function '%s' at %L has no IMPLICIT type",
2711 sym->name, &expr->where);
2712 return false;
2714 else
2715 expr->ts = *ts;
2718 return true;
2722 /* Return true, if the symbol is an external procedure. */
2723 static bool
2724 is_external_proc (gfc_symbol *sym)
2726 if (!sym->attr.dummy && !sym->attr.contained
2727 && !gfc_is_intrinsic (sym, sym->attr.subroutine, sym->declared_at)
2728 && sym->attr.proc != PROC_ST_FUNCTION
2729 && !sym->attr.proc_pointer
2730 && !sym->attr.use_assoc
2731 && sym->name)
2732 return true;
2734 return false;
2738 /* Figure out if a function reference is pure or not. Also set the name
2739 of the function for a potential error message. Return nonzero if the
2740 function is PURE, zero if not. */
2741 static int
2742 pure_stmt_function (gfc_expr *, gfc_symbol *);
2744 static int
2745 pure_function (gfc_expr *e, const char **name)
2747 int pure;
2749 *name = NULL;
2751 if (e->symtree != NULL
2752 && e->symtree->n.sym != NULL
2753 && e->symtree->n.sym->attr.proc == PROC_ST_FUNCTION)
2754 return pure_stmt_function (e, e->symtree->n.sym);
2756 if (e->value.function.esym)
2758 pure = gfc_pure (e->value.function.esym);
2759 *name = e->value.function.esym->name;
2761 else if (e->value.function.isym)
2763 pure = e->value.function.isym->pure
2764 || e->value.function.isym->elemental;
2765 *name = e->value.function.isym->name;
2767 else
2769 /* Implicit functions are not pure. */
2770 pure = 0;
2771 *name = e->value.function.name;
2774 return pure;
2778 static bool
2779 impure_stmt_fcn (gfc_expr *e, gfc_symbol *sym,
2780 int *f ATTRIBUTE_UNUSED)
2782 const char *name;
2784 /* Don't bother recursing into other statement functions
2785 since they will be checked individually for purity. */
2786 if (e->expr_type != EXPR_FUNCTION
2787 || !e->symtree
2788 || e->symtree->n.sym == sym
2789 || e->symtree->n.sym->attr.proc == PROC_ST_FUNCTION)
2790 return false;
2792 return pure_function (e, &name) ? false : true;
2796 static int
2797 pure_stmt_function (gfc_expr *e, gfc_symbol *sym)
2799 return gfc_traverse_expr (e, sym, impure_stmt_fcn, 0) ? 0 : 1;
2803 /* Resolve a function call, which means resolving the arguments, then figuring
2804 out which entity the name refers to. */
2806 static bool
2807 resolve_function (gfc_expr *expr)
2809 gfc_actual_arglist *arg;
2810 gfc_symbol *sym;
2811 const char *name;
2812 bool t;
2813 int temp;
2814 procedure_type p = PROC_INTRINSIC;
2815 bool no_formal_args;
2817 sym = NULL;
2818 if (expr->symtree)
2819 sym = expr->symtree->n.sym;
2821 /* If this is a procedure pointer component, it has already been resolved. */
2822 if (gfc_is_proc_ptr_comp (expr))
2823 return true;
2825 if (sym && sym->attr.intrinsic
2826 && !gfc_resolve_intrinsic (sym, &expr->where))
2827 return false;
2829 if (sym && (sym->attr.flavor == FL_VARIABLE || sym->attr.subroutine))
2831 gfc_error ("'%s' at %L is not a function", sym->name, &expr->where);
2832 return false;
2835 /* If this ia a deferred TBP with an abstract interface (which may
2836 of course be referenced), expr->value.function.esym will be set. */
2837 if (sym && sym->attr.abstract && !expr->value.function.esym)
2839 gfc_error ("ABSTRACT INTERFACE '%s' must not be referenced at %L",
2840 sym->name, &expr->where);
2841 return false;
2844 /* Switch off assumed size checking and do this again for certain kinds
2845 of procedure, once the procedure itself is resolved. */
2846 need_full_assumed_size++;
2848 if (expr->symtree && expr->symtree->n.sym)
2849 p = expr->symtree->n.sym->attr.proc;
2851 if (expr->value.function.isym && expr->value.function.isym->inquiry)
2852 inquiry_argument = true;
2853 no_formal_args = sym && is_external_proc (sym)
2854 && gfc_sym_get_dummy_args (sym) == NULL;
2856 if (!resolve_actual_arglist (expr->value.function.actual,
2857 p, no_formal_args))
2859 inquiry_argument = false;
2860 return false;
2863 inquiry_argument = false;
2865 /* Resume assumed_size checking. */
2866 need_full_assumed_size--;
2868 /* If the procedure is external, check for usage. */
2869 if (sym && is_external_proc (sym))
2870 resolve_global_procedure (sym, &expr->where,
2871 &expr->value.function.actual, 0);
2873 if (sym && sym->ts.type == BT_CHARACTER
2874 && sym->ts.u.cl
2875 && sym->ts.u.cl->length == NULL
2876 && !sym->attr.dummy
2877 && !sym->ts.deferred
2878 && expr->value.function.esym == NULL
2879 && !sym->attr.contained)
2881 /* Internal procedures are taken care of in resolve_contained_fntype. */
2882 gfc_error ("Function '%s' is declared CHARACTER(*) and cannot "
2883 "be used at %L since it is not a dummy argument",
2884 sym->name, &expr->where);
2885 return false;
2888 /* See if function is already resolved. */
2890 if (expr->value.function.name != NULL)
2892 if (expr->ts.type == BT_UNKNOWN)
2893 expr->ts = sym->ts;
2894 t = true;
2896 else
2898 /* Apply the rules of section 14.1.2. */
2900 switch (procedure_kind (sym))
2902 case PTYPE_GENERIC:
2903 t = resolve_generic_f (expr);
2904 break;
2906 case PTYPE_SPECIFIC:
2907 t = resolve_specific_f (expr);
2908 break;
2910 case PTYPE_UNKNOWN:
2911 t = resolve_unknown_f (expr);
2912 break;
2914 default:
2915 gfc_internal_error ("resolve_function(): bad function type");
2919 /* If the expression is still a function (it might have simplified),
2920 then we check to see if we are calling an elemental function. */
2922 if (expr->expr_type != EXPR_FUNCTION)
2923 return t;
2925 temp = need_full_assumed_size;
2926 need_full_assumed_size = 0;
2928 if (!resolve_elemental_actual (expr, NULL))
2929 return false;
2931 if (omp_workshare_flag
2932 && expr->value.function.esym
2933 && ! gfc_elemental (expr->value.function.esym))
2935 gfc_error ("User defined non-ELEMENTAL function '%s' at %L not allowed "
2936 "in WORKSHARE construct", expr->value.function.esym->name,
2937 &expr->where);
2938 t = false;
2941 #define GENERIC_ID expr->value.function.isym->id
2942 else if (expr->value.function.actual != NULL
2943 && expr->value.function.isym != NULL
2944 && GENERIC_ID != GFC_ISYM_LBOUND
2945 && GENERIC_ID != GFC_ISYM_LEN
2946 && GENERIC_ID != GFC_ISYM_LOC
2947 && GENERIC_ID != GFC_ISYM_C_LOC
2948 && GENERIC_ID != GFC_ISYM_PRESENT)
2950 /* Array intrinsics must also have the last upper bound of an
2951 assumed size array argument. UBOUND and SIZE have to be
2952 excluded from the check if the second argument is anything
2953 than a constant. */
2955 for (arg = expr->value.function.actual; arg; arg = arg->next)
2957 if ((GENERIC_ID == GFC_ISYM_UBOUND || GENERIC_ID == GFC_ISYM_SIZE)
2958 && arg == expr->value.function.actual
2959 && arg->next != NULL && arg->next->expr)
2961 if (arg->next->expr->expr_type != EXPR_CONSTANT)
2962 break;
2964 if (arg->next->name && strncmp (arg->next->name, "kind", 4) == 0)
2965 break;
2967 if ((int)mpz_get_si (arg->next->expr->value.integer)
2968 < arg->expr->rank)
2969 break;
2972 if (arg->expr != NULL
2973 && arg->expr->rank > 0
2974 && resolve_assumed_size_actual (arg->expr))
2975 return false;
2978 #undef GENERIC_ID
2980 need_full_assumed_size = temp;
2981 name = NULL;
2983 if (!pure_function (expr, &name) && name)
2985 if (forall_flag)
2987 gfc_error ("Reference to non-PURE function '%s' at %L inside a "
2988 "FORALL %s", name, &expr->where,
2989 forall_flag == 2 ? "mask" : "block");
2990 t = false;
2992 else if (gfc_do_concurrent_flag)
2994 gfc_error ("Reference to non-PURE function '%s' at %L inside a "
2995 "DO CONCURRENT %s", name, &expr->where,
2996 gfc_do_concurrent_flag == 2 ? "mask" : "block");
2997 t = false;
2999 else if (gfc_pure (NULL))
3001 gfc_error ("Function reference to '%s' at %L is to a non-PURE "
3002 "procedure within a PURE procedure", name, &expr->where);
3003 t = false;
3006 gfc_unset_implicit_pure (NULL);
3009 /* Functions without the RECURSIVE attribution are not allowed to
3010 * call themselves. */
3011 if (expr->value.function.esym && !expr->value.function.esym->attr.recursive)
3013 gfc_symbol *esym;
3014 esym = expr->value.function.esym;
3016 if (is_illegal_recursion (esym, gfc_current_ns))
3018 if (esym->attr.entry && esym->ns->entries)
3019 gfc_error ("ENTRY '%s' at %L cannot be called recursively, as"
3020 " function '%s' is not RECURSIVE",
3021 esym->name, &expr->where, esym->ns->entries->sym->name);
3022 else
3023 gfc_error ("Function '%s' at %L cannot be called recursively, as it"
3024 " is not RECURSIVE", esym->name, &expr->where);
3026 t = false;
3030 /* Character lengths of use associated functions may contains references to
3031 symbols not referenced from the current program unit otherwise. Make sure
3032 those symbols are marked as referenced. */
3034 if (expr->ts.type == BT_CHARACTER && expr->value.function.esym
3035 && expr->value.function.esym->attr.use_assoc)
3037 gfc_expr_set_symbols_referenced (expr->ts.u.cl->length);
3040 /* Make sure that the expression has a typespec that works. */
3041 if (expr->ts.type == BT_UNKNOWN)
3043 if (expr->symtree->n.sym->result
3044 && expr->symtree->n.sym->result->ts.type != BT_UNKNOWN
3045 && !expr->symtree->n.sym->result->attr.proc_pointer)
3046 expr->ts = expr->symtree->n.sym->result->ts;
3049 return t;
3053 /************* Subroutine resolution *************/
3055 static void
3056 pure_subroutine (gfc_code *c, gfc_symbol *sym)
3058 if (gfc_pure (sym))
3059 return;
3061 if (forall_flag)
3062 gfc_error ("Subroutine call to '%s' in FORALL block at %L is not PURE",
3063 sym->name, &c->loc);
3064 else if (gfc_do_concurrent_flag)
3065 gfc_error ("Subroutine call to '%s' in DO CONCURRENT block at %L is not "
3066 "PURE", sym->name, &c->loc);
3067 else if (gfc_pure (NULL))
3068 gfc_error ("Subroutine call to '%s' at %L is not PURE", sym->name,
3069 &c->loc);
3071 gfc_unset_implicit_pure (NULL);
3075 static match
3076 resolve_generic_s0 (gfc_code *c, gfc_symbol *sym)
3078 gfc_symbol *s;
3080 if (sym->attr.generic)
3082 s = gfc_search_interface (sym->generic, 1, &c->ext.actual);
3083 if (s != NULL)
3085 c->resolved_sym = s;
3086 pure_subroutine (c, s);
3087 return MATCH_YES;
3090 /* TODO: Need to search for elemental references in generic interface. */
3093 if (sym->attr.intrinsic)
3094 return gfc_intrinsic_sub_interface (c, 0);
3096 return MATCH_NO;
3100 static bool
3101 resolve_generic_s (gfc_code *c)
3103 gfc_symbol *sym;
3104 match m;
3106 sym = c->symtree->n.sym;
3108 for (;;)
3110 m = resolve_generic_s0 (c, sym);
3111 if (m == MATCH_YES)
3112 return true;
3113 else if (m == MATCH_ERROR)
3114 return false;
3116 generic:
3117 if (sym->ns->parent == NULL)
3118 break;
3119 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
3121 if (sym == NULL)
3122 break;
3123 if (!generic_sym (sym))
3124 goto generic;
3127 /* Last ditch attempt. See if the reference is to an intrinsic
3128 that possesses a matching interface. 14.1.2.4 */
3129 sym = c->symtree->n.sym;
3131 if (!gfc_is_intrinsic (sym, 1, c->loc))
3133 gfc_error ("There is no specific subroutine for the generic '%s' at %L",
3134 sym->name, &c->loc);
3135 return false;
3138 m = gfc_intrinsic_sub_interface (c, 0);
3139 if (m == MATCH_YES)
3140 return true;
3141 if (m == MATCH_NO)
3142 gfc_error ("Generic subroutine '%s' at %L is not consistent with an "
3143 "intrinsic subroutine interface", sym->name, &c->loc);
3145 return false;
3149 /* Resolve a subroutine call known to be specific. */
3151 static match
3152 resolve_specific_s0 (gfc_code *c, gfc_symbol *sym)
3154 match m;
3156 if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
3158 if (sym->attr.dummy)
3160 sym->attr.proc = PROC_DUMMY;
3161 goto found;
3164 sym->attr.proc = PROC_EXTERNAL;
3165 goto found;
3168 if (sym->attr.proc == PROC_MODULE || sym->attr.proc == PROC_INTERNAL)
3169 goto found;
3171 if (sym->attr.intrinsic)
3173 m = gfc_intrinsic_sub_interface (c, 1);
3174 if (m == MATCH_YES)
3175 return MATCH_YES;
3176 if (m == MATCH_NO)
3177 gfc_error ("Subroutine '%s' at %L is INTRINSIC but is not compatible "
3178 "with an intrinsic", sym->name, &c->loc);
3180 return MATCH_ERROR;
3183 return MATCH_NO;
3185 found:
3186 gfc_procedure_use (sym, &c->ext.actual, &c->loc);
3188 c->resolved_sym = sym;
3189 pure_subroutine (c, sym);
3191 return MATCH_YES;
3195 static bool
3196 resolve_specific_s (gfc_code *c)
3198 gfc_symbol *sym;
3199 match m;
3201 sym = c->symtree->n.sym;
3203 for (;;)
3205 m = resolve_specific_s0 (c, sym);
3206 if (m == MATCH_YES)
3207 return true;
3208 if (m == MATCH_ERROR)
3209 return false;
3211 if (sym->ns->parent == NULL)
3212 break;
3214 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
3216 if (sym == NULL)
3217 break;
3220 sym = c->symtree->n.sym;
3221 gfc_error ("Unable to resolve the specific subroutine '%s' at %L",
3222 sym->name, &c->loc);
3224 return false;
3228 /* Resolve a subroutine call not known to be generic nor specific. */
3230 static bool
3231 resolve_unknown_s (gfc_code *c)
3233 gfc_symbol *sym;
3235 sym = c->symtree->n.sym;
3237 if (sym->attr.dummy)
3239 sym->attr.proc = PROC_DUMMY;
3240 goto found;
3243 /* See if we have an intrinsic function reference. */
3245 if (gfc_is_intrinsic (sym, 1, c->loc))
3247 if (gfc_intrinsic_sub_interface (c, 1) == MATCH_YES)
3248 return true;
3249 return false;
3252 /* The reference is to an external name. */
3254 found:
3255 gfc_procedure_use (sym, &c->ext.actual, &c->loc);
3257 c->resolved_sym = sym;
3259 pure_subroutine (c, sym);
3261 return true;
3265 /* Resolve a subroutine call. Although it was tempting to use the same code
3266 for functions, subroutines and functions are stored differently and this
3267 makes things awkward. */
3269 static bool
3270 resolve_call (gfc_code *c)
3272 bool t;
3273 procedure_type ptype = PROC_INTRINSIC;
3274 gfc_symbol *csym, *sym;
3275 bool no_formal_args;
3277 csym = c->symtree ? c->symtree->n.sym : NULL;
3279 if (csym && csym->ts.type != BT_UNKNOWN)
3281 gfc_error ("'%s' at %L has a type, which is not consistent with "
3282 "the CALL at %L", csym->name, &csym->declared_at, &c->loc);
3283 return false;
3286 if (csym && gfc_current_ns->parent && csym->ns != gfc_current_ns)
3288 gfc_symtree *st;
3289 gfc_find_sym_tree (c->symtree->name, gfc_current_ns, 1, &st);
3290 sym = st ? st->n.sym : NULL;
3291 if (sym && csym != sym
3292 && sym->ns == gfc_current_ns
3293 && sym->attr.flavor == FL_PROCEDURE
3294 && sym->attr.contained)
3296 sym->refs++;
3297 if (csym->attr.generic)
3298 c->symtree->n.sym = sym;
3299 else
3300 c->symtree = st;
3301 csym = c->symtree->n.sym;
3305 /* If this ia a deferred TBP, c->expr1 will be set. */
3306 if (!c->expr1 && csym)
3308 if (csym->attr.abstract)
3310 gfc_error ("ABSTRACT INTERFACE '%s' must not be referenced at %L",
3311 csym->name, &c->loc);
3312 return false;
3315 /* Subroutines without the RECURSIVE attribution are not allowed to
3316 call themselves. */
3317 if (is_illegal_recursion (csym, gfc_current_ns))
3319 if (csym->attr.entry && csym->ns->entries)
3320 gfc_error ("ENTRY '%s' at %L cannot be called recursively, "
3321 "as subroutine '%s' is not RECURSIVE",
3322 csym->name, &c->loc, csym->ns->entries->sym->name);
3323 else
3324 gfc_error ("SUBROUTINE '%s' at %L cannot be called recursively, "
3325 "as it is not RECURSIVE", csym->name, &c->loc);
3327 t = false;
3331 /* Switch off assumed size checking and do this again for certain kinds
3332 of procedure, once the procedure itself is resolved. */
3333 need_full_assumed_size++;
3335 if (csym)
3336 ptype = csym->attr.proc;
3338 no_formal_args = csym && is_external_proc (csym)
3339 && gfc_sym_get_dummy_args (csym) == NULL;
3340 if (!resolve_actual_arglist (c->ext.actual, ptype, no_formal_args))
3341 return false;
3343 /* Resume assumed_size checking. */
3344 need_full_assumed_size--;
3346 /* If external, check for usage. */
3347 if (csym && is_external_proc (csym))
3348 resolve_global_procedure (csym, &c->loc, &c->ext.actual, 1);
3350 t = true;
3351 if (c->resolved_sym == NULL)
3353 c->resolved_isym = NULL;
3354 switch (procedure_kind (csym))
3356 case PTYPE_GENERIC:
3357 t = resolve_generic_s (c);
3358 break;
3360 case PTYPE_SPECIFIC:
3361 t = resolve_specific_s (c);
3362 break;
3364 case PTYPE_UNKNOWN:
3365 t = resolve_unknown_s (c);
3366 break;
3368 default:
3369 gfc_internal_error ("resolve_subroutine(): bad function type");
3373 /* Some checks of elemental subroutine actual arguments. */
3374 if (!resolve_elemental_actual (NULL, c))
3375 return false;
3377 return t;
3381 /* Compare the shapes of two arrays that have non-NULL shapes. If both
3382 op1->shape and op2->shape are non-NULL return true if their shapes
3383 match. If both op1->shape and op2->shape are non-NULL return false
3384 if their shapes do not match. If either op1->shape or op2->shape is
3385 NULL, return true. */
3387 static bool
3388 compare_shapes (gfc_expr *op1, gfc_expr *op2)
3390 bool t;
3391 int i;
3393 t = true;
3395 if (op1->shape != NULL && op2->shape != NULL)
3397 for (i = 0; i < op1->rank; i++)
3399 if (mpz_cmp (op1->shape[i], op2->shape[i]) != 0)
3401 gfc_error ("Shapes for operands at %L and %L are not conformable",
3402 &op1->where, &op2->where);
3403 t = false;
3404 break;
3409 return t;
3413 /* Resolve an operator expression node. This can involve replacing the
3414 operation with a user defined function call. */
3416 static bool
3417 resolve_operator (gfc_expr *e)
3419 gfc_expr *op1, *op2;
3420 char msg[200];
3421 bool dual_locus_error;
3422 bool t;
3424 /* Resolve all subnodes-- give them types. */
3426 switch (e->value.op.op)
3428 default:
3429 if (!gfc_resolve_expr (e->value.op.op2))
3430 return false;
3432 /* Fall through... */
3434 case INTRINSIC_NOT:
3435 case INTRINSIC_UPLUS:
3436 case INTRINSIC_UMINUS:
3437 case INTRINSIC_PARENTHESES:
3438 if (!gfc_resolve_expr (e->value.op.op1))
3439 return false;
3440 break;
3443 /* Typecheck the new node. */
3445 op1 = e->value.op.op1;
3446 op2 = e->value.op.op2;
3447 dual_locus_error = false;
3449 if ((op1 && op1->expr_type == EXPR_NULL)
3450 || (op2 && op2->expr_type == EXPR_NULL))
3452 sprintf (msg, _("Invalid context for NULL() pointer at %%L"));
3453 goto bad_op;
3456 switch (e->value.op.op)
3458 case INTRINSIC_UPLUS:
3459 case INTRINSIC_UMINUS:
3460 if (op1->ts.type == BT_INTEGER
3461 || op1->ts.type == BT_REAL
3462 || op1->ts.type == BT_COMPLEX)
3464 e->ts = op1->ts;
3465 break;
3468 sprintf (msg, _("Operand of unary numeric operator '%s' at %%L is %s"),
3469 gfc_op2string (e->value.op.op), gfc_typename (&e->ts));
3470 goto bad_op;
3472 case INTRINSIC_PLUS:
3473 case INTRINSIC_MINUS:
3474 case INTRINSIC_TIMES:
3475 case INTRINSIC_DIVIDE:
3476 case INTRINSIC_POWER:
3477 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
3479 gfc_type_convert_binary (e, 1);
3480 break;
3483 sprintf (msg,
3484 _("Operands of binary numeric operator '%s' at %%L are %s/%s"),
3485 gfc_op2string (e->value.op.op), gfc_typename (&op1->ts),
3486 gfc_typename (&op2->ts));
3487 goto bad_op;
3489 case INTRINSIC_CONCAT:
3490 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
3491 && op1->ts.kind == op2->ts.kind)
3493 e->ts.type = BT_CHARACTER;
3494 e->ts.kind = op1->ts.kind;
3495 break;
3498 sprintf (msg,
3499 _("Operands of string concatenation operator at %%L are %s/%s"),
3500 gfc_typename (&op1->ts), gfc_typename (&op2->ts));
3501 goto bad_op;
3503 case INTRINSIC_AND:
3504 case INTRINSIC_OR:
3505 case INTRINSIC_EQV:
3506 case INTRINSIC_NEQV:
3507 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
3509 e->ts.type = BT_LOGICAL;
3510 e->ts.kind = gfc_kind_max (op1, op2);
3511 if (op1->ts.kind < e->ts.kind)
3512 gfc_convert_type (op1, &e->ts, 2);
3513 else if (op2->ts.kind < e->ts.kind)
3514 gfc_convert_type (op2, &e->ts, 2);
3515 break;
3518 sprintf (msg, _("Operands of logical operator '%s' at %%L are %s/%s"),
3519 gfc_op2string (e->value.op.op), gfc_typename (&op1->ts),
3520 gfc_typename (&op2->ts));
3522 goto bad_op;
3524 case INTRINSIC_NOT:
3525 if (op1->ts.type == BT_LOGICAL)
3527 e->ts.type = BT_LOGICAL;
3528 e->ts.kind = op1->ts.kind;
3529 break;
3532 sprintf (msg, _("Operand of .not. operator at %%L is %s"),
3533 gfc_typename (&op1->ts));
3534 goto bad_op;
3536 case INTRINSIC_GT:
3537 case INTRINSIC_GT_OS:
3538 case INTRINSIC_GE:
3539 case INTRINSIC_GE_OS:
3540 case INTRINSIC_LT:
3541 case INTRINSIC_LT_OS:
3542 case INTRINSIC_LE:
3543 case INTRINSIC_LE_OS:
3544 if (op1->ts.type == BT_COMPLEX || op2->ts.type == BT_COMPLEX)
3546 strcpy (msg, _("COMPLEX quantities cannot be compared at %L"));
3547 goto bad_op;
3550 /* Fall through... */
3552 case INTRINSIC_EQ:
3553 case INTRINSIC_EQ_OS:
3554 case INTRINSIC_NE:
3555 case INTRINSIC_NE_OS:
3556 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
3557 && op1->ts.kind == op2->ts.kind)
3559 e->ts.type = BT_LOGICAL;
3560 e->ts.kind = gfc_default_logical_kind;
3561 break;
3564 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
3566 gfc_type_convert_binary (e, 1);
3568 e->ts.type = BT_LOGICAL;
3569 e->ts.kind = gfc_default_logical_kind;
3571 if (gfc_option.warn_compare_reals)
3573 gfc_intrinsic_op op = e->value.op.op;
3575 /* Type conversion has made sure that the types of op1 and op2
3576 agree, so it is only necessary to check the first one. */
3577 if ((op1->ts.type == BT_REAL || op1->ts.type == BT_COMPLEX)
3578 && (op == INTRINSIC_EQ || op == INTRINSIC_EQ_OS
3579 || op == INTRINSIC_NE || op == INTRINSIC_NE_OS))
3581 const char *msg;
3583 if (op == INTRINSIC_EQ || op == INTRINSIC_EQ_OS)
3584 msg = "Equality comparison for %s at %L";
3585 else
3586 msg = "Inequality comparison for %s at %L";
3588 gfc_warning (msg, gfc_typename (&op1->ts), &op1->where);
3592 break;
3595 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
3596 sprintf (msg,
3597 _("Logicals at %%L must be compared with %s instead of %s"),
3598 (e->value.op.op == INTRINSIC_EQ
3599 || e->value.op.op == INTRINSIC_EQ_OS)
3600 ? ".eqv." : ".neqv.", gfc_op2string (e->value.op.op));
3601 else
3602 sprintf (msg,
3603 _("Operands of comparison operator '%s' at %%L are %s/%s"),
3604 gfc_op2string (e->value.op.op), gfc_typename (&op1->ts),
3605 gfc_typename (&op2->ts));
3607 goto bad_op;
3609 case INTRINSIC_USER:
3610 if (e->value.op.uop->op == NULL)
3611 sprintf (msg, _("Unknown operator '%s' at %%L"), e->value.op.uop->name);
3612 else if (op2 == NULL)
3613 sprintf (msg, _("Operand of user operator '%s' at %%L is %s"),
3614 e->value.op.uop->name, gfc_typename (&op1->ts));
3615 else
3617 sprintf (msg, _("Operands of user operator '%s' at %%L are %s/%s"),
3618 e->value.op.uop->name, gfc_typename (&op1->ts),
3619 gfc_typename (&op2->ts));
3620 e->value.op.uop->op->sym->attr.referenced = 1;
3623 goto bad_op;
3625 case INTRINSIC_PARENTHESES:
3626 e->ts = op1->ts;
3627 if (e->ts.type == BT_CHARACTER)
3628 e->ts.u.cl = op1->ts.u.cl;
3629 break;
3631 default:
3632 gfc_internal_error ("resolve_operator(): Bad intrinsic");
3635 /* Deal with arrayness of an operand through an operator. */
3637 t = true;
3639 switch (e->value.op.op)
3641 case INTRINSIC_PLUS:
3642 case INTRINSIC_MINUS:
3643 case INTRINSIC_TIMES:
3644 case INTRINSIC_DIVIDE:
3645 case INTRINSIC_POWER:
3646 case INTRINSIC_CONCAT:
3647 case INTRINSIC_AND:
3648 case INTRINSIC_OR:
3649 case INTRINSIC_EQV:
3650 case INTRINSIC_NEQV:
3651 case INTRINSIC_EQ:
3652 case INTRINSIC_EQ_OS:
3653 case INTRINSIC_NE:
3654 case INTRINSIC_NE_OS:
3655 case INTRINSIC_GT:
3656 case INTRINSIC_GT_OS:
3657 case INTRINSIC_GE:
3658 case INTRINSIC_GE_OS:
3659 case INTRINSIC_LT:
3660 case INTRINSIC_LT_OS:
3661 case INTRINSIC_LE:
3662 case INTRINSIC_LE_OS:
3664 if (op1->rank == 0 && op2->rank == 0)
3665 e->rank = 0;
3667 if (op1->rank == 0 && op2->rank != 0)
3669 e->rank = op2->rank;
3671 if (e->shape == NULL)
3672 e->shape = gfc_copy_shape (op2->shape, op2->rank);
3675 if (op1->rank != 0 && op2->rank == 0)
3677 e->rank = op1->rank;
3679 if (e->shape == NULL)
3680 e->shape = gfc_copy_shape (op1->shape, op1->rank);
3683 if (op1->rank != 0 && op2->rank != 0)
3685 if (op1->rank == op2->rank)
3687 e->rank = op1->rank;
3688 if (e->shape == NULL)
3690 t = compare_shapes (op1, op2);
3691 if (!t)
3692 e->shape = NULL;
3693 else
3694 e->shape = gfc_copy_shape (op1->shape, op1->rank);
3697 else
3699 /* Allow higher level expressions to work. */
3700 e->rank = 0;
3702 /* Try user-defined operators, and otherwise throw an error. */
3703 dual_locus_error = true;
3704 sprintf (msg,
3705 _("Inconsistent ranks for operator at %%L and %%L"));
3706 goto bad_op;
3710 break;
3712 case INTRINSIC_PARENTHESES:
3713 case INTRINSIC_NOT:
3714 case INTRINSIC_UPLUS:
3715 case INTRINSIC_UMINUS:
3716 /* Simply copy arrayness attribute */
3717 e->rank = op1->rank;
3719 if (e->shape == NULL)
3720 e->shape = gfc_copy_shape (op1->shape, op1->rank);
3722 break;
3724 default:
3725 break;
3728 /* Attempt to simplify the expression. */
3729 if (t)
3731 t = gfc_simplify_expr (e, 0);
3732 /* Some calls do not succeed in simplification and return false
3733 even though there is no error; e.g. variable references to
3734 PARAMETER arrays. */
3735 if (!gfc_is_constant_expr (e))
3736 t = true;
3738 return t;
3740 bad_op:
3743 match m = gfc_extend_expr (e);
3744 if (m == MATCH_YES)
3745 return true;
3746 if (m == MATCH_ERROR)
3747 return false;
3750 if (dual_locus_error)
3751 gfc_error (msg, &op1->where, &op2->where);
3752 else
3753 gfc_error (msg, &e->where);
3755 return false;
3759 /************** Array resolution subroutines **************/
3761 typedef enum
3762 { CMP_LT, CMP_EQ, CMP_GT, CMP_UNKNOWN }
3763 comparison;
3765 /* Compare two integer expressions. */
3767 static comparison
3768 compare_bound (gfc_expr *a, gfc_expr *b)
3770 int i;
3772 if (a == NULL || a->expr_type != EXPR_CONSTANT
3773 || b == NULL || b->expr_type != EXPR_CONSTANT)
3774 return CMP_UNKNOWN;
3776 /* If either of the types isn't INTEGER, we must have
3777 raised an error earlier. */
3779 if (a->ts.type != BT_INTEGER || b->ts.type != BT_INTEGER)
3780 return CMP_UNKNOWN;
3782 i = mpz_cmp (a->value.integer, b->value.integer);
3784 if (i < 0)
3785 return CMP_LT;
3786 if (i > 0)
3787 return CMP_GT;
3788 return CMP_EQ;
3792 /* Compare an integer expression with an integer. */
3794 static comparison
3795 compare_bound_int (gfc_expr *a, int b)
3797 int i;
3799 if (a == NULL || a->expr_type != EXPR_CONSTANT)
3800 return CMP_UNKNOWN;
3802 if (a->ts.type != BT_INTEGER)
3803 gfc_internal_error ("compare_bound_int(): Bad expression");
3805 i = mpz_cmp_si (a->value.integer, b);
3807 if (i < 0)
3808 return CMP_LT;
3809 if (i > 0)
3810 return CMP_GT;
3811 return CMP_EQ;
3815 /* Compare an integer expression with a mpz_t. */
3817 static comparison
3818 compare_bound_mpz_t (gfc_expr *a, mpz_t b)
3820 int i;
3822 if (a == NULL || a->expr_type != EXPR_CONSTANT)
3823 return CMP_UNKNOWN;
3825 if (a->ts.type != BT_INTEGER)
3826 gfc_internal_error ("compare_bound_int(): Bad expression");
3828 i = mpz_cmp (a->value.integer, b);
3830 if (i < 0)
3831 return CMP_LT;
3832 if (i > 0)
3833 return CMP_GT;
3834 return CMP_EQ;
3838 /* Compute the last value of a sequence given by a triplet.
3839 Return 0 if it wasn't able to compute the last value, or if the
3840 sequence if empty, and 1 otherwise. */
3842 static int
3843 compute_last_value_for_triplet (gfc_expr *start, gfc_expr *end,
3844 gfc_expr *stride, mpz_t last)
3846 mpz_t rem;
3848 if (start == NULL || start->expr_type != EXPR_CONSTANT
3849 || end == NULL || end->expr_type != EXPR_CONSTANT
3850 || (stride != NULL && stride->expr_type != EXPR_CONSTANT))
3851 return 0;
3853 if (start->ts.type != BT_INTEGER || end->ts.type != BT_INTEGER
3854 || (stride != NULL && stride->ts.type != BT_INTEGER))
3855 return 0;
3857 if (stride == NULL || compare_bound_int (stride, 1) == CMP_EQ)
3859 if (compare_bound (start, end) == CMP_GT)
3860 return 0;
3861 mpz_set (last, end->value.integer);
3862 return 1;
3865 if (compare_bound_int (stride, 0) == CMP_GT)
3867 /* Stride is positive */
3868 if (mpz_cmp (start->value.integer, end->value.integer) > 0)
3869 return 0;
3871 else
3873 /* Stride is negative */
3874 if (mpz_cmp (start->value.integer, end->value.integer) < 0)
3875 return 0;
3878 mpz_init (rem);
3879 mpz_sub (rem, end->value.integer, start->value.integer);
3880 mpz_tdiv_r (rem, rem, stride->value.integer);
3881 mpz_sub (last, end->value.integer, rem);
3882 mpz_clear (rem);
3884 return 1;
3888 /* Compare a single dimension of an array reference to the array
3889 specification. */
3891 static bool
3892 check_dimension (int i, gfc_array_ref *ar, gfc_array_spec *as)
3894 mpz_t last_value;
3896 if (ar->dimen_type[i] == DIMEN_STAR)
3898 gcc_assert (ar->stride[i] == NULL);
3899 /* This implies [*] as [*:] and [*:3] are not possible. */
3900 if (ar->start[i] == NULL)
3902 gcc_assert (ar->end[i] == NULL);
3903 return true;
3907 /* Given start, end and stride values, calculate the minimum and
3908 maximum referenced indexes. */
3910 switch (ar->dimen_type[i])
3912 case DIMEN_VECTOR:
3913 case DIMEN_THIS_IMAGE:
3914 break;
3916 case DIMEN_STAR:
3917 case DIMEN_ELEMENT:
3918 if (compare_bound (ar->start[i], as->lower[i]) == CMP_LT)
3920 if (i < as->rank)
3921 gfc_warning ("Array reference at %L is out of bounds "
3922 "(%ld < %ld) in dimension %d", &ar->c_where[i],
3923 mpz_get_si (ar->start[i]->value.integer),
3924 mpz_get_si (as->lower[i]->value.integer), i+1);
3925 else
3926 gfc_warning ("Array reference at %L is out of bounds "
3927 "(%ld < %ld) in codimension %d", &ar->c_where[i],
3928 mpz_get_si (ar->start[i]->value.integer),
3929 mpz_get_si (as->lower[i]->value.integer),
3930 i + 1 - as->rank);
3931 return true;
3933 if (compare_bound (ar->start[i], as->upper[i]) == CMP_GT)
3935 if (i < as->rank)
3936 gfc_warning ("Array reference at %L is out of bounds "
3937 "(%ld > %ld) in dimension %d", &ar->c_where[i],
3938 mpz_get_si (ar->start[i]->value.integer),
3939 mpz_get_si (as->upper[i]->value.integer), i+1);
3940 else
3941 gfc_warning ("Array reference at %L is out of bounds "
3942 "(%ld > %ld) in codimension %d", &ar->c_where[i],
3943 mpz_get_si (ar->start[i]->value.integer),
3944 mpz_get_si (as->upper[i]->value.integer),
3945 i + 1 - as->rank);
3946 return true;
3949 break;
3951 case DIMEN_RANGE:
3953 #define AR_START (ar->start[i] ? ar->start[i] : as->lower[i])
3954 #define AR_END (ar->end[i] ? ar->end[i] : as->upper[i])
3956 comparison comp_start_end = compare_bound (AR_START, AR_END);
3958 /* Check for zero stride, which is not allowed. */
3959 if (compare_bound_int (ar->stride[i], 0) == CMP_EQ)
3961 gfc_error ("Illegal stride of zero at %L", &ar->c_where[i]);
3962 return false;
3965 /* if start == len || (stride > 0 && start < len)
3966 || (stride < 0 && start > len),
3967 then the array section contains at least one element. In this
3968 case, there is an out-of-bounds access if
3969 (start < lower || start > upper). */
3970 if (compare_bound (AR_START, AR_END) == CMP_EQ
3971 || ((compare_bound_int (ar->stride[i], 0) == CMP_GT
3972 || ar->stride[i] == NULL) && comp_start_end == CMP_LT)
3973 || (compare_bound_int (ar->stride[i], 0) == CMP_LT
3974 && comp_start_end == CMP_GT))
3976 if (compare_bound (AR_START, as->lower[i]) == CMP_LT)
3978 gfc_warning ("Lower array reference at %L is out of bounds "
3979 "(%ld < %ld) in dimension %d", &ar->c_where[i],
3980 mpz_get_si (AR_START->value.integer),
3981 mpz_get_si (as->lower[i]->value.integer), i+1);
3982 return true;
3984 if (compare_bound (AR_START, as->upper[i]) == CMP_GT)
3986 gfc_warning ("Lower array reference at %L is out of bounds "
3987 "(%ld > %ld) in dimension %d", &ar->c_where[i],
3988 mpz_get_si (AR_START->value.integer),
3989 mpz_get_si (as->upper[i]->value.integer), i+1);
3990 return true;
3994 /* If we can compute the highest index of the array section,
3995 then it also has to be between lower and upper. */
3996 mpz_init (last_value);
3997 if (compute_last_value_for_triplet (AR_START, AR_END, ar->stride[i],
3998 last_value))
4000 if (compare_bound_mpz_t (as->lower[i], last_value) == CMP_GT)
4002 gfc_warning ("Upper array reference at %L is out of bounds "
4003 "(%ld < %ld) in dimension %d", &ar->c_where[i],
4004 mpz_get_si (last_value),
4005 mpz_get_si (as->lower[i]->value.integer), i+1);
4006 mpz_clear (last_value);
4007 return true;
4009 if (compare_bound_mpz_t (as->upper[i], last_value) == CMP_LT)
4011 gfc_warning ("Upper array reference at %L is out of bounds "
4012 "(%ld > %ld) in dimension %d", &ar->c_where[i],
4013 mpz_get_si (last_value),
4014 mpz_get_si (as->upper[i]->value.integer), i+1);
4015 mpz_clear (last_value);
4016 return true;
4019 mpz_clear (last_value);
4021 #undef AR_START
4022 #undef AR_END
4024 break;
4026 default:
4027 gfc_internal_error ("check_dimension(): Bad array reference");
4030 return true;
4034 /* Compare an array reference with an array specification. */
4036 static bool
4037 compare_spec_to_ref (gfc_array_ref *ar)
4039 gfc_array_spec *as;
4040 int i;
4042 as = ar->as;
4043 i = as->rank - 1;
4044 /* TODO: Full array sections are only allowed as actual parameters. */
4045 if (as->type == AS_ASSUMED_SIZE
4046 && (/*ar->type == AR_FULL
4047 ||*/ (ar->type == AR_SECTION
4048 && ar->dimen_type[i] == DIMEN_RANGE && ar->end[i] == NULL)))
4050 gfc_error ("Rightmost upper bound of assumed size array section "
4051 "not specified at %L", &ar->where);
4052 return false;
4055 if (ar->type == AR_FULL)
4056 return true;
4058 if (as->rank != ar->dimen)
4060 gfc_error ("Rank mismatch in array reference at %L (%d/%d)",
4061 &ar->where, ar->dimen, as->rank);
4062 return false;
4065 /* ar->codimen == 0 is a local array. */
4066 if (as->corank != ar->codimen && ar->codimen != 0)
4068 gfc_error ("Coindex rank mismatch in array reference at %L (%d/%d)",
4069 &ar->where, ar->codimen, as->corank);
4070 return false;
4073 for (i = 0; i < as->rank; i++)
4074 if (!check_dimension (i, ar, as))
4075 return false;
4077 /* Local access has no coarray spec. */
4078 if (ar->codimen != 0)
4079 for (i = as->rank; i < as->rank + as->corank; i++)
4081 if (ar->dimen_type[i] != DIMEN_ELEMENT && !ar->in_allocate
4082 && ar->dimen_type[i] != DIMEN_THIS_IMAGE)
4084 gfc_error ("Coindex of codimension %d must be a scalar at %L",
4085 i + 1 - as->rank, &ar->where);
4086 return false;
4088 if (!check_dimension (i, ar, as))
4089 return false;
4092 return true;
4096 /* Resolve one part of an array index. */
4098 static bool
4099 gfc_resolve_index_1 (gfc_expr *index, int check_scalar,
4100 int force_index_integer_kind)
4102 gfc_typespec ts;
4104 if (index == NULL)
4105 return true;
4107 if (!gfc_resolve_expr (index))
4108 return false;
4110 if (check_scalar && index->rank != 0)
4112 gfc_error ("Array index at %L must be scalar", &index->where);
4113 return false;
4116 if (index->ts.type != BT_INTEGER && index->ts.type != BT_REAL)
4118 gfc_error ("Array index at %L must be of INTEGER type, found %s",
4119 &index->where, gfc_basic_typename (index->ts.type));
4120 return false;
4123 if (index->ts.type == BT_REAL)
4124 if (!gfc_notify_std (GFC_STD_LEGACY, "REAL array index at %L",
4125 &index->where))
4126 return false;
4128 if ((index->ts.kind != gfc_index_integer_kind
4129 && force_index_integer_kind)
4130 || index->ts.type != BT_INTEGER)
4132 gfc_clear_ts (&ts);
4133 ts.type = BT_INTEGER;
4134 ts.kind = gfc_index_integer_kind;
4136 gfc_convert_type_warn (index, &ts, 2, 0);
4139 return true;
4142 /* Resolve one part of an array index. */
4144 bool
4145 gfc_resolve_index (gfc_expr *index, int check_scalar)
4147 return gfc_resolve_index_1 (index, check_scalar, 1);
4150 /* Resolve a dim argument to an intrinsic function. */
4152 bool
4153 gfc_resolve_dim_arg (gfc_expr *dim)
4155 if (dim == NULL)
4156 return true;
4158 if (!gfc_resolve_expr (dim))
4159 return false;
4161 if (dim->rank != 0)
4163 gfc_error ("Argument dim at %L must be scalar", &dim->where);
4164 return false;
4168 if (dim->ts.type != BT_INTEGER)
4170 gfc_error ("Argument dim at %L must be of INTEGER type", &dim->where);
4171 return false;
4174 if (dim->ts.kind != gfc_index_integer_kind)
4176 gfc_typespec ts;
4178 gfc_clear_ts (&ts);
4179 ts.type = BT_INTEGER;
4180 ts.kind = gfc_index_integer_kind;
4182 gfc_convert_type_warn (dim, &ts, 2, 0);
4185 return true;
4188 /* Given an expression that contains array references, update those array
4189 references to point to the right array specifications. While this is
4190 filled in during matching, this information is difficult to save and load
4191 in a module, so we take care of it here.
4193 The idea here is that the original array reference comes from the
4194 base symbol. We traverse the list of reference structures, setting
4195 the stored reference to references. Component references can
4196 provide an additional array specification. */
4198 static void
4199 find_array_spec (gfc_expr *e)
4201 gfc_array_spec *as;
4202 gfc_component *c;
4203 gfc_ref *ref;
4205 if (e->symtree->n.sym->ts.type == BT_CLASS)
4206 as = CLASS_DATA (e->symtree->n.sym)->as;
4207 else
4208 as = e->symtree->n.sym->as;
4210 for (ref = e->ref; ref; ref = ref->next)
4211 switch (ref->type)
4213 case REF_ARRAY:
4214 if (as == NULL)
4215 gfc_internal_error ("find_array_spec(): Missing spec");
4217 ref->u.ar.as = as;
4218 as = NULL;
4219 break;
4221 case REF_COMPONENT:
4222 c = ref->u.c.component;
4223 if (c->attr.dimension)
4225 if (as != NULL)
4226 gfc_internal_error ("find_array_spec(): unused as(1)");
4227 as = c->as;
4230 break;
4232 case REF_SUBSTRING:
4233 break;
4236 if (as != NULL)
4237 gfc_internal_error ("find_array_spec(): unused as(2)");
4241 /* Resolve an array reference. */
4243 static bool
4244 resolve_array_ref (gfc_array_ref *ar)
4246 int i, check_scalar;
4247 gfc_expr *e;
4249 for (i = 0; i < ar->dimen + ar->codimen; i++)
4251 check_scalar = ar->dimen_type[i] == DIMEN_RANGE;
4253 /* Do not force gfc_index_integer_kind for the start. We can
4254 do fine with any integer kind. This avoids temporary arrays
4255 created for indexing with a vector. */
4256 if (!gfc_resolve_index_1 (ar->start[i], check_scalar, 0))
4257 return false;
4258 if (!gfc_resolve_index (ar->end[i], check_scalar))
4259 return false;
4260 if (!gfc_resolve_index (ar->stride[i], check_scalar))
4261 return false;
4263 e = ar->start[i];
4265 if (ar->dimen_type[i] == DIMEN_UNKNOWN)
4266 switch (e->rank)
4268 case 0:
4269 ar->dimen_type[i] = DIMEN_ELEMENT;
4270 break;
4272 case 1:
4273 ar->dimen_type[i] = DIMEN_VECTOR;
4274 if (e->expr_type == EXPR_VARIABLE
4275 && e->symtree->n.sym->ts.type == BT_DERIVED)
4276 ar->start[i] = gfc_get_parentheses (e);
4277 break;
4279 default:
4280 gfc_error ("Array index at %L is an array of rank %d",
4281 &ar->c_where[i], e->rank);
4282 return false;
4285 /* Fill in the upper bound, which may be lower than the
4286 specified one for something like a(2:10:5), which is
4287 identical to a(2:7:5). Only relevant for strides not equal
4288 to one. Don't try a division by zero. */
4289 if (ar->dimen_type[i] == DIMEN_RANGE
4290 && ar->stride[i] != NULL && ar->stride[i]->expr_type == EXPR_CONSTANT
4291 && mpz_cmp_si (ar->stride[i]->value.integer, 1L) != 0
4292 && mpz_cmp_si (ar->stride[i]->value.integer, 0L) != 0)
4294 mpz_t size, end;
4296 if (gfc_ref_dimen_size (ar, i, &size, &end))
4298 if (ar->end[i] == NULL)
4300 ar->end[i] =
4301 gfc_get_constant_expr (BT_INTEGER, gfc_index_integer_kind,
4302 &ar->where);
4303 mpz_set (ar->end[i]->value.integer, end);
4305 else if (ar->end[i]->ts.type == BT_INTEGER
4306 && ar->end[i]->expr_type == EXPR_CONSTANT)
4308 mpz_set (ar->end[i]->value.integer, end);
4310 else
4311 gcc_unreachable ();
4313 mpz_clear (size);
4314 mpz_clear (end);
4319 if (ar->type == AR_FULL)
4321 if (ar->as->rank == 0)
4322 ar->type = AR_ELEMENT;
4324 /* Make sure array is the same as array(:,:), this way
4325 we don't need to special case all the time. */
4326 ar->dimen = ar->as->rank;
4327 for (i = 0; i < ar->dimen; i++)
4329 ar->dimen_type[i] = DIMEN_RANGE;
4331 gcc_assert (ar->start[i] == NULL);
4332 gcc_assert (ar->end[i] == NULL);
4333 gcc_assert (ar->stride[i] == NULL);
4337 /* If the reference type is unknown, figure out what kind it is. */
4339 if (ar->type == AR_UNKNOWN)
4341 ar->type = AR_ELEMENT;
4342 for (i = 0; i < ar->dimen; i++)
4343 if (ar->dimen_type[i] == DIMEN_RANGE
4344 || ar->dimen_type[i] == DIMEN_VECTOR)
4346 ar->type = AR_SECTION;
4347 break;
4351 if (!ar->as->cray_pointee && !compare_spec_to_ref (ar))
4352 return false;
4354 if (ar->as->corank && ar->codimen == 0)
4356 int n;
4357 ar->codimen = ar->as->corank;
4358 for (n = ar->dimen; n < ar->dimen + ar->codimen; n++)
4359 ar->dimen_type[n] = DIMEN_THIS_IMAGE;
4362 return true;
4366 static bool
4367 resolve_substring (gfc_ref *ref)
4369 int k = gfc_validate_kind (BT_INTEGER, gfc_charlen_int_kind, false);
4371 if (ref->u.ss.start != NULL)
4373 if (!gfc_resolve_expr (ref->u.ss.start))
4374 return false;
4376 if (ref->u.ss.start->ts.type != BT_INTEGER)
4378 gfc_error ("Substring start index at %L must be of type INTEGER",
4379 &ref->u.ss.start->where);
4380 return false;
4383 if (ref->u.ss.start->rank != 0)
4385 gfc_error ("Substring start index at %L must be scalar",
4386 &ref->u.ss.start->where);
4387 return false;
4390 if (compare_bound_int (ref->u.ss.start, 1) == CMP_LT
4391 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
4392 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
4394 gfc_error ("Substring start index at %L is less than one",
4395 &ref->u.ss.start->where);
4396 return false;
4400 if (ref->u.ss.end != NULL)
4402 if (!gfc_resolve_expr (ref->u.ss.end))
4403 return false;
4405 if (ref->u.ss.end->ts.type != BT_INTEGER)
4407 gfc_error ("Substring end index at %L must be of type INTEGER",
4408 &ref->u.ss.end->where);
4409 return false;
4412 if (ref->u.ss.end->rank != 0)
4414 gfc_error ("Substring end index at %L must be scalar",
4415 &ref->u.ss.end->where);
4416 return false;
4419 if (ref->u.ss.length != NULL
4420 && compare_bound (ref->u.ss.end, ref->u.ss.length->length) == CMP_GT
4421 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
4422 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
4424 gfc_error ("Substring end index at %L exceeds the string length",
4425 &ref->u.ss.start->where);
4426 return false;
4429 if (compare_bound_mpz_t (ref->u.ss.end,
4430 gfc_integer_kinds[k].huge) == CMP_GT
4431 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
4432 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
4434 gfc_error ("Substring end index at %L is too large",
4435 &ref->u.ss.end->where);
4436 return false;
4440 return true;
4444 /* This function supplies missing substring charlens. */
4446 void
4447 gfc_resolve_substring_charlen (gfc_expr *e)
4449 gfc_ref *char_ref;
4450 gfc_expr *start, *end;
4452 for (char_ref = e->ref; char_ref; char_ref = char_ref->next)
4453 if (char_ref->type == REF_SUBSTRING)
4454 break;
4456 if (!char_ref)
4457 return;
4459 gcc_assert (char_ref->next == NULL);
4461 if (e->ts.u.cl)
4463 if (e->ts.u.cl->length)
4464 gfc_free_expr (e->ts.u.cl->length);
4465 else if (e->expr_type == EXPR_VARIABLE
4466 && e->symtree->n.sym->attr.dummy)
4467 return;
4470 e->ts.type = BT_CHARACTER;
4471 e->ts.kind = gfc_default_character_kind;
4473 if (!e->ts.u.cl)
4474 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
4476 if (char_ref->u.ss.start)
4477 start = gfc_copy_expr (char_ref->u.ss.start);
4478 else
4479 start = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
4481 if (char_ref->u.ss.end)
4482 end = gfc_copy_expr (char_ref->u.ss.end);
4483 else if (e->expr_type == EXPR_VARIABLE)
4484 end = gfc_copy_expr (e->symtree->n.sym->ts.u.cl->length);
4485 else
4486 end = NULL;
4488 if (!start || !end)
4490 gfc_free_expr (start);
4491 gfc_free_expr (end);
4492 return;
4495 /* Length = (end - start +1). */
4496 e->ts.u.cl->length = gfc_subtract (end, start);
4497 e->ts.u.cl->length = gfc_add (e->ts.u.cl->length,
4498 gfc_get_int_expr (gfc_default_integer_kind,
4499 NULL, 1));
4501 e->ts.u.cl->length->ts.type = BT_INTEGER;
4502 e->ts.u.cl->length->ts.kind = gfc_charlen_int_kind;
4504 /* Make sure that the length is simplified. */
4505 gfc_simplify_expr (e->ts.u.cl->length, 1);
4506 gfc_resolve_expr (e->ts.u.cl->length);
4510 /* Resolve subtype references. */
4512 static bool
4513 resolve_ref (gfc_expr *expr)
4515 int current_part_dimension, n_components, seen_part_dimension;
4516 gfc_ref *ref;
4518 for (ref = expr->ref; ref; ref = ref->next)
4519 if (ref->type == REF_ARRAY && ref->u.ar.as == NULL)
4521 find_array_spec (expr);
4522 break;
4525 for (ref = expr->ref; ref; ref = ref->next)
4526 switch (ref->type)
4528 case REF_ARRAY:
4529 if (!resolve_array_ref (&ref->u.ar))
4530 return false;
4531 break;
4533 case REF_COMPONENT:
4534 break;
4536 case REF_SUBSTRING:
4537 if (!resolve_substring (ref))
4538 return false;
4539 break;
4542 /* Check constraints on part references. */
4544 current_part_dimension = 0;
4545 seen_part_dimension = 0;
4546 n_components = 0;
4548 for (ref = expr->ref; ref; ref = ref->next)
4550 switch (ref->type)
4552 case REF_ARRAY:
4553 switch (ref->u.ar.type)
4555 case AR_FULL:
4556 /* Coarray scalar. */
4557 if (ref->u.ar.as->rank == 0)
4559 current_part_dimension = 0;
4560 break;
4562 /* Fall through. */
4563 case AR_SECTION:
4564 current_part_dimension = 1;
4565 break;
4567 case AR_ELEMENT:
4568 current_part_dimension = 0;
4569 break;
4571 case AR_UNKNOWN:
4572 gfc_internal_error ("resolve_ref(): Bad array reference");
4575 break;
4577 case REF_COMPONENT:
4578 if (current_part_dimension || seen_part_dimension)
4580 /* F03:C614. */
4581 if (ref->u.c.component->attr.pointer
4582 || ref->u.c.component->attr.proc_pointer
4583 || (ref->u.c.component->ts.type == BT_CLASS
4584 && CLASS_DATA (ref->u.c.component)->attr.pointer))
4586 gfc_error ("Component to the right of a part reference "
4587 "with nonzero rank must not have the POINTER "
4588 "attribute at %L", &expr->where);
4589 return false;
4591 else if (ref->u.c.component->attr.allocatable
4592 || (ref->u.c.component->ts.type == BT_CLASS
4593 && CLASS_DATA (ref->u.c.component)->attr.allocatable))
4596 gfc_error ("Component to the right of a part reference "
4597 "with nonzero rank must not have the ALLOCATABLE "
4598 "attribute at %L", &expr->where);
4599 return false;
4603 n_components++;
4604 break;
4606 case REF_SUBSTRING:
4607 break;
4610 if (((ref->type == REF_COMPONENT && n_components > 1)
4611 || ref->next == NULL)
4612 && current_part_dimension
4613 && seen_part_dimension)
4615 gfc_error ("Two or more part references with nonzero rank must "
4616 "not be specified at %L", &expr->where);
4617 return false;
4620 if (ref->type == REF_COMPONENT)
4622 if (current_part_dimension)
4623 seen_part_dimension = 1;
4625 /* reset to make sure */
4626 current_part_dimension = 0;
4630 return true;
4634 /* Given an expression, determine its shape. This is easier than it sounds.
4635 Leaves the shape array NULL if it is not possible to determine the shape. */
4637 static void
4638 expression_shape (gfc_expr *e)
4640 mpz_t array[GFC_MAX_DIMENSIONS];
4641 int i;
4643 if (e->rank <= 0 || e->shape != NULL)
4644 return;
4646 for (i = 0; i < e->rank; i++)
4647 if (!gfc_array_dimen_size (e, i, &array[i]))
4648 goto fail;
4650 e->shape = gfc_get_shape (e->rank);
4652 memcpy (e->shape, array, e->rank * sizeof (mpz_t));
4654 return;
4656 fail:
4657 for (i--; i >= 0; i--)
4658 mpz_clear (array[i]);
4662 /* Given a variable expression node, compute the rank of the expression by
4663 examining the base symbol and any reference structures it may have. */
4665 static void
4666 expression_rank (gfc_expr *e)
4668 gfc_ref *ref;
4669 int i, rank;
4671 /* Just to make sure, because EXPR_COMPCALL's also have an e->ref and that
4672 could lead to serious confusion... */
4673 gcc_assert (e->expr_type != EXPR_COMPCALL);
4675 if (e->ref == NULL)
4677 if (e->expr_type == EXPR_ARRAY)
4678 goto done;
4679 /* Constructors can have a rank different from one via RESHAPE(). */
4681 if (e->symtree == NULL)
4683 e->rank = 0;
4684 goto done;
4687 e->rank = (e->symtree->n.sym->as == NULL)
4688 ? 0 : e->symtree->n.sym->as->rank;
4689 goto done;
4692 rank = 0;
4694 for (ref = e->ref; ref; ref = ref->next)
4696 if (ref->type == REF_COMPONENT && ref->u.c.component->attr.proc_pointer
4697 && ref->u.c.component->attr.function && !ref->next)
4698 rank = ref->u.c.component->as ? ref->u.c.component->as->rank : 0;
4700 if (ref->type != REF_ARRAY)
4701 continue;
4703 if (ref->u.ar.type == AR_FULL)
4705 rank = ref->u.ar.as->rank;
4706 break;
4709 if (ref->u.ar.type == AR_SECTION)
4711 /* Figure out the rank of the section. */
4712 if (rank != 0)
4713 gfc_internal_error ("expression_rank(): Two array specs");
4715 for (i = 0; i < ref->u.ar.dimen; i++)
4716 if (ref->u.ar.dimen_type[i] == DIMEN_RANGE
4717 || ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
4718 rank++;
4720 break;
4724 e->rank = rank;
4726 done:
4727 expression_shape (e);
4731 /* Resolve a variable expression. */
4733 static bool
4734 resolve_variable (gfc_expr *e)
4736 gfc_symbol *sym;
4737 bool t;
4739 t = true;
4741 if (e->symtree == NULL)
4742 return false;
4743 sym = e->symtree->n.sym;
4745 /* Use same check as for TYPE(*) below; this check has to be before TYPE(*)
4746 as ts.type is set to BT_ASSUMED in resolve_symbol. */
4747 if (sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
4749 if (!actual_arg || inquiry_argument)
4751 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may only "
4752 "be used as actual argument", sym->name, &e->where);
4753 return false;
4756 /* TS 29113, 407b. */
4757 else if (e->ts.type == BT_ASSUMED)
4759 if (!actual_arg)
4761 gfc_error ("Assumed-type variable %s at %L may only be used "
4762 "as actual argument", sym->name, &e->where);
4763 return false;
4765 else if (inquiry_argument && !first_actual_arg)
4767 /* FIXME: It doesn't work reliably as inquiry_argument is not set
4768 for all inquiry functions in resolve_function; the reason is
4769 that the function-name resolution happens too late in that
4770 function. */
4771 gfc_error ("Assumed-type variable %s at %L as actual argument to "
4772 "an inquiry function shall be the first argument",
4773 sym->name, &e->where);
4774 return false;
4777 /* TS 29113, C535b. */
4778 else if ((sym->ts.type == BT_CLASS && sym->attr.class_ok
4779 && CLASS_DATA (sym)->as
4780 && CLASS_DATA (sym)->as->type == AS_ASSUMED_RANK)
4781 || (sym->ts.type != BT_CLASS && sym->as
4782 && sym->as->type == AS_ASSUMED_RANK))
4784 if (!actual_arg)
4786 gfc_error ("Assumed-rank variable %s at %L may only be used as "
4787 "actual argument", sym->name, &e->where);
4788 return false;
4790 else if (inquiry_argument && !first_actual_arg)
4792 /* FIXME: It doesn't work reliably as inquiry_argument is not set
4793 for all inquiry functions in resolve_function; the reason is
4794 that the function-name resolution happens too late in that
4795 function. */
4796 gfc_error ("Assumed-rank variable %s at %L as actual argument "
4797 "to an inquiry function shall be the first argument",
4798 sym->name, &e->where);
4799 return false;
4803 if ((sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK)) && e->ref
4804 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
4805 && e->ref->next == NULL))
4807 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall not have "
4808 "a subobject reference", sym->name, &e->ref->u.ar.where);
4809 return false;
4811 /* TS 29113, 407b. */
4812 else if (e->ts.type == BT_ASSUMED && e->ref
4813 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
4814 && e->ref->next == NULL))
4816 gfc_error ("Assumed-type variable %s at %L shall not have a subobject "
4817 "reference", sym->name, &e->ref->u.ar.where);
4818 return false;
4821 /* TS 29113, C535b. */
4822 if (((sym->ts.type == BT_CLASS && sym->attr.class_ok
4823 && CLASS_DATA (sym)->as
4824 && CLASS_DATA (sym)->as->type == AS_ASSUMED_RANK)
4825 || (sym->ts.type != BT_CLASS && sym->as
4826 && sym->as->type == AS_ASSUMED_RANK))
4827 && e->ref
4828 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
4829 && e->ref->next == NULL))
4831 gfc_error ("Assumed-rank variable %s at %L shall not have a subobject "
4832 "reference", sym->name, &e->ref->u.ar.where);
4833 return false;
4837 /* If this is an associate-name, it may be parsed with an array reference
4838 in error even though the target is scalar. Fail directly in this case.
4839 TODO Understand why class scalar expressions must be excluded. */
4840 if (sym->assoc && !(sym->ts.type == BT_CLASS && e->rank == 0))
4842 if (sym->ts.type == BT_CLASS)
4843 gfc_fix_class_refs (e);
4844 if (!sym->attr.dimension && e->ref && e->ref->type == REF_ARRAY)
4845 return false;
4848 if (sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.generic)
4849 sym->ts.u.derived = gfc_find_dt_in_generic (sym->ts.u.derived);
4851 /* On the other hand, the parser may not have known this is an array;
4852 in this case, we have to add a FULL reference. */
4853 if (sym->assoc && sym->attr.dimension && !e->ref)
4855 e->ref = gfc_get_ref ();
4856 e->ref->type = REF_ARRAY;
4857 e->ref->u.ar.type = AR_FULL;
4858 e->ref->u.ar.dimen = 0;
4861 if (e->ref && !resolve_ref (e))
4862 return false;
4864 if (sym->attr.flavor == FL_PROCEDURE
4865 && (!sym->attr.function
4866 || (sym->attr.function && sym->result
4867 && sym->result->attr.proc_pointer
4868 && !sym->result->attr.function)))
4870 e->ts.type = BT_PROCEDURE;
4871 goto resolve_procedure;
4874 if (sym->ts.type != BT_UNKNOWN)
4875 gfc_variable_attr (e, &e->ts);
4876 else
4878 /* Must be a simple variable reference. */
4879 if (!gfc_set_default_type (sym, 1, sym->ns))
4880 return false;
4881 e->ts = sym->ts;
4884 if (check_assumed_size_reference (sym, e))
4885 return false;
4887 /* Deal with forward references to entries during resolve_code, to
4888 satisfy, at least partially, 12.5.2.5. */
4889 if (gfc_current_ns->entries
4890 && current_entry_id == sym->entry_id
4891 && cs_base
4892 && cs_base->current
4893 && cs_base->current->op != EXEC_ENTRY)
4895 gfc_entry_list *entry;
4896 gfc_formal_arglist *formal;
4897 int n;
4898 bool seen, saved_specification_expr;
4900 /* If the symbol is a dummy... */
4901 if (sym->attr.dummy && sym->ns == gfc_current_ns)
4903 entry = gfc_current_ns->entries;
4904 seen = false;
4906 /* ...test if the symbol is a parameter of previous entries. */
4907 for (; entry && entry->id <= current_entry_id; entry = entry->next)
4908 for (formal = entry->sym->formal; formal; formal = formal->next)
4910 if (formal->sym && sym->name == formal->sym->name)
4912 seen = true;
4913 break;
4917 /* If it has not been seen as a dummy, this is an error. */
4918 if (!seen)
4920 if (specification_expr)
4921 gfc_error ("Variable '%s', used in a specification expression"
4922 ", is referenced at %L before the ENTRY statement "
4923 "in which it is a parameter",
4924 sym->name, &cs_base->current->loc);
4925 else
4926 gfc_error ("Variable '%s' is used at %L before the ENTRY "
4927 "statement in which it is a parameter",
4928 sym->name, &cs_base->current->loc);
4929 t = false;
4933 /* Now do the same check on the specification expressions. */
4934 saved_specification_expr = specification_expr;
4935 specification_expr = true;
4936 if (sym->ts.type == BT_CHARACTER
4937 && !gfc_resolve_expr (sym->ts.u.cl->length))
4938 t = false;
4940 if (sym->as)
4941 for (n = 0; n < sym->as->rank; n++)
4943 if (!gfc_resolve_expr (sym->as->lower[n]))
4944 t = false;
4945 if (!gfc_resolve_expr (sym->as->upper[n]))
4946 t = false;
4948 specification_expr = saved_specification_expr;
4950 if (t)
4951 /* Update the symbol's entry level. */
4952 sym->entry_id = current_entry_id + 1;
4955 /* If a symbol has been host_associated mark it. This is used latter,
4956 to identify if aliasing is possible via host association. */
4957 if (sym->attr.flavor == FL_VARIABLE
4958 && gfc_current_ns->parent
4959 && (gfc_current_ns->parent == sym->ns
4960 || (gfc_current_ns->parent->parent
4961 && gfc_current_ns->parent->parent == sym->ns)))
4962 sym->attr.host_assoc = 1;
4964 resolve_procedure:
4965 if (t && !resolve_procedure_expression (e))
4966 t = false;
4968 /* F2008, C617 and C1229. */
4969 if (!inquiry_argument && (e->ts.type == BT_CLASS || e->ts.type == BT_DERIVED)
4970 && gfc_is_coindexed (e))
4972 gfc_ref *ref, *ref2 = NULL;
4974 for (ref = e->ref; ref; ref = ref->next)
4976 if (ref->type == REF_COMPONENT)
4977 ref2 = ref;
4978 if (ref->type == REF_ARRAY && ref->u.ar.codimen > 0)
4979 break;
4982 for ( ; ref; ref = ref->next)
4983 if (ref->type == REF_COMPONENT)
4984 break;
4986 /* Expression itself is not coindexed object. */
4987 if (ref && e->ts.type == BT_CLASS)
4989 gfc_error ("Polymorphic subobject of coindexed object at %L",
4990 &e->where);
4991 t = false;
4994 /* Expression itself is coindexed object. */
4995 if (ref == NULL)
4997 gfc_component *c;
4998 c = ref2 ? ref2->u.c.component : e->symtree->n.sym->components;
4999 for ( ; c; c = c->next)
5000 if (c->attr.allocatable && c->ts.type == BT_CLASS)
5002 gfc_error ("Coindexed object with polymorphic allocatable "
5003 "subcomponent at %L", &e->where);
5004 t = false;
5005 break;
5010 return t;
5014 /* Checks to see that the correct symbol has been host associated.
5015 The only situation where this arises is that in which a twice
5016 contained function is parsed after the host association is made.
5017 Therefore, on detecting this, change the symbol in the expression
5018 and convert the array reference into an actual arglist if the old
5019 symbol is a variable. */
5020 static bool
5021 check_host_association (gfc_expr *e)
5023 gfc_symbol *sym, *old_sym;
5024 gfc_symtree *st;
5025 int n;
5026 gfc_ref *ref;
5027 gfc_actual_arglist *arg, *tail = NULL;
5028 bool retval = e->expr_type == EXPR_FUNCTION;
5030 /* If the expression is the result of substitution in
5031 interface.c(gfc_extend_expr) because there is no way in
5032 which the host association can be wrong. */
5033 if (e->symtree == NULL
5034 || e->symtree->n.sym == NULL
5035 || e->user_operator)
5036 return retval;
5038 old_sym = e->symtree->n.sym;
5040 if (gfc_current_ns->parent
5041 && old_sym->ns != gfc_current_ns)
5043 /* Use the 'USE' name so that renamed module symbols are
5044 correctly handled. */
5045 gfc_find_symbol (e->symtree->name, gfc_current_ns, 1, &sym);
5047 if (sym && old_sym != sym
5048 && sym->ts.type == old_sym->ts.type
5049 && sym->attr.flavor == FL_PROCEDURE
5050 && sym->attr.contained)
5052 /* Clear the shape, since it might not be valid. */
5053 gfc_free_shape (&e->shape, e->rank);
5055 /* Give the expression the right symtree! */
5056 gfc_find_sym_tree (e->symtree->name, NULL, 1, &st);
5057 gcc_assert (st != NULL);
5059 if (old_sym->attr.flavor == FL_PROCEDURE
5060 || e->expr_type == EXPR_FUNCTION)
5062 /* Original was function so point to the new symbol, since
5063 the actual argument list is already attached to the
5064 expression. */
5065 e->value.function.esym = NULL;
5066 e->symtree = st;
5068 else
5070 /* Original was variable so convert array references into
5071 an actual arglist. This does not need any checking now
5072 since resolve_function will take care of it. */
5073 e->value.function.actual = NULL;
5074 e->expr_type = EXPR_FUNCTION;
5075 e->symtree = st;
5077 /* Ambiguity will not arise if the array reference is not
5078 the last reference. */
5079 for (ref = e->ref; ref; ref = ref->next)
5080 if (ref->type == REF_ARRAY && ref->next == NULL)
5081 break;
5083 gcc_assert (ref->type == REF_ARRAY);
5085 /* Grab the start expressions from the array ref and
5086 copy them into actual arguments. */
5087 for (n = 0; n < ref->u.ar.dimen; n++)
5089 arg = gfc_get_actual_arglist ();
5090 arg->expr = gfc_copy_expr (ref->u.ar.start[n]);
5091 if (e->value.function.actual == NULL)
5092 tail = e->value.function.actual = arg;
5093 else
5095 tail->next = arg;
5096 tail = arg;
5100 /* Dump the reference list and set the rank. */
5101 gfc_free_ref_list (e->ref);
5102 e->ref = NULL;
5103 e->rank = sym->as ? sym->as->rank : 0;
5106 gfc_resolve_expr (e);
5107 sym->refs++;
5110 /* This might have changed! */
5111 return e->expr_type == EXPR_FUNCTION;
5115 static void
5116 gfc_resolve_character_operator (gfc_expr *e)
5118 gfc_expr *op1 = e->value.op.op1;
5119 gfc_expr *op2 = e->value.op.op2;
5120 gfc_expr *e1 = NULL;
5121 gfc_expr *e2 = NULL;
5123 gcc_assert (e->value.op.op == INTRINSIC_CONCAT);
5125 if (op1->ts.u.cl && op1->ts.u.cl->length)
5126 e1 = gfc_copy_expr (op1->ts.u.cl->length);
5127 else if (op1->expr_type == EXPR_CONSTANT)
5128 e1 = gfc_get_int_expr (gfc_default_integer_kind, NULL,
5129 op1->value.character.length);
5131 if (op2->ts.u.cl && op2->ts.u.cl->length)
5132 e2 = gfc_copy_expr (op2->ts.u.cl->length);
5133 else if (op2->expr_type == EXPR_CONSTANT)
5134 e2 = gfc_get_int_expr (gfc_default_integer_kind, NULL,
5135 op2->value.character.length);
5137 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
5139 if (!e1 || !e2)
5141 gfc_free_expr (e1);
5142 gfc_free_expr (e2);
5144 return;
5147 e->ts.u.cl->length = gfc_add (e1, e2);
5148 e->ts.u.cl->length->ts.type = BT_INTEGER;
5149 e->ts.u.cl->length->ts.kind = gfc_charlen_int_kind;
5150 gfc_simplify_expr (e->ts.u.cl->length, 0);
5151 gfc_resolve_expr (e->ts.u.cl->length);
5153 return;
5157 /* Ensure that an character expression has a charlen and, if possible, a
5158 length expression. */
5160 static void
5161 fixup_charlen (gfc_expr *e)
5163 /* The cases fall through so that changes in expression type and the need
5164 for multiple fixes are picked up. In all circumstances, a charlen should
5165 be available for the middle end to hang a backend_decl on. */
5166 switch (e->expr_type)
5168 case EXPR_OP:
5169 gfc_resolve_character_operator (e);
5171 case EXPR_ARRAY:
5172 if (e->expr_type == EXPR_ARRAY)
5173 gfc_resolve_character_array_constructor (e);
5175 case EXPR_SUBSTRING:
5176 if (!e->ts.u.cl && e->ref)
5177 gfc_resolve_substring_charlen (e);
5179 default:
5180 if (!e->ts.u.cl)
5181 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
5183 break;
5188 /* Update an actual argument to include the passed-object for type-bound
5189 procedures at the right position. */
5191 static gfc_actual_arglist*
5192 update_arglist_pass (gfc_actual_arglist* lst, gfc_expr* po, unsigned argpos,
5193 const char *name)
5195 gcc_assert (argpos > 0);
5197 if (argpos == 1)
5199 gfc_actual_arglist* result;
5201 result = gfc_get_actual_arglist ();
5202 result->expr = po;
5203 result->next = lst;
5204 if (name)
5205 result->name = name;
5207 return result;
5210 if (lst)
5211 lst->next = update_arglist_pass (lst->next, po, argpos - 1, name);
5212 else
5213 lst = update_arglist_pass (NULL, po, argpos - 1, name);
5214 return lst;
5218 /* Extract the passed-object from an EXPR_COMPCALL (a copy of it). */
5220 static gfc_expr*
5221 extract_compcall_passed_object (gfc_expr* e)
5223 gfc_expr* po;
5225 gcc_assert (e->expr_type == EXPR_COMPCALL);
5227 if (e->value.compcall.base_object)
5228 po = gfc_copy_expr (e->value.compcall.base_object);
5229 else
5231 po = gfc_get_expr ();
5232 po->expr_type = EXPR_VARIABLE;
5233 po->symtree = e->symtree;
5234 po->ref = gfc_copy_ref (e->ref);
5235 po->where = e->where;
5238 if (!gfc_resolve_expr (po))
5239 return NULL;
5241 return po;
5245 /* Update the arglist of an EXPR_COMPCALL expression to include the
5246 passed-object. */
5248 static bool
5249 update_compcall_arglist (gfc_expr* e)
5251 gfc_expr* po;
5252 gfc_typebound_proc* tbp;
5254 tbp = e->value.compcall.tbp;
5256 if (tbp->error)
5257 return false;
5259 po = extract_compcall_passed_object (e);
5260 if (!po)
5261 return false;
5263 if (tbp->nopass || e->value.compcall.ignore_pass)
5265 gfc_free_expr (po);
5266 return true;
5269 gcc_assert (tbp->pass_arg_num > 0);
5270 e->value.compcall.actual = update_arglist_pass (e->value.compcall.actual, po,
5271 tbp->pass_arg_num,
5272 tbp->pass_arg);
5274 return true;
5278 /* Extract the passed object from a PPC call (a copy of it). */
5280 static gfc_expr*
5281 extract_ppc_passed_object (gfc_expr *e)
5283 gfc_expr *po;
5284 gfc_ref **ref;
5286 po = gfc_get_expr ();
5287 po->expr_type = EXPR_VARIABLE;
5288 po->symtree = e->symtree;
5289 po->ref = gfc_copy_ref (e->ref);
5290 po->where = e->where;
5292 /* Remove PPC reference. */
5293 ref = &po->ref;
5294 while ((*ref)->next)
5295 ref = &(*ref)->next;
5296 gfc_free_ref_list (*ref);
5297 *ref = NULL;
5299 if (!gfc_resolve_expr (po))
5300 return NULL;
5302 return po;
5306 /* Update the actual arglist of a procedure pointer component to include the
5307 passed-object. */
5309 static bool
5310 update_ppc_arglist (gfc_expr* e)
5312 gfc_expr* po;
5313 gfc_component *ppc;
5314 gfc_typebound_proc* tb;
5316 ppc = gfc_get_proc_ptr_comp (e);
5317 if (!ppc)
5318 return false;
5320 tb = ppc->tb;
5322 if (tb->error)
5323 return false;
5324 else if (tb->nopass)
5325 return true;
5327 po = extract_ppc_passed_object (e);
5328 if (!po)
5329 return false;
5331 /* F08:R739. */
5332 if (po->rank != 0)
5334 gfc_error ("Passed-object at %L must be scalar", &e->where);
5335 return false;
5338 /* F08:C611. */
5339 if (po->ts.type == BT_DERIVED && po->ts.u.derived->attr.abstract)
5341 gfc_error ("Base object for procedure-pointer component call at %L is of"
5342 " ABSTRACT type '%s'", &e->where, po->ts.u.derived->name);
5343 return false;
5346 gcc_assert (tb->pass_arg_num > 0);
5347 e->value.compcall.actual = update_arglist_pass (e->value.compcall.actual, po,
5348 tb->pass_arg_num,
5349 tb->pass_arg);
5351 return true;
5355 /* Check that the object a TBP is called on is valid, i.e. it must not be
5356 of ABSTRACT type (as in subobject%abstract_parent%tbp()). */
5358 static bool
5359 check_typebound_baseobject (gfc_expr* e)
5361 gfc_expr* base;
5362 bool return_value = false;
5364 base = extract_compcall_passed_object (e);
5365 if (!base)
5366 return false;
5368 gcc_assert (base->ts.type == BT_DERIVED || base->ts.type == BT_CLASS);
5370 if (base->ts.type == BT_CLASS && !gfc_expr_attr (base).class_ok)
5371 return false;
5373 /* F08:C611. */
5374 if (base->ts.type == BT_DERIVED && base->ts.u.derived->attr.abstract)
5376 gfc_error ("Base object for type-bound procedure call at %L is of"
5377 " ABSTRACT type '%s'", &e->where, base->ts.u.derived->name);
5378 goto cleanup;
5381 /* F08:C1230. If the procedure called is NOPASS,
5382 the base object must be scalar. */
5383 if (e->value.compcall.tbp->nopass && base->rank != 0)
5385 gfc_error ("Base object for NOPASS type-bound procedure call at %L must"
5386 " be scalar", &e->where);
5387 goto cleanup;
5390 return_value = true;
5392 cleanup:
5393 gfc_free_expr (base);
5394 return return_value;
5398 /* Resolve a call to a type-bound procedure, either function or subroutine,
5399 statically from the data in an EXPR_COMPCALL expression. The adapted
5400 arglist and the target-procedure symtree are returned. */
5402 static bool
5403 resolve_typebound_static (gfc_expr* e, gfc_symtree** target,
5404 gfc_actual_arglist** actual)
5406 gcc_assert (e->expr_type == EXPR_COMPCALL);
5407 gcc_assert (!e->value.compcall.tbp->is_generic);
5409 /* Update the actual arglist for PASS. */
5410 if (!update_compcall_arglist (e))
5411 return false;
5413 *actual = e->value.compcall.actual;
5414 *target = e->value.compcall.tbp->u.specific;
5416 gfc_free_ref_list (e->ref);
5417 e->ref = NULL;
5418 e->value.compcall.actual = NULL;
5420 /* If we find a deferred typebound procedure, check for derived types
5421 that an overriding typebound procedure has not been missed. */
5422 if (e->value.compcall.name
5423 && !e->value.compcall.tbp->non_overridable
5424 && e->value.compcall.base_object
5425 && e->value.compcall.base_object->ts.type == BT_DERIVED)
5427 gfc_symtree *st;
5428 gfc_symbol *derived;
5430 /* Use the derived type of the base_object. */
5431 derived = e->value.compcall.base_object->ts.u.derived;
5432 st = NULL;
5434 /* If necessary, go through the inheritance chain. */
5435 while (!st && derived)
5437 /* Look for the typebound procedure 'name'. */
5438 if (derived->f2k_derived && derived->f2k_derived->tb_sym_root)
5439 st = gfc_find_symtree (derived->f2k_derived->tb_sym_root,
5440 e->value.compcall.name);
5441 if (!st)
5442 derived = gfc_get_derived_super_type (derived);
5445 /* Now find the specific name in the derived type namespace. */
5446 if (st && st->n.tb && st->n.tb->u.specific)
5447 gfc_find_sym_tree (st->n.tb->u.specific->name,
5448 derived->ns, 1, &st);
5449 if (st)
5450 *target = st;
5452 return true;
5456 /* Get the ultimate declared type from an expression. In addition,
5457 return the last class/derived type reference and the copy of the
5458 reference list. If check_types is set true, derived types are
5459 identified as well as class references. */
5460 static gfc_symbol*
5461 get_declared_from_expr (gfc_ref **class_ref, gfc_ref **new_ref,
5462 gfc_expr *e, bool check_types)
5464 gfc_symbol *declared;
5465 gfc_ref *ref;
5467 declared = NULL;
5468 if (class_ref)
5469 *class_ref = NULL;
5470 if (new_ref)
5471 *new_ref = gfc_copy_ref (e->ref);
5473 for (ref = e->ref; ref; ref = ref->next)
5475 if (ref->type != REF_COMPONENT)
5476 continue;
5478 if ((ref->u.c.component->ts.type == BT_CLASS
5479 || (check_types && ref->u.c.component->ts.type == BT_DERIVED))
5480 && ref->u.c.component->attr.flavor != FL_PROCEDURE)
5482 declared = ref->u.c.component->ts.u.derived;
5483 if (class_ref)
5484 *class_ref = ref;
5488 if (declared == NULL)
5489 declared = e->symtree->n.sym->ts.u.derived;
5491 return declared;
5495 /* Given an EXPR_COMPCALL calling a GENERIC typebound procedure, figure out
5496 which of the specific bindings (if any) matches the arglist and transform
5497 the expression into a call of that binding. */
5499 static bool
5500 resolve_typebound_generic_call (gfc_expr* e, const char **name)
5502 gfc_typebound_proc* genproc;
5503 const char* genname;
5504 gfc_symtree *st;
5505 gfc_symbol *derived;
5507 gcc_assert (e->expr_type == EXPR_COMPCALL);
5508 genname = e->value.compcall.name;
5509 genproc = e->value.compcall.tbp;
5511 if (!genproc->is_generic)
5512 return true;
5514 /* Try the bindings on this type and in the inheritance hierarchy. */
5515 for (; genproc; genproc = genproc->overridden)
5517 gfc_tbp_generic* g;
5519 gcc_assert (genproc->is_generic);
5520 for (g = genproc->u.generic; g; g = g->next)
5522 gfc_symbol* target;
5523 gfc_actual_arglist* args;
5524 bool matches;
5526 gcc_assert (g->specific);
5528 if (g->specific->error)
5529 continue;
5531 target = g->specific->u.specific->n.sym;
5533 /* Get the right arglist by handling PASS/NOPASS. */
5534 args = gfc_copy_actual_arglist (e->value.compcall.actual);
5535 if (!g->specific->nopass)
5537 gfc_expr* po;
5538 po = extract_compcall_passed_object (e);
5539 if (!po)
5541 gfc_free_actual_arglist (args);
5542 return false;
5545 gcc_assert (g->specific->pass_arg_num > 0);
5546 gcc_assert (!g->specific->error);
5547 args = update_arglist_pass (args, po, g->specific->pass_arg_num,
5548 g->specific->pass_arg);
5550 resolve_actual_arglist (args, target->attr.proc,
5551 is_external_proc (target)
5552 && gfc_sym_get_dummy_args (target) == NULL);
5554 /* Check if this arglist matches the formal. */
5555 matches = gfc_arglist_matches_symbol (&args, target);
5557 /* Clean up and break out of the loop if we've found it. */
5558 gfc_free_actual_arglist (args);
5559 if (matches)
5561 e->value.compcall.tbp = g->specific;
5562 genname = g->specific_st->name;
5563 /* Pass along the name for CLASS methods, where the vtab
5564 procedure pointer component has to be referenced. */
5565 if (name)
5566 *name = genname;
5567 goto success;
5572 /* Nothing matching found! */
5573 gfc_error ("Found no matching specific binding for the call to the GENERIC"
5574 " '%s' at %L", genname, &e->where);
5575 return false;
5577 success:
5578 /* Make sure that we have the right specific instance for the name. */
5579 derived = get_declared_from_expr (NULL, NULL, e, true);
5581 st = gfc_find_typebound_proc (derived, NULL, genname, true, &e->where);
5582 if (st)
5583 e->value.compcall.tbp = st->n.tb;
5585 return true;
5589 /* Resolve a call to a type-bound subroutine. */
5591 static bool
5592 resolve_typebound_call (gfc_code* c, const char **name)
5594 gfc_actual_arglist* newactual;
5595 gfc_symtree* target;
5597 /* Check that's really a SUBROUTINE. */
5598 if (!c->expr1->value.compcall.tbp->subroutine)
5600 gfc_error ("'%s' at %L should be a SUBROUTINE",
5601 c->expr1->value.compcall.name, &c->loc);
5602 return false;
5605 if (!check_typebound_baseobject (c->expr1))
5606 return false;
5608 /* Pass along the name for CLASS methods, where the vtab
5609 procedure pointer component has to be referenced. */
5610 if (name)
5611 *name = c->expr1->value.compcall.name;
5613 if (!resolve_typebound_generic_call (c->expr1, name))
5614 return false;
5616 /* Transform into an ordinary EXEC_CALL for now. */
5618 if (!resolve_typebound_static (c->expr1, &target, &newactual))
5619 return false;
5621 c->ext.actual = newactual;
5622 c->symtree = target;
5623 c->op = (c->expr1->value.compcall.assign ? EXEC_ASSIGN_CALL : EXEC_CALL);
5625 gcc_assert (!c->expr1->ref && !c->expr1->value.compcall.actual);
5627 gfc_free_expr (c->expr1);
5628 c->expr1 = gfc_get_expr ();
5629 c->expr1->expr_type = EXPR_FUNCTION;
5630 c->expr1->symtree = target;
5631 c->expr1->where = c->loc;
5633 return resolve_call (c);
5637 /* Resolve a component-call expression. */
5638 static bool
5639 resolve_compcall (gfc_expr* e, const char **name)
5641 gfc_actual_arglist* newactual;
5642 gfc_symtree* target;
5644 /* Check that's really a FUNCTION. */
5645 if (!e->value.compcall.tbp->function)
5647 gfc_error ("'%s' at %L should be a FUNCTION",
5648 e->value.compcall.name, &e->where);
5649 return false;
5652 /* These must not be assign-calls! */
5653 gcc_assert (!e->value.compcall.assign);
5655 if (!check_typebound_baseobject (e))
5656 return false;
5658 /* Pass along the name for CLASS methods, where the vtab
5659 procedure pointer component has to be referenced. */
5660 if (name)
5661 *name = e->value.compcall.name;
5663 if (!resolve_typebound_generic_call (e, name))
5664 return false;
5665 gcc_assert (!e->value.compcall.tbp->is_generic);
5667 /* Take the rank from the function's symbol. */
5668 if (e->value.compcall.tbp->u.specific->n.sym->as)
5669 e->rank = e->value.compcall.tbp->u.specific->n.sym->as->rank;
5671 /* For now, we simply transform it into an EXPR_FUNCTION call with the same
5672 arglist to the TBP's binding target. */
5674 if (!resolve_typebound_static (e, &target, &newactual))
5675 return false;
5677 e->value.function.actual = newactual;
5678 e->value.function.name = NULL;
5679 e->value.function.esym = target->n.sym;
5680 e->value.function.isym = NULL;
5681 e->symtree = target;
5682 e->ts = target->n.sym->ts;
5683 e->expr_type = EXPR_FUNCTION;
5685 /* Resolution is not necessary if this is a class subroutine; this
5686 function only has to identify the specific proc. Resolution of
5687 the call will be done next in resolve_typebound_call. */
5688 return gfc_resolve_expr (e);
5692 static bool resolve_fl_derived (gfc_symbol *sym);
5695 /* Resolve a typebound function, or 'method'. First separate all
5696 the non-CLASS references by calling resolve_compcall directly. */
5698 static bool
5699 resolve_typebound_function (gfc_expr* e)
5701 gfc_symbol *declared;
5702 gfc_component *c;
5703 gfc_ref *new_ref;
5704 gfc_ref *class_ref;
5705 gfc_symtree *st;
5706 const char *name;
5707 gfc_typespec ts;
5708 gfc_expr *expr;
5709 bool overridable;
5711 st = e->symtree;
5713 /* Deal with typebound operators for CLASS objects. */
5714 expr = e->value.compcall.base_object;
5715 overridable = !e->value.compcall.tbp->non_overridable;
5716 if (expr && expr->ts.type == BT_CLASS && e->value.compcall.name)
5718 /* If the base_object is not a variable, the corresponding actual
5719 argument expression must be stored in e->base_expression so
5720 that the corresponding tree temporary can be used as the base
5721 object in gfc_conv_procedure_call. */
5722 if (expr->expr_type != EXPR_VARIABLE)
5724 gfc_actual_arglist *args;
5726 for (args= e->value.function.actual; args; args = args->next)
5728 if (expr == args->expr)
5729 expr = args->expr;
5733 /* Since the typebound operators are generic, we have to ensure
5734 that any delays in resolution are corrected and that the vtab
5735 is present. */
5736 ts = expr->ts;
5737 declared = ts.u.derived;
5738 c = gfc_find_component (declared, "_vptr", true, true);
5739 if (c->ts.u.derived == NULL)
5740 c->ts.u.derived = gfc_find_derived_vtab (declared);
5742 if (!resolve_compcall (e, &name))
5743 return false;
5745 /* Use the generic name if it is there. */
5746 name = name ? name : e->value.function.esym->name;
5747 e->symtree = expr->symtree;
5748 e->ref = gfc_copy_ref (expr->ref);
5749 get_declared_from_expr (&class_ref, NULL, e, false);
5751 /* Trim away the extraneous references that emerge from nested
5752 use of interface.c (extend_expr). */
5753 if (class_ref && class_ref->next)
5755 gfc_free_ref_list (class_ref->next);
5756 class_ref->next = NULL;
5758 else if (e->ref && !class_ref)
5760 gfc_free_ref_list (e->ref);
5761 e->ref = NULL;
5764 gfc_add_vptr_component (e);
5765 gfc_add_component_ref (e, name);
5766 e->value.function.esym = NULL;
5767 if (expr->expr_type != EXPR_VARIABLE)
5768 e->base_expr = expr;
5769 return true;
5772 if (st == NULL)
5773 return resolve_compcall (e, NULL);
5775 if (!resolve_ref (e))
5776 return false;
5778 /* Get the CLASS declared type. */
5779 declared = get_declared_from_expr (&class_ref, &new_ref, e, true);
5781 if (!resolve_fl_derived (declared))
5782 return false;
5784 /* Weed out cases of the ultimate component being a derived type. */
5785 if ((class_ref && class_ref->u.c.component->ts.type == BT_DERIVED)
5786 || (!class_ref && st->n.sym->ts.type != BT_CLASS))
5788 gfc_free_ref_list (new_ref);
5789 return resolve_compcall (e, NULL);
5792 c = gfc_find_component (declared, "_data", true, true);
5793 declared = c->ts.u.derived;
5795 /* Treat the call as if it is a typebound procedure, in order to roll
5796 out the correct name for the specific function. */
5797 if (!resolve_compcall (e, &name))
5799 gfc_free_ref_list (new_ref);
5800 return false;
5802 ts = e->ts;
5804 if (overridable)
5806 /* Convert the expression to a procedure pointer component call. */
5807 e->value.function.esym = NULL;
5808 e->symtree = st;
5810 if (new_ref)
5811 e->ref = new_ref;
5813 /* '_vptr' points to the vtab, which contains the procedure pointers. */
5814 gfc_add_vptr_component (e);
5815 gfc_add_component_ref (e, name);
5817 /* Recover the typespec for the expression. This is really only
5818 necessary for generic procedures, where the additional call
5819 to gfc_add_component_ref seems to throw the collection of the
5820 correct typespec. */
5821 e->ts = ts;
5823 else if (new_ref)
5824 gfc_free_ref_list (new_ref);
5826 return true;
5829 /* Resolve a typebound subroutine, or 'method'. First separate all
5830 the non-CLASS references by calling resolve_typebound_call
5831 directly. */
5833 static bool
5834 resolve_typebound_subroutine (gfc_code *code)
5836 gfc_symbol *declared;
5837 gfc_component *c;
5838 gfc_ref *new_ref;
5839 gfc_ref *class_ref;
5840 gfc_symtree *st;
5841 const char *name;
5842 gfc_typespec ts;
5843 gfc_expr *expr;
5844 bool overridable;
5846 st = code->expr1->symtree;
5848 /* Deal with typebound operators for CLASS objects. */
5849 expr = code->expr1->value.compcall.base_object;
5850 overridable = !code->expr1->value.compcall.tbp->non_overridable;
5851 if (expr && expr->ts.type == BT_CLASS && code->expr1->value.compcall.name)
5853 /* If the base_object is not a variable, the corresponding actual
5854 argument expression must be stored in e->base_expression so
5855 that the corresponding tree temporary can be used as the base
5856 object in gfc_conv_procedure_call. */
5857 if (expr->expr_type != EXPR_VARIABLE)
5859 gfc_actual_arglist *args;
5861 args= code->expr1->value.function.actual;
5862 for (; args; args = args->next)
5863 if (expr == args->expr)
5864 expr = args->expr;
5867 /* Since the typebound operators are generic, we have to ensure
5868 that any delays in resolution are corrected and that the vtab
5869 is present. */
5870 declared = expr->ts.u.derived;
5871 c = gfc_find_component (declared, "_vptr", true, true);
5872 if (c->ts.u.derived == NULL)
5873 c->ts.u.derived = gfc_find_derived_vtab (declared);
5875 if (!resolve_typebound_call (code, &name))
5876 return false;
5878 /* Use the generic name if it is there. */
5879 name = name ? name : code->expr1->value.function.esym->name;
5880 code->expr1->symtree = expr->symtree;
5881 code->expr1->ref = gfc_copy_ref (expr->ref);
5883 /* Trim away the extraneous references that emerge from nested
5884 use of interface.c (extend_expr). */
5885 get_declared_from_expr (&class_ref, NULL, code->expr1, false);
5886 if (class_ref && class_ref->next)
5888 gfc_free_ref_list (class_ref->next);
5889 class_ref->next = NULL;
5891 else if (code->expr1->ref && !class_ref)
5893 gfc_free_ref_list (code->expr1->ref);
5894 code->expr1->ref = NULL;
5897 /* Now use the procedure in the vtable. */
5898 gfc_add_vptr_component (code->expr1);
5899 gfc_add_component_ref (code->expr1, name);
5900 code->expr1->value.function.esym = NULL;
5901 if (expr->expr_type != EXPR_VARIABLE)
5902 code->expr1->base_expr = expr;
5903 return true;
5906 if (st == NULL)
5907 return resolve_typebound_call (code, NULL);
5909 if (!resolve_ref (code->expr1))
5910 return false;
5912 /* Get the CLASS declared type. */
5913 get_declared_from_expr (&class_ref, &new_ref, code->expr1, true);
5915 /* Weed out cases of the ultimate component being a derived type. */
5916 if ((class_ref && class_ref->u.c.component->ts.type == BT_DERIVED)
5917 || (!class_ref && st->n.sym->ts.type != BT_CLASS))
5919 gfc_free_ref_list (new_ref);
5920 return resolve_typebound_call (code, NULL);
5923 if (!resolve_typebound_call (code, &name))
5925 gfc_free_ref_list (new_ref);
5926 return false;
5928 ts = code->expr1->ts;
5930 if (overridable)
5932 /* Convert the expression to a procedure pointer component call. */
5933 code->expr1->value.function.esym = NULL;
5934 code->expr1->symtree = st;
5936 if (new_ref)
5937 code->expr1->ref = new_ref;
5939 /* '_vptr' points to the vtab, which contains the procedure pointers. */
5940 gfc_add_vptr_component (code->expr1);
5941 gfc_add_component_ref (code->expr1, name);
5943 /* Recover the typespec for the expression. This is really only
5944 necessary for generic procedures, where the additional call
5945 to gfc_add_component_ref seems to throw the collection of the
5946 correct typespec. */
5947 code->expr1->ts = ts;
5949 else if (new_ref)
5950 gfc_free_ref_list (new_ref);
5952 return true;
5956 /* Resolve a CALL to a Procedure Pointer Component (Subroutine). */
5958 static bool
5959 resolve_ppc_call (gfc_code* c)
5961 gfc_component *comp;
5963 comp = gfc_get_proc_ptr_comp (c->expr1);
5964 gcc_assert (comp != NULL);
5966 c->resolved_sym = c->expr1->symtree->n.sym;
5967 c->expr1->expr_type = EXPR_VARIABLE;
5969 if (!comp->attr.subroutine)
5970 gfc_add_subroutine (&comp->attr, comp->name, &c->expr1->where);
5972 if (!resolve_ref (c->expr1))
5973 return false;
5975 if (!update_ppc_arglist (c->expr1))
5976 return false;
5978 c->ext.actual = c->expr1->value.compcall.actual;
5980 if (!resolve_actual_arglist (c->ext.actual, comp->attr.proc,
5981 !(comp->ts.interface
5982 && comp->ts.interface->formal)))
5983 return false;
5985 gfc_ppc_use (comp, &c->expr1->value.compcall.actual, &c->expr1->where);
5987 return true;
5991 /* Resolve a Function Call to a Procedure Pointer Component (Function). */
5993 static bool
5994 resolve_expr_ppc (gfc_expr* e)
5996 gfc_component *comp;
5998 comp = gfc_get_proc_ptr_comp (e);
5999 gcc_assert (comp != NULL);
6001 /* Convert to EXPR_FUNCTION. */
6002 e->expr_type = EXPR_FUNCTION;
6003 e->value.function.isym = NULL;
6004 e->value.function.actual = e->value.compcall.actual;
6005 e->ts = comp->ts;
6006 if (comp->as != NULL)
6007 e->rank = comp->as->rank;
6009 if (!comp->attr.function)
6010 gfc_add_function (&comp->attr, comp->name, &e->where);
6012 if (!resolve_ref (e))
6013 return false;
6015 if (!resolve_actual_arglist (e->value.function.actual, comp->attr.proc,
6016 !(comp->ts.interface
6017 && comp->ts.interface->formal)))
6018 return false;
6020 if (!update_ppc_arglist (e))
6021 return false;
6023 gfc_ppc_use (comp, &e->value.compcall.actual, &e->where);
6025 return true;
6029 static bool
6030 gfc_is_expandable_expr (gfc_expr *e)
6032 gfc_constructor *con;
6034 if (e->expr_type == EXPR_ARRAY)
6036 /* Traverse the constructor looking for variables that are flavor
6037 parameter. Parameters must be expanded since they are fully used at
6038 compile time. */
6039 con = gfc_constructor_first (e->value.constructor);
6040 for (; con; con = gfc_constructor_next (con))
6042 if (con->expr->expr_type == EXPR_VARIABLE
6043 && con->expr->symtree
6044 && (con->expr->symtree->n.sym->attr.flavor == FL_PARAMETER
6045 || con->expr->symtree->n.sym->attr.flavor == FL_VARIABLE))
6046 return true;
6047 if (con->expr->expr_type == EXPR_ARRAY
6048 && gfc_is_expandable_expr (con->expr))
6049 return true;
6053 return false;
6056 /* Resolve an expression. That is, make sure that types of operands agree
6057 with their operators, intrinsic operators are converted to function calls
6058 for overloaded types and unresolved function references are resolved. */
6060 bool
6061 gfc_resolve_expr (gfc_expr *e)
6063 bool t;
6064 bool inquiry_save, actual_arg_save, first_actual_arg_save;
6066 if (e == NULL)
6067 return true;
6069 /* inquiry_argument only applies to variables. */
6070 inquiry_save = inquiry_argument;
6071 actual_arg_save = actual_arg;
6072 first_actual_arg_save = first_actual_arg;
6074 if (e->expr_type != EXPR_VARIABLE)
6076 inquiry_argument = false;
6077 actual_arg = false;
6078 first_actual_arg = false;
6081 switch (e->expr_type)
6083 case EXPR_OP:
6084 t = resolve_operator (e);
6085 break;
6087 case EXPR_FUNCTION:
6088 case EXPR_VARIABLE:
6090 if (check_host_association (e))
6091 t = resolve_function (e);
6092 else
6094 t = resolve_variable (e);
6095 if (t)
6096 expression_rank (e);
6099 if (e->ts.type == BT_CHARACTER && e->ts.u.cl == NULL && e->ref
6100 && e->ref->type != REF_SUBSTRING)
6101 gfc_resolve_substring_charlen (e);
6103 break;
6105 case EXPR_COMPCALL:
6106 t = resolve_typebound_function (e);
6107 break;
6109 case EXPR_SUBSTRING:
6110 t = resolve_ref (e);
6111 break;
6113 case EXPR_CONSTANT:
6114 case EXPR_NULL:
6115 t = true;
6116 break;
6118 case EXPR_PPC:
6119 t = resolve_expr_ppc (e);
6120 break;
6122 case EXPR_ARRAY:
6123 t = false;
6124 if (!resolve_ref (e))
6125 break;
6127 t = gfc_resolve_array_constructor (e);
6128 /* Also try to expand a constructor. */
6129 if (t)
6131 expression_rank (e);
6132 if (gfc_is_constant_expr (e) || gfc_is_expandable_expr (e))
6133 gfc_expand_constructor (e, false);
6136 /* This provides the opportunity for the length of constructors with
6137 character valued function elements to propagate the string length
6138 to the expression. */
6139 if (t && e->ts.type == BT_CHARACTER)
6141 /* For efficiency, we call gfc_expand_constructor for BT_CHARACTER
6142 here rather then add a duplicate test for it above. */
6143 gfc_expand_constructor (e, false);
6144 t = gfc_resolve_character_array_constructor (e);
6147 break;
6149 case EXPR_STRUCTURE:
6150 t = resolve_ref (e);
6151 if (!t)
6152 break;
6154 t = resolve_structure_cons (e, 0);
6155 if (!t)
6156 break;
6158 t = gfc_simplify_expr (e, 0);
6159 break;
6161 default:
6162 gfc_internal_error ("gfc_resolve_expr(): Bad expression type");
6165 if (e->ts.type == BT_CHARACTER && t && !e->ts.u.cl)
6166 fixup_charlen (e);
6168 inquiry_argument = inquiry_save;
6169 actual_arg = actual_arg_save;
6170 first_actual_arg = first_actual_arg_save;
6172 return t;
6176 /* Resolve an expression from an iterator. They must be scalar and have
6177 INTEGER or (optionally) REAL type. */
6179 static bool
6180 gfc_resolve_iterator_expr (gfc_expr *expr, bool real_ok,
6181 const char *name_msgid)
6183 if (!gfc_resolve_expr (expr))
6184 return false;
6186 if (expr->rank != 0)
6188 gfc_error ("%s at %L must be a scalar", _(name_msgid), &expr->where);
6189 return false;
6192 if (expr->ts.type != BT_INTEGER)
6194 if (expr->ts.type == BT_REAL)
6196 if (real_ok)
6197 return gfc_notify_std (GFC_STD_F95_DEL,
6198 "%s at %L must be integer",
6199 _(name_msgid), &expr->where);
6200 else
6202 gfc_error ("%s at %L must be INTEGER", _(name_msgid),
6203 &expr->where);
6204 return false;
6207 else
6209 gfc_error ("%s at %L must be INTEGER", _(name_msgid), &expr->where);
6210 return false;
6213 return true;
6217 /* Resolve the expressions in an iterator structure. If REAL_OK is
6218 false allow only INTEGER type iterators, otherwise allow REAL types.
6219 Set own_scope to true for ac-implied-do and data-implied-do as those
6220 have a separate scope such that, e.g., a INTENT(IN) doesn't apply. */
6222 bool
6223 gfc_resolve_iterator (gfc_iterator *iter, bool real_ok, bool own_scope)
6225 if (!gfc_resolve_iterator_expr (iter->var, real_ok, "Loop variable"))
6226 return false;
6228 if (!gfc_check_vardef_context (iter->var, false, false, own_scope,
6229 _("iterator variable")))
6230 return false;
6232 if (!gfc_resolve_iterator_expr (iter->start, real_ok,
6233 "Start expression in DO loop"))
6234 return false;
6236 if (!gfc_resolve_iterator_expr (iter->end, real_ok,
6237 "End expression in DO loop"))
6238 return false;
6240 if (!gfc_resolve_iterator_expr (iter->step, real_ok,
6241 "Step expression in DO loop"))
6242 return false;
6244 if (iter->step->expr_type == EXPR_CONSTANT)
6246 if ((iter->step->ts.type == BT_INTEGER
6247 && mpz_cmp_ui (iter->step->value.integer, 0) == 0)
6248 || (iter->step->ts.type == BT_REAL
6249 && mpfr_sgn (iter->step->value.real) == 0))
6251 gfc_error ("Step expression in DO loop at %L cannot be zero",
6252 &iter->step->where);
6253 return false;
6257 /* Convert start, end, and step to the same type as var. */
6258 if (iter->start->ts.kind != iter->var->ts.kind
6259 || iter->start->ts.type != iter->var->ts.type)
6260 gfc_convert_type (iter->start, &iter->var->ts, 2);
6262 if (iter->end->ts.kind != iter->var->ts.kind
6263 || iter->end->ts.type != iter->var->ts.type)
6264 gfc_convert_type (iter->end, &iter->var->ts, 2);
6266 if (iter->step->ts.kind != iter->var->ts.kind
6267 || iter->step->ts.type != iter->var->ts.type)
6268 gfc_convert_type (iter->step, &iter->var->ts, 2);
6270 if (iter->start->expr_type == EXPR_CONSTANT
6271 && iter->end->expr_type == EXPR_CONSTANT
6272 && iter->step->expr_type == EXPR_CONSTANT)
6274 int sgn, cmp;
6275 if (iter->start->ts.type == BT_INTEGER)
6277 sgn = mpz_cmp_ui (iter->step->value.integer, 0);
6278 cmp = mpz_cmp (iter->end->value.integer, iter->start->value.integer);
6280 else
6282 sgn = mpfr_sgn (iter->step->value.real);
6283 cmp = mpfr_cmp (iter->end->value.real, iter->start->value.real);
6285 if (gfc_option.warn_zerotrip &&
6286 ((sgn > 0 && cmp < 0) || (sgn < 0 && cmp > 0)))
6287 gfc_warning ("DO loop at %L will be executed zero times"
6288 " (use -Wno-zerotrip to suppress)",
6289 &iter->step->where);
6292 return true;
6296 /* Traversal function for find_forall_index. f == 2 signals that
6297 that variable itself is not to be checked - only the references. */
6299 static bool
6300 forall_index (gfc_expr *expr, gfc_symbol *sym, int *f)
6302 if (expr->expr_type != EXPR_VARIABLE)
6303 return false;
6305 /* A scalar assignment */
6306 if (!expr->ref || *f == 1)
6308 if (expr->symtree->n.sym == sym)
6309 return true;
6310 else
6311 return false;
6314 if (*f == 2)
6315 *f = 1;
6316 return false;
6320 /* Check whether the FORALL index appears in the expression or not.
6321 Returns true if SYM is found in EXPR. */
6323 bool
6324 find_forall_index (gfc_expr *expr, gfc_symbol *sym, int f)
6326 if (gfc_traverse_expr (expr, sym, forall_index, f))
6327 return true;
6328 else
6329 return false;
6333 /* Resolve a list of FORALL iterators. The FORALL index-name is constrained
6334 to be a scalar INTEGER variable. The subscripts and stride are scalar
6335 INTEGERs, and if stride is a constant it must be nonzero.
6336 Furthermore "A subscript or stride in a forall-triplet-spec shall
6337 not contain a reference to any index-name in the
6338 forall-triplet-spec-list in which it appears." (7.5.4.1) */
6340 static void
6341 resolve_forall_iterators (gfc_forall_iterator *it)
6343 gfc_forall_iterator *iter, *iter2;
6345 for (iter = it; iter; iter = iter->next)
6347 if (gfc_resolve_expr (iter->var)
6348 && (iter->var->ts.type != BT_INTEGER || iter->var->rank != 0))
6349 gfc_error ("FORALL index-name at %L must be a scalar INTEGER",
6350 &iter->var->where);
6352 if (gfc_resolve_expr (iter->start)
6353 && (iter->start->ts.type != BT_INTEGER || iter->start->rank != 0))
6354 gfc_error ("FORALL start expression at %L must be a scalar INTEGER",
6355 &iter->start->where);
6356 if (iter->var->ts.kind != iter->start->ts.kind)
6357 gfc_convert_type (iter->start, &iter->var->ts, 1);
6359 if (gfc_resolve_expr (iter->end)
6360 && (iter->end->ts.type != BT_INTEGER || iter->end->rank != 0))
6361 gfc_error ("FORALL end expression at %L must be a scalar INTEGER",
6362 &iter->end->where);
6363 if (iter->var->ts.kind != iter->end->ts.kind)
6364 gfc_convert_type (iter->end, &iter->var->ts, 1);
6366 if (gfc_resolve_expr (iter->stride))
6368 if (iter->stride->ts.type != BT_INTEGER || iter->stride->rank != 0)
6369 gfc_error ("FORALL stride expression at %L must be a scalar %s",
6370 &iter->stride->where, "INTEGER");
6372 if (iter->stride->expr_type == EXPR_CONSTANT
6373 && mpz_cmp_ui (iter->stride->value.integer, 0) == 0)
6374 gfc_error ("FORALL stride expression at %L cannot be zero",
6375 &iter->stride->where);
6377 if (iter->var->ts.kind != iter->stride->ts.kind)
6378 gfc_convert_type (iter->stride, &iter->var->ts, 1);
6381 for (iter = it; iter; iter = iter->next)
6382 for (iter2 = iter; iter2; iter2 = iter2->next)
6384 if (find_forall_index (iter2->start, iter->var->symtree->n.sym, 0)
6385 || find_forall_index (iter2->end, iter->var->symtree->n.sym, 0)
6386 || find_forall_index (iter2->stride, iter->var->symtree->n.sym, 0))
6387 gfc_error ("FORALL index '%s' may not appear in triplet "
6388 "specification at %L", iter->var->symtree->name,
6389 &iter2->start->where);
6394 /* Given a pointer to a symbol that is a derived type, see if it's
6395 inaccessible, i.e. if it's defined in another module and the components are
6396 PRIVATE. The search is recursive if necessary. Returns zero if no
6397 inaccessible components are found, nonzero otherwise. */
6399 static int
6400 derived_inaccessible (gfc_symbol *sym)
6402 gfc_component *c;
6404 if (sym->attr.use_assoc && sym->attr.private_comp)
6405 return 1;
6407 for (c = sym->components; c; c = c->next)
6409 if (c->ts.type == BT_DERIVED && derived_inaccessible (c->ts.u.derived))
6410 return 1;
6413 return 0;
6417 /* Resolve the argument of a deallocate expression. The expression must be
6418 a pointer or a full array. */
6420 static bool
6421 resolve_deallocate_expr (gfc_expr *e)
6423 symbol_attribute attr;
6424 int allocatable, pointer;
6425 gfc_ref *ref;
6426 gfc_symbol *sym;
6427 gfc_component *c;
6428 bool unlimited;
6430 if (!gfc_resolve_expr (e))
6431 return false;
6433 if (e->expr_type != EXPR_VARIABLE)
6434 goto bad;
6436 sym = e->symtree->n.sym;
6437 unlimited = UNLIMITED_POLY(sym);
6439 if (sym->ts.type == BT_CLASS)
6441 allocatable = CLASS_DATA (sym)->attr.allocatable;
6442 pointer = CLASS_DATA (sym)->attr.class_pointer;
6444 else
6446 allocatable = sym->attr.allocatable;
6447 pointer = sym->attr.pointer;
6449 for (ref = e->ref; ref; ref = ref->next)
6451 switch (ref->type)
6453 case REF_ARRAY:
6454 if (ref->u.ar.type != AR_FULL
6455 && !(ref->u.ar.type == AR_ELEMENT && ref->u.ar.as->rank == 0
6456 && ref->u.ar.codimen && gfc_ref_this_image (ref)))
6457 allocatable = 0;
6458 break;
6460 case REF_COMPONENT:
6461 c = ref->u.c.component;
6462 if (c->ts.type == BT_CLASS)
6464 allocatable = CLASS_DATA (c)->attr.allocatable;
6465 pointer = CLASS_DATA (c)->attr.class_pointer;
6467 else
6469 allocatable = c->attr.allocatable;
6470 pointer = c->attr.pointer;
6472 break;
6474 case REF_SUBSTRING:
6475 allocatable = 0;
6476 break;
6480 attr = gfc_expr_attr (e);
6482 if (allocatable == 0 && attr.pointer == 0 && !unlimited)
6484 bad:
6485 gfc_error ("Allocate-object at %L must be ALLOCATABLE or a POINTER",
6486 &e->where);
6487 return false;
6490 /* F2008, C644. */
6491 if (gfc_is_coindexed (e))
6493 gfc_error ("Coindexed allocatable object at %L", &e->where);
6494 return false;
6497 if (pointer
6498 && !gfc_check_vardef_context (e, true, true, false,
6499 _("DEALLOCATE object")))
6500 return false;
6501 if (!gfc_check_vardef_context (e, false, true, false,
6502 _("DEALLOCATE object")))
6503 return false;
6505 return true;
6509 /* Returns true if the expression e contains a reference to the symbol sym. */
6510 static bool
6511 sym_in_expr (gfc_expr *e, gfc_symbol *sym, int *f ATTRIBUTE_UNUSED)
6513 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym == sym)
6514 return true;
6516 return false;
6519 bool
6520 gfc_find_sym_in_expr (gfc_symbol *sym, gfc_expr *e)
6522 return gfc_traverse_expr (e, sym, sym_in_expr, 0);
6526 /* Given the expression node e for an allocatable/pointer of derived type to be
6527 allocated, get the expression node to be initialized afterwards (needed for
6528 derived types with default initializers, and derived types with allocatable
6529 components that need nullification.) */
6531 gfc_expr *
6532 gfc_expr_to_initialize (gfc_expr *e)
6534 gfc_expr *result;
6535 gfc_ref *ref;
6536 int i;
6538 result = gfc_copy_expr (e);
6540 /* Change the last array reference from AR_ELEMENT to AR_FULL. */
6541 for (ref = result->ref; ref; ref = ref->next)
6542 if (ref->type == REF_ARRAY && ref->next == NULL)
6544 ref->u.ar.type = AR_FULL;
6546 for (i = 0; i < ref->u.ar.dimen; i++)
6547 ref->u.ar.start[i] = ref->u.ar.end[i] = ref->u.ar.stride[i] = NULL;
6549 break;
6552 gfc_free_shape (&result->shape, result->rank);
6554 /* Recalculate rank, shape, etc. */
6555 gfc_resolve_expr (result);
6556 return result;
6560 /* If the last ref of an expression is an array ref, return a copy of the
6561 expression with that one removed. Otherwise, a copy of the original
6562 expression. This is used for allocate-expressions and pointer assignment
6563 LHS, where there may be an array specification that needs to be stripped
6564 off when using gfc_check_vardef_context. */
6566 static gfc_expr*
6567 remove_last_array_ref (gfc_expr* e)
6569 gfc_expr* e2;
6570 gfc_ref** r;
6572 e2 = gfc_copy_expr (e);
6573 for (r = &e2->ref; *r; r = &(*r)->next)
6574 if ((*r)->type == REF_ARRAY && !(*r)->next)
6576 gfc_free_ref_list (*r);
6577 *r = NULL;
6578 break;
6581 return e2;
6585 /* Used in resolve_allocate_expr to check that a allocation-object and
6586 a source-expr are conformable. This does not catch all possible
6587 cases; in particular a runtime checking is needed. */
6589 static bool
6590 conformable_arrays (gfc_expr *e1, gfc_expr *e2)
6592 gfc_ref *tail;
6593 for (tail = e2->ref; tail && tail->next; tail = tail->next);
6595 /* First compare rank. */
6596 if ((tail && e1->rank != tail->u.ar.as->rank)
6597 || (!tail && e1->rank != e2->rank))
6599 gfc_error ("Source-expr at %L must be scalar or have the "
6600 "same rank as the allocate-object at %L",
6601 &e1->where, &e2->where);
6602 return false;
6605 if (e1->shape)
6607 int i;
6608 mpz_t s;
6610 mpz_init (s);
6612 for (i = 0; i < e1->rank; i++)
6614 if (tail->u.ar.start[i] == NULL)
6615 break;
6617 if (tail->u.ar.end[i])
6619 mpz_set (s, tail->u.ar.end[i]->value.integer);
6620 mpz_sub (s, s, tail->u.ar.start[i]->value.integer);
6621 mpz_add_ui (s, s, 1);
6623 else
6625 mpz_set (s, tail->u.ar.start[i]->value.integer);
6628 if (mpz_cmp (e1->shape[i], s) != 0)
6630 gfc_error ("Source-expr at %L and allocate-object at %L must "
6631 "have the same shape", &e1->where, &e2->where);
6632 mpz_clear (s);
6633 return false;
6637 mpz_clear (s);
6640 return true;
6644 /* Resolve the expression in an ALLOCATE statement, doing the additional
6645 checks to see whether the expression is OK or not. The expression must
6646 have a trailing array reference that gives the size of the array. */
6648 static bool
6649 resolve_allocate_expr (gfc_expr *e, gfc_code *code)
6651 int i, pointer, allocatable, dimension, is_abstract;
6652 int codimension;
6653 bool coindexed;
6654 bool unlimited;
6655 symbol_attribute attr;
6656 gfc_ref *ref, *ref2;
6657 gfc_expr *e2;
6658 gfc_array_ref *ar;
6659 gfc_symbol *sym = NULL;
6660 gfc_alloc *a;
6661 gfc_component *c;
6662 bool t;
6664 /* Mark the utmost array component as being in allocate to allow DIMEN_STAR
6665 checking of coarrays. */
6666 for (ref = e->ref; ref; ref = ref->next)
6667 if (ref->next == NULL)
6668 break;
6670 if (ref && ref->type == REF_ARRAY)
6671 ref->u.ar.in_allocate = true;
6673 if (!gfc_resolve_expr (e))
6674 goto failure;
6676 /* Make sure the expression is allocatable or a pointer. If it is
6677 pointer, the next-to-last reference must be a pointer. */
6679 ref2 = NULL;
6680 if (e->symtree)
6681 sym = e->symtree->n.sym;
6683 /* Check whether ultimate component is abstract and CLASS. */
6684 is_abstract = 0;
6686 /* Is the allocate-object unlimited polymorphic? */
6687 unlimited = UNLIMITED_POLY(e);
6689 if (e->expr_type != EXPR_VARIABLE)
6691 allocatable = 0;
6692 attr = gfc_expr_attr (e);
6693 pointer = attr.pointer;
6694 dimension = attr.dimension;
6695 codimension = attr.codimension;
6697 else
6699 if (sym->ts.type == BT_CLASS && CLASS_DATA (sym))
6701 allocatable = CLASS_DATA (sym)->attr.allocatable;
6702 pointer = CLASS_DATA (sym)->attr.class_pointer;
6703 dimension = CLASS_DATA (sym)->attr.dimension;
6704 codimension = CLASS_DATA (sym)->attr.codimension;
6705 is_abstract = CLASS_DATA (sym)->attr.abstract;
6707 else
6709 allocatable = sym->attr.allocatable;
6710 pointer = sym->attr.pointer;
6711 dimension = sym->attr.dimension;
6712 codimension = sym->attr.codimension;
6715 coindexed = false;
6717 for (ref = e->ref; ref; ref2 = ref, ref = ref->next)
6719 switch (ref->type)
6721 case REF_ARRAY:
6722 if (ref->u.ar.codimen > 0)
6724 int n;
6725 for (n = ref->u.ar.dimen;
6726 n < ref->u.ar.dimen + ref->u.ar.codimen; n++)
6727 if (ref->u.ar.dimen_type[n] != DIMEN_THIS_IMAGE)
6729 coindexed = true;
6730 break;
6734 if (ref->next != NULL)
6735 pointer = 0;
6736 break;
6738 case REF_COMPONENT:
6739 /* F2008, C644. */
6740 if (coindexed)
6742 gfc_error ("Coindexed allocatable object at %L",
6743 &e->where);
6744 goto failure;
6747 c = ref->u.c.component;
6748 if (c->ts.type == BT_CLASS)
6750 allocatable = CLASS_DATA (c)->attr.allocatable;
6751 pointer = CLASS_DATA (c)->attr.class_pointer;
6752 dimension = CLASS_DATA (c)->attr.dimension;
6753 codimension = CLASS_DATA (c)->attr.codimension;
6754 is_abstract = CLASS_DATA (c)->attr.abstract;
6756 else
6758 allocatable = c->attr.allocatable;
6759 pointer = c->attr.pointer;
6760 dimension = c->attr.dimension;
6761 codimension = c->attr.codimension;
6762 is_abstract = c->attr.abstract;
6764 break;
6766 case REF_SUBSTRING:
6767 allocatable = 0;
6768 pointer = 0;
6769 break;
6774 /* Check for F08:C628. */
6775 if (allocatable == 0 && pointer == 0 && !unlimited)
6777 gfc_error ("Allocate-object at %L must be ALLOCATABLE or a POINTER",
6778 &e->where);
6779 goto failure;
6782 /* Some checks for the SOURCE tag. */
6783 if (code->expr3)
6785 /* Check F03:C631. */
6786 if (!gfc_type_compatible (&e->ts, &code->expr3->ts))
6788 gfc_error ("Type of entity at %L is type incompatible with "
6789 "source-expr at %L", &e->where, &code->expr3->where);
6790 goto failure;
6793 /* Check F03:C632 and restriction following Note 6.18. */
6794 if (code->expr3->rank > 0 && !conformable_arrays (code->expr3, e))
6795 goto failure;
6797 /* Check F03:C633. */
6798 if (code->expr3->ts.kind != e->ts.kind && !unlimited)
6800 gfc_error ("The allocate-object at %L and the source-expr at %L "
6801 "shall have the same kind type parameter",
6802 &e->where, &code->expr3->where);
6803 goto failure;
6806 /* Check F2008, C642. */
6807 if (code->expr3->ts.type == BT_DERIVED
6808 && ((codimension && gfc_expr_attr (code->expr3).lock_comp)
6809 || (code->expr3->ts.u.derived->from_intmod
6810 == INTMOD_ISO_FORTRAN_ENV
6811 && code->expr3->ts.u.derived->intmod_sym_id
6812 == ISOFORTRAN_LOCK_TYPE)))
6814 gfc_error ("The source-expr at %L shall neither be of type "
6815 "LOCK_TYPE nor have a LOCK_TYPE component if "
6816 "allocate-object at %L is a coarray",
6817 &code->expr3->where, &e->where);
6818 goto failure;
6822 /* Check F08:C629. */
6823 if (is_abstract && code->ext.alloc.ts.type == BT_UNKNOWN
6824 && !code->expr3)
6826 gcc_assert (e->ts.type == BT_CLASS);
6827 gfc_error ("Allocating %s of ABSTRACT base type at %L requires a "
6828 "type-spec or source-expr", sym->name, &e->where);
6829 goto failure;
6832 if (code->ext.alloc.ts.type == BT_CHARACTER && !e->ts.deferred)
6834 int cmp = gfc_dep_compare_expr (e->ts.u.cl->length,
6835 code->ext.alloc.ts.u.cl->length);
6836 if (cmp == 1 || cmp == -1 || cmp == -3)
6838 gfc_error ("Allocating %s at %L with type-spec requires the same "
6839 "character-length parameter as in the declaration",
6840 sym->name, &e->where);
6841 goto failure;
6845 /* In the variable definition context checks, gfc_expr_attr is used
6846 on the expression. This is fooled by the array specification
6847 present in e, thus we have to eliminate that one temporarily. */
6848 e2 = remove_last_array_ref (e);
6849 t = true;
6850 if (t && pointer)
6851 t = gfc_check_vardef_context (e2, true, true, false,
6852 _("ALLOCATE object"));
6853 if (t)
6854 t = gfc_check_vardef_context (e2, false, true, false,
6855 _("ALLOCATE object"));
6856 gfc_free_expr (e2);
6857 if (!t)
6858 goto failure;
6860 if (e->ts.type == BT_CLASS && CLASS_DATA (e)->attr.dimension
6861 && !code->expr3 && code->ext.alloc.ts.type == BT_DERIVED)
6863 /* For class arrays, the initialization with SOURCE is done
6864 using _copy and trans_call. It is convenient to exploit that
6865 when the allocated type is different from the declared type but
6866 no SOURCE exists by setting expr3. */
6867 code->expr3 = gfc_default_initializer (&code->ext.alloc.ts);
6869 else if (!code->expr3)
6871 /* Set up default initializer if needed. */
6872 gfc_typespec ts;
6873 gfc_expr *init_e;
6875 if (code->ext.alloc.ts.type == BT_DERIVED)
6876 ts = code->ext.alloc.ts;
6877 else
6878 ts = e->ts;
6880 if (ts.type == BT_CLASS)
6881 ts = ts.u.derived->components->ts;
6883 if (ts.type == BT_DERIVED && (init_e = gfc_default_initializer (&ts)))
6885 gfc_code *init_st = gfc_get_code (EXEC_INIT_ASSIGN);
6886 init_st->loc = code->loc;
6887 init_st->expr1 = gfc_expr_to_initialize (e);
6888 init_st->expr2 = init_e;
6889 init_st->next = code->next;
6890 code->next = init_st;
6893 else if (code->expr3->mold && code->expr3->ts.type == BT_DERIVED)
6895 /* Default initialization via MOLD (non-polymorphic). */
6896 gfc_expr *rhs = gfc_default_initializer (&code->expr3->ts);
6897 gfc_resolve_expr (rhs);
6898 gfc_free_expr (code->expr3);
6899 code->expr3 = rhs;
6902 if (e->ts.type == BT_CLASS && !unlimited && !UNLIMITED_POLY (code->expr3))
6904 /* Make sure the vtab symbol is present when
6905 the module variables are generated. */
6906 gfc_typespec ts = e->ts;
6907 if (code->expr3)
6908 ts = code->expr3->ts;
6909 else if (code->ext.alloc.ts.type == BT_DERIVED)
6910 ts = code->ext.alloc.ts;
6912 gfc_find_derived_vtab (ts.u.derived);
6914 if (dimension)
6915 e = gfc_expr_to_initialize (e);
6917 else if (unlimited && !UNLIMITED_POLY (code->expr3))
6919 /* Again, make sure the vtab symbol is present when
6920 the module variables are generated. */
6921 gfc_typespec *ts = NULL;
6922 if (code->expr3)
6923 ts = &code->expr3->ts;
6924 else
6925 ts = &code->ext.alloc.ts;
6927 gcc_assert (ts);
6929 gfc_find_vtab (ts);
6931 if (dimension)
6932 e = gfc_expr_to_initialize (e);
6935 if (dimension == 0 && codimension == 0)
6936 goto success;
6938 /* Make sure the last reference node is an array specification. */
6940 if (!ref2 || ref2->type != REF_ARRAY || ref2->u.ar.type == AR_FULL
6941 || (dimension && ref2->u.ar.dimen == 0))
6943 gfc_error ("Array specification required in ALLOCATE statement "
6944 "at %L", &e->where);
6945 goto failure;
6948 /* Make sure that the array section reference makes sense in the
6949 context of an ALLOCATE specification. */
6951 ar = &ref2->u.ar;
6953 if (codimension)
6954 for (i = ar->dimen; i < ar->dimen + ar->codimen; i++)
6955 if (ar->dimen_type[i] == DIMEN_THIS_IMAGE)
6957 gfc_error ("Coarray specification required in ALLOCATE statement "
6958 "at %L", &e->where);
6959 goto failure;
6962 for (i = 0; i < ar->dimen; i++)
6964 if (ref2->u.ar.type == AR_ELEMENT)
6965 goto check_symbols;
6967 switch (ar->dimen_type[i])
6969 case DIMEN_ELEMENT:
6970 break;
6972 case DIMEN_RANGE:
6973 if (ar->start[i] != NULL
6974 && ar->end[i] != NULL
6975 && ar->stride[i] == NULL)
6976 break;
6978 /* Fall Through... */
6980 case DIMEN_UNKNOWN:
6981 case DIMEN_VECTOR:
6982 case DIMEN_STAR:
6983 case DIMEN_THIS_IMAGE:
6984 gfc_error ("Bad array specification in ALLOCATE statement at %L",
6985 &e->where);
6986 goto failure;
6989 check_symbols:
6990 for (a = code->ext.alloc.list; a; a = a->next)
6992 sym = a->expr->symtree->n.sym;
6994 /* TODO - check derived type components. */
6995 if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS)
6996 continue;
6998 if ((ar->start[i] != NULL
6999 && gfc_find_sym_in_expr (sym, ar->start[i]))
7000 || (ar->end[i] != NULL
7001 && gfc_find_sym_in_expr (sym, ar->end[i])))
7003 gfc_error ("'%s' must not appear in the array specification at "
7004 "%L in the same ALLOCATE statement where it is "
7005 "itself allocated", sym->name, &ar->where);
7006 goto failure;
7011 for (i = ar->dimen; i < ar->codimen + ar->dimen; i++)
7013 if (ar->dimen_type[i] == DIMEN_ELEMENT
7014 || ar->dimen_type[i] == DIMEN_RANGE)
7016 if (i == (ar->dimen + ar->codimen - 1))
7018 gfc_error ("Expected '*' in coindex specification in ALLOCATE "
7019 "statement at %L", &e->where);
7020 goto failure;
7022 continue;
7025 if (ar->dimen_type[i] == DIMEN_STAR && i == (ar->dimen + ar->codimen - 1)
7026 && ar->stride[i] == NULL)
7027 break;
7029 gfc_error ("Bad coarray specification in ALLOCATE statement at %L",
7030 &e->where);
7031 goto failure;
7034 success:
7035 return true;
7037 failure:
7038 return false;
7041 static void
7042 resolve_allocate_deallocate (gfc_code *code, const char *fcn)
7044 gfc_expr *stat, *errmsg, *pe, *qe;
7045 gfc_alloc *a, *p, *q;
7047 stat = code->expr1;
7048 errmsg = code->expr2;
7050 /* Check the stat variable. */
7051 if (stat)
7053 gfc_check_vardef_context (stat, false, false, false,
7054 _("STAT variable"));
7056 if ((stat->ts.type != BT_INTEGER
7057 && !(stat->ref && (stat->ref->type == REF_ARRAY
7058 || stat->ref->type == REF_COMPONENT)))
7059 || stat->rank > 0)
7060 gfc_error ("Stat-variable at %L must be a scalar INTEGER "
7061 "variable", &stat->where);
7063 for (p = code->ext.alloc.list; p; p = p->next)
7064 if (p->expr->symtree->n.sym->name == stat->symtree->n.sym->name)
7066 gfc_ref *ref1, *ref2;
7067 bool found = true;
7069 for (ref1 = p->expr->ref, ref2 = stat->ref; ref1 && ref2;
7070 ref1 = ref1->next, ref2 = ref2->next)
7072 if (ref1->type != REF_COMPONENT || ref2->type != REF_COMPONENT)
7073 continue;
7074 if (ref1->u.c.component->name != ref2->u.c.component->name)
7076 found = false;
7077 break;
7081 if (found)
7083 gfc_error ("Stat-variable at %L shall not be %sd within "
7084 "the same %s statement", &stat->where, fcn, fcn);
7085 break;
7090 /* Check the errmsg variable. */
7091 if (errmsg)
7093 if (!stat)
7094 gfc_warning ("ERRMSG at %L is useless without a STAT tag",
7095 &errmsg->where);
7097 gfc_check_vardef_context (errmsg, false, false, false,
7098 _("ERRMSG variable"));
7100 if ((errmsg->ts.type != BT_CHARACTER
7101 && !(errmsg->ref
7102 && (errmsg->ref->type == REF_ARRAY
7103 || errmsg->ref->type == REF_COMPONENT)))
7104 || errmsg->rank > 0 )
7105 gfc_error ("Errmsg-variable at %L must be a scalar CHARACTER "
7106 "variable", &errmsg->where);
7108 for (p = code->ext.alloc.list; p; p = p->next)
7109 if (p->expr->symtree->n.sym->name == errmsg->symtree->n.sym->name)
7111 gfc_ref *ref1, *ref2;
7112 bool found = true;
7114 for (ref1 = p->expr->ref, ref2 = errmsg->ref; ref1 && ref2;
7115 ref1 = ref1->next, ref2 = ref2->next)
7117 if (ref1->type != REF_COMPONENT || ref2->type != REF_COMPONENT)
7118 continue;
7119 if (ref1->u.c.component->name != ref2->u.c.component->name)
7121 found = false;
7122 break;
7126 if (found)
7128 gfc_error ("Errmsg-variable at %L shall not be %sd within "
7129 "the same %s statement", &errmsg->where, fcn, fcn);
7130 break;
7135 /* Check that an allocate-object appears only once in the statement. */
7137 for (p = code->ext.alloc.list; p; p = p->next)
7139 pe = p->expr;
7140 for (q = p->next; q; q = q->next)
7142 qe = q->expr;
7143 if (pe->symtree->n.sym->name == qe->symtree->n.sym->name)
7145 /* This is a potential collision. */
7146 gfc_ref *pr = pe->ref;
7147 gfc_ref *qr = qe->ref;
7149 /* Follow the references until
7150 a) They start to differ, in which case there is no error;
7151 you can deallocate a%b and a%c in a single statement
7152 b) Both of them stop, which is an error
7153 c) One of them stops, which is also an error. */
7154 while (1)
7156 if (pr == NULL && qr == NULL)
7158 gfc_error ("Allocate-object at %L also appears at %L",
7159 &pe->where, &qe->where);
7160 break;
7162 else if (pr != NULL && qr == NULL)
7164 gfc_error ("Allocate-object at %L is subobject of"
7165 " object at %L", &pe->where, &qe->where);
7166 break;
7168 else if (pr == NULL && qr != NULL)
7170 gfc_error ("Allocate-object at %L is subobject of"
7171 " object at %L", &qe->where, &pe->where);
7172 break;
7174 /* Here, pr != NULL && qr != NULL */
7175 gcc_assert(pr->type == qr->type);
7176 if (pr->type == REF_ARRAY)
7178 /* Handle cases like allocate(v(3)%x(3), v(2)%x(3)),
7179 which are legal. */
7180 gcc_assert (qr->type == REF_ARRAY);
7182 if (pr->next && qr->next)
7184 int i;
7185 gfc_array_ref *par = &(pr->u.ar);
7186 gfc_array_ref *qar = &(qr->u.ar);
7188 for (i=0; i<par->dimen; i++)
7190 if ((par->start[i] != NULL
7191 || qar->start[i] != NULL)
7192 && gfc_dep_compare_expr (par->start[i],
7193 qar->start[i]) != 0)
7194 goto break_label;
7198 else
7200 if (pr->u.c.component->name != qr->u.c.component->name)
7201 break;
7204 pr = pr->next;
7205 qr = qr->next;
7207 break_label:
7213 if (strcmp (fcn, "ALLOCATE") == 0)
7215 for (a = code->ext.alloc.list; a; a = a->next)
7216 resolve_allocate_expr (a->expr, code);
7218 else
7220 for (a = code->ext.alloc.list; a; a = a->next)
7221 resolve_deallocate_expr (a->expr);
7226 /************ SELECT CASE resolution subroutines ************/
7228 /* Callback function for our mergesort variant. Determines interval
7229 overlaps for CASEs. Return <0 if op1 < op2, 0 for overlap, >0 for
7230 op1 > op2. Assumes we're not dealing with the default case.
7231 We have op1 = (:L), (K:L) or (K:) and op2 = (:N), (M:N) or (M:).
7232 There are nine situations to check. */
7234 static int
7235 compare_cases (const gfc_case *op1, const gfc_case *op2)
7237 int retval;
7239 if (op1->low == NULL) /* op1 = (:L) */
7241 /* op2 = (:N), so overlap. */
7242 retval = 0;
7243 /* op2 = (M:) or (M:N), L < M */
7244 if (op2->low != NULL
7245 && gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
7246 retval = -1;
7248 else if (op1->high == NULL) /* op1 = (K:) */
7250 /* op2 = (M:), so overlap. */
7251 retval = 0;
7252 /* op2 = (:N) or (M:N), K > N */
7253 if (op2->high != NULL
7254 && gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
7255 retval = 1;
7257 else /* op1 = (K:L) */
7259 if (op2->low == NULL) /* op2 = (:N), K > N */
7260 retval = (gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
7261 ? 1 : 0;
7262 else if (op2->high == NULL) /* op2 = (M:), L < M */
7263 retval = (gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
7264 ? -1 : 0;
7265 else /* op2 = (M:N) */
7267 retval = 0;
7268 /* L < M */
7269 if (gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
7270 retval = -1;
7271 /* K > N */
7272 else if (gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
7273 retval = 1;
7277 return retval;
7281 /* Merge-sort a double linked case list, detecting overlap in the
7282 process. LIST is the head of the double linked case list before it
7283 is sorted. Returns the head of the sorted list if we don't see any
7284 overlap, or NULL otherwise. */
7286 static gfc_case *
7287 check_case_overlap (gfc_case *list)
7289 gfc_case *p, *q, *e, *tail;
7290 int insize, nmerges, psize, qsize, cmp, overlap_seen;
7292 /* If the passed list was empty, return immediately. */
7293 if (!list)
7294 return NULL;
7296 overlap_seen = 0;
7297 insize = 1;
7299 /* Loop unconditionally. The only exit from this loop is a return
7300 statement, when we've finished sorting the case list. */
7301 for (;;)
7303 p = list;
7304 list = NULL;
7305 tail = NULL;
7307 /* Count the number of merges we do in this pass. */
7308 nmerges = 0;
7310 /* Loop while there exists a merge to be done. */
7311 while (p)
7313 int i;
7315 /* Count this merge. */
7316 nmerges++;
7318 /* Cut the list in two pieces by stepping INSIZE places
7319 forward in the list, starting from P. */
7320 psize = 0;
7321 q = p;
7322 for (i = 0; i < insize; i++)
7324 psize++;
7325 q = q->right;
7326 if (!q)
7327 break;
7329 qsize = insize;
7331 /* Now we have two lists. Merge them! */
7332 while (psize > 0 || (qsize > 0 && q != NULL))
7334 /* See from which the next case to merge comes from. */
7335 if (psize == 0)
7337 /* P is empty so the next case must come from Q. */
7338 e = q;
7339 q = q->right;
7340 qsize--;
7342 else if (qsize == 0 || q == NULL)
7344 /* Q is empty. */
7345 e = p;
7346 p = p->right;
7347 psize--;
7349 else
7351 cmp = compare_cases (p, q);
7352 if (cmp < 0)
7354 /* The whole case range for P is less than the
7355 one for Q. */
7356 e = p;
7357 p = p->right;
7358 psize--;
7360 else if (cmp > 0)
7362 /* The whole case range for Q is greater than
7363 the case range for P. */
7364 e = q;
7365 q = q->right;
7366 qsize--;
7368 else
7370 /* The cases overlap, or they are the same
7371 element in the list. Either way, we must
7372 issue an error and get the next case from P. */
7373 /* FIXME: Sort P and Q by line number. */
7374 gfc_error ("CASE label at %L overlaps with CASE "
7375 "label at %L", &p->where, &q->where);
7376 overlap_seen = 1;
7377 e = p;
7378 p = p->right;
7379 psize--;
7383 /* Add the next element to the merged list. */
7384 if (tail)
7385 tail->right = e;
7386 else
7387 list = e;
7388 e->left = tail;
7389 tail = e;
7392 /* P has now stepped INSIZE places along, and so has Q. So
7393 they're the same. */
7394 p = q;
7396 tail->right = NULL;
7398 /* If we have done only one merge or none at all, we've
7399 finished sorting the cases. */
7400 if (nmerges <= 1)
7402 if (!overlap_seen)
7403 return list;
7404 else
7405 return NULL;
7408 /* Otherwise repeat, merging lists twice the size. */
7409 insize *= 2;
7414 /* Check to see if an expression is suitable for use in a CASE statement.
7415 Makes sure that all case expressions are scalar constants of the same
7416 type. Return false if anything is wrong. */
7418 static bool
7419 validate_case_label_expr (gfc_expr *e, gfc_expr *case_expr)
7421 if (e == NULL) return true;
7423 if (e->ts.type != case_expr->ts.type)
7425 gfc_error ("Expression in CASE statement at %L must be of type %s",
7426 &e->where, gfc_basic_typename (case_expr->ts.type));
7427 return false;
7430 /* C805 (R808) For a given case-construct, each case-value shall be of
7431 the same type as case-expr. For character type, length differences
7432 are allowed, but the kind type parameters shall be the same. */
7434 if (case_expr->ts.type == BT_CHARACTER && e->ts.kind != case_expr->ts.kind)
7436 gfc_error ("Expression in CASE statement at %L must be of kind %d",
7437 &e->where, case_expr->ts.kind);
7438 return false;
7441 /* Convert the case value kind to that of case expression kind,
7442 if needed */
7444 if (e->ts.kind != case_expr->ts.kind)
7445 gfc_convert_type_warn (e, &case_expr->ts, 2, 0);
7447 if (e->rank != 0)
7449 gfc_error ("Expression in CASE statement at %L must be scalar",
7450 &e->where);
7451 return false;
7454 return true;
7458 /* Given a completely parsed select statement, we:
7460 - Validate all expressions and code within the SELECT.
7461 - Make sure that the selection expression is not of the wrong type.
7462 - Make sure that no case ranges overlap.
7463 - Eliminate unreachable cases and unreachable code resulting from
7464 removing case labels.
7466 The standard does allow unreachable cases, e.g. CASE (5:3). But
7467 they are a hassle for code generation, and to prevent that, we just
7468 cut them out here. This is not necessary for overlapping cases
7469 because they are illegal and we never even try to generate code.
7471 We have the additional caveat that a SELECT construct could have
7472 been a computed GOTO in the source code. Fortunately we can fairly
7473 easily work around that here: The case_expr for a "real" SELECT CASE
7474 is in code->expr1, but for a computed GOTO it is in code->expr2. All
7475 we have to do is make sure that the case_expr is a scalar integer
7476 expression. */
7478 static void
7479 resolve_select (gfc_code *code, bool select_type)
7481 gfc_code *body;
7482 gfc_expr *case_expr;
7483 gfc_case *cp, *default_case, *tail, *head;
7484 int seen_unreachable;
7485 int seen_logical;
7486 int ncases;
7487 bt type;
7488 bool t;
7490 if (code->expr1 == NULL)
7492 /* This was actually a computed GOTO statement. */
7493 case_expr = code->expr2;
7494 if (case_expr->ts.type != BT_INTEGER|| case_expr->rank != 0)
7495 gfc_error ("Selection expression in computed GOTO statement "
7496 "at %L must be a scalar integer expression",
7497 &case_expr->where);
7499 /* Further checking is not necessary because this SELECT was built
7500 by the compiler, so it should always be OK. Just move the
7501 case_expr from expr2 to expr so that we can handle computed
7502 GOTOs as normal SELECTs from here on. */
7503 code->expr1 = code->expr2;
7504 code->expr2 = NULL;
7505 return;
7508 case_expr = code->expr1;
7509 type = case_expr->ts.type;
7511 /* F08:C830. */
7512 if (type != BT_LOGICAL && type != BT_INTEGER && type != BT_CHARACTER)
7514 gfc_error ("Argument of SELECT statement at %L cannot be %s",
7515 &case_expr->where, gfc_typename (&case_expr->ts));
7517 /* Punt. Going on here just produce more garbage error messages. */
7518 return;
7521 /* F08:R842. */
7522 if (!select_type && case_expr->rank != 0)
7524 gfc_error ("Argument of SELECT statement at %L must be a scalar "
7525 "expression", &case_expr->where);
7527 /* Punt. */
7528 return;
7531 /* Raise a warning if an INTEGER case value exceeds the range of
7532 the case-expr. Later, all expressions will be promoted to the
7533 largest kind of all case-labels. */
7535 if (type == BT_INTEGER)
7536 for (body = code->block; body; body = body->block)
7537 for (cp = body->ext.block.case_list; cp; cp = cp->next)
7539 if (cp->low
7540 && gfc_check_integer_range (cp->low->value.integer,
7541 case_expr->ts.kind) != ARITH_OK)
7542 gfc_warning ("Expression in CASE statement at %L is "
7543 "not in the range of %s", &cp->low->where,
7544 gfc_typename (&case_expr->ts));
7546 if (cp->high
7547 && cp->low != cp->high
7548 && gfc_check_integer_range (cp->high->value.integer,
7549 case_expr->ts.kind) != ARITH_OK)
7550 gfc_warning ("Expression in CASE statement at %L is "
7551 "not in the range of %s", &cp->high->where,
7552 gfc_typename (&case_expr->ts));
7555 /* PR 19168 has a long discussion concerning a mismatch of the kinds
7556 of the SELECT CASE expression and its CASE values. Walk the lists
7557 of case values, and if we find a mismatch, promote case_expr to
7558 the appropriate kind. */
7560 if (type == BT_LOGICAL || type == BT_INTEGER)
7562 for (body = code->block; body; body = body->block)
7564 /* Walk the case label list. */
7565 for (cp = body->ext.block.case_list; cp; cp = cp->next)
7567 /* Intercept the DEFAULT case. It does not have a kind. */
7568 if (cp->low == NULL && cp->high == NULL)
7569 continue;
7571 /* Unreachable case ranges are discarded, so ignore. */
7572 if (cp->low != NULL && cp->high != NULL
7573 && cp->low != cp->high
7574 && gfc_compare_expr (cp->low, cp->high, INTRINSIC_GT) > 0)
7575 continue;
7577 if (cp->low != NULL
7578 && case_expr->ts.kind != gfc_kind_max(case_expr, cp->low))
7579 gfc_convert_type_warn (case_expr, &cp->low->ts, 2, 0);
7581 if (cp->high != NULL
7582 && case_expr->ts.kind != gfc_kind_max(case_expr, cp->high))
7583 gfc_convert_type_warn (case_expr, &cp->high->ts, 2, 0);
7588 /* Assume there is no DEFAULT case. */
7589 default_case = NULL;
7590 head = tail = NULL;
7591 ncases = 0;
7592 seen_logical = 0;
7594 for (body = code->block; body; body = body->block)
7596 /* Assume the CASE list is OK, and all CASE labels can be matched. */
7597 t = true;
7598 seen_unreachable = 0;
7600 /* Walk the case label list, making sure that all case labels
7601 are legal. */
7602 for (cp = body->ext.block.case_list; cp; cp = cp->next)
7604 /* Count the number of cases in the whole construct. */
7605 ncases++;
7607 /* Intercept the DEFAULT case. */
7608 if (cp->low == NULL && cp->high == NULL)
7610 if (default_case != NULL)
7612 gfc_error ("The DEFAULT CASE at %L cannot be followed "
7613 "by a second DEFAULT CASE at %L",
7614 &default_case->where, &cp->where);
7615 t = false;
7616 break;
7618 else
7620 default_case = cp;
7621 continue;
7625 /* Deal with single value cases and case ranges. Errors are
7626 issued from the validation function. */
7627 if (!validate_case_label_expr (cp->low, case_expr)
7628 || !validate_case_label_expr (cp->high, case_expr))
7630 t = false;
7631 break;
7634 if (type == BT_LOGICAL
7635 && ((cp->low == NULL || cp->high == NULL)
7636 || cp->low != cp->high))
7638 gfc_error ("Logical range in CASE statement at %L is not "
7639 "allowed", &cp->low->where);
7640 t = false;
7641 break;
7644 if (type == BT_LOGICAL && cp->low->expr_type == EXPR_CONSTANT)
7646 int value;
7647 value = cp->low->value.logical == 0 ? 2 : 1;
7648 if (value & seen_logical)
7650 gfc_error ("Constant logical value in CASE statement "
7651 "is repeated at %L",
7652 &cp->low->where);
7653 t = false;
7654 break;
7656 seen_logical |= value;
7659 if (cp->low != NULL && cp->high != NULL
7660 && cp->low != cp->high
7661 && gfc_compare_expr (cp->low, cp->high, INTRINSIC_GT) > 0)
7663 if (gfc_option.warn_surprising)
7664 gfc_warning ("Range specification at %L can never "
7665 "be matched", &cp->where);
7667 cp->unreachable = 1;
7668 seen_unreachable = 1;
7670 else
7672 /* If the case range can be matched, it can also overlap with
7673 other cases. To make sure it does not, we put it in a
7674 double linked list here. We sort that with a merge sort
7675 later on to detect any overlapping cases. */
7676 if (!head)
7678 head = tail = cp;
7679 head->right = head->left = NULL;
7681 else
7683 tail->right = cp;
7684 tail->right->left = tail;
7685 tail = tail->right;
7686 tail->right = NULL;
7691 /* It there was a failure in the previous case label, give up
7692 for this case label list. Continue with the next block. */
7693 if (!t)
7694 continue;
7696 /* See if any case labels that are unreachable have been seen.
7697 If so, we eliminate them. This is a bit of a kludge because
7698 the case lists for a single case statement (label) is a
7699 single forward linked lists. */
7700 if (seen_unreachable)
7702 /* Advance until the first case in the list is reachable. */
7703 while (body->ext.block.case_list != NULL
7704 && body->ext.block.case_list->unreachable)
7706 gfc_case *n = body->ext.block.case_list;
7707 body->ext.block.case_list = body->ext.block.case_list->next;
7708 n->next = NULL;
7709 gfc_free_case_list (n);
7712 /* Strip all other unreachable cases. */
7713 if (body->ext.block.case_list)
7715 for (cp = body->ext.block.case_list; cp->next; cp = cp->next)
7717 if (cp->next->unreachable)
7719 gfc_case *n = cp->next;
7720 cp->next = cp->next->next;
7721 n->next = NULL;
7722 gfc_free_case_list (n);
7729 /* See if there were overlapping cases. If the check returns NULL,
7730 there was overlap. In that case we don't do anything. If head
7731 is non-NULL, we prepend the DEFAULT case. The sorted list can
7732 then used during code generation for SELECT CASE constructs with
7733 a case expression of a CHARACTER type. */
7734 if (head)
7736 head = check_case_overlap (head);
7738 /* Prepend the default_case if it is there. */
7739 if (head != NULL && default_case)
7741 default_case->left = NULL;
7742 default_case->right = head;
7743 head->left = default_case;
7747 /* Eliminate dead blocks that may be the result if we've seen
7748 unreachable case labels for a block. */
7749 for (body = code; body && body->block; body = body->block)
7751 if (body->block->ext.block.case_list == NULL)
7753 /* Cut the unreachable block from the code chain. */
7754 gfc_code *c = body->block;
7755 body->block = c->block;
7757 /* Kill the dead block, but not the blocks below it. */
7758 c->block = NULL;
7759 gfc_free_statements (c);
7763 /* More than two cases is legal but insane for logical selects.
7764 Issue a warning for it. */
7765 if (gfc_option.warn_surprising && type == BT_LOGICAL
7766 && ncases > 2)
7767 gfc_warning ("Logical SELECT CASE block at %L has more that two cases",
7768 &code->loc);
7772 /* Check if a derived type is extensible. */
7774 bool
7775 gfc_type_is_extensible (gfc_symbol *sym)
7777 return !(sym->attr.is_bind_c || sym->attr.sequence
7778 || (sym->attr.is_class
7779 && sym->components->ts.u.derived->attr.unlimited_polymorphic));
7783 /* Resolve an associate-name: Resolve target and ensure the type-spec is
7784 correct as well as possibly the array-spec. */
7786 static void
7787 resolve_assoc_var (gfc_symbol* sym, bool resolve_target)
7789 gfc_expr* target;
7791 gcc_assert (sym->assoc);
7792 gcc_assert (sym->attr.flavor == FL_VARIABLE);
7794 /* If this is for SELECT TYPE, the target may not yet be set. In that
7795 case, return. Resolution will be called later manually again when
7796 this is done. */
7797 target = sym->assoc->target;
7798 if (!target)
7799 return;
7800 gcc_assert (!sym->assoc->dangling);
7802 if (resolve_target && !gfc_resolve_expr (target))
7803 return;
7805 /* For variable targets, we get some attributes from the target. */
7806 if (target->expr_type == EXPR_VARIABLE)
7808 gfc_symbol* tsym;
7810 gcc_assert (target->symtree);
7811 tsym = target->symtree->n.sym;
7813 sym->attr.asynchronous = tsym->attr.asynchronous;
7814 sym->attr.volatile_ = tsym->attr.volatile_;
7816 sym->attr.target = tsym->attr.target
7817 || gfc_expr_attr (target).pointer;
7818 if (is_subref_array (target))
7819 sym->attr.subref_array_pointer = 1;
7822 /* Get type if this was not already set. Note that it can be
7823 some other type than the target in case this is a SELECT TYPE
7824 selector! So we must not update when the type is already there. */
7825 if (sym->ts.type == BT_UNKNOWN)
7826 sym->ts = target->ts;
7827 gcc_assert (sym->ts.type != BT_UNKNOWN);
7829 /* See if this is a valid association-to-variable. */
7830 sym->assoc->variable = (target->expr_type == EXPR_VARIABLE
7831 && !gfc_has_vector_subscript (target));
7833 /* Finally resolve if this is an array or not. */
7834 if (sym->attr.dimension && target->rank == 0)
7836 gfc_error ("Associate-name '%s' at %L is used as array",
7837 sym->name, &sym->declared_at);
7838 sym->attr.dimension = 0;
7839 return;
7842 /* We cannot deal with class selectors that need temporaries. */
7843 if (target->ts.type == BT_CLASS
7844 && gfc_ref_needs_temporary_p (target->ref))
7846 gfc_error ("CLASS selector at %L needs a temporary which is not "
7847 "yet implemented", &target->where);
7848 return;
7851 if (target->ts.type != BT_CLASS && target->rank > 0)
7852 sym->attr.dimension = 1;
7853 else if (target->ts.type == BT_CLASS)
7854 gfc_fix_class_refs (target);
7856 /* The associate-name will have a correct type by now. Make absolutely
7857 sure that it has not picked up a dimension attribute. */
7858 if (sym->ts.type == BT_CLASS)
7859 sym->attr.dimension = 0;
7861 if (sym->attr.dimension)
7863 sym->as = gfc_get_array_spec ();
7864 sym->as->rank = target->rank;
7865 sym->as->type = AS_DEFERRED;
7867 /* Target must not be coindexed, thus the associate-variable
7868 has no corank. */
7869 sym->as->corank = 0;
7872 /* Mark this as an associate variable. */
7873 sym->attr.associate_var = 1;
7875 /* If the target is a good class object, so is the associate variable. */
7876 if (sym->ts.type == BT_CLASS && gfc_expr_attr (target).class_ok)
7877 sym->attr.class_ok = 1;
7881 /* Resolve a SELECT TYPE statement. */
7883 static void
7884 resolve_select_type (gfc_code *code, gfc_namespace *old_ns)
7886 gfc_symbol *selector_type;
7887 gfc_code *body, *new_st, *if_st, *tail;
7888 gfc_code *class_is = NULL, *default_case = NULL;
7889 gfc_case *c;
7890 gfc_symtree *st;
7891 char name[GFC_MAX_SYMBOL_LEN];
7892 gfc_namespace *ns;
7893 int error = 0;
7894 int charlen = 0;
7896 ns = code->ext.block.ns;
7897 gfc_resolve (ns);
7899 /* Check for F03:C813. */
7900 if (code->expr1->ts.type != BT_CLASS
7901 && !(code->expr2 && code->expr2->ts.type == BT_CLASS))
7903 gfc_error ("Selector shall be polymorphic in SELECT TYPE statement "
7904 "at %L", &code->loc);
7905 return;
7908 if (!code->expr1->symtree->n.sym->attr.class_ok)
7909 return;
7911 if (code->expr2)
7913 if (code->expr1->symtree->n.sym->attr.untyped)
7914 code->expr1->symtree->n.sym->ts = code->expr2->ts;
7915 selector_type = CLASS_DATA (code->expr2)->ts.u.derived;
7917 /* F2008: C803 The selector expression must not be coindexed. */
7918 if (gfc_is_coindexed (code->expr2))
7920 gfc_error ("Selector at %L must not be coindexed",
7921 &code->expr2->where);
7922 return;
7926 else
7928 selector_type = CLASS_DATA (code->expr1)->ts.u.derived;
7930 if (gfc_is_coindexed (code->expr1))
7932 gfc_error ("Selector at %L must not be coindexed",
7933 &code->expr1->where);
7934 return;
7938 /* Loop over TYPE IS / CLASS IS cases. */
7939 for (body = code->block; body; body = body->block)
7941 c = body->ext.block.case_list;
7943 /* Check F03:C815. */
7944 if ((c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
7945 && !selector_type->attr.unlimited_polymorphic
7946 && !gfc_type_is_extensible (c->ts.u.derived))
7948 gfc_error ("Derived type '%s' at %L must be extensible",
7949 c->ts.u.derived->name, &c->where);
7950 error++;
7951 continue;
7954 /* Check F03:C816. */
7955 if (c->ts.type != BT_UNKNOWN && !selector_type->attr.unlimited_polymorphic
7956 && ((c->ts.type != BT_DERIVED && c->ts.type != BT_CLASS)
7957 || !gfc_type_is_extension_of (selector_type, c->ts.u.derived)))
7959 if (c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
7960 gfc_error ("Derived type '%s' at %L must be an extension of '%s'",
7961 c->ts.u.derived->name, &c->where, selector_type->name);
7962 else
7963 gfc_error ("Unexpected intrinsic type '%s' at %L",
7964 gfc_basic_typename (c->ts.type), &c->where);
7965 error++;
7966 continue;
7969 /* Check F03:C814. */
7970 if (c->ts.type == BT_CHARACTER && c->ts.u.cl->length != NULL)
7972 gfc_error ("The type-spec at %L shall specify that each length "
7973 "type parameter is assumed", &c->where);
7974 error++;
7975 continue;
7978 /* Intercept the DEFAULT case. */
7979 if (c->ts.type == BT_UNKNOWN)
7981 /* Check F03:C818. */
7982 if (default_case)
7984 gfc_error ("The DEFAULT CASE at %L cannot be followed "
7985 "by a second DEFAULT CASE at %L",
7986 &default_case->ext.block.case_list->where, &c->where);
7987 error++;
7988 continue;
7991 default_case = body;
7995 if (error > 0)
7996 return;
7998 /* Transform SELECT TYPE statement to BLOCK and associate selector to
7999 target if present. If there are any EXIT statements referring to the
8000 SELECT TYPE construct, this is no problem because the gfc_code
8001 reference stays the same and EXIT is equally possible from the BLOCK
8002 it is changed to. */
8003 code->op = EXEC_BLOCK;
8004 if (code->expr2)
8006 gfc_association_list* assoc;
8008 assoc = gfc_get_association_list ();
8009 assoc->st = code->expr1->symtree;
8010 assoc->target = gfc_copy_expr (code->expr2);
8011 assoc->target->where = code->expr2->where;
8012 /* assoc->variable will be set by resolve_assoc_var. */
8014 code->ext.block.assoc = assoc;
8015 code->expr1->symtree->n.sym->assoc = assoc;
8017 resolve_assoc_var (code->expr1->symtree->n.sym, false);
8019 else
8020 code->ext.block.assoc = NULL;
8022 /* Add EXEC_SELECT to switch on type. */
8023 new_st = gfc_get_code (code->op);
8024 new_st->expr1 = code->expr1;
8025 new_st->expr2 = code->expr2;
8026 new_st->block = code->block;
8027 code->expr1 = code->expr2 = NULL;
8028 code->block = NULL;
8029 if (!ns->code)
8030 ns->code = new_st;
8031 else
8032 ns->code->next = new_st;
8033 code = new_st;
8034 code->op = EXEC_SELECT;
8036 gfc_add_vptr_component (code->expr1);
8037 gfc_add_hash_component (code->expr1);
8039 /* Loop over TYPE IS / CLASS IS cases. */
8040 for (body = code->block; body; body = body->block)
8042 c = body->ext.block.case_list;
8044 if (c->ts.type == BT_DERIVED)
8045 c->low = c->high = gfc_get_int_expr (gfc_default_integer_kind, NULL,
8046 c->ts.u.derived->hash_value);
8047 else if (c->ts.type != BT_CLASS && c->ts.type != BT_UNKNOWN)
8049 gfc_symbol *ivtab;
8050 gfc_expr *e;
8052 ivtab = gfc_find_vtab (&c->ts);
8053 gcc_assert (ivtab && CLASS_DATA (ivtab)->initializer);
8054 e = CLASS_DATA (ivtab)->initializer;
8055 c->low = c->high = gfc_copy_expr (e);
8058 else if (c->ts.type == BT_UNKNOWN)
8059 continue;
8061 /* Associate temporary to selector. This should only be done
8062 when this case is actually true, so build a new ASSOCIATE
8063 that does precisely this here (instead of using the
8064 'global' one). */
8066 if (c->ts.type == BT_CLASS)
8067 sprintf (name, "__tmp_class_%s", c->ts.u.derived->name);
8068 else if (c->ts.type == BT_DERIVED)
8069 sprintf (name, "__tmp_type_%s", c->ts.u.derived->name);
8070 else if (c->ts.type == BT_CHARACTER)
8072 if (c->ts.u.cl && c->ts.u.cl->length
8073 && c->ts.u.cl->length->expr_type == EXPR_CONSTANT)
8074 charlen = mpz_get_si (c->ts.u.cl->length->value.integer);
8075 sprintf (name, "__tmp_%s_%d_%d", gfc_basic_typename (c->ts.type),
8076 charlen, c->ts.kind);
8078 else
8079 sprintf (name, "__tmp_%s_%d", gfc_basic_typename (c->ts.type),
8080 c->ts.kind);
8082 st = gfc_find_symtree (ns->sym_root, name);
8083 gcc_assert (st->n.sym->assoc);
8084 st->n.sym->assoc->target = gfc_get_variable_expr (code->expr1->symtree);
8085 st->n.sym->assoc->target->where = code->expr1->where;
8086 if (c->ts.type != BT_CLASS && c->ts.type != BT_UNKNOWN)
8087 gfc_add_data_component (st->n.sym->assoc->target);
8089 new_st = gfc_get_code (EXEC_BLOCK);
8090 new_st->ext.block.ns = gfc_build_block_ns (ns);
8091 new_st->ext.block.ns->code = body->next;
8092 body->next = new_st;
8094 /* Chain in the new list only if it is marked as dangling. Otherwise
8095 there is a CASE label overlap and this is already used. Just ignore,
8096 the error is diagnosed elsewhere. */
8097 if (st->n.sym->assoc->dangling)
8099 new_st->ext.block.assoc = st->n.sym->assoc;
8100 st->n.sym->assoc->dangling = 0;
8103 resolve_assoc_var (st->n.sym, false);
8106 /* Take out CLASS IS cases for separate treatment. */
8107 body = code;
8108 while (body && body->block)
8110 if (body->block->ext.block.case_list->ts.type == BT_CLASS)
8112 /* Add to class_is list. */
8113 if (class_is == NULL)
8115 class_is = body->block;
8116 tail = class_is;
8118 else
8120 for (tail = class_is; tail->block; tail = tail->block) ;
8121 tail->block = body->block;
8122 tail = tail->block;
8124 /* Remove from EXEC_SELECT list. */
8125 body->block = body->block->block;
8126 tail->block = NULL;
8128 else
8129 body = body->block;
8132 if (class_is)
8134 gfc_symbol *vtab;
8136 if (!default_case)
8138 /* Add a default case to hold the CLASS IS cases. */
8139 for (tail = code; tail->block; tail = tail->block) ;
8140 tail->block = gfc_get_code (EXEC_SELECT_TYPE);
8141 tail = tail->block;
8142 tail->ext.block.case_list = gfc_get_case ();
8143 tail->ext.block.case_list->ts.type = BT_UNKNOWN;
8144 tail->next = NULL;
8145 default_case = tail;
8148 /* More than one CLASS IS block? */
8149 if (class_is->block)
8151 gfc_code **c1,*c2;
8152 bool swapped;
8153 /* Sort CLASS IS blocks by extension level. */
8156 swapped = false;
8157 for (c1 = &class_is; (*c1) && (*c1)->block; c1 = &((*c1)->block))
8159 c2 = (*c1)->block;
8160 /* F03:C817 (check for doubles). */
8161 if ((*c1)->ext.block.case_list->ts.u.derived->hash_value
8162 == c2->ext.block.case_list->ts.u.derived->hash_value)
8164 gfc_error ("Double CLASS IS block in SELECT TYPE "
8165 "statement at %L",
8166 &c2->ext.block.case_list->where);
8167 return;
8169 if ((*c1)->ext.block.case_list->ts.u.derived->attr.extension
8170 < c2->ext.block.case_list->ts.u.derived->attr.extension)
8172 /* Swap. */
8173 (*c1)->block = c2->block;
8174 c2->block = *c1;
8175 *c1 = c2;
8176 swapped = true;
8180 while (swapped);
8183 /* Generate IF chain. */
8184 if_st = gfc_get_code (EXEC_IF);
8185 new_st = if_st;
8186 for (body = class_is; body; body = body->block)
8188 new_st->block = gfc_get_code (EXEC_IF);
8189 new_st = new_st->block;
8190 /* Set up IF condition: Call _gfortran_is_extension_of. */
8191 new_st->expr1 = gfc_get_expr ();
8192 new_st->expr1->expr_type = EXPR_FUNCTION;
8193 new_st->expr1->ts.type = BT_LOGICAL;
8194 new_st->expr1->ts.kind = 4;
8195 new_st->expr1->value.function.name = gfc_get_string (PREFIX ("is_extension_of"));
8196 new_st->expr1->value.function.isym = XCNEW (gfc_intrinsic_sym);
8197 new_st->expr1->value.function.isym->id = GFC_ISYM_EXTENDS_TYPE_OF;
8198 /* Set up arguments. */
8199 new_st->expr1->value.function.actual = gfc_get_actual_arglist ();
8200 new_st->expr1->value.function.actual->expr = gfc_get_variable_expr (code->expr1->symtree);
8201 new_st->expr1->value.function.actual->expr->where = code->loc;
8202 gfc_add_vptr_component (new_st->expr1->value.function.actual->expr);
8203 vtab = gfc_find_derived_vtab (body->ext.block.case_list->ts.u.derived);
8204 st = gfc_find_symtree (vtab->ns->sym_root, vtab->name);
8205 new_st->expr1->value.function.actual->next = gfc_get_actual_arglist ();
8206 new_st->expr1->value.function.actual->next->expr = gfc_get_variable_expr (st);
8207 new_st->next = body->next;
8209 if (default_case->next)
8211 new_st->block = gfc_get_code (EXEC_IF);
8212 new_st = new_st->block;
8213 new_st->next = default_case->next;
8216 /* Replace CLASS DEFAULT code by the IF chain. */
8217 default_case->next = if_st;
8220 /* Resolve the internal code. This can not be done earlier because
8221 it requires that the sym->assoc of selectors is set already. */
8222 gfc_current_ns = ns;
8223 gfc_resolve_blocks (code->block, gfc_current_ns);
8224 gfc_current_ns = old_ns;
8226 resolve_select (code, true);
8230 /* Resolve a transfer statement. This is making sure that:
8231 -- a derived type being transferred has only non-pointer components
8232 -- a derived type being transferred doesn't have private components, unless
8233 it's being transferred from the module where the type was defined
8234 -- we're not trying to transfer a whole assumed size array. */
8236 static void
8237 resolve_transfer (gfc_code *code)
8239 gfc_typespec *ts;
8240 gfc_symbol *sym;
8241 gfc_ref *ref;
8242 gfc_expr *exp;
8244 exp = code->expr1;
8246 while (exp != NULL && exp->expr_type == EXPR_OP
8247 && exp->value.op.op == INTRINSIC_PARENTHESES)
8248 exp = exp->value.op.op1;
8250 if (exp && exp->expr_type == EXPR_NULL
8251 && code->ext.dt)
8253 gfc_error ("Invalid context for NULL () intrinsic at %L",
8254 &exp->where);
8255 return;
8258 if (exp == NULL || (exp->expr_type != EXPR_VARIABLE
8259 && exp->expr_type != EXPR_FUNCTION))
8260 return;
8262 /* If we are reading, the variable will be changed. Note that
8263 code->ext.dt may be NULL if the TRANSFER is related to
8264 an INQUIRE statement -- but in this case, we are not reading, either. */
8265 if (code->ext.dt && code->ext.dt->dt_io_kind->value.iokind == M_READ
8266 && !gfc_check_vardef_context (exp, false, false, false,
8267 _("item in READ")))
8268 return;
8270 sym = exp->symtree->n.sym;
8271 ts = &sym->ts;
8273 /* Go to actual component transferred. */
8274 for (ref = exp->ref; ref; ref = ref->next)
8275 if (ref->type == REF_COMPONENT)
8276 ts = &ref->u.c.component->ts;
8278 if (ts->type == BT_CLASS)
8280 /* FIXME: Test for defined input/output. */
8281 gfc_error ("Data transfer element at %L cannot be polymorphic unless "
8282 "it is processed by a defined input/output procedure",
8283 &code->loc);
8284 return;
8287 if (ts->type == BT_DERIVED)
8289 /* Check that transferred derived type doesn't contain POINTER
8290 components. */
8291 if (ts->u.derived->attr.pointer_comp)
8293 gfc_error ("Data transfer element at %L cannot have POINTER "
8294 "components unless it is processed by a defined "
8295 "input/output procedure", &code->loc);
8296 return;
8299 /* F08:C935. */
8300 if (ts->u.derived->attr.proc_pointer_comp)
8302 gfc_error ("Data transfer element at %L cannot have "
8303 "procedure pointer components", &code->loc);
8304 return;
8307 if (ts->u.derived->attr.alloc_comp)
8309 gfc_error ("Data transfer element at %L cannot have ALLOCATABLE "
8310 "components unless it is processed by a defined "
8311 "input/output procedure", &code->loc);
8312 return;
8315 /* C_PTR and C_FUNPTR have private components which means they can not
8316 be printed. However, if -std=gnu and not -pedantic, allow
8317 the component to be printed to help debugging. */
8318 if (ts->u.derived->ts.f90_type == BT_VOID)
8320 if (!gfc_notify_std (GFC_STD_GNU, "Data transfer element at %L "
8321 "cannot have PRIVATE components", &code->loc))
8322 return;
8324 else if (derived_inaccessible (ts->u.derived))
8326 gfc_error ("Data transfer element at %L cannot have "
8327 "PRIVATE components",&code->loc);
8328 return;
8332 if (sym->as != NULL && sym->as->type == AS_ASSUMED_SIZE && exp->ref
8333 && exp->ref->type == REF_ARRAY && exp->ref->u.ar.type == AR_FULL)
8335 gfc_error ("Data transfer element at %L cannot be a full reference to "
8336 "an assumed-size array", &code->loc);
8337 return;
8342 /*********** Toplevel code resolution subroutines ***********/
8344 /* Find the set of labels that are reachable from this block. We also
8345 record the last statement in each block. */
8347 static void
8348 find_reachable_labels (gfc_code *block)
8350 gfc_code *c;
8352 if (!block)
8353 return;
8355 cs_base->reachable_labels = bitmap_obstack_alloc (&labels_obstack);
8357 /* Collect labels in this block. We don't keep those corresponding
8358 to END {IF|SELECT}, these are checked in resolve_branch by going
8359 up through the code_stack. */
8360 for (c = block; c; c = c->next)
8362 if (c->here && c->op != EXEC_END_NESTED_BLOCK)
8363 bitmap_set_bit (cs_base->reachable_labels, c->here->value);
8366 /* Merge with labels from parent block. */
8367 if (cs_base->prev)
8369 gcc_assert (cs_base->prev->reachable_labels);
8370 bitmap_ior_into (cs_base->reachable_labels,
8371 cs_base->prev->reachable_labels);
8376 static void
8377 resolve_lock_unlock (gfc_code *code)
8379 if (code->expr1->ts.type != BT_DERIVED
8380 || code->expr1->expr_type != EXPR_VARIABLE
8381 || code->expr1->ts.u.derived->from_intmod != INTMOD_ISO_FORTRAN_ENV
8382 || code->expr1->ts.u.derived->intmod_sym_id != ISOFORTRAN_LOCK_TYPE
8383 || code->expr1->rank != 0
8384 || (!gfc_is_coarray (code->expr1) && !gfc_is_coindexed (code->expr1)))
8385 gfc_error ("Lock variable at %L must be a scalar of type LOCK_TYPE",
8386 &code->expr1->where);
8388 /* Check STAT. */
8389 if (code->expr2
8390 && (code->expr2->ts.type != BT_INTEGER || code->expr2->rank != 0
8391 || code->expr2->expr_type != EXPR_VARIABLE))
8392 gfc_error ("STAT= argument at %L must be a scalar INTEGER variable",
8393 &code->expr2->where);
8395 if (code->expr2
8396 && !gfc_check_vardef_context (code->expr2, false, false, false,
8397 _("STAT variable")))
8398 return;
8400 /* Check ERRMSG. */
8401 if (code->expr3
8402 && (code->expr3->ts.type != BT_CHARACTER || code->expr3->rank != 0
8403 || code->expr3->expr_type != EXPR_VARIABLE))
8404 gfc_error ("ERRMSG= argument at %L must be a scalar CHARACTER variable",
8405 &code->expr3->where);
8407 if (code->expr3
8408 && !gfc_check_vardef_context (code->expr3, false, false, false,
8409 _("ERRMSG variable")))
8410 return;
8412 /* Check ACQUIRED_LOCK. */
8413 if (code->expr4
8414 && (code->expr4->ts.type != BT_LOGICAL || code->expr4->rank != 0
8415 || code->expr4->expr_type != EXPR_VARIABLE))
8416 gfc_error ("ACQUIRED_LOCK= argument at %L must be a scalar LOGICAL "
8417 "variable", &code->expr4->where);
8419 if (code->expr4
8420 && !gfc_check_vardef_context (code->expr4, false, false, false,
8421 _("ACQUIRED_LOCK variable")))
8422 return;
8426 static void
8427 resolve_sync (gfc_code *code)
8429 /* Check imageset. The * case matches expr1 == NULL. */
8430 if (code->expr1)
8432 if (code->expr1->ts.type != BT_INTEGER || code->expr1->rank > 1)
8433 gfc_error ("Imageset argument at %L must be a scalar or rank-1 "
8434 "INTEGER expression", &code->expr1->where);
8435 if (code->expr1->expr_type == EXPR_CONSTANT && code->expr1->rank == 0
8436 && mpz_cmp_si (code->expr1->value.integer, 1) < 0)
8437 gfc_error ("Imageset argument at %L must between 1 and num_images()",
8438 &code->expr1->where);
8439 else if (code->expr1->expr_type == EXPR_ARRAY
8440 && gfc_simplify_expr (code->expr1, 0))
8442 gfc_constructor *cons;
8443 cons = gfc_constructor_first (code->expr1->value.constructor);
8444 for (; cons; cons = gfc_constructor_next (cons))
8445 if (cons->expr->expr_type == EXPR_CONSTANT
8446 && mpz_cmp_si (cons->expr->value.integer, 1) < 0)
8447 gfc_error ("Imageset argument at %L must between 1 and "
8448 "num_images()", &cons->expr->where);
8452 /* Check STAT. */
8453 if (code->expr2
8454 && (code->expr2->ts.type != BT_INTEGER || code->expr2->rank != 0
8455 || code->expr2->expr_type != EXPR_VARIABLE))
8456 gfc_error ("STAT= argument at %L must be a scalar INTEGER variable",
8457 &code->expr2->where);
8459 /* Check ERRMSG. */
8460 if (code->expr3
8461 && (code->expr3->ts.type != BT_CHARACTER || code->expr3->rank != 0
8462 || code->expr3->expr_type != EXPR_VARIABLE))
8463 gfc_error ("ERRMSG= argument at %L must be a scalar CHARACTER variable",
8464 &code->expr3->where);
8468 /* Given a branch to a label, see if the branch is conforming.
8469 The code node describes where the branch is located. */
8471 static void
8472 resolve_branch (gfc_st_label *label, gfc_code *code)
8474 code_stack *stack;
8476 if (label == NULL)
8477 return;
8479 /* Step one: is this a valid branching target? */
8481 if (label->defined == ST_LABEL_UNKNOWN)
8483 gfc_error ("Label %d referenced at %L is never defined", label->value,
8484 &label->where);
8485 return;
8488 if (label->defined != ST_LABEL_TARGET && label->defined != ST_LABEL_DO_TARGET)
8490 gfc_error ("Statement at %L is not a valid branch target statement "
8491 "for the branch statement at %L", &label->where, &code->loc);
8492 return;
8495 /* Step two: make sure this branch is not a branch to itself ;-) */
8497 if (code->here == label)
8499 gfc_warning ("Branch at %L may result in an infinite loop", &code->loc);
8500 return;
8503 /* Step three: See if the label is in the same block as the
8504 branching statement. The hard work has been done by setting up
8505 the bitmap reachable_labels. */
8507 if (bitmap_bit_p (cs_base->reachable_labels, label->value))
8509 /* Check now whether there is a CRITICAL construct; if so, check
8510 whether the label is still visible outside of the CRITICAL block,
8511 which is invalid. */
8512 for (stack = cs_base; stack; stack = stack->prev)
8514 if (stack->current->op == EXEC_CRITICAL
8515 && bitmap_bit_p (stack->reachable_labels, label->value))
8516 gfc_error ("GOTO statement at %L leaves CRITICAL construct for "
8517 "label at %L", &code->loc, &label->where);
8518 else if (stack->current->op == EXEC_DO_CONCURRENT
8519 && bitmap_bit_p (stack->reachable_labels, label->value))
8520 gfc_error ("GOTO statement at %L leaves DO CONCURRENT construct "
8521 "for label at %L", &code->loc, &label->where);
8524 return;
8527 /* Step four: If we haven't found the label in the bitmap, it may
8528 still be the label of the END of the enclosing block, in which
8529 case we find it by going up the code_stack. */
8531 for (stack = cs_base; stack; stack = stack->prev)
8533 if (stack->current->next && stack->current->next->here == label)
8534 break;
8535 if (stack->current->op == EXEC_CRITICAL)
8537 /* Note: A label at END CRITICAL does not leave the CRITICAL
8538 construct as END CRITICAL is still part of it. */
8539 gfc_error ("GOTO statement at %L leaves CRITICAL construct for label"
8540 " at %L", &code->loc, &label->where);
8541 return;
8543 else if (stack->current->op == EXEC_DO_CONCURRENT)
8545 gfc_error ("GOTO statement at %L leaves DO CONCURRENT construct for "
8546 "label at %L", &code->loc, &label->where);
8547 return;
8551 if (stack)
8553 gcc_assert (stack->current->next->op == EXEC_END_NESTED_BLOCK);
8554 return;
8557 /* The label is not in an enclosing block, so illegal. This was
8558 allowed in Fortran 66, so we allow it as extension. No
8559 further checks are necessary in this case. */
8560 gfc_notify_std (GFC_STD_LEGACY, "Label at %L is not in the same block "
8561 "as the GOTO statement at %L", &label->where,
8562 &code->loc);
8563 return;
8567 /* Check whether EXPR1 has the same shape as EXPR2. */
8569 static bool
8570 resolve_where_shape (gfc_expr *expr1, gfc_expr *expr2)
8572 mpz_t shape[GFC_MAX_DIMENSIONS];
8573 mpz_t shape2[GFC_MAX_DIMENSIONS];
8574 bool result = false;
8575 int i;
8577 /* Compare the rank. */
8578 if (expr1->rank != expr2->rank)
8579 return result;
8581 /* Compare the size of each dimension. */
8582 for (i=0; i<expr1->rank; i++)
8584 if (!gfc_array_dimen_size (expr1, i, &shape[i]))
8585 goto ignore;
8587 if (!gfc_array_dimen_size (expr2, i, &shape2[i]))
8588 goto ignore;
8590 if (mpz_cmp (shape[i], shape2[i]))
8591 goto over;
8594 /* When either of the two expression is an assumed size array, we
8595 ignore the comparison of dimension sizes. */
8596 ignore:
8597 result = true;
8599 over:
8600 gfc_clear_shape (shape, i);
8601 gfc_clear_shape (shape2, i);
8602 return result;
8606 /* Check whether a WHERE assignment target or a WHERE mask expression
8607 has the same shape as the outmost WHERE mask expression. */
8609 static void
8610 resolve_where (gfc_code *code, gfc_expr *mask)
8612 gfc_code *cblock;
8613 gfc_code *cnext;
8614 gfc_expr *e = NULL;
8616 cblock = code->block;
8618 /* Store the first WHERE mask-expr of the WHERE statement or construct.
8619 In case of nested WHERE, only the outmost one is stored. */
8620 if (mask == NULL) /* outmost WHERE */
8621 e = cblock->expr1;
8622 else /* inner WHERE */
8623 e = mask;
8625 while (cblock)
8627 if (cblock->expr1)
8629 /* Check if the mask-expr has a consistent shape with the
8630 outmost WHERE mask-expr. */
8631 if (!resolve_where_shape (cblock->expr1, e))
8632 gfc_error ("WHERE mask at %L has inconsistent shape",
8633 &cblock->expr1->where);
8636 /* the assignment statement of a WHERE statement, or the first
8637 statement in where-body-construct of a WHERE construct */
8638 cnext = cblock->next;
8639 while (cnext)
8641 switch (cnext->op)
8643 /* WHERE assignment statement */
8644 case EXEC_ASSIGN:
8646 /* Check shape consistent for WHERE assignment target. */
8647 if (e && !resolve_where_shape (cnext->expr1, e))
8648 gfc_error ("WHERE assignment target at %L has "
8649 "inconsistent shape", &cnext->expr1->where);
8650 break;
8653 case EXEC_ASSIGN_CALL:
8654 resolve_call (cnext);
8655 if (!cnext->resolved_sym->attr.elemental)
8656 gfc_error("Non-ELEMENTAL user-defined assignment in WHERE at %L",
8657 &cnext->ext.actual->expr->where);
8658 break;
8660 /* WHERE or WHERE construct is part of a where-body-construct */
8661 case EXEC_WHERE:
8662 resolve_where (cnext, e);
8663 break;
8665 default:
8666 gfc_error ("Unsupported statement inside WHERE at %L",
8667 &cnext->loc);
8669 /* the next statement within the same where-body-construct */
8670 cnext = cnext->next;
8672 /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
8673 cblock = cblock->block;
8678 /* Resolve assignment in FORALL construct.
8679 NVAR is the number of FORALL index variables, and VAR_EXPR records the
8680 FORALL index variables. */
8682 static void
8683 gfc_resolve_assign_in_forall (gfc_code *code, int nvar, gfc_expr **var_expr)
8685 int n;
8687 for (n = 0; n < nvar; n++)
8689 gfc_symbol *forall_index;
8691 forall_index = var_expr[n]->symtree->n.sym;
8693 /* Check whether the assignment target is one of the FORALL index
8694 variable. */
8695 if ((code->expr1->expr_type == EXPR_VARIABLE)
8696 && (code->expr1->symtree->n.sym == forall_index))
8697 gfc_error ("Assignment to a FORALL index variable at %L",
8698 &code->expr1->where);
8699 else
8701 /* If one of the FORALL index variables doesn't appear in the
8702 assignment variable, then there could be a many-to-one
8703 assignment. Emit a warning rather than an error because the
8704 mask could be resolving this problem. */
8705 if (!find_forall_index (code->expr1, forall_index, 0))
8706 gfc_warning ("The FORALL with index '%s' is not used on the "
8707 "left side of the assignment at %L and so might "
8708 "cause multiple assignment to this object",
8709 var_expr[n]->symtree->name, &code->expr1->where);
8715 /* Resolve WHERE statement in FORALL construct. */
8717 static void
8718 gfc_resolve_where_code_in_forall (gfc_code *code, int nvar,
8719 gfc_expr **var_expr)
8721 gfc_code *cblock;
8722 gfc_code *cnext;
8724 cblock = code->block;
8725 while (cblock)
8727 /* the assignment statement of a WHERE statement, or the first
8728 statement in where-body-construct of a WHERE construct */
8729 cnext = cblock->next;
8730 while (cnext)
8732 switch (cnext->op)
8734 /* WHERE assignment statement */
8735 case EXEC_ASSIGN:
8736 gfc_resolve_assign_in_forall (cnext, nvar, var_expr);
8737 break;
8739 /* WHERE operator assignment statement */
8740 case EXEC_ASSIGN_CALL:
8741 resolve_call (cnext);
8742 if (!cnext->resolved_sym->attr.elemental)
8743 gfc_error("Non-ELEMENTAL user-defined assignment in WHERE at %L",
8744 &cnext->ext.actual->expr->where);
8745 break;
8747 /* WHERE or WHERE construct is part of a where-body-construct */
8748 case EXEC_WHERE:
8749 gfc_resolve_where_code_in_forall (cnext, nvar, var_expr);
8750 break;
8752 default:
8753 gfc_error ("Unsupported statement inside WHERE at %L",
8754 &cnext->loc);
8756 /* the next statement within the same where-body-construct */
8757 cnext = cnext->next;
8759 /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
8760 cblock = cblock->block;
8765 /* Traverse the FORALL body to check whether the following errors exist:
8766 1. For assignment, check if a many-to-one assignment happens.
8767 2. For WHERE statement, check the WHERE body to see if there is any
8768 many-to-one assignment. */
8770 static void
8771 gfc_resolve_forall_body (gfc_code *code, int nvar, gfc_expr **var_expr)
8773 gfc_code *c;
8775 c = code->block->next;
8776 while (c)
8778 switch (c->op)
8780 case EXEC_ASSIGN:
8781 case EXEC_POINTER_ASSIGN:
8782 gfc_resolve_assign_in_forall (c, nvar, var_expr);
8783 break;
8785 case EXEC_ASSIGN_CALL:
8786 resolve_call (c);
8787 break;
8789 /* Because the gfc_resolve_blocks() will handle the nested FORALL,
8790 there is no need to handle it here. */
8791 case EXEC_FORALL:
8792 break;
8793 case EXEC_WHERE:
8794 gfc_resolve_where_code_in_forall(c, nvar, var_expr);
8795 break;
8796 default:
8797 break;
8799 /* The next statement in the FORALL body. */
8800 c = c->next;
8805 /* Counts the number of iterators needed inside a forall construct, including
8806 nested forall constructs. This is used to allocate the needed memory
8807 in gfc_resolve_forall. */
8809 static int
8810 gfc_count_forall_iterators (gfc_code *code)
8812 int max_iters, sub_iters, current_iters;
8813 gfc_forall_iterator *fa;
8815 gcc_assert(code->op == EXEC_FORALL);
8816 max_iters = 0;
8817 current_iters = 0;
8819 for (fa = code->ext.forall_iterator; fa; fa = fa->next)
8820 current_iters ++;
8822 code = code->block->next;
8824 while (code)
8826 if (code->op == EXEC_FORALL)
8828 sub_iters = gfc_count_forall_iterators (code);
8829 if (sub_iters > max_iters)
8830 max_iters = sub_iters;
8832 code = code->next;
8835 return current_iters + max_iters;
8839 /* Given a FORALL construct, first resolve the FORALL iterator, then call
8840 gfc_resolve_forall_body to resolve the FORALL body. */
8842 static void
8843 gfc_resolve_forall (gfc_code *code, gfc_namespace *ns, int forall_save)
8845 static gfc_expr **var_expr;
8846 static int total_var = 0;
8847 static int nvar = 0;
8848 int old_nvar, tmp;
8849 gfc_forall_iterator *fa;
8850 int i;
8852 old_nvar = nvar;
8854 /* Start to resolve a FORALL construct */
8855 if (forall_save == 0)
8857 /* Count the total number of FORALL index in the nested FORALL
8858 construct in order to allocate the VAR_EXPR with proper size. */
8859 total_var = gfc_count_forall_iterators (code);
8861 /* Allocate VAR_EXPR with NUMBER_OF_FORALL_INDEX elements. */
8862 var_expr = XCNEWVEC (gfc_expr *, total_var);
8865 /* The information about FORALL iterator, including FORALL index start, end
8866 and stride. The FORALL index can not appear in start, end or stride. */
8867 for (fa = code->ext.forall_iterator; fa; fa = fa->next)
8869 /* Check if any outer FORALL index name is the same as the current
8870 one. */
8871 for (i = 0; i < nvar; i++)
8873 if (fa->var->symtree->n.sym == var_expr[i]->symtree->n.sym)
8875 gfc_error ("An outer FORALL construct already has an index "
8876 "with this name %L", &fa->var->where);
8880 /* Record the current FORALL index. */
8881 var_expr[nvar] = gfc_copy_expr (fa->var);
8883 nvar++;
8885 /* No memory leak. */
8886 gcc_assert (nvar <= total_var);
8889 /* Resolve the FORALL body. */
8890 gfc_resolve_forall_body (code, nvar, var_expr);
8892 /* May call gfc_resolve_forall to resolve the inner FORALL loop. */
8893 gfc_resolve_blocks (code->block, ns);
8895 tmp = nvar;
8896 nvar = old_nvar;
8897 /* Free only the VAR_EXPRs allocated in this frame. */
8898 for (i = nvar; i < tmp; i++)
8899 gfc_free_expr (var_expr[i]);
8901 if (nvar == 0)
8903 /* We are in the outermost FORALL construct. */
8904 gcc_assert (forall_save == 0);
8906 /* VAR_EXPR is not needed any more. */
8907 free (var_expr);
8908 total_var = 0;
8913 /* Resolve a BLOCK construct statement. */
8915 static void
8916 resolve_block_construct (gfc_code* code)
8918 /* Resolve the BLOCK's namespace. */
8919 gfc_resolve (code->ext.block.ns);
8921 /* For an ASSOCIATE block, the associations (and their targets) are already
8922 resolved during resolve_symbol. */
8926 /* Resolve lists of blocks found in IF, SELECT CASE, WHERE, FORALL, GOTO and
8927 DO code nodes. */
8929 static void resolve_code (gfc_code *, gfc_namespace *);
8931 void
8932 gfc_resolve_blocks (gfc_code *b, gfc_namespace *ns)
8934 bool t;
8936 for (; b; b = b->block)
8938 t = gfc_resolve_expr (b->expr1);
8939 if (!gfc_resolve_expr (b->expr2))
8940 t = false;
8942 switch (b->op)
8944 case EXEC_IF:
8945 if (t && b->expr1 != NULL
8946 && (b->expr1->ts.type != BT_LOGICAL || b->expr1->rank != 0))
8947 gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
8948 &b->expr1->where);
8949 break;
8951 case EXEC_WHERE:
8952 if (t
8953 && b->expr1 != NULL
8954 && (b->expr1->ts.type != BT_LOGICAL || b->expr1->rank == 0))
8955 gfc_error ("WHERE/ELSEWHERE clause at %L requires a LOGICAL array",
8956 &b->expr1->where);
8957 break;
8959 case EXEC_GOTO:
8960 resolve_branch (b->label1, b);
8961 break;
8963 case EXEC_BLOCK:
8964 resolve_block_construct (b);
8965 break;
8967 case EXEC_SELECT:
8968 case EXEC_SELECT_TYPE:
8969 case EXEC_FORALL:
8970 case EXEC_DO:
8971 case EXEC_DO_WHILE:
8972 case EXEC_DO_CONCURRENT:
8973 case EXEC_CRITICAL:
8974 case EXEC_READ:
8975 case EXEC_WRITE:
8976 case EXEC_IOLENGTH:
8977 case EXEC_WAIT:
8978 break;
8980 case EXEC_OMP_ATOMIC:
8981 case EXEC_OMP_CRITICAL:
8982 case EXEC_OMP_DO:
8983 case EXEC_OMP_MASTER:
8984 case EXEC_OMP_ORDERED:
8985 case EXEC_OMP_PARALLEL:
8986 case EXEC_OMP_PARALLEL_DO:
8987 case EXEC_OMP_PARALLEL_SECTIONS:
8988 case EXEC_OMP_PARALLEL_WORKSHARE:
8989 case EXEC_OMP_SECTIONS:
8990 case EXEC_OMP_SINGLE:
8991 case EXEC_OMP_TASK:
8992 case EXEC_OMP_TASKWAIT:
8993 case EXEC_OMP_TASKYIELD:
8994 case EXEC_OMP_WORKSHARE:
8995 break;
8997 default:
8998 gfc_internal_error ("gfc_resolve_blocks(): Bad block type");
9001 resolve_code (b->next, ns);
9006 /* Does everything to resolve an ordinary assignment. Returns true
9007 if this is an interface assignment. */
9008 static bool
9009 resolve_ordinary_assign (gfc_code *code, gfc_namespace *ns)
9011 bool rval = false;
9012 gfc_expr *lhs;
9013 gfc_expr *rhs;
9014 int llen = 0;
9015 int rlen = 0;
9016 int n;
9017 gfc_ref *ref;
9018 symbol_attribute attr;
9020 if (gfc_extend_assign (code, ns))
9022 gfc_expr** rhsptr;
9024 if (code->op == EXEC_ASSIGN_CALL)
9026 lhs = code->ext.actual->expr;
9027 rhsptr = &code->ext.actual->next->expr;
9029 else
9031 gfc_actual_arglist* args;
9032 gfc_typebound_proc* tbp;
9034 gcc_assert (code->op == EXEC_COMPCALL);
9036 args = code->expr1->value.compcall.actual;
9037 lhs = args->expr;
9038 rhsptr = &args->next->expr;
9040 tbp = code->expr1->value.compcall.tbp;
9041 gcc_assert (!tbp->is_generic);
9044 /* Make a temporary rhs when there is a default initializer
9045 and rhs is the same symbol as the lhs. */
9046 if ((*rhsptr)->expr_type == EXPR_VARIABLE
9047 && (*rhsptr)->symtree->n.sym->ts.type == BT_DERIVED
9048 && gfc_has_default_initializer ((*rhsptr)->symtree->n.sym->ts.u.derived)
9049 && (lhs->symtree->n.sym == (*rhsptr)->symtree->n.sym))
9050 *rhsptr = gfc_get_parentheses (*rhsptr);
9052 return true;
9055 lhs = code->expr1;
9056 rhs = code->expr2;
9058 if (rhs->is_boz
9059 && !gfc_notify_std (GFC_STD_GNU, "BOZ literal at %L outside "
9060 "a DATA statement and outside INT/REAL/DBLE/CMPLX",
9061 &code->loc))
9062 return false;
9064 /* Handle the case of a BOZ literal on the RHS. */
9065 if (rhs->is_boz && lhs->ts.type != BT_INTEGER)
9067 int rc;
9068 if (gfc_option.warn_surprising)
9069 gfc_warning ("BOZ literal at %L is bitwise transferred "
9070 "non-integer symbol '%s'", &code->loc,
9071 lhs->symtree->n.sym->name);
9073 if (!gfc_convert_boz (rhs, &lhs->ts))
9074 return false;
9075 if ((rc = gfc_range_check (rhs)) != ARITH_OK)
9077 if (rc == ARITH_UNDERFLOW)
9078 gfc_error ("Arithmetic underflow of bit-wise transferred BOZ at %L"
9079 ". This check can be disabled with the option "
9080 "-fno-range-check", &rhs->where);
9081 else if (rc == ARITH_OVERFLOW)
9082 gfc_error ("Arithmetic overflow of bit-wise transferred BOZ at %L"
9083 ". This check can be disabled with the option "
9084 "-fno-range-check", &rhs->where);
9085 else if (rc == ARITH_NAN)
9086 gfc_error ("Arithmetic NaN of bit-wise transferred BOZ at %L"
9087 ". This check can be disabled with the option "
9088 "-fno-range-check", &rhs->where);
9089 return false;
9093 if (lhs->ts.type == BT_CHARACTER
9094 && gfc_option.warn_character_truncation)
9096 if (lhs->ts.u.cl != NULL
9097 && lhs->ts.u.cl->length != NULL
9098 && lhs->ts.u.cl->length->expr_type == EXPR_CONSTANT)
9099 llen = mpz_get_si (lhs->ts.u.cl->length->value.integer);
9101 if (rhs->expr_type == EXPR_CONSTANT)
9102 rlen = rhs->value.character.length;
9104 else if (rhs->ts.u.cl != NULL
9105 && rhs->ts.u.cl->length != NULL
9106 && rhs->ts.u.cl->length->expr_type == EXPR_CONSTANT)
9107 rlen = mpz_get_si (rhs->ts.u.cl->length->value.integer);
9109 if (rlen && llen && rlen > llen)
9110 gfc_warning_now ("CHARACTER expression will be truncated "
9111 "in assignment (%d/%d) at %L",
9112 llen, rlen, &code->loc);
9115 /* Ensure that a vector index expression for the lvalue is evaluated
9116 to a temporary if the lvalue symbol is referenced in it. */
9117 if (lhs->rank)
9119 for (ref = lhs->ref; ref; ref= ref->next)
9120 if (ref->type == REF_ARRAY)
9122 for (n = 0; n < ref->u.ar.dimen; n++)
9123 if (ref->u.ar.dimen_type[n] == DIMEN_VECTOR
9124 && gfc_find_sym_in_expr (lhs->symtree->n.sym,
9125 ref->u.ar.start[n]))
9126 ref->u.ar.start[n]
9127 = gfc_get_parentheses (ref->u.ar.start[n]);
9131 if (gfc_pure (NULL))
9133 if (lhs->ts.type == BT_DERIVED
9134 && lhs->expr_type == EXPR_VARIABLE
9135 && lhs->ts.u.derived->attr.pointer_comp
9136 && rhs->expr_type == EXPR_VARIABLE
9137 && (gfc_impure_variable (rhs->symtree->n.sym)
9138 || gfc_is_coindexed (rhs)))
9140 /* F2008, C1283. */
9141 if (gfc_is_coindexed (rhs))
9142 gfc_error ("Coindexed expression at %L is assigned to "
9143 "a derived type variable with a POINTER "
9144 "component in a PURE procedure",
9145 &rhs->where);
9146 else
9147 gfc_error ("The impure variable at %L is assigned to "
9148 "a derived type variable with a POINTER "
9149 "component in a PURE procedure (12.6)",
9150 &rhs->where);
9151 return rval;
9154 /* Fortran 2008, C1283. */
9155 if (gfc_is_coindexed (lhs))
9157 gfc_error ("Assignment to coindexed variable at %L in a PURE "
9158 "procedure", &rhs->where);
9159 return rval;
9163 if (gfc_implicit_pure (NULL))
9165 if (lhs->expr_type == EXPR_VARIABLE
9166 && lhs->symtree->n.sym != gfc_current_ns->proc_name
9167 && lhs->symtree->n.sym->ns != gfc_current_ns)
9168 gfc_unset_implicit_pure (NULL);
9170 if (lhs->ts.type == BT_DERIVED
9171 && lhs->expr_type == EXPR_VARIABLE
9172 && lhs->ts.u.derived->attr.pointer_comp
9173 && rhs->expr_type == EXPR_VARIABLE
9174 && (gfc_impure_variable (rhs->symtree->n.sym)
9175 || gfc_is_coindexed (rhs)))
9176 gfc_unset_implicit_pure (NULL);
9178 /* Fortran 2008, C1283. */
9179 if (gfc_is_coindexed (lhs))
9180 gfc_unset_implicit_pure (NULL);
9183 /* F2008, 7.2.1.2. */
9184 attr = gfc_expr_attr (lhs);
9185 if (lhs->ts.type == BT_CLASS && attr.allocatable)
9187 if (attr.codimension)
9189 gfc_error ("Assignment to polymorphic coarray at %L is not "
9190 "permitted", &lhs->where);
9191 return false;
9193 if (!gfc_notify_std (GFC_STD_F2008, "Assignment to an allocatable "
9194 "polymorphic variable at %L", &lhs->where))
9195 return false;
9196 if (!gfc_option.flag_realloc_lhs)
9198 gfc_error ("Assignment to an allocatable polymorphic variable at %L "
9199 "requires -frealloc-lhs", &lhs->where);
9200 return false;
9202 /* See PR 43366. */
9203 gfc_error ("Assignment to an allocatable polymorphic variable at %L "
9204 "is not yet supported", &lhs->where);
9205 return false;
9207 else if (lhs->ts.type == BT_CLASS)
9209 gfc_error ("Nonallocatable variable must not be polymorphic in intrinsic "
9210 "assignment at %L - check that there is a matching specific "
9211 "subroutine for '=' operator", &lhs->where);
9212 return false;
9215 /* F2008, Section 7.2.1.2. */
9216 if (gfc_is_coindexed (lhs) && gfc_has_ultimate_allocatable (lhs))
9218 gfc_error ("Coindexed variable must not have an allocatable ultimate "
9219 "component in assignment at %L", &lhs->where);
9220 return false;
9223 gfc_check_assign (lhs, rhs, 1);
9224 return false;
9228 /* Add a component reference onto an expression. */
9230 static void
9231 add_comp_ref (gfc_expr *e, gfc_component *c)
9233 gfc_ref **ref;
9234 ref = &(e->ref);
9235 while (*ref)
9236 ref = &((*ref)->next);
9237 *ref = gfc_get_ref ();
9238 (*ref)->type = REF_COMPONENT;
9239 (*ref)->u.c.sym = e->ts.u.derived;
9240 (*ref)->u.c.component = c;
9241 e->ts = c->ts;
9243 /* Add a full array ref, as necessary. */
9244 if (c->as)
9246 gfc_add_full_array_ref (e, c->as);
9247 e->rank = c->as->rank;
9252 /* Build an assignment. Keep the argument 'op' for future use, so that
9253 pointer assignments can be made. */
9255 static gfc_code *
9256 build_assignment (gfc_exec_op op, gfc_expr *expr1, gfc_expr *expr2,
9257 gfc_component *comp1, gfc_component *comp2, locus loc)
9259 gfc_code *this_code;
9261 this_code = gfc_get_code (op);
9262 this_code->next = NULL;
9263 this_code->expr1 = gfc_copy_expr (expr1);
9264 this_code->expr2 = gfc_copy_expr (expr2);
9265 this_code->loc = loc;
9266 if (comp1 && comp2)
9268 add_comp_ref (this_code->expr1, comp1);
9269 add_comp_ref (this_code->expr2, comp2);
9272 return this_code;
9276 /* Makes a temporary variable expression based on the characteristics of
9277 a given variable expression. */
9279 static gfc_expr*
9280 get_temp_from_expr (gfc_expr *e, gfc_namespace *ns)
9282 static int serial = 0;
9283 char name[GFC_MAX_SYMBOL_LEN];
9284 gfc_symtree *tmp;
9285 gfc_array_spec *as;
9286 gfc_array_ref *aref;
9287 gfc_ref *ref;
9289 sprintf (name, GFC_PREFIX("DA%d"), serial++);
9290 gfc_get_sym_tree (name, ns, &tmp, false);
9291 gfc_add_type (tmp->n.sym, &e->ts, NULL);
9293 as = NULL;
9294 ref = NULL;
9295 aref = NULL;
9297 /* This function could be expanded to support other expression type
9298 but this is not needed here. */
9299 gcc_assert (e->expr_type == EXPR_VARIABLE);
9301 /* Obtain the arrayspec for the temporary. */
9302 if (e->rank)
9304 aref = gfc_find_array_ref (e);
9305 if (e->expr_type == EXPR_VARIABLE
9306 && e->symtree->n.sym->as == aref->as)
9307 as = aref->as;
9308 else
9310 for (ref = e->ref; ref; ref = ref->next)
9311 if (ref->type == REF_COMPONENT
9312 && ref->u.c.component->as == aref->as)
9314 as = aref->as;
9315 break;
9320 /* Add the attributes and the arrayspec to the temporary. */
9321 tmp->n.sym->attr = gfc_expr_attr (e);
9322 tmp->n.sym->attr.function = 0;
9323 tmp->n.sym->attr.result = 0;
9324 tmp->n.sym->attr.flavor = FL_VARIABLE;
9326 if (as)
9328 tmp->n.sym->as = gfc_copy_array_spec (as);
9329 if (!ref)
9330 ref = e->ref;
9331 if (as->type == AS_DEFERRED)
9332 tmp->n.sym->attr.allocatable = 1;
9334 else
9335 tmp->n.sym->attr.dimension = 0;
9337 gfc_set_sym_referenced (tmp->n.sym);
9338 gfc_commit_symbol (tmp->n.sym);
9339 e = gfc_lval_expr_from_sym (tmp->n.sym);
9341 /* Should the lhs be a section, use its array ref for the
9342 temporary expression. */
9343 if (aref && aref->type != AR_FULL)
9345 gfc_free_ref_list (e->ref);
9346 e->ref = gfc_copy_ref (ref);
9348 return e;
9352 /* Add one line of code to the code chain, making sure that 'head' and
9353 'tail' are appropriately updated. */
9355 static void
9356 add_code_to_chain (gfc_code **this_code, gfc_code **head, gfc_code **tail)
9358 gcc_assert (this_code);
9359 if (*head == NULL)
9360 *head = *tail = *this_code;
9361 else
9362 *tail = gfc_append_code (*tail, *this_code);
9363 *this_code = NULL;
9367 /* Counts the potential number of part array references that would
9368 result from resolution of typebound defined assignments. */
9370 static int
9371 nonscalar_typebound_assign (gfc_symbol *derived, int depth)
9373 gfc_component *c;
9374 int c_depth = 0, t_depth;
9376 for (c= derived->components; c; c = c->next)
9378 if ((c->ts.type != BT_DERIVED
9379 || c->attr.pointer
9380 || c->attr.allocatable
9381 || c->attr.proc_pointer_comp
9382 || c->attr.class_pointer
9383 || c->attr.proc_pointer)
9384 && !c->attr.defined_assign_comp)
9385 continue;
9387 if (c->as && c_depth == 0)
9388 c_depth = 1;
9390 if (c->ts.u.derived->attr.defined_assign_comp)
9391 t_depth = nonscalar_typebound_assign (c->ts.u.derived,
9392 c->as ? 1 : 0);
9393 else
9394 t_depth = 0;
9396 c_depth = t_depth > c_depth ? t_depth : c_depth;
9398 return depth + c_depth;
9402 /* Implement 7.2.1.3 of the F08 standard:
9403 "An intrinsic assignment where the variable is of derived type is
9404 performed as if each component of the variable were assigned from the
9405 corresponding component of expr using pointer assignment (7.2.2) for
9406 each pointer component, defined assignment for each nonpointer
9407 nonallocatable component of a type that has a type-bound defined
9408 assignment consistent with the component, intrinsic assignment for
9409 each other nonpointer nonallocatable component, ..."
9411 The pointer assignments are taken care of by the intrinsic
9412 assignment of the structure itself. This function recursively adds
9413 defined assignments where required. The recursion is accomplished
9414 by calling resolve_code.
9416 When the lhs in a defined assignment has intent INOUT, we need a
9417 temporary for the lhs. In pseudo-code:
9419 ! Only call function lhs once.
9420 if (lhs is not a constant or an variable)
9421 temp_x = expr2
9422 expr2 => temp_x
9423 ! Do the intrinsic assignment
9424 expr1 = expr2
9425 ! Now do the defined assignments
9426 do over components with typebound defined assignment [%cmp]
9427 #if one component's assignment procedure is INOUT
9428 t1 = expr1
9429 #if expr2 non-variable
9430 temp_x = expr2
9431 expr2 => temp_x
9432 # endif
9433 expr1 = expr2
9434 # for each cmp
9435 t1%cmp {defined=} expr2%cmp
9436 expr1%cmp = t1%cmp
9437 #else
9438 expr1 = expr2
9440 # for each cmp
9441 expr1%cmp {defined=} expr2%cmp
9442 #endif
9445 /* The temporary assignments have to be put on top of the additional
9446 code to avoid the result being changed by the intrinsic assignment.
9448 static int component_assignment_level = 0;
9449 static gfc_code *tmp_head = NULL, *tmp_tail = NULL;
9451 static void
9452 generate_component_assignments (gfc_code **code, gfc_namespace *ns)
9454 gfc_component *comp1, *comp2;
9455 gfc_code *this_code = NULL, *head = NULL, *tail = NULL;
9456 gfc_expr *t1;
9457 int error_count, depth;
9459 gfc_get_errors (NULL, &error_count);
9461 /* Filter out continuing processing after an error. */
9462 if (error_count
9463 || (*code)->expr1->ts.type != BT_DERIVED
9464 || (*code)->expr2->ts.type != BT_DERIVED)
9465 return;
9467 /* TODO: Handle more than one part array reference in assignments. */
9468 depth = nonscalar_typebound_assign ((*code)->expr1->ts.u.derived,
9469 (*code)->expr1->rank ? 1 : 0);
9470 if (depth > 1)
9472 gfc_warning ("TODO: type-bound defined assignment(s) at %L not "
9473 "done because multiple part array references would "
9474 "occur in intermediate expressions.", &(*code)->loc);
9475 return;
9478 component_assignment_level++;
9480 /* Create a temporary so that functions get called only once. */
9481 if ((*code)->expr2->expr_type != EXPR_VARIABLE
9482 && (*code)->expr2->expr_type != EXPR_CONSTANT)
9484 gfc_expr *tmp_expr;
9486 /* Assign the rhs to the temporary. */
9487 tmp_expr = get_temp_from_expr ((*code)->expr1, ns);
9488 this_code = build_assignment (EXEC_ASSIGN,
9489 tmp_expr, (*code)->expr2,
9490 NULL, NULL, (*code)->loc);
9491 /* Add the code and substitute the rhs expression. */
9492 add_code_to_chain (&this_code, &tmp_head, &tmp_tail);
9493 gfc_free_expr ((*code)->expr2);
9494 (*code)->expr2 = tmp_expr;
9497 /* Do the intrinsic assignment. This is not needed if the lhs is one
9498 of the temporaries generated here, since the intrinsic assignment
9499 to the final result already does this. */
9500 if ((*code)->expr1->symtree->n.sym->name[2] != '@')
9502 this_code = build_assignment (EXEC_ASSIGN,
9503 (*code)->expr1, (*code)->expr2,
9504 NULL, NULL, (*code)->loc);
9505 add_code_to_chain (&this_code, &head, &tail);
9508 comp1 = (*code)->expr1->ts.u.derived->components;
9509 comp2 = (*code)->expr2->ts.u.derived->components;
9511 t1 = NULL;
9512 for (; comp1; comp1 = comp1->next, comp2 = comp2->next)
9514 bool inout = false;
9516 /* The intrinsic assignment does the right thing for pointers
9517 of all kinds and allocatable components. */
9518 if (comp1->ts.type != BT_DERIVED
9519 || comp1->attr.pointer
9520 || comp1->attr.allocatable
9521 || comp1->attr.proc_pointer_comp
9522 || comp1->attr.class_pointer
9523 || comp1->attr.proc_pointer)
9524 continue;
9526 /* Make an assigment for this component. */
9527 this_code = build_assignment (EXEC_ASSIGN,
9528 (*code)->expr1, (*code)->expr2,
9529 comp1, comp2, (*code)->loc);
9531 /* Convert the assignment if there is a defined assignment for
9532 this type. Otherwise, using the call from resolve_code,
9533 recurse into its components. */
9534 resolve_code (this_code, ns);
9536 if (this_code->op == EXEC_ASSIGN_CALL)
9538 gfc_formal_arglist *dummy_args;
9539 gfc_symbol *rsym;
9540 /* Check that there is a typebound defined assignment. If not,
9541 then this must be a module defined assignment. We cannot
9542 use the defined_assign_comp attribute here because it must
9543 be this derived type that has the defined assignment and not
9544 a parent type. */
9545 if (!(comp1->ts.u.derived->f2k_derived
9546 && comp1->ts.u.derived->f2k_derived
9547 ->tb_op[INTRINSIC_ASSIGN]))
9549 gfc_free_statements (this_code);
9550 this_code = NULL;
9551 continue;
9554 /* If the first argument of the subroutine has intent INOUT
9555 a temporary must be generated and used instead. */
9556 rsym = this_code->resolved_sym;
9557 dummy_args = gfc_sym_get_dummy_args (rsym);
9558 if (dummy_args
9559 && dummy_args->sym->attr.intent == INTENT_INOUT)
9561 gfc_code *temp_code;
9562 inout = true;
9564 /* Build the temporary required for the assignment and put
9565 it at the head of the generated code. */
9566 if (!t1)
9568 t1 = get_temp_from_expr ((*code)->expr1, ns);
9569 temp_code = build_assignment (EXEC_ASSIGN,
9570 t1, (*code)->expr1,
9571 NULL, NULL, (*code)->loc);
9573 /* For allocatable LHS, check whether it is allocated. Note
9574 that allocatable components with defined assignment are
9575 not yet support. See PR 57696. */
9576 if ((*code)->expr1->symtree->n.sym->attr.allocatable)
9578 gfc_code *block;
9579 gfc_expr *e =
9580 gfc_lval_expr_from_sym ((*code)->expr1->symtree->n.sym);
9581 block = gfc_get_code (EXEC_IF);
9582 block->block = gfc_get_code (EXEC_IF);
9583 block->block->expr1
9584 = gfc_build_intrinsic_call (ns,
9585 GFC_ISYM_ALLOCATED, "allocated",
9586 (*code)->loc, 1, e);
9587 block->block->next = temp_code;
9588 temp_code = block;
9590 add_code_to_chain (&temp_code, &tmp_head, &tmp_tail);
9593 /* Replace the first actual arg with the component of the
9594 temporary. */
9595 gfc_free_expr (this_code->ext.actual->expr);
9596 this_code->ext.actual->expr = gfc_copy_expr (t1);
9597 add_comp_ref (this_code->ext.actual->expr, comp1);
9599 /* If the LHS variable is allocatable and wasn't allocated and
9600 the temporary is allocatable, pointer assign the address of
9601 the freshly allocated LHS to the temporary. */
9602 if ((*code)->expr1->symtree->n.sym->attr.allocatable
9603 && gfc_expr_attr ((*code)->expr1).allocatable)
9605 gfc_code *block;
9606 gfc_expr *cond;
9608 cond = gfc_get_expr ();
9609 cond->ts.type = BT_LOGICAL;
9610 cond->ts.kind = gfc_default_logical_kind;
9611 cond->expr_type = EXPR_OP;
9612 cond->where = (*code)->loc;
9613 cond->value.op.op = INTRINSIC_NOT;
9614 cond->value.op.op1 = gfc_build_intrinsic_call (ns,
9615 GFC_ISYM_ALLOCATED, "allocated",
9616 (*code)->loc, 1, gfc_copy_expr (t1));
9617 block = gfc_get_code (EXEC_IF);
9618 block->block = gfc_get_code (EXEC_IF);
9619 block->block->expr1 = cond;
9620 block->block->next = build_assignment (EXEC_POINTER_ASSIGN,
9621 t1, (*code)->expr1,
9622 NULL, NULL, (*code)->loc);
9623 add_code_to_chain (&block, &head, &tail);
9627 else if (this_code->op == EXEC_ASSIGN && !this_code->next)
9629 /* Don't add intrinsic assignments since they are already
9630 effected by the intrinsic assignment of the structure. */
9631 gfc_free_statements (this_code);
9632 this_code = NULL;
9633 continue;
9636 add_code_to_chain (&this_code, &head, &tail);
9638 if (t1 && inout)
9640 /* Transfer the value to the final result. */
9641 this_code = build_assignment (EXEC_ASSIGN,
9642 (*code)->expr1, t1,
9643 comp1, comp2, (*code)->loc);
9644 add_code_to_chain (&this_code, &head, &tail);
9648 /* Put the temporary assignments at the top of the generated code. */
9649 if (tmp_head && component_assignment_level == 1)
9651 gfc_append_code (tmp_head, head);
9652 head = tmp_head;
9653 tmp_head = tmp_tail = NULL;
9656 // If we did a pointer assignment - thus, we need to ensure that the LHS is
9657 // not accidentally deallocated. Hence, nullify t1.
9658 if (t1 && (*code)->expr1->symtree->n.sym->attr.allocatable
9659 && gfc_expr_attr ((*code)->expr1).allocatable)
9661 gfc_code *block;
9662 gfc_expr *cond;
9663 gfc_expr *e;
9665 e = gfc_lval_expr_from_sym ((*code)->expr1->symtree->n.sym);
9666 cond = gfc_build_intrinsic_call (ns, GFC_ISYM_ASSOCIATED, "associated",
9667 (*code)->loc, 2, gfc_copy_expr (t1), e);
9668 block = gfc_get_code (EXEC_IF);
9669 block->block = gfc_get_code (EXEC_IF);
9670 block->block->expr1 = cond;
9671 block->block->next = build_assignment (EXEC_POINTER_ASSIGN,
9672 t1, gfc_get_null_expr (&(*code)->loc),
9673 NULL, NULL, (*code)->loc);
9674 gfc_append_code (tail, block);
9675 tail = block;
9678 /* Now attach the remaining code chain to the input code. Step on
9679 to the end of the new code since resolution is complete. */
9680 gcc_assert ((*code)->op == EXEC_ASSIGN);
9681 tail->next = (*code)->next;
9682 /* Overwrite 'code' because this would place the intrinsic assignment
9683 before the temporary for the lhs is created. */
9684 gfc_free_expr ((*code)->expr1);
9685 gfc_free_expr ((*code)->expr2);
9686 **code = *head;
9687 if (head != tail)
9688 free (head);
9689 *code = tail;
9691 component_assignment_level--;
9695 /* Given a block of code, recursively resolve everything pointed to by this
9696 code block. */
9698 static void
9699 resolve_code (gfc_code *code, gfc_namespace *ns)
9701 int omp_workshare_save;
9702 int forall_save, do_concurrent_save;
9703 code_stack frame;
9704 bool t;
9706 frame.prev = cs_base;
9707 frame.head = code;
9708 cs_base = &frame;
9710 find_reachable_labels (code);
9712 for (; code; code = code->next)
9714 frame.current = code;
9715 forall_save = forall_flag;
9716 do_concurrent_save = gfc_do_concurrent_flag;
9718 if (code->op == EXEC_FORALL)
9720 forall_flag = 1;
9721 gfc_resolve_forall (code, ns, forall_save);
9722 forall_flag = 2;
9724 else if (code->block)
9726 omp_workshare_save = -1;
9727 switch (code->op)
9729 case EXEC_OMP_PARALLEL_WORKSHARE:
9730 omp_workshare_save = omp_workshare_flag;
9731 omp_workshare_flag = 1;
9732 gfc_resolve_omp_parallel_blocks (code, ns);
9733 break;
9734 case EXEC_OMP_PARALLEL:
9735 case EXEC_OMP_PARALLEL_DO:
9736 case EXEC_OMP_PARALLEL_SECTIONS:
9737 case EXEC_OMP_TASK:
9738 omp_workshare_save = omp_workshare_flag;
9739 omp_workshare_flag = 0;
9740 gfc_resolve_omp_parallel_blocks (code, ns);
9741 break;
9742 case EXEC_OMP_DO:
9743 gfc_resolve_omp_do_blocks (code, ns);
9744 break;
9745 case EXEC_SELECT_TYPE:
9746 /* Blocks are handled in resolve_select_type because we have
9747 to transform the SELECT TYPE into ASSOCIATE first. */
9748 break;
9749 case EXEC_DO_CONCURRENT:
9750 gfc_do_concurrent_flag = 1;
9751 gfc_resolve_blocks (code->block, ns);
9752 gfc_do_concurrent_flag = 2;
9753 break;
9754 case EXEC_OMP_WORKSHARE:
9755 omp_workshare_save = omp_workshare_flag;
9756 omp_workshare_flag = 1;
9757 /* FALL THROUGH */
9758 default:
9759 gfc_resolve_blocks (code->block, ns);
9760 break;
9763 if (omp_workshare_save != -1)
9764 omp_workshare_flag = omp_workshare_save;
9767 t = true;
9768 if (code->op != EXEC_COMPCALL && code->op != EXEC_CALL_PPC)
9769 t = gfc_resolve_expr (code->expr1);
9770 forall_flag = forall_save;
9771 gfc_do_concurrent_flag = do_concurrent_save;
9773 if (!gfc_resolve_expr (code->expr2))
9774 t = false;
9776 if (code->op == EXEC_ALLOCATE
9777 && !gfc_resolve_expr (code->expr3))
9778 t = false;
9780 switch (code->op)
9782 case EXEC_NOP:
9783 case EXEC_END_BLOCK:
9784 case EXEC_END_NESTED_BLOCK:
9785 case EXEC_CYCLE:
9786 case EXEC_PAUSE:
9787 case EXEC_STOP:
9788 case EXEC_ERROR_STOP:
9789 case EXEC_EXIT:
9790 case EXEC_CONTINUE:
9791 case EXEC_DT_END:
9792 case EXEC_ASSIGN_CALL:
9793 case EXEC_CRITICAL:
9794 break;
9796 case EXEC_SYNC_ALL:
9797 case EXEC_SYNC_IMAGES:
9798 case EXEC_SYNC_MEMORY:
9799 resolve_sync (code);
9800 break;
9802 case EXEC_LOCK:
9803 case EXEC_UNLOCK:
9804 resolve_lock_unlock (code);
9805 break;
9807 case EXEC_ENTRY:
9808 /* Keep track of which entry we are up to. */
9809 current_entry_id = code->ext.entry->id;
9810 break;
9812 case EXEC_WHERE:
9813 resolve_where (code, NULL);
9814 break;
9816 case EXEC_GOTO:
9817 if (code->expr1 != NULL)
9819 if (code->expr1->ts.type != BT_INTEGER)
9820 gfc_error ("ASSIGNED GOTO statement at %L requires an "
9821 "INTEGER variable", &code->expr1->where);
9822 else if (code->expr1->symtree->n.sym->attr.assign != 1)
9823 gfc_error ("Variable '%s' has not been assigned a target "
9824 "label at %L", code->expr1->symtree->n.sym->name,
9825 &code->expr1->where);
9827 else
9828 resolve_branch (code->label1, code);
9829 break;
9831 case EXEC_RETURN:
9832 if (code->expr1 != NULL
9833 && (code->expr1->ts.type != BT_INTEGER || code->expr1->rank))
9834 gfc_error ("Alternate RETURN statement at %L requires a SCALAR-"
9835 "INTEGER return specifier", &code->expr1->where);
9836 break;
9838 case EXEC_INIT_ASSIGN:
9839 case EXEC_END_PROCEDURE:
9840 break;
9842 case EXEC_ASSIGN:
9843 if (!t)
9844 break;
9846 if (!gfc_check_vardef_context (code->expr1, false, false, false,
9847 _("assignment")))
9848 break;
9850 if (resolve_ordinary_assign (code, ns))
9852 if (code->op == EXEC_COMPCALL)
9853 goto compcall;
9854 else
9855 goto call;
9858 /* F03 7.4.1.3 for non-allocatable, non-pointer components. */
9859 if (code->expr1->ts.type == BT_DERIVED
9860 && code->expr1->ts.u.derived->attr.defined_assign_comp)
9861 generate_component_assignments (&code, ns);
9863 break;
9865 case EXEC_LABEL_ASSIGN:
9866 if (code->label1->defined == ST_LABEL_UNKNOWN)
9867 gfc_error ("Label %d referenced at %L is never defined",
9868 code->label1->value, &code->label1->where);
9869 if (t
9870 && (code->expr1->expr_type != EXPR_VARIABLE
9871 || code->expr1->symtree->n.sym->ts.type != BT_INTEGER
9872 || code->expr1->symtree->n.sym->ts.kind
9873 != gfc_default_integer_kind
9874 || code->expr1->symtree->n.sym->as != NULL))
9875 gfc_error ("ASSIGN statement at %L requires a scalar "
9876 "default INTEGER variable", &code->expr1->where);
9877 break;
9879 case EXEC_POINTER_ASSIGN:
9881 gfc_expr* e;
9883 if (!t)
9884 break;
9886 /* This is both a variable definition and pointer assignment
9887 context, so check both of them. For rank remapping, a final
9888 array ref may be present on the LHS and fool gfc_expr_attr
9889 used in gfc_check_vardef_context. Remove it. */
9890 e = remove_last_array_ref (code->expr1);
9891 t = gfc_check_vardef_context (e, true, false, false,
9892 _("pointer assignment"));
9893 if (t)
9894 t = gfc_check_vardef_context (e, false, false, false,
9895 _("pointer assignment"));
9896 gfc_free_expr (e);
9897 if (!t)
9898 break;
9900 gfc_check_pointer_assign (code->expr1, code->expr2);
9901 break;
9904 case EXEC_ARITHMETIC_IF:
9905 if (t
9906 && code->expr1->ts.type != BT_INTEGER
9907 && code->expr1->ts.type != BT_REAL)
9908 gfc_error ("Arithmetic IF statement at %L requires a numeric "
9909 "expression", &code->expr1->where);
9911 resolve_branch (code->label1, code);
9912 resolve_branch (code->label2, code);
9913 resolve_branch (code->label3, code);
9914 break;
9916 case EXEC_IF:
9917 if (t && code->expr1 != NULL
9918 && (code->expr1->ts.type != BT_LOGICAL
9919 || code->expr1->rank != 0))
9920 gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
9921 &code->expr1->where);
9922 break;
9924 case EXEC_CALL:
9925 call:
9926 resolve_call (code);
9927 break;
9929 case EXEC_COMPCALL:
9930 compcall:
9931 resolve_typebound_subroutine (code);
9932 break;
9934 case EXEC_CALL_PPC:
9935 resolve_ppc_call (code);
9936 break;
9938 case EXEC_SELECT:
9939 /* Select is complicated. Also, a SELECT construct could be
9940 a transformed computed GOTO. */
9941 resolve_select (code, false);
9942 break;
9944 case EXEC_SELECT_TYPE:
9945 resolve_select_type (code, ns);
9946 break;
9948 case EXEC_BLOCK:
9949 resolve_block_construct (code);
9950 break;
9952 case EXEC_DO:
9953 if (code->ext.iterator != NULL)
9955 gfc_iterator *iter = code->ext.iterator;
9956 if (gfc_resolve_iterator (iter, true, false))
9957 gfc_resolve_do_iterator (code, iter->var->symtree->n.sym);
9959 break;
9961 case EXEC_DO_WHILE:
9962 if (code->expr1 == NULL)
9963 gfc_internal_error ("resolve_code(): No expression on DO WHILE");
9964 if (t
9965 && (code->expr1->rank != 0
9966 || code->expr1->ts.type != BT_LOGICAL))
9967 gfc_error ("Exit condition of DO WHILE loop at %L must be "
9968 "a scalar LOGICAL expression", &code->expr1->where);
9969 break;
9971 case EXEC_ALLOCATE:
9972 if (t)
9973 resolve_allocate_deallocate (code, "ALLOCATE");
9975 break;
9977 case EXEC_DEALLOCATE:
9978 if (t)
9979 resolve_allocate_deallocate (code, "DEALLOCATE");
9981 break;
9983 case EXEC_OPEN:
9984 if (!gfc_resolve_open (code->ext.open))
9985 break;
9987 resolve_branch (code->ext.open->err, code);
9988 break;
9990 case EXEC_CLOSE:
9991 if (!gfc_resolve_close (code->ext.close))
9992 break;
9994 resolve_branch (code->ext.close->err, code);
9995 break;
9997 case EXEC_BACKSPACE:
9998 case EXEC_ENDFILE:
9999 case EXEC_REWIND:
10000 case EXEC_FLUSH:
10001 if (!gfc_resolve_filepos (code->ext.filepos))
10002 break;
10004 resolve_branch (code->ext.filepos->err, code);
10005 break;
10007 case EXEC_INQUIRE:
10008 if (!gfc_resolve_inquire (code->ext.inquire))
10009 break;
10011 resolve_branch (code->ext.inquire->err, code);
10012 break;
10014 case EXEC_IOLENGTH:
10015 gcc_assert (code->ext.inquire != NULL);
10016 if (!gfc_resolve_inquire (code->ext.inquire))
10017 break;
10019 resolve_branch (code->ext.inquire->err, code);
10020 break;
10022 case EXEC_WAIT:
10023 if (!gfc_resolve_wait (code->ext.wait))
10024 break;
10026 resolve_branch (code->ext.wait->err, code);
10027 resolve_branch (code->ext.wait->end, code);
10028 resolve_branch (code->ext.wait->eor, code);
10029 break;
10031 case EXEC_READ:
10032 case EXEC_WRITE:
10033 if (!gfc_resolve_dt (code->ext.dt, &code->loc))
10034 break;
10036 resolve_branch (code->ext.dt->err, code);
10037 resolve_branch (code->ext.dt->end, code);
10038 resolve_branch (code->ext.dt->eor, code);
10039 break;
10041 case EXEC_TRANSFER:
10042 resolve_transfer (code);
10043 break;
10045 case EXEC_DO_CONCURRENT:
10046 case EXEC_FORALL:
10047 resolve_forall_iterators (code->ext.forall_iterator);
10049 if (code->expr1 != NULL
10050 && (code->expr1->ts.type != BT_LOGICAL || code->expr1->rank))
10051 gfc_error ("FORALL mask clause at %L requires a scalar LOGICAL "
10052 "expression", &code->expr1->where);
10053 break;
10055 case EXEC_OMP_ATOMIC:
10056 case EXEC_OMP_BARRIER:
10057 case EXEC_OMP_CRITICAL:
10058 case EXEC_OMP_FLUSH:
10059 case EXEC_OMP_DO:
10060 case EXEC_OMP_MASTER:
10061 case EXEC_OMP_ORDERED:
10062 case EXEC_OMP_SECTIONS:
10063 case EXEC_OMP_SINGLE:
10064 case EXEC_OMP_TASKWAIT:
10065 case EXEC_OMP_TASKYIELD:
10066 case EXEC_OMP_WORKSHARE:
10067 gfc_resolve_omp_directive (code, ns);
10068 break;
10070 case EXEC_OMP_PARALLEL:
10071 case EXEC_OMP_PARALLEL_DO:
10072 case EXEC_OMP_PARALLEL_SECTIONS:
10073 case EXEC_OMP_PARALLEL_WORKSHARE:
10074 case EXEC_OMP_TASK:
10075 omp_workshare_save = omp_workshare_flag;
10076 omp_workshare_flag = 0;
10077 gfc_resolve_omp_directive (code, ns);
10078 omp_workshare_flag = omp_workshare_save;
10079 break;
10081 default:
10082 gfc_internal_error ("resolve_code(): Bad statement code");
10086 cs_base = frame.prev;
10090 /* Resolve initial values and make sure they are compatible with
10091 the variable. */
10093 static void
10094 resolve_values (gfc_symbol *sym)
10096 bool t;
10098 if (sym->value == NULL)
10099 return;
10101 if (sym->value->expr_type == EXPR_STRUCTURE)
10102 t= resolve_structure_cons (sym->value, 1);
10103 else
10104 t = gfc_resolve_expr (sym->value);
10106 if (!t)
10107 return;
10109 gfc_check_assign_symbol (sym, NULL, sym->value);
10113 /* Verify any BIND(C) derived types in the namespace so we can report errors
10114 for them once, rather than for each variable declared of that type. */
10116 static void
10117 resolve_bind_c_derived_types (gfc_symbol *derived_sym)
10119 if (derived_sym != NULL && derived_sym->attr.flavor == FL_DERIVED
10120 && derived_sym->attr.is_bind_c == 1)
10121 verify_bind_c_derived_type (derived_sym);
10123 return;
10127 /* Verify that any binding labels used in a given namespace do not collide
10128 with the names or binding labels of any global symbols. Multiple INTERFACE
10129 for the same procedure are permitted. */
10131 static void
10132 gfc_verify_binding_labels (gfc_symbol *sym)
10134 gfc_gsymbol *gsym;
10135 const char *module;
10137 if (!sym || !sym->attr.is_bind_c || sym->attr.is_iso_c
10138 || sym->attr.flavor == FL_DERIVED || !sym->binding_label)
10139 return;
10141 gsym = gfc_find_gsymbol (gfc_gsym_root, sym->binding_label);
10143 if (sym->module)
10144 module = sym->module;
10145 else if (sym->ns && sym->ns->proc_name
10146 && sym->ns->proc_name->attr.flavor == FL_MODULE)
10147 module = sym->ns->proc_name->name;
10148 else if (sym->ns && sym->ns->parent
10149 && sym->ns && sym->ns->parent->proc_name
10150 && sym->ns->parent->proc_name->attr.flavor == FL_MODULE)
10151 module = sym->ns->parent->proc_name->name;
10152 else
10153 module = NULL;
10155 if (!gsym
10156 || (!gsym->defined
10157 && (gsym->type == GSYM_FUNCTION || gsym->type == GSYM_SUBROUTINE)))
10159 if (!gsym)
10160 gsym = gfc_get_gsymbol (sym->binding_label);
10161 gsym->where = sym->declared_at;
10162 gsym->sym_name = sym->name;
10163 gsym->binding_label = sym->binding_label;
10164 gsym->ns = sym->ns;
10165 gsym->mod_name = module;
10166 if (sym->attr.function)
10167 gsym->type = GSYM_FUNCTION;
10168 else if (sym->attr.subroutine)
10169 gsym->type = GSYM_SUBROUTINE;
10170 /* Mark as variable/procedure as defined, unless its an INTERFACE. */
10171 gsym->defined = sym->attr.if_source != IFSRC_IFBODY;
10172 return;
10175 if (sym->attr.flavor == FL_VARIABLE && gsym->type != GSYM_UNKNOWN)
10177 gfc_error ("Variable %s with binding label %s at %L uses the same global "
10178 "identifier as entity at %L", sym->name,
10179 sym->binding_label, &sym->declared_at, &gsym->where);
10180 /* Clear the binding label to prevent checking multiple times. */
10181 sym->binding_label = NULL;
10184 else if (sym->attr.flavor == FL_VARIABLE
10185 && (strcmp (module, gsym->mod_name) != 0
10186 || strcmp (sym->name, gsym->sym_name) != 0))
10188 /* This can only happen if the variable is defined in a module - if it
10189 isn't the same module, reject it. */
10190 gfc_error ("Variable %s from module %s with binding label %s at %L uses "
10191 "the same global identifier as entity at %L from module %s",
10192 sym->name, module, sym->binding_label,
10193 &sym->declared_at, &gsym->where, gsym->mod_name);
10194 sym->binding_label = NULL;
10196 else if ((sym->attr.function || sym->attr.subroutine)
10197 && ((gsym->type != GSYM_SUBROUTINE && gsym->type != GSYM_FUNCTION)
10198 || (gsym->defined && sym->attr.if_source != IFSRC_IFBODY))
10199 && sym != gsym->ns->proc_name
10200 && (module != gsym->mod_name
10201 || strcmp (gsym->sym_name, sym->name) != 0
10202 || (module && strcmp (module, gsym->mod_name) != 0)))
10204 /* Print an error if the procedure is defined multiple times; we have to
10205 exclude references to the same procedure via module association or
10206 multiple checks for the same procedure. */
10207 gfc_error ("Procedure %s with binding label %s at %L uses the same "
10208 "global identifier as entity at %L", sym->name,
10209 sym->binding_label, &sym->declared_at, &gsym->where);
10210 sym->binding_label = NULL;
10215 /* Resolve an index expression. */
10217 static bool
10218 resolve_index_expr (gfc_expr *e)
10220 if (!gfc_resolve_expr (e))
10221 return false;
10223 if (!gfc_simplify_expr (e, 0))
10224 return false;
10226 if (!gfc_specification_expr (e))
10227 return false;
10229 return true;
10233 /* Resolve a charlen structure. */
10235 static bool
10236 resolve_charlen (gfc_charlen *cl)
10238 int i, k;
10239 bool saved_specification_expr;
10241 if (cl->resolved)
10242 return true;
10244 cl->resolved = 1;
10245 saved_specification_expr = specification_expr;
10246 specification_expr = true;
10248 if (cl->length_from_typespec)
10250 if (!gfc_resolve_expr (cl->length))
10252 specification_expr = saved_specification_expr;
10253 return false;
10256 if (!gfc_simplify_expr (cl->length, 0))
10258 specification_expr = saved_specification_expr;
10259 return false;
10262 else
10265 if (!resolve_index_expr (cl->length))
10267 specification_expr = saved_specification_expr;
10268 return false;
10272 /* "If the character length parameter value evaluates to a negative
10273 value, the length of character entities declared is zero." */
10274 if (cl->length && !gfc_extract_int (cl->length, &i) && i < 0)
10276 if (gfc_option.warn_surprising)
10277 gfc_warning_now ("CHARACTER variable at %L has negative length %d,"
10278 " the length has been set to zero",
10279 &cl->length->where, i);
10280 gfc_replace_expr (cl->length,
10281 gfc_get_int_expr (gfc_default_integer_kind, NULL, 0));
10284 /* Check that the character length is not too large. */
10285 k = gfc_validate_kind (BT_INTEGER, gfc_charlen_int_kind, false);
10286 if (cl->length && cl->length->expr_type == EXPR_CONSTANT
10287 && cl->length->ts.type == BT_INTEGER
10288 && mpz_cmp (cl->length->value.integer, gfc_integer_kinds[k].huge) > 0)
10290 gfc_error ("String length at %L is too large", &cl->length->where);
10291 specification_expr = saved_specification_expr;
10292 return false;
10295 specification_expr = saved_specification_expr;
10296 return true;
10300 /* Test for non-constant shape arrays. */
10302 static bool
10303 is_non_constant_shape_array (gfc_symbol *sym)
10305 gfc_expr *e;
10306 int i;
10307 bool not_constant;
10309 not_constant = false;
10310 if (sym->as != NULL)
10312 /* Unfortunately, !gfc_is_compile_time_shape hits a legal case that
10313 has not been simplified; parameter array references. Do the
10314 simplification now. */
10315 for (i = 0; i < sym->as->rank + sym->as->corank; i++)
10317 e = sym->as->lower[i];
10318 if (e && (!resolve_index_expr(e)
10319 || !gfc_is_constant_expr (e)))
10320 not_constant = true;
10321 e = sym->as->upper[i];
10322 if (e && (!resolve_index_expr(e)
10323 || !gfc_is_constant_expr (e)))
10324 not_constant = true;
10327 return not_constant;
10330 /* Given a symbol and an initialization expression, add code to initialize
10331 the symbol to the function entry. */
10332 static void
10333 build_init_assign (gfc_symbol *sym, gfc_expr *init)
10335 gfc_expr *lval;
10336 gfc_code *init_st;
10337 gfc_namespace *ns = sym->ns;
10339 /* Search for the function namespace if this is a contained
10340 function without an explicit result. */
10341 if (sym->attr.function && sym == sym->result
10342 && sym->name != sym->ns->proc_name->name)
10344 ns = ns->contained;
10345 for (;ns; ns = ns->sibling)
10346 if (strcmp (ns->proc_name->name, sym->name) == 0)
10347 break;
10350 if (ns == NULL)
10352 gfc_free_expr (init);
10353 return;
10356 /* Build an l-value expression for the result. */
10357 lval = gfc_lval_expr_from_sym (sym);
10359 /* Add the code at scope entry. */
10360 init_st = gfc_get_code (EXEC_INIT_ASSIGN);
10361 init_st->next = ns->code;
10362 ns->code = init_st;
10364 /* Assign the default initializer to the l-value. */
10365 init_st->loc = sym->declared_at;
10366 init_st->expr1 = lval;
10367 init_st->expr2 = init;
10370 /* Assign the default initializer to a derived type variable or result. */
10372 static void
10373 apply_default_init (gfc_symbol *sym)
10375 gfc_expr *init = NULL;
10377 if (sym->attr.flavor != FL_VARIABLE && !sym->attr.function)
10378 return;
10380 if (sym->ts.type == BT_DERIVED && sym->ts.u.derived)
10381 init = gfc_default_initializer (&sym->ts);
10383 if (init == NULL && sym->ts.type != BT_CLASS)
10384 return;
10386 build_init_assign (sym, init);
10387 sym->attr.referenced = 1;
10390 /* Build an initializer for a local integer, real, complex, logical, or
10391 character variable, based on the command line flags finit-local-zero,
10392 finit-integer=, finit-real=, finit-logical=, and finit-runtime. Returns
10393 null if the symbol should not have a default initialization. */
10394 static gfc_expr *
10395 build_default_init_expr (gfc_symbol *sym)
10397 int char_len;
10398 gfc_expr *init_expr;
10399 int i;
10401 /* These symbols should never have a default initialization. */
10402 if (sym->attr.allocatable
10403 || sym->attr.external
10404 || sym->attr.dummy
10405 || sym->attr.pointer
10406 || sym->attr.in_equivalence
10407 || sym->attr.in_common
10408 || sym->attr.data
10409 || sym->module
10410 || sym->attr.cray_pointee
10411 || sym->attr.cray_pointer
10412 || sym->assoc)
10413 return NULL;
10415 /* Now we'll try to build an initializer expression. */
10416 init_expr = gfc_get_constant_expr (sym->ts.type, sym->ts.kind,
10417 &sym->declared_at);
10419 /* We will only initialize integers, reals, complex, logicals, and
10420 characters, and only if the corresponding command-line flags
10421 were set. Otherwise, we free init_expr and return null. */
10422 switch (sym->ts.type)
10424 case BT_INTEGER:
10425 if (gfc_option.flag_init_integer != GFC_INIT_INTEGER_OFF)
10426 mpz_set_si (init_expr->value.integer,
10427 gfc_option.flag_init_integer_value);
10428 else
10430 gfc_free_expr (init_expr);
10431 init_expr = NULL;
10433 break;
10435 case BT_REAL:
10436 switch (gfc_option.flag_init_real)
10438 case GFC_INIT_REAL_SNAN:
10439 init_expr->is_snan = 1;
10440 /* Fall through. */
10441 case GFC_INIT_REAL_NAN:
10442 mpfr_set_nan (init_expr->value.real);
10443 break;
10445 case GFC_INIT_REAL_INF:
10446 mpfr_set_inf (init_expr->value.real, 1);
10447 break;
10449 case GFC_INIT_REAL_NEG_INF:
10450 mpfr_set_inf (init_expr->value.real, -1);
10451 break;
10453 case GFC_INIT_REAL_ZERO:
10454 mpfr_set_ui (init_expr->value.real, 0.0, GFC_RND_MODE);
10455 break;
10457 default:
10458 gfc_free_expr (init_expr);
10459 init_expr = NULL;
10460 break;
10462 break;
10464 case BT_COMPLEX:
10465 switch (gfc_option.flag_init_real)
10467 case GFC_INIT_REAL_SNAN:
10468 init_expr->is_snan = 1;
10469 /* Fall through. */
10470 case GFC_INIT_REAL_NAN:
10471 mpfr_set_nan (mpc_realref (init_expr->value.complex));
10472 mpfr_set_nan (mpc_imagref (init_expr->value.complex));
10473 break;
10475 case GFC_INIT_REAL_INF:
10476 mpfr_set_inf (mpc_realref (init_expr->value.complex), 1);
10477 mpfr_set_inf (mpc_imagref (init_expr->value.complex), 1);
10478 break;
10480 case GFC_INIT_REAL_NEG_INF:
10481 mpfr_set_inf (mpc_realref (init_expr->value.complex), -1);
10482 mpfr_set_inf (mpc_imagref (init_expr->value.complex), -1);
10483 break;
10485 case GFC_INIT_REAL_ZERO:
10486 mpc_set_ui (init_expr->value.complex, 0, GFC_MPC_RND_MODE);
10487 break;
10489 default:
10490 gfc_free_expr (init_expr);
10491 init_expr = NULL;
10492 break;
10494 break;
10496 case BT_LOGICAL:
10497 if (gfc_option.flag_init_logical == GFC_INIT_LOGICAL_FALSE)
10498 init_expr->value.logical = 0;
10499 else if (gfc_option.flag_init_logical == GFC_INIT_LOGICAL_TRUE)
10500 init_expr->value.logical = 1;
10501 else
10503 gfc_free_expr (init_expr);
10504 init_expr = NULL;
10506 break;
10508 case BT_CHARACTER:
10509 /* For characters, the length must be constant in order to
10510 create a default initializer. */
10511 if (gfc_option.flag_init_character == GFC_INIT_CHARACTER_ON
10512 && sym->ts.u.cl->length
10513 && sym->ts.u.cl->length->expr_type == EXPR_CONSTANT)
10515 char_len = mpz_get_si (sym->ts.u.cl->length->value.integer);
10516 init_expr->value.character.length = char_len;
10517 init_expr->value.character.string = gfc_get_wide_string (char_len+1);
10518 for (i = 0; i < char_len; i++)
10519 init_expr->value.character.string[i]
10520 = (unsigned char) gfc_option.flag_init_character_value;
10522 else
10524 gfc_free_expr (init_expr);
10525 init_expr = NULL;
10527 if (!init_expr && gfc_option.flag_init_character == GFC_INIT_CHARACTER_ON
10528 && sym->ts.u.cl->length && gfc_option.flag_max_stack_var_size != 0)
10530 gfc_actual_arglist *arg;
10531 init_expr = gfc_get_expr ();
10532 init_expr->where = sym->declared_at;
10533 init_expr->ts = sym->ts;
10534 init_expr->expr_type = EXPR_FUNCTION;
10535 init_expr->value.function.isym =
10536 gfc_intrinsic_function_by_id (GFC_ISYM_REPEAT);
10537 init_expr->value.function.name = "repeat";
10538 arg = gfc_get_actual_arglist ();
10539 arg->expr = gfc_get_character_expr (sym->ts.kind, &sym->declared_at,
10540 NULL, 1);
10541 arg->expr->value.character.string[0]
10542 = gfc_option.flag_init_character_value;
10543 arg->next = gfc_get_actual_arglist ();
10544 arg->next->expr = gfc_copy_expr (sym->ts.u.cl->length);
10545 init_expr->value.function.actual = arg;
10547 break;
10549 default:
10550 gfc_free_expr (init_expr);
10551 init_expr = NULL;
10553 return init_expr;
10556 /* Add an initialization expression to a local variable. */
10557 static void
10558 apply_default_init_local (gfc_symbol *sym)
10560 gfc_expr *init = NULL;
10562 /* The symbol should be a variable or a function return value. */
10563 if ((sym->attr.flavor != FL_VARIABLE && !sym->attr.function)
10564 || (sym->attr.function && sym->result != sym))
10565 return;
10567 /* Try to build the initializer expression. If we can't initialize
10568 this symbol, then init will be NULL. */
10569 init = build_default_init_expr (sym);
10570 if (init == NULL)
10571 return;
10573 /* For saved variables, we don't want to add an initializer at function
10574 entry, so we just add a static initializer. Note that automatic variables
10575 are stack allocated even with -fno-automatic; we have also to exclude
10576 result variable, which are also nonstatic. */
10577 if (sym->attr.save || sym->ns->save_all
10578 || (gfc_option.flag_max_stack_var_size == 0 && !sym->attr.result
10579 && (!sym->attr.dimension || !is_non_constant_shape_array (sym))))
10581 /* Don't clobber an existing initializer! */
10582 gcc_assert (sym->value == NULL);
10583 sym->value = init;
10584 return;
10587 build_init_assign (sym, init);
10591 /* Resolution of common features of flavors variable and procedure. */
10593 static bool
10594 resolve_fl_var_and_proc (gfc_symbol *sym, int mp_flag)
10596 gfc_array_spec *as;
10598 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
10599 as = CLASS_DATA (sym)->as;
10600 else
10601 as = sym->as;
10603 /* Constraints on deferred shape variable. */
10604 if (as == NULL || as->type != AS_DEFERRED)
10606 bool pointer, allocatable, dimension;
10608 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
10610 pointer = CLASS_DATA (sym)->attr.class_pointer;
10611 allocatable = CLASS_DATA (sym)->attr.allocatable;
10612 dimension = CLASS_DATA (sym)->attr.dimension;
10614 else
10616 pointer = sym->attr.pointer && !sym->attr.select_type_temporary;
10617 allocatable = sym->attr.allocatable;
10618 dimension = sym->attr.dimension;
10621 if (allocatable)
10623 if (dimension && as->type != AS_ASSUMED_RANK)
10625 gfc_error ("Allocatable array '%s' at %L must have a deferred "
10626 "shape or assumed rank", sym->name, &sym->declared_at);
10627 return false;
10629 else if (!gfc_notify_std (GFC_STD_F2003, "Scalar object "
10630 "'%s' at %L may not be ALLOCATABLE",
10631 sym->name, &sym->declared_at))
10632 return false;
10635 if (pointer && dimension && as->type != AS_ASSUMED_RANK)
10637 gfc_error ("Array pointer '%s' at %L must have a deferred shape or "
10638 "assumed rank", sym->name, &sym->declared_at);
10639 return false;
10642 else
10644 if (!mp_flag && !sym->attr.allocatable && !sym->attr.pointer
10645 && sym->ts.type != BT_CLASS && !sym->assoc)
10647 gfc_error ("Array '%s' at %L cannot have a deferred shape",
10648 sym->name, &sym->declared_at);
10649 return false;
10653 /* Constraints on polymorphic variables. */
10654 if (sym->ts.type == BT_CLASS && !(sym->result && sym->result != sym))
10656 /* F03:C502. */
10657 if (sym->attr.class_ok
10658 && !sym->attr.select_type_temporary
10659 && !UNLIMITED_POLY (sym)
10660 && !gfc_type_is_extensible (CLASS_DATA (sym)->ts.u.derived))
10662 gfc_error ("Type '%s' of CLASS variable '%s' at %L is not extensible",
10663 CLASS_DATA (sym)->ts.u.derived->name, sym->name,
10664 &sym->declared_at);
10665 return false;
10668 /* F03:C509. */
10669 /* Assume that use associated symbols were checked in the module ns.
10670 Class-variables that are associate-names are also something special
10671 and excepted from the test. */
10672 if (!sym->attr.class_ok && !sym->attr.use_assoc && !sym->assoc)
10674 gfc_error ("CLASS variable '%s' at %L must be dummy, allocatable "
10675 "or pointer", sym->name, &sym->declared_at);
10676 return false;
10680 return true;
10684 /* Additional checks for symbols with flavor variable and derived
10685 type. To be called from resolve_fl_variable. */
10687 static bool
10688 resolve_fl_variable_derived (gfc_symbol *sym, int no_init_flag)
10690 gcc_assert (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS);
10692 /* Check to see if a derived type is blocked from being host
10693 associated by the presence of another class I symbol in the same
10694 namespace. 14.6.1.3 of the standard and the discussion on
10695 comp.lang.fortran. */
10696 if (sym->ns != sym->ts.u.derived->ns
10697 && sym->ns->proc_name->attr.if_source != IFSRC_IFBODY)
10699 gfc_symbol *s;
10700 gfc_find_symbol (sym->ts.u.derived->name, sym->ns, 0, &s);
10701 if (s && s->attr.generic)
10702 s = gfc_find_dt_in_generic (s);
10703 if (s && s->attr.flavor != FL_DERIVED)
10705 gfc_error ("The type '%s' cannot be host associated at %L "
10706 "because it is blocked by an incompatible object "
10707 "of the same name declared at %L",
10708 sym->ts.u.derived->name, &sym->declared_at,
10709 &s->declared_at);
10710 return false;
10714 /* 4th constraint in section 11.3: "If an object of a type for which
10715 component-initialization is specified (R429) appears in the
10716 specification-part of a module and does not have the ALLOCATABLE
10717 or POINTER attribute, the object shall have the SAVE attribute."
10719 The check for initializers is performed with
10720 gfc_has_default_initializer because gfc_default_initializer generates
10721 a hidden default for allocatable components. */
10722 if (!(sym->value || no_init_flag) && sym->ns->proc_name
10723 && sym->ns->proc_name->attr.flavor == FL_MODULE
10724 && !sym->ns->save_all && !sym->attr.save
10725 && !sym->attr.pointer && !sym->attr.allocatable
10726 && gfc_has_default_initializer (sym->ts.u.derived)
10727 && !gfc_notify_std (GFC_STD_F2008, "Implied SAVE for module variable "
10728 "'%s' at %L, needed due to the default "
10729 "initialization", sym->name, &sym->declared_at))
10730 return false;
10732 /* Assign default initializer. */
10733 if (!(sym->value || sym->attr.pointer || sym->attr.allocatable)
10734 && (!no_init_flag || sym->attr.intent == INTENT_OUT))
10736 sym->value = gfc_default_initializer (&sym->ts);
10739 return true;
10743 /* Resolve symbols with flavor variable. */
10745 static bool
10746 resolve_fl_variable (gfc_symbol *sym, int mp_flag)
10748 int no_init_flag, automatic_flag;
10749 gfc_expr *e;
10750 const char *auto_save_msg;
10751 bool saved_specification_expr;
10753 auto_save_msg = "Automatic object '%s' at %L cannot have the "
10754 "SAVE attribute";
10756 if (!resolve_fl_var_and_proc (sym, mp_flag))
10757 return false;
10759 /* Set this flag to check that variables are parameters of all entries.
10760 This check is effected by the call to gfc_resolve_expr through
10761 is_non_constant_shape_array. */
10762 saved_specification_expr = specification_expr;
10763 specification_expr = true;
10765 if (sym->ns->proc_name
10766 && (sym->ns->proc_name->attr.flavor == FL_MODULE
10767 || sym->ns->proc_name->attr.is_main_program)
10768 && !sym->attr.use_assoc
10769 && !sym->attr.allocatable
10770 && !sym->attr.pointer
10771 && is_non_constant_shape_array (sym))
10773 /* The shape of a main program or module array needs to be
10774 constant. */
10775 gfc_error ("The module or main program array '%s' at %L must "
10776 "have constant shape", sym->name, &sym->declared_at);
10777 specification_expr = saved_specification_expr;
10778 return false;
10781 /* Constraints on deferred type parameter. */
10782 if (sym->ts.deferred && !(sym->attr.pointer || sym->attr.allocatable))
10784 gfc_error ("Entity '%s' at %L has a deferred type parameter and "
10785 "requires either the pointer or allocatable attribute",
10786 sym->name, &sym->declared_at);
10787 specification_expr = saved_specification_expr;
10788 return false;
10791 if (sym->ts.type == BT_CHARACTER)
10793 /* Make sure that character string variables with assumed length are
10794 dummy arguments. */
10795 e = sym->ts.u.cl->length;
10796 if (e == NULL && !sym->attr.dummy && !sym->attr.result
10797 && !sym->ts.deferred && !sym->attr.select_type_temporary)
10799 gfc_error ("Entity with assumed character length at %L must be a "
10800 "dummy argument or a PARAMETER", &sym->declared_at);
10801 specification_expr = saved_specification_expr;
10802 return false;
10805 if (e && sym->attr.save == SAVE_EXPLICIT && !gfc_is_constant_expr (e))
10807 gfc_error (auto_save_msg, sym->name, &sym->declared_at);
10808 specification_expr = saved_specification_expr;
10809 return false;
10812 if (!gfc_is_constant_expr (e)
10813 && !(e->expr_type == EXPR_VARIABLE
10814 && e->symtree->n.sym->attr.flavor == FL_PARAMETER))
10816 if (!sym->attr.use_assoc && sym->ns->proc_name
10817 && (sym->ns->proc_name->attr.flavor == FL_MODULE
10818 || sym->ns->proc_name->attr.is_main_program))
10820 gfc_error ("'%s' at %L must have constant character length "
10821 "in this context", sym->name, &sym->declared_at);
10822 specification_expr = saved_specification_expr;
10823 return false;
10825 if (sym->attr.in_common)
10827 gfc_error ("COMMON variable '%s' at %L must have constant "
10828 "character length", sym->name, &sym->declared_at);
10829 specification_expr = saved_specification_expr;
10830 return false;
10835 if (sym->value == NULL && sym->attr.referenced)
10836 apply_default_init_local (sym); /* Try to apply a default initialization. */
10838 /* Determine if the symbol may not have an initializer. */
10839 no_init_flag = automatic_flag = 0;
10840 if (sym->attr.allocatable || sym->attr.external || sym->attr.dummy
10841 || sym->attr.intrinsic || sym->attr.result)
10842 no_init_flag = 1;
10843 else if ((sym->attr.dimension || sym->attr.codimension) && !sym->attr.pointer
10844 && is_non_constant_shape_array (sym))
10846 no_init_flag = automatic_flag = 1;
10848 /* Also, they must not have the SAVE attribute.
10849 SAVE_IMPLICIT is checked below. */
10850 if (sym->as && sym->attr.codimension)
10852 int corank = sym->as->corank;
10853 sym->as->corank = 0;
10854 no_init_flag = automatic_flag = is_non_constant_shape_array (sym);
10855 sym->as->corank = corank;
10857 if (automatic_flag && sym->attr.save == SAVE_EXPLICIT)
10859 gfc_error (auto_save_msg, sym->name, &sym->declared_at);
10860 specification_expr = saved_specification_expr;
10861 return false;
10865 /* Ensure that any initializer is simplified. */
10866 if (sym->value)
10867 gfc_simplify_expr (sym->value, 1);
10869 /* Reject illegal initializers. */
10870 if (!sym->mark && sym->value)
10872 if (sym->attr.allocatable || (sym->ts.type == BT_CLASS
10873 && CLASS_DATA (sym)->attr.allocatable))
10874 gfc_error ("Allocatable '%s' at %L cannot have an initializer",
10875 sym->name, &sym->declared_at);
10876 else if (sym->attr.external)
10877 gfc_error ("External '%s' at %L cannot have an initializer",
10878 sym->name, &sym->declared_at);
10879 else if (sym->attr.dummy
10880 && !(sym->ts.type == BT_DERIVED && sym->attr.intent == INTENT_OUT))
10881 gfc_error ("Dummy '%s' at %L cannot have an initializer",
10882 sym->name, &sym->declared_at);
10883 else if (sym->attr.intrinsic)
10884 gfc_error ("Intrinsic '%s' at %L cannot have an initializer",
10885 sym->name, &sym->declared_at);
10886 else if (sym->attr.result)
10887 gfc_error ("Function result '%s' at %L cannot have an initializer",
10888 sym->name, &sym->declared_at);
10889 else if (automatic_flag)
10890 gfc_error ("Automatic array '%s' at %L cannot have an initializer",
10891 sym->name, &sym->declared_at);
10892 else
10893 goto no_init_error;
10894 specification_expr = saved_specification_expr;
10895 return false;
10898 no_init_error:
10899 if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS)
10901 bool res = resolve_fl_variable_derived (sym, no_init_flag);
10902 specification_expr = saved_specification_expr;
10903 return res;
10906 specification_expr = saved_specification_expr;
10907 return true;
10911 /* Resolve a procedure. */
10913 static bool
10914 resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
10916 gfc_formal_arglist *arg;
10918 if (sym->attr.function
10919 && !resolve_fl_var_and_proc (sym, mp_flag))
10920 return false;
10922 if (sym->ts.type == BT_CHARACTER)
10924 gfc_charlen *cl = sym->ts.u.cl;
10926 if (cl && cl->length && gfc_is_constant_expr (cl->length)
10927 && !resolve_charlen (cl))
10928 return false;
10930 if ((!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
10931 && sym->attr.proc == PROC_ST_FUNCTION)
10933 gfc_error ("Character-valued statement function '%s' at %L must "
10934 "have constant length", sym->name, &sym->declared_at);
10935 return false;
10939 /* Ensure that derived type for are not of a private type. Internal
10940 module procedures are excluded by 2.2.3.3 - i.e., they are not
10941 externally accessible and can access all the objects accessible in
10942 the host. */
10943 if (!(sym->ns->parent
10944 && sym->ns->parent->proc_name->attr.flavor == FL_MODULE)
10945 && gfc_check_symbol_access (sym))
10947 gfc_interface *iface;
10949 for (arg = gfc_sym_get_dummy_args (sym); arg; arg = arg->next)
10951 if (arg->sym
10952 && arg->sym->ts.type == BT_DERIVED
10953 && !arg->sym->ts.u.derived->attr.use_assoc
10954 && !gfc_check_symbol_access (arg->sym->ts.u.derived)
10955 && !gfc_notify_std (GFC_STD_F2003, "'%s' is of a PRIVATE type "
10956 "and cannot be a dummy argument"
10957 " of '%s', which is PUBLIC at %L",
10958 arg->sym->name, sym->name,
10959 &sym->declared_at))
10961 /* Stop this message from recurring. */
10962 arg->sym->ts.u.derived->attr.access = ACCESS_PUBLIC;
10963 return false;
10967 /* PUBLIC interfaces may expose PRIVATE procedures that take types
10968 PRIVATE to the containing module. */
10969 for (iface = sym->generic; iface; iface = iface->next)
10971 for (arg = gfc_sym_get_dummy_args (iface->sym); arg; arg = arg->next)
10973 if (arg->sym
10974 && arg->sym->ts.type == BT_DERIVED
10975 && !arg->sym->ts.u.derived->attr.use_assoc
10976 && !gfc_check_symbol_access (arg->sym->ts.u.derived)
10977 && !gfc_notify_std (GFC_STD_F2003, "Procedure '%s' in "
10978 "PUBLIC interface '%s' at %L "
10979 "takes dummy arguments of '%s' which "
10980 "is PRIVATE", iface->sym->name,
10981 sym->name, &iface->sym->declared_at,
10982 gfc_typename(&arg->sym->ts)))
10984 /* Stop this message from recurring. */
10985 arg->sym->ts.u.derived->attr.access = ACCESS_PUBLIC;
10986 return false;
10991 /* PUBLIC interfaces may expose PRIVATE procedures that take types
10992 PRIVATE to the containing module. */
10993 for (iface = sym->generic; iface; iface = iface->next)
10995 for (arg = gfc_sym_get_dummy_args (iface->sym); arg; arg = arg->next)
10997 if (arg->sym
10998 && arg->sym->ts.type == BT_DERIVED
10999 && !arg->sym->ts.u.derived->attr.use_assoc
11000 && !gfc_check_symbol_access (arg->sym->ts.u.derived)
11001 && !gfc_notify_std (GFC_STD_F2003, "Procedure '%s' in "
11002 "PUBLIC interface '%s' at %L takes "
11003 "dummy arguments of '%s' which is "
11004 "PRIVATE", iface->sym->name,
11005 sym->name, &iface->sym->declared_at,
11006 gfc_typename(&arg->sym->ts)))
11008 /* Stop this message from recurring. */
11009 arg->sym->ts.u.derived->attr.access = ACCESS_PUBLIC;
11010 return false;
11016 if (sym->attr.function && sym->value && sym->attr.proc != PROC_ST_FUNCTION
11017 && !sym->attr.proc_pointer)
11019 gfc_error ("Function '%s' at %L cannot have an initializer",
11020 sym->name, &sym->declared_at);
11021 return false;
11024 /* An external symbol may not have an initializer because it is taken to be
11025 a procedure. Exception: Procedure Pointers. */
11026 if (sym->attr.external && sym->value && !sym->attr.proc_pointer)
11028 gfc_error ("External object '%s' at %L may not have an initializer",
11029 sym->name, &sym->declared_at);
11030 return false;
11033 /* An elemental function is required to return a scalar 12.7.1 */
11034 if (sym->attr.elemental && sym->attr.function && sym->as)
11036 gfc_error ("ELEMENTAL function '%s' at %L must have a scalar "
11037 "result", sym->name, &sym->declared_at);
11038 /* Reset so that the error only occurs once. */
11039 sym->attr.elemental = 0;
11040 return false;
11043 if (sym->attr.proc == PROC_ST_FUNCTION
11044 && (sym->attr.allocatable || sym->attr.pointer))
11046 gfc_error ("Statement function '%s' at %L may not have pointer or "
11047 "allocatable attribute", sym->name, &sym->declared_at);
11048 return false;
11051 /* 5.1.1.5 of the Standard: A function name declared with an asterisk
11052 char-len-param shall not be array-valued, pointer-valued, recursive
11053 or pure. ....snip... A character value of * may only be used in the
11054 following ways: (i) Dummy arg of procedure - dummy associates with
11055 actual length; (ii) To declare a named constant; or (iii) External
11056 function - but length must be declared in calling scoping unit. */
11057 if (sym->attr.function
11058 && sym->ts.type == BT_CHARACTER && !sym->ts.deferred
11059 && sym->ts.u.cl && sym->ts.u.cl->length == NULL)
11061 if ((sym->as && sym->as->rank) || (sym->attr.pointer)
11062 || (sym->attr.recursive) || (sym->attr.pure))
11064 if (sym->as && sym->as->rank)
11065 gfc_error ("CHARACTER(*) function '%s' at %L cannot be "
11066 "array-valued", sym->name, &sym->declared_at);
11068 if (sym->attr.pointer)
11069 gfc_error ("CHARACTER(*) function '%s' at %L cannot be "
11070 "pointer-valued", sym->name, &sym->declared_at);
11072 if (sym->attr.pure)
11073 gfc_error ("CHARACTER(*) function '%s' at %L cannot be "
11074 "pure", sym->name, &sym->declared_at);
11076 if (sym->attr.recursive)
11077 gfc_error ("CHARACTER(*) function '%s' at %L cannot be "
11078 "recursive", sym->name, &sym->declared_at);
11080 return false;
11083 /* Appendix B.2 of the standard. Contained functions give an
11084 error anyway. Fixed-form is likely to be F77/legacy. Deferred
11085 character length is an F2003 feature. */
11086 if (!sym->attr.contained
11087 && gfc_current_form != FORM_FIXED
11088 && !sym->ts.deferred)
11089 gfc_notify_std (GFC_STD_F95_OBS,
11090 "CHARACTER(*) function '%s' at %L",
11091 sym->name, &sym->declared_at);
11094 /* F2008, C1218. */
11095 if (sym->attr.elemental)
11097 if (sym->attr.proc_pointer)
11099 gfc_error ("Procedure pointer '%s' at %L shall not be elemental",
11100 sym->name, &sym->declared_at);
11101 return false;
11103 if (sym->attr.dummy)
11105 gfc_error ("Dummy procedure '%s' at %L shall not be elemental",
11106 sym->name, &sym->declared_at);
11107 return false;
11111 if (sym->attr.is_bind_c && sym->attr.is_c_interop != 1)
11113 gfc_formal_arglist *curr_arg;
11114 int has_non_interop_arg = 0;
11116 if (!verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common,
11117 sym->common_block))
11119 /* Clear these to prevent looking at them again if there was an
11120 error. */
11121 sym->attr.is_bind_c = 0;
11122 sym->attr.is_c_interop = 0;
11123 sym->ts.is_c_interop = 0;
11125 else
11127 /* So far, no errors have been found. */
11128 sym->attr.is_c_interop = 1;
11129 sym->ts.is_c_interop = 1;
11132 curr_arg = gfc_sym_get_dummy_args (sym);
11133 while (curr_arg != NULL)
11135 /* Skip implicitly typed dummy args here. */
11136 if (curr_arg->sym->attr.implicit_type == 0)
11137 if (!gfc_verify_c_interop_param (curr_arg->sym))
11138 /* If something is found to fail, record the fact so we
11139 can mark the symbol for the procedure as not being
11140 BIND(C) to try and prevent multiple errors being
11141 reported. */
11142 has_non_interop_arg = 1;
11144 curr_arg = curr_arg->next;
11147 /* See if any of the arguments were not interoperable and if so, clear
11148 the procedure symbol to prevent duplicate error messages. */
11149 if (has_non_interop_arg != 0)
11151 sym->attr.is_c_interop = 0;
11152 sym->ts.is_c_interop = 0;
11153 sym->attr.is_bind_c = 0;
11157 if (!sym->attr.proc_pointer)
11159 if (sym->attr.save == SAVE_EXPLICIT)
11161 gfc_error ("PROCEDURE attribute conflicts with SAVE attribute "
11162 "in '%s' at %L", sym->name, &sym->declared_at);
11163 return false;
11165 if (sym->attr.intent)
11167 gfc_error ("PROCEDURE attribute conflicts with INTENT attribute "
11168 "in '%s' at %L", sym->name, &sym->declared_at);
11169 return false;
11171 if (sym->attr.subroutine && sym->attr.result)
11173 gfc_error ("PROCEDURE attribute conflicts with RESULT attribute "
11174 "in '%s' at %L", sym->name, &sym->declared_at);
11175 return false;
11177 if (sym->attr.external && sym->attr.function
11178 && ((sym->attr.if_source == IFSRC_DECL && !sym->attr.procedure)
11179 || sym->attr.contained))
11181 gfc_error ("EXTERNAL attribute conflicts with FUNCTION attribute "
11182 "in '%s' at %L", sym->name, &sym->declared_at);
11183 return false;
11185 if (strcmp ("ppr@", sym->name) == 0)
11187 gfc_error ("Procedure pointer result '%s' at %L "
11188 "is missing the pointer attribute",
11189 sym->ns->proc_name->name, &sym->declared_at);
11190 return false;
11194 return true;
11198 /* Resolve a list of finalizer procedures. That is, after they have hopefully
11199 been defined and we now know their defined arguments, check that they fulfill
11200 the requirements of the standard for procedures used as finalizers. */
11202 static bool
11203 gfc_resolve_finalizers (gfc_symbol* derived)
11205 gfc_finalizer* list;
11206 gfc_finalizer** prev_link; /* For removing wrong entries from the list. */
11207 bool result = true;
11208 bool seen_scalar = false;
11210 if (!derived->f2k_derived || !derived->f2k_derived->finalizers)
11211 return true;
11213 /* Walk over the list of finalizer-procedures, check them, and if any one
11214 does not fit in with the standard's definition, print an error and remove
11215 it from the list. */
11216 prev_link = &derived->f2k_derived->finalizers;
11217 for (list = derived->f2k_derived->finalizers; list; list = *prev_link)
11219 gfc_formal_arglist *dummy_args;
11220 gfc_symbol* arg;
11221 gfc_finalizer* i;
11222 int my_rank;
11224 /* Skip this finalizer if we already resolved it. */
11225 if (list->proc_tree)
11227 prev_link = &(list->next);
11228 continue;
11231 /* Check this exists and is a SUBROUTINE. */
11232 if (!list->proc_sym->attr.subroutine)
11234 gfc_error ("FINAL procedure '%s' at %L is not a SUBROUTINE",
11235 list->proc_sym->name, &list->where);
11236 goto error;
11239 /* We should have exactly one argument. */
11240 dummy_args = gfc_sym_get_dummy_args (list->proc_sym);
11241 if (!dummy_args || dummy_args->next)
11243 gfc_error ("FINAL procedure at %L must have exactly one argument",
11244 &list->where);
11245 goto error;
11247 arg = dummy_args->sym;
11249 /* This argument must be of our type. */
11250 if (arg->ts.type != BT_DERIVED || arg->ts.u.derived != derived)
11252 gfc_error ("Argument of FINAL procedure at %L must be of type '%s'",
11253 &arg->declared_at, derived->name);
11254 goto error;
11257 /* It must neither be a pointer nor allocatable nor optional. */
11258 if (arg->attr.pointer)
11260 gfc_error ("Argument of FINAL procedure at %L must not be a POINTER",
11261 &arg->declared_at);
11262 goto error;
11264 if (arg->attr.allocatable)
11266 gfc_error ("Argument of FINAL procedure at %L must not be"
11267 " ALLOCATABLE", &arg->declared_at);
11268 goto error;
11270 if (arg->attr.optional)
11272 gfc_error ("Argument of FINAL procedure at %L must not be OPTIONAL",
11273 &arg->declared_at);
11274 goto error;
11277 /* It must not be INTENT(OUT). */
11278 if (arg->attr.intent == INTENT_OUT)
11280 gfc_error ("Argument of FINAL procedure at %L must not be"
11281 " INTENT(OUT)", &arg->declared_at);
11282 goto error;
11285 /* Warn if the procedure is non-scalar and not assumed shape. */
11286 if (gfc_option.warn_surprising && arg->as && arg->as->rank != 0
11287 && arg->as->type != AS_ASSUMED_SHAPE)
11288 gfc_warning ("Non-scalar FINAL procedure at %L should have assumed"
11289 " shape argument", &arg->declared_at);
11291 /* Check that it does not match in kind and rank with a FINAL procedure
11292 defined earlier. To really loop over the *earlier* declarations,
11293 we need to walk the tail of the list as new ones were pushed at the
11294 front. */
11295 /* TODO: Handle kind parameters once they are implemented. */
11296 my_rank = (arg->as ? arg->as->rank : 0);
11297 for (i = list->next; i; i = i->next)
11299 gfc_formal_arglist *dummy_args;
11301 /* Argument list might be empty; that is an error signalled earlier,
11302 but we nevertheless continued resolving. */
11303 dummy_args = gfc_sym_get_dummy_args (i->proc_sym);
11304 if (dummy_args)
11306 gfc_symbol* i_arg = dummy_args->sym;
11307 const int i_rank = (i_arg->as ? i_arg->as->rank : 0);
11308 if (i_rank == my_rank)
11310 gfc_error ("FINAL procedure '%s' declared at %L has the same"
11311 " rank (%d) as '%s'",
11312 list->proc_sym->name, &list->where, my_rank,
11313 i->proc_sym->name);
11314 goto error;
11319 /* Is this the/a scalar finalizer procedure? */
11320 if (!arg->as || arg->as->rank == 0)
11321 seen_scalar = true;
11323 /* Find the symtree for this procedure. */
11324 gcc_assert (!list->proc_tree);
11325 list->proc_tree = gfc_find_sym_in_symtree (list->proc_sym);
11327 prev_link = &list->next;
11328 continue;
11330 /* Remove wrong nodes immediately from the list so we don't risk any
11331 troubles in the future when they might fail later expectations. */
11332 error:
11333 result = false;
11334 i = list;
11335 *prev_link = list->next;
11336 gfc_free_finalizer (i);
11339 /* Warn if we haven't seen a scalar finalizer procedure (but we know there
11340 were nodes in the list, must have been for arrays. It is surely a good
11341 idea to have a scalar version there if there's something to finalize. */
11342 if (gfc_option.warn_surprising && result && !seen_scalar)
11343 gfc_warning ("Only array FINAL procedures declared for derived type '%s'"
11344 " defined at %L, suggest also scalar one",
11345 derived->name, &derived->declared_at);
11347 gfc_find_derived_vtab (derived);
11348 return result;
11352 /* Check if two GENERIC targets are ambiguous and emit an error is they are. */
11354 static bool
11355 check_generic_tbp_ambiguity (gfc_tbp_generic* t1, gfc_tbp_generic* t2,
11356 const char* generic_name, locus where)
11358 gfc_symbol *sym1, *sym2;
11359 const char *pass1, *pass2;
11360 gfc_formal_arglist *dummy_args;
11362 gcc_assert (t1->specific && t2->specific);
11363 gcc_assert (!t1->specific->is_generic);
11364 gcc_assert (!t2->specific->is_generic);
11365 gcc_assert (t1->is_operator == t2->is_operator);
11367 sym1 = t1->specific->u.specific->n.sym;
11368 sym2 = t2->specific->u.specific->n.sym;
11370 if (sym1 == sym2)
11371 return true;
11373 /* Both must be SUBROUTINEs or both must be FUNCTIONs. */
11374 if (sym1->attr.subroutine != sym2->attr.subroutine
11375 || sym1->attr.function != sym2->attr.function)
11377 gfc_error ("'%s' and '%s' can't be mixed FUNCTION/SUBROUTINE for"
11378 " GENERIC '%s' at %L",
11379 sym1->name, sym2->name, generic_name, &where);
11380 return false;
11383 /* Determine PASS arguments. */
11384 if (t1->specific->nopass)
11385 pass1 = NULL;
11386 else if (t1->specific->pass_arg)
11387 pass1 = t1->specific->pass_arg;
11388 else
11390 dummy_args = gfc_sym_get_dummy_args (t1->specific->u.specific->n.sym);
11391 if (dummy_args)
11392 pass1 = dummy_args->sym->name;
11393 else
11394 pass1 = NULL;
11396 if (t2->specific->nopass)
11397 pass2 = NULL;
11398 else if (t2->specific->pass_arg)
11399 pass2 = t2->specific->pass_arg;
11400 else
11402 dummy_args = gfc_sym_get_dummy_args (t2->specific->u.specific->n.sym);
11403 if (dummy_args)
11404 pass2 = dummy_args->sym->name;
11405 else
11406 pass2 = NULL;
11409 /* Compare the interfaces. */
11410 if (gfc_compare_interfaces (sym1, sym2, sym2->name, !t1->is_operator, 0,
11411 NULL, 0, pass1, pass2))
11413 gfc_error ("'%s' and '%s' for GENERIC '%s' at %L are ambiguous",
11414 sym1->name, sym2->name, generic_name, &where);
11415 return false;
11418 return true;
11422 /* Worker function for resolving a generic procedure binding; this is used to
11423 resolve GENERIC as well as user and intrinsic OPERATOR typebound procedures.
11425 The difference between those cases is finding possible inherited bindings
11426 that are overridden, as one has to look for them in tb_sym_root,
11427 tb_uop_root or tb_op, respectively. Thus the caller must already find
11428 the super-type and set p->overridden correctly. */
11430 static bool
11431 resolve_tb_generic_targets (gfc_symbol* super_type,
11432 gfc_typebound_proc* p, const char* name)
11434 gfc_tbp_generic* target;
11435 gfc_symtree* first_target;
11436 gfc_symtree* inherited;
11438 gcc_assert (p && p->is_generic);
11440 /* Try to find the specific bindings for the symtrees in our target-list. */
11441 gcc_assert (p->u.generic);
11442 for (target = p->u.generic; target; target = target->next)
11443 if (!target->specific)
11445 gfc_typebound_proc* overridden_tbp;
11446 gfc_tbp_generic* g;
11447 const char* target_name;
11449 target_name = target->specific_st->name;
11451 /* Defined for this type directly. */
11452 if (target->specific_st->n.tb && !target->specific_st->n.tb->error)
11454 target->specific = target->specific_st->n.tb;
11455 goto specific_found;
11458 /* Look for an inherited specific binding. */
11459 if (super_type)
11461 inherited = gfc_find_typebound_proc (super_type, NULL, target_name,
11462 true, NULL);
11464 if (inherited)
11466 gcc_assert (inherited->n.tb);
11467 target->specific = inherited->n.tb;
11468 goto specific_found;
11472 gfc_error ("Undefined specific binding '%s' as target of GENERIC '%s'"
11473 " at %L", target_name, name, &p->where);
11474 return false;
11476 /* Once we've found the specific binding, check it is not ambiguous with
11477 other specifics already found or inherited for the same GENERIC. */
11478 specific_found:
11479 gcc_assert (target->specific);
11481 /* This must really be a specific binding! */
11482 if (target->specific->is_generic)
11484 gfc_error ("GENERIC '%s' at %L must target a specific binding,"
11485 " '%s' is GENERIC, too", name, &p->where, target_name);
11486 return false;
11489 /* Check those already resolved on this type directly. */
11490 for (g = p->u.generic; g; g = g->next)
11491 if (g != target && g->specific
11492 && !check_generic_tbp_ambiguity (target, g, name, p->where))
11493 return false;
11495 /* Check for ambiguity with inherited specific targets. */
11496 for (overridden_tbp = p->overridden; overridden_tbp;
11497 overridden_tbp = overridden_tbp->overridden)
11498 if (overridden_tbp->is_generic)
11500 for (g = overridden_tbp->u.generic; g; g = g->next)
11502 gcc_assert (g->specific);
11503 if (!check_generic_tbp_ambiguity (target, g, name, p->where))
11504 return false;
11509 /* If we attempt to "overwrite" a specific binding, this is an error. */
11510 if (p->overridden && !p->overridden->is_generic)
11512 gfc_error ("GENERIC '%s' at %L can't overwrite specific binding with"
11513 " the same name", name, &p->where);
11514 return false;
11517 /* Take the SUBROUTINE/FUNCTION attributes of the first specific target, as
11518 all must have the same attributes here. */
11519 first_target = p->u.generic->specific->u.specific;
11520 gcc_assert (first_target);
11521 p->subroutine = first_target->n.sym->attr.subroutine;
11522 p->function = first_target->n.sym->attr.function;
11524 return true;
11528 /* Resolve a GENERIC procedure binding for a derived type. */
11530 static bool
11531 resolve_typebound_generic (gfc_symbol* derived, gfc_symtree* st)
11533 gfc_symbol* super_type;
11535 /* Find the overridden binding if any. */
11536 st->n.tb->overridden = NULL;
11537 super_type = gfc_get_derived_super_type (derived);
11538 if (super_type)
11540 gfc_symtree* overridden;
11541 overridden = gfc_find_typebound_proc (super_type, NULL, st->name,
11542 true, NULL);
11544 if (overridden && overridden->n.tb)
11545 st->n.tb->overridden = overridden->n.tb;
11548 /* Resolve using worker function. */
11549 return resolve_tb_generic_targets (super_type, st->n.tb, st->name);
11553 /* Retrieve the target-procedure of an operator binding and do some checks in
11554 common for intrinsic and user-defined type-bound operators. */
11556 static gfc_symbol*
11557 get_checked_tb_operator_target (gfc_tbp_generic* target, locus where)
11559 gfc_symbol* target_proc;
11561 gcc_assert (target->specific && !target->specific->is_generic);
11562 target_proc = target->specific->u.specific->n.sym;
11563 gcc_assert (target_proc);
11565 /* F08:C468. All operator bindings must have a passed-object dummy argument. */
11566 if (target->specific->nopass)
11568 gfc_error ("Type-bound operator at %L can't be NOPASS", &where);
11569 return NULL;
11572 return target_proc;
11576 /* Resolve a type-bound intrinsic operator. */
11578 static bool
11579 resolve_typebound_intrinsic_op (gfc_symbol* derived, gfc_intrinsic_op op,
11580 gfc_typebound_proc* p)
11582 gfc_symbol* super_type;
11583 gfc_tbp_generic* target;
11585 /* If there's already an error here, do nothing (but don't fail again). */
11586 if (p->error)
11587 return true;
11589 /* Operators should always be GENERIC bindings. */
11590 gcc_assert (p->is_generic);
11592 /* Look for an overridden binding. */
11593 super_type = gfc_get_derived_super_type (derived);
11594 if (super_type && super_type->f2k_derived)
11595 p->overridden = gfc_find_typebound_intrinsic_op (super_type, NULL,
11596 op, true, NULL);
11597 else
11598 p->overridden = NULL;
11600 /* Resolve general GENERIC properties using worker function. */
11601 if (!resolve_tb_generic_targets (super_type, p, gfc_op2string(op)))
11602 goto error;
11604 /* Check the targets to be procedures of correct interface. */
11605 for (target = p->u.generic; target; target = target->next)
11607 gfc_symbol* target_proc;
11609 target_proc = get_checked_tb_operator_target (target, p->where);
11610 if (!target_proc)
11611 goto error;
11613 if (!gfc_check_operator_interface (target_proc, op, p->where))
11614 goto error;
11616 /* Add target to non-typebound operator list. */
11617 if (!target->specific->deferred && !derived->attr.use_assoc
11618 && p->access != ACCESS_PRIVATE && derived->ns == gfc_current_ns)
11620 gfc_interface *head, *intr;
11621 if (!gfc_check_new_interface (derived->ns->op[op], target_proc, p->where))
11622 return false;
11623 head = derived->ns->op[op];
11624 intr = gfc_get_interface ();
11625 intr->sym = target_proc;
11626 intr->where = p->where;
11627 intr->next = head;
11628 derived->ns->op[op] = intr;
11632 return true;
11634 error:
11635 p->error = 1;
11636 return false;
11640 /* Resolve a type-bound user operator (tree-walker callback). */
11642 static gfc_symbol* resolve_bindings_derived;
11643 static bool resolve_bindings_result;
11645 static bool check_uop_procedure (gfc_symbol* sym, locus where);
11647 static void
11648 resolve_typebound_user_op (gfc_symtree* stree)
11650 gfc_symbol* super_type;
11651 gfc_tbp_generic* target;
11653 gcc_assert (stree && stree->n.tb);
11655 if (stree->n.tb->error)
11656 return;
11658 /* Operators should always be GENERIC bindings. */
11659 gcc_assert (stree->n.tb->is_generic);
11661 /* Find overridden procedure, if any. */
11662 super_type = gfc_get_derived_super_type (resolve_bindings_derived);
11663 if (super_type && super_type->f2k_derived)
11665 gfc_symtree* overridden;
11666 overridden = gfc_find_typebound_user_op (super_type, NULL,
11667 stree->name, true, NULL);
11669 if (overridden && overridden->n.tb)
11670 stree->n.tb->overridden = overridden->n.tb;
11672 else
11673 stree->n.tb->overridden = NULL;
11675 /* Resolve basically using worker function. */
11676 if (!resolve_tb_generic_targets (super_type, stree->n.tb, stree->name))
11677 goto error;
11679 /* Check the targets to be functions of correct interface. */
11680 for (target = stree->n.tb->u.generic; target; target = target->next)
11682 gfc_symbol* target_proc;
11684 target_proc = get_checked_tb_operator_target (target, stree->n.tb->where);
11685 if (!target_proc)
11686 goto error;
11688 if (!check_uop_procedure (target_proc, stree->n.tb->where))
11689 goto error;
11692 return;
11694 error:
11695 resolve_bindings_result = false;
11696 stree->n.tb->error = 1;
11700 /* Resolve the type-bound procedures for a derived type. */
11702 static void
11703 resolve_typebound_procedure (gfc_symtree* stree)
11705 gfc_symbol* proc;
11706 locus where;
11707 gfc_symbol* me_arg;
11708 gfc_symbol* super_type;
11709 gfc_component* comp;
11711 gcc_assert (stree);
11713 /* Undefined specific symbol from GENERIC target definition. */
11714 if (!stree->n.tb)
11715 return;
11717 if (stree->n.tb->error)
11718 return;
11720 /* If this is a GENERIC binding, use that routine. */
11721 if (stree->n.tb->is_generic)
11723 if (!resolve_typebound_generic (resolve_bindings_derived, stree))
11724 goto error;
11725 return;
11728 /* Get the target-procedure to check it. */
11729 gcc_assert (!stree->n.tb->is_generic);
11730 gcc_assert (stree->n.tb->u.specific);
11731 proc = stree->n.tb->u.specific->n.sym;
11732 where = stree->n.tb->where;
11734 /* Default access should already be resolved from the parser. */
11735 gcc_assert (stree->n.tb->access != ACCESS_UNKNOWN);
11737 if (stree->n.tb->deferred)
11739 if (!check_proc_interface (proc, &where))
11740 goto error;
11742 else
11744 /* Check for F08:C465. */
11745 if ((!proc->attr.subroutine && !proc->attr.function)
11746 || (proc->attr.proc != PROC_MODULE
11747 && proc->attr.if_source != IFSRC_IFBODY)
11748 || proc->attr.abstract)
11750 gfc_error ("'%s' must be a module procedure or an external procedure with"
11751 " an explicit interface at %L", proc->name, &where);
11752 goto error;
11756 stree->n.tb->subroutine = proc->attr.subroutine;
11757 stree->n.tb->function = proc->attr.function;
11759 /* Find the super-type of the current derived type. We could do this once and
11760 store in a global if speed is needed, but as long as not I believe this is
11761 more readable and clearer. */
11762 super_type = gfc_get_derived_super_type (resolve_bindings_derived);
11764 /* If PASS, resolve and check arguments if not already resolved / loaded
11765 from a .mod file. */
11766 if (!stree->n.tb->nopass && stree->n.tb->pass_arg_num == 0)
11768 gfc_formal_arglist *dummy_args;
11770 dummy_args = gfc_sym_get_dummy_args (proc);
11771 if (stree->n.tb->pass_arg)
11773 gfc_formal_arglist *i;
11775 /* If an explicit passing argument name is given, walk the arg-list
11776 and look for it. */
11778 me_arg = NULL;
11779 stree->n.tb->pass_arg_num = 1;
11780 for (i = dummy_args; i; i = i->next)
11782 if (!strcmp (i->sym->name, stree->n.tb->pass_arg))
11784 me_arg = i->sym;
11785 break;
11787 ++stree->n.tb->pass_arg_num;
11790 if (!me_arg)
11792 gfc_error ("Procedure '%s' with PASS(%s) at %L has no"
11793 " argument '%s'",
11794 proc->name, stree->n.tb->pass_arg, &where,
11795 stree->n.tb->pass_arg);
11796 goto error;
11799 else
11801 /* Otherwise, take the first one; there should in fact be at least
11802 one. */
11803 stree->n.tb->pass_arg_num = 1;
11804 if (!dummy_args)
11806 gfc_error ("Procedure '%s' with PASS at %L must have at"
11807 " least one argument", proc->name, &where);
11808 goto error;
11810 me_arg = dummy_args->sym;
11813 /* Now check that the argument-type matches and the passed-object
11814 dummy argument is generally fine. */
11816 gcc_assert (me_arg);
11818 if (me_arg->ts.type != BT_CLASS)
11820 gfc_error ("Non-polymorphic passed-object dummy argument of '%s'"
11821 " at %L", proc->name, &where);
11822 goto error;
11825 if (CLASS_DATA (me_arg)->ts.u.derived
11826 != resolve_bindings_derived)
11828 gfc_error ("Argument '%s' of '%s' with PASS(%s) at %L must be of"
11829 " the derived-type '%s'", me_arg->name, proc->name,
11830 me_arg->name, &where, resolve_bindings_derived->name);
11831 goto error;
11834 gcc_assert (me_arg->ts.type == BT_CLASS);
11835 if (CLASS_DATA (me_arg)->as && CLASS_DATA (me_arg)->as->rank != 0)
11837 gfc_error ("Passed-object dummy argument of '%s' at %L must be"
11838 " scalar", proc->name, &where);
11839 goto error;
11841 if (CLASS_DATA (me_arg)->attr.allocatable)
11843 gfc_error ("Passed-object dummy argument of '%s' at %L must not"
11844 " be ALLOCATABLE", proc->name, &where);
11845 goto error;
11847 if (CLASS_DATA (me_arg)->attr.class_pointer)
11849 gfc_error ("Passed-object dummy argument of '%s' at %L must not"
11850 " be POINTER", proc->name, &where);
11851 goto error;
11855 /* If we are extending some type, check that we don't override a procedure
11856 flagged NON_OVERRIDABLE. */
11857 stree->n.tb->overridden = NULL;
11858 if (super_type)
11860 gfc_symtree* overridden;
11861 overridden = gfc_find_typebound_proc (super_type, NULL,
11862 stree->name, true, NULL);
11864 if (overridden)
11866 if (overridden->n.tb)
11867 stree->n.tb->overridden = overridden->n.tb;
11869 if (!gfc_check_typebound_override (stree, overridden))
11870 goto error;
11874 /* See if there's a name collision with a component directly in this type. */
11875 for (comp = resolve_bindings_derived->components; comp; comp = comp->next)
11876 if (!strcmp (comp->name, stree->name))
11878 gfc_error ("Procedure '%s' at %L has the same name as a component of"
11879 " '%s'",
11880 stree->name, &where, resolve_bindings_derived->name);
11881 goto error;
11884 /* Try to find a name collision with an inherited component. */
11885 if (super_type && gfc_find_component (super_type, stree->name, true, true))
11887 gfc_error ("Procedure '%s' at %L has the same name as an inherited"
11888 " component of '%s'",
11889 stree->name, &where, resolve_bindings_derived->name);
11890 goto error;
11893 stree->n.tb->error = 0;
11894 return;
11896 error:
11897 resolve_bindings_result = false;
11898 stree->n.tb->error = 1;
11902 static bool
11903 resolve_typebound_procedures (gfc_symbol* derived)
11905 int op;
11906 gfc_symbol* super_type;
11908 if (!derived->f2k_derived || !derived->f2k_derived->tb_sym_root)
11909 return true;
11911 super_type = gfc_get_derived_super_type (derived);
11912 if (super_type)
11913 resolve_symbol (super_type);
11915 resolve_bindings_derived = derived;
11916 resolve_bindings_result = true;
11918 if (derived->f2k_derived->tb_sym_root)
11919 gfc_traverse_symtree (derived->f2k_derived->tb_sym_root,
11920 &resolve_typebound_procedure);
11922 if (derived->f2k_derived->tb_uop_root)
11923 gfc_traverse_symtree (derived->f2k_derived->tb_uop_root,
11924 &resolve_typebound_user_op);
11926 for (op = 0; op != GFC_INTRINSIC_OPS; ++op)
11928 gfc_typebound_proc* p = derived->f2k_derived->tb_op[op];
11929 if (p && !resolve_typebound_intrinsic_op (derived,
11930 (gfc_intrinsic_op)op, p))
11931 resolve_bindings_result = false;
11934 return resolve_bindings_result;
11938 /* Add a derived type to the dt_list. The dt_list is used in trans-types.c
11939 to give all identical derived types the same backend_decl. */
11940 static void
11941 add_dt_to_dt_list (gfc_symbol *derived)
11943 gfc_dt_list *dt_list;
11945 for (dt_list = gfc_derived_types; dt_list; dt_list = dt_list->next)
11946 if (derived == dt_list->derived)
11947 return;
11949 dt_list = gfc_get_dt_list ();
11950 dt_list->next = gfc_derived_types;
11951 dt_list->derived = derived;
11952 gfc_derived_types = dt_list;
11956 /* Ensure that a derived-type is really not abstract, meaning that every
11957 inherited DEFERRED binding is overridden by a non-DEFERRED one. */
11959 static bool
11960 ensure_not_abstract_walker (gfc_symbol* sub, gfc_symtree* st)
11962 if (!st)
11963 return true;
11965 if (!ensure_not_abstract_walker (sub, st->left))
11966 return false;
11967 if (!ensure_not_abstract_walker (sub, st->right))
11968 return false;
11970 if (st->n.tb && st->n.tb->deferred)
11972 gfc_symtree* overriding;
11973 overriding = gfc_find_typebound_proc (sub, NULL, st->name, true, NULL);
11974 if (!overriding)
11975 return false;
11976 gcc_assert (overriding->n.tb);
11977 if (overriding->n.tb->deferred)
11979 gfc_error ("Derived-type '%s' declared at %L must be ABSTRACT because"
11980 " '%s' is DEFERRED and not overridden",
11981 sub->name, &sub->declared_at, st->name);
11982 return false;
11986 return true;
11989 static bool
11990 ensure_not_abstract (gfc_symbol* sub, gfc_symbol* ancestor)
11992 /* The algorithm used here is to recursively travel up the ancestry of sub
11993 and for each ancestor-type, check all bindings. If any of them is
11994 DEFERRED, look it up starting from sub and see if the found (overriding)
11995 binding is not DEFERRED.
11996 This is not the most efficient way to do this, but it should be ok and is
11997 clearer than something sophisticated. */
11999 gcc_assert (ancestor && !sub->attr.abstract);
12001 if (!ancestor->attr.abstract)
12002 return true;
12004 /* Walk bindings of this ancestor. */
12005 if (ancestor->f2k_derived)
12007 bool t;
12008 t = ensure_not_abstract_walker (sub, ancestor->f2k_derived->tb_sym_root);
12009 if (!t)
12010 return false;
12013 /* Find next ancestor type and recurse on it. */
12014 ancestor = gfc_get_derived_super_type (ancestor);
12015 if (ancestor)
12016 return ensure_not_abstract (sub, ancestor);
12018 return true;
12022 /* This check for typebound defined assignments is done recursively
12023 since the order in which derived types are resolved is not always in
12024 order of the declarations. */
12026 static void
12027 check_defined_assignments (gfc_symbol *derived)
12029 gfc_component *c;
12031 for (c = derived->components; c; c = c->next)
12033 if (c->ts.type != BT_DERIVED
12034 || c->attr.pointer
12035 || c->attr.allocatable
12036 || c->attr.proc_pointer_comp
12037 || c->attr.class_pointer
12038 || c->attr.proc_pointer)
12039 continue;
12041 if (c->ts.u.derived->attr.defined_assign_comp
12042 || (c->ts.u.derived->f2k_derived
12043 && c->ts.u.derived->f2k_derived->tb_op[INTRINSIC_ASSIGN]))
12045 derived->attr.defined_assign_comp = 1;
12046 return;
12049 check_defined_assignments (c->ts.u.derived);
12050 if (c->ts.u.derived->attr.defined_assign_comp)
12052 derived->attr.defined_assign_comp = 1;
12053 return;
12059 /* Resolve the components of a derived type. This does not have to wait until
12060 resolution stage, but can be done as soon as the dt declaration has been
12061 parsed. */
12063 static bool
12064 resolve_fl_derived0 (gfc_symbol *sym)
12066 gfc_symbol* super_type;
12067 gfc_component *c;
12069 if (sym->attr.unlimited_polymorphic)
12070 return true;
12072 super_type = gfc_get_derived_super_type (sym);
12074 /* F2008, C432. */
12075 if (super_type && sym->attr.coarray_comp && !super_type->attr.coarray_comp)
12077 gfc_error ("As extending type '%s' at %L has a coarray component, "
12078 "parent type '%s' shall also have one", sym->name,
12079 &sym->declared_at, super_type->name);
12080 return false;
12083 /* Ensure the extended type gets resolved before we do. */
12084 if (super_type && !resolve_fl_derived0 (super_type))
12085 return false;
12087 /* An ABSTRACT type must be extensible. */
12088 if (sym->attr.abstract && !gfc_type_is_extensible (sym))
12090 gfc_error ("Non-extensible derived-type '%s' at %L must not be ABSTRACT",
12091 sym->name, &sym->declared_at);
12092 return false;
12095 c = (sym->attr.is_class) ? sym->components->ts.u.derived->components
12096 : sym->components;
12098 for ( ; c != NULL; c = c->next)
12100 if (c->attr.artificial)
12101 continue;
12103 /* F2008, C442. */
12104 if ((!sym->attr.is_class || c != sym->components)
12105 && c->attr.codimension
12106 && (!c->attr.allocatable || (c->as && c->as->type != AS_DEFERRED)))
12108 gfc_error ("Coarray component '%s' at %L must be allocatable with "
12109 "deferred shape", c->name, &c->loc);
12110 return false;
12113 /* F2008, C443. */
12114 if (c->attr.codimension && c->ts.type == BT_DERIVED
12115 && c->ts.u.derived->ts.is_iso_c)
12117 gfc_error ("Component '%s' at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) "
12118 "shall not be a coarray", c->name, &c->loc);
12119 return false;
12122 /* F2008, C444. */
12123 if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.coarray_comp
12124 && (c->attr.codimension || c->attr.pointer || c->attr.dimension
12125 || c->attr.allocatable))
12127 gfc_error ("Component '%s' at %L with coarray component "
12128 "shall be a nonpointer, nonallocatable scalar",
12129 c->name, &c->loc);
12130 return false;
12133 /* F2008, C448. */
12134 if (c->attr.contiguous && (!c->attr.dimension || !c->attr.pointer))
12136 gfc_error ("Component '%s' at %L has the CONTIGUOUS attribute but "
12137 "is not an array pointer", c->name, &c->loc);
12138 return false;
12141 if (c->attr.proc_pointer && c->ts.interface)
12143 gfc_symbol *ifc = c->ts.interface;
12145 if (!sym->attr.vtype
12146 && !check_proc_interface (ifc, &c->loc))
12147 return false;
12149 if (ifc->attr.if_source || ifc->attr.intrinsic)
12151 /* Resolve interface and copy attributes. */
12152 if (ifc->formal && !ifc->formal_ns)
12153 resolve_symbol (ifc);
12154 if (ifc->attr.intrinsic)
12155 gfc_resolve_intrinsic (ifc, &ifc->declared_at);
12157 if (ifc->result)
12159 c->ts = ifc->result->ts;
12160 c->attr.allocatable = ifc->result->attr.allocatable;
12161 c->attr.pointer = ifc->result->attr.pointer;
12162 c->attr.dimension = ifc->result->attr.dimension;
12163 c->as = gfc_copy_array_spec (ifc->result->as);
12164 c->attr.class_ok = ifc->result->attr.class_ok;
12166 else
12168 c->ts = ifc->ts;
12169 c->attr.allocatable = ifc->attr.allocatable;
12170 c->attr.pointer = ifc->attr.pointer;
12171 c->attr.dimension = ifc->attr.dimension;
12172 c->as = gfc_copy_array_spec (ifc->as);
12173 c->attr.class_ok = ifc->attr.class_ok;
12175 c->ts.interface = ifc;
12176 c->attr.function = ifc->attr.function;
12177 c->attr.subroutine = ifc->attr.subroutine;
12179 c->attr.pure = ifc->attr.pure;
12180 c->attr.elemental = ifc->attr.elemental;
12181 c->attr.recursive = ifc->attr.recursive;
12182 c->attr.always_explicit = ifc->attr.always_explicit;
12183 c->attr.ext_attr |= ifc->attr.ext_attr;
12184 /* Copy char length. */
12185 if (ifc->ts.type == BT_CHARACTER && ifc->ts.u.cl)
12187 gfc_charlen *cl = gfc_new_charlen (sym->ns, ifc->ts.u.cl);
12188 if (cl->length && !cl->resolved
12189 && !gfc_resolve_expr (cl->length))
12190 return false;
12191 c->ts.u.cl = cl;
12195 else if (c->attr.proc_pointer && c->ts.type == BT_UNKNOWN)
12197 /* Since PPCs are not implicitly typed, a PPC without an explicit
12198 interface must be a subroutine. */
12199 gfc_add_subroutine (&c->attr, c->name, &c->loc);
12202 /* Procedure pointer components: Check PASS arg. */
12203 if (c->attr.proc_pointer && !c->tb->nopass && c->tb->pass_arg_num == 0
12204 && !sym->attr.vtype)
12206 gfc_symbol* me_arg;
12208 if (c->tb->pass_arg)
12210 gfc_formal_arglist* i;
12212 /* If an explicit passing argument name is given, walk the arg-list
12213 and look for it. */
12215 me_arg = NULL;
12216 c->tb->pass_arg_num = 1;
12217 for (i = c->ts.interface->formal; i; i = i->next)
12219 if (!strcmp (i->sym->name, c->tb->pass_arg))
12221 me_arg = i->sym;
12222 break;
12224 c->tb->pass_arg_num++;
12227 if (!me_arg)
12229 gfc_error ("Procedure pointer component '%s' with PASS(%s) "
12230 "at %L has no argument '%s'", c->name,
12231 c->tb->pass_arg, &c->loc, c->tb->pass_arg);
12232 c->tb->error = 1;
12233 return false;
12236 else
12238 /* Otherwise, take the first one; there should in fact be at least
12239 one. */
12240 c->tb->pass_arg_num = 1;
12241 if (!c->ts.interface->formal)
12243 gfc_error ("Procedure pointer component '%s' with PASS at %L "
12244 "must have at least one argument",
12245 c->name, &c->loc);
12246 c->tb->error = 1;
12247 return false;
12249 me_arg = c->ts.interface->formal->sym;
12252 /* Now check that the argument-type matches. */
12253 gcc_assert (me_arg);
12254 if ((me_arg->ts.type != BT_DERIVED && me_arg->ts.type != BT_CLASS)
12255 || (me_arg->ts.type == BT_DERIVED && me_arg->ts.u.derived != sym)
12256 || (me_arg->ts.type == BT_CLASS
12257 && CLASS_DATA (me_arg)->ts.u.derived != sym))
12259 gfc_error ("Argument '%s' of '%s' with PASS(%s) at %L must be of"
12260 " the derived type '%s'", me_arg->name, c->name,
12261 me_arg->name, &c->loc, sym->name);
12262 c->tb->error = 1;
12263 return false;
12266 /* Check for C453. */
12267 if (me_arg->attr.dimension)
12269 gfc_error ("Argument '%s' of '%s' with PASS(%s) at %L "
12270 "must be scalar", me_arg->name, c->name, me_arg->name,
12271 &c->loc);
12272 c->tb->error = 1;
12273 return false;
12276 if (me_arg->attr.pointer)
12278 gfc_error ("Argument '%s' of '%s' with PASS(%s) at %L "
12279 "may not have the POINTER attribute", me_arg->name,
12280 c->name, me_arg->name, &c->loc);
12281 c->tb->error = 1;
12282 return false;
12285 if (me_arg->attr.allocatable)
12287 gfc_error ("Argument '%s' of '%s' with PASS(%s) at %L "
12288 "may not be ALLOCATABLE", me_arg->name, c->name,
12289 me_arg->name, &c->loc);
12290 c->tb->error = 1;
12291 return false;
12294 if (gfc_type_is_extensible (sym) && me_arg->ts.type != BT_CLASS)
12295 gfc_error ("Non-polymorphic passed-object dummy argument of '%s'"
12296 " at %L", c->name, &c->loc);
12300 /* Check type-spec if this is not the parent-type component. */
12301 if (((sym->attr.is_class
12302 && (!sym->components->ts.u.derived->attr.extension
12303 || c != sym->components->ts.u.derived->components))
12304 || (!sym->attr.is_class
12305 && (!sym->attr.extension || c != sym->components)))
12306 && !sym->attr.vtype
12307 && !resolve_typespec_used (&c->ts, &c->loc, c->name))
12308 return false;
12310 /* If this type is an extension, set the accessibility of the parent
12311 component. */
12312 if (super_type
12313 && ((sym->attr.is_class
12314 && c == sym->components->ts.u.derived->components)
12315 || (!sym->attr.is_class && c == sym->components))
12316 && strcmp (super_type->name, c->name) == 0)
12317 c->attr.access = super_type->attr.access;
12319 /* If this type is an extension, see if this component has the same name
12320 as an inherited type-bound procedure. */
12321 if (super_type && !sym->attr.is_class
12322 && gfc_find_typebound_proc (super_type, NULL, c->name, true, NULL))
12324 gfc_error ("Component '%s' of '%s' at %L has the same name as an"
12325 " inherited type-bound procedure",
12326 c->name, sym->name, &c->loc);
12327 return false;
12330 if (c->ts.type == BT_CHARACTER && !c->attr.proc_pointer
12331 && !c->ts.deferred)
12333 if (c->ts.u.cl->length == NULL
12334 || (!resolve_charlen(c->ts.u.cl))
12335 || !gfc_is_constant_expr (c->ts.u.cl->length))
12337 gfc_error ("Character length of component '%s' needs to "
12338 "be a constant specification expression at %L",
12339 c->name,
12340 c->ts.u.cl->length ? &c->ts.u.cl->length->where : &c->loc);
12341 return false;
12345 if (c->ts.type == BT_CHARACTER && c->ts.deferred
12346 && !c->attr.pointer && !c->attr.allocatable)
12348 gfc_error ("Character component '%s' of '%s' at %L with deferred "
12349 "length must be a POINTER or ALLOCATABLE",
12350 c->name, sym->name, &c->loc);
12351 return false;
12354 /* Add the hidden deferred length field. */
12355 if (c->ts.type == BT_CHARACTER && c->ts.deferred && !c->attr.function
12356 && !sym->attr.is_class)
12358 char name[GFC_MAX_SYMBOL_LEN+9];
12359 gfc_component *strlen;
12360 sprintf (name, "_%s_length", c->name);
12361 strlen = gfc_find_component (sym, name, true, true);
12362 if (strlen == NULL)
12364 if (!gfc_add_component (sym, name, &strlen))
12365 return false;
12366 strlen->ts.type = BT_INTEGER;
12367 strlen->ts.kind = gfc_charlen_int_kind;
12368 strlen->attr.access = ACCESS_PRIVATE;
12369 strlen->attr.deferred_parameter = 1;
12373 if (c->ts.type == BT_DERIVED
12374 && sym->component_access != ACCESS_PRIVATE
12375 && gfc_check_symbol_access (sym)
12376 && !is_sym_host_assoc (c->ts.u.derived, sym->ns)
12377 && !c->ts.u.derived->attr.use_assoc
12378 && !gfc_check_symbol_access (c->ts.u.derived)
12379 && !gfc_notify_std (GFC_STD_F2003, "the component '%s' is a "
12380 "PRIVATE type and cannot be a component of "
12381 "'%s', which is PUBLIC at %L", c->name,
12382 sym->name, &sym->declared_at))
12383 return false;
12385 if ((sym->attr.sequence || sym->attr.is_bind_c) && c->ts.type == BT_CLASS)
12387 gfc_error ("Polymorphic component %s at %L in SEQUENCE or BIND(C) "
12388 "type %s", c->name, &c->loc, sym->name);
12389 return false;
12392 if (sym->attr.sequence)
12394 if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.sequence == 0)
12396 gfc_error ("Component %s of SEQUENCE type declared at %L does "
12397 "not have the SEQUENCE attribute",
12398 c->ts.u.derived->name, &sym->declared_at);
12399 return false;
12403 if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.generic)
12404 c->ts.u.derived = gfc_find_dt_in_generic (c->ts.u.derived);
12405 else if (c->ts.type == BT_CLASS && c->attr.class_ok
12406 && CLASS_DATA (c)->ts.u.derived->attr.generic)
12407 CLASS_DATA (c)->ts.u.derived
12408 = gfc_find_dt_in_generic (CLASS_DATA (c)->ts.u.derived);
12410 if (!sym->attr.is_class && c->ts.type == BT_DERIVED && !sym->attr.vtype
12411 && c->attr.pointer && c->ts.u.derived->components == NULL
12412 && !c->ts.u.derived->attr.zero_comp)
12414 gfc_error ("The pointer component '%s' of '%s' at %L is a type "
12415 "that has not been declared", c->name, sym->name,
12416 &c->loc);
12417 return false;
12420 if (c->ts.type == BT_CLASS && c->attr.class_ok
12421 && CLASS_DATA (c)->attr.class_pointer
12422 && CLASS_DATA (c)->ts.u.derived->components == NULL
12423 && !CLASS_DATA (c)->ts.u.derived->attr.zero_comp
12424 && !UNLIMITED_POLY (c))
12426 gfc_error ("The pointer component '%s' of '%s' at %L is a type "
12427 "that has not been declared", c->name, sym->name,
12428 &c->loc);
12429 return false;
12432 /* C437. */
12433 if (c->ts.type == BT_CLASS && c->attr.flavor != FL_PROCEDURE
12434 && (!c->attr.class_ok
12435 || !(CLASS_DATA (c)->attr.class_pointer
12436 || CLASS_DATA (c)->attr.allocatable)))
12438 gfc_error ("Component '%s' with CLASS at %L must be allocatable "
12439 "or pointer", c->name, &c->loc);
12440 /* Prevent a recurrence of the error. */
12441 c->ts.type = BT_UNKNOWN;
12442 return false;
12445 /* Ensure that all the derived type components are put on the
12446 derived type list; even in formal namespaces, where derived type
12447 pointer components might not have been declared. */
12448 if (c->ts.type == BT_DERIVED
12449 && c->ts.u.derived
12450 && c->ts.u.derived->components
12451 && c->attr.pointer
12452 && sym != c->ts.u.derived)
12453 add_dt_to_dt_list (c->ts.u.derived);
12455 if (!gfc_resolve_array_spec (c->as,
12456 !(c->attr.pointer || c->attr.proc_pointer
12457 || c->attr.allocatable)))
12458 return false;
12460 if (c->initializer && !sym->attr.vtype
12461 && !gfc_check_assign_symbol (sym, c, c->initializer))
12462 return false;
12465 check_defined_assignments (sym);
12467 if (!sym->attr.defined_assign_comp && super_type)
12468 sym->attr.defined_assign_comp
12469 = super_type->attr.defined_assign_comp;
12471 /* If this is a non-ABSTRACT type extending an ABSTRACT one, ensure that
12472 all DEFERRED bindings are overridden. */
12473 if (super_type && super_type->attr.abstract && !sym->attr.abstract
12474 && !sym->attr.is_class
12475 && !ensure_not_abstract (sym, super_type))
12476 return false;
12478 /* Add derived type to the derived type list. */
12479 add_dt_to_dt_list (sym);
12481 return true;
12485 /* The following procedure does the full resolution of a derived type,
12486 including resolution of all type-bound procedures (if present). In contrast
12487 to 'resolve_fl_derived0' this can only be done after the module has been
12488 parsed completely. */
12490 static bool
12491 resolve_fl_derived (gfc_symbol *sym)
12493 gfc_symbol *gen_dt = NULL;
12495 if (sym->attr.unlimited_polymorphic)
12496 return true;
12498 if (!sym->attr.is_class)
12499 gfc_find_symbol (sym->name, sym->ns, 0, &gen_dt);
12500 if (gen_dt && gen_dt->generic && gen_dt->generic->next
12501 && (!gen_dt->generic->sym->attr.use_assoc
12502 || gen_dt->generic->sym->module != gen_dt->generic->next->sym->module)
12503 && !gfc_notify_std (GFC_STD_F2003, "Generic name '%s' of function "
12504 "'%s' at %L being the same name as derived "
12505 "type at %L", sym->name,
12506 gen_dt->generic->sym == sym
12507 ? gen_dt->generic->next->sym->name
12508 : gen_dt->generic->sym->name,
12509 gen_dt->generic->sym == sym
12510 ? &gen_dt->generic->next->sym->declared_at
12511 : &gen_dt->generic->sym->declared_at,
12512 &sym->declared_at))
12513 return false;
12515 /* Resolve the finalizer procedures. */
12516 if (!gfc_resolve_finalizers (sym))
12517 return false;
12519 if (sym->attr.is_class && sym->ts.u.derived == NULL)
12521 /* Fix up incomplete CLASS symbols. */
12522 gfc_component *data = gfc_find_component (sym, "_data", true, true);
12523 gfc_component *vptr = gfc_find_component (sym, "_vptr", true, true);
12525 /* Nothing more to do for unlimited polymorphic entities. */
12526 if (data->ts.u.derived->attr.unlimited_polymorphic)
12527 return true;
12528 else if (vptr->ts.u.derived == NULL)
12530 gfc_symbol *vtab = gfc_find_derived_vtab (data->ts.u.derived);
12531 gcc_assert (vtab);
12532 vptr->ts.u.derived = vtab->ts.u.derived;
12536 if (!resolve_fl_derived0 (sym))
12537 return false;
12539 /* Resolve the type-bound procedures. */
12540 if (!resolve_typebound_procedures (sym))
12541 return false;
12543 return true;
12547 static bool
12548 resolve_fl_namelist (gfc_symbol *sym)
12550 gfc_namelist *nl;
12551 gfc_symbol *nlsym;
12553 for (nl = sym->namelist; nl; nl = nl->next)
12555 /* Check again, the check in match only works if NAMELIST comes
12556 after the decl. */
12557 if (nl->sym->as && nl->sym->as->type == AS_ASSUMED_SIZE)
12559 gfc_error ("Assumed size array '%s' in namelist '%s' at %L is not "
12560 "allowed", nl->sym->name, sym->name, &sym->declared_at);
12561 return false;
12564 if (nl->sym->as && nl->sym->as->type == AS_ASSUMED_SHAPE
12565 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST array object '%s' "
12566 "with assumed shape in namelist '%s' at %L",
12567 nl->sym->name, sym->name, &sym->declared_at))
12568 return false;
12570 if (is_non_constant_shape_array (nl->sym)
12571 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST array object '%s' "
12572 "with nonconstant shape in namelist '%s' at %L",
12573 nl->sym->name, sym->name, &sym->declared_at))
12574 return false;
12576 if (nl->sym->ts.type == BT_CHARACTER
12577 && (nl->sym->ts.u.cl->length == NULL
12578 || !gfc_is_constant_expr (nl->sym->ts.u.cl->length))
12579 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST object '%s' with "
12580 "nonconstant character length in "
12581 "namelist '%s' at %L", nl->sym->name,
12582 sym->name, &sym->declared_at))
12583 return false;
12585 /* FIXME: Once UDDTIO is implemented, the following can be
12586 removed. */
12587 if (nl->sym->ts.type == BT_CLASS)
12589 gfc_error ("NAMELIST object '%s' in namelist '%s' at %L is "
12590 "polymorphic and requires a defined input/output "
12591 "procedure", nl->sym->name, sym->name, &sym->declared_at);
12592 return false;
12595 if (nl->sym->ts.type == BT_DERIVED
12596 && (nl->sym->ts.u.derived->attr.alloc_comp
12597 || nl->sym->ts.u.derived->attr.pointer_comp))
12599 if (!gfc_notify_std (GFC_STD_F2003, "NAMELIST object '%s' in "
12600 "namelist '%s' at %L with ALLOCATABLE "
12601 "or POINTER components", nl->sym->name,
12602 sym->name, &sym->declared_at))
12603 return false;
12605 /* FIXME: Once UDDTIO is implemented, the following can be
12606 removed. */
12607 gfc_error ("NAMELIST object '%s' in namelist '%s' at %L has "
12608 "ALLOCATABLE or POINTER components and thus requires "
12609 "a defined input/output procedure", nl->sym->name,
12610 sym->name, &sym->declared_at);
12611 return false;
12615 /* Reject PRIVATE objects in a PUBLIC namelist. */
12616 if (gfc_check_symbol_access (sym))
12618 for (nl = sym->namelist; nl; nl = nl->next)
12620 if (!nl->sym->attr.use_assoc
12621 && !is_sym_host_assoc (nl->sym, sym->ns)
12622 && !gfc_check_symbol_access (nl->sym))
12624 gfc_error ("NAMELIST object '%s' was declared PRIVATE and "
12625 "cannot be member of PUBLIC namelist '%s' at %L",
12626 nl->sym->name, sym->name, &sym->declared_at);
12627 return false;
12630 /* Types with private components that came here by USE-association. */
12631 if (nl->sym->ts.type == BT_DERIVED
12632 && derived_inaccessible (nl->sym->ts.u.derived))
12634 gfc_error ("NAMELIST object '%s' has use-associated PRIVATE "
12635 "components and cannot be member of namelist '%s' at %L",
12636 nl->sym->name, sym->name, &sym->declared_at);
12637 return false;
12640 /* Types with private components that are defined in the same module. */
12641 if (nl->sym->ts.type == BT_DERIVED
12642 && !is_sym_host_assoc (nl->sym->ts.u.derived, sym->ns)
12643 && nl->sym->ts.u.derived->attr.private_comp)
12645 gfc_error ("NAMELIST object '%s' has PRIVATE components and "
12646 "cannot be a member of PUBLIC namelist '%s' at %L",
12647 nl->sym->name, sym->name, &sym->declared_at);
12648 return false;
12654 /* 14.1.2 A module or internal procedure represent local entities
12655 of the same type as a namelist member and so are not allowed. */
12656 for (nl = sym->namelist; nl; nl = nl->next)
12658 if (nl->sym->ts.kind != 0 && nl->sym->attr.flavor == FL_VARIABLE)
12659 continue;
12661 if (nl->sym->attr.function && nl->sym == nl->sym->result)
12662 if ((nl->sym == sym->ns->proc_name)
12664 (sym->ns->parent && nl->sym == sym->ns->parent->proc_name))
12665 continue;
12667 nlsym = NULL;
12668 if (nl->sym->name)
12669 gfc_find_symbol (nl->sym->name, sym->ns, 1, &nlsym);
12670 if (nlsym && nlsym->attr.flavor == FL_PROCEDURE)
12672 gfc_error ("PROCEDURE attribute conflicts with NAMELIST "
12673 "attribute in '%s' at %L", nlsym->name,
12674 &sym->declared_at);
12675 return false;
12679 return true;
12683 static bool
12684 resolve_fl_parameter (gfc_symbol *sym)
12686 /* A parameter array's shape needs to be constant. */
12687 if (sym->as != NULL
12688 && (sym->as->type == AS_DEFERRED
12689 || is_non_constant_shape_array (sym)))
12691 gfc_error ("Parameter array '%s' at %L cannot be automatic "
12692 "or of deferred shape", sym->name, &sym->declared_at);
12693 return false;
12696 /* Make sure a parameter that has been implicitly typed still
12697 matches the implicit type, since PARAMETER statements can precede
12698 IMPLICIT statements. */
12699 if (sym->attr.implicit_type
12700 && !gfc_compare_types (&sym->ts, gfc_get_default_type (sym->name,
12701 sym->ns)))
12703 gfc_error ("Implicitly typed PARAMETER '%s' at %L doesn't match a "
12704 "later IMPLICIT type", sym->name, &sym->declared_at);
12705 return false;
12708 /* Make sure the types of derived parameters are consistent. This
12709 type checking is deferred until resolution because the type may
12710 refer to a derived type from the host. */
12711 if (sym->ts.type == BT_DERIVED
12712 && !gfc_compare_types (&sym->ts, &sym->value->ts))
12714 gfc_error ("Incompatible derived type in PARAMETER at %L",
12715 &sym->value->where);
12716 return false;
12718 return true;
12722 /* Do anything necessary to resolve a symbol. Right now, we just
12723 assume that an otherwise unknown symbol is a variable. This sort
12724 of thing commonly happens for symbols in module. */
12726 static void
12727 resolve_symbol (gfc_symbol *sym)
12729 int check_constant, mp_flag;
12730 gfc_symtree *symtree;
12731 gfc_symtree *this_symtree;
12732 gfc_namespace *ns;
12733 gfc_component *c;
12734 symbol_attribute class_attr;
12735 gfc_array_spec *as;
12736 bool saved_specification_expr;
12738 if (sym->resolved)
12739 return;
12740 sym->resolved = 1;
12742 if (sym->attr.artificial)
12743 return;
12745 if (sym->attr.unlimited_polymorphic)
12746 return;
12748 if (sym->attr.flavor == FL_UNKNOWN
12749 || (sym->attr.flavor == FL_PROCEDURE && !sym->attr.intrinsic
12750 && !sym->attr.generic && !sym->attr.external
12751 && sym->attr.if_source == IFSRC_UNKNOWN
12752 && sym->ts.type == BT_UNKNOWN))
12755 /* If we find that a flavorless symbol is an interface in one of the
12756 parent namespaces, find its symtree in this namespace, free the
12757 symbol and set the symtree to point to the interface symbol. */
12758 for (ns = gfc_current_ns->parent; ns; ns = ns->parent)
12760 symtree = gfc_find_symtree (ns->sym_root, sym->name);
12761 if (symtree && (symtree->n.sym->generic ||
12762 (symtree->n.sym->attr.flavor == FL_PROCEDURE
12763 && sym->ns->construct_entities)))
12765 this_symtree = gfc_find_symtree (gfc_current_ns->sym_root,
12766 sym->name);
12767 gfc_release_symbol (sym);
12768 symtree->n.sym->refs++;
12769 this_symtree->n.sym = symtree->n.sym;
12770 return;
12774 /* Otherwise give it a flavor according to such attributes as
12775 it has. */
12776 if (sym->attr.flavor == FL_UNKNOWN && sym->attr.external == 0
12777 && sym->attr.intrinsic == 0)
12778 sym->attr.flavor = FL_VARIABLE;
12779 else if (sym->attr.flavor == FL_UNKNOWN)
12781 sym->attr.flavor = FL_PROCEDURE;
12782 if (sym->attr.dimension)
12783 sym->attr.function = 1;
12787 if (sym->attr.external && sym->ts.type != BT_UNKNOWN && !sym->attr.function)
12788 gfc_add_function (&sym->attr, sym->name, &sym->declared_at);
12790 if (sym->attr.procedure && sym->attr.if_source != IFSRC_DECL
12791 && !resolve_procedure_interface (sym))
12792 return;
12794 if (sym->attr.is_protected && !sym->attr.proc_pointer
12795 && (sym->attr.procedure || sym->attr.external))
12797 if (sym->attr.external)
12798 gfc_error ("PROTECTED attribute conflicts with EXTERNAL attribute "
12799 "at %L", &sym->declared_at);
12800 else
12801 gfc_error ("PROCEDURE attribute conflicts with PROTECTED attribute "
12802 "at %L", &sym->declared_at);
12804 return;
12807 if (sym->attr.flavor == FL_DERIVED && !resolve_fl_derived (sym))
12808 return;
12810 /* Symbols that are module procedures with results (functions) have
12811 the types and array specification copied for type checking in
12812 procedures that call them, as well as for saving to a module
12813 file. These symbols can't stand the scrutiny that their results
12814 can. */
12815 mp_flag = (sym->result != NULL && sym->result != sym);
12817 /* Make sure that the intrinsic is consistent with its internal
12818 representation. This needs to be done before assigning a default
12819 type to avoid spurious warnings. */
12820 if (sym->attr.flavor != FL_MODULE && sym->attr.intrinsic
12821 && !gfc_resolve_intrinsic (sym, &sym->declared_at))
12822 return;
12824 /* Resolve associate names. */
12825 if (sym->assoc)
12826 resolve_assoc_var (sym, true);
12828 /* Assign default type to symbols that need one and don't have one. */
12829 if (sym->ts.type == BT_UNKNOWN)
12831 if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER)
12833 gfc_set_default_type (sym, 1, NULL);
12836 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.external
12837 && !sym->attr.function && !sym->attr.subroutine
12838 && gfc_get_default_type (sym->name, sym->ns)->type == BT_UNKNOWN)
12839 gfc_add_subroutine (&sym->attr, sym->name, &sym->declared_at);
12841 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.function)
12843 /* The specific case of an external procedure should emit an error
12844 in the case that there is no implicit type. */
12845 if (!mp_flag)
12846 gfc_set_default_type (sym, sym->attr.external, NULL);
12847 else
12849 /* Result may be in another namespace. */
12850 resolve_symbol (sym->result);
12852 if (!sym->result->attr.proc_pointer)
12854 sym->ts = sym->result->ts;
12855 sym->as = gfc_copy_array_spec (sym->result->as);
12856 sym->attr.dimension = sym->result->attr.dimension;
12857 sym->attr.pointer = sym->result->attr.pointer;
12858 sym->attr.allocatable = sym->result->attr.allocatable;
12859 sym->attr.contiguous = sym->result->attr.contiguous;
12864 else if (mp_flag && sym->attr.flavor == FL_PROCEDURE && sym->attr.function)
12866 bool saved_specification_expr = specification_expr;
12867 specification_expr = true;
12868 gfc_resolve_array_spec (sym->result->as, false);
12869 specification_expr = saved_specification_expr;
12872 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
12874 as = CLASS_DATA (sym)->as;
12875 class_attr = CLASS_DATA (sym)->attr;
12876 class_attr.pointer = class_attr.class_pointer;
12878 else
12880 class_attr = sym->attr;
12881 as = sym->as;
12884 /* F2008, C530. */
12885 if (sym->attr.contiguous
12886 && (!class_attr.dimension
12887 || (as->type != AS_ASSUMED_SHAPE && as->type != AS_ASSUMED_RANK
12888 && !class_attr.pointer)))
12890 gfc_error ("'%s' at %L has the CONTIGUOUS attribute but is not an "
12891 "array pointer or an assumed-shape or assumed-rank array",
12892 sym->name, &sym->declared_at);
12893 return;
12896 /* Assumed size arrays and assumed shape arrays must be dummy
12897 arguments. Array-spec's of implied-shape should have been resolved to
12898 AS_EXPLICIT already. */
12900 if (as)
12902 gcc_assert (as->type != AS_IMPLIED_SHAPE);
12903 if (((as->type == AS_ASSUMED_SIZE && !as->cp_was_assumed)
12904 || as->type == AS_ASSUMED_SHAPE)
12905 && !sym->attr.dummy && !sym->attr.select_type_temporary)
12907 if (as->type == AS_ASSUMED_SIZE)
12908 gfc_error ("Assumed size array at %L must be a dummy argument",
12909 &sym->declared_at);
12910 else
12911 gfc_error ("Assumed shape array at %L must be a dummy argument",
12912 &sym->declared_at);
12913 return;
12915 /* TS 29113, C535a. */
12916 if (as->type == AS_ASSUMED_RANK && !sym->attr.dummy
12917 && !sym->attr.select_type_temporary)
12919 gfc_error ("Assumed-rank array at %L must be a dummy argument",
12920 &sym->declared_at);
12921 return;
12923 if (as->type == AS_ASSUMED_RANK
12924 && (sym->attr.codimension || sym->attr.value))
12926 gfc_error ("Assumed-rank array at %L may not have the VALUE or "
12927 "CODIMENSION attribute", &sym->declared_at);
12928 return;
12932 /* Make sure symbols with known intent or optional are really dummy
12933 variable. Because of ENTRY statement, this has to be deferred
12934 until resolution time. */
12936 if (!sym->attr.dummy
12937 && (sym->attr.optional || sym->attr.intent != INTENT_UNKNOWN))
12939 gfc_error ("Symbol at %L is not a DUMMY variable", &sym->declared_at);
12940 return;
12943 if (sym->attr.value && !sym->attr.dummy)
12945 gfc_error ("'%s' at %L cannot have the VALUE attribute because "
12946 "it is not a dummy argument", sym->name, &sym->declared_at);
12947 return;
12950 if (sym->attr.value && sym->ts.type == BT_CHARACTER)
12952 gfc_charlen *cl = sym->ts.u.cl;
12953 if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
12955 gfc_error ("Character dummy variable '%s' at %L with VALUE "
12956 "attribute must have constant length",
12957 sym->name, &sym->declared_at);
12958 return;
12961 if (sym->ts.is_c_interop
12962 && mpz_cmp_si (cl->length->value.integer, 1) != 0)
12964 gfc_error ("C interoperable character dummy variable '%s' at %L "
12965 "with VALUE attribute must have length one",
12966 sym->name, &sym->declared_at);
12967 return;
12971 if (sym->ts.type == BT_DERIVED && !sym->attr.is_iso_c
12972 && sym->ts.u.derived->attr.generic)
12974 sym->ts.u.derived = gfc_find_dt_in_generic (sym->ts.u.derived);
12975 if (!sym->ts.u.derived)
12977 gfc_error ("The derived type '%s' at %L is of type '%s', "
12978 "which has not been defined", sym->name,
12979 &sym->declared_at, sym->ts.u.derived->name);
12980 sym->ts.type = BT_UNKNOWN;
12981 return;
12985 /* Use the same constraints as TYPE(*), except for the type check
12986 and that only scalars and assumed-size arrays are permitted. */
12987 if (sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
12989 if (!sym->attr.dummy)
12991 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall be "
12992 "a dummy argument", sym->name, &sym->declared_at);
12993 return;
12996 if (sym->ts.type != BT_ASSUMED && sym->ts.type != BT_INTEGER
12997 && sym->ts.type != BT_REAL && sym->ts.type != BT_LOGICAL
12998 && sym->ts.type != BT_COMPLEX)
13000 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall be "
13001 "of type TYPE(*) or of an numeric intrinsic type",
13002 sym->name, &sym->declared_at);
13003 return;
13006 if (sym->attr.allocatable || sym->attr.codimension
13007 || sym->attr.pointer || sym->attr.value)
13009 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may not "
13010 "have the ALLOCATABLE, CODIMENSION, POINTER or VALUE "
13011 "attribute", sym->name, &sym->declared_at);
13012 return;
13015 if (sym->attr.intent == INTENT_OUT)
13017 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may not "
13018 "have the INTENT(OUT) attribute",
13019 sym->name, &sym->declared_at);
13020 return;
13022 if (sym->attr.dimension && sym->as->type != AS_ASSUMED_SIZE)
13024 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall "
13025 "either be a scalar or an assumed-size array",
13026 sym->name, &sym->declared_at);
13027 return;
13030 /* Set the type to TYPE(*) and add a dimension(*) to ensure
13031 NO_ARG_CHECK is correctly handled in trans*.c, e.g. with
13032 packing. */
13033 sym->ts.type = BT_ASSUMED;
13034 sym->as = gfc_get_array_spec ();
13035 sym->as->type = AS_ASSUMED_SIZE;
13036 sym->as->rank = 1;
13037 sym->as->lower[0] = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
13039 else if (sym->ts.type == BT_ASSUMED)
13041 /* TS 29113, C407a. */
13042 if (!sym->attr.dummy)
13044 gfc_error ("Assumed type of variable %s at %L is only permitted "
13045 "for dummy variables", sym->name, &sym->declared_at);
13046 return;
13048 if (sym->attr.allocatable || sym->attr.codimension
13049 || sym->attr.pointer || sym->attr.value)
13051 gfc_error ("Assumed-type variable %s at %L may not have the "
13052 "ALLOCATABLE, CODIMENSION, POINTER or VALUE attribute",
13053 sym->name, &sym->declared_at);
13054 return;
13056 if (sym->attr.intent == INTENT_OUT)
13058 gfc_error ("Assumed-type variable %s at %L may not have the "
13059 "INTENT(OUT) attribute",
13060 sym->name, &sym->declared_at);
13061 return;
13063 if (sym->attr.dimension && sym->as->type == AS_EXPLICIT)
13065 gfc_error ("Assumed-type variable %s at %L shall not be an "
13066 "explicit-shape array", sym->name, &sym->declared_at);
13067 return;
13071 /* If the symbol is marked as bind(c), verify it's type and kind. Do not
13072 do this for something that was implicitly typed because that is handled
13073 in gfc_set_default_type. Handle dummy arguments and procedure
13074 definitions separately. Also, anything that is use associated is not
13075 handled here but instead is handled in the module it is declared in.
13076 Finally, derived type definitions are allowed to be BIND(C) since that
13077 only implies that they're interoperable, and they are checked fully for
13078 interoperability when a variable is declared of that type. */
13079 if (sym->attr.is_bind_c && sym->attr.implicit_type == 0 &&
13080 sym->attr.use_assoc == 0 && sym->attr.dummy == 0 &&
13081 sym->attr.flavor != FL_PROCEDURE && sym->attr.flavor != FL_DERIVED)
13083 bool t = true;
13085 /* First, make sure the variable is declared at the
13086 module-level scope (J3/04-007, Section 15.3). */
13087 if (sym->ns->proc_name->attr.flavor != FL_MODULE &&
13088 sym->attr.in_common == 0)
13090 gfc_error ("Variable '%s' at %L cannot be BIND(C) because it "
13091 "is neither a COMMON block nor declared at the "
13092 "module level scope", sym->name, &(sym->declared_at));
13093 t = false;
13095 else if (sym->common_head != NULL)
13097 t = verify_com_block_vars_c_interop (sym->common_head);
13099 else
13101 /* If type() declaration, we need to verify that the components
13102 of the given type are all C interoperable, etc. */
13103 if (sym->ts.type == BT_DERIVED &&
13104 sym->ts.u.derived->attr.is_c_interop != 1)
13106 /* Make sure the user marked the derived type as BIND(C). If
13107 not, call the verify routine. This could print an error
13108 for the derived type more than once if multiple variables
13109 of that type are declared. */
13110 if (sym->ts.u.derived->attr.is_bind_c != 1)
13111 verify_bind_c_derived_type (sym->ts.u.derived);
13112 t = false;
13115 /* Verify the variable itself as C interoperable if it
13116 is BIND(C). It is not possible for this to succeed if
13117 the verify_bind_c_derived_type failed, so don't have to handle
13118 any error returned by verify_bind_c_derived_type. */
13119 t = verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common,
13120 sym->common_block);
13123 if (!t)
13125 /* clear the is_bind_c flag to prevent reporting errors more than
13126 once if something failed. */
13127 sym->attr.is_bind_c = 0;
13128 return;
13132 /* If a derived type symbol has reached this point, without its
13133 type being declared, we have an error. Notice that most
13134 conditions that produce undefined derived types have already
13135 been dealt with. However, the likes of:
13136 implicit type(t) (t) ..... call foo (t) will get us here if
13137 the type is not declared in the scope of the implicit
13138 statement. Change the type to BT_UNKNOWN, both because it is so
13139 and to prevent an ICE. */
13140 if (sym->ts.type == BT_DERIVED && !sym->attr.is_iso_c
13141 && sym->ts.u.derived->components == NULL
13142 && !sym->ts.u.derived->attr.zero_comp)
13144 gfc_error ("The derived type '%s' at %L is of type '%s', "
13145 "which has not been defined", sym->name,
13146 &sym->declared_at, sym->ts.u.derived->name);
13147 sym->ts.type = BT_UNKNOWN;
13148 return;
13151 /* Make sure that the derived type has been resolved and that the
13152 derived type is visible in the symbol's namespace, if it is a
13153 module function and is not PRIVATE. */
13154 if (sym->ts.type == BT_DERIVED
13155 && sym->ts.u.derived->attr.use_assoc
13156 && sym->ns->proc_name
13157 && sym->ns->proc_name->attr.flavor == FL_MODULE
13158 && !resolve_fl_derived (sym->ts.u.derived))
13159 return;
13161 /* Unless the derived-type declaration is use associated, Fortran 95
13162 does not allow public entries of private derived types.
13163 See 4.4.1 (F95) and 4.5.1.1 (F2003); and related interpretation
13164 161 in 95-006r3. */
13165 if (sym->ts.type == BT_DERIVED
13166 && sym->ns->proc_name && sym->ns->proc_name->attr.flavor == FL_MODULE
13167 && !sym->ts.u.derived->attr.use_assoc
13168 && gfc_check_symbol_access (sym)
13169 && !gfc_check_symbol_access (sym->ts.u.derived)
13170 && !gfc_notify_std (GFC_STD_F2003, "PUBLIC %s '%s' at %L of PRIVATE "
13171 "derived type '%s'",
13172 (sym->attr.flavor == FL_PARAMETER)
13173 ? "parameter" : "variable",
13174 sym->name, &sym->declared_at,
13175 sym->ts.u.derived->name))
13176 return;
13178 /* F2008, C1302. */
13179 if (sym->ts.type == BT_DERIVED
13180 && ((sym->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
13181 && sym->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)
13182 || sym->ts.u.derived->attr.lock_comp)
13183 && !sym->attr.codimension && !sym->ts.u.derived->attr.coarray_comp)
13185 gfc_error ("Variable %s at %L of type LOCK_TYPE or with subcomponent of "
13186 "type LOCK_TYPE must be a coarray", sym->name,
13187 &sym->declared_at);
13188 return;
13191 /* An assumed-size array with INTENT(OUT) shall not be of a type for which
13192 default initialization is defined (5.1.2.4.4). */
13193 if (sym->ts.type == BT_DERIVED
13194 && sym->attr.dummy
13195 && sym->attr.intent == INTENT_OUT
13196 && sym->as
13197 && sym->as->type == AS_ASSUMED_SIZE)
13199 for (c = sym->ts.u.derived->components; c; c = c->next)
13201 if (c->initializer)
13203 gfc_error ("The INTENT(OUT) dummy argument '%s' at %L is "
13204 "ASSUMED SIZE and so cannot have a default initializer",
13205 sym->name, &sym->declared_at);
13206 return;
13211 /* F2008, C542. */
13212 if (sym->ts.type == BT_DERIVED && sym->attr.dummy
13213 && sym->attr.intent == INTENT_OUT && sym->attr.lock_comp)
13215 gfc_error ("Dummy argument '%s' at %L of LOCK_TYPE shall not be "
13216 "INTENT(OUT)", sym->name, &sym->declared_at);
13217 return;
13220 /* F2008, C525. */
13221 if ((((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
13222 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
13223 && CLASS_DATA (sym)->attr.coarray_comp))
13224 || class_attr.codimension)
13225 && (sym->attr.result || sym->result == sym))
13227 gfc_error ("Function result '%s' at %L shall not be a coarray or have "
13228 "a coarray component", sym->name, &sym->declared_at);
13229 return;
13232 /* F2008, C524. */
13233 if (sym->attr.codimension && sym->ts.type == BT_DERIVED
13234 && sym->ts.u.derived->ts.is_iso_c)
13236 gfc_error ("Variable '%s' at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) "
13237 "shall not be a coarray", sym->name, &sym->declared_at);
13238 return;
13241 /* F2008, C525. */
13242 if (((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
13243 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
13244 && CLASS_DATA (sym)->attr.coarray_comp))
13245 && (class_attr.codimension || class_attr.pointer || class_attr.dimension
13246 || class_attr.allocatable))
13248 gfc_error ("Variable '%s' at %L with coarray component shall be a "
13249 "nonpointer, nonallocatable scalar, which is not a coarray",
13250 sym->name, &sym->declared_at);
13251 return;
13254 /* F2008, C526. The function-result case was handled above. */
13255 if (class_attr.codimension
13256 && !(class_attr.allocatable || sym->attr.dummy || sym->attr.save
13257 || sym->attr.select_type_temporary
13258 || sym->ns->save_all
13259 || sym->ns->proc_name->attr.flavor == FL_MODULE
13260 || sym->ns->proc_name->attr.is_main_program
13261 || sym->attr.function || sym->attr.result || sym->attr.use_assoc))
13263 gfc_error ("Variable '%s' at %L is a coarray and is not ALLOCATABLE, SAVE "
13264 "nor a dummy argument", sym->name, &sym->declared_at);
13265 return;
13267 /* F2008, C528. */
13268 else if (class_attr.codimension && !sym->attr.select_type_temporary
13269 && !class_attr.allocatable && as && as->cotype == AS_DEFERRED)
13271 gfc_error ("Coarray variable '%s' at %L shall not have codimensions with "
13272 "deferred shape", sym->name, &sym->declared_at);
13273 return;
13275 else if (class_attr.codimension && class_attr.allocatable && as
13276 && (as->cotype != AS_DEFERRED || as->type != AS_DEFERRED))
13278 gfc_error ("Allocatable coarray variable '%s' at %L must have "
13279 "deferred shape", sym->name, &sym->declared_at);
13280 return;
13283 /* F2008, C541. */
13284 if ((((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
13285 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
13286 && CLASS_DATA (sym)->attr.coarray_comp))
13287 || (class_attr.codimension && class_attr.allocatable))
13288 && sym->attr.dummy && sym->attr.intent == INTENT_OUT)
13290 gfc_error ("Variable '%s' at %L is INTENT(OUT) and can thus not be an "
13291 "allocatable coarray or have coarray components",
13292 sym->name, &sym->declared_at);
13293 return;
13296 if (class_attr.codimension && sym->attr.dummy
13297 && sym->ns->proc_name && sym->ns->proc_name->attr.is_bind_c)
13299 gfc_error ("Coarray dummy variable '%s' at %L not allowed in BIND(C) "
13300 "procedure '%s'", sym->name, &sym->declared_at,
13301 sym->ns->proc_name->name);
13302 return;
13305 if (sym->ts.type == BT_LOGICAL
13306 && ((sym->attr.function && sym->attr.is_bind_c && sym->result == sym)
13307 || ((sym->attr.dummy || sym->attr.result) && sym->ns->proc_name
13308 && sym->ns->proc_name->attr.is_bind_c)))
13310 int i;
13311 for (i = 0; gfc_logical_kinds[i].kind; i++)
13312 if (gfc_logical_kinds[i].kind == sym->ts.kind)
13313 break;
13314 if (!gfc_logical_kinds[i].c_bool && sym->attr.dummy
13315 && !gfc_notify_std (GFC_STD_GNU, "LOGICAL dummy argument '%s' at "
13316 "%L with non-C_Bool kind in BIND(C) procedure "
13317 "'%s'", sym->name, &sym->declared_at,
13318 sym->ns->proc_name->name))
13319 return;
13320 else if (!gfc_logical_kinds[i].c_bool
13321 && !gfc_notify_std (GFC_STD_GNU, "LOGICAL result variable "
13322 "'%s' at %L with non-C_Bool kind in "
13323 "BIND(C) procedure '%s'", sym->name,
13324 &sym->declared_at,
13325 sym->attr.function ? sym->name
13326 : sym->ns->proc_name->name))
13327 return;
13330 switch (sym->attr.flavor)
13332 case FL_VARIABLE:
13333 if (!resolve_fl_variable (sym, mp_flag))
13334 return;
13335 break;
13337 case FL_PROCEDURE:
13338 if (!resolve_fl_procedure (sym, mp_flag))
13339 return;
13340 break;
13342 case FL_NAMELIST:
13343 if (!resolve_fl_namelist (sym))
13344 return;
13345 break;
13347 case FL_PARAMETER:
13348 if (!resolve_fl_parameter (sym))
13349 return;
13350 break;
13352 default:
13353 break;
13356 /* Resolve array specifier. Check as well some constraints
13357 on COMMON blocks. */
13359 check_constant = sym->attr.in_common && !sym->attr.pointer;
13361 /* Set the formal_arg_flag so that check_conflict will not throw
13362 an error for host associated variables in the specification
13363 expression for an array_valued function. */
13364 if (sym->attr.function && sym->as)
13365 formal_arg_flag = 1;
13367 saved_specification_expr = specification_expr;
13368 specification_expr = true;
13369 gfc_resolve_array_spec (sym->as, check_constant);
13370 specification_expr = saved_specification_expr;
13372 formal_arg_flag = 0;
13374 /* Resolve formal namespaces. */
13375 if (sym->formal_ns && sym->formal_ns != gfc_current_ns
13376 && !sym->attr.contained && !sym->attr.intrinsic)
13377 gfc_resolve (sym->formal_ns);
13379 /* Make sure the formal namespace is present. */
13380 if (sym->formal && !sym->formal_ns)
13382 gfc_formal_arglist *formal = sym->formal;
13383 while (formal && !formal->sym)
13384 formal = formal->next;
13386 if (formal)
13388 sym->formal_ns = formal->sym->ns;
13389 if (sym->ns != formal->sym->ns)
13390 sym->formal_ns->refs++;
13394 /* Check threadprivate restrictions. */
13395 if (sym->attr.threadprivate && !sym->attr.save && !sym->ns->save_all
13396 && (!sym->attr.in_common
13397 && sym->module == NULL
13398 && (sym->ns->proc_name == NULL
13399 || sym->ns->proc_name->attr.flavor != FL_MODULE)))
13400 gfc_error ("Threadprivate at %L isn't SAVEd", &sym->declared_at);
13402 /* If we have come this far we can apply default-initializers, as
13403 described in 14.7.5, to those variables that have not already
13404 been assigned one. */
13405 if (sym->ts.type == BT_DERIVED
13406 && !sym->value
13407 && !sym->attr.allocatable
13408 && !sym->attr.alloc_comp)
13410 symbol_attribute *a = &sym->attr;
13412 if ((!a->save && !a->dummy && !a->pointer
13413 && !a->in_common && !a->use_assoc
13414 && (a->referenced || a->result)
13415 && !(a->function && sym != sym->result))
13416 || (a->dummy && a->intent == INTENT_OUT && !a->pointer))
13417 apply_default_init (sym);
13420 if (sym->ts.type == BT_CLASS && sym->ns == gfc_current_ns
13421 && sym->attr.dummy && sym->attr.intent == INTENT_OUT
13422 && !CLASS_DATA (sym)->attr.class_pointer
13423 && !CLASS_DATA (sym)->attr.allocatable)
13424 apply_default_init (sym);
13426 /* If this symbol has a type-spec, check it. */
13427 if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER
13428 || (sym->attr.flavor == FL_PROCEDURE && sym->attr.function))
13429 if (!resolve_typespec_used (&sym->ts, &sym->declared_at, sym->name))
13430 return;
13434 /************* Resolve DATA statements *************/
13436 static struct
13438 gfc_data_value *vnode;
13439 mpz_t left;
13441 values;
13444 /* Advance the values structure to point to the next value in the data list. */
13446 static bool
13447 next_data_value (void)
13449 while (mpz_cmp_ui (values.left, 0) == 0)
13452 if (values.vnode->next == NULL)
13453 return false;
13455 values.vnode = values.vnode->next;
13456 mpz_set (values.left, values.vnode->repeat);
13459 return true;
13463 static bool
13464 check_data_variable (gfc_data_variable *var, locus *where)
13466 gfc_expr *e;
13467 mpz_t size;
13468 mpz_t offset;
13469 bool t;
13470 ar_type mark = AR_UNKNOWN;
13471 int i;
13472 mpz_t section_index[GFC_MAX_DIMENSIONS];
13473 gfc_ref *ref;
13474 gfc_array_ref *ar;
13475 gfc_symbol *sym;
13476 int has_pointer;
13478 if (!gfc_resolve_expr (var->expr))
13479 return false;
13481 ar = NULL;
13482 mpz_init_set_si (offset, 0);
13483 e = var->expr;
13485 if (e->expr_type != EXPR_VARIABLE)
13486 gfc_internal_error ("check_data_variable(): Bad expression");
13488 sym = e->symtree->n.sym;
13490 if (sym->ns->is_block_data && !sym->attr.in_common)
13492 gfc_error ("BLOCK DATA element '%s' at %L must be in COMMON",
13493 sym->name, &sym->declared_at);
13496 if (e->ref == NULL && sym->as)
13498 gfc_error ("DATA array '%s' at %L must be specified in a previous"
13499 " declaration", sym->name, where);
13500 return false;
13503 has_pointer = sym->attr.pointer;
13505 if (gfc_is_coindexed (e))
13507 gfc_error ("DATA element '%s' at %L cannot have a coindex", sym->name,
13508 where);
13509 return false;
13512 for (ref = e->ref; ref; ref = ref->next)
13514 if (ref->type == REF_COMPONENT && ref->u.c.component->attr.pointer)
13515 has_pointer = 1;
13517 if (has_pointer
13518 && ref->type == REF_ARRAY
13519 && ref->u.ar.type != AR_FULL)
13521 gfc_error ("DATA element '%s' at %L is a pointer and so must "
13522 "be a full array", sym->name, where);
13523 return false;
13527 if (e->rank == 0 || has_pointer)
13529 mpz_init_set_ui (size, 1);
13530 ref = NULL;
13532 else
13534 ref = e->ref;
13536 /* Find the array section reference. */
13537 for (ref = e->ref; ref; ref = ref->next)
13539 if (ref->type != REF_ARRAY)
13540 continue;
13541 if (ref->u.ar.type == AR_ELEMENT)
13542 continue;
13543 break;
13545 gcc_assert (ref);
13547 /* Set marks according to the reference pattern. */
13548 switch (ref->u.ar.type)
13550 case AR_FULL:
13551 mark = AR_FULL;
13552 break;
13554 case AR_SECTION:
13555 ar = &ref->u.ar;
13556 /* Get the start position of array section. */
13557 gfc_get_section_index (ar, section_index, &offset);
13558 mark = AR_SECTION;
13559 break;
13561 default:
13562 gcc_unreachable ();
13565 if (!gfc_array_size (e, &size))
13567 gfc_error ("Nonconstant array section at %L in DATA statement",
13568 &e->where);
13569 mpz_clear (offset);
13570 return false;
13574 t = true;
13576 while (mpz_cmp_ui (size, 0) > 0)
13578 if (!next_data_value ())
13580 gfc_error ("DATA statement at %L has more variables than values",
13581 where);
13582 t = false;
13583 break;
13586 t = gfc_check_assign (var->expr, values.vnode->expr, 0);
13587 if (!t)
13588 break;
13590 /* If we have more than one element left in the repeat count,
13591 and we have more than one element left in the target variable,
13592 then create a range assignment. */
13593 /* FIXME: Only done for full arrays for now, since array sections
13594 seem tricky. */
13595 if (mark == AR_FULL && ref && ref->next == NULL
13596 && mpz_cmp_ui (values.left, 1) > 0 && mpz_cmp_ui (size, 1) > 0)
13598 mpz_t range;
13600 if (mpz_cmp (size, values.left) >= 0)
13602 mpz_init_set (range, values.left);
13603 mpz_sub (size, size, values.left);
13604 mpz_set_ui (values.left, 0);
13606 else
13608 mpz_init_set (range, size);
13609 mpz_sub (values.left, values.left, size);
13610 mpz_set_ui (size, 0);
13613 t = gfc_assign_data_value (var->expr, values.vnode->expr,
13614 offset, &range);
13616 mpz_add (offset, offset, range);
13617 mpz_clear (range);
13619 if (!t)
13620 break;
13623 /* Assign initial value to symbol. */
13624 else
13626 mpz_sub_ui (values.left, values.left, 1);
13627 mpz_sub_ui (size, size, 1);
13629 t = gfc_assign_data_value (var->expr, values.vnode->expr,
13630 offset, NULL);
13631 if (!t)
13632 break;
13634 if (mark == AR_FULL)
13635 mpz_add_ui (offset, offset, 1);
13637 /* Modify the array section indexes and recalculate the offset
13638 for next element. */
13639 else if (mark == AR_SECTION)
13640 gfc_advance_section (section_index, ar, &offset);
13644 if (mark == AR_SECTION)
13646 for (i = 0; i < ar->dimen; i++)
13647 mpz_clear (section_index[i]);
13650 mpz_clear (size);
13651 mpz_clear (offset);
13653 return t;
13657 static bool traverse_data_var (gfc_data_variable *, locus *);
13659 /* Iterate over a list of elements in a DATA statement. */
13661 static bool
13662 traverse_data_list (gfc_data_variable *var, locus *where)
13664 mpz_t trip;
13665 iterator_stack frame;
13666 gfc_expr *e, *start, *end, *step;
13667 bool retval = true;
13669 mpz_init (frame.value);
13670 mpz_init (trip);
13672 start = gfc_copy_expr (var->iter.start);
13673 end = gfc_copy_expr (var->iter.end);
13674 step = gfc_copy_expr (var->iter.step);
13676 if (!gfc_simplify_expr (start, 1)
13677 || start->expr_type != EXPR_CONSTANT)
13679 gfc_error ("start of implied-do loop at %L could not be "
13680 "simplified to a constant value", &start->where);
13681 retval = false;
13682 goto cleanup;
13684 if (!gfc_simplify_expr (end, 1)
13685 || end->expr_type != EXPR_CONSTANT)
13687 gfc_error ("end of implied-do loop at %L could not be "
13688 "simplified to a constant value", &start->where);
13689 retval = false;
13690 goto cleanup;
13692 if (!gfc_simplify_expr (step, 1)
13693 || step->expr_type != EXPR_CONSTANT)
13695 gfc_error ("step of implied-do loop at %L could not be "
13696 "simplified to a constant value", &start->where);
13697 retval = false;
13698 goto cleanup;
13701 mpz_set (trip, end->value.integer);
13702 mpz_sub (trip, trip, start->value.integer);
13703 mpz_add (trip, trip, step->value.integer);
13705 mpz_div (trip, trip, step->value.integer);
13707 mpz_set (frame.value, start->value.integer);
13709 frame.prev = iter_stack;
13710 frame.variable = var->iter.var->symtree;
13711 iter_stack = &frame;
13713 while (mpz_cmp_ui (trip, 0) > 0)
13715 if (!traverse_data_var (var->list, where))
13717 retval = false;
13718 goto cleanup;
13721 e = gfc_copy_expr (var->expr);
13722 if (!gfc_simplify_expr (e, 1))
13724 gfc_free_expr (e);
13725 retval = false;
13726 goto cleanup;
13729 mpz_add (frame.value, frame.value, step->value.integer);
13731 mpz_sub_ui (trip, trip, 1);
13734 cleanup:
13735 mpz_clear (frame.value);
13736 mpz_clear (trip);
13738 gfc_free_expr (start);
13739 gfc_free_expr (end);
13740 gfc_free_expr (step);
13742 iter_stack = frame.prev;
13743 return retval;
13747 /* Type resolve variables in the variable list of a DATA statement. */
13749 static bool
13750 traverse_data_var (gfc_data_variable *var, locus *where)
13752 bool t;
13754 for (; var; var = var->next)
13756 if (var->expr == NULL)
13757 t = traverse_data_list (var, where);
13758 else
13759 t = check_data_variable (var, where);
13761 if (!t)
13762 return false;
13765 return true;
13769 /* Resolve the expressions and iterators associated with a data statement.
13770 This is separate from the assignment checking because data lists should
13771 only be resolved once. */
13773 static bool
13774 resolve_data_variables (gfc_data_variable *d)
13776 for (; d; d = d->next)
13778 if (d->list == NULL)
13780 if (!gfc_resolve_expr (d->expr))
13781 return false;
13783 else
13785 if (!gfc_resolve_iterator (&d->iter, false, true))
13786 return false;
13788 if (!resolve_data_variables (d->list))
13789 return false;
13793 return true;
13797 /* Resolve a single DATA statement. We implement this by storing a pointer to
13798 the value list into static variables, and then recursively traversing the
13799 variables list, expanding iterators and such. */
13801 static void
13802 resolve_data (gfc_data *d)
13805 if (!resolve_data_variables (d->var))
13806 return;
13808 values.vnode = d->value;
13809 if (d->value == NULL)
13810 mpz_set_ui (values.left, 0);
13811 else
13812 mpz_set (values.left, d->value->repeat);
13814 if (!traverse_data_var (d->var, &d->where))
13815 return;
13817 /* At this point, we better not have any values left. */
13819 if (next_data_value ())
13820 gfc_error ("DATA statement at %L has more values than variables",
13821 &d->where);
13825 /* 12.6 Constraint: In a pure subprogram any variable which is in common or
13826 accessed by host or use association, is a dummy argument to a pure function,
13827 is a dummy argument with INTENT (IN) to a pure subroutine, or an object that
13828 is storage associated with any such variable, shall not be used in the
13829 following contexts: (clients of this function). */
13831 /* Determines if a variable is not 'pure', i.e., not assignable within a pure
13832 procedure. Returns zero if assignment is OK, nonzero if there is a
13833 problem. */
13835 gfc_impure_variable (gfc_symbol *sym)
13837 gfc_symbol *proc;
13838 gfc_namespace *ns;
13840 if (sym->attr.use_assoc || sym->attr.in_common)
13841 return 1;
13843 /* Check if the symbol's ns is inside the pure procedure. */
13844 for (ns = gfc_current_ns; ns; ns = ns->parent)
13846 if (ns == sym->ns)
13847 break;
13848 if (ns->proc_name->attr.flavor == FL_PROCEDURE && !sym->attr.function)
13849 return 1;
13852 proc = sym->ns->proc_name;
13853 if (sym->attr.dummy
13854 && ((proc->attr.subroutine && sym->attr.intent == INTENT_IN)
13855 || proc->attr.function))
13856 return 1;
13858 /* TODO: Sort out what can be storage associated, if anything, and include
13859 it here. In principle equivalences should be scanned but it does not
13860 seem to be possible to storage associate an impure variable this way. */
13861 return 0;
13865 /* Test whether a symbol is pure or not. For a NULL pointer, checks if the
13866 current namespace is inside a pure procedure. */
13869 gfc_pure (gfc_symbol *sym)
13871 symbol_attribute attr;
13872 gfc_namespace *ns;
13874 if (sym == NULL)
13876 /* Check if the current namespace or one of its parents
13877 belongs to a pure procedure. */
13878 for (ns = gfc_current_ns; ns; ns = ns->parent)
13880 sym = ns->proc_name;
13881 if (sym == NULL)
13882 return 0;
13883 attr = sym->attr;
13884 if (attr.flavor == FL_PROCEDURE && attr.pure)
13885 return 1;
13887 return 0;
13890 attr = sym->attr;
13892 return attr.flavor == FL_PROCEDURE && attr.pure;
13896 /* Test whether a symbol is implicitly pure or not. For a NULL pointer,
13897 checks if the current namespace is implicitly pure. Note that this
13898 function returns false for a PURE procedure. */
13901 gfc_implicit_pure (gfc_symbol *sym)
13903 gfc_namespace *ns;
13905 if (sym == NULL)
13907 /* Check if the current procedure is implicit_pure. Walk up
13908 the procedure list until we find a procedure. */
13909 for (ns = gfc_current_ns; ns; ns = ns->parent)
13911 sym = ns->proc_name;
13912 if (sym == NULL)
13913 return 0;
13915 if (sym->attr.flavor == FL_PROCEDURE)
13916 break;
13920 return sym->attr.flavor == FL_PROCEDURE && sym->attr.implicit_pure
13921 && !sym->attr.pure;
13925 void
13926 gfc_unset_implicit_pure (gfc_symbol *sym)
13928 gfc_namespace *ns;
13930 if (sym == NULL)
13932 /* Check if the current procedure is implicit_pure. Walk up
13933 the procedure list until we find a procedure. */
13934 for (ns = gfc_current_ns; ns; ns = ns->parent)
13936 sym = ns->proc_name;
13937 if (sym == NULL)
13938 return;
13940 if (sym->attr.flavor == FL_PROCEDURE)
13941 break;
13945 if (sym->attr.flavor == FL_PROCEDURE)
13946 sym->attr.implicit_pure = 0;
13947 else
13948 sym->attr.pure = 0;
13952 /* Test whether the current procedure is elemental or not. */
13955 gfc_elemental (gfc_symbol *sym)
13957 symbol_attribute attr;
13959 if (sym == NULL)
13960 sym = gfc_current_ns->proc_name;
13961 if (sym == NULL)
13962 return 0;
13963 attr = sym->attr;
13965 return attr.flavor == FL_PROCEDURE && attr.elemental;
13969 /* Warn about unused labels. */
13971 static void
13972 warn_unused_fortran_label (gfc_st_label *label)
13974 if (label == NULL)
13975 return;
13977 warn_unused_fortran_label (label->left);
13979 if (label->defined == ST_LABEL_UNKNOWN)
13980 return;
13982 switch (label->referenced)
13984 case ST_LABEL_UNKNOWN:
13985 gfc_warning ("Label %d at %L defined but not used", label->value,
13986 &label->where);
13987 break;
13989 case ST_LABEL_BAD_TARGET:
13990 gfc_warning ("Label %d at %L defined but cannot be used",
13991 label->value, &label->where);
13992 break;
13994 default:
13995 break;
13998 warn_unused_fortran_label (label->right);
14002 /* Returns the sequence type of a symbol or sequence. */
14004 static seq_type
14005 sequence_type (gfc_typespec ts)
14007 seq_type result;
14008 gfc_component *c;
14010 switch (ts.type)
14012 case BT_DERIVED:
14014 if (ts.u.derived->components == NULL)
14015 return SEQ_NONDEFAULT;
14017 result = sequence_type (ts.u.derived->components->ts);
14018 for (c = ts.u.derived->components->next; c; c = c->next)
14019 if (sequence_type (c->ts) != result)
14020 return SEQ_MIXED;
14022 return result;
14024 case BT_CHARACTER:
14025 if (ts.kind != gfc_default_character_kind)
14026 return SEQ_NONDEFAULT;
14028 return SEQ_CHARACTER;
14030 case BT_INTEGER:
14031 if (ts.kind != gfc_default_integer_kind)
14032 return SEQ_NONDEFAULT;
14034 return SEQ_NUMERIC;
14036 case BT_REAL:
14037 if (!(ts.kind == gfc_default_real_kind
14038 || ts.kind == gfc_default_double_kind))
14039 return SEQ_NONDEFAULT;
14041 return SEQ_NUMERIC;
14043 case BT_COMPLEX:
14044 if (ts.kind != gfc_default_complex_kind)
14045 return SEQ_NONDEFAULT;
14047 return SEQ_NUMERIC;
14049 case BT_LOGICAL:
14050 if (ts.kind != gfc_default_logical_kind)
14051 return SEQ_NONDEFAULT;
14053 return SEQ_NUMERIC;
14055 default:
14056 return SEQ_NONDEFAULT;
14061 /* Resolve derived type EQUIVALENCE object. */
14063 static bool
14064 resolve_equivalence_derived (gfc_symbol *derived, gfc_symbol *sym, gfc_expr *e)
14066 gfc_component *c = derived->components;
14068 if (!derived)
14069 return true;
14071 /* Shall not be an object of nonsequence derived type. */
14072 if (!derived->attr.sequence)
14074 gfc_error ("Derived type variable '%s' at %L must have SEQUENCE "
14075 "attribute to be an EQUIVALENCE object", sym->name,
14076 &e->where);
14077 return false;
14080 /* Shall not have allocatable components. */
14081 if (derived->attr.alloc_comp)
14083 gfc_error ("Derived type variable '%s' at %L cannot have ALLOCATABLE "
14084 "components to be an EQUIVALENCE object",sym->name,
14085 &e->where);
14086 return false;
14089 if (sym->attr.in_common && gfc_has_default_initializer (sym->ts.u.derived))
14091 gfc_error ("Derived type variable '%s' at %L with default "
14092 "initialization cannot be in EQUIVALENCE with a variable "
14093 "in COMMON", sym->name, &e->where);
14094 return false;
14097 for (; c ; c = c->next)
14099 if (c->ts.type == BT_DERIVED
14100 && (!resolve_equivalence_derived(c->ts.u.derived, sym, e)))
14101 return false;
14103 /* Shall not be an object of sequence derived type containing a pointer
14104 in the structure. */
14105 if (c->attr.pointer)
14107 gfc_error ("Derived type variable '%s' at %L with pointer "
14108 "component(s) cannot be an EQUIVALENCE object",
14109 sym->name, &e->where);
14110 return false;
14113 return true;
14117 /* Resolve equivalence object.
14118 An EQUIVALENCE object shall not be a dummy argument, a pointer, a target,
14119 an allocatable array, an object of nonsequence derived type, an object of
14120 sequence derived type containing a pointer at any level of component
14121 selection, an automatic object, a function name, an entry name, a result
14122 name, a named constant, a structure component, or a subobject of any of
14123 the preceding objects. A substring shall not have length zero. A
14124 derived type shall not have components with default initialization nor
14125 shall two objects of an equivalence group be initialized.
14126 Either all or none of the objects shall have an protected attribute.
14127 The simple constraints are done in symbol.c(check_conflict) and the rest
14128 are implemented here. */
14130 static void
14131 resolve_equivalence (gfc_equiv *eq)
14133 gfc_symbol *sym;
14134 gfc_symbol *first_sym;
14135 gfc_expr *e;
14136 gfc_ref *r;
14137 locus *last_where = NULL;
14138 seq_type eq_type, last_eq_type;
14139 gfc_typespec *last_ts;
14140 int object, cnt_protected;
14141 const char *msg;
14143 last_ts = &eq->expr->symtree->n.sym->ts;
14145 first_sym = eq->expr->symtree->n.sym;
14147 cnt_protected = 0;
14149 for (object = 1; eq; eq = eq->eq, object++)
14151 e = eq->expr;
14153 e->ts = e->symtree->n.sym->ts;
14154 /* match_varspec might not know yet if it is seeing
14155 array reference or substring reference, as it doesn't
14156 know the types. */
14157 if (e->ref && e->ref->type == REF_ARRAY)
14159 gfc_ref *ref = e->ref;
14160 sym = e->symtree->n.sym;
14162 if (sym->attr.dimension)
14164 ref->u.ar.as = sym->as;
14165 ref = ref->next;
14168 /* For substrings, convert REF_ARRAY into REF_SUBSTRING. */
14169 if (e->ts.type == BT_CHARACTER
14170 && ref
14171 && ref->type == REF_ARRAY
14172 && ref->u.ar.dimen == 1
14173 && ref->u.ar.dimen_type[0] == DIMEN_RANGE
14174 && ref->u.ar.stride[0] == NULL)
14176 gfc_expr *start = ref->u.ar.start[0];
14177 gfc_expr *end = ref->u.ar.end[0];
14178 void *mem = NULL;
14180 /* Optimize away the (:) reference. */
14181 if (start == NULL && end == NULL)
14183 if (e->ref == ref)
14184 e->ref = ref->next;
14185 else
14186 e->ref->next = ref->next;
14187 mem = ref;
14189 else
14191 ref->type = REF_SUBSTRING;
14192 if (start == NULL)
14193 start = gfc_get_int_expr (gfc_default_integer_kind,
14194 NULL, 1);
14195 ref->u.ss.start = start;
14196 if (end == NULL && e->ts.u.cl)
14197 end = gfc_copy_expr (e->ts.u.cl->length);
14198 ref->u.ss.end = end;
14199 ref->u.ss.length = e->ts.u.cl;
14200 e->ts.u.cl = NULL;
14202 ref = ref->next;
14203 free (mem);
14206 /* Any further ref is an error. */
14207 if (ref)
14209 gcc_assert (ref->type == REF_ARRAY);
14210 gfc_error ("Syntax error in EQUIVALENCE statement at %L",
14211 &ref->u.ar.where);
14212 continue;
14216 if (!gfc_resolve_expr (e))
14217 continue;
14219 sym = e->symtree->n.sym;
14221 if (sym->attr.is_protected)
14222 cnt_protected++;
14223 if (cnt_protected > 0 && cnt_protected != object)
14225 gfc_error ("Either all or none of the objects in the "
14226 "EQUIVALENCE set at %L shall have the "
14227 "PROTECTED attribute",
14228 &e->where);
14229 break;
14232 /* Shall not equivalence common block variables in a PURE procedure. */
14233 if (sym->ns->proc_name
14234 && sym->ns->proc_name->attr.pure
14235 && sym->attr.in_common)
14237 gfc_error ("Common block member '%s' at %L cannot be an EQUIVALENCE "
14238 "object in the pure procedure '%s'",
14239 sym->name, &e->where, sym->ns->proc_name->name);
14240 break;
14243 /* Shall not be a named constant. */
14244 if (e->expr_type == EXPR_CONSTANT)
14246 gfc_error ("Named constant '%s' at %L cannot be an EQUIVALENCE "
14247 "object", sym->name, &e->where);
14248 continue;
14251 if (e->ts.type == BT_DERIVED
14252 && !resolve_equivalence_derived (e->ts.u.derived, sym, e))
14253 continue;
14255 /* Check that the types correspond correctly:
14256 Note 5.28:
14257 A numeric sequence structure may be equivalenced to another sequence
14258 structure, an object of default integer type, default real type, double
14259 precision real type, default logical type such that components of the
14260 structure ultimately only become associated to objects of the same
14261 kind. A character sequence structure may be equivalenced to an object
14262 of default character kind or another character sequence structure.
14263 Other objects may be equivalenced only to objects of the same type and
14264 kind parameters. */
14266 /* Identical types are unconditionally OK. */
14267 if (object == 1 || gfc_compare_types (last_ts, &sym->ts))
14268 goto identical_types;
14270 last_eq_type = sequence_type (*last_ts);
14271 eq_type = sequence_type (sym->ts);
14273 /* Since the pair of objects is not of the same type, mixed or
14274 non-default sequences can be rejected. */
14276 msg = "Sequence %s with mixed components in EQUIVALENCE "
14277 "statement at %L with different type objects";
14278 if ((object ==2
14279 && last_eq_type == SEQ_MIXED
14280 && !gfc_notify_std (GFC_STD_GNU, msg, first_sym->name, last_where))
14281 || (eq_type == SEQ_MIXED
14282 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where)))
14283 continue;
14285 msg = "Non-default type object or sequence %s in EQUIVALENCE "
14286 "statement at %L with objects of different type";
14287 if ((object ==2
14288 && last_eq_type == SEQ_NONDEFAULT
14289 && !gfc_notify_std (GFC_STD_GNU, msg, first_sym->name, last_where))
14290 || (eq_type == SEQ_NONDEFAULT
14291 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where)))
14292 continue;
14294 msg ="Non-CHARACTER object '%s' in default CHARACTER "
14295 "EQUIVALENCE statement at %L";
14296 if (last_eq_type == SEQ_CHARACTER
14297 && eq_type != SEQ_CHARACTER
14298 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where))
14299 continue;
14301 msg ="Non-NUMERIC object '%s' in default NUMERIC "
14302 "EQUIVALENCE statement at %L";
14303 if (last_eq_type == SEQ_NUMERIC
14304 && eq_type != SEQ_NUMERIC
14305 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where))
14306 continue;
14308 identical_types:
14309 last_ts =&sym->ts;
14310 last_where = &e->where;
14312 if (!e->ref)
14313 continue;
14315 /* Shall not be an automatic array. */
14316 if (e->ref->type == REF_ARRAY
14317 && !gfc_resolve_array_spec (e->ref->u.ar.as, 1))
14319 gfc_error ("Array '%s' at %L with non-constant bounds cannot be "
14320 "an EQUIVALENCE object", sym->name, &e->where);
14321 continue;
14324 r = e->ref;
14325 while (r)
14327 /* Shall not be a structure component. */
14328 if (r->type == REF_COMPONENT)
14330 gfc_error ("Structure component '%s' at %L cannot be an "
14331 "EQUIVALENCE object",
14332 r->u.c.component->name, &e->where);
14333 break;
14336 /* A substring shall not have length zero. */
14337 if (r->type == REF_SUBSTRING)
14339 if (compare_bound (r->u.ss.start, r->u.ss.end) == CMP_GT)
14341 gfc_error ("Substring at %L has length zero",
14342 &r->u.ss.start->where);
14343 break;
14346 r = r->next;
14352 /* Resolve function and ENTRY types, issue diagnostics if needed. */
14354 static void
14355 resolve_fntype (gfc_namespace *ns)
14357 gfc_entry_list *el;
14358 gfc_symbol *sym;
14360 if (ns->proc_name == NULL || !ns->proc_name->attr.function)
14361 return;
14363 /* If there are any entries, ns->proc_name is the entry master
14364 synthetic symbol and ns->entries->sym actual FUNCTION symbol. */
14365 if (ns->entries)
14366 sym = ns->entries->sym;
14367 else
14368 sym = ns->proc_name;
14369 if (sym->result == sym
14370 && sym->ts.type == BT_UNKNOWN
14371 && !gfc_set_default_type (sym, 0, NULL)
14372 && !sym->attr.untyped)
14374 gfc_error ("Function '%s' at %L has no IMPLICIT type",
14375 sym->name, &sym->declared_at);
14376 sym->attr.untyped = 1;
14379 if (sym->ts.type == BT_DERIVED && !sym->ts.u.derived->attr.use_assoc
14380 && !sym->attr.contained
14381 && !gfc_check_symbol_access (sym->ts.u.derived)
14382 && gfc_check_symbol_access (sym))
14384 gfc_notify_std (GFC_STD_F2003, "PUBLIC function '%s' at "
14385 "%L of PRIVATE type '%s'", sym->name,
14386 &sym->declared_at, sym->ts.u.derived->name);
14389 if (ns->entries)
14390 for (el = ns->entries->next; el; el = el->next)
14392 if (el->sym->result == el->sym
14393 && el->sym->ts.type == BT_UNKNOWN
14394 && !gfc_set_default_type (el->sym, 0, NULL)
14395 && !el->sym->attr.untyped)
14397 gfc_error ("ENTRY '%s' at %L has no IMPLICIT type",
14398 el->sym->name, &el->sym->declared_at);
14399 el->sym->attr.untyped = 1;
14405 /* 12.3.2.1.1 Defined operators. */
14407 static bool
14408 check_uop_procedure (gfc_symbol *sym, locus where)
14410 gfc_formal_arglist *formal;
14412 if (!sym->attr.function)
14414 gfc_error ("User operator procedure '%s' at %L must be a FUNCTION",
14415 sym->name, &where);
14416 return false;
14419 if (sym->ts.type == BT_CHARACTER
14420 && !(sym->ts.u.cl && sym->ts.u.cl->length)
14421 && !(sym->result && sym->result->ts.u.cl
14422 && sym->result->ts.u.cl->length))
14424 gfc_error ("User operator procedure '%s' at %L cannot be assumed "
14425 "character length", sym->name, &where);
14426 return false;
14429 formal = gfc_sym_get_dummy_args (sym);
14430 if (!formal || !formal->sym)
14432 gfc_error ("User operator procedure '%s' at %L must have at least "
14433 "one argument", sym->name, &where);
14434 return false;
14437 if (formal->sym->attr.intent != INTENT_IN)
14439 gfc_error ("First argument of operator interface at %L must be "
14440 "INTENT(IN)", &where);
14441 return false;
14444 if (formal->sym->attr.optional)
14446 gfc_error ("First argument of operator interface at %L cannot be "
14447 "optional", &where);
14448 return false;
14451 formal = formal->next;
14452 if (!formal || !formal->sym)
14453 return true;
14455 if (formal->sym->attr.intent != INTENT_IN)
14457 gfc_error ("Second argument of operator interface at %L must be "
14458 "INTENT(IN)", &where);
14459 return false;
14462 if (formal->sym->attr.optional)
14464 gfc_error ("Second argument of operator interface at %L cannot be "
14465 "optional", &where);
14466 return false;
14469 if (formal->next)
14471 gfc_error ("Operator interface at %L must have, at most, two "
14472 "arguments", &where);
14473 return false;
14476 return true;
14479 static void
14480 gfc_resolve_uops (gfc_symtree *symtree)
14482 gfc_interface *itr;
14484 if (symtree == NULL)
14485 return;
14487 gfc_resolve_uops (symtree->left);
14488 gfc_resolve_uops (symtree->right);
14490 for (itr = symtree->n.uop->op; itr; itr = itr->next)
14491 check_uop_procedure (itr->sym, itr->sym->declared_at);
14495 /* Examine all of the expressions associated with a program unit,
14496 assign types to all intermediate expressions, make sure that all
14497 assignments are to compatible types and figure out which names
14498 refer to which functions or subroutines. It doesn't check code
14499 block, which is handled by resolve_code. */
14501 static void
14502 resolve_types (gfc_namespace *ns)
14504 gfc_namespace *n;
14505 gfc_charlen *cl;
14506 gfc_data *d;
14507 gfc_equiv *eq;
14508 gfc_namespace* old_ns = gfc_current_ns;
14510 /* Check that all IMPLICIT types are ok. */
14511 if (!ns->seen_implicit_none)
14513 unsigned letter;
14514 for (letter = 0; letter != GFC_LETTERS; ++letter)
14515 if (ns->set_flag[letter]
14516 && !resolve_typespec_used (&ns->default_type[letter],
14517 &ns->implicit_loc[letter], NULL))
14518 return;
14521 gfc_current_ns = ns;
14523 resolve_entries (ns);
14525 resolve_common_vars (ns->blank_common.head, false);
14526 resolve_common_blocks (ns->common_root);
14528 resolve_contained_functions (ns);
14530 if (ns->proc_name && ns->proc_name->attr.flavor == FL_PROCEDURE
14531 && ns->proc_name->attr.if_source == IFSRC_IFBODY)
14532 resolve_formal_arglist (ns->proc_name);
14534 gfc_traverse_ns (ns, resolve_bind_c_derived_types);
14536 for (cl = ns->cl_list; cl; cl = cl->next)
14537 resolve_charlen (cl);
14539 gfc_traverse_ns (ns, resolve_symbol);
14541 resolve_fntype (ns);
14543 for (n = ns->contained; n; n = n->sibling)
14545 if (gfc_pure (ns->proc_name) && !gfc_pure (n->proc_name))
14546 gfc_error ("Contained procedure '%s' at %L of a PURE procedure must "
14547 "also be PURE", n->proc_name->name,
14548 &n->proc_name->declared_at);
14550 resolve_types (n);
14553 forall_flag = 0;
14554 gfc_do_concurrent_flag = 0;
14555 gfc_check_interfaces (ns);
14557 gfc_traverse_ns (ns, resolve_values);
14559 if (ns->save_all)
14560 gfc_save_all (ns);
14562 iter_stack = NULL;
14563 for (d = ns->data; d; d = d->next)
14564 resolve_data (d);
14566 iter_stack = NULL;
14567 gfc_traverse_ns (ns, gfc_formalize_init_value);
14569 gfc_traverse_ns (ns, gfc_verify_binding_labels);
14571 for (eq = ns->equiv; eq; eq = eq->next)
14572 resolve_equivalence (eq);
14574 /* Warn about unused labels. */
14575 if (warn_unused_label)
14576 warn_unused_fortran_label (ns->st_labels);
14578 gfc_resolve_uops (ns->uop_root);
14580 gfc_current_ns = old_ns;
14584 /* Call resolve_code recursively. */
14586 static void
14587 resolve_codes (gfc_namespace *ns)
14589 gfc_namespace *n;
14590 bitmap_obstack old_obstack;
14592 if (ns->resolved == 1)
14593 return;
14595 for (n = ns->contained; n; n = n->sibling)
14596 resolve_codes (n);
14598 gfc_current_ns = ns;
14600 /* Don't clear 'cs_base' if this is the namespace of a BLOCK construct. */
14601 if (!(ns->proc_name && ns->proc_name->attr.flavor == FL_LABEL))
14602 cs_base = NULL;
14604 /* Set to an out of range value. */
14605 current_entry_id = -1;
14607 old_obstack = labels_obstack;
14608 bitmap_obstack_initialize (&labels_obstack);
14610 resolve_code (ns->code, ns);
14612 bitmap_obstack_release (&labels_obstack);
14613 labels_obstack = old_obstack;
14617 /* This function is called after a complete program unit has been compiled.
14618 Its purpose is to examine all of the expressions associated with a program
14619 unit, assign types to all intermediate expressions, make sure that all
14620 assignments are to compatible types and figure out which names refer to
14621 which functions or subroutines. */
14623 void
14624 gfc_resolve (gfc_namespace *ns)
14626 gfc_namespace *old_ns;
14627 code_stack *old_cs_base;
14629 if (ns->resolved)
14630 return;
14632 ns->resolved = -1;
14633 old_ns = gfc_current_ns;
14634 old_cs_base = cs_base;
14636 resolve_types (ns);
14637 component_assignment_level = 0;
14638 resolve_codes (ns);
14640 gfc_current_ns = old_ns;
14641 cs_base = old_cs_base;
14642 ns->resolved = 1;
14644 gfc_run_passes (ns);