Remove another bunch of dead assignment.
[gcc.git] / gcc / fortran / resolve.c
1 /* Perform type resolution on the various structures.
2 Copyright (C) 2001-2019 Free Software Foundation, Inc.
3 Contributed by Andy Vaught
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
20
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "options.h"
25 #include "bitmap.h"
26 #include "gfortran.h"
27 #include "arith.h" /* For gfc_compare_expr(). */
28 #include "dependency.h"
29 #include "data.h"
30 #include "target-memory.h" /* for gfc_simplify_transfer */
31 #include "constructor.h"
32
33 /* Types used in equivalence statements. */
34
35 enum seq_type
36 {
37 SEQ_NONDEFAULT, SEQ_NUMERIC, SEQ_CHARACTER, SEQ_MIXED
38 };
39
40 /* Stack to keep track of the nesting of blocks as we move through the
41 code. See resolve_branch() and gfc_resolve_code(). */
42
43 typedef struct code_stack
44 {
45 struct gfc_code *head, *current;
46 struct code_stack *prev;
47
48 /* This bitmap keeps track of the targets valid for a branch from
49 inside this block except for END {IF|SELECT}s of enclosing
50 blocks. */
51 bitmap reachable_labels;
52 }
53 code_stack;
54
55 static code_stack *cs_base = NULL;
56
57
58 /* Nonzero if we're inside a FORALL or DO CONCURRENT block. */
59
60 static int forall_flag;
61 int gfc_do_concurrent_flag;
62
63 /* True when we are resolving an expression that is an actual argument to
64 a procedure. */
65 static bool actual_arg = false;
66 /* True when we are resolving an expression that is the first actual argument
67 to a procedure. */
68 static bool first_actual_arg = false;
69
70
71 /* Nonzero if we're inside a OpenMP WORKSHARE or PARALLEL WORKSHARE block. */
72
73 static int omp_workshare_flag;
74
75 /* True if we are processing a formal arglist. The corresponding function
76 resets the flag each time that it is read. */
77 static bool formal_arg_flag = false;
78
79 /* True if we are resolving a specification expression. */
80 static bool specification_expr = false;
81
82 /* The id of the last entry seen. */
83 static int current_entry_id;
84
85 /* We use bitmaps to determine if a branch target is valid. */
86 static bitmap_obstack labels_obstack;
87
88 /* True when simplifying a EXPR_VARIABLE argument to an inquiry function. */
89 static bool inquiry_argument = false;
90
91
92 bool
93 gfc_is_formal_arg (void)
94 {
95 return formal_arg_flag;
96 }
97
98 /* Is the symbol host associated? */
99 static bool
100 is_sym_host_assoc (gfc_symbol *sym, gfc_namespace *ns)
101 {
102 for (ns = ns->parent; ns; ns = ns->parent)
103 {
104 if (sym->ns == ns)
105 return true;
106 }
107
108 return false;
109 }
110
111 /* Ensure a typespec used is valid; for instance, TYPE(t) is invalid if t is
112 an ABSTRACT derived-type. If where is not NULL, an error message with that
113 locus is printed, optionally using name. */
114
115 static bool
116 resolve_typespec_used (gfc_typespec* ts, locus* where, const char* name)
117 {
118 if (ts->type == BT_DERIVED && ts->u.derived->attr.abstract)
119 {
120 if (where)
121 {
122 if (name)
123 gfc_error ("%qs at %L is of the ABSTRACT type %qs",
124 name, where, ts->u.derived->name);
125 else
126 gfc_error ("ABSTRACT type %qs used at %L",
127 ts->u.derived->name, where);
128 }
129
130 return false;
131 }
132
133 return true;
134 }
135
136
137 static bool
138 check_proc_interface (gfc_symbol *ifc, locus *where)
139 {
140 /* Several checks for F08:C1216. */
141 if (ifc->attr.procedure)
142 {
143 gfc_error ("Interface %qs at %L is declared "
144 "in a later PROCEDURE statement", ifc->name, where);
145 return false;
146 }
147 if (ifc->generic)
148 {
149 /* For generic interfaces, check if there is
150 a specific procedure with the same name. */
151 gfc_interface *gen = ifc->generic;
152 while (gen && strcmp (gen->sym->name, ifc->name) != 0)
153 gen = gen->next;
154 if (!gen)
155 {
156 gfc_error ("Interface %qs at %L may not be generic",
157 ifc->name, where);
158 return false;
159 }
160 }
161 if (ifc->attr.proc == PROC_ST_FUNCTION)
162 {
163 gfc_error ("Interface %qs at %L may not be a statement function",
164 ifc->name, where);
165 return false;
166 }
167 if (gfc_is_intrinsic (ifc, 0, ifc->declared_at)
168 || gfc_is_intrinsic (ifc, 1, ifc->declared_at))
169 ifc->attr.intrinsic = 1;
170 if (ifc->attr.intrinsic && !gfc_intrinsic_actual_ok (ifc->name, 0))
171 {
172 gfc_error ("Intrinsic procedure %qs not allowed in "
173 "PROCEDURE statement at %L", ifc->name, where);
174 return false;
175 }
176 if (!ifc->attr.if_source && !ifc->attr.intrinsic && ifc->name[0] != '\0')
177 {
178 gfc_error ("Interface %qs at %L must be explicit", ifc->name, where);
179 return false;
180 }
181 return true;
182 }
183
184
185 static void resolve_symbol (gfc_symbol *sym);
186
187
188 /* Resolve the interface for a PROCEDURE declaration or procedure pointer. */
189
190 static bool
191 resolve_procedure_interface (gfc_symbol *sym)
192 {
193 gfc_symbol *ifc = sym->ts.interface;
194
195 if (!ifc)
196 return true;
197
198 if (ifc == sym)
199 {
200 gfc_error ("PROCEDURE %qs at %L may not be used as its own interface",
201 sym->name, &sym->declared_at);
202 return false;
203 }
204 if (!check_proc_interface (ifc, &sym->declared_at))
205 return false;
206
207 if (ifc->attr.if_source || ifc->attr.intrinsic)
208 {
209 /* Resolve interface and copy attributes. */
210 resolve_symbol (ifc);
211 if (ifc->attr.intrinsic)
212 gfc_resolve_intrinsic (ifc, &ifc->declared_at);
213
214 if (ifc->result)
215 {
216 sym->ts = ifc->result->ts;
217 sym->attr.allocatable = ifc->result->attr.allocatable;
218 sym->attr.pointer = ifc->result->attr.pointer;
219 sym->attr.dimension = ifc->result->attr.dimension;
220 sym->attr.class_ok = ifc->result->attr.class_ok;
221 sym->as = gfc_copy_array_spec (ifc->result->as);
222 sym->result = sym;
223 }
224 else
225 {
226 sym->ts = ifc->ts;
227 sym->attr.allocatable = ifc->attr.allocatable;
228 sym->attr.pointer = ifc->attr.pointer;
229 sym->attr.dimension = ifc->attr.dimension;
230 sym->attr.class_ok = ifc->attr.class_ok;
231 sym->as = gfc_copy_array_spec (ifc->as);
232 }
233 sym->ts.interface = ifc;
234 sym->attr.function = ifc->attr.function;
235 sym->attr.subroutine = ifc->attr.subroutine;
236
237 sym->attr.pure = ifc->attr.pure;
238 sym->attr.elemental = ifc->attr.elemental;
239 sym->attr.contiguous = ifc->attr.contiguous;
240 sym->attr.recursive = ifc->attr.recursive;
241 sym->attr.always_explicit = ifc->attr.always_explicit;
242 sym->attr.ext_attr |= ifc->attr.ext_attr;
243 sym->attr.is_bind_c = ifc->attr.is_bind_c;
244 /* Copy char length. */
245 if (ifc->ts.type == BT_CHARACTER && ifc->ts.u.cl)
246 {
247 sym->ts.u.cl = gfc_new_charlen (sym->ns, ifc->ts.u.cl);
248 if (sym->ts.u.cl->length && !sym->ts.u.cl->resolved
249 && !gfc_resolve_expr (sym->ts.u.cl->length))
250 return false;
251 }
252 }
253
254 return true;
255 }
256
257
258 /* Resolve types of formal argument lists. These have to be done early so that
259 the formal argument lists of module procedures can be copied to the
260 containing module before the individual procedures are resolved
261 individually. We also resolve argument lists of procedures in interface
262 blocks because they are self-contained scoping units.
263
264 Since a dummy argument cannot be a non-dummy procedure, the only
265 resort left for untyped names are the IMPLICIT types. */
266
267 static void
268 resolve_formal_arglist (gfc_symbol *proc)
269 {
270 gfc_formal_arglist *f;
271 gfc_symbol *sym;
272 bool saved_specification_expr;
273 int i;
274
275 if (proc->result != NULL)
276 sym = proc->result;
277 else
278 sym = proc;
279
280 if (gfc_elemental (proc)
281 || sym->attr.pointer || sym->attr.allocatable
282 || (sym->as && sym->as->rank != 0))
283 {
284 proc->attr.always_explicit = 1;
285 sym->attr.always_explicit = 1;
286 }
287
288 formal_arg_flag = true;
289
290 for (f = proc->formal; f; f = f->next)
291 {
292 gfc_array_spec *as;
293
294 sym = f->sym;
295
296 if (sym == NULL)
297 {
298 /* Alternate return placeholder. */
299 if (gfc_elemental (proc))
300 gfc_error ("Alternate return specifier in elemental subroutine "
301 "%qs at %L is not allowed", proc->name,
302 &proc->declared_at);
303 if (proc->attr.function)
304 gfc_error ("Alternate return specifier in function "
305 "%qs at %L is not allowed", proc->name,
306 &proc->declared_at);
307 continue;
308 }
309 else if (sym->attr.procedure && sym->attr.if_source != IFSRC_DECL
310 && !resolve_procedure_interface (sym))
311 return;
312
313 if (strcmp (proc->name, sym->name) == 0)
314 {
315 gfc_error ("Self-referential argument "
316 "%qs at %L is not allowed", sym->name,
317 &proc->declared_at);
318 return;
319 }
320
321 if (sym->attr.if_source != IFSRC_UNKNOWN)
322 resolve_formal_arglist (sym);
323
324 if (sym->attr.subroutine || sym->attr.external)
325 {
326 if (sym->attr.flavor == FL_UNKNOWN)
327 gfc_add_flavor (&sym->attr, FL_PROCEDURE, sym->name, &sym->declared_at);
328 }
329 else
330 {
331 if (sym->ts.type == BT_UNKNOWN && !proc->attr.intrinsic
332 && (!sym->attr.function || sym->result == sym))
333 gfc_set_default_type (sym, 1, sym->ns);
334 }
335
336 as = sym->ts.type == BT_CLASS && sym->attr.class_ok
337 ? CLASS_DATA (sym)->as : sym->as;
338
339 saved_specification_expr = specification_expr;
340 specification_expr = true;
341 gfc_resolve_array_spec (as, 0);
342 specification_expr = saved_specification_expr;
343
344 /* We can't tell if an array with dimension (:) is assumed or deferred
345 shape until we know if it has the pointer or allocatable attributes.
346 */
347 if (as && as->rank > 0 && as->type == AS_DEFERRED
348 && ((sym->ts.type != BT_CLASS
349 && !(sym->attr.pointer || sym->attr.allocatable))
350 || (sym->ts.type == BT_CLASS
351 && !(CLASS_DATA (sym)->attr.class_pointer
352 || CLASS_DATA (sym)->attr.allocatable)))
353 && sym->attr.flavor != FL_PROCEDURE)
354 {
355 as->type = AS_ASSUMED_SHAPE;
356 for (i = 0; i < as->rank; i++)
357 as->lower[i] = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
358 }
359
360 if ((as && as->rank > 0 && as->type == AS_ASSUMED_SHAPE)
361 || (as && as->type == AS_ASSUMED_RANK)
362 || sym->attr.pointer || sym->attr.allocatable || sym->attr.target
363 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
364 && (CLASS_DATA (sym)->attr.class_pointer
365 || CLASS_DATA (sym)->attr.allocatable
366 || CLASS_DATA (sym)->attr.target))
367 || sym->attr.optional)
368 {
369 proc->attr.always_explicit = 1;
370 if (proc->result)
371 proc->result->attr.always_explicit = 1;
372 }
373
374 /* If the flavor is unknown at this point, it has to be a variable.
375 A procedure specification would have already set the type. */
376
377 if (sym->attr.flavor == FL_UNKNOWN)
378 gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, &sym->declared_at);
379
380 if (gfc_pure (proc))
381 {
382 if (sym->attr.flavor == FL_PROCEDURE)
383 {
384 /* F08:C1279. */
385 if (!gfc_pure (sym))
386 {
387 gfc_error ("Dummy procedure %qs of PURE procedure at %L must "
388 "also be PURE", sym->name, &sym->declared_at);
389 continue;
390 }
391 }
392 else if (!sym->attr.pointer)
393 {
394 if (proc->attr.function && sym->attr.intent != INTENT_IN)
395 {
396 if (sym->attr.value)
397 gfc_notify_std (GFC_STD_F2008, "Argument %qs"
398 " of pure function %qs at %L with VALUE "
399 "attribute but without INTENT(IN)",
400 sym->name, proc->name, &sym->declared_at);
401 else
402 gfc_error ("Argument %qs of pure function %qs at %L must "
403 "be INTENT(IN) or VALUE", sym->name, proc->name,
404 &sym->declared_at);
405 }
406
407 if (proc->attr.subroutine && sym->attr.intent == INTENT_UNKNOWN)
408 {
409 if (sym->attr.value)
410 gfc_notify_std (GFC_STD_F2008, "Argument %qs"
411 " of pure subroutine %qs at %L with VALUE "
412 "attribute but without INTENT", sym->name,
413 proc->name, &sym->declared_at);
414 else
415 gfc_error ("Argument %qs of pure subroutine %qs at %L "
416 "must have its INTENT specified or have the "
417 "VALUE attribute", sym->name, proc->name,
418 &sym->declared_at);
419 }
420 }
421
422 /* F08:C1278a. */
423 if (sym->ts.type == BT_CLASS && sym->attr.intent == INTENT_OUT)
424 {
425 gfc_error ("INTENT(OUT) argument %qs of pure procedure %qs at %L"
426 " may not be polymorphic", sym->name, proc->name,
427 &sym->declared_at);
428 continue;
429 }
430 }
431
432 if (proc->attr.implicit_pure)
433 {
434 if (sym->attr.flavor == FL_PROCEDURE)
435 {
436 if (!gfc_pure (sym))
437 proc->attr.implicit_pure = 0;
438 }
439 else if (!sym->attr.pointer)
440 {
441 if (proc->attr.function && sym->attr.intent != INTENT_IN
442 && !sym->value)
443 proc->attr.implicit_pure = 0;
444
445 if (proc->attr.subroutine && sym->attr.intent == INTENT_UNKNOWN
446 && !sym->value)
447 proc->attr.implicit_pure = 0;
448 }
449 }
450
451 if (gfc_elemental (proc))
452 {
453 /* F08:C1289. */
454 if (sym->attr.codimension
455 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
456 && CLASS_DATA (sym)->attr.codimension))
457 {
458 gfc_error ("Coarray dummy argument %qs at %L to elemental "
459 "procedure", sym->name, &sym->declared_at);
460 continue;
461 }
462
463 if (sym->as || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
464 && CLASS_DATA (sym)->as))
465 {
466 gfc_error ("Argument %qs of elemental procedure at %L must "
467 "be scalar", sym->name, &sym->declared_at);
468 continue;
469 }
470
471 if (sym->attr.allocatable
472 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
473 && CLASS_DATA (sym)->attr.allocatable))
474 {
475 gfc_error ("Argument %qs of elemental procedure at %L cannot "
476 "have the ALLOCATABLE attribute", sym->name,
477 &sym->declared_at);
478 continue;
479 }
480
481 if (sym->attr.pointer
482 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
483 && CLASS_DATA (sym)->attr.class_pointer))
484 {
485 gfc_error ("Argument %qs of elemental procedure at %L cannot "
486 "have the POINTER attribute", sym->name,
487 &sym->declared_at);
488 continue;
489 }
490
491 if (sym->attr.flavor == FL_PROCEDURE)
492 {
493 gfc_error ("Dummy procedure %qs not allowed in elemental "
494 "procedure %qs at %L", sym->name, proc->name,
495 &sym->declared_at);
496 continue;
497 }
498
499 /* Fortran 2008 Corrigendum 1, C1290a. */
500 if (sym->attr.intent == INTENT_UNKNOWN && !sym->attr.value)
501 {
502 gfc_error ("Argument %qs of elemental procedure %qs at %L must "
503 "have its INTENT specified or have the VALUE "
504 "attribute", sym->name, proc->name,
505 &sym->declared_at);
506 continue;
507 }
508 }
509
510 /* Each dummy shall be specified to be scalar. */
511 if (proc->attr.proc == PROC_ST_FUNCTION)
512 {
513 if (sym->as != NULL)
514 {
515 /* F03:C1263 (R1238) The function-name and each dummy-arg-name
516 shall be specified, explicitly or implicitly, to be scalar. */
517 gfc_error ("Argument '%s' of statement function '%s' at %L "
518 "must be scalar", sym->name, proc->name,
519 &proc->declared_at);
520 continue;
521 }
522
523 if (sym->ts.type == BT_CHARACTER)
524 {
525 gfc_charlen *cl = sym->ts.u.cl;
526 if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
527 {
528 gfc_error ("Character-valued argument %qs of statement "
529 "function at %L must have constant length",
530 sym->name, &sym->declared_at);
531 continue;
532 }
533 }
534 }
535 }
536 formal_arg_flag = false;
537 }
538
539
540 /* Work function called when searching for symbols that have argument lists
541 associated with them. */
542
543 static void
544 find_arglists (gfc_symbol *sym)
545 {
546 if (sym->attr.if_source == IFSRC_UNKNOWN || sym->ns != gfc_current_ns
547 || gfc_fl_struct (sym->attr.flavor) || sym->attr.intrinsic)
548 return;
549
550 resolve_formal_arglist (sym);
551 }
552
553
554 /* Given a namespace, resolve all formal argument lists within the namespace.
555 */
556
557 static void
558 resolve_formal_arglists (gfc_namespace *ns)
559 {
560 if (ns == NULL)
561 return;
562
563 gfc_traverse_ns (ns, find_arglists);
564 }
565
566
567 static void
568 resolve_contained_fntype (gfc_symbol *sym, gfc_namespace *ns)
569 {
570 bool t;
571
572 if (sym && sym->attr.flavor == FL_PROCEDURE
573 && sym->ns->parent
574 && sym->ns->parent->proc_name
575 && sym->ns->parent->proc_name->attr.flavor == FL_PROCEDURE
576 && !strcmp (sym->name, sym->ns->parent->proc_name->name))
577 gfc_error ("Contained procedure %qs at %L has the same name as its "
578 "encompassing procedure", sym->name, &sym->declared_at);
579
580 /* If this namespace is not a function or an entry master function,
581 ignore it. */
582 if (! sym || !(sym->attr.function || sym->attr.flavor == FL_VARIABLE)
583 || sym->attr.entry_master)
584 return;
585
586 if (!sym->result)
587 return;
588
589 /* Try to find out of what the return type is. */
590 if (sym->result->ts.type == BT_UNKNOWN && sym->result->ts.interface == NULL)
591 {
592 t = gfc_set_default_type (sym->result, 0, ns);
593
594 if (!t && !sym->result->attr.untyped)
595 {
596 if (sym->result == sym)
597 gfc_error ("Contained function %qs at %L has no IMPLICIT type",
598 sym->name, &sym->declared_at);
599 else if (!sym->result->attr.proc_pointer)
600 gfc_error ("Result %qs of contained function %qs at %L has "
601 "no IMPLICIT type", sym->result->name, sym->name,
602 &sym->result->declared_at);
603 sym->result->attr.untyped = 1;
604 }
605 }
606
607 /* Fortran 2008 Draft Standard, page 535, C418, on type-param-value
608 type, lists the only ways a character length value of * can be used:
609 dummy arguments of procedures, named constants, function results and
610 in allocate statements if the allocate_object is an assumed length dummy
611 in external functions. Internal function results and results of module
612 procedures are not on this list, ergo, not permitted. */
613
614 if (sym->result->ts.type == BT_CHARACTER)
615 {
616 gfc_charlen *cl = sym->result->ts.u.cl;
617 if ((!cl || !cl->length) && !sym->result->ts.deferred)
618 {
619 /* See if this is a module-procedure and adapt error message
620 accordingly. */
621 bool module_proc;
622 gcc_assert (ns->parent && ns->parent->proc_name);
623 module_proc = (ns->parent->proc_name->attr.flavor == FL_MODULE);
624
625 gfc_error (module_proc
626 ? G_("Character-valued module procedure %qs at %L"
627 " must not be assumed length")
628 : G_("Character-valued internal function %qs at %L"
629 " must not be assumed length"),
630 sym->name, &sym->declared_at);
631 }
632 }
633 }
634
635
636 /* Add NEW_ARGS to the formal argument list of PROC, taking care not to
637 introduce duplicates. */
638
639 static void
640 merge_argument_lists (gfc_symbol *proc, gfc_formal_arglist *new_args)
641 {
642 gfc_formal_arglist *f, *new_arglist;
643 gfc_symbol *new_sym;
644
645 for (; new_args != NULL; new_args = new_args->next)
646 {
647 new_sym = new_args->sym;
648 /* See if this arg is already in the formal argument list. */
649 for (f = proc->formal; f; f = f->next)
650 {
651 if (new_sym == f->sym)
652 break;
653 }
654
655 if (f)
656 continue;
657
658 /* Add a new argument. Argument order is not important. */
659 new_arglist = gfc_get_formal_arglist ();
660 new_arglist->sym = new_sym;
661 new_arglist->next = proc->formal;
662 proc->formal = new_arglist;
663 }
664 }
665
666
667 /* Flag the arguments that are not present in all entries. */
668
669 static void
670 check_argument_lists (gfc_symbol *proc, gfc_formal_arglist *new_args)
671 {
672 gfc_formal_arglist *f, *head;
673 head = new_args;
674
675 for (f = proc->formal; f; f = f->next)
676 {
677 if (f->sym == NULL)
678 continue;
679
680 for (new_args = head; new_args; new_args = new_args->next)
681 {
682 if (new_args->sym == f->sym)
683 break;
684 }
685
686 if (new_args)
687 continue;
688
689 f->sym->attr.not_always_present = 1;
690 }
691 }
692
693
694 /* Resolve alternate entry points. If a symbol has multiple entry points we
695 create a new master symbol for the main routine, and turn the existing
696 symbol into an entry point. */
697
698 static void
699 resolve_entries (gfc_namespace *ns)
700 {
701 gfc_namespace *old_ns;
702 gfc_code *c;
703 gfc_symbol *proc;
704 gfc_entry_list *el;
705 char name[GFC_MAX_SYMBOL_LEN + 1];
706 static int master_count = 0;
707
708 if (ns->proc_name == NULL)
709 return;
710
711 /* No need to do anything if this procedure doesn't have alternate entry
712 points. */
713 if (!ns->entries)
714 return;
715
716 /* We may already have resolved alternate entry points. */
717 if (ns->proc_name->attr.entry_master)
718 return;
719
720 /* If this isn't a procedure something has gone horribly wrong. */
721 gcc_assert (ns->proc_name->attr.flavor == FL_PROCEDURE);
722
723 /* Remember the current namespace. */
724 old_ns = gfc_current_ns;
725
726 gfc_current_ns = ns;
727
728 /* Add the main entry point to the list of entry points. */
729 el = gfc_get_entry_list ();
730 el->sym = ns->proc_name;
731 el->id = 0;
732 el->next = ns->entries;
733 ns->entries = el;
734 ns->proc_name->attr.entry = 1;
735
736 /* If it is a module function, it needs to be in the right namespace
737 so that gfc_get_fake_result_decl can gather up the results. The
738 need for this arose in get_proc_name, where these beasts were
739 left in their own namespace, to keep prior references linked to
740 the entry declaration.*/
741 if (ns->proc_name->attr.function
742 && ns->parent && ns->parent->proc_name->attr.flavor == FL_MODULE)
743 el->sym->ns = ns;
744
745 /* Do the same for entries where the master is not a module
746 procedure. These are retained in the module namespace because
747 of the module procedure declaration. */
748 for (el = el->next; el; el = el->next)
749 if (el->sym->ns->proc_name->attr.flavor == FL_MODULE
750 && el->sym->attr.mod_proc)
751 el->sym->ns = ns;
752 el = ns->entries;
753
754 /* Add an entry statement for it. */
755 c = gfc_get_code (EXEC_ENTRY);
756 c->ext.entry = el;
757 c->next = ns->code;
758 ns->code = c;
759
760 /* Create a new symbol for the master function. */
761 /* Give the internal function a unique name (within this file).
762 Also include the function name so the user has some hope of figuring
763 out what is going on. */
764 snprintf (name, GFC_MAX_SYMBOL_LEN, "master.%d.%s",
765 master_count++, ns->proc_name->name);
766 gfc_get_ha_symbol (name, &proc);
767 gcc_assert (proc != NULL);
768
769 gfc_add_procedure (&proc->attr, PROC_INTERNAL, proc->name, NULL);
770 if (ns->proc_name->attr.subroutine)
771 gfc_add_subroutine (&proc->attr, proc->name, NULL);
772 else
773 {
774 gfc_symbol *sym;
775 gfc_typespec *ts, *fts;
776 gfc_array_spec *as, *fas;
777 gfc_add_function (&proc->attr, proc->name, NULL);
778 proc->result = proc;
779 fas = ns->entries->sym->as;
780 fas = fas ? fas : ns->entries->sym->result->as;
781 fts = &ns->entries->sym->result->ts;
782 if (fts->type == BT_UNKNOWN)
783 fts = gfc_get_default_type (ns->entries->sym->result->name, NULL);
784 for (el = ns->entries->next; el; el = el->next)
785 {
786 ts = &el->sym->result->ts;
787 as = el->sym->as;
788 as = as ? as : el->sym->result->as;
789 if (ts->type == BT_UNKNOWN)
790 ts = gfc_get_default_type (el->sym->result->name, NULL);
791
792 if (! gfc_compare_types (ts, fts)
793 || (el->sym->result->attr.dimension
794 != ns->entries->sym->result->attr.dimension)
795 || (el->sym->result->attr.pointer
796 != ns->entries->sym->result->attr.pointer))
797 break;
798 else if (as && fas && ns->entries->sym->result != el->sym->result
799 && gfc_compare_array_spec (as, fas) == 0)
800 gfc_error ("Function %s at %L has entries with mismatched "
801 "array specifications", ns->entries->sym->name,
802 &ns->entries->sym->declared_at);
803 /* The characteristics need to match and thus both need to have
804 the same string length, i.e. both len=*, or both len=4.
805 Having both len=<variable> is also possible, but difficult to
806 check at compile time. */
807 else if (ts->type == BT_CHARACTER && ts->u.cl && fts->u.cl
808 && (((ts->u.cl->length && !fts->u.cl->length)
809 ||(!ts->u.cl->length && fts->u.cl->length))
810 || (ts->u.cl->length
811 && ts->u.cl->length->expr_type
812 != fts->u.cl->length->expr_type)
813 || (ts->u.cl->length
814 && ts->u.cl->length->expr_type == EXPR_CONSTANT
815 && mpz_cmp (ts->u.cl->length->value.integer,
816 fts->u.cl->length->value.integer) != 0)))
817 gfc_notify_std (GFC_STD_GNU, "Function %s at %L with "
818 "entries returning variables of different "
819 "string lengths", ns->entries->sym->name,
820 &ns->entries->sym->declared_at);
821 }
822
823 if (el == NULL)
824 {
825 sym = ns->entries->sym->result;
826 /* All result types the same. */
827 proc->ts = *fts;
828 if (sym->attr.dimension)
829 gfc_set_array_spec (proc, gfc_copy_array_spec (sym->as), NULL);
830 if (sym->attr.pointer)
831 gfc_add_pointer (&proc->attr, NULL);
832 }
833 else
834 {
835 /* Otherwise the result will be passed through a union by
836 reference. */
837 proc->attr.mixed_entry_master = 1;
838 for (el = ns->entries; el; el = el->next)
839 {
840 sym = el->sym->result;
841 if (sym->attr.dimension)
842 {
843 if (el == ns->entries)
844 gfc_error ("FUNCTION result %s cannot be an array in "
845 "FUNCTION %s at %L", sym->name,
846 ns->entries->sym->name, &sym->declared_at);
847 else
848 gfc_error ("ENTRY result %s cannot be an array in "
849 "FUNCTION %s at %L", sym->name,
850 ns->entries->sym->name, &sym->declared_at);
851 }
852 else if (sym->attr.pointer)
853 {
854 if (el == ns->entries)
855 gfc_error ("FUNCTION result %s cannot be a POINTER in "
856 "FUNCTION %s at %L", sym->name,
857 ns->entries->sym->name, &sym->declared_at);
858 else
859 gfc_error ("ENTRY result %s cannot be a POINTER in "
860 "FUNCTION %s at %L", sym->name,
861 ns->entries->sym->name, &sym->declared_at);
862 }
863 else
864 {
865 ts = &sym->ts;
866 if (ts->type == BT_UNKNOWN)
867 ts = gfc_get_default_type (sym->name, NULL);
868 switch (ts->type)
869 {
870 case BT_INTEGER:
871 if (ts->kind == gfc_default_integer_kind)
872 sym = NULL;
873 break;
874 case BT_REAL:
875 if (ts->kind == gfc_default_real_kind
876 || ts->kind == gfc_default_double_kind)
877 sym = NULL;
878 break;
879 case BT_COMPLEX:
880 if (ts->kind == gfc_default_complex_kind)
881 sym = NULL;
882 break;
883 case BT_LOGICAL:
884 if (ts->kind == gfc_default_logical_kind)
885 sym = NULL;
886 break;
887 case BT_UNKNOWN:
888 /* We will issue error elsewhere. */
889 sym = NULL;
890 break;
891 default:
892 break;
893 }
894 if (sym)
895 {
896 if (el == ns->entries)
897 gfc_error ("FUNCTION result %s cannot be of type %s "
898 "in FUNCTION %s at %L", sym->name,
899 gfc_typename (ts), ns->entries->sym->name,
900 &sym->declared_at);
901 else
902 gfc_error ("ENTRY result %s cannot be of type %s "
903 "in FUNCTION %s at %L", sym->name,
904 gfc_typename (ts), ns->entries->sym->name,
905 &sym->declared_at);
906 }
907 }
908 }
909 }
910 }
911 proc->attr.access = ACCESS_PRIVATE;
912 proc->attr.entry_master = 1;
913
914 /* Merge all the entry point arguments. */
915 for (el = ns->entries; el; el = el->next)
916 merge_argument_lists (proc, el->sym->formal);
917
918 /* Check the master formal arguments for any that are not
919 present in all entry points. */
920 for (el = ns->entries; el; el = el->next)
921 check_argument_lists (proc, el->sym->formal);
922
923 /* Use the master function for the function body. */
924 ns->proc_name = proc;
925
926 /* Finalize the new symbols. */
927 gfc_commit_symbols ();
928
929 /* Restore the original namespace. */
930 gfc_current_ns = old_ns;
931 }
932
933
934 /* Resolve common variables. */
935 static void
936 resolve_common_vars (gfc_common_head *common_block, bool named_common)
937 {
938 gfc_symbol *csym = common_block->head;
939
940 for (; csym; csym = csym->common_next)
941 {
942 /* gfc_add_in_common may have been called before, but the reported errors
943 have been ignored to continue parsing.
944 We do the checks again here. */
945 if (!csym->attr.use_assoc)
946 {
947 gfc_add_in_common (&csym->attr, csym->name, &common_block->where);
948 gfc_notify_std (GFC_STD_F2018_OBS, "COMMON block at %L",
949 &common_block->where);
950 }
951
952 if (csym->value || csym->attr.data)
953 {
954 if (!csym->ns->is_block_data)
955 gfc_notify_std (GFC_STD_GNU, "Variable %qs at %L is in COMMON "
956 "but only in BLOCK DATA initialization is "
957 "allowed", csym->name, &csym->declared_at);
958 else if (!named_common)
959 gfc_notify_std (GFC_STD_GNU, "Initialized variable %qs at %L is "
960 "in a blank COMMON but initialization is only "
961 "allowed in named common blocks", csym->name,
962 &csym->declared_at);
963 }
964
965 if (UNLIMITED_POLY (csym))
966 gfc_error_now ("%qs in cannot appear in COMMON at %L "
967 "[F2008:C5100]", csym->name, &csym->declared_at);
968
969 if (csym->ts.type != BT_DERIVED)
970 continue;
971
972 if (!(csym->ts.u.derived->attr.sequence
973 || csym->ts.u.derived->attr.is_bind_c))
974 gfc_error_now ("Derived type variable %qs in COMMON at %L "
975 "has neither the SEQUENCE nor the BIND(C) "
976 "attribute", csym->name, &csym->declared_at);
977 if (csym->ts.u.derived->attr.alloc_comp)
978 gfc_error_now ("Derived type variable %qs in COMMON at %L "
979 "has an ultimate component that is "
980 "allocatable", csym->name, &csym->declared_at);
981 if (gfc_has_default_initializer (csym->ts.u.derived))
982 gfc_error_now ("Derived type variable %qs in COMMON at %L "
983 "may not have default initializer", csym->name,
984 &csym->declared_at);
985
986 if (csym->attr.flavor == FL_UNKNOWN && !csym->attr.proc_pointer)
987 gfc_add_flavor (&csym->attr, FL_VARIABLE, csym->name, &csym->declared_at);
988 }
989 }
990
991 /* Resolve common blocks. */
992 static void
993 resolve_common_blocks (gfc_symtree *common_root)
994 {
995 gfc_symbol *sym;
996 gfc_gsymbol * gsym;
997
998 if (common_root == NULL)
999 return;
1000
1001 if (common_root->left)
1002 resolve_common_blocks (common_root->left);
1003 if (common_root->right)
1004 resolve_common_blocks (common_root->right);
1005
1006 resolve_common_vars (common_root->n.common, true);
1007
1008 /* The common name is a global name - in Fortran 2003 also if it has a
1009 C binding name, since Fortran 2008 only the C binding name is a global
1010 identifier. */
1011 if (!common_root->n.common->binding_label
1012 || gfc_notification_std (GFC_STD_F2008))
1013 {
1014 gsym = gfc_find_gsymbol (gfc_gsym_root,
1015 common_root->n.common->name);
1016
1017 if (gsym && gfc_notification_std (GFC_STD_F2008)
1018 && gsym->type == GSYM_COMMON
1019 && ((common_root->n.common->binding_label
1020 && (!gsym->binding_label
1021 || strcmp (common_root->n.common->binding_label,
1022 gsym->binding_label) != 0))
1023 || (!common_root->n.common->binding_label
1024 && gsym->binding_label)))
1025 {
1026 gfc_error ("In Fortran 2003 COMMON %qs block at %L is a global "
1027 "identifier and must thus have the same binding name "
1028 "as the same-named COMMON block at %L: %s vs %s",
1029 common_root->n.common->name, &common_root->n.common->where,
1030 &gsym->where,
1031 common_root->n.common->binding_label
1032 ? common_root->n.common->binding_label : "(blank)",
1033 gsym->binding_label ? gsym->binding_label : "(blank)");
1034 return;
1035 }
1036
1037 if (gsym && gsym->type != GSYM_COMMON
1038 && !common_root->n.common->binding_label)
1039 {
1040 gfc_error ("COMMON block %qs at %L uses the same global identifier "
1041 "as entity at %L",
1042 common_root->n.common->name, &common_root->n.common->where,
1043 &gsym->where);
1044 return;
1045 }
1046 if (gsym && gsym->type != GSYM_COMMON)
1047 {
1048 gfc_error ("Fortran 2008: COMMON block %qs with binding label at "
1049 "%L sharing the identifier with global non-COMMON-block "
1050 "entity at %L", common_root->n.common->name,
1051 &common_root->n.common->where, &gsym->where);
1052 return;
1053 }
1054 if (!gsym)
1055 {
1056 gsym = gfc_get_gsymbol (common_root->n.common->name, false);
1057 gsym->type = GSYM_COMMON;
1058 gsym->where = common_root->n.common->where;
1059 gsym->defined = 1;
1060 }
1061 gsym->used = 1;
1062 }
1063
1064 if (common_root->n.common->binding_label)
1065 {
1066 gsym = gfc_find_gsymbol (gfc_gsym_root,
1067 common_root->n.common->binding_label);
1068 if (gsym && gsym->type != GSYM_COMMON)
1069 {
1070 gfc_error ("COMMON block at %L with binding label %qs uses the same "
1071 "global identifier as entity at %L",
1072 &common_root->n.common->where,
1073 common_root->n.common->binding_label, &gsym->where);
1074 return;
1075 }
1076 if (!gsym)
1077 {
1078 gsym = gfc_get_gsymbol (common_root->n.common->binding_label, true);
1079 gsym->type = GSYM_COMMON;
1080 gsym->where = common_root->n.common->where;
1081 gsym->defined = 1;
1082 }
1083 gsym->used = 1;
1084 }
1085
1086 gfc_find_symbol (common_root->name, gfc_current_ns, 0, &sym);
1087 if (sym == NULL)
1088 return;
1089
1090 if (sym->attr.flavor == FL_PARAMETER)
1091 gfc_error ("COMMON block %qs at %L is used as PARAMETER at %L",
1092 sym->name, &common_root->n.common->where, &sym->declared_at);
1093
1094 if (sym->attr.external)
1095 gfc_error ("COMMON block %qs at %L cannot have the EXTERNAL attribute",
1096 sym->name, &common_root->n.common->where);
1097
1098 if (sym->attr.intrinsic)
1099 gfc_error ("COMMON block %qs at %L is also an intrinsic procedure",
1100 sym->name, &common_root->n.common->where);
1101 else if (sym->attr.result
1102 || gfc_is_function_return_value (sym, gfc_current_ns))
1103 gfc_notify_std (GFC_STD_F2003, "COMMON block %qs at %L "
1104 "that is also a function result", sym->name,
1105 &common_root->n.common->where);
1106 else if (sym->attr.flavor == FL_PROCEDURE && sym->attr.proc != PROC_INTERNAL
1107 && sym->attr.proc != PROC_ST_FUNCTION)
1108 gfc_notify_std (GFC_STD_F2003, "COMMON block %qs at %L "
1109 "that is also a global procedure", sym->name,
1110 &common_root->n.common->where);
1111 }
1112
1113
1114 /* Resolve contained function types. Because contained functions can call one
1115 another, they have to be worked out before any of the contained procedures
1116 can be resolved.
1117
1118 The good news is that if a function doesn't already have a type, the only
1119 way it can get one is through an IMPLICIT type or a RESULT variable, because
1120 by definition contained functions are contained namespace they're contained
1121 in, not in a sibling or parent namespace. */
1122
1123 static void
1124 resolve_contained_functions (gfc_namespace *ns)
1125 {
1126 gfc_namespace *child;
1127 gfc_entry_list *el;
1128
1129 resolve_formal_arglists (ns);
1130
1131 for (child = ns->contained; child; child = child->sibling)
1132 {
1133 /* Resolve alternate entry points first. */
1134 resolve_entries (child);
1135
1136 /* Then check function return types. */
1137 resolve_contained_fntype (child->proc_name, child);
1138 for (el = child->entries; el; el = el->next)
1139 resolve_contained_fntype (el->sym, child);
1140 }
1141 }
1142
1143
1144
1145 /* A Parameterized Derived Type constructor must contain values for
1146 the PDT KIND parameters or they must have a default initializer.
1147 Go through the constructor picking out the KIND expressions,
1148 storing them in 'param_list' and then call gfc_get_pdt_instance
1149 to obtain the PDT instance. */
1150
1151 static gfc_actual_arglist *param_list, *param_tail, *param;
1152
1153 static bool
1154 get_pdt_spec_expr (gfc_component *c, gfc_expr *expr)
1155 {
1156 param = gfc_get_actual_arglist ();
1157 if (!param_list)
1158 param_list = param_tail = param;
1159 else
1160 {
1161 param_tail->next = param;
1162 param_tail = param_tail->next;
1163 }
1164
1165 param_tail->name = c->name;
1166 if (expr)
1167 param_tail->expr = gfc_copy_expr (expr);
1168 else if (c->initializer)
1169 param_tail->expr = gfc_copy_expr (c->initializer);
1170 else
1171 {
1172 param_tail->spec_type = SPEC_ASSUMED;
1173 if (c->attr.pdt_kind)
1174 {
1175 gfc_error ("The KIND parameter %qs in the PDT constructor "
1176 "at %C has no value", param->name);
1177 return false;
1178 }
1179 }
1180
1181 return true;
1182 }
1183
1184 static bool
1185 get_pdt_constructor (gfc_expr *expr, gfc_constructor **constr,
1186 gfc_symbol *derived)
1187 {
1188 gfc_constructor *cons = NULL;
1189 gfc_component *comp;
1190 bool t = true;
1191
1192 if (expr && expr->expr_type == EXPR_STRUCTURE)
1193 cons = gfc_constructor_first (expr->value.constructor);
1194 else if (constr)
1195 cons = *constr;
1196 gcc_assert (cons);
1197
1198 comp = derived->components;
1199
1200 for (; comp && cons; comp = comp->next, cons = gfc_constructor_next (cons))
1201 {
1202 if (cons->expr
1203 && cons->expr->expr_type == EXPR_STRUCTURE
1204 && comp->ts.type == BT_DERIVED)
1205 {
1206 t = get_pdt_constructor (cons->expr, NULL, comp->ts.u.derived);
1207 if (!t)
1208 return t;
1209 }
1210 else if (comp->ts.type == BT_DERIVED)
1211 {
1212 t = get_pdt_constructor (NULL, &cons, comp->ts.u.derived);
1213 if (!t)
1214 return t;
1215 }
1216 else if ((comp->attr.pdt_kind || comp->attr.pdt_len)
1217 && derived->attr.pdt_template)
1218 {
1219 t = get_pdt_spec_expr (comp, cons->expr);
1220 if (!t)
1221 return t;
1222 }
1223 }
1224 return t;
1225 }
1226
1227
1228 static bool resolve_fl_derived0 (gfc_symbol *sym);
1229 static bool resolve_fl_struct (gfc_symbol *sym);
1230
1231
1232 /* Resolve all of the elements of a structure constructor and make sure that
1233 the types are correct. The 'init' flag indicates that the given
1234 constructor is an initializer. */
1235
1236 static bool
1237 resolve_structure_cons (gfc_expr *expr, int init)
1238 {
1239 gfc_constructor *cons;
1240 gfc_component *comp;
1241 bool t;
1242 symbol_attribute a;
1243
1244 t = true;
1245
1246 if (expr->ts.type == BT_DERIVED || expr->ts.type == BT_UNION)
1247 {
1248 if (expr->ts.u.derived->attr.flavor == FL_DERIVED)
1249 resolve_fl_derived0 (expr->ts.u.derived);
1250 else
1251 resolve_fl_struct (expr->ts.u.derived);
1252
1253 /* If this is a Parameterized Derived Type template, find the
1254 instance corresponding to the PDT kind parameters. */
1255 if (expr->ts.u.derived->attr.pdt_template)
1256 {
1257 param_list = NULL;
1258 t = get_pdt_constructor (expr, NULL, expr->ts.u.derived);
1259 if (!t)
1260 return t;
1261 gfc_get_pdt_instance (param_list, &expr->ts.u.derived, NULL);
1262
1263 expr->param_list = gfc_copy_actual_arglist (param_list);
1264
1265 if (param_list)
1266 gfc_free_actual_arglist (param_list);
1267
1268 if (!expr->ts.u.derived->attr.pdt_type)
1269 return false;
1270 }
1271 }
1272
1273 cons = gfc_constructor_first (expr->value.constructor);
1274
1275 /* A constructor may have references if it is the result of substituting a
1276 parameter variable. In this case we just pull out the component we
1277 want. */
1278 if (expr->ref)
1279 comp = expr->ref->u.c.sym->components;
1280 else
1281 comp = expr->ts.u.derived->components;
1282
1283 for (; comp && cons; comp = comp->next, cons = gfc_constructor_next (cons))
1284 {
1285 int rank;
1286
1287 if (!cons->expr)
1288 continue;
1289
1290 /* Unions use an EXPR_NULL contrived expression to tell the translation
1291 phase to generate an initializer of the appropriate length.
1292 Ignore it here. */
1293 if (cons->expr->ts.type == BT_UNION && cons->expr->expr_type == EXPR_NULL)
1294 continue;
1295
1296 if (!gfc_resolve_expr (cons->expr))
1297 {
1298 t = false;
1299 continue;
1300 }
1301
1302 rank = comp->as ? comp->as->rank : 0;
1303 if (comp->ts.type == BT_CLASS
1304 && !comp->ts.u.derived->attr.unlimited_polymorphic
1305 && CLASS_DATA (comp)->as)
1306 rank = CLASS_DATA (comp)->as->rank;
1307
1308 if (cons->expr->expr_type != EXPR_NULL && rank != cons->expr->rank
1309 && (comp->attr.allocatable || cons->expr->rank))
1310 {
1311 gfc_error ("The rank of the element in the structure "
1312 "constructor at %L does not match that of the "
1313 "component (%d/%d)", &cons->expr->where,
1314 cons->expr->rank, rank);
1315 t = false;
1316 }
1317
1318 /* If we don't have the right type, try to convert it. */
1319
1320 if (!comp->attr.proc_pointer &&
1321 !gfc_compare_types (&cons->expr->ts, &comp->ts))
1322 {
1323 if (strcmp (comp->name, "_extends") == 0)
1324 {
1325 /* Can afford to be brutal with the _extends initializer.
1326 The derived type can get lost because it is PRIVATE
1327 but it is not usage constrained by the standard. */
1328 cons->expr->ts = comp->ts;
1329 }
1330 else if (comp->attr.pointer && cons->expr->ts.type != BT_UNKNOWN)
1331 {
1332 gfc_error ("The element in the structure constructor at %L, "
1333 "for pointer component %qs, is %s but should be %s",
1334 &cons->expr->where, comp->name,
1335 gfc_basic_typename (cons->expr->ts.type),
1336 gfc_basic_typename (comp->ts.type));
1337 t = false;
1338 }
1339 else
1340 {
1341 bool t2 = gfc_convert_type (cons->expr, &comp->ts, 1);
1342 if (t)
1343 t = t2;
1344 }
1345 }
1346
1347 /* For strings, the length of the constructor should be the same as
1348 the one of the structure, ensure this if the lengths are known at
1349 compile time and when we are dealing with PARAMETER or structure
1350 constructors. */
1351 if (cons->expr->ts.type == BT_CHARACTER && comp->ts.u.cl
1352 && comp->ts.u.cl->length
1353 && comp->ts.u.cl->length->expr_type == EXPR_CONSTANT
1354 && cons->expr->ts.u.cl && cons->expr->ts.u.cl->length
1355 && cons->expr->ts.u.cl->length->expr_type == EXPR_CONSTANT
1356 && cons->expr->rank != 0
1357 && mpz_cmp (cons->expr->ts.u.cl->length->value.integer,
1358 comp->ts.u.cl->length->value.integer) != 0)
1359 {
1360 if (cons->expr->expr_type == EXPR_VARIABLE
1361 && cons->expr->symtree->n.sym->attr.flavor == FL_PARAMETER)
1362 {
1363 /* Wrap the parameter in an array constructor (EXPR_ARRAY)
1364 to make use of the gfc_resolve_character_array_constructor
1365 machinery. The expression is later simplified away to
1366 an array of string literals. */
1367 gfc_expr *para = cons->expr;
1368 cons->expr = gfc_get_expr ();
1369 cons->expr->ts = para->ts;
1370 cons->expr->where = para->where;
1371 cons->expr->expr_type = EXPR_ARRAY;
1372 cons->expr->rank = para->rank;
1373 cons->expr->shape = gfc_copy_shape (para->shape, para->rank);
1374 gfc_constructor_append_expr (&cons->expr->value.constructor,
1375 para, &cons->expr->where);
1376 }
1377
1378 if (cons->expr->expr_type == EXPR_ARRAY)
1379 {
1380 /* Rely on the cleanup of the namespace to deal correctly with
1381 the old charlen. (There was a block here that attempted to
1382 remove the charlen but broke the chain in so doing.) */
1383 cons->expr->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
1384 cons->expr->ts.u.cl->length_from_typespec = true;
1385 cons->expr->ts.u.cl->length = gfc_copy_expr (comp->ts.u.cl->length);
1386 gfc_resolve_character_array_constructor (cons->expr);
1387 }
1388 }
1389
1390 if (cons->expr->expr_type == EXPR_NULL
1391 && !(comp->attr.pointer || comp->attr.allocatable
1392 || comp->attr.proc_pointer || comp->ts.f90_type == BT_VOID
1393 || (comp->ts.type == BT_CLASS
1394 && (CLASS_DATA (comp)->attr.class_pointer
1395 || CLASS_DATA (comp)->attr.allocatable))))
1396 {
1397 t = false;
1398 gfc_error ("The NULL in the structure constructor at %L is "
1399 "being applied to component %qs, which is neither "
1400 "a POINTER nor ALLOCATABLE", &cons->expr->where,
1401 comp->name);
1402 }
1403
1404 if (comp->attr.proc_pointer && comp->ts.interface)
1405 {
1406 /* Check procedure pointer interface. */
1407 gfc_symbol *s2 = NULL;
1408 gfc_component *c2;
1409 const char *name;
1410 char err[200];
1411
1412 c2 = gfc_get_proc_ptr_comp (cons->expr);
1413 if (c2)
1414 {
1415 s2 = c2->ts.interface;
1416 name = c2->name;
1417 }
1418 else if (cons->expr->expr_type == EXPR_FUNCTION)
1419 {
1420 s2 = cons->expr->symtree->n.sym->result;
1421 name = cons->expr->symtree->n.sym->result->name;
1422 }
1423 else if (cons->expr->expr_type != EXPR_NULL)
1424 {
1425 s2 = cons->expr->symtree->n.sym;
1426 name = cons->expr->symtree->n.sym->name;
1427 }
1428
1429 if (s2 && !gfc_compare_interfaces (comp->ts.interface, s2, name, 0, 1,
1430 err, sizeof (err), NULL, NULL))
1431 {
1432 gfc_error_opt (OPT_Wargument_mismatch,
1433 "Interface mismatch for procedure-pointer "
1434 "component %qs in structure constructor at %L:"
1435 " %s", comp->name, &cons->expr->where, err);
1436 return false;
1437 }
1438 }
1439
1440 if (!comp->attr.pointer || comp->attr.proc_pointer
1441 || cons->expr->expr_type == EXPR_NULL)
1442 continue;
1443
1444 a = gfc_expr_attr (cons->expr);
1445
1446 if (!a.pointer && !a.target)
1447 {
1448 t = false;
1449 gfc_error ("The element in the structure constructor at %L, "
1450 "for pointer component %qs should be a POINTER or "
1451 "a TARGET", &cons->expr->where, comp->name);
1452 }
1453
1454 if (init)
1455 {
1456 /* F08:C461. Additional checks for pointer initialization. */
1457 if (a.allocatable)
1458 {
1459 t = false;
1460 gfc_error ("Pointer initialization target at %L "
1461 "must not be ALLOCATABLE", &cons->expr->where);
1462 }
1463 if (!a.save)
1464 {
1465 t = false;
1466 gfc_error ("Pointer initialization target at %L "
1467 "must have the SAVE attribute", &cons->expr->where);
1468 }
1469 }
1470
1471 /* F2003, C1272 (3). */
1472 bool impure = cons->expr->expr_type == EXPR_VARIABLE
1473 && (gfc_impure_variable (cons->expr->symtree->n.sym)
1474 || gfc_is_coindexed (cons->expr));
1475 if (impure && gfc_pure (NULL))
1476 {
1477 t = false;
1478 gfc_error ("Invalid expression in the structure constructor for "
1479 "pointer component %qs at %L in PURE procedure",
1480 comp->name, &cons->expr->where);
1481 }
1482
1483 if (impure)
1484 gfc_unset_implicit_pure (NULL);
1485 }
1486
1487 return t;
1488 }
1489
1490
1491 /****************** Expression name resolution ******************/
1492
1493 /* Returns 0 if a symbol was not declared with a type or
1494 attribute declaration statement, nonzero otherwise. */
1495
1496 static int
1497 was_declared (gfc_symbol *sym)
1498 {
1499 symbol_attribute a;
1500
1501 a = sym->attr;
1502
1503 if (!a.implicit_type && sym->ts.type != BT_UNKNOWN)
1504 return 1;
1505
1506 if (a.allocatable || a.dimension || a.dummy || a.external || a.intrinsic
1507 || a.optional || a.pointer || a.save || a.target || a.volatile_
1508 || a.value || a.access != ACCESS_UNKNOWN || a.intent != INTENT_UNKNOWN
1509 || a.asynchronous || a.codimension)
1510 return 1;
1511
1512 return 0;
1513 }
1514
1515
1516 /* Determine if a symbol is generic or not. */
1517
1518 static int
1519 generic_sym (gfc_symbol *sym)
1520 {
1521 gfc_symbol *s;
1522
1523 if (sym->attr.generic ||
1524 (sym->attr.intrinsic && gfc_generic_intrinsic (sym->name)))
1525 return 1;
1526
1527 if (was_declared (sym) || sym->ns->parent == NULL)
1528 return 0;
1529
1530 gfc_find_symbol (sym->name, sym->ns->parent, 1, &s);
1531
1532 if (s != NULL)
1533 {
1534 if (s == sym)
1535 return 0;
1536 else
1537 return generic_sym (s);
1538 }
1539
1540 return 0;
1541 }
1542
1543
1544 /* Determine if a symbol is specific or not. */
1545
1546 static int
1547 specific_sym (gfc_symbol *sym)
1548 {
1549 gfc_symbol *s;
1550
1551 if (sym->attr.if_source == IFSRC_IFBODY
1552 || sym->attr.proc == PROC_MODULE
1553 || sym->attr.proc == PROC_INTERNAL
1554 || sym->attr.proc == PROC_ST_FUNCTION
1555 || (sym->attr.intrinsic && gfc_specific_intrinsic (sym->name))
1556 || sym->attr.external)
1557 return 1;
1558
1559 if (was_declared (sym) || sym->ns->parent == NULL)
1560 return 0;
1561
1562 gfc_find_symbol (sym->name, sym->ns->parent, 1, &s);
1563
1564 return (s == NULL) ? 0 : specific_sym (s);
1565 }
1566
1567
1568 /* Figure out if the procedure is specific, generic or unknown. */
1569
1570 enum proc_type
1571 { PTYPE_GENERIC = 1, PTYPE_SPECIFIC, PTYPE_UNKNOWN };
1572
1573 static proc_type
1574 procedure_kind (gfc_symbol *sym)
1575 {
1576 if (generic_sym (sym))
1577 return PTYPE_GENERIC;
1578
1579 if (specific_sym (sym))
1580 return PTYPE_SPECIFIC;
1581
1582 return PTYPE_UNKNOWN;
1583 }
1584
1585 /* Check references to assumed size arrays. The flag need_full_assumed_size
1586 is nonzero when matching actual arguments. */
1587
1588 static int need_full_assumed_size = 0;
1589
1590 static bool
1591 check_assumed_size_reference (gfc_symbol *sym, gfc_expr *e)
1592 {
1593 if (need_full_assumed_size || !(sym->as && sym->as->type == AS_ASSUMED_SIZE))
1594 return false;
1595
1596 /* FIXME: The comparison "e->ref->u.ar.type == AR_FULL" is wrong.
1597 What should it be? */
1598 if (e->ref && (e->ref->u.ar.end[e->ref->u.ar.as->rank - 1] == NULL)
1599 && (e->ref->u.ar.as->type == AS_ASSUMED_SIZE)
1600 && (e->ref->u.ar.type == AR_FULL))
1601 {
1602 gfc_error ("The upper bound in the last dimension must "
1603 "appear in the reference to the assumed size "
1604 "array %qs at %L", sym->name, &e->where);
1605 return true;
1606 }
1607 return false;
1608 }
1609
1610
1611 /* Look for bad assumed size array references in argument expressions
1612 of elemental and array valued intrinsic procedures. Since this is
1613 called from procedure resolution functions, it only recurses at
1614 operators. */
1615
1616 static bool
1617 resolve_assumed_size_actual (gfc_expr *e)
1618 {
1619 if (e == NULL)
1620 return false;
1621
1622 switch (e->expr_type)
1623 {
1624 case EXPR_VARIABLE:
1625 if (e->symtree && check_assumed_size_reference (e->symtree->n.sym, e))
1626 return true;
1627 break;
1628
1629 case EXPR_OP:
1630 if (resolve_assumed_size_actual (e->value.op.op1)
1631 || resolve_assumed_size_actual (e->value.op.op2))
1632 return true;
1633 break;
1634
1635 default:
1636 break;
1637 }
1638 return false;
1639 }
1640
1641
1642 /* Check a generic procedure, passed as an actual argument, to see if
1643 there is a matching specific name. If none, it is an error, and if
1644 more than one, the reference is ambiguous. */
1645 static int
1646 count_specific_procs (gfc_expr *e)
1647 {
1648 int n;
1649 gfc_interface *p;
1650 gfc_symbol *sym;
1651
1652 n = 0;
1653 sym = e->symtree->n.sym;
1654
1655 for (p = sym->generic; p; p = p->next)
1656 if (strcmp (sym->name, p->sym->name) == 0)
1657 {
1658 e->symtree = gfc_find_symtree (p->sym->ns->sym_root,
1659 sym->name);
1660 n++;
1661 }
1662
1663 if (n > 1)
1664 gfc_error ("%qs at %L is ambiguous", e->symtree->n.sym->name,
1665 &e->where);
1666
1667 if (n == 0)
1668 gfc_error ("GENERIC procedure %qs is not allowed as an actual "
1669 "argument at %L", sym->name, &e->where);
1670
1671 return n;
1672 }
1673
1674
1675 /* See if a call to sym could possibly be a not allowed RECURSION because of
1676 a missing RECURSIVE declaration. This means that either sym is the current
1677 context itself, or sym is the parent of a contained procedure calling its
1678 non-RECURSIVE containing procedure.
1679 This also works if sym is an ENTRY. */
1680
1681 static bool
1682 is_illegal_recursion (gfc_symbol* sym, gfc_namespace* context)
1683 {
1684 gfc_symbol* proc_sym;
1685 gfc_symbol* context_proc;
1686 gfc_namespace* real_context;
1687
1688 if (sym->attr.flavor == FL_PROGRAM
1689 || gfc_fl_struct (sym->attr.flavor))
1690 return false;
1691
1692 /* If we've got an ENTRY, find real procedure. */
1693 if (sym->attr.entry && sym->ns->entries)
1694 proc_sym = sym->ns->entries->sym;
1695 else
1696 proc_sym = sym;
1697
1698 /* If sym is RECURSIVE, all is well of course. */
1699 if (proc_sym->attr.recursive || flag_recursive)
1700 return false;
1701
1702 /* Find the context procedure's "real" symbol if it has entries.
1703 We look for a procedure symbol, so recurse on the parents if we don't
1704 find one (like in case of a BLOCK construct). */
1705 for (real_context = context; ; real_context = real_context->parent)
1706 {
1707 /* We should find something, eventually! */
1708 gcc_assert (real_context);
1709
1710 context_proc = (real_context->entries ? real_context->entries->sym
1711 : real_context->proc_name);
1712
1713 /* In some special cases, there may not be a proc_name, like for this
1714 invalid code:
1715 real(bad_kind()) function foo () ...
1716 when checking the call to bad_kind ().
1717 In these cases, we simply return here and assume that the
1718 call is ok. */
1719 if (!context_proc)
1720 return false;
1721
1722 if (context_proc->attr.flavor != FL_LABEL)
1723 break;
1724 }
1725
1726 /* A call from sym's body to itself is recursion, of course. */
1727 if (context_proc == proc_sym)
1728 return true;
1729
1730 /* The same is true if context is a contained procedure and sym the
1731 containing one. */
1732 if (context_proc->attr.contained)
1733 {
1734 gfc_symbol* parent_proc;
1735
1736 gcc_assert (context->parent);
1737 parent_proc = (context->parent->entries ? context->parent->entries->sym
1738 : context->parent->proc_name);
1739
1740 if (parent_proc == proc_sym)
1741 return true;
1742 }
1743
1744 return false;
1745 }
1746
1747
1748 /* Resolve an intrinsic procedure: Set its function/subroutine attribute,
1749 its typespec and formal argument list. */
1750
1751 bool
1752 gfc_resolve_intrinsic (gfc_symbol *sym, locus *loc)
1753 {
1754 gfc_intrinsic_sym* isym = NULL;
1755 const char* symstd;
1756
1757 if (sym->formal)
1758 return true;
1759
1760 /* Already resolved. */
1761 if (sym->from_intmod && sym->ts.type != BT_UNKNOWN)
1762 return true;
1763
1764 /* We already know this one is an intrinsic, so we don't call
1765 gfc_is_intrinsic for full checking but rather use gfc_find_function and
1766 gfc_find_subroutine directly to check whether it is a function or
1767 subroutine. */
1768
1769 if (sym->intmod_sym_id && sym->attr.subroutine)
1770 {
1771 gfc_isym_id id = gfc_isym_id_by_intmod_sym (sym);
1772 isym = gfc_intrinsic_subroutine_by_id (id);
1773 }
1774 else if (sym->intmod_sym_id)
1775 {
1776 gfc_isym_id id = gfc_isym_id_by_intmod_sym (sym);
1777 isym = gfc_intrinsic_function_by_id (id);
1778 }
1779 else if (!sym->attr.subroutine)
1780 isym = gfc_find_function (sym->name);
1781
1782 if (isym && !sym->attr.subroutine)
1783 {
1784 if (sym->ts.type != BT_UNKNOWN && warn_surprising
1785 && !sym->attr.implicit_type)
1786 gfc_warning (OPT_Wsurprising,
1787 "Type specified for intrinsic function %qs at %L is"
1788 " ignored", sym->name, &sym->declared_at);
1789
1790 if (!sym->attr.function &&
1791 !gfc_add_function(&sym->attr, sym->name, loc))
1792 return false;
1793
1794 sym->ts = isym->ts;
1795 }
1796 else if (isym || (isym = gfc_find_subroutine (sym->name)))
1797 {
1798 if (sym->ts.type != BT_UNKNOWN && !sym->attr.implicit_type)
1799 {
1800 gfc_error ("Intrinsic subroutine %qs at %L shall not have a type"
1801 " specifier", sym->name, &sym->declared_at);
1802 return false;
1803 }
1804
1805 if (!sym->attr.subroutine &&
1806 !gfc_add_subroutine(&sym->attr, sym->name, loc))
1807 return false;
1808 }
1809 else
1810 {
1811 gfc_error ("%qs declared INTRINSIC at %L does not exist", sym->name,
1812 &sym->declared_at);
1813 return false;
1814 }
1815
1816 gfc_copy_formal_args_intr (sym, isym, NULL);
1817
1818 sym->attr.pure = isym->pure;
1819 sym->attr.elemental = isym->elemental;
1820
1821 /* Check it is actually available in the standard settings. */
1822 if (!gfc_check_intrinsic_standard (isym, &symstd, false, sym->declared_at))
1823 {
1824 gfc_error ("The intrinsic %qs declared INTRINSIC at %L is not "
1825 "available in the current standard settings but %s. Use "
1826 "an appropriate %<-std=*%> option or enable "
1827 "%<-fall-intrinsics%> in order to use it.",
1828 sym->name, &sym->declared_at, symstd);
1829 return false;
1830 }
1831
1832 return true;
1833 }
1834
1835
1836 /* Resolve a procedure expression, like passing it to a called procedure or as
1837 RHS for a procedure pointer assignment. */
1838
1839 static bool
1840 resolve_procedure_expression (gfc_expr* expr)
1841 {
1842 gfc_symbol* sym;
1843
1844 if (expr->expr_type != EXPR_VARIABLE)
1845 return true;
1846 gcc_assert (expr->symtree);
1847
1848 sym = expr->symtree->n.sym;
1849
1850 if (sym->attr.intrinsic)
1851 gfc_resolve_intrinsic (sym, &expr->where);
1852
1853 if (sym->attr.flavor != FL_PROCEDURE
1854 || (sym->attr.function && sym->result == sym))
1855 return true;
1856
1857 /* A non-RECURSIVE procedure that is used as procedure expression within its
1858 own body is in danger of being called recursively. */
1859 if (is_illegal_recursion (sym, gfc_current_ns))
1860 gfc_warning (0, "Non-RECURSIVE procedure %qs at %L is possibly calling"
1861 " itself recursively. Declare it RECURSIVE or use"
1862 " %<-frecursive%>", sym->name, &expr->where);
1863
1864 return true;
1865 }
1866
1867
1868 /* Check that name is not a derived type. */
1869
1870 static bool
1871 is_dt_name (const char *name)
1872 {
1873 gfc_symbol *dt_list, *dt_first;
1874
1875 dt_list = dt_first = gfc_derived_types;
1876 for (; dt_list; dt_list = dt_list->dt_next)
1877 {
1878 if (strcmp(dt_list->name, name) == 0)
1879 return true;
1880 if (dt_first == dt_list->dt_next)
1881 break;
1882 }
1883 return false;
1884 }
1885
1886
1887 /* Resolve an actual argument list. Most of the time, this is just
1888 resolving the expressions in the list.
1889 The exception is that we sometimes have to decide whether arguments
1890 that look like procedure arguments are really simple variable
1891 references. */
1892
1893 static bool
1894 resolve_actual_arglist (gfc_actual_arglist *arg, procedure_type ptype,
1895 bool no_formal_args)
1896 {
1897 gfc_symbol *sym;
1898 gfc_symtree *parent_st;
1899 gfc_expr *e;
1900 gfc_component *comp;
1901 int save_need_full_assumed_size;
1902 bool return_value = false;
1903 bool actual_arg_sav = actual_arg, first_actual_arg_sav = first_actual_arg;
1904
1905 actual_arg = true;
1906 first_actual_arg = true;
1907
1908 for (; arg; arg = arg->next)
1909 {
1910 e = arg->expr;
1911 if (e == NULL)
1912 {
1913 /* Check the label is a valid branching target. */
1914 if (arg->label)
1915 {
1916 if (arg->label->defined == ST_LABEL_UNKNOWN)
1917 {
1918 gfc_error ("Label %d referenced at %L is never defined",
1919 arg->label->value, &arg->label->where);
1920 goto cleanup;
1921 }
1922 }
1923 first_actual_arg = false;
1924 continue;
1925 }
1926
1927 if (e->expr_type == EXPR_VARIABLE
1928 && e->symtree->n.sym->attr.generic
1929 && no_formal_args
1930 && count_specific_procs (e) != 1)
1931 goto cleanup;
1932
1933 if (e->ts.type != BT_PROCEDURE)
1934 {
1935 save_need_full_assumed_size = need_full_assumed_size;
1936 if (e->expr_type != EXPR_VARIABLE)
1937 need_full_assumed_size = 0;
1938 if (!gfc_resolve_expr (e))
1939 goto cleanup;
1940 need_full_assumed_size = save_need_full_assumed_size;
1941 goto argument_list;
1942 }
1943
1944 /* See if the expression node should really be a variable reference. */
1945
1946 sym = e->symtree->n.sym;
1947
1948 if (sym->attr.flavor == FL_PROCEDURE && is_dt_name (sym->name))
1949 {
1950 gfc_error ("Derived type %qs is used as an actual "
1951 "argument at %L", sym->name, &e->where);
1952 goto cleanup;
1953 }
1954
1955 if (sym->attr.flavor == FL_PROCEDURE
1956 || sym->attr.intrinsic
1957 || sym->attr.external)
1958 {
1959 int actual_ok;
1960
1961 /* If a procedure is not already determined to be something else
1962 check if it is intrinsic. */
1963 if (gfc_is_intrinsic (sym, sym->attr.subroutine, e->where))
1964 sym->attr.intrinsic = 1;
1965
1966 if (sym->attr.proc == PROC_ST_FUNCTION)
1967 {
1968 gfc_error ("Statement function %qs at %L is not allowed as an "
1969 "actual argument", sym->name, &e->where);
1970 }
1971
1972 actual_ok = gfc_intrinsic_actual_ok (sym->name,
1973 sym->attr.subroutine);
1974 if (sym->attr.intrinsic && actual_ok == 0)
1975 {
1976 gfc_error ("Intrinsic %qs at %L is not allowed as an "
1977 "actual argument", sym->name, &e->where);
1978 }
1979
1980 if (sym->attr.contained && !sym->attr.use_assoc
1981 && sym->ns->proc_name->attr.flavor != FL_MODULE)
1982 {
1983 if (!gfc_notify_std (GFC_STD_F2008, "Internal procedure %qs is"
1984 " used as actual argument at %L",
1985 sym->name, &e->where))
1986 goto cleanup;
1987 }
1988
1989 if (sym->attr.elemental && !sym->attr.intrinsic)
1990 {
1991 gfc_error ("ELEMENTAL non-INTRINSIC procedure %qs is not "
1992 "allowed as an actual argument at %L", sym->name,
1993 &e->where);
1994 }
1995
1996 /* Check if a generic interface has a specific procedure
1997 with the same name before emitting an error. */
1998 if (sym->attr.generic && count_specific_procs (e) != 1)
1999 goto cleanup;
2000
2001 /* Just in case a specific was found for the expression. */
2002 sym = e->symtree->n.sym;
2003
2004 /* If the symbol is the function that names the current (or
2005 parent) scope, then we really have a variable reference. */
2006
2007 if (gfc_is_function_return_value (sym, sym->ns))
2008 goto got_variable;
2009
2010 /* If all else fails, see if we have a specific intrinsic. */
2011 if (sym->ts.type == BT_UNKNOWN && sym->attr.intrinsic)
2012 {
2013 gfc_intrinsic_sym *isym;
2014
2015 isym = gfc_find_function (sym->name);
2016 if (isym == NULL || !isym->specific)
2017 {
2018 gfc_error ("Unable to find a specific INTRINSIC procedure "
2019 "for the reference %qs at %L", sym->name,
2020 &e->where);
2021 goto cleanup;
2022 }
2023 sym->ts = isym->ts;
2024 sym->attr.intrinsic = 1;
2025 sym->attr.function = 1;
2026 }
2027
2028 if (!gfc_resolve_expr (e))
2029 goto cleanup;
2030 goto argument_list;
2031 }
2032
2033 /* See if the name is a module procedure in a parent unit. */
2034
2035 if (was_declared (sym) || sym->ns->parent == NULL)
2036 goto got_variable;
2037
2038 if (gfc_find_sym_tree (sym->name, sym->ns->parent, 1, &parent_st))
2039 {
2040 gfc_error ("Symbol %qs at %L is ambiguous", sym->name, &e->where);
2041 goto cleanup;
2042 }
2043
2044 if (parent_st == NULL)
2045 goto got_variable;
2046
2047 sym = parent_st->n.sym;
2048 e->symtree = parent_st; /* Point to the right thing. */
2049
2050 if (sym->attr.flavor == FL_PROCEDURE
2051 || sym->attr.intrinsic
2052 || sym->attr.external)
2053 {
2054 if (!gfc_resolve_expr (e))
2055 goto cleanup;
2056 goto argument_list;
2057 }
2058
2059 got_variable:
2060 e->expr_type = EXPR_VARIABLE;
2061 e->ts = sym->ts;
2062 if ((sym->as != NULL && sym->ts.type != BT_CLASS)
2063 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
2064 && CLASS_DATA (sym)->as))
2065 {
2066 e->rank = sym->ts.type == BT_CLASS
2067 ? CLASS_DATA (sym)->as->rank : sym->as->rank;
2068 e->ref = gfc_get_ref ();
2069 e->ref->type = REF_ARRAY;
2070 e->ref->u.ar.type = AR_FULL;
2071 e->ref->u.ar.as = sym->ts.type == BT_CLASS
2072 ? CLASS_DATA (sym)->as : sym->as;
2073 }
2074
2075 /* Expressions are assigned a default ts.type of BT_PROCEDURE in
2076 primary.c (match_actual_arg). If above code determines that it
2077 is a variable instead, it needs to be resolved as it was not
2078 done at the beginning of this function. */
2079 save_need_full_assumed_size = need_full_assumed_size;
2080 if (e->expr_type != EXPR_VARIABLE)
2081 need_full_assumed_size = 0;
2082 if (!gfc_resolve_expr (e))
2083 goto cleanup;
2084 need_full_assumed_size = save_need_full_assumed_size;
2085
2086 argument_list:
2087 /* Check argument list functions %VAL, %LOC and %REF. There is
2088 nothing to do for %REF. */
2089 if (arg->name && arg->name[0] == '%')
2090 {
2091 if (strcmp ("%VAL", arg->name) == 0)
2092 {
2093 if (e->ts.type == BT_CHARACTER || e->ts.type == BT_DERIVED)
2094 {
2095 gfc_error ("By-value argument at %L is not of numeric "
2096 "type", &e->where);
2097 goto cleanup;
2098 }
2099
2100 if (e->rank)
2101 {
2102 gfc_error ("By-value argument at %L cannot be an array or "
2103 "an array section", &e->where);
2104 goto cleanup;
2105 }
2106
2107 /* Intrinsics are still PROC_UNKNOWN here. However,
2108 since same file external procedures are not resolvable
2109 in gfortran, it is a good deal easier to leave them to
2110 intrinsic.c. */
2111 if (ptype != PROC_UNKNOWN
2112 && ptype != PROC_DUMMY
2113 && ptype != PROC_EXTERNAL
2114 && ptype != PROC_MODULE)
2115 {
2116 gfc_error ("By-value argument at %L is not allowed "
2117 "in this context", &e->where);
2118 goto cleanup;
2119 }
2120 }
2121
2122 /* Statement functions have already been excluded above. */
2123 else if (strcmp ("%LOC", arg->name) == 0
2124 && e->ts.type == BT_PROCEDURE)
2125 {
2126 if (e->symtree->n.sym->attr.proc == PROC_INTERNAL)
2127 {
2128 gfc_error ("Passing internal procedure at %L by location "
2129 "not allowed", &e->where);
2130 goto cleanup;
2131 }
2132 }
2133 }
2134
2135 comp = gfc_get_proc_ptr_comp(e);
2136 if (e->expr_type == EXPR_VARIABLE
2137 && comp && comp->attr.elemental)
2138 {
2139 gfc_error ("ELEMENTAL procedure pointer component %qs is not "
2140 "allowed as an actual argument at %L", comp->name,
2141 &e->where);
2142 }
2143
2144 /* Fortran 2008, C1237. */
2145 if (e->expr_type == EXPR_VARIABLE && gfc_is_coindexed (e)
2146 && gfc_has_ultimate_pointer (e))
2147 {
2148 gfc_error ("Coindexed actual argument at %L with ultimate pointer "
2149 "component", &e->where);
2150 goto cleanup;
2151 }
2152
2153 first_actual_arg = false;
2154 }
2155
2156 return_value = true;
2157
2158 cleanup:
2159 actual_arg = actual_arg_sav;
2160 first_actual_arg = first_actual_arg_sav;
2161
2162 return return_value;
2163 }
2164
2165
2166 /* Do the checks of the actual argument list that are specific to elemental
2167 procedures. If called with c == NULL, we have a function, otherwise if
2168 expr == NULL, we have a subroutine. */
2169
2170 static bool
2171 resolve_elemental_actual (gfc_expr *expr, gfc_code *c)
2172 {
2173 gfc_actual_arglist *arg0;
2174 gfc_actual_arglist *arg;
2175 gfc_symbol *esym = NULL;
2176 gfc_intrinsic_sym *isym = NULL;
2177 gfc_expr *e = NULL;
2178 gfc_intrinsic_arg *iformal = NULL;
2179 gfc_formal_arglist *eformal = NULL;
2180 bool formal_optional = false;
2181 bool set_by_optional = false;
2182 int i;
2183 int rank = 0;
2184
2185 /* Is this an elemental procedure? */
2186 if (expr && expr->value.function.actual != NULL)
2187 {
2188 if (expr->value.function.esym != NULL
2189 && expr->value.function.esym->attr.elemental)
2190 {
2191 arg0 = expr->value.function.actual;
2192 esym = expr->value.function.esym;
2193 }
2194 else if (expr->value.function.isym != NULL
2195 && expr->value.function.isym->elemental)
2196 {
2197 arg0 = expr->value.function.actual;
2198 isym = expr->value.function.isym;
2199 }
2200 else
2201 return true;
2202 }
2203 else if (c && c->ext.actual != NULL)
2204 {
2205 arg0 = c->ext.actual;
2206
2207 if (c->resolved_sym)
2208 esym = c->resolved_sym;
2209 else
2210 esym = c->symtree->n.sym;
2211 gcc_assert (esym);
2212
2213 if (!esym->attr.elemental)
2214 return true;
2215 }
2216 else
2217 return true;
2218
2219 /* The rank of an elemental is the rank of its array argument(s). */
2220 for (arg = arg0; arg; arg = arg->next)
2221 {
2222 if (arg->expr != NULL && arg->expr->rank != 0)
2223 {
2224 rank = arg->expr->rank;
2225 if (arg->expr->expr_type == EXPR_VARIABLE
2226 && arg->expr->symtree->n.sym->attr.optional)
2227 set_by_optional = true;
2228
2229 /* Function specific; set the result rank and shape. */
2230 if (expr)
2231 {
2232 expr->rank = rank;
2233 if (!expr->shape && arg->expr->shape)
2234 {
2235 expr->shape = gfc_get_shape (rank);
2236 for (i = 0; i < rank; i++)
2237 mpz_init_set (expr->shape[i], arg->expr->shape[i]);
2238 }
2239 }
2240 break;
2241 }
2242 }
2243
2244 /* If it is an array, it shall not be supplied as an actual argument
2245 to an elemental procedure unless an array of the same rank is supplied
2246 as an actual argument corresponding to a nonoptional dummy argument of
2247 that elemental procedure(12.4.1.5). */
2248 formal_optional = false;
2249 if (isym)
2250 iformal = isym->formal;
2251 else
2252 eformal = esym->formal;
2253
2254 for (arg = arg0; arg; arg = arg->next)
2255 {
2256 if (eformal)
2257 {
2258 if (eformal->sym && eformal->sym->attr.optional)
2259 formal_optional = true;
2260 eformal = eformal->next;
2261 }
2262 else if (isym && iformal)
2263 {
2264 if (iformal->optional)
2265 formal_optional = true;
2266 iformal = iformal->next;
2267 }
2268 else if (isym)
2269 formal_optional = true;
2270
2271 if (pedantic && arg->expr != NULL
2272 && arg->expr->expr_type == EXPR_VARIABLE
2273 && arg->expr->symtree->n.sym->attr.optional
2274 && formal_optional
2275 && arg->expr->rank
2276 && (set_by_optional || arg->expr->rank != rank)
2277 && !(isym && isym->id == GFC_ISYM_CONVERSION))
2278 {
2279 gfc_warning (OPT_Wpedantic,
2280 "%qs at %L is an array and OPTIONAL; IF IT IS "
2281 "MISSING, it cannot be the actual argument of an "
2282 "ELEMENTAL procedure unless there is a non-optional "
2283 "argument with the same rank (12.4.1.5)",
2284 arg->expr->symtree->n.sym->name, &arg->expr->where);
2285 }
2286 }
2287
2288 for (arg = arg0; arg; arg = arg->next)
2289 {
2290 if (arg->expr == NULL || arg->expr->rank == 0)
2291 continue;
2292
2293 /* Being elemental, the last upper bound of an assumed size array
2294 argument must be present. */
2295 if (resolve_assumed_size_actual (arg->expr))
2296 return false;
2297
2298 /* Elemental procedure's array actual arguments must conform. */
2299 if (e != NULL)
2300 {
2301 if (!gfc_check_conformance (arg->expr, e, "elemental procedure"))
2302 return false;
2303 }
2304 else
2305 e = arg->expr;
2306 }
2307
2308 /* INTENT(OUT) is only allowed for subroutines; if any actual argument
2309 is an array, the intent inout/out variable needs to be also an array. */
2310 if (rank > 0 && esym && expr == NULL)
2311 for (eformal = esym->formal, arg = arg0; arg && eformal;
2312 arg = arg->next, eformal = eformal->next)
2313 if ((eformal->sym->attr.intent == INTENT_OUT
2314 || eformal->sym->attr.intent == INTENT_INOUT)
2315 && arg->expr && arg->expr->rank == 0)
2316 {
2317 gfc_error ("Actual argument at %L for INTENT(%s) dummy %qs of "
2318 "ELEMENTAL subroutine %qs is a scalar, but another "
2319 "actual argument is an array", &arg->expr->where,
2320 (eformal->sym->attr.intent == INTENT_OUT) ? "OUT"
2321 : "INOUT", eformal->sym->name, esym->name);
2322 return false;
2323 }
2324 return true;
2325 }
2326
2327
2328 /* This function does the checking of references to global procedures
2329 as defined in sections 18.1 and 14.1, respectively, of the Fortran
2330 77 and 95 standards. It checks for a gsymbol for the name, making
2331 one if it does not already exist. If it already exists, then the
2332 reference being resolved must correspond to the type of gsymbol.
2333 Otherwise, the new symbol is equipped with the attributes of the
2334 reference. The corresponding code that is called in creating
2335 global entities is parse.c.
2336
2337 In addition, for all but -std=legacy, the gsymbols are used to
2338 check the interfaces of external procedures from the same file.
2339 The namespace of the gsymbol is resolved and then, once this is
2340 done the interface is checked. */
2341
2342
2343 static bool
2344 not_in_recursive (gfc_symbol *sym, gfc_namespace *gsym_ns)
2345 {
2346 if (!gsym_ns->proc_name->attr.recursive)
2347 return true;
2348
2349 if (sym->ns == gsym_ns)
2350 return false;
2351
2352 if (sym->ns->parent && sym->ns->parent == gsym_ns)
2353 return false;
2354
2355 return true;
2356 }
2357
2358 static bool
2359 not_entry_self_reference (gfc_symbol *sym, gfc_namespace *gsym_ns)
2360 {
2361 if (gsym_ns->entries)
2362 {
2363 gfc_entry_list *entry = gsym_ns->entries;
2364
2365 for (; entry; entry = entry->next)
2366 {
2367 if (strcmp (sym->name, entry->sym->name) == 0)
2368 {
2369 if (strcmp (gsym_ns->proc_name->name,
2370 sym->ns->proc_name->name) == 0)
2371 return false;
2372
2373 if (sym->ns->parent
2374 && strcmp (gsym_ns->proc_name->name,
2375 sym->ns->parent->proc_name->name) == 0)
2376 return false;
2377 }
2378 }
2379 }
2380 return true;
2381 }
2382
2383
2384 /* Check for the requirement of an explicit interface. F08:12.4.2.2. */
2385
2386 bool
2387 gfc_explicit_interface_required (gfc_symbol *sym, char *errmsg, int err_len)
2388 {
2389 gfc_formal_arglist *arg = gfc_sym_get_dummy_args (sym);
2390
2391 for ( ; arg; arg = arg->next)
2392 {
2393 if (!arg->sym)
2394 continue;
2395
2396 if (arg->sym->attr.allocatable) /* (2a) */
2397 {
2398 strncpy (errmsg, _("allocatable argument"), err_len);
2399 return true;
2400 }
2401 else if (arg->sym->attr.asynchronous)
2402 {
2403 strncpy (errmsg, _("asynchronous argument"), err_len);
2404 return true;
2405 }
2406 else if (arg->sym->attr.optional)
2407 {
2408 strncpy (errmsg, _("optional argument"), err_len);
2409 return true;
2410 }
2411 else if (arg->sym->attr.pointer)
2412 {
2413 strncpy (errmsg, _("pointer argument"), err_len);
2414 return true;
2415 }
2416 else if (arg->sym->attr.target)
2417 {
2418 strncpy (errmsg, _("target argument"), err_len);
2419 return true;
2420 }
2421 else if (arg->sym->attr.value)
2422 {
2423 strncpy (errmsg, _("value argument"), err_len);
2424 return true;
2425 }
2426 else if (arg->sym->attr.volatile_)
2427 {
2428 strncpy (errmsg, _("volatile argument"), err_len);
2429 return true;
2430 }
2431 else if (arg->sym->as && arg->sym->as->type == AS_ASSUMED_SHAPE) /* (2b) */
2432 {
2433 strncpy (errmsg, _("assumed-shape argument"), err_len);
2434 return true;
2435 }
2436 else if (arg->sym->as && arg->sym->as->type == AS_ASSUMED_RANK) /* TS 29113, 6.2. */
2437 {
2438 strncpy (errmsg, _("assumed-rank argument"), err_len);
2439 return true;
2440 }
2441 else if (arg->sym->attr.codimension) /* (2c) */
2442 {
2443 strncpy (errmsg, _("coarray argument"), err_len);
2444 return true;
2445 }
2446 else if (false) /* (2d) TODO: parametrized derived type */
2447 {
2448 strncpy (errmsg, _("parametrized derived type argument"), err_len);
2449 return true;
2450 }
2451 else if (arg->sym->ts.type == BT_CLASS) /* (2e) */
2452 {
2453 strncpy (errmsg, _("polymorphic argument"), err_len);
2454 return true;
2455 }
2456 else if (arg->sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
2457 {
2458 strncpy (errmsg, _("NO_ARG_CHECK attribute"), err_len);
2459 return true;
2460 }
2461 else if (arg->sym->ts.type == BT_ASSUMED)
2462 {
2463 /* As assumed-type is unlimited polymorphic (cf. above).
2464 See also TS 29113, Note 6.1. */
2465 strncpy (errmsg, _("assumed-type argument"), err_len);
2466 return true;
2467 }
2468 }
2469
2470 if (sym->attr.function)
2471 {
2472 gfc_symbol *res = sym->result ? sym->result : sym;
2473
2474 if (res->attr.dimension) /* (3a) */
2475 {
2476 strncpy (errmsg, _("array result"), err_len);
2477 return true;
2478 }
2479 else if (res->attr.pointer || res->attr.allocatable) /* (3b) */
2480 {
2481 strncpy (errmsg, _("pointer or allocatable result"), err_len);
2482 return true;
2483 }
2484 else if (res->ts.type == BT_CHARACTER && res->ts.u.cl
2485 && res->ts.u.cl->length
2486 && res->ts.u.cl->length->expr_type != EXPR_CONSTANT) /* (3c) */
2487 {
2488 strncpy (errmsg, _("result with non-constant character length"), err_len);
2489 return true;
2490 }
2491 }
2492
2493 if (sym->attr.elemental && !sym->attr.intrinsic) /* (4) */
2494 {
2495 strncpy (errmsg, _("elemental procedure"), err_len);
2496 return true;
2497 }
2498 else if (sym->attr.is_bind_c) /* (5) */
2499 {
2500 strncpy (errmsg, _("bind(c) procedure"), err_len);
2501 return true;
2502 }
2503
2504 return false;
2505 }
2506
2507
2508 static void
2509 resolve_global_procedure (gfc_symbol *sym, locus *where,
2510 gfc_actual_arglist **actual, int sub)
2511 {
2512 gfc_gsymbol * gsym;
2513 gfc_namespace *ns;
2514 enum gfc_symbol_type type;
2515 char reason[200];
2516
2517 type = sub ? GSYM_SUBROUTINE : GSYM_FUNCTION;
2518
2519 gsym = gfc_get_gsymbol (sym->binding_label ? sym->binding_label : sym->name,
2520 sym->binding_label != NULL);
2521
2522 if ((gsym->type != GSYM_UNKNOWN && gsym->type != type))
2523 gfc_global_used (gsym, where);
2524
2525 if ((sym->attr.if_source == IFSRC_UNKNOWN
2526 || sym->attr.if_source == IFSRC_IFBODY)
2527 && gsym->type != GSYM_UNKNOWN
2528 && !gsym->binding_label
2529 && gsym->ns
2530 && gsym->ns->proc_name
2531 && not_in_recursive (sym, gsym->ns)
2532 && not_entry_self_reference (sym, gsym->ns))
2533 {
2534 gfc_symbol *def_sym;
2535 def_sym = gsym->ns->proc_name;
2536
2537 if (gsym->ns->resolved != -1)
2538 {
2539
2540 /* Resolve the gsymbol namespace if needed. */
2541 if (!gsym->ns->resolved)
2542 {
2543 gfc_symbol *old_dt_list;
2544
2545 /* Stash away derived types so that the backend_decls
2546 do not get mixed up. */
2547 old_dt_list = gfc_derived_types;
2548 gfc_derived_types = NULL;
2549
2550 gfc_resolve (gsym->ns);
2551
2552 /* Store the new derived types with the global namespace. */
2553 if (gfc_derived_types)
2554 gsym->ns->derived_types = gfc_derived_types;
2555
2556 /* Restore the derived types of this namespace. */
2557 gfc_derived_types = old_dt_list;
2558 }
2559
2560 /* Make sure that translation for the gsymbol occurs before
2561 the procedure currently being resolved. */
2562 ns = gfc_global_ns_list;
2563 for (; ns && ns != gsym->ns; ns = ns->sibling)
2564 {
2565 if (ns->sibling == gsym->ns)
2566 {
2567 ns->sibling = gsym->ns->sibling;
2568 gsym->ns->sibling = gfc_global_ns_list;
2569 gfc_global_ns_list = gsym->ns;
2570 break;
2571 }
2572 }
2573
2574 /* This can happen if a binding name has been specified. */
2575 if (gsym->binding_label && gsym->sym_name != def_sym->name)
2576 gfc_find_symbol (gsym->sym_name, gsym->ns, 0, &def_sym);
2577
2578 if (def_sym->attr.entry_master || def_sym->attr.entry)
2579 {
2580 gfc_entry_list *entry;
2581 for (entry = gsym->ns->entries; entry; entry = entry->next)
2582 if (strcmp (entry->sym->name, sym->name) == 0)
2583 {
2584 def_sym = entry->sym;
2585 break;
2586 }
2587 }
2588 }
2589
2590 if (sym->attr.function && !gfc_compare_types (&sym->ts, &def_sym->ts))
2591 {
2592 gfc_error ("Return type mismatch of function %qs at %L (%s/%s)",
2593 sym->name, &sym->declared_at, gfc_typename (&sym->ts),
2594 gfc_typename (&def_sym->ts));
2595 goto done;
2596 }
2597
2598 if (sym->attr.if_source == IFSRC_UNKNOWN
2599 && gfc_explicit_interface_required (def_sym, reason, sizeof(reason)))
2600 {
2601 gfc_error ("Explicit interface required for %qs at %L: %s",
2602 sym->name, &sym->declared_at, reason);
2603 goto done;
2604 }
2605
2606 if (!pedantic && (gfc_option.allow_std & GFC_STD_GNU))
2607 /* Turn erros into warnings with -std=gnu and -std=legacy. */
2608 gfc_errors_to_warnings (true);
2609
2610 if (!gfc_compare_interfaces (sym, def_sym, sym->name, 0, 1,
2611 reason, sizeof(reason), NULL, NULL))
2612 {
2613 gfc_error_opt (OPT_Wargument_mismatch,
2614 "Interface mismatch in global procedure %qs at %L:"
2615 " %s", sym->name, &sym->declared_at, reason);
2616 goto done;
2617 }
2618
2619 if (!pedantic
2620 || ((gfc_option.warn_std & GFC_STD_LEGACY)
2621 && !(gfc_option.warn_std & GFC_STD_GNU)))
2622 gfc_errors_to_warnings (true);
2623
2624 if (sym->attr.if_source != IFSRC_IFBODY)
2625 gfc_procedure_use (def_sym, actual, where);
2626 }
2627
2628 done:
2629 gfc_errors_to_warnings (false);
2630
2631 if (gsym->type == GSYM_UNKNOWN)
2632 {
2633 gsym->type = type;
2634 gsym->where = *where;
2635 }
2636
2637 gsym->used = 1;
2638 }
2639
2640
2641 /************* Function resolution *************/
2642
2643 /* Resolve a function call known to be generic.
2644 Section 14.1.2.4.1. */
2645
2646 static match
2647 resolve_generic_f0 (gfc_expr *expr, gfc_symbol *sym)
2648 {
2649 gfc_symbol *s;
2650
2651 if (sym->attr.generic)
2652 {
2653 s = gfc_search_interface (sym->generic, 0, &expr->value.function.actual);
2654 if (s != NULL)
2655 {
2656 expr->value.function.name = s->name;
2657 expr->value.function.esym = s;
2658
2659 if (s->ts.type != BT_UNKNOWN)
2660 expr->ts = s->ts;
2661 else if (s->result != NULL && s->result->ts.type != BT_UNKNOWN)
2662 expr->ts = s->result->ts;
2663
2664 if (s->as != NULL)
2665 expr->rank = s->as->rank;
2666 else if (s->result != NULL && s->result->as != NULL)
2667 expr->rank = s->result->as->rank;
2668
2669 gfc_set_sym_referenced (expr->value.function.esym);
2670
2671 return MATCH_YES;
2672 }
2673
2674 /* TODO: Need to search for elemental references in generic
2675 interface. */
2676 }
2677
2678 if (sym->attr.intrinsic)
2679 return gfc_intrinsic_func_interface (expr, 0);
2680
2681 return MATCH_NO;
2682 }
2683
2684
2685 static bool
2686 resolve_generic_f (gfc_expr *expr)
2687 {
2688 gfc_symbol *sym;
2689 match m;
2690 gfc_interface *intr = NULL;
2691
2692 sym = expr->symtree->n.sym;
2693
2694 for (;;)
2695 {
2696 m = resolve_generic_f0 (expr, sym);
2697 if (m == MATCH_YES)
2698 return true;
2699 else if (m == MATCH_ERROR)
2700 return false;
2701
2702 generic:
2703 if (!intr)
2704 for (intr = sym->generic; intr; intr = intr->next)
2705 if (gfc_fl_struct (intr->sym->attr.flavor))
2706 break;
2707
2708 if (sym->ns->parent == NULL)
2709 break;
2710 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
2711
2712 if (sym == NULL)
2713 break;
2714 if (!generic_sym (sym))
2715 goto generic;
2716 }
2717
2718 /* Last ditch attempt. See if the reference is to an intrinsic
2719 that possesses a matching interface. 14.1.2.4 */
2720 if (sym && !intr && !gfc_is_intrinsic (sym, 0, expr->where))
2721 {
2722 if (gfc_init_expr_flag)
2723 gfc_error ("Function %qs in initialization expression at %L "
2724 "must be an intrinsic function",
2725 expr->symtree->n.sym->name, &expr->where);
2726 else
2727 gfc_error ("There is no specific function for the generic %qs "
2728 "at %L", expr->symtree->n.sym->name, &expr->where);
2729 return false;
2730 }
2731
2732 if (intr)
2733 {
2734 if (!gfc_convert_to_structure_constructor (expr, intr->sym, NULL,
2735 NULL, false))
2736 return false;
2737 if (!gfc_use_derived (expr->ts.u.derived))
2738 return false;
2739 return resolve_structure_cons (expr, 0);
2740 }
2741
2742 m = gfc_intrinsic_func_interface (expr, 0);
2743 if (m == MATCH_YES)
2744 return true;
2745
2746 if (m == MATCH_NO)
2747 gfc_error ("Generic function %qs at %L is not consistent with a "
2748 "specific intrinsic interface", expr->symtree->n.sym->name,
2749 &expr->where);
2750
2751 return false;
2752 }
2753
2754
2755 /* Resolve a function call known to be specific. */
2756
2757 static match
2758 resolve_specific_f0 (gfc_symbol *sym, gfc_expr *expr)
2759 {
2760 match m;
2761
2762 if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
2763 {
2764 if (sym->attr.dummy)
2765 {
2766 sym->attr.proc = PROC_DUMMY;
2767 goto found;
2768 }
2769
2770 sym->attr.proc = PROC_EXTERNAL;
2771 goto found;
2772 }
2773
2774 if (sym->attr.proc == PROC_MODULE
2775 || sym->attr.proc == PROC_ST_FUNCTION
2776 || sym->attr.proc == PROC_INTERNAL)
2777 goto found;
2778
2779 if (sym->attr.intrinsic)
2780 {
2781 m = gfc_intrinsic_func_interface (expr, 1);
2782 if (m == MATCH_YES)
2783 return MATCH_YES;
2784 if (m == MATCH_NO)
2785 gfc_error ("Function %qs at %L is INTRINSIC but is not compatible "
2786 "with an intrinsic", sym->name, &expr->where);
2787
2788 return MATCH_ERROR;
2789 }
2790
2791 return MATCH_NO;
2792
2793 found:
2794 gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
2795
2796 if (sym->result)
2797 expr->ts = sym->result->ts;
2798 else
2799 expr->ts = sym->ts;
2800 expr->value.function.name = sym->name;
2801 expr->value.function.esym = sym;
2802 /* Prevent crash when sym->ts.u.derived->components is not set due to previous
2803 error(s). */
2804 if (sym->ts.type == BT_CLASS && !CLASS_DATA (sym))
2805 return MATCH_ERROR;
2806 if (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as)
2807 expr->rank = CLASS_DATA (sym)->as->rank;
2808 else if (sym->as != NULL)
2809 expr->rank = sym->as->rank;
2810
2811 return MATCH_YES;
2812 }
2813
2814
2815 static bool
2816 resolve_specific_f (gfc_expr *expr)
2817 {
2818 gfc_symbol *sym;
2819 match m;
2820
2821 sym = expr->symtree->n.sym;
2822
2823 for (;;)
2824 {
2825 m = resolve_specific_f0 (sym, expr);
2826 if (m == MATCH_YES)
2827 return true;
2828 if (m == MATCH_ERROR)
2829 return false;
2830
2831 if (sym->ns->parent == NULL)
2832 break;
2833
2834 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
2835
2836 if (sym == NULL)
2837 break;
2838 }
2839
2840 gfc_error ("Unable to resolve the specific function %qs at %L",
2841 expr->symtree->n.sym->name, &expr->where);
2842
2843 return true;
2844 }
2845
2846 /* Recursively append candidate SYM to CANDIDATES. Store the number of
2847 candidates in CANDIDATES_LEN. */
2848
2849 static void
2850 lookup_function_fuzzy_find_candidates (gfc_symtree *sym,
2851 char **&candidates,
2852 size_t &candidates_len)
2853 {
2854 gfc_symtree *p;
2855
2856 if (sym == NULL)
2857 return;
2858 if ((sym->n.sym->ts.type != BT_UNKNOWN || sym->n.sym->attr.external)
2859 && sym->n.sym->attr.flavor == FL_PROCEDURE)
2860 vec_push (candidates, candidates_len, sym->name);
2861
2862 p = sym->left;
2863 if (p)
2864 lookup_function_fuzzy_find_candidates (p, candidates, candidates_len);
2865
2866 p = sym->right;
2867 if (p)
2868 lookup_function_fuzzy_find_candidates (p, candidates, candidates_len);
2869 }
2870
2871
2872 /* Lookup function FN fuzzily, taking names in SYMROOT into account. */
2873
2874 const char*
2875 gfc_lookup_function_fuzzy (const char *fn, gfc_symtree *symroot)
2876 {
2877 char **candidates = NULL;
2878 size_t candidates_len = 0;
2879 lookup_function_fuzzy_find_candidates (symroot, candidates, candidates_len);
2880 return gfc_closest_fuzzy_match (fn, candidates);
2881 }
2882
2883
2884 /* Resolve a procedure call not known to be generic nor specific. */
2885
2886 static bool
2887 resolve_unknown_f (gfc_expr *expr)
2888 {
2889 gfc_symbol *sym;
2890 gfc_typespec *ts;
2891
2892 sym = expr->symtree->n.sym;
2893
2894 if (sym->attr.dummy)
2895 {
2896 sym->attr.proc = PROC_DUMMY;
2897 expr->value.function.name = sym->name;
2898 goto set_type;
2899 }
2900
2901 /* See if we have an intrinsic function reference. */
2902
2903 if (gfc_is_intrinsic (sym, 0, expr->where))
2904 {
2905 if (gfc_intrinsic_func_interface (expr, 1) == MATCH_YES)
2906 return true;
2907 return false;
2908 }
2909
2910 /* The reference is to an external name. */
2911
2912 sym->attr.proc = PROC_EXTERNAL;
2913 expr->value.function.name = sym->name;
2914 expr->value.function.esym = expr->symtree->n.sym;
2915
2916 if (sym->as != NULL)
2917 expr->rank = sym->as->rank;
2918
2919 /* Type of the expression is either the type of the symbol or the
2920 default type of the symbol. */
2921
2922 set_type:
2923 gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
2924
2925 if (sym->ts.type != BT_UNKNOWN)
2926 expr->ts = sym->ts;
2927 else
2928 {
2929 ts = gfc_get_default_type (sym->name, sym->ns);
2930
2931 if (ts->type == BT_UNKNOWN)
2932 {
2933 const char *guessed
2934 = gfc_lookup_function_fuzzy (sym->name, sym->ns->sym_root);
2935 if (guessed)
2936 gfc_error ("Function %qs at %L has no IMPLICIT type"
2937 "; did you mean %qs?",
2938 sym->name, &expr->where, guessed);
2939 else
2940 gfc_error ("Function %qs at %L has no IMPLICIT type",
2941 sym->name, &expr->where);
2942 return false;
2943 }
2944 else
2945 expr->ts = *ts;
2946 }
2947
2948 return true;
2949 }
2950
2951
2952 /* Return true, if the symbol is an external procedure. */
2953 static bool
2954 is_external_proc (gfc_symbol *sym)
2955 {
2956 if (!sym->attr.dummy && !sym->attr.contained
2957 && !gfc_is_intrinsic (sym, sym->attr.subroutine, sym->declared_at)
2958 && sym->attr.proc != PROC_ST_FUNCTION
2959 && !sym->attr.proc_pointer
2960 && !sym->attr.use_assoc
2961 && sym->name)
2962 return true;
2963
2964 return false;
2965 }
2966
2967
2968 /* Figure out if a function reference is pure or not. Also set the name
2969 of the function for a potential error message. Return nonzero if the
2970 function is PURE, zero if not. */
2971 static int
2972 pure_stmt_function (gfc_expr *, gfc_symbol *);
2973
2974 int
2975 gfc_pure_function (gfc_expr *e, const char **name)
2976 {
2977 int pure;
2978 gfc_component *comp;
2979
2980 *name = NULL;
2981
2982 if (e->symtree != NULL
2983 && e->symtree->n.sym != NULL
2984 && e->symtree->n.sym->attr.proc == PROC_ST_FUNCTION)
2985 return pure_stmt_function (e, e->symtree->n.sym);
2986
2987 comp = gfc_get_proc_ptr_comp (e);
2988 if (comp)
2989 {
2990 pure = gfc_pure (comp->ts.interface);
2991 *name = comp->name;
2992 }
2993 else if (e->value.function.esym)
2994 {
2995 pure = gfc_pure (e->value.function.esym);
2996 *name = e->value.function.esym->name;
2997 }
2998 else if (e->value.function.isym)
2999 {
3000 pure = e->value.function.isym->pure
3001 || e->value.function.isym->elemental;
3002 *name = e->value.function.isym->name;
3003 }
3004 else
3005 {
3006 /* Implicit functions are not pure. */
3007 pure = 0;
3008 *name = e->value.function.name;
3009 }
3010
3011 return pure;
3012 }
3013
3014
3015 /* Check if the expression is a reference to an implicitly pure function. */
3016
3017 int
3018 gfc_implicit_pure_function (gfc_expr *e)
3019 {
3020 gfc_component *comp = gfc_get_proc_ptr_comp (e);
3021 if (comp)
3022 return gfc_implicit_pure (comp->ts.interface);
3023 else if (e->value.function.esym)
3024 return gfc_implicit_pure (e->value.function.esym);
3025 else
3026 return 0;
3027 }
3028
3029
3030 static bool
3031 impure_stmt_fcn (gfc_expr *e, gfc_symbol *sym,
3032 int *f ATTRIBUTE_UNUSED)
3033 {
3034 const char *name;
3035
3036 /* Don't bother recursing into other statement functions
3037 since they will be checked individually for purity. */
3038 if (e->expr_type != EXPR_FUNCTION
3039 || !e->symtree
3040 || e->symtree->n.sym == sym
3041 || e->symtree->n.sym->attr.proc == PROC_ST_FUNCTION)
3042 return false;
3043
3044 return gfc_pure_function (e, &name) ? false : true;
3045 }
3046
3047
3048 static int
3049 pure_stmt_function (gfc_expr *e, gfc_symbol *sym)
3050 {
3051 return gfc_traverse_expr (e, sym, impure_stmt_fcn, 0) ? 0 : 1;
3052 }
3053
3054
3055 /* Check if an impure function is allowed in the current context. */
3056
3057 static bool check_pure_function (gfc_expr *e)
3058 {
3059 const char *name = NULL;
3060 if (!gfc_pure_function (e, &name) && name)
3061 {
3062 if (forall_flag)
3063 {
3064 gfc_error ("Reference to impure function %qs at %L inside a "
3065 "FORALL %s", name, &e->where,
3066 forall_flag == 2 ? "mask" : "block");
3067 return false;
3068 }
3069 else if (gfc_do_concurrent_flag)
3070 {
3071 gfc_error ("Reference to impure function %qs at %L inside a "
3072 "DO CONCURRENT %s", name, &e->where,
3073 gfc_do_concurrent_flag == 2 ? "mask" : "block");
3074 return false;
3075 }
3076 else if (gfc_pure (NULL))
3077 {
3078 gfc_error ("Reference to impure function %qs at %L "
3079 "within a PURE procedure", name, &e->where);
3080 return false;
3081 }
3082 if (!gfc_implicit_pure_function (e))
3083 gfc_unset_implicit_pure (NULL);
3084 }
3085 return true;
3086 }
3087
3088
3089 /* Update current procedure's array_outer_dependency flag, considering
3090 a call to procedure SYM. */
3091
3092 static void
3093 update_current_proc_array_outer_dependency (gfc_symbol *sym)
3094 {
3095 /* Check to see if this is a sibling function that has not yet
3096 been resolved. */
3097 gfc_namespace *sibling = gfc_current_ns->sibling;
3098 for (; sibling; sibling = sibling->sibling)
3099 {
3100 if (sibling->proc_name == sym)
3101 {
3102 gfc_resolve (sibling);
3103 break;
3104 }
3105 }
3106
3107 /* If SYM has references to outer arrays, so has the procedure calling
3108 SYM. If SYM is a procedure pointer, we can assume the worst. */
3109 if ((sym->attr.array_outer_dependency || sym->attr.proc_pointer)
3110 && gfc_current_ns->proc_name)
3111 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
3112 }
3113
3114
3115 /* Resolve a function call, which means resolving the arguments, then figuring
3116 out which entity the name refers to. */
3117
3118 static bool
3119 resolve_function (gfc_expr *expr)
3120 {
3121 gfc_actual_arglist *arg;
3122 gfc_symbol *sym;
3123 bool t;
3124 int temp;
3125 procedure_type p = PROC_INTRINSIC;
3126 bool no_formal_args;
3127
3128 sym = NULL;
3129 if (expr->symtree)
3130 sym = expr->symtree->n.sym;
3131
3132 /* If this is a procedure pointer component, it has already been resolved. */
3133 if (gfc_is_proc_ptr_comp (expr))
3134 return true;
3135
3136 /* Avoid re-resolving the arguments of caf_get, which can lead to inserting
3137 another caf_get. */
3138 if (sym && sym->attr.intrinsic
3139 && (sym->intmod_sym_id == GFC_ISYM_CAF_GET
3140 || sym->intmod_sym_id == GFC_ISYM_CAF_SEND))
3141 return true;
3142
3143 if (sym && sym->attr.intrinsic
3144 && !gfc_resolve_intrinsic (sym, &expr->where))
3145 return false;
3146
3147 if (sym && (sym->attr.flavor == FL_VARIABLE || sym->attr.subroutine))
3148 {
3149 gfc_error ("%qs at %L is not a function", sym->name, &expr->where);
3150 return false;
3151 }
3152
3153 /* If this is a deferred TBP with an abstract interface (which may
3154 of course be referenced), expr->value.function.esym will be set. */
3155 if (sym && sym->attr.abstract && !expr->value.function.esym)
3156 {
3157 gfc_error ("ABSTRACT INTERFACE %qs must not be referenced at %L",
3158 sym->name, &expr->where);
3159 return false;
3160 }
3161
3162 /* If this is a deferred TBP with an abstract interface, its result
3163 cannot be an assumed length character (F2003: C418). */
3164 if (sym && sym->attr.abstract && sym->attr.function
3165 && sym->result->ts.u.cl
3166 && sym->result->ts.u.cl->length == NULL
3167 && !sym->result->ts.deferred)
3168 {
3169 gfc_error ("ABSTRACT INTERFACE %qs at %L must not have an assumed "
3170 "character length result (F2008: C418)", sym->name,
3171 &sym->declared_at);
3172 return false;
3173 }
3174
3175 /* Switch off assumed size checking and do this again for certain kinds
3176 of procedure, once the procedure itself is resolved. */
3177 need_full_assumed_size++;
3178
3179 if (expr->symtree && expr->symtree->n.sym)
3180 p = expr->symtree->n.sym->attr.proc;
3181
3182 if (expr->value.function.isym && expr->value.function.isym->inquiry)
3183 inquiry_argument = true;
3184 no_formal_args = sym && is_external_proc (sym)
3185 && gfc_sym_get_dummy_args (sym) == NULL;
3186
3187 if (!resolve_actual_arglist (expr->value.function.actual,
3188 p, no_formal_args))
3189 {
3190 inquiry_argument = false;
3191 return false;
3192 }
3193
3194 inquiry_argument = false;
3195
3196 /* Resume assumed_size checking. */
3197 need_full_assumed_size--;
3198
3199 /* If the procedure is external, check for usage. */
3200 if (sym && is_external_proc (sym))
3201 resolve_global_procedure (sym, &expr->where,
3202 &expr->value.function.actual, 0);
3203
3204 if (sym && sym->ts.type == BT_CHARACTER
3205 && sym->ts.u.cl
3206 && sym->ts.u.cl->length == NULL
3207 && !sym->attr.dummy
3208 && !sym->ts.deferred
3209 && expr->value.function.esym == NULL
3210 && !sym->attr.contained)
3211 {
3212 /* Internal procedures are taken care of in resolve_contained_fntype. */
3213 gfc_error ("Function %qs is declared CHARACTER(*) and cannot "
3214 "be used at %L since it is not a dummy argument",
3215 sym->name, &expr->where);
3216 return false;
3217 }
3218
3219 /* See if function is already resolved. */
3220
3221 if (expr->value.function.name != NULL
3222 || expr->value.function.isym != NULL)
3223 {
3224 if (expr->ts.type == BT_UNKNOWN)
3225 expr->ts = sym->ts;
3226 t = true;
3227 }
3228 else
3229 {
3230 /* Apply the rules of section 14.1.2. */
3231
3232 switch (procedure_kind (sym))
3233 {
3234 case PTYPE_GENERIC:
3235 t = resolve_generic_f (expr);
3236 break;
3237
3238 case PTYPE_SPECIFIC:
3239 t = resolve_specific_f (expr);
3240 break;
3241
3242 case PTYPE_UNKNOWN:
3243 t = resolve_unknown_f (expr);
3244 break;
3245
3246 default:
3247 gfc_internal_error ("resolve_function(): bad function type");
3248 }
3249 }
3250
3251 /* If the expression is still a function (it might have simplified),
3252 then we check to see if we are calling an elemental function. */
3253
3254 if (expr->expr_type != EXPR_FUNCTION)
3255 return t;
3256
3257 temp = need_full_assumed_size;
3258 need_full_assumed_size = 0;
3259
3260 if (!resolve_elemental_actual (expr, NULL))
3261 return false;
3262
3263 if (omp_workshare_flag
3264 && expr->value.function.esym
3265 && ! gfc_elemental (expr->value.function.esym))
3266 {
3267 gfc_error ("User defined non-ELEMENTAL function %qs at %L not allowed "
3268 "in WORKSHARE construct", expr->value.function.esym->name,
3269 &expr->where);
3270 t = false;
3271 }
3272
3273 #define GENERIC_ID expr->value.function.isym->id
3274 else if (expr->value.function.actual != NULL
3275 && expr->value.function.isym != NULL
3276 && GENERIC_ID != GFC_ISYM_LBOUND
3277 && GENERIC_ID != GFC_ISYM_LCOBOUND
3278 && GENERIC_ID != GFC_ISYM_UCOBOUND
3279 && GENERIC_ID != GFC_ISYM_LEN
3280 && GENERIC_ID != GFC_ISYM_LOC
3281 && GENERIC_ID != GFC_ISYM_C_LOC
3282 && GENERIC_ID != GFC_ISYM_PRESENT)
3283 {
3284 /* Array intrinsics must also have the last upper bound of an
3285 assumed size array argument. UBOUND and SIZE have to be
3286 excluded from the check if the second argument is anything
3287 than a constant. */
3288
3289 for (arg = expr->value.function.actual; arg; arg = arg->next)
3290 {
3291 if ((GENERIC_ID == GFC_ISYM_UBOUND || GENERIC_ID == GFC_ISYM_SIZE)
3292 && arg == expr->value.function.actual
3293 && arg->next != NULL && arg->next->expr)
3294 {
3295 if (arg->next->expr->expr_type != EXPR_CONSTANT)
3296 break;
3297
3298 if (arg->next->name && strcmp (arg->next->name, "kind") == 0)
3299 break;
3300
3301 if ((int)mpz_get_si (arg->next->expr->value.integer)
3302 < arg->expr->rank)
3303 break;
3304 }
3305
3306 if (arg->expr != NULL
3307 && arg->expr->rank > 0
3308 && resolve_assumed_size_actual (arg->expr))
3309 return false;
3310 }
3311 }
3312 #undef GENERIC_ID
3313
3314 need_full_assumed_size = temp;
3315
3316 if (!check_pure_function(expr))
3317 t = false;
3318
3319 /* Functions without the RECURSIVE attribution are not allowed to
3320 * call themselves. */
3321 if (expr->value.function.esym && !expr->value.function.esym->attr.recursive)
3322 {
3323 gfc_symbol *esym;
3324 esym = expr->value.function.esym;
3325
3326 if (is_illegal_recursion (esym, gfc_current_ns))
3327 {
3328 if (esym->attr.entry && esym->ns->entries)
3329 gfc_error ("ENTRY %qs at %L cannot be called recursively, as"
3330 " function %qs is not RECURSIVE",
3331 esym->name, &expr->where, esym->ns->entries->sym->name);
3332 else
3333 gfc_error ("Function %qs at %L cannot be called recursively, as it"
3334 " is not RECURSIVE", esym->name, &expr->where);
3335
3336 t = false;
3337 }
3338 }
3339
3340 /* Character lengths of use associated functions may contains references to
3341 symbols not referenced from the current program unit otherwise. Make sure
3342 those symbols are marked as referenced. */
3343
3344 if (expr->ts.type == BT_CHARACTER && expr->value.function.esym
3345 && expr->value.function.esym->attr.use_assoc)
3346 {
3347 gfc_expr_set_symbols_referenced (expr->ts.u.cl->length);
3348 }
3349
3350 /* Make sure that the expression has a typespec that works. */
3351 if (expr->ts.type == BT_UNKNOWN)
3352 {
3353 if (expr->symtree->n.sym->result
3354 && expr->symtree->n.sym->result->ts.type != BT_UNKNOWN
3355 && !expr->symtree->n.sym->result->attr.proc_pointer)
3356 expr->ts = expr->symtree->n.sym->result->ts;
3357 }
3358
3359 if (!expr->ref && !expr->value.function.isym)
3360 {
3361 if (expr->value.function.esym)
3362 update_current_proc_array_outer_dependency (expr->value.function.esym);
3363 else
3364 update_current_proc_array_outer_dependency (sym);
3365 }
3366 else if (expr->ref)
3367 /* typebound procedure: Assume the worst. */
3368 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
3369
3370 return t;
3371 }
3372
3373
3374 /************* Subroutine resolution *************/
3375
3376 static bool
3377 pure_subroutine (gfc_symbol *sym, const char *name, locus *loc)
3378 {
3379 if (gfc_pure (sym))
3380 return true;
3381
3382 if (forall_flag)
3383 {
3384 gfc_error ("Subroutine call to %qs in FORALL block at %L is not PURE",
3385 name, loc);
3386 return false;
3387 }
3388 else if (gfc_do_concurrent_flag)
3389 {
3390 gfc_error ("Subroutine call to %qs in DO CONCURRENT block at %L is not "
3391 "PURE", name, loc);
3392 return false;
3393 }
3394 else if (gfc_pure (NULL))
3395 {
3396 gfc_error ("Subroutine call to %qs at %L is not PURE", name, loc);
3397 return false;
3398 }
3399
3400 gfc_unset_implicit_pure (NULL);
3401 return true;
3402 }
3403
3404
3405 static match
3406 resolve_generic_s0 (gfc_code *c, gfc_symbol *sym)
3407 {
3408 gfc_symbol *s;
3409
3410 if (sym->attr.generic)
3411 {
3412 s = gfc_search_interface (sym->generic, 1, &c->ext.actual);
3413 if (s != NULL)
3414 {
3415 c->resolved_sym = s;
3416 if (!pure_subroutine (s, s->name, &c->loc))
3417 return MATCH_ERROR;
3418 return MATCH_YES;
3419 }
3420
3421 /* TODO: Need to search for elemental references in generic interface. */
3422 }
3423
3424 if (sym->attr.intrinsic)
3425 return gfc_intrinsic_sub_interface (c, 0);
3426
3427 return MATCH_NO;
3428 }
3429
3430
3431 static bool
3432 resolve_generic_s (gfc_code *c)
3433 {
3434 gfc_symbol *sym;
3435 match m;
3436
3437 sym = c->symtree->n.sym;
3438
3439 for (;;)
3440 {
3441 m = resolve_generic_s0 (c, sym);
3442 if (m == MATCH_YES)
3443 return true;
3444 else if (m == MATCH_ERROR)
3445 return false;
3446
3447 generic:
3448 if (sym->ns->parent == NULL)
3449 break;
3450 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
3451
3452 if (sym == NULL)
3453 break;
3454 if (!generic_sym (sym))
3455 goto generic;
3456 }
3457
3458 /* Last ditch attempt. See if the reference is to an intrinsic
3459 that possesses a matching interface. 14.1.2.4 */
3460 sym = c->symtree->n.sym;
3461
3462 if (!gfc_is_intrinsic (sym, 1, c->loc))
3463 {
3464 gfc_error ("There is no specific subroutine for the generic %qs at %L",
3465 sym->name, &c->loc);
3466 return false;
3467 }
3468
3469 m = gfc_intrinsic_sub_interface (c, 0);
3470 if (m == MATCH_YES)
3471 return true;
3472 if (m == MATCH_NO)
3473 gfc_error ("Generic subroutine %qs at %L is not consistent with an "
3474 "intrinsic subroutine interface", sym->name, &c->loc);
3475
3476 return false;
3477 }
3478
3479
3480 /* Resolve a subroutine call known to be specific. */
3481
3482 static match
3483 resolve_specific_s0 (gfc_code *c, gfc_symbol *sym)
3484 {
3485 match m;
3486
3487 if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
3488 {
3489 if (sym->attr.dummy)
3490 {
3491 sym->attr.proc = PROC_DUMMY;
3492 goto found;
3493 }
3494
3495 sym->attr.proc = PROC_EXTERNAL;
3496 goto found;
3497 }
3498
3499 if (sym->attr.proc == PROC_MODULE || sym->attr.proc == PROC_INTERNAL)
3500 goto found;
3501
3502 if (sym->attr.intrinsic)
3503 {
3504 m = gfc_intrinsic_sub_interface (c, 1);
3505 if (m == MATCH_YES)
3506 return MATCH_YES;
3507 if (m == MATCH_NO)
3508 gfc_error ("Subroutine %qs at %L is INTRINSIC but is not compatible "
3509 "with an intrinsic", sym->name, &c->loc);
3510
3511 return MATCH_ERROR;
3512 }
3513
3514 return MATCH_NO;
3515
3516 found:
3517 gfc_procedure_use (sym, &c->ext.actual, &c->loc);
3518
3519 c->resolved_sym = sym;
3520 if (!pure_subroutine (sym, sym->name, &c->loc))
3521 return MATCH_ERROR;
3522
3523 return MATCH_YES;
3524 }
3525
3526
3527 static bool
3528 resolve_specific_s (gfc_code *c)
3529 {
3530 gfc_symbol *sym;
3531 match m;
3532
3533 sym = c->symtree->n.sym;
3534
3535 for (;;)
3536 {
3537 m = resolve_specific_s0 (c, sym);
3538 if (m == MATCH_YES)
3539 return true;
3540 if (m == MATCH_ERROR)
3541 return false;
3542
3543 if (sym->ns->parent == NULL)
3544 break;
3545
3546 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
3547
3548 if (sym == NULL)
3549 break;
3550 }
3551
3552 sym = c->symtree->n.sym;
3553 gfc_error ("Unable to resolve the specific subroutine %qs at %L",
3554 sym->name, &c->loc);
3555
3556 return false;
3557 }
3558
3559
3560 /* Resolve a subroutine call not known to be generic nor specific. */
3561
3562 static bool
3563 resolve_unknown_s (gfc_code *c)
3564 {
3565 gfc_symbol *sym;
3566
3567 sym = c->symtree->n.sym;
3568
3569 if (sym->attr.dummy)
3570 {
3571 sym->attr.proc = PROC_DUMMY;
3572 goto found;
3573 }
3574
3575 /* See if we have an intrinsic function reference. */
3576
3577 if (gfc_is_intrinsic (sym, 1, c->loc))
3578 {
3579 if (gfc_intrinsic_sub_interface (c, 1) == MATCH_YES)
3580 return true;
3581 return false;
3582 }
3583
3584 /* The reference is to an external name. */
3585
3586 found:
3587 gfc_procedure_use (sym, &c->ext.actual, &c->loc);
3588
3589 c->resolved_sym = sym;
3590
3591 return pure_subroutine (sym, sym->name, &c->loc);
3592 }
3593
3594
3595 /* Resolve a subroutine call. Although it was tempting to use the same code
3596 for functions, subroutines and functions are stored differently and this
3597 makes things awkward. */
3598
3599 static bool
3600 resolve_call (gfc_code *c)
3601 {
3602 bool t;
3603 procedure_type ptype = PROC_INTRINSIC;
3604 gfc_symbol *csym, *sym;
3605 bool no_formal_args;
3606
3607 csym = c->symtree ? c->symtree->n.sym : NULL;
3608
3609 if (csym && csym->ts.type != BT_UNKNOWN)
3610 {
3611 gfc_error ("%qs at %L has a type, which is not consistent with "
3612 "the CALL at %L", csym->name, &csym->declared_at, &c->loc);
3613 return false;
3614 }
3615
3616 if (csym && gfc_current_ns->parent && csym->ns != gfc_current_ns)
3617 {
3618 gfc_symtree *st;
3619 gfc_find_sym_tree (c->symtree->name, gfc_current_ns, 1, &st);
3620 sym = st ? st->n.sym : NULL;
3621 if (sym && csym != sym
3622 && sym->ns == gfc_current_ns
3623 && sym->attr.flavor == FL_PROCEDURE
3624 && sym->attr.contained)
3625 {
3626 sym->refs++;
3627 if (csym->attr.generic)
3628 c->symtree->n.sym = sym;
3629 else
3630 c->symtree = st;
3631 csym = c->symtree->n.sym;
3632 }
3633 }
3634
3635 /* If this ia a deferred TBP, c->expr1 will be set. */
3636 if (!c->expr1 && csym)
3637 {
3638 if (csym->attr.abstract)
3639 {
3640 gfc_error ("ABSTRACT INTERFACE %qs must not be referenced at %L",
3641 csym->name, &c->loc);
3642 return false;
3643 }
3644
3645 /* Subroutines without the RECURSIVE attribution are not allowed to
3646 call themselves. */
3647 if (is_illegal_recursion (csym, gfc_current_ns))
3648 {
3649 if (csym->attr.entry && csym->ns->entries)
3650 gfc_error ("ENTRY %qs at %L cannot be called recursively, "
3651 "as subroutine %qs is not RECURSIVE",
3652 csym->name, &c->loc, csym->ns->entries->sym->name);
3653 else
3654 gfc_error ("SUBROUTINE %qs at %L cannot be called recursively, "
3655 "as it is not RECURSIVE", csym->name, &c->loc);
3656
3657 t = false;
3658 }
3659 }
3660
3661 /* Switch off assumed size checking and do this again for certain kinds
3662 of procedure, once the procedure itself is resolved. */
3663 need_full_assumed_size++;
3664
3665 if (csym)
3666 ptype = csym->attr.proc;
3667
3668 no_formal_args = csym && is_external_proc (csym)
3669 && gfc_sym_get_dummy_args (csym) == NULL;
3670 if (!resolve_actual_arglist (c->ext.actual, ptype, no_formal_args))
3671 return false;
3672
3673 /* Resume assumed_size checking. */
3674 need_full_assumed_size--;
3675
3676 /* If external, check for usage. */
3677 if (csym && is_external_proc (csym))
3678 resolve_global_procedure (csym, &c->loc, &c->ext.actual, 1);
3679
3680 t = true;
3681 if (c->resolved_sym == NULL)
3682 {
3683 c->resolved_isym = NULL;
3684 switch (procedure_kind (csym))
3685 {
3686 case PTYPE_GENERIC:
3687 t = resolve_generic_s (c);
3688 break;
3689
3690 case PTYPE_SPECIFIC:
3691 t = resolve_specific_s (c);
3692 break;
3693
3694 case PTYPE_UNKNOWN:
3695 t = resolve_unknown_s (c);
3696 break;
3697
3698 default:
3699 gfc_internal_error ("resolve_subroutine(): bad function type");
3700 }
3701 }
3702
3703 /* Some checks of elemental subroutine actual arguments. */
3704 if (!resolve_elemental_actual (NULL, c))
3705 return false;
3706
3707 if (!c->expr1)
3708 update_current_proc_array_outer_dependency (csym);
3709 else
3710 /* Typebound procedure: Assume the worst. */
3711 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
3712
3713 return t;
3714 }
3715
3716
3717 /* Compare the shapes of two arrays that have non-NULL shapes. If both
3718 op1->shape and op2->shape are non-NULL return true if their shapes
3719 match. If both op1->shape and op2->shape are non-NULL return false
3720 if their shapes do not match. If either op1->shape or op2->shape is
3721 NULL, return true. */
3722
3723 static bool
3724 compare_shapes (gfc_expr *op1, gfc_expr *op2)
3725 {
3726 bool t;
3727 int i;
3728
3729 t = true;
3730
3731 if (op1->shape != NULL && op2->shape != NULL)
3732 {
3733 for (i = 0; i < op1->rank; i++)
3734 {
3735 if (mpz_cmp (op1->shape[i], op2->shape[i]) != 0)
3736 {
3737 gfc_error ("Shapes for operands at %L and %L are not conformable",
3738 &op1->where, &op2->where);
3739 t = false;
3740 break;
3741 }
3742 }
3743 }
3744
3745 return t;
3746 }
3747
3748 /* Convert a logical operator to the corresponding bitwise intrinsic call.
3749 For example A .AND. B becomes IAND(A, B). */
3750 static gfc_expr *
3751 logical_to_bitwise (gfc_expr *e)
3752 {
3753 gfc_expr *tmp, *op1, *op2;
3754 gfc_isym_id isym;
3755 gfc_actual_arglist *args = NULL;
3756
3757 gcc_assert (e->expr_type == EXPR_OP);
3758
3759 isym = GFC_ISYM_NONE;
3760 op1 = e->value.op.op1;
3761 op2 = e->value.op.op2;
3762
3763 switch (e->value.op.op)
3764 {
3765 case INTRINSIC_NOT:
3766 isym = GFC_ISYM_NOT;
3767 break;
3768 case INTRINSIC_AND:
3769 isym = GFC_ISYM_IAND;
3770 break;
3771 case INTRINSIC_OR:
3772 isym = GFC_ISYM_IOR;
3773 break;
3774 case INTRINSIC_NEQV:
3775 isym = GFC_ISYM_IEOR;
3776 break;
3777 case INTRINSIC_EQV:
3778 /* "Bitwise eqv" is just the complement of NEQV === IEOR.
3779 Change the old expression to NEQV, which will get replaced by IEOR,
3780 and wrap it in NOT. */
3781 tmp = gfc_copy_expr (e);
3782 tmp->value.op.op = INTRINSIC_NEQV;
3783 tmp = logical_to_bitwise (tmp);
3784 isym = GFC_ISYM_NOT;
3785 op1 = tmp;
3786 op2 = NULL;
3787 break;
3788 default:
3789 gfc_internal_error ("logical_to_bitwise(): Bad intrinsic");
3790 }
3791
3792 /* Inherit the original operation's operands as arguments. */
3793 args = gfc_get_actual_arglist ();
3794 args->expr = op1;
3795 if (op2)
3796 {
3797 args->next = gfc_get_actual_arglist ();
3798 args->next->expr = op2;
3799 }
3800
3801 /* Convert the expression to a function call. */
3802 e->expr_type = EXPR_FUNCTION;
3803 e->value.function.actual = args;
3804 e->value.function.isym = gfc_intrinsic_function_by_id (isym);
3805 e->value.function.name = e->value.function.isym->name;
3806 e->value.function.esym = NULL;
3807
3808 /* Make up a pre-resolved function call symtree if we need to. */
3809 if (!e->symtree || !e->symtree->n.sym)
3810 {
3811 gfc_symbol *sym;
3812 gfc_get_ha_sym_tree (e->value.function.isym->name, &e->symtree);
3813 sym = e->symtree->n.sym;
3814 sym->result = sym;
3815 sym->attr.flavor = FL_PROCEDURE;
3816 sym->attr.function = 1;
3817 sym->attr.elemental = 1;
3818 sym->attr.pure = 1;
3819 sym->attr.referenced = 1;
3820 gfc_intrinsic_symbol (sym);
3821 gfc_commit_symbol (sym);
3822 }
3823
3824 args->name = e->value.function.isym->formal->name;
3825 if (e->value.function.isym->formal->next)
3826 args->next->name = e->value.function.isym->formal->next->name;
3827
3828 return e;
3829 }
3830
3831 /* Recursively append candidate UOP to CANDIDATES. Store the number of
3832 candidates in CANDIDATES_LEN. */
3833 static void
3834 lookup_uop_fuzzy_find_candidates (gfc_symtree *uop,
3835 char **&candidates,
3836 size_t &candidates_len)
3837 {
3838 gfc_symtree *p;
3839
3840 if (uop == NULL)
3841 return;
3842
3843 /* Not sure how to properly filter here. Use all for a start.
3844 n.uop.op is NULL for empty interface operators (is that legal?) disregard
3845 these as i suppose they don't make terribly sense. */
3846
3847 if (uop->n.uop->op != NULL)
3848 vec_push (candidates, candidates_len, uop->name);
3849
3850 p = uop->left;
3851 if (p)
3852 lookup_uop_fuzzy_find_candidates (p, candidates, candidates_len);
3853
3854 p = uop->right;
3855 if (p)
3856 lookup_uop_fuzzy_find_candidates (p, candidates, candidates_len);
3857 }
3858
3859 /* Lookup user-operator OP fuzzily, taking names in UOP into account. */
3860
3861 static const char*
3862 lookup_uop_fuzzy (const char *op, gfc_symtree *uop)
3863 {
3864 char **candidates = NULL;
3865 size_t candidates_len = 0;
3866 lookup_uop_fuzzy_find_candidates (uop, candidates, candidates_len);
3867 return gfc_closest_fuzzy_match (op, candidates);
3868 }
3869
3870
3871 /* Callback finding an impure function as an operand to an .and. or
3872 .or. expression. Remember the last function warned about to
3873 avoid double warnings when recursing. */
3874
3875 static int
3876 impure_function_callback (gfc_expr **e, int *walk_subtrees ATTRIBUTE_UNUSED,
3877 void *data)
3878 {
3879 gfc_expr *f = *e;
3880 const char *name;
3881 static gfc_expr *last = NULL;
3882 bool *found = (bool *) data;
3883
3884 if (f->expr_type == EXPR_FUNCTION)
3885 {
3886 *found = 1;
3887 if (f != last && !gfc_pure_function (f, &name)
3888 && !gfc_implicit_pure_function (f))
3889 {
3890 if (name)
3891 gfc_warning (OPT_Wfunction_elimination,
3892 "Impure function %qs at %L might not be evaluated",
3893 name, &f->where);
3894 else
3895 gfc_warning (OPT_Wfunction_elimination,
3896 "Impure function at %L might not be evaluated",
3897 &f->where);
3898 }
3899 last = f;
3900 }
3901
3902 return 0;
3903 }
3904
3905
3906 /* Resolve an operator expression node. This can involve replacing the
3907 operation with a user defined function call. */
3908
3909 static bool
3910 resolve_operator (gfc_expr *e)
3911 {
3912 gfc_expr *op1, *op2;
3913 char msg[200];
3914 bool dual_locus_error;
3915 bool t = true;
3916
3917 /* Resolve all subnodes-- give them types. */
3918
3919 switch (e->value.op.op)
3920 {
3921 default:
3922 if (!gfc_resolve_expr (e->value.op.op2))
3923 return false;
3924
3925 /* Fall through. */
3926
3927 case INTRINSIC_NOT:
3928 case INTRINSIC_UPLUS:
3929 case INTRINSIC_UMINUS:
3930 case INTRINSIC_PARENTHESES:
3931 if (!gfc_resolve_expr (e->value.op.op1))
3932 return false;
3933 break;
3934 }
3935
3936 /* Typecheck the new node. */
3937
3938 op1 = e->value.op.op1;
3939 op2 = e->value.op.op2;
3940 dual_locus_error = false;
3941
3942 if ((op1 && op1->expr_type == EXPR_NULL)
3943 || (op2 && op2->expr_type == EXPR_NULL))
3944 {
3945 sprintf (msg, _("Invalid context for NULL() pointer at %%L"));
3946 goto bad_op;
3947 }
3948
3949 switch (e->value.op.op)
3950 {
3951 case INTRINSIC_UPLUS:
3952 case INTRINSIC_UMINUS:
3953 if (op1->ts.type == BT_INTEGER
3954 || op1->ts.type == BT_REAL
3955 || op1->ts.type == BT_COMPLEX)
3956 {
3957 e->ts = op1->ts;
3958 break;
3959 }
3960
3961 sprintf (msg, _("Operand of unary numeric operator %%<%s%%> at %%L is %s"),
3962 gfc_op2string (e->value.op.op), gfc_typename (&e->ts));
3963 goto bad_op;
3964
3965 case INTRINSIC_PLUS:
3966 case INTRINSIC_MINUS:
3967 case INTRINSIC_TIMES:
3968 case INTRINSIC_DIVIDE:
3969 case INTRINSIC_POWER:
3970 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
3971 {
3972 gfc_type_convert_binary (e, 1);
3973 break;
3974 }
3975
3976 if (op1->ts.type == BT_DERIVED || op2->ts.type == BT_DERIVED)
3977 sprintf (msg,
3978 _("Unexpected derived-type entities in binary intrinsic "
3979 "numeric operator %%<%s%%> at %%L"),
3980 gfc_op2string (e->value.op.op));
3981 else
3982 sprintf (msg,
3983 _("Operands of binary numeric operator %%<%s%%> at %%L are %s/%s"),
3984 gfc_op2string (e->value.op.op), gfc_typename (&op1->ts),
3985 gfc_typename (&op2->ts));
3986 goto bad_op;
3987
3988 case INTRINSIC_CONCAT:
3989 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
3990 && op1->ts.kind == op2->ts.kind)
3991 {
3992 e->ts.type = BT_CHARACTER;
3993 e->ts.kind = op1->ts.kind;
3994 break;
3995 }
3996
3997 sprintf (msg,
3998 _("Operands of string concatenation operator at %%L are %s/%s"),
3999 gfc_typename (&op1->ts), gfc_typename (&op2->ts));
4000 goto bad_op;
4001
4002 case INTRINSIC_AND:
4003 case INTRINSIC_OR:
4004 case INTRINSIC_EQV:
4005 case INTRINSIC_NEQV:
4006 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
4007 {
4008 e->ts.type = BT_LOGICAL;
4009 e->ts.kind = gfc_kind_max (op1, op2);
4010 if (op1->ts.kind < e->ts.kind)
4011 gfc_convert_type (op1, &e->ts, 2);
4012 else if (op2->ts.kind < e->ts.kind)
4013 gfc_convert_type (op2, &e->ts, 2);
4014
4015 if (flag_frontend_optimize &&
4016 (e->value.op.op == INTRINSIC_AND || e->value.op.op == INTRINSIC_OR))
4017 {
4018 /* Warn about short-circuiting
4019 with impure function as second operand. */
4020 bool op2_f = false;
4021 gfc_expr_walker (&op2, impure_function_callback, &op2_f);
4022 }
4023 break;
4024 }
4025
4026 /* Logical ops on integers become bitwise ops with -fdec. */
4027 else if (flag_dec
4028 && (op1->ts.type == BT_INTEGER || op2->ts.type == BT_INTEGER))
4029 {
4030 e->ts.type = BT_INTEGER;
4031 e->ts.kind = gfc_kind_max (op1, op2);
4032 if (op1->ts.type != e->ts.type || op1->ts.kind != e->ts.kind)
4033 gfc_convert_type (op1, &e->ts, 1);
4034 if (op2->ts.type != e->ts.type || op2->ts.kind != e->ts.kind)
4035 gfc_convert_type (op2, &e->ts, 1);
4036 e = logical_to_bitwise (e);
4037 goto simplify_op;
4038 }
4039
4040 sprintf (msg, _("Operands of logical operator %%<%s%%> at %%L are %s/%s"),
4041 gfc_op2string (e->value.op.op), gfc_typename (&op1->ts),
4042 gfc_typename (&op2->ts));
4043
4044 goto bad_op;
4045
4046 case INTRINSIC_NOT:
4047 /* Logical ops on integers become bitwise ops with -fdec. */
4048 if (flag_dec && op1->ts.type == BT_INTEGER)
4049 {
4050 e->ts.type = BT_INTEGER;
4051 e->ts.kind = op1->ts.kind;
4052 e = logical_to_bitwise (e);
4053 goto simplify_op;
4054 }
4055
4056 if (op1->ts.type == BT_LOGICAL)
4057 {
4058 e->ts.type = BT_LOGICAL;
4059 e->ts.kind = op1->ts.kind;
4060 break;
4061 }
4062
4063 sprintf (msg, _("Operand of .not. operator at %%L is %s"),
4064 gfc_typename (&op1->ts));
4065 goto bad_op;
4066
4067 case INTRINSIC_GT:
4068 case INTRINSIC_GT_OS:
4069 case INTRINSIC_GE:
4070 case INTRINSIC_GE_OS:
4071 case INTRINSIC_LT:
4072 case INTRINSIC_LT_OS:
4073 case INTRINSIC_LE:
4074 case INTRINSIC_LE_OS:
4075 if (op1->ts.type == BT_COMPLEX || op2->ts.type == BT_COMPLEX)
4076 {
4077 strcpy (msg, _("COMPLEX quantities cannot be compared at %L"));
4078 goto bad_op;
4079 }
4080
4081 /* Fall through. */
4082
4083 case INTRINSIC_EQ:
4084 case INTRINSIC_EQ_OS:
4085 case INTRINSIC_NE:
4086 case INTRINSIC_NE_OS:
4087 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
4088 && op1->ts.kind == op2->ts.kind)
4089 {
4090 e->ts.type = BT_LOGICAL;
4091 e->ts.kind = gfc_default_logical_kind;
4092 break;
4093 }
4094
4095 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
4096 {
4097 gfc_type_convert_binary (e, 1);
4098
4099 e->ts.type = BT_LOGICAL;
4100 e->ts.kind = gfc_default_logical_kind;
4101
4102 if (warn_compare_reals)
4103 {
4104 gfc_intrinsic_op op = e->value.op.op;
4105
4106 /* Type conversion has made sure that the types of op1 and op2
4107 agree, so it is only necessary to check the first one. */
4108 if ((op1->ts.type == BT_REAL || op1->ts.type == BT_COMPLEX)
4109 && (op == INTRINSIC_EQ || op == INTRINSIC_EQ_OS
4110 || op == INTRINSIC_NE || op == INTRINSIC_NE_OS))
4111 {
4112 const char *msg;
4113
4114 if (op == INTRINSIC_EQ || op == INTRINSIC_EQ_OS)
4115 msg = "Equality comparison for %s at %L";
4116 else
4117 msg = "Inequality comparison for %s at %L";
4118
4119 gfc_warning (OPT_Wcompare_reals, msg,
4120 gfc_typename (&op1->ts), &op1->where);
4121 }
4122 }
4123
4124 break;
4125 }
4126
4127 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
4128 sprintf (msg,
4129 _("Logicals at %%L must be compared with %s instead of %s"),
4130 (e->value.op.op == INTRINSIC_EQ
4131 || e->value.op.op == INTRINSIC_EQ_OS)
4132 ? ".eqv." : ".neqv.", gfc_op2string (e->value.op.op));
4133 else
4134 sprintf (msg,
4135 _("Operands of comparison operator %%<%s%%> at %%L are %s/%s"),
4136 gfc_op2string (e->value.op.op), gfc_typename (&op1->ts),
4137 gfc_typename (&op2->ts));
4138
4139 goto bad_op;
4140
4141 case INTRINSIC_USER:
4142 if (e->value.op.uop->op == NULL)
4143 {
4144 const char *name = e->value.op.uop->name;
4145 const char *guessed;
4146 guessed = lookup_uop_fuzzy (name, e->value.op.uop->ns->uop_root);
4147 if (guessed)
4148 sprintf (msg, _("Unknown operator %%<%s%%> at %%L; did you mean '%s'?"),
4149 name, guessed);
4150 else
4151 sprintf (msg, _("Unknown operator %%<%s%%> at %%L"), name);
4152 }
4153 else if (op2 == NULL)
4154 sprintf (msg, _("Operand of user operator %%<%s%%> at %%L is %s"),
4155 e->value.op.uop->name, gfc_typename (&op1->ts));
4156 else
4157 {
4158 sprintf (msg, _("Operands of user operator %%<%s%%> at %%L are %s/%s"),
4159 e->value.op.uop->name, gfc_typename (&op1->ts),
4160 gfc_typename (&op2->ts));
4161 e->value.op.uop->op->sym->attr.referenced = 1;
4162 }
4163
4164 goto bad_op;
4165
4166 case INTRINSIC_PARENTHESES:
4167 e->ts = op1->ts;
4168 if (e->ts.type == BT_CHARACTER)
4169 e->ts.u.cl = op1->ts.u.cl;
4170 break;
4171
4172 default:
4173 gfc_internal_error ("resolve_operator(): Bad intrinsic");
4174 }
4175
4176 /* Deal with arrayness of an operand through an operator. */
4177
4178 switch (e->value.op.op)
4179 {
4180 case INTRINSIC_PLUS:
4181 case INTRINSIC_MINUS:
4182 case INTRINSIC_TIMES:
4183 case INTRINSIC_DIVIDE:
4184 case INTRINSIC_POWER:
4185 case INTRINSIC_CONCAT:
4186 case INTRINSIC_AND:
4187 case INTRINSIC_OR:
4188 case INTRINSIC_EQV:
4189 case INTRINSIC_NEQV:
4190 case INTRINSIC_EQ:
4191 case INTRINSIC_EQ_OS:
4192 case INTRINSIC_NE:
4193 case INTRINSIC_NE_OS:
4194 case INTRINSIC_GT:
4195 case INTRINSIC_GT_OS:
4196 case INTRINSIC_GE:
4197 case INTRINSIC_GE_OS:
4198 case INTRINSIC_LT:
4199 case INTRINSIC_LT_OS:
4200 case INTRINSIC_LE:
4201 case INTRINSIC_LE_OS:
4202
4203 if (op1->rank == 0 && op2->rank == 0)
4204 e->rank = 0;
4205
4206 if (op1->rank == 0 && op2->rank != 0)
4207 {
4208 e->rank = op2->rank;
4209
4210 if (e->shape == NULL)
4211 e->shape = gfc_copy_shape (op2->shape, op2->rank);
4212 }
4213
4214 if (op1->rank != 0 && op2->rank == 0)
4215 {
4216 e->rank = op1->rank;
4217
4218 if (e->shape == NULL)
4219 e->shape = gfc_copy_shape (op1->shape, op1->rank);
4220 }
4221
4222 if (op1->rank != 0 && op2->rank != 0)
4223 {
4224 if (op1->rank == op2->rank)
4225 {
4226 e->rank = op1->rank;
4227 if (e->shape == NULL)
4228 {
4229 t = compare_shapes (op1, op2);
4230 if (!t)
4231 e->shape = NULL;
4232 else
4233 e->shape = gfc_copy_shape (op1->shape, op1->rank);
4234 }
4235 }
4236 else
4237 {
4238 /* Allow higher level expressions to work. */
4239 e->rank = 0;
4240
4241 /* Try user-defined operators, and otherwise throw an error. */
4242 dual_locus_error = true;
4243 sprintf (msg,
4244 _("Inconsistent ranks for operator at %%L and %%L"));
4245 goto bad_op;
4246 }
4247 }
4248
4249 break;
4250
4251 case INTRINSIC_PARENTHESES:
4252 case INTRINSIC_NOT:
4253 case INTRINSIC_UPLUS:
4254 case INTRINSIC_UMINUS:
4255 /* Simply copy arrayness attribute */
4256 e->rank = op1->rank;
4257
4258 if (e->shape == NULL)
4259 e->shape = gfc_copy_shape (op1->shape, op1->rank);
4260
4261 break;
4262
4263 default:
4264 break;
4265 }
4266
4267 simplify_op:
4268
4269 /* Attempt to simplify the expression. */
4270 if (t)
4271 {
4272 t = gfc_simplify_expr (e, 0);
4273 /* Some calls do not succeed in simplification and return false
4274 even though there is no error; e.g. variable references to
4275 PARAMETER arrays. */
4276 if (!gfc_is_constant_expr (e))
4277 t = true;
4278 }
4279 return t;
4280
4281 bad_op:
4282
4283 {
4284 match m = gfc_extend_expr (e);
4285 if (m == MATCH_YES)
4286 return true;
4287 if (m == MATCH_ERROR)
4288 return false;
4289 }
4290
4291 if (dual_locus_error)
4292 gfc_error (msg, &op1->where, &op2->where);
4293 else
4294 gfc_error (msg, &e->where);
4295
4296 return false;
4297 }
4298
4299
4300 /************** Array resolution subroutines **************/
4301
4302 enum compare_result
4303 { CMP_LT, CMP_EQ, CMP_GT, CMP_UNKNOWN };
4304
4305 /* Compare two integer expressions. */
4306
4307 static compare_result
4308 compare_bound (gfc_expr *a, gfc_expr *b)
4309 {
4310 int i;
4311
4312 if (a == NULL || a->expr_type != EXPR_CONSTANT
4313 || b == NULL || b->expr_type != EXPR_CONSTANT)
4314 return CMP_UNKNOWN;
4315
4316 /* If either of the types isn't INTEGER, we must have
4317 raised an error earlier. */
4318
4319 if (a->ts.type != BT_INTEGER || b->ts.type != BT_INTEGER)
4320 return CMP_UNKNOWN;
4321
4322 i = mpz_cmp (a->value.integer, b->value.integer);
4323
4324 if (i < 0)
4325 return CMP_LT;
4326 if (i > 0)
4327 return CMP_GT;
4328 return CMP_EQ;
4329 }
4330
4331
4332 /* Compare an integer expression with an integer. */
4333
4334 static compare_result
4335 compare_bound_int (gfc_expr *a, int b)
4336 {
4337 int i;
4338
4339 if (a == NULL || a->expr_type != EXPR_CONSTANT)
4340 return CMP_UNKNOWN;
4341
4342 if (a->ts.type != BT_INTEGER)
4343 gfc_internal_error ("compare_bound_int(): Bad expression");
4344
4345 i = mpz_cmp_si (a->value.integer, b);
4346
4347 if (i < 0)
4348 return CMP_LT;
4349 if (i > 0)
4350 return CMP_GT;
4351 return CMP_EQ;
4352 }
4353
4354
4355 /* Compare an integer expression with a mpz_t. */
4356
4357 static compare_result
4358 compare_bound_mpz_t (gfc_expr *a, mpz_t b)
4359 {
4360 int i;
4361
4362 if (a == NULL || a->expr_type != EXPR_CONSTANT)
4363 return CMP_UNKNOWN;
4364
4365 if (a->ts.type != BT_INTEGER)
4366 gfc_internal_error ("compare_bound_int(): Bad expression");
4367
4368 i = mpz_cmp (a->value.integer, b);
4369
4370 if (i < 0)
4371 return CMP_LT;
4372 if (i > 0)
4373 return CMP_GT;
4374 return CMP_EQ;
4375 }
4376
4377
4378 /* Compute the last value of a sequence given by a triplet.
4379 Return 0 if it wasn't able to compute the last value, or if the
4380 sequence if empty, and 1 otherwise. */
4381
4382 static int
4383 compute_last_value_for_triplet (gfc_expr *start, gfc_expr *end,
4384 gfc_expr *stride, mpz_t last)
4385 {
4386 mpz_t rem;
4387
4388 if (start == NULL || start->expr_type != EXPR_CONSTANT
4389 || end == NULL || end->expr_type != EXPR_CONSTANT
4390 || (stride != NULL && stride->expr_type != EXPR_CONSTANT))
4391 return 0;
4392
4393 if (start->ts.type != BT_INTEGER || end->ts.type != BT_INTEGER
4394 || (stride != NULL && stride->ts.type != BT_INTEGER))
4395 return 0;
4396
4397 if (stride == NULL || compare_bound_int (stride, 1) == CMP_EQ)
4398 {
4399 if (compare_bound (start, end) == CMP_GT)
4400 return 0;
4401 mpz_set (last, end->value.integer);
4402 return 1;
4403 }
4404
4405 if (compare_bound_int (stride, 0) == CMP_GT)
4406 {
4407 /* Stride is positive */
4408 if (mpz_cmp (start->value.integer, end->value.integer) > 0)
4409 return 0;
4410 }
4411 else
4412 {
4413 /* Stride is negative */
4414 if (mpz_cmp (start->value.integer, end->value.integer) < 0)
4415 return 0;
4416 }
4417
4418 mpz_init (rem);
4419 mpz_sub (rem, end->value.integer, start->value.integer);
4420 mpz_tdiv_r (rem, rem, stride->value.integer);
4421 mpz_sub (last, end->value.integer, rem);
4422 mpz_clear (rem);
4423
4424 return 1;
4425 }
4426
4427
4428 /* Compare a single dimension of an array reference to the array
4429 specification. */
4430
4431 static bool
4432 check_dimension (int i, gfc_array_ref *ar, gfc_array_spec *as)
4433 {
4434 mpz_t last_value;
4435
4436 if (ar->dimen_type[i] == DIMEN_STAR)
4437 {
4438 gcc_assert (ar->stride[i] == NULL);
4439 /* This implies [*] as [*:] and [*:3] are not possible. */
4440 if (ar->start[i] == NULL)
4441 {
4442 gcc_assert (ar->end[i] == NULL);
4443 return true;
4444 }
4445 }
4446
4447 /* Given start, end and stride values, calculate the minimum and
4448 maximum referenced indexes. */
4449
4450 switch (ar->dimen_type[i])
4451 {
4452 case DIMEN_VECTOR:
4453 case DIMEN_THIS_IMAGE:
4454 break;
4455
4456 case DIMEN_STAR:
4457 case DIMEN_ELEMENT:
4458 if (compare_bound (ar->start[i], as->lower[i]) == CMP_LT)
4459 {
4460 if (i < as->rank)
4461 gfc_warning (0, "Array reference at %L is out of bounds "
4462 "(%ld < %ld) in dimension %d", &ar->c_where[i],
4463 mpz_get_si (ar->start[i]->value.integer),
4464 mpz_get_si (as->lower[i]->value.integer), i+1);
4465 else
4466 gfc_warning (0, "Array reference at %L is out of bounds "
4467 "(%ld < %ld) in codimension %d", &ar->c_where[i],
4468 mpz_get_si (ar->start[i]->value.integer),
4469 mpz_get_si (as->lower[i]->value.integer),
4470 i + 1 - as->rank);
4471 return true;
4472 }
4473 if (compare_bound (ar->start[i], as->upper[i]) == CMP_GT)
4474 {
4475 if (i < as->rank)
4476 gfc_warning (0, "Array reference at %L is out of bounds "
4477 "(%ld > %ld) in dimension %d", &ar->c_where[i],
4478 mpz_get_si (ar->start[i]->value.integer),
4479 mpz_get_si (as->upper[i]->value.integer), i+1);
4480 else
4481 gfc_warning (0, "Array reference at %L is out of bounds "
4482 "(%ld > %ld) in codimension %d", &ar->c_where[i],
4483 mpz_get_si (ar->start[i]->value.integer),
4484 mpz_get_si (as->upper[i]->value.integer),
4485 i + 1 - as->rank);
4486 return true;
4487 }
4488
4489 break;
4490
4491 case DIMEN_RANGE:
4492 {
4493 #define AR_START (ar->start[i] ? ar->start[i] : as->lower[i])
4494 #define AR_END (ar->end[i] ? ar->end[i] : as->upper[i])
4495
4496 compare_result comp_start_end = compare_bound (AR_START, AR_END);
4497
4498 /* Check for zero stride, which is not allowed. */
4499 if (compare_bound_int (ar->stride[i], 0) == CMP_EQ)
4500 {
4501 gfc_error ("Illegal stride of zero at %L", &ar->c_where[i]);
4502 return false;
4503 }
4504
4505 /* if start == len || (stride > 0 && start < len)
4506 || (stride < 0 && start > len),
4507 then the array section contains at least one element. In this
4508 case, there is an out-of-bounds access if
4509 (start < lower || start > upper). */
4510 if (compare_bound (AR_START, AR_END) == CMP_EQ
4511 || ((compare_bound_int (ar->stride[i], 0) == CMP_GT
4512 || ar->stride[i] == NULL) && comp_start_end == CMP_LT)
4513 || (compare_bound_int (ar->stride[i], 0) == CMP_LT
4514 && comp_start_end == CMP_GT))
4515 {
4516 if (compare_bound (AR_START, as->lower[i]) == CMP_LT)
4517 {
4518 gfc_warning (0, "Lower array reference at %L is out of bounds "
4519 "(%ld < %ld) in dimension %d", &ar->c_where[i],
4520 mpz_get_si (AR_START->value.integer),
4521 mpz_get_si (as->lower[i]->value.integer), i+1);
4522 return true;
4523 }
4524 if (compare_bound (AR_START, as->upper[i]) == CMP_GT)
4525 {
4526 gfc_warning (0, "Lower array reference at %L is out of bounds "
4527 "(%ld > %ld) in dimension %d", &ar->c_where[i],
4528 mpz_get_si (AR_START->value.integer),
4529 mpz_get_si (as->upper[i]->value.integer), i+1);
4530 return true;
4531 }
4532 }
4533
4534 /* If we can compute the highest index of the array section,
4535 then it also has to be between lower and upper. */
4536 mpz_init (last_value);
4537 if (compute_last_value_for_triplet (AR_START, AR_END, ar->stride[i],
4538 last_value))
4539 {
4540 if (compare_bound_mpz_t (as->lower[i], last_value) == CMP_GT)
4541 {
4542 gfc_warning (0, "Upper array reference at %L is out of bounds "
4543 "(%ld < %ld) in dimension %d", &ar->c_where[i],
4544 mpz_get_si (last_value),
4545 mpz_get_si (as->lower[i]->value.integer), i+1);
4546 mpz_clear (last_value);
4547 return true;
4548 }
4549 if (compare_bound_mpz_t (as->upper[i], last_value) == CMP_LT)
4550 {
4551 gfc_warning (0, "Upper array reference at %L is out of bounds "
4552 "(%ld > %ld) in dimension %d", &ar->c_where[i],
4553 mpz_get_si (last_value),
4554 mpz_get_si (as->upper[i]->value.integer), i+1);
4555 mpz_clear (last_value);
4556 return true;
4557 }
4558 }
4559 mpz_clear (last_value);
4560
4561 #undef AR_START
4562 #undef AR_END
4563 }
4564 break;
4565
4566 default:
4567 gfc_internal_error ("check_dimension(): Bad array reference");
4568 }
4569
4570 return true;
4571 }
4572
4573
4574 /* Compare an array reference with an array specification. */
4575
4576 static bool
4577 compare_spec_to_ref (gfc_array_ref *ar)
4578 {
4579 gfc_array_spec *as;
4580 int i;
4581
4582 as = ar->as;
4583 i = as->rank - 1;
4584 /* TODO: Full array sections are only allowed as actual parameters. */
4585 if (as->type == AS_ASSUMED_SIZE
4586 && (/*ar->type == AR_FULL
4587 ||*/ (ar->type == AR_SECTION
4588 && ar->dimen_type[i] == DIMEN_RANGE && ar->end[i] == NULL)))
4589 {
4590 gfc_error ("Rightmost upper bound of assumed size array section "
4591 "not specified at %L", &ar->where);
4592 return false;
4593 }
4594
4595 if (ar->type == AR_FULL)
4596 return true;
4597
4598 if (as->rank != ar->dimen)
4599 {
4600 gfc_error ("Rank mismatch in array reference at %L (%d/%d)",
4601 &ar->where, ar->dimen, as->rank);
4602 return false;
4603 }
4604
4605 /* ar->codimen == 0 is a local array. */
4606 if (as->corank != ar->codimen && ar->codimen != 0)
4607 {
4608 gfc_error ("Coindex rank mismatch in array reference at %L (%d/%d)",
4609 &ar->where, ar->codimen, as->corank);
4610 return false;
4611 }
4612
4613 for (i = 0; i < as->rank; i++)
4614 if (!check_dimension (i, ar, as))
4615 return false;
4616
4617 /* Local access has no coarray spec. */
4618 if (ar->codimen != 0)
4619 for (i = as->rank; i < as->rank + as->corank; i++)
4620 {
4621 if (ar->dimen_type[i] != DIMEN_ELEMENT && !ar->in_allocate
4622 && ar->dimen_type[i] != DIMEN_THIS_IMAGE)
4623 {
4624 gfc_error ("Coindex of codimension %d must be a scalar at %L",
4625 i + 1 - as->rank, &ar->where);
4626 return false;
4627 }
4628 if (!check_dimension (i, ar, as))
4629 return false;
4630 }
4631
4632 return true;
4633 }
4634
4635
4636 /* Resolve one part of an array index. */
4637
4638 static bool
4639 gfc_resolve_index_1 (gfc_expr *index, int check_scalar,
4640 int force_index_integer_kind)
4641 {
4642 gfc_typespec ts;
4643
4644 if (index == NULL)
4645 return true;
4646
4647 if (!gfc_resolve_expr (index))
4648 return false;
4649
4650 if (check_scalar && index->rank != 0)
4651 {
4652 gfc_error ("Array index at %L must be scalar", &index->where);
4653 return false;
4654 }
4655
4656 if (index->ts.type != BT_INTEGER && index->ts.type != BT_REAL)
4657 {
4658 gfc_error ("Array index at %L must be of INTEGER type, found %s",
4659 &index->where, gfc_basic_typename (index->ts.type));
4660 return false;
4661 }
4662
4663 if (index->ts.type == BT_REAL)
4664 if (!gfc_notify_std (GFC_STD_LEGACY, "REAL array index at %L",
4665 &index->where))
4666 return false;
4667
4668 if ((index->ts.kind != gfc_index_integer_kind
4669 && force_index_integer_kind)
4670 || index->ts.type != BT_INTEGER)
4671 {
4672 gfc_clear_ts (&ts);
4673 ts.type = BT_INTEGER;
4674 ts.kind = gfc_index_integer_kind;
4675
4676 gfc_convert_type_warn (index, &ts, 2, 0);
4677 }
4678
4679 return true;
4680 }
4681
4682 /* Resolve one part of an array index. */
4683
4684 bool
4685 gfc_resolve_index (gfc_expr *index, int check_scalar)
4686 {
4687 return gfc_resolve_index_1 (index, check_scalar, 1);
4688 }
4689
4690 /* Resolve a dim argument to an intrinsic function. */
4691
4692 bool
4693 gfc_resolve_dim_arg (gfc_expr *dim)
4694 {
4695 if (dim == NULL)
4696 return true;
4697
4698 if (!gfc_resolve_expr (dim))
4699 return false;
4700
4701 if (dim->rank != 0)
4702 {
4703 gfc_error ("Argument dim at %L must be scalar", &dim->where);
4704 return false;
4705
4706 }
4707
4708 if (dim->ts.type != BT_INTEGER)
4709 {
4710 gfc_error ("Argument dim at %L must be of INTEGER type", &dim->where);
4711 return false;
4712 }
4713
4714 if (dim->ts.kind != gfc_index_integer_kind)
4715 {
4716 gfc_typespec ts;
4717
4718 gfc_clear_ts (&ts);
4719 ts.type = BT_INTEGER;
4720 ts.kind = gfc_index_integer_kind;
4721
4722 gfc_convert_type_warn (dim, &ts, 2, 0);
4723 }
4724
4725 return true;
4726 }
4727
4728 /* Given an expression that contains array references, update those array
4729 references to point to the right array specifications. While this is
4730 filled in during matching, this information is difficult to save and load
4731 in a module, so we take care of it here.
4732
4733 The idea here is that the original array reference comes from the
4734 base symbol. We traverse the list of reference structures, setting
4735 the stored reference to references. Component references can
4736 provide an additional array specification. */
4737
4738 static void
4739 find_array_spec (gfc_expr *e)
4740 {
4741 gfc_array_spec *as;
4742 gfc_component *c;
4743 gfc_ref *ref;
4744 bool class_as = false;
4745
4746 if (e->symtree->n.sym->ts.type == BT_CLASS)
4747 {
4748 as = CLASS_DATA (e->symtree->n.sym)->as;
4749 class_as = true;
4750 }
4751 else
4752 as = e->symtree->n.sym->as;
4753
4754 for (ref = e->ref; ref; ref = ref->next)
4755 switch (ref->type)
4756 {
4757 case REF_ARRAY:
4758 if (as == NULL)
4759 gfc_internal_error ("find_array_spec(): Missing spec");
4760
4761 ref->u.ar.as = as;
4762 as = NULL;
4763 break;
4764
4765 case REF_COMPONENT:
4766 c = ref->u.c.component;
4767 if (c->attr.dimension)
4768 {
4769 if (as != NULL && !(class_as && as == c->as))
4770 gfc_internal_error ("find_array_spec(): unused as(1)");
4771 as = c->as;
4772 }
4773
4774 break;
4775
4776 case REF_SUBSTRING:
4777 case REF_INQUIRY:
4778 break;
4779 }
4780
4781 if (as != NULL)
4782 gfc_internal_error ("find_array_spec(): unused as(2)");
4783 }
4784
4785
4786 /* Resolve an array reference. */
4787
4788 static bool
4789 resolve_array_ref (gfc_array_ref *ar)
4790 {
4791 int i, check_scalar;
4792 gfc_expr *e;
4793
4794 for (i = 0; i < ar->dimen + ar->codimen; i++)
4795 {
4796 check_scalar = ar->dimen_type[i] == DIMEN_RANGE;
4797
4798 /* Do not force gfc_index_integer_kind for the start. We can
4799 do fine with any integer kind. This avoids temporary arrays
4800 created for indexing with a vector. */
4801 if (!gfc_resolve_index_1 (ar->start[i], check_scalar, 0))
4802 return false;
4803 if (!gfc_resolve_index (ar->end[i], check_scalar))
4804 return false;
4805 if (!gfc_resolve_index (ar->stride[i], check_scalar))
4806 return false;
4807
4808 e = ar->start[i];
4809
4810 if (ar->dimen_type[i] == DIMEN_UNKNOWN)
4811 switch (e->rank)
4812 {
4813 case 0:
4814 ar->dimen_type[i] = DIMEN_ELEMENT;
4815 break;
4816
4817 case 1:
4818 ar->dimen_type[i] = DIMEN_VECTOR;
4819 if (e->expr_type == EXPR_VARIABLE
4820 && e->symtree->n.sym->ts.type == BT_DERIVED)
4821 ar->start[i] = gfc_get_parentheses (e);
4822 break;
4823
4824 default:
4825 gfc_error ("Array index at %L is an array of rank %d",
4826 &ar->c_where[i], e->rank);
4827 return false;
4828 }
4829
4830 /* Fill in the upper bound, which may be lower than the
4831 specified one for something like a(2:10:5), which is
4832 identical to a(2:7:5). Only relevant for strides not equal
4833 to one. Don't try a division by zero. */
4834 if (ar->dimen_type[i] == DIMEN_RANGE
4835 && ar->stride[i] != NULL && ar->stride[i]->expr_type == EXPR_CONSTANT
4836 && mpz_cmp_si (ar->stride[i]->value.integer, 1L) != 0
4837 && mpz_cmp_si (ar->stride[i]->value.integer, 0L) != 0)
4838 {
4839 mpz_t size, end;
4840
4841 if (gfc_ref_dimen_size (ar, i, &size, &end))
4842 {
4843 if (ar->end[i] == NULL)
4844 {
4845 ar->end[i] =
4846 gfc_get_constant_expr (BT_INTEGER, gfc_index_integer_kind,
4847 &ar->where);
4848 mpz_set (ar->end[i]->value.integer, end);
4849 }
4850 else if (ar->end[i]->ts.type == BT_INTEGER
4851 && ar->end[i]->expr_type == EXPR_CONSTANT)
4852 {
4853 mpz_set (ar->end[i]->value.integer, end);
4854 }
4855 else
4856 gcc_unreachable ();
4857
4858 mpz_clear (size);
4859 mpz_clear (end);
4860 }
4861 }
4862 }
4863
4864 if (ar->type == AR_FULL)
4865 {
4866 if (ar->as->rank == 0)
4867 ar->type = AR_ELEMENT;
4868
4869 /* Make sure array is the same as array(:,:), this way
4870 we don't need to special case all the time. */
4871 ar->dimen = ar->as->rank;
4872 for (i = 0; i < ar->dimen; i++)
4873 {
4874 ar->dimen_type[i] = DIMEN_RANGE;
4875
4876 gcc_assert (ar->start[i] == NULL);
4877 gcc_assert (ar->end[i] == NULL);
4878 gcc_assert (ar->stride[i] == NULL);
4879 }
4880 }
4881
4882 /* If the reference type is unknown, figure out what kind it is. */
4883
4884 if (ar->type == AR_UNKNOWN)
4885 {
4886 ar->type = AR_ELEMENT;
4887 for (i = 0; i < ar->dimen; i++)
4888 if (ar->dimen_type[i] == DIMEN_RANGE
4889 || ar->dimen_type[i] == DIMEN_VECTOR)
4890 {
4891 ar->type = AR_SECTION;
4892 break;
4893 }
4894 }
4895
4896 if (!ar->as->cray_pointee && !compare_spec_to_ref (ar))
4897 return false;
4898
4899 if (ar->as->corank && ar->codimen == 0)
4900 {
4901 int n;
4902 ar->codimen = ar->as->corank;
4903 for (n = ar->dimen; n < ar->dimen + ar->codimen; n++)
4904 ar->dimen_type[n] = DIMEN_THIS_IMAGE;
4905 }
4906
4907 return true;
4908 }
4909
4910
4911 static bool
4912 resolve_substring (gfc_ref *ref, bool *equal_length)
4913 {
4914 int k = gfc_validate_kind (BT_INTEGER, gfc_charlen_int_kind, false);
4915
4916 if (ref->u.ss.start != NULL)
4917 {
4918 if (!gfc_resolve_expr (ref->u.ss.start))
4919 return false;
4920
4921 if (ref->u.ss.start->ts.type != BT_INTEGER)
4922 {
4923 gfc_error ("Substring start index at %L must be of type INTEGER",
4924 &ref->u.ss.start->where);
4925 return false;
4926 }
4927
4928 if (ref->u.ss.start->rank != 0)
4929 {
4930 gfc_error ("Substring start index at %L must be scalar",
4931 &ref->u.ss.start->where);
4932 return false;
4933 }
4934
4935 if (compare_bound_int (ref->u.ss.start, 1) == CMP_LT
4936 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
4937 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
4938 {
4939 gfc_error ("Substring start index at %L is less than one",
4940 &ref->u.ss.start->where);
4941 return false;
4942 }
4943 }
4944
4945 if (ref->u.ss.end != NULL)
4946 {
4947 if (!gfc_resolve_expr (ref->u.ss.end))
4948 return false;
4949
4950 if (ref->u.ss.end->ts.type != BT_INTEGER)
4951 {
4952 gfc_error ("Substring end index at %L must be of type INTEGER",
4953 &ref->u.ss.end->where);
4954 return false;
4955 }
4956
4957 if (ref->u.ss.end->rank != 0)
4958 {
4959 gfc_error ("Substring end index at %L must be scalar",
4960 &ref->u.ss.end->where);
4961 return false;
4962 }
4963
4964 if (ref->u.ss.length != NULL
4965 && compare_bound (ref->u.ss.end, ref->u.ss.length->length) == CMP_GT
4966 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
4967 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
4968 {
4969 gfc_error ("Substring end index at %L exceeds the string length",
4970 &ref->u.ss.start->where);
4971 return false;
4972 }
4973
4974 if (compare_bound_mpz_t (ref->u.ss.end,
4975 gfc_integer_kinds[k].huge) == CMP_GT
4976 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
4977 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
4978 {
4979 gfc_error ("Substring end index at %L is too large",
4980 &ref->u.ss.end->where);
4981 return false;
4982 }
4983 /* If the substring has the same length as the original
4984 variable, the reference itself can be deleted. */
4985
4986 if (ref->u.ss.length != NULL
4987 && compare_bound (ref->u.ss.end, ref->u.ss.length->length) == CMP_EQ
4988 && compare_bound_int (ref->u.ss.start, 1) == CMP_EQ)
4989 *equal_length = true;
4990 }
4991
4992 return true;
4993 }
4994
4995
4996 /* This function supplies missing substring charlens. */
4997
4998 void
4999 gfc_resolve_substring_charlen (gfc_expr *e)
5000 {
5001 gfc_ref *char_ref;
5002 gfc_expr *start, *end;
5003 gfc_typespec *ts = NULL;
5004 mpz_t diff;
5005
5006 for (char_ref = e->ref; char_ref; char_ref = char_ref->next)
5007 {
5008 if (char_ref->type == REF_SUBSTRING || char_ref->type == REF_INQUIRY)
5009 break;
5010 if (char_ref->type == REF_COMPONENT)
5011 ts = &char_ref->u.c.component->ts;
5012 }
5013
5014 if (!char_ref || char_ref->type == REF_INQUIRY)
5015 return;
5016
5017 gcc_assert (char_ref->next == NULL);
5018
5019 if (e->ts.u.cl)
5020 {
5021 if (e->ts.u.cl->length)
5022 gfc_free_expr (e->ts.u.cl->length);
5023 else if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.dummy)
5024 return;
5025 }
5026
5027 e->ts.type = BT_CHARACTER;
5028 e->ts.kind = gfc_default_character_kind;
5029
5030 if (!e->ts.u.cl)
5031 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
5032
5033 if (char_ref->u.ss.start)
5034 start = gfc_copy_expr (char_ref->u.ss.start);
5035 else
5036 start = gfc_get_int_expr (gfc_charlen_int_kind, NULL, 1);
5037
5038 if (char_ref->u.ss.end)
5039 end = gfc_copy_expr (char_ref->u.ss.end);
5040 else if (e->expr_type == EXPR_VARIABLE)
5041 {
5042 if (!ts)
5043 ts = &e->symtree->n.sym->ts;
5044 end = gfc_copy_expr (ts->u.cl->length);
5045 }
5046 else
5047 end = NULL;
5048
5049 if (!start || !end)
5050 {
5051 gfc_free_expr (start);
5052 gfc_free_expr (end);
5053 return;
5054 }
5055
5056 /* Length = (end - start + 1).
5057 Check first whether it has a constant length. */
5058 if (gfc_dep_difference (end, start, &diff))
5059 {
5060 gfc_expr *len = gfc_get_constant_expr (BT_INTEGER, gfc_charlen_int_kind,
5061 &e->where);
5062
5063 mpz_add_ui (len->value.integer, diff, 1);
5064 mpz_clear (diff);
5065 e->ts.u.cl->length = len;
5066 /* The check for length < 0 is handled below */
5067 }
5068 else
5069 {
5070 e->ts.u.cl->length = gfc_subtract (end, start);
5071 e->ts.u.cl->length = gfc_add (e->ts.u.cl->length,
5072 gfc_get_int_expr (gfc_charlen_int_kind,
5073 NULL, 1));
5074 }
5075
5076 /* F2008, 6.4.1: Both the starting point and the ending point shall
5077 be within the range 1, 2, ..., n unless the starting point exceeds
5078 the ending point, in which case the substring has length zero. */
5079
5080 if (mpz_cmp_si (e->ts.u.cl->length->value.integer, 0) < 0)
5081 mpz_set_si (e->ts.u.cl->length->value.integer, 0);
5082
5083 e->ts.u.cl->length->ts.type = BT_INTEGER;
5084 e->ts.u.cl->length->ts.kind = gfc_charlen_int_kind;
5085
5086 /* Make sure that the length is simplified. */
5087 gfc_simplify_expr (e->ts.u.cl->length, 1);
5088 gfc_resolve_expr (e->ts.u.cl->length);
5089 }
5090
5091
5092 /* Resolve subtype references. */
5093
5094 static bool
5095 resolve_ref (gfc_expr *expr)
5096 {
5097 int current_part_dimension, n_components, seen_part_dimension;
5098 gfc_ref *ref, **prev;
5099 bool equal_length;
5100
5101 for (ref = expr->ref; ref; ref = ref->next)
5102 if (ref->type == REF_ARRAY && ref->u.ar.as == NULL)
5103 {
5104 find_array_spec (expr);
5105 break;
5106 }
5107
5108 for (prev = &expr->ref; *prev != NULL;
5109 prev = *prev == NULL ? prev : &(*prev)->next)
5110 switch ((*prev)->type)
5111 {
5112 case REF_ARRAY:
5113 if (!resolve_array_ref (&(*prev)->u.ar))
5114 return false;
5115 break;
5116
5117 case REF_COMPONENT:
5118 case REF_INQUIRY:
5119 break;
5120
5121 case REF_SUBSTRING:
5122 equal_length = false;
5123 if (!resolve_substring (*prev, &equal_length))
5124 return false;
5125
5126 if (expr->expr_type != EXPR_SUBSTRING && equal_length)
5127 {
5128 /* Remove the reference and move the charlen, if any. */
5129 ref = *prev;
5130 *prev = ref->next;
5131 ref->next = NULL;
5132 expr->ts.u.cl = ref->u.ss.length;
5133 ref->u.ss.length = NULL;
5134 gfc_free_ref_list (ref);
5135 }
5136 break;
5137 }
5138
5139 /* Check constraints on part references. */
5140
5141 current_part_dimension = 0;
5142 seen_part_dimension = 0;
5143 n_components = 0;
5144
5145 for (ref = expr->ref; ref; ref = ref->next)
5146 {
5147 switch (ref->type)
5148 {
5149 case REF_ARRAY:
5150 switch (ref->u.ar.type)
5151 {
5152 case AR_FULL:
5153 /* Coarray scalar. */
5154 if (ref->u.ar.as->rank == 0)
5155 {
5156 current_part_dimension = 0;
5157 break;
5158 }
5159 /* Fall through. */
5160 case AR_SECTION:
5161 current_part_dimension = 1;
5162 break;
5163
5164 case AR_ELEMENT:
5165 current_part_dimension = 0;
5166 break;
5167
5168 case AR_UNKNOWN:
5169 gfc_internal_error ("resolve_ref(): Bad array reference");
5170 }
5171
5172 break;
5173
5174 case REF_COMPONENT:
5175 if (current_part_dimension || seen_part_dimension)
5176 {
5177 /* F03:C614. */
5178 if (ref->u.c.component->attr.pointer
5179 || ref->u.c.component->attr.proc_pointer
5180 || (ref->u.c.component->ts.type == BT_CLASS
5181 && CLASS_DATA (ref->u.c.component)->attr.pointer))
5182 {
5183 gfc_error ("Component to the right of a part reference "
5184 "with nonzero rank must not have the POINTER "
5185 "attribute at %L", &expr->where);
5186 return false;
5187 }
5188 else if (ref->u.c.component->attr.allocatable
5189 || (ref->u.c.component->ts.type == BT_CLASS
5190 && CLASS_DATA (ref->u.c.component)->attr.allocatable))
5191
5192 {
5193 gfc_error ("Component to the right of a part reference "
5194 "with nonzero rank must not have the ALLOCATABLE "
5195 "attribute at %L", &expr->where);
5196 return false;
5197 }
5198 }
5199
5200 n_components++;
5201 break;
5202
5203 case REF_SUBSTRING:
5204 case REF_INQUIRY:
5205 break;
5206 }
5207
5208 if (((ref->type == REF_COMPONENT && n_components > 1)
5209 || ref->next == NULL)
5210 && current_part_dimension
5211 && seen_part_dimension)
5212 {
5213 gfc_error ("Two or more part references with nonzero rank must "
5214 "not be specified at %L", &expr->where);
5215 return false;
5216 }
5217
5218 if (ref->type == REF_COMPONENT)
5219 {
5220 if (current_part_dimension)
5221 seen_part_dimension = 1;
5222
5223 /* reset to make sure */
5224 current_part_dimension = 0;
5225 }
5226 }
5227
5228 return true;
5229 }
5230
5231
5232 /* Given an expression, determine its shape. This is easier than it sounds.
5233 Leaves the shape array NULL if it is not possible to determine the shape. */
5234
5235 static void
5236 expression_shape (gfc_expr *e)
5237 {
5238 mpz_t array[GFC_MAX_DIMENSIONS];
5239 int i;
5240
5241 if (e->rank <= 0 || e->shape != NULL)
5242 return;
5243
5244 for (i = 0; i < e->rank; i++)
5245 if (!gfc_array_dimen_size (e, i, &array[i]))
5246 goto fail;
5247
5248 e->shape = gfc_get_shape (e->rank);
5249
5250 memcpy (e->shape, array, e->rank * sizeof (mpz_t));
5251
5252 return;
5253
5254 fail:
5255 for (i--; i >= 0; i--)
5256 mpz_clear (array[i]);
5257 }
5258
5259
5260 /* Given a variable expression node, compute the rank of the expression by
5261 examining the base symbol and any reference structures it may have. */
5262
5263 void
5264 expression_rank (gfc_expr *e)
5265 {
5266 gfc_ref *ref;
5267 int i, rank;
5268
5269 /* Just to make sure, because EXPR_COMPCALL's also have an e->ref and that
5270 could lead to serious confusion... */
5271 gcc_assert (e->expr_type != EXPR_COMPCALL);
5272
5273 if (e->ref == NULL)
5274 {
5275 if (e->expr_type == EXPR_ARRAY)
5276 goto done;
5277 /* Constructors can have a rank different from one via RESHAPE(). */
5278
5279 if (e->symtree == NULL)
5280 {
5281 e->rank = 0;
5282 goto done;
5283 }
5284
5285 e->rank = (e->symtree->n.sym->as == NULL)
5286 ? 0 : e->symtree->n.sym->as->rank;
5287 goto done;
5288 }
5289
5290 rank = 0;
5291
5292 for (ref = e->ref; ref; ref = ref->next)
5293 {
5294 if (ref->type == REF_COMPONENT && ref->u.c.component->attr.proc_pointer
5295 && ref->u.c.component->attr.function && !ref->next)
5296 rank = ref->u.c.component->as ? ref->u.c.component->as->rank : 0;
5297
5298 if (ref->type != REF_ARRAY)
5299 continue;
5300
5301 if (ref->u.ar.type == AR_FULL)
5302 {
5303 rank = ref->u.ar.as->rank;
5304 break;
5305 }
5306
5307 if (ref->u.ar.type == AR_SECTION)
5308 {
5309 /* Figure out the rank of the section. */
5310 if (rank != 0)
5311 gfc_internal_error ("expression_rank(): Two array specs");
5312
5313 for (i = 0; i < ref->u.ar.dimen; i++)
5314 if (ref->u.ar.dimen_type[i] == DIMEN_RANGE
5315 || ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
5316 rank++;
5317
5318 break;
5319 }
5320 }
5321
5322 e->rank = rank;
5323
5324 done:
5325 expression_shape (e);
5326 }
5327
5328
5329 static void
5330 add_caf_get_intrinsic (gfc_expr *e)
5331 {
5332 gfc_expr *wrapper, *tmp_expr;
5333 gfc_ref *ref;
5334 int n;
5335
5336 for (ref = e->ref; ref; ref = ref->next)
5337 if (ref->type == REF_ARRAY && ref->u.ar.codimen > 0)
5338 break;
5339 if (ref == NULL)
5340 return;
5341
5342 for (n = ref->u.ar.dimen; n < ref->u.ar.dimen + ref->u.ar.codimen; n++)
5343 if (ref->u.ar.dimen_type[n] != DIMEN_ELEMENT)
5344 return;
5345
5346 tmp_expr = XCNEW (gfc_expr);
5347 *tmp_expr = *e;
5348 wrapper = gfc_build_intrinsic_call (gfc_current_ns, GFC_ISYM_CAF_GET,
5349 "caf_get", tmp_expr->where, 1, tmp_expr);
5350 wrapper->ts = e->ts;
5351 wrapper->rank = e->rank;
5352 if (e->rank)
5353 wrapper->shape = gfc_copy_shape (e->shape, e->rank);
5354 *e = *wrapper;
5355 free (wrapper);
5356 }
5357
5358
5359 static void
5360 remove_caf_get_intrinsic (gfc_expr *e)
5361 {
5362 gcc_assert (e->expr_type == EXPR_FUNCTION && e->value.function.isym
5363 && e->value.function.isym->id == GFC_ISYM_CAF_GET);
5364 gfc_expr *e2 = e->value.function.actual->expr;
5365 e->value.function.actual->expr = NULL;
5366 gfc_free_actual_arglist (e->value.function.actual);
5367 gfc_free_shape (&e->shape, e->rank);
5368 *e = *e2;
5369 free (e2);
5370 }
5371
5372
5373 /* Resolve a variable expression. */
5374
5375 static bool
5376 resolve_variable (gfc_expr *e)
5377 {
5378 gfc_symbol *sym;
5379 bool t;
5380
5381 t = true;
5382
5383 if (e->symtree == NULL)
5384 return false;
5385 sym = e->symtree->n.sym;
5386
5387 /* Use same check as for TYPE(*) below; this check has to be before TYPE(*)
5388 as ts.type is set to BT_ASSUMED in resolve_symbol. */
5389 if (sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
5390 {
5391 if (!actual_arg || inquiry_argument)
5392 {
5393 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may only "
5394 "be used as actual argument", sym->name, &e->where);
5395 return false;
5396 }
5397 }
5398 /* TS 29113, 407b. */
5399 else if (e->ts.type == BT_ASSUMED)
5400 {
5401 if (!actual_arg)
5402 {
5403 gfc_error ("Assumed-type variable %s at %L may only be used "
5404 "as actual argument", sym->name, &e->where);
5405 return false;
5406 }
5407 else if (inquiry_argument && !first_actual_arg)
5408 {
5409 /* FIXME: It doesn't work reliably as inquiry_argument is not set
5410 for all inquiry functions in resolve_function; the reason is
5411 that the function-name resolution happens too late in that
5412 function. */
5413 gfc_error ("Assumed-type variable %s at %L as actual argument to "
5414 "an inquiry function shall be the first argument",
5415 sym->name, &e->where);
5416 return false;
5417 }
5418 }
5419 /* TS 29113, C535b. */
5420 else if ((sym->ts.type == BT_CLASS && sym->attr.class_ok
5421 && CLASS_DATA (sym)->as
5422 && CLASS_DATA (sym)->as->type == AS_ASSUMED_RANK)
5423 || (sym->ts.type != BT_CLASS && sym->as
5424 && sym->as->type == AS_ASSUMED_RANK))
5425 {
5426 if (!actual_arg)
5427 {
5428 gfc_error ("Assumed-rank variable %s at %L may only be used as "
5429 "actual argument", sym->name, &e->where);
5430 return false;
5431 }
5432 else if (inquiry_argument && !first_actual_arg)
5433 {
5434 /* FIXME: It doesn't work reliably as inquiry_argument is not set
5435 for all inquiry functions in resolve_function; the reason is
5436 that the function-name resolution happens too late in that
5437 function. */
5438 gfc_error ("Assumed-rank variable %s at %L as actual argument "
5439 "to an inquiry function shall be the first argument",
5440 sym->name, &e->where);
5441 return false;
5442 }
5443 }
5444
5445 if ((sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK)) && e->ref
5446 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
5447 && e->ref->next == NULL))
5448 {
5449 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall not have "
5450 "a subobject reference", sym->name, &e->ref->u.ar.where);
5451 return false;
5452 }
5453 /* TS 29113, 407b. */
5454 else if (e->ts.type == BT_ASSUMED && e->ref
5455 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
5456 && e->ref->next == NULL))
5457 {
5458 gfc_error ("Assumed-type variable %s at %L shall not have a subobject "
5459 "reference", sym->name, &e->ref->u.ar.where);
5460 return false;
5461 }
5462
5463 /* TS 29113, C535b. */
5464 if (((sym->ts.type == BT_CLASS && sym->attr.class_ok
5465 && CLASS_DATA (sym)->as
5466 && CLASS_DATA (sym)->as->type == AS_ASSUMED_RANK)
5467 || (sym->ts.type != BT_CLASS && sym->as
5468 && sym->as->type == AS_ASSUMED_RANK))
5469 && e->ref
5470 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
5471 && e->ref->next == NULL))
5472 {
5473 gfc_error ("Assumed-rank variable %s at %L shall not have a subobject "
5474 "reference", sym->name, &e->ref->u.ar.where);
5475 return false;
5476 }
5477
5478 /* For variables that are used in an associate (target => object) where
5479 the object's basetype is array valued while the target is scalar,
5480 the ts' type of the component refs is still array valued, which
5481 can't be translated that way. */
5482 if (sym->assoc && e->rank == 0 && e->ref && sym->ts.type == BT_CLASS
5483 && sym->assoc->target && sym->assoc->target->ts.type == BT_CLASS
5484 && CLASS_DATA (sym->assoc->target)->as)
5485 {
5486 gfc_ref *ref = e->ref;
5487 while (ref)
5488 {
5489 switch (ref->type)
5490 {
5491 case REF_COMPONENT:
5492 ref->u.c.sym = sym->ts.u.derived;
5493 /* Stop the loop. */
5494 ref = NULL;
5495 break;
5496 default:
5497 ref = ref->next;
5498 break;
5499 }
5500 }
5501 }
5502
5503 /* If this is an associate-name, it may be parsed with an array reference
5504 in error even though the target is scalar. Fail directly in this case.
5505 TODO Understand why class scalar expressions must be excluded. */
5506 if (sym->assoc && !(sym->ts.type == BT_CLASS && e->rank == 0))
5507 {
5508 if (sym->ts.type == BT_CLASS)
5509 gfc_fix_class_refs (e);
5510 if (!sym->attr.dimension && e->ref && e->ref->type == REF_ARRAY)
5511 return false;
5512 else if (sym->attr.dimension && (!e->ref || e->ref->type != REF_ARRAY))
5513 {
5514 /* This can happen because the parser did not detect that the
5515 associate name is an array and the expression had no array
5516 part_ref. */
5517 gfc_ref *ref = gfc_get_ref ();
5518 ref->type = REF_ARRAY;
5519 ref->u.ar = *gfc_get_array_ref();
5520 ref->u.ar.type = AR_FULL;
5521 if (sym->as)
5522 {
5523 ref->u.ar.as = sym->as;
5524 ref->u.ar.dimen = sym->as->rank;
5525 }
5526 ref->next = e->ref;
5527 e->ref = ref;
5528
5529 }
5530 }
5531
5532 if (sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.generic)
5533 sym->ts.u.derived = gfc_find_dt_in_generic (sym->ts.u.derived);
5534
5535 /* On the other hand, the parser may not have known this is an array;
5536 in this case, we have to add a FULL reference. */
5537 if (sym->assoc && sym->attr.dimension && !e->ref)
5538 {
5539 e->ref = gfc_get_ref ();
5540 e->ref->type = REF_ARRAY;
5541 e->ref->u.ar.type = AR_FULL;
5542 e->ref->u.ar.dimen = 0;
5543 }
5544
5545 /* Like above, but for class types, where the checking whether an array
5546 ref is present is more complicated. Furthermore make sure not to add
5547 the full array ref to _vptr or _len refs. */
5548 if (sym->assoc && sym->ts.type == BT_CLASS
5549 && CLASS_DATA (sym)->attr.dimension
5550 && (e->ts.type != BT_DERIVED || !e->ts.u.derived->attr.vtype))
5551 {
5552 gfc_ref *ref, *newref;
5553
5554 newref = gfc_get_ref ();
5555 newref->type = REF_ARRAY;
5556 newref->u.ar.type = AR_FULL;
5557 newref->u.ar.dimen = 0;
5558 /* Because this is an associate var and the first ref either is a ref to
5559 the _data component or not, no traversal of the ref chain is
5560 needed. The array ref needs to be inserted after the _data ref,
5561 or when that is not present, which may happend for polymorphic
5562 types, then at the first position. */
5563 ref = e->ref;
5564 if (!ref)
5565 e->ref = newref;
5566 else if (ref->type == REF_COMPONENT
5567 && strcmp ("_data", ref->u.c.component->name) == 0)
5568 {
5569 if (!ref->next || ref->next->type != REF_ARRAY)
5570 {
5571 newref->next = ref->next;
5572 ref->next = newref;
5573 }
5574 else
5575 /* Array ref present already. */
5576 gfc_free_ref_list (newref);
5577 }
5578 else if (ref->type == REF_ARRAY)
5579 /* Array ref present already. */
5580 gfc_free_ref_list (newref);
5581 else
5582 {
5583 newref->next = ref;
5584 e->ref = newref;
5585 }
5586 }
5587
5588 if (e->ref && !resolve_ref (e))
5589 return false;
5590
5591 if (sym->attr.flavor == FL_PROCEDURE
5592 && (!sym->attr.function
5593 || (sym->attr.function && sym->result
5594 && sym->result->attr.proc_pointer
5595 && !sym->result->attr.function)))
5596 {
5597 e->ts.type = BT_PROCEDURE;
5598 goto resolve_procedure;
5599 }
5600
5601 if (sym->ts.type != BT_UNKNOWN)
5602 gfc_variable_attr (e, &e->ts);
5603 else if (sym->attr.flavor == FL_PROCEDURE
5604 && sym->attr.function && sym->result
5605 && sym->result->ts.type != BT_UNKNOWN
5606 && sym->result->attr.proc_pointer)
5607 e->ts = sym->result->ts;
5608 else
5609 {
5610 /* Must be a simple variable reference. */
5611 if (!gfc_set_default_type (sym, 1, sym->ns))
5612 return false;
5613 e->ts = sym->ts;
5614 }
5615
5616 if (check_assumed_size_reference (sym, e))
5617 return false;
5618
5619 /* Deal with forward references to entries during gfc_resolve_code, to
5620 satisfy, at least partially, 12.5.2.5. */
5621 if (gfc_current_ns->entries
5622 && current_entry_id == sym->entry_id
5623 && cs_base
5624 && cs_base->current
5625 && cs_base->current->op != EXEC_ENTRY)
5626 {
5627 gfc_entry_list *entry;
5628 gfc_formal_arglist *formal;
5629 int n;
5630 bool seen, saved_specification_expr;
5631
5632 /* If the symbol is a dummy... */
5633 if (sym->attr.dummy && sym->ns == gfc_current_ns)
5634 {
5635 entry = gfc_current_ns->entries;
5636 seen = false;
5637
5638 /* ...test if the symbol is a parameter of previous entries. */
5639 for (; entry && entry->id <= current_entry_id; entry = entry->next)
5640 for (formal = entry->sym->formal; formal; formal = formal->next)
5641 {
5642 if (formal->sym && sym->name == formal->sym->name)
5643 {
5644 seen = true;
5645 break;
5646 }
5647 }
5648
5649 /* If it has not been seen as a dummy, this is an error. */
5650 if (!seen)
5651 {
5652 if (specification_expr)
5653 gfc_error ("Variable %qs, used in a specification expression"
5654 ", is referenced at %L before the ENTRY statement "
5655 "in which it is a parameter",
5656 sym->name, &cs_base->current->loc);
5657 else
5658 gfc_error ("Variable %qs is used at %L before the ENTRY "
5659 "statement in which it is a parameter",
5660 sym->name, &cs_base->current->loc);
5661 t = false;
5662 }
5663 }
5664
5665 /* Now do the same check on the specification expressions. */
5666 saved_specification_expr = specification_expr;
5667 specification_expr = true;
5668 if (sym->ts.type == BT_CHARACTER
5669 && !gfc_resolve_expr (sym->ts.u.cl->length))
5670 t = false;
5671
5672 if (sym->as)
5673 for (n = 0; n < sym->as->rank; n++)
5674 {
5675 if (!gfc_resolve_expr (sym->as->lower[n]))
5676 t = false;
5677 if (!gfc_resolve_expr (sym->as->upper[n]))
5678 t = false;
5679 }
5680 specification_expr = saved_specification_expr;
5681
5682 if (t)
5683 /* Update the symbol's entry level. */
5684 sym->entry_id = current_entry_id + 1;
5685 }
5686
5687 /* If a symbol has been host_associated mark it. This is used latter,
5688 to identify if aliasing is possible via host association. */
5689 if (sym->attr.flavor == FL_VARIABLE
5690 && gfc_current_ns->parent
5691 && (gfc_current_ns->parent == sym->ns
5692 || (gfc_current_ns->parent->parent
5693 && gfc_current_ns->parent->parent == sym->ns)))
5694 sym->attr.host_assoc = 1;
5695
5696 if (gfc_current_ns->proc_name
5697 && sym->attr.dimension
5698 && (sym->ns != gfc_current_ns
5699 || sym->attr.use_assoc
5700 || sym->attr.in_common))
5701 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
5702
5703 resolve_procedure:
5704 if (t && !resolve_procedure_expression (e))
5705 t = false;
5706
5707 /* F2008, C617 and C1229. */
5708 if (!inquiry_argument && (e->ts.type == BT_CLASS || e->ts.type == BT_DERIVED)
5709 && gfc_is_coindexed (e))
5710 {
5711 gfc_ref *ref, *ref2 = NULL;
5712
5713 for (ref = e->ref; ref; ref = ref->next)
5714 {
5715 if (ref->type == REF_COMPONENT)
5716 ref2 = ref;
5717 if (ref->type == REF_ARRAY && ref->u.ar.codimen > 0)
5718 break;
5719 }
5720
5721 for ( ; ref; ref = ref->next)
5722 if (ref->type == REF_COMPONENT)
5723 break;
5724
5725 /* Expression itself is not coindexed object. */
5726 if (ref && e->ts.type == BT_CLASS)
5727 {
5728 gfc_error ("Polymorphic subobject of coindexed object at %L",
5729 &e->where);
5730 t = false;
5731 }
5732
5733 /* Expression itself is coindexed object. */
5734 if (ref == NULL)
5735 {
5736 gfc_component *c;
5737 c = ref2 ? ref2->u.c.component : e->symtree->n.sym->components;
5738 for ( ; c; c = c->next)
5739 if (c->attr.allocatable && c->ts.type == BT_CLASS)
5740 {
5741 gfc_error ("Coindexed object with polymorphic allocatable "
5742 "subcomponent at %L", &e->where);
5743 t = false;
5744 break;
5745 }
5746 }
5747 }
5748
5749 if (t)
5750 expression_rank (e);
5751
5752 if (t && flag_coarray == GFC_FCOARRAY_LIB && gfc_is_coindexed (e))
5753 add_caf_get_intrinsic (e);
5754
5755 /* Simplify cases where access to a parameter array results in a
5756 single constant. Suppress errors since those will have been
5757 issued before, as warnings. */
5758 if (e->rank == 0 && sym->as && sym->attr.flavor == FL_PARAMETER)
5759 {
5760 gfc_push_suppress_errors ();
5761 gfc_simplify_expr (e, 1);
5762 gfc_pop_suppress_errors ();
5763 }
5764
5765 return t;
5766 }
5767
5768
5769 /* Checks to see that the correct symbol has been host associated.
5770 The only situation where this arises is that in which a twice
5771 contained function is parsed after the host association is made.
5772 Therefore, on detecting this, change the symbol in the expression
5773 and convert the array reference into an actual arglist if the old
5774 symbol is a variable. */
5775 static bool
5776 check_host_association (gfc_expr *e)
5777 {
5778 gfc_symbol *sym, *old_sym;
5779 gfc_symtree *st;
5780 int n;
5781 gfc_ref *ref;
5782 gfc_actual_arglist *arg, *tail = NULL;
5783 bool retval = e->expr_type == EXPR_FUNCTION;
5784
5785 /* If the expression is the result of substitution in
5786 interface.c(gfc_extend_expr) because there is no way in
5787 which the host association can be wrong. */
5788 if (e->symtree == NULL
5789 || e->symtree->n.sym == NULL
5790 || e->user_operator)
5791 return retval;
5792
5793 old_sym = e->symtree->n.sym;
5794
5795 if (gfc_current_ns->parent
5796 && old_sym->ns != gfc_current_ns)
5797 {
5798 /* Use the 'USE' name so that renamed module symbols are
5799 correctly handled. */
5800 gfc_find_symbol (e->symtree->name, gfc_current_ns, 1, &sym);
5801
5802 if (sym && old_sym != sym
5803 && sym->ts.type == old_sym->ts.type
5804 && sym->attr.flavor == FL_PROCEDURE
5805 && sym->attr.contained)
5806 {
5807 /* Clear the shape, since it might not be valid. */
5808 gfc_free_shape (&e->shape, e->rank);
5809
5810 /* Give the expression the right symtree! */
5811 gfc_find_sym_tree (e->symtree->name, NULL, 1, &st);
5812 gcc_assert (st != NULL);
5813
5814 if (old_sym->attr.flavor == FL_PROCEDURE
5815 || e->expr_type == EXPR_FUNCTION)
5816 {
5817 /* Original was function so point to the new symbol, since
5818 the actual argument list is already attached to the
5819 expression. */
5820 e->value.function.esym = NULL;
5821 e->symtree = st;
5822 }
5823 else
5824 {
5825 /* Original was variable so convert array references into
5826 an actual arglist. This does not need any checking now
5827 since resolve_function will take care of it. */
5828 e->value.function.actual = NULL;
5829 e->expr_type = EXPR_FUNCTION;
5830 e->symtree = st;
5831
5832 /* Ambiguity will not arise if the array reference is not
5833 the last reference. */
5834 for (ref = e->ref; ref; ref = ref->next)
5835 if (ref->type == REF_ARRAY && ref->next == NULL)
5836 break;
5837
5838 gcc_assert (ref->type == REF_ARRAY);
5839
5840 /* Grab the start expressions from the array ref and
5841 copy them into actual arguments. */
5842 for (n = 0; n < ref->u.ar.dimen; n++)
5843 {
5844 arg = gfc_get_actual_arglist ();
5845 arg->expr = gfc_copy_expr (ref->u.ar.start[n]);
5846 if (e->value.function.actual == NULL)
5847 tail = e->value.function.actual = arg;
5848 else
5849 {
5850 tail->next = arg;
5851 tail = arg;
5852 }
5853 }
5854
5855 /* Dump the reference list and set the rank. */
5856 gfc_free_ref_list (e->ref);
5857 e->ref = NULL;
5858 e->rank = sym->as ? sym->as->rank : 0;
5859 }
5860
5861 gfc_resolve_expr (e);
5862 sym->refs++;
5863 }
5864 }
5865 /* This might have changed! */
5866 return e->expr_type == EXPR_FUNCTION;
5867 }
5868
5869
5870 static void
5871 gfc_resolve_character_operator (gfc_expr *e)
5872 {
5873 gfc_expr *op1 = e->value.op.op1;
5874 gfc_expr *op2 = e->value.op.op2;
5875 gfc_expr *e1 = NULL;
5876 gfc_expr *e2 = NULL;
5877
5878 gcc_assert (e->value.op.op == INTRINSIC_CONCAT);
5879
5880 if (op1->ts.u.cl && op1->ts.u.cl->length)
5881 e1 = gfc_copy_expr (op1->ts.u.cl->length);
5882 else if (op1->expr_type == EXPR_CONSTANT)
5883 e1 = gfc_get_int_expr (gfc_charlen_int_kind, NULL,
5884 op1->value.character.length);
5885
5886 if (op2->ts.u.cl && op2->ts.u.cl->length)
5887 e2 = gfc_copy_expr (op2->ts.u.cl->length);
5888 else if (op2->expr_type == EXPR_CONSTANT)
5889 e2 = gfc_get_int_expr (gfc_charlen_int_kind, NULL,
5890 op2->value.character.length);
5891
5892 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
5893
5894 if (!e1 || !e2)
5895 {
5896 gfc_free_expr (e1);
5897 gfc_free_expr (e2);
5898
5899 return;
5900 }
5901
5902 e->ts.u.cl->length = gfc_add (e1, e2);
5903 e->ts.u.cl->length->ts.type = BT_INTEGER;
5904 e->ts.u.cl->length->ts.kind = gfc_charlen_int_kind;
5905 gfc_simplify_expr (e->ts.u.cl->length, 0);
5906 gfc_resolve_expr (e->ts.u.cl->length);
5907
5908 return;
5909 }
5910
5911
5912 /* Ensure that an character expression has a charlen and, if possible, a
5913 length expression. */
5914
5915 static void
5916 fixup_charlen (gfc_expr *e)
5917 {
5918 /* The cases fall through so that changes in expression type and the need
5919 for multiple fixes are picked up. In all circumstances, a charlen should
5920 be available for the middle end to hang a backend_decl on. */
5921 switch (e->expr_type)
5922 {
5923 case EXPR_OP:
5924 gfc_resolve_character_operator (e);
5925 /* FALLTHRU */
5926
5927 case EXPR_ARRAY:
5928 if (e->expr_type == EXPR_ARRAY)
5929 gfc_resolve_character_array_constructor (e);
5930 /* FALLTHRU */
5931
5932 case EXPR_SUBSTRING:
5933 if (!e->ts.u.cl && e->ref)
5934 gfc_resolve_substring_charlen (e);
5935 /* FALLTHRU */
5936
5937 default:
5938 if (!e->ts.u.cl)
5939 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
5940
5941 break;
5942 }
5943 }
5944
5945
5946 /* Update an actual argument to include the passed-object for type-bound
5947 procedures at the right position. */
5948
5949 static gfc_actual_arglist*
5950 update_arglist_pass (gfc_actual_arglist* lst, gfc_expr* po, unsigned argpos,
5951 const char *name)
5952 {
5953 gcc_assert (argpos > 0);
5954
5955 if (argpos == 1)
5956 {
5957 gfc_actual_arglist* result;
5958
5959 result = gfc_get_actual_arglist ();
5960 result->expr = po;
5961 result->next = lst;
5962 if (name)
5963 result->name = name;
5964
5965 return result;
5966 }
5967
5968 if (lst)
5969 lst->next = update_arglist_pass (lst->next, po, argpos - 1, name);
5970 else
5971 lst = update_arglist_pass (NULL, po, argpos - 1, name);
5972 return lst;
5973 }
5974
5975
5976 /* Extract the passed-object from an EXPR_COMPCALL (a copy of it). */
5977
5978 static gfc_expr*
5979 extract_compcall_passed_object (gfc_expr* e)
5980 {
5981 gfc_expr* po;
5982
5983 if (e->expr_type == EXPR_UNKNOWN)
5984 {
5985 gfc_error ("Error in typebound call at %L",
5986 &e->where);
5987 return NULL;
5988 }
5989
5990 gcc_assert (e->expr_type == EXPR_COMPCALL);
5991
5992 if (e->value.compcall.base_object)
5993 po = gfc_copy_expr (e->value.compcall.base_object);
5994 else
5995 {
5996 po = gfc_get_expr ();
5997 po->expr_type = EXPR_VARIABLE;
5998 po->symtree = e->symtree;
5999 po->ref = gfc_copy_ref (e->ref);
6000 po->where = e->where;
6001 }
6002
6003 if (!gfc_resolve_expr (po))
6004 return NULL;
6005
6006 return po;
6007 }
6008
6009
6010 /* Update the arglist of an EXPR_COMPCALL expression to include the
6011 passed-object. */
6012
6013 static bool
6014 update_compcall_arglist (gfc_expr* e)
6015 {
6016 gfc_expr* po;
6017 gfc_typebound_proc* tbp;
6018
6019 tbp = e->value.compcall.tbp;
6020
6021 if (tbp->error)
6022 return false;
6023
6024 po = extract_compcall_passed_object (e);
6025 if (!po)
6026 return false;
6027
6028 if (tbp->nopass || e->value.compcall.ignore_pass)
6029 {
6030 gfc_free_expr (po);
6031 return true;
6032 }
6033
6034 if (tbp->pass_arg_num <= 0)
6035 return false;
6036
6037 e->value.compcall.actual = update_arglist_pass (e->value.compcall.actual, po,
6038 tbp->pass_arg_num,
6039 tbp->pass_arg);
6040
6041 return true;
6042 }
6043
6044
6045 /* Extract the passed object from a PPC call (a copy of it). */
6046
6047 static gfc_expr*
6048 extract_ppc_passed_object (gfc_expr *e)
6049 {
6050 gfc_expr *po;
6051 gfc_ref **ref;
6052
6053 po = gfc_get_expr ();
6054 po->expr_type = EXPR_VARIABLE;
6055 po->symtree = e->symtree;
6056 po->ref = gfc_copy_ref (e->ref);
6057 po->where = e->where;
6058
6059 /* Remove PPC reference. */
6060 ref = &po->ref;
6061 while ((*ref)->next)
6062 ref = &(*ref)->next;
6063 gfc_free_ref_list (*ref);
6064 *ref = NULL;
6065
6066 if (!gfc_resolve_expr (po))
6067 return NULL;
6068
6069 return po;
6070 }
6071
6072
6073 /* Update the actual arglist of a procedure pointer component to include the
6074 passed-object. */
6075
6076 static bool
6077 update_ppc_arglist (gfc_expr* e)
6078 {
6079 gfc_expr* po;
6080 gfc_component *ppc;
6081 gfc_typebound_proc* tb;
6082
6083 ppc = gfc_get_proc_ptr_comp (e);
6084 if (!ppc)
6085 return false;
6086
6087 tb = ppc->tb;
6088
6089 if (tb->error)
6090 return false;
6091 else if (tb->nopass)
6092 return true;
6093
6094 po = extract_ppc_passed_object (e);
6095 if (!po)
6096 return false;
6097
6098 /* F08:R739. */
6099 if (po->rank != 0)
6100 {
6101 gfc_error ("Passed-object at %L must be scalar", &e->where);
6102 return false;
6103 }
6104
6105 /* F08:C611. */
6106 if (po->ts.type == BT_DERIVED && po->ts.u.derived->attr.abstract)
6107 {
6108 gfc_error ("Base object for procedure-pointer component call at %L is of"
6109 " ABSTRACT type %qs", &e->where, po->ts.u.derived->name);
6110 return false;
6111 }
6112
6113 gcc_assert (tb->pass_arg_num > 0);
6114 e->value.compcall.actual = update_arglist_pass (e->value.compcall.actual, po,
6115 tb->pass_arg_num,
6116 tb->pass_arg);
6117
6118 return true;
6119 }
6120
6121
6122 /* Check that the object a TBP is called on is valid, i.e. it must not be
6123 of ABSTRACT type (as in subobject%abstract_parent%tbp()). */
6124
6125 static bool
6126 check_typebound_baseobject (gfc_expr* e)
6127 {
6128 gfc_expr* base;
6129 bool return_value = false;
6130
6131 base = extract_compcall_passed_object (e);
6132 if (!base)
6133 return false;
6134
6135 if (base->ts.type != BT_DERIVED && base->ts.type != BT_CLASS)
6136 {
6137 gfc_error ("Error in typebound call at %L", &e->where);
6138 goto cleanup;
6139 }
6140
6141 if (base->ts.type == BT_CLASS && !gfc_expr_attr (base).class_ok)
6142 return false;
6143
6144 /* F08:C611. */
6145 if (base->ts.type == BT_DERIVED && base->ts.u.derived->attr.abstract)
6146 {
6147 gfc_error ("Base object for type-bound procedure call at %L is of"
6148 " ABSTRACT type %qs", &e->where, base->ts.u.derived->name);
6149 goto cleanup;
6150 }
6151
6152 /* F08:C1230. If the procedure called is NOPASS,
6153 the base object must be scalar. */
6154 if (e->value.compcall.tbp->nopass && base->rank != 0)
6155 {
6156 gfc_error ("Base object for NOPASS type-bound procedure call at %L must"
6157 " be scalar", &e->where);
6158 goto cleanup;
6159 }
6160
6161 return_value = true;
6162
6163 cleanup:
6164 gfc_free_expr (base);
6165 return return_value;
6166 }
6167
6168
6169 /* Resolve a call to a type-bound procedure, either function or subroutine,
6170 statically from the data in an EXPR_COMPCALL expression. The adapted
6171 arglist and the target-procedure symtree are returned. */
6172
6173 static bool
6174 resolve_typebound_static (gfc_expr* e, gfc_symtree** target,
6175 gfc_actual_arglist** actual)
6176 {
6177 gcc_assert (e->expr_type == EXPR_COMPCALL);
6178 gcc_assert (!e->value.compcall.tbp->is_generic);
6179
6180 /* Update the actual arglist for PASS. */
6181 if (!update_compcall_arglist (e))
6182 return false;
6183
6184 *actual = e->value.compcall.actual;
6185 *target = e->value.compcall.tbp->u.specific;
6186
6187 gfc_free_ref_list (e->ref);
6188 e->ref = NULL;
6189 e->value.compcall.actual = NULL;
6190
6191 /* If we find a deferred typebound procedure, check for derived types
6192 that an overriding typebound procedure has not been missed. */
6193 if (e->value.compcall.name
6194 && !e->value.compcall.tbp->non_overridable
6195 && e->value.compcall.base_object
6196 && e->value.compcall.base_object->ts.type == BT_DERIVED)
6197 {
6198 gfc_symtree *st;
6199 gfc_symbol *derived;
6200
6201 /* Use the derived type of the base_object. */
6202 derived = e->value.compcall.base_object->ts.u.derived;
6203 st = NULL;
6204
6205 /* If necessary, go through the inheritance chain. */
6206 while (!st && derived)
6207 {
6208 /* Look for the typebound procedure 'name'. */
6209 if (derived->f2k_derived && derived->f2k_derived->tb_sym_root)
6210 st = gfc_find_symtree (derived->f2k_derived->tb_sym_root,
6211 e->value.compcall.name);
6212 if (!st)
6213 derived = gfc_get_derived_super_type (derived);
6214 }
6215
6216 /* Now find the specific name in the derived type namespace. */
6217 if (st && st->n.tb && st->n.tb->u.specific)
6218 gfc_find_sym_tree (st->n.tb->u.specific->name,
6219 derived->ns, 1, &st);
6220 if (st)
6221 *target = st;
6222 }
6223 return true;
6224 }
6225
6226
6227 /* Get the ultimate declared type from an expression. In addition,
6228 return the last class/derived type reference and the copy of the
6229 reference list. If check_types is set true, derived types are
6230 identified as well as class references. */
6231 static gfc_symbol*
6232 get_declared_from_expr (gfc_ref **class_ref, gfc_ref **new_ref,
6233 gfc_expr *e, bool check_types)
6234 {
6235 gfc_symbol *declared;
6236 gfc_ref *ref;
6237
6238 declared = NULL;
6239 if (class_ref)
6240 *class_ref = NULL;
6241 if (new_ref)
6242 *new_ref = gfc_copy_ref (e->ref);
6243
6244 for (ref = e->ref; ref; ref = ref->next)
6245 {
6246 if (ref->type != REF_COMPONENT)
6247 continue;
6248
6249 if ((ref->u.c.component->ts.type == BT_CLASS
6250 || (check_types && gfc_bt_struct (ref->u.c.component->ts.type)))
6251 && ref->u.c.component->attr.flavor != FL_PROCEDURE)
6252 {
6253 declared = ref->u.c.component->ts.u.derived;
6254 if (class_ref)
6255 *class_ref = ref;
6256 }
6257 }
6258
6259 if (declared == NULL)
6260 declared = e->symtree->n.sym->ts.u.derived;
6261
6262 return declared;
6263 }
6264
6265
6266 /* Given an EXPR_COMPCALL calling a GENERIC typebound procedure, figure out
6267 which of the specific bindings (if any) matches the arglist and transform
6268 the expression into a call of that binding. */
6269
6270 static bool
6271 resolve_typebound_generic_call (gfc_expr* e, const char **name)
6272 {
6273 gfc_typebound_proc* genproc;
6274 const char* genname;
6275 gfc_symtree *st;
6276 gfc_symbol *derived;
6277
6278 gcc_assert (e->expr_type == EXPR_COMPCALL);
6279 genname = e->value.compcall.name;
6280 genproc = e->value.compcall.tbp;
6281
6282 if (!genproc->is_generic)
6283 return true;
6284
6285 /* Try the bindings on this type and in the inheritance hierarchy. */
6286 for (; genproc; genproc = genproc->overridden)
6287 {
6288 gfc_tbp_generic* g;
6289
6290 gcc_assert (genproc->is_generic);
6291 for (g = genproc->u.generic; g; g = g->next)
6292 {
6293 gfc_symbol* target;
6294 gfc_actual_arglist* args;
6295 bool matches;
6296
6297 gcc_assert (g->specific);
6298
6299 if (g->specific->error)
6300 continue;
6301
6302 target = g->specific->u.specific->n.sym;
6303
6304 /* Get the right arglist by handling PASS/NOPASS. */
6305 args = gfc_copy_actual_arglist (e->value.compcall.actual);
6306 if (!g->specific->nopass)
6307 {
6308 gfc_expr* po;
6309 po = extract_compcall_passed_object (e);
6310 if (!po)
6311 {
6312 gfc_free_actual_arglist (args);
6313 return false;
6314 }
6315
6316 gcc_assert (g->specific->pass_arg_num > 0);
6317 gcc_assert (!g->specific->error);
6318 args = update_arglist_pass (args, po, g->specific->pass_arg_num,
6319 g->specific->pass_arg);
6320 }
6321 resolve_actual_arglist (args, target->attr.proc,
6322 is_external_proc (target)
6323 && gfc_sym_get_dummy_args (target) == NULL);
6324
6325 /* Check if this arglist matches the formal. */
6326 matches = gfc_arglist_matches_symbol (&args, target);
6327
6328 /* Clean up and break out of the loop if we've found it. */
6329 gfc_free_actual_arglist (args);
6330 if (matches)
6331 {
6332 e->value.compcall.tbp = g->specific;
6333 genname = g->specific_st->name;
6334 /* Pass along the name for CLASS methods, where the vtab
6335 procedure pointer component has to be referenced. */
6336 if (name)
6337 *name = genname;
6338 goto success;
6339 }
6340 }
6341 }
6342
6343 /* Nothing matching found! */
6344 gfc_error ("Found no matching specific binding for the call to the GENERIC"
6345 " %qs at %L", genname, &e->where);
6346 return false;
6347
6348 success:
6349 /* Make sure that we have the right specific instance for the name. */
6350 derived = get_declared_from_expr (NULL, NULL, e, true);
6351
6352 st = gfc_find_typebound_proc (derived, NULL, genname, true, &e->where);
6353 if (st)
6354 e->value.compcall.tbp = st->n.tb;
6355
6356 return true;
6357 }
6358
6359
6360 /* Resolve a call to a type-bound subroutine. */
6361
6362 static bool
6363 resolve_typebound_call (gfc_code* c, const char **name, bool *overridable)
6364 {
6365 gfc_actual_arglist* newactual;
6366 gfc_symtree* target;
6367
6368 /* Check that's really a SUBROUTINE. */
6369 if (!c->expr1->value.compcall.tbp->subroutine)
6370 {
6371 if (!c->expr1->value.compcall.tbp->is_generic
6372 && c->expr1->value.compcall.tbp->u.specific
6373 && c->expr1->value.compcall.tbp->u.specific->n.sym
6374 && c->expr1->value.compcall.tbp->u.specific->n.sym->attr.subroutine)
6375 c->expr1->value.compcall.tbp->subroutine = 1;
6376 else
6377 {
6378 gfc_error ("%qs at %L should be a SUBROUTINE",
6379 c->expr1->value.compcall.name, &c->loc);
6380 return false;
6381 }
6382 }
6383
6384 if (!check_typebound_baseobject (c->expr1))
6385 return false;
6386
6387 /* Pass along the name for CLASS methods, where the vtab
6388 procedure pointer component has to be referenced. */
6389 if (name)
6390 *name = c->expr1->value.compcall.name;
6391
6392 if (!resolve_typebound_generic_call (c->expr1, name))
6393 return false;
6394
6395 /* Pass along the NON_OVERRIDABLE attribute of the specific TBP. */
6396 if (overridable)
6397 *overridable = !c->expr1->value.compcall.tbp->non_overridable;
6398
6399 /* Transform into an ordinary EXEC_CALL for now. */
6400
6401 if (!resolve_typebound_static (c->expr1, &target, &newactual))
6402 return false;
6403
6404 c->ext.actual = newactual;
6405 c->symtree = target;
6406 c->op = (c->expr1->value.compcall.assign ? EXEC_ASSIGN_CALL : EXEC_CALL);
6407
6408 gcc_assert (!c->expr1->ref && !c->expr1->value.compcall.actual);
6409
6410 gfc_free_expr (c->expr1);
6411 c->expr1 = gfc_get_expr ();
6412 c->expr1->expr_type = EXPR_FUNCTION;
6413 c->expr1->symtree = target;
6414 c->expr1->where = c->loc;
6415
6416 return resolve_call (c);
6417 }
6418
6419
6420 /* Resolve a component-call expression. */
6421 static bool
6422 resolve_compcall (gfc_expr* e, const char **name)
6423 {
6424 gfc_actual_arglist* newactual;
6425 gfc_symtree* target;
6426
6427 /* Check that's really a FUNCTION. */
6428 if (!e->value.compcall.tbp->function)
6429 {
6430 gfc_error ("%qs at %L should be a FUNCTION",
6431 e->value.compcall.name, &e->where);
6432 return false;
6433 }
6434
6435 /* These must not be assign-calls! */
6436 gcc_assert (!e->value.compcall.assign);
6437
6438 if (!check_typebound_baseobject (e))
6439 return false;
6440
6441 /* Pass along the name for CLASS methods, where the vtab
6442 procedure pointer component has to be referenced. */
6443 if (name)
6444 *name = e->value.compcall.name;
6445
6446 if (!resolve_typebound_generic_call (e, name))
6447 return false;
6448 gcc_assert (!e->value.compcall.tbp->is_generic);
6449
6450 /* Take the rank from the function's symbol. */
6451 if (e->value.compcall.tbp->u.specific->n.sym->as)
6452 e->rank = e->value.compcall.tbp->u.specific->n.sym->as->rank;
6453
6454 /* For now, we simply transform it into an EXPR_FUNCTION call with the same
6455 arglist to the TBP's binding target. */
6456
6457 if (!resolve_typebound_static (e, &target, &newactual))
6458 return false;
6459
6460 e->value.function.actual = newactual;
6461 e->value.function.name = NULL;
6462 e->value.function.esym = target->n.sym;
6463 e->value.function.isym = NULL;
6464 e->symtree = target;
6465 e->ts = target->n.sym->ts;
6466 e->expr_type = EXPR_FUNCTION;
6467
6468 /* Resolution is not necessary if this is a class subroutine; this
6469 function only has to identify the specific proc. Resolution of
6470 the call will be done next in resolve_typebound_call. */
6471 return gfc_resolve_expr (e);
6472 }
6473
6474
6475 static bool resolve_fl_derived (gfc_symbol *sym);
6476
6477
6478 /* Resolve a typebound function, or 'method'. First separate all
6479 the non-CLASS references by calling resolve_compcall directly. */
6480
6481 static bool
6482 resolve_typebound_function (gfc_expr* e)
6483 {
6484 gfc_symbol *declared;
6485 gfc_component *c;
6486 gfc_ref *new_ref;
6487 gfc_ref *class_ref;
6488 gfc_symtree *st;
6489 const char *name;
6490 gfc_typespec ts;
6491 gfc_expr *expr;
6492 bool overridable;
6493
6494 st = e->symtree;
6495
6496 /* Deal with typebound operators for CLASS objects. */
6497 expr = e->value.compcall.base_object;
6498 overridable = !e->value.compcall.tbp->non_overridable;
6499 if (expr && expr->ts.type == BT_CLASS && e->value.compcall.name)
6500 {
6501 /* If the base_object is not a variable, the corresponding actual
6502 argument expression must be stored in e->base_expression so
6503 that the corresponding tree temporary can be used as the base
6504 object in gfc_conv_procedure_call. */
6505 if (expr->expr_type != EXPR_VARIABLE)
6506 {
6507 gfc_actual_arglist *args;
6508
6509 for (args= e->value.function.actual; args; args = args->next)
6510 {
6511 if (expr == args->expr)
6512 expr = args->expr;
6513 }
6514 }
6515
6516 /* Since the typebound operators are generic, we have to ensure
6517 that any delays in resolution are corrected and that the vtab
6518 is present. */
6519 ts = expr->ts;
6520 declared = ts.u.derived;
6521 c = gfc_find_component (declared, "_vptr", true, true, NULL);
6522 if (c->ts.u.derived == NULL)
6523 c->ts.u.derived = gfc_find_derived_vtab (declared);
6524
6525 if (!resolve_compcall (e, &name))
6526 return false;
6527
6528 /* Use the generic name if it is there. */
6529 name = name ? name : e->value.function.esym->name;
6530 e->symtree = expr->symtree;
6531 e->ref = gfc_copy_ref (expr->ref);
6532 get_declared_from_expr (&class_ref, NULL, e, false);
6533
6534 /* Trim away the extraneous references that emerge from nested
6535 use of interface.c (extend_expr). */
6536 if (class_ref && class_ref->next)
6537 {
6538 gfc_free_ref_list (class_ref->next);
6539 class_ref->next = NULL;
6540 }
6541 else if (e->ref && !class_ref && expr->ts.type != BT_CLASS)
6542 {
6543 gfc_free_ref_list (e->ref);
6544 e->ref = NULL;
6545 }
6546
6547 gfc_add_vptr_component (e);
6548 gfc_add_component_ref (e, name);
6549 e->value.function.esym = NULL;
6550 if (expr->expr_type != EXPR_VARIABLE)
6551 e->base_expr = expr;
6552 return true;
6553 }
6554
6555 if (st == NULL)
6556 return resolve_compcall (e, NULL);
6557
6558 if (!resolve_ref (e))
6559 return false;
6560
6561 /* Get the CLASS declared type. */
6562 declared = get_declared_from_expr (&class_ref, &new_ref, e, true);
6563
6564 if (!resolve_fl_derived (declared))
6565 return false;
6566
6567 /* Weed out cases of the ultimate component being a derived type. */
6568 if ((class_ref && gfc_bt_struct (class_ref->u.c.component->ts.type))
6569 || (!class_ref && st->n.sym->ts.type != BT_CLASS))
6570 {
6571 gfc_free_ref_list (new_ref);
6572 return resolve_compcall (e, NULL);
6573 }
6574
6575 c = gfc_find_component (declared, "_data", true, true, NULL);
6576
6577 /* Treat the call as if it is a typebound procedure, in order to roll
6578 out the correct name for the specific function. */
6579 if (!resolve_compcall (e, &name))
6580 {
6581 gfc_free_ref_list (new_ref);
6582 return false;
6583 }
6584 ts = e->ts;
6585
6586 if (overridable)
6587 {
6588 /* Convert the expression to a procedure pointer component call. */
6589 e->value.function.esym = NULL;
6590 e->symtree = st;
6591
6592 if (new_ref)
6593 e->ref = new_ref;
6594
6595 /* '_vptr' points to the vtab, which contains the procedure pointers. */
6596 gfc_add_vptr_component (e);
6597 gfc_add_component_ref (e, name);
6598
6599 /* Recover the typespec for the expression. This is really only
6600 necessary for generic procedures, where the additional call
6601 to gfc_add_component_ref seems to throw the collection of the
6602 correct typespec. */
6603 e->ts = ts;
6604 }
6605 else if (new_ref)
6606 gfc_free_ref_list (new_ref);
6607
6608 return true;
6609 }
6610
6611 /* Resolve a typebound subroutine, or 'method'. First separate all
6612 the non-CLASS references by calling resolve_typebound_call
6613 directly. */
6614
6615 static bool
6616 resolve_typebound_subroutine (gfc_code *code)
6617 {
6618 gfc_symbol *declared;
6619 gfc_component *c;
6620 gfc_ref *new_ref;
6621 gfc_ref *class_ref;
6622 gfc_symtree *st;
6623 const char *name;
6624 gfc_typespec ts;
6625 gfc_expr *expr;
6626 bool overridable;
6627
6628 st = code->expr1->symtree;
6629
6630 /* Deal with typebound operators for CLASS objects. */
6631 expr = code->expr1->value.compcall.base_object;
6632 overridable = !code->expr1->value.compcall.tbp->non_overridable;
6633 if (expr && expr->ts.type == BT_CLASS && code->expr1->value.compcall.name)
6634 {
6635 /* If the base_object is not a variable, the corresponding actual
6636 argument expression must be stored in e->base_expression so
6637 that the corresponding tree temporary can be used as the base
6638 object in gfc_conv_procedure_call. */
6639 if (expr->expr_type != EXPR_VARIABLE)
6640 {
6641 gfc_actual_arglist *args;
6642
6643 args= code->expr1->value.function.actual;
6644 for (; args; args = args->next)
6645 if (expr == args->expr)
6646 expr = args->expr;
6647 }
6648
6649 /* Since the typebound operators are generic, we have to ensure
6650 that any delays in resolution are corrected and that the vtab
6651 is present. */
6652 declared = expr->ts.u.derived;
6653 c = gfc_find_component (declared, "_vptr", true, true, NULL);
6654 if (c->ts.u.derived == NULL)
6655 c->ts.u.derived = gfc_find_derived_vtab (declared);
6656
6657 if (!resolve_typebound_call (code, &name, NULL))
6658 return false;
6659
6660 /* Use the generic name if it is there. */
6661 name = name ? name : code->expr1->value.function.esym->name;
6662 code->expr1->symtree = expr->symtree;
6663 code->expr1->ref = gfc_copy_ref (expr->ref);
6664
6665 /* Trim away the extraneous references that emerge from nested
6666 use of interface.c (extend_expr). */
6667 get_declared_from_expr (&class_ref, NULL, code->expr1, false);
6668 if (class_ref && class_ref->next)
6669 {
6670 gfc_free_ref_list (class_ref->next);
6671 class_ref->next = NULL;
6672 }
6673 else if (code->expr1->ref && !class_ref)
6674 {
6675 gfc_free_ref_list (code->expr1->ref);
6676 code->expr1->ref = NULL;
6677 }
6678
6679 /* Now use the procedure in the vtable. */
6680 gfc_add_vptr_component (code->expr1);
6681 gfc_add_component_ref (code->expr1, name);
6682 code->expr1->value.function.esym = NULL;
6683 if (expr->expr_type != EXPR_VARIABLE)
6684 code->expr1->base_expr = expr;
6685 return true;
6686 }
6687
6688 if (st == NULL)
6689 return resolve_typebound_call (code, NULL, NULL);
6690
6691 if (!resolve_ref (code->expr1))
6692 return false;
6693
6694 /* Get the CLASS declared type. */
6695 get_declared_from_expr (&class_ref, &new_ref, code->expr1, true);
6696
6697 /* Weed out cases of the ultimate component being a derived type. */
6698 if ((class_ref && gfc_bt_struct (class_ref->u.c.component->ts.type))
6699 || (!class_ref && st->n.sym->ts.type != BT_CLASS))
6700 {
6701 gfc_free_ref_list (new_ref);
6702 return resolve_typebound_call (code, NULL, NULL);
6703 }
6704
6705 if (!resolve_typebound_call (code, &name, &overridable))
6706 {
6707 gfc_free_ref_list (new_ref);
6708 return false;
6709 }
6710 ts = code->expr1->ts;
6711
6712 if (overridable)
6713 {
6714 /* Convert the expression to a procedure pointer component call. */
6715 code->expr1->value.function.esym = NULL;
6716 code->expr1->symtree = st;
6717
6718 if (new_ref)
6719 code->expr1->ref = new_ref;
6720
6721 /* '_vptr' points to the vtab, which contains the procedure pointers. */
6722 gfc_add_vptr_component (code->expr1);
6723 gfc_add_component_ref (code->expr1, name);
6724
6725 /* Recover the typespec for the expression. This is really only
6726 necessary for generic procedures, where the additional call
6727 to gfc_add_component_ref seems to throw the collection of the
6728 correct typespec. */
6729 code->expr1->ts = ts;
6730 }
6731 else if (new_ref)
6732 gfc_free_ref_list (new_ref);
6733
6734 return true;
6735 }
6736
6737
6738 /* Resolve a CALL to a Procedure Pointer Component (Subroutine). */
6739
6740 static bool
6741 resolve_ppc_call (gfc_code* c)
6742 {
6743 gfc_component *comp;
6744
6745 comp = gfc_get_proc_ptr_comp (c->expr1);
6746 gcc_assert (comp != NULL);
6747
6748 c->resolved_sym = c->expr1->symtree->n.sym;
6749 c->expr1->expr_type = EXPR_VARIABLE;
6750
6751 if (!comp->attr.subroutine)
6752 gfc_add_subroutine (&comp->attr, comp->name, &c->expr1->where);
6753
6754 if (!resolve_ref (c->expr1))
6755 return false;
6756
6757 if (!update_ppc_arglist (c->expr1))
6758 return false;
6759
6760 c->ext.actual = c->expr1->value.compcall.actual;
6761
6762 if (!resolve_actual_arglist (c->ext.actual, comp->attr.proc,
6763 !(comp->ts.interface
6764 && comp->ts.interface->formal)))
6765 return false;
6766
6767 if (!pure_subroutine (comp->ts.interface, comp->name, &c->expr1->where))
6768 return false;
6769
6770 gfc_ppc_use (comp, &c->expr1->value.compcall.actual, &c->expr1->where);
6771
6772 return true;
6773 }
6774
6775
6776 /* Resolve a Function Call to a Procedure Pointer Component (Function). */
6777
6778 static bool
6779 resolve_expr_ppc (gfc_expr* e)
6780 {
6781 gfc_component *comp;
6782
6783 comp = gfc_get_proc_ptr_comp (e);
6784 gcc_assert (comp != NULL);
6785
6786 /* Convert to EXPR_FUNCTION. */
6787 e->expr_type = EXPR_FUNCTION;
6788 e->value.function.isym = NULL;
6789 e->value.function.actual = e->value.compcall.actual;
6790 e->ts = comp->ts;
6791 if (comp->as != NULL)
6792 e->rank = comp->as->rank;
6793
6794 if (!comp->attr.function)
6795 gfc_add_function (&comp->attr, comp->name, &e->where);
6796
6797 if (!resolve_ref (e))
6798 return false;
6799
6800 if (!resolve_actual_arglist (e->value.function.actual, comp->attr.proc,
6801 !(comp->ts.interface
6802 && comp->ts.interface->formal)))
6803 return false;
6804
6805 if (!update_ppc_arglist (e))
6806 return false;
6807
6808 if (!check_pure_function(e))
6809 return false;
6810
6811 gfc_ppc_use (comp, &e->value.compcall.actual, &e->where);
6812
6813 return true;
6814 }
6815
6816
6817 static bool
6818 gfc_is_expandable_expr (gfc_expr *e)
6819 {
6820 gfc_constructor *con;
6821
6822 if (e->expr_type == EXPR_ARRAY)
6823 {
6824 /* Traverse the constructor looking for variables that are flavor
6825 parameter. Parameters must be expanded since they are fully used at
6826 compile time. */
6827 con = gfc_constructor_first (e->value.constructor);
6828 for (; con; con = gfc_constructor_next (con))
6829 {
6830 if (con->expr->expr_type == EXPR_VARIABLE
6831 && con->expr->symtree
6832 && (con->expr->symtree->n.sym->attr.flavor == FL_PARAMETER
6833 || con->expr->symtree->n.sym->attr.flavor == FL_VARIABLE))
6834 return true;
6835 if (con->expr->expr_type == EXPR_ARRAY
6836 && gfc_is_expandable_expr (con->expr))
6837 return true;
6838 }
6839 }
6840
6841 return false;
6842 }
6843
6844
6845 /* Sometimes variables in specification expressions of the result
6846 of module procedures in submodules wind up not being the 'real'
6847 dummy. Find this, if possible, in the namespace of the first
6848 formal argument. */
6849
6850 static void
6851 fixup_unique_dummy (gfc_expr *e)
6852 {
6853 gfc_symtree *st = NULL;
6854 gfc_symbol *s = NULL;
6855
6856 if (e->symtree->n.sym->ns->proc_name
6857 && e->symtree->n.sym->ns->proc_name->formal)
6858 s = e->symtree->n.sym->ns->proc_name->formal->sym;
6859
6860 if (s != NULL)
6861 st = gfc_find_symtree (s->ns->sym_root, e->symtree->n.sym->name);
6862
6863 if (st != NULL
6864 && st->n.sym != NULL
6865 && st->n.sym->attr.dummy)
6866 e->symtree = st;
6867 }
6868
6869 /* Resolve an expression. That is, make sure that types of operands agree
6870 with their operators, intrinsic operators are converted to function calls
6871 for overloaded types and unresolved function references are resolved. */
6872
6873 bool
6874 gfc_resolve_expr (gfc_expr *e)
6875 {
6876 bool t;
6877 bool inquiry_save, actual_arg_save, first_actual_arg_save;
6878
6879 if (e == NULL)
6880 return true;
6881
6882 /* inquiry_argument only applies to variables. */
6883 inquiry_save = inquiry_argument;
6884 actual_arg_save = actual_arg;
6885 first_actual_arg_save = first_actual_arg;
6886
6887 if (e->expr_type != EXPR_VARIABLE)
6888 {
6889 inquiry_argument = false;
6890 actual_arg = false;
6891 first_actual_arg = false;
6892 }
6893 else if (e->symtree != NULL
6894 && *e->symtree->name == '@'
6895 && e->symtree->n.sym->attr.dummy)
6896 {
6897 /* Deal with submodule specification expressions that are not
6898 found to be referenced in module.c(read_cleanup). */
6899 fixup_unique_dummy (e);
6900 }
6901
6902 switch (e->expr_type)
6903 {
6904 case EXPR_OP:
6905 t = resolve_operator (e);
6906 break;
6907
6908 case EXPR_FUNCTION:
6909 case EXPR_VARIABLE:
6910
6911 if (check_host_association (e))
6912 t = resolve_function (e);
6913 else
6914 t = resolve_variable (e);
6915
6916 if (e->ts.type == BT_CHARACTER && e->ts.u.cl == NULL && e->ref
6917 && e->ref->type != REF_SUBSTRING)
6918 gfc_resolve_substring_charlen (e);
6919
6920 break;
6921
6922 case EXPR_COMPCALL:
6923 t = resolve_typebound_function (e);
6924 break;
6925
6926 case EXPR_SUBSTRING:
6927 t = resolve_ref (e);
6928 break;
6929
6930 case EXPR_CONSTANT:
6931 case EXPR_NULL:
6932 t = true;
6933 break;
6934
6935 case EXPR_PPC:
6936 t = resolve_expr_ppc (e);
6937 break;
6938
6939 case EXPR_ARRAY:
6940 t = false;
6941 if (!resolve_ref (e))
6942 break;
6943
6944 t = gfc_resolve_array_constructor (e);
6945 /* Also try to expand a constructor. */
6946 if (t)
6947 {
6948 expression_rank (e);
6949 if (gfc_is_constant_expr (e) || gfc_is_expandable_expr (e))
6950 gfc_expand_constructor (e, false);
6951 }
6952
6953 /* This provides the opportunity for the length of constructors with
6954 character valued function elements to propagate the string length
6955 to the expression. */
6956 if (t && e->ts.type == BT_CHARACTER)
6957 {
6958 /* For efficiency, we call gfc_expand_constructor for BT_CHARACTER
6959 here rather then add a duplicate test for it above. */
6960 gfc_expand_constructor (e, false);
6961 t = gfc_resolve_character_array_constructor (e);
6962 }
6963
6964 break;
6965
6966 case EXPR_STRUCTURE:
6967 t = resolve_ref (e);
6968 if (!t)
6969 break;
6970
6971 t = resolve_structure_cons (e, 0);
6972 if (!t)
6973 break;
6974
6975 t = gfc_simplify_expr (e, 0);
6976 break;
6977
6978 default:
6979 gfc_internal_error ("gfc_resolve_expr(): Bad expression type");
6980 }
6981
6982 if (e->ts.type == BT_CHARACTER && t && !e->ts.u.cl)
6983 fixup_charlen (e);
6984
6985 inquiry_argument = inquiry_save;
6986 actual_arg = actual_arg_save;
6987 first_actual_arg = first_actual_arg_save;
6988
6989 return t;
6990 }
6991
6992
6993 /* Resolve an expression from an iterator. They must be scalar and have
6994 INTEGER or (optionally) REAL type. */
6995
6996 static bool
6997 gfc_resolve_iterator_expr (gfc_expr *expr, bool real_ok,
6998 const char *name_msgid)
6999 {
7000 if (!gfc_resolve_expr (expr))
7001 return false;
7002
7003 if (expr->rank != 0)
7004 {
7005 gfc_error ("%s at %L must be a scalar", _(name_msgid), &expr->where);
7006 return false;
7007 }
7008
7009 if (expr->ts.type != BT_INTEGER)
7010 {
7011 if (expr->ts.type == BT_REAL)
7012 {
7013 if (real_ok)
7014 return gfc_notify_std (GFC_STD_F95_DEL,
7015 "%s at %L must be integer",
7016 _(name_msgid), &expr->where);
7017 else
7018 {
7019 gfc_error ("%s at %L must be INTEGER", _(name_msgid),
7020 &expr->where);
7021 return false;
7022 }
7023 }
7024 else
7025 {
7026 gfc_error ("%s at %L must be INTEGER", _(name_msgid), &expr->where);
7027 return false;
7028 }
7029 }
7030 return true;
7031 }
7032
7033
7034 /* Resolve the expressions in an iterator structure. If REAL_OK is
7035 false allow only INTEGER type iterators, otherwise allow REAL types.
7036 Set own_scope to true for ac-implied-do and data-implied-do as those
7037 have a separate scope such that, e.g., a INTENT(IN) doesn't apply. */
7038
7039 bool
7040 gfc_resolve_iterator (gfc_iterator *iter, bool real_ok, bool own_scope)
7041 {
7042 if (!gfc_resolve_iterator_expr (iter->var, real_ok, "Loop variable"))
7043 return false;
7044
7045 if (!gfc_check_vardef_context (iter->var, false, false, own_scope,
7046 _("iterator variable")))
7047 return false;
7048
7049 if (!gfc_resolve_iterator_expr (iter->start, real_ok,
7050 "Start expression in DO loop"))
7051 return false;
7052
7053 if (!gfc_resolve_iterator_expr (iter->end, real_ok,
7054 "End expression in DO loop"))
7055 return false;
7056
7057 if (!gfc_resolve_iterator_expr (iter->step, real_ok,
7058 "Step expression in DO loop"))
7059 return false;
7060
7061 if (iter->step->expr_type == EXPR_CONSTANT)
7062 {
7063 if ((iter->step->ts.type == BT_INTEGER
7064 && mpz_cmp_ui (iter->step->value.integer, 0) == 0)
7065 || (iter->step->ts.type == BT_REAL
7066 && mpfr_sgn (iter->step->value.real) == 0))
7067 {
7068 gfc_error ("Step expression in DO loop at %L cannot be zero",
7069 &iter->step->where);
7070 return false;
7071 }
7072 }
7073
7074 /* Convert start, end, and step to the same type as var. */
7075 if (iter->start->ts.kind != iter->var->ts.kind
7076 || iter->start->ts.type != iter->var->ts.type)
7077 gfc_convert_type (iter->start, &iter->var->ts, 1);
7078
7079 if (iter->end->ts.kind != iter->var->ts.kind
7080 || iter->end->ts.type != iter->var->ts.type)
7081 gfc_convert_type (iter->end, &iter->var->ts, 1);
7082
7083 if (iter->step->ts.kind != iter->var->ts.kind
7084 || iter->step->ts.type != iter->var->ts.type)
7085 gfc_convert_type (iter->step, &iter->var->ts, 1);
7086
7087 if (iter->start->expr_type == EXPR_CONSTANT
7088 && iter->end->expr_type == EXPR_CONSTANT
7089 && iter->step->expr_type == EXPR_CONSTANT)
7090 {
7091 int sgn, cmp;
7092 if (iter->start->ts.type == BT_INTEGER)
7093 {
7094 sgn = mpz_cmp_ui (iter->step->value.integer, 0);
7095 cmp = mpz_cmp (iter->end->value.integer, iter->start->value.integer);
7096 }
7097 else
7098 {
7099 sgn = mpfr_sgn (iter->step->value.real);
7100 cmp = mpfr_cmp (iter->end->value.real, iter->start->value.real);
7101 }
7102 if (warn_zerotrip && ((sgn > 0 && cmp < 0) || (sgn < 0 && cmp > 0)))
7103 gfc_warning (OPT_Wzerotrip,
7104 "DO loop at %L will be executed zero times",
7105 &iter->step->where);
7106 }
7107
7108 if (iter->end->expr_type == EXPR_CONSTANT
7109 && iter->end->ts.type == BT_INTEGER
7110 && iter->step->expr_type == EXPR_CONSTANT
7111 && iter->step->ts.type == BT_INTEGER
7112 && (mpz_cmp_si (iter->step->value.integer, -1L) == 0
7113 || mpz_cmp_si (iter->step->value.integer, 1L) == 0))
7114 {
7115 bool is_step_positive = mpz_cmp_ui (iter->step->value.integer, 1) == 0;
7116 int k = gfc_validate_kind (BT_INTEGER, iter->end->ts.kind, false);
7117
7118 if (is_step_positive
7119 && mpz_cmp (iter->end->value.integer, gfc_integer_kinds[k].huge) == 0)
7120 gfc_warning (OPT_Wundefined_do_loop,
7121 "DO loop at %L is undefined as it overflows",
7122 &iter->step->where);
7123 else if (!is_step_positive
7124 && mpz_cmp (iter->end->value.integer,
7125 gfc_integer_kinds[k].min_int) == 0)
7126 gfc_warning (OPT_Wundefined_do_loop,
7127 "DO loop at %L is undefined as it underflows",
7128 &iter->step->where);
7129 }
7130
7131 return true;
7132 }
7133
7134
7135 /* Traversal function for find_forall_index. f == 2 signals that
7136 that variable itself is not to be checked - only the references. */
7137
7138 static bool
7139 forall_index (gfc_expr *expr, gfc_symbol *sym, int *f)
7140 {
7141 if (expr->expr_type != EXPR_VARIABLE)
7142 return false;
7143
7144 /* A scalar assignment */
7145 if (!expr->ref || *f == 1)
7146 {
7147 if (expr->symtree->n.sym == sym)
7148 return true;
7149 else
7150 return false;
7151 }
7152
7153 if (*f == 2)
7154 *f = 1;
7155 return false;
7156 }
7157
7158
7159 /* Check whether the FORALL index appears in the expression or not.
7160 Returns true if SYM is found in EXPR. */
7161
7162 bool
7163 find_forall_index (gfc_expr *expr, gfc_symbol *sym, int f)
7164 {
7165 if (gfc_traverse_expr (expr, sym, forall_index, f))
7166 return true;
7167 else
7168 return false;
7169 }
7170
7171
7172 /* Resolve a list of FORALL iterators. The FORALL index-name is constrained
7173 to be a scalar INTEGER variable. The subscripts and stride are scalar
7174 INTEGERs, and if stride is a constant it must be nonzero.
7175 Furthermore "A subscript or stride in a forall-triplet-spec shall
7176 not contain a reference to any index-name in the
7177 forall-triplet-spec-list in which it appears." (7.5.4.1) */
7178
7179 static void
7180 resolve_forall_iterators (gfc_forall_iterator *it)
7181 {
7182 gfc_forall_iterator *iter, *iter2;
7183
7184 for (iter = it; iter; iter = iter->next)
7185 {
7186 if (gfc_resolve_expr (iter->var)
7187 && (iter->var->ts.type != BT_INTEGER || iter->var->rank != 0))
7188 gfc_error ("FORALL index-name at %L must be a scalar INTEGER",
7189 &iter->var->where);
7190
7191 if (gfc_resolve_expr (iter->start)
7192 && (iter->start->ts.type != BT_INTEGER || iter->start->rank != 0))
7193 gfc_error ("FORALL start expression at %L must be a scalar INTEGER",
7194 &iter->start->where);
7195 if (iter->var->ts.kind != iter->start->ts.kind)
7196 gfc_convert_type (iter->start, &iter->var->ts, 1);
7197
7198 if (gfc_resolve_expr (iter->end)
7199 && (iter->end->ts.type != BT_INTEGER || iter->end->rank != 0))
7200 gfc_error ("FORALL end expression at %L must be a scalar INTEGER",
7201 &iter->end->where);
7202 if (iter->var->ts.kind != iter->end->ts.kind)
7203 gfc_convert_type (iter->end, &iter->var->ts, 1);
7204
7205 if (gfc_resolve_expr (iter->stride))
7206 {
7207 if (iter->stride->ts.type != BT_INTEGER || iter->stride->rank != 0)
7208 gfc_error ("FORALL stride expression at %L must be a scalar %s",
7209 &iter->stride->where, "INTEGER");
7210
7211 if (iter->stride->expr_type == EXPR_CONSTANT
7212 && mpz_cmp_ui (iter->stride->value.integer, 0) == 0)
7213 gfc_error ("FORALL stride expression at %L cannot be zero",
7214 &iter->stride->where);
7215 }
7216 if (iter->var->ts.kind != iter->stride->ts.kind)
7217 gfc_convert_type (iter->stride, &iter->var->ts, 1);
7218 }
7219
7220 for (iter = it; iter; iter = iter->next)
7221 for (iter2 = iter; iter2; iter2 = iter2->next)
7222 {
7223 if (find_forall_index (iter2->start, iter->var->symtree->n.sym, 0)
7224 || find_forall_index (iter2->end, iter->var->symtree->n.sym, 0)
7225 || find_forall_index (iter2->stride, iter->var->symtree->n.sym, 0))
7226 gfc_error ("FORALL index %qs may not appear in triplet "
7227 "specification at %L", iter->var->symtree->name,
7228 &iter2->start->where);
7229 }
7230 }
7231
7232
7233 /* Given a pointer to a symbol that is a derived type, see if it's
7234 inaccessible, i.e. if it's defined in another module and the components are
7235 PRIVATE. The search is recursive if necessary. Returns zero if no
7236 inaccessible components are found, nonzero otherwise. */
7237
7238 static int
7239 derived_inaccessible (gfc_symbol *sym)
7240 {
7241 gfc_component *c;
7242
7243 if (sym->attr.use_assoc && sym->attr.private_comp)
7244 return 1;
7245
7246 for (c = sym->components; c; c = c->next)
7247 {
7248 /* Prevent an infinite loop through this function. */
7249 if (c->ts.type == BT_DERIVED && c->attr.pointer
7250 && sym == c->ts.u.derived)
7251 continue;
7252
7253 if (c->ts.type == BT_DERIVED && derived_inaccessible (c->ts.u.derived))
7254 return 1;
7255 }
7256
7257 return 0;
7258 }
7259
7260
7261 /* Resolve the argument of a deallocate expression. The expression must be
7262 a pointer or a full array. */
7263
7264 static bool
7265 resolve_deallocate_expr (gfc_expr *e)
7266 {
7267 symbol_attribute attr;
7268 int allocatable, pointer;
7269 gfc_ref *ref;
7270 gfc_symbol *sym;
7271 gfc_component *c;
7272 bool unlimited;
7273
7274 if (!gfc_resolve_expr (e))
7275 return false;
7276
7277 if (e->expr_type != EXPR_VARIABLE)
7278 goto bad;
7279
7280 sym = e->symtree->n.sym;
7281 unlimited = UNLIMITED_POLY(sym);
7282
7283 if (sym->ts.type == BT_CLASS)
7284 {
7285 allocatable = CLASS_DATA (sym)->attr.allocatable;
7286 pointer = CLASS_DATA (sym)->attr.class_pointer;
7287 }
7288 else
7289 {
7290 allocatable = sym->attr.allocatable;
7291 pointer = sym->attr.pointer;
7292 }
7293 for (ref = e->ref; ref; ref = ref->next)
7294 {
7295 switch (ref->type)
7296 {
7297 case REF_ARRAY:
7298 if (ref->u.ar.type != AR_FULL
7299 && !(ref->u.ar.type == AR_ELEMENT && ref->u.ar.as->rank == 0
7300 && ref->u.ar.codimen && gfc_ref_this_image (ref)))
7301 allocatable = 0;
7302 break;
7303
7304 case REF_COMPONENT:
7305 c = ref->u.c.component;
7306 if (c->ts.type == BT_CLASS)
7307 {
7308 allocatable = CLASS_DATA (c)->attr.allocatable;
7309 pointer = CLASS_DATA (c)->attr.class_pointer;
7310 }
7311 else
7312 {
7313 allocatable = c->attr.allocatable;
7314 pointer = c->attr.pointer;
7315 }
7316 break;
7317
7318 case REF_SUBSTRING:
7319 case REF_INQUIRY:
7320 allocatable = 0;
7321 break;
7322 }
7323 }
7324
7325 attr = gfc_expr_attr (e);
7326
7327 if (allocatable == 0 && attr.pointer == 0 && !unlimited)
7328 {
7329 bad:
7330 gfc_error ("Allocate-object at %L must be ALLOCATABLE or a POINTER",
7331 &e->where);
7332 return false;
7333 }
7334
7335 /* F2008, C644. */
7336 if (gfc_is_coindexed (e))
7337 {
7338 gfc_error ("Coindexed allocatable object at %L", &e->where);
7339 return false;
7340 }
7341
7342 if (pointer
7343 && !gfc_check_vardef_context (e, true, true, false,
7344 _("DEALLOCATE object")))
7345 return false;
7346 if (!gfc_check_vardef_context (e, false, true, false,
7347 _("DEALLOCATE object")))
7348 return false;
7349
7350 return true;
7351 }
7352
7353
7354 /* Returns true if the expression e contains a reference to the symbol sym. */
7355 static bool
7356 sym_in_expr (gfc_expr *e, gfc_symbol *sym, int *f ATTRIBUTE_UNUSED)
7357 {
7358 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym == sym)
7359 return true;
7360
7361 return false;
7362 }
7363
7364 bool
7365 gfc_find_sym_in_expr (gfc_symbol *sym, gfc_expr *e)
7366 {
7367 return gfc_traverse_expr (e, sym, sym_in_expr, 0);
7368 }
7369
7370
7371 /* Given the expression node e for an allocatable/pointer of derived type to be
7372 allocated, get the expression node to be initialized afterwards (needed for
7373 derived types with default initializers, and derived types with allocatable
7374 components that need nullification.) */
7375
7376 gfc_expr *
7377 gfc_expr_to_initialize (gfc_expr *e)
7378 {
7379 gfc_expr *result;
7380 gfc_ref *ref;
7381 int i;
7382
7383 result = gfc_copy_expr (e);
7384
7385 /* Change the last array reference from AR_ELEMENT to AR_FULL. */
7386 for (ref = result->ref; ref; ref = ref->next)
7387 if (ref->type == REF_ARRAY && ref->next == NULL)
7388 {
7389 ref->u.ar.type = AR_FULL;
7390
7391 for (i = 0; i < ref->u.ar.dimen; i++)
7392 ref->u.ar.start[i] = ref->u.ar.end[i] = ref->u.ar.stride[i] = NULL;
7393
7394 break;
7395 }
7396
7397 gfc_free_shape (&result->shape, result->rank);
7398
7399 /* Recalculate rank, shape, etc. */
7400 gfc_resolve_expr (result);
7401 return result;
7402 }
7403
7404
7405 /* If the last ref of an expression is an array ref, return a copy of the
7406 expression with that one removed. Otherwise, a copy of the original
7407 expression. This is used for allocate-expressions and pointer assignment
7408 LHS, where there may be an array specification that needs to be stripped
7409 off when using gfc_check_vardef_context. */
7410
7411 static gfc_expr*
7412 remove_last_array_ref (gfc_expr* e)
7413 {
7414 gfc_expr* e2;
7415 gfc_ref** r;
7416
7417 e2 = gfc_copy_expr (e);
7418 for (r = &e2->ref; *r; r = &(*r)->next)
7419 if ((*r)->type == REF_ARRAY && !(*r)->next)
7420 {
7421 gfc_free_ref_list (*r);
7422 *r = NULL;
7423 break;
7424 }
7425
7426 return e2;
7427 }
7428
7429
7430 /* Used in resolve_allocate_expr to check that a allocation-object and
7431 a source-expr are conformable. This does not catch all possible
7432 cases; in particular a runtime checking is needed. */
7433
7434 static bool
7435 conformable_arrays (gfc_expr *e1, gfc_expr *e2)
7436 {
7437 gfc_ref *tail;
7438 for (tail = e2->ref; tail && tail->next; tail = tail->next);
7439
7440 /* First compare rank. */
7441 if ((tail && e1->rank != tail->u.ar.as->rank)
7442 || (!tail && e1->rank != e2->rank))
7443 {
7444 gfc_error ("Source-expr at %L must be scalar or have the "
7445 "same rank as the allocate-object at %L",
7446 &e1->where, &e2->where);
7447 return false;
7448 }
7449
7450 if (e1->shape)
7451 {
7452 int i;
7453 mpz_t s;
7454
7455 mpz_init (s);
7456
7457 for (i = 0; i < e1->rank; i++)
7458 {
7459 if (tail->u.ar.start[i] == NULL)
7460 break;
7461
7462 if (tail->u.ar.end[i])
7463 {
7464 mpz_set (s, tail->u.ar.end[i]->value.integer);
7465 mpz_sub (s, s, tail->u.ar.start[i]->value.integer);
7466 mpz_add_ui (s, s, 1);
7467 }
7468 else
7469 {
7470 mpz_set (s, tail->u.ar.start[i]->value.integer);
7471 }
7472
7473 if (mpz_cmp (e1->shape[i], s) != 0)
7474 {
7475 gfc_error ("Source-expr at %L and allocate-object at %L must "
7476 "have the same shape", &e1->where, &e2->where);
7477 mpz_clear (s);
7478 return false;
7479 }
7480 }
7481
7482 mpz_clear (s);
7483 }
7484
7485 return true;
7486 }
7487
7488
7489 /* Resolve the expression in an ALLOCATE statement, doing the additional
7490 checks to see whether the expression is OK or not. The expression must
7491 have a trailing array reference that gives the size of the array. */
7492
7493 static bool
7494 resolve_allocate_expr (gfc_expr *e, gfc_code *code, bool *array_alloc_wo_spec)
7495 {
7496 int i, pointer, allocatable, dimension, is_abstract;
7497 int codimension;
7498 bool coindexed;
7499 bool unlimited;
7500 symbol_attribute attr;
7501 gfc_ref *ref, *ref2;
7502 gfc_expr *e2;
7503 gfc_array_ref *ar;
7504 gfc_symbol *sym = NULL;
7505 gfc_alloc *a;
7506 gfc_component *c;
7507 bool t;
7508
7509 /* Mark the utmost array component as being in allocate to allow DIMEN_STAR
7510 checking of coarrays. */
7511 for (ref = e->ref; ref; ref = ref->next)
7512 if (ref->next == NULL)
7513 break;
7514
7515 if (ref && ref->type == REF_ARRAY)
7516 ref->u.ar.in_allocate = true;
7517
7518 if (!gfc_resolve_expr (e))
7519 goto failure;
7520
7521 /* Make sure the expression is allocatable or a pointer. If it is
7522 pointer, the next-to-last reference must be a pointer. */
7523
7524 ref2 = NULL;
7525 if (e->symtree)
7526 sym = e->symtree->n.sym;
7527
7528 /* Check whether ultimate component is abstract and CLASS. */
7529 is_abstract = 0;
7530
7531 /* Is the allocate-object unlimited polymorphic? */
7532 unlimited = UNLIMITED_POLY(e);
7533
7534 if (e->expr_type != EXPR_VARIABLE)
7535 {
7536 allocatable = 0;
7537 attr = gfc_expr_attr (e);
7538 pointer = attr.pointer;
7539 dimension = attr.dimension;
7540 codimension = attr.codimension;
7541 }
7542 else
7543 {
7544 if (sym->ts.type == BT_CLASS && CLASS_DATA (sym))
7545 {
7546 allocatable = CLASS_DATA (sym)->attr.allocatable;
7547 pointer = CLASS_DATA (sym)->attr.class_pointer;
7548 dimension = CLASS_DATA (sym)->attr.dimension;
7549 codimension = CLASS_DATA (sym)->attr.codimension;
7550 is_abstract = CLASS_DATA (sym)->attr.abstract;
7551 }
7552 else
7553 {
7554 allocatable = sym->attr.allocatable;
7555 pointer = sym->attr.pointer;
7556 dimension = sym->attr.dimension;
7557 codimension = sym->attr.codimension;
7558 }
7559
7560 coindexed = false;
7561
7562 for (ref = e->ref; ref; ref2 = ref, ref = ref->next)
7563 {
7564 switch (ref->type)
7565 {
7566 case REF_ARRAY:
7567 if (ref->u.ar.codimen > 0)
7568 {
7569 int n;
7570 for (n = ref->u.ar.dimen;
7571 n < ref->u.ar.dimen + ref->u.ar.codimen; n++)
7572 if (ref->u.ar.dimen_type[n] != DIMEN_THIS_IMAGE)
7573 {
7574 coindexed = true;
7575 break;
7576 }
7577 }
7578
7579 if (ref->next != NULL)
7580 pointer = 0;
7581 break;
7582
7583 case REF_COMPONENT:
7584 /* F2008, C644. */
7585 if (coindexed)
7586 {
7587 gfc_error ("Coindexed allocatable object at %L",
7588 &e->where);
7589 goto failure;
7590 }
7591
7592 c = ref->u.c.component;
7593 if (c->ts.type == BT_CLASS)
7594 {
7595 allocatable = CLASS_DATA (c)->attr.allocatable;
7596 pointer = CLASS_DATA (c)->attr.class_pointer;
7597 dimension = CLASS_DATA (c)->attr.dimension;
7598 codimension = CLASS_DATA (c)->attr.codimension;
7599 is_abstract = CLASS_DATA (c)->attr.abstract;
7600 }
7601 else
7602 {
7603 allocatable = c->attr.allocatable;
7604 pointer = c->attr.pointer;
7605 dimension = c->attr.dimension;
7606 codimension = c->attr.codimension;
7607 is_abstract = c->attr.abstract;
7608 }
7609 break;
7610
7611 case REF_SUBSTRING:
7612 case REF_INQUIRY:
7613 allocatable = 0;
7614 pointer = 0;
7615 break;
7616 }
7617 }
7618 }
7619
7620 /* Check for F08:C628. */
7621 if (allocatable == 0 && pointer == 0 && !unlimited)
7622 {
7623 gfc_error ("Allocate-object at %L must be ALLOCATABLE or a POINTER",
7624 &e->where);
7625 goto failure;
7626 }
7627
7628 /* Some checks for the SOURCE tag. */
7629 if (code->expr3)
7630 {
7631 /* Check F03:C631. */
7632 if (!gfc_type_compatible (&e->ts, &code->expr3->ts))
7633 {
7634 gfc_error ("Type of entity at %L is type incompatible with "
7635 "source-expr at %L", &e->where, &code->expr3->where);
7636 goto failure;
7637 }
7638
7639 /* Check F03:C632 and restriction following Note 6.18. */
7640 if (code->expr3->rank > 0 && !conformable_arrays (code->expr3, e))
7641 goto failure;
7642
7643 /* Check F03:C633. */
7644 if (code->expr3->ts.kind != e->ts.kind && !unlimited)
7645 {
7646 gfc_error ("The allocate-object at %L and the source-expr at %L "
7647 "shall have the same kind type parameter",
7648 &e->where, &code->expr3->where);
7649 goto failure;
7650 }
7651
7652 /* Check F2008, C642. */
7653 if (code->expr3->ts.type == BT_DERIVED
7654 && ((codimension && gfc_expr_attr (code->expr3).lock_comp)
7655 || (code->expr3->ts.u.derived->from_intmod
7656 == INTMOD_ISO_FORTRAN_ENV
7657 && code->expr3->ts.u.derived->intmod_sym_id
7658 == ISOFORTRAN_LOCK_TYPE)))
7659 {
7660 gfc_error ("The source-expr at %L shall neither be of type "
7661 "LOCK_TYPE nor have a LOCK_TYPE component if "
7662 "allocate-object at %L is a coarray",
7663 &code->expr3->where, &e->where);
7664 goto failure;
7665 }
7666
7667 /* Check TS18508, C702/C703. */
7668 if (code->expr3->ts.type == BT_DERIVED
7669 && ((codimension && gfc_expr_attr (code->expr3).event_comp)
7670 || (code->expr3->ts.u.derived->from_intmod
7671 == INTMOD_ISO_FORTRAN_ENV
7672 && code->expr3->ts.u.derived->intmod_sym_id
7673 == ISOFORTRAN_EVENT_TYPE)))
7674 {
7675 gfc_error ("The source-expr at %L shall neither be of type "
7676 "EVENT_TYPE nor have a EVENT_TYPE component if "
7677 "allocate-object at %L is a coarray",
7678 &code->expr3->where, &e->where);
7679 goto failure;
7680 }
7681 }
7682
7683 /* Check F08:C629. */
7684 if (is_abstract && code->ext.alloc.ts.type == BT_UNKNOWN
7685 && !code->expr3)
7686 {
7687 gcc_assert (e->ts.type == BT_CLASS);
7688 gfc_error ("Allocating %s of ABSTRACT base type at %L requires a "
7689 "type-spec or source-expr", sym->name, &e->where);
7690 goto failure;
7691 }
7692
7693 /* Check F08:C632. */
7694 if (code->ext.alloc.ts.type == BT_CHARACTER && !e->ts.deferred
7695 && !UNLIMITED_POLY (e))
7696 {
7697 int cmp;
7698
7699 if (!e->ts.u.cl->length)
7700 goto failure;
7701
7702 cmp = gfc_dep_compare_expr (e->ts.u.cl->length,
7703 code->ext.alloc.ts.u.cl->length);
7704 if (cmp == 1 || cmp == -1 || cmp == -3)
7705 {
7706 gfc_error ("Allocating %s at %L with type-spec requires the same "
7707 "character-length parameter as in the declaration",
7708 sym->name, &e->where);
7709 goto failure;
7710 }
7711 }
7712
7713 /* In the variable definition context checks, gfc_expr_attr is used
7714 on the expression. This is fooled by the array specification
7715 present in e, thus we have to eliminate that one temporarily. */
7716 e2 = remove_last_array_ref (e);
7717 t = true;
7718 if (t && pointer)
7719 t = gfc_check_vardef_context (e2, true, true, false,
7720 _("ALLOCATE object"));
7721 if (t)
7722 t = gfc_check_vardef_context (e2, false, true, false,
7723 _("ALLOCATE object"));
7724 gfc_free_expr (e2);
7725 if (!t)
7726 goto failure;
7727
7728 if (e->ts.type == BT_CLASS && CLASS_DATA (e)->attr.dimension
7729 && !code->expr3 && code->ext.alloc.ts.type == BT_DERIVED)
7730 {
7731 /* For class arrays, the initialization with SOURCE is done
7732 using _copy and trans_call. It is convenient to exploit that
7733 when the allocated type is different from the declared type but
7734 no SOURCE exists by setting expr3. */
7735 code->expr3 = gfc_default_initializer (&code->ext.alloc.ts);
7736 }
7737 else if (flag_coarray != GFC_FCOARRAY_LIB && e->ts.type == BT_DERIVED
7738 && e->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
7739 && e->ts.u.derived->intmod_sym_id == ISOFORTRAN_EVENT_TYPE)
7740 {
7741 /* We have to zero initialize the integer variable. */
7742 code->expr3 = gfc_get_int_expr (gfc_default_integer_kind, &e->where, 0);
7743 }
7744
7745 if (e->ts.type == BT_CLASS && !unlimited && !UNLIMITED_POLY (code->expr3))
7746 {
7747 /* Make sure the vtab symbol is present when
7748 the module variables are generated. */
7749 gfc_typespec ts = e->ts;
7750 if (code->expr3)
7751 ts = code->expr3->ts;
7752 else if (code->ext.alloc.ts.type == BT_DERIVED)
7753 ts = code->ext.alloc.ts;
7754
7755 /* Finding the vtab also publishes the type's symbol. Therefore this
7756 statement is necessary. */
7757 gfc_find_derived_vtab (ts.u.derived);
7758 }
7759 else if (unlimited && !UNLIMITED_POLY (code->expr3))
7760 {
7761 /* Again, make sure the vtab symbol is present when
7762 the module variables are generated. */
7763 gfc_typespec *ts = NULL;
7764 if (code->expr3)
7765 ts = &code->expr3->ts;
7766 else
7767 ts = &code->ext.alloc.ts;
7768
7769 gcc_assert (ts);
7770
7771 /* Finding the vtab also publishes the type's symbol. Therefore this
7772 statement is necessary. */
7773 gfc_find_vtab (ts);
7774 }
7775
7776 if (dimension == 0 && codimension == 0)
7777 goto success;
7778
7779 /* Make sure the last reference node is an array specification. */
7780
7781 if (!ref2 || ref2->type != REF_ARRAY || ref2->u.ar.type == AR_FULL
7782 || (dimension && ref2->u.ar.dimen == 0))
7783 {
7784 /* F08:C633. */
7785 if (code->expr3)
7786 {
7787 if (!gfc_notify_std (GFC_STD_F2008, "Array specification required "
7788 "in ALLOCATE statement at %L", &e->where))
7789 goto failure;
7790 if (code->expr3->rank != 0)
7791 *array_alloc_wo_spec = true;
7792 else
7793 {
7794 gfc_error ("Array specification or array-valued SOURCE= "
7795 "expression required in ALLOCATE statement at %L",
7796 &e->where);
7797 goto failure;
7798 }
7799 }
7800 else
7801 {
7802 gfc_error ("Array specification required in ALLOCATE statement "
7803 "at %L", &e->where);
7804 goto failure;
7805 }
7806 }
7807
7808 /* Make sure that the array section reference makes sense in the
7809 context of an ALLOCATE specification. */
7810
7811 ar = &ref2->u.ar;
7812
7813 if (codimension)
7814 for (i = ar->dimen; i < ar->dimen + ar->codimen; i++)
7815 {
7816 switch (ar->dimen_type[i])
7817 {
7818 case DIMEN_THIS_IMAGE:
7819 gfc_error ("Coarray specification required in ALLOCATE statement "
7820 "at %L", &e->where);
7821 goto failure;
7822
7823 case DIMEN_RANGE:
7824 if (ar->start[i] == 0 || ar->end[i] == 0)
7825 {
7826 /* If ar->stride[i] is NULL, we issued a previous error. */
7827 if (ar->stride[i] == NULL)
7828 gfc_error ("Bad array specification in ALLOCATE statement "
7829 "at %L", &e->where);
7830 goto failure;
7831 }
7832 else if (gfc_dep_compare_expr (ar->start[i], ar->end[i]) == 1)
7833 {
7834 gfc_error ("Upper cobound is less than lower cobound at %L",
7835 &ar->start[i]->where);
7836 goto failure;
7837 }
7838 break;
7839
7840 case DIMEN_ELEMENT:
7841 if (ar->start[i]->expr_type == EXPR_CONSTANT)
7842 {
7843 gcc_assert (ar->start[i]->ts.type == BT_INTEGER);
7844 if (mpz_cmp_si (ar->start[i]->value.integer, 1) < 0)
7845 {
7846 gfc_error ("Upper cobound is less than lower cobound "
7847 "of 1 at %L", &ar->start[i]->where);
7848 goto failure;
7849 }
7850 }
7851 break;
7852
7853 case DIMEN_STAR:
7854 break;
7855
7856 default:
7857 gfc_error ("Bad array specification in ALLOCATE statement at %L",
7858 &e->where);
7859 goto failure;
7860
7861 }
7862 }
7863 for (i = 0; i < ar->dimen; i++)
7864 {
7865 if (ar->type == AR_ELEMENT || ar->type == AR_FULL)
7866 goto check_symbols;
7867
7868 switch (ar->dimen_type[i])
7869 {
7870 case DIMEN_ELEMENT:
7871 break;
7872
7873 case DIMEN_RANGE:
7874 if (ar->start[i] != NULL
7875 && ar->end[i] != NULL
7876 && ar->stride[i] == NULL)
7877 break;
7878
7879 /* Fall through. */
7880
7881 case DIMEN_UNKNOWN:
7882 case DIMEN_VECTOR:
7883 case DIMEN_STAR:
7884 case DIMEN_THIS_IMAGE:
7885 gfc_error ("Bad array specification in ALLOCATE statement at %L",
7886 &e->where);
7887 goto failure;
7888 }
7889
7890 check_symbols:
7891 for (a = code->ext.alloc.list; a; a = a->next)
7892 {
7893 sym = a->expr->symtree->n.sym;
7894
7895 /* TODO - check derived type components. */
7896 if (gfc_bt_struct (sym->ts.type) || sym->ts.type == BT_CLASS)
7897 continue;
7898
7899 if ((ar->start[i] != NULL
7900 && gfc_find_sym_in_expr (sym, ar->start[i]))
7901 || (ar->end[i] != NULL
7902 && gfc_find_sym_in_expr (sym, ar->end[i])))
7903 {
7904 gfc_error ("%qs must not appear in the array specification at "
7905 "%L in the same ALLOCATE statement where it is "
7906 "itself allocated", sym->name, &ar->where);
7907 goto failure;
7908 }
7909 }
7910 }
7911
7912 for (i = ar->dimen; i < ar->codimen + ar->dimen; i++)
7913 {
7914 if (ar->dimen_type[i] == DIMEN_ELEMENT
7915 || ar->dimen_type[i] == DIMEN_RANGE)
7916 {
7917 if (i == (ar->dimen + ar->codimen - 1))
7918 {
7919 gfc_error ("Expected '*' in coindex specification in ALLOCATE "
7920 "statement at %L", &e->where);
7921 goto failure;
7922 }
7923 continue;
7924 }
7925
7926 if (ar->dimen_type[i] == DIMEN_STAR && i == (ar->dimen + ar->codimen - 1)
7927 && ar->stride[i] == NULL)
7928 break;
7929
7930 gfc_error ("Bad coarray specification in ALLOCATE statement at %L",
7931 &e->where);
7932 goto failure;
7933 }
7934
7935 success:
7936 return true;
7937
7938 failure:
7939 return false;
7940 }
7941
7942
7943 static void
7944 resolve_allocate_deallocate (gfc_code *code, const char *fcn)
7945 {
7946 gfc_expr *stat, *errmsg, *pe, *qe;
7947 gfc_alloc *a, *p, *q;
7948
7949 stat = code->expr1;
7950 errmsg = code->expr2;
7951
7952 /* Check the stat variable. */
7953 if (stat)
7954 {
7955 gfc_check_vardef_context (stat, false, false, false,
7956 _("STAT variable"));
7957
7958 if ((stat->ts.type != BT_INTEGER
7959 && !(stat->ref && (stat->ref->type == REF_ARRAY
7960 || stat->ref->type == REF_COMPONENT)))
7961 || stat->rank > 0)
7962 gfc_error ("Stat-variable at %L must be a scalar INTEGER "
7963 "variable", &stat->where);
7964
7965 for (p = code->ext.alloc.list; p; p = p->next)
7966 if (p->expr->symtree->n.sym->name == stat->symtree->n.sym->name)
7967 {
7968 gfc_ref *ref1, *ref2;
7969 bool found = true;
7970
7971 for (ref1 = p->expr->ref, ref2 = stat->ref; ref1 && ref2;
7972 ref1 = ref1->next, ref2 = ref2->next)
7973 {
7974 if (ref1->type != REF_COMPONENT || ref2->type != REF_COMPONENT)
7975 continue;
7976 if (ref1->u.c.component->name != ref2->u.c.component->name)
7977 {
7978 found = false;
7979 break;
7980 }
7981 }
7982
7983 if (found)
7984 {
7985 gfc_error ("Stat-variable at %L shall not be %sd within "
7986 "the same %s statement", &stat->where, fcn, fcn);
7987 break;
7988 }
7989 }
7990 }
7991
7992 /* Check the errmsg variable. */
7993 if (errmsg)
7994 {
7995 if (!stat)
7996 gfc_warning (0, "ERRMSG at %L is useless without a STAT tag",
7997 &errmsg->where);
7998
7999 gfc_check_vardef_context (errmsg, false, false, false,
8000 _("ERRMSG variable"));
8001
8002 /* F18:R928 alloc-opt is ERRMSG = errmsg-variable
8003 F18:R930 errmsg-variable is scalar-default-char-variable
8004 F18:R906 default-char-variable is variable
8005 F18:C906 default-char-variable shall be default character. */
8006 if ((errmsg->ts.type != BT_CHARACTER
8007 && !(errmsg->ref
8008 && (errmsg->ref->type == REF_ARRAY
8009 || errmsg->ref->type == REF_COMPONENT)))
8010 || errmsg->rank > 0
8011 || errmsg->ts.kind != gfc_default_character_kind)
8012 gfc_error ("ERRMSG variable at %L shall be a scalar default CHARACTER "
8013 "variable", &errmsg->where);
8014
8015 for (p = code->ext.alloc.list; p; p = p->next)
8016 if (p->expr->symtree->n.sym->name == errmsg->symtree->n.sym->name)
8017 {
8018 gfc_ref *ref1, *ref2;
8019 bool found = true;
8020
8021 for (ref1 = p->expr->ref, ref2 = errmsg->ref; ref1 && ref2;
8022 ref1 = ref1->next, ref2 = ref2->next)
8023 {
8024 if (ref1->type != REF_COMPONENT || ref2->type != REF_COMPONENT)
8025 continue;
8026 if (ref1->u.c.component->name != ref2->u.c.component->name)
8027 {
8028 found = false;
8029 break;
8030 }
8031 }
8032
8033 if (found)
8034 {
8035 gfc_error ("Errmsg-variable at %L shall not be %sd within "
8036 "the same %s statement", &errmsg->where, fcn, fcn);
8037 break;
8038 }
8039 }
8040 }
8041
8042 /* Check that an allocate-object appears only once in the statement. */
8043
8044 for (p = code->ext.alloc.list; p; p = p->next)
8045 {
8046 pe = p->expr;
8047 for (q = p->next; q; q = q->next)
8048 {
8049 qe = q->expr;
8050 if (pe->symtree->n.sym->name == qe->symtree->n.sym->name)
8051 {
8052 /* This is a potential collision. */
8053 gfc_ref *pr = pe->ref;
8054 gfc_ref *qr = qe->ref;
8055
8056 /* Follow the references until
8057 a) They start to differ, in which case there is no error;
8058 you can deallocate a%b and a%c in a single statement
8059 b) Both of them stop, which is an error
8060 c) One of them stops, which is also an error. */
8061 while (1)
8062 {
8063 if (pr == NULL && qr == NULL)
8064 {
8065 gfc_error ("Allocate-object at %L also appears at %L",
8066 &pe->where, &qe->where);
8067 break;
8068 }
8069 else if (pr != NULL && qr == NULL)
8070 {
8071 gfc_error ("Allocate-object at %L is subobject of"
8072 " object at %L", &pe->where, &qe->where);
8073 break;
8074 }
8075 else if (pr == NULL && qr != NULL)
8076 {
8077 gfc_error ("Allocate-object at %L is subobject of"
8078 " object at %L", &qe->where, &pe->where);
8079 break;
8080 }
8081 /* Here, pr != NULL && qr != NULL */
8082 gcc_assert(pr->type == qr->type);
8083 if (pr->type == REF_ARRAY)
8084 {
8085 /* Handle cases like allocate(v(3)%x(3), v(2)%x(3)),
8086 which are legal. */
8087 gcc_assert (qr->type == REF_ARRAY);
8088
8089 if (pr->next && qr->next)
8090 {
8091 int i;
8092 gfc_array_ref *par = &(pr->u.ar);
8093 gfc_array_ref *qar = &(qr->u.ar);
8094
8095 for (i=0; i<par->dimen; i++)
8096 {
8097 if ((par->start[i] != NULL
8098 || qar->start[i] != NULL)
8099 && gfc_dep_compare_expr (par->start[i],
8100 qar->start[i]) != 0)
8101 goto break_label;
8102 }
8103 }
8104 }
8105 else
8106 {
8107 if (pr->u.c.component->name != qr->u.c.component->name)
8108 break;
8109 }
8110
8111 pr = pr->next;
8112 qr = qr->next;
8113 }
8114 break_label:
8115 ;
8116 }
8117 }
8118 }
8119
8120 if (strcmp (fcn, "ALLOCATE") == 0)
8121 {
8122 bool arr_alloc_wo_spec = false;
8123
8124 /* Resolving the expr3 in the loop over all objects to allocate would
8125 execute loop invariant code for each loop item. Therefore do it just
8126 once here. */
8127 if (code->expr3 && code->expr3->mold
8128 && code->expr3->ts.type == BT_DERIVED)
8129 {
8130 /* Default initialization via MOLD (non-polymorphic). */
8131 gfc_expr *rhs = gfc_default_initializer (&code->expr3->ts);
8132 if (rhs != NULL)
8133 {
8134 gfc_resolve_expr (rhs);
8135 gfc_free_expr (code->expr3);
8136 code->expr3 = rhs;
8137 }
8138 }
8139 for (a = code->ext.alloc.list; a; a = a->next)
8140 resolve_allocate_expr (a->expr, code, &arr_alloc_wo_spec);
8141
8142 if (arr_alloc_wo_spec && code->expr3)
8143 {
8144 /* Mark the allocate to have to take the array specification
8145 from the expr3. */
8146 code->ext.alloc.arr_spec_from_expr3 = 1;
8147 }
8148 }
8149 else
8150 {
8151 for (a = code->ext.alloc.list; a; a = a->next)
8152 resolve_deallocate_expr (a->expr);
8153 }
8154 }
8155
8156
8157 /************ SELECT CASE resolution subroutines ************/
8158
8159 /* Callback function for our mergesort variant. Determines interval
8160 overlaps for CASEs. Return <0 if op1 < op2, 0 for overlap, >0 for
8161 op1 > op2. Assumes we're not dealing with the default case.
8162 We have op1 = (:L), (K:L) or (K:) and op2 = (:N), (M:N) or (M:).
8163 There are nine situations to check. */
8164
8165 static int
8166 compare_cases (const gfc_case *op1, const gfc_case *op2)
8167 {
8168 int retval;
8169
8170 if (op1->low == NULL) /* op1 = (:L) */
8171 {
8172 /* op2 = (:N), so overlap. */
8173 retval = 0;
8174 /* op2 = (M:) or (M:N), L < M */
8175 if (op2->low != NULL
8176 && gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
8177 retval = -1;
8178 }
8179 else if (op1->high == NULL) /* op1 = (K:) */
8180 {
8181 /* op2 = (M:), so overlap. */
8182 retval = 0;
8183 /* op2 = (:N) or (M:N), K > N */
8184 if (op2->high != NULL
8185 && gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
8186 retval = 1;
8187 }
8188 else /* op1 = (K:L) */
8189 {
8190 if (op2->low == NULL) /* op2 = (:N), K > N */
8191 retval = (gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
8192 ? 1 : 0;
8193 else if (op2->high == NULL) /* op2 = (M:), L < M */
8194 retval = (gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
8195 ? -1 : 0;
8196 else /* op2 = (M:N) */
8197 {
8198 retval = 0;
8199 /* L < M */
8200 if (gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
8201 retval = -1;
8202 /* K > N */
8203 else if (gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
8204 retval = 1;
8205 }
8206 }
8207
8208 return retval;
8209 }
8210
8211
8212 /* Merge-sort a double linked case list, detecting overlap in the
8213 process. LIST is the head of the double linked case list before it
8214 is sorted. Returns the head of the sorted list if we don't see any
8215 overlap, or NULL otherwise. */
8216
8217 static gfc_case *
8218 check_case_overlap (gfc_case *list)
8219 {
8220 gfc_case *p, *q, *e, *tail;
8221 int insize, nmerges, psize, qsize, cmp, overlap_seen;
8222
8223 /* If the passed list was empty, return immediately. */
8224 if (!list)
8225 return NULL;
8226
8227 overlap_seen = 0;
8228 insize = 1;
8229
8230 /* Loop unconditionally. The only exit from this loop is a return
8231 statement, when we've finished sorting the case list. */
8232 for (;;)
8233 {
8234 p = list;
8235 list = NULL;
8236 tail = NULL;
8237
8238 /* Count the number of merges we do in this pass. */
8239 nmerges = 0;
8240
8241 /* Loop while there exists a merge to be done. */
8242 while (p)
8243 {
8244 int i;
8245
8246 /* Count this merge. */
8247 nmerges++;
8248
8249 /* Cut the list in two pieces by stepping INSIZE places
8250 forward in the list, starting from P. */
8251 psize = 0;
8252 q = p;
8253 for (i = 0; i < insize; i++)
8254 {
8255 psize++;
8256 q = q->right;
8257 if (!q)
8258 break;
8259 }
8260 qsize = insize;
8261
8262 /* Now we have two lists. Merge them! */
8263 while (psize > 0 || (qsize > 0 && q != NULL))
8264 {
8265 /* See from which the next case to merge comes from. */
8266 if (psize == 0)
8267 {
8268 /* P is empty so the next case must come from Q. */
8269 e = q;
8270 q = q->right;
8271 qsize--;
8272 }
8273 else if (qsize == 0 || q == NULL)
8274 {
8275 /* Q is empty. */
8276 e = p;
8277 p = p->right;
8278 psize--;
8279 }
8280 else
8281 {
8282 cmp = compare_cases (p, q);
8283 if (cmp < 0)
8284 {
8285 /* The whole case range for P is less than the
8286 one for Q. */
8287 e = p;
8288 p = p->right;
8289 psize--;
8290 }
8291 else if (cmp > 0)
8292 {
8293 /* The whole case range for Q is greater than
8294 the case range for P. */
8295 e = q;
8296 q = q->right;
8297 qsize--;
8298 }
8299 else
8300 {
8301 /* The cases overlap, or they are the same
8302 element in the list. Either way, we must
8303 issue an error and get the next case from P. */
8304 /* FIXME: Sort P and Q by line number. */
8305 gfc_error ("CASE label at %L overlaps with CASE "
8306 "label at %L", &p->where, &q->where);
8307 overlap_seen = 1;
8308 e = p;
8309 p = p->right;
8310 psize--;
8311 }
8312 }
8313
8314 /* Add the next element to the merged list. */
8315 if (tail)
8316 tail->right = e;
8317 else
8318 list = e;
8319 e->left = tail;
8320 tail = e;
8321 }
8322
8323 /* P has now stepped INSIZE places along, and so has Q. So
8324 they're the same. */
8325 p = q;
8326 }
8327 tail->right = NULL;
8328
8329 /* If we have done only one merge or none at all, we've
8330 finished sorting the cases. */
8331 if (nmerges <= 1)
8332 {
8333 if (!overlap_seen)
8334 return list;
8335 else
8336 return NULL;
8337 }
8338
8339 /* Otherwise repeat, merging lists twice the size. */
8340 insize *= 2;
8341 }
8342 }
8343
8344
8345 /* Check to see if an expression is suitable for use in a CASE statement.
8346 Makes sure that all case expressions are scalar constants of the same
8347 type. Return false if anything is wrong. */
8348
8349 static bool
8350 validate_case_label_expr (gfc_expr *e, gfc_expr *case_expr)
8351 {
8352 if (e == NULL) return true;
8353
8354 if (e->ts.type != case_expr->ts.type)
8355 {
8356 gfc_error ("Expression in CASE statement at %L must be of type %s",
8357 &e->where, gfc_basic_typename (case_expr->ts.type));
8358 return false;
8359 }
8360
8361 /* C805 (R808) For a given case-construct, each case-value shall be of
8362 the same type as case-expr. For character type, length differences
8363 are allowed, but the kind type parameters shall be the same. */
8364
8365 if (case_expr->ts.type == BT_CHARACTER && e->ts.kind != case_expr->ts.kind)
8366 {
8367 gfc_error ("Expression in CASE statement at %L must be of kind %d",
8368 &e->where, case_expr->ts.kind);
8369 return false;
8370 }
8371
8372 /* Convert the case value kind to that of case expression kind,
8373 if needed */
8374
8375 if (e->ts.kind != case_expr->ts.kind)
8376 gfc_convert_type_warn (e, &case_expr->ts, 2, 0);
8377
8378 if (e->rank != 0)
8379 {
8380 gfc_error ("Expression in CASE statement at %L must be scalar",
8381 &e->where);
8382 return false;
8383 }
8384
8385 return true;
8386 }
8387
8388
8389 /* Given a completely parsed select statement, we:
8390
8391 - Validate all expressions and code within the SELECT.
8392 - Make sure that the selection expression is not of the wrong type.
8393 - Make sure that no case ranges overlap.
8394 - Eliminate unreachable cases and unreachable code resulting from
8395 removing case labels.
8396
8397 The standard does allow unreachable cases, e.g. CASE (5:3). But
8398 they are a hassle for code generation, and to prevent that, we just
8399 cut them out here. This is not necessary for overlapping cases
8400 because they are illegal and we never even try to generate code.
8401
8402 We have the additional caveat that a SELECT construct could have
8403 been a computed GOTO in the source code. Fortunately we can fairly
8404 easily work around that here: The case_expr for a "real" SELECT CASE
8405 is in code->expr1, but for a computed GOTO it is in code->expr2. All
8406 we have to do is make sure that the case_expr is a scalar integer
8407 expression. */
8408
8409 static void
8410 resolve_select (gfc_code *code, bool select_type)
8411 {
8412 gfc_code *body;
8413 gfc_expr *case_expr;
8414 gfc_case *cp, *default_case, *tail, *head;
8415 int seen_unreachable;
8416 int seen_logical;
8417 int ncases;
8418 bt type;
8419 bool t;
8420
8421 if (code->expr1 == NULL)
8422 {
8423 /* This was actually a computed GOTO statement. */
8424 case_expr = code->expr2;
8425 if (case_expr->ts.type != BT_INTEGER|| case_expr->rank != 0)
8426 gfc_error ("Selection expression in computed GOTO statement "
8427 "at %L must be a scalar integer expression",
8428 &case_expr->where);
8429
8430 /* Further checking is not necessary because this SELECT was built
8431 by the compiler, so it should always be OK. Just move the
8432 case_expr from expr2 to expr so that we can handle computed
8433 GOTOs as normal SELECTs from here on. */
8434 code->expr1 = code->expr2;
8435 code->expr2 = NULL;
8436 return;
8437 }
8438
8439 case_expr = code->expr1;
8440 type = case_expr->ts.type;
8441
8442 /* F08:C830. */
8443 if (type != BT_LOGICAL && type != BT_INTEGER && type != BT_CHARACTER)
8444 {
8445 gfc_error ("Argument of SELECT statement at %L cannot be %s",
8446 &case_expr->where, gfc_typename (&case_expr->ts));
8447
8448 /* Punt. Going on here just produce more garbage error messages. */
8449 return;
8450 }
8451
8452 /* F08:R842. */
8453 if (!select_type && case_expr->rank != 0)
8454 {
8455 gfc_error ("Argument of SELECT statement at %L must be a scalar "
8456 "expression", &case_expr->where);
8457
8458 /* Punt. */
8459 return;
8460 }
8461
8462 /* Raise a warning if an INTEGER case value exceeds the range of
8463 the case-expr. Later, all expressions will be promoted to the
8464 largest kind of all case-labels. */
8465
8466 if (type == BT_INTEGER)
8467 for (body = code->block; body; body = body->block)
8468 for (cp = body->ext.block.case_list; cp; cp = cp->next)
8469 {
8470 if (cp->low
8471 && gfc_check_integer_range (cp->low->value.integer,
8472 case_expr->ts.kind) != ARITH_OK)
8473 gfc_warning (0, "Expression in CASE statement at %L is "
8474 "not in the range of %s", &cp->low->where,
8475 gfc_typename (&case_expr->ts));
8476
8477 if (cp->high
8478 && cp->low != cp->high
8479 && gfc_check_integer_range (cp->high->value.integer,
8480 case_expr->ts.kind) != ARITH_OK)
8481 gfc_warning (0, "Expression in CASE statement at %L is "
8482 "not in the range of %s", &cp->high->where,
8483 gfc_typename (&case_expr->ts));
8484 }
8485
8486 /* PR 19168 has a long discussion concerning a mismatch of the kinds
8487 of the SELECT CASE expression and its CASE values. Walk the lists
8488 of case values, and if we find a mismatch, promote case_expr to
8489 the appropriate kind. */
8490
8491 if (type == BT_LOGICAL || type == BT_INTEGER)
8492 {
8493 for (body = code->block; body; body = body->block)
8494 {
8495 /* Walk the case label list. */
8496 for (cp = body->ext.block.case_list; cp; cp = cp->next)
8497 {
8498 /* Intercept the DEFAULT case. It does not have a kind. */
8499 if (cp->low == NULL && cp->high == NULL)
8500 continue;
8501
8502 /* Unreachable case ranges are discarded, so ignore. */
8503 if (cp->low != NULL && cp->high != NULL
8504 && cp->low != cp->high
8505 && gfc_compare_expr (cp->low, cp->high, INTRINSIC_GT) > 0)
8506 continue;
8507
8508 if (cp->low != NULL
8509 && case_expr->ts.kind != gfc_kind_max(case_expr, cp->low))
8510 gfc_convert_type_warn (case_expr, &cp->low->ts, 2, 0);
8511
8512 if (cp->high != NULL
8513 && case_expr->ts.kind != gfc_kind_max(case_expr, cp->high))
8514 gfc_convert_type_warn (case_expr, &cp->high->ts, 2, 0);
8515 }
8516 }
8517 }
8518
8519 /* Assume there is no DEFAULT case. */
8520 default_case = NULL;
8521 head = tail = NULL;
8522 ncases = 0;
8523 seen_logical = 0;
8524
8525 for (body = code->block; body; body = body->block)
8526 {
8527 /* Assume the CASE list is OK, and all CASE labels can be matched. */
8528 t = true;
8529 seen_unreachable = 0;
8530
8531 /* Walk the case label list, making sure that all case labels
8532 are legal. */
8533 for (cp = body->ext.block.case_list; cp; cp = cp->next)
8534 {
8535 /* Count the number of cases in the whole construct. */
8536 ncases++;
8537
8538 /* Intercept the DEFAULT case. */
8539 if (cp->low == NULL && cp->high == NULL)
8540 {
8541 if (default_case != NULL)
8542 {
8543 gfc_error ("The DEFAULT CASE at %L cannot be followed "
8544 "by a second DEFAULT CASE at %L",
8545 &default_case->where, &cp->where);
8546 t = false;
8547 break;
8548 }
8549 else
8550 {
8551 default_case = cp;
8552 continue;
8553 }
8554 }
8555
8556 /* Deal with single value cases and case ranges. Errors are
8557 issued from the validation function. */
8558 if (!validate_case_label_expr (cp->low, case_expr)
8559 || !validate_case_label_expr (cp->high, case_expr))
8560 {
8561 t = false;
8562 break;
8563 }
8564
8565 if (type == BT_LOGICAL
8566 && ((cp->low == NULL || cp->high == NULL)
8567 || cp->low != cp->high))
8568 {
8569 gfc_error ("Logical range in CASE statement at %L is not "
8570 "allowed", &cp->low->where);
8571 t = false;
8572 break;
8573 }
8574
8575 if (type == BT_LOGICAL && cp->low->expr_type == EXPR_CONSTANT)
8576 {
8577 int value;
8578 value = cp->low->value.logical == 0 ? 2 : 1;
8579 if (value & seen_logical)
8580 {
8581 gfc_error ("Constant logical value in CASE statement "
8582 "is repeated at %L",
8583 &cp->low->where);
8584 t = false;
8585 break;
8586 }
8587 seen_logical |= value;
8588 }
8589
8590 if (cp->low != NULL && cp->high != NULL
8591 && cp->low != cp->high
8592 && gfc_compare_expr (cp->low, cp->high, INTRINSIC_GT) > 0)
8593 {
8594 if (warn_surprising)
8595 gfc_warning (OPT_Wsurprising,
8596 "Range specification at %L can never be matched",
8597 &cp->where);
8598
8599 cp->unreachable = 1;
8600 seen_unreachable = 1;
8601 }
8602 else
8603 {
8604 /* If the case range can be matched, it can also overlap with
8605 other cases. To make sure it does not, we put it in a
8606 double linked list here. We sort that with a merge sort
8607 later on to detect any overlapping cases. */
8608 if (!head)
8609 {
8610 head = tail = cp;
8611 head->right = head->left = NULL;
8612 }
8613 else
8614 {
8615 tail->right = cp;
8616 tail->right->left = tail;
8617 tail = tail->right;
8618 tail->right = NULL;
8619 }
8620 }
8621 }
8622
8623 /* It there was a failure in the previous case label, give up
8624 for this case label list. Continue with the next block. */
8625 if (!t)
8626 continue;
8627
8628 /* See if any case labels that are unreachable have been seen.
8629 If so, we eliminate them. This is a bit of a kludge because
8630 the case lists for a single case statement (label) is a
8631 single forward linked lists. */
8632 if (seen_unreachable)
8633 {
8634 /* Advance until the first case in the list is reachable. */
8635 while (body->ext.block.case_list != NULL
8636 && body->ext.block.case_list->unreachable)
8637 {
8638 gfc_case *n = body->ext.block.case_list;
8639 body->ext.block.case_list = body->ext.block.case_list->next;
8640 n->next = NULL;
8641 gfc_free_case_list (n);
8642 }
8643
8644 /* Strip all other unreachable cases. */
8645 if (body->ext.block.case_list)
8646 {
8647 for (cp = body->ext.block.case_list; cp && cp->next; cp = cp->next)
8648 {
8649 if (cp->next->unreachable)
8650 {
8651 gfc_case *n = cp->next;
8652 cp->next = cp->next->next;
8653 n->next = NULL;
8654 gfc_free_case_list (n);
8655 }
8656 }
8657 }
8658 }
8659 }
8660
8661 /* See if there were overlapping cases. If the check returns NULL,
8662 there was overlap. In that case we don't do anything. If head
8663 is non-NULL, we prepend the DEFAULT case. The sorted list can
8664 then used during code generation for SELECT CASE constructs with
8665 a case expression of a CHARACTER type. */
8666 if (head)
8667 {
8668 head = check_case_overlap (head);
8669
8670 /* Prepend the default_case if it is there. */
8671 if (head != NULL && default_case)
8672 {
8673 default_case->left = NULL;
8674 default_case->right = head;
8675 head->left = default_case;
8676 }
8677 }
8678
8679 /* Eliminate dead blocks that may be the result if we've seen
8680 unreachable case labels for a block. */
8681 for (body = code; body && body->block; body = body->block)
8682 {
8683 if (body->block->ext.block.case_list == NULL)
8684 {
8685 /* Cut the unreachable block from the code chain. */
8686 gfc_code *c = body->block;
8687 body->block = c->block;
8688
8689 /* Kill the dead block, but not the blocks below it. */
8690 c->block = NULL;
8691 gfc_free_statements (c);
8692 }
8693 }
8694
8695 /* More than two cases is legal but insane for logical selects.
8696 Issue a warning for it. */
8697 if (warn_surprising && type == BT_LOGICAL && ncases > 2)
8698 gfc_warning (OPT_Wsurprising,
8699 "Logical SELECT CASE block at %L has more that two cases",
8700 &code->loc);
8701 }
8702
8703
8704 /* Check if a derived type is extensible. */
8705
8706 bool
8707 gfc_type_is_extensible (gfc_symbol *sym)
8708 {
8709 return !(sym->attr.is_bind_c || sym->attr.sequence
8710 || (sym->attr.is_class
8711 && sym->components->ts.u.derived->attr.unlimited_polymorphic));
8712 }
8713
8714
8715 static void
8716 resolve_types (gfc_namespace *ns);
8717
8718 /* Resolve an associate-name: Resolve target and ensure the type-spec is
8719 correct as well as possibly the array-spec. */
8720
8721 static void
8722 resolve_assoc_var (gfc_symbol* sym, bool resolve_target)
8723 {
8724 gfc_expr* target;
8725
8726 gcc_assert (sym->assoc);
8727 gcc_assert (sym->attr.flavor == FL_VARIABLE);
8728
8729 /* If this is for SELECT TYPE, the target may not yet be set. In that
8730 case, return. Resolution will be called later manually again when
8731 this is done. */
8732 target = sym->assoc->target;
8733 if (!target)
8734 return;
8735 gcc_assert (!sym->assoc->dangling);
8736
8737 if (resolve_target && !gfc_resolve_expr (target))
8738 return;
8739
8740 /* For variable targets, we get some attributes from the target. */
8741 if (target->expr_type == EXPR_VARIABLE)
8742 {
8743 gfc_symbol* tsym;
8744
8745 gcc_assert (target->symtree);
8746 tsym = target->symtree->n.sym;
8747
8748 sym->attr.asynchronous = tsym->attr.asynchronous;
8749 sym->attr.volatile_ = tsym->attr.volatile_;
8750
8751 sym->attr.target = tsym->attr.target
8752 || gfc_expr_attr (target).pointer;
8753 if (is_subref_array (target))
8754 sym->attr.subref_array_pointer = 1;
8755 }
8756
8757 if (target->expr_type == EXPR_NULL)
8758 {
8759 gfc_error ("Selector at %L cannot be NULL()", &target->where);
8760 return;
8761 }
8762 else if (target->ts.type == BT_UNKNOWN)
8763 {
8764 gfc_error ("Selector at %L has no type", &target->where);
8765 return;
8766 }
8767
8768 /* Get type if this was not already set. Note that it can be
8769 some other type than the target in case this is a SELECT TYPE
8770 selector! So we must not update when the type is already there. */
8771 if (sym->ts.type == BT_UNKNOWN)
8772 sym->ts = target->ts;
8773
8774 gcc_assert (sym->ts.type != BT_UNKNOWN);
8775
8776 /* See if this is a valid association-to-variable. */
8777 sym->assoc->variable = (target->expr_type == EXPR_VARIABLE
8778 && !gfc_has_vector_subscript (target));
8779
8780 /* Finally resolve if this is an array or not. */
8781 if (sym->attr.dimension && target->rank == 0)
8782 {
8783 /* primary.c makes the assumption that a reference to an associate
8784 name followed by a left parenthesis is an array reference. */
8785 if (sym->ts.type != BT_CHARACTER)
8786 gfc_error ("Associate-name %qs at %L is used as array",
8787 sym->name, &sym->declared_at);
8788 sym->attr.dimension = 0;
8789 return;
8790 }
8791
8792
8793 /* We cannot deal with class selectors that need temporaries. */
8794 if (target->ts.type == BT_CLASS
8795 && gfc_ref_needs_temporary_p (target->ref))
8796 {
8797 gfc_error ("CLASS selector at %L needs a temporary which is not "
8798 "yet implemented", &target->where);
8799 return;
8800 }
8801
8802 if (target->ts.type == BT_CLASS)
8803 gfc_fix_class_refs (target);
8804
8805 if (target->rank != 0)
8806 {
8807 gfc_array_spec *as;
8808 /* The rank may be incorrectly guessed at parsing, therefore make sure
8809 it is corrected now. */
8810 if (sym->ts.type != BT_CLASS && (!sym->as || sym->assoc->rankguessed))
8811 {
8812 if (!sym->as)
8813 sym->as = gfc_get_array_spec ();
8814 as = sym->as;
8815 as->rank = target->rank;
8816 as->type = AS_DEFERRED;
8817 as->corank = gfc_get_corank (target);
8818 sym->attr.dimension = 1;
8819 if (as->corank != 0)
8820 sym->attr.codimension = 1;
8821 }
8822 else if (sym->ts.type == BT_CLASS && (!CLASS_DATA (sym)->as || sym->assoc->rankguessed))
8823 {
8824 if (!CLASS_DATA (sym)->as)
8825 CLASS_DATA (sym)->as = gfc_get_array_spec ();
8826 as = CLASS_DATA (sym)->as;
8827 as->rank = target->rank;
8828 as->type = AS_DEFERRED;
8829 as->corank = gfc_get_corank (target);
8830 CLASS_DATA (sym)->attr.dimension = 1;
8831 if (as->corank != 0)
8832 CLASS_DATA (sym)->attr.codimension = 1;
8833 }
8834 }
8835 else
8836 {
8837 /* target's rank is 0, but the type of the sym is still array valued,
8838 which has to be corrected. */
8839 if (sym->ts.type == BT_CLASS
8840 && CLASS_DATA (sym) && CLASS_DATA (sym)->as)
8841 {
8842 gfc_array_spec *as;
8843 symbol_attribute attr;
8844 /* The associated variable's type is still the array type
8845 correct this now. */
8846 gfc_typespec *ts = &target->ts;
8847 gfc_ref *ref;
8848 gfc_component *c;
8849 for (ref = target->ref; ref != NULL; ref = ref->next)
8850 {
8851 switch (ref->type)
8852 {
8853 case REF_COMPONENT:
8854 ts = &ref->u.c.component->ts;
8855 break;
8856 case REF_ARRAY:
8857 if (ts->type == BT_CLASS)
8858 ts = &ts->u.derived->components->ts;
8859 break;
8860 default:
8861 break;
8862 }
8863 }
8864 /* Create a scalar instance of the current class type. Because the
8865 rank of a class array goes into its name, the type has to be
8866 rebuild. The alternative of (re-)setting just the attributes
8867 and as in the current type, destroys the type also in other
8868 places. */
8869 as = NULL;
8870 sym->ts = *ts;
8871 sym->ts.type = BT_CLASS;
8872 attr = CLASS_DATA (sym)->attr;
8873 attr.class_ok = 0;
8874 attr.associate_var = 1;
8875 attr.dimension = attr.codimension = 0;
8876 attr.class_pointer = 1;
8877 if (!gfc_build_class_symbol (&sym->ts, &attr, &as))
8878 gcc_unreachable ();
8879 /* Make sure the _vptr is set. */
8880 c = gfc_find_component (sym->ts.u.derived, "_vptr", true, true, NULL);
8881 if (c->ts.u.derived == NULL)
8882 c->ts.u.derived = gfc_find_derived_vtab (sym->ts.u.derived);
8883 CLASS_DATA (sym)->attr.pointer = 1;
8884 CLASS_DATA (sym)->attr.class_pointer = 1;
8885 gfc_set_sym_referenced (sym->ts.u.derived);
8886 gfc_commit_symbol (sym->ts.u.derived);
8887 /* _vptr now has the _vtab in it, change it to the _vtype. */
8888 if (c->ts.u.derived->attr.vtab)
8889 c->ts.u.derived = c->ts.u.derived->ts.u.derived;
8890 c->ts.u.derived->ns->types_resolved = 0;
8891 resolve_types (c->ts.u.derived->ns);
8892 }
8893 }
8894
8895 /* Mark this as an associate variable. */
8896 sym->attr.associate_var = 1;
8897
8898 /* Fix up the type-spec for CHARACTER types. */
8899 if (sym->ts.type == BT_CHARACTER && !sym->attr.select_type_temporary)
8900 {
8901 if (!sym->ts.u.cl)
8902 sym->ts.u.cl = target->ts.u.cl;
8903
8904 if (sym->ts.deferred && target->expr_type == EXPR_VARIABLE
8905 && target->symtree->n.sym->attr.dummy
8906 && sym->ts.u.cl == target->ts.u.cl)
8907 {
8908 sym->ts.u.cl = gfc_new_charlen (sym->ns, NULL);
8909 sym->ts.deferred = 1;
8910 }
8911
8912 if (!sym->ts.u.cl->length
8913 && !sym->ts.deferred
8914 && target->expr_type == EXPR_CONSTANT)
8915 {
8916 sym->ts.u.cl->length =
8917 gfc_get_int_expr (gfc_charlen_int_kind, NULL,
8918 target->value.character.length);
8919 }
8920 else if ((!sym->ts.u.cl->length
8921 || sym->ts.u.cl->length->expr_type != EXPR_CONSTANT)
8922 && target->expr_type != EXPR_VARIABLE)
8923 {
8924 sym->ts.u.cl = gfc_new_charlen (sym->ns, NULL);
8925 sym->ts.deferred = 1;
8926
8927 /* This is reset in trans-stmt.c after the assignment
8928 of the target expression to the associate name. */
8929 sym->attr.allocatable = 1;
8930 }
8931 }
8932
8933 /* If the target is a good class object, so is the associate variable. */
8934 if (sym->ts.type == BT_CLASS && gfc_expr_attr (target).class_ok)
8935 sym->attr.class_ok = 1;
8936 }
8937
8938
8939 /* Ensure that SELECT TYPE expressions have the correct rank and a full
8940 array reference, where necessary. The symbols are artificial and so
8941 the dimension attribute and arrayspec can also be set. In addition,
8942 sometimes the expr1 arrives as BT_DERIVED, when the symbol is BT_CLASS.
8943 This is corrected here as well.*/
8944
8945 static void
8946 fixup_array_ref (gfc_expr **expr1, gfc_expr *expr2,
8947 int rank, gfc_ref *ref)
8948 {
8949 gfc_ref *nref = (*expr1)->ref;
8950 gfc_symbol *sym1 = (*expr1)->symtree->n.sym;
8951 gfc_symbol *sym2 = expr2 ? expr2->symtree->n.sym : NULL;
8952 (*expr1)->rank = rank;
8953 if (sym1->ts.type == BT_CLASS)
8954 {
8955 if ((*expr1)->ts.type != BT_CLASS)
8956 (*expr1)->ts = sym1->ts;
8957
8958 CLASS_DATA (sym1)->attr.dimension = 1;
8959 if (CLASS_DATA (sym1)->as == NULL && sym2)
8960 CLASS_DATA (sym1)->as
8961 = gfc_copy_array_spec (CLASS_DATA (sym2)->as);
8962 }
8963 else
8964 {
8965 sym1->attr.dimension = 1;
8966 if (sym1->as == NULL && sym2)
8967 sym1->as = gfc_copy_array_spec (sym2->as);
8968 }
8969
8970 for (; nref; nref = nref->next)
8971 if (nref->next == NULL)
8972 break;
8973
8974 if (ref && nref && nref->type != REF_ARRAY)
8975 nref->next = gfc_copy_ref (ref);
8976 else if (ref && !nref)
8977 (*expr1)->ref = gfc_copy_ref (ref);
8978 }
8979
8980
8981 static gfc_expr *
8982 build_loc_call (gfc_expr *sym_expr)
8983 {
8984 gfc_expr *loc_call;
8985 loc_call = gfc_get_expr ();
8986 loc_call->expr_type = EXPR_FUNCTION;
8987 gfc_get_sym_tree ("_loc", gfc_current_ns, &loc_call->symtree, false);
8988 loc_call->symtree->n.sym->attr.flavor = FL_PROCEDURE;
8989 loc_call->symtree->n.sym->attr.intrinsic = 1;
8990 loc_call->symtree->n.sym->result = loc_call->symtree->n.sym;
8991 gfc_commit_symbol (loc_call->symtree->n.sym);
8992 loc_call->ts.type = BT_INTEGER;
8993 loc_call->ts.kind = gfc_index_integer_kind;
8994 loc_call->value.function.isym = gfc_intrinsic_function_by_id (GFC_ISYM_LOC);
8995 loc_call->value.function.actual = gfc_get_actual_arglist ();
8996 loc_call->value.function.actual->expr = sym_expr;
8997 loc_call->where = sym_expr->where;
8998 return loc_call;
8999 }
9000
9001 /* Resolve a SELECT TYPE statement. */
9002
9003 static void
9004 resolve_select_type (gfc_code *code, gfc_namespace *old_ns)
9005 {
9006 gfc_symbol *selector_type;
9007 gfc_code *body, *new_st, *if_st, *tail;
9008 gfc_code *class_is = NULL, *default_case = NULL;
9009 gfc_case *c;
9010 gfc_symtree *st;
9011 char name[GFC_MAX_SYMBOL_LEN];
9012 gfc_namespace *ns;
9013 int error = 0;
9014 int rank = 0;
9015 gfc_ref* ref = NULL;
9016 gfc_expr *selector_expr = NULL;
9017
9018 ns = code->ext.block.ns;
9019 gfc_resolve (ns);
9020
9021 /* Check for F03:C813. */
9022 if (code->expr1->ts.type != BT_CLASS
9023 && !(code->expr2 && code->expr2->ts.type == BT_CLASS))
9024 {
9025 gfc_error ("Selector shall be polymorphic in SELECT TYPE statement "
9026 "at %L", &code->loc);
9027 return;
9028 }
9029
9030 if (!code->expr1->symtree->n.sym->attr.class_ok)
9031 return;
9032
9033 if (code->expr2)
9034 {
9035 gfc_ref *ref2 = NULL;
9036 for (ref = code->expr2->ref; ref != NULL; ref = ref->next)
9037 if (ref->type == REF_COMPONENT
9038 && ref->u.c.component->ts.type == BT_CLASS)
9039 ref2 = ref;
9040
9041 if (ref2)
9042 {
9043 if (code->expr1->symtree->n.sym->attr.untyped)
9044 code->expr1->symtree->n.sym->ts = ref2->u.c.component->ts;
9045 selector_type = CLASS_DATA (ref2->u.c.component)->ts.u.derived;
9046 }
9047 else
9048 {
9049 if (code->expr1->symtree->n.sym->attr.untyped)
9050 code->expr1->symtree->n.sym->ts = code->expr2->ts;
9051 selector_type = CLASS_DATA (code->expr2)->ts.u.derived;
9052 }
9053
9054 if (code->expr2->rank && CLASS_DATA (code->expr1)->as)
9055 CLASS_DATA (code->expr1)->as->rank = code->expr2->rank;
9056
9057 /* F2008: C803 The selector expression must not be coindexed. */
9058 if (gfc_is_coindexed (code->expr2))
9059 {
9060 gfc_error ("Selector at %L must not be coindexed",
9061 &code->expr2->where);
9062 return;
9063 }
9064
9065 }
9066 else
9067 {
9068 selector_type = CLASS_DATA (code->expr1)->ts.u.derived;
9069
9070 if (gfc_is_coindexed (code->expr1))
9071 {
9072 gfc_error ("Selector at %L must not be coindexed",
9073 &code->expr1->where);
9074 return;
9075 }
9076 }
9077
9078 /* Loop over TYPE IS / CLASS IS cases. */
9079 for (body = code->block; body; body = body->block)
9080 {
9081 c = body->ext.block.case_list;
9082
9083 if (!error)
9084 {
9085 /* Check for repeated cases. */
9086 for (tail = code->block; tail; tail = tail->block)
9087 {
9088 gfc_case *d = tail->ext.block.case_list;
9089 if (tail == body)
9090 break;
9091
9092 if (c->ts.type == d->ts.type
9093 && ((c->ts.type == BT_DERIVED
9094 && c->ts.u.derived && d->ts.u.derived
9095 && !strcmp (c->ts.u.derived->name,
9096 d->ts.u.derived->name))
9097 || c->ts.type == BT_UNKNOWN
9098 || (!(c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9099 && c->ts.kind == d->ts.kind)))
9100 {
9101 gfc_error ("TYPE IS at %L overlaps with TYPE IS at %L",
9102 &c->where, &d->where);
9103 return;
9104 }
9105 }
9106 }
9107
9108 /* Check F03:C815. */
9109 if ((c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9110 && !selector_type->attr.unlimited_polymorphic
9111 && !gfc_type_is_extensible (c->ts.u.derived))
9112 {
9113 gfc_error ("Derived type %qs at %L must be extensible",
9114 c->ts.u.derived->name, &c->where);
9115 error++;
9116 continue;
9117 }
9118
9119 /* Check F03:C816. */
9120 if (c->ts.type != BT_UNKNOWN && !selector_type->attr.unlimited_polymorphic
9121 && ((c->ts.type != BT_DERIVED && c->ts.type != BT_CLASS)
9122 || !gfc_type_is_extension_of (selector_type, c->ts.u.derived)))
9123 {
9124 if (c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9125 gfc_error ("Derived type %qs at %L must be an extension of %qs",
9126 c->ts.u.derived->name, &c->where, selector_type->name);
9127 else
9128 gfc_error ("Unexpected intrinsic type %qs at %L",
9129 gfc_basic_typename (c->ts.type), &c->where);
9130 error++;
9131 continue;
9132 }
9133
9134 /* Check F03:C814. */
9135 if (c->ts.type == BT_CHARACTER
9136 && (c->ts.u.cl->length != NULL || c->ts.deferred))
9137 {
9138 gfc_error ("The type-spec at %L shall specify that each length "
9139 "type parameter is assumed", &c->where);
9140 error++;
9141 continue;
9142 }
9143
9144 /* Intercept the DEFAULT case. */
9145 if (c->ts.type == BT_UNKNOWN)
9146 {
9147 /* Check F03:C818. */
9148 if (default_case)
9149 {
9150 gfc_error ("The DEFAULT CASE at %L cannot be followed "
9151 "by a second DEFAULT CASE at %L",
9152 &default_case->ext.block.case_list->where, &c->where);
9153 error++;
9154 continue;
9155 }
9156
9157 default_case = body;
9158 }
9159 }
9160
9161 if (error > 0)
9162 return;
9163
9164 /* Transform SELECT TYPE statement to BLOCK and associate selector to
9165 target if present. If there are any EXIT statements referring to the
9166 SELECT TYPE construct, this is no problem because the gfc_code
9167 reference stays the same and EXIT is equally possible from the BLOCK
9168 it is changed to. */
9169 code->op = EXEC_BLOCK;
9170 if (code->expr2)
9171 {
9172 gfc_association_list* assoc;
9173
9174 assoc = gfc_get_association_list ();
9175 assoc->st = code->expr1->symtree;
9176 assoc->target = gfc_copy_expr (code->expr2);
9177 assoc->target->where = code->expr2->where;
9178 /* assoc->variable will be set by resolve_assoc_var. */
9179
9180 code->ext.block.assoc = assoc;
9181 code->expr1->symtree->n.sym->assoc = assoc;
9182
9183 resolve_assoc_var (code->expr1->symtree->n.sym, false);
9184 }
9185 else
9186 code->ext.block.assoc = NULL;
9187
9188 /* Ensure that the selector rank and arrayspec are available to
9189 correct expressions in which they might be missing. */
9190 if (code->expr2 && code->expr2->rank)
9191 {
9192 rank = code->expr2->rank;
9193 for (ref = code->expr2->ref; ref; ref = ref->next)
9194 if (ref->next == NULL)
9195 break;
9196 if (ref && ref->type == REF_ARRAY)
9197 ref = gfc_copy_ref (ref);
9198
9199 /* Fixup expr1 if necessary. */
9200 if (rank)
9201 fixup_array_ref (&code->expr1, code->expr2, rank, ref);
9202 }
9203 else if (code->expr1->rank)
9204 {
9205 rank = code->expr1->rank;
9206 for (ref = code->expr1->ref; ref; ref = ref->next)
9207 if (ref->next == NULL)
9208 break;
9209 if (ref && ref->type == REF_ARRAY)
9210 ref = gfc_copy_ref (ref);
9211 }
9212
9213 /* Add EXEC_SELECT to switch on type. */
9214 new_st = gfc_get_code (code->op);
9215 new_st->expr1 = code->expr1;
9216 new_st->expr2 = code->expr2;
9217 new_st->block = code->block;
9218 code->expr1 = code->expr2 = NULL;
9219 code->block = NULL;
9220 if (!ns->code)
9221 ns->code = new_st;
9222 else
9223 ns->code->next = new_st;
9224 code = new_st;
9225 code->op = EXEC_SELECT_TYPE;
9226
9227 /* Use the intrinsic LOC function to generate an integer expression
9228 for the vtable of the selector. Note that the rank of the selector
9229 expression has to be set to zero. */
9230 gfc_add_vptr_component (code->expr1);
9231 code->expr1->rank = 0;
9232 code->expr1 = build_loc_call (code->expr1);
9233 selector_expr = code->expr1->value.function.actual->expr;
9234
9235 /* Loop over TYPE IS / CLASS IS cases. */
9236 for (body = code->block; body; body = body->block)
9237 {
9238 gfc_symbol *vtab;
9239 gfc_expr *e;
9240 c = body->ext.block.case_list;
9241
9242 /* Generate an index integer expression for address of the
9243 TYPE/CLASS vtable and store it in c->low. The hash expression
9244 is stored in c->high and is used to resolve intrinsic cases. */
9245 if (c->ts.type != BT_UNKNOWN)
9246 {
9247 if (c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9248 {
9249 vtab = gfc_find_derived_vtab (c->ts.u.derived);
9250 gcc_assert (vtab);
9251 c->high = gfc_get_int_expr (gfc_integer_4_kind, NULL,
9252 c->ts.u.derived->hash_value);
9253 }
9254 else
9255 {
9256 vtab = gfc_find_vtab (&c->ts);
9257 gcc_assert (vtab && CLASS_DATA (vtab)->initializer);
9258 e = CLASS_DATA (vtab)->initializer;
9259 c->high = gfc_copy_expr (e);
9260 if (c->high->ts.kind != gfc_integer_4_kind)
9261 {
9262 gfc_typespec ts;
9263 ts.kind = gfc_integer_4_kind;
9264 ts.type = BT_INTEGER;
9265 gfc_convert_type_warn (c->high, &ts, 2, 0);
9266 }
9267 }
9268
9269 e = gfc_lval_expr_from_sym (vtab);
9270 c->low = build_loc_call (e);
9271 }
9272 else
9273 continue;
9274
9275 /* Associate temporary to selector. This should only be done
9276 when this case is actually true, so build a new ASSOCIATE
9277 that does precisely this here (instead of using the
9278 'global' one). */
9279
9280 if (c->ts.type == BT_CLASS)
9281 sprintf (name, "__tmp_class_%s", c->ts.u.derived->name);
9282 else if (c->ts.type == BT_DERIVED)
9283 sprintf (name, "__tmp_type_%s", c->ts.u.derived->name);
9284 else if (c->ts.type == BT_CHARACTER)
9285 {
9286 HOST_WIDE_INT charlen = 0;
9287 if (c->ts.u.cl && c->ts.u.cl->length
9288 && c->ts.u.cl->length->expr_type == EXPR_CONSTANT)
9289 charlen = gfc_mpz_get_hwi (c->ts.u.cl->length->value.integer);
9290 snprintf (name, sizeof (name),
9291 "__tmp_%s_" HOST_WIDE_INT_PRINT_DEC "_%d",
9292 gfc_basic_typename (c->ts.type), charlen, c->ts.kind);
9293 }
9294 else
9295 sprintf (name, "__tmp_%s_%d", gfc_basic_typename (c->ts.type),
9296 c->ts.kind);
9297
9298 st = gfc_find_symtree (ns->sym_root, name);
9299 gcc_assert (st->n.sym->assoc);
9300 st->n.sym->assoc->target = gfc_get_variable_expr (selector_expr->symtree);
9301 st->n.sym->assoc->target->where = selector_expr->where;
9302 if (c->ts.type != BT_CLASS && c->ts.type != BT_UNKNOWN)
9303 {
9304 gfc_add_data_component (st->n.sym->assoc->target);
9305 /* Fixup the target expression if necessary. */
9306 if (rank)
9307 fixup_array_ref (&st->n.sym->assoc->target, NULL, rank, ref);
9308 }
9309
9310 new_st = gfc_get_code (EXEC_BLOCK);
9311 new_st->ext.block.ns = gfc_build_block_ns (ns);
9312 new_st->ext.block.ns->code = body->next;
9313 body->next = new_st;
9314
9315 /* Chain in the new list only if it is marked as dangling. Otherwise
9316 there is a CASE label overlap and this is already used. Just ignore,
9317 the error is diagnosed elsewhere. */
9318 if (st->n.sym->assoc->dangling)
9319 {
9320 new_st->ext.block.assoc = st->n.sym->assoc;
9321 st->n.sym->assoc->dangling = 0;
9322 }
9323
9324 resolve_assoc_var (st->n.sym, false);
9325 }
9326
9327 /* Take out CLASS IS cases for separate treatment. */
9328 body = code;
9329 while (body && body->block)
9330 {
9331 if (body->block->ext.block.case_list->ts.type == BT_CLASS)
9332 {
9333 /* Add to class_is list. */
9334 if (class_is == NULL)
9335 {
9336 class_is = body->block;
9337 tail = class_is;
9338 }
9339 else
9340 {
9341 for (tail = class_is; tail->block; tail = tail->block) ;
9342 tail->block = body->block;
9343 tail = tail->block;
9344 }
9345 /* Remove from EXEC_SELECT list. */
9346 body->block = body->block->block;
9347 tail->block = NULL;
9348 }
9349 else
9350 body = body->block;
9351 }
9352
9353 if (class_is)
9354 {
9355 gfc_symbol *vtab;
9356
9357 if (!default_case)
9358 {
9359 /* Add a default case to hold the CLASS IS cases. */
9360 for (tail = code; tail->block; tail = tail->block) ;
9361 tail->block = gfc_get_code (EXEC_SELECT_TYPE);
9362 tail = tail->block;
9363 tail->ext.block.case_list = gfc_get_case ();
9364 tail->ext.block.case_list->ts.type = BT_UNKNOWN;
9365 tail->next = NULL;
9366 default_case = tail;
9367 }
9368
9369 /* More than one CLASS IS block? */
9370 if (class_is->block)
9371 {
9372 gfc_code **c1,*c2;
9373 bool swapped;
9374 /* Sort CLASS IS blocks by extension level. */
9375 do
9376 {
9377 swapped = false;
9378 for (c1 = &class_is; (*c1) && (*c1)->block; c1 = &((*c1)->block))
9379 {
9380 c2 = (*c1)->block;
9381 /* F03:C817 (check for doubles). */
9382 if ((*c1)->ext.block.case_list->ts.u.derived->hash_value
9383 == c2->ext.block.case_list->ts.u.derived->hash_value)
9384 {
9385 gfc_error ("Double CLASS IS block in SELECT TYPE "
9386 "statement at %L",
9387 &c2->ext.block.case_list->where);
9388 return;
9389 }
9390 if ((*c1)->ext.block.case_list->ts.u.derived->attr.extension
9391 < c2->ext.block.case_list->ts.u.derived->attr.extension)
9392 {
9393 /* Swap. */
9394 (*c1)->block = c2->block;
9395 c2->block = *c1;
9396 *c1 = c2;
9397 swapped = true;
9398 }
9399 }
9400 }
9401 while (swapped);
9402 }
9403
9404 /* Generate IF chain. */
9405 if_st = gfc_get_code (EXEC_IF);
9406 new_st = if_st;
9407 for (body = class_is; body; body = body->block)
9408 {
9409 new_st->block = gfc_get_code (EXEC_IF);
9410 new_st = new_st->block;
9411 /* Set up IF condition: Call _gfortran_is_extension_of. */
9412 new_st->expr1 = gfc_get_expr ();
9413 new_st->expr1->expr_type = EXPR_FUNCTION;
9414 new_st->expr1->ts.type = BT_LOGICAL;
9415 new_st->expr1->ts.kind = 4;
9416 new_st->expr1->value.function.name = gfc_get_string (PREFIX ("is_extension_of"));
9417 new_st->expr1->value.function.isym = XCNEW (gfc_intrinsic_sym);
9418 new_st->expr1->value.function.isym->id = GFC_ISYM_EXTENDS_TYPE_OF;
9419 /* Set up arguments. */
9420 new_st->expr1->value.function.actual = gfc_get_actual_arglist ();
9421 new_st->expr1->value.function.actual->expr = gfc_get_variable_expr (selector_expr->symtree);
9422 new_st->expr1->value.function.actual->expr->where = code->loc;
9423 new_st->expr1->where = code->loc;
9424 gfc_add_vptr_component (new_st->expr1->value.function.actual->expr);
9425 vtab = gfc_find_derived_vtab (body->ext.block.case_list->ts.u.derived);
9426 st = gfc_find_symtree (vtab->ns->sym_root, vtab->name);
9427 new_st->expr1->value.function.actual->next = gfc_get_actual_arglist ();
9428 new_st->expr1->value.function.actual->next->expr = gfc_get_variable_expr (st);
9429 new_st->expr1->value.function.actual->next->expr->where = code->loc;
9430 new_st->next = body->next;
9431 }
9432 if (default_case->next)
9433 {
9434 new_st->block = gfc_get_code (EXEC_IF);
9435 new_st = new_st->block;
9436 new_st->next = default_case->next;
9437 }
9438
9439 /* Replace CLASS DEFAULT code by the IF chain. */
9440 default_case->next = if_st;
9441 }
9442
9443 /* Resolve the internal code. This cannot be done earlier because
9444 it requires that the sym->assoc of selectors is set already. */
9445 gfc_current_ns = ns;
9446 gfc_resolve_blocks (code->block, gfc_current_ns);
9447 gfc_current_ns = old_ns;
9448
9449 if (ref)
9450 free (ref);
9451 }
9452
9453
9454 /* Resolve a transfer statement. This is making sure that:
9455 -- a derived type being transferred has only non-pointer components
9456 -- a derived type being transferred doesn't have private components, unless
9457 it's being transferred from the module where the type was defined
9458 -- we're not trying to transfer a whole assumed size array. */
9459
9460 static void
9461 resolve_transfer (gfc_code *code)
9462 {
9463 gfc_symbol *sym, *derived;
9464 gfc_ref *ref;
9465 gfc_expr *exp;
9466 bool write = false;
9467 bool formatted = false;
9468 gfc_dt *dt = code->ext.dt;
9469 gfc_symbol *dtio_sub = NULL;
9470
9471 exp = code->expr1;
9472
9473 while (exp != NULL && exp->expr_type == EXPR_OP
9474 && exp->value.op.op == INTRINSIC_PARENTHESES)
9475 exp = exp->value.op.op1;
9476
9477 if (exp && exp->expr_type == EXPR_NULL
9478 && code->ext.dt)
9479 {
9480 gfc_error ("Invalid context for NULL () intrinsic at %L",
9481 &exp->where);
9482 return;
9483 }
9484
9485 if (exp == NULL || (exp->expr_type != EXPR_VARIABLE
9486 && exp->expr_type != EXPR_FUNCTION
9487 && exp->expr_type != EXPR_STRUCTURE))
9488 return;
9489
9490 /* If we are reading, the variable will be changed. Note that
9491 code->ext.dt may be NULL if the TRANSFER is related to
9492 an INQUIRE statement -- but in this case, we are not reading, either. */
9493 if (dt && dt->dt_io_kind->value.iokind == M_READ
9494 && !gfc_check_vardef_context (exp, false, false, false,
9495 _("item in READ")))
9496 return;
9497
9498 const gfc_typespec *ts = exp->expr_type == EXPR_STRUCTURE
9499 || exp->expr_type == EXPR_FUNCTION
9500 ? &exp->ts : &exp->symtree->n.sym->ts;
9501
9502 /* Go to actual component transferred. */
9503 for (ref = exp->ref; ref; ref = ref->next)
9504 if (ref->type == REF_COMPONENT)
9505 ts = &ref->u.c.component->ts;
9506
9507 if (dt && dt->dt_io_kind->value.iokind != M_INQUIRE
9508 && (ts->type == BT_DERIVED || ts->type == BT_CLASS))
9509 {
9510 derived = ts->u.derived;
9511
9512 /* Determine when to use the formatted DTIO procedure. */
9513 if (dt && (dt->format_expr || dt->format_label))
9514 formatted = true;
9515
9516 write = dt->dt_io_kind->value.iokind == M_WRITE
9517 || dt->dt_io_kind->value.iokind == M_PRINT;
9518 dtio_sub = gfc_find_specific_dtio_proc (derived, write, formatted);
9519
9520 if (dtio_sub != NULL && exp->expr_type == EXPR_VARIABLE)
9521 {
9522 dt->udtio = exp;
9523 sym = exp->symtree->n.sym->ns->proc_name;
9524 /* Check to see if this is a nested DTIO call, with the
9525 dummy as the io-list object. */
9526 if (sym && sym == dtio_sub && sym->formal
9527 && sym->formal->sym == exp->symtree->n.sym
9528 && exp->ref == NULL)
9529 {
9530 if (!sym->attr.recursive)
9531 {
9532 gfc_error ("DTIO %s procedure at %L must be recursive",
9533 sym->name, &sym->declared_at);
9534 return;
9535 }
9536 }
9537 }
9538 }
9539
9540 if (ts->type == BT_CLASS && dtio_sub == NULL)
9541 {
9542 gfc_error ("Data transfer element at %L cannot be polymorphic unless "
9543 "it is processed by a defined input/output procedure",
9544 &code->loc);
9545 return;
9546 }
9547
9548 if (ts->type == BT_DERIVED)
9549 {
9550 /* Check that transferred derived type doesn't contain POINTER
9551 components unless it is processed by a defined input/output
9552 procedure". */
9553 if (ts->u.derived->attr.pointer_comp && dtio_sub == NULL)
9554 {
9555 gfc_error ("Data transfer element at %L cannot have POINTER "
9556 "components unless it is processed by a defined "
9557 "input/output procedure", &code->loc);
9558 return;
9559 }
9560
9561 /* F08:C935. */
9562 if (ts->u.derived->attr.proc_pointer_comp)
9563 {
9564 gfc_error ("Data transfer element at %L cannot have "
9565 "procedure pointer components", &code->loc);
9566 return;
9567 }
9568
9569 if (ts->u.derived->attr.alloc_comp && dtio_sub == NULL)
9570 {
9571 gfc_error ("Data transfer element at %L cannot have ALLOCATABLE "
9572 "components unless it is processed by a defined "
9573 "input/output procedure", &code->loc);
9574 return;
9575 }
9576
9577 /* C_PTR and C_FUNPTR have private components which means they cannot
9578 be printed. However, if -std=gnu and not -pedantic, allow
9579 the component to be printed to help debugging. */
9580 if (ts->u.derived->ts.f90_type == BT_VOID)
9581 {
9582 if (!gfc_notify_std (GFC_STD_GNU, "Data transfer element at %L "
9583 "cannot have PRIVATE components", &code->loc))
9584 return;
9585 }
9586 else if (derived_inaccessible (ts->u.derived) && dtio_sub == NULL)
9587 {
9588 gfc_error ("Data transfer element at %L cannot have "
9589 "PRIVATE components unless it is processed by "
9590 "a defined input/output procedure", &code->loc);
9591 return;
9592 }
9593 }
9594
9595 if (exp->expr_type == EXPR_STRUCTURE)
9596 return;
9597
9598 sym = exp->symtree->n.sym;
9599
9600 if (sym->as != NULL && sym->as->type == AS_ASSUMED_SIZE && exp->ref
9601 && exp->ref->type == REF_ARRAY && exp->ref->u.ar.type == AR_FULL)
9602 {
9603 gfc_error ("Data transfer element at %L cannot be a full reference to "
9604 "an assumed-size array", &code->loc);
9605 return;
9606 }
9607
9608 if (async_io_dt && exp->expr_type == EXPR_VARIABLE)
9609 exp->symtree->n.sym->attr.asynchronous = 1;
9610 }
9611
9612
9613 /*********** Toplevel code resolution subroutines ***********/
9614
9615 /* Find the set of labels that are reachable from this block. We also
9616 record the last statement in each block. */
9617
9618 static void
9619 find_reachable_labels (gfc_code *block)
9620 {
9621 gfc_code *c;
9622
9623 if (!block)
9624 return;
9625
9626 cs_base->reachable_labels = bitmap_alloc (&labels_obstack);
9627
9628 /* Collect labels in this block. We don't keep those corresponding
9629 to END {IF|SELECT}, these are checked in resolve_branch by going
9630 up through the code_stack. */
9631 for (c = block; c; c = c->next)
9632 {
9633 if (c->here && c->op != EXEC_END_NESTED_BLOCK)
9634 bitmap_set_bit (cs_base->reachable_labels, c->here->value);
9635 }
9636
9637 /* Merge with labels from parent block. */
9638 if (cs_base->prev)
9639 {
9640 gcc_assert (cs_base->prev->reachable_labels);
9641 bitmap_ior_into (cs_base->reachable_labels,
9642 cs_base->prev->reachable_labels);
9643 }
9644 }
9645
9646
9647 static void
9648 resolve_lock_unlock_event (gfc_code *code)
9649 {
9650 if (code->expr1->expr_type == EXPR_FUNCTION
9651 && code->expr1->value.function.isym
9652 && code->expr1->value.function.isym->id == GFC_ISYM_CAF_GET)
9653 remove_caf_get_intrinsic (code->expr1);
9654
9655 if ((code->op == EXEC_LOCK || code->op == EXEC_UNLOCK)
9656 && (code->expr1->ts.type != BT_DERIVED
9657 || code->expr1->expr_type != EXPR_VARIABLE
9658 || code->expr1->ts.u.derived->from_intmod != INTMOD_ISO_FORTRAN_ENV
9659 || code->expr1->ts.u.derived->intmod_sym_id != ISOFORTRAN_LOCK_TYPE
9660 || code->expr1->rank != 0
9661 || (!gfc_is_coarray (code->expr1) &&
9662 !gfc_is_coindexed (code->expr1))))
9663 gfc_error ("Lock variable at %L must be a scalar of type LOCK_TYPE",
9664 &code->expr1->where);
9665 else if ((code->op == EXEC_EVENT_POST || code->op == EXEC_EVENT_WAIT)
9666 && (code->expr1->ts.type != BT_DERIVED
9667 || code->expr1->expr_type != EXPR_VARIABLE
9668 || code->expr1->ts.u.derived->from_intmod
9669 != INTMOD_ISO_FORTRAN_ENV
9670 || code->expr1->ts.u.derived->intmod_sym_id
9671 != ISOFORTRAN_EVENT_TYPE
9672 || code->expr1->rank != 0))
9673 gfc_error ("Event variable at %L must be a scalar of type EVENT_TYPE",
9674 &code->expr1->where);
9675 else if (code->op == EXEC_EVENT_POST && !gfc_is_coarray (code->expr1)
9676 && !gfc_is_coindexed (code->expr1))
9677 gfc_error ("Event variable argument at %L must be a coarray or coindexed",
9678 &code->expr1->where);
9679 else if (code->op == EXEC_EVENT_WAIT && !gfc_is_coarray (code->expr1))
9680 gfc_error ("Event variable argument at %L must be a coarray but not "
9681 "coindexed", &code->expr1->where);
9682
9683 /* Check STAT. */
9684 if (code->expr2
9685 && (code->expr2->ts.type != BT_INTEGER || code->expr2->rank != 0
9686 || code->expr2->expr_type != EXPR_VARIABLE))
9687 gfc_error ("STAT= argument at %L must be a scalar INTEGER variable",
9688 &code->expr2->where);
9689
9690 if (code->expr2
9691 && !gfc_check_vardef_context (code->expr2, false, false, false,
9692 _("STAT variable")))
9693 return;
9694
9695 /* Check ERRMSG. */
9696 if (code->expr3
9697 && (code->expr3->ts.type != BT_CHARACTER || code->expr3->rank != 0
9698 || code->expr3->expr_type != EXPR_VARIABLE))
9699 gfc_error ("ERRMSG= argument at %L must be a scalar CHARACTER variable",
9700 &code->expr3->where);
9701
9702 if (code->expr3
9703 && !gfc_check_vardef_context (code->expr3, false, false, false,
9704 _("ERRMSG variable")))
9705 return;
9706
9707 /* Check for LOCK the ACQUIRED_LOCK. */
9708 if (code->op != EXEC_EVENT_WAIT && code->expr4
9709 && (code->expr4->ts.type != BT_LOGICAL || code->expr4->rank != 0
9710 || code->expr4->expr_type != EXPR_VARIABLE))
9711 gfc_error ("ACQUIRED_LOCK= argument at %L must be a scalar LOGICAL "
9712 "variable", &code->expr4->where);
9713
9714 if (code->op != EXEC_EVENT_WAIT && code->expr4
9715 && !gfc_check_vardef_context (code->expr4, false, false, false,
9716 _("ACQUIRED_LOCK variable")))
9717 return;
9718
9719 /* Check for EVENT WAIT the UNTIL_COUNT. */
9720 if (code->op == EXEC_EVENT_WAIT && code->expr4)
9721 {
9722 if (!gfc_resolve_expr (code->expr4) || code->expr4->ts.type != BT_INTEGER
9723 || code->expr4->rank != 0)
9724 gfc_error ("UNTIL_COUNT= argument at %L must be a scalar INTEGER "
9725 "expression", &code->expr4->where);
9726 }
9727 }
9728
9729
9730 static void
9731 resolve_critical (gfc_code *code)
9732 {
9733 gfc_symtree *symtree;
9734 gfc_symbol *lock_type;
9735 char name[GFC_MAX_SYMBOL_LEN];
9736 static int serial = 0;
9737
9738 if (flag_coarray != GFC_FCOARRAY_LIB)
9739 return;
9740
9741 symtree = gfc_find_symtree (gfc_current_ns->sym_root,
9742 GFC_PREFIX ("lock_type"));
9743 if (symtree)
9744 lock_type = symtree->n.sym;
9745 else
9746 {
9747 if (gfc_get_sym_tree (GFC_PREFIX ("lock_type"), gfc_current_ns, &symtree,
9748 false) != 0)
9749 gcc_unreachable ();
9750 lock_type = symtree->n.sym;
9751 lock_type->attr.flavor = FL_DERIVED;
9752 lock_type->attr.zero_comp = 1;
9753 lock_type->from_intmod = INTMOD_ISO_FORTRAN_ENV;
9754 lock_type->intmod_sym_id = ISOFORTRAN_LOCK_TYPE;
9755 }
9756
9757 sprintf(name, GFC_PREFIX ("lock_var") "%d",serial++);
9758 if (gfc_get_sym_tree (name, gfc_current_ns, &symtree, false) != 0)
9759 gcc_unreachable ();
9760
9761 code->resolved_sym = symtree->n.sym;
9762 symtree->n.sym->attr.flavor = FL_VARIABLE;
9763 symtree->n.sym->attr.referenced = 1;
9764 symtree->n.sym->attr.artificial = 1;
9765 symtree->n.sym->attr.codimension = 1;
9766 symtree->n.sym->ts.type = BT_DERIVED;
9767 symtree->n.sym->ts.u.derived = lock_type;
9768 symtree->n.sym->as = gfc_get_array_spec ();
9769 symtree->n.sym->as->corank = 1;
9770 symtree->n.sym->as->type = AS_EXPLICIT;
9771 symtree->n.sym->as->cotype = AS_EXPLICIT;
9772 symtree->n.sym->as->lower[0] = gfc_get_int_expr (gfc_default_integer_kind,
9773 NULL, 1);
9774 gfc_commit_symbols();
9775 }
9776
9777
9778 static void
9779 resolve_sync (gfc_code *code)
9780 {
9781 /* Check imageset. The * case matches expr1 == NULL. */
9782 if (code->expr1)
9783 {
9784 if (code->expr1->ts.type != BT_INTEGER || code->expr1->rank > 1)
9785 gfc_error ("Imageset argument at %L must be a scalar or rank-1 "
9786 "INTEGER expression", &code->expr1->where);
9787 if (code->expr1->expr_type == EXPR_CONSTANT && code->expr1->rank == 0
9788 && mpz_cmp_si (code->expr1->value.integer, 1) < 0)
9789 gfc_error ("Imageset argument at %L must between 1 and num_images()",
9790 &code->expr1->where);
9791 else if (code->expr1->expr_type == EXPR_ARRAY
9792 && gfc_simplify_expr (code->expr1, 0))
9793 {
9794 gfc_constructor *cons;
9795 cons = gfc_constructor_first (code->expr1->value.constructor);
9796 for (; cons; cons = gfc_constructor_next (cons))
9797 if (cons->expr->expr_type == EXPR_CONSTANT
9798 && mpz_cmp_si (cons->expr->value.integer, 1) < 0)
9799 gfc_error ("Imageset argument at %L must between 1 and "
9800 "num_images()", &cons->expr->where);
9801 }
9802 }
9803
9804 /* Check STAT. */
9805 gfc_resolve_expr (code->expr2);
9806 if (code->expr2
9807 && (code->expr2->ts.type != BT_INTEGER || code->expr2->rank != 0
9808 || code->expr2->expr_type != EXPR_VARIABLE))
9809 gfc_error ("STAT= argument at %L must be a scalar INTEGER variable",
9810 &code->expr2->where);
9811
9812 /* Check ERRMSG. */
9813 gfc_resolve_expr (code->expr3);
9814 if (code->expr3
9815 && (code->expr3->ts.type != BT_CHARACTER || code->expr3->rank != 0
9816 || code->expr3->expr_type != EXPR_VARIABLE))
9817 gfc_error ("ERRMSG= argument at %L must be a scalar CHARACTER variable",
9818 &code->expr3->where);
9819 }
9820
9821
9822 /* Given a branch to a label, see if the branch is conforming.
9823 The code node describes where the branch is located. */
9824
9825 static void
9826 resolve_branch (gfc_st_label *label, gfc_code *code)
9827 {
9828 code_stack *stack;
9829
9830 if (label == NULL)
9831 return;
9832
9833 /* Step one: is this a valid branching target? */
9834
9835 if (label->defined == ST_LABEL_UNKNOWN)
9836 {
9837 gfc_error ("Label %d referenced at %L is never defined", label->value,
9838 &code->loc);
9839 return;
9840 }
9841
9842 if (label->defined != ST_LABEL_TARGET && label->defined != ST_LABEL_DO_TARGET)
9843 {
9844 gfc_error ("Statement at %L is not a valid branch target statement "
9845 "for the branch statement at %L", &label->where, &code->loc);
9846 return;
9847 }
9848
9849 /* Step two: make sure this branch is not a branch to itself ;-) */
9850
9851 if (code->here == label)
9852 {
9853 gfc_warning (0,
9854 "Branch at %L may result in an infinite loop", &code->loc);
9855 return;
9856 }
9857
9858 /* Step three: See if the label is in the same block as the
9859 branching statement. The hard work has been done by setting up
9860 the bitmap reachable_labels. */
9861
9862 if (bitmap_bit_p (cs_base->reachable_labels, label->value))
9863 {
9864 /* Check now whether there is a CRITICAL construct; if so, check
9865 whether the label is still visible outside of the CRITICAL block,
9866 which is invalid. */
9867 for (stack = cs_base; stack; stack = stack->prev)
9868 {
9869 if (stack->current->op == EXEC_CRITICAL
9870 && bitmap_bit_p (stack->reachable_labels, label->value))
9871 gfc_error ("GOTO statement at %L leaves CRITICAL construct for "
9872 "label at %L", &code->loc, &label->where);
9873 else if (stack->current->op == EXEC_DO_CONCURRENT
9874 && bitmap_bit_p (stack->reachable_labels, label->value))
9875 gfc_error ("GOTO statement at %L leaves DO CONCURRENT construct "
9876 "for label at %L", &code->loc, &label->where);
9877 }
9878
9879 return;
9880 }
9881
9882 /* Step four: If we haven't found the label in the bitmap, it may
9883 still be the label of the END of the enclosing block, in which
9884 case we find it by going up the code_stack. */
9885
9886 for (stack = cs_base; stack; stack = stack->prev)
9887 {
9888 if (stack->current->next && stack->current->next->here == label)
9889 break;
9890 if (stack->current->op == EXEC_CRITICAL)
9891 {
9892 /* Note: A label at END CRITICAL does not leave the CRITICAL
9893 construct as END CRITICAL is still part of it. */
9894 gfc_error ("GOTO statement at %L leaves CRITICAL construct for label"
9895 " at %L", &code->loc, &label->where);
9896 return;
9897 }
9898 else if (stack->current->op == EXEC_DO_CONCURRENT)
9899 {
9900 gfc_error ("GOTO statement at %L leaves DO CONCURRENT construct for "
9901 "label at %L", &code->loc, &label->where);
9902 return;
9903 }
9904 }
9905
9906 if (stack)
9907 {
9908 gcc_assert (stack->current->next->op == EXEC_END_NESTED_BLOCK);
9909 return;
9910 }
9911
9912 /* The label is not in an enclosing block, so illegal. This was
9913 allowed in Fortran 66, so we allow it as extension. No
9914 further checks are necessary in this case. */
9915 gfc_notify_std (GFC_STD_LEGACY, "Label at %L is not in the same block "
9916 "as the GOTO statement at %L", &label->where,
9917 &code->loc);
9918 return;
9919 }
9920
9921
9922 /* Check whether EXPR1 has the same shape as EXPR2. */
9923
9924 static bool
9925 resolve_where_shape (gfc_expr *expr1, gfc_expr *expr2)
9926 {
9927 mpz_t shape[GFC_MAX_DIMENSIONS];
9928 mpz_t shape2[GFC_MAX_DIMENSIONS];
9929 bool result = false;
9930 int i;
9931
9932 /* Compare the rank. */
9933 if (expr1->rank != expr2->rank)
9934 return result;
9935
9936 /* Compare the size of each dimension. */
9937 for (i=0; i<expr1->rank; i++)
9938 {
9939 if (!gfc_array_dimen_size (expr1, i, &shape[i]))
9940 goto ignore;
9941
9942 if (!gfc_array_dimen_size (expr2, i, &shape2[i]))
9943 goto ignore;
9944
9945 if (mpz_cmp (shape[i], shape2[i]))
9946 goto over;
9947 }
9948
9949 /* When either of the two expression is an assumed size array, we
9950 ignore the comparison of dimension sizes. */
9951 ignore:
9952 result = true;
9953
9954 over:
9955 gfc_clear_shape (shape, i);
9956 gfc_clear_shape (shape2, i);
9957 return result;
9958 }
9959
9960
9961 /* Check whether a WHERE assignment target or a WHERE mask expression
9962 has the same shape as the outmost WHERE mask expression. */
9963
9964 static void
9965 resolve_where (gfc_code *code, gfc_expr *mask)
9966 {
9967 gfc_code *cblock;
9968 gfc_code *cnext;
9969 gfc_expr *e = NULL;
9970
9971 cblock = code->block;
9972
9973 /* Store the first WHERE mask-expr of the WHERE statement or construct.
9974 In case of nested WHERE, only the outmost one is stored. */
9975 if (mask == NULL) /* outmost WHERE */
9976 e = cblock->expr1;
9977 else /* inner WHERE */
9978 e = mask;
9979
9980 while (cblock)
9981 {
9982 if (cblock->expr1)
9983 {
9984 /* Check if the mask-expr has a consistent shape with the
9985 outmost WHERE mask-expr. */
9986 if (!resolve_where_shape (cblock->expr1, e))
9987 gfc_error ("WHERE mask at %L has inconsistent shape",
9988 &cblock->expr1->where);
9989 }
9990
9991 /* the assignment statement of a WHERE statement, or the first
9992 statement in where-body-construct of a WHERE construct */
9993 cnext = cblock->next;
9994 while (cnext)
9995 {
9996 switch (cnext->op)
9997 {
9998 /* WHERE assignment statement */
9999 case EXEC_ASSIGN:
10000
10001 /* Check shape consistent for WHERE assignment target. */
10002 if (e && !resolve_where_shape (cnext->expr1, e))
10003 gfc_error ("WHERE assignment target at %L has "
10004 "inconsistent shape", &cnext->expr1->where);
10005 break;
10006
10007
10008 case EXEC_ASSIGN_CALL:
10009 resolve_call (cnext);
10010 if (!cnext->resolved_sym->attr.elemental)
10011 gfc_error("Non-ELEMENTAL user-defined assignment in WHERE at %L",
10012 &cnext->ext.actual->expr->where);
10013 break;
10014
10015 /* WHERE or WHERE construct is part of a where-body-construct */
10016 case EXEC_WHERE:
10017 resolve_where (cnext, e);
10018 break;
10019
10020 default:
10021 gfc_error ("Unsupported statement inside WHERE at %L",
10022 &cnext->loc);
10023 }
10024 /* the next statement within the same where-body-construct */
10025 cnext = cnext->next;
10026 }
10027 /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
10028 cblock = cblock->block;
10029 }
10030 }
10031
10032
10033 /* Resolve assignment in FORALL construct.
10034 NVAR is the number of FORALL index variables, and VAR_EXPR records the
10035 FORALL index variables. */
10036
10037 static void
10038 gfc_resolve_assign_in_forall (gfc_code *code, int nvar, gfc_expr **var_expr)
10039 {
10040 int n;
10041
10042 for (n = 0; n < nvar; n++)
10043 {
10044 gfc_symbol *forall_index;
10045
10046 forall_index = var_expr[n]->symtree->n.sym;
10047
10048 /* Check whether the assignment target is one of the FORALL index
10049 variable. */
10050 if ((code->expr1->expr_type == EXPR_VARIABLE)
10051 && (code->expr1->symtree->n.sym == forall_index))
10052 gfc_error ("Assignment to a FORALL index variable at %L",
10053 &code->expr1->where);
10054 else
10055 {
10056 /* If one of the FORALL index variables doesn't appear in the
10057 assignment variable, then there could be a many-to-one
10058 assignment. Emit a warning rather than an error because the
10059 mask could be resolving this problem. */
10060 if (!find_forall_index (code->expr1, forall_index, 0))
10061 gfc_warning (0, "The FORALL with index %qs is not used on the "
10062 "left side of the assignment at %L and so might "
10063 "cause multiple assignment to this object",
10064 var_expr[n]->symtree->name, &code->expr1->where);
10065 }
10066 }
10067 }
10068
10069
10070 /* Resolve WHERE statement in FORALL construct. */
10071
10072 static void
10073 gfc_resolve_where_code_in_forall (gfc_code *code, int nvar,
10074 gfc_expr **var_expr)
10075 {
10076 gfc_code *cblock;
10077 gfc_code *cnext;
10078
10079 cblock = code->block;
10080 while (cblock)
10081 {
10082 /* the assignment statement of a WHERE statement, or the first
10083 statement in where-body-construct of a WHERE construct */
10084 cnext = cblock->next;
10085 while (cnext)
10086 {
10087 switch (cnext->op)
10088 {
10089 /* WHERE assignment statement */
10090 case EXEC_ASSIGN:
10091 gfc_resolve_assign_in_forall (cnext, nvar, var_expr);
10092 break;
10093
10094 /* WHERE operator assignment statement */
10095 case EXEC_ASSIGN_CALL:
10096 resolve_call (cnext);
10097 if (!cnext->resolved_sym->attr.elemental)
10098 gfc_error("Non-ELEMENTAL user-defined assignment in WHERE at %L",
10099 &cnext->ext.actual->expr->where);
10100 break;
10101
10102 /* WHERE or WHERE construct is part of a where-body-construct */
10103 case EXEC_WHERE:
10104 gfc_resolve_where_code_in_forall (cnext, nvar, var_expr);
10105 break;
10106
10107 default:
10108 gfc_error ("Unsupported statement inside WHERE at %L",
10109 &cnext->loc);
10110 }
10111 /* the next statement within the same where-body-construct */
10112 cnext = cnext->next;
10113 }
10114 /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
10115 cblock = cblock->block;
10116 }
10117 }
10118
10119
10120 /* Traverse the FORALL body to check whether the following errors exist:
10121 1. For assignment, check if a many-to-one assignment happens.
10122 2. For WHERE statement, check the WHERE body to see if there is any
10123 many-to-one assignment. */
10124
10125 static void
10126 gfc_resolve_forall_body (gfc_code *code, int nvar, gfc_expr **var_expr)
10127 {
10128 gfc_code *c;
10129
10130 c = code->block->next;
10131 while (c)
10132 {
10133 switch (c->op)
10134 {
10135 case EXEC_ASSIGN:
10136 case EXEC_POINTER_ASSIGN:
10137 gfc_resolve_assign_in_forall (c, nvar, var_expr);
10138 break;
10139
10140 case EXEC_ASSIGN_CALL:
10141 resolve_call (c);
10142 break;
10143
10144 /* Because the gfc_resolve_blocks() will handle the nested FORALL,
10145 there is no need to handle it here. */
10146 case EXEC_FORALL:
10147 break;
10148 case EXEC_WHERE:
10149 gfc_resolve_where_code_in_forall(c, nvar, var_expr);
10150 break;
10151 default:
10152 break;
10153 }
10154 /* The next statement in the FORALL body. */
10155 c = c->next;
10156 }
10157 }
10158
10159
10160 /* Counts the number of iterators needed inside a forall construct, including
10161 nested forall constructs. This is used to allocate the needed memory
10162 in gfc_resolve_forall. */
10163
10164 static int
10165 gfc_count_forall_iterators (gfc_code *code)
10166 {
10167 int max_iters, sub_iters, current_iters;
10168 gfc_forall_iterator *fa;
10169
10170 gcc_assert(code->op == EXEC_FORALL);
10171 max_iters = 0;
10172 current_iters = 0;
10173
10174 for (fa = code->ext.forall_iterator; fa; fa = fa->next)
10175 current_iters ++;
10176
10177 code = code->block->next;
10178
10179 while (code)
10180 {
10181 if (code->op == EXEC_FORALL)
10182 {
10183 sub_iters = gfc_count_forall_iterators (code);
10184 if (sub_iters > max_iters)
10185 max_iters = sub_iters;
10186 }
10187 code = code->next;
10188 }
10189
10190 return current_iters + max_iters;
10191 }
10192
10193
10194 /* Given a FORALL construct, first resolve the FORALL iterator, then call
10195 gfc_resolve_forall_body to resolve the FORALL body. */
10196
10197 static void
10198 gfc_resolve_forall (gfc_code *code, gfc_namespace *ns, int forall_save)
10199 {
10200 static gfc_expr **var_expr;
10201 static int total_var = 0;
10202 static int nvar = 0;
10203 int i, old_nvar, tmp;
10204 gfc_forall_iterator *fa;
10205
10206 old_nvar = nvar;
10207
10208 if (!gfc_notify_std (GFC_STD_F2018_OBS, "FORALL construct at %L", &code->loc))
10209 return;
10210
10211 /* Start to resolve a FORALL construct */
10212 if (forall_save == 0)
10213 {
10214 /* Count the total number of FORALL indices in the nested FORALL
10215 construct in order to allocate the VAR_EXPR with proper size. */
10216 total_var = gfc_count_forall_iterators (code);
10217
10218 /* Allocate VAR_EXPR with NUMBER_OF_FORALL_INDEX elements. */
10219 var_expr = XCNEWVEC (gfc_expr *, total_var);
10220 }
10221
10222 /* The information about FORALL iterator, including FORALL indices start, end
10223 and stride. An outer FORALL indice cannot appear in start, end or stride. */
10224 for (fa = code->ext.forall_iterator; fa; fa = fa->next)
10225 {
10226 /* Fortran 20008: C738 (R753). */
10227 if (fa->var->ref && fa->var->ref->type == REF_ARRAY)
10228 {
10229 gfc_error ("FORALL index-name at %L must be a scalar variable "
10230 "of type integer", &fa->var->where);
10231 continue;
10232 }
10233
10234 /* Check if any outer FORALL index name is the same as the current
10235 one. */
10236 for (i = 0; i < nvar; i++)
10237 {
10238 if (fa->var->symtree->n.sym == var_expr[i]->symtree->n.sym)
10239 gfc_error ("An outer FORALL construct already has an index "
10240 "with this name %L", &fa->var->where);
10241 }
10242
10243 /* Record the current FORALL index. */
10244 var_expr[nvar] = gfc_copy_expr (fa->var);
10245
10246 nvar++;
10247
10248 /* No memory leak. */
10249 gcc_assert (nvar <= total_var);
10250 }
10251
10252 /* Resolve the FORALL body. */
10253 gfc_resolve_forall_body (code, nvar, var_expr);
10254
10255 /* May call gfc_resolve_forall to resolve the inner FORALL loop. */
10256 gfc_resolve_blocks (code->block, ns);
10257
10258 tmp = nvar;
10259 nvar = old_nvar;
10260 /* Free only the VAR_EXPRs allocated in this frame. */
10261 for (i = nvar; i < tmp; i++)
10262 gfc_free_expr (var_expr[i]);
10263
10264 if (nvar == 0)
10265 {
10266 /* We are in the outermost FORALL construct. */
10267 gcc_assert (forall_save == 0);
10268
10269 /* VAR_EXPR is not needed any more. */
10270 free (var_expr);
10271 total_var = 0;
10272 }
10273 }
10274
10275
10276 /* Resolve a BLOCK construct statement. */
10277
10278 static void
10279 resolve_block_construct (gfc_code* code)
10280 {
10281 /* Resolve the BLOCK's namespace. */
10282 gfc_resolve (code->ext.block.ns);
10283
10284 /* For an ASSOCIATE block, the associations (and their targets) are already
10285 resolved during resolve_symbol. */
10286 }
10287
10288
10289 /* Resolve lists of blocks found in IF, SELECT CASE, WHERE, FORALL, GOTO and
10290 DO code nodes. */
10291
10292 void
10293 gfc_resolve_blocks (gfc_code *b, gfc_namespace *ns)
10294 {
10295 bool t;
10296
10297 for (; b; b = b->block)
10298 {
10299 t = gfc_resolve_expr (b->expr1);
10300 if (!gfc_resolve_expr (b->expr2))
10301 t = false;
10302
10303 switch (b->op)
10304 {
10305 case EXEC_IF:
10306 if (t && b->expr1 != NULL
10307 && (b->expr1->ts.type != BT_LOGICAL || b->expr1->rank != 0))
10308 gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
10309 &b->expr1->where);
10310 break;
10311
10312 case EXEC_WHERE:
10313 if (t
10314 && b->expr1 != NULL
10315 && (b->expr1->ts.type != BT_LOGICAL || b->expr1->rank == 0))
10316 gfc_error ("WHERE/ELSEWHERE clause at %L requires a LOGICAL array",
10317 &b->expr1->where);
10318 break;
10319
10320 case EXEC_GOTO:
10321 resolve_branch (b->label1, b);
10322 break;
10323
10324 case EXEC_BLOCK:
10325 resolve_block_construct (b);
10326 break;
10327
10328 case EXEC_SELECT:
10329 case EXEC_SELECT_TYPE:
10330 case EXEC_FORALL:
10331 case EXEC_DO:
10332 case EXEC_DO_WHILE:
10333 case EXEC_DO_CONCURRENT:
10334 case EXEC_CRITICAL:
10335 case EXEC_READ:
10336 case EXEC_WRITE:
10337 case EXEC_IOLENGTH:
10338 case EXEC_WAIT:
10339 break;
10340
10341 case EXEC_OMP_ATOMIC:
10342 case EXEC_OACC_ATOMIC:
10343 {
10344 gfc_omp_atomic_op aop
10345 = (gfc_omp_atomic_op) (b->ext.omp_atomic & GFC_OMP_ATOMIC_MASK);
10346
10347 /* Verify this before calling gfc_resolve_code, which might
10348 change it. */
10349 gcc_assert (b->next && b->next->op == EXEC_ASSIGN);
10350 gcc_assert (((aop != GFC_OMP_ATOMIC_CAPTURE)
10351 && b->next->next == NULL)
10352 || ((aop == GFC_OMP_ATOMIC_CAPTURE)
10353 && b->next->next != NULL
10354 && b->next->next->op == EXEC_ASSIGN
10355 && b->next->next->next == NULL));
10356 }
10357 break;
10358
10359 case EXEC_OACC_PARALLEL_LOOP:
10360 case EXEC_OACC_PARALLEL:
10361 case EXEC_OACC_KERNELS_LOOP:
10362 case EXEC_OACC_KERNELS:
10363 case EXEC_OACC_DATA:
10364 case EXEC_OACC_HOST_DATA:
10365 case EXEC_OACC_LOOP:
10366 case EXEC_OACC_UPDATE:
10367 case EXEC_OACC_WAIT:
10368 case EXEC_OACC_CACHE:
10369 case EXEC_OACC_ENTER_DATA:
10370 case EXEC_OACC_EXIT_DATA:
10371 case EXEC_OACC_ROUTINE:
10372 case EXEC_OMP_CRITICAL:
10373 case EXEC_OMP_DISTRIBUTE:
10374 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
10375 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
10376 case EXEC_OMP_DISTRIBUTE_SIMD:
10377 case EXEC_OMP_DO:
10378 case EXEC_OMP_DO_SIMD:
10379 case EXEC_OMP_MASTER:
10380 case EXEC_OMP_ORDERED:
10381 case EXEC_OMP_PARALLEL:
10382 case EXEC_OMP_PARALLEL_DO:
10383 case EXEC_OMP_PARALLEL_DO_SIMD:
10384 case EXEC_OMP_PARALLEL_SECTIONS:
10385 case EXEC_OMP_PARALLEL_WORKSHARE:
10386 case EXEC_OMP_SECTIONS:
10387 case EXEC_OMP_SIMD:
10388 case EXEC_OMP_SINGLE:
10389 case EXEC_OMP_TARGET:
10390 case EXEC_OMP_TARGET_DATA:
10391 case EXEC_OMP_TARGET_ENTER_DATA:
10392 case EXEC_OMP_TARGET_EXIT_DATA:
10393 case EXEC_OMP_TARGET_PARALLEL:
10394 case EXEC_OMP_TARGET_PARALLEL_DO:
10395 case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
10396 case EXEC_OMP_TARGET_SIMD:
10397 case EXEC_OMP_TARGET_TEAMS:
10398 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
10399 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
10400 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
10401 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
10402 case EXEC_OMP_TARGET_UPDATE:
10403 case EXEC_OMP_TASK:
10404 case EXEC_OMP_TASKGROUP:
10405 case EXEC_OMP_TASKLOOP:
10406 case EXEC_OMP_TASKLOOP_SIMD:
10407 case EXEC_OMP_TASKWAIT:
10408 case EXEC_OMP_TASKYIELD:
10409 case EXEC_OMP_TEAMS:
10410 case EXEC_OMP_TEAMS_DISTRIBUTE:
10411 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
10412 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
10413 case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
10414 case EXEC_OMP_WORKSHARE:
10415 break;
10416
10417 default:
10418 gfc_internal_error ("gfc_resolve_blocks(): Bad block type");
10419 }
10420
10421 gfc_resolve_code (b->next, ns);
10422 }
10423 }
10424
10425
10426 /* Does everything to resolve an ordinary assignment. Returns true
10427 if this is an interface assignment. */
10428 static bool
10429 resolve_ordinary_assign (gfc_code *code, gfc_namespace *ns)
10430 {
10431 bool rval = false;
10432 gfc_expr *lhs;
10433 gfc_expr *rhs;
10434 int n;
10435 gfc_ref *ref;
10436 symbol_attribute attr;
10437
10438 if (gfc_extend_assign (code, ns))
10439 {
10440 gfc_expr** rhsptr;
10441
10442 if (code->op == EXEC_ASSIGN_CALL)
10443 {
10444 lhs = code->ext.actual->expr;
10445 rhsptr = &code->ext.actual->next->expr;
10446 }
10447 else
10448 {
10449 gfc_actual_arglist* args;
10450 gfc_typebound_proc* tbp;
10451
10452 gcc_assert (code->op == EXEC_COMPCALL);
10453
10454 args = code->expr1->value.compcall.actual;
10455 lhs = args->expr;
10456 rhsptr = &args->next->expr;
10457
10458 tbp = code->expr1->value.compcall.tbp;
10459 gcc_assert (!tbp->is_generic);
10460 }
10461
10462 /* Make a temporary rhs when there is a default initializer
10463 and rhs is the same symbol as the lhs. */
10464 if ((*rhsptr)->expr_type == EXPR_VARIABLE
10465 && (*rhsptr)->symtree->n.sym->ts.type == BT_DERIVED
10466 && gfc_has_default_initializer ((*rhsptr)->symtree->n.sym->ts.u.derived)
10467 && (lhs->symtree->n.sym == (*rhsptr)->symtree->n.sym))
10468 *rhsptr = gfc_get_parentheses (*rhsptr);
10469
10470 return true;
10471 }
10472
10473 lhs = code->expr1;
10474 rhs = code->expr2;
10475
10476 if (rhs->is_boz
10477 && !gfc_notify_std (GFC_STD_GNU, "BOZ literal at %L outside "
10478 "a DATA statement and outside INT/REAL/DBLE/CMPLX",
10479 &code->loc))
10480 return false;
10481
10482 /* Handle the case of a BOZ literal on the RHS. */
10483 if (rhs->is_boz && lhs->ts.type != BT_INTEGER)
10484 {
10485 int rc;
10486 if (warn_surprising)
10487 gfc_warning (OPT_Wsurprising,
10488 "BOZ literal at %L is bitwise transferred "
10489 "non-integer symbol %qs", &code->loc,
10490 lhs->symtree->n.sym->name);
10491
10492 if (!gfc_convert_boz (rhs, &lhs->ts))
10493 return false;
10494 if ((rc = gfc_range_check (rhs)) != ARITH_OK)
10495 {
10496 if (rc == ARITH_UNDERFLOW)
10497 gfc_error ("Arithmetic underflow of bit-wise transferred BOZ at %L"
10498 ". This check can be disabled with the option "
10499 "%<-fno-range-check%>", &rhs->where);
10500 else if (rc == ARITH_OVERFLOW)
10501 gfc_error ("Arithmetic overflow of bit-wise transferred BOZ at %L"
10502 ". This check can be disabled with the option "
10503 "%<-fno-range-check%>", &rhs->where);
10504 else if (rc == ARITH_NAN)
10505 gfc_error ("Arithmetic NaN of bit-wise transferred BOZ at %L"
10506 ". This check can be disabled with the option "
10507 "%<-fno-range-check%>", &rhs->where);
10508 return false;
10509 }
10510 }
10511
10512 if (lhs->ts.type == BT_CHARACTER
10513 && warn_character_truncation)
10514 {
10515 HOST_WIDE_INT llen = 0, rlen = 0;
10516 if (lhs->ts.u.cl != NULL
10517 && lhs->ts.u.cl->length != NULL
10518 && lhs->ts.u.cl->length->expr_type == EXPR_CONSTANT)
10519 llen = gfc_mpz_get_hwi (lhs->ts.u.cl->length->value.integer);
10520
10521 if (rhs->expr_type == EXPR_CONSTANT)
10522 rlen = rhs->value.character.length;
10523
10524 else if (rhs->ts.u.cl != NULL
10525 && rhs->ts.u.cl->length != NULL
10526 && rhs->ts.u.cl->length->expr_type == EXPR_CONSTANT)
10527 rlen = gfc_mpz_get_hwi (rhs->ts.u.cl->length->value.integer);
10528
10529 if (rlen && llen && rlen > llen)
10530 gfc_warning_now (OPT_Wcharacter_truncation,
10531 "CHARACTER expression will be truncated "
10532 "in assignment (%ld/%ld) at %L",
10533 (long) llen, (long) rlen, &code->loc);
10534 }
10535
10536 /* Ensure that a vector index expression for the lvalue is evaluated
10537 to a temporary if the lvalue symbol is referenced in it. */
10538 if (lhs->rank)
10539 {
10540 for (ref = lhs->ref; ref; ref= ref->next)
10541 if (ref->type == REF_ARRAY)
10542 {
10543 for (n = 0; n < ref->u.ar.dimen; n++)
10544 if (ref->u.ar.dimen_type[n] == DIMEN_VECTOR
10545 && gfc_find_sym_in_expr (lhs->symtree->n.sym,
10546 ref->u.ar.start[n]))
10547 ref->u.ar.start[n]
10548 = gfc_get_parentheses (ref->u.ar.start[n]);
10549 }
10550 }
10551
10552 if (gfc_pure (NULL))
10553 {
10554 if (lhs->ts.type == BT_DERIVED
10555 && lhs->expr_type == EXPR_VARIABLE
10556 && lhs->ts.u.derived->attr.pointer_comp
10557 && rhs->expr_type == EXPR_VARIABLE
10558 && (gfc_impure_variable (rhs->symtree->n.sym)
10559 || gfc_is_coindexed (rhs)))
10560 {
10561 /* F2008, C1283. */
10562 if (gfc_is_coindexed (rhs))
10563 gfc_error ("Coindexed expression at %L is assigned to "
10564 "a derived type variable with a POINTER "
10565 "component in a PURE procedure",
10566 &rhs->where);
10567 else
10568 gfc_error ("The impure variable at %L is assigned to "
10569 "a derived type variable with a POINTER "
10570 "component in a PURE procedure (12.6)",
10571 &rhs->where);
10572 return rval;
10573 }
10574
10575 /* Fortran 2008, C1283. */
10576 if (gfc_is_coindexed (lhs))
10577 {
10578 gfc_error ("Assignment to coindexed variable at %L in a PURE "
10579 "procedure", &rhs->where);
10580 return rval;
10581 }
10582 }
10583
10584 if (gfc_implicit_pure (NULL))
10585 {
10586 if (lhs->expr_type == EXPR_VARIABLE
10587 && lhs->symtree->n.sym != gfc_current_ns->proc_name
10588 && lhs->symtree->n.sym->ns != gfc_current_ns)
10589 gfc_unset_implicit_pure (NULL);
10590
10591 if (lhs->ts.type == BT_DERIVED
10592 && lhs->expr_type == EXPR_VARIABLE
10593 && lhs->ts.u.derived->attr.pointer_comp
10594 && rhs->expr_type == EXPR_VARIABLE
10595 && (gfc_impure_variable (rhs->symtree->n.sym)
10596 || gfc_is_coindexed (rhs)))
10597 gfc_unset_implicit_pure (NULL);
10598
10599 /* Fortran 2008, C1283. */
10600 if (gfc_is_coindexed (lhs))
10601 gfc_unset_implicit_pure (NULL);
10602 }
10603
10604 /* F2008, 7.2.1.2. */
10605 attr = gfc_expr_attr (lhs);
10606 if (lhs->ts.type == BT_CLASS && attr.allocatable)
10607 {
10608 if (attr.codimension)
10609 {
10610 gfc_error ("Assignment to polymorphic coarray at %L is not "
10611 "permitted", &lhs->where);
10612 return false;
10613 }
10614 if (!gfc_notify_std (GFC_STD_F2008, "Assignment to an allocatable "
10615 "polymorphic variable at %L", &lhs->where))
10616 return false;
10617 if (!flag_realloc_lhs)
10618 {
10619 gfc_error ("Assignment to an allocatable polymorphic variable at %L "
10620 "requires %<-frealloc-lhs%>", &lhs->where);
10621 return false;
10622 }
10623 }
10624 else if (lhs->ts.type == BT_CLASS)
10625 {
10626 gfc_error ("Nonallocatable variable must not be polymorphic in intrinsic "
10627 "assignment at %L - check that there is a matching specific "
10628 "subroutine for '=' operator", &lhs->where);
10629 return false;
10630 }
10631
10632 bool lhs_coindexed = gfc_is_coindexed (lhs);
10633
10634 /* F2008, Section 7.2.1.2. */
10635 if (lhs_coindexed && gfc_has_ultimate_allocatable (lhs))
10636 {
10637 gfc_error ("Coindexed variable must not have an allocatable ultimate "
10638 "component in assignment at %L", &lhs->where);
10639 return false;
10640 }
10641
10642 /* Assign the 'data' of a class object to a derived type. */
10643 if (lhs->ts.type == BT_DERIVED
10644 && rhs->ts.type == BT_CLASS
10645 && rhs->expr_type != EXPR_ARRAY)
10646 gfc_add_data_component (rhs);
10647
10648 /* Make sure there is a vtable and, in particular, a _copy for the
10649 rhs type. */
10650 if (UNLIMITED_POLY (lhs) && lhs->rank && rhs->ts.type != BT_CLASS)
10651 gfc_find_vtab (&rhs->ts);
10652
10653 bool caf_convert_to_send = flag_coarray == GFC_FCOARRAY_LIB
10654 && (lhs_coindexed
10655 || (code->expr2->expr_type == EXPR_FUNCTION
10656 && code->expr2->value.function.isym
10657 && code->expr2->value.function.isym->id == GFC_ISYM_CAF_GET
10658 && (code->expr1->rank == 0 || code->expr2->rank != 0)
10659 && !gfc_expr_attr (rhs).allocatable
10660 && !gfc_has_vector_subscript (rhs)));
10661
10662 gfc_check_assign (lhs, rhs, 1, !caf_convert_to_send);
10663
10664 /* Insert a GFC_ISYM_CAF_SEND intrinsic, when the LHS is a coindexed variable.
10665 Additionally, insert this code when the RHS is a CAF as we then use the
10666 GFC_ISYM_CAF_SEND intrinsic just to avoid a temporary; but do not do so if
10667 the LHS is (re)allocatable or has a vector subscript. If the LHS is a
10668 noncoindexed array and the RHS is a coindexed scalar, use the normal code
10669 path. */
10670 if (caf_convert_to_send)
10671 {
10672 if (code->expr2->expr_type == EXPR_FUNCTION
10673 && code->expr2->value.function.isym
10674 && code->expr2->value.function.isym->id == GFC_ISYM_CAF_GET)
10675 remove_caf_get_intrinsic (code->expr2);
10676 code->op = EXEC_CALL;
10677 gfc_get_sym_tree (GFC_PREFIX ("caf_send"), ns, &code->symtree, true);
10678 code->resolved_sym = code->symtree->n.sym;
10679 code->resolved_sym->attr.flavor = FL_PROCEDURE;
10680 code->resolved_sym->attr.intrinsic = 1;
10681 code->resolved_sym->attr.subroutine = 1;
10682 code->resolved_isym = gfc_intrinsic_subroutine_by_id (GFC_ISYM_CAF_SEND);
10683 gfc_commit_symbol (code->resolved_sym);
10684 code->ext.actual = gfc_get_actual_arglist ();
10685 code->ext.actual->expr = lhs;
10686 code->ext.actual->next = gfc_get_actual_arglist ();
10687 code->ext.actual->next->expr = rhs;
10688 code->expr1 = NULL;
10689 code->expr2 = NULL;
10690 }
10691
10692 return false;
10693 }
10694
10695
10696 /* Add a component reference onto an expression. */
10697
10698 static void
10699 add_comp_ref (gfc_expr *e, gfc_component *c)
10700 {
10701 gfc_ref **ref;
10702 ref = &(e->ref);
10703 while (*ref)
10704 ref = &((*ref)->next);
10705 *ref = gfc_get_ref ();
10706 (*ref)->type = REF_COMPONENT;
10707 (*ref)->u.c.sym = e->ts.u.derived;
10708 (*ref)->u.c.component = c;
10709 e->ts = c->ts;
10710
10711 /* Add a full array ref, as necessary. */
10712 if (c->as)
10713 {
10714 gfc_add_full_array_ref (e, c->as);
10715 e->rank = c->as->rank;
10716 }
10717 }
10718
10719
10720 /* Build an assignment. Keep the argument 'op' for future use, so that
10721 pointer assignments can be made. */
10722
10723 static gfc_code *
10724 build_assignment (gfc_exec_op op, gfc_expr *expr1, gfc_expr *expr2,
10725 gfc_component *comp1, gfc_component *comp2, locus loc)
10726 {
10727 gfc_code *this_code;
10728
10729 this_code = gfc_get_code (op);
10730 this_code->next = NULL;
10731 this_code->expr1 = gfc_copy_expr (expr1);
10732 this_code->expr2 = gfc_copy_expr (expr2);
10733 this_code->loc = loc;
10734 if (comp1 && comp2)
10735 {
10736 add_comp_ref (this_code->expr1, comp1);
10737 add_comp_ref (this_code->expr2, comp2);
10738 }
10739
10740 return this_code;
10741 }
10742
10743
10744 /* Makes a temporary variable expression based on the characteristics of
10745 a given variable expression. */
10746
10747 static gfc_expr*
10748 get_temp_from_expr (gfc_expr *e, gfc_namespace *ns)
10749 {
10750 static int serial = 0;
10751 char name[GFC_MAX_SYMBOL_LEN];
10752 gfc_symtree *tmp;
10753 gfc_array_spec *as;
10754 gfc_array_ref *aref;
10755 gfc_ref *ref;
10756
10757 sprintf (name, GFC_PREFIX("DA%d"), serial++);
10758 gfc_get_sym_tree (name, ns, &tmp, false);
10759 gfc_add_type (tmp->n.sym, &e->ts, NULL);
10760
10761 if (e->expr_type == EXPR_CONSTANT && e->ts.type == BT_CHARACTER)
10762 tmp->n.sym->ts.u.cl->length = gfc_get_int_expr (gfc_charlen_int_kind,
10763 NULL,
10764 e->value.character.length);
10765
10766 as = NULL;
10767 ref = NULL;
10768 aref = NULL;
10769
10770 /* Obtain the arrayspec for the temporary. */
10771 if (e->rank && e->expr_type != EXPR_ARRAY
10772 && e->expr_type != EXPR_FUNCTION
10773 && e->expr_type != EXPR_OP)
10774 {
10775 aref = gfc_find_array_ref (e);
10776 if (e->expr_type == EXPR_VARIABLE
10777 && e->symtree->n.sym->as == aref->as)
10778 as = aref->as;
10779 else
10780 {
10781 for (ref = e->ref; ref; ref = ref->next)
10782 if (ref->type == REF_COMPONENT
10783 && ref->u.c.component->as == aref->as)
10784 {
10785 as = aref->as;
10786 break;
10787 }
10788 }
10789 }
10790
10791 /* Add the attributes and the arrayspec to the temporary. */
10792 tmp->n.sym->attr = gfc_expr_attr (e);
10793 tmp->n.sym->attr.function = 0;
10794 tmp->n.sym->attr.result = 0;
10795 tmp->n.sym->attr.flavor = FL_VARIABLE;
10796 tmp->n.sym->attr.dummy = 0;
10797 tmp->n.sym->attr.intent = INTENT_UNKNOWN;
10798
10799 if (as)
10800 {
10801 tmp->n.sym->as = gfc_copy_array_spec (as);
10802 if (!ref)
10803 ref = e->ref;
10804 if (as->type == AS_DEFERRED)
10805 tmp->n.sym->attr.allocatable = 1;
10806 }
10807 else if (e->rank && (e->expr_type == EXPR_ARRAY
10808 || e->expr_type == EXPR_FUNCTION
10809 || e->expr_type == EXPR_OP))
10810 {
10811 tmp->n.sym->as = gfc_get_array_spec ();
10812 tmp->n.sym->as->type = AS_DEFERRED;
10813 tmp->n.sym->as->rank = e->rank;
10814 tmp->n.sym->attr.allocatable = 1;
10815 tmp->n.sym->attr.dimension = 1;
10816 }
10817 else
10818 tmp->n.sym->attr.dimension = 0;
10819
10820 gfc_set_sym_referenced (tmp->n.sym);
10821 gfc_commit_symbol (tmp->n.sym);
10822 e = gfc_lval_expr_from_sym (tmp->n.sym);
10823
10824 /* Should the lhs be a section, use its array ref for the
10825 temporary expression. */
10826 if (aref && aref->type != AR_FULL)
10827 {
10828 gfc_free_ref_list (e->ref);
10829 e->ref = gfc_copy_ref (ref);
10830 }
10831 return e;
10832 }
10833
10834
10835 /* Add one line of code to the code chain, making sure that 'head' and
10836 'tail' are appropriately updated. */
10837
10838 static void
10839 add_code_to_chain (gfc_code **this_code, gfc_code **head, gfc_code **tail)
10840 {
10841 gcc_assert (this_code);
10842 if (*head == NULL)
10843 *head = *tail = *this_code;
10844 else
10845 *tail = gfc_append_code (*tail, *this_code);
10846 *this_code = NULL;
10847 }
10848
10849
10850 /* Counts the potential number of part array references that would
10851 result from resolution of typebound defined assignments. */
10852
10853 static int
10854 nonscalar_typebound_assign (gfc_symbol *derived, int depth)
10855 {
10856 gfc_component *c;
10857 int c_depth = 0, t_depth;
10858
10859 for (c= derived->components; c; c = c->next)
10860 {
10861 if ((!gfc_bt_struct (c->ts.type)
10862 || c->attr.pointer
10863 || c->attr.allocatable
10864 || c->attr.proc_pointer_comp
10865 || c->attr.class_pointer
10866 || c->attr.proc_pointer)
10867 && !c->attr.defined_assign_comp)
10868 continue;
10869
10870 if (c->as && c_depth == 0)
10871 c_depth = 1;
10872
10873 if (c->ts.u.derived->attr.defined_assign_comp)
10874 t_depth = nonscalar_typebound_assign (c->ts.u.derived,
10875 c->as ? 1 : 0);
10876 else
10877 t_depth = 0;
10878
10879 c_depth = t_depth > c_depth ? t_depth : c_depth;
10880 }
10881 return depth + c_depth;
10882 }
10883
10884
10885 /* Implement 7.2.1.3 of the F08 standard:
10886 "An intrinsic assignment where the variable is of derived type is
10887 performed as if each component of the variable were assigned from the
10888 corresponding component of expr using pointer assignment (7.2.2) for
10889 each pointer component, defined assignment for each nonpointer
10890 nonallocatable component of a type that has a type-bound defined
10891 assignment consistent with the component, intrinsic assignment for
10892 each other nonpointer nonallocatable component, ..."
10893
10894 The pointer assignments are taken care of by the intrinsic
10895 assignment of the structure itself. This function recursively adds
10896 defined assignments where required. The recursion is accomplished
10897 by calling gfc_resolve_code.
10898
10899 When the lhs in a defined assignment has intent INOUT, we need a
10900 temporary for the lhs. In pseudo-code:
10901
10902 ! Only call function lhs once.
10903 if (lhs is not a constant or an variable)
10904 temp_x = expr2
10905 expr2 => temp_x
10906 ! Do the intrinsic assignment
10907 expr1 = expr2
10908 ! Now do the defined assignments
10909 do over components with typebound defined assignment [%cmp]
10910 #if one component's assignment procedure is INOUT
10911 t1 = expr1
10912 #if expr2 non-variable
10913 temp_x = expr2
10914 expr2 => temp_x
10915 # endif
10916 expr1 = expr2
10917 # for each cmp
10918 t1%cmp {defined=} expr2%cmp
10919 expr1%cmp = t1%cmp
10920 #else
10921 expr1 = expr2
10922
10923 # for each cmp
10924 expr1%cmp {defined=} expr2%cmp
10925 #endif
10926 */
10927
10928 /* The temporary assignments have to be put on top of the additional
10929 code to avoid the result being changed by the intrinsic assignment.
10930 */
10931 static int component_assignment_level = 0;
10932 static gfc_code *tmp_head = NULL, *tmp_tail = NULL;
10933
10934 static void
10935 generate_component_assignments (gfc_code **code, gfc_namespace *ns)
10936 {
10937 gfc_component *comp1, *comp2;
10938 gfc_code *this_code = NULL, *head = NULL, *tail = NULL;
10939 gfc_expr *t1;
10940 int error_count, depth;
10941
10942 gfc_get_errors (NULL, &error_count);
10943
10944 /* Filter out continuing processing after an error. */
10945 if (error_count
10946 || (*code)->expr1->ts.type != BT_DERIVED
10947 || (*code)->expr2->ts.type != BT_DERIVED)
10948 return;
10949
10950 /* TODO: Handle more than one part array reference in assignments. */
10951 depth = nonscalar_typebound_assign ((*code)->expr1->ts.u.derived,
10952 (*code)->expr1->rank ? 1 : 0);
10953 if (depth > 1)
10954 {
10955 gfc_warning (0, "TODO: type-bound defined assignment(s) at %L not "
10956 "done because multiple part array references would "
10957 "occur in intermediate expressions.", &(*code)->loc);
10958 return;
10959 }
10960
10961 component_assignment_level++;
10962
10963 /* Create a temporary so that functions get called only once. */
10964 if ((*code)->expr2->expr_type != EXPR_VARIABLE
10965 && (*code)->expr2->expr_type != EXPR_CONSTANT)
10966 {
10967 gfc_expr *tmp_expr;
10968
10969 /* Assign the rhs to the temporary. */
10970 tmp_expr = get_temp_from_expr ((*code)->expr1, ns);
10971 this_code = build_assignment (EXEC_ASSIGN,
10972 tmp_expr, (*code)->expr2,
10973 NULL, NULL, (*code)->loc);
10974 /* Add the code and substitute the rhs expression. */
10975 add_code_to_chain (&this_code, &tmp_head, &tmp_tail);
10976 gfc_free_expr ((*code)->expr2);
10977 (*code)->expr2 = tmp_expr;
10978 }
10979
10980 /* Do the intrinsic assignment. This is not needed if the lhs is one
10981 of the temporaries generated here, since the intrinsic assignment
10982 to the final result already does this. */
10983 if ((*code)->expr1->symtree->n.sym->name[2] != '@')
10984 {
10985 this_code = build_assignment (EXEC_ASSIGN,
10986 (*code)->expr1, (*code)->expr2,
10987 NULL, NULL, (*code)->loc);
10988 add_code_to_chain (&this_code, &head, &tail);
10989 }
10990
10991 comp1 = (*code)->expr1->ts.u.derived->components;
10992 comp2 = (*code)->expr2->ts.u.derived->components;
10993
10994 t1 = NULL;
10995 for (; comp1; comp1 = comp1->next, comp2 = comp2->next)
10996 {
10997 bool inout = false;
10998
10999 /* The intrinsic assignment does the right thing for pointers
11000 of all kinds and allocatable components. */
11001 if (!gfc_bt_struct (comp1->ts.type)
11002 || comp1->attr.pointer
11003 || comp1->attr.allocatable
11004 || comp1->attr.proc_pointer_comp
11005 || comp1->attr.class_pointer
11006 || comp1->attr.proc_pointer)
11007 continue;
11008
11009 /* Make an assigment for this component. */
11010 this_code = build_assignment (EXEC_ASSIGN,
11011 (*code)->expr1, (*code)->expr2,
11012 comp1, comp2, (*code)->loc);
11013
11014 /* Convert the assignment if there is a defined assignment for
11015 this type. Otherwise, using the call from gfc_resolve_code,
11016 recurse into its components. */
11017 gfc_resolve_code (this_code, ns);
11018
11019 if (this_code->op == EXEC_ASSIGN_CALL)
11020 {
11021 gfc_formal_arglist *dummy_args;
11022 gfc_symbol *rsym;
11023 /* Check that there is a typebound defined assignment. If not,
11024 then this must be a module defined assignment. We cannot
11025 use the defined_assign_comp attribute here because it must
11026 be this derived type that has the defined assignment and not
11027 a parent type. */
11028 if (!(comp1->ts.u.derived->f2k_derived
11029 && comp1->ts.u.derived->f2k_derived
11030 ->tb_op[INTRINSIC_ASSIGN]))
11031 {
11032 gfc_free_statements (this_code);
11033 this_code = NULL;
11034 continue;
11035 }
11036
11037 /* If the first argument of the subroutine has intent INOUT
11038 a temporary must be generated and used instead. */
11039 rsym = this_code->resolved_sym;
11040 dummy_args = gfc_sym_get_dummy_args (rsym);
11041 if (dummy_args
11042 && dummy_args->sym->attr.intent == INTENT_INOUT)
11043 {
11044 gfc_code *temp_code;
11045 inout = true;
11046
11047 /* Build the temporary required for the assignment and put
11048 it at the head of the generated code. */
11049 if (!t1)
11050 {
11051 t1 = get_temp_from_expr ((*code)->expr1, ns);
11052 temp_code = build_assignment (EXEC_ASSIGN,
11053 t1, (*code)->expr1,
11054 NULL, NULL, (*code)->loc);
11055
11056 /* For allocatable LHS, check whether it is allocated. Note
11057 that allocatable components with defined assignment are
11058 not yet support. See PR 57696. */
11059 if ((*code)->expr1->symtree->n.sym->attr.allocatable)
11060 {
11061 gfc_code *block;
11062 gfc_expr *e =
11063 gfc_lval_expr_from_sym ((*code)->expr1->symtree->n.sym);
11064 block = gfc_get_code (EXEC_IF);
11065 block->block = gfc_get_code (EXEC_IF);
11066 block->block->expr1
11067 = gfc_build_intrinsic_call (ns,
11068 GFC_ISYM_ALLOCATED, "allocated",
11069 (*code)->loc, 1, e);
11070 block->block->next = temp_code;
11071 temp_code = block;
11072 }
11073 add_code_to_chain (&temp_code, &tmp_head, &tmp_tail);
11074 }
11075
11076 /* Replace the first actual arg with the component of the
11077 temporary. */
11078 gfc_free_expr (this_code->ext.actual->expr);
11079 this_code->ext.actual->expr = gfc_copy_expr (t1);
11080 add_comp_ref (this_code->ext.actual->expr, comp1);
11081
11082 /* If the LHS variable is allocatable and wasn't allocated and
11083 the temporary is allocatable, pointer assign the address of
11084 the freshly allocated LHS to the temporary. */
11085 if ((*code)->expr1->symtree->n.sym->attr.allocatable
11086 && gfc_expr_attr ((*code)->expr1).allocatable)
11087 {
11088 gfc_code *block;
11089 gfc_expr *cond;
11090
11091 cond = gfc_get_expr ();
11092 cond->ts.type = BT_LOGICAL;
11093 cond->ts.kind = gfc_default_logical_kind;
11094 cond->expr_type = EXPR_OP;
11095 cond->where = (*code)->loc;
11096 cond->value.op.op = INTRINSIC_NOT;
11097 cond->value.op.op1 = gfc_build_intrinsic_call (ns,
11098 GFC_ISYM_ALLOCATED, "allocated",
11099 (*code)->loc, 1, gfc_copy_expr (t1));
11100 block = gfc_get_code (EXEC_IF);
11101 block->block = gfc_get_code (EXEC_IF);
11102 block->block->expr1 = cond;
11103 block->block->next = build_assignment (EXEC_POINTER_ASSIGN,
11104 t1, (*code)->expr1,
11105 NULL, NULL, (*code)->loc);
11106 add_code_to_chain (&block, &head, &tail);
11107 }
11108 }
11109 }
11110 else if (this_code->op == EXEC_ASSIGN && !this_code->next)
11111 {
11112 /* Don't add intrinsic assignments since they are already
11113 effected by the intrinsic assignment of the structure. */
11114 gfc_free_statements (this_code);
11115 this_code = NULL;
11116 continue;
11117 }
11118
11119 add_code_to_chain (&this_code, &head, &tail);
11120
11121 if (t1 && inout)
11122 {
11123 /* Transfer the value to the final result. */
11124 this_code = build_assignment (EXEC_ASSIGN,
11125 (*code)->expr1, t1,
11126 comp1, comp2, (*code)->loc);
11127 add_code_to_chain (&this_code, &head, &tail);
11128 }
11129 }
11130
11131 /* Put the temporary assignments at the top of the generated code. */
11132 if (tmp_head && component_assignment_level == 1)
11133 {
11134 gfc_append_code (tmp_head, head);
11135 head = tmp_head;
11136 tmp_head = tmp_tail = NULL;
11137 }
11138
11139 // If we did a pointer assignment - thus, we need to ensure that the LHS is
11140 // not accidentally deallocated. Hence, nullify t1.
11141 if (t1 && (*code)->expr1->symtree->n.sym->attr.allocatable
11142 && gfc_expr_attr ((*code)->expr1).allocatable)
11143 {
11144 gfc_code *block;
11145 gfc_expr *cond;
11146 gfc_expr *e;
11147
11148 e = gfc_lval_expr_from_sym ((*code)->expr1->symtree->n.sym);
11149 cond = gfc_build_intrinsic_call (ns, GFC_ISYM_ASSOCIATED, "associated",
11150 (*code)->loc, 2, gfc_copy_expr (t1), e);
11151 block = gfc_get_code (EXEC_IF);
11152 block->block = gfc_get_code (EXEC_IF);
11153 block->block->expr1 = cond;
11154 block->block->next = build_assignment (EXEC_POINTER_ASSIGN,
11155 t1, gfc_get_null_expr (&(*code)->loc),
11156 NULL, NULL, (*code)->loc);
11157 gfc_append_code (tail, block);
11158 tail = block;
11159 }
11160
11161 /* Now attach the remaining code chain to the input code. Step on
11162 to the end of the new code since resolution is complete. */
11163 gcc_assert ((*code)->op == EXEC_ASSIGN);
11164 tail->next = (*code)->next;
11165 /* Overwrite 'code' because this would place the intrinsic assignment
11166 before the temporary for the lhs is created. */
11167 gfc_free_expr ((*code)->expr1);
11168 gfc_free_expr ((*code)->expr2);
11169 **code = *head;
11170 if (head != tail)
11171 free (head);
11172 *code = tail;
11173
11174 component_assignment_level--;
11175 }
11176
11177
11178 /* F2008: Pointer function assignments are of the form:
11179 ptr_fcn (args) = expr
11180 This function breaks these assignments into two statements:
11181 temporary_pointer => ptr_fcn(args)
11182 temporary_pointer = expr */
11183
11184 static bool
11185 resolve_ptr_fcn_assign (gfc_code **code, gfc_namespace *ns)
11186 {
11187 gfc_expr *tmp_ptr_expr;
11188 gfc_code *this_code;
11189 gfc_component *comp;
11190 gfc_symbol *s;
11191
11192 if ((*code)->expr1->expr_type != EXPR_FUNCTION)
11193 return false;
11194
11195 /* Even if standard does not support this feature, continue to build
11196 the two statements to avoid upsetting frontend_passes.c. */
11197 gfc_notify_std (GFC_STD_F2008, "Pointer procedure assignment at "
11198 "%L", &(*code)->loc);
11199
11200 comp = gfc_get_proc_ptr_comp ((*code)->expr1);
11201
11202 if (comp)
11203 s = comp->ts.interface;
11204 else
11205 s = (*code)->expr1->symtree->n.sym;
11206
11207 if (s == NULL || !s->result->attr.pointer)
11208 {
11209 gfc_error ("The function result on the lhs of the assignment at "
11210 "%L must have the pointer attribute.",
11211 &(*code)->expr1->where);
11212 (*code)->op = EXEC_NOP;
11213 return false;
11214 }
11215
11216 tmp_ptr_expr = get_temp_from_expr ((*code)->expr2, ns);
11217
11218 /* get_temp_from_expression is set up for ordinary assignments. To that
11219 end, where array bounds are not known, arrays are made allocatable.
11220 Change the temporary to a pointer here. */
11221 tmp_ptr_expr->symtree->n.sym->attr.pointer = 1;
11222 tmp_ptr_expr->symtree->n.sym->attr.allocatable = 0;
11223 tmp_ptr_expr->where = (*code)->loc;
11224
11225 this_code = build_assignment (EXEC_ASSIGN,
11226 tmp_ptr_expr, (*code)->expr2,
11227 NULL, NULL, (*code)->loc);
11228 this_code->next = (*code)->next;
11229 (*code)->next = this_code;
11230 (*code)->op = EXEC_POINTER_ASSIGN;
11231 (*code)->expr2 = (*code)->expr1;
11232 (*code)->expr1 = tmp_ptr_expr;
11233
11234 return true;
11235 }
11236
11237
11238 /* Deferred character length assignments from an operator expression
11239 require a temporary because the character length of the lhs can
11240 change in the course of the assignment. */
11241
11242 static bool
11243 deferred_op_assign (gfc_code **code, gfc_namespace *ns)
11244 {
11245 gfc_expr *tmp_expr;
11246 gfc_code *this_code;
11247
11248 if (!((*code)->expr1->ts.type == BT_CHARACTER
11249 && (*code)->expr1->ts.deferred && (*code)->expr1->rank
11250 && (*code)->expr2->expr_type == EXPR_OP))
11251 return false;
11252
11253 if (!gfc_check_dependency ((*code)->expr1, (*code)->expr2, 1))
11254 return false;
11255
11256 if (gfc_expr_attr ((*code)->expr1).pointer)
11257 return false;
11258
11259 tmp_expr = get_temp_from_expr ((*code)->expr1, ns);
11260 tmp_expr->where = (*code)->loc;
11261
11262 /* A new charlen is required to ensure that the variable string
11263 length is different to that of the original lhs. */
11264 tmp_expr->ts.u.cl = gfc_get_charlen();
11265 tmp_expr->symtree->n.sym->ts.u.cl = tmp_expr->ts.u.cl;
11266 tmp_expr->ts.u.cl->next = (*code)->expr2->ts.u.cl->next;
11267 (*code)->expr2->ts.u.cl->next = tmp_expr->ts.u.cl;
11268
11269 tmp_expr->symtree->n.sym->ts.deferred = 1;
11270
11271 this_code = build_assignment (EXEC_ASSIGN,
11272 (*code)->expr1,
11273 gfc_copy_expr (tmp_expr),
11274 NULL, NULL, (*code)->loc);
11275
11276 (*code)->expr1 = tmp_expr;
11277
11278 this_code->next = (*code)->next;
11279 (*code)->next = this_code;
11280
11281 return true;
11282 }
11283
11284
11285 /* Given a block of code, recursively resolve everything pointed to by this
11286 code block. */
11287
11288 void
11289 gfc_resolve_code (gfc_code *code, gfc_namespace *ns)
11290 {
11291 int omp_workshare_save;
11292 int forall_save, do_concurrent_save;
11293 code_stack frame;
11294 bool t;
11295
11296 frame.prev = cs_base;
11297 frame.head = code;
11298 cs_base = &frame;
11299
11300 find_reachable_labels (code);
11301
11302 for (; code; code = code->next)
11303 {
11304 frame.current = code;
11305 forall_save = forall_flag;
11306 do_concurrent_save = gfc_do_concurrent_flag;
11307
11308 if (code->op == EXEC_FORALL)
11309 {
11310 forall_flag = 1;
11311 gfc_resolve_forall (code, ns, forall_save);
11312 forall_flag = 2;
11313 }
11314 else if (code->block)
11315 {
11316 omp_workshare_save = -1;
11317 switch (code->op)
11318 {
11319 case EXEC_OACC_PARALLEL_LOOP:
11320 case EXEC_OACC_PARALLEL:
11321 case EXEC_OACC_KERNELS_LOOP:
11322 case EXEC_OACC_KERNELS:
11323 case EXEC_OACC_DATA:
11324 case EXEC_OACC_HOST_DATA:
11325 case EXEC_OACC_LOOP:
11326 gfc_resolve_oacc_blocks (code, ns);
11327 break;
11328 case EXEC_OMP_PARALLEL_WORKSHARE:
11329 omp_workshare_save = omp_workshare_flag;
11330 omp_workshare_flag = 1;
11331 gfc_resolve_omp_parallel_blocks (code, ns);
11332 break;
11333 case EXEC_OMP_PARALLEL:
11334 case EXEC_OMP_PARALLEL_DO:
11335 case EXEC_OMP_PARALLEL_DO_SIMD:
11336 case EXEC_OMP_PARALLEL_SECTIONS:
11337 case EXEC_OMP_TARGET_PARALLEL:
11338 case EXEC_OMP_TARGET_PARALLEL_DO:
11339 case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
11340 case EXEC_OMP_TARGET_TEAMS:
11341 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
11342 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
11343 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
11344 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
11345 case EXEC_OMP_TASK:
11346 case EXEC_OMP_TASKLOOP:
11347 case EXEC_OMP_TASKLOOP_SIMD:
11348 case EXEC_OMP_TEAMS:
11349 case EXEC_OMP_TEAMS_DISTRIBUTE:
11350 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
11351 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
11352 case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
11353 omp_workshare_save = omp_workshare_flag;
11354 omp_workshare_flag = 0;
11355 gfc_resolve_omp_parallel_blocks (code, ns);
11356 break;
11357 case EXEC_OMP_DISTRIBUTE:
11358 case EXEC_OMP_DISTRIBUTE_SIMD:
11359 case EXEC_OMP_DO:
11360 case EXEC_OMP_DO_SIMD:
11361 case EXEC_OMP_SIMD:
11362 case EXEC_OMP_TARGET_SIMD:
11363 gfc_resolve_omp_do_blocks (code, ns);
11364 break;
11365 case EXEC_SELECT_TYPE:
11366 /* Blocks are handled in resolve_select_type because we have
11367 to transform the SELECT TYPE into ASSOCIATE first. */
11368 break;
11369 case EXEC_DO_CONCURRENT:
11370 gfc_do_concurrent_flag = 1;
11371 gfc_resolve_blocks (code->block, ns);
11372 gfc_do_concurrent_flag = 2;
11373 break;
11374 case EXEC_OMP_WORKSHARE:
11375 omp_workshare_save = omp_workshare_flag;
11376 omp_workshare_flag = 1;
11377 /* FALL THROUGH */
11378 default:
11379 gfc_resolve_blocks (code->block, ns);
11380 break;
11381 }
11382
11383 if (omp_workshare_save != -1)
11384 omp_workshare_flag = omp_workshare_save;
11385 }
11386 start:
11387 t = true;
11388 if (code->op != EXEC_COMPCALL && code->op != EXEC_CALL_PPC)
11389 t = gfc_resolve_expr (code->expr1);
11390 forall_flag = forall_save;
11391 gfc_do_concurrent_flag = do_concurrent_save;
11392
11393 if (!gfc_resolve_expr (code->expr2))
11394 t = false;
11395
11396 if (code->op == EXEC_ALLOCATE
11397 && !gfc_resolve_expr (code->expr3))
11398 t = false;
11399
11400 switch (code->op)
11401 {
11402 case EXEC_NOP:
11403 case EXEC_END_BLOCK:
11404 case EXEC_END_NESTED_BLOCK:
11405 case EXEC_CYCLE:
11406 case EXEC_PAUSE:
11407 case EXEC_STOP:
11408 case EXEC_ERROR_STOP:
11409 case EXEC_EXIT:
11410 case EXEC_CONTINUE:
11411 case EXEC_DT_END:
11412 case EXEC_ASSIGN_CALL:
11413 break;
11414
11415 case EXEC_CRITICAL:
11416 resolve_critical (code);
11417 break;
11418
11419 case EXEC_SYNC_ALL:
11420 case EXEC_SYNC_IMAGES:
11421 case EXEC_SYNC_MEMORY:
11422 resolve_sync (code);
11423 break;
11424
11425 case EXEC_LOCK:
11426 case EXEC_UNLOCK:
11427 case EXEC_EVENT_POST:
11428 case EXEC_EVENT_WAIT:
11429 resolve_lock_unlock_event (code);
11430 break;
11431
11432 case EXEC_FAIL_IMAGE:
11433 case EXEC_FORM_TEAM:
11434 case EXEC_CHANGE_TEAM:
11435 case EXEC_END_TEAM:
11436 case EXEC_SYNC_TEAM:
11437 break;
11438
11439 case EXEC_ENTRY:
11440 /* Keep track of which entry we are up to. */
11441 current_entry_id = code->ext.entry->id;
11442 break;
11443
11444 case EXEC_WHERE:
11445 resolve_where (code, NULL);
11446 break;
11447
11448 case EXEC_GOTO:
11449 if (code->expr1 != NULL)
11450 {
11451 if (code->expr1->ts.type != BT_INTEGER)
11452 gfc_error ("ASSIGNED GOTO statement at %L requires an "
11453 "INTEGER variable", &code->expr1->where);
11454 else if (code->expr1->symtree->n.sym->attr.assign != 1)
11455 gfc_error ("Variable %qs has not been assigned a target "
11456 "label at %L", code->expr1->symtree->n.sym->name,
11457 &code->expr1->where);
11458 }
11459 else
11460 resolve_branch (code->label1, code);
11461 break;
11462
11463 case EXEC_RETURN:
11464 if (code->expr1 != NULL
11465 && (code->expr1->ts.type != BT_INTEGER || code->expr1->rank))
11466 gfc_error ("Alternate RETURN statement at %L requires a SCALAR-"
11467 "INTEGER return specifier", &code->expr1->where);
11468 break;
11469
11470 case EXEC_INIT_ASSIGN:
11471 case EXEC_END_PROCEDURE:
11472 break;
11473
11474 case EXEC_ASSIGN:
11475 if (!t)
11476 break;
11477
11478 /* Remove a GFC_ISYM_CAF_GET inserted for a coindexed variable on
11479 the LHS. */
11480 if (code->expr1->expr_type == EXPR_FUNCTION
11481 && code->expr1->value.function.isym
11482 && code->expr1->value.function.isym->id == GFC_ISYM_CAF_GET)
11483 remove_caf_get_intrinsic (code->expr1);
11484
11485 /* If this is a pointer function in an lvalue variable context,
11486 the new code will have to be resolved afresh. This is also the
11487 case with an error, where the code is transformed into NOP to
11488 prevent ICEs downstream. */
11489 if (resolve_ptr_fcn_assign (&code, ns)
11490 || code->op == EXEC_NOP)
11491 goto start;
11492
11493 if (!gfc_check_vardef_context (code->expr1, false, false, false,
11494 _("assignment")))
11495 break;
11496
11497 if (resolve_ordinary_assign (code, ns))
11498 {
11499 if (code->op == EXEC_COMPCALL)
11500 goto compcall;
11501 else
11502 goto call;
11503 }
11504
11505 /* Check for dependencies in deferred character length array
11506 assignments and generate a temporary, if necessary. */
11507 if (code->op == EXEC_ASSIGN && deferred_op_assign (&code, ns))
11508 break;
11509
11510 /* F03 7.4.1.3 for non-allocatable, non-pointer components. */
11511 if (code->op != EXEC_CALL && code->expr1->ts.type == BT_DERIVED
11512 && code->expr1->ts.u.derived
11513 && code->expr1->ts.u.derived->attr.defined_assign_comp)
11514 generate_component_assignments (&code, ns);
11515
11516 break;
11517
11518 case EXEC_LABEL_ASSIGN:
11519 if (code->label1->defined == ST_LABEL_UNKNOWN)
11520 gfc_error ("Label %d referenced at %L is never defined",
11521 code->label1->value, &code->label1->where);
11522 if (t
11523 && (code->expr1->expr_type != EXPR_VARIABLE
11524 || code->expr1->symtree->n.sym->ts.type != BT_INTEGER
11525 || code->expr1->symtree->n.sym->ts.kind
11526 != gfc_default_integer_kind
11527 || code->expr1->symtree->n.sym->as != NULL))
11528 gfc_error ("ASSIGN statement at %L requires a scalar "
11529 "default INTEGER variable", &code->expr1->where);
11530 break;
11531
11532 case EXEC_POINTER_ASSIGN:
11533 {
11534 gfc_expr* e;
11535
11536 if (!t)
11537 break;
11538
11539 /* This is both a variable definition and pointer assignment
11540 context, so check both of them. For rank remapping, a final
11541 array ref may be present on the LHS and fool gfc_expr_attr
11542 used in gfc_check_vardef_context. Remove it. */
11543 e = remove_last_array_ref (code->expr1);
11544 t = gfc_check_vardef_context (e, true, false, false,
11545 _("pointer assignment"));
11546 if (t)
11547 t = gfc_check_vardef_context (e, false, false, false,
11548 _("pointer assignment"));
11549 gfc_free_expr (e);
11550
11551 t = gfc_check_pointer_assign (code->expr1, code->expr2, !t) && t;
11552
11553 if (!t)
11554 break;
11555
11556 /* Assigning a class object always is a regular assign. */
11557 if (code->expr2->ts.type == BT_CLASS
11558 && code->expr1->ts.type == BT_CLASS
11559 && !CLASS_DATA (code->expr2)->attr.dimension
11560 && !(gfc_expr_attr (code->expr1).proc_pointer
11561 && code->expr2->expr_type == EXPR_VARIABLE
11562 && code->expr2->symtree->n.sym->attr.flavor
11563 == FL_PROCEDURE))
11564 code->op = EXEC_ASSIGN;
11565 break;
11566 }
11567
11568 case EXEC_ARITHMETIC_IF:
11569 {
11570 gfc_expr *e = code->expr1;
11571
11572 gfc_resolve_expr (e);
11573 if (e->expr_type == EXPR_NULL)
11574 gfc_error ("Invalid NULL at %L", &e->where);
11575
11576 if (t && (e->rank > 0
11577 || !(e->ts.type == BT_REAL || e->ts.type == BT_INTEGER)))
11578 gfc_error ("Arithmetic IF statement at %L requires a scalar "
11579 "REAL or INTEGER expression", &e->where);
11580
11581 resolve_branch (code->label1, code);
11582 resolve_branch (code->label2, code);
11583 resolve_branch (code->label3, code);
11584 }
11585 break;
11586
11587 case EXEC_IF:
11588 if (t && code->expr1 != NULL
11589 && (code->expr1->ts.type != BT_LOGICAL
11590 || code->expr1->rank != 0))
11591 gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
11592 &code->expr1->where);
11593 break;
11594
11595 case EXEC_CALL:
11596 call:
11597 resolve_call (code);
11598 break;
11599
11600 case EXEC_COMPCALL:
11601 compcall:
11602 resolve_typebound_subroutine (code);
11603 break;
11604
11605 case EXEC_CALL_PPC:
11606 resolve_ppc_call (code);
11607 break;
11608
11609 case EXEC_SELECT:
11610 /* Select is complicated. Also, a SELECT construct could be
11611 a transformed computed GOTO. */
11612 resolve_select (code, false);
11613 break;
11614
11615 case EXEC_SELECT_TYPE:
11616 resolve_select_type (code, ns);
11617 break;
11618
11619 case EXEC_BLOCK:
11620 resolve_block_construct (code);
11621 break;
11622
11623 case EXEC_DO:
11624 if (code->ext.iterator != NULL)
11625 {
11626 gfc_iterator *iter = code->ext.iterator;
11627 if (gfc_resolve_iterator (iter, true, false))
11628 gfc_resolve_do_iterator (code, iter->var->symtree->n.sym,
11629 true);
11630 }
11631 break;
11632
11633 case EXEC_DO_WHILE:
11634 if (code->expr1 == NULL)
11635 gfc_internal_error ("gfc_resolve_code(): No expression on "
11636 "DO WHILE");
11637 if (t
11638 && (code->expr1->rank != 0
11639 || code->expr1->ts.type != BT_LOGICAL))
11640 gfc_error ("Exit condition of DO WHILE loop at %L must be "
11641 "a scalar LOGICAL expression", &code->expr1->where);
11642 break;
11643
11644 case EXEC_ALLOCATE:
11645 if (t)
11646 resolve_allocate_deallocate (code, "ALLOCATE");
11647
11648 break;
11649
11650 case EXEC_DEALLOCATE:
11651 if (t)
11652 resolve_allocate_deallocate (code, "DEALLOCATE");
11653
11654 break;
11655
11656 case EXEC_OPEN:
11657 if (!gfc_resolve_open (code->ext.open))
11658 break;
11659
11660 resolve_branch (code->ext.open->err, code);
11661 break;
11662
11663 case EXEC_CLOSE:
11664 if (!gfc_resolve_close (code->ext.close))
11665 break;
11666
11667 resolve_branch (code->ext.close->err, code);
11668 break;
11669
11670 case EXEC_BACKSPACE:
11671 case EXEC_ENDFILE:
11672 case EXEC_REWIND:
11673 case EXEC_FLUSH:
11674 if (!gfc_resolve_filepos (code->ext.filepos, &code->loc))
11675 break;
11676
11677 resolve_branch (code->ext.filepos->err, code);
11678 break;
11679
11680 case EXEC_INQUIRE:
11681 if (!gfc_resolve_inquire (code->ext.inquire))
11682 break;
11683
11684 resolve_branch (code->ext.inquire->err, code);
11685 break;
11686
11687 case EXEC_IOLENGTH:
11688 gcc_assert (code->ext.inquire != NULL);
11689 if (!gfc_resolve_inquire (code->ext.inquire))
11690 break;
11691
11692 resolve_branch (code->ext.inquire->err, code);
11693 break;
11694
11695 case EXEC_WAIT:
11696 if (!gfc_resolve_wait (code->ext.wait))
11697 break;
11698
11699 resolve_branch (code->ext.wait->err, code);
11700 resolve_branch (code->ext.wait->end, code);
11701 resolve_branch (code->ext.wait->eor, code);
11702 break;
11703
11704 case EXEC_READ:
11705 case EXEC_WRITE:
11706 if (!gfc_resolve_dt (code->ext.dt, &code->loc))
11707 break;
11708
11709 resolve_branch (code->ext.dt->err, code);
11710 resolve_branch (code->ext.dt->end, code);
11711 resolve_branch (code->ext.dt->eor, code);
11712 break;
11713
11714 case EXEC_TRANSFER:
11715 resolve_transfer (code);
11716 break;
11717
11718 case EXEC_DO_CONCURRENT:
11719 case EXEC_FORALL:
11720 resolve_forall_iterators (code->ext.forall_iterator);
11721
11722 if (code->expr1 != NULL
11723 && (code->expr1->ts.type != BT_LOGICAL || code->expr1->rank))
11724 gfc_error ("FORALL mask clause at %L requires a scalar LOGICAL "
11725 "expression", &code->expr1->where);
11726 break;
11727
11728 case EXEC_OACC_PARALLEL_LOOP:
11729 case EXEC_OACC_PARALLEL:
11730 case EXEC_OACC_KERNELS_LOOP:
11731 case EXEC_OACC_KERNELS:
11732 case EXEC_OACC_DATA:
11733 case EXEC_OACC_HOST_DATA:
11734 case EXEC_OACC_LOOP:
11735 case EXEC_OACC_UPDATE:
11736 case EXEC_OACC_WAIT:
11737 case EXEC_OACC_CACHE:
11738 case EXEC_OACC_ENTER_DATA:
11739 case EXEC_OACC_EXIT_DATA:
11740 case EXEC_OACC_ATOMIC:
11741 case EXEC_OACC_DECLARE:
11742 gfc_resolve_oacc_directive (code, ns);
11743 break;
11744
11745 case EXEC_OMP_ATOMIC:
11746 case EXEC_OMP_BARRIER:
11747 case EXEC_OMP_CANCEL:
11748 case EXEC_OMP_CANCELLATION_POINT:
11749 case EXEC_OMP_CRITICAL:
11750 case EXEC_OMP_FLUSH:
11751 case EXEC_OMP_DISTRIBUTE:
11752 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
11753 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
11754 case EXEC_OMP_DISTRIBUTE_SIMD:
11755 case EXEC_OMP_DO:
11756 case EXEC_OMP_DO_SIMD:
11757 case EXEC_OMP_MASTER:
11758 case EXEC_OMP_ORDERED:
11759 case EXEC_OMP_SECTIONS:
11760 case EXEC_OMP_SIMD:
11761 case EXEC_OMP_SINGLE:
11762 case EXEC_OMP_TARGET:
11763 case EXEC_OMP_TARGET_DATA:
11764 case EXEC_OMP_TARGET_ENTER_DATA:
11765 case EXEC_OMP_TARGET_EXIT_DATA:
11766 case EXEC_OMP_TARGET_PARALLEL:
11767 case EXEC_OMP_TARGET_PARALLEL_DO:
11768 case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
11769 case EXEC_OMP_TARGET_SIMD:
11770 case EXEC_OMP_TARGET_TEAMS:
11771 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
11772 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
11773 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
11774 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
11775 case EXEC_OMP_TARGET_UPDATE:
11776 case EXEC_OMP_TASK:
11777 case EXEC_OMP_TASKGROUP:
11778 case EXEC_OMP_TASKLOOP:
11779 case EXEC_OMP_TASKLOOP_SIMD:
11780 case EXEC_OMP_TASKWAIT:
11781 case EXEC_OMP_TASKYIELD:
11782 case EXEC_OMP_TEAMS:
11783 case EXEC_OMP_TEAMS_DISTRIBUTE:
11784 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
11785 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
11786 case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
11787 case EXEC_OMP_WORKSHARE:
11788 gfc_resolve_omp_directive (code, ns);
11789 break;
11790
11791 case EXEC_OMP_PARALLEL:
11792 case EXEC_OMP_PARALLEL_DO:
11793 case EXEC_OMP_PARALLEL_DO_SIMD:
11794 case EXEC_OMP_PARALLEL_SECTIONS:
11795 case EXEC_OMP_PARALLEL_WORKSHARE:
11796 omp_workshare_save = omp_workshare_flag;
11797 omp_workshare_flag = 0;
11798 gfc_resolve_omp_directive (code, ns);
11799 omp_workshare_flag = omp_workshare_save;
11800 break;
11801
11802 default:
11803 gfc_internal_error ("gfc_resolve_code(): Bad statement code");
11804 }
11805 }
11806
11807 cs_base = frame.prev;
11808 }
11809
11810
11811 /* Resolve initial values and make sure they are compatible with
11812 the variable. */
11813
11814 static void
11815 resolve_values (gfc_symbol *sym)
11816 {
11817 bool t;
11818
11819 if (sym->value == NULL)
11820 return;
11821
11822 if (sym->value->expr_type == EXPR_STRUCTURE)
11823 t= resolve_structure_cons (sym->value, 1);
11824 else
11825 t = gfc_resolve_expr (sym->value);
11826
11827 if (!t)
11828 return;
11829
11830 gfc_check_assign_symbol (sym, NULL, sym->value);
11831 }
11832
11833
11834 /* Verify any BIND(C) derived types in the namespace so we can report errors
11835 for them once, rather than for each variable declared of that type. */
11836
11837 static void
11838 resolve_bind_c_derived_types (gfc_symbol *derived_sym)
11839 {
11840 if (derived_sym != NULL && derived_sym->attr.flavor == FL_DERIVED
11841 && derived_sym->attr.is_bind_c == 1)
11842 verify_bind_c_derived_type (derived_sym);
11843
11844 return;
11845 }
11846
11847
11848 /* Check the interfaces of DTIO procedures associated with derived
11849 type 'sym'. These procedures can either have typebound bindings or
11850 can appear in DTIO generic interfaces. */
11851
11852 static void
11853 gfc_verify_DTIO_procedures (gfc_symbol *sym)
11854 {
11855 if (!sym || sym->attr.flavor != FL_DERIVED)
11856 return;
11857
11858 gfc_check_dtio_interfaces (sym);
11859
11860 return;
11861 }
11862
11863 /* Verify that any binding labels used in a given namespace do not collide
11864 with the names or binding labels of any global symbols. Multiple INTERFACE
11865 for the same procedure are permitted. */
11866
11867 static void
11868 gfc_verify_binding_labels (gfc_symbol *sym)
11869 {
11870 gfc_gsymbol *gsym;
11871 const char *module;
11872
11873 if (!sym || !sym->attr.is_bind_c || sym->attr.is_iso_c
11874 || sym->attr.flavor == FL_DERIVED || !sym->binding_label)
11875 return;
11876
11877 gsym = gfc_find_case_gsymbol (gfc_gsym_root, sym->binding_label);
11878
11879 if (sym->module)
11880 module = sym->module;
11881 else if (sym->ns && sym->ns->proc_name
11882 && sym->ns->proc_name->attr.flavor == FL_MODULE)
11883 module = sym->ns->proc_name->name;
11884 else if (sym->ns && sym->ns->parent
11885 && sym->ns && sym->ns->parent->proc_name
11886 && sym->ns->parent->proc_name->attr.flavor == FL_MODULE)
11887 module = sym->ns->parent->proc_name->name;
11888 else
11889 module = NULL;
11890
11891 if (!gsym
11892 || (!gsym->defined
11893 && (gsym->type == GSYM_FUNCTION || gsym->type == GSYM_SUBROUTINE)))
11894 {
11895 if (!gsym)
11896 gsym = gfc_get_gsymbol (sym->binding_label, true);
11897 gsym->where = sym->declared_at;
11898 gsym->sym_name = sym->name;
11899 gsym->binding_label = sym->binding_label;
11900 gsym->ns = sym->ns;
11901 gsym->mod_name = module;
11902 if (sym->attr.function)
11903 gsym->type = GSYM_FUNCTION;
11904 else if (sym->attr.subroutine)
11905 gsym->type = GSYM_SUBROUTINE;
11906 /* Mark as variable/procedure as defined, unless its an INTERFACE. */
11907 gsym->defined = sym->attr.if_source != IFSRC_IFBODY;
11908 return;
11909 }
11910
11911 if (sym->attr.flavor == FL_VARIABLE && gsym->type != GSYM_UNKNOWN)
11912 {
11913 gfc_error ("Variable %qs with binding label %qs at %L uses the same global "
11914 "identifier as entity at %L", sym->name,
11915 sym->binding_label, &sym->declared_at, &gsym->where);
11916 /* Clear the binding label to prevent checking multiple times. */
11917 sym->binding_label = NULL;
11918 return;
11919 }
11920
11921 if (sym->attr.flavor == FL_VARIABLE && module
11922 && (strcmp (module, gsym->mod_name) != 0
11923 || strcmp (sym->name, gsym->sym_name) != 0))
11924 {
11925 /* This can only happen if the variable is defined in a module - if it
11926 isn't the same module, reject it. */
11927 gfc_error ("Variable %qs from module %qs with binding label %qs at %L "
11928 "uses the same global identifier as entity at %L from module %qs",
11929 sym->name, module, sym->binding_label,
11930 &sym->declared_at, &gsym->where, gsym->mod_name);
11931 sym->binding_label = NULL;
11932 return;
11933 }
11934
11935 if ((sym->attr.function || sym->attr.subroutine)
11936 && ((gsym->type != GSYM_SUBROUTINE && gsym->type != GSYM_FUNCTION)
11937 || (gsym->defined && sym->attr.if_source != IFSRC_IFBODY))
11938 && (sym != gsym->ns->proc_name && sym->attr.entry == 0)
11939 && (module != gsym->mod_name
11940 || strcmp (gsym->sym_name, sym->name) != 0
11941 || (module && strcmp (module, gsym->mod_name) != 0)))
11942 {
11943 /* Print an error if the procedure is defined multiple times; we have to
11944 exclude references to the same procedure via module association or
11945 multiple checks for the same procedure. */
11946 gfc_error ("Procedure %qs with binding label %qs at %L uses the same "
11947 "global identifier as entity at %L", sym->name,
11948 sym->binding_label, &sym->declared_at, &gsym->where);
11949 sym->binding_label = NULL;
11950 }
11951 }
11952
11953
11954 /* Resolve an index expression. */
11955
11956 static bool
11957 resolve_index_expr (gfc_expr *e)
11958 {
11959 if (!gfc_resolve_expr (e))
11960 return false;
11961
11962 if (!gfc_simplify_expr (e, 0))
11963 return false;
11964
11965 if (!gfc_specification_expr (e))
11966 return false;
11967
11968 return true;
11969 }
11970
11971
11972 /* Resolve a charlen structure. */
11973
11974 static bool
11975 resolve_charlen (gfc_charlen *cl)
11976 {
11977 int k;
11978 bool saved_specification_expr;
11979
11980 if (cl->resolved)
11981 return true;
11982
11983 cl->resolved = 1;
11984 saved_specification_expr = specification_expr;
11985 specification_expr = true;
11986
11987 if (cl->length_from_typespec)
11988 {
11989 if (!gfc_resolve_expr (cl->length))
11990 {
11991 specification_expr = saved_specification_expr;
11992 return false;
11993 }
11994
11995 if (!gfc_simplify_expr (cl->length, 0))
11996 {
11997 specification_expr = saved_specification_expr;
11998 return false;
11999 }
12000
12001 /* cl->length has been resolved. It should have an integer type. */
12002 if (cl->length->ts.type != BT_INTEGER)
12003 {
12004 gfc_error ("Scalar INTEGER expression expected at %L",
12005 &cl->length->where);
12006 return false;
12007 }
12008 }
12009 else
12010 {
12011 if (!resolve_index_expr (cl->length))
12012 {
12013 specification_expr = saved_specification_expr;
12014 return false;
12015 }
12016 }
12017
12018 /* F2008, 4.4.3.2: If the character length parameter value evaluates to
12019 a negative value, the length of character entities declared is zero. */
12020 if (cl->length && cl->length->expr_type == EXPR_CONSTANT
12021 && mpz_sgn (cl->length->value.integer) < 0)
12022 gfc_replace_expr (cl->length,
12023 gfc_get_int_expr (gfc_charlen_int_kind, NULL, 0));
12024
12025 /* Check that the character length is not too large. */
12026 k = gfc_validate_kind (BT_INTEGER, gfc_charlen_int_kind, false);
12027 if (cl->length && cl->length->expr_type == EXPR_CONSTANT
12028 && cl->length->ts.type == BT_INTEGER
12029 && mpz_cmp (cl->length->value.integer, gfc_integer_kinds[k].huge) > 0)
12030 {
12031 gfc_error ("String length at %L is too large", &cl->length->where);
12032 specification_expr = saved_specification_expr;
12033 return false;
12034 }
12035
12036 specification_expr = saved_specification_expr;
12037 return true;
12038 }
12039
12040
12041 /* Test for non-constant shape arrays. */
12042
12043 static bool
12044 is_non_constant_shape_array (gfc_symbol *sym)
12045 {
12046 gfc_expr *e;
12047 int i;
12048 bool not_constant;
12049
12050 not_constant = false;
12051 if (sym->as != NULL)
12052 {
12053 /* Unfortunately, !gfc_is_compile_time_shape hits a legal case that
12054 has not been simplified; parameter array references. Do the
12055 simplification now. */
12056 for (i = 0; i < sym->as->rank + sym->as->corank; i++)
12057 {
12058 e = sym->as->lower[i];
12059 if (e && (!resolve_index_expr(e)
12060 || !gfc_is_constant_expr (e)))
12061 not_constant = true;
12062 e = sym->as->upper[i];
12063 if (e && (!resolve_index_expr(e)
12064 || !gfc_is_constant_expr (e)))
12065 not_constant = true;
12066 }
12067 }
12068 return not_constant;
12069 }
12070
12071 /* Given a symbol and an initialization expression, add code to initialize
12072 the symbol to the function entry. */
12073 static void
12074 build_init_assign (gfc_symbol *sym, gfc_expr *init)
12075 {
12076 gfc_expr *lval;
12077 gfc_code *init_st;
12078 gfc_namespace *ns = sym->ns;
12079
12080 /* Search for the function namespace if this is a contained
12081 function without an explicit result. */
12082 if (sym->attr.function && sym == sym->result
12083 && sym->name != sym->ns->proc_name->name)
12084 {
12085 ns = ns->contained;
12086 for (;ns; ns = ns->sibling)
12087 if (strcmp (ns->proc_name->name, sym->name) == 0)
12088 break;
12089 }
12090
12091 if (ns == NULL)
12092 {
12093 gfc_free_expr (init);
12094 return;
12095 }
12096
12097 /* Build an l-value expression for the result. */
12098 lval = gfc_lval_expr_from_sym (sym);
12099
12100 /* Add the code at scope entry. */
12101 init_st = gfc_get_code (EXEC_INIT_ASSIGN);
12102 init_st->next = ns->code;
12103 ns->code = init_st;
12104
12105 /* Assign the default initializer to the l-value. */
12106 init_st->loc = sym->declared_at;
12107 init_st->expr1 = lval;
12108 init_st->expr2 = init;
12109 }
12110
12111
12112 /* Whether or not we can generate a default initializer for a symbol. */
12113
12114 static bool
12115 can_generate_init (gfc_symbol *sym)
12116 {
12117 symbol_attribute *a;
12118 if (!sym)
12119 return false;
12120 a = &sym->attr;
12121
12122 /* These symbols should never have a default initialization. */
12123 return !(
12124 a->allocatable
12125 || a->external
12126 || a->pointer
12127 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
12128 && (CLASS_DATA (sym)->attr.class_pointer
12129 || CLASS_DATA (sym)->attr.proc_pointer))
12130 || a->in_equivalence
12131 || a->in_common
12132 || a->data
12133 || sym->module
12134 || a->cray_pointee
12135 || a->cray_pointer
12136 || sym->assoc
12137 || (!a->referenced && !a->result)
12138 || (a->dummy && a->intent != INTENT_OUT)
12139 || (a->function && sym != sym->result)
12140 );
12141 }
12142
12143
12144 /* Assign the default initializer to a derived type variable or result. */
12145
12146 static void
12147 apply_default_init (gfc_symbol *sym)
12148 {
12149 gfc_expr *init = NULL;
12150
12151 if (sym->attr.flavor != FL_VARIABLE && !sym->attr.function)
12152 return;
12153
12154 if (sym->ts.type == BT_DERIVED && sym->ts.u.derived)
12155 init = gfc_generate_initializer (&sym->ts, can_generate_init (sym));
12156
12157 if (init == NULL && sym->ts.type != BT_CLASS)
12158 return;
12159
12160 build_init_assign (sym, init);
12161 sym->attr.referenced = 1;
12162 }
12163
12164
12165 /* Build an initializer for a local. Returns null if the symbol should not have
12166 a default initialization. */
12167
12168 static gfc_expr *
12169 build_default_init_expr (gfc_symbol *sym)
12170 {
12171 /* These symbols should never have a default initialization. */
12172 if (sym->attr.allocatable
12173 || sym->attr.external
12174 || sym->attr.dummy
12175 || sym->attr.pointer
12176 || sym->attr.in_equivalence
12177 || sym->attr.in_common
12178 || sym->attr.data
12179 || sym->module
12180 || sym->attr.cray_pointee
12181 || sym->attr.cray_pointer
12182 || sym->assoc)
12183 return NULL;
12184
12185 /* Get the appropriate init expression. */
12186 return gfc_build_default_init_expr (&sym->ts, &sym->declared_at);
12187 }
12188
12189 /* Add an initialization expression to a local variable. */
12190 static void
12191 apply_default_init_local (gfc_symbol *sym)
12192 {
12193 gfc_expr *init = NULL;
12194
12195 /* The symbol should be a variable or a function return value. */
12196 if ((sym->attr.flavor != FL_VARIABLE && !sym->attr.function)
12197 || (sym->attr.function && sym->result != sym))
12198 return;
12199
12200 /* Try to build the initializer expression. If we can't initialize
12201 this symbol, then init will be NULL. */
12202 init = build_default_init_expr (sym);
12203 if (init == NULL)
12204 return;
12205
12206 /* For saved variables, we don't want to add an initializer at function
12207 entry, so we just add a static initializer. Note that automatic variables
12208 are stack allocated even with -fno-automatic; we have also to exclude
12209 result variable, which are also nonstatic. */
12210 if (!sym->attr.automatic
12211 && (sym->attr.save || sym->ns->save_all
12212 || (flag_max_stack_var_size == 0 && !sym->attr.result
12213 && (sym->ns->proc_name && !sym->ns->proc_name->attr.recursive)
12214 && (!sym->attr.dimension || !is_non_constant_shape_array (sym)))))
12215 {
12216 /* Don't clobber an existing initializer! */
12217 gcc_assert (sym->value == NULL);
12218 sym->value = init;
12219 return;
12220 }
12221
12222 build_init_assign (sym, init);
12223 }
12224
12225
12226 /* Resolution of common features of flavors variable and procedure. */
12227
12228 static bool
12229 resolve_fl_var_and_proc (gfc_symbol *sym, int mp_flag)
12230 {
12231 gfc_array_spec *as;
12232
12233 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
12234 as = CLASS_DATA (sym)->as;
12235 else
12236 as = sym->as;
12237
12238 /* Constraints on deferred shape variable. */
12239 if (as == NULL || as->type != AS_DEFERRED)
12240 {
12241 bool pointer, allocatable, dimension;
12242
12243 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
12244 {
12245 pointer = CLASS_DATA (sym)->attr.class_pointer;
12246 allocatable = CLASS_DATA (sym)->attr.allocatable;
12247 dimension = CLASS_DATA (sym)->attr.dimension;
12248 }
12249 else
12250 {
12251 pointer = sym->attr.pointer && !sym->attr.select_type_temporary;
12252 allocatable = sym->attr.allocatable;
12253 dimension = sym->attr.dimension;
12254 }
12255
12256 if (allocatable)
12257 {
12258 if (dimension && as->type != AS_ASSUMED_RANK)
12259 {
12260 gfc_error ("Allocatable array %qs at %L must have a deferred "
12261 "shape or assumed rank", sym->name, &sym->declared_at);
12262 return false;
12263 }
12264 else if (!gfc_notify_std (GFC_STD_F2003, "Scalar object "
12265 "%qs at %L may not be ALLOCATABLE",
12266 sym->name, &sym->declared_at))
12267 return false;
12268 }
12269
12270 if (pointer && dimension && as->type != AS_ASSUMED_RANK)
12271 {
12272 gfc_error ("Array pointer %qs at %L must have a deferred shape or "
12273 "assumed rank", sym->name, &sym->declared_at);
12274 return false;
12275 }
12276 }
12277 else
12278 {
12279 if (!mp_flag && !sym->attr.allocatable && !sym->attr.pointer
12280 && sym->ts.type != BT_CLASS && !sym->assoc)
12281 {
12282 gfc_error ("Array %qs at %L cannot have a deferred shape",
12283 sym->name, &sym->declared_at);
12284 return false;
12285 }
12286 }
12287
12288 /* Constraints on polymorphic variables. */
12289 if (sym->ts.type == BT_CLASS && !(sym->result && sym->result != sym))
12290 {
12291 /* F03:C502. */
12292 if (sym->attr.class_ok
12293 && !sym->attr.select_type_temporary
12294 && !UNLIMITED_POLY (sym)
12295 && !gfc_type_is_extensible (CLASS_DATA (sym)->ts.u.derived))
12296 {
12297 gfc_error ("Type %qs of CLASS variable %qs at %L is not extensible",
12298 CLASS_DATA (sym)->ts.u.derived->name, sym->name,
12299 &sym->declared_at);
12300 return false;
12301 }
12302
12303 /* F03:C509. */
12304 /* Assume that use associated symbols were checked in the module ns.
12305 Class-variables that are associate-names are also something special
12306 and excepted from the test. */
12307 if (!sym->attr.class_ok && !sym->attr.use_assoc && !sym->assoc)
12308 {
12309 gfc_error ("CLASS variable %qs at %L must be dummy, allocatable "
12310 "or pointer", sym->name, &sym->declared_at);
12311 return false;
12312 }
12313 }
12314
12315 return true;
12316 }
12317
12318
12319 /* Additional checks for symbols with flavor variable and derived
12320 type. To be called from resolve_fl_variable. */
12321
12322 static bool
12323 resolve_fl_variable_derived (gfc_symbol *sym, int no_init_flag)
12324 {
12325 gcc_assert (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS);
12326
12327 /* Check to see if a derived type is blocked from being host
12328 associated by the presence of another class I symbol in the same
12329 namespace. 14.6.1.3 of the standard and the discussion on
12330 comp.lang.fortran. */
12331 if (sym->ns != sym->ts.u.derived->ns
12332 && !sym->ts.u.derived->attr.use_assoc
12333 && sym->ns->proc_name->attr.if_source != IFSRC_IFBODY)
12334 {
12335 gfc_symbol *s;
12336 gfc_find_symbol (sym->ts.u.derived->name, sym->ns, 0, &s);
12337 if (s && s->attr.generic)
12338 s = gfc_find_dt_in_generic (s);
12339 if (s && !gfc_fl_struct (s->attr.flavor))
12340 {
12341 gfc_error ("The type %qs cannot be host associated at %L "
12342 "because it is blocked by an incompatible object "
12343 "of the same name declared at %L",
12344 sym->ts.u.derived->name, &sym->declared_at,
12345 &s->declared_at);
12346 return false;
12347 }
12348 }
12349
12350 /* 4th constraint in section 11.3: "If an object of a type for which
12351 component-initialization is specified (R429) appears in the
12352 specification-part of a module and does not have the ALLOCATABLE
12353 or POINTER attribute, the object shall have the SAVE attribute."
12354
12355 The check for initializers is performed with
12356 gfc_has_default_initializer because gfc_default_initializer generates
12357 a hidden default for allocatable components. */
12358 if (!(sym->value || no_init_flag) && sym->ns->proc_name
12359 && sym->ns->proc_name->attr.flavor == FL_MODULE
12360 && !(sym->ns->save_all && !sym->attr.automatic) && !sym->attr.save
12361 && !sym->attr.pointer && !sym->attr.allocatable
12362 && gfc_has_default_initializer (sym->ts.u.derived)
12363 && !gfc_notify_std (GFC_STD_F2008, "Implied SAVE for module variable "
12364 "%qs at %L, needed due to the default "
12365 "initialization", sym->name, &sym->declared_at))
12366 return false;
12367
12368 /* Assign default initializer. */
12369 if (!(sym->value || sym->attr.pointer || sym->attr.allocatable)
12370 && (!no_init_flag || sym->attr.intent == INTENT_OUT))
12371 sym->value = gfc_generate_initializer (&sym->ts, can_generate_init (sym));
12372
12373 return true;
12374 }
12375
12376
12377 /* F2008, C402 (R401): A colon shall not be used as a type-param-value
12378 except in the declaration of an entity or component that has the POINTER
12379 or ALLOCATABLE attribute. */
12380
12381 static bool
12382 deferred_requirements (gfc_symbol *sym)
12383 {
12384 if (sym->ts.deferred
12385 && !(sym->attr.pointer
12386 || sym->attr.allocatable
12387 || sym->attr.associate_var
12388 || sym->attr.omp_udr_artificial_var))
12389 {
12390 /* If a function has a result variable, only check the variable. */
12391 if (sym->result && sym->name != sym->result->name)
12392 return true;
12393
12394 gfc_error ("Entity %qs at %L has a deferred type parameter and "
12395 "requires either the POINTER or ALLOCATABLE attribute",
12396 sym->name, &sym->declared_at);
12397 return false;
12398 }
12399 return true;
12400 }
12401
12402
12403 /* Resolve symbols with flavor variable. */
12404
12405 static bool
12406 resolve_fl_variable (gfc_symbol *sym, int mp_flag)
12407 {
12408 const char *auto_save_msg = "Automatic object %qs at %L cannot have the "
12409 "SAVE attribute";
12410
12411 if (!resolve_fl_var_and_proc (sym, mp_flag))
12412 return false;
12413
12414 /* Set this flag to check that variables are parameters of all entries.
12415 This check is effected by the call to gfc_resolve_expr through
12416 is_non_constant_shape_array. */
12417 bool saved_specification_expr = specification_expr;
12418 specification_expr = true;
12419
12420 if (sym->ns->proc_name
12421 && (sym->ns->proc_name->attr.flavor == FL_MODULE
12422 || sym->ns->proc_name->attr.is_main_program)
12423 && !sym->attr.use_assoc
12424 && !sym->attr.allocatable
12425 && !sym->attr.pointer
12426 && is_non_constant_shape_array (sym))
12427 {
12428 /* F08:C541. The shape of an array defined in a main program or module
12429 * needs to be constant. */
12430 gfc_error ("The module or main program array %qs at %L must "
12431 "have constant shape", sym->name, &sym->declared_at);
12432 specification_expr = saved_specification_expr;
12433 return false;
12434 }
12435
12436 /* Constraints on deferred type parameter. */
12437 if (!deferred_requirements (sym))
12438 return false;
12439
12440 if (sym->ts.type == BT_CHARACTER && !sym->attr.associate_var)
12441 {
12442 /* Make sure that character string variables with assumed length are
12443 dummy arguments. */
12444 gfc_expr *e = NULL;
12445
12446 if (sym->ts.u.cl)
12447 e = sym->ts.u.cl->length;
12448 else
12449 return false;
12450
12451 if (e == NULL && !sym->attr.dummy && !sym->attr.result
12452 && !sym->ts.deferred && !sym->attr.select_type_temporary
12453 && !sym->attr.omp_udr_artificial_var)
12454 {
12455 gfc_error ("Entity with assumed character length at %L must be a "
12456 "dummy argument or a PARAMETER", &sym->declared_at);
12457 specification_expr = saved_specification_expr;
12458 return false;
12459 }
12460
12461 if (e && sym->attr.save == SAVE_EXPLICIT && !gfc_is_constant_expr (e))
12462 {
12463 gfc_error (auto_save_msg, sym->name, &sym->declared_at);
12464 specification_expr = saved_specification_expr;
12465 return false;
12466 }
12467
12468 if (!gfc_is_constant_expr (e)
12469 && !(e->expr_type == EXPR_VARIABLE
12470 && e->symtree->n.sym->attr.flavor == FL_PARAMETER))
12471 {
12472 if (!sym->attr.use_assoc && sym->ns->proc_name
12473 && (sym->ns->proc_name->attr.flavor == FL_MODULE
12474 || sym->ns->proc_name->attr.is_main_program))
12475 {
12476 gfc_error ("%qs at %L must have constant character length "
12477 "in this context", sym->name, &sym->declared_at);
12478 specification_expr = saved_specification_expr;
12479 return false;
12480 }
12481 if (sym->attr.in_common)
12482 {
12483 gfc_error ("COMMON variable %qs at %L must have constant "
12484 "character length", sym->name, &sym->declared_at);
12485 specification_expr = saved_specification_expr;
12486 return false;
12487 }
12488 }
12489 }
12490
12491 if (sym->value == NULL && sym->attr.referenced)
12492 apply_default_init_local (sym); /* Try to apply a default initialization. */
12493
12494 /* Determine if the symbol may not have an initializer. */
12495 int no_init_flag = 0, automatic_flag = 0;
12496 if (sym->attr.allocatable || sym->attr.external || sym->attr.dummy
12497 || sym->attr.intrinsic || sym->attr.result)
12498 no_init_flag = 1;
12499 else if ((sym->attr.dimension || sym->attr.codimension) && !sym->attr.pointer
12500 && is_non_constant_shape_array (sym))
12501 {
12502 no_init_flag = automatic_flag = 1;
12503
12504 /* Also, they must not have the SAVE attribute.
12505 SAVE_IMPLICIT is checked below. */
12506 if (sym->as && sym->attr.codimension)
12507 {
12508 int corank = sym->as->corank;
12509 sym->as->corank = 0;
12510 no_init_flag = automatic_flag = is_non_constant_shape_array (sym);
12511 sym->as->corank = corank;
12512 }
12513 if (automatic_flag && sym->attr.save == SAVE_EXPLICIT)
12514 {
12515 gfc_error (auto_save_msg, sym->name, &sym->declared_at);
12516 specification_expr = saved_specification_expr;
12517 return false;
12518 }
12519 }
12520
12521 /* Ensure that any initializer is simplified. */
12522 if (sym->value)
12523 gfc_simplify_expr (sym->value, 1);
12524
12525 /* Reject illegal initializers. */
12526 if (!sym->mark && sym->value)
12527 {
12528 if (sym->attr.allocatable || (sym->ts.type == BT_CLASS
12529 && CLASS_DATA (sym)->attr.allocatable))
12530 gfc_error ("Allocatable %qs at %L cannot have an initializer",
12531 sym->name, &sym->declared_at);
12532 else if (sym->attr.external)
12533 gfc_error ("External %qs at %L cannot have an initializer",
12534 sym->name, &sym->declared_at);
12535 else if (sym->attr.dummy
12536 && !(sym->ts.type == BT_DERIVED && sym->attr.intent == INTENT_OUT))
12537 gfc_error ("Dummy %qs at %L cannot have an initializer",
12538 sym->name, &sym->declared_at);
12539 else if (sym->attr.intrinsic)
12540 gfc_error ("Intrinsic %qs at %L cannot have an initializer",
12541 sym->name, &sym->declared_at);
12542 else if (sym->attr.result)
12543 gfc_error ("Function result %qs at %L cannot have an initializer",
12544 sym->name, &sym->declared_at);
12545 else if (automatic_flag)
12546 gfc_error ("Automatic array %qs at %L cannot have an initializer",
12547 sym->name, &sym->declared_at);
12548 else
12549 goto no_init_error;
12550 specification_expr = saved_specification_expr;
12551 return false;
12552 }
12553
12554 no_init_error:
12555 if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS)
12556 {
12557 bool res = resolve_fl_variable_derived (sym, no_init_flag);
12558 specification_expr = saved_specification_expr;
12559 return res;
12560 }
12561
12562 specification_expr = saved_specification_expr;
12563 return true;
12564 }
12565
12566
12567 /* Compare the dummy characteristics of a module procedure interface
12568 declaration with the corresponding declaration in a submodule. */
12569 static gfc_formal_arglist *new_formal;
12570 static char errmsg[200];
12571
12572 static void
12573 compare_fsyms (gfc_symbol *sym)
12574 {
12575 gfc_symbol *fsym;
12576
12577 if (sym == NULL || new_formal == NULL)
12578 return;
12579
12580 fsym = new_formal->sym;
12581
12582 if (sym == fsym)
12583 return;
12584
12585 if (strcmp (sym->name, fsym->name) == 0)
12586 {
12587 if (!gfc_check_dummy_characteristics (fsym, sym, true, errmsg, 200))
12588 gfc_error ("%s at %L", errmsg, &fsym->declared_at);
12589 }
12590 }
12591
12592
12593 /* Resolve a procedure. */
12594
12595 static bool
12596 resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
12597 {
12598 gfc_formal_arglist *arg;
12599
12600 if (sym->attr.function
12601 && !resolve_fl_var_and_proc (sym, mp_flag))
12602 return false;
12603
12604 /* Constraints on deferred type parameter. */
12605 if (!deferred_requirements (sym))
12606 return false;
12607
12608 if (sym->ts.type == BT_CHARACTER)
12609 {
12610 gfc_charlen *cl = sym->ts.u.cl;
12611
12612 if (cl && cl->length && gfc_is_constant_expr (cl->length)
12613 && !resolve_charlen (cl))
12614 return false;
12615
12616 if ((!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
12617 && sym->attr.proc == PROC_ST_FUNCTION)
12618 {
12619 gfc_error ("Character-valued statement function %qs at %L must "
12620 "have constant length", sym->name, &sym->declared_at);
12621 return false;
12622 }
12623 }
12624
12625 /* Ensure that derived type for are not of a private type. Internal
12626 module procedures are excluded by 2.2.3.3 - i.e., they are not
12627 externally accessible and can access all the objects accessible in
12628 the host. */
12629 if (!(sym->ns->parent && sym->ns->parent->proc_name
12630 && sym->ns->parent->proc_name->attr.flavor == FL_MODULE)
12631 && gfc_check_symbol_access (sym))
12632 {
12633 gfc_interface *iface;
12634
12635 for (arg = gfc_sym_get_dummy_args (sym); arg; arg = arg->next)
12636 {
12637 if (arg->sym
12638 && arg->sym->ts.type == BT_DERIVED
12639 && !arg->sym->ts.u.derived->attr.use_assoc
12640 && !gfc_check_symbol_access (arg->sym->ts.u.derived)
12641 && !gfc_notify_std (GFC_STD_F2003, "%qs is of a PRIVATE type "
12642 "and cannot be a dummy argument"
12643 " of %qs, which is PUBLIC at %L",
12644 arg->sym->name, sym->name,
12645 &sym->declared_at))
12646 {
12647 /* Stop this message from recurring. */
12648 arg->sym->ts.u.derived->attr.access = ACCESS_PUBLIC;
12649 return false;
12650 }
12651 }
12652
12653 /* PUBLIC interfaces may expose PRIVATE procedures that take types
12654 PRIVATE to the containing module. */
12655 for (iface = sym->generic; iface; iface = iface->next)
12656 {
12657 for (arg = gfc_sym_get_dummy_args (iface->sym); arg; arg = arg->next)
12658 {
12659 if (arg->sym
12660 && arg->sym->ts.type == BT_DERIVED
12661 && !arg->sym->ts.u.derived->attr.use_assoc
12662 && !gfc_check_symbol_access (arg->sym->ts.u.derived)
12663 && !gfc_notify_std (GFC_STD_F2003, "Procedure %qs in "
12664 "PUBLIC interface %qs at %L "
12665 "takes dummy arguments of %qs which "
12666 "is PRIVATE", iface->sym->name,
12667 sym->name, &iface->sym->declared_at,
12668 gfc_typename(&arg->sym->ts)))
12669 {
12670 /* Stop this message from recurring. */
12671 arg->sym->ts.u.derived->attr.access = ACCESS_PUBLIC;
12672 return false;
12673 }
12674 }
12675 }
12676 }
12677
12678 if (sym->attr.function && sym->value && sym->attr.proc != PROC_ST_FUNCTION
12679 && !sym->attr.proc_pointer)
12680 {
12681 gfc_error ("Function %qs at %L cannot have an initializer",
12682 sym->name, &sym->declared_at);
12683
12684 /* Make sure no second error is issued for this. */
12685 sym->value->error = 1;
12686 return false;
12687 }
12688
12689 /* An external symbol may not have an initializer because it is taken to be
12690 a procedure. Exception: Procedure Pointers. */
12691 if (sym->attr.external && sym->value && !sym->attr.proc_pointer)
12692 {
12693 gfc_error ("External object %qs at %L may not have an initializer",
12694 sym->name, &sym->declared_at);
12695 return false;
12696 }
12697
12698 /* An elemental function is required to return a scalar 12.7.1 */
12699 if (sym->attr.elemental && sym->attr.function
12700 && (sym->as || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as)))
12701 {
12702 gfc_error ("ELEMENTAL function %qs at %L must have a scalar "
12703 "result", sym->name, &sym->declared_at);
12704 /* Reset so that the error only occurs once. */
12705 sym->attr.elemental = 0;
12706 return false;
12707 }
12708
12709 if (sym->attr.proc == PROC_ST_FUNCTION
12710 && (sym->attr.allocatable || sym->attr.pointer))
12711 {
12712 gfc_error ("Statement function %qs at %L may not have pointer or "
12713 "allocatable attribute", sym->name, &sym->declared_at);
12714 return false;
12715 }
12716
12717 /* 5.1.1.5 of the Standard: A function name declared with an asterisk
12718 char-len-param shall not be array-valued, pointer-valued, recursive
12719 or pure. ....snip... A character value of * may only be used in the
12720 following ways: (i) Dummy arg of procedure - dummy associates with
12721 actual length; (ii) To declare a named constant; or (iii) External
12722 function - but length must be declared in calling scoping unit. */
12723 if (sym->attr.function
12724 && sym->ts.type == BT_CHARACTER && !sym->ts.deferred
12725 && sym->ts.u.cl && sym->ts.u.cl->length == NULL)
12726 {
12727 if ((sym->as && sym->as->rank) || (sym->attr.pointer)
12728 || (sym->attr.recursive) || (sym->attr.pure))
12729 {
12730 if (sym->as && sym->as->rank)
12731 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
12732 "array-valued", sym->name, &sym->declared_at);
12733
12734 if (sym->attr.pointer)
12735 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
12736 "pointer-valued", sym->name, &sym->declared_at);
12737
12738 if (sym->attr.pure)
12739 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
12740 "pure", sym->name, &sym->declared_at);
12741
12742 if (sym->attr.recursive)
12743 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
12744 "recursive", sym->name, &sym->declared_at);
12745
12746 return false;
12747 }
12748
12749 /* Appendix B.2 of the standard. Contained functions give an
12750 error anyway. Deferred character length is an F2003 feature.
12751 Don't warn on intrinsic conversion functions, which start
12752 with two underscores. */
12753 if (!sym->attr.contained && !sym->ts.deferred
12754 && (sym->name[0] != '_' || sym->name[1] != '_'))
12755 gfc_notify_std (GFC_STD_F95_OBS,
12756 "CHARACTER(*) function %qs at %L",
12757 sym->name, &sym->declared_at);
12758 }
12759
12760 /* F2008, C1218. */
12761 if (sym->attr.elemental)
12762 {
12763 if (sym->attr.proc_pointer)
12764 {
12765 gfc_error ("Procedure pointer %qs at %L shall not be elemental",
12766 sym->name, &sym->declared_at);
12767 return false;
12768 }
12769 if (sym->attr.dummy)
12770 {
12771 gfc_error ("Dummy procedure %qs at %L shall not be elemental",
12772 sym->name, &sym->declared_at);
12773 return false;
12774 }
12775 }
12776
12777 /* F2018, C15100: "The result of an elemental function shall be scalar,
12778 and shall not have the POINTER or ALLOCATABLE attribute." The scalar
12779 pointer is tested and caught elsewhere. */
12780 if (sym->attr.elemental && sym->result
12781 && (sym->result->attr.allocatable || sym->result->attr.pointer))
12782 {
12783 gfc_error ("Function result variable %qs at %L of elemental "
12784 "function %qs shall not have an ALLOCATABLE or POINTER "
12785 "attribute", sym->result->name,
12786 &sym->result->declared_at, sym->name);
12787 return false;
12788 }
12789
12790 if (sym->attr.is_bind_c && sym->attr.is_c_interop != 1)
12791 {
12792 gfc_formal_arglist *curr_arg;
12793 int has_non_interop_arg = 0;
12794
12795 if (!verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common,
12796 sym->common_block))
12797 {
12798 /* Clear these to prevent looking at them again if there was an
12799 error. */
12800 sym->attr.is_bind_c = 0;
12801 sym->attr.is_c_interop = 0;
12802 sym->ts.is_c_interop = 0;
12803 }
12804 else
12805 {
12806 /* So far, no errors have been found. */
12807 sym->attr.is_c_interop = 1;
12808 sym->ts.is_c_interop = 1;
12809 }
12810
12811 curr_arg = gfc_sym_get_dummy_args (sym);
12812 while (curr_arg != NULL)
12813 {
12814 /* Skip implicitly typed dummy args here. */
12815 if (curr_arg->sym && curr_arg->sym->attr.implicit_type == 0)
12816 if (!gfc_verify_c_interop_param (curr_arg->sym))
12817 /* If something is found to fail, record the fact so we
12818 can mark the symbol for the procedure as not being
12819 BIND(C) to try and prevent multiple errors being
12820 reported. */
12821 has_non_interop_arg = 1;
12822
12823 curr_arg = curr_arg->next;
12824 }
12825
12826 /* See if any of the arguments were not interoperable and if so, clear
12827 the procedure symbol to prevent duplicate error messages. */
12828 if (has_non_interop_arg != 0)
12829 {
12830 sym->attr.is_c_interop = 0;
12831 sym->ts.is_c_interop = 0;
12832 sym->attr.is_bind_c = 0;
12833 }
12834 }
12835
12836 if (!sym->attr.proc_pointer)
12837 {
12838 if (sym->attr.save == SAVE_EXPLICIT)
12839 {
12840 gfc_error ("PROCEDURE attribute conflicts with SAVE attribute "
12841 "in %qs at %L", sym->name, &sym->declared_at);
12842 return false;
12843 }
12844 if (sym->attr.intent)
12845 {
12846 gfc_error ("PROCEDURE attribute conflicts with INTENT attribute "
12847 "in %qs at %L", sym->name, &sym->declared_at);
12848 return false;
12849 }
12850 if (sym->attr.subroutine && sym->attr.result)
12851 {
12852 gfc_error ("PROCEDURE attribute conflicts with RESULT attribute "
12853 "in %qs at %L", sym->name, &sym->declared_at);
12854 return false;
12855 }
12856 if (sym->attr.external && sym->attr.function && !sym->attr.module_procedure
12857 && ((sym->attr.if_source == IFSRC_DECL && !sym->attr.procedure)
12858 || sym->attr.contained))
12859 {
12860 gfc_error ("EXTERNAL attribute conflicts with FUNCTION attribute "
12861 "in %qs at %L", sym->name, &sym->declared_at);
12862 return false;
12863 }
12864 if (strcmp ("ppr@", sym->name) == 0)
12865 {
12866 gfc_error ("Procedure pointer result %qs at %L "
12867 "is missing the pointer attribute",
12868 sym->ns->proc_name->name, &sym->declared_at);
12869 return false;
12870 }
12871 }
12872
12873 /* Assume that a procedure whose body is not known has references
12874 to external arrays. */
12875 if (sym->attr.if_source != IFSRC_DECL)
12876 sym->attr.array_outer_dependency = 1;
12877
12878 /* Compare the characteristics of a module procedure with the
12879 interface declaration. Ideally this would be done with
12880 gfc_compare_interfaces but, at present, the formal interface
12881 cannot be copied to the ts.interface. */
12882 if (sym->attr.module_procedure
12883 && sym->attr.if_source == IFSRC_DECL)
12884 {
12885 gfc_symbol *iface;
12886 char name[2*GFC_MAX_SYMBOL_LEN + 1];
12887 char *module_name;
12888 char *submodule_name;
12889 strcpy (name, sym->ns->proc_name->name);
12890 module_name = strtok (name, ".");
12891 submodule_name = strtok (NULL, ".");
12892
12893 iface = sym->tlink;
12894 sym->tlink = NULL;
12895
12896 /* Make sure that the result uses the correct charlen for deferred
12897 length results. */
12898 if (iface && sym->result
12899 && iface->ts.type == BT_CHARACTER
12900 && iface->ts.deferred)
12901 sym->result->ts.u.cl = iface->ts.u.cl;
12902
12903 if (iface == NULL)
12904 goto check_formal;
12905
12906 /* Check the procedure characteristics. */
12907 if (sym->attr.elemental != iface->attr.elemental)
12908 {
12909 gfc_error ("Mismatch in ELEMENTAL attribute between MODULE "
12910 "PROCEDURE at %L and its interface in %s",
12911 &sym->declared_at, module_name);
12912 return false;
12913 }
12914
12915 if (sym->attr.pure != iface->attr.pure)
12916 {
12917 gfc_error ("Mismatch in PURE attribute between MODULE "
12918 "PROCEDURE at %L and its interface in %s",
12919 &sym->declared_at, module_name);
12920 return false;
12921 }
12922
12923 if (sym->attr.recursive != iface->attr.recursive)
12924 {
12925 gfc_error ("Mismatch in RECURSIVE attribute between MODULE "
12926 "PROCEDURE at %L and its interface in %s",
12927 &sym->declared_at, module_name);
12928 return false;
12929 }
12930
12931 /* Check the result characteristics. */
12932 if (!gfc_check_result_characteristics (sym, iface, errmsg, 200))
12933 {
12934 gfc_error ("%s between the MODULE PROCEDURE declaration "
12935 "in MODULE %qs and the declaration at %L in "
12936 "(SUB)MODULE %qs",
12937 errmsg, module_name, &sym->declared_at,
12938 submodule_name ? submodule_name : module_name);
12939 return false;
12940 }
12941
12942 check_formal:
12943 /* Check the characteristics of the formal arguments. */
12944 if (sym->formal && sym->formal_ns)
12945 {
12946 for (arg = sym->formal; arg && arg->sym; arg = arg->next)
12947 {
12948 new_formal = arg;
12949 gfc_traverse_ns (sym->formal_ns, compare_fsyms);
12950 }
12951 }
12952 }
12953 return true;
12954 }
12955
12956
12957 /* Resolve a list of finalizer procedures. That is, after they have hopefully
12958 been defined and we now know their defined arguments, check that they fulfill
12959 the requirements of the standard for procedures used as finalizers. */
12960
12961 static bool
12962 gfc_resolve_finalizers (gfc_symbol* derived, bool *finalizable)
12963 {
12964 gfc_finalizer* list;
12965 gfc_finalizer** prev_link; /* For removing wrong entries from the list. */
12966 bool result = true;
12967 bool seen_scalar = false;
12968 gfc_symbol *vtab;
12969 gfc_component *c;
12970 gfc_symbol *parent = gfc_get_derived_super_type (derived);
12971
12972 if (parent)
12973 gfc_resolve_finalizers (parent, finalizable);
12974
12975 /* Ensure that derived-type components have a their finalizers resolved. */
12976 bool has_final = derived->f2k_derived && derived->f2k_derived->finalizers;
12977 for (c = derived->components; c; c = c->next)
12978 if (c->ts.type == BT_DERIVED
12979 && !c->attr.pointer && !c->attr.proc_pointer && !c->attr.allocatable)
12980 {
12981 bool has_final2 = false;
12982 if (!gfc_resolve_finalizers (c->ts.u.derived, &has_final2))
12983 return false; /* Error. */
12984 has_final = has_final || has_final2;
12985 }
12986 /* Return early if not finalizable. */
12987 if (!has_final)
12988 {
12989 if (finalizable)
12990 *finalizable = false;
12991 return true;
12992 }
12993
12994 /* Walk over the list of finalizer-procedures, check them, and if any one
12995 does not fit in with the standard's definition, print an error and remove
12996 it from the list. */
12997 prev_link = &derived->f2k_derived->finalizers;
12998 for (list = derived->f2k_derived->finalizers; list; list = *prev_link)
12999 {
13000 gfc_formal_arglist *dummy_args;
13001 gfc_symbol* arg;
13002 gfc_finalizer* i;
13003 int my_rank;
13004
13005 /* Skip this finalizer if we already resolved it. */
13006 if (list->proc_tree)
13007 {
13008 if (list->proc_tree->n.sym->formal->sym->as == NULL
13009 || list->proc_tree->n.sym->formal->sym->as->rank == 0)
13010 seen_scalar = true;
13011 prev_link = &(list->next);
13012 continue;
13013 }
13014
13015 /* Check this exists and is a SUBROUTINE. */
13016 if (!list->proc_sym->attr.subroutine)
13017 {
13018 gfc_error ("FINAL procedure %qs at %L is not a SUBROUTINE",
13019 list->proc_sym->name, &list->where);
13020 goto error;
13021 }
13022
13023 /* We should have exactly one argument. */
13024 dummy_args = gfc_sym_get_dummy_args (list->proc_sym);
13025 if (!dummy_args || dummy_args->next)
13026 {
13027 gfc_error ("FINAL procedure at %L must have exactly one argument",
13028 &list->where);
13029 goto error;
13030 }
13031 arg = dummy_args->sym;
13032
13033 /* This argument must be of our type. */
13034 if (arg->ts.type != BT_DERIVED || arg->ts.u.derived != derived)
13035 {
13036 gfc_error ("Argument of FINAL procedure at %L must be of type %qs",
13037 &arg->declared_at, derived->name);
13038 goto error;
13039 }
13040
13041 /* It must neither be a pointer nor allocatable nor optional. */
13042 if (arg->attr.pointer)
13043 {
13044 gfc_error ("Argument of FINAL procedure at %L must not be a POINTER",
13045 &arg->declared_at);
13046 goto error;
13047 }
13048 if (arg->attr.allocatable)
13049 {
13050 gfc_error ("Argument of FINAL procedure at %L must not be"
13051 " ALLOCATABLE", &arg->declared_at);
13052 goto error;
13053 }
13054 if (arg->attr.optional)
13055 {
13056 gfc_error ("Argument of FINAL procedure at %L must not be OPTIONAL",
13057 &arg->declared_at);
13058 goto error;
13059 }
13060
13061 /* It must not be INTENT(OUT). */
13062 if (arg->attr.intent == INTENT_OUT)
13063 {
13064 gfc_error ("Argument of FINAL procedure at %L must not be"
13065 " INTENT(OUT)", &arg->declared_at);
13066 goto error;
13067 }
13068
13069 /* Warn if the procedure is non-scalar and not assumed shape. */
13070 if (warn_surprising && arg->as && arg->as->rank != 0
13071 && arg->as->type != AS_ASSUMED_SHAPE)
13072 gfc_warning (OPT_Wsurprising,
13073 "Non-scalar FINAL procedure at %L should have assumed"
13074 " shape argument", &arg->declared_at);
13075
13076 /* Check that it does not match in kind and rank with a FINAL procedure
13077 defined earlier. To really loop over the *earlier* declarations,
13078 we need to walk the tail of the list as new ones were pushed at the
13079 front. */
13080 /* TODO: Handle kind parameters once they are implemented. */
13081 my_rank = (arg->as ? arg->as->rank : 0);
13082 for (i = list->next; i; i = i->next)
13083 {
13084 gfc_formal_arglist *dummy_args;
13085
13086 /* Argument list might be empty; that is an error signalled earlier,
13087 but we nevertheless continued resolving. */
13088 dummy_args = gfc_sym_get_dummy_args (i->proc_sym);
13089 if (dummy_args)
13090 {
13091 gfc_symbol* i_arg = dummy_args->sym;
13092 const int i_rank = (i_arg->as ? i_arg->as->rank : 0);
13093 if (i_rank == my_rank)
13094 {
13095 gfc_error ("FINAL procedure %qs declared at %L has the same"
13096 " rank (%d) as %qs",
13097 list->proc_sym->name, &list->where, my_rank,
13098 i->proc_sym->name);
13099 goto error;
13100 }
13101 }
13102 }
13103
13104 /* Is this the/a scalar finalizer procedure? */
13105 if (my_rank == 0)
13106 seen_scalar = true;
13107
13108 /* Find the symtree for this procedure. */
13109 gcc_assert (!list->proc_tree);
13110 list->proc_tree = gfc_find_sym_in_symtree (list->proc_sym);
13111
13112 prev_link = &list->next;
13113 continue;
13114
13115 /* Remove wrong nodes immediately from the list so we don't risk any
13116 troubles in the future when they might fail later expectations. */
13117 error:
13118 i = list;
13119 *prev_link = list->next;
13120 gfc_free_finalizer (i);
13121 result = false;
13122 }
13123
13124 if (result == false)
13125 return false;
13126
13127 /* Warn if we haven't seen a scalar finalizer procedure (but we know there
13128 were nodes in the list, must have been for arrays. It is surely a good
13129 idea to have a scalar version there if there's something to finalize. */
13130 if (warn_surprising && derived->f2k_derived->finalizers && !seen_scalar)
13131 gfc_warning (OPT_Wsurprising,
13132 "Only array FINAL procedures declared for derived type %qs"
13133 " defined at %L, suggest also scalar one",
13134 derived->name, &derived->declared_at);
13135
13136 vtab = gfc_find_derived_vtab (derived);
13137 c = vtab->ts.u.derived->components->next->next->next->next->next;
13138 gfc_set_sym_referenced (c->initializer->symtree->n.sym);
13139
13140 if (finalizable)
13141 *finalizable = true;
13142
13143 return true;
13144 }
13145
13146
13147 /* Check if two GENERIC targets are ambiguous and emit an error is they are. */
13148
13149 static bool
13150 check_generic_tbp_ambiguity (gfc_tbp_generic* t1, gfc_tbp_generic* t2,
13151 const char* generic_name, locus where)
13152 {
13153 gfc_symbol *sym1, *sym2;
13154 const char *pass1, *pass2;
13155 gfc_formal_arglist *dummy_args;
13156
13157 gcc_assert (t1->specific && t2->specific);
13158 gcc_assert (!t1->specific->is_generic);
13159 gcc_assert (!t2->specific->is_generic);
13160 gcc_assert (t1->is_operator == t2->is_operator);
13161
13162 sym1 = t1->specific->u.specific->n.sym;
13163 sym2 = t2->specific->u.specific->n.sym;
13164
13165 if (sym1 == sym2)
13166 return true;
13167
13168 /* Both must be SUBROUTINEs or both must be FUNCTIONs. */
13169 if (sym1->attr.subroutine != sym2->attr.subroutine
13170 || sym1->attr.function != sym2->attr.function)
13171 {
13172 gfc_error ("%qs and %qs cannot be mixed FUNCTION/SUBROUTINE for"
13173 " GENERIC %qs at %L",
13174 sym1->name, sym2->name, generic_name, &where);
13175 return false;
13176 }
13177
13178 /* Determine PASS arguments. */
13179 if (t1->specific->nopass)
13180 pass1 = NULL;
13181 else if (t1->specific->pass_arg)
13182 pass1 = t1->specific->pass_arg;
13183 else
13184 {
13185 dummy_args = gfc_sym_get_dummy_args (t1->specific->u.specific->n.sym);
13186 if (dummy_args)
13187 pass1 = dummy_args->sym->name;
13188 else
13189 pass1 = NULL;
13190 }
13191 if (t2->specific->nopass)
13192 pass2 = NULL;
13193 else if (t2->specific->pass_arg)
13194 pass2 = t2->specific->pass_arg;
13195 else
13196 {
13197 dummy_args = gfc_sym_get_dummy_args (t2->specific->u.specific->n.sym);
13198 if (dummy_args)
13199 pass2 = dummy_args->sym->name;
13200 else
13201 pass2 = NULL;
13202 }
13203
13204 /* Compare the interfaces. */
13205 if (gfc_compare_interfaces (sym1, sym2, sym2->name, !t1->is_operator, 0,
13206 NULL, 0, pass1, pass2))
13207 {
13208 gfc_error ("%qs and %qs for GENERIC %qs at %L are ambiguous",
13209 sym1->name, sym2->name, generic_name, &where);
13210 return false;
13211 }
13212
13213 return true;
13214 }
13215
13216
13217 /* Worker function for resolving a generic procedure binding; this is used to
13218 resolve GENERIC as well as user and intrinsic OPERATOR typebound procedures.
13219
13220 The difference between those cases is finding possible inherited bindings
13221 that are overridden, as one has to look for them in tb_sym_root,
13222 tb_uop_root or tb_op, respectively. Thus the caller must already find
13223 the super-type and set p->overridden correctly. */
13224
13225 static bool
13226 resolve_tb_generic_targets (gfc_symbol* super_type,
13227 gfc_typebound_proc* p, const char* name)
13228 {
13229 gfc_tbp_generic* target;
13230 gfc_symtree* first_target;
13231 gfc_symtree* inherited;
13232
13233 gcc_assert (p && p->is_generic);
13234
13235 /* Try to find the specific bindings for the symtrees in our target-list. */
13236 gcc_assert (p->u.generic);
13237 for (target = p->u.generic; target; target = target->next)
13238 if (!target->specific)
13239 {
13240 gfc_typebound_proc* overridden_tbp;
13241 gfc_tbp_generic* g;
13242 const char* target_name;
13243
13244 target_name = target->specific_st->name;
13245
13246 /* Defined for this type directly. */
13247 if (target->specific_st->n.tb && !target->specific_st->n.tb->error)
13248 {
13249 target->specific = target->specific_st->n.tb;
13250 goto specific_found;
13251 }
13252
13253 /* Look for an inherited specific binding. */
13254 if (super_type)
13255 {
13256 inherited = gfc_find_typebound_proc (super_type, NULL, target_name,
13257 true, NULL);
13258
13259 if (inherited)
13260 {
13261 gcc_assert (inherited->n.tb);
13262 target->specific = inherited->n.tb;
13263 goto specific_found;
13264 }
13265 }
13266
13267 gfc_error ("Undefined specific binding %qs as target of GENERIC %qs"
13268 " at %L", target_name, name, &p->where);
13269 return false;
13270
13271 /* Once we've found the specific binding, check it is not ambiguous with
13272 other specifics already found or inherited for the same GENERIC. */
13273 specific_found:
13274 gcc_assert (target->specific);
13275
13276 /* This must really be a specific binding! */
13277 if (target->specific->is_generic)
13278 {
13279 gfc_error ("GENERIC %qs at %L must target a specific binding,"
13280 " %qs is GENERIC, too", name, &p->where, target_name);
13281 return false;
13282 }
13283
13284 /* Check those already resolved on this type directly. */
13285 for (g = p->u.generic; g; g = g->next)
13286 if (g != target && g->specific
13287 && !check_generic_tbp_ambiguity (target, g, name, p->where))
13288 return false;
13289
13290 /* Check for ambiguity with inherited specific targets. */
13291 for (overridden_tbp = p->overridden; overridden_tbp;
13292 overridden_tbp = overridden_tbp->overridden)
13293 if (overridden_tbp->is_generic)
13294 {
13295 for (g = overridden_tbp->u.generic; g; g = g->next)
13296 {
13297 gcc_assert (g->specific);
13298 if (!check_generic_tbp_ambiguity (target, g, name, p->where))
13299 return false;
13300 }
13301 }
13302 }
13303
13304 /* If we attempt to "overwrite" a specific binding, this is an error. */
13305 if (p->overridden && !p->overridden->is_generic)
13306 {
13307 gfc_error ("GENERIC %qs at %L cannot overwrite specific binding with"
13308 " the same name", name, &p->where);
13309 return false;
13310 }
13311
13312 /* Take the SUBROUTINE/FUNCTION attributes of the first specific target, as
13313 all must have the same attributes here. */
13314 first_target = p->u.generic->specific->u.specific;
13315 gcc_assert (first_target);
13316 p->subroutine = first_target->n.sym->attr.subroutine;
13317 p->function = first_target->n.sym->attr.function;
13318
13319 return true;
13320 }
13321
13322
13323 /* Resolve a GENERIC procedure binding for a derived type. */
13324
13325 static bool
13326 resolve_typebound_generic (gfc_symbol* derived, gfc_symtree* st)
13327 {
13328 gfc_symbol* super_type;
13329
13330 /* Find the overridden binding if any. */
13331 st->n.tb->overridden = NULL;
13332 super_type = gfc_get_derived_super_type (derived);
13333 if (super_type)
13334 {
13335 gfc_symtree* overridden;
13336 overridden = gfc_find_typebound_proc (super_type, NULL, st->name,
13337 true, NULL);
13338
13339 if (overridden && overridden->n.tb)
13340 st->n.tb->overridden = overridden->n.tb;
13341 }
13342
13343 /* Resolve using worker function. */
13344 return resolve_tb_generic_targets (super_type, st->n.tb, st->name);
13345 }
13346
13347
13348 /* Retrieve the target-procedure of an operator binding and do some checks in
13349 common for intrinsic and user-defined type-bound operators. */
13350
13351 static gfc_symbol*
13352 get_checked_tb_operator_target (gfc_tbp_generic* target, locus where)
13353 {
13354 gfc_symbol* target_proc;
13355
13356 gcc_assert (target->specific && !target->specific->is_generic);
13357 target_proc = target->specific->u.specific->n.sym;
13358 gcc_assert (target_proc);
13359
13360 /* F08:C468. All operator bindings must have a passed-object dummy argument. */
13361 if (target->specific->nopass)
13362 {
13363 gfc_error ("Type-bound operator at %L cannot be NOPASS", &where);
13364 return NULL;
13365 }
13366
13367 return target_proc;
13368 }
13369
13370
13371 /* Resolve a type-bound intrinsic operator. */
13372
13373 static bool
13374 resolve_typebound_intrinsic_op (gfc_symbol* derived, gfc_intrinsic_op op,
13375 gfc_typebound_proc* p)
13376 {
13377 gfc_symbol* super_type;
13378 gfc_tbp_generic* target;
13379
13380 /* If there's already an error here, do nothing (but don't fail again). */
13381 if (p->error)
13382 return true;
13383
13384 /* Operators should always be GENERIC bindings. */
13385 gcc_assert (p->is_generic);
13386
13387 /* Look for an overridden binding. */
13388 super_type = gfc_get_derived_super_type (derived);
13389 if (super_type && super_type->f2k_derived)
13390 p->overridden = gfc_find_typebound_intrinsic_op (super_type, NULL,
13391 op, true, NULL);
13392 else
13393 p->overridden = NULL;
13394
13395 /* Resolve general GENERIC properties using worker function. */
13396 if (!resolve_tb_generic_targets (super_type, p, gfc_op2string(op)))
13397 goto error;
13398
13399 /* Check the targets to be procedures of correct interface. */
13400 for (target = p->u.generic; target; target = target->next)
13401 {
13402 gfc_symbol* target_proc;
13403
13404 target_proc = get_checked_tb_operator_target (target, p->where);
13405 if (!target_proc)
13406 goto error;
13407
13408 if (!gfc_check_operator_interface (target_proc, op, p->where))
13409 goto error;
13410
13411 /* Add target to non-typebound operator list. */
13412 if (!target->specific->deferred && !derived->attr.use_assoc
13413 && p->access != ACCESS_PRIVATE && derived->ns == gfc_current_ns)
13414 {
13415 gfc_interface *head, *intr;
13416
13417 /* Preempt 'gfc_check_new_interface' for submodules, where the
13418 mechanism for handling module procedures winds up resolving
13419 operator interfaces twice and would otherwise cause an error. */
13420 for (intr = derived->ns->op[op]; intr; intr = intr->next)
13421 if (intr->sym == target_proc
13422 && target_proc->attr.used_in_submodule)
13423 return true;
13424
13425 if (!gfc_check_new_interface (derived->ns->op[op],
13426 target_proc, p->where))
13427 return false;
13428 head = derived->ns->op[op];
13429 intr = gfc_get_interface ();
13430 intr->sym = target_proc;
13431 intr->where = p->where;
13432 intr->next = head;
13433 derived->ns->op[op] = intr;
13434 }
13435 }
13436
13437 return true;
13438
13439 error:
13440 p->error = 1;
13441 return false;
13442 }
13443
13444
13445 /* Resolve a type-bound user operator (tree-walker callback). */
13446
13447 static gfc_symbol* resolve_bindings_derived;
13448 static bool resolve_bindings_result;
13449
13450 static bool check_uop_procedure (gfc_symbol* sym, locus where);
13451
13452 static void
13453 resolve_typebound_user_op (gfc_symtree* stree)
13454 {
13455 gfc_symbol* super_type;
13456 gfc_tbp_generic* target;
13457
13458 gcc_assert (stree && stree->n.tb);
13459
13460 if (stree->n.tb->error)
13461 return;
13462
13463 /* Operators should always be GENERIC bindings. */
13464 gcc_assert (stree->n.tb->is_generic);
13465
13466 /* Find overridden procedure, if any. */
13467 super_type = gfc_get_derived_super_type (resolve_bindings_derived);
13468 if (super_type && super_type->f2k_derived)
13469 {
13470 gfc_symtree* overridden;
13471 overridden = gfc_find_typebound_user_op (super_type, NULL,
13472 stree->name, true, NULL);
13473
13474 if (overridden && overridden->n.tb)
13475 stree->n.tb->overridden = overridden->n.tb;
13476 }
13477 else
13478 stree->n.tb->overridden = NULL;
13479
13480 /* Resolve basically using worker function. */
13481 if (!resolve_tb_generic_targets (super_type, stree->n.tb, stree->name))
13482 goto error;
13483
13484 /* Check the targets to be functions of correct interface. */
13485 for (target = stree->n.tb->u.generic; target; target = target->next)
13486 {
13487 gfc_symbol* target_proc;
13488
13489 target_proc = get_checked_tb_operator_target (target, stree->n.tb->where);
13490 if (!target_proc)
13491 goto error;
13492
13493 if (!check_uop_procedure (target_proc, stree->n.tb->where))
13494 goto error;
13495 }
13496
13497 return;
13498
13499 error:
13500 resolve_bindings_result = false;
13501 stree->n.tb->error = 1;
13502 }
13503
13504
13505 /* Resolve the type-bound procedures for a derived type. */
13506
13507 static void
13508 resolve_typebound_procedure (gfc_symtree* stree)
13509 {
13510 gfc_symbol* proc;
13511 locus where;
13512 gfc_symbol* me_arg;
13513 gfc_symbol* super_type;
13514 gfc_component* comp;
13515
13516 gcc_assert (stree);
13517
13518 /* Undefined specific symbol from GENERIC target definition. */
13519 if (!stree->n.tb)
13520 return;
13521
13522 if (stree->n.tb->error)
13523 return;
13524
13525 /* If this is a GENERIC binding, use that routine. */
13526 if (stree->n.tb->is_generic)
13527 {
13528 if (!resolve_typebound_generic (resolve_bindings_derived, stree))
13529 goto error;
13530 return;
13531 }
13532
13533 /* Get the target-procedure to check it. */
13534 gcc_assert (!stree->n.tb->is_generic);
13535 gcc_assert (stree->n.tb->u.specific);
13536 proc = stree->n.tb->u.specific->n.sym;
13537 where = stree->n.tb->where;
13538
13539 /* Default access should already be resolved from the parser. */
13540 gcc_assert (stree->n.tb->access != ACCESS_UNKNOWN);
13541
13542 if (stree->n.tb->deferred)
13543 {
13544 if (!check_proc_interface (proc, &where))
13545 goto error;
13546 }
13547 else
13548 {
13549 /* Check for F08:C465. */
13550 if ((!proc->attr.subroutine && !proc->attr.function)
13551 || (proc->attr.proc != PROC_MODULE
13552 && proc->attr.if_source != IFSRC_IFBODY)
13553 || proc->attr.abstract)
13554 {
13555 gfc_error ("%qs must be a module procedure or an external procedure with"
13556 " an explicit interface at %L", proc->name, &where);
13557 goto error;
13558 }
13559 }
13560
13561 stree->n.tb->subroutine = proc->attr.subroutine;
13562 stree->n.tb->function = proc->attr.function;
13563
13564 /* Find the super-type of the current derived type. We could do this once and
13565 store in a global if speed is needed, but as long as not I believe this is
13566 more readable and clearer. */
13567 super_type = gfc_get_derived_super_type (resolve_bindings_derived);
13568
13569 /* If PASS, resolve and check arguments if not already resolved / loaded
13570 from a .mod file. */
13571 if (!stree->n.tb->nopass && stree->n.tb->pass_arg_num == 0)
13572 {
13573 gfc_formal_arglist *dummy_args;
13574
13575 dummy_args = gfc_sym_get_dummy_args (proc);
13576 if (stree->n.tb->pass_arg)
13577 {
13578 gfc_formal_arglist *i;
13579
13580 /* If an explicit passing argument name is given, walk the arg-list
13581 and look for it. */
13582
13583 me_arg = NULL;
13584 stree->n.tb->pass_arg_num = 1;
13585 for (i = dummy_args; i; i = i->next)
13586 {
13587 if (!strcmp (i->sym->name, stree->n.tb->pass_arg))
13588 {
13589 me_arg = i->sym;
13590 break;
13591 }
13592 ++stree->n.tb->pass_arg_num;
13593 }
13594
13595 if (!me_arg)
13596 {
13597 gfc_error ("Procedure %qs with PASS(%s) at %L has no"
13598 " argument %qs",
13599 proc->name, stree->n.tb->pass_arg, &where,
13600 stree->n.tb->pass_arg);
13601 goto error;
13602 }
13603 }
13604 else
13605 {
13606 /* Otherwise, take the first one; there should in fact be at least
13607 one. */
13608 stree->n.tb->pass_arg_num = 1;
13609 if (!dummy_args)
13610 {
13611 gfc_error ("Procedure %qs with PASS at %L must have at"
13612 " least one argument", proc->name, &where);
13613 goto error;
13614 }
13615 me_arg = dummy_args->sym;
13616 }
13617
13618 /* Now check that the argument-type matches and the passed-object
13619 dummy argument is generally fine. */
13620
13621 gcc_assert (me_arg);
13622
13623 if (me_arg->ts.type != BT_CLASS)
13624 {
13625 gfc_error ("Non-polymorphic passed-object dummy argument of %qs"
13626 " at %L", proc->name, &where);
13627 goto error;
13628 }
13629
13630 if (CLASS_DATA (me_arg)->ts.u.derived
13631 != resolve_bindings_derived)
13632 {
13633 gfc_error ("Argument %qs of %qs with PASS(%s) at %L must be of"
13634 " the derived-type %qs", me_arg->name, proc->name,
13635 me_arg->name, &where, resolve_bindings_derived->name);
13636 goto error;
13637 }
13638
13639 gcc_assert (me_arg->ts.type == BT_CLASS);
13640 if (CLASS_DATA (me_arg)->as && CLASS_DATA (me_arg)->as->rank != 0)
13641 {
13642 gfc_error ("Passed-object dummy argument of %qs at %L must be"
13643 " scalar", proc->name, &where);
13644 goto error;
13645 }
13646 if (CLASS_DATA (me_arg)->attr.allocatable)
13647 {
13648 gfc_error ("Passed-object dummy argument of %qs at %L must not"
13649 " be ALLOCATABLE", proc->name, &where);
13650 goto error;
13651 }
13652 if (CLASS_DATA (me_arg)->attr.class_pointer)
13653 {
13654 gfc_error ("Passed-object dummy argument of %qs at %L must not"
13655 " be POINTER", proc->name, &where);
13656 goto error;
13657 }
13658 }
13659
13660 /* If we are extending some type, check that we don't override a procedure
13661 flagged NON_OVERRIDABLE. */
13662 stree->n.tb->overridden = NULL;
13663 if (super_type)
13664 {
13665 gfc_symtree* overridden;
13666 overridden = gfc_find_typebound_proc (super_type, NULL,
13667 stree->name, true, NULL);
13668
13669 if (overridden)
13670 {
13671 if (overridden->n.tb)
13672 stree->n.tb->overridden = overridden->n.tb;
13673
13674 if (!gfc_check_typebound_override (stree, overridden))
13675 goto error;
13676 }
13677 }
13678
13679 /* See if there's a name collision with a component directly in this type. */
13680 for (comp = resolve_bindings_derived->components; comp; comp = comp->next)
13681 if (!strcmp (comp->name, stree->name))
13682 {
13683 gfc_error ("Procedure %qs at %L has the same name as a component of"
13684 " %qs",
13685 stree->name, &where, resolve_bindings_derived->name);
13686 goto error;
13687 }
13688
13689 /* Try to find a name collision with an inherited component. */
13690 if (super_type && gfc_find_component (super_type, stree->name, true, true,
13691 NULL))
13692 {
13693 gfc_error ("Procedure %qs at %L has the same name as an inherited"
13694 " component of %qs",
13695 stree->name, &where, resolve_bindings_derived->name);
13696 goto error;
13697 }
13698
13699 stree->n.tb->error = 0;
13700 return;
13701
13702 error:
13703 resolve_bindings_result = false;
13704 stree->n.tb->error = 1;
13705 }
13706
13707
13708 static bool
13709 resolve_typebound_procedures (gfc_symbol* derived)
13710 {
13711 int op;
13712 gfc_symbol* super_type;
13713
13714 if (!derived->f2k_derived || !derived->f2k_derived->tb_sym_root)
13715 return true;
13716
13717 super_type = gfc_get_derived_super_type (derived);
13718 if (super_type)
13719 resolve_symbol (super_type);
13720
13721 resolve_bindings_derived = derived;
13722 resolve_bindings_result = true;
13723
13724 if (derived->f2k_derived->tb_sym_root)
13725 gfc_traverse_symtree (derived->f2k_derived->tb_sym_root,
13726 &resolve_typebound_procedure);
13727
13728 if (derived->f2k_derived->tb_uop_root)
13729 gfc_traverse_symtree (derived->f2k_derived->tb_uop_root,
13730 &resolve_typebound_user_op);
13731
13732 for (op = 0; op != GFC_INTRINSIC_OPS; ++op)
13733 {
13734 gfc_typebound_proc* p = derived->f2k_derived->tb_op[op];
13735 if (p && !resolve_typebound_intrinsic_op (derived,
13736 (gfc_intrinsic_op)op, p))
13737 resolve_bindings_result = false;
13738 }
13739
13740 return resolve_bindings_result;
13741 }
13742
13743
13744 /* Add a derived type to the dt_list. The dt_list is used in trans-types.c
13745 to give all identical derived types the same backend_decl. */
13746 static void
13747 add_dt_to_dt_list (gfc_symbol *derived)
13748 {
13749 if (!derived->dt_next)
13750 {
13751 if (gfc_derived_types)
13752 {
13753 derived->dt_next = gfc_derived_types->dt_next;
13754 gfc_derived_types->dt_next = derived;
13755 }
13756 else
13757 {
13758 derived->dt_next = derived;
13759 }
13760 gfc_derived_types = derived;
13761 }
13762 }
13763
13764
13765 /* Ensure that a derived-type is really not abstract, meaning that every
13766 inherited DEFERRED binding is overridden by a non-DEFERRED one. */
13767
13768 static bool
13769 ensure_not_abstract_walker (gfc_symbol* sub, gfc_symtree* st)
13770 {
13771 if (!st)
13772 return true;
13773
13774 if (!ensure_not_abstract_walker (sub, st->left))
13775 return false;
13776 if (!ensure_not_abstract_walker (sub, st->right))
13777 return false;
13778
13779 if (st->n.tb && st->n.tb->deferred)
13780 {
13781 gfc_symtree* overriding;
13782 overriding = gfc_find_typebound_proc (sub, NULL, st->name, true, NULL);
13783 if (!overriding)
13784 return false;
13785 gcc_assert (overriding->n.tb);
13786 if (overriding->n.tb->deferred)
13787 {
13788 gfc_error ("Derived-type %qs declared at %L must be ABSTRACT because"
13789 " %qs is DEFERRED and not overridden",
13790 sub->name, &sub->declared_at, st->name);
13791 return false;
13792 }
13793 }
13794
13795 return true;
13796 }
13797
13798 static bool
13799 ensure_not_abstract (gfc_symbol* sub, gfc_symbol* ancestor)
13800 {
13801 /* The algorithm used here is to recursively travel up the ancestry of sub
13802 and for each ancestor-type, check all bindings. If any of them is
13803 DEFERRED, look it up starting from sub and see if the found (overriding)
13804 binding is not DEFERRED.
13805 This is not the most efficient way to do this, but it should be ok and is
13806 clearer than something sophisticated. */
13807
13808 gcc_assert (ancestor && !sub->attr.abstract);
13809
13810 if (!ancestor->attr.abstract)
13811 return true;
13812
13813 /* Walk bindings of this ancestor. */
13814 if (ancestor->f2k_derived)
13815 {
13816 bool t;
13817 t = ensure_not_abstract_walker (sub, ancestor->f2k_derived->tb_sym_root);
13818 if (!t)
13819 return false;
13820 }
13821
13822 /* Find next ancestor type and recurse on it. */
13823 ancestor = gfc_get_derived_super_type (ancestor);
13824 if (ancestor)
13825 return ensure_not_abstract (sub, ancestor);
13826
13827 return true;
13828 }
13829
13830
13831 /* This check for typebound defined assignments is done recursively
13832 since the order in which derived types are resolved is not always in
13833 order of the declarations. */
13834
13835 static void
13836 check_defined_assignments (gfc_symbol *derived)
13837 {
13838 gfc_component *c;
13839
13840 for (c = derived->components; c; c = c->next)
13841 {
13842 if (!gfc_bt_struct (c->ts.type)
13843 || c->attr.pointer
13844 || c->attr.allocatable
13845 || c->attr.proc_pointer_comp
13846 || c->attr.class_pointer
13847 || c->attr.proc_pointer)
13848 continue;
13849
13850 if (c->ts.u.derived->attr.defined_assign_comp
13851 || (c->ts.u.derived->f2k_derived
13852 && c->ts.u.derived->f2k_derived->tb_op[INTRINSIC_ASSIGN]))
13853 {
13854 derived->attr.defined_assign_comp = 1;
13855 return;
13856 }
13857
13858 check_defined_assignments (c->ts.u.derived);
13859 if (c->ts.u.derived->attr.defined_assign_comp)
13860 {
13861 derived->attr.defined_assign_comp = 1;
13862 return;
13863 }
13864 }
13865 }
13866
13867
13868 /* Resolve a single component of a derived type or structure. */
13869
13870 static bool
13871 resolve_component (gfc_component *c, gfc_symbol *sym)
13872 {
13873 gfc_symbol *super_type;
13874 symbol_attribute *attr;
13875
13876 if (c->attr.artificial)
13877 return true;
13878
13879 /* Do not allow vtype components to be resolved in nameless namespaces
13880 such as block data because the procedure pointers will cause ICEs
13881 and vtables are not needed in these contexts. */
13882 if (sym->attr.vtype && sym->attr.use_assoc
13883 && sym->ns->proc_name == NULL)
13884 return true;
13885
13886 /* F2008, C442. */
13887 if ((!sym->attr.is_class || c != sym->components)
13888 && c->attr.codimension
13889 && (!c->attr.allocatable || (c->as && c->as->type != AS_DEFERRED)))
13890 {
13891 gfc_error ("Coarray component %qs at %L must be allocatable with "
13892 "deferred shape", c->name, &c->loc);
13893 return false;
13894 }
13895
13896 /* F2008, C443. */
13897 if (c->attr.codimension && c->ts.type == BT_DERIVED
13898 && c->ts.u.derived->ts.is_iso_c)
13899 {
13900 gfc_error ("Component %qs at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) "
13901 "shall not be a coarray", c->name, &c->loc);
13902 return false;
13903 }
13904
13905 /* F2008, C444. */
13906 if (gfc_bt_struct (c->ts.type) && c->ts.u.derived->attr.coarray_comp
13907 && (c->attr.codimension || c->attr.pointer || c->attr.dimension
13908 || c->attr.allocatable))
13909 {
13910 gfc_error ("Component %qs at %L with coarray component "
13911 "shall be a nonpointer, nonallocatable scalar",
13912 c->name, &c->loc);
13913 return false;
13914 }
13915
13916 /* F2008, C448. */
13917 if (c->ts.type == BT_CLASS)
13918 {
13919 if (CLASS_DATA (c))
13920 {
13921 attr = &(CLASS_DATA (c)->attr);
13922
13923 /* Fix up contiguous attribute. */
13924 if (c->attr.contiguous)
13925 attr->contiguous = 1;
13926 }
13927 else
13928 attr = NULL;
13929 }
13930 else
13931 attr = &c->attr;
13932
13933 if (attr && attr->contiguous && (!attr->dimension || !attr->pointer))
13934 {
13935 gfc_error ("Component %qs at %L has the CONTIGUOUS attribute but "
13936 "is not an array pointer", c->name, &c->loc);
13937 return false;
13938 }
13939
13940 /* F2003, 15.2.1 - length has to be one. */
13941 if (sym->attr.is_bind_c && c->ts.type == BT_CHARACTER
13942 && (c->ts.u.cl == NULL || c->ts.u.cl->length == NULL
13943 || !gfc_is_constant_expr (c->ts.u.cl->length)
13944 || mpz_cmp_si (c->ts.u.cl->length->value.integer, 1) != 0))
13945 {
13946 gfc_error ("Component %qs of BIND(C) type at %L must have length one",
13947 c->name, &c->loc);
13948 return false;
13949 }
13950
13951 if (c->attr.proc_pointer && c->ts.interface)
13952 {
13953 gfc_symbol *ifc = c->ts.interface;
13954
13955 if (!sym->attr.vtype && !check_proc_interface (ifc, &c->loc))
13956 {
13957 c->tb->error = 1;
13958 return false;
13959 }
13960
13961 if (ifc->attr.if_source || ifc->attr.intrinsic)
13962 {
13963 /* Resolve interface and copy attributes. */
13964 if (ifc->formal && !ifc->formal_ns)
13965 resolve_symbol (ifc);
13966 if (ifc->attr.intrinsic)
13967 gfc_resolve_intrinsic (ifc, &ifc->declared_at);
13968
13969 if (ifc->result)
13970 {
13971 c->ts = ifc->result->ts;
13972 c->attr.allocatable = ifc->result->attr.allocatable;
13973 c->attr.pointer = ifc->result->attr.pointer;
13974 c->attr.dimension = ifc->result->attr.dimension;
13975 c->as = gfc_copy_array_spec (ifc->result->as);
13976 c->attr.class_ok = ifc->result->attr.class_ok;
13977 }
13978 else
13979 {
13980 c->ts = ifc->ts;
13981 c->attr.allocatable = ifc->attr.allocatable;
13982 c->attr.pointer = ifc->attr.pointer;
13983 c->attr.dimension = ifc->attr.dimension;
13984 c->as = gfc_copy_array_spec (ifc->as);
13985 c->attr.class_ok = ifc->attr.class_ok;
13986 }
13987 c->ts.interface = ifc;
13988 c->attr.function = ifc->attr.function;
13989 c->attr.subroutine = ifc->attr.subroutine;
13990
13991 c->attr.pure = ifc->attr.pure;
13992 c->attr.elemental = ifc->attr.elemental;
13993 c->attr.recursive = ifc->attr.recursive;
13994 c->attr.always_explicit = ifc->attr.always_explicit;
13995 c->attr.ext_attr |= ifc->attr.ext_attr;
13996 /* Copy char length. */
13997 if (ifc->ts.type == BT_CHARACTER && ifc->ts.u.cl)
13998 {
13999 gfc_charlen *cl = gfc_new_charlen (sym->ns, ifc->ts.u.cl);
14000 if (cl->length && !cl->resolved
14001 && !gfc_resolve_expr (cl->length))
14002 {
14003 c->tb->error = 1;
14004 return false;
14005 }
14006 c->ts.u.cl = cl;
14007 }
14008 }
14009 }
14010 else if (c->attr.proc_pointer && c->ts.type == BT_UNKNOWN)
14011 {
14012 /* Since PPCs are not implicitly typed, a PPC without an explicit
14013 interface must be a subroutine. */
14014 gfc_add_subroutine (&c->attr, c->name, &c->loc);
14015 }
14016
14017 /* Procedure pointer components: Check PASS arg. */
14018 if (c->attr.proc_pointer && !c->tb->nopass && c->tb->pass_arg_num == 0
14019 && !sym->attr.vtype)
14020 {
14021 gfc_symbol* me_arg;
14022
14023 if (c->tb->pass_arg)
14024 {
14025 gfc_formal_arglist* i;
14026
14027 /* If an explicit passing argument name is given, walk the arg-list
14028 and look for it. */
14029
14030 me_arg = NULL;
14031 c->tb->pass_arg_num = 1;
14032 for (i = c->ts.interface->formal; i; i = i->next)
14033 {
14034 if (!strcmp (i->sym->name, c->tb->pass_arg))
14035 {
14036 me_arg = i->sym;
14037 break;
14038 }
14039 c->tb->pass_arg_num++;
14040 }
14041
14042 if (!me_arg)
14043 {
14044 gfc_error ("Procedure pointer component %qs with PASS(%s) "
14045 "at %L has no argument %qs", c->name,
14046 c->tb->pass_arg, &c->loc, c->tb->pass_arg);
14047 c->tb->error = 1;
14048 return false;
14049 }
14050 }
14051 else
14052 {
14053 /* Otherwise, take the first one; there should in fact be at least
14054 one. */
14055 c->tb->pass_arg_num = 1;
14056 if (!c->ts.interface->formal)
14057 {
14058 gfc_error ("Procedure pointer component %qs with PASS at %L "
14059 "must have at least one argument",
14060 c->name, &c->loc);
14061 c->tb->error = 1;
14062 return false;
14063 }
14064 me_arg = c->ts.interface->formal->sym;
14065 }
14066
14067 /* Now check that the argument-type matches. */
14068 gcc_assert (me_arg);
14069 if ((me_arg->ts.type != BT_DERIVED && me_arg->ts.type != BT_CLASS)
14070 || (me_arg->ts.type == BT_DERIVED && me_arg->ts.u.derived != sym)
14071 || (me_arg->ts.type == BT_CLASS
14072 && CLASS_DATA (me_arg)->ts.u.derived != sym))
14073 {
14074 gfc_error ("Argument %qs of %qs with PASS(%s) at %L must be of"
14075 " the derived type %qs", me_arg->name, c->name,
14076 me_arg->name, &c->loc, sym->name);
14077 c->tb->error = 1;
14078 return false;
14079 }
14080
14081 /* Check for F03:C453. */
14082 if (CLASS_DATA (me_arg)->attr.dimension)
14083 {
14084 gfc_error ("Argument %qs of %qs with PASS(%s) at %L "
14085 "must be scalar", me_arg->name, c->name, me_arg->name,
14086 &c->loc);
14087 c->tb->error = 1;
14088 return false;
14089 }
14090
14091 if (CLASS_DATA (me_arg)->attr.class_pointer)
14092 {
14093 gfc_error ("Argument %qs of %qs with PASS(%s) at %L "
14094 "may not have the POINTER attribute", me_arg->name,
14095 c->name, me_arg->name, &c->loc);
14096 c->tb->error = 1;
14097 return false;
14098 }
14099
14100 if (CLASS_DATA (me_arg)->attr.allocatable)
14101 {
14102 gfc_error ("Argument %qs of %qs with PASS(%s) at %L "
14103 "may not be ALLOCATABLE", me_arg->name, c->name,
14104 me_arg->name, &c->loc);
14105 c->tb->error = 1;
14106 return false;
14107 }
14108
14109 if (gfc_type_is_extensible (sym) && me_arg->ts.type != BT_CLASS)
14110 {
14111 gfc_error ("Non-polymorphic passed-object dummy argument of %qs"
14112 " at %L", c->name, &c->loc);
14113 return false;
14114 }
14115
14116 }
14117
14118 /* Check type-spec if this is not the parent-type component. */
14119 if (((sym->attr.is_class
14120 && (!sym->components->ts.u.derived->attr.extension
14121 || c != sym->components->ts.u.derived->components))
14122 || (!sym->attr.is_class
14123 && (!sym->attr.extension || c != sym->components)))
14124 && !sym->attr.vtype
14125 && !resolve_typespec_used (&c->ts, &c->loc, c->name))
14126 return false;
14127
14128 super_type = gfc_get_derived_super_type (sym);
14129
14130 /* If this type is an extension, set the accessibility of the parent
14131 component. */
14132 if (super_type
14133 && ((sym->attr.is_class
14134 && c == sym->components->ts.u.derived->components)
14135 || (!sym->attr.is_class && c == sym->components))
14136 && strcmp (super_type->name, c->name) == 0)
14137 c->attr.access = super_type->attr.access;
14138
14139 /* If this type is an extension, see if this component has the same name
14140 as an inherited type-bound procedure. */
14141 if (super_type && !sym->attr.is_class
14142 && gfc_find_typebound_proc (super_type, NULL, c->name, true, NULL))
14143 {
14144 gfc_error ("Component %qs of %qs at %L has the same name as an"
14145 " inherited type-bound procedure",
14146 c->name, sym->name, &c->loc);
14147 return false;
14148 }
14149
14150 if (c->ts.type == BT_CHARACTER && !c->attr.proc_pointer
14151 && !c->ts.deferred)
14152 {
14153 if (c->ts.u.cl->length == NULL
14154 || (!resolve_charlen(c->ts.u.cl))
14155 || !gfc_is_constant_expr (c->ts.u.cl->length))
14156 {
14157 gfc_error ("Character length of component %qs needs to "
14158 "be a constant specification expression at %L",
14159 c->name,
14160 c->ts.u.cl->length ? &c->ts.u.cl->length->where : &c->loc);
14161 return false;
14162 }
14163 }
14164
14165 if (c->ts.type == BT_CHARACTER && c->ts.deferred
14166 && !c->attr.pointer && !c->attr.allocatable)
14167 {
14168 gfc_error ("Character component %qs of %qs at %L with deferred "
14169 "length must be a POINTER or ALLOCATABLE",
14170 c->name, sym->name, &c->loc);
14171 return false;
14172 }
14173
14174 /* Add the hidden deferred length field. */
14175 if (c->ts.type == BT_CHARACTER
14176 && (c->ts.deferred || c->attr.pdt_string)
14177 && !c->attr.function
14178 && !sym->attr.is_class)
14179 {
14180 char name[GFC_MAX_SYMBOL_LEN+9];
14181 gfc_component *strlen;
14182 sprintf (name, "_%s_length", c->name);
14183 strlen = gfc_find_component (sym, name, true, true, NULL);
14184 if (strlen == NULL)
14185 {
14186 if (!gfc_add_component (sym, name, &strlen))
14187 return false;
14188 strlen->ts.type = BT_INTEGER;
14189 strlen->ts.kind = gfc_charlen_int_kind;
14190 strlen->attr.access = ACCESS_PRIVATE;
14191 strlen->attr.artificial = 1;
14192 }
14193 }
14194
14195 if (c->ts.type == BT_DERIVED
14196 && sym->component_access != ACCESS_PRIVATE
14197 && gfc_check_symbol_access (sym)
14198 && !is_sym_host_assoc (c->ts.u.derived, sym->ns)
14199 && !c->ts.u.derived->attr.use_assoc
14200 && !gfc_check_symbol_access (c->ts.u.derived)
14201 && !gfc_notify_std (GFC_STD_F2003, "the component %qs is a "
14202 "PRIVATE type and cannot be a component of "
14203 "%qs, which is PUBLIC at %L", c->name,
14204 sym->name, &sym->declared_at))
14205 return false;
14206
14207 if ((sym->attr.sequence || sym->attr.is_bind_c) && c->ts.type == BT_CLASS)
14208 {
14209 gfc_error ("Polymorphic component %s at %L in SEQUENCE or BIND(C) "
14210 "type %s", c->name, &c->loc, sym->name);
14211 return false;
14212 }
14213
14214 if (sym->attr.sequence)
14215 {
14216 if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.sequence == 0)
14217 {
14218 gfc_error ("Component %s of SEQUENCE type declared at %L does "
14219 "not have the SEQUENCE attribute",
14220 c->ts.u.derived->name, &sym->declared_at);
14221 return false;
14222 }
14223 }
14224
14225 if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.generic)
14226 c->ts.u.derived = gfc_find_dt_in_generic (c->ts.u.derived);
14227 else if (c->ts.type == BT_CLASS && c->attr.class_ok
14228 && CLASS_DATA (c)->ts.u.derived->attr.generic)
14229 CLASS_DATA (c)->ts.u.derived
14230 = gfc_find_dt_in_generic (CLASS_DATA (c)->ts.u.derived);
14231
14232 /* If an allocatable component derived type is of the same type as
14233 the enclosing derived type, we need a vtable generating so that
14234 the __deallocate procedure is created. */
14235 if ((c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
14236 && c->ts.u.derived == sym && c->attr.allocatable == 1)
14237 gfc_find_vtab (&c->ts);
14238
14239 /* Ensure that all the derived type components are put on the
14240 derived type list; even in formal namespaces, where derived type
14241 pointer components might not have been declared. */
14242 if (c->ts.type == BT_DERIVED
14243 && c->ts.u.derived
14244 && c->ts.u.derived->components
14245 && c->attr.pointer
14246 && sym != c->ts.u.derived)
14247 add_dt_to_dt_list (c->ts.u.derived);
14248
14249 if (!gfc_resolve_array_spec (c->as,
14250 !(c->attr.pointer || c->attr.proc_pointer
14251 || c->attr.allocatable)))
14252 return false;
14253
14254 if (c->initializer && !sym->attr.vtype
14255 && !c->attr.pdt_kind && !c->attr.pdt_len
14256 && !gfc_check_assign_symbol (sym, c, c->initializer))
14257 return false;
14258
14259 return true;
14260 }
14261
14262
14263 /* Be nice about the locus for a structure expression - show the locus of the
14264 first non-null sub-expression if we can. */
14265
14266 static locus *
14267 cons_where (gfc_expr *struct_expr)
14268 {
14269 gfc_constructor *cons;
14270
14271 gcc_assert (struct_expr && struct_expr->expr_type == EXPR_STRUCTURE);
14272
14273 cons = gfc_constructor_first (struct_expr->value.constructor);
14274 for (; cons; cons = gfc_constructor_next (cons))
14275 {
14276 if (cons->expr && cons->expr->expr_type != EXPR_NULL)
14277 return &cons->expr->where;
14278 }
14279
14280 return &struct_expr->where;
14281 }
14282
14283 /* Resolve the components of a structure type. Much less work than derived
14284 types. */
14285
14286 static bool
14287 resolve_fl_struct (gfc_symbol *sym)
14288 {
14289 gfc_component *c;
14290 gfc_expr *init = NULL;
14291 bool success;
14292
14293 /* Make sure UNIONs do not have overlapping initializers. */
14294 if (sym->attr.flavor == FL_UNION)
14295 {
14296 for (c = sym->components; c; c = c->next)
14297 {
14298 if (init && c->initializer)
14299 {
14300 gfc_error ("Conflicting initializers in union at %L and %L",
14301 cons_where (init), cons_where (c->initializer));
14302 gfc_free_expr (c->initializer);
14303 c->initializer = NULL;
14304 }
14305 if (init == NULL)
14306 init = c->initializer;
14307 }
14308 }
14309
14310 success = true;
14311 for (c = sym->components; c; c = c->next)
14312 if (!resolve_component (c, sym))
14313 success = false;
14314
14315 if (!success)
14316 return false;
14317
14318 if (sym->components)
14319 add_dt_to_dt_list (sym);
14320
14321 return true;
14322 }
14323
14324
14325 /* Resolve the components of a derived type. This does not have to wait until
14326 resolution stage, but can be done as soon as the dt declaration has been
14327 parsed. */
14328
14329 static bool
14330 resolve_fl_derived0 (gfc_symbol *sym)
14331 {
14332 gfc_symbol* super_type;
14333 gfc_component *c;
14334 gfc_formal_arglist *f;
14335 bool success;
14336
14337 if (sym->attr.unlimited_polymorphic)
14338 return true;
14339
14340 super_type = gfc_get_derived_super_type (sym);
14341
14342 /* F2008, C432. */
14343 if (super_type && sym->attr.coarray_comp && !super_type->attr.coarray_comp)
14344 {
14345 gfc_error ("As extending type %qs at %L has a coarray component, "
14346 "parent type %qs shall also have one", sym->name,
14347 &sym->declared_at, super_type->name);
14348 return false;
14349 }
14350
14351 /* Ensure the extended type gets resolved before we do. */
14352 if (super_type && !resolve_fl_derived0 (super_type))
14353 return false;
14354
14355 /* An ABSTRACT type must be extensible. */
14356 if (sym->attr.abstract && !gfc_type_is_extensible (sym))
14357 {
14358 gfc_error ("Non-extensible derived-type %qs at %L must not be ABSTRACT",
14359 sym->name, &sym->declared_at);
14360 return false;
14361 }
14362
14363 c = (sym->attr.is_class) ? sym->components->ts.u.derived->components
14364 : sym->components;
14365
14366 success = true;
14367 for ( ; c != NULL; c = c->next)
14368 if (!resolve_component (c, sym))
14369 success = false;
14370
14371 if (!success)
14372 return false;
14373
14374 /* Now add the caf token field, where needed. */
14375 if (flag_coarray != GFC_FCOARRAY_NONE
14376 && !sym->attr.is_class && !sym->attr.vtype)
14377 {
14378 for (c = sym->components; c; c = c->next)
14379 if (!c->attr.dimension && !c->attr.codimension
14380 && (c->attr.allocatable || c->attr.pointer))
14381 {
14382 char name[GFC_MAX_SYMBOL_LEN+9];
14383 gfc_component *token;
14384 sprintf (name, "_caf_%s", c->name);
14385 token = gfc_find_component (sym, name, true, true, NULL);
14386 if (token == NULL)
14387 {
14388 if (!gfc_add_component (sym, name, &token))
14389 return false;
14390 token->ts.type = BT_VOID;
14391 token->ts.kind = gfc_default_integer_kind;
14392 token->attr.access = ACCESS_PRIVATE;
14393 token->attr.artificial = 1;
14394 token->attr.caf_token = 1;
14395 }
14396 }
14397 }
14398
14399 check_defined_assignments (sym);
14400
14401 if (!sym->attr.defined_assign_comp && super_type)
14402 sym->attr.defined_assign_comp
14403 = super_type->attr.defined_assign_comp;
14404
14405 /* If this is a non-ABSTRACT type extending an ABSTRACT one, ensure that
14406 all DEFERRED bindings are overridden. */
14407 if (super_type && super_type->attr.abstract && !sym->attr.abstract
14408 && !sym->attr.is_class
14409 && !ensure_not_abstract (sym, super_type))
14410 return false;
14411
14412 /* Check that there is a component for every PDT parameter. */
14413 if (sym->attr.pdt_template)
14414 {
14415 for (f = sym->formal; f; f = f->next)
14416 {
14417 if (!f->sym)
14418 continue;
14419 c = gfc_find_component (sym, f->sym->name, true, true, NULL);
14420 if (c == NULL)
14421 {
14422 gfc_error ("Parameterized type %qs does not have a component "
14423 "corresponding to parameter %qs at %L", sym->name,
14424 f->sym->name, &sym->declared_at);
14425 break;
14426 }
14427 }
14428 }
14429
14430 /* Add derived type to the derived type list. */
14431 add_dt_to_dt_list (sym);
14432
14433 return true;
14434 }
14435
14436
14437 /* The following procedure does the full resolution of a derived type,
14438 including resolution of all type-bound procedures (if present). In contrast
14439 to 'resolve_fl_derived0' this can only be done after the module has been
14440 parsed completely. */
14441
14442 static bool
14443 resolve_fl_derived (gfc_symbol *sym)
14444 {
14445 gfc_symbol *gen_dt = NULL;
14446
14447 if (sym->attr.unlimited_polymorphic)
14448 return true;
14449
14450 if (!sym->attr.is_class)
14451 gfc_find_symbol (sym->name, sym->ns, 0, &gen_dt);
14452 if (gen_dt && gen_dt->generic && gen_dt->generic->next
14453 && (!gen_dt->generic->sym->attr.use_assoc
14454 || gen_dt->generic->sym->module != gen_dt->generic->next->sym->module)
14455 && !gfc_notify_std (GFC_STD_F2003, "Generic name %qs of function "
14456 "%qs at %L being the same name as derived "
14457 "type at %L", sym->name,
14458 gen_dt->generic->sym == sym
14459 ? gen_dt->generic->next->sym->name
14460 : gen_dt->generic->sym->name,
14461 gen_dt->generic->sym == sym
14462 ? &gen_dt->generic->next->sym->declared_at
14463 : &gen_dt->generic->sym->declared_at,
14464 &sym->declared_at))
14465 return false;
14466
14467 if (sym->components == NULL && !sym->attr.zero_comp && !sym->attr.use_assoc)
14468 {
14469 gfc_error ("Derived type %qs at %L has not been declared",
14470 sym->name, &sym->declared_at);
14471 return false;
14472 }
14473
14474 /* Resolve the finalizer procedures. */
14475 if (!gfc_resolve_finalizers (sym, NULL))
14476 return false;
14477
14478 if (sym->attr.is_class && sym->ts.u.derived == NULL)
14479 {
14480 /* Fix up incomplete CLASS symbols. */
14481 gfc_component *data = gfc_find_component (sym, "_data", true, true, NULL);
14482 gfc_component *vptr = gfc_find_component (sym, "_vptr", true, true, NULL);
14483
14484 /* Nothing more to do for unlimited polymorphic entities. */
14485 if (data->ts.u.derived->attr.unlimited_polymorphic)
14486 return true;
14487 else if (vptr->ts.u.derived == NULL)
14488 {
14489 gfc_symbol *vtab = gfc_find_derived_vtab (data->ts.u.derived);
14490 gcc_assert (vtab);
14491 vptr->ts.u.derived = vtab->ts.u.derived;
14492 if (!resolve_fl_derived0 (vptr->ts.u.derived))
14493 return false;
14494 }
14495 }
14496
14497 if (!resolve_fl_derived0 (sym))
14498 return false;
14499
14500 /* Resolve the type-bound procedures. */
14501 if (!resolve_typebound_procedures (sym))
14502 return false;
14503
14504 /* Generate module vtables subject to their accessibility and their not
14505 being vtables or pdt templates. If this is not done class declarations
14506 in external procedures wind up with their own version and so SELECT TYPE
14507 fails because the vptrs do not have the same address. */
14508 if (gfc_option.allow_std & GFC_STD_F2003
14509 && sym->ns->proc_name
14510 && sym->ns->proc_name->attr.flavor == FL_MODULE
14511 && sym->attr.access != ACCESS_PRIVATE
14512 && !(sym->attr.use_assoc || sym->attr.vtype || sym->attr.pdt_template))
14513 {
14514 gfc_symbol *vtab = gfc_find_derived_vtab (sym);
14515 gfc_set_sym_referenced (vtab);
14516 }
14517
14518 return true;
14519 }
14520
14521
14522 static bool
14523 resolve_fl_namelist (gfc_symbol *sym)
14524 {
14525 gfc_namelist *nl;
14526 gfc_symbol *nlsym;
14527
14528 for (nl = sym->namelist; nl; nl = nl->next)
14529 {
14530 /* Check again, the check in match only works if NAMELIST comes
14531 after the decl. */
14532 if (nl->sym->as && nl->sym->as->type == AS_ASSUMED_SIZE)
14533 {
14534 gfc_error ("Assumed size array %qs in namelist %qs at %L is not "
14535 "allowed", nl->sym->name, sym->name, &sym->declared_at);
14536 return false;
14537 }
14538
14539 if (nl->sym->as && nl->sym->as->type == AS_ASSUMED_SHAPE
14540 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST array object %qs "
14541 "with assumed shape in namelist %qs at %L",
14542 nl->sym->name, sym->name, &sym->declared_at))
14543 return false;
14544
14545 if (is_non_constant_shape_array (nl->sym)
14546 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST array object %qs "
14547 "with nonconstant shape in namelist %qs at %L",
14548 nl->sym->name, sym->name, &sym->declared_at))
14549 return false;
14550
14551 if (nl->sym->ts.type == BT_CHARACTER
14552 && (nl->sym->ts.u.cl->length == NULL
14553 || !gfc_is_constant_expr (nl->sym->ts.u.cl->length))
14554 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST object %qs with "
14555 "nonconstant character length in "
14556 "namelist %qs at %L", nl->sym->name,
14557 sym->name, &sym->declared_at))
14558 return false;
14559
14560 }
14561
14562 /* Reject PRIVATE objects in a PUBLIC namelist. */
14563 if (gfc_check_symbol_access (sym))
14564 {
14565 for (nl = sym->namelist; nl; nl = nl->next)
14566 {
14567 if (!nl->sym->attr.use_assoc
14568 && !is_sym_host_assoc (nl->sym, sym->ns)
14569 && !gfc_check_symbol_access (nl->sym))
14570 {
14571 gfc_error ("NAMELIST object %qs was declared PRIVATE and "
14572 "cannot be member of PUBLIC namelist %qs at %L",
14573 nl->sym->name, sym->name, &sym->declared_at);
14574 return false;
14575 }
14576
14577 if (nl->sym->ts.type == BT_DERIVED
14578 && (nl->sym->ts.u.derived->attr.alloc_comp
14579 || nl->sym->ts.u.derived->attr.pointer_comp))
14580 {
14581 if (!gfc_notify_std (GFC_STD_F2003, "NAMELIST object %qs in "
14582 "namelist %qs at %L with ALLOCATABLE "
14583 "or POINTER components", nl->sym->name,
14584 sym->name, &sym->declared_at))
14585 return false;
14586 return true;
14587 }
14588
14589 /* Types with private components that came here by USE-association. */
14590 if (nl->sym->ts.type == BT_DERIVED
14591 && derived_inaccessible (nl->sym->ts.u.derived))
14592 {
14593 gfc_error ("NAMELIST object %qs has use-associated PRIVATE "
14594 "components and cannot be member of namelist %qs at %L",
14595 nl->sym->name, sym->name, &sym->declared_at);
14596 return false;
14597 }
14598
14599 /* Types with private components that are defined in the same module. */
14600 if (nl->sym->ts.type == BT_DERIVED
14601 && !is_sym_host_assoc (nl->sym->ts.u.derived, sym->ns)
14602 && nl->sym->ts.u.derived->attr.private_comp)
14603 {
14604 gfc_error ("NAMELIST object %qs has PRIVATE components and "
14605 "cannot be a member of PUBLIC namelist %qs at %L",
14606 nl->sym->name, sym->name, &sym->declared_at);
14607 return false;
14608 }
14609 }
14610 }
14611
14612
14613 /* 14.1.2 A module or internal procedure represent local entities
14614 of the same type as a namelist member and so are not allowed. */
14615 for (nl = sym->namelist; nl; nl = nl->next)
14616 {
14617 if (nl->sym->ts.kind != 0 && nl->sym->attr.flavor == FL_VARIABLE)
14618 continue;
14619
14620 if (nl->sym->attr.function && nl->sym == nl->sym->result)
14621 if ((nl->sym == sym->ns->proc_name)
14622 ||
14623 (sym->ns->parent && nl->sym == sym->ns->parent->proc_name))
14624 continue;
14625
14626 nlsym = NULL;
14627 if (nl->sym->name)
14628 gfc_find_symbol (nl->sym->name, sym->ns, 1, &nlsym);
14629 if (nlsym && nlsym->attr.flavor == FL_PROCEDURE)
14630 {
14631 gfc_error ("PROCEDURE attribute conflicts with NAMELIST "
14632 "attribute in %qs at %L", nlsym->name,
14633 &sym->declared_at);
14634 return false;
14635 }
14636 }
14637
14638 if (async_io_dt)
14639 {
14640 for (nl = sym->namelist; nl; nl = nl->next)
14641 nl->sym->attr.asynchronous = 1;
14642 }
14643 return true;
14644 }
14645
14646
14647 static bool
14648 resolve_fl_parameter (gfc_symbol *sym)
14649 {
14650 /* A parameter array's shape needs to be constant. */
14651 if (sym->as != NULL
14652 && (sym->as->type == AS_DEFERRED
14653 || is_non_constant_shape_array (sym)))
14654 {
14655 gfc_error ("Parameter array %qs at %L cannot be automatic "
14656 "or of deferred shape", sym->name, &sym->declared_at);
14657 return false;
14658 }
14659
14660 /* Constraints on deferred type parameter. */
14661 if (!deferred_requirements (sym))
14662 return false;
14663
14664 /* Make sure a parameter that has been implicitly typed still
14665 matches the implicit type, since PARAMETER statements can precede
14666 IMPLICIT statements. */
14667 if (sym->attr.implicit_type
14668 && !gfc_compare_types (&sym->ts, gfc_get_default_type (sym->name,
14669 sym->ns)))
14670 {
14671 gfc_error ("Implicitly typed PARAMETER %qs at %L doesn't match a "
14672 "later IMPLICIT type", sym->name, &sym->declared_at);
14673 return false;
14674 }
14675
14676 /* Make sure the types of derived parameters are consistent. This
14677 type checking is deferred until resolution because the type may
14678 refer to a derived type from the host. */
14679 if (sym->ts.type == BT_DERIVED
14680 && !gfc_compare_types (&sym->ts, &sym->value->ts))
14681 {
14682 gfc_error ("Incompatible derived type in PARAMETER at %L",
14683 &sym->value->where);
14684 return false;
14685 }
14686
14687 /* F03:C509,C514. */
14688 if (sym->ts.type == BT_CLASS)
14689 {
14690 gfc_error ("CLASS variable %qs at %L cannot have the PARAMETER attribute",
14691 sym->name, &sym->declared_at);
14692 return false;
14693 }
14694
14695 return true;
14696 }
14697
14698
14699 /* Called by resolve_symbol to check PDTs. */
14700
14701 static void
14702 resolve_pdt (gfc_symbol* sym)
14703 {
14704 gfc_symbol *derived = NULL;
14705 gfc_actual_arglist *param;
14706 gfc_component *c;
14707 bool const_len_exprs = true;
14708 bool assumed_len_exprs = false;
14709 symbol_attribute *attr;
14710
14711 if (sym->ts.type == BT_DERIVED)
14712 {
14713 derived = sym->ts.u.derived;
14714 attr = &(sym->attr);
14715 }
14716 else if (sym->ts.type == BT_CLASS)
14717 {
14718 derived = CLASS_DATA (sym)->ts.u.derived;
14719 attr = &(CLASS_DATA (sym)->attr);
14720 }
14721 else
14722 gcc_unreachable ();
14723
14724 gcc_assert (derived->attr.pdt_type);
14725
14726 for (param = sym->param_list; param; param = param->next)
14727 {
14728 c = gfc_find_component (derived, param->name, false, true, NULL);
14729 gcc_assert (c);
14730 if (c->attr.pdt_kind)
14731 continue;
14732
14733 if (param->expr && !gfc_is_constant_expr (param->expr)
14734 && c->attr.pdt_len)
14735 const_len_exprs = false;
14736 else if (param->spec_type == SPEC_ASSUMED)
14737 assumed_len_exprs = true;
14738
14739 if (param->spec_type == SPEC_DEFERRED
14740 && !attr->allocatable && !attr->pointer)
14741 gfc_error ("The object %qs at %L has a deferred LEN "
14742 "parameter %qs and is neither allocatable "
14743 "nor a pointer", sym->name, &sym->declared_at,
14744 param->name);
14745
14746 }
14747
14748 if (!const_len_exprs
14749 && (sym->ns->proc_name->attr.is_main_program
14750 || sym->ns->proc_name->attr.flavor == FL_MODULE
14751 || sym->attr.save != SAVE_NONE))
14752 gfc_error ("The AUTOMATIC object %qs at %L must not have the "
14753 "SAVE attribute or be a variable declared in the "
14754 "main program, a module or a submodule(F08/C513)",
14755 sym->name, &sym->declared_at);
14756
14757 if (assumed_len_exprs && !(sym->attr.dummy
14758 || sym->attr.select_type_temporary || sym->attr.associate_var))
14759 gfc_error ("The object %qs at %L with ASSUMED type parameters "
14760 "must be a dummy or a SELECT TYPE selector(F08/4.2)",
14761 sym->name, &sym->declared_at);
14762 }
14763
14764
14765 /* Do anything necessary to resolve a symbol. Right now, we just
14766 assume that an otherwise unknown symbol is a variable. This sort
14767 of thing commonly happens for symbols in module. */
14768
14769 static void
14770 resolve_symbol (gfc_symbol *sym)
14771 {
14772 int check_constant, mp_flag;
14773 gfc_symtree *symtree;
14774 gfc_symtree *this_symtree;
14775 gfc_namespace *ns;
14776 gfc_component *c;
14777 symbol_attribute class_attr;
14778 gfc_array_spec *as;
14779 bool saved_specification_expr;
14780
14781 if (sym->resolved)
14782 return;
14783 sym->resolved = 1;
14784
14785 /* No symbol will ever have union type; only components can be unions.
14786 Union type declaration symbols have type BT_UNKNOWN but flavor FL_UNION
14787 (just like derived type declaration symbols have flavor FL_DERIVED). */
14788 gcc_assert (sym->ts.type != BT_UNION);
14789
14790 /* Coarrayed polymorphic objects with allocatable or pointer components are
14791 yet unsupported for -fcoarray=lib. */
14792 if (flag_coarray == GFC_FCOARRAY_LIB && sym->ts.type == BT_CLASS
14793 && sym->ts.u.derived && CLASS_DATA (sym)
14794 && CLASS_DATA (sym)->attr.codimension
14795 && (CLASS_DATA (sym)->ts.u.derived->attr.alloc_comp
14796 || CLASS_DATA (sym)->ts.u.derived->attr.pointer_comp))
14797 {
14798 gfc_error ("Sorry, allocatable/pointer components in polymorphic (CLASS) "
14799 "type coarrays at %L are unsupported", &sym->declared_at);
14800 return;
14801 }
14802
14803 if (sym->attr.artificial)
14804 return;
14805
14806 if (sym->attr.unlimited_polymorphic)
14807 return;
14808
14809 if (sym->attr.flavor == FL_UNKNOWN
14810 || (sym->attr.flavor == FL_PROCEDURE && !sym->attr.intrinsic
14811 && !sym->attr.generic && !sym->attr.external
14812 && sym->attr.if_source == IFSRC_UNKNOWN
14813 && sym->ts.type == BT_UNKNOWN))
14814 {
14815
14816 /* If we find that a flavorless symbol is an interface in one of the
14817 parent namespaces, find its symtree in this namespace, free the
14818 symbol and set the symtree to point to the interface symbol. */
14819 for (ns = gfc_current_ns->parent; ns; ns = ns->parent)
14820 {
14821 symtree = gfc_find_symtree (ns->sym_root, sym->name);
14822 if (symtree && (symtree->n.sym->generic ||
14823 (symtree->n.sym->attr.flavor == FL_PROCEDURE
14824 && sym->ns->construct_entities)))
14825 {
14826 this_symtree = gfc_find_symtree (gfc_current_ns->sym_root,
14827 sym->name);
14828 if (this_symtree->n.sym == sym)
14829 {
14830 symtree->n.sym->refs++;
14831 gfc_release_symbol (sym);
14832 this_symtree->n.sym = symtree->n.sym;
14833 return;
14834 }
14835 }
14836 }
14837
14838 /* Otherwise give it a flavor according to such attributes as
14839 it has. */
14840 if (sym->attr.flavor == FL_UNKNOWN && sym->attr.external == 0
14841 && sym->attr.intrinsic == 0)
14842 sym->attr.flavor = FL_VARIABLE;
14843 else if (sym->attr.flavor == FL_UNKNOWN)
14844 {
14845 sym->attr.flavor = FL_PROCEDURE;
14846 if (sym->attr.dimension)
14847 sym->attr.function = 1;
14848 }
14849 }
14850
14851 if (sym->attr.external && sym->ts.type != BT_UNKNOWN && !sym->attr.function)
14852 gfc_add_function (&sym->attr, sym->name, &sym->declared_at);
14853
14854 if (sym->attr.procedure && sym->attr.if_source != IFSRC_DECL
14855 && !resolve_procedure_interface (sym))
14856 return;
14857
14858 if (sym->attr.is_protected && !sym->attr.proc_pointer
14859 && (sym->attr.procedure || sym->attr.external))
14860 {
14861 if (sym->attr.external)
14862 gfc_error ("PROTECTED attribute conflicts with EXTERNAL attribute "
14863 "at %L", &sym->declared_at);
14864 else
14865 gfc_error ("PROCEDURE attribute conflicts with PROTECTED attribute "
14866 "at %L", &sym->declared_at);
14867
14868 return;
14869 }
14870
14871 if (sym->attr.flavor == FL_DERIVED && !resolve_fl_derived (sym))
14872 return;
14873
14874 else if ((sym->attr.flavor == FL_STRUCT || sym->attr.flavor == FL_UNION)
14875 && !resolve_fl_struct (sym))
14876 return;
14877
14878 /* Symbols that are module procedures with results (functions) have
14879 the types and array specification copied for type checking in
14880 procedures that call them, as well as for saving to a module
14881 file. These symbols can't stand the scrutiny that their results
14882 can. */
14883 mp_flag = (sym->result != NULL && sym->result != sym);
14884
14885 /* Make sure that the intrinsic is consistent with its internal
14886 representation. This needs to be done before assigning a default
14887 type to avoid spurious warnings. */
14888 if (sym->attr.flavor != FL_MODULE && sym->attr.intrinsic
14889 && !gfc_resolve_intrinsic (sym, &sym->declared_at))
14890 return;
14891
14892 /* Resolve associate names. */
14893 if (sym->assoc)
14894 resolve_assoc_var (sym, true);
14895
14896 /* Assign default type to symbols that need one and don't have one. */
14897 if (sym->ts.type == BT_UNKNOWN)
14898 {
14899 if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER)
14900 {
14901 gfc_set_default_type (sym, 1, NULL);
14902 }
14903
14904 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.external
14905 && !sym->attr.function && !sym->attr.subroutine
14906 && gfc_get_default_type (sym->name, sym->ns)->type == BT_UNKNOWN)
14907 gfc_add_subroutine (&sym->attr, sym->name, &sym->declared_at);
14908
14909 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.function)
14910 {
14911 /* The specific case of an external procedure should emit an error
14912 in the case that there is no implicit type. */
14913 if (!mp_flag)
14914 {
14915 if (!sym->attr.mixed_entry_master)
14916 gfc_set_default_type (sym, sym->attr.external, NULL);
14917 }
14918 else
14919 {
14920 /* Result may be in another namespace. */
14921 resolve_symbol (sym->result);
14922
14923 if (!sym->result->attr.proc_pointer)
14924 {
14925 sym->ts = sym->result->ts;
14926 sym->as = gfc_copy_array_spec (sym->result->as);
14927 sym->attr.dimension = sym->result->attr.dimension;
14928 sym->attr.pointer = sym->result->attr.pointer;
14929 sym->attr.allocatable = sym->result->attr.allocatable;
14930 sym->attr.contiguous = sym->result->attr.contiguous;
14931 }
14932 }
14933 }
14934 }
14935 else if (mp_flag && sym->attr.flavor == FL_PROCEDURE && sym->attr.function)
14936 {
14937 bool saved_specification_expr = specification_expr;
14938 specification_expr = true;
14939 gfc_resolve_array_spec (sym->result->as, false);
14940 specification_expr = saved_specification_expr;
14941 }
14942
14943 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
14944 {
14945 as = CLASS_DATA (sym)->as;
14946 class_attr = CLASS_DATA (sym)->attr;
14947 class_attr.pointer = class_attr.class_pointer;
14948 }
14949 else
14950 {
14951 class_attr = sym->attr;
14952 as = sym->as;
14953 }
14954
14955 /* F2008, C530. */
14956 if (sym->attr.contiguous
14957 && (!class_attr.dimension
14958 || (as->type != AS_ASSUMED_SHAPE && as->type != AS_ASSUMED_RANK
14959 && !class_attr.pointer)))
14960 {
14961 gfc_error ("%qs at %L has the CONTIGUOUS attribute but is not an "
14962 "array pointer or an assumed-shape or assumed-rank array",
14963 sym->name, &sym->declared_at);
14964 return;
14965 }
14966
14967 /* Assumed size arrays and assumed shape arrays must be dummy
14968 arguments. Array-spec's of implied-shape should have been resolved to
14969 AS_EXPLICIT already. */
14970
14971 if (as)
14972 {
14973 /* If AS_IMPLIED_SHAPE makes it to here, it must be a bad
14974 specification expression. */
14975 if (as->type == AS_IMPLIED_SHAPE)
14976 {
14977 int i;
14978 for (i=0; i<as->rank; i++)
14979 {
14980 if (as->lower[i] != NULL && as->upper[i] == NULL)
14981 {
14982 gfc_error ("Bad specification for assumed size array at %L",
14983 &as->lower[i]->where);
14984 return;
14985 }
14986 }
14987 gcc_unreachable();
14988 }
14989
14990 if (((as->type == AS_ASSUMED_SIZE && !as->cp_was_assumed)
14991 || as->type == AS_ASSUMED_SHAPE)
14992 && !sym->attr.dummy && !sym->attr.select_type_temporary)
14993 {
14994 if (as->type == AS_ASSUMED_SIZE)
14995 gfc_error ("Assumed size array at %L must be a dummy argument",
14996 &sym->declared_at);
14997 else
14998 gfc_error ("Assumed shape array at %L must be a dummy argument",
14999 &sym->declared_at);
15000 return;
15001 }
15002 /* TS 29113, C535a. */
15003 if (as->type == AS_ASSUMED_RANK && !sym->attr.dummy
15004 && !sym->attr.select_type_temporary)
15005 {
15006 gfc_error ("Assumed-rank array at %L must be a dummy argument",
15007 &sym->declared_at);
15008 return;
15009 }
15010 if (as->type == AS_ASSUMED_RANK
15011 && (sym->attr.codimension || sym->attr.value))
15012 {
15013 gfc_error ("Assumed-rank array at %L may not have the VALUE or "
15014 "CODIMENSION attribute", &sym->declared_at);
15015 return;
15016 }
15017 }
15018
15019 /* Make sure symbols with known intent or optional are really dummy
15020 variable. Because of ENTRY statement, this has to be deferred
15021 until resolution time. */
15022
15023 if (!sym->attr.dummy
15024 && (sym->attr.optional || sym->attr.intent != INTENT_UNKNOWN))
15025 {
15026 gfc_error ("Symbol at %L is not a DUMMY variable", &sym->declared_at);
15027 return;
15028 }
15029
15030 if (sym->attr.value && !sym->attr.dummy)
15031 {
15032 gfc_error ("%qs at %L cannot have the VALUE attribute because "
15033 "it is not a dummy argument", sym->name, &sym->declared_at);
15034 return;
15035 }
15036
15037 if (sym->attr.value && sym->ts.type == BT_CHARACTER)
15038 {
15039 gfc_charlen *cl = sym->ts.u.cl;
15040 if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
15041 {
15042 gfc_error ("Character dummy variable %qs at %L with VALUE "
15043 "attribute must have constant length",
15044 sym->name, &sym->declared_at);
15045 return;
15046 }
15047
15048 if (sym->ts.is_c_interop
15049 && mpz_cmp_si (cl->length->value.integer, 1) != 0)
15050 {
15051 gfc_error ("C interoperable character dummy variable %qs at %L "
15052 "with VALUE attribute must have length one",
15053 sym->name, &sym->declared_at);
15054 return;
15055 }
15056 }
15057
15058 if (sym->ts.type == BT_DERIVED && !sym->attr.is_iso_c
15059 && sym->ts.u.derived->attr.generic)
15060 {
15061 sym->ts.u.derived = gfc_find_dt_in_generic (sym->ts.u.derived);
15062 if (!sym->ts.u.derived)
15063 {
15064 gfc_error ("The derived type %qs at %L is of type %qs, "
15065 "which has not been defined", sym->name,
15066 &sym->declared_at, sym->ts.u.derived->name);
15067 sym->ts.type = BT_UNKNOWN;
15068 return;
15069 }
15070 }
15071
15072 /* Use the same constraints as TYPE(*), except for the type check
15073 and that only scalars and assumed-size arrays are permitted. */
15074 if (sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
15075 {
15076 if (!sym->attr.dummy)
15077 {
15078 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall be "
15079 "a dummy argument", sym->name, &sym->declared_at);
15080 return;
15081 }
15082
15083 if (sym->ts.type != BT_ASSUMED && sym->ts.type != BT_INTEGER
15084 && sym->ts.type != BT_REAL && sym->ts.type != BT_LOGICAL
15085 && sym->ts.type != BT_COMPLEX)
15086 {
15087 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall be "
15088 "of type TYPE(*) or of an numeric intrinsic type",
15089 sym->name, &sym->declared_at);
15090 return;
15091 }
15092
15093 if (sym->attr.allocatable || sym->attr.codimension
15094 || sym->attr.pointer || sym->attr.value)
15095 {
15096 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may not "
15097 "have the ALLOCATABLE, CODIMENSION, POINTER or VALUE "
15098 "attribute", sym->name, &sym->declared_at);
15099 return;
15100 }
15101
15102 if (sym->attr.intent == INTENT_OUT)
15103 {
15104 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may not "
15105 "have the INTENT(OUT) attribute",
15106 sym->name, &sym->declared_at);
15107 return;
15108 }
15109 if (sym->attr.dimension && sym->as->type != AS_ASSUMED_SIZE)
15110 {
15111 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall "
15112 "either be a scalar or an assumed-size array",
15113 sym->name, &sym->declared_at);
15114 return;
15115 }
15116
15117 /* Set the type to TYPE(*) and add a dimension(*) to ensure
15118 NO_ARG_CHECK is correctly handled in trans*.c, e.g. with
15119 packing. */
15120 sym->ts.type = BT_ASSUMED;
15121 sym->as = gfc_get_array_spec ();
15122 sym->as->type = AS_ASSUMED_SIZE;
15123 sym->as->rank = 1;
15124 sym->as->lower[0] = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
15125 }
15126 else if (sym->ts.type == BT_ASSUMED)
15127 {
15128 /* TS 29113, C407a. */
15129 if (!sym->attr.dummy)
15130 {
15131 gfc_error ("Assumed type of variable %s at %L is only permitted "
15132 "for dummy variables", sym->name, &sym->declared_at);
15133 return;
15134 }
15135 if (sym->attr.allocatable || sym->attr.codimension
15136 || sym->attr.pointer || sym->attr.value)
15137 {
15138 gfc_error ("Assumed-type variable %s at %L may not have the "
15139 "ALLOCATABLE, CODIMENSION, POINTER or VALUE attribute",
15140 sym->name, &sym->declared_at);
15141 return;
15142 }
15143 if (sym->attr.intent == INTENT_OUT)
15144 {
15145 gfc_error ("Assumed-type variable %s at %L may not have the "
15146 "INTENT(OUT) attribute",
15147 sym->name, &sym->declared_at);
15148 return;
15149 }
15150 if (sym->attr.dimension && sym->as->type == AS_EXPLICIT)
15151 {
15152 gfc_error ("Assumed-type variable %s at %L shall not be an "
15153 "explicit-shape array", sym->name, &sym->declared_at);
15154 return;
15155 }
15156 }
15157
15158 /* If the symbol is marked as bind(c), that it is declared at module level
15159 scope and verify its type and kind. Do not do the latter for symbols
15160 that are implicitly typed because that is handled in
15161 gfc_set_default_type. Handle dummy arguments and procedure definitions
15162 separately. Also, anything that is use associated is not handled here
15163 but instead is handled in the module it is declared in. Finally, derived
15164 type definitions are allowed to be BIND(C) since that only implies that
15165 they're interoperable, and they are checked fully for interoperability
15166 when a variable is declared of that type. */
15167 if (sym->attr.is_bind_c && sym->attr.use_assoc == 0
15168 && sym->attr.dummy == 0 && sym->attr.flavor != FL_PROCEDURE
15169 && sym->attr.flavor != FL_DERIVED)
15170 {
15171 bool t = true;
15172
15173 /* First, make sure the variable is declared at the
15174 module-level scope (J3/04-007, Section 15.3). */
15175 if (sym->ns->proc_name->attr.flavor != FL_MODULE &&
15176 sym->attr.in_common == 0)
15177 {
15178 gfc_error ("Variable %qs at %L cannot be BIND(C) because it "
15179 "is neither a COMMON block nor declared at the "
15180 "module level scope", sym->name, &(sym->declared_at));
15181 t = false;
15182 }
15183 else if (sym->ts.type == BT_CHARACTER
15184 && (sym->ts.u.cl == NULL || sym->ts.u.cl->length == NULL
15185 || !gfc_is_constant_expr (sym->ts.u.cl->length)
15186 || mpz_cmp_si (sym->ts.u.cl->length->value.integer, 1) != 0))
15187 {
15188 gfc_error ("BIND(C) Variable %qs at %L must have length one",
15189 sym->name, &sym->declared_at);
15190 t = false;
15191 }
15192 else if (sym->common_head != NULL && sym->attr.implicit_type == 0)
15193 {
15194 t = verify_com_block_vars_c_interop (sym->common_head);
15195 }
15196 else if (sym->attr.implicit_type == 0)
15197 {
15198 /* If type() declaration, we need to verify that the components
15199 of the given type are all C interoperable, etc. */
15200 if (sym->ts.type == BT_DERIVED &&
15201 sym->ts.u.derived->attr.is_c_interop != 1)
15202 {
15203 /* Make sure the user marked the derived type as BIND(C). If
15204 not, call the verify routine. This could print an error
15205 for the derived type more than once if multiple variables
15206 of that type are declared. */
15207 if (sym->ts.u.derived->attr.is_bind_c != 1)
15208 verify_bind_c_derived_type (sym->ts.u.derived);
15209 t = false;
15210 }
15211
15212 /* Verify the variable itself as C interoperable if it
15213 is BIND(C). It is not possible for this to succeed if
15214 the verify_bind_c_derived_type failed, so don't have to handle
15215 any error returned by verify_bind_c_derived_type. */
15216 t = verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common,
15217 sym->common_block);
15218 }
15219
15220 if (!t)
15221 {
15222 /* clear the is_bind_c flag to prevent reporting errors more than
15223 once if something failed. */
15224 sym->attr.is_bind_c = 0;
15225 return;
15226 }
15227 }
15228
15229 /* If a derived type symbol has reached this point, without its
15230 type being declared, we have an error. Notice that most
15231 conditions that produce undefined derived types have already
15232 been dealt with. However, the likes of:
15233 implicit type(t) (t) ..... call foo (t) will get us here if
15234 the type is not declared in the scope of the implicit
15235 statement. Change the type to BT_UNKNOWN, both because it is so
15236 and to prevent an ICE. */
15237 if (sym->ts.type == BT_DERIVED && !sym->attr.is_iso_c
15238 && sym->ts.u.derived->components == NULL
15239 && !sym->ts.u.derived->attr.zero_comp)
15240 {
15241 gfc_error ("The derived type %qs at %L is of type %qs, "
15242 "which has not been defined", sym->name,
15243 &sym->declared_at, sym->ts.u.derived->name);
15244 sym->ts.type = BT_UNKNOWN;
15245 return;
15246 }
15247
15248 /* Make sure that the derived type has been resolved and that the
15249 derived type is visible in the symbol's namespace, if it is a
15250 module function and is not PRIVATE. */
15251 if (sym->ts.type == BT_DERIVED
15252 && sym->ts.u.derived->attr.use_assoc
15253 && sym->ns->proc_name
15254 && sym->ns->proc_name->attr.flavor == FL_MODULE
15255 && !resolve_fl_derived (sym->ts.u.derived))
15256 return;
15257
15258 /* Unless the derived-type declaration is use associated, Fortran 95
15259 does not allow public entries of private derived types.
15260 See 4.4.1 (F95) and 4.5.1.1 (F2003); and related interpretation
15261 161 in 95-006r3. */
15262 if (sym->ts.type == BT_DERIVED
15263 && sym->ns->proc_name && sym->ns->proc_name->attr.flavor == FL_MODULE
15264 && !sym->ts.u.derived->attr.use_assoc
15265 && gfc_check_symbol_access (sym)
15266 && !gfc_check_symbol_access (sym->ts.u.derived)
15267 && !gfc_notify_std (GFC_STD_F2003, "PUBLIC %s %qs at %L of PRIVATE "
15268 "derived type %qs",
15269 (sym->attr.flavor == FL_PARAMETER)
15270 ? "parameter" : "variable",
15271 sym->name, &sym->declared_at,
15272 sym->ts.u.derived->name))
15273 return;
15274
15275 /* F2008, C1302. */
15276 if (sym->ts.type == BT_DERIVED
15277 && ((sym->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
15278 && sym->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)
15279 || sym->ts.u.derived->attr.lock_comp)
15280 && !sym->attr.codimension && !sym->ts.u.derived->attr.coarray_comp)
15281 {
15282 gfc_error ("Variable %s at %L of type LOCK_TYPE or with subcomponent of "
15283 "type LOCK_TYPE must be a coarray", sym->name,
15284 &sym->declared_at);
15285 return;
15286 }
15287
15288 /* TS18508, C702/C703. */
15289 if (sym->ts.type == BT_DERIVED
15290 && ((sym->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
15291 && sym->ts.u.derived->intmod_sym_id == ISOFORTRAN_EVENT_TYPE)
15292 || sym->ts.u.derived->attr.event_comp)
15293 && !sym->attr.codimension && !sym->ts.u.derived->attr.coarray_comp)
15294 {
15295 gfc_error ("Variable %s at %L of type EVENT_TYPE or with subcomponent of "
15296 "type EVENT_TYPE must be a coarray", sym->name,
15297 &sym->declared_at);
15298 return;
15299 }
15300
15301 /* An assumed-size array with INTENT(OUT) shall not be of a type for which
15302 default initialization is defined (5.1.2.4.4). */
15303 if (sym->ts.type == BT_DERIVED
15304 && sym->attr.dummy
15305 && sym->attr.intent == INTENT_OUT
15306 && sym->as
15307 && sym->as->type == AS_ASSUMED_SIZE)
15308 {
15309 for (c = sym->ts.u.derived->components; c; c = c->next)
15310 {
15311 if (c->initializer)
15312 {
15313 gfc_error ("The INTENT(OUT) dummy argument %qs at %L is "
15314 "ASSUMED SIZE and so cannot have a default initializer",
15315 sym->name, &sym->declared_at);
15316 return;
15317 }
15318 }
15319 }
15320
15321 /* F2008, C542. */
15322 if (sym->ts.type == BT_DERIVED && sym->attr.dummy
15323 && sym->attr.intent == INTENT_OUT && sym->attr.lock_comp)
15324 {
15325 gfc_error ("Dummy argument %qs at %L of LOCK_TYPE shall not be "
15326 "INTENT(OUT)", sym->name, &sym->declared_at);
15327 return;
15328 }
15329
15330 /* TS18508. */
15331 if (sym->ts.type == BT_DERIVED && sym->attr.dummy
15332 && sym->attr.intent == INTENT_OUT && sym->attr.event_comp)
15333 {
15334 gfc_error ("Dummy argument %qs at %L of EVENT_TYPE shall not be "
15335 "INTENT(OUT)", sym->name, &sym->declared_at);
15336 return;
15337 }
15338
15339 /* F2008, C525. */
15340 if ((((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
15341 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
15342 && CLASS_DATA (sym)->attr.coarray_comp))
15343 || class_attr.codimension)
15344 && (sym->attr.result || sym->result == sym))
15345 {
15346 gfc_error ("Function result %qs at %L shall not be a coarray or have "
15347 "a coarray component", sym->name, &sym->declared_at);
15348 return;
15349 }
15350
15351 /* F2008, C524. */
15352 if (sym->attr.codimension && sym->ts.type == BT_DERIVED
15353 && sym->ts.u.derived->ts.is_iso_c)
15354 {
15355 gfc_error ("Variable %qs at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) "
15356 "shall not be a coarray", sym->name, &sym->declared_at);
15357 return;
15358 }
15359
15360 /* F2008, C525. */
15361 if (((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
15362 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
15363 && CLASS_DATA (sym)->attr.coarray_comp))
15364 && (class_attr.codimension || class_attr.pointer || class_attr.dimension
15365 || class_attr.allocatable))
15366 {
15367 gfc_error ("Variable %qs at %L with coarray component shall be a "
15368 "nonpointer, nonallocatable scalar, which is not a coarray",
15369 sym->name, &sym->declared_at);
15370 return;
15371 }
15372
15373 /* F2008, C526. The function-result case was handled above. */
15374 if (class_attr.codimension
15375 && !(class_attr.allocatable || sym->attr.dummy || sym->attr.save
15376 || sym->attr.select_type_temporary
15377 || sym->attr.associate_var
15378 || (sym->ns->save_all && !sym->attr.automatic)
15379 || sym->ns->proc_name->attr.flavor == FL_MODULE
15380 || sym->ns->proc_name->attr.is_main_program
15381 || sym->attr.function || sym->attr.result || sym->attr.use_assoc))
15382 {
15383 gfc_error ("Variable %qs at %L is a coarray and is not ALLOCATABLE, SAVE "
15384 "nor a dummy argument", sym->name, &sym->declared_at);
15385 return;
15386 }
15387 /* F2008, C528. */
15388 else if (class_attr.codimension && !sym->attr.select_type_temporary
15389 && !class_attr.allocatable && as && as->cotype == AS_DEFERRED)
15390 {
15391 gfc_error ("Coarray variable %qs at %L shall not have codimensions with "
15392 "deferred shape", sym->name, &sym->declared_at);
15393 return;
15394 }
15395 else if (class_attr.codimension && class_attr.allocatable && as
15396 && (as->cotype != AS_DEFERRED || as->type != AS_DEFERRED))
15397 {
15398 gfc_error ("Allocatable coarray variable %qs at %L must have "
15399 "deferred shape", sym->name, &sym->declared_at);
15400 return;
15401 }
15402
15403 /* F2008, C541. */
15404 if ((((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
15405 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
15406 && CLASS_DATA (sym)->attr.coarray_comp))
15407 || (class_attr.codimension && class_attr.allocatable))
15408 && sym->attr.dummy && sym->attr.intent == INTENT_OUT)
15409 {
15410 gfc_error ("Variable %qs at %L is INTENT(OUT) and can thus not be an "
15411 "allocatable coarray or have coarray components",
15412 sym->name, &sym->declared_at);
15413 return;
15414 }
15415
15416 if (class_attr.codimension && sym->attr.dummy
15417 && sym->ns->proc_name && sym->ns->proc_name->attr.is_bind_c)
15418 {
15419 gfc_error ("Coarray dummy variable %qs at %L not allowed in BIND(C) "
15420 "procedure %qs", sym->name, &sym->declared_at,
15421 sym->ns->proc_name->name);
15422 return;
15423 }
15424
15425 if (sym->ts.type == BT_LOGICAL
15426 && ((sym->attr.function && sym->attr.is_bind_c && sym->result == sym)
15427 || ((sym->attr.dummy || sym->attr.result) && sym->ns->proc_name
15428 && sym->ns->proc_name->attr.is_bind_c)))
15429 {
15430 int i;
15431 for (i = 0; gfc_logical_kinds[i].kind; i++)
15432 if (gfc_logical_kinds[i].kind == sym->ts.kind)
15433 break;
15434 if (!gfc_logical_kinds[i].c_bool && sym->attr.dummy
15435 && !gfc_notify_std (GFC_STD_GNU, "LOGICAL dummy argument %qs at "
15436 "%L with non-C_Bool kind in BIND(C) procedure "
15437 "%qs", sym->name, &sym->declared_at,
15438 sym->ns->proc_name->name))
15439 return;
15440 else if (!gfc_logical_kinds[i].c_bool
15441 && !gfc_notify_std (GFC_STD_GNU, "LOGICAL result variable "
15442 "%qs at %L with non-C_Bool kind in "
15443 "BIND(C) procedure %qs", sym->name,
15444 &sym->declared_at,
15445 sym->attr.function ? sym->name
15446 : sym->ns->proc_name->name))
15447 return;
15448 }
15449
15450 switch (sym->attr.flavor)
15451 {
15452 case FL_VARIABLE:
15453 if (!resolve_fl_variable (sym, mp_flag))
15454 return;
15455 break;
15456
15457 case FL_PROCEDURE:
15458 if (sym->formal && !sym->formal_ns)
15459 {
15460 /* Check that none of the arguments are a namelist. */
15461 gfc_formal_arglist *formal = sym->formal;
15462
15463 for (; formal; formal = formal->next)
15464 if (formal->sym && formal->sym->attr.flavor == FL_NAMELIST)
15465 {
15466 gfc_error ("Namelist %qs cannot be an argument to "
15467 "subroutine or function at %L",
15468 formal->sym->name, &sym->declared_at);
15469 return;
15470 }
15471 }
15472
15473 if (!resolve_fl_procedure (sym, mp_flag))
15474 return;
15475 break;
15476
15477 case FL_NAMELIST:
15478 if (!resolve_fl_namelist (sym))
15479 return;
15480 break;
15481
15482 case FL_PARAMETER:
15483 if (!resolve_fl_parameter (sym))
15484 return;
15485 break;
15486
15487 default:
15488 break;
15489 }
15490
15491 /* Resolve array specifier. Check as well some constraints
15492 on COMMON blocks. */
15493
15494 check_constant = sym->attr.in_common && !sym->attr.pointer;
15495
15496 /* Set the formal_arg_flag so that check_conflict will not throw
15497 an error for host associated variables in the specification
15498 expression for an array_valued function. */
15499 if ((sym->attr.function || sym->attr.result) && sym->as)
15500 formal_arg_flag = true;
15501
15502 saved_specification_expr = specification_expr;
15503 specification_expr = true;
15504 gfc_resolve_array_spec (sym->as, check_constant);
15505 specification_expr = saved_specification_expr;
15506
15507 formal_arg_flag = false;
15508
15509 /* Resolve formal namespaces. */
15510 if (sym->formal_ns && sym->formal_ns != gfc_current_ns
15511 && !sym->attr.contained && !sym->attr.intrinsic)
15512 gfc_resolve (sym->formal_ns);
15513
15514 /* Make sure the formal namespace is present. */
15515 if (sym->formal && !sym->formal_ns)
15516 {
15517 gfc_formal_arglist *formal = sym->formal;
15518 while (formal && !formal->sym)
15519 formal = formal->next;
15520
15521 if (formal)
15522 {
15523 sym->formal_ns = formal->sym->ns;
15524 if (sym->ns != formal->sym->ns)
15525 sym->formal_ns->refs++;
15526 }
15527 }
15528
15529 /* Check threadprivate restrictions. */
15530 if (sym->attr.threadprivate && !sym->attr.save
15531 && !(sym->ns->save_all && !sym->attr.automatic)
15532 && (!sym->attr.in_common
15533 && sym->module == NULL
15534 && (sym->ns->proc_name == NULL
15535 || sym->ns->proc_name->attr.flavor != FL_MODULE)))
15536 gfc_error ("Threadprivate at %L isn't SAVEd", &sym->declared_at);
15537
15538 /* Check omp declare target restrictions. */
15539 if (sym->attr.omp_declare_target
15540 && sym->attr.flavor == FL_VARIABLE
15541 && !sym->attr.save
15542 && !(sym->ns->save_all && !sym->attr.automatic)
15543 && (!sym->attr.in_common
15544 && sym->module == NULL
15545 && (sym->ns->proc_name == NULL
15546 || sym->ns->proc_name->attr.flavor != FL_MODULE)))
15547 gfc_error ("!$OMP DECLARE TARGET variable %qs at %L isn't SAVEd",
15548 sym->name, &sym->declared_at);
15549
15550 /* If we have come this far we can apply default-initializers, as
15551 described in 14.7.5, to those variables that have not already
15552 been assigned one. */
15553 if (sym->ts.type == BT_DERIVED
15554 && !sym->value
15555 && !sym->attr.allocatable
15556 && !sym->attr.alloc_comp)
15557 {
15558 symbol_attribute *a = &sym->attr;
15559
15560 if ((!a->save && !a->dummy && !a->pointer
15561 && !a->in_common && !a->use_assoc
15562 && a->referenced
15563 && !((a->function || a->result)
15564 && (!a->dimension
15565 || sym->ts.u.derived->attr.alloc_comp
15566 || sym->ts.u.derived->attr.pointer_comp))
15567 && !(a->function && sym != sym->result))
15568 || (a->dummy && a->intent == INTENT_OUT && !a->pointer))
15569 apply_default_init (sym);
15570 else if (a->function && sym->result && a->access != ACCESS_PRIVATE
15571 && (sym->ts.u.derived->attr.alloc_comp
15572 || sym->ts.u.derived->attr.pointer_comp))
15573 /* Mark the result symbol to be referenced, when it has allocatable
15574 components. */
15575 sym->result->attr.referenced = 1;
15576 }
15577
15578 if (sym->ts.type == BT_CLASS && sym->ns == gfc_current_ns
15579 && sym->attr.dummy && sym->attr.intent == INTENT_OUT
15580 && !CLASS_DATA (sym)->attr.class_pointer
15581 && !CLASS_DATA (sym)->attr.allocatable)
15582 apply_default_init (sym);
15583
15584 /* If this symbol has a type-spec, check it. */
15585 if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER
15586 || (sym->attr.flavor == FL_PROCEDURE && sym->attr.function))
15587 if (!resolve_typespec_used (&sym->ts, &sym->declared_at, sym->name))
15588 return;
15589
15590 if (sym->param_list)
15591 resolve_pdt (sym);
15592 }
15593
15594
15595 /************* Resolve DATA statements *************/
15596
15597 static struct
15598 {
15599 gfc_data_value *vnode;
15600 mpz_t left;
15601 }
15602 values;
15603
15604
15605 /* Advance the values structure to point to the next value in the data list. */
15606
15607 static bool
15608 next_data_value (void)
15609 {
15610 while (mpz_cmp_ui (values.left, 0) == 0)
15611 {
15612
15613 if (values.vnode->next == NULL)
15614 return false;
15615
15616 values.vnode = values.vnode->next;
15617 mpz_set (values.left, values.vnode->repeat);
15618 }
15619
15620 return true;
15621 }
15622
15623
15624 static bool
15625 check_data_variable (gfc_data_variable *var, locus *where)
15626 {
15627 gfc_expr *e;
15628 mpz_t size;
15629 mpz_t offset;
15630 bool t;
15631 ar_type mark = AR_UNKNOWN;
15632 int i;
15633 mpz_t section_index[GFC_MAX_DIMENSIONS];
15634 gfc_ref *ref;
15635 gfc_array_ref *ar;
15636 gfc_symbol *sym;
15637 int has_pointer;
15638
15639 if (!gfc_resolve_expr (var->expr))
15640 return false;
15641
15642 ar = NULL;
15643 mpz_init_set_si (offset, 0);
15644 e = var->expr;
15645
15646 if (e->expr_type == EXPR_FUNCTION && e->value.function.isym
15647 && e->value.function.isym->id == GFC_ISYM_CAF_GET)
15648 e = e->value.function.actual->expr;
15649
15650 if (e->expr_type != EXPR_VARIABLE)
15651 {
15652 gfc_error ("Expecting definable entity near %L", where);
15653 return false;
15654 }
15655
15656 sym = e->symtree->n.sym;
15657
15658 if (sym->ns->is_block_data && !sym->attr.in_common)
15659 {
15660 gfc_error ("BLOCK DATA element %qs at %L must be in COMMON",
15661 sym->name, &sym->declared_at);
15662 return false;
15663 }
15664
15665 if (e->ref == NULL && sym->as)
15666 {
15667 gfc_error ("DATA array %qs at %L must be specified in a previous"
15668 " declaration", sym->name, where);
15669 return false;
15670 }
15671
15672 has_pointer = sym->attr.pointer;
15673
15674 if (gfc_is_coindexed (e))
15675 {
15676 gfc_error ("DATA element %qs at %L cannot have a coindex", sym->name,
15677 where);
15678 return false;
15679 }
15680
15681 for (ref = e->ref; ref; ref = ref->next)
15682 {
15683 if (ref->type == REF_COMPONENT && ref->u.c.component->attr.pointer)
15684 has_pointer = 1;
15685
15686 if (has_pointer
15687 && ref->type == REF_ARRAY
15688 && ref->u.ar.type != AR_FULL)
15689 {
15690 gfc_error ("DATA element %qs at %L is a pointer and so must "
15691 "be a full array", sym->name, where);
15692 return false;
15693 }
15694 }
15695
15696 if (e->rank == 0 || has_pointer)
15697 {
15698 mpz_init_set_ui (size, 1);
15699 ref = NULL;
15700 }
15701 else
15702 {
15703 ref = e->ref;
15704
15705 /* Find the array section reference. */
15706 for (ref = e->ref; ref; ref = ref->next)
15707 {
15708 if (ref->type != REF_ARRAY)
15709 continue;
15710 if (ref->u.ar.type == AR_ELEMENT)
15711 continue;
15712 break;
15713 }
15714 gcc_assert (ref);
15715
15716 /* Set marks according to the reference pattern. */
15717 switch (ref->u.ar.type)
15718 {
15719 case AR_FULL:
15720 mark = AR_FULL;
15721 break;
15722
15723 case AR_SECTION:
15724 ar = &ref->u.ar;
15725 /* Get the start position of array section. */
15726 gfc_get_section_index (ar, section_index, &offset);
15727 mark = AR_SECTION;
15728 break;
15729
15730 default:
15731 gcc_unreachable ();
15732 }
15733
15734 if (!gfc_array_size (e, &size))
15735 {
15736 gfc_error ("Nonconstant array section at %L in DATA statement",
15737 where);
15738 mpz_clear (offset);
15739 return false;
15740 }
15741 }
15742
15743 t = true;
15744
15745 while (mpz_cmp_ui (size, 0) > 0)
15746 {
15747 if (!next_data_value ())
15748 {
15749 gfc_error ("DATA statement at %L has more variables than values",
15750 where);
15751 t = false;
15752 break;
15753 }
15754
15755 t = gfc_check_assign (var->expr, values.vnode->expr, 0);
15756 if (!t)
15757 break;
15758
15759 /* If we have more than one element left in the repeat count,
15760 and we have more than one element left in the target variable,
15761 then create a range assignment. */
15762 /* FIXME: Only done for full arrays for now, since array sections
15763 seem tricky. */
15764 if (mark == AR_FULL && ref && ref->next == NULL
15765 && mpz_cmp_ui (values.left, 1) > 0 && mpz_cmp_ui (size, 1) > 0)
15766 {
15767 mpz_t range;
15768
15769 if (mpz_cmp (size, values.left) >= 0)
15770 {
15771 mpz_init_set (range, values.left);
15772 mpz_sub (size, size, values.left);
15773 mpz_set_ui (values.left, 0);
15774 }
15775 else
15776 {
15777 mpz_init_set (range, size);
15778 mpz_sub (values.left, values.left, size);
15779 mpz_set_ui (size, 0);
15780 }
15781
15782 t = gfc_assign_data_value (var->expr, values.vnode->expr,
15783 offset, &range);
15784
15785 mpz_add (offset, offset, range);
15786 mpz_clear (range);
15787
15788 if (!t)
15789 break;
15790 }
15791
15792 /* Assign initial value to symbol. */
15793 else
15794 {
15795 mpz_sub_ui (values.left, values.left, 1);
15796 mpz_sub_ui (size, size, 1);
15797
15798 t = gfc_assign_data_value (var->expr, values.vnode->expr,
15799 offset, NULL);
15800 if (!t)
15801 break;
15802
15803 if (mark == AR_FULL)
15804 mpz_add_ui (offset, offset, 1);
15805
15806 /* Modify the array section indexes and recalculate the offset
15807 for next element. */
15808 else if (mark == AR_SECTION)
15809 gfc_advance_section (section_index, ar, &offset);
15810 }
15811 }
15812
15813 if (mark == AR_SECTION)
15814 {
15815 for (i = 0; i < ar->dimen; i++)
15816 mpz_clear (section_index[i]);
15817 }
15818
15819 mpz_clear (size);
15820 mpz_clear (offset);
15821
15822 return t;
15823 }
15824
15825
15826 static bool traverse_data_var (gfc_data_variable *, locus *);
15827
15828 /* Iterate over a list of elements in a DATA statement. */
15829
15830 static bool
15831 traverse_data_list (gfc_data_variable *var, locus *where)
15832 {
15833 mpz_t trip;
15834 iterator_stack frame;
15835 gfc_expr *e, *start, *end, *step;
15836 bool retval = true;
15837
15838 mpz_init (frame.value);
15839 mpz_init (trip);
15840
15841 start = gfc_copy_expr (var->iter.start);
15842 end = gfc_copy_expr (var->iter.end);
15843 step = gfc_copy_expr (var->iter.step);
15844
15845 if (!gfc_simplify_expr (start, 1)
15846 || start->expr_type != EXPR_CONSTANT)
15847 {
15848 gfc_error ("start of implied-do loop at %L could not be "
15849 "simplified to a constant value", &start->where);
15850 retval = false;
15851 goto cleanup;
15852 }
15853 if (!gfc_simplify_expr (end, 1)
15854 || end->expr_type != EXPR_CONSTANT)
15855 {
15856 gfc_error ("end of implied-do loop at %L could not be "
15857 "simplified to a constant value", &start->where);
15858 retval = false;
15859 goto cleanup;
15860 }
15861 if (!gfc_simplify_expr (step, 1)
15862 || step->expr_type != EXPR_CONSTANT)
15863 {
15864 gfc_error ("step of implied-do loop at %L could not be "
15865 "simplified to a constant value", &start->where);
15866 retval = false;
15867 goto cleanup;
15868 }
15869
15870 mpz_set (trip, end->value.integer);
15871 mpz_sub (trip, trip, start->value.integer);
15872 mpz_add (trip, trip, step->value.integer);
15873
15874 mpz_div (trip, trip, step->value.integer);
15875
15876 mpz_set (frame.value, start->value.integer);
15877
15878 frame.prev = iter_stack;
15879 frame.variable = var->iter.var->symtree;
15880 iter_stack = &frame;
15881
15882 while (mpz_cmp_ui (trip, 0) > 0)
15883 {
15884 if (!traverse_data_var (var->list, where))
15885 {
15886 retval = false;
15887 goto cleanup;
15888 }
15889
15890 e = gfc_copy_expr (var->expr);
15891 if (!gfc_simplify_expr (e, 1))
15892 {
15893 gfc_free_expr (e);
15894 retval = false;
15895 goto cleanup;
15896 }
15897
15898 mpz_add (frame.value, frame.value, step->value.integer);
15899
15900 mpz_sub_ui (trip, trip, 1);
15901 }
15902
15903 cleanup:
15904 mpz_clear (frame.value);
15905 mpz_clear (trip);
15906
15907 gfc_free_expr (start);
15908 gfc_free_expr (end);
15909 gfc_free_expr (step);
15910
15911 iter_stack = frame.prev;
15912 return retval;
15913 }
15914
15915
15916 /* Type resolve variables in the variable list of a DATA statement. */
15917
15918 static bool
15919 traverse_data_var (gfc_data_variable *var, locus *where)
15920 {
15921 bool t;
15922
15923 for (; var; var = var->next)
15924 {
15925 if (var->expr == NULL)
15926 t = traverse_data_list (var, where);
15927 else
15928 t = check_data_variable (var, where);
15929
15930 if (!t)
15931 return false;
15932 }
15933
15934 return true;
15935 }
15936
15937
15938 /* Resolve the expressions and iterators associated with a data statement.
15939 This is separate from the assignment checking because data lists should
15940 only be resolved once. */
15941
15942 static bool
15943 resolve_data_variables (gfc_data_variable *d)
15944 {
15945 for (; d; d = d->next)
15946 {
15947 if (d->list == NULL)
15948 {
15949 if (!gfc_resolve_expr (d->expr))
15950 return false;
15951 }
15952 else
15953 {
15954 if (!gfc_resolve_iterator (&d->iter, false, true))
15955 return false;
15956
15957 if (!resolve_data_variables (d->list))
15958 return false;
15959 }
15960 }
15961
15962 return true;
15963 }
15964
15965
15966 /* Resolve a single DATA statement. We implement this by storing a pointer to
15967 the value list into static variables, and then recursively traversing the
15968 variables list, expanding iterators and such. */
15969
15970 static void
15971 resolve_data (gfc_data *d)
15972 {
15973
15974 if (!resolve_data_variables (d->var))
15975 return;
15976
15977 values.vnode = d->value;
15978 if (d->value == NULL)
15979 mpz_set_ui (values.left, 0);
15980 else
15981 mpz_set (values.left, d->value->repeat);
15982
15983 if (!traverse_data_var (d->var, &d->where))
15984 return;
15985
15986 /* At this point, we better not have any values left. */
15987
15988 if (next_data_value ())
15989 gfc_error ("DATA statement at %L has more values than variables",
15990 &d->where);
15991 }
15992
15993
15994 /* 12.6 Constraint: In a pure subprogram any variable which is in common or
15995 accessed by host or use association, is a dummy argument to a pure function,
15996 is a dummy argument with INTENT (IN) to a pure subroutine, or an object that
15997 is storage associated with any such variable, shall not be used in the
15998 following contexts: (clients of this function). */
15999
16000 /* Determines if a variable is not 'pure', i.e., not assignable within a pure
16001 procedure. Returns zero if assignment is OK, nonzero if there is a
16002 problem. */
16003 int
16004 gfc_impure_variable (gfc_symbol *sym)
16005 {
16006 gfc_symbol *proc;
16007 gfc_namespace *ns;
16008
16009 if (sym->attr.use_assoc || sym->attr.in_common)
16010 return 1;
16011
16012 /* Check if the symbol's ns is inside the pure procedure. */
16013 for (ns = gfc_current_ns; ns; ns = ns->parent)
16014 {
16015 if (ns == sym->ns)
16016 break;
16017 if (ns->proc_name->attr.flavor == FL_PROCEDURE && !sym->attr.function)
16018 return 1;
16019 }
16020
16021 proc = sym->ns->proc_name;
16022 if (sym->attr.dummy
16023 && ((proc->attr.subroutine && sym->attr.intent == INTENT_IN)
16024 || proc->attr.function))
16025 return 1;
16026
16027 /* TODO: Sort out what can be storage associated, if anything, and include
16028 it here. In principle equivalences should be scanned but it does not
16029 seem to be possible to storage associate an impure variable this way. */
16030 return 0;
16031 }
16032
16033
16034 /* Test whether a symbol is pure or not. For a NULL pointer, checks if the
16035 current namespace is inside a pure procedure. */
16036
16037 int
16038 gfc_pure (gfc_symbol *sym)
16039 {
16040 symbol_attribute attr;
16041 gfc_namespace *ns;
16042
16043 if (sym == NULL)
16044 {
16045 /* Check if the current namespace or one of its parents
16046 belongs to a pure procedure. */
16047 for (ns = gfc_current_ns; ns; ns = ns->parent)
16048 {
16049 sym = ns->proc_name;
16050 if (sym == NULL)
16051 return 0;
16052 attr = sym->attr;
16053 if (attr.flavor == FL_PROCEDURE && attr.pure)
16054 return 1;
16055 }
16056 return 0;
16057 }
16058
16059 attr = sym->attr;
16060
16061 return attr.flavor == FL_PROCEDURE && attr.pure;
16062 }
16063
16064
16065 /* Test whether a symbol is implicitly pure or not. For a NULL pointer,
16066 checks if the current namespace is implicitly pure. Note that this
16067 function returns false for a PURE procedure. */
16068
16069 int
16070 gfc_implicit_pure (gfc_symbol *sym)
16071 {
16072 gfc_namespace *ns;
16073
16074 if (sym == NULL)
16075 {
16076 /* Check if the current procedure is implicit_pure. Walk up
16077 the procedure list until we find a procedure. */
16078 for (ns = gfc_current_ns; ns; ns = ns->parent)
16079 {
16080 sym = ns->proc_name;
16081 if (sym == NULL)
16082 return 0;
16083
16084 if (sym->attr.flavor == FL_PROCEDURE)
16085 break;
16086 }
16087 }
16088
16089 return sym->attr.flavor == FL_PROCEDURE && sym->attr.implicit_pure
16090 && !sym->attr.pure;
16091 }
16092
16093
16094 void
16095 gfc_unset_implicit_pure (gfc_symbol *sym)
16096 {
16097 gfc_namespace *ns;
16098
16099 if (sym == NULL)
16100 {
16101 /* Check if the current procedure is implicit_pure. Walk up
16102 the procedure list until we find a procedure. */
16103 for (ns = gfc_current_ns; ns; ns = ns->parent)
16104 {
16105 sym = ns->proc_name;
16106 if (sym == NULL)
16107 return;
16108
16109 if (sym->attr.flavor == FL_PROCEDURE)
16110 break;
16111 }
16112 }
16113
16114 if (sym->attr.flavor == FL_PROCEDURE)
16115 sym->attr.implicit_pure = 0;
16116 else
16117 sym->attr.pure = 0;
16118 }
16119
16120
16121 /* Test whether the current procedure is elemental or not. */
16122
16123 int
16124 gfc_elemental (gfc_symbol *sym)
16125 {
16126 symbol_attribute attr;
16127
16128 if (sym == NULL)
16129 sym = gfc_current_ns->proc_name;
16130 if (sym == NULL)
16131 return 0;
16132 attr = sym->attr;
16133
16134 return attr.flavor == FL_PROCEDURE && attr.elemental;
16135 }
16136
16137
16138 /* Warn about unused labels. */
16139
16140 static void
16141 warn_unused_fortran_label (gfc_st_label *label)
16142 {
16143 if (label == NULL)
16144 return;
16145
16146 warn_unused_fortran_label (label->left);
16147
16148 if (label->defined == ST_LABEL_UNKNOWN)
16149 return;
16150
16151 switch (label->referenced)
16152 {
16153 case ST_LABEL_UNKNOWN:
16154 gfc_warning (OPT_Wunused_label, "Label %d at %L defined but not used",
16155 label->value, &label->where);
16156 break;
16157
16158 case ST_LABEL_BAD_TARGET:
16159 gfc_warning (OPT_Wunused_label,
16160 "Label %d at %L defined but cannot be used",
16161 label->value, &label->where);
16162 break;
16163
16164 default:
16165 break;
16166 }
16167
16168 warn_unused_fortran_label (label->right);
16169 }
16170
16171
16172 /* Returns the sequence type of a symbol or sequence. */
16173
16174 static seq_type
16175 sequence_type (gfc_typespec ts)
16176 {
16177 seq_type result;
16178 gfc_component *c;
16179
16180 switch (ts.type)
16181 {
16182 case BT_DERIVED:
16183
16184 if (ts.u.derived->components == NULL)
16185 return SEQ_NONDEFAULT;
16186
16187 result = sequence_type (ts.u.derived->components->ts);
16188 for (c = ts.u.derived->components->next; c; c = c->next)
16189 if (sequence_type (c->ts) != result)
16190 return SEQ_MIXED;
16191
16192 return result;
16193
16194 case BT_CHARACTER:
16195 if (ts.kind != gfc_default_character_kind)
16196 return SEQ_NONDEFAULT;
16197
16198 return SEQ_CHARACTER;
16199
16200 case BT_INTEGER:
16201 if (ts.kind != gfc_default_integer_kind)
16202 return SEQ_NONDEFAULT;
16203
16204 return SEQ_NUMERIC;
16205
16206 case BT_REAL:
16207 if (!(ts.kind == gfc_default_real_kind
16208 || ts.kind == gfc_default_double_kind))
16209 return SEQ_NONDEFAULT;
16210
16211 return SEQ_NUMERIC;
16212
16213 case BT_COMPLEX:
16214 if (ts.kind != gfc_default_complex_kind)
16215 return SEQ_NONDEFAULT;
16216
16217 return SEQ_NUMERIC;
16218
16219 case BT_LOGICAL:
16220 if (ts.kind != gfc_default_logical_kind)
16221 return SEQ_NONDEFAULT;
16222
16223 return SEQ_NUMERIC;
16224
16225 default:
16226 return SEQ_NONDEFAULT;
16227 }
16228 }
16229
16230
16231 /* Resolve derived type EQUIVALENCE object. */
16232
16233 static bool
16234 resolve_equivalence_derived (gfc_symbol *derived, gfc_symbol *sym, gfc_expr *e)
16235 {
16236 gfc_component *c = derived->components;
16237
16238 if (!derived)
16239 return true;
16240
16241 /* Shall not be an object of nonsequence derived type. */
16242 if (!derived->attr.sequence)
16243 {
16244 gfc_error ("Derived type variable %qs at %L must have SEQUENCE "
16245 "attribute to be an EQUIVALENCE object", sym->name,
16246 &e->where);
16247 return false;
16248 }
16249
16250 /* Shall not have allocatable components. */
16251 if (derived->attr.alloc_comp)
16252 {
16253 gfc_error ("Derived type variable %qs at %L cannot have ALLOCATABLE "
16254 "components to be an EQUIVALENCE object",sym->name,
16255 &e->where);
16256 return false;
16257 }
16258
16259 if (sym->attr.in_common && gfc_has_default_initializer (sym->ts.u.derived))
16260 {
16261 gfc_error ("Derived type variable %qs at %L with default "
16262 "initialization cannot be in EQUIVALENCE with a variable "
16263 "in COMMON", sym->name, &e->where);
16264 return false;
16265 }
16266
16267 for (; c ; c = c->next)
16268 {
16269 if (gfc_bt_struct (c->ts.type)
16270 && (!resolve_equivalence_derived(c->ts.u.derived, sym, e)))
16271 return false;
16272
16273 /* Shall not be an object of sequence derived type containing a pointer
16274 in the structure. */
16275 if (c->attr.pointer)
16276 {
16277 gfc_error ("Derived type variable %qs at %L with pointer "
16278 "component(s) cannot be an EQUIVALENCE object",
16279 sym->name, &e->where);
16280 return false;
16281 }
16282 }
16283 return true;
16284 }
16285
16286
16287 /* Resolve equivalence object.
16288 An EQUIVALENCE object shall not be a dummy argument, a pointer, a target,
16289 an allocatable array, an object of nonsequence derived type, an object of
16290 sequence derived type containing a pointer at any level of component
16291 selection, an automatic object, a function name, an entry name, a result
16292 name, a named constant, a structure component, or a subobject of any of
16293 the preceding objects. A substring shall not have length zero. A
16294 derived type shall not have components with default initialization nor
16295 shall two objects of an equivalence group be initialized.
16296 Either all or none of the objects shall have an protected attribute.
16297 The simple constraints are done in symbol.c(check_conflict) and the rest
16298 are implemented here. */
16299
16300 static void
16301 resolve_equivalence (gfc_equiv *eq)
16302 {
16303 gfc_symbol *sym;
16304 gfc_symbol *first_sym;
16305 gfc_expr *e;
16306 gfc_ref *r;
16307 locus *last_where = NULL;
16308 seq_type eq_type, last_eq_type;
16309 gfc_typespec *last_ts;
16310 int object, cnt_protected;
16311 const char *msg;
16312
16313 last_ts = &eq->expr->symtree->n.sym->ts;
16314
16315 first_sym = eq->expr->symtree->n.sym;
16316
16317 cnt_protected = 0;
16318
16319 for (object = 1; eq; eq = eq->eq, object++)
16320 {
16321 e = eq->expr;
16322
16323 e->ts = e->symtree->n.sym->ts;
16324 /* match_varspec might not know yet if it is seeing
16325 array reference or substring reference, as it doesn't
16326 know the types. */
16327 if (e->ref && e->ref->type == REF_ARRAY)
16328 {
16329 gfc_ref *ref = e->ref;
16330 sym = e->symtree->n.sym;
16331
16332 if (sym->attr.dimension)
16333 {
16334 ref->u.ar.as = sym->as;
16335 ref = ref->next;
16336 }
16337
16338 /* For substrings, convert REF_ARRAY into REF_SUBSTRING. */
16339 if (e->ts.type == BT_CHARACTER
16340 && ref
16341 && ref->type == REF_ARRAY
16342 && ref->u.ar.dimen == 1
16343 && ref->u.ar.dimen_type[0] == DIMEN_RANGE
16344 && ref->u.ar.stride[0] == NULL)
16345 {
16346 gfc_expr *start = ref->u.ar.start[0];
16347 gfc_expr *end = ref->u.ar.end[0];
16348 void *mem = NULL;
16349
16350 /* Optimize away the (:) reference. */
16351 if (start == NULL && end == NULL)
16352 {
16353 if (e->ref == ref)
16354 e->ref = ref->next;
16355 else
16356 e->ref->next = ref->next;
16357 mem = ref;
16358 }
16359 else
16360 {
16361 ref->type = REF_SUBSTRING;
16362 if (start == NULL)
16363 start = gfc_get_int_expr (gfc_charlen_int_kind,
16364 NULL, 1);
16365 ref->u.ss.start = start;
16366 if (end == NULL && e->ts.u.cl)
16367 end = gfc_copy_expr (e->ts.u.cl->length);
16368 ref->u.ss.end = end;
16369 ref->u.ss.length = e->ts.u.cl;
16370 e->ts.u.cl = NULL;
16371 }
16372 ref = ref->next;
16373 free (mem);
16374 }
16375
16376 /* Any further ref is an error. */
16377 if (ref)
16378 {
16379 gcc_assert (ref->type == REF_ARRAY);
16380 gfc_error ("Syntax error in EQUIVALENCE statement at %L",
16381 &ref->u.ar.where);
16382 continue;
16383 }
16384 }
16385
16386 if (!gfc_resolve_expr (e))
16387 continue;
16388
16389 sym = e->symtree->n.sym;
16390
16391 if (sym->attr.is_protected)
16392 cnt_protected++;
16393 if (cnt_protected > 0 && cnt_protected != object)
16394 {
16395 gfc_error ("Either all or none of the objects in the "
16396 "EQUIVALENCE set at %L shall have the "
16397 "PROTECTED attribute",
16398 &e->where);
16399 break;
16400 }
16401
16402 /* Shall not equivalence common block variables in a PURE procedure. */
16403 if (sym->ns->proc_name
16404 && sym->ns->proc_name->attr.pure
16405 && sym->attr.in_common)
16406 {
16407 /* Need to check for symbols that may have entered the pure
16408 procedure via a USE statement. */
16409 bool saw_sym = false;
16410 if (sym->ns->use_stmts)
16411 {
16412 gfc_use_rename *r;
16413 for (r = sym->ns->use_stmts->rename; r; r = r->next)
16414 if (strcmp(r->use_name, sym->name) == 0) saw_sym = true;
16415 }
16416 else
16417 saw_sym = true;
16418
16419 if (saw_sym)
16420 gfc_error ("COMMON block member %qs at %L cannot be an "
16421 "EQUIVALENCE object in the pure procedure %qs",
16422 sym->name, &e->where, sym->ns->proc_name->name);
16423 break;
16424 }
16425
16426 /* Shall not be a named constant. */
16427 if (e->expr_type == EXPR_CONSTANT)
16428 {
16429 gfc_error ("Named constant %qs at %L cannot be an EQUIVALENCE "
16430 "object", sym->name, &e->where);
16431 continue;
16432 }
16433
16434 if (e->ts.type == BT_DERIVED
16435 && !resolve_equivalence_derived (e->ts.u.derived, sym, e))
16436 continue;
16437
16438 /* Check that the types correspond correctly:
16439 Note 5.28:
16440 A numeric sequence structure may be equivalenced to another sequence
16441 structure, an object of default integer type, default real type, double
16442 precision real type, default logical type such that components of the
16443 structure ultimately only become associated to objects of the same
16444 kind. A character sequence structure may be equivalenced to an object
16445 of default character kind or another character sequence structure.
16446 Other objects may be equivalenced only to objects of the same type and
16447 kind parameters. */
16448
16449 /* Identical types are unconditionally OK. */
16450 if (object == 1 || gfc_compare_types (last_ts, &sym->ts))
16451 goto identical_types;
16452
16453 last_eq_type = sequence_type (*last_ts);
16454 eq_type = sequence_type (sym->ts);
16455
16456 /* Since the pair of objects is not of the same type, mixed or
16457 non-default sequences can be rejected. */
16458
16459 msg = "Sequence %s with mixed components in EQUIVALENCE "
16460 "statement at %L with different type objects";
16461 if ((object ==2
16462 && last_eq_type == SEQ_MIXED
16463 && !gfc_notify_std (GFC_STD_GNU, msg, first_sym->name, last_where))
16464 || (eq_type == SEQ_MIXED
16465 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where)))
16466 continue;
16467
16468 msg = "Non-default type object or sequence %s in EQUIVALENCE "
16469 "statement at %L with objects of different type";
16470 if ((object ==2
16471 && last_eq_type == SEQ_NONDEFAULT
16472 && !gfc_notify_std (GFC_STD_GNU, msg, first_sym->name, last_where))
16473 || (eq_type == SEQ_NONDEFAULT
16474 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where)))
16475 continue;
16476
16477 msg ="Non-CHARACTER object %qs in default CHARACTER "
16478 "EQUIVALENCE statement at %L";
16479 if (last_eq_type == SEQ_CHARACTER
16480 && eq_type != SEQ_CHARACTER
16481 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where))
16482 continue;
16483
16484 msg ="Non-NUMERIC object %qs in default NUMERIC "
16485 "EQUIVALENCE statement at %L";
16486 if (last_eq_type == SEQ_NUMERIC
16487 && eq_type != SEQ_NUMERIC
16488 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where))
16489 continue;
16490
16491 identical_types:
16492 last_ts =&sym->ts;
16493 last_where = &e->where;
16494
16495 if (!e->ref)
16496 continue;
16497
16498 /* Shall not be an automatic array. */
16499 if (e->ref->type == REF_ARRAY
16500 && !gfc_resolve_array_spec (e->ref->u.ar.as, 1))
16501 {
16502 gfc_error ("Array %qs at %L with non-constant bounds cannot be "
16503 "an EQUIVALENCE object", sym->name, &e->where);
16504 continue;
16505 }
16506
16507 r = e->ref;
16508 while (r)
16509 {
16510 /* Shall not be a structure component. */
16511 if (r->type == REF_COMPONENT)
16512 {
16513 gfc_error ("Structure component %qs at %L cannot be an "
16514 "EQUIVALENCE object",
16515 r->u.c.component->name, &e->where);
16516 break;
16517 }
16518
16519 /* A substring shall not have length zero. */
16520 if (r->type == REF_SUBSTRING)
16521 {
16522 if (compare_bound (r->u.ss.start, r->u.ss.end) == CMP_GT)
16523 {
16524 gfc_error ("Substring at %L has length zero",
16525 &r->u.ss.start->where);
16526 break;
16527 }
16528 }
16529 r = r->next;
16530 }
16531 }
16532 }
16533
16534
16535 /* Function called by resolve_fntype to flag other symbol used in the
16536 length type parameter specification of function resuls. */
16537
16538 static bool
16539 flag_fn_result_spec (gfc_expr *expr,
16540 gfc_symbol *sym,
16541 int *f ATTRIBUTE_UNUSED)
16542 {
16543 gfc_namespace *ns;
16544 gfc_symbol *s;
16545
16546 if (expr->expr_type == EXPR_VARIABLE)
16547 {
16548 s = expr->symtree->n.sym;
16549 for (ns = s->ns; ns; ns = ns->parent)
16550 if (!ns->parent)
16551 break;
16552
16553 if (sym == s)
16554 {
16555 gfc_error ("Self reference in character length expression "
16556 "for %qs at %L", sym->name, &expr->where);
16557 return true;
16558 }
16559
16560 if (!s->fn_result_spec
16561 && s->attr.flavor == FL_PARAMETER)
16562 {
16563 /* Function contained in a module.... */
16564 if (ns->proc_name && ns->proc_name->attr.flavor == FL_MODULE)
16565 {
16566 gfc_symtree *st;
16567 s->fn_result_spec = 1;
16568 /* Make sure that this symbol is translated as a module
16569 variable. */
16570 st = gfc_get_unique_symtree (ns);
16571 st->n.sym = s;
16572 s->refs++;
16573 }
16574 /* ... which is use associated and called. */
16575 else if (s->attr.use_assoc || s->attr.used_in_submodule
16576 ||
16577 /* External function matched with an interface. */
16578 (s->ns->proc_name
16579 && ((s->ns == ns
16580 && s->ns->proc_name->attr.if_source == IFSRC_DECL)
16581 || s->ns->proc_name->attr.if_source == IFSRC_IFBODY)
16582 && s->ns->proc_name->attr.function))
16583 s->fn_result_spec = 1;
16584 }
16585 }
16586 return false;
16587 }
16588
16589
16590 /* Resolve function and ENTRY types, issue diagnostics if needed. */
16591
16592 static void
16593 resolve_fntype (gfc_namespace *ns)
16594 {
16595 gfc_entry_list *el;
16596 gfc_symbol *sym;
16597
16598 if (ns->proc_name == NULL || !ns->proc_name->attr.function)
16599 return;
16600
16601 /* If there are any entries, ns->proc_name is the entry master
16602 synthetic symbol and ns->entries->sym actual FUNCTION symbol. */
16603 if (ns->entries)
16604 sym = ns->entries->sym;
16605 else
16606 sym = ns->proc_name;
16607 if (sym->result == sym
16608 && sym->ts.type == BT_UNKNOWN
16609 && !gfc_set_default_type (sym, 0, NULL)
16610 && !sym->attr.untyped)
16611 {
16612 gfc_error ("Function %qs at %L has no IMPLICIT type",
16613 sym->name, &sym->declared_at);
16614 sym->attr.untyped = 1;
16615 }
16616
16617 if (sym->ts.type == BT_DERIVED && !sym->ts.u.derived->attr.use_assoc
16618 && !sym->attr.contained
16619 && !gfc_check_symbol_access (sym->ts.u.derived)
16620 && gfc_check_symbol_access (sym))
16621 {
16622 gfc_notify_std (GFC_STD_F2003, "PUBLIC function %qs at "
16623 "%L of PRIVATE type %qs", sym->name,
16624 &sym->declared_at, sym->ts.u.derived->name);
16625 }
16626
16627 if (ns->entries)
16628 for (el = ns->entries->next; el; el = el->next)
16629 {
16630 if (el->sym->result == el->sym
16631 && el->sym->ts.type == BT_UNKNOWN
16632 && !gfc_set_default_type (el->sym, 0, NULL)
16633 && !el->sym->attr.untyped)
16634 {
16635 gfc_error ("ENTRY %qs at %L has no IMPLICIT type",
16636 el->sym->name, &el->sym->declared_at);
16637 el->sym->attr.untyped = 1;
16638 }
16639 }
16640
16641 if (sym->ts.type == BT_CHARACTER)
16642 gfc_traverse_expr (sym->ts.u.cl->length, sym, flag_fn_result_spec, 0);
16643 }
16644
16645
16646 /* 12.3.2.1.1 Defined operators. */
16647
16648 static bool
16649 check_uop_procedure (gfc_symbol *sym, locus where)
16650 {
16651 gfc_formal_arglist *formal;
16652
16653 if (!sym->attr.function)
16654 {
16655 gfc_error ("User operator procedure %qs at %L must be a FUNCTION",
16656 sym->name, &where);
16657 return false;
16658 }
16659
16660 if (sym->ts.type == BT_CHARACTER
16661 && !((sym->ts.u.cl && sym->ts.u.cl->length) || sym->ts.deferred)
16662 && !(sym->result && ((sym->result->ts.u.cl
16663 && sym->result->ts.u.cl->length) || sym->result->ts.deferred)))
16664 {
16665 gfc_error ("User operator procedure %qs at %L cannot be assumed "
16666 "character length", sym->name, &where);
16667 return false;
16668 }
16669
16670 formal = gfc_sym_get_dummy_args (sym);
16671 if (!formal || !formal->sym)
16672 {
16673 gfc_error ("User operator procedure %qs at %L must have at least "
16674 "one argument", sym->name, &where);
16675 return false;
16676 }
16677
16678 if (formal->sym->attr.intent != INTENT_IN)
16679 {
16680 gfc_error ("First argument of operator interface at %L must be "
16681 "INTENT(IN)", &where);
16682 return false;
16683 }
16684
16685 if (formal->sym->attr.optional)
16686 {
16687 gfc_error ("First argument of operator interface at %L cannot be "
16688 "optional", &where);
16689 return false;
16690 }
16691
16692 formal = formal->next;
16693 if (!formal || !formal->sym)
16694 return true;
16695
16696 if (formal->sym->attr.intent != INTENT_IN)
16697 {
16698 gfc_error ("Second argument of operator interface at %L must be "
16699 "INTENT(IN)", &where);
16700 return false;
16701 }
16702
16703 if (formal->sym->attr.optional)
16704 {
16705 gfc_error ("Second argument of operator interface at %L cannot be "
16706 "optional", &where);
16707 return false;
16708 }
16709
16710 if (formal->next)
16711 {
16712 gfc_error ("Operator interface at %L must have, at most, two "
16713 "arguments", &where);
16714 return false;
16715 }
16716
16717 return true;
16718 }
16719
16720 static void
16721 gfc_resolve_uops (gfc_symtree *symtree)
16722 {
16723 gfc_interface *itr;
16724
16725 if (symtree == NULL)
16726 return;
16727
16728 gfc_resolve_uops (symtree->left);
16729 gfc_resolve_uops (symtree->right);
16730
16731 for (itr = symtree->n.uop->op; itr; itr = itr->next)
16732 check_uop_procedure (itr->sym, itr->sym->declared_at);
16733 }
16734
16735
16736 /* Examine all of the expressions associated with a program unit,
16737 assign types to all intermediate expressions, make sure that all
16738 assignments are to compatible types and figure out which names
16739 refer to which functions or subroutines. It doesn't check code
16740 block, which is handled by gfc_resolve_code. */
16741
16742 static void
16743 resolve_types (gfc_namespace *ns)
16744 {
16745 gfc_namespace *n;
16746 gfc_charlen *cl;
16747 gfc_data *d;
16748 gfc_equiv *eq;
16749 gfc_namespace* old_ns = gfc_current_ns;
16750
16751 if (ns->types_resolved)
16752 return;
16753
16754 /* Check that all IMPLICIT types are ok. */
16755 if (!ns->seen_implicit_none)
16756 {
16757 unsigned letter;
16758 for (letter = 0; letter != GFC_LETTERS; ++letter)
16759 if (ns->set_flag[letter]
16760 && !resolve_typespec_used (&ns->default_type[letter],
16761 &ns->implicit_loc[letter], NULL))
16762 return;
16763 }
16764
16765 gfc_current_ns = ns;
16766
16767 resolve_entries (ns);
16768
16769 resolve_common_vars (&ns->blank_common, false);
16770 resolve_common_blocks (ns->common_root);
16771
16772 resolve_contained_functions (ns);
16773
16774 if (ns->proc_name && ns->proc_name->attr.flavor == FL_PROCEDURE
16775 && ns->proc_name->attr.if_source == IFSRC_IFBODY)
16776 resolve_formal_arglist (ns->proc_name);
16777
16778 gfc_traverse_ns (ns, resolve_bind_c_derived_types);
16779
16780 for (cl = ns->cl_list; cl; cl = cl->next)
16781 resolve_charlen (cl);
16782
16783 gfc_traverse_ns (ns, resolve_symbol);
16784
16785 resolve_fntype (ns);
16786
16787 for (n = ns->contained; n; n = n->sibling)
16788 {
16789 if (gfc_pure (ns->proc_name) && !gfc_pure (n->proc_name))
16790 gfc_error ("Contained procedure %qs at %L of a PURE procedure must "
16791 "also be PURE", n->proc_name->name,
16792 &n->proc_name->declared_at);
16793
16794 resolve_types (n);
16795 }
16796
16797 forall_flag = 0;
16798 gfc_do_concurrent_flag = 0;
16799 gfc_check_interfaces (ns);
16800
16801 gfc_traverse_ns (ns, resolve_values);
16802
16803 if (ns->save_all || !flag_automatic)
16804 gfc_save_all (ns);
16805
16806 iter_stack = NULL;
16807 for (d = ns->data; d; d = d->next)
16808 resolve_data (d);
16809
16810 iter_stack = NULL;
16811 gfc_traverse_ns (ns, gfc_formalize_init_value);
16812
16813 gfc_traverse_ns (ns, gfc_verify_binding_labels);
16814
16815 for (eq = ns->equiv; eq; eq = eq->next)
16816 resolve_equivalence (eq);
16817
16818 /* Warn about unused labels. */
16819 if (warn_unused_label)
16820 warn_unused_fortran_label (ns->st_labels);
16821
16822 gfc_resolve_uops (ns->uop_root);
16823
16824 gfc_traverse_ns (ns, gfc_verify_DTIO_procedures);
16825
16826 gfc_resolve_omp_declare_simd (ns);
16827
16828 gfc_resolve_omp_udrs (ns->omp_udr_root);
16829
16830 ns->types_resolved = 1;
16831
16832 gfc_current_ns = old_ns;
16833 }
16834
16835
16836 /* Call gfc_resolve_code recursively. */
16837
16838 static void
16839 resolve_codes (gfc_namespace *ns)
16840 {
16841 gfc_namespace *n;
16842 bitmap_obstack old_obstack;
16843
16844 if (ns->resolved == 1)
16845 return;
16846
16847 for (n = ns->contained; n; n = n->sibling)
16848 resolve_codes (n);
16849
16850 gfc_current_ns = ns;
16851
16852 /* Don't clear 'cs_base' if this is the namespace of a BLOCK construct. */
16853 if (!(ns->proc_name && ns->proc_name->attr.flavor == FL_LABEL))
16854 cs_base = NULL;
16855
16856 /* Set to an out of range value. */
16857 current_entry_id = -1;
16858
16859 old_obstack = labels_obstack;
16860 bitmap_obstack_initialize (&labels_obstack);
16861
16862 gfc_resolve_oacc_declare (ns);
16863 gfc_resolve_oacc_routines (ns);
16864 gfc_resolve_omp_local_vars (ns);
16865 gfc_resolve_code (ns->code, ns);
16866
16867 bitmap_obstack_release (&labels_obstack);
16868 labels_obstack = old_obstack;
16869 }
16870
16871
16872 /* This function is called after a complete program unit has been compiled.
16873 Its purpose is to examine all of the expressions associated with a program
16874 unit, assign types to all intermediate expressions, make sure that all
16875 assignments are to compatible types and figure out which names refer to
16876 which functions or subroutines. */
16877
16878 void
16879 gfc_resolve (gfc_namespace *ns)
16880 {
16881 gfc_namespace *old_ns;
16882 code_stack *old_cs_base;
16883 struct gfc_omp_saved_state old_omp_state;
16884
16885 if (ns->resolved)
16886 return;
16887
16888 ns->resolved = -1;
16889 old_ns = gfc_current_ns;
16890 old_cs_base = cs_base;
16891
16892 /* As gfc_resolve can be called during resolution of an OpenMP construct
16893 body, we should clear any state associated to it, so that say NS's
16894 DO loops are not interpreted as OpenMP loops. */
16895 if (!ns->construct_entities)
16896 gfc_omp_save_and_clear_state (&old_omp_state);
16897
16898 resolve_types (ns);
16899 component_assignment_level = 0;
16900 resolve_codes (ns);
16901
16902 gfc_current_ns = old_ns;
16903 cs_base = old_cs_base;
16904 ns->resolved = 1;
16905
16906 gfc_run_passes (ns);
16907
16908 if (!ns->construct_entities)
16909 gfc_omp_restore_state (&old_omp_state);
16910 }