]> gcc.gnu.org Git - gcc.git/blob - gcc/fortran/resolve.c
re PR fortran/29699 (ICE in trans-decl.c)
[gcc.git] / gcc / fortran / resolve.c
1 /* Perform type resolution on the various stuctures.
2 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
3 Inc.
4 Contributed by Andy Vaught
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to the Free
20 Software Foundation, 51 Franklin Street, Fifth Floor,Boston, MA
21 02110-1301, USA. */
22
23
24 #include "config.h"
25 #include "system.h"
26 #include "flags.h"
27 #include "gfortran.h"
28 #include "arith.h" /* For gfc_compare_expr(). */
29 #include "dependency.h"
30
31 /* Types used in equivalence statements. */
32
33 typedef enum seq_type
34 {
35 SEQ_NONDEFAULT, SEQ_NUMERIC, SEQ_CHARACTER, SEQ_MIXED
36 }
37 seq_type;
38
39 /* Stack to push the current if we descend into a block during
40 resolution. See resolve_branch() and resolve_code(). */
41
42 typedef struct code_stack
43 {
44 struct gfc_code *head, *current;
45 struct code_stack *prev;
46 }
47 code_stack;
48
49 static code_stack *cs_base = NULL;
50
51
52 /* Nonzero if we're inside a FORALL block. */
53
54 static int forall_flag;
55
56 /* Nonzero if we're inside a OpenMP WORKSHARE or PARALLEL WORKSHARE block. */
57
58 static int omp_workshare_flag;
59
60 /* Nonzero if we are processing a formal arglist. The corresponding function
61 resets the flag each time that it is read. */
62 static int formal_arg_flag = 0;
63
64 /* True if we are resolving a specification expression. */
65 static int specification_expr = 0;
66
67 /* The id of the last entry seen. */
68 static int current_entry_id;
69
70 int
71 gfc_is_formal_arg (void)
72 {
73 return formal_arg_flag;
74 }
75
76 /* Resolve types of formal argument lists. These have to be done early so that
77 the formal argument lists of module procedures can be copied to the
78 containing module before the individual procedures are resolved
79 individually. We also resolve argument lists of procedures in interface
80 blocks because they are self-contained scoping units.
81
82 Since a dummy argument cannot be a non-dummy procedure, the only
83 resort left for untyped names are the IMPLICIT types. */
84
85 static void
86 resolve_formal_arglist (gfc_symbol * proc)
87 {
88 gfc_formal_arglist *f;
89 gfc_symbol *sym;
90 int i;
91
92 /* TODO: Procedures whose return character length parameter is not constant
93 or assumed must also have explicit interfaces. */
94 if (proc->result != NULL)
95 sym = proc->result;
96 else
97 sym = proc;
98
99 if (gfc_elemental (proc)
100 || sym->attr.pointer || sym->attr.allocatable
101 || (sym->as && sym->as->rank > 0))
102 proc->attr.always_explicit = 1;
103
104 formal_arg_flag = 1;
105
106 for (f = proc->formal; f; f = f->next)
107 {
108 sym = f->sym;
109
110 if (sym == NULL)
111 {
112 /* Alternate return placeholder. */
113 if (gfc_elemental (proc))
114 gfc_error ("Alternate return specifier in elemental subroutine "
115 "'%s' at %L is not allowed", proc->name,
116 &proc->declared_at);
117 if (proc->attr.function)
118 gfc_error ("Alternate return specifier in function "
119 "'%s' at %L is not allowed", proc->name,
120 &proc->declared_at);
121 continue;
122 }
123
124 if (sym->attr.if_source != IFSRC_UNKNOWN)
125 resolve_formal_arglist (sym);
126
127 if (sym->attr.subroutine || sym->attr.external || sym->attr.intrinsic)
128 {
129 if (gfc_pure (proc) && !gfc_pure (sym))
130 {
131 gfc_error
132 ("Dummy procedure '%s' of PURE procedure at %L must also "
133 "be PURE", sym->name, &sym->declared_at);
134 continue;
135 }
136
137 if (gfc_elemental (proc))
138 {
139 gfc_error
140 ("Dummy procedure at %L not allowed in ELEMENTAL procedure",
141 &sym->declared_at);
142 continue;
143 }
144
145 continue;
146 }
147
148 if (sym->ts.type == BT_UNKNOWN)
149 {
150 if (!sym->attr.function || sym->result == sym)
151 gfc_set_default_type (sym, 1, sym->ns);
152 }
153
154 gfc_resolve_array_spec (sym->as, 0);
155
156 /* We can't tell if an array with dimension (:) is assumed or deferred
157 shape until we know if it has the pointer or allocatable attributes.
158 */
159 if (sym->as && sym->as->rank > 0 && sym->as->type == AS_DEFERRED
160 && !(sym->attr.pointer || sym->attr.allocatable))
161 {
162 sym->as->type = AS_ASSUMED_SHAPE;
163 for (i = 0; i < sym->as->rank; i++)
164 sym->as->lower[i] = gfc_int_expr (1);
165 }
166
167 if ((sym->as && sym->as->rank > 0 && sym->as->type == AS_ASSUMED_SHAPE)
168 || sym->attr.pointer || sym->attr.allocatable || sym->attr.target
169 || sym->attr.optional)
170 proc->attr.always_explicit = 1;
171
172 /* If the flavor is unknown at this point, it has to be a variable.
173 A procedure specification would have already set the type. */
174
175 if (sym->attr.flavor == FL_UNKNOWN)
176 gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, &sym->declared_at);
177
178 if (gfc_pure (proc))
179 {
180 if (proc->attr.function && !sym->attr.pointer
181 && sym->attr.flavor != FL_PROCEDURE
182 && sym->attr.intent != INTENT_IN)
183
184 gfc_error ("Argument '%s' of pure function '%s' at %L must be "
185 "INTENT(IN)", sym->name, proc->name,
186 &sym->declared_at);
187
188 if (proc->attr.subroutine && !sym->attr.pointer
189 && sym->attr.intent == INTENT_UNKNOWN)
190
191 gfc_error
192 ("Argument '%s' of pure subroutine '%s' at %L must have "
193 "its INTENT specified", sym->name, proc->name,
194 &sym->declared_at);
195 }
196
197
198 if (gfc_elemental (proc))
199 {
200 if (sym->as != NULL)
201 {
202 gfc_error
203 ("Argument '%s' of elemental procedure at %L must be scalar",
204 sym->name, &sym->declared_at);
205 continue;
206 }
207
208 if (sym->attr.pointer)
209 {
210 gfc_error
211 ("Argument '%s' of elemental procedure at %L cannot have "
212 "the POINTER attribute", sym->name, &sym->declared_at);
213 continue;
214 }
215 }
216
217 /* Each dummy shall be specified to be scalar. */
218 if (proc->attr.proc == PROC_ST_FUNCTION)
219 {
220 if (sym->as != NULL)
221 {
222 gfc_error
223 ("Argument '%s' of statement function at %L must be scalar",
224 sym->name, &sym->declared_at);
225 continue;
226 }
227
228 if (sym->ts.type == BT_CHARACTER)
229 {
230 gfc_charlen *cl = sym->ts.cl;
231 if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
232 {
233 gfc_error
234 ("Character-valued argument '%s' of statement function at "
235 "%L must has constant length",
236 sym->name, &sym->declared_at);
237 continue;
238 }
239 }
240 }
241 }
242 formal_arg_flag = 0;
243 }
244
245
246 /* Work function called when searching for symbols that have argument lists
247 associated with them. */
248
249 static void
250 find_arglists (gfc_symbol * sym)
251 {
252
253 if (sym->attr.if_source == IFSRC_UNKNOWN || sym->ns != gfc_current_ns)
254 return;
255
256 resolve_formal_arglist (sym);
257 }
258
259
260 /* Given a namespace, resolve all formal argument lists within the namespace.
261 */
262
263 static void
264 resolve_formal_arglists (gfc_namespace * ns)
265 {
266
267 if (ns == NULL)
268 return;
269
270 gfc_traverse_ns (ns, find_arglists);
271 }
272
273
274 static void
275 resolve_contained_fntype (gfc_symbol * sym, gfc_namespace * ns)
276 {
277 try t;
278
279 /* If this namespace is not a function, ignore it. */
280 if (! sym
281 || !(sym->attr.function
282 || sym->attr.flavor == FL_VARIABLE))
283 return;
284
285 /* Try to find out of what the return type is. */
286 if (sym->result != NULL)
287 sym = sym->result;
288
289 if (sym->ts.type == BT_UNKNOWN)
290 {
291 t = gfc_set_default_type (sym, 0, ns);
292
293 if (t == FAILURE && !sym->attr.untyped)
294 {
295 gfc_error ("Contained function '%s' at %L has no IMPLICIT type",
296 sym->name, &sym->declared_at); /* FIXME */
297 sym->attr.untyped = 1;
298 }
299 }
300
301 /*Fortran 95 Draft Standard, page 51, Section 5.1.1.5, on the Character type,
302 lists the only ways a character length value of * can be used: dummy arguments
303 of procedures, named constants, and function results in external functions.
304 Internal function results are not on that list; ergo, not permitted. */
305
306 if (sym->ts.type == BT_CHARACTER)
307 {
308 gfc_charlen *cl = sym->ts.cl;
309 if (!cl || !cl->length)
310 gfc_error ("Character-valued internal function '%s' at %L must "
311 "not be assumed length", sym->name, &sym->declared_at);
312 }
313 }
314
315
316 /* Add NEW_ARGS to the formal argument list of PROC, taking care not to
317 introduce duplicates. */
318
319 static void
320 merge_argument_lists (gfc_symbol *proc, gfc_formal_arglist *new_args)
321 {
322 gfc_formal_arglist *f, *new_arglist;
323 gfc_symbol *new_sym;
324
325 for (; new_args != NULL; new_args = new_args->next)
326 {
327 new_sym = new_args->sym;
328 /* See if this arg is already in the formal argument list. */
329 for (f = proc->formal; f; f = f->next)
330 {
331 if (new_sym == f->sym)
332 break;
333 }
334
335 if (f)
336 continue;
337
338 /* Add a new argument. Argument order is not important. */
339 new_arglist = gfc_get_formal_arglist ();
340 new_arglist->sym = new_sym;
341 new_arglist->next = proc->formal;
342 proc->formal = new_arglist;
343 }
344 }
345
346
347 /* Resolve alternate entry points. If a symbol has multiple entry points we
348 create a new master symbol for the main routine, and turn the existing
349 symbol into an entry point. */
350
351 static void
352 resolve_entries (gfc_namespace * ns)
353 {
354 gfc_namespace *old_ns;
355 gfc_code *c;
356 gfc_symbol *proc;
357 gfc_entry_list *el;
358 char name[GFC_MAX_SYMBOL_LEN + 1];
359 static int master_count = 0;
360
361 if (ns->proc_name == NULL)
362 return;
363
364 /* No need to do anything if this procedure doesn't have alternate entry
365 points. */
366 if (!ns->entries)
367 return;
368
369 /* We may already have resolved alternate entry points. */
370 if (ns->proc_name->attr.entry_master)
371 return;
372
373 /* If this isn't a procedure something has gone horribly wrong. */
374 gcc_assert (ns->proc_name->attr.flavor == FL_PROCEDURE);
375
376 /* Remember the current namespace. */
377 old_ns = gfc_current_ns;
378
379 gfc_current_ns = ns;
380
381 /* Add the main entry point to the list of entry points. */
382 el = gfc_get_entry_list ();
383 el->sym = ns->proc_name;
384 el->id = 0;
385 el->next = ns->entries;
386 ns->entries = el;
387 ns->proc_name->attr.entry = 1;
388
389 /* If it is a module function, it needs to be in the right namespace
390 so that gfc_get_fake_result_decl can gather up the results. The
391 need for this arose in get_proc_name, where these beasts were
392 left in their own namespace, to keep prior references linked to
393 the entry declaration.*/
394 if (ns->proc_name->attr.function
395 && ns->parent
396 && ns->parent->proc_name->attr.flavor == FL_MODULE)
397 el->sym->ns = ns;
398
399 /* Add an entry statement for it. */
400 c = gfc_get_code ();
401 c->op = EXEC_ENTRY;
402 c->ext.entry = el;
403 c->next = ns->code;
404 ns->code = c;
405
406 /* Create a new symbol for the master function. */
407 /* Give the internal function a unique name (within this file).
408 Also include the function name so the user has some hope of figuring
409 out what is going on. */
410 snprintf (name, GFC_MAX_SYMBOL_LEN, "master.%d.%s",
411 master_count++, ns->proc_name->name);
412 gfc_get_ha_symbol (name, &proc);
413 gcc_assert (proc != NULL);
414
415 gfc_add_procedure (&proc->attr, PROC_INTERNAL, proc->name, NULL);
416 if (ns->proc_name->attr.subroutine)
417 gfc_add_subroutine (&proc->attr, proc->name, NULL);
418 else
419 {
420 gfc_symbol *sym;
421 gfc_typespec *ts, *fts;
422 gfc_array_spec *as, *fas;
423 gfc_add_function (&proc->attr, proc->name, NULL);
424 proc->result = proc;
425 fas = ns->entries->sym->as;
426 fas = fas ? fas : ns->entries->sym->result->as;
427 fts = &ns->entries->sym->result->ts;
428 if (fts->type == BT_UNKNOWN)
429 fts = gfc_get_default_type (ns->entries->sym->result, NULL);
430 for (el = ns->entries->next; el; el = el->next)
431 {
432 ts = &el->sym->result->ts;
433 as = el->sym->as;
434 as = as ? as : el->sym->result->as;
435 if (ts->type == BT_UNKNOWN)
436 ts = gfc_get_default_type (el->sym->result, NULL);
437
438 if (! gfc_compare_types (ts, fts)
439 || (el->sym->result->attr.dimension
440 != ns->entries->sym->result->attr.dimension)
441 || (el->sym->result->attr.pointer
442 != ns->entries->sym->result->attr.pointer))
443 break;
444
445 else if (as && fas && gfc_compare_array_spec (as, fas) == 0)
446 gfc_error ("Procedure %s at %L has entries with mismatched "
447 "array specifications", ns->entries->sym->name,
448 &ns->entries->sym->declared_at);
449 }
450
451 if (el == NULL)
452 {
453 sym = ns->entries->sym->result;
454 /* All result types the same. */
455 proc->ts = *fts;
456 if (sym->attr.dimension)
457 gfc_set_array_spec (proc, gfc_copy_array_spec (sym->as), NULL);
458 if (sym->attr.pointer)
459 gfc_add_pointer (&proc->attr, NULL);
460 }
461 else
462 {
463 /* Otherwise the result will be passed through a union by
464 reference. */
465 proc->attr.mixed_entry_master = 1;
466 for (el = ns->entries; el; el = el->next)
467 {
468 sym = el->sym->result;
469 if (sym->attr.dimension)
470 {
471 if (el == ns->entries)
472 gfc_error
473 ("FUNCTION result %s can't be an array in FUNCTION %s at %L",
474 sym->name, ns->entries->sym->name, &sym->declared_at);
475 else
476 gfc_error
477 ("ENTRY result %s can't be an array in FUNCTION %s at %L",
478 sym->name, ns->entries->sym->name, &sym->declared_at);
479 }
480 else if (sym->attr.pointer)
481 {
482 if (el == ns->entries)
483 gfc_error
484 ("FUNCTION result %s can't be a POINTER in FUNCTION %s at %L",
485 sym->name, ns->entries->sym->name, &sym->declared_at);
486 else
487 gfc_error
488 ("ENTRY result %s can't be a POINTER in FUNCTION %s at %L",
489 sym->name, ns->entries->sym->name, &sym->declared_at);
490 }
491 else
492 {
493 ts = &sym->ts;
494 if (ts->type == BT_UNKNOWN)
495 ts = gfc_get_default_type (sym, NULL);
496 switch (ts->type)
497 {
498 case BT_INTEGER:
499 if (ts->kind == gfc_default_integer_kind)
500 sym = NULL;
501 break;
502 case BT_REAL:
503 if (ts->kind == gfc_default_real_kind
504 || ts->kind == gfc_default_double_kind)
505 sym = NULL;
506 break;
507 case BT_COMPLEX:
508 if (ts->kind == gfc_default_complex_kind)
509 sym = NULL;
510 break;
511 case BT_LOGICAL:
512 if (ts->kind == gfc_default_logical_kind)
513 sym = NULL;
514 break;
515 case BT_UNKNOWN:
516 /* We will issue error elsewhere. */
517 sym = NULL;
518 break;
519 default:
520 break;
521 }
522 if (sym)
523 {
524 if (el == ns->entries)
525 gfc_error
526 ("FUNCTION result %s can't be of type %s in FUNCTION %s at %L",
527 sym->name, gfc_typename (ts), ns->entries->sym->name,
528 &sym->declared_at);
529 else
530 gfc_error
531 ("ENTRY result %s can't be of type %s in FUNCTION %s at %L",
532 sym->name, gfc_typename (ts), ns->entries->sym->name,
533 &sym->declared_at);
534 }
535 }
536 }
537 }
538 }
539 proc->attr.access = ACCESS_PRIVATE;
540 proc->attr.entry_master = 1;
541
542 /* Merge all the entry point arguments. */
543 for (el = ns->entries; el; el = el->next)
544 merge_argument_lists (proc, el->sym->formal);
545
546 /* Use the master function for the function body. */
547 ns->proc_name = proc;
548
549 /* Finalize the new symbols. */
550 gfc_commit_symbols ();
551
552 /* Restore the original namespace. */
553 gfc_current_ns = old_ns;
554 }
555
556
557 /* Resolve contained function types. Because contained functions can call one
558 another, they have to be worked out before any of the contained procedures
559 can be resolved.
560
561 The good news is that if a function doesn't already have a type, the only
562 way it can get one is through an IMPLICIT type or a RESULT variable, because
563 by definition contained functions are contained namespace they're contained
564 in, not in a sibling or parent namespace. */
565
566 static void
567 resolve_contained_functions (gfc_namespace * ns)
568 {
569 gfc_namespace *child;
570 gfc_entry_list *el;
571
572 resolve_formal_arglists (ns);
573
574 for (child = ns->contained; child; child = child->sibling)
575 {
576 /* Resolve alternate entry points first. */
577 resolve_entries (child);
578
579 /* Then check function return types. */
580 resolve_contained_fntype (child->proc_name, child);
581 for (el = child->entries; el; el = el->next)
582 resolve_contained_fntype (el->sym, child);
583 }
584 }
585
586
587 /* Resolve all of the elements of a structure constructor and make sure that
588 the types are correct. */
589
590 static try
591 resolve_structure_cons (gfc_expr * expr)
592 {
593 gfc_constructor *cons;
594 gfc_component *comp;
595 try t;
596 symbol_attribute a;
597
598 t = SUCCESS;
599 cons = expr->value.constructor;
600 /* A constructor may have references if it is the result of substituting a
601 parameter variable. In this case we just pull out the component we
602 want. */
603 if (expr->ref)
604 comp = expr->ref->u.c.sym->components;
605 else
606 comp = expr->ts.derived->components;
607
608 for (; comp; comp = comp->next, cons = cons->next)
609 {
610 if (! cons->expr)
611 continue;
612
613 if (gfc_resolve_expr (cons->expr) == FAILURE)
614 {
615 t = FAILURE;
616 continue;
617 }
618
619 if (cons->expr->expr_type != EXPR_NULL
620 && comp->as && comp->as->rank != cons->expr->rank
621 && (comp->allocatable || cons->expr->rank))
622 {
623 gfc_error ("The rank of the element in the derived type "
624 "constructor at %L does not match that of the "
625 "component (%d/%d)", &cons->expr->where,
626 cons->expr->rank, comp->as ? comp->as->rank : 0);
627 t = FAILURE;
628 }
629
630 /* If we don't have the right type, try to convert it. */
631
632 if (!gfc_compare_types (&cons->expr->ts, &comp->ts))
633 {
634 t = FAILURE;
635 if (comp->pointer && cons->expr->ts.type != BT_UNKNOWN)
636 gfc_error ("The element in the derived type constructor at %L, "
637 "for pointer component '%s', is %s but should be %s",
638 &cons->expr->where, comp->name,
639 gfc_basic_typename (cons->expr->ts.type),
640 gfc_basic_typename (comp->ts.type));
641 else
642 t = gfc_convert_type (cons->expr, &comp->ts, 1);
643 }
644
645 if (!comp->pointer || cons->expr->expr_type == EXPR_NULL)
646 continue;
647
648 a = gfc_expr_attr (cons->expr);
649
650 if (!a.pointer && !a.target)
651 {
652 t = FAILURE;
653 gfc_error ("The element in the derived type constructor at %L, "
654 "for pointer component '%s' should be a POINTER or "
655 "a TARGET", &cons->expr->where, comp->name);
656 }
657 }
658
659 return t;
660 }
661
662
663
664 /****************** Expression name resolution ******************/
665
666 /* Returns 0 if a symbol was not declared with a type or
667 attribute declaration statement, nonzero otherwise. */
668
669 static int
670 was_declared (gfc_symbol * sym)
671 {
672 symbol_attribute a;
673
674 a = sym->attr;
675
676 if (!a.implicit_type && sym->ts.type != BT_UNKNOWN)
677 return 1;
678
679 if (a.allocatable || a.dimension || a.dummy || a.external || a.intrinsic
680 || a.optional || a.pointer || a.save || a.target || a.volatile_
681 || a.access != ACCESS_UNKNOWN || a.intent != INTENT_UNKNOWN)
682 return 1;
683
684 return 0;
685 }
686
687
688 /* Determine if a symbol is generic or not. */
689
690 static int
691 generic_sym (gfc_symbol * sym)
692 {
693 gfc_symbol *s;
694
695 if (sym->attr.generic ||
696 (sym->attr.intrinsic && gfc_generic_intrinsic (sym->name)))
697 return 1;
698
699 if (was_declared (sym) || sym->ns->parent == NULL)
700 return 0;
701
702 gfc_find_symbol (sym->name, sym->ns->parent, 1, &s);
703
704 return (s == NULL) ? 0 : generic_sym (s);
705 }
706
707
708 /* Determine if a symbol is specific or not. */
709
710 static int
711 specific_sym (gfc_symbol * sym)
712 {
713 gfc_symbol *s;
714
715 if (sym->attr.if_source == IFSRC_IFBODY
716 || sym->attr.proc == PROC_MODULE
717 || sym->attr.proc == PROC_INTERNAL
718 || sym->attr.proc == PROC_ST_FUNCTION
719 || (sym->attr.intrinsic &&
720 gfc_specific_intrinsic (sym->name))
721 || sym->attr.external)
722 return 1;
723
724 if (was_declared (sym) || sym->ns->parent == NULL)
725 return 0;
726
727 gfc_find_symbol (sym->name, sym->ns->parent, 1, &s);
728
729 return (s == NULL) ? 0 : specific_sym (s);
730 }
731
732
733 /* Figure out if the procedure is specific, generic or unknown. */
734
735 typedef enum
736 { PTYPE_GENERIC = 1, PTYPE_SPECIFIC, PTYPE_UNKNOWN }
737 proc_type;
738
739 static proc_type
740 procedure_kind (gfc_symbol * sym)
741 {
742
743 if (generic_sym (sym))
744 return PTYPE_GENERIC;
745
746 if (specific_sym (sym))
747 return PTYPE_SPECIFIC;
748
749 return PTYPE_UNKNOWN;
750 }
751
752 /* Check references to assumed size arrays. The flag need_full_assumed_size
753 is nonzero when matching actual arguments. */
754
755 static int need_full_assumed_size = 0;
756
757 static bool
758 check_assumed_size_reference (gfc_symbol * sym, gfc_expr * e)
759 {
760 gfc_ref * ref;
761 int dim;
762 int last = 1;
763
764 if (need_full_assumed_size
765 || !(sym->as && sym->as->type == AS_ASSUMED_SIZE))
766 return false;
767
768 for (ref = e->ref; ref; ref = ref->next)
769 if (ref->type == REF_ARRAY)
770 for (dim = 0; dim < ref->u.ar.as->rank; dim++)
771 last = (ref->u.ar.end[dim] == NULL) && (ref->u.ar.type == DIMEN_ELEMENT);
772
773 if (last)
774 {
775 gfc_error ("The upper bound in the last dimension must "
776 "appear in the reference to the assumed size "
777 "array '%s' at %L.", sym->name, &e->where);
778 return true;
779 }
780 return false;
781 }
782
783
784 /* Look for bad assumed size array references in argument expressions
785 of elemental and array valued intrinsic procedures. Since this is
786 called from procedure resolution functions, it only recurses at
787 operators. */
788
789 static bool
790 resolve_assumed_size_actual (gfc_expr *e)
791 {
792 if (e == NULL)
793 return false;
794
795 switch (e->expr_type)
796 {
797 case EXPR_VARIABLE:
798 if (e->symtree
799 && check_assumed_size_reference (e->symtree->n.sym, e))
800 return true;
801 break;
802
803 case EXPR_OP:
804 if (resolve_assumed_size_actual (e->value.op.op1)
805 || resolve_assumed_size_actual (e->value.op.op2))
806 return true;
807 break;
808
809 default:
810 break;
811 }
812 return false;
813 }
814
815
816 /* Resolve an actual argument list. Most of the time, this is just
817 resolving the expressions in the list.
818 The exception is that we sometimes have to decide whether arguments
819 that look like procedure arguments are really simple variable
820 references. */
821
822 static try
823 resolve_actual_arglist (gfc_actual_arglist * arg)
824 {
825 gfc_symbol *sym;
826 gfc_symtree *parent_st;
827 gfc_expr *e;
828
829 for (; arg; arg = arg->next)
830 {
831
832 e = arg->expr;
833 if (e == NULL)
834 {
835 /* Check the label is a valid branching target. */
836 if (arg->label)
837 {
838 if (arg->label->defined == ST_LABEL_UNKNOWN)
839 {
840 gfc_error ("Label %d referenced at %L is never defined",
841 arg->label->value, &arg->label->where);
842 return FAILURE;
843 }
844 }
845 continue;
846 }
847
848 if (e->ts.type != BT_PROCEDURE)
849 {
850 if (gfc_resolve_expr (e) != SUCCESS)
851 return FAILURE;
852 continue;
853 }
854
855 /* See if the expression node should really be a variable
856 reference. */
857
858 sym = e->symtree->n.sym;
859
860 if (sym->attr.flavor == FL_PROCEDURE
861 || sym->attr.intrinsic
862 || sym->attr.external)
863 {
864 int actual_ok;
865
866 /* If a procedure is not already determined to be something else
867 check if it is intrinsic. */
868 if (!sym->attr.intrinsic
869 && !(sym->attr.external || sym->attr.use_assoc
870 || sym->attr.if_source == IFSRC_IFBODY)
871 && gfc_intrinsic_name (sym->name, sym->attr.subroutine))
872 sym->attr.intrinsic = 1;
873
874 if (sym->attr.proc == PROC_ST_FUNCTION)
875 {
876 gfc_error ("Statement function '%s' at %L is not allowed as an "
877 "actual argument", sym->name, &e->where);
878 }
879
880 actual_ok = gfc_intrinsic_actual_ok (sym->name, sym->attr.subroutine);
881 if (sym->attr.intrinsic && actual_ok == 0)
882 {
883 gfc_error ("Intrinsic '%s' at %L is not allowed as an "
884 "actual argument", sym->name, &e->where);
885 }
886 else if (sym->attr.intrinsic && actual_ok == 2)
887 /* We need a special case for CHAR, which is the only intrinsic
888 function allowed as actual argument in F2003 and not allowed
889 in F95. */
890 gfc_notify_std (GFC_STD_F2003, "Fortran 2003: CHAR intrinsic "
891 "as actual argument at %L", &e->where);
892
893 if (sym->attr.contained && !sym->attr.use_assoc
894 && sym->ns->proc_name->attr.flavor != FL_MODULE)
895 {
896 gfc_error ("Internal procedure '%s' is not allowed as an "
897 "actual argument at %L", sym->name, &e->where);
898 }
899
900 if (sym->attr.elemental && !sym->attr.intrinsic)
901 {
902 gfc_error ("ELEMENTAL non-INTRINSIC procedure '%s' is not "
903 "allowed as an actual argument at %L", sym->name,
904 &e->where);
905 }
906
907 if (sym->attr.generic)
908 {
909 gfc_error ("GENERIC non-INTRINSIC procedure '%s' is not "
910 "allowed as an actual argument at %L", sym->name,
911 &e->where);
912 }
913
914 /* If the symbol is the function that names the current (or
915 parent) scope, then we really have a variable reference. */
916
917 if (sym->attr.function && sym->result == sym
918 && (sym->ns->proc_name == sym
919 || (sym->ns->parent != NULL
920 && sym->ns->parent->proc_name == sym)))
921 goto got_variable;
922
923 continue;
924 }
925
926 /* See if the name is a module procedure in a parent unit. */
927
928 if (was_declared (sym) || sym->ns->parent == NULL)
929 goto got_variable;
930
931 if (gfc_find_sym_tree (sym->name, sym->ns->parent, 1, &parent_st))
932 {
933 gfc_error ("Symbol '%s' at %L is ambiguous", sym->name, &e->where);
934 return FAILURE;
935 }
936
937 if (parent_st == NULL)
938 goto got_variable;
939
940 sym = parent_st->n.sym;
941 e->symtree = parent_st; /* Point to the right thing. */
942
943 if (sym->attr.flavor == FL_PROCEDURE
944 || sym->attr.intrinsic
945 || sym->attr.external)
946 {
947 continue;
948 }
949
950 got_variable:
951 e->expr_type = EXPR_VARIABLE;
952 e->ts = sym->ts;
953 if (sym->as != NULL)
954 {
955 e->rank = sym->as->rank;
956 e->ref = gfc_get_ref ();
957 e->ref->type = REF_ARRAY;
958 e->ref->u.ar.type = AR_FULL;
959 e->ref->u.ar.as = sym->as;
960 }
961 }
962
963 return SUCCESS;
964 }
965
966
967 /* Do the checks of the actual argument list that are specific to elemental
968 procedures. If called with c == NULL, we have a function, otherwise if
969 expr == NULL, we have a subroutine. */
970 static try
971 resolve_elemental_actual (gfc_expr *expr, gfc_code *c)
972 {
973 gfc_actual_arglist *arg0;
974 gfc_actual_arglist *arg;
975 gfc_symbol *esym = NULL;
976 gfc_intrinsic_sym *isym = NULL;
977 gfc_expr *e = NULL;
978 gfc_intrinsic_arg *iformal = NULL;
979 gfc_formal_arglist *eformal = NULL;
980 bool formal_optional = false;
981 bool set_by_optional = false;
982 int i;
983 int rank = 0;
984
985 /* Is this an elemental procedure? */
986 if (expr && expr->value.function.actual != NULL)
987 {
988 if (expr->value.function.esym != NULL
989 && expr->value.function.esym->attr.elemental)
990 {
991 arg0 = expr->value.function.actual;
992 esym = expr->value.function.esym;
993 }
994 else if (expr->value.function.isym != NULL
995 && expr->value.function.isym->elemental)
996 {
997 arg0 = expr->value.function.actual;
998 isym = expr->value.function.isym;
999 }
1000 else
1001 return SUCCESS;
1002 }
1003 else if (c && c->ext.actual != NULL
1004 && c->symtree->n.sym->attr.elemental)
1005 {
1006 arg0 = c->ext.actual;
1007 esym = c->symtree->n.sym;
1008 }
1009 else
1010 return SUCCESS;
1011
1012 /* The rank of an elemental is the rank of its array argument(s). */
1013 for (arg = arg0; arg; arg = arg->next)
1014 {
1015 if (arg->expr != NULL && arg->expr->rank > 0)
1016 {
1017 rank = arg->expr->rank;
1018 if (arg->expr->expr_type == EXPR_VARIABLE
1019 && arg->expr->symtree->n.sym->attr.optional)
1020 set_by_optional = true;
1021
1022 /* Function specific; set the result rank and shape. */
1023 if (expr)
1024 {
1025 expr->rank = rank;
1026 if (!expr->shape && arg->expr->shape)
1027 {
1028 expr->shape = gfc_get_shape (rank);
1029 for (i = 0; i < rank; i++)
1030 mpz_init_set (expr->shape[i], arg->expr->shape[i]);
1031 }
1032 }
1033 break;
1034 }
1035 }
1036
1037 /* If it is an array, it shall not be supplied as an actual argument
1038 to an elemental procedure unless an array of the same rank is supplied
1039 as an actual argument corresponding to a nonoptional dummy argument of
1040 that elemental procedure(12.4.1.5). */
1041 formal_optional = false;
1042 if (isym)
1043 iformal = isym->formal;
1044 else
1045 eformal = esym->formal;
1046
1047 for (arg = arg0; arg; arg = arg->next)
1048 {
1049 if (eformal)
1050 {
1051 if (eformal->sym && eformal->sym->attr.optional)
1052 formal_optional = true;
1053 eformal = eformal->next;
1054 }
1055 else if (isym && iformal)
1056 {
1057 if (iformal->optional)
1058 formal_optional = true;
1059 iformal = iformal->next;
1060 }
1061 else if (isym)
1062 formal_optional = true;
1063
1064 if (pedantic && arg->expr != NULL
1065 && arg->expr->expr_type == EXPR_VARIABLE
1066 && arg->expr->symtree->n.sym->attr.optional
1067 && formal_optional
1068 && arg->expr->rank
1069 && (set_by_optional || arg->expr->rank != rank)
1070 && !(isym && isym->generic_id == GFC_ISYM_CONVERSION))
1071 {
1072 gfc_warning ("'%s' at %L is an array and OPTIONAL; IF IT IS "
1073 "MISSING, it cannot be the actual argument of an "
1074 "ELEMENTAL procedure unless there is a non-optional"
1075 "argument with the same rank (12.4.1.5)",
1076 arg->expr->symtree->n.sym->name, &arg->expr->where);
1077 return FAILURE;
1078 }
1079 }
1080
1081 for (arg = arg0; arg; arg = arg->next)
1082 {
1083 if (arg->expr == NULL || arg->expr->rank == 0)
1084 continue;
1085
1086 /* Being elemental, the last upper bound of an assumed size array
1087 argument must be present. */
1088 if (resolve_assumed_size_actual (arg->expr))
1089 return FAILURE;
1090
1091 if (expr)
1092 continue;
1093
1094 /* Elemental subroutine array actual arguments must conform. */
1095 if (e != NULL)
1096 {
1097 if (gfc_check_conformance ("elemental subroutine", arg->expr, e)
1098 == FAILURE)
1099 return FAILURE;
1100 }
1101 else
1102 e = arg->expr;
1103 }
1104
1105 return SUCCESS;
1106 }
1107
1108
1109 /* Go through each actual argument in ACTUAL and see if it can be
1110 implemented as an inlined, non-copying intrinsic. FNSYM is the
1111 function being called, or NULL if not known. */
1112
1113 static void
1114 find_noncopying_intrinsics (gfc_symbol * fnsym, gfc_actual_arglist * actual)
1115 {
1116 gfc_actual_arglist *ap;
1117 gfc_expr *expr;
1118
1119 for (ap = actual; ap; ap = ap->next)
1120 if (ap->expr
1121 && (expr = gfc_get_noncopying_intrinsic_argument (ap->expr))
1122 && !gfc_check_fncall_dependency (expr, INTENT_IN, fnsym, actual))
1123 ap->expr->inline_noncopying_intrinsic = 1;
1124 }
1125
1126 /* This function does the checking of references to global procedures
1127 as defined in sections 18.1 and 14.1, respectively, of the Fortran
1128 77 and 95 standards. It checks for a gsymbol for the name, making
1129 one if it does not already exist. If it already exists, then the
1130 reference being resolved must correspond to the type of gsymbol.
1131 Otherwise, the new symbol is equipped with the attributes of the
1132 reference. The corresponding code that is called in creating
1133 global entities is parse.c. */
1134
1135 static void
1136 resolve_global_procedure (gfc_symbol *sym, locus *where, int sub)
1137 {
1138 gfc_gsymbol * gsym;
1139 unsigned int type;
1140
1141 type = sub ? GSYM_SUBROUTINE : GSYM_FUNCTION;
1142
1143 gsym = gfc_get_gsymbol (sym->name);
1144
1145 if ((gsym->type != GSYM_UNKNOWN && gsym->type != type))
1146 global_used (gsym, where);
1147
1148 if (gsym->type == GSYM_UNKNOWN)
1149 {
1150 gsym->type = type;
1151 gsym->where = *where;
1152 }
1153
1154 gsym->used = 1;
1155 }
1156
1157 /************* Function resolution *************/
1158
1159 /* Resolve a function call known to be generic.
1160 Section 14.1.2.4.1. */
1161
1162 static match
1163 resolve_generic_f0 (gfc_expr * expr, gfc_symbol * sym)
1164 {
1165 gfc_symbol *s;
1166
1167 if (sym->attr.generic)
1168 {
1169 s =
1170 gfc_search_interface (sym->generic, 0, &expr->value.function.actual);
1171 if (s != NULL)
1172 {
1173 expr->value.function.name = s->name;
1174 expr->value.function.esym = s;
1175
1176 if (s->ts.type != BT_UNKNOWN)
1177 expr->ts = s->ts;
1178 else if (s->result != NULL && s->result->ts.type != BT_UNKNOWN)
1179 expr->ts = s->result->ts;
1180
1181 if (s->as != NULL)
1182 expr->rank = s->as->rank;
1183 else if (s->result != NULL && s->result->as != NULL)
1184 expr->rank = s->result->as->rank;
1185
1186 return MATCH_YES;
1187 }
1188
1189 /* TODO: Need to search for elemental references in generic interface */
1190 }
1191
1192 if (sym->attr.intrinsic)
1193 return gfc_intrinsic_func_interface (expr, 0);
1194
1195 return MATCH_NO;
1196 }
1197
1198
1199 static try
1200 resolve_generic_f (gfc_expr * expr)
1201 {
1202 gfc_symbol *sym;
1203 match m;
1204
1205 sym = expr->symtree->n.sym;
1206
1207 for (;;)
1208 {
1209 m = resolve_generic_f0 (expr, sym);
1210 if (m == MATCH_YES)
1211 return SUCCESS;
1212 else if (m == MATCH_ERROR)
1213 return FAILURE;
1214
1215 generic:
1216 if (sym->ns->parent == NULL)
1217 break;
1218 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
1219
1220 if (sym == NULL)
1221 break;
1222 if (!generic_sym (sym))
1223 goto generic;
1224 }
1225
1226 /* Last ditch attempt. */
1227
1228 if (!gfc_generic_intrinsic (expr->symtree->n.sym->name))
1229 {
1230 gfc_error ("There is no specific function for the generic '%s' at %L",
1231 expr->symtree->n.sym->name, &expr->where);
1232 return FAILURE;
1233 }
1234
1235 m = gfc_intrinsic_func_interface (expr, 0);
1236 if (m == MATCH_YES)
1237 return SUCCESS;
1238 if (m == MATCH_NO)
1239 gfc_error
1240 ("Generic function '%s' at %L is not consistent with a specific "
1241 "intrinsic interface", expr->symtree->n.sym->name, &expr->where);
1242
1243 return FAILURE;
1244 }
1245
1246
1247 /* Resolve a function call known to be specific. */
1248
1249 static match
1250 resolve_specific_f0 (gfc_symbol * sym, gfc_expr * expr)
1251 {
1252 match m;
1253
1254 if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
1255 {
1256 if (sym->attr.dummy)
1257 {
1258 sym->attr.proc = PROC_DUMMY;
1259 goto found;
1260 }
1261
1262 sym->attr.proc = PROC_EXTERNAL;
1263 goto found;
1264 }
1265
1266 if (sym->attr.proc == PROC_MODULE
1267 || sym->attr.proc == PROC_ST_FUNCTION
1268 || sym->attr.proc == PROC_INTERNAL)
1269 goto found;
1270
1271 if (sym->attr.intrinsic)
1272 {
1273 m = gfc_intrinsic_func_interface (expr, 1);
1274 if (m == MATCH_YES)
1275 return MATCH_YES;
1276 if (m == MATCH_NO)
1277 gfc_error
1278 ("Function '%s' at %L is INTRINSIC but is not compatible with "
1279 "an intrinsic", sym->name, &expr->where);
1280
1281 return MATCH_ERROR;
1282 }
1283
1284 return MATCH_NO;
1285
1286 found:
1287 gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
1288
1289 expr->ts = sym->ts;
1290 expr->value.function.name = sym->name;
1291 expr->value.function.esym = sym;
1292 if (sym->as != NULL)
1293 expr->rank = sym->as->rank;
1294
1295 return MATCH_YES;
1296 }
1297
1298
1299 static try
1300 resolve_specific_f (gfc_expr * expr)
1301 {
1302 gfc_symbol *sym;
1303 match m;
1304
1305 sym = expr->symtree->n.sym;
1306
1307 for (;;)
1308 {
1309 m = resolve_specific_f0 (sym, expr);
1310 if (m == MATCH_YES)
1311 return SUCCESS;
1312 if (m == MATCH_ERROR)
1313 return FAILURE;
1314
1315 if (sym->ns->parent == NULL)
1316 break;
1317
1318 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
1319
1320 if (sym == NULL)
1321 break;
1322 }
1323
1324 gfc_error ("Unable to resolve the specific function '%s' at %L",
1325 expr->symtree->n.sym->name, &expr->where);
1326
1327 return SUCCESS;
1328 }
1329
1330
1331 /* Resolve a procedure call not known to be generic nor specific. */
1332
1333 static try
1334 resolve_unknown_f (gfc_expr * expr)
1335 {
1336 gfc_symbol *sym;
1337 gfc_typespec *ts;
1338
1339 sym = expr->symtree->n.sym;
1340
1341 if (sym->attr.dummy)
1342 {
1343 sym->attr.proc = PROC_DUMMY;
1344 expr->value.function.name = sym->name;
1345 goto set_type;
1346 }
1347
1348 /* See if we have an intrinsic function reference. */
1349
1350 if (gfc_intrinsic_name (sym->name, 0))
1351 {
1352 if (gfc_intrinsic_func_interface (expr, 1) == MATCH_YES)
1353 return SUCCESS;
1354 return FAILURE;
1355 }
1356
1357 /* The reference is to an external name. */
1358
1359 sym->attr.proc = PROC_EXTERNAL;
1360 expr->value.function.name = sym->name;
1361 expr->value.function.esym = expr->symtree->n.sym;
1362
1363 if (sym->as != NULL)
1364 expr->rank = sym->as->rank;
1365
1366 /* Type of the expression is either the type of the symbol or the
1367 default type of the symbol. */
1368
1369 set_type:
1370 gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
1371
1372 if (sym->ts.type != BT_UNKNOWN)
1373 expr->ts = sym->ts;
1374 else
1375 {
1376 ts = gfc_get_default_type (sym, sym->ns);
1377
1378 if (ts->type == BT_UNKNOWN)
1379 {
1380 gfc_error ("Function '%s' at %L has no IMPLICIT type",
1381 sym->name, &expr->where);
1382 return FAILURE;
1383 }
1384 else
1385 expr->ts = *ts;
1386 }
1387
1388 return SUCCESS;
1389 }
1390
1391
1392 /* Figure out if a function reference is pure or not. Also set the name
1393 of the function for a potential error message. Return nonzero if the
1394 function is PURE, zero if not. */
1395
1396 static int
1397 pure_function (gfc_expr * e, const char **name)
1398 {
1399 int pure;
1400
1401 if (e->value.function.esym)
1402 {
1403 pure = gfc_pure (e->value.function.esym);
1404 *name = e->value.function.esym->name;
1405 }
1406 else if (e->value.function.isym)
1407 {
1408 pure = e->value.function.isym->pure
1409 || e->value.function.isym->elemental;
1410 *name = e->value.function.isym->name;
1411 }
1412 else
1413 {
1414 /* Implicit functions are not pure. */
1415 pure = 0;
1416 *name = e->value.function.name;
1417 }
1418
1419 return pure;
1420 }
1421
1422
1423 /* Resolve a function call, which means resolving the arguments, then figuring
1424 out which entity the name refers to. */
1425 /* TODO: Check procedure arguments so that an INTENT(IN) isn't passed
1426 to INTENT(OUT) or INTENT(INOUT). */
1427
1428 static try
1429 resolve_function (gfc_expr * expr)
1430 {
1431 gfc_actual_arglist *arg;
1432 gfc_symbol * sym;
1433 const char *name;
1434 try t;
1435 int temp;
1436
1437 sym = NULL;
1438 if (expr->symtree)
1439 sym = expr->symtree->n.sym;
1440
1441 /* If the procedure is not internal, a statement function or a module
1442 procedure,it must be external and should be checked for usage. */
1443 if (sym && !sym->attr.dummy && !sym->attr.contained
1444 && sym->attr.proc != PROC_ST_FUNCTION
1445 && !sym->attr.use_assoc)
1446 resolve_global_procedure (sym, &expr->where, 0);
1447
1448 /* Switch off assumed size checking and do this again for certain kinds
1449 of procedure, once the procedure itself is resolved. */
1450 need_full_assumed_size++;
1451
1452 if (resolve_actual_arglist (expr->value.function.actual) == FAILURE)
1453 return FAILURE;
1454
1455 /* Resume assumed_size checking. */
1456 need_full_assumed_size--;
1457
1458 if (sym && sym->ts.type == BT_CHARACTER
1459 && sym->ts.cl
1460 && sym->ts.cl->length == NULL
1461 && !sym->attr.dummy
1462 && expr->value.function.esym == NULL
1463 && !sym->attr.contained)
1464 {
1465 /* Internal procedures are taken care of in resolve_contained_fntype. */
1466 gfc_error ("Function '%s' is declared CHARACTER(*) and cannot "
1467 "be used at %L since it is not a dummy argument",
1468 sym->name, &expr->where);
1469 return FAILURE;
1470 }
1471
1472 /* See if function is already resolved. */
1473
1474 if (expr->value.function.name != NULL)
1475 {
1476 if (expr->ts.type == BT_UNKNOWN)
1477 expr->ts = sym->ts;
1478 t = SUCCESS;
1479 }
1480 else
1481 {
1482 /* Apply the rules of section 14.1.2. */
1483
1484 switch (procedure_kind (sym))
1485 {
1486 case PTYPE_GENERIC:
1487 t = resolve_generic_f (expr);
1488 break;
1489
1490 case PTYPE_SPECIFIC:
1491 t = resolve_specific_f (expr);
1492 break;
1493
1494 case PTYPE_UNKNOWN:
1495 t = resolve_unknown_f (expr);
1496 break;
1497
1498 default:
1499 gfc_internal_error ("resolve_function(): bad function type");
1500 }
1501 }
1502
1503 /* If the expression is still a function (it might have simplified),
1504 then we check to see if we are calling an elemental function. */
1505
1506 if (expr->expr_type != EXPR_FUNCTION)
1507 return t;
1508
1509 temp = need_full_assumed_size;
1510 need_full_assumed_size = 0;
1511
1512 if (resolve_elemental_actual (expr, NULL) == FAILURE)
1513 return FAILURE;
1514
1515 if (omp_workshare_flag
1516 && expr->value.function.esym
1517 && ! gfc_elemental (expr->value.function.esym))
1518 {
1519 gfc_error ("User defined non-ELEMENTAL function '%s' at %L not allowed"
1520 " in WORKSHARE construct", expr->value.function.esym->name,
1521 &expr->where);
1522 t = FAILURE;
1523 }
1524
1525 else if (expr->value.function.actual != NULL
1526 && expr->value.function.isym != NULL
1527 && expr->value.function.isym->generic_id != GFC_ISYM_LBOUND
1528 && expr->value.function.isym->generic_id != GFC_ISYM_LOC
1529 && expr->value.function.isym->generic_id != GFC_ISYM_PRESENT)
1530 {
1531 /* Array intrinsics must also have the last upper bound of an
1532 assumed size array argument. UBOUND and SIZE have to be
1533 excluded from the check if the second argument is anything
1534 than a constant. */
1535 int inquiry;
1536 inquiry = expr->value.function.isym->generic_id == GFC_ISYM_UBOUND
1537 || expr->value.function.isym->generic_id == GFC_ISYM_SIZE;
1538
1539 for (arg = expr->value.function.actual; arg; arg = arg->next)
1540 {
1541 if (inquiry && arg->next != NULL && arg->next->expr
1542 && arg->next->expr->expr_type != EXPR_CONSTANT)
1543 break;
1544
1545 if (arg->expr != NULL
1546 && arg->expr->rank > 0
1547 && resolve_assumed_size_actual (arg->expr))
1548 return FAILURE;
1549 }
1550 }
1551
1552 need_full_assumed_size = temp;
1553
1554 if (!pure_function (expr, &name) && name)
1555 {
1556 if (forall_flag)
1557 {
1558 gfc_error
1559 ("reference to non-PURE function '%s' at %L inside a "
1560 "FORALL %s", name, &expr->where, forall_flag == 2 ?
1561 "mask" : "block");
1562 t = FAILURE;
1563 }
1564 else if (gfc_pure (NULL))
1565 {
1566 gfc_error ("Function reference to '%s' at %L is to a non-PURE "
1567 "procedure within a PURE procedure", name, &expr->where);
1568 t = FAILURE;
1569 }
1570 }
1571
1572 /* Functions without the RECURSIVE attribution are not allowed to
1573 * call themselves. */
1574 if (expr->value.function.esym && !expr->value.function.esym->attr.recursive)
1575 {
1576 gfc_symbol *esym, *proc;
1577 esym = expr->value.function.esym;
1578 proc = gfc_current_ns->proc_name;
1579 if (esym == proc)
1580 {
1581 gfc_error ("Function '%s' at %L cannot call itself, as it is not "
1582 "RECURSIVE", name, &expr->where);
1583 t = FAILURE;
1584 }
1585
1586 if (esym->attr.entry && esym->ns->entries && proc->ns->entries
1587 && esym->ns->entries->sym == proc->ns->entries->sym)
1588 {
1589 gfc_error ("Call to ENTRY '%s' at %L is recursive, but function "
1590 "'%s' is not declared as RECURSIVE",
1591 esym->name, &expr->where, esym->ns->entries->sym->name);
1592 t = FAILURE;
1593 }
1594 }
1595
1596 /* Character lengths of use associated functions may contains references to
1597 symbols not referenced from the current program unit otherwise. Make sure
1598 those symbols are marked as referenced. */
1599
1600 if (expr->ts.type == BT_CHARACTER && expr->value.function.esym
1601 && expr->value.function.esym->attr.use_assoc)
1602 {
1603 gfc_expr_set_symbols_referenced (expr->ts.cl->length);
1604 }
1605
1606 if (t == SUCCESS)
1607 find_noncopying_intrinsics (expr->value.function.esym,
1608 expr->value.function.actual);
1609 return t;
1610 }
1611
1612
1613 /************* Subroutine resolution *************/
1614
1615 static void
1616 pure_subroutine (gfc_code * c, gfc_symbol * sym)
1617 {
1618
1619 if (gfc_pure (sym))
1620 return;
1621
1622 if (forall_flag)
1623 gfc_error ("Subroutine call to '%s' in FORALL block at %L is not PURE",
1624 sym->name, &c->loc);
1625 else if (gfc_pure (NULL))
1626 gfc_error ("Subroutine call to '%s' at %L is not PURE", sym->name,
1627 &c->loc);
1628 }
1629
1630
1631 static match
1632 resolve_generic_s0 (gfc_code * c, gfc_symbol * sym)
1633 {
1634 gfc_symbol *s;
1635
1636 if (sym->attr.generic)
1637 {
1638 s = gfc_search_interface (sym->generic, 1, &c->ext.actual);
1639 if (s != NULL)
1640 {
1641 c->resolved_sym = s;
1642 pure_subroutine (c, s);
1643 return MATCH_YES;
1644 }
1645
1646 /* TODO: Need to search for elemental references in generic interface. */
1647 }
1648
1649 if (sym->attr.intrinsic)
1650 return gfc_intrinsic_sub_interface (c, 0);
1651
1652 return MATCH_NO;
1653 }
1654
1655
1656 static try
1657 resolve_generic_s (gfc_code * c)
1658 {
1659 gfc_symbol *sym;
1660 match m;
1661
1662 sym = c->symtree->n.sym;
1663
1664 for (;;)
1665 {
1666 m = resolve_generic_s0 (c, sym);
1667 if (m == MATCH_YES)
1668 return SUCCESS;
1669 else if (m == MATCH_ERROR)
1670 return FAILURE;
1671
1672 generic:
1673 if (sym->ns->parent == NULL)
1674 break;
1675 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
1676
1677 if (sym == NULL)
1678 break;
1679 if (!generic_sym (sym))
1680 goto generic;
1681 }
1682
1683 /* Last ditch attempt. */
1684 sym = c->symtree->n.sym;
1685 if (!gfc_generic_intrinsic (sym->name))
1686 {
1687 gfc_error
1688 ("There is no specific subroutine for the generic '%s' at %L",
1689 sym->name, &c->loc);
1690 return FAILURE;
1691 }
1692
1693 m = gfc_intrinsic_sub_interface (c, 0);
1694 if (m == MATCH_YES)
1695 return SUCCESS;
1696 if (m == MATCH_NO)
1697 gfc_error ("Generic subroutine '%s' at %L is not consistent with an "
1698 "intrinsic subroutine interface", sym->name, &c->loc);
1699
1700 return FAILURE;
1701 }
1702
1703
1704 /* Resolve a subroutine call known to be specific. */
1705
1706 static match
1707 resolve_specific_s0 (gfc_code * c, gfc_symbol * sym)
1708 {
1709 match m;
1710
1711 if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
1712 {
1713 if (sym->attr.dummy)
1714 {
1715 sym->attr.proc = PROC_DUMMY;
1716 goto found;
1717 }
1718
1719 sym->attr.proc = PROC_EXTERNAL;
1720 goto found;
1721 }
1722
1723 if (sym->attr.proc == PROC_MODULE || sym->attr.proc == PROC_INTERNAL)
1724 goto found;
1725
1726 if (sym->attr.intrinsic)
1727 {
1728 m = gfc_intrinsic_sub_interface (c, 1);
1729 if (m == MATCH_YES)
1730 return MATCH_YES;
1731 if (m == MATCH_NO)
1732 gfc_error ("Subroutine '%s' at %L is INTRINSIC but is not compatible "
1733 "with an intrinsic", sym->name, &c->loc);
1734
1735 return MATCH_ERROR;
1736 }
1737
1738 return MATCH_NO;
1739
1740 found:
1741 gfc_procedure_use (sym, &c->ext.actual, &c->loc);
1742
1743 c->resolved_sym = sym;
1744 pure_subroutine (c, sym);
1745
1746 return MATCH_YES;
1747 }
1748
1749
1750 static try
1751 resolve_specific_s (gfc_code * c)
1752 {
1753 gfc_symbol *sym;
1754 match m;
1755
1756 sym = c->symtree->n.sym;
1757
1758 for (;;)
1759 {
1760 m = resolve_specific_s0 (c, sym);
1761 if (m == MATCH_YES)
1762 return SUCCESS;
1763 if (m == MATCH_ERROR)
1764 return FAILURE;
1765
1766 if (sym->ns->parent == NULL)
1767 break;
1768
1769 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
1770
1771 if (sym == NULL)
1772 break;
1773 }
1774
1775 sym = c->symtree->n.sym;
1776 gfc_error ("Unable to resolve the specific subroutine '%s' at %L",
1777 sym->name, &c->loc);
1778
1779 return FAILURE;
1780 }
1781
1782
1783 /* Resolve a subroutine call not known to be generic nor specific. */
1784
1785 static try
1786 resolve_unknown_s (gfc_code * c)
1787 {
1788 gfc_symbol *sym;
1789
1790 sym = c->symtree->n.sym;
1791
1792 if (sym->attr.dummy)
1793 {
1794 sym->attr.proc = PROC_DUMMY;
1795 goto found;
1796 }
1797
1798 /* See if we have an intrinsic function reference. */
1799
1800 if (gfc_intrinsic_name (sym->name, 1))
1801 {
1802 if (gfc_intrinsic_sub_interface (c, 1) == MATCH_YES)
1803 return SUCCESS;
1804 return FAILURE;
1805 }
1806
1807 /* The reference is to an external name. */
1808
1809 found:
1810 gfc_procedure_use (sym, &c->ext.actual, &c->loc);
1811
1812 c->resolved_sym = sym;
1813
1814 pure_subroutine (c, sym);
1815
1816 return SUCCESS;
1817 }
1818
1819
1820 /* Resolve a subroutine call. Although it was tempting to use the same code
1821 for functions, subroutines and functions are stored differently and this
1822 makes things awkward. */
1823
1824 static try
1825 resolve_call (gfc_code * c)
1826 {
1827 try t;
1828
1829 if (c->symtree && c->symtree->n.sym
1830 && c->symtree->n.sym->ts.type != BT_UNKNOWN)
1831 {
1832 gfc_error ("'%s' at %L has a type, which is not consistent with "
1833 "the CALL at %L", c->symtree->n.sym->name,
1834 &c->symtree->n.sym->declared_at, &c->loc);
1835 return FAILURE;
1836 }
1837
1838 /* If the procedure is not internal or module, it must be external and
1839 should be checked for usage. */
1840 if (c->symtree && c->symtree->n.sym
1841 && !c->symtree->n.sym->attr.dummy
1842 && !c->symtree->n.sym->attr.contained
1843 && !c->symtree->n.sym->attr.use_assoc)
1844 resolve_global_procedure (c->symtree->n.sym, &c->loc, 1);
1845
1846 /* Subroutines without the RECURSIVE attribution are not allowed to
1847 * call themselves. */
1848 if (c->symtree && c->symtree->n.sym && !c->symtree->n.sym->attr.recursive)
1849 {
1850 gfc_symbol *csym, *proc;
1851 csym = c->symtree->n.sym;
1852 proc = gfc_current_ns->proc_name;
1853 if (csym == proc)
1854 {
1855 gfc_error ("SUBROUTINE '%s' at %L cannot call itself, as it is not "
1856 "RECURSIVE", csym->name, &c->loc);
1857 t = FAILURE;
1858 }
1859
1860 if (csym->attr.entry && csym->ns->entries && proc->ns->entries
1861 && csym->ns->entries->sym == proc->ns->entries->sym)
1862 {
1863 gfc_error ("Call to ENTRY '%s' at %L is recursive, but subroutine "
1864 "'%s' is not declared as RECURSIVE",
1865 csym->name, &c->loc, csym->ns->entries->sym->name);
1866 t = FAILURE;
1867 }
1868 }
1869
1870 /* Switch off assumed size checking and do this again for certain kinds
1871 of procedure, once the procedure itself is resolved. */
1872 need_full_assumed_size++;
1873
1874 if (resolve_actual_arglist (c->ext.actual) == FAILURE)
1875 return FAILURE;
1876
1877 /* Resume assumed_size checking. */
1878 need_full_assumed_size--;
1879
1880
1881 t = SUCCESS;
1882 if (c->resolved_sym == NULL)
1883 switch (procedure_kind (c->symtree->n.sym))
1884 {
1885 case PTYPE_GENERIC:
1886 t = resolve_generic_s (c);
1887 break;
1888
1889 case PTYPE_SPECIFIC:
1890 t = resolve_specific_s (c);
1891 break;
1892
1893 case PTYPE_UNKNOWN:
1894 t = resolve_unknown_s (c);
1895 break;
1896
1897 default:
1898 gfc_internal_error ("resolve_subroutine(): bad function type");
1899 }
1900
1901 /* Some checks of elemental subroutine actual arguments. */
1902 if (resolve_elemental_actual (NULL, c) == FAILURE)
1903 return FAILURE;
1904
1905 if (t == SUCCESS)
1906 find_noncopying_intrinsics (c->resolved_sym, c->ext.actual);
1907 return t;
1908 }
1909
1910 /* Compare the shapes of two arrays that have non-NULL shapes. If both
1911 op1->shape and op2->shape are non-NULL return SUCCESS if their shapes
1912 match. If both op1->shape and op2->shape are non-NULL return FAILURE
1913 if their shapes do not match. If either op1->shape or op2->shape is
1914 NULL, return SUCCESS. */
1915
1916 static try
1917 compare_shapes (gfc_expr * op1, gfc_expr * op2)
1918 {
1919 try t;
1920 int i;
1921
1922 t = SUCCESS;
1923
1924 if (op1->shape != NULL && op2->shape != NULL)
1925 {
1926 for (i = 0; i < op1->rank; i++)
1927 {
1928 if (mpz_cmp (op1->shape[i], op2->shape[i]) != 0)
1929 {
1930 gfc_error ("Shapes for operands at %L and %L are not conformable",
1931 &op1->where, &op2->where);
1932 t = FAILURE;
1933 break;
1934 }
1935 }
1936 }
1937
1938 return t;
1939 }
1940
1941 /* Resolve an operator expression node. This can involve replacing the
1942 operation with a user defined function call. */
1943
1944 static try
1945 resolve_operator (gfc_expr * e)
1946 {
1947 gfc_expr *op1, *op2;
1948 char msg[200];
1949 try t;
1950
1951 /* Resolve all subnodes-- give them types. */
1952
1953 switch (e->value.op.operator)
1954 {
1955 default:
1956 if (gfc_resolve_expr (e->value.op.op2) == FAILURE)
1957 return FAILURE;
1958
1959 /* Fall through... */
1960
1961 case INTRINSIC_NOT:
1962 case INTRINSIC_UPLUS:
1963 case INTRINSIC_UMINUS:
1964 case INTRINSIC_PARENTHESES:
1965 if (gfc_resolve_expr (e->value.op.op1) == FAILURE)
1966 return FAILURE;
1967 break;
1968 }
1969
1970 /* Typecheck the new node. */
1971
1972 op1 = e->value.op.op1;
1973 op2 = e->value.op.op2;
1974
1975 switch (e->value.op.operator)
1976 {
1977 case INTRINSIC_UPLUS:
1978 case INTRINSIC_UMINUS:
1979 if (op1->ts.type == BT_INTEGER
1980 || op1->ts.type == BT_REAL
1981 || op1->ts.type == BT_COMPLEX)
1982 {
1983 e->ts = op1->ts;
1984 break;
1985 }
1986
1987 sprintf (msg, _("Operand of unary numeric operator '%s' at %%L is %s"),
1988 gfc_op2string (e->value.op.operator), gfc_typename (&e->ts));
1989 goto bad_op;
1990
1991 case INTRINSIC_PLUS:
1992 case INTRINSIC_MINUS:
1993 case INTRINSIC_TIMES:
1994 case INTRINSIC_DIVIDE:
1995 case INTRINSIC_POWER:
1996 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
1997 {
1998 gfc_type_convert_binary (e);
1999 break;
2000 }
2001
2002 sprintf (msg,
2003 _("Operands of binary numeric operator '%s' at %%L are %s/%s"),
2004 gfc_op2string (e->value.op.operator), gfc_typename (&op1->ts),
2005 gfc_typename (&op2->ts));
2006 goto bad_op;
2007
2008 case INTRINSIC_CONCAT:
2009 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER)
2010 {
2011 e->ts.type = BT_CHARACTER;
2012 e->ts.kind = op1->ts.kind;
2013 break;
2014 }
2015
2016 sprintf (msg,
2017 _("Operands of string concatenation operator at %%L are %s/%s"),
2018 gfc_typename (&op1->ts), gfc_typename (&op2->ts));
2019 goto bad_op;
2020
2021 case INTRINSIC_AND:
2022 case INTRINSIC_OR:
2023 case INTRINSIC_EQV:
2024 case INTRINSIC_NEQV:
2025 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
2026 {
2027 e->ts.type = BT_LOGICAL;
2028 e->ts.kind = gfc_kind_max (op1, op2);
2029 if (op1->ts.kind < e->ts.kind)
2030 gfc_convert_type (op1, &e->ts, 2);
2031 else if (op2->ts.kind < e->ts.kind)
2032 gfc_convert_type (op2, &e->ts, 2);
2033 break;
2034 }
2035
2036 sprintf (msg, _("Operands of logical operator '%s' at %%L are %s/%s"),
2037 gfc_op2string (e->value.op.operator), gfc_typename (&op1->ts),
2038 gfc_typename (&op2->ts));
2039
2040 goto bad_op;
2041
2042 case INTRINSIC_NOT:
2043 if (op1->ts.type == BT_LOGICAL)
2044 {
2045 e->ts.type = BT_LOGICAL;
2046 e->ts.kind = op1->ts.kind;
2047 break;
2048 }
2049
2050 sprintf (msg, _("Operand of .NOT. operator at %%L is %s"),
2051 gfc_typename (&op1->ts));
2052 goto bad_op;
2053
2054 case INTRINSIC_GT:
2055 case INTRINSIC_GE:
2056 case INTRINSIC_LT:
2057 case INTRINSIC_LE:
2058 if (op1->ts.type == BT_COMPLEX || op2->ts.type == BT_COMPLEX)
2059 {
2060 strcpy (msg, _("COMPLEX quantities cannot be compared at %L"));
2061 goto bad_op;
2062 }
2063
2064 /* Fall through... */
2065
2066 case INTRINSIC_EQ:
2067 case INTRINSIC_NE:
2068 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER)
2069 {
2070 e->ts.type = BT_LOGICAL;
2071 e->ts.kind = gfc_default_logical_kind;
2072 break;
2073 }
2074
2075 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
2076 {
2077 gfc_type_convert_binary (e);
2078
2079 e->ts.type = BT_LOGICAL;
2080 e->ts.kind = gfc_default_logical_kind;
2081 break;
2082 }
2083
2084 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
2085 sprintf (msg,
2086 _("Logicals at %%L must be compared with %s instead of %s"),
2087 e->value.op.operator == INTRINSIC_EQ ? ".EQV." : ".NEQV.",
2088 gfc_op2string (e->value.op.operator));
2089 else
2090 sprintf (msg,
2091 _("Operands of comparison operator '%s' at %%L are %s/%s"),
2092 gfc_op2string (e->value.op.operator), gfc_typename (&op1->ts),
2093 gfc_typename (&op2->ts));
2094
2095 goto bad_op;
2096
2097 case INTRINSIC_USER:
2098 if (op2 == NULL)
2099 sprintf (msg, _("Operand of user operator '%s' at %%L is %s"),
2100 e->value.op.uop->name, gfc_typename (&op1->ts));
2101 else
2102 sprintf (msg, _("Operands of user operator '%s' at %%L are %s/%s"),
2103 e->value.op.uop->name, gfc_typename (&op1->ts),
2104 gfc_typename (&op2->ts));
2105
2106 goto bad_op;
2107
2108 case INTRINSIC_PARENTHESES:
2109 break;
2110
2111 default:
2112 gfc_internal_error ("resolve_operator(): Bad intrinsic");
2113 }
2114
2115 /* Deal with arrayness of an operand through an operator. */
2116
2117 t = SUCCESS;
2118
2119 switch (e->value.op.operator)
2120 {
2121 case INTRINSIC_PLUS:
2122 case INTRINSIC_MINUS:
2123 case INTRINSIC_TIMES:
2124 case INTRINSIC_DIVIDE:
2125 case INTRINSIC_POWER:
2126 case INTRINSIC_CONCAT:
2127 case INTRINSIC_AND:
2128 case INTRINSIC_OR:
2129 case INTRINSIC_EQV:
2130 case INTRINSIC_NEQV:
2131 case INTRINSIC_EQ:
2132 case INTRINSIC_NE:
2133 case INTRINSIC_GT:
2134 case INTRINSIC_GE:
2135 case INTRINSIC_LT:
2136 case INTRINSIC_LE:
2137
2138 if (op1->rank == 0 && op2->rank == 0)
2139 e->rank = 0;
2140
2141 if (op1->rank == 0 && op2->rank != 0)
2142 {
2143 e->rank = op2->rank;
2144
2145 if (e->shape == NULL)
2146 e->shape = gfc_copy_shape (op2->shape, op2->rank);
2147 }
2148
2149 if (op1->rank != 0 && op2->rank == 0)
2150 {
2151 e->rank = op1->rank;
2152
2153 if (e->shape == NULL)
2154 e->shape = gfc_copy_shape (op1->shape, op1->rank);
2155 }
2156
2157 if (op1->rank != 0 && op2->rank != 0)
2158 {
2159 if (op1->rank == op2->rank)
2160 {
2161 e->rank = op1->rank;
2162 if (e->shape == NULL)
2163 {
2164 t = compare_shapes(op1, op2);
2165 if (t == FAILURE)
2166 e->shape = NULL;
2167 else
2168 e->shape = gfc_copy_shape (op1->shape, op1->rank);
2169 }
2170 }
2171 else
2172 {
2173 gfc_error ("Inconsistent ranks for operator at %L and %L",
2174 &op1->where, &op2->where);
2175 t = FAILURE;
2176
2177 /* Allow higher level expressions to work. */
2178 e->rank = 0;
2179 }
2180 }
2181
2182 break;
2183
2184 case INTRINSIC_NOT:
2185 case INTRINSIC_UPLUS:
2186 case INTRINSIC_UMINUS:
2187 case INTRINSIC_PARENTHESES:
2188 e->rank = op1->rank;
2189
2190 if (e->shape == NULL)
2191 e->shape = gfc_copy_shape (op1->shape, op1->rank);
2192
2193 /* Simply copy arrayness attribute */
2194 break;
2195
2196 default:
2197 break;
2198 }
2199
2200 /* Attempt to simplify the expression. */
2201 if (t == SUCCESS)
2202 t = gfc_simplify_expr (e, 0);
2203 return t;
2204
2205 bad_op:
2206
2207 if (gfc_extend_expr (e) == SUCCESS)
2208 return SUCCESS;
2209
2210 gfc_error (msg, &e->where);
2211
2212 return FAILURE;
2213 }
2214
2215
2216 /************** Array resolution subroutines **************/
2217
2218
2219 typedef enum
2220 { CMP_LT, CMP_EQ, CMP_GT, CMP_UNKNOWN }
2221 comparison;
2222
2223 /* Compare two integer expressions. */
2224
2225 static comparison
2226 compare_bound (gfc_expr * a, gfc_expr * b)
2227 {
2228 int i;
2229
2230 if (a == NULL || a->expr_type != EXPR_CONSTANT
2231 || b == NULL || b->expr_type != EXPR_CONSTANT)
2232 return CMP_UNKNOWN;
2233
2234 if (a->ts.type != BT_INTEGER || b->ts.type != BT_INTEGER)
2235 gfc_internal_error ("compare_bound(): Bad expression");
2236
2237 i = mpz_cmp (a->value.integer, b->value.integer);
2238
2239 if (i < 0)
2240 return CMP_LT;
2241 if (i > 0)
2242 return CMP_GT;
2243 return CMP_EQ;
2244 }
2245
2246
2247 /* Compare an integer expression with an integer. */
2248
2249 static comparison
2250 compare_bound_int (gfc_expr * a, int b)
2251 {
2252 int i;
2253
2254 if (a == NULL || a->expr_type != EXPR_CONSTANT)
2255 return CMP_UNKNOWN;
2256
2257 if (a->ts.type != BT_INTEGER)
2258 gfc_internal_error ("compare_bound_int(): Bad expression");
2259
2260 i = mpz_cmp_si (a->value.integer, b);
2261
2262 if (i < 0)
2263 return CMP_LT;
2264 if (i > 0)
2265 return CMP_GT;
2266 return CMP_EQ;
2267 }
2268
2269
2270 /* Compare an integer expression with a mpz_t. */
2271
2272 static comparison
2273 compare_bound_mpz_t (gfc_expr * a, mpz_t b)
2274 {
2275 int i;
2276
2277 if (a == NULL || a->expr_type != EXPR_CONSTANT)
2278 return CMP_UNKNOWN;
2279
2280 if (a->ts.type != BT_INTEGER)
2281 gfc_internal_error ("compare_bound_int(): Bad expression");
2282
2283 i = mpz_cmp (a->value.integer, b);
2284
2285 if (i < 0)
2286 return CMP_LT;
2287 if (i > 0)
2288 return CMP_GT;
2289 return CMP_EQ;
2290 }
2291
2292
2293 /* Compute the last value of a sequence given by a triplet.
2294 Return 0 if it wasn't able to compute the last value, or if the
2295 sequence if empty, and 1 otherwise. */
2296
2297 static int
2298 compute_last_value_for_triplet (gfc_expr * start, gfc_expr * end,
2299 gfc_expr * stride, mpz_t last)
2300 {
2301 mpz_t rem;
2302
2303 if (start == NULL || start->expr_type != EXPR_CONSTANT
2304 || end == NULL || end->expr_type != EXPR_CONSTANT
2305 || (stride != NULL && stride->expr_type != EXPR_CONSTANT))
2306 return 0;
2307
2308 if (start->ts.type != BT_INTEGER || end->ts.type != BT_INTEGER
2309 || (stride != NULL && stride->ts.type != BT_INTEGER))
2310 return 0;
2311
2312 if (stride == NULL || compare_bound_int(stride, 1) == CMP_EQ)
2313 {
2314 if (compare_bound (start, end) == CMP_GT)
2315 return 0;
2316 mpz_set (last, end->value.integer);
2317 return 1;
2318 }
2319
2320 if (compare_bound_int (stride, 0) == CMP_GT)
2321 {
2322 /* Stride is positive */
2323 if (mpz_cmp (start->value.integer, end->value.integer) > 0)
2324 return 0;
2325 }
2326 else
2327 {
2328 /* Stride is negative */
2329 if (mpz_cmp (start->value.integer, end->value.integer) < 0)
2330 return 0;
2331 }
2332
2333 mpz_init (rem);
2334 mpz_sub (rem, end->value.integer, start->value.integer);
2335 mpz_tdiv_r (rem, rem, stride->value.integer);
2336 mpz_sub (last, end->value.integer, rem);
2337 mpz_clear (rem);
2338
2339 return 1;
2340 }
2341
2342
2343 /* Compare a single dimension of an array reference to the array
2344 specification. */
2345
2346 static try
2347 check_dimension (int i, gfc_array_ref * ar, gfc_array_spec * as)
2348 {
2349 mpz_t last_value;
2350
2351 /* Given start, end and stride values, calculate the minimum and
2352 maximum referenced indexes. */
2353
2354 switch (ar->type)
2355 {
2356 case AR_FULL:
2357 break;
2358
2359 case AR_ELEMENT:
2360 if (compare_bound (ar->start[i], as->lower[i]) == CMP_LT)
2361 goto bound;
2362 if (compare_bound (ar->start[i], as->upper[i]) == CMP_GT)
2363 goto bound;
2364
2365 break;
2366
2367 case AR_SECTION:
2368 if (compare_bound_int (ar->stride[i], 0) == CMP_EQ)
2369 {
2370 gfc_error ("Illegal stride of zero at %L", &ar->c_where[i]);
2371 return FAILURE;
2372 }
2373
2374 #define AR_START (ar->start[i] ? ar->start[i] : as->lower[i])
2375 #define AR_END (ar->end[i] ? ar->end[i] : as->upper[i])
2376
2377 if (compare_bound (AR_START, AR_END) == CMP_EQ
2378 && (compare_bound (AR_START, as->lower[i]) == CMP_LT
2379 || compare_bound (AR_START, as->upper[i]) == CMP_GT))
2380 goto bound;
2381
2382 if (((compare_bound_int (ar->stride[i], 0) == CMP_GT
2383 || ar->stride[i] == NULL)
2384 && compare_bound (AR_START, AR_END) != CMP_GT)
2385 || (compare_bound_int (ar->stride[i], 0) == CMP_LT
2386 && compare_bound (AR_START, AR_END) != CMP_LT))
2387 {
2388 if (compare_bound (AR_START, as->lower[i]) == CMP_LT)
2389 goto bound;
2390 if (compare_bound (AR_START, as->upper[i]) == CMP_GT)
2391 goto bound;
2392 }
2393
2394 mpz_init (last_value);
2395 if (compute_last_value_for_triplet (AR_START, AR_END, ar->stride[i],
2396 last_value))
2397 {
2398 if (compare_bound_mpz_t (as->lower[i], last_value) == CMP_GT
2399 || compare_bound_mpz_t (as->upper[i], last_value) == CMP_LT)
2400 {
2401 mpz_clear (last_value);
2402 goto bound;
2403 }
2404 }
2405 mpz_clear (last_value);
2406
2407 #undef AR_START
2408 #undef AR_END
2409
2410 break;
2411
2412 default:
2413 gfc_internal_error ("check_dimension(): Bad array reference");
2414 }
2415
2416 return SUCCESS;
2417
2418 bound:
2419 gfc_warning ("Array reference at %L is out of bounds", &ar->c_where[i]);
2420 return SUCCESS;
2421 }
2422
2423
2424 /* Compare an array reference with an array specification. */
2425
2426 static try
2427 compare_spec_to_ref (gfc_array_ref * ar)
2428 {
2429 gfc_array_spec *as;
2430 int i;
2431
2432 as = ar->as;
2433 i = as->rank - 1;
2434 /* TODO: Full array sections are only allowed as actual parameters. */
2435 if (as->type == AS_ASSUMED_SIZE
2436 && (/*ar->type == AR_FULL
2437 ||*/ (ar->type == AR_SECTION
2438 && ar->dimen_type[i] == DIMEN_RANGE && ar->end[i] == NULL)))
2439 {
2440 gfc_error ("Rightmost upper bound of assumed size array section"
2441 " not specified at %L", &ar->where);
2442 return FAILURE;
2443 }
2444
2445 if (ar->type == AR_FULL)
2446 return SUCCESS;
2447
2448 if (as->rank != ar->dimen)
2449 {
2450 gfc_error ("Rank mismatch in array reference at %L (%d/%d)",
2451 &ar->where, ar->dimen, as->rank);
2452 return FAILURE;
2453 }
2454
2455 for (i = 0; i < as->rank; i++)
2456 if (check_dimension (i, ar, as) == FAILURE)
2457 return FAILURE;
2458
2459 return SUCCESS;
2460 }
2461
2462
2463 /* Resolve one part of an array index. */
2464
2465 try
2466 gfc_resolve_index (gfc_expr * index, int check_scalar)
2467 {
2468 gfc_typespec ts;
2469
2470 if (index == NULL)
2471 return SUCCESS;
2472
2473 if (gfc_resolve_expr (index) == FAILURE)
2474 return FAILURE;
2475
2476 if (check_scalar && index->rank != 0)
2477 {
2478 gfc_error ("Array index at %L must be scalar", &index->where);
2479 return FAILURE;
2480 }
2481
2482 if (index->ts.type != BT_INTEGER && index->ts.type != BT_REAL)
2483 {
2484 gfc_error ("Array index at %L must be of INTEGER type",
2485 &index->where);
2486 return FAILURE;
2487 }
2488
2489 if (index->ts.type == BT_REAL)
2490 if (gfc_notify_std (GFC_STD_LEGACY, "Extension: REAL array index at %L",
2491 &index->where) == FAILURE)
2492 return FAILURE;
2493
2494 if (index->ts.kind != gfc_index_integer_kind
2495 || index->ts.type != BT_INTEGER)
2496 {
2497 gfc_clear_ts (&ts);
2498 ts.type = BT_INTEGER;
2499 ts.kind = gfc_index_integer_kind;
2500
2501 gfc_convert_type_warn (index, &ts, 2, 0);
2502 }
2503
2504 return SUCCESS;
2505 }
2506
2507 /* Resolve a dim argument to an intrinsic function. */
2508
2509 try
2510 gfc_resolve_dim_arg (gfc_expr *dim)
2511 {
2512 if (dim == NULL)
2513 return SUCCESS;
2514
2515 if (gfc_resolve_expr (dim) == FAILURE)
2516 return FAILURE;
2517
2518 if (dim->rank != 0)
2519 {
2520 gfc_error ("Argument dim at %L must be scalar", &dim->where);
2521 return FAILURE;
2522
2523 }
2524 if (dim->ts.type != BT_INTEGER)
2525 {
2526 gfc_error ("Argument dim at %L must be of INTEGER type", &dim->where);
2527 return FAILURE;
2528 }
2529 if (dim->ts.kind != gfc_index_integer_kind)
2530 {
2531 gfc_typespec ts;
2532
2533 ts.type = BT_INTEGER;
2534 ts.kind = gfc_index_integer_kind;
2535
2536 gfc_convert_type_warn (dim, &ts, 2, 0);
2537 }
2538
2539 return SUCCESS;
2540 }
2541
2542 /* Given an expression that contains array references, update those array
2543 references to point to the right array specifications. While this is
2544 filled in during matching, this information is difficult to save and load
2545 in a module, so we take care of it here.
2546
2547 The idea here is that the original array reference comes from the
2548 base symbol. We traverse the list of reference structures, setting
2549 the stored reference to references. Component references can
2550 provide an additional array specification. */
2551
2552 static void
2553 find_array_spec (gfc_expr * e)
2554 {
2555 gfc_array_spec *as;
2556 gfc_component *c;
2557 gfc_symbol *derived;
2558 gfc_ref *ref;
2559
2560 as = e->symtree->n.sym->as;
2561 derived = NULL;
2562
2563 for (ref = e->ref; ref; ref = ref->next)
2564 switch (ref->type)
2565 {
2566 case REF_ARRAY:
2567 if (as == NULL)
2568 gfc_internal_error ("find_array_spec(): Missing spec");
2569
2570 ref->u.ar.as = as;
2571 as = NULL;
2572 break;
2573
2574 case REF_COMPONENT:
2575 if (derived == NULL)
2576 derived = e->symtree->n.sym->ts.derived;
2577
2578 c = derived->components;
2579
2580 for (; c; c = c->next)
2581 if (c == ref->u.c.component)
2582 {
2583 /* Track the sequence of component references. */
2584 if (c->ts.type == BT_DERIVED)
2585 derived = c->ts.derived;
2586 break;
2587 }
2588
2589 if (c == NULL)
2590 gfc_internal_error ("find_array_spec(): Component not found");
2591
2592 if (c->dimension)
2593 {
2594 if (as != NULL)
2595 gfc_internal_error ("find_array_spec(): unused as(1)");
2596 as = c->as;
2597 }
2598
2599 break;
2600
2601 case REF_SUBSTRING:
2602 break;
2603 }
2604
2605 if (as != NULL)
2606 gfc_internal_error ("find_array_spec(): unused as(2)");
2607 }
2608
2609
2610 /* Resolve an array reference. */
2611
2612 static try
2613 resolve_array_ref (gfc_array_ref * ar)
2614 {
2615 int i, check_scalar;
2616 gfc_expr *e;
2617
2618 for (i = 0; i < ar->dimen; i++)
2619 {
2620 check_scalar = ar->dimen_type[i] == DIMEN_RANGE;
2621
2622 if (gfc_resolve_index (ar->start[i], check_scalar) == FAILURE)
2623 return FAILURE;
2624 if (gfc_resolve_index (ar->end[i], check_scalar) == FAILURE)
2625 return FAILURE;
2626 if (gfc_resolve_index (ar->stride[i], check_scalar) == FAILURE)
2627 return FAILURE;
2628
2629 e = ar->start[i];
2630
2631 if (ar->dimen_type[i] == DIMEN_UNKNOWN)
2632 switch (e->rank)
2633 {
2634 case 0:
2635 ar->dimen_type[i] = DIMEN_ELEMENT;
2636 break;
2637
2638 case 1:
2639 ar->dimen_type[i] = DIMEN_VECTOR;
2640 if (e->expr_type == EXPR_VARIABLE
2641 && e->symtree->n.sym->ts.type == BT_DERIVED)
2642 ar->start[i] = gfc_get_parentheses (e);
2643 break;
2644
2645 default:
2646 gfc_error ("Array index at %L is an array of rank %d",
2647 &ar->c_where[i], e->rank);
2648 return FAILURE;
2649 }
2650 }
2651
2652 /* If the reference type is unknown, figure out what kind it is. */
2653
2654 if (ar->type == AR_UNKNOWN)
2655 {
2656 ar->type = AR_ELEMENT;
2657 for (i = 0; i < ar->dimen; i++)
2658 if (ar->dimen_type[i] == DIMEN_RANGE
2659 || ar->dimen_type[i] == DIMEN_VECTOR)
2660 {
2661 ar->type = AR_SECTION;
2662 break;
2663 }
2664 }
2665
2666 if (!ar->as->cray_pointee && compare_spec_to_ref (ar) == FAILURE)
2667 return FAILURE;
2668
2669 return SUCCESS;
2670 }
2671
2672
2673 static try
2674 resolve_substring (gfc_ref * ref)
2675 {
2676
2677 if (ref->u.ss.start != NULL)
2678 {
2679 if (gfc_resolve_expr (ref->u.ss.start) == FAILURE)
2680 return FAILURE;
2681
2682 if (ref->u.ss.start->ts.type != BT_INTEGER)
2683 {
2684 gfc_error ("Substring start index at %L must be of type INTEGER",
2685 &ref->u.ss.start->where);
2686 return FAILURE;
2687 }
2688
2689 if (ref->u.ss.start->rank != 0)
2690 {
2691 gfc_error ("Substring start index at %L must be scalar",
2692 &ref->u.ss.start->where);
2693 return FAILURE;
2694 }
2695
2696 if (compare_bound_int (ref->u.ss.start, 1) == CMP_LT
2697 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
2698 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
2699 {
2700 gfc_error ("Substring start index at %L is less than one",
2701 &ref->u.ss.start->where);
2702 return FAILURE;
2703 }
2704 }
2705
2706 if (ref->u.ss.end != NULL)
2707 {
2708 if (gfc_resolve_expr (ref->u.ss.end) == FAILURE)
2709 return FAILURE;
2710
2711 if (ref->u.ss.end->ts.type != BT_INTEGER)
2712 {
2713 gfc_error ("Substring end index at %L must be of type INTEGER",
2714 &ref->u.ss.end->where);
2715 return FAILURE;
2716 }
2717
2718 if (ref->u.ss.end->rank != 0)
2719 {
2720 gfc_error ("Substring end index at %L must be scalar",
2721 &ref->u.ss.end->where);
2722 return FAILURE;
2723 }
2724
2725 if (ref->u.ss.length != NULL
2726 && compare_bound (ref->u.ss.end, ref->u.ss.length->length) == CMP_GT
2727 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
2728 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
2729 {
2730 gfc_error ("Substring end index at %L exceeds the string length",
2731 &ref->u.ss.start->where);
2732 return FAILURE;
2733 }
2734 }
2735
2736 return SUCCESS;
2737 }
2738
2739
2740 /* Resolve subtype references. */
2741
2742 static try
2743 resolve_ref (gfc_expr * expr)
2744 {
2745 int current_part_dimension, n_components, seen_part_dimension;
2746 gfc_ref *ref;
2747
2748 for (ref = expr->ref; ref; ref = ref->next)
2749 if (ref->type == REF_ARRAY && ref->u.ar.as == NULL)
2750 {
2751 find_array_spec (expr);
2752 break;
2753 }
2754
2755 for (ref = expr->ref; ref; ref = ref->next)
2756 switch (ref->type)
2757 {
2758 case REF_ARRAY:
2759 if (resolve_array_ref (&ref->u.ar) == FAILURE)
2760 return FAILURE;
2761 break;
2762
2763 case REF_COMPONENT:
2764 break;
2765
2766 case REF_SUBSTRING:
2767 resolve_substring (ref);
2768 break;
2769 }
2770
2771 /* Check constraints on part references. */
2772
2773 current_part_dimension = 0;
2774 seen_part_dimension = 0;
2775 n_components = 0;
2776
2777 for (ref = expr->ref; ref; ref = ref->next)
2778 {
2779 switch (ref->type)
2780 {
2781 case REF_ARRAY:
2782 switch (ref->u.ar.type)
2783 {
2784 case AR_FULL:
2785 case AR_SECTION:
2786 current_part_dimension = 1;
2787 break;
2788
2789 case AR_ELEMENT:
2790 current_part_dimension = 0;
2791 break;
2792
2793 case AR_UNKNOWN:
2794 gfc_internal_error ("resolve_ref(): Bad array reference");
2795 }
2796
2797 break;
2798
2799 case REF_COMPONENT:
2800 if ((current_part_dimension || seen_part_dimension)
2801 && ref->u.c.component->pointer)
2802 {
2803 gfc_error
2804 ("Component to the right of a part reference with nonzero "
2805 "rank must not have the POINTER attribute at %L",
2806 &expr->where);
2807 return FAILURE;
2808 }
2809
2810 n_components++;
2811 break;
2812
2813 case REF_SUBSTRING:
2814 break;
2815 }
2816
2817 if (((ref->type == REF_COMPONENT && n_components > 1)
2818 || ref->next == NULL)
2819 && current_part_dimension
2820 && seen_part_dimension)
2821 {
2822
2823 gfc_error ("Two or more part references with nonzero rank must "
2824 "not be specified at %L", &expr->where);
2825 return FAILURE;
2826 }
2827
2828 if (ref->type == REF_COMPONENT)
2829 {
2830 if (current_part_dimension)
2831 seen_part_dimension = 1;
2832
2833 /* reset to make sure */
2834 current_part_dimension = 0;
2835 }
2836 }
2837
2838 return SUCCESS;
2839 }
2840
2841
2842 /* Given an expression, determine its shape. This is easier than it sounds.
2843 Leaves the shape array NULL if it is not possible to determine the shape. */
2844
2845 static void
2846 expression_shape (gfc_expr * e)
2847 {
2848 mpz_t array[GFC_MAX_DIMENSIONS];
2849 int i;
2850
2851 if (e->rank == 0 || e->shape != NULL)
2852 return;
2853
2854 for (i = 0; i < e->rank; i++)
2855 if (gfc_array_dimen_size (e, i, &array[i]) == FAILURE)
2856 goto fail;
2857
2858 e->shape = gfc_get_shape (e->rank);
2859
2860 memcpy (e->shape, array, e->rank * sizeof (mpz_t));
2861
2862 return;
2863
2864 fail:
2865 for (i--; i >= 0; i--)
2866 mpz_clear (array[i]);
2867 }
2868
2869
2870 /* Given a variable expression node, compute the rank of the expression by
2871 examining the base symbol and any reference structures it may have. */
2872
2873 static void
2874 expression_rank (gfc_expr * e)
2875 {
2876 gfc_ref *ref;
2877 int i, rank;
2878
2879 if (e->ref == NULL)
2880 {
2881 if (e->expr_type == EXPR_ARRAY)
2882 goto done;
2883 /* Constructors can have a rank different from one via RESHAPE(). */
2884
2885 if (e->symtree == NULL)
2886 {
2887 e->rank = 0;
2888 goto done;
2889 }
2890
2891 e->rank = (e->symtree->n.sym->as == NULL)
2892 ? 0 : e->symtree->n.sym->as->rank;
2893 goto done;
2894 }
2895
2896 rank = 0;
2897
2898 for (ref = e->ref; ref; ref = ref->next)
2899 {
2900 if (ref->type != REF_ARRAY)
2901 continue;
2902
2903 if (ref->u.ar.type == AR_FULL)
2904 {
2905 rank = ref->u.ar.as->rank;
2906 break;
2907 }
2908
2909 if (ref->u.ar.type == AR_SECTION)
2910 {
2911 /* Figure out the rank of the section. */
2912 if (rank != 0)
2913 gfc_internal_error ("expression_rank(): Two array specs");
2914
2915 for (i = 0; i < ref->u.ar.dimen; i++)
2916 if (ref->u.ar.dimen_type[i] == DIMEN_RANGE
2917 || ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
2918 rank++;
2919
2920 break;
2921 }
2922 }
2923
2924 e->rank = rank;
2925
2926 done:
2927 expression_shape (e);
2928 }
2929
2930
2931 /* Resolve a variable expression. */
2932
2933 static try
2934 resolve_variable (gfc_expr * e)
2935 {
2936 gfc_symbol *sym;
2937 try t;
2938
2939 t = SUCCESS;
2940
2941 if (e->symtree == NULL)
2942 return FAILURE;
2943
2944 if (e->ref && resolve_ref (e) == FAILURE)
2945 return FAILURE;
2946
2947 sym = e->symtree->n.sym;
2948 if (sym->attr.flavor == FL_PROCEDURE && !sym->attr.function)
2949 {
2950 e->ts.type = BT_PROCEDURE;
2951 return SUCCESS;
2952 }
2953
2954 if (sym->ts.type != BT_UNKNOWN)
2955 gfc_variable_attr (e, &e->ts);
2956 else
2957 {
2958 /* Must be a simple variable reference. */
2959 if (gfc_set_default_type (sym, 1, NULL) == FAILURE)
2960 return FAILURE;
2961 e->ts = sym->ts;
2962 }
2963
2964 if (check_assumed_size_reference (sym, e))
2965 return FAILURE;
2966
2967 /* Deal with forward references to entries during resolve_code, to
2968 satisfy, at least partially, 12.5.2.5. */
2969 if (gfc_current_ns->entries
2970 && current_entry_id == sym->entry_id
2971 && cs_base
2972 && cs_base->current
2973 && cs_base->current->op != EXEC_ENTRY)
2974 {
2975 gfc_entry_list *entry;
2976 gfc_formal_arglist *formal;
2977 int n;
2978 bool seen;
2979
2980 /* If the symbol is a dummy... */
2981 if (sym->attr.dummy)
2982 {
2983 entry = gfc_current_ns->entries;
2984 seen = false;
2985
2986 /* ...test if the symbol is a parameter of previous entries. */
2987 for (; entry && entry->id <= current_entry_id; entry = entry->next)
2988 for (formal = entry->sym->formal; formal; formal = formal->next)
2989 {
2990 if (formal->sym && sym->name == formal->sym->name)
2991 seen = true;
2992 }
2993
2994 /* If it has not been seen as a dummy, this is an error. */
2995 if (!seen)
2996 {
2997 if (specification_expr)
2998 gfc_error ("Variable '%s',used in a specification expression, "
2999 "is referenced at %L before the ENTRY statement "
3000 "in which it is a parameter",
3001 sym->name, &cs_base->current->loc);
3002 else
3003 gfc_error ("Variable '%s' is used at %L before the ENTRY "
3004 "statement in which it is a parameter",
3005 sym->name, &cs_base->current->loc);
3006 t = FAILURE;
3007 }
3008 }
3009
3010 /* Now do the same check on the specification expressions. */
3011 specification_expr = 1;
3012 if (sym->ts.type == BT_CHARACTER
3013 && gfc_resolve_expr (sym->ts.cl->length) == FAILURE)
3014 t = FAILURE;
3015
3016 if (sym->as)
3017 for (n = 0; n < sym->as->rank; n++)
3018 {
3019 specification_expr = 1;
3020 if (gfc_resolve_expr (sym->as->lower[n]) == FAILURE)
3021 t = FAILURE;
3022 specification_expr = 1;
3023 if (gfc_resolve_expr (sym->as->upper[n]) == FAILURE)
3024 t = FAILURE;
3025 }
3026 specification_expr = 0;
3027
3028 if (t == SUCCESS)
3029 /* Update the symbol's entry level. */
3030 sym->entry_id = current_entry_id + 1;
3031 }
3032
3033 return t;
3034 }
3035
3036
3037 /* Resolve an expression. That is, make sure that types of operands agree
3038 with their operators, intrinsic operators are converted to function calls
3039 for overloaded types and unresolved function references are resolved. */
3040
3041 try
3042 gfc_resolve_expr (gfc_expr * e)
3043 {
3044 try t;
3045
3046 if (e == NULL)
3047 return SUCCESS;
3048
3049 switch (e->expr_type)
3050 {
3051 case EXPR_OP:
3052 t = resolve_operator (e);
3053 break;
3054
3055 case EXPR_FUNCTION:
3056 t = resolve_function (e);
3057 break;
3058
3059 case EXPR_VARIABLE:
3060 t = resolve_variable (e);
3061 if (t == SUCCESS)
3062 expression_rank (e);
3063 break;
3064
3065 case EXPR_SUBSTRING:
3066 t = resolve_ref (e);
3067 break;
3068
3069 case EXPR_CONSTANT:
3070 case EXPR_NULL:
3071 t = SUCCESS;
3072 break;
3073
3074 case EXPR_ARRAY:
3075 t = FAILURE;
3076 if (resolve_ref (e) == FAILURE)
3077 break;
3078
3079 t = gfc_resolve_array_constructor (e);
3080 /* Also try to expand a constructor. */
3081 if (t == SUCCESS)
3082 {
3083 expression_rank (e);
3084 gfc_expand_constructor (e);
3085 }
3086
3087 /* This provides the opportunity for the length of constructors with character
3088 valued function elements to propogate the string length to the expression. */
3089 if (e->ts.type == BT_CHARACTER)
3090 gfc_resolve_character_array_constructor (e);
3091
3092 break;
3093
3094 case EXPR_STRUCTURE:
3095 t = resolve_ref (e);
3096 if (t == FAILURE)
3097 break;
3098
3099 t = resolve_structure_cons (e);
3100 if (t == FAILURE)
3101 break;
3102
3103 t = gfc_simplify_expr (e, 0);
3104 break;
3105
3106 default:
3107 gfc_internal_error ("gfc_resolve_expr(): Bad expression type");
3108 }
3109
3110 return t;
3111 }
3112
3113
3114 /* Resolve an expression from an iterator. They must be scalar and have
3115 INTEGER or (optionally) REAL type. */
3116
3117 static try
3118 gfc_resolve_iterator_expr (gfc_expr * expr, bool real_ok,
3119 const char * name_msgid)
3120 {
3121 if (gfc_resolve_expr (expr) == FAILURE)
3122 return FAILURE;
3123
3124 if (expr->rank != 0)
3125 {
3126 gfc_error ("%s at %L must be a scalar", _(name_msgid), &expr->where);
3127 return FAILURE;
3128 }
3129
3130 if (!(expr->ts.type == BT_INTEGER
3131 || (expr->ts.type == BT_REAL && real_ok)))
3132 {
3133 if (real_ok)
3134 gfc_error ("%s at %L must be INTEGER or REAL", _(name_msgid),
3135 &expr->where);
3136 else
3137 gfc_error ("%s at %L must be INTEGER", _(name_msgid), &expr->where);
3138 return FAILURE;
3139 }
3140 return SUCCESS;
3141 }
3142
3143
3144 /* Resolve the expressions in an iterator structure. If REAL_OK is
3145 false allow only INTEGER type iterators, otherwise allow REAL types. */
3146
3147 try
3148 gfc_resolve_iterator (gfc_iterator * iter, bool real_ok)
3149 {
3150
3151 if (iter->var->ts.type == BT_REAL)
3152 gfc_notify_std (GFC_STD_F95_DEL,
3153 "Obsolete: REAL DO loop iterator at %L",
3154 &iter->var->where);
3155
3156 if (gfc_resolve_iterator_expr (iter->var, real_ok, "Loop variable")
3157 == FAILURE)
3158 return FAILURE;
3159
3160 if (gfc_pure (NULL) && gfc_impure_variable (iter->var->symtree->n.sym))
3161 {
3162 gfc_error ("Cannot assign to loop variable in PURE procedure at %L",
3163 &iter->var->where);
3164 return FAILURE;
3165 }
3166
3167 if (gfc_resolve_iterator_expr (iter->start, real_ok,
3168 "Start expression in DO loop") == FAILURE)
3169 return FAILURE;
3170
3171 if (gfc_resolve_iterator_expr (iter->end, real_ok,
3172 "End expression in DO loop") == FAILURE)
3173 return FAILURE;
3174
3175 if (gfc_resolve_iterator_expr (iter->step, real_ok,
3176 "Step expression in DO loop") == FAILURE)
3177 return FAILURE;
3178
3179 if (iter->step->expr_type == EXPR_CONSTANT)
3180 {
3181 if ((iter->step->ts.type == BT_INTEGER
3182 && mpz_cmp_ui (iter->step->value.integer, 0) == 0)
3183 || (iter->step->ts.type == BT_REAL
3184 && mpfr_sgn (iter->step->value.real) == 0))
3185 {
3186 gfc_error ("Step expression in DO loop at %L cannot be zero",
3187 &iter->step->where);
3188 return FAILURE;
3189 }
3190 }
3191
3192 /* Convert start, end, and step to the same type as var. */
3193 if (iter->start->ts.kind != iter->var->ts.kind
3194 || iter->start->ts.type != iter->var->ts.type)
3195 gfc_convert_type (iter->start, &iter->var->ts, 2);
3196
3197 if (iter->end->ts.kind != iter->var->ts.kind
3198 || iter->end->ts.type != iter->var->ts.type)
3199 gfc_convert_type (iter->end, &iter->var->ts, 2);
3200
3201 if (iter->step->ts.kind != iter->var->ts.kind
3202 || iter->step->ts.type != iter->var->ts.type)
3203 gfc_convert_type (iter->step, &iter->var->ts, 2);
3204
3205 return SUCCESS;
3206 }
3207
3208
3209 /* Resolve a list of FORALL iterators. The FORALL index-name is constrained
3210 to be a scalar INTEGER variable. The subscripts and stride are scalar
3211 INTEGERs, and if stride is a constant it must be nonzero. */
3212
3213 static void
3214 resolve_forall_iterators (gfc_forall_iterator * iter)
3215 {
3216
3217 while (iter)
3218 {
3219 if (gfc_resolve_expr (iter->var) == SUCCESS
3220 && (iter->var->ts.type != BT_INTEGER || iter->var->rank != 0))
3221 gfc_error ("FORALL index-name at %L must be a scalar INTEGER",
3222 &iter->var->where);
3223
3224 if (gfc_resolve_expr (iter->start) == SUCCESS
3225 && (iter->start->ts.type != BT_INTEGER || iter->start->rank != 0))
3226 gfc_error ("FORALL start expression at %L must be a scalar INTEGER",
3227 &iter->start->where);
3228 if (iter->var->ts.kind != iter->start->ts.kind)
3229 gfc_convert_type (iter->start, &iter->var->ts, 2);
3230
3231 if (gfc_resolve_expr (iter->end) == SUCCESS
3232 && (iter->end->ts.type != BT_INTEGER || iter->end->rank != 0))
3233 gfc_error ("FORALL end expression at %L must be a scalar INTEGER",
3234 &iter->end->where);
3235 if (iter->var->ts.kind != iter->end->ts.kind)
3236 gfc_convert_type (iter->end, &iter->var->ts, 2);
3237
3238 if (gfc_resolve_expr (iter->stride) == SUCCESS)
3239 {
3240 if (iter->stride->ts.type != BT_INTEGER || iter->stride->rank != 0)
3241 gfc_error ("FORALL stride expression at %L must be a scalar %s",
3242 &iter->stride->where, "INTEGER");
3243
3244 if (iter->stride->expr_type == EXPR_CONSTANT
3245 && mpz_cmp_ui(iter->stride->value.integer, 0) == 0)
3246 gfc_error ("FORALL stride expression at %L cannot be zero",
3247 &iter->stride->where);
3248 }
3249 if (iter->var->ts.kind != iter->stride->ts.kind)
3250 gfc_convert_type (iter->stride, &iter->var->ts, 2);
3251
3252 iter = iter->next;
3253 }
3254 }
3255
3256
3257 /* Given a pointer to a symbol that is a derived type, see if any components
3258 have the POINTER attribute. The search is recursive if necessary.
3259 Returns zero if no pointer components are found, nonzero otherwise. */
3260
3261 static int
3262 derived_pointer (gfc_symbol * sym)
3263 {
3264 gfc_component *c;
3265
3266 for (c = sym->components; c; c = c->next)
3267 {
3268 if (c->pointer)
3269 return 1;
3270
3271 if (c->ts.type == BT_DERIVED && derived_pointer (c->ts.derived))
3272 return 1;
3273 }
3274
3275 return 0;
3276 }
3277
3278
3279 /* Given a pointer to a symbol that is a derived type, see if it's
3280 inaccessible, i.e. if it's defined in another module and the components are
3281 PRIVATE. The search is recursive if necessary. Returns zero if no
3282 inaccessible components are found, nonzero otherwise. */
3283
3284 static int
3285 derived_inaccessible (gfc_symbol *sym)
3286 {
3287 gfc_component *c;
3288
3289 if (sym->attr.use_assoc && sym->component_access == ACCESS_PRIVATE)
3290 return 1;
3291
3292 for (c = sym->components; c; c = c->next)
3293 {
3294 if (c->ts.type == BT_DERIVED && derived_inaccessible (c->ts.derived))
3295 return 1;
3296 }
3297
3298 return 0;
3299 }
3300
3301
3302 /* Resolve the argument of a deallocate expression. The expression must be
3303 a pointer or a full array. */
3304
3305 static try
3306 resolve_deallocate_expr (gfc_expr * e)
3307 {
3308 symbol_attribute attr;
3309 int allocatable;
3310 gfc_ref *ref;
3311
3312 if (gfc_resolve_expr (e) == FAILURE)
3313 return FAILURE;
3314
3315 attr = gfc_expr_attr (e);
3316 if (attr.pointer)
3317 return SUCCESS;
3318
3319 if (e->expr_type != EXPR_VARIABLE)
3320 goto bad;
3321
3322 allocatable = e->symtree->n.sym->attr.allocatable;
3323 for (ref = e->ref; ref; ref = ref->next)
3324 switch (ref->type)
3325 {
3326 case REF_ARRAY:
3327 if (ref->u.ar.type != AR_FULL)
3328 allocatable = 0;
3329 break;
3330
3331 case REF_COMPONENT:
3332 allocatable = (ref->u.c.component->as != NULL
3333 && ref->u.c.component->as->type == AS_DEFERRED);
3334 break;
3335
3336 case REF_SUBSTRING:
3337 allocatable = 0;
3338 break;
3339 }
3340
3341 if (allocatable == 0)
3342 {
3343 bad:
3344 gfc_error ("Expression in DEALLOCATE statement at %L must be "
3345 "ALLOCATABLE or a POINTER", &e->where);
3346 }
3347
3348 if (e->symtree->n.sym->attr.intent == INTENT_IN)
3349 {
3350 gfc_error ("Can't deallocate INTENT(IN) variable '%s' at %L",
3351 e->symtree->n.sym->name, &e->where);
3352 return FAILURE;
3353 }
3354
3355 return SUCCESS;
3356 }
3357
3358 /* Returns true if the expression e contains a reference the symbol sym. */
3359 static bool
3360 find_sym_in_expr (gfc_symbol *sym, gfc_expr *e)
3361 {
3362 gfc_actual_arglist *arg;
3363 gfc_ref *ref;
3364 int i;
3365 bool rv = false;
3366
3367 if (e == NULL)
3368 return rv;
3369
3370 switch (e->expr_type)
3371 {
3372 case EXPR_FUNCTION:
3373 for (arg = e->value.function.actual; arg; arg = arg->next)
3374 rv = rv || find_sym_in_expr (sym, arg->expr);
3375 break;
3376
3377 /* If the variable is not the same as the dependent, 'sym', and
3378 it is not marked as being declared and it is in the same
3379 namespace as 'sym', add it to the local declarations. */
3380 case EXPR_VARIABLE:
3381 if (sym == e->symtree->n.sym)
3382 return true;
3383 break;
3384
3385 case EXPR_OP:
3386 rv = rv || find_sym_in_expr (sym, e->value.op.op1);
3387 rv = rv || find_sym_in_expr (sym, e->value.op.op2);
3388 break;
3389
3390 default:
3391 break;
3392 }
3393
3394 if (e->ref)
3395 {
3396 for (ref = e->ref; ref; ref = ref->next)
3397 {
3398 switch (ref->type)
3399 {
3400 case REF_ARRAY:
3401 for (i = 0; i < ref->u.ar.dimen; i++)
3402 {
3403 rv = rv || find_sym_in_expr (sym, ref->u.ar.start[i]);
3404 rv = rv || find_sym_in_expr (sym, ref->u.ar.end[i]);
3405 rv = rv || find_sym_in_expr (sym, ref->u.ar.stride[i]);
3406 }
3407 break;
3408
3409 case REF_SUBSTRING:
3410 rv = rv || find_sym_in_expr (sym, ref->u.ss.start);
3411 rv = rv || find_sym_in_expr (sym, ref->u.ss.end);
3412 break;
3413
3414 case REF_COMPONENT:
3415 if (ref->u.c.component->ts.type == BT_CHARACTER
3416 && ref->u.c.component->ts.cl->length->expr_type
3417 != EXPR_CONSTANT)
3418 rv = rv || find_sym_in_expr (sym, ref->u.c.component->ts.cl->length);
3419
3420 if (ref->u.c.component->as)
3421 for (i = 0; i < ref->u.c.component->as->rank; i++)
3422 {
3423 rv = rv || find_sym_in_expr (sym, ref->u.c.component->as->lower[i]);
3424 rv = rv || find_sym_in_expr (sym, ref->u.c.component->as->upper[i]);
3425 }
3426 break;
3427 }
3428 }
3429 }
3430 return rv;
3431 }
3432
3433
3434 /* Given the expression node e for an allocatable/pointer of derived type to be
3435 allocated, get the expression node to be initialized afterwards (needed for
3436 derived types with default initializers, and derived types with allocatable
3437 components that need nullification.) */
3438
3439 static gfc_expr *
3440 expr_to_initialize (gfc_expr * e)
3441 {
3442 gfc_expr *result;
3443 gfc_ref *ref;
3444 int i;
3445
3446 result = gfc_copy_expr (e);
3447
3448 /* Change the last array reference from AR_ELEMENT to AR_FULL. */
3449 for (ref = result->ref; ref; ref = ref->next)
3450 if (ref->type == REF_ARRAY && ref->next == NULL)
3451 {
3452 ref->u.ar.type = AR_FULL;
3453
3454 for (i = 0; i < ref->u.ar.dimen; i++)
3455 ref->u.ar.start[i] = ref->u.ar.end[i] = ref->u.ar.stride[i] = NULL;
3456
3457 result->rank = ref->u.ar.dimen;
3458 break;
3459 }
3460
3461 return result;
3462 }
3463
3464
3465 /* Resolve the expression in an ALLOCATE statement, doing the additional
3466 checks to see whether the expression is OK or not. The expression must
3467 have a trailing array reference that gives the size of the array. */
3468
3469 static try
3470 resolve_allocate_expr (gfc_expr * e, gfc_code * code)
3471 {
3472 int i, pointer, allocatable, dimension;
3473 symbol_attribute attr;
3474 gfc_ref *ref, *ref2;
3475 gfc_array_ref *ar;
3476 gfc_code *init_st;
3477 gfc_expr *init_e;
3478 gfc_symbol *sym;
3479 gfc_alloc *a;
3480
3481 if (gfc_resolve_expr (e) == FAILURE)
3482 return FAILURE;
3483
3484 if (code->expr && code->expr->expr_type == EXPR_VARIABLE)
3485 sym = code->expr->symtree->n.sym;
3486 else
3487 sym = NULL;
3488
3489 /* Make sure the expression is allocatable or a pointer. If it is
3490 pointer, the next-to-last reference must be a pointer. */
3491
3492 ref2 = NULL;
3493
3494 if (e->expr_type != EXPR_VARIABLE)
3495 {
3496 allocatable = 0;
3497
3498 attr = gfc_expr_attr (e);
3499 pointer = attr.pointer;
3500 dimension = attr.dimension;
3501
3502 }
3503 else
3504 {
3505 allocatable = e->symtree->n.sym->attr.allocatable;
3506 pointer = e->symtree->n.sym->attr.pointer;
3507 dimension = e->symtree->n.sym->attr.dimension;
3508
3509 if (sym == e->symtree->n.sym && sym->ts.type != BT_DERIVED)
3510 {
3511 gfc_error ("The STAT variable '%s' in an ALLOCATE statement must "
3512 "not be allocated in the same statement at %L",
3513 sym->name, &e->where);
3514 return FAILURE;
3515 }
3516
3517 for (ref = e->ref; ref; ref2 = ref, ref = ref->next)
3518 switch (ref->type)
3519 {
3520 case REF_ARRAY:
3521 if (ref->next != NULL)
3522 pointer = 0;
3523 break;
3524
3525 case REF_COMPONENT:
3526 allocatable = (ref->u.c.component->as != NULL
3527 && ref->u.c.component->as->type == AS_DEFERRED);
3528
3529 pointer = ref->u.c.component->pointer;
3530 dimension = ref->u.c.component->dimension;
3531 break;
3532
3533 case REF_SUBSTRING:
3534 allocatable = 0;
3535 pointer = 0;
3536 break;
3537 }
3538 }
3539
3540 if (allocatable == 0 && pointer == 0)
3541 {
3542 gfc_error ("Expression in ALLOCATE statement at %L must be "
3543 "ALLOCATABLE or a POINTER", &e->where);
3544 return FAILURE;
3545 }
3546
3547 if (e->symtree->n.sym->attr.intent == INTENT_IN)
3548 {
3549 gfc_error ("Can't allocate INTENT(IN) variable '%s' at %L",
3550 e->symtree->n.sym->name, &e->where);
3551 return FAILURE;
3552 }
3553
3554 /* Add default initializer for those derived types that need them. */
3555 if (e->ts.type == BT_DERIVED && (init_e = gfc_default_initializer (&e->ts)))
3556 {
3557 init_st = gfc_get_code ();
3558 init_st->loc = code->loc;
3559 init_st->op = EXEC_INIT_ASSIGN;
3560 init_st->expr = expr_to_initialize (e);
3561 init_st->expr2 = init_e;
3562 init_st->next = code->next;
3563 code->next = init_st;
3564 }
3565
3566 if (pointer && dimension == 0)
3567 return SUCCESS;
3568
3569 /* Make sure the next-to-last reference node is an array specification. */
3570
3571 if (ref2 == NULL || ref2->type != REF_ARRAY || ref2->u.ar.type == AR_FULL)
3572 {
3573 gfc_error ("Array specification required in ALLOCATE statement "
3574 "at %L", &e->where);
3575 return FAILURE;
3576 }
3577
3578 /* Make sure that the array section reference makes sense in the
3579 context of an ALLOCATE specification. */
3580
3581 ar = &ref2->u.ar;
3582
3583 for (i = 0; i < ar->dimen; i++)
3584 {
3585 if (ref2->u.ar.type == AR_ELEMENT)
3586 goto check_symbols;
3587
3588 switch (ar->dimen_type[i])
3589 {
3590 case DIMEN_ELEMENT:
3591 break;
3592
3593 case DIMEN_RANGE:
3594 if (ar->start[i] != NULL
3595 && ar->end[i] != NULL
3596 && ar->stride[i] == NULL)
3597 break;
3598
3599 /* Fall Through... */
3600
3601 case DIMEN_UNKNOWN:
3602 case DIMEN_VECTOR:
3603 gfc_error ("Bad array specification in ALLOCATE statement at %L",
3604 &e->where);
3605 return FAILURE;
3606 }
3607
3608 check_symbols:
3609
3610 for (a = code->ext.alloc_list; a; a = a->next)
3611 {
3612 sym = a->expr->symtree->n.sym;
3613
3614 /* TODO - check derived type components. */
3615 if (sym->ts.type == BT_DERIVED)
3616 continue;
3617
3618 if ((ar->start[i] != NULL && find_sym_in_expr (sym, ar->start[i]))
3619 || (ar->end[i] != NULL && find_sym_in_expr (sym, ar->end[i])))
3620 {
3621 gfc_error ("'%s' must not appear an the array specification at "
3622 "%L in the same ALLOCATE statement where it is "
3623 "itself allocated", sym->name, &ar->where);
3624 return FAILURE;
3625 }
3626 }
3627 }
3628
3629 return SUCCESS;
3630 }
3631
3632
3633 /************ SELECT CASE resolution subroutines ************/
3634
3635 /* Callback function for our mergesort variant. Determines interval
3636 overlaps for CASEs. Return <0 if op1 < op2, 0 for overlap, >0 for
3637 op1 > op2. Assumes we're not dealing with the default case.
3638 We have op1 = (:L), (K:L) or (K:) and op2 = (:N), (M:N) or (M:).
3639 There are nine situations to check. */
3640
3641 static int
3642 compare_cases (const gfc_case * op1, const gfc_case * op2)
3643 {
3644 int retval;
3645
3646 if (op1->low == NULL) /* op1 = (:L) */
3647 {
3648 /* op2 = (:N), so overlap. */
3649 retval = 0;
3650 /* op2 = (M:) or (M:N), L < M */
3651 if (op2->low != NULL
3652 && gfc_compare_expr (op1->high, op2->low) < 0)
3653 retval = -1;
3654 }
3655 else if (op1->high == NULL) /* op1 = (K:) */
3656 {
3657 /* op2 = (M:), so overlap. */
3658 retval = 0;
3659 /* op2 = (:N) or (M:N), K > N */
3660 if (op2->high != NULL
3661 && gfc_compare_expr (op1->low, op2->high) > 0)
3662 retval = 1;
3663 }
3664 else /* op1 = (K:L) */
3665 {
3666 if (op2->low == NULL) /* op2 = (:N), K > N */
3667 retval = (gfc_compare_expr (op1->low, op2->high) > 0) ? 1 : 0;
3668 else if (op2->high == NULL) /* op2 = (M:), L < M */
3669 retval = (gfc_compare_expr (op1->high, op2->low) < 0) ? -1 : 0;
3670 else /* op2 = (M:N) */
3671 {
3672 retval = 0;
3673 /* L < M */
3674 if (gfc_compare_expr (op1->high, op2->low) < 0)
3675 retval = -1;
3676 /* K > N */
3677 else if (gfc_compare_expr (op1->low, op2->high) > 0)
3678 retval = 1;
3679 }
3680 }
3681
3682 return retval;
3683 }
3684
3685
3686 /* Merge-sort a double linked case list, detecting overlap in the
3687 process. LIST is the head of the double linked case list before it
3688 is sorted. Returns the head of the sorted list if we don't see any
3689 overlap, or NULL otherwise. */
3690
3691 static gfc_case *
3692 check_case_overlap (gfc_case * list)
3693 {
3694 gfc_case *p, *q, *e, *tail;
3695 int insize, nmerges, psize, qsize, cmp, overlap_seen;
3696
3697 /* If the passed list was empty, return immediately. */
3698 if (!list)
3699 return NULL;
3700
3701 overlap_seen = 0;
3702 insize = 1;
3703
3704 /* Loop unconditionally. The only exit from this loop is a return
3705 statement, when we've finished sorting the case list. */
3706 for (;;)
3707 {
3708 p = list;
3709 list = NULL;
3710 tail = NULL;
3711
3712 /* Count the number of merges we do in this pass. */
3713 nmerges = 0;
3714
3715 /* Loop while there exists a merge to be done. */
3716 while (p)
3717 {
3718 int i;
3719
3720 /* Count this merge. */
3721 nmerges++;
3722
3723 /* Cut the list in two pieces by stepping INSIZE places
3724 forward in the list, starting from P. */
3725 psize = 0;
3726 q = p;
3727 for (i = 0; i < insize; i++)
3728 {
3729 psize++;
3730 q = q->right;
3731 if (!q)
3732 break;
3733 }
3734 qsize = insize;
3735
3736 /* Now we have two lists. Merge them! */
3737 while (psize > 0 || (qsize > 0 && q != NULL))
3738 {
3739
3740 /* See from which the next case to merge comes from. */
3741 if (psize == 0)
3742 {
3743 /* P is empty so the next case must come from Q. */
3744 e = q;
3745 q = q->right;
3746 qsize--;
3747 }
3748 else if (qsize == 0 || q == NULL)
3749 {
3750 /* Q is empty. */
3751 e = p;
3752 p = p->right;
3753 psize--;
3754 }
3755 else
3756 {
3757 cmp = compare_cases (p, q);
3758 if (cmp < 0)
3759 {
3760 /* The whole case range for P is less than the
3761 one for Q. */
3762 e = p;
3763 p = p->right;
3764 psize--;
3765 }
3766 else if (cmp > 0)
3767 {
3768 /* The whole case range for Q is greater than
3769 the case range for P. */
3770 e = q;
3771 q = q->right;
3772 qsize--;
3773 }
3774 else
3775 {
3776 /* The cases overlap, or they are the same
3777 element in the list. Either way, we must
3778 issue an error and get the next case from P. */
3779 /* FIXME: Sort P and Q by line number. */
3780 gfc_error ("CASE label at %L overlaps with CASE "
3781 "label at %L", &p->where, &q->where);
3782 overlap_seen = 1;
3783 e = p;
3784 p = p->right;
3785 psize--;
3786 }
3787 }
3788
3789 /* Add the next element to the merged list. */
3790 if (tail)
3791 tail->right = e;
3792 else
3793 list = e;
3794 e->left = tail;
3795 tail = e;
3796 }
3797
3798 /* P has now stepped INSIZE places along, and so has Q. So
3799 they're the same. */
3800 p = q;
3801 }
3802 tail->right = NULL;
3803
3804 /* If we have done only one merge or none at all, we've
3805 finished sorting the cases. */
3806 if (nmerges <= 1)
3807 {
3808 if (!overlap_seen)
3809 return list;
3810 else
3811 return NULL;
3812 }
3813
3814 /* Otherwise repeat, merging lists twice the size. */
3815 insize *= 2;
3816 }
3817 }
3818
3819
3820 /* Check to see if an expression is suitable for use in a CASE statement.
3821 Makes sure that all case expressions are scalar constants of the same
3822 type. Return FAILURE if anything is wrong. */
3823
3824 static try
3825 validate_case_label_expr (gfc_expr * e, gfc_expr * case_expr)
3826 {
3827 if (e == NULL) return SUCCESS;
3828
3829 if (e->ts.type != case_expr->ts.type)
3830 {
3831 gfc_error ("Expression in CASE statement at %L must be of type %s",
3832 &e->where, gfc_basic_typename (case_expr->ts.type));
3833 return FAILURE;
3834 }
3835
3836 /* C805 (R808) For a given case-construct, each case-value shall be of
3837 the same type as case-expr. For character type, length differences
3838 are allowed, but the kind type parameters shall be the same. */
3839
3840 if (case_expr->ts.type == BT_CHARACTER && e->ts.kind != case_expr->ts.kind)
3841 {
3842 gfc_error("Expression in CASE statement at %L must be kind %d",
3843 &e->where, case_expr->ts.kind);
3844 return FAILURE;
3845 }
3846
3847 /* Convert the case value kind to that of case expression kind, if needed.
3848 FIXME: Should a warning be issued? */
3849 if (e->ts.kind != case_expr->ts.kind)
3850 gfc_convert_type_warn (e, &case_expr->ts, 2, 0);
3851
3852 if (e->rank != 0)
3853 {
3854 gfc_error ("Expression in CASE statement at %L must be scalar",
3855 &e->where);
3856 return FAILURE;
3857 }
3858
3859 return SUCCESS;
3860 }
3861
3862
3863 /* Given a completely parsed select statement, we:
3864
3865 - Validate all expressions and code within the SELECT.
3866 - Make sure that the selection expression is not of the wrong type.
3867 - Make sure that no case ranges overlap.
3868 - Eliminate unreachable cases and unreachable code resulting from
3869 removing case labels.
3870
3871 The standard does allow unreachable cases, e.g. CASE (5:3). But
3872 they are a hassle for code generation, and to prevent that, we just
3873 cut them out here. This is not necessary for overlapping cases
3874 because they are illegal and we never even try to generate code.
3875
3876 We have the additional caveat that a SELECT construct could have
3877 been a computed GOTO in the source code. Fortunately we can fairly
3878 easily work around that here: The case_expr for a "real" SELECT CASE
3879 is in code->expr1, but for a computed GOTO it is in code->expr2. All
3880 we have to do is make sure that the case_expr is a scalar integer
3881 expression. */
3882
3883 static void
3884 resolve_select (gfc_code * code)
3885 {
3886 gfc_code *body;
3887 gfc_expr *case_expr;
3888 gfc_case *cp, *default_case, *tail, *head;
3889 int seen_unreachable;
3890 int seen_logical;
3891 int ncases;
3892 bt type;
3893 try t;
3894
3895 if (code->expr == NULL)
3896 {
3897 /* This was actually a computed GOTO statement. */
3898 case_expr = code->expr2;
3899 if (case_expr->ts.type != BT_INTEGER
3900 || case_expr->rank != 0)
3901 gfc_error ("Selection expression in computed GOTO statement "
3902 "at %L must be a scalar integer expression",
3903 &case_expr->where);
3904
3905 /* Further checking is not necessary because this SELECT was built
3906 by the compiler, so it should always be OK. Just move the
3907 case_expr from expr2 to expr so that we can handle computed
3908 GOTOs as normal SELECTs from here on. */
3909 code->expr = code->expr2;
3910 code->expr2 = NULL;
3911 return;
3912 }
3913
3914 case_expr = code->expr;
3915
3916 type = case_expr->ts.type;
3917 if (type != BT_LOGICAL && type != BT_INTEGER && type != BT_CHARACTER)
3918 {
3919 gfc_error ("Argument of SELECT statement at %L cannot be %s",
3920 &case_expr->where, gfc_typename (&case_expr->ts));
3921
3922 /* Punt. Going on here just produce more garbage error messages. */
3923 return;
3924 }
3925
3926 if (case_expr->rank != 0)
3927 {
3928 gfc_error ("Argument of SELECT statement at %L must be a scalar "
3929 "expression", &case_expr->where);
3930
3931 /* Punt. */
3932 return;
3933 }
3934
3935 /* PR 19168 has a long discussion concerning a mismatch of the kinds
3936 of the SELECT CASE expression and its CASE values. Walk the lists
3937 of case values, and if we find a mismatch, promote case_expr to
3938 the appropriate kind. */
3939
3940 if (type == BT_LOGICAL || type == BT_INTEGER)
3941 {
3942 for (body = code->block; body; body = body->block)
3943 {
3944 /* Walk the case label list. */
3945 for (cp = body->ext.case_list; cp; cp = cp->next)
3946 {
3947 /* Intercept the DEFAULT case. It does not have a kind. */
3948 if (cp->low == NULL && cp->high == NULL)
3949 continue;
3950
3951 /* Unreachable case ranges are discarded, so ignore. */
3952 if (cp->low != NULL && cp->high != NULL
3953 && cp->low != cp->high
3954 && gfc_compare_expr (cp->low, cp->high) > 0)
3955 continue;
3956
3957 /* FIXME: Should a warning be issued? */
3958 if (cp->low != NULL
3959 && case_expr->ts.kind != gfc_kind_max(case_expr, cp->low))
3960 gfc_convert_type_warn (case_expr, &cp->low->ts, 2, 0);
3961
3962 if (cp->high != NULL
3963 && case_expr->ts.kind != gfc_kind_max(case_expr, cp->high))
3964 gfc_convert_type_warn (case_expr, &cp->high->ts, 2, 0);
3965 }
3966 }
3967 }
3968
3969 /* Assume there is no DEFAULT case. */
3970 default_case = NULL;
3971 head = tail = NULL;
3972 ncases = 0;
3973 seen_logical = 0;
3974
3975 for (body = code->block; body; body = body->block)
3976 {
3977 /* Assume the CASE list is OK, and all CASE labels can be matched. */
3978 t = SUCCESS;
3979 seen_unreachable = 0;
3980
3981 /* Walk the case label list, making sure that all case labels
3982 are legal. */
3983 for (cp = body->ext.case_list; cp; cp = cp->next)
3984 {
3985 /* Count the number of cases in the whole construct. */
3986 ncases++;
3987
3988 /* Intercept the DEFAULT case. */
3989 if (cp->low == NULL && cp->high == NULL)
3990 {
3991 if (default_case != NULL)
3992 {
3993 gfc_error ("The DEFAULT CASE at %L cannot be followed "
3994 "by a second DEFAULT CASE at %L",
3995 &default_case->where, &cp->where);
3996 t = FAILURE;
3997 break;
3998 }
3999 else
4000 {
4001 default_case = cp;
4002 continue;
4003 }
4004 }
4005
4006 /* Deal with single value cases and case ranges. Errors are
4007 issued from the validation function. */
4008 if(validate_case_label_expr (cp->low, case_expr) != SUCCESS
4009 || validate_case_label_expr (cp->high, case_expr) != SUCCESS)
4010 {
4011 t = FAILURE;
4012 break;
4013 }
4014
4015 if (type == BT_LOGICAL
4016 && ((cp->low == NULL || cp->high == NULL)
4017 || cp->low != cp->high))
4018 {
4019 gfc_error
4020 ("Logical range in CASE statement at %L is not allowed",
4021 &cp->low->where);
4022 t = FAILURE;
4023 break;
4024 }
4025
4026 if (type == BT_LOGICAL && cp->low->expr_type == EXPR_CONSTANT)
4027 {
4028 int value;
4029 value = cp->low->value.logical == 0 ? 2 : 1;
4030 if (value & seen_logical)
4031 {
4032 gfc_error ("constant logical value in CASE statement "
4033 "is repeated at %L",
4034 &cp->low->where);
4035 t = FAILURE;
4036 break;
4037 }
4038 seen_logical |= value;
4039 }
4040
4041 if (cp->low != NULL && cp->high != NULL
4042 && cp->low != cp->high
4043 && gfc_compare_expr (cp->low, cp->high) > 0)
4044 {
4045 if (gfc_option.warn_surprising)
4046 gfc_warning ("Range specification at %L can never "
4047 "be matched", &cp->where);
4048
4049 cp->unreachable = 1;
4050 seen_unreachable = 1;
4051 }
4052 else
4053 {
4054 /* If the case range can be matched, it can also overlap with
4055 other cases. To make sure it does not, we put it in a
4056 double linked list here. We sort that with a merge sort
4057 later on to detect any overlapping cases. */
4058 if (!head)
4059 {
4060 head = tail = cp;
4061 head->right = head->left = NULL;
4062 }
4063 else
4064 {
4065 tail->right = cp;
4066 tail->right->left = tail;
4067 tail = tail->right;
4068 tail->right = NULL;
4069 }
4070 }
4071 }
4072
4073 /* It there was a failure in the previous case label, give up
4074 for this case label list. Continue with the next block. */
4075 if (t == FAILURE)
4076 continue;
4077
4078 /* See if any case labels that are unreachable have been seen.
4079 If so, we eliminate them. This is a bit of a kludge because
4080 the case lists for a single case statement (label) is a
4081 single forward linked lists. */
4082 if (seen_unreachable)
4083 {
4084 /* Advance until the first case in the list is reachable. */
4085 while (body->ext.case_list != NULL
4086 && body->ext.case_list->unreachable)
4087 {
4088 gfc_case *n = body->ext.case_list;
4089 body->ext.case_list = body->ext.case_list->next;
4090 n->next = NULL;
4091 gfc_free_case_list (n);
4092 }
4093
4094 /* Strip all other unreachable cases. */
4095 if (body->ext.case_list)
4096 {
4097 for (cp = body->ext.case_list; cp->next; cp = cp->next)
4098 {
4099 if (cp->next->unreachable)
4100 {
4101 gfc_case *n = cp->next;
4102 cp->next = cp->next->next;
4103 n->next = NULL;
4104 gfc_free_case_list (n);
4105 }
4106 }
4107 }
4108 }
4109 }
4110
4111 /* See if there were overlapping cases. If the check returns NULL,
4112 there was overlap. In that case we don't do anything. If head
4113 is non-NULL, we prepend the DEFAULT case. The sorted list can
4114 then used during code generation for SELECT CASE constructs with
4115 a case expression of a CHARACTER type. */
4116 if (head)
4117 {
4118 head = check_case_overlap (head);
4119
4120 /* Prepend the default_case if it is there. */
4121 if (head != NULL && default_case)
4122 {
4123 default_case->left = NULL;
4124 default_case->right = head;
4125 head->left = default_case;
4126 }
4127 }
4128
4129 /* Eliminate dead blocks that may be the result if we've seen
4130 unreachable case labels for a block. */
4131 for (body = code; body && body->block; body = body->block)
4132 {
4133 if (body->block->ext.case_list == NULL)
4134 {
4135 /* Cut the unreachable block from the code chain. */
4136 gfc_code *c = body->block;
4137 body->block = c->block;
4138
4139 /* Kill the dead block, but not the blocks below it. */
4140 c->block = NULL;
4141 gfc_free_statements (c);
4142 }
4143 }
4144
4145 /* More than two cases is legal but insane for logical selects.
4146 Issue a warning for it. */
4147 if (gfc_option.warn_surprising && type == BT_LOGICAL
4148 && ncases > 2)
4149 gfc_warning ("Logical SELECT CASE block at %L has more that two cases",
4150 &code->loc);
4151 }
4152
4153
4154 /* Resolve a transfer statement. This is making sure that:
4155 -- a derived type being transferred has only non-pointer components
4156 -- a derived type being transferred doesn't have private components, unless
4157 it's being transferred from the module where the type was defined
4158 -- we're not trying to transfer a whole assumed size array. */
4159
4160 static void
4161 resolve_transfer (gfc_code * code)
4162 {
4163 gfc_typespec *ts;
4164 gfc_symbol *sym;
4165 gfc_ref *ref;
4166 gfc_expr *exp;
4167
4168 exp = code->expr;
4169
4170 if (exp->expr_type != EXPR_VARIABLE
4171 && exp->expr_type != EXPR_FUNCTION)
4172 return;
4173
4174 sym = exp->symtree->n.sym;
4175 ts = &sym->ts;
4176
4177 /* Go to actual component transferred. */
4178 for (ref = code->expr->ref; ref; ref = ref->next)
4179 if (ref->type == REF_COMPONENT)
4180 ts = &ref->u.c.component->ts;
4181
4182 if (ts->type == BT_DERIVED)
4183 {
4184 /* Check that transferred derived type doesn't contain POINTER
4185 components. */
4186 if (derived_pointer (ts->derived))
4187 {
4188 gfc_error ("Data transfer element at %L cannot have "
4189 "POINTER components", &code->loc);
4190 return;
4191 }
4192
4193 if (ts->derived->attr.alloc_comp)
4194 {
4195 gfc_error ("Data transfer element at %L cannot have "
4196 "ALLOCATABLE components", &code->loc);
4197 return;
4198 }
4199
4200 if (derived_inaccessible (ts->derived))
4201 {
4202 gfc_error ("Data transfer element at %L cannot have "
4203 "PRIVATE components",&code->loc);
4204 return;
4205 }
4206 }
4207
4208 if (sym->as != NULL && sym->as->type == AS_ASSUMED_SIZE
4209 && exp->ref->type == REF_ARRAY && exp->ref->u.ar.type == AR_FULL)
4210 {
4211 gfc_error ("Data transfer element at %L cannot be a full reference to "
4212 "an assumed-size array", &code->loc);
4213 return;
4214 }
4215 }
4216
4217
4218 /*********** Toplevel code resolution subroutines ***********/
4219
4220 /* Given a branch to a label and a namespace, if the branch is conforming.
4221 The code node described where the branch is located. */
4222
4223 static void
4224 resolve_branch (gfc_st_label * label, gfc_code * code)
4225 {
4226 gfc_code *block, *found;
4227 code_stack *stack;
4228 gfc_st_label *lp;
4229
4230 if (label == NULL)
4231 return;
4232 lp = label;
4233
4234 /* Step one: is this a valid branching target? */
4235
4236 if (lp->defined == ST_LABEL_UNKNOWN)
4237 {
4238 gfc_error ("Label %d referenced at %L is never defined", lp->value,
4239 &lp->where);
4240 return;
4241 }
4242
4243 if (lp->defined != ST_LABEL_TARGET)
4244 {
4245 gfc_error ("Statement at %L is not a valid branch target statement "
4246 "for the branch statement at %L", &lp->where, &code->loc);
4247 return;
4248 }
4249
4250 /* Step two: make sure this branch is not a branch to itself ;-) */
4251
4252 if (code->here == label)
4253 {
4254 gfc_warning ("Branch at %L causes an infinite loop", &code->loc);
4255 return;
4256 }
4257
4258 /* Step three: Try to find the label in the parse tree. To do this,
4259 we traverse the tree block-by-block: first the block that
4260 contains this GOTO, then the block that it is nested in, etc. We
4261 can ignore other blocks because branching into another block is
4262 not allowed. */
4263
4264 found = NULL;
4265
4266 for (stack = cs_base; stack; stack = stack->prev)
4267 {
4268 for (block = stack->head; block; block = block->next)
4269 {
4270 if (block->here == label)
4271 {
4272 found = block;
4273 break;
4274 }
4275 }
4276
4277 if (found)
4278 break;
4279 }
4280
4281 if (found == NULL)
4282 {
4283 /* The label is not in an enclosing block, so illegal. This was
4284 allowed in Fortran 66, so we allow it as extension. We also
4285 forego further checks if we run into this. */
4286 gfc_notify_std (GFC_STD_LEGACY,
4287 "Label at %L is not in the same block as the "
4288 "GOTO statement at %L", &lp->where, &code->loc);
4289 return;
4290 }
4291
4292 /* Step four: Make sure that the branching target is legal if
4293 the statement is an END {SELECT,DO,IF}. */
4294
4295 if (found->op == EXEC_NOP)
4296 {
4297 for (stack = cs_base; stack; stack = stack->prev)
4298 if (stack->current->next == found)
4299 break;
4300
4301 if (stack == NULL)
4302 gfc_notify_std (GFC_STD_F95_DEL,
4303 "Obsolete: GOTO at %L jumps to END of construct at %L",
4304 &code->loc, &found->loc);
4305 }
4306 }
4307
4308
4309 /* Check whether EXPR1 has the same shape as EXPR2. */
4310
4311 static try
4312 resolve_where_shape (gfc_expr *expr1, gfc_expr *expr2)
4313 {
4314 mpz_t shape[GFC_MAX_DIMENSIONS];
4315 mpz_t shape2[GFC_MAX_DIMENSIONS];
4316 try result = FAILURE;
4317 int i;
4318
4319 /* Compare the rank. */
4320 if (expr1->rank != expr2->rank)
4321 return result;
4322
4323 /* Compare the size of each dimension. */
4324 for (i=0; i<expr1->rank; i++)
4325 {
4326 if (gfc_array_dimen_size (expr1, i, &shape[i]) == FAILURE)
4327 goto ignore;
4328
4329 if (gfc_array_dimen_size (expr2, i, &shape2[i]) == FAILURE)
4330 goto ignore;
4331
4332 if (mpz_cmp (shape[i], shape2[i]))
4333 goto over;
4334 }
4335
4336 /* When either of the two expression is an assumed size array, we
4337 ignore the comparison of dimension sizes. */
4338 ignore:
4339 result = SUCCESS;
4340
4341 over:
4342 for (i--; i>=0; i--)
4343 {
4344 mpz_clear (shape[i]);
4345 mpz_clear (shape2[i]);
4346 }
4347 return result;
4348 }
4349
4350
4351 /* Check whether a WHERE assignment target or a WHERE mask expression
4352 has the same shape as the outmost WHERE mask expression. */
4353
4354 static void
4355 resolve_where (gfc_code *code, gfc_expr *mask)
4356 {
4357 gfc_code *cblock;
4358 gfc_code *cnext;
4359 gfc_expr *e = NULL;
4360
4361 cblock = code->block;
4362
4363 /* Store the first WHERE mask-expr of the WHERE statement or construct.
4364 In case of nested WHERE, only the outmost one is stored. */
4365 if (mask == NULL) /* outmost WHERE */
4366 e = cblock->expr;
4367 else /* inner WHERE */
4368 e = mask;
4369
4370 while (cblock)
4371 {
4372 if (cblock->expr)
4373 {
4374 /* Check if the mask-expr has a consistent shape with the
4375 outmost WHERE mask-expr. */
4376 if (resolve_where_shape (cblock->expr, e) == FAILURE)
4377 gfc_error ("WHERE mask at %L has inconsistent shape",
4378 &cblock->expr->where);
4379 }
4380
4381 /* the assignment statement of a WHERE statement, or the first
4382 statement in where-body-construct of a WHERE construct */
4383 cnext = cblock->next;
4384 while (cnext)
4385 {
4386 switch (cnext->op)
4387 {
4388 /* WHERE assignment statement */
4389 case EXEC_ASSIGN:
4390
4391 /* Check shape consistent for WHERE assignment target. */
4392 if (e && resolve_where_shape (cnext->expr, e) == FAILURE)
4393 gfc_error ("WHERE assignment target at %L has "
4394 "inconsistent shape", &cnext->expr->where);
4395 break;
4396
4397 /* WHERE or WHERE construct is part of a where-body-construct */
4398 case EXEC_WHERE:
4399 resolve_where (cnext, e);
4400 break;
4401
4402 default:
4403 gfc_error ("Unsupported statement inside WHERE at %L",
4404 &cnext->loc);
4405 }
4406 /* the next statement within the same where-body-construct */
4407 cnext = cnext->next;
4408 }
4409 /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
4410 cblock = cblock->block;
4411 }
4412 }
4413
4414
4415 /* Check whether the FORALL index appears in the expression or not. */
4416
4417 static try
4418 gfc_find_forall_index (gfc_expr *expr, gfc_symbol *symbol)
4419 {
4420 gfc_array_ref ar;
4421 gfc_ref *tmp;
4422 gfc_actual_arglist *args;
4423 int i;
4424
4425 switch (expr->expr_type)
4426 {
4427 case EXPR_VARIABLE:
4428 gcc_assert (expr->symtree->n.sym);
4429
4430 /* A scalar assignment */
4431 if (!expr->ref)
4432 {
4433 if (expr->symtree->n.sym == symbol)
4434 return SUCCESS;
4435 else
4436 return FAILURE;
4437 }
4438
4439 /* the expr is array ref, substring or struct component. */
4440 tmp = expr->ref;
4441 while (tmp != NULL)
4442 {
4443 switch (tmp->type)
4444 {
4445 case REF_ARRAY:
4446 /* Check if the symbol appears in the array subscript. */
4447 ar = tmp->u.ar;
4448 for (i = 0; i < GFC_MAX_DIMENSIONS; i++)
4449 {
4450 if (ar.start[i])
4451 if (gfc_find_forall_index (ar.start[i], symbol) == SUCCESS)
4452 return SUCCESS;
4453
4454 if (ar.end[i])
4455 if (gfc_find_forall_index (ar.end[i], symbol) == SUCCESS)
4456 return SUCCESS;
4457
4458 if (ar.stride[i])
4459 if (gfc_find_forall_index (ar.stride[i], symbol) == SUCCESS)
4460 return SUCCESS;
4461 } /* end for */
4462 break;
4463
4464 case REF_SUBSTRING:
4465 if (expr->symtree->n.sym == symbol)
4466 return SUCCESS;
4467 tmp = expr->ref;
4468 /* Check if the symbol appears in the substring section. */
4469 if (gfc_find_forall_index (tmp->u.ss.start, symbol) == SUCCESS)
4470 return SUCCESS;
4471 if (gfc_find_forall_index (tmp->u.ss.end, symbol) == SUCCESS)
4472 return SUCCESS;
4473 break;
4474
4475 case REF_COMPONENT:
4476 break;
4477
4478 default:
4479 gfc_error("expression reference type error at %L", &expr->where);
4480 }
4481 tmp = tmp->next;
4482 }
4483 break;
4484
4485 /* If the expression is a function call, then check if the symbol
4486 appears in the actual arglist of the function. */
4487 case EXPR_FUNCTION:
4488 for (args = expr->value.function.actual; args; args = args->next)
4489 {
4490 if (gfc_find_forall_index(args->expr,symbol) == SUCCESS)
4491 return SUCCESS;
4492 }
4493 break;
4494
4495 /* It seems not to happen. */
4496 case EXPR_SUBSTRING:
4497 if (expr->ref)
4498 {
4499 tmp = expr->ref;
4500 gcc_assert (expr->ref->type == REF_SUBSTRING);
4501 if (gfc_find_forall_index (tmp->u.ss.start, symbol) == SUCCESS)
4502 return SUCCESS;
4503 if (gfc_find_forall_index (tmp->u.ss.end, symbol) == SUCCESS)
4504 return SUCCESS;
4505 }
4506 break;
4507
4508 /* It seems not to happen. */
4509 case EXPR_STRUCTURE:
4510 case EXPR_ARRAY:
4511 gfc_error ("Unsupported statement while finding forall index in "
4512 "expression");
4513 break;
4514
4515 case EXPR_OP:
4516 /* Find the FORALL index in the first operand. */
4517 if (expr->value.op.op1)
4518 {
4519 if (gfc_find_forall_index (expr->value.op.op1, symbol) == SUCCESS)
4520 return SUCCESS;
4521 }
4522
4523 /* Find the FORALL index in the second operand. */
4524 if (expr->value.op.op2)
4525 {
4526 if (gfc_find_forall_index (expr->value.op.op2, symbol) == SUCCESS)
4527 return SUCCESS;
4528 }
4529 break;
4530
4531 default:
4532 break;
4533 }
4534
4535 return FAILURE;
4536 }
4537
4538
4539 /* Resolve assignment in FORALL construct.
4540 NVAR is the number of FORALL index variables, and VAR_EXPR records the
4541 FORALL index variables. */
4542
4543 static void
4544 gfc_resolve_assign_in_forall (gfc_code *code, int nvar, gfc_expr **var_expr)
4545 {
4546 int n;
4547
4548 for (n = 0; n < nvar; n++)
4549 {
4550 gfc_symbol *forall_index;
4551
4552 forall_index = var_expr[n]->symtree->n.sym;
4553
4554 /* Check whether the assignment target is one of the FORALL index
4555 variable. */
4556 if ((code->expr->expr_type == EXPR_VARIABLE)
4557 && (code->expr->symtree->n.sym == forall_index))
4558 gfc_error ("Assignment to a FORALL index variable at %L",
4559 &code->expr->where);
4560 else
4561 {
4562 /* If one of the FORALL index variables doesn't appear in the
4563 assignment target, then there will be a many-to-one
4564 assignment. */
4565 if (gfc_find_forall_index (code->expr, forall_index) == FAILURE)
4566 gfc_error ("The FORALL with index '%s' cause more than one "
4567 "assignment to this object at %L",
4568 var_expr[n]->symtree->name, &code->expr->where);
4569 }
4570 }
4571 }
4572
4573
4574 /* Resolve WHERE statement in FORALL construct. */
4575
4576 static void
4577 gfc_resolve_where_code_in_forall (gfc_code *code, int nvar, gfc_expr **var_expr){
4578 gfc_code *cblock;
4579 gfc_code *cnext;
4580
4581 cblock = code->block;
4582 while (cblock)
4583 {
4584 /* the assignment statement of a WHERE statement, or the first
4585 statement in where-body-construct of a WHERE construct */
4586 cnext = cblock->next;
4587 while (cnext)
4588 {
4589 switch (cnext->op)
4590 {
4591 /* WHERE assignment statement */
4592 case EXEC_ASSIGN:
4593 gfc_resolve_assign_in_forall (cnext, nvar, var_expr);
4594 break;
4595
4596 /* WHERE or WHERE construct is part of a where-body-construct */
4597 case EXEC_WHERE:
4598 gfc_resolve_where_code_in_forall (cnext, nvar, var_expr);
4599 break;
4600
4601 default:
4602 gfc_error ("Unsupported statement inside WHERE at %L",
4603 &cnext->loc);
4604 }
4605 /* the next statement within the same where-body-construct */
4606 cnext = cnext->next;
4607 }
4608 /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
4609 cblock = cblock->block;
4610 }
4611 }
4612
4613
4614 /* Traverse the FORALL body to check whether the following errors exist:
4615 1. For assignment, check if a many-to-one assignment happens.
4616 2. For WHERE statement, check the WHERE body to see if there is any
4617 many-to-one assignment. */
4618
4619 static void
4620 gfc_resolve_forall_body (gfc_code *code, int nvar, gfc_expr **var_expr)
4621 {
4622 gfc_code *c;
4623
4624 c = code->block->next;
4625 while (c)
4626 {
4627 switch (c->op)
4628 {
4629 case EXEC_ASSIGN:
4630 case EXEC_POINTER_ASSIGN:
4631 gfc_resolve_assign_in_forall (c, nvar, var_expr);
4632 break;
4633
4634 /* Because the gfc_resolve_blocks() will handle the nested FORALL,
4635 there is no need to handle it here. */
4636 case EXEC_FORALL:
4637 break;
4638 case EXEC_WHERE:
4639 gfc_resolve_where_code_in_forall(c, nvar, var_expr);
4640 break;
4641 default:
4642 break;
4643 }
4644 /* The next statement in the FORALL body. */
4645 c = c->next;
4646 }
4647 }
4648
4649
4650 /* Given a FORALL construct, first resolve the FORALL iterator, then call
4651 gfc_resolve_forall_body to resolve the FORALL body. */
4652
4653 static void
4654 gfc_resolve_forall (gfc_code *code, gfc_namespace *ns, int forall_save)
4655 {
4656 static gfc_expr **var_expr;
4657 static int total_var = 0;
4658 static int nvar = 0;
4659 gfc_forall_iterator *fa;
4660 gfc_symbol *forall_index;
4661 gfc_code *next;
4662 int i;
4663
4664 /* Start to resolve a FORALL construct */
4665 if (forall_save == 0)
4666 {
4667 /* Count the total number of FORALL index in the nested FORALL
4668 construct in order to allocate the VAR_EXPR with proper size. */
4669 next = code;
4670 while ((next != NULL) && (next->op == EXEC_FORALL))
4671 {
4672 for (fa = next->ext.forall_iterator; fa; fa = fa->next)
4673 total_var ++;
4674 next = next->block->next;
4675 }
4676
4677 /* Allocate VAR_EXPR with NUMBER_OF_FORALL_INDEX elements. */
4678 var_expr = (gfc_expr **) gfc_getmem (total_var * sizeof (gfc_expr *));
4679 }
4680
4681 /* The information about FORALL iterator, including FORALL index start, end
4682 and stride. The FORALL index can not appear in start, end or stride. */
4683 for (fa = code->ext.forall_iterator; fa; fa = fa->next)
4684 {
4685 /* Check if any outer FORALL index name is the same as the current
4686 one. */
4687 for (i = 0; i < nvar; i++)
4688 {
4689 if (fa->var->symtree->n.sym == var_expr[i]->symtree->n.sym)
4690 {
4691 gfc_error ("An outer FORALL construct already has an index "
4692 "with this name %L", &fa->var->where);
4693 }
4694 }
4695
4696 /* Record the current FORALL index. */
4697 var_expr[nvar] = gfc_copy_expr (fa->var);
4698
4699 forall_index = fa->var->symtree->n.sym;
4700
4701 /* Check if the FORALL index appears in start, end or stride. */
4702 if (gfc_find_forall_index (fa->start, forall_index) == SUCCESS)
4703 gfc_error ("A FORALL index must not appear in a limit or stride "
4704 "expression in the same FORALL at %L", &fa->start->where);
4705 if (gfc_find_forall_index (fa->end, forall_index) == SUCCESS)
4706 gfc_error ("A FORALL index must not appear in a limit or stride "
4707 "expression in the same FORALL at %L", &fa->end->where);
4708 if (gfc_find_forall_index (fa->stride, forall_index) == SUCCESS)
4709 gfc_error ("A FORALL index must not appear in a limit or stride "
4710 "expression in the same FORALL at %L", &fa->stride->where);
4711 nvar++;
4712 }
4713
4714 /* Resolve the FORALL body. */
4715 gfc_resolve_forall_body (code, nvar, var_expr);
4716
4717 /* May call gfc_resolve_forall to resolve the inner FORALL loop. */
4718 gfc_resolve_blocks (code->block, ns);
4719
4720 /* Free VAR_EXPR after the whole FORALL construct resolved. */
4721 for (i = 0; i < total_var; i++)
4722 gfc_free_expr (var_expr[i]);
4723
4724 /* Reset the counters. */
4725 total_var = 0;
4726 nvar = 0;
4727 }
4728
4729
4730 /* Resolve lists of blocks found in IF, SELECT CASE, WHERE, FORALL ,GOTO and
4731 DO code nodes. */
4732
4733 static void resolve_code (gfc_code *, gfc_namespace *);
4734
4735 void
4736 gfc_resolve_blocks (gfc_code * b, gfc_namespace * ns)
4737 {
4738 try t;
4739
4740 for (; b; b = b->block)
4741 {
4742 t = gfc_resolve_expr (b->expr);
4743 if (gfc_resolve_expr (b->expr2) == FAILURE)
4744 t = FAILURE;
4745
4746 switch (b->op)
4747 {
4748 case EXEC_IF:
4749 if (t == SUCCESS && b->expr != NULL
4750 && (b->expr->ts.type != BT_LOGICAL || b->expr->rank != 0))
4751 gfc_error
4752 ("ELSE IF clause at %L requires a scalar LOGICAL expression",
4753 &b->expr->where);
4754 break;
4755
4756 case EXEC_WHERE:
4757 if (t == SUCCESS
4758 && b->expr != NULL
4759 && (b->expr->ts.type != BT_LOGICAL
4760 || b->expr->rank == 0))
4761 gfc_error
4762 ("WHERE/ELSEWHERE clause at %L requires a LOGICAL array",
4763 &b->expr->where);
4764 break;
4765
4766 case EXEC_GOTO:
4767 resolve_branch (b->label, b);
4768 break;
4769
4770 case EXEC_SELECT:
4771 case EXEC_FORALL:
4772 case EXEC_DO:
4773 case EXEC_DO_WHILE:
4774 case EXEC_READ:
4775 case EXEC_WRITE:
4776 case EXEC_IOLENGTH:
4777 break;
4778
4779 case EXEC_OMP_ATOMIC:
4780 case EXEC_OMP_CRITICAL:
4781 case EXEC_OMP_DO:
4782 case EXEC_OMP_MASTER:
4783 case EXEC_OMP_ORDERED:
4784 case EXEC_OMP_PARALLEL:
4785 case EXEC_OMP_PARALLEL_DO:
4786 case EXEC_OMP_PARALLEL_SECTIONS:
4787 case EXEC_OMP_PARALLEL_WORKSHARE:
4788 case EXEC_OMP_SECTIONS:
4789 case EXEC_OMP_SINGLE:
4790 case EXEC_OMP_WORKSHARE:
4791 break;
4792
4793 default:
4794 gfc_internal_error ("resolve_block(): Bad block type");
4795 }
4796
4797 resolve_code (b->next, ns);
4798 }
4799 }
4800
4801
4802 /* Given a block of code, recursively resolve everything pointed to by this
4803 code block. */
4804
4805 static void
4806 resolve_code (gfc_code * code, gfc_namespace * ns)
4807 {
4808 int omp_workshare_save;
4809 int forall_save;
4810 code_stack frame;
4811 gfc_alloc *a;
4812 try t;
4813
4814 frame.prev = cs_base;
4815 frame.head = code;
4816 cs_base = &frame;
4817
4818 for (; code; code = code->next)
4819 {
4820 frame.current = code;
4821 forall_save = forall_flag;
4822
4823 if (code->op == EXEC_FORALL)
4824 {
4825 forall_flag = 1;
4826 gfc_resolve_forall (code, ns, forall_save);
4827 forall_flag = 2;
4828 }
4829 else if (code->block)
4830 {
4831 omp_workshare_save = -1;
4832 switch (code->op)
4833 {
4834 case EXEC_OMP_PARALLEL_WORKSHARE:
4835 omp_workshare_save = omp_workshare_flag;
4836 omp_workshare_flag = 1;
4837 gfc_resolve_omp_parallel_blocks (code, ns);
4838 break;
4839 case EXEC_OMP_PARALLEL:
4840 case EXEC_OMP_PARALLEL_DO:
4841 case EXEC_OMP_PARALLEL_SECTIONS:
4842 omp_workshare_save = omp_workshare_flag;
4843 omp_workshare_flag = 0;
4844 gfc_resolve_omp_parallel_blocks (code, ns);
4845 break;
4846 case EXEC_OMP_DO:
4847 gfc_resolve_omp_do_blocks (code, ns);
4848 break;
4849 case EXEC_OMP_WORKSHARE:
4850 omp_workshare_save = omp_workshare_flag;
4851 omp_workshare_flag = 1;
4852 /* FALLTHROUGH */
4853 default:
4854 gfc_resolve_blocks (code->block, ns);
4855 break;
4856 }
4857
4858 if (omp_workshare_save != -1)
4859 omp_workshare_flag = omp_workshare_save;
4860 }
4861
4862 t = gfc_resolve_expr (code->expr);
4863 forall_flag = forall_save;
4864
4865 if (gfc_resolve_expr (code->expr2) == FAILURE)
4866 t = FAILURE;
4867
4868 switch (code->op)
4869 {
4870 case EXEC_NOP:
4871 case EXEC_CYCLE:
4872 case EXEC_PAUSE:
4873 case EXEC_STOP:
4874 case EXEC_EXIT:
4875 case EXEC_CONTINUE:
4876 case EXEC_DT_END:
4877 break;
4878
4879 case EXEC_ENTRY:
4880 /* Keep track of which entry we are up to. */
4881 current_entry_id = code->ext.entry->id;
4882 break;
4883
4884 case EXEC_WHERE:
4885 resolve_where (code, NULL);
4886 break;
4887
4888 case EXEC_GOTO:
4889 if (code->expr != NULL)
4890 {
4891 if (code->expr->ts.type != BT_INTEGER)
4892 gfc_error ("ASSIGNED GOTO statement at %L requires an INTEGER "
4893 "variable", &code->expr->where);
4894 else if (code->expr->symtree->n.sym->attr.assign != 1)
4895 gfc_error ("Variable '%s' has not been assigned a target label "
4896 "at %L", code->expr->symtree->n.sym->name,
4897 &code->expr->where);
4898 }
4899 else
4900 resolve_branch (code->label, code);
4901 break;
4902
4903 case EXEC_RETURN:
4904 if (code->expr != NULL
4905 && (code->expr->ts.type != BT_INTEGER || code->expr->rank))
4906 gfc_error ("Alternate RETURN statement at %L requires a SCALAR-"
4907 "INTEGER return specifier", &code->expr->where);
4908 break;
4909
4910 case EXEC_INIT_ASSIGN:
4911 break;
4912
4913 case EXEC_ASSIGN:
4914 if (t == FAILURE)
4915 break;
4916
4917 if (gfc_extend_assign (code, ns) == SUCCESS)
4918 {
4919 if (gfc_pure (NULL) && !gfc_pure (code->symtree->n.sym))
4920 {
4921 gfc_error ("Subroutine '%s' called instead of assignment at "
4922 "%L must be PURE", code->symtree->n.sym->name,
4923 &code->loc);
4924 break;
4925 }
4926 goto call;
4927 }
4928
4929 if (gfc_pure (NULL))
4930 {
4931 if (gfc_impure_variable (code->expr->symtree->n.sym))
4932 {
4933 gfc_error
4934 ("Cannot assign to variable '%s' in PURE procedure at %L",
4935 code->expr->symtree->n.sym->name, &code->expr->where);
4936 break;
4937 }
4938
4939 if (code->expr2->ts.type == BT_DERIVED
4940 && derived_pointer (code->expr2->ts.derived))
4941 {
4942 gfc_error
4943 ("Right side of assignment at %L is a derived type "
4944 "containing a POINTER in a PURE procedure",
4945 &code->expr2->where);
4946 break;
4947 }
4948 }
4949
4950 gfc_check_assign (code->expr, code->expr2, 1);
4951 break;
4952
4953 case EXEC_LABEL_ASSIGN:
4954 if (code->label->defined == ST_LABEL_UNKNOWN)
4955 gfc_error ("Label %d referenced at %L is never defined",
4956 code->label->value, &code->label->where);
4957 if (t == SUCCESS
4958 && (code->expr->expr_type != EXPR_VARIABLE
4959 || code->expr->symtree->n.sym->ts.type != BT_INTEGER
4960 || code->expr->symtree->n.sym->ts.kind
4961 != gfc_default_integer_kind
4962 || code->expr->symtree->n.sym->as != NULL))
4963 gfc_error ("ASSIGN statement at %L requires a scalar "
4964 "default INTEGER variable", &code->expr->where);
4965 break;
4966
4967 case EXEC_POINTER_ASSIGN:
4968 if (t == FAILURE)
4969 break;
4970
4971 gfc_check_pointer_assign (code->expr, code->expr2);
4972 break;
4973
4974 case EXEC_ARITHMETIC_IF:
4975 if (t == SUCCESS
4976 && code->expr->ts.type != BT_INTEGER
4977 && code->expr->ts.type != BT_REAL)
4978 gfc_error ("Arithmetic IF statement at %L requires a numeric "
4979 "expression", &code->expr->where);
4980
4981 resolve_branch (code->label, code);
4982 resolve_branch (code->label2, code);
4983 resolve_branch (code->label3, code);
4984 break;
4985
4986 case EXEC_IF:
4987 if (t == SUCCESS && code->expr != NULL
4988 && (code->expr->ts.type != BT_LOGICAL
4989 || code->expr->rank != 0))
4990 gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
4991 &code->expr->where);
4992 break;
4993
4994 case EXEC_CALL:
4995 call:
4996 resolve_call (code);
4997 break;
4998
4999 case EXEC_SELECT:
5000 /* Select is complicated. Also, a SELECT construct could be
5001 a transformed computed GOTO. */
5002 resolve_select (code);
5003 break;
5004
5005 case EXEC_DO:
5006 if (code->ext.iterator != NULL)
5007 {
5008 gfc_iterator *iter = code->ext.iterator;
5009 if (gfc_resolve_iterator (iter, true) != FAILURE)
5010 gfc_resolve_do_iterator (code, iter->var->symtree->n.sym);
5011 }
5012 break;
5013
5014 case EXEC_DO_WHILE:
5015 if (code->expr == NULL)
5016 gfc_internal_error ("resolve_code(): No expression on DO WHILE");
5017 if (t == SUCCESS
5018 && (code->expr->rank != 0
5019 || code->expr->ts.type != BT_LOGICAL))
5020 gfc_error ("Exit condition of DO WHILE loop at %L must be "
5021 "a scalar LOGICAL expression", &code->expr->where);
5022 break;
5023
5024 case EXEC_ALLOCATE:
5025 if (t == SUCCESS && code->expr != NULL
5026 && code->expr->ts.type != BT_INTEGER)
5027 gfc_error ("STAT tag in ALLOCATE statement at %L must be "
5028 "of type INTEGER", &code->expr->where);
5029
5030 for (a = code->ext.alloc_list; a; a = a->next)
5031 resolve_allocate_expr (a->expr, code);
5032
5033 break;
5034
5035 case EXEC_DEALLOCATE:
5036 if (t == SUCCESS && code->expr != NULL
5037 && code->expr->ts.type != BT_INTEGER)
5038 gfc_error
5039 ("STAT tag in DEALLOCATE statement at %L must be of type "
5040 "INTEGER", &code->expr->where);
5041
5042 for (a = code->ext.alloc_list; a; a = a->next)
5043 resolve_deallocate_expr (a->expr);
5044
5045 break;
5046
5047 case EXEC_OPEN:
5048 if (gfc_resolve_open (code->ext.open) == FAILURE)
5049 break;
5050
5051 resolve_branch (code->ext.open->err, code);
5052 break;
5053
5054 case EXEC_CLOSE:
5055 if (gfc_resolve_close (code->ext.close) == FAILURE)
5056 break;
5057
5058 resolve_branch (code->ext.close->err, code);
5059 break;
5060
5061 case EXEC_BACKSPACE:
5062 case EXEC_ENDFILE:
5063 case EXEC_REWIND:
5064 case EXEC_FLUSH:
5065 if (gfc_resolve_filepos (code->ext.filepos) == FAILURE)
5066 break;
5067
5068 resolve_branch (code->ext.filepos->err, code);
5069 break;
5070
5071 case EXEC_INQUIRE:
5072 if (gfc_resolve_inquire (code->ext.inquire) == FAILURE)
5073 break;
5074
5075 resolve_branch (code->ext.inquire->err, code);
5076 break;
5077
5078 case EXEC_IOLENGTH:
5079 gcc_assert (code->ext.inquire != NULL);
5080 if (gfc_resolve_inquire (code->ext.inquire) == FAILURE)
5081 break;
5082
5083 resolve_branch (code->ext.inquire->err, code);
5084 break;
5085
5086 case EXEC_READ:
5087 case EXEC_WRITE:
5088 if (gfc_resolve_dt (code->ext.dt) == FAILURE)
5089 break;
5090
5091 resolve_branch (code->ext.dt->err, code);
5092 resolve_branch (code->ext.dt->end, code);
5093 resolve_branch (code->ext.dt->eor, code);
5094 break;
5095
5096 case EXEC_TRANSFER:
5097 resolve_transfer (code);
5098 break;
5099
5100 case EXEC_FORALL:
5101 resolve_forall_iterators (code->ext.forall_iterator);
5102
5103 if (code->expr != NULL && code->expr->ts.type != BT_LOGICAL)
5104 gfc_error
5105 ("FORALL mask clause at %L requires a LOGICAL expression",
5106 &code->expr->where);
5107 break;
5108
5109 case EXEC_OMP_ATOMIC:
5110 case EXEC_OMP_BARRIER:
5111 case EXEC_OMP_CRITICAL:
5112 case EXEC_OMP_FLUSH:
5113 case EXEC_OMP_DO:
5114 case EXEC_OMP_MASTER:
5115 case EXEC_OMP_ORDERED:
5116 case EXEC_OMP_SECTIONS:
5117 case EXEC_OMP_SINGLE:
5118 case EXEC_OMP_WORKSHARE:
5119 gfc_resolve_omp_directive (code, ns);
5120 break;
5121
5122 case EXEC_OMP_PARALLEL:
5123 case EXEC_OMP_PARALLEL_DO:
5124 case EXEC_OMP_PARALLEL_SECTIONS:
5125 case EXEC_OMP_PARALLEL_WORKSHARE:
5126 omp_workshare_save = omp_workshare_flag;
5127 omp_workshare_flag = 0;
5128 gfc_resolve_omp_directive (code, ns);
5129 omp_workshare_flag = omp_workshare_save;
5130 break;
5131
5132 default:
5133 gfc_internal_error ("resolve_code(): Bad statement code");
5134 }
5135 }
5136
5137 cs_base = frame.prev;
5138 }
5139
5140
5141 /* Resolve initial values and make sure they are compatible with
5142 the variable. */
5143
5144 static void
5145 resolve_values (gfc_symbol * sym)
5146 {
5147
5148 if (sym->value == NULL)
5149 return;
5150
5151 if (gfc_resolve_expr (sym->value) == FAILURE)
5152 return;
5153
5154 gfc_check_assign_symbol (sym, sym->value);
5155 }
5156
5157
5158 /* Resolve an index expression. */
5159
5160 static try
5161 resolve_index_expr (gfc_expr * e)
5162 {
5163 if (gfc_resolve_expr (e) == FAILURE)
5164 return FAILURE;
5165
5166 if (gfc_simplify_expr (e, 0) == FAILURE)
5167 return FAILURE;
5168
5169 if (gfc_specification_expr (e) == FAILURE)
5170 return FAILURE;
5171
5172 return SUCCESS;
5173 }
5174
5175 /* Resolve a charlen structure. */
5176
5177 static try
5178 resolve_charlen (gfc_charlen *cl)
5179 {
5180 if (cl->resolved)
5181 return SUCCESS;
5182
5183 cl->resolved = 1;
5184
5185 specification_expr = 1;
5186
5187 if (resolve_index_expr (cl->length) == FAILURE)
5188 {
5189 specification_expr = 0;
5190 return FAILURE;
5191 }
5192
5193 return SUCCESS;
5194 }
5195
5196
5197 /* Test for non-constant shape arrays. */
5198
5199 static bool
5200 is_non_constant_shape_array (gfc_symbol *sym)
5201 {
5202 gfc_expr *e;
5203 int i;
5204 bool not_constant;
5205
5206 not_constant = false;
5207 if (sym->as != NULL)
5208 {
5209 /* Unfortunately, !gfc_is_compile_time_shape hits a legal case that
5210 has not been simplified; parameter array references. Do the
5211 simplification now. */
5212 for (i = 0; i < sym->as->rank; i++)
5213 {
5214 e = sym->as->lower[i];
5215 if (e && (resolve_index_expr (e) == FAILURE
5216 || !gfc_is_constant_expr (e)))
5217 not_constant = true;
5218
5219 e = sym->as->upper[i];
5220 if (e && (resolve_index_expr (e) == FAILURE
5221 || !gfc_is_constant_expr (e)))
5222 not_constant = true;
5223 }
5224 }
5225 return not_constant;
5226 }
5227
5228
5229 /* Assign the default initializer to a derived type variable or result. */
5230
5231 static void
5232 apply_default_init (gfc_symbol *sym)
5233 {
5234 gfc_expr *lval;
5235 gfc_expr *init = NULL;
5236 gfc_code *init_st;
5237 gfc_namespace *ns = sym->ns;
5238
5239 if (sym->attr.flavor != FL_VARIABLE && !sym->attr.function)
5240 return;
5241
5242 if (sym->ts.type == BT_DERIVED && sym->ts.derived)
5243 init = gfc_default_initializer (&sym->ts);
5244
5245 if (init == NULL)
5246 return;
5247
5248 /* Search for the function namespace if this is a contained
5249 function without an explicit result. */
5250 if (sym->attr.function && sym == sym->result
5251 && sym->name != sym->ns->proc_name->name)
5252 {
5253 ns = ns->contained;
5254 for (;ns; ns = ns->sibling)
5255 if (strcmp (ns->proc_name->name, sym->name) == 0)
5256 break;
5257 }
5258
5259 if (ns == NULL)
5260 {
5261 gfc_free_expr (init);
5262 return;
5263 }
5264
5265 /* Build an l-value expression for the result. */
5266 lval = gfc_get_expr ();
5267 lval->expr_type = EXPR_VARIABLE;
5268 lval->where = sym->declared_at;
5269 lval->ts = sym->ts;
5270 lval->symtree = gfc_find_symtree (sym->ns->sym_root, sym->name);
5271
5272 /* It will always be a full array. */
5273 lval->rank = sym->as ? sym->as->rank : 0;
5274 if (lval->rank)
5275 {
5276 lval->ref = gfc_get_ref ();
5277 lval->ref->type = REF_ARRAY;
5278 lval->ref->u.ar.type = AR_FULL;
5279 lval->ref->u.ar.dimen = lval->rank;
5280 lval->ref->u.ar.where = sym->declared_at;
5281 lval->ref->u.ar.as = sym->as;
5282 }
5283
5284 /* Add the code at scope entry. */
5285 init_st = gfc_get_code ();
5286 init_st->next = ns->code;
5287 ns->code = init_st;
5288
5289 /* Assign the default initializer to the l-value. */
5290 init_st->loc = sym->declared_at;
5291 init_st->op = EXEC_INIT_ASSIGN;
5292 init_st->expr = lval;
5293 init_st->expr2 = init;
5294 }
5295
5296
5297 /* Resolution of common features of flavors variable and procedure. */
5298
5299 static try
5300 resolve_fl_var_and_proc (gfc_symbol *sym, int mp_flag)
5301 {
5302 /* Constraints on deferred shape variable. */
5303 if (sym->as == NULL || sym->as->type != AS_DEFERRED)
5304 {
5305 if (sym->attr.allocatable)
5306 {
5307 if (sym->attr.dimension)
5308 gfc_error ("Allocatable array '%s' at %L must have "
5309 "a deferred shape", sym->name, &sym->declared_at);
5310 else
5311 gfc_error ("Scalar object '%s' at %L may not be ALLOCATABLE",
5312 sym->name, &sym->declared_at);
5313 return FAILURE;
5314 }
5315
5316 if (sym->attr.pointer && sym->attr.dimension)
5317 {
5318 gfc_error ("Array pointer '%s' at %L must have a deferred shape",
5319 sym->name, &sym->declared_at);
5320 return FAILURE;
5321 }
5322
5323 }
5324 else
5325 {
5326 if (!mp_flag && !sym->attr.allocatable
5327 && !sym->attr.pointer && !sym->attr.dummy)
5328 {
5329 gfc_error ("Array '%s' at %L cannot have a deferred shape",
5330 sym->name, &sym->declared_at);
5331 return FAILURE;
5332 }
5333 }
5334 return SUCCESS;
5335 }
5336
5337 /* Resolve symbols with flavor variable. */
5338
5339 static try
5340 resolve_fl_variable (gfc_symbol *sym, int mp_flag)
5341 {
5342 int flag;
5343 int i;
5344 gfc_expr *e;
5345 gfc_expr *constructor_expr;
5346 const char * auto_save_msg;
5347
5348 auto_save_msg = "automatic object '%s' at %L cannot have the "
5349 "SAVE attribute";
5350
5351 if (resolve_fl_var_and_proc (sym, mp_flag) == FAILURE)
5352 return FAILURE;
5353
5354 /* Set this flag to check that variables are parameters of all entries.
5355 This check is effected by the call to gfc_resolve_expr through
5356 is_non_constant_shape_array. */
5357 specification_expr = 1;
5358
5359 if (!sym->attr.use_assoc
5360 && !sym->attr.allocatable
5361 && !sym->attr.pointer
5362 && is_non_constant_shape_array (sym))
5363 {
5364 /* The shape of a main program or module array needs to be constant. */
5365 if (sym->ns->proc_name
5366 && (sym->ns->proc_name->attr.flavor == FL_MODULE
5367 || sym->ns->proc_name->attr.is_main_program))
5368 {
5369 gfc_error ("The module or main program array '%s' at %L must "
5370 "have constant shape", sym->name, &sym->declared_at);
5371 specification_expr = 0;
5372 return FAILURE;
5373 }
5374 }
5375
5376 if (sym->ts.type == BT_CHARACTER)
5377 {
5378 /* Make sure that character string variables with assumed length are
5379 dummy arguments. */
5380 e = sym->ts.cl->length;
5381 if (e == NULL && !sym->attr.dummy && !sym->attr.result)
5382 {
5383 gfc_error ("Entity with assumed character length at %L must be a "
5384 "dummy argument or a PARAMETER", &sym->declared_at);
5385 return FAILURE;
5386 }
5387
5388 if (e && sym->attr.save && !gfc_is_constant_expr (e))
5389 {
5390 gfc_error (auto_save_msg, sym->name, &sym->declared_at);
5391 return FAILURE;
5392 }
5393
5394 if (!gfc_is_constant_expr (e)
5395 && !(e->expr_type == EXPR_VARIABLE
5396 && e->symtree->n.sym->attr.flavor == FL_PARAMETER)
5397 && sym->ns->proc_name
5398 && (sym->ns->proc_name->attr.flavor == FL_MODULE
5399 || sym->ns->proc_name->attr.is_main_program)
5400 && !sym->attr.use_assoc)
5401 {
5402 gfc_error ("'%s' at %L must have constant character length "
5403 "in this context", sym->name, &sym->declared_at);
5404 return FAILURE;
5405 }
5406 }
5407
5408 /* Can the symbol have an initializer? */
5409 flag = 0;
5410 if (sym->attr.allocatable || sym->attr.external || sym->attr.dummy
5411 || sym->attr.intrinsic || sym->attr.result)
5412 flag = 1;
5413 else if (sym->attr.dimension && !sym->attr.pointer)
5414 {
5415 /* Don't allow initialization of automatic arrays. */
5416 for (i = 0; i < sym->as->rank; i++)
5417 {
5418 if (sym->as->lower[i] == NULL
5419 || sym->as->lower[i]->expr_type != EXPR_CONSTANT
5420 || sym->as->upper[i] == NULL
5421 || sym->as->upper[i]->expr_type != EXPR_CONSTANT)
5422 {
5423 flag = 1;
5424 break;
5425 }
5426 }
5427
5428 /* Also, they must not have the SAVE attribute. */
5429 if (flag && sym->attr.save)
5430 {
5431 gfc_error (auto_save_msg, sym->name, &sym->declared_at);
5432 return FAILURE;
5433 }
5434 }
5435
5436 /* Reject illegal initializers. */
5437 if (sym->value && flag)
5438 {
5439 if (sym->attr.allocatable)
5440 gfc_error ("Allocatable '%s' at %L cannot have an initializer",
5441 sym->name, &sym->declared_at);
5442 else if (sym->attr.external)
5443 gfc_error ("External '%s' at %L cannot have an initializer",
5444 sym->name, &sym->declared_at);
5445 else if (sym->attr.dummy)
5446 gfc_error ("Dummy '%s' at %L cannot have an initializer",
5447 sym->name, &sym->declared_at);
5448 else if (sym->attr.intrinsic)
5449 gfc_error ("Intrinsic '%s' at %L cannot have an initializer",
5450 sym->name, &sym->declared_at);
5451 else if (sym->attr.result)
5452 gfc_error ("Function result '%s' at %L cannot have an initializer",
5453 sym->name, &sym->declared_at);
5454 else
5455 gfc_error ("Automatic array '%s' at %L cannot have an initializer",
5456 sym->name, &sym->declared_at);
5457 return FAILURE;
5458 }
5459
5460 /* Check to see if a derived type is blocked from being host associated
5461 by the presence of another class I symbol in the same namespace.
5462 14.6.1.3 of the standard and the discussion on comp.lang.fortran. */
5463 if (sym->ts.type == BT_DERIVED && sym->ns != sym->ts.derived->ns)
5464 {
5465 gfc_symbol *s;
5466 gfc_find_symbol (sym->ts.derived->name, sym->ns, 0, &s);
5467 if (s && (s->attr.flavor != FL_DERIVED
5468 || !gfc_compare_derived_types (s, sym->ts.derived)))
5469 {
5470 gfc_error ("The type %s cannot be host associated at %L because "
5471 "it is blocked by an incompatible object of the same "
5472 "name at %L", sym->ts.derived->name, &sym->declared_at,
5473 &s->declared_at);
5474 return FAILURE;
5475 }
5476 }
5477
5478 /* 4th constraint in section 11.3: "If an object of a type for which
5479 component-initialization is specified (R429) appears in the
5480 specification-part of a module and does not have the ALLOCATABLE
5481 or POINTER attribute, the object shall have the SAVE attribute." */
5482
5483 constructor_expr = NULL;
5484 if (sym->ts.type == BT_DERIVED && !(sym->value || flag))
5485 constructor_expr = gfc_default_initializer (&sym->ts);
5486
5487 if (sym->ns->proc_name
5488 && sym->ns->proc_name->attr.flavor == FL_MODULE
5489 && constructor_expr
5490 && !sym->ns->save_all && !sym->attr.save
5491 && !sym->attr.pointer && !sym->attr.allocatable)
5492 {
5493 gfc_error("Object '%s' at %L must have the SAVE attribute %s",
5494 sym->name, &sym->declared_at,
5495 "for default initialization of a component");
5496 return FAILURE;
5497 }
5498
5499 /* Assign default initializer. */
5500 if (sym->ts.type == BT_DERIVED
5501 && !sym->value
5502 && !sym->attr.pointer
5503 && !sym->attr.allocatable
5504 && (!flag || sym->attr.intent == INTENT_OUT))
5505 sym->value = gfc_default_initializer (&sym->ts);
5506
5507 return SUCCESS;
5508 }
5509
5510
5511 /* Resolve a procedure. */
5512
5513 static try
5514 resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
5515 {
5516 gfc_formal_arglist *arg;
5517
5518 if (sym->attr.function
5519 && resolve_fl_var_and_proc (sym, mp_flag) == FAILURE)
5520 return FAILURE;
5521
5522 if (sym->attr.proc == PROC_ST_FUNCTION)
5523 {
5524 if (sym->ts.type == BT_CHARACTER)
5525 {
5526 gfc_charlen *cl = sym->ts.cl;
5527 if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
5528 {
5529 gfc_error ("Character-valued statement function '%s' at %L must "
5530 "have constant length", sym->name, &sym->declared_at);
5531 return FAILURE;
5532 }
5533 }
5534 }
5535
5536 /* Ensure that derived type for are not of a private type. Internal
5537 module procedures are excluded by 2.2.3.3 - ie. they are not
5538 externally accessible and can access all the objects accessible in
5539 the host. */
5540 if (!(sym->ns->parent
5541 && sym->ns->parent->proc_name->attr.flavor == FL_MODULE)
5542 && gfc_check_access(sym->attr.access, sym->ns->default_access))
5543 {
5544 for (arg = sym->formal; arg; arg = arg->next)
5545 {
5546 if (arg->sym
5547 && arg->sym->ts.type == BT_DERIVED
5548 && !arg->sym->ts.derived->attr.use_assoc
5549 && !gfc_check_access(arg->sym->ts.derived->attr.access,
5550 arg->sym->ts.derived->ns->default_access))
5551 {
5552 gfc_error_now ("'%s' is of a PRIVATE type and cannot be "
5553 "a dummy argument of '%s', which is "
5554 "PUBLIC at %L", arg->sym->name, sym->name,
5555 &sym->declared_at);
5556 /* Stop this message from recurring. */
5557 arg->sym->ts.derived->attr.access = ACCESS_PUBLIC;
5558 return FAILURE;
5559 }
5560 }
5561 }
5562
5563 /* An external symbol may not have an initializer because it is taken to be
5564 a procedure. */
5565 if (sym->attr.external && sym->value)
5566 {
5567 gfc_error ("External object '%s' at %L may not have an initializer",
5568 sym->name, &sym->declared_at);
5569 return FAILURE;
5570 }
5571
5572 /* An elemental function is required to return a scalar 12.7.1 */
5573 if (sym->attr.elemental && sym->attr.function && sym->as)
5574 {
5575 gfc_error ("ELEMENTAL function '%s' at %L must have a scalar "
5576 "result", sym->name, &sym->declared_at);
5577 /* Reset so that the error only occurs once. */
5578 sym->attr.elemental = 0;
5579 return FAILURE;
5580 }
5581
5582 /* 5.1.1.5 of the Standard: A function name declared with an asterisk
5583 char-len-param shall not be array-valued, pointer-valued, recursive
5584 or pure. ....snip... A character value of * may only be used in the
5585 following ways: (i) Dummy arg of procedure - dummy associates with
5586 actual length; (ii) To declare a named constant; or (iii) External
5587 function - but length must be declared in calling scoping unit. */
5588 if (sym->attr.function
5589 && sym->ts.type == BT_CHARACTER
5590 && sym->ts.cl && sym->ts.cl->length == NULL)
5591 {
5592 if ((sym->as && sym->as->rank) || (sym->attr.pointer)
5593 || (sym->attr.recursive) || (sym->attr.pure))
5594 {
5595 if (sym->as && sym->as->rank)
5596 gfc_error ("CHARACTER(*) function '%s' at %L cannot be "
5597 "array-valued", sym->name, &sym->declared_at);
5598
5599 if (sym->attr.pointer)
5600 gfc_error ("CHARACTER(*) function '%s' at %L cannot be "
5601 "pointer-valued", sym->name, &sym->declared_at);
5602
5603 if (sym->attr.pure)
5604 gfc_error ("CHARACTER(*) function '%s' at %L cannot be "
5605 "pure", sym->name, &sym->declared_at);
5606
5607 if (sym->attr.recursive)
5608 gfc_error ("CHARACTER(*) function '%s' at %L cannot be "
5609 "recursive", sym->name, &sym->declared_at);
5610
5611 return FAILURE;
5612 }
5613
5614 /* Appendix B.2 of the standard. Contained functions give an
5615 error anyway. Fixed-form is likely to be F77/legacy. */
5616 if (!sym->attr.contained && gfc_current_form != FORM_FIXED)
5617 gfc_notify_std (GFC_STD_F95_OBS, "CHARACTER(*) function "
5618 "'%s' at %L is obsolescent in fortran 95",
5619 sym->name, &sym->declared_at);
5620 }
5621 return SUCCESS;
5622 }
5623
5624
5625 /* Resolve the components of a derived type. */
5626
5627 static try
5628 resolve_fl_derived (gfc_symbol *sym)
5629 {
5630 gfc_component *c;
5631 gfc_dt_list * dt_list;
5632 int i;
5633
5634 for (c = sym->components; c != NULL; c = c->next)
5635 {
5636 if (c->ts.type == BT_CHARACTER)
5637 {
5638 if (c->ts.cl->length == NULL
5639 || (resolve_charlen (c->ts.cl) == FAILURE)
5640 || !gfc_is_constant_expr (c->ts.cl->length))
5641 {
5642 gfc_error ("Character length of component '%s' needs to "
5643 "be a constant specification expression at %L.",
5644 c->name,
5645 c->ts.cl->length ? &c->ts.cl->length->where : &c->loc);
5646 return FAILURE;
5647 }
5648 }
5649
5650 if (c->ts.type == BT_DERIVED
5651 && sym->component_access != ACCESS_PRIVATE
5652 && gfc_check_access(sym->attr.access, sym->ns->default_access)
5653 && !c->ts.derived->attr.use_assoc
5654 && !gfc_check_access(c->ts.derived->attr.access,
5655 c->ts.derived->ns->default_access))
5656 {
5657 gfc_error ("The component '%s' is a PRIVATE type and cannot be "
5658 "a component of '%s', which is PUBLIC at %L",
5659 c->name, sym->name, &sym->declared_at);
5660 return FAILURE;
5661 }
5662
5663 if (sym->attr.sequence)
5664 {
5665 if (c->ts.type == BT_DERIVED && c->ts.derived->attr.sequence == 0)
5666 {
5667 gfc_error ("Component %s of SEQUENCE type declared at %L does "
5668 "not have the SEQUENCE attribute",
5669 c->ts.derived->name, &sym->declared_at);
5670 return FAILURE;
5671 }
5672 }
5673
5674 if (c->ts.type == BT_DERIVED && c->pointer
5675 && c->ts.derived->components == NULL)
5676 {
5677 gfc_error ("The pointer component '%s' of '%s' at %L is a type "
5678 "that has not been declared", c->name, sym->name,
5679 &c->loc);
5680 return FAILURE;
5681 }
5682
5683 if (c->pointer || c->allocatable || c->as == NULL)
5684 continue;
5685
5686 for (i = 0; i < c->as->rank; i++)
5687 {
5688 if (c->as->lower[i] == NULL
5689 || !gfc_is_constant_expr (c->as->lower[i])
5690 || (resolve_index_expr (c->as->lower[i]) == FAILURE)
5691 || c->as->upper[i] == NULL
5692 || (resolve_index_expr (c->as->upper[i]) == FAILURE)
5693 || !gfc_is_constant_expr (c->as->upper[i]))
5694 {
5695 gfc_error ("Component '%s' of '%s' at %L must have "
5696 "constant array bounds.",
5697 c->name, sym->name, &c->loc);
5698 return FAILURE;
5699 }
5700 }
5701 }
5702
5703 /* Add derived type to the derived type list. */
5704 for (dt_list = sym->ns->derived_types; dt_list; dt_list = dt_list->next)
5705 if (sym == dt_list->derived)
5706 break;
5707
5708 if (dt_list == NULL)
5709 {
5710 dt_list = gfc_get_dt_list ();
5711 dt_list->next = sym->ns->derived_types;
5712 dt_list->derived = sym;
5713 sym->ns->derived_types = dt_list;
5714 }
5715
5716 return SUCCESS;
5717 }
5718
5719
5720 static try
5721 resolve_fl_namelist (gfc_symbol *sym)
5722 {
5723 gfc_namelist *nl;
5724 gfc_symbol *nlsym;
5725
5726 /* Reject PRIVATE objects in a PUBLIC namelist. */
5727 if (gfc_check_access(sym->attr.access, sym->ns->default_access))
5728 {
5729 for (nl = sym->namelist; nl; nl = nl->next)
5730 {
5731 if (!nl->sym->attr.use_assoc
5732 && !(sym->ns->parent == nl->sym->ns)
5733 && !gfc_check_access(nl->sym->attr.access,
5734 nl->sym->ns->default_access))
5735 {
5736 gfc_error ("PRIVATE symbol '%s' cannot be member of "
5737 "PUBLIC namelist at %L", nl->sym->name,
5738 &sym->declared_at);
5739 return FAILURE;
5740 }
5741 }
5742 }
5743
5744 /* Reject namelist arrays that are not constant shape. */
5745 for (nl = sym->namelist; nl; nl = nl->next)
5746 {
5747 if (is_non_constant_shape_array (nl->sym))
5748 {
5749 gfc_error ("The array '%s' must have constant shape to be "
5750 "a NAMELIST object at %L", nl->sym->name,
5751 &sym->declared_at);
5752 return FAILURE;
5753 }
5754 }
5755
5756 /* Namelist objects cannot have allocatable components. */
5757 for (nl = sym->namelist; nl; nl = nl->next)
5758 {
5759 if (nl->sym->ts.type == BT_DERIVED
5760 && nl->sym->ts.derived->attr.alloc_comp)
5761 {
5762 gfc_error ("NAMELIST object '%s' at %L cannot have ALLOCATABLE "
5763 "components", nl->sym->name, &sym->declared_at);
5764 return FAILURE;
5765 }
5766 }
5767
5768 /* 14.1.2 A module or internal procedure represent local entities
5769 of the same type as a namelist member and so are not allowed.
5770 Note that this is sometimes caught by check_conflict so the
5771 same message has been used. */
5772 for (nl = sym->namelist; nl; nl = nl->next)
5773 {
5774 if (nl->sym->ts.kind != 0 && nl->sym->attr.flavor == FL_VARIABLE)
5775 continue;
5776 nlsym = NULL;
5777 if (sym->ns->parent && nl->sym && nl->sym->name)
5778 gfc_find_symbol (nl->sym->name, sym->ns->parent, 0, &nlsym);
5779 if (nlsym && nlsym->attr.flavor == FL_PROCEDURE)
5780 {
5781 gfc_error ("PROCEDURE attribute conflicts with NAMELIST "
5782 "attribute in '%s' at %L", nlsym->name,
5783 &sym->declared_at);
5784 return FAILURE;
5785 }
5786 }
5787
5788 return SUCCESS;
5789 }
5790
5791
5792 static try
5793 resolve_fl_parameter (gfc_symbol *sym)
5794 {
5795 /* A parameter array's shape needs to be constant. */
5796 if (sym->as != NULL && !gfc_is_compile_time_shape (sym->as))
5797 {
5798 gfc_error ("Parameter array '%s' at %L cannot be automatic "
5799 "or assumed shape", sym->name, &sym->declared_at);
5800 return FAILURE;
5801 }
5802
5803 /* Make sure a parameter that has been implicitly typed still
5804 matches the implicit type, since PARAMETER statements can precede
5805 IMPLICIT statements. */
5806 if (sym->attr.implicit_type
5807 && !gfc_compare_types (&sym->ts,
5808 gfc_get_default_type (sym, sym->ns)))
5809 {
5810 gfc_error ("Implicitly typed PARAMETER '%s' at %L doesn't match a "
5811 "later IMPLICIT type", sym->name, &sym->declared_at);
5812 return FAILURE;
5813 }
5814
5815 /* Make sure the types of derived parameters are consistent. This
5816 type checking is deferred until resolution because the type may
5817 refer to a derived type from the host. */
5818 if (sym->ts.type == BT_DERIVED
5819 && !gfc_compare_types (&sym->ts, &sym->value->ts))
5820 {
5821 gfc_error ("Incompatible derived type in PARAMETER at %L",
5822 &sym->value->where);
5823 return FAILURE;
5824 }
5825 return SUCCESS;
5826 }
5827
5828
5829 /* Do anything necessary to resolve a symbol. Right now, we just
5830 assume that an otherwise unknown symbol is a variable. This sort
5831 of thing commonly happens for symbols in module. */
5832
5833 static void
5834 resolve_symbol (gfc_symbol * sym)
5835 {
5836 /* Zero if we are checking a formal namespace. */
5837 static int formal_ns_flag = 1;
5838 int formal_ns_save, check_constant, mp_flag;
5839 gfc_symtree *symtree;
5840 gfc_symtree *this_symtree;
5841 gfc_namespace *ns;
5842 gfc_component *c;
5843
5844 if (sym->attr.flavor == FL_UNKNOWN)
5845 {
5846
5847 /* If we find that a flavorless symbol is an interface in one of the
5848 parent namespaces, find its symtree in this namespace, free the
5849 symbol and set the symtree to point to the interface symbol. */
5850 for (ns = gfc_current_ns->parent; ns; ns = ns->parent)
5851 {
5852 symtree = gfc_find_symtree (ns->sym_root, sym->name);
5853 if (symtree && symtree->n.sym->generic)
5854 {
5855 this_symtree = gfc_find_symtree (gfc_current_ns->sym_root,
5856 sym->name);
5857 sym->refs--;
5858 if (!sym->refs)
5859 gfc_free_symbol (sym);
5860 symtree->n.sym->refs++;
5861 this_symtree->n.sym = symtree->n.sym;
5862 return;
5863 }
5864 }
5865
5866 /* Otherwise give it a flavor according to such attributes as
5867 it has. */
5868 if (sym->attr.external == 0 && sym->attr.intrinsic == 0)
5869 sym->attr.flavor = FL_VARIABLE;
5870 else
5871 {
5872 sym->attr.flavor = FL_PROCEDURE;
5873 if (sym->attr.dimension)
5874 sym->attr.function = 1;
5875 }
5876 }
5877
5878 if (sym->attr.flavor == FL_DERIVED && resolve_fl_derived (sym) == FAILURE)
5879 return;
5880
5881 /* Symbols that are module procedures with results (functions) have
5882 the types and array specification copied for type checking in
5883 procedures that call them, as well as for saving to a module
5884 file. These symbols can't stand the scrutiny that their results
5885 can. */
5886 mp_flag = (sym->result != NULL && sym->result != sym);
5887
5888 /* Assign default type to symbols that need one and don't have one. */
5889 if (sym->ts.type == BT_UNKNOWN)
5890 {
5891 if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER)
5892 gfc_set_default_type (sym, 1, NULL);
5893
5894 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.function)
5895 {
5896 /* The specific case of an external procedure should emit an error
5897 in the case that there is no implicit type. */
5898 if (!mp_flag)
5899 gfc_set_default_type (sym, sym->attr.external, NULL);
5900 else
5901 {
5902 /* Result may be in another namespace. */
5903 resolve_symbol (sym->result);
5904
5905 sym->ts = sym->result->ts;
5906 sym->as = gfc_copy_array_spec (sym->result->as);
5907 sym->attr.dimension = sym->result->attr.dimension;
5908 sym->attr.pointer = sym->result->attr.pointer;
5909 sym->attr.allocatable = sym->result->attr.allocatable;
5910 }
5911 }
5912 }
5913
5914 /* Assumed size arrays and assumed shape arrays must be dummy
5915 arguments. */
5916
5917 if (sym->as != NULL
5918 && (sym->as->type == AS_ASSUMED_SIZE
5919 || sym->as->type == AS_ASSUMED_SHAPE)
5920 && sym->attr.dummy == 0)
5921 {
5922 if (sym->as->type == AS_ASSUMED_SIZE)
5923 gfc_error ("Assumed size array at %L must be a dummy argument",
5924 &sym->declared_at);
5925 else
5926 gfc_error ("Assumed shape array at %L must be a dummy argument",
5927 &sym->declared_at);
5928 return;
5929 }
5930
5931 /* Make sure symbols with known intent or optional are really dummy
5932 variable. Because of ENTRY statement, this has to be deferred
5933 until resolution time. */
5934
5935 if (!sym->attr.dummy
5936 && (sym->attr.optional
5937 || sym->attr.intent != INTENT_UNKNOWN))
5938 {
5939 gfc_error ("Symbol at %L is not a DUMMY variable", &sym->declared_at);
5940 return;
5941 }
5942
5943 /* If a derived type symbol has reached this point, without its
5944 type being declared, we have an error. Notice that most
5945 conditions that produce undefined derived types have already
5946 been dealt with. However, the likes of:
5947 implicit type(t) (t) ..... call foo (t) will get us here if
5948 the type is not declared in the scope of the implicit
5949 statement. Change the type to BT_UNKNOWN, both because it is so
5950 and to prevent an ICE. */
5951 if (sym->ts.type == BT_DERIVED
5952 && sym->ts.derived->components == NULL)
5953 {
5954 gfc_error ("The derived type '%s' at %L is of type '%s', "
5955 "which has not been defined.", sym->name,
5956 &sym->declared_at, sym->ts.derived->name);
5957 sym->ts.type = BT_UNKNOWN;
5958 return;
5959 }
5960
5961 /* An assumed-size array with INTENT(OUT) shall not be of a type for which
5962 default initialization is defined (5.1.2.4.4). */
5963 if (sym->ts.type == BT_DERIVED
5964 && sym->attr.dummy
5965 && sym->attr.intent == INTENT_OUT
5966 && sym->as
5967 && sym->as->type == AS_ASSUMED_SIZE)
5968 {
5969 for (c = sym->ts.derived->components; c; c = c->next)
5970 {
5971 if (c->initializer)
5972 {
5973 gfc_error ("The INTENT(OUT) dummy argument '%s' at %L is "
5974 "ASSUMED SIZE and so cannot have a default initializer",
5975 sym->name, &sym->declared_at);
5976 return;
5977 }
5978 }
5979 }
5980
5981 switch (sym->attr.flavor)
5982 {
5983 case FL_VARIABLE:
5984 if (resolve_fl_variable (sym, mp_flag) == FAILURE)
5985 return;
5986 break;
5987
5988 case FL_PROCEDURE:
5989 if (resolve_fl_procedure (sym, mp_flag) == FAILURE)
5990 return;
5991 break;
5992
5993 case FL_NAMELIST:
5994 if (resolve_fl_namelist (sym) == FAILURE)
5995 return;
5996 break;
5997
5998 case FL_PARAMETER:
5999 if (resolve_fl_parameter (sym) == FAILURE)
6000 return;
6001
6002 break;
6003
6004 default:
6005
6006 break;
6007 }
6008
6009 /* Make sure that intrinsic exist */
6010 if (sym->attr.intrinsic
6011 && ! gfc_intrinsic_name(sym->name, 0)
6012 && ! gfc_intrinsic_name(sym->name, 1))
6013 gfc_error("Intrinsic at %L does not exist", &sym->declared_at);
6014
6015 /* Resolve array specifier. Check as well some constraints
6016 on COMMON blocks. */
6017
6018 check_constant = sym->attr.in_common && !sym->attr.pointer;
6019 gfc_resolve_array_spec (sym->as, check_constant);
6020
6021 /* Resolve formal namespaces. */
6022
6023 if (formal_ns_flag && sym != NULL && sym->formal_ns != NULL)
6024 {
6025 formal_ns_save = formal_ns_flag;
6026 formal_ns_flag = 0;
6027 gfc_resolve (sym->formal_ns);
6028 formal_ns_flag = formal_ns_save;
6029 }
6030
6031 /* Check threadprivate restrictions. */
6032 if (sym->attr.threadprivate && !sym->attr.save
6033 && (!sym->attr.in_common
6034 && sym->module == NULL
6035 && (sym->ns->proc_name == NULL
6036 || sym->ns->proc_name->attr.flavor != FL_MODULE)))
6037 gfc_error ("Threadprivate at %L isn't SAVEd", &sym->declared_at);
6038
6039 /* If we have come this far we can apply default-initializers, as
6040 described in 14.7.5, to those variables that have not already
6041 been assigned one. */
6042 if (sym->ts.type == BT_DERIVED
6043 && sym->attr.referenced
6044 && sym->ns == gfc_current_ns
6045 && !sym->value
6046 && !sym->attr.allocatable
6047 && !sym->attr.alloc_comp)
6048 {
6049 symbol_attribute *a = &sym->attr;
6050
6051 if ((!a->save && !a->dummy && !a->pointer
6052 && !a->in_common && !a->use_assoc
6053 && !(a->function && sym != sym->result))
6054 ||
6055 (a->dummy && a->intent == INTENT_OUT))
6056 apply_default_init (sym);
6057 }
6058 }
6059
6060
6061
6062 /************* Resolve DATA statements *************/
6063
6064 static struct
6065 {
6066 gfc_data_value *vnode;
6067 unsigned int left;
6068 }
6069 values;
6070
6071
6072 /* Advance the values structure to point to the next value in the data list. */
6073
6074 static try
6075 next_data_value (void)
6076 {
6077 while (values.left == 0)
6078 {
6079 if (values.vnode->next == NULL)
6080 return FAILURE;
6081
6082 values.vnode = values.vnode->next;
6083 values.left = values.vnode->repeat;
6084 }
6085
6086 return SUCCESS;
6087 }
6088
6089
6090 static try
6091 check_data_variable (gfc_data_variable * var, locus * where)
6092 {
6093 gfc_expr *e;
6094 mpz_t size;
6095 mpz_t offset;
6096 try t;
6097 ar_type mark = AR_UNKNOWN;
6098 int i;
6099 mpz_t section_index[GFC_MAX_DIMENSIONS];
6100 gfc_ref *ref;
6101 gfc_array_ref *ar;
6102
6103 if (gfc_resolve_expr (var->expr) == FAILURE)
6104 return FAILURE;
6105
6106 ar = NULL;
6107 mpz_init_set_si (offset, 0);
6108 e = var->expr;
6109
6110 if (e->expr_type != EXPR_VARIABLE)
6111 gfc_internal_error ("check_data_variable(): Bad expression");
6112
6113 if (e->symtree->n.sym->ns->is_block_data
6114 && !e->symtree->n.sym->attr.in_common)
6115 {
6116 gfc_error ("BLOCK DATA element '%s' at %L must be in COMMON",
6117 e->symtree->n.sym->name, &e->symtree->n.sym->declared_at);
6118 }
6119
6120 if (e->rank == 0)
6121 {
6122 mpz_init_set_ui (size, 1);
6123 ref = NULL;
6124 }
6125 else
6126 {
6127 ref = e->ref;
6128
6129 /* Find the array section reference. */
6130 for (ref = e->ref; ref; ref = ref->next)
6131 {
6132 if (ref->type != REF_ARRAY)
6133 continue;
6134 if (ref->u.ar.type == AR_ELEMENT)
6135 continue;
6136 break;
6137 }
6138 gcc_assert (ref);
6139
6140 /* Set marks according to the reference pattern. */
6141 switch (ref->u.ar.type)
6142 {
6143 case AR_FULL:
6144 mark = AR_FULL;
6145 break;
6146
6147 case AR_SECTION:
6148 ar = &ref->u.ar;
6149 /* Get the start position of array section. */
6150 gfc_get_section_index (ar, section_index, &offset);
6151 mark = AR_SECTION;
6152 break;
6153
6154 default:
6155 gcc_unreachable ();
6156 }
6157
6158 if (gfc_array_size (e, &size) == FAILURE)
6159 {
6160 gfc_error ("Nonconstant array section at %L in DATA statement",
6161 &e->where);
6162 mpz_clear (offset);
6163 return FAILURE;
6164 }
6165 }
6166
6167 t = SUCCESS;
6168
6169 while (mpz_cmp_ui (size, 0) > 0)
6170 {
6171 if (next_data_value () == FAILURE)
6172 {
6173 gfc_error ("DATA statement at %L has more variables than values",
6174 where);
6175 t = FAILURE;
6176 break;
6177 }
6178
6179 t = gfc_check_assign (var->expr, values.vnode->expr, 0);
6180 if (t == FAILURE)
6181 break;
6182
6183 /* If we have more than one element left in the repeat count,
6184 and we have more than one element left in the target variable,
6185 then create a range assignment. */
6186 /* ??? Only done for full arrays for now, since array sections
6187 seem tricky. */
6188 if (mark == AR_FULL && ref && ref->next == NULL
6189 && values.left > 1 && mpz_cmp_ui (size, 1) > 0)
6190 {
6191 mpz_t range;
6192
6193 if (mpz_cmp_ui (size, values.left) >= 0)
6194 {
6195 mpz_init_set_ui (range, values.left);
6196 mpz_sub_ui (size, size, values.left);
6197 values.left = 0;
6198 }
6199 else
6200 {
6201 mpz_init_set (range, size);
6202 values.left -= mpz_get_ui (size);
6203 mpz_set_ui (size, 0);
6204 }
6205
6206 gfc_assign_data_value_range (var->expr, values.vnode->expr,
6207 offset, range);
6208
6209 mpz_add (offset, offset, range);
6210 mpz_clear (range);
6211 }
6212
6213 /* Assign initial value to symbol. */
6214 else
6215 {
6216 values.left -= 1;
6217 mpz_sub_ui (size, size, 1);
6218
6219 gfc_assign_data_value (var->expr, values.vnode->expr, offset);
6220
6221 if (mark == AR_FULL)
6222 mpz_add_ui (offset, offset, 1);
6223
6224 /* Modify the array section indexes and recalculate the offset
6225 for next element. */
6226 else if (mark == AR_SECTION)
6227 gfc_advance_section (section_index, ar, &offset);
6228 }
6229 }
6230
6231 if (mark == AR_SECTION)
6232 {
6233 for (i = 0; i < ar->dimen; i++)
6234 mpz_clear (section_index[i]);
6235 }
6236
6237 mpz_clear (size);
6238 mpz_clear (offset);
6239
6240 return t;
6241 }
6242
6243
6244 static try traverse_data_var (gfc_data_variable *, locus *);
6245
6246 /* Iterate over a list of elements in a DATA statement. */
6247
6248 static try
6249 traverse_data_list (gfc_data_variable * var, locus * where)
6250 {
6251 mpz_t trip;
6252 iterator_stack frame;
6253 gfc_expr *e;
6254
6255 mpz_init (frame.value);
6256
6257 mpz_init_set (trip, var->iter.end->value.integer);
6258 mpz_sub (trip, trip, var->iter.start->value.integer);
6259 mpz_add (trip, trip, var->iter.step->value.integer);
6260
6261 mpz_div (trip, trip, var->iter.step->value.integer);
6262
6263 mpz_set (frame.value, var->iter.start->value.integer);
6264
6265 frame.prev = iter_stack;
6266 frame.variable = var->iter.var->symtree;
6267 iter_stack = &frame;
6268
6269 while (mpz_cmp_ui (trip, 0) > 0)
6270 {
6271 if (traverse_data_var (var->list, where) == FAILURE)
6272 {
6273 mpz_clear (trip);
6274 return FAILURE;
6275 }
6276
6277 e = gfc_copy_expr (var->expr);
6278 if (gfc_simplify_expr (e, 1) == FAILURE)
6279 {
6280 gfc_free_expr (e);
6281 return FAILURE;
6282 }
6283
6284 mpz_add (frame.value, frame.value, var->iter.step->value.integer);
6285
6286 mpz_sub_ui (trip, trip, 1);
6287 }
6288
6289 mpz_clear (trip);
6290 mpz_clear (frame.value);
6291
6292 iter_stack = frame.prev;
6293 return SUCCESS;
6294 }
6295
6296
6297 /* Type resolve variables in the variable list of a DATA statement. */
6298
6299 static try
6300 traverse_data_var (gfc_data_variable * var, locus * where)
6301 {
6302 try t;
6303
6304 for (; var; var = var->next)
6305 {
6306 if (var->expr == NULL)
6307 t = traverse_data_list (var, where);
6308 else
6309 t = check_data_variable (var, where);
6310
6311 if (t == FAILURE)
6312 return FAILURE;
6313 }
6314
6315 return SUCCESS;
6316 }
6317
6318
6319 /* Resolve the expressions and iterators associated with a data statement.
6320 This is separate from the assignment checking because data lists should
6321 only be resolved once. */
6322
6323 static try
6324 resolve_data_variables (gfc_data_variable * d)
6325 {
6326 for (; d; d = d->next)
6327 {
6328 if (d->list == NULL)
6329 {
6330 if (gfc_resolve_expr (d->expr) == FAILURE)
6331 return FAILURE;
6332 }
6333 else
6334 {
6335 if (gfc_resolve_iterator (&d->iter, false) == FAILURE)
6336 return FAILURE;
6337
6338 if (d->iter.start->expr_type != EXPR_CONSTANT
6339 || d->iter.end->expr_type != EXPR_CONSTANT
6340 || d->iter.step->expr_type != EXPR_CONSTANT)
6341 gfc_internal_error ("resolve_data_variables(): Bad iterator");
6342
6343 if (resolve_data_variables (d->list) == FAILURE)
6344 return FAILURE;
6345 }
6346 }
6347
6348 return SUCCESS;
6349 }
6350
6351
6352 /* Resolve a single DATA statement. We implement this by storing a pointer to
6353 the value list into static variables, and then recursively traversing the
6354 variables list, expanding iterators and such. */
6355
6356 static void
6357 resolve_data (gfc_data * d)
6358 {
6359 if (resolve_data_variables (d->var) == FAILURE)
6360 return;
6361
6362 values.vnode = d->value;
6363 values.left = (d->value == NULL) ? 0 : d->value->repeat;
6364
6365 if (traverse_data_var (d->var, &d->where) == FAILURE)
6366 return;
6367
6368 /* At this point, we better not have any values left. */
6369
6370 if (next_data_value () == SUCCESS)
6371 gfc_error ("DATA statement at %L has more values than variables",
6372 &d->where);
6373 }
6374
6375
6376 /* Determines if a variable is not 'pure', ie not assignable within a pure
6377 procedure. Returns zero if assignment is OK, nonzero if there is a problem.
6378 */
6379
6380 int
6381 gfc_impure_variable (gfc_symbol * sym)
6382 {
6383 if (sym->attr.use_assoc || sym->attr.in_common)
6384 return 1;
6385
6386 if (sym->ns != gfc_current_ns)
6387 return !sym->attr.function;
6388
6389 /* TODO: Check storage association through EQUIVALENCE statements */
6390
6391 return 0;
6392 }
6393
6394
6395 /* Test whether a symbol is pure or not. For a NULL pointer, checks the
6396 symbol of the current procedure. */
6397
6398 int
6399 gfc_pure (gfc_symbol * sym)
6400 {
6401 symbol_attribute attr;
6402
6403 if (sym == NULL)
6404 sym = gfc_current_ns->proc_name;
6405 if (sym == NULL)
6406 return 0;
6407
6408 attr = sym->attr;
6409
6410 return attr.flavor == FL_PROCEDURE && (attr.pure || attr.elemental);
6411 }
6412
6413
6414 /* Test whether the current procedure is elemental or not. */
6415
6416 int
6417 gfc_elemental (gfc_symbol * sym)
6418 {
6419 symbol_attribute attr;
6420
6421 if (sym == NULL)
6422 sym = gfc_current_ns->proc_name;
6423 if (sym == NULL)
6424 return 0;
6425 attr = sym->attr;
6426
6427 return attr.flavor == FL_PROCEDURE && attr.elemental;
6428 }
6429
6430
6431 /* Warn about unused labels. */
6432
6433 static void
6434 warn_unused_fortran_label (gfc_st_label * label)
6435 {
6436 if (label == NULL)
6437 return;
6438
6439 warn_unused_fortran_label (label->left);
6440
6441 if (label->defined == ST_LABEL_UNKNOWN)
6442 return;
6443
6444 switch (label->referenced)
6445 {
6446 case ST_LABEL_UNKNOWN:
6447 gfc_warning ("Label %d at %L defined but not used", label->value,
6448 &label->where);
6449 break;
6450
6451 case ST_LABEL_BAD_TARGET:
6452 gfc_warning ("Label %d at %L defined but cannot be used",
6453 label->value, &label->where);
6454 break;
6455
6456 default:
6457 break;
6458 }
6459
6460 warn_unused_fortran_label (label->right);
6461 }
6462
6463
6464 /* Returns the sequence type of a symbol or sequence. */
6465
6466 static seq_type
6467 sequence_type (gfc_typespec ts)
6468 {
6469 seq_type result;
6470 gfc_component *c;
6471
6472 switch (ts.type)
6473 {
6474 case BT_DERIVED:
6475
6476 if (ts.derived->components == NULL)
6477 return SEQ_NONDEFAULT;
6478
6479 result = sequence_type (ts.derived->components->ts);
6480 for (c = ts.derived->components->next; c; c = c->next)
6481 if (sequence_type (c->ts) != result)
6482 return SEQ_MIXED;
6483
6484 return result;
6485
6486 case BT_CHARACTER:
6487 if (ts.kind != gfc_default_character_kind)
6488 return SEQ_NONDEFAULT;
6489
6490 return SEQ_CHARACTER;
6491
6492 case BT_INTEGER:
6493 if (ts.kind != gfc_default_integer_kind)
6494 return SEQ_NONDEFAULT;
6495
6496 return SEQ_NUMERIC;
6497
6498 case BT_REAL:
6499 if (!(ts.kind == gfc_default_real_kind
6500 || ts.kind == gfc_default_double_kind))
6501 return SEQ_NONDEFAULT;
6502
6503 return SEQ_NUMERIC;
6504
6505 case BT_COMPLEX:
6506 if (ts.kind != gfc_default_complex_kind)
6507 return SEQ_NONDEFAULT;
6508
6509 return SEQ_NUMERIC;
6510
6511 case BT_LOGICAL:
6512 if (ts.kind != gfc_default_logical_kind)
6513 return SEQ_NONDEFAULT;
6514
6515 return SEQ_NUMERIC;
6516
6517 default:
6518 return SEQ_NONDEFAULT;
6519 }
6520 }
6521
6522
6523 /* Resolve derived type EQUIVALENCE object. */
6524
6525 static try
6526 resolve_equivalence_derived (gfc_symbol *derived, gfc_symbol *sym, gfc_expr *e)
6527 {
6528 gfc_symbol *d;
6529 gfc_component *c = derived->components;
6530
6531 if (!derived)
6532 return SUCCESS;
6533
6534 /* Shall not be an object of nonsequence derived type. */
6535 if (!derived->attr.sequence)
6536 {
6537 gfc_error ("Derived type variable '%s' at %L must have SEQUENCE "
6538 "attribute to be an EQUIVALENCE object", sym->name, &e->where);
6539 return FAILURE;
6540 }
6541
6542 /* Shall not have allocatable components. */
6543 if (derived->attr.alloc_comp)
6544 {
6545 gfc_error ("Derived type variable '%s' at %L cannot have ALLOCATABLE "
6546 "components to be an EQUIVALENCE object",sym->name, &e->where);
6547 return FAILURE;
6548 }
6549
6550 for (; c ; c = c->next)
6551 {
6552 d = c->ts.derived;
6553 if (d && (resolve_equivalence_derived (c->ts.derived, sym, e) == FAILURE))
6554 return FAILURE;
6555
6556 /* Shall not be an object of sequence derived type containing a pointer
6557 in the structure. */
6558 if (c->pointer)
6559 {
6560 gfc_error ("Derived type variable '%s' at %L with pointer component(s) "
6561 "cannot be an EQUIVALENCE object", sym->name, &e->where);
6562 return FAILURE;
6563 }
6564
6565 if (c->initializer)
6566 {
6567 gfc_error ("Derived type variable '%s' at %L with default initializer "
6568 "cannot be an EQUIVALENCE object", sym->name, &e->where);
6569 return FAILURE;
6570 }
6571 }
6572 return SUCCESS;
6573 }
6574
6575
6576 /* Resolve equivalence object.
6577 An EQUIVALENCE object shall not be a dummy argument, a pointer, a target,
6578 an allocatable array, an object of nonsequence derived type, an object of
6579 sequence derived type containing a pointer at any level of component
6580 selection, an automatic object, a function name, an entry name, a result
6581 name, a named constant, a structure component, or a subobject of any of
6582 the preceding objects. A substring shall not have length zero. A
6583 derived type shall not have components with default initialization nor
6584 shall two objects of an equivalence group be initialized.
6585 The simple constraints are done in symbol.c(check_conflict) and the rest
6586 are implemented here. */
6587
6588 static void
6589 resolve_equivalence (gfc_equiv *eq)
6590 {
6591 gfc_symbol *sym;
6592 gfc_symbol *derived;
6593 gfc_symbol *first_sym;
6594 gfc_expr *e;
6595 gfc_ref *r;
6596 locus *last_where = NULL;
6597 seq_type eq_type, last_eq_type;
6598 gfc_typespec *last_ts;
6599 int object;
6600 const char *value_name;
6601 const char *msg;
6602
6603 value_name = NULL;
6604 last_ts = &eq->expr->symtree->n.sym->ts;
6605
6606 first_sym = eq->expr->symtree->n.sym;
6607
6608 for (object = 1; eq; eq = eq->eq, object++)
6609 {
6610 e = eq->expr;
6611
6612 e->ts = e->symtree->n.sym->ts;
6613 /* match_varspec might not know yet if it is seeing
6614 array reference or substring reference, as it doesn't
6615 know the types. */
6616 if (e->ref && e->ref->type == REF_ARRAY)
6617 {
6618 gfc_ref *ref = e->ref;
6619 sym = e->symtree->n.sym;
6620
6621 if (sym->attr.dimension)
6622 {
6623 ref->u.ar.as = sym->as;
6624 ref = ref->next;
6625 }
6626
6627 /* For substrings, convert REF_ARRAY into REF_SUBSTRING. */
6628 if (e->ts.type == BT_CHARACTER
6629 && ref
6630 && ref->type == REF_ARRAY
6631 && ref->u.ar.dimen == 1
6632 && ref->u.ar.dimen_type[0] == DIMEN_RANGE
6633 && ref->u.ar.stride[0] == NULL)
6634 {
6635 gfc_expr *start = ref->u.ar.start[0];
6636 gfc_expr *end = ref->u.ar.end[0];
6637 void *mem = NULL;
6638
6639 /* Optimize away the (:) reference. */
6640 if (start == NULL && end == NULL)
6641 {
6642 if (e->ref == ref)
6643 e->ref = ref->next;
6644 else
6645 e->ref->next = ref->next;
6646 mem = ref;
6647 }
6648 else
6649 {
6650 ref->type = REF_SUBSTRING;
6651 if (start == NULL)
6652 start = gfc_int_expr (1);
6653 ref->u.ss.start = start;
6654 if (end == NULL && e->ts.cl)
6655 end = gfc_copy_expr (e->ts.cl->length);
6656 ref->u.ss.end = end;
6657 ref->u.ss.length = e->ts.cl;
6658 e->ts.cl = NULL;
6659 }
6660 ref = ref->next;
6661 gfc_free (mem);
6662 }
6663
6664 /* Any further ref is an error. */
6665 if (ref)
6666 {
6667 gcc_assert (ref->type == REF_ARRAY);
6668 gfc_error ("Syntax error in EQUIVALENCE statement at %L",
6669 &ref->u.ar.where);
6670 continue;
6671 }
6672 }
6673
6674 if (gfc_resolve_expr (e) == FAILURE)
6675 continue;
6676
6677 sym = e->symtree->n.sym;
6678
6679 /* An equivalence statement cannot have more than one initialized
6680 object. */
6681 if (sym->value)
6682 {
6683 if (value_name != NULL)
6684 {
6685 gfc_error ("Initialized objects '%s' and '%s' cannot both "
6686 "be in the EQUIVALENCE statement at %L",
6687 value_name, sym->name, &e->where);
6688 continue;
6689 }
6690 else
6691 value_name = sym->name;
6692 }
6693
6694 /* Shall not equivalence common block variables in a PURE procedure. */
6695 if (sym->ns->proc_name
6696 && sym->ns->proc_name->attr.pure
6697 && sym->attr.in_common)
6698 {
6699 gfc_error ("Common block member '%s' at %L cannot be an EQUIVALENCE "
6700 "object in the pure procedure '%s'",
6701 sym->name, &e->where, sym->ns->proc_name->name);
6702 break;
6703 }
6704
6705 /* Shall not be a named constant. */
6706 if (e->expr_type == EXPR_CONSTANT)
6707 {
6708 gfc_error ("Named constant '%s' at %L cannot be an EQUIVALENCE "
6709 "object", sym->name, &e->where);
6710 continue;
6711 }
6712
6713 derived = e->ts.derived;
6714 if (derived && resolve_equivalence_derived (derived, sym, e) == FAILURE)
6715 continue;
6716
6717 /* Check that the types correspond correctly:
6718 Note 5.28:
6719 A numeric sequence structure may be equivalenced to another sequence
6720 structure, an object of default integer type, default real type, double
6721 precision real type, default logical type such that components of the
6722 structure ultimately only become associated to objects of the same
6723 kind. A character sequence structure may be equivalenced to an object
6724 of default character kind or another character sequence structure.
6725 Other objects may be equivalenced only to objects of the same type and
6726 kind parameters. */
6727
6728 /* Identical types are unconditionally OK. */
6729 if (object == 1 || gfc_compare_types (last_ts, &sym->ts))
6730 goto identical_types;
6731
6732 last_eq_type = sequence_type (*last_ts);
6733 eq_type = sequence_type (sym->ts);
6734
6735 /* Since the pair of objects is not of the same type, mixed or
6736 non-default sequences can be rejected. */
6737
6738 msg = "Sequence %s with mixed components in EQUIVALENCE "
6739 "statement at %L with different type objects";
6740 if ((object ==2
6741 && last_eq_type == SEQ_MIXED
6742 && gfc_notify_std (GFC_STD_GNU, msg, first_sym->name,
6743 last_where) == FAILURE)
6744 || (eq_type == SEQ_MIXED
6745 && gfc_notify_std (GFC_STD_GNU, msg,sym->name,
6746 &e->where) == FAILURE))
6747 continue;
6748
6749 msg = "Non-default type object or sequence %s in EQUIVALENCE "
6750 "statement at %L with objects of different type";
6751 if ((object ==2
6752 && last_eq_type == SEQ_NONDEFAULT
6753 && gfc_notify_std (GFC_STD_GNU, msg, first_sym->name,
6754 last_where) == FAILURE)
6755 || (eq_type == SEQ_NONDEFAULT
6756 && gfc_notify_std (GFC_STD_GNU, msg, sym->name,
6757 &e->where) == FAILURE))
6758 continue;
6759
6760 msg ="Non-CHARACTER object '%s' in default CHARACTER "
6761 "EQUIVALENCE statement at %L";
6762 if (last_eq_type == SEQ_CHARACTER
6763 && eq_type != SEQ_CHARACTER
6764 && gfc_notify_std (GFC_STD_GNU, msg, sym->name,
6765 &e->where) == FAILURE)
6766 continue;
6767
6768 msg ="Non-NUMERIC object '%s' in default NUMERIC "
6769 "EQUIVALENCE statement at %L";
6770 if (last_eq_type == SEQ_NUMERIC
6771 && eq_type != SEQ_NUMERIC
6772 && gfc_notify_std (GFC_STD_GNU, msg, sym->name,
6773 &e->where) == FAILURE)
6774 continue;
6775
6776 identical_types:
6777 last_ts =&sym->ts;
6778 last_where = &e->where;
6779
6780 if (!e->ref)
6781 continue;
6782
6783 /* Shall not be an automatic array. */
6784 if (e->ref->type == REF_ARRAY
6785 && gfc_resolve_array_spec (e->ref->u.ar.as, 1) == FAILURE)
6786 {
6787 gfc_error ("Array '%s' at %L with non-constant bounds cannot be "
6788 "an EQUIVALENCE object", sym->name, &e->where);
6789 continue;
6790 }
6791
6792 r = e->ref;
6793 while (r)
6794 {
6795 /* Shall not be a structure component. */
6796 if (r->type == REF_COMPONENT)
6797 {
6798 gfc_error ("Structure component '%s' at %L cannot be an "
6799 "EQUIVALENCE object",
6800 r->u.c.component->name, &e->where);
6801 break;
6802 }
6803
6804 /* A substring shall not have length zero. */
6805 if (r->type == REF_SUBSTRING)
6806 {
6807 if (compare_bound (r->u.ss.start, r->u.ss.end) == CMP_GT)
6808 {
6809 gfc_error ("Substring at %L has length zero",
6810 &r->u.ss.start->where);
6811 break;
6812 }
6813 }
6814 r = r->next;
6815 }
6816 }
6817 }
6818
6819
6820 /* Resolve function and ENTRY types, issue diagnostics if needed. */
6821
6822 static void
6823 resolve_fntype (gfc_namespace * ns)
6824 {
6825 gfc_entry_list *el;
6826 gfc_symbol *sym;
6827
6828 if (ns->proc_name == NULL || !ns->proc_name->attr.function)
6829 return;
6830
6831 /* If there are any entries, ns->proc_name is the entry master
6832 synthetic symbol and ns->entries->sym actual FUNCTION symbol. */
6833 if (ns->entries)
6834 sym = ns->entries->sym;
6835 else
6836 sym = ns->proc_name;
6837 if (sym->result == sym
6838 && sym->ts.type == BT_UNKNOWN
6839 && gfc_set_default_type (sym, 0, NULL) == FAILURE
6840 && !sym->attr.untyped)
6841 {
6842 gfc_error ("Function '%s' at %L has no IMPLICIT type",
6843 sym->name, &sym->declared_at);
6844 sym->attr.untyped = 1;
6845 }
6846
6847 if (sym->ts.type == BT_DERIVED && !sym->ts.derived->attr.use_assoc
6848 && !gfc_check_access (sym->ts.derived->attr.access,
6849 sym->ts.derived->ns->default_access)
6850 && gfc_check_access (sym->attr.access, sym->ns->default_access))
6851 {
6852 gfc_error ("PUBLIC function '%s' at %L cannot be of PRIVATE type '%s'",
6853 sym->name, &sym->declared_at, sym->ts.derived->name);
6854 }
6855
6856 /* Make sure that the type of a module derived type function is in the
6857 module namespace, by copying it from the namespace's derived type
6858 list, if necessary. */
6859 if (sym->ts.type == BT_DERIVED
6860 && sym->ns->proc_name->attr.flavor == FL_MODULE
6861 && sym->ts.derived->ns
6862 && sym->ns != sym->ts.derived->ns)
6863 {
6864 gfc_dt_list *dt = sym->ns->derived_types;
6865
6866 for (; dt; dt = dt->next)
6867 if (gfc_compare_derived_types (sym->ts.derived, dt->derived))
6868 sym->ts.derived = dt->derived;
6869 }
6870
6871 if (ns->entries)
6872 for (el = ns->entries->next; el; el = el->next)
6873 {
6874 if (el->sym->result == el->sym
6875 && el->sym->ts.type == BT_UNKNOWN
6876 && gfc_set_default_type (el->sym, 0, NULL) == FAILURE
6877 && !el->sym->attr.untyped)
6878 {
6879 gfc_error ("ENTRY '%s' at %L has no IMPLICIT type",
6880 el->sym->name, &el->sym->declared_at);
6881 el->sym->attr.untyped = 1;
6882 }
6883 }
6884 }
6885
6886 /* 12.3.2.1.1 Defined operators. */
6887
6888 static void
6889 gfc_resolve_uops(gfc_symtree *symtree)
6890 {
6891 gfc_interface *itr;
6892 gfc_symbol *sym;
6893 gfc_formal_arglist *formal;
6894
6895 if (symtree == NULL)
6896 return;
6897
6898 gfc_resolve_uops (symtree->left);
6899 gfc_resolve_uops (symtree->right);
6900
6901 for (itr = symtree->n.uop->operator; itr; itr = itr->next)
6902 {
6903 sym = itr->sym;
6904 if (!sym->attr.function)
6905 gfc_error("User operator procedure '%s' at %L must be a FUNCTION",
6906 sym->name, &sym->declared_at);
6907
6908 if (sym->ts.type == BT_CHARACTER
6909 && !(sym->ts.cl && sym->ts.cl->length)
6910 && !(sym->result && sym->result->ts.cl && sym->result->ts.cl->length))
6911 gfc_error("User operator procedure '%s' at %L cannot be assumed character "
6912 "length", sym->name, &sym->declared_at);
6913
6914 formal = sym->formal;
6915 if (!formal || !formal->sym)
6916 {
6917 gfc_error("User operator procedure '%s' at %L must have at least "
6918 "one argument", sym->name, &sym->declared_at);
6919 continue;
6920 }
6921
6922 if (formal->sym->attr.intent != INTENT_IN)
6923 gfc_error ("First argument of operator interface at %L must be "
6924 "INTENT(IN)", &sym->declared_at);
6925
6926 if (formal->sym->attr.optional)
6927 gfc_error ("First argument of operator interface at %L cannot be "
6928 "optional", &sym->declared_at);
6929
6930 formal = formal->next;
6931 if (!formal || !formal->sym)
6932 continue;
6933
6934 if (formal->sym->attr.intent != INTENT_IN)
6935 gfc_error ("Second argument of operator interface at %L must be "
6936 "INTENT(IN)", &sym->declared_at);
6937
6938 if (formal->sym->attr.optional)
6939 gfc_error ("Second argument of operator interface at %L cannot be "
6940 "optional", &sym->declared_at);
6941
6942 if (formal->next)
6943 gfc_error ("Operator interface at %L must have, at most, two "
6944 "arguments", &sym->declared_at);
6945 }
6946 }
6947
6948
6949 /* Examine all of the expressions associated with a program unit,
6950 assign types to all intermediate expressions, make sure that all
6951 assignments are to compatible types and figure out which names
6952 refer to which functions or subroutines. It doesn't check code
6953 block, which is handled by resolve_code. */
6954
6955 static void
6956 resolve_types (gfc_namespace * ns)
6957 {
6958 gfc_namespace *n;
6959 gfc_charlen *cl;
6960 gfc_data *d;
6961 gfc_equiv *eq;
6962
6963 gfc_current_ns = ns;
6964
6965 resolve_entries (ns);
6966
6967 resolve_contained_functions (ns);
6968
6969 gfc_traverse_ns (ns, resolve_symbol);
6970
6971 resolve_fntype (ns);
6972
6973 for (n = ns->contained; n; n = n->sibling)
6974 {
6975 if (gfc_pure (ns->proc_name) && !gfc_pure (n->proc_name))
6976 gfc_error ("Contained procedure '%s' at %L of a PURE procedure must "
6977 "also be PURE", n->proc_name->name,
6978 &n->proc_name->declared_at);
6979
6980 resolve_types (n);
6981 }
6982
6983 forall_flag = 0;
6984 gfc_check_interfaces (ns);
6985
6986 for (cl = ns->cl_list; cl; cl = cl->next)
6987 resolve_charlen (cl);
6988
6989 gfc_traverse_ns (ns, resolve_values);
6990
6991 if (ns->save_all)
6992 gfc_save_all (ns);
6993
6994 iter_stack = NULL;
6995 for (d = ns->data; d; d = d->next)
6996 resolve_data (d);
6997
6998 iter_stack = NULL;
6999 gfc_traverse_ns (ns, gfc_formalize_init_value);
7000
7001 for (eq = ns->equiv; eq; eq = eq->next)
7002 resolve_equivalence (eq);
7003
7004 /* Warn about unused labels. */
7005 if (warn_unused_label)
7006 warn_unused_fortran_label (ns->st_labels);
7007
7008 gfc_resolve_uops (ns->uop_root);
7009 }
7010
7011
7012 /* Call resolve_code recursively. */
7013
7014 static void
7015 resolve_codes (gfc_namespace * ns)
7016 {
7017 gfc_namespace *n;
7018
7019 for (n = ns->contained; n; n = n->sibling)
7020 resolve_codes (n);
7021
7022 gfc_current_ns = ns;
7023 cs_base = NULL;
7024 /* Set to an out of range value. */
7025 current_entry_id = -1;
7026 resolve_code (ns->code, ns);
7027 }
7028
7029
7030 /* This function is called after a complete program unit has been compiled.
7031 Its purpose is to examine all of the expressions associated with a program
7032 unit, assign types to all intermediate expressions, make sure that all
7033 assignments are to compatible types and figure out which names refer to
7034 which functions or subroutines. */
7035
7036 void
7037 gfc_resolve (gfc_namespace * ns)
7038 {
7039 gfc_namespace *old_ns;
7040
7041 old_ns = gfc_current_ns;
7042
7043 resolve_types (ns);
7044 resolve_codes (ns);
7045
7046 gfc_current_ns = old_ns;
7047 }
This page took 0.357332 seconds and 5 git commands to generate.