Character typenames in errors and warnings
[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 (0, "Interface mismatch for procedure-pointer "
1433 "component %qs in structure constructor at %L:"
1434 " %s", comp->name, &cons->expr->where, err);
1435 return false;
1436 }
1437 }
1438
1439 if (!comp->attr.pointer || comp->attr.proc_pointer
1440 || cons->expr->expr_type == EXPR_NULL)
1441 continue;
1442
1443 a = gfc_expr_attr (cons->expr);
1444
1445 if (!a.pointer && !a.target)
1446 {
1447 t = false;
1448 gfc_error ("The element in the structure constructor at %L, "
1449 "for pointer component %qs should be a POINTER or "
1450 "a TARGET", &cons->expr->where, comp->name);
1451 }
1452
1453 if (init)
1454 {
1455 /* F08:C461. Additional checks for pointer initialization. */
1456 if (a.allocatable)
1457 {
1458 t = false;
1459 gfc_error ("Pointer initialization target at %L "
1460 "must not be ALLOCATABLE", &cons->expr->where);
1461 }
1462 if (!a.save)
1463 {
1464 t = false;
1465 gfc_error ("Pointer initialization target at %L "
1466 "must have the SAVE attribute", &cons->expr->where);
1467 }
1468 }
1469
1470 /* F2003, C1272 (3). */
1471 bool impure = cons->expr->expr_type == EXPR_VARIABLE
1472 && (gfc_impure_variable (cons->expr->symtree->n.sym)
1473 || gfc_is_coindexed (cons->expr));
1474 if (impure && gfc_pure (NULL))
1475 {
1476 t = false;
1477 gfc_error ("Invalid expression in the structure constructor for "
1478 "pointer component %qs at %L in PURE procedure",
1479 comp->name, &cons->expr->where);
1480 }
1481
1482 if (impure)
1483 gfc_unset_implicit_pure (NULL);
1484 }
1485
1486 return t;
1487 }
1488
1489
1490 /****************** Expression name resolution ******************/
1491
1492 /* Returns 0 if a symbol was not declared with a type or
1493 attribute declaration statement, nonzero otherwise. */
1494
1495 static int
1496 was_declared (gfc_symbol *sym)
1497 {
1498 symbol_attribute a;
1499
1500 a = sym->attr;
1501
1502 if (!a.implicit_type && sym->ts.type != BT_UNKNOWN)
1503 return 1;
1504
1505 if (a.allocatable || a.dimension || a.dummy || a.external || a.intrinsic
1506 || a.optional || a.pointer || a.save || a.target || a.volatile_
1507 || a.value || a.access != ACCESS_UNKNOWN || a.intent != INTENT_UNKNOWN
1508 || a.asynchronous || a.codimension)
1509 return 1;
1510
1511 return 0;
1512 }
1513
1514
1515 /* Determine if a symbol is generic or not. */
1516
1517 static int
1518 generic_sym (gfc_symbol *sym)
1519 {
1520 gfc_symbol *s;
1521
1522 if (sym->attr.generic ||
1523 (sym->attr.intrinsic && gfc_generic_intrinsic (sym->name)))
1524 return 1;
1525
1526 if (was_declared (sym) || sym->ns->parent == NULL)
1527 return 0;
1528
1529 gfc_find_symbol (sym->name, sym->ns->parent, 1, &s);
1530
1531 if (s != NULL)
1532 {
1533 if (s == sym)
1534 return 0;
1535 else
1536 return generic_sym (s);
1537 }
1538
1539 return 0;
1540 }
1541
1542
1543 /* Determine if a symbol is specific or not. */
1544
1545 static int
1546 specific_sym (gfc_symbol *sym)
1547 {
1548 gfc_symbol *s;
1549
1550 if (sym->attr.if_source == IFSRC_IFBODY
1551 || sym->attr.proc == PROC_MODULE
1552 || sym->attr.proc == PROC_INTERNAL
1553 || sym->attr.proc == PROC_ST_FUNCTION
1554 || (sym->attr.intrinsic && gfc_specific_intrinsic (sym->name))
1555 || sym->attr.external)
1556 return 1;
1557
1558 if (was_declared (sym) || sym->ns->parent == NULL)
1559 return 0;
1560
1561 gfc_find_symbol (sym->name, sym->ns->parent, 1, &s);
1562
1563 return (s == NULL) ? 0 : specific_sym (s);
1564 }
1565
1566
1567 /* Figure out if the procedure is specific, generic or unknown. */
1568
1569 enum proc_type
1570 { PTYPE_GENERIC = 1, PTYPE_SPECIFIC, PTYPE_UNKNOWN };
1571
1572 static proc_type
1573 procedure_kind (gfc_symbol *sym)
1574 {
1575 if (generic_sym (sym))
1576 return PTYPE_GENERIC;
1577
1578 if (specific_sym (sym))
1579 return PTYPE_SPECIFIC;
1580
1581 return PTYPE_UNKNOWN;
1582 }
1583
1584 /* Check references to assumed size arrays. The flag need_full_assumed_size
1585 is nonzero when matching actual arguments. */
1586
1587 static int need_full_assumed_size = 0;
1588
1589 static bool
1590 check_assumed_size_reference (gfc_symbol *sym, gfc_expr *e)
1591 {
1592 if (need_full_assumed_size || !(sym->as && sym->as->type == AS_ASSUMED_SIZE))
1593 return false;
1594
1595 /* FIXME: The comparison "e->ref->u.ar.type == AR_FULL" is wrong.
1596 What should it be? */
1597 if (e->ref && (e->ref->u.ar.end[e->ref->u.ar.as->rank - 1] == NULL)
1598 && (e->ref->u.ar.as->type == AS_ASSUMED_SIZE)
1599 && (e->ref->u.ar.type == AR_FULL))
1600 {
1601 gfc_error ("The upper bound in the last dimension must "
1602 "appear in the reference to the assumed size "
1603 "array %qs at %L", sym->name, &e->where);
1604 return true;
1605 }
1606 return false;
1607 }
1608
1609
1610 /* Look for bad assumed size array references in argument expressions
1611 of elemental and array valued intrinsic procedures. Since this is
1612 called from procedure resolution functions, it only recurses at
1613 operators. */
1614
1615 static bool
1616 resolve_assumed_size_actual (gfc_expr *e)
1617 {
1618 if (e == NULL)
1619 return false;
1620
1621 switch (e->expr_type)
1622 {
1623 case EXPR_VARIABLE:
1624 if (e->symtree && check_assumed_size_reference (e->symtree->n.sym, e))
1625 return true;
1626 break;
1627
1628 case EXPR_OP:
1629 if (resolve_assumed_size_actual (e->value.op.op1)
1630 || resolve_assumed_size_actual (e->value.op.op2))
1631 return true;
1632 break;
1633
1634 default:
1635 break;
1636 }
1637 return false;
1638 }
1639
1640
1641 /* Check a generic procedure, passed as an actual argument, to see if
1642 there is a matching specific name. If none, it is an error, and if
1643 more than one, the reference is ambiguous. */
1644 static int
1645 count_specific_procs (gfc_expr *e)
1646 {
1647 int n;
1648 gfc_interface *p;
1649 gfc_symbol *sym;
1650
1651 n = 0;
1652 sym = e->symtree->n.sym;
1653
1654 for (p = sym->generic; p; p = p->next)
1655 if (strcmp (sym->name, p->sym->name) == 0)
1656 {
1657 e->symtree = gfc_find_symtree (p->sym->ns->sym_root,
1658 sym->name);
1659 n++;
1660 }
1661
1662 if (n > 1)
1663 gfc_error ("%qs at %L is ambiguous", e->symtree->n.sym->name,
1664 &e->where);
1665
1666 if (n == 0)
1667 gfc_error ("GENERIC procedure %qs is not allowed as an actual "
1668 "argument at %L", sym->name, &e->where);
1669
1670 return n;
1671 }
1672
1673
1674 /* See if a call to sym could possibly be a not allowed RECURSION because of
1675 a missing RECURSIVE declaration. This means that either sym is the current
1676 context itself, or sym is the parent of a contained procedure calling its
1677 non-RECURSIVE containing procedure.
1678 This also works if sym is an ENTRY. */
1679
1680 static bool
1681 is_illegal_recursion (gfc_symbol* sym, gfc_namespace* context)
1682 {
1683 gfc_symbol* proc_sym;
1684 gfc_symbol* context_proc;
1685 gfc_namespace* real_context;
1686
1687 if (sym->attr.flavor == FL_PROGRAM
1688 || gfc_fl_struct (sym->attr.flavor))
1689 return false;
1690
1691 /* If we've got an ENTRY, find real procedure. */
1692 if (sym->attr.entry && sym->ns->entries)
1693 proc_sym = sym->ns->entries->sym;
1694 else
1695 proc_sym = sym;
1696
1697 /* If sym is RECURSIVE, all is well of course. */
1698 if (proc_sym->attr.recursive || flag_recursive)
1699 return false;
1700
1701 /* Find the context procedure's "real" symbol if it has entries.
1702 We look for a procedure symbol, so recurse on the parents if we don't
1703 find one (like in case of a BLOCK construct). */
1704 for (real_context = context; ; real_context = real_context->parent)
1705 {
1706 /* We should find something, eventually! */
1707 gcc_assert (real_context);
1708
1709 context_proc = (real_context->entries ? real_context->entries->sym
1710 : real_context->proc_name);
1711
1712 /* In some special cases, there may not be a proc_name, like for this
1713 invalid code:
1714 real(bad_kind()) function foo () ...
1715 when checking the call to bad_kind ().
1716 In these cases, we simply return here and assume that the
1717 call is ok. */
1718 if (!context_proc)
1719 return false;
1720
1721 if (context_proc->attr.flavor != FL_LABEL)
1722 break;
1723 }
1724
1725 /* A call from sym's body to itself is recursion, of course. */
1726 if (context_proc == proc_sym)
1727 return true;
1728
1729 /* The same is true if context is a contained procedure and sym the
1730 containing one. */
1731 if (context_proc->attr.contained)
1732 {
1733 gfc_symbol* parent_proc;
1734
1735 gcc_assert (context->parent);
1736 parent_proc = (context->parent->entries ? context->parent->entries->sym
1737 : context->parent->proc_name);
1738
1739 if (parent_proc == proc_sym)
1740 return true;
1741 }
1742
1743 return false;
1744 }
1745
1746
1747 /* Resolve an intrinsic procedure: Set its function/subroutine attribute,
1748 its typespec and formal argument list. */
1749
1750 bool
1751 gfc_resolve_intrinsic (gfc_symbol *sym, locus *loc)
1752 {
1753 gfc_intrinsic_sym* isym = NULL;
1754 const char* symstd;
1755
1756 if (sym->formal)
1757 return true;
1758
1759 /* Already resolved. */
1760 if (sym->from_intmod && sym->ts.type != BT_UNKNOWN)
1761 return true;
1762
1763 /* We already know this one is an intrinsic, so we don't call
1764 gfc_is_intrinsic for full checking but rather use gfc_find_function and
1765 gfc_find_subroutine directly to check whether it is a function or
1766 subroutine. */
1767
1768 if (sym->intmod_sym_id && sym->attr.subroutine)
1769 {
1770 gfc_isym_id id = gfc_isym_id_by_intmod_sym (sym);
1771 isym = gfc_intrinsic_subroutine_by_id (id);
1772 }
1773 else if (sym->intmod_sym_id)
1774 {
1775 gfc_isym_id id = gfc_isym_id_by_intmod_sym (sym);
1776 isym = gfc_intrinsic_function_by_id (id);
1777 }
1778 else if (!sym->attr.subroutine)
1779 isym = gfc_find_function (sym->name);
1780
1781 if (isym && !sym->attr.subroutine)
1782 {
1783 if (sym->ts.type != BT_UNKNOWN && warn_surprising
1784 && !sym->attr.implicit_type)
1785 gfc_warning (OPT_Wsurprising,
1786 "Type specified for intrinsic function %qs at %L is"
1787 " ignored", sym->name, &sym->declared_at);
1788
1789 if (!sym->attr.function &&
1790 !gfc_add_function(&sym->attr, sym->name, loc))
1791 return false;
1792
1793 sym->ts = isym->ts;
1794 }
1795 else if (isym || (isym = gfc_find_subroutine (sym->name)))
1796 {
1797 if (sym->ts.type != BT_UNKNOWN && !sym->attr.implicit_type)
1798 {
1799 gfc_error ("Intrinsic subroutine %qs at %L shall not have a type"
1800 " specifier", sym->name, &sym->declared_at);
1801 return false;
1802 }
1803
1804 if (!sym->attr.subroutine &&
1805 !gfc_add_subroutine(&sym->attr, sym->name, loc))
1806 return false;
1807 }
1808 else
1809 {
1810 gfc_error ("%qs declared INTRINSIC at %L does not exist", sym->name,
1811 &sym->declared_at);
1812 return false;
1813 }
1814
1815 gfc_copy_formal_args_intr (sym, isym, NULL);
1816
1817 sym->attr.pure = isym->pure;
1818 sym->attr.elemental = isym->elemental;
1819
1820 /* Check it is actually available in the standard settings. */
1821 if (!gfc_check_intrinsic_standard (isym, &symstd, false, sym->declared_at))
1822 {
1823 gfc_error ("The intrinsic %qs declared INTRINSIC at %L is not "
1824 "available in the current standard settings but %s. Use "
1825 "an appropriate %<-std=*%> option or enable "
1826 "%<-fall-intrinsics%> in order to use it.",
1827 sym->name, &sym->declared_at, symstd);
1828 return false;
1829 }
1830
1831 return true;
1832 }
1833
1834
1835 /* Resolve a procedure expression, like passing it to a called procedure or as
1836 RHS for a procedure pointer assignment. */
1837
1838 static bool
1839 resolve_procedure_expression (gfc_expr* expr)
1840 {
1841 gfc_symbol* sym;
1842
1843 if (expr->expr_type != EXPR_VARIABLE)
1844 return true;
1845 gcc_assert (expr->symtree);
1846
1847 sym = expr->symtree->n.sym;
1848
1849 if (sym->attr.intrinsic)
1850 gfc_resolve_intrinsic (sym, &expr->where);
1851
1852 if (sym->attr.flavor != FL_PROCEDURE
1853 || (sym->attr.function && sym->result == sym))
1854 return true;
1855
1856 /* A non-RECURSIVE procedure that is used as procedure expression within its
1857 own body is in danger of being called recursively. */
1858 if (is_illegal_recursion (sym, gfc_current_ns))
1859 gfc_warning (0, "Non-RECURSIVE procedure %qs at %L is possibly calling"
1860 " itself recursively. Declare it RECURSIVE or use"
1861 " %<-frecursive%>", sym->name, &expr->where);
1862
1863 return true;
1864 }
1865
1866
1867 /* Check that name is not a derived type. */
1868
1869 static bool
1870 is_dt_name (const char *name)
1871 {
1872 gfc_symbol *dt_list, *dt_first;
1873
1874 dt_list = dt_first = gfc_derived_types;
1875 for (; dt_list; dt_list = dt_list->dt_next)
1876 {
1877 if (strcmp(dt_list->name, name) == 0)
1878 return true;
1879 if (dt_first == dt_list->dt_next)
1880 break;
1881 }
1882 return false;
1883 }
1884
1885
1886 /* Resolve an actual argument list. Most of the time, this is just
1887 resolving the expressions in the list.
1888 The exception is that we sometimes have to decide whether arguments
1889 that look like procedure arguments are really simple variable
1890 references. */
1891
1892 static bool
1893 resolve_actual_arglist (gfc_actual_arglist *arg, procedure_type ptype,
1894 bool no_formal_args)
1895 {
1896 gfc_symbol *sym;
1897 gfc_symtree *parent_st;
1898 gfc_expr *e;
1899 gfc_component *comp;
1900 int save_need_full_assumed_size;
1901 bool return_value = false;
1902 bool actual_arg_sav = actual_arg, first_actual_arg_sav = first_actual_arg;
1903
1904 actual_arg = true;
1905 first_actual_arg = true;
1906
1907 for (; arg; arg = arg->next)
1908 {
1909 e = arg->expr;
1910 if (e == NULL)
1911 {
1912 /* Check the label is a valid branching target. */
1913 if (arg->label)
1914 {
1915 if (arg->label->defined == ST_LABEL_UNKNOWN)
1916 {
1917 gfc_error ("Label %d referenced at %L is never defined",
1918 arg->label->value, &arg->label->where);
1919 goto cleanup;
1920 }
1921 }
1922 first_actual_arg = false;
1923 continue;
1924 }
1925
1926 if (e->expr_type == EXPR_VARIABLE
1927 && e->symtree->n.sym->attr.generic
1928 && no_formal_args
1929 && count_specific_procs (e) != 1)
1930 goto cleanup;
1931
1932 if (e->ts.type != BT_PROCEDURE)
1933 {
1934 save_need_full_assumed_size = need_full_assumed_size;
1935 if (e->expr_type != EXPR_VARIABLE)
1936 need_full_assumed_size = 0;
1937 if (!gfc_resolve_expr (e))
1938 goto cleanup;
1939 need_full_assumed_size = save_need_full_assumed_size;
1940 goto argument_list;
1941 }
1942
1943 /* See if the expression node should really be a variable reference. */
1944
1945 sym = e->symtree->n.sym;
1946
1947 if (sym->attr.flavor == FL_PROCEDURE && is_dt_name (sym->name))
1948 {
1949 gfc_error ("Derived type %qs is used as an actual "
1950 "argument at %L", sym->name, &e->where);
1951 goto cleanup;
1952 }
1953
1954 if (sym->attr.flavor == FL_PROCEDURE
1955 || sym->attr.intrinsic
1956 || sym->attr.external)
1957 {
1958 int actual_ok;
1959
1960 /* If a procedure is not already determined to be something else
1961 check if it is intrinsic. */
1962 if (gfc_is_intrinsic (sym, sym->attr.subroutine, e->where))
1963 sym->attr.intrinsic = 1;
1964
1965 if (sym->attr.proc == PROC_ST_FUNCTION)
1966 {
1967 gfc_error ("Statement function %qs at %L is not allowed as an "
1968 "actual argument", sym->name, &e->where);
1969 }
1970
1971 actual_ok = gfc_intrinsic_actual_ok (sym->name,
1972 sym->attr.subroutine);
1973 if (sym->attr.intrinsic && actual_ok == 0)
1974 {
1975 gfc_error ("Intrinsic %qs at %L is not allowed as an "
1976 "actual argument", sym->name, &e->where);
1977 }
1978
1979 if (sym->attr.contained && !sym->attr.use_assoc
1980 && sym->ns->proc_name->attr.flavor != FL_MODULE)
1981 {
1982 if (!gfc_notify_std (GFC_STD_F2008, "Internal procedure %qs is"
1983 " used as actual argument at %L",
1984 sym->name, &e->where))
1985 goto cleanup;
1986 }
1987
1988 if (sym->attr.elemental && !sym->attr.intrinsic)
1989 {
1990 gfc_error ("ELEMENTAL non-INTRINSIC procedure %qs is not "
1991 "allowed as an actual argument at %L", sym->name,
1992 &e->where);
1993 }
1994
1995 /* Check if a generic interface has a specific procedure
1996 with the same name before emitting an error. */
1997 if (sym->attr.generic && count_specific_procs (e) != 1)
1998 goto cleanup;
1999
2000 /* Just in case a specific was found for the expression. */
2001 sym = e->symtree->n.sym;
2002
2003 /* If the symbol is the function that names the current (or
2004 parent) scope, then we really have a variable reference. */
2005
2006 if (gfc_is_function_return_value (sym, sym->ns))
2007 goto got_variable;
2008
2009 /* If all else fails, see if we have a specific intrinsic. */
2010 if (sym->ts.type == BT_UNKNOWN && sym->attr.intrinsic)
2011 {
2012 gfc_intrinsic_sym *isym;
2013
2014 isym = gfc_find_function (sym->name);
2015 if (isym == NULL || !isym->specific)
2016 {
2017 gfc_error ("Unable to find a specific INTRINSIC procedure "
2018 "for the reference %qs at %L", sym->name,
2019 &e->where);
2020 goto cleanup;
2021 }
2022 sym->ts = isym->ts;
2023 sym->attr.intrinsic = 1;
2024 sym->attr.function = 1;
2025 }
2026
2027 if (!gfc_resolve_expr (e))
2028 goto cleanup;
2029 goto argument_list;
2030 }
2031
2032 /* See if the name is a module procedure in a parent unit. */
2033
2034 if (was_declared (sym) || sym->ns->parent == NULL)
2035 goto got_variable;
2036
2037 if (gfc_find_sym_tree (sym->name, sym->ns->parent, 1, &parent_st))
2038 {
2039 gfc_error ("Symbol %qs at %L is ambiguous", sym->name, &e->where);
2040 goto cleanup;
2041 }
2042
2043 if (parent_st == NULL)
2044 goto got_variable;
2045
2046 sym = parent_st->n.sym;
2047 e->symtree = parent_st; /* Point to the right thing. */
2048
2049 if (sym->attr.flavor == FL_PROCEDURE
2050 || sym->attr.intrinsic
2051 || sym->attr.external)
2052 {
2053 if (!gfc_resolve_expr (e))
2054 goto cleanup;
2055 goto argument_list;
2056 }
2057
2058 got_variable:
2059 e->expr_type = EXPR_VARIABLE;
2060 e->ts = sym->ts;
2061 if ((sym->as != NULL && sym->ts.type != BT_CLASS)
2062 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
2063 && CLASS_DATA (sym)->as))
2064 {
2065 e->rank = sym->ts.type == BT_CLASS
2066 ? CLASS_DATA (sym)->as->rank : sym->as->rank;
2067 e->ref = gfc_get_ref ();
2068 e->ref->type = REF_ARRAY;
2069 e->ref->u.ar.type = AR_FULL;
2070 e->ref->u.ar.as = sym->ts.type == BT_CLASS
2071 ? CLASS_DATA (sym)->as : sym->as;
2072 }
2073
2074 /* Expressions are assigned a default ts.type of BT_PROCEDURE in
2075 primary.c (match_actual_arg). If above code determines that it
2076 is a variable instead, it needs to be resolved as it was not
2077 done at the beginning of this function. */
2078 save_need_full_assumed_size = need_full_assumed_size;
2079 if (e->expr_type != EXPR_VARIABLE)
2080 need_full_assumed_size = 0;
2081 if (!gfc_resolve_expr (e))
2082 goto cleanup;
2083 need_full_assumed_size = save_need_full_assumed_size;
2084
2085 argument_list:
2086 /* Check argument list functions %VAL, %LOC and %REF. There is
2087 nothing to do for %REF. */
2088 if (arg->name && arg->name[0] == '%')
2089 {
2090 if (strcmp ("%VAL", arg->name) == 0)
2091 {
2092 if (e->ts.type == BT_CHARACTER || e->ts.type == BT_DERIVED)
2093 {
2094 gfc_error ("By-value argument at %L is not of numeric "
2095 "type", &e->where);
2096 goto cleanup;
2097 }
2098
2099 if (e->rank)
2100 {
2101 gfc_error ("By-value argument at %L cannot be an array or "
2102 "an array section", &e->where);
2103 goto cleanup;
2104 }
2105
2106 /* Intrinsics are still PROC_UNKNOWN here. However,
2107 since same file external procedures are not resolvable
2108 in gfortran, it is a good deal easier to leave them to
2109 intrinsic.c. */
2110 if (ptype != PROC_UNKNOWN
2111 && ptype != PROC_DUMMY
2112 && ptype != PROC_EXTERNAL
2113 && ptype != PROC_MODULE)
2114 {
2115 gfc_error ("By-value argument at %L is not allowed "
2116 "in this context", &e->where);
2117 goto cleanup;
2118 }
2119 }
2120
2121 /* Statement functions have already been excluded above. */
2122 else if (strcmp ("%LOC", arg->name) == 0
2123 && e->ts.type == BT_PROCEDURE)
2124 {
2125 if (e->symtree->n.sym->attr.proc == PROC_INTERNAL)
2126 {
2127 gfc_error ("Passing internal procedure at %L by location "
2128 "not allowed", &e->where);
2129 goto cleanup;
2130 }
2131 }
2132 }
2133
2134 comp = gfc_get_proc_ptr_comp(e);
2135 if (e->expr_type == EXPR_VARIABLE
2136 && comp && comp->attr.elemental)
2137 {
2138 gfc_error ("ELEMENTAL procedure pointer component %qs is not "
2139 "allowed as an actual argument at %L", comp->name,
2140 &e->where);
2141 }
2142
2143 /* Fortran 2008, C1237. */
2144 if (e->expr_type == EXPR_VARIABLE && gfc_is_coindexed (e)
2145 && gfc_has_ultimate_pointer (e))
2146 {
2147 gfc_error ("Coindexed actual argument at %L with ultimate pointer "
2148 "component", &e->where);
2149 goto cleanup;
2150 }
2151
2152 first_actual_arg = false;
2153 }
2154
2155 return_value = true;
2156
2157 cleanup:
2158 actual_arg = actual_arg_sav;
2159 first_actual_arg = first_actual_arg_sav;
2160
2161 return return_value;
2162 }
2163
2164
2165 /* Do the checks of the actual argument list that are specific to elemental
2166 procedures. If called with c == NULL, we have a function, otherwise if
2167 expr == NULL, we have a subroutine. */
2168
2169 static bool
2170 resolve_elemental_actual (gfc_expr *expr, gfc_code *c)
2171 {
2172 gfc_actual_arglist *arg0;
2173 gfc_actual_arglist *arg;
2174 gfc_symbol *esym = NULL;
2175 gfc_intrinsic_sym *isym = NULL;
2176 gfc_expr *e = NULL;
2177 gfc_intrinsic_arg *iformal = NULL;
2178 gfc_formal_arglist *eformal = NULL;
2179 bool formal_optional = false;
2180 bool set_by_optional = false;
2181 int i;
2182 int rank = 0;
2183
2184 /* Is this an elemental procedure? */
2185 if (expr && expr->value.function.actual != NULL)
2186 {
2187 if (expr->value.function.esym != NULL
2188 && expr->value.function.esym->attr.elemental)
2189 {
2190 arg0 = expr->value.function.actual;
2191 esym = expr->value.function.esym;
2192 }
2193 else if (expr->value.function.isym != NULL
2194 && expr->value.function.isym->elemental)
2195 {
2196 arg0 = expr->value.function.actual;
2197 isym = expr->value.function.isym;
2198 }
2199 else
2200 return true;
2201 }
2202 else if (c && c->ext.actual != NULL)
2203 {
2204 arg0 = c->ext.actual;
2205
2206 if (c->resolved_sym)
2207 esym = c->resolved_sym;
2208 else
2209 esym = c->symtree->n.sym;
2210 gcc_assert (esym);
2211
2212 if (!esym->attr.elemental)
2213 return true;
2214 }
2215 else
2216 return true;
2217
2218 /* The rank of an elemental is the rank of its array argument(s). */
2219 for (arg = arg0; arg; arg = arg->next)
2220 {
2221 if (arg->expr != NULL && arg->expr->rank != 0)
2222 {
2223 rank = arg->expr->rank;
2224 if (arg->expr->expr_type == EXPR_VARIABLE
2225 && arg->expr->symtree->n.sym->attr.optional)
2226 set_by_optional = true;
2227
2228 /* Function specific; set the result rank and shape. */
2229 if (expr)
2230 {
2231 expr->rank = rank;
2232 if (!expr->shape && arg->expr->shape)
2233 {
2234 expr->shape = gfc_get_shape (rank);
2235 for (i = 0; i < rank; i++)
2236 mpz_init_set (expr->shape[i], arg->expr->shape[i]);
2237 }
2238 }
2239 break;
2240 }
2241 }
2242
2243 /* If it is an array, it shall not be supplied as an actual argument
2244 to an elemental procedure unless an array of the same rank is supplied
2245 as an actual argument corresponding to a nonoptional dummy argument of
2246 that elemental procedure(12.4.1.5). */
2247 formal_optional = false;
2248 if (isym)
2249 iformal = isym->formal;
2250 else
2251 eformal = esym->formal;
2252
2253 for (arg = arg0; arg; arg = arg->next)
2254 {
2255 if (eformal)
2256 {
2257 if (eformal->sym && eformal->sym->attr.optional)
2258 formal_optional = true;
2259 eformal = eformal->next;
2260 }
2261 else if (isym && iformal)
2262 {
2263 if (iformal->optional)
2264 formal_optional = true;
2265 iformal = iformal->next;
2266 }
2267 else if (isym)
2268 formal_optional = true;
2269
2270 if (pedantic && arg->expr != NULL
2271 && arg->expr->expr_type == EXPR_VARIABLE
2272 && arg->expr->symtree->n.sym->attr.optional
2273 && formal_optional
2274 && arg->expr->rank
2275 && (set_by_optional || arg->expr->rank != rank)
2276 && !(isym && isym->id == GFC_ISYM_CONVERSION))
2277 {
2278 gfc_warning (OPT_Wpedantic,
2279 "%qs at %L is an array and OPTIONAL; IF IT IS "
2280 "MISSING, it cannot be the actual argument of an "
2281 "ELEMENTAL procedure unless there is a non-optional "
2282 "argument with the same rank (12.4.1.5)",
2283 arg->expr->symtree->n.sym->name, &arg->expr->where);
2284 }
2285 }
2286
2287 for (arg = arg0; arg; arg = arg->next)
2288 {
2289 if (arg->expr == NULL || arg->expr->rank == 0)
2290 continue;
2291
2292 /* Being elemental, the last upper bound of an assumed size array
2293 argument must be present. */
2294 if (resolve_assumed_size_actual (arg->expr))
2295 return false;
2296
2297 /* Elemental procedure's array actual arguments must conform. */
2298 if (e != NULL)
2299 {
2300 if (!gfc_check_conformance (arg->expr, e, "elemental procedure"))
2301 return false;
2302 }
2303 else
2304 e = arg->expr;
2305 }
2306
2307 /* INTENT(OUT) is only allowed for subroutines; if any actual argument
2308 is an array, the intent inout/out variable needs to be also an array. */
2309 if (rank > 0 && esym && expr == NULL)
2310 for (eformal = esym->formal, arg = arg0; arg && eformal;
2311 arg = arg->next, eformal = eformal->next)
2312 if ((eformal->sym->attr.intent == INTENT_OUT
2313 || eformal->sym->attr.intent == INTENT_INOUT)
2314 && arg->expr && arg->expr->rank == 0)
2315 {
2316 gfc_error ("Actual argument at %L for INTENT(%s) dummy %qs of "
2317 "ELEMENTAL subroutine %qs is a scalar, but another "
2318 "actual argument is an array", &arg->expr->where,
2319 (eformal->sym->attr.intent == INTENT_OUT) ? "OUT"
2320 : "INOUT", eformal->sym->name, esym->name);
2321 return false;
2322 }
2323 return true;
2324 }
2325
2326
2327 /* This function does the checking of references to global procedures
2328 as defined in sections 18.1 and 14.1, respectively, of the Fortran
2329 77 and 95 standards. It checks for a gsymbol for the name, making
2330 one if it does not already exist. If it already exists, then the
2331 reference being resolved must correspond to the type of gsymbol.
2332 Otherwise, the new symbol is equipped with the attributes of the
2333 reference. The corresponding code that is called in creating
2334 global entities is parse.c.
2335
2336 In addition, for all but -std=legacy, the gsymbols are used to
2337 check the interfaces of external procedures from the same file.
2338 The namespace of the gsymbol is resolved and then, once this is
2339 done the interface is checked. */
2340
2341
2342 static bool
2343 not_in_recursive (gfc_symbol *sym, gfc_namespace *gsym_ns)
2344 {
2345 if (!gsym_ns->proc_name->attr.recursive)
2346 return true;
2347
2348 if (sym->ns == gsym_ns)
2349 return false;
2350
2351 if (sym->ns->parent && sym->ns->parent == gsym_ns)
2352 return false;
2353
2354 return true;
2355 }
2356
2357 static bool
2358 not_entry_self_reference (gfc_symbol *sym, gfc_namespace *gsym_ns)
2359 {
2360 if (gsym_ns->entries)
2361 {
2362 gfc_entry_list *entry = gsym_ns->entries;
2363
2364 for (; entry; entry = entry->next)
2365 {
2366 if (strcmp (sym->name, entry->sym->name) == 0)
2367 {
2368 if (strcmp (gsym_ns->proc_name->name,
2369 sym->ns->proc_name->name) == 0)
2370 return false;
2371
2372 if (sym->ns->parent
2373 && strcmp (gsym_ns->proc_name->name,
2374 sym->ns->parent->proc_name->name) == 0)
2375 return false;
2376 }
2377 }
2378 }
2379 return true;
2380 }
2381
2382
2383 /* Check for the requirement of an explicit interface. F08:12.4.2.2. */
2384
2385 bool
2386 gfc_explicit_interface_required (gfc_symbol *sym, char *errmsg, int err_len)
2387 {
2388 gfc_formal_arglist *arg = gfc_sym_get_dummy_args (sym);
2389
2390 for ( ; arg; arg = arg->next)
2391 {
2392 if (!arg->sym)
2393 continue;
2394
2395 if (arg->sym->attr.allocatable) /* (2a) */
2396 {
2397 strncpy (errmsg, _("allocatable argument"), err_len);
2398 return true;
2399 }
2400 else if (arg->sym->attr.asynchronous)
2401 {
2402 strncpy (errmsg, _("asynchronous argument"), err_len);
2403 return true;
2404 }
2405 else if (arg->sym->attr.optional)
2406 {
2407 strncpy (errmsg, _("optional argument"), err_len);
2408 return true;
2409 }
2410 else if (arg->sym->attr.pointer)
2411 {
2412 strncpy (errmsg, _("pointer argument"), err_len);
2413 return true;
2414 }
2415 else if (arg->sym->attr.target)
2416 {
2417 strncpy (errmsg, _("target argument"), err_len);
2418 return true;
2419 }
2420 else if (arg->sym->attr.value)
2421 {
2422 strncpy (errmsg, _("value argument"), err_len);
2423 return true;
2424 }
2425 else if (arg->sym->attr.volatile_)
2426 {
2427 strncpy (errmsg, _("volatile argument"), err_len);
2428 return true;
2429 }
2430 else if (arg->sym->as && arg->sym->as->type == AS_ASSUMED_SHAPE) /* (2b) */
2431 {
2432 strncpy (errmsg, _("assumed-shape argument"), err_len);
2433 return true;
2434 }
2435 else if (arg->sym->as && arg->sym->as->type == AS_ASSUMED_RANK) /* TS 29113, 6.2. */
2436 {
2437 strncpy (errmsg, _("assumed-rank argument"), err_len);
2438 return true;
2439 }
2440 else if (arg->sym->attr.codimension) /* (2c) */
2441 {
2442 strncpy (errmsg, _("coarray argument"), err_len);
2443 return true;
2444 }
2445 else if (false) /* (2d) TODO: parametrized derived type */
2446 {
2447 strncpy (errmsg, _("parametrized derived type argument"), err_len);
2448 return true;
2449 }
2450 else if (arg->sym->ts.type == BT_CLASS) /* (2e) */
2451 {
2452 strncpy (errmsg, _("polymorphic argument"), err_len);
2453 return true;
2454 }
2455 else if (arg->sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
2456 {
2457 strncpy (errmsg, _("NO_ARG_CHECK attribute"), err_len);
2458 return true;
2459 }
2460 else if (arg->sym->ts.type == BT_ASSUMED)
2461 {
2462 /* As assumed-type is unlimited polymorphic (cf. above).
2463 See also TS 29113, Note 6.1. */
2464 strncpy (errmsg, _("assumed-type argument"), err_len);
2465 return true;
2466 }
2467 }
2468
2469 if (sym->attr.function)
2470 {
2471 gfc_symbol *res = sym->result ? sym->result : sym;
2472
2473 if (res->attr.dimension) /* (3a) */
2474 {
2475 strncpy (errmsg, _("array result"), err_len);
2476 return true;
2477 }
2478 else if (res->attr.pointer || res->attr.allocatable) /* (3b) */
2479 {
2480 strncpy (errmsg, _("pointer or allocatable result"), err_len);
2481 return true;
2482 }
2483 else if (res->ts.type == BT_CHARACTER && res->ts.u.cl
2484 && res->ts.u.cl->length
2485 && res->ts.u.cl->length->expr_type != EXPR_CONSTANT) /* (3c) */
2486 {
2487 strncpy (errmsg, _("result with non-constant character length"), err_len);
2488 return true;
2489 }
2490 }
2491
2492 if (sym->attr.elemental && !sym->attr.intrinsic) /* (4) */
2493 {
2494 strncpy (errmsg, _("elemental procedure"), err_len);
2495 return true;
2496 }
2497 else if (sym->attr.is_bind_c) /* (5) */
2498 {
2499 strncpy (errmsg, _("bind(c) procedure"), err_len);
2500 return true;
2501 }
2502
2503 return false;
2504 }
2505
2506
2507 static void
2508 resolve_global_procedure (gfc_symbol *sym, locus *where, int sub)
2509 {
2510 gfc_gsymbol * gsym;
2511 gfc_namespace *ns;
2512 enum gfc_symbol_type type;
2513 char reason[200];
2514
2515 type = sub ? GSYM_SUBROUTINE : GSYM_FUNCTION;
2516
2517 gsym = gfc_get_gsymbol (sym->binding_label ? sym->binding_label : sym->name,
2518 sym->binding_label != NULL);
2519
2520 if ((gsym->type != GSYM_UNKNOWN && gsym->type != type))
2521 gfc_global_used (gsym, where);
2522
2523 if ((sym->attr.if_source == IFSRC_UNKNOWN
2524 || sym->attr.if_source == IFSRC_IFBODY)
2525 && gsym->type != GSYM_UNKNOWN
2526 && !gsym->binding_label
2527 && gsym->ns
2528 && gsym->ns->proc_name
2529 && not_in_recursive (sym, gsym->ns)
2530 && not_entry_self_reference (sym, gsym->ns))
2531 {
2532 gfc_symbol *def_sym;
2533 def_sym = gsym->ns->proc_name;
2534
2535 if (gsym->ns->resolved != -1)
2536 {
2537
2538 /* Resolve the gsymbol namespace if needed. */
2539 if (!gsym->ns->resolved)
2540 {
2541 gfc_symbol *old_dt_list;
2542
2543 /* Stash away derived types so that the backend_decls
2544 do not get mixed up. */
2545 old_dt_list = gfc_derived_types;
2546 gfc_derived_types = NULL;
2547
2548 gfc_resolve (gsym->ns);
2549
2550 /* Store the new derived types with the global namespace. */
2551 if (gfc_derived_types)
2552 gsym->ns->derived_types = gfc_derived_types;
2553
2554 /* Restore the derived types of this namespace. */
2555 gfc_derived_types = old_dt_list;
2556 }
2557
2558 /* Make sure that translation for the gsymbol occurs before
2559 the procedure currently being resolved. */
2560 ns = gfc_global_ns_list;
2561 for (; ns && ns != gsym->ns; ns = ns->sibling)
2562 {
2563 if (ns->sibling == gsym->ns)
2564 {
2565 ns->sibling = gsym->ns->sibling;
2566 gsym->ns->sibling = gfc_global_ns_list;
2567 gfc_global_ns_list = gsym->ns;
2568 break;
2569 }
2570 }
2571
2572 /* This can happen if a binding name has been specified. */
2573 if (gsym->binding_label && gsym->sym_name != def_sym->name)
2574 gfc_find_symbol (gsym->sym_name, gsym->ns, 0, &def_sym);
2575
2576 if (def_sym->attr.entry_master || def_sym->attr.entry)
2577 {
2578 gfc_entry_list *entry;
2579 for (entry = gsym->ns->entries; entry; entry = entry->next)
2580 if (strcmp (entry->sym->name, sym->name) == 0)
2581 {
2582 def_sym = entry->sym;
2583 break;
2584 }
2585 }
2586 }
2587
2588 if (sym->attr.function && !gfc_compare_types (&sym->ts, &def_sym->ts))
2589 {
2590 gfc_error ("Return type mismatch of function %qs at %L (%s/%s)",
2591 sym->name, &sym->declared_at, gfc_typename (&sym->ts),
2592 gfc_typename (&def_sym->ts));
2593 goto done;
2594 }
2595
2596 if (sym->attr.if_source == IFSRC_UNKNOWN
2597 && gfc_explicit_interface_required (def_sym, reason, sizeof(reason)))
2598 {
2599 gfc_error ("Explicit interface required for %qs at %L: %s",
2600 sym->name, &sym->declared_at, reason);
2601 goto done;
2602 }
2603
2604 if (!pedantic && (gfc_option.allow_std & GFC_STD_GNU))
2605 /* Turn erros into warnings with -std=gnu and -std=legacy. */
2606 gfc_errors_to_warnings (true);
2607
2608 if (!gfc_compare_interfaces (sym, def_sym, sym->name, 0, 1,
2609 reason, sizeof(reason), NULL, NULL))
2610 {
2611 gfc_error_opt (0, "Interface mismatch in global procedure %qs at %L:"
2612 " %s", sym->name, &sym->declared_at, reason);
2613 goto done;
2614 }
2615 }
2616
2617 done:
2618 gfc_errors_to_warnings (false);
2619
2620 if (gsym->type == GSYM_UNKNOWN)
2621 {
2622 gsym->type = type;
2623 gsym->where = *where;
2624 }
2625
2626 gsym->used = 1;
2627 }
2628
2629
2630 /************* Function resolution *************/
2631
2632 /* Resolve a function call known to be generic.
2633 Section 14.1.2.4.1. */
2634
2635 static match
2636 resolve_generic_f0 (gfc_expr *expr, gfc_symbol *sym)
2637 {
2638 gfc_symbol *s;
2639
2640 if (sym->attr.generic)
2641 {
2642 s = gfc_search_interface (sym->generic, 0, &expr->value.function.actual);
2643 if (s != NULL)
2644 {
2645 expr->value.function.name = s->name;
2646 expr->value.function.esym = s;
2647
2648 if (s->ts.type != BT_UNKNOWN)
2649 expr->ts = s->ts;
2650 else if (s->result != NULL && s->result->ts.type != BT_UNKNOWN)
2651 expr->ts = s->result->ts;
2652
2653 if (s->as != NULL)
2654 expr->rank = s->as->rank;
2655 else if (s->result != NULL && s->result->as != NULL)
2656 expr->rank = s->result->as->rank;
2657
2658 gfc_set_sym_referenced (expr->value.function.esym);
2659
2660 return MATCH_YES;
2661 }
2662
2663 /* TODO: Need to search for elemental references in generic
2664 interface. */
2665 }
2666
2667 if (sym->attr.intrinsic)
2668 return gfc_intrinsic_func_interface (expr, 0);
2669
2670 return MATCH_NO;
2671 }
2672
2673
2674 static bool
2675 resolve_generic_f (gfc_expr *expr)
2676 {
2677 gfc_symbol *sym;
2678 match m;
2679 gfc_interface *intr = NULL;
2680
2681 sym = expr->symtree->n.sym;
2682
2683 for (;;)
2684 {
2685 m = resolve_generic_f0 (expr, sym);
2686 if (m == MATCH_YES)
2687 return true;
2688 else if (m == MATCH_ERROR)
2689 return false;
2690
2691 generic:
2692 if (!intr)
2693 for (intr = sym->generic; intr; intr = intr->next)
2694 if (gfc_fl_struct (intr->sym->attr.flavor))
2695 break;
2696
2697 if (sym->ns->parent == NULL)
2698 break;
2699 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
2700
2701 if (sym == NULL)
2702 break;
2703 if (!generic_sym (sym))
2704 goto generic;
2705 }
2706
2707 /* Last ditch attempt. See if the reference is to an intrinsic
2708 that possesses a matching interface. 14.1.2.4 */
2709 if (sym && !intr && !gfc_is_intrinsic (sym, 0, expr->where))
2710 {
2711 if (gfc_init_expr_flag)
2712 gfc_error ("Function %qs in initialization expression at %L "
2713 "must be an intrinsic function",
2714 expr->symtree->n.sym->name, &expr->where);
2715 else
2716 gfc_error ("There is no specific function for the generic %qs "
2717 "at %L", expr->symtree->n.sym->name, &expr->where);
2718 return false;
2719 }
2720
2721 if (intr)
2722 {
2723 if (!gfc_convert_to_structure_constructor (expr, intr->sym, NULL,
2724 NULL, false))
2725 return false;
2726 if (!gfc_use_derived (expr->ts.u.derived))
2727 return false;
2728 return resolve_structure_cons (expr, 0);
2729 }
2730
2731 m = gfc_intrinsic_func_interface (expr, 0);
2732 if (m == MATCH_YES)
2733 return true;
2734
2735 if (m == MATCH_NO)
2736 gfc_error ("Generic function %qs at %L is not consistent with a "
2737 "specific intrinsic interface", expr->symtree->n.sym->name,
2738 &expr->where);
2739
2740 return false;
2741 }
2742
2743
2744 /* Resolve a function call known to be specific. */
2745
2746 static match
2747 resolve_specific_f0 (gfc_symbol *sym, gfc_expr *expr)
2748 {
2749 match m;
2750
2751 if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
2752 {
2753 if (sym->attr.dummy)
2754 {
2755 sym->attr.proc = PROC_DUMMY;
2756 goto found;
2757 }
2758
2759 sym->attr.proc = PROC_EXTERNAL;
2760 goto found;
2761 }
2762
2763 if (sym->attr.proc == PROC_MODULE
2764 || sym->attr.proc == PROC_ST_FUNCTION
2765 || sym->attr.proc == PROC_INTERNAL)
2766 goto found;
2767
2768 if (sym->attr.intrinsic)
2769 {
2770 m = gfc_intrinsic_func_interface (expr, 1);
2771 if (m == MATCH_YES)
2772 return MATCH_YES;
2773 if (m == MATCH_NO)
2774 gfc_error ("Function %qs at %L is INTRINSIC but is not compatible "
2775 "with an intrinsic", sym->name, &expr->where);
2776
2777 return MATCH_ERROR;
2778 }
2779
2780 return MATCH_NO;
2781
2782 found:
2783 gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
2784
2785 if (sym->result)
2786 expr->ts = sym->result->ts;
2787 else
2788 expr->ts = sym->ts;
2789 expr->value.function.name = sym->name;
2790 expr->value.function.esym = sym;
2791 /* Prevent crash when sym->ts.u.derived->components is not set due to previous
2792 error(s). */
2793 if (sym->ts.type == BT_CLASS && !CLASS_DATA (sym))
2794 return MATCH_ERROR;
2795 if (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as)
2796 expr->rank = CLASS_DATA (sym)->as->rank;
2797 else if (sym->as != NULL)
2798 expr->rank = sym->as->rank;
2799
2800 return MATCH_YES;
2801 }
2802
2803
2804 static bool
2805 resolve_specific_f (gfc_expr *expr)
2806 {
2807 gfc_symbol *sym;
2808 match m;
2809
2810 sym = expr->symtree->n.sym;
2811
2812 for (;;)
2813 {
2814 m = resolve_specific_f0 (sym, expr);
2815 if (m == MATCH_YES)
2816 return true;
2817 if (m == MATCH_ERROR)
2818 return false;
2819
2820 if (sym->ns->parent == NULL)
2821 break;
2822
2823 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
2824
2825 if (sym == NULL)
2826 break;
2827 }
2828
2829 gfc_error ("Unable to resolve the specific function %qs at %L",
2830 expr->symtree->n.sym->name, &expr->where);
2831
2832 return true;
2833 }
2834
2835 /* Recursively append candidate SYM to CANDIDATES. Store the number of
2836 candidates in CANDIDATES_LEN. */
2837
2838 static void
2839 lookup_function_fuzzy_find_candidates (gfc_symtree *sym,
2840 char **&candidates,
2841 size_t &candidates_len)
2842 {
2843 gfc_symtree *p;
2844
2845 if (sym == NULL)
2846 return;
2847 if ((sym->n.sym->ts.type != BT_UNKNOWN || sym->n.sym->attr.external)
2848 && sym->n.sym->attr.flavor == FL_PROCEDURE)
2849 vec_push (candidates, candidates_len, sym->name);
2850
2851 p = sym->left;
2852 if (p)
2853 lookup_function_fuzzy_find_candidates (p, candidates, candidates_len);
2854
2855 p = sym->right;
2856 if (p)
2857 lookup_function_fuzzy_find_candidates (p, candidates, candidates_len);
2858 }
2859
2860
2861 /* Lookup function FN fuzzily, taking names in SYMROOT into account. */
2862
2863 const char*
2864 gfc_lookup_function_fuzzy (const char *fn, gfc_symtree *symroot)
2865 {
2866 char **candidates = NULL;
2867 size_t candidates_len = 0;
2868 lookup_function_fuzzy_find_candidates (symroot, candidates, candidates_len);
2869 return gfc_closest_fuzzy_match (fn, candidates);
2870 }
2871
2872
2873 /* Resolve a procedure call not known to be generic nor specific. */
2874
2875 static bool
2876 resolve_unknown_f (gfc_expr *expr)
2877 {
2878 gfc_symbol *sym;
2879 gfc_typespec *ts;
2880
2881 sym = expr->symtree->n.sym;
2882
2883 if (sym->attr.dummy)
2884 {
2885 sym->attr.proc = PROC_DUMMY;
2886 expr->value.function.name = sym->name;
2887 goto set_type;
2888 }
2889
2890 /* See if we have an intrinsic function reference. */
2891
2892 if (gfc_is_intrinsic (sym, 0, expr->where))
2893 {
2894 if (gfc_intrinsic_func_interface (expr, 1) == MATCH_YES)
2895 return true;
2896 return false;
2897 }
2898
2899 /* The reference is to an external name. */
2900
2901 sym->attr.proc = PROC_EXTERNAL;
2902 expr->value.function.name = sym->name;
2903 expr->value.function.esym = expr->symtree->n.sym;
2904
2905 if (sym->as != NULL)
2906 expr->rank = sym->as->rank;
2907
2908 /* Type of the expression is either the type of the symbol or the
2909 default type of the symbol. */
2910
2911 set_type:
2912 gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
2913
2914 if (sym->ts.type != BT_UNKNOWN)
2915 expr->ts = sym->ts;
2916 else
2917 {
2918 ts = gfc_get_default_type (sym->name, sym->ns);
2919
2920 if (ts->type == BT_UNKNOWN)
2921 {
2922 const char *guessed
2923 = gfc_lookup_function_fuzzy (sym->name, sym->ns->sym_root);
2924 if (guessed)
2925 gfc_error ("Function %qs at %L has no IMPLICIT type"
2926 "; did you mean %qs?",
2927 sym->name, &expr->where, guessed);
2928 else
2929 gfc_error ("Function %qs at %L has no IMPLICIT type",
2930 sym->name, &expr->where);
2931 return false;
2932 }
2933 else
2934 expr->ts = *ts;
2935 }
2936
2937 return true;
2938 }
2939
2940
2941 /* Return true, if the symbol is an external procedure. */
2942 static bool
2943 is_external_proc (gfc_symbol *sym)
2944 {
2945 if (!sym->attr.dummy && !sym->attr.contained
2946 && !gfc_is_intrinsic (sym, sym->attr.subroutine, sym->declared_at)
2947 && sym->attr.proc != PROC_ST_FUNCTION
2948 && !sym->attr.proc_pointer
2949 && !sym->attr.use_assoc
2950 && sym->name)
2951 return true;
2952
2953 return false;
2954 }
2955
2956
2957 /* Figure out if a function reference is pure or not. Also set the name
2958 of the function for a potential error message. Return nonzero if the
2959 function is PURE, zero if not. */
2960 static int
2961 pure_stmt_function (gfc_expr *, gfc_symbol *);
2962
2963 int
2964 gfc_pure_function (gfc_expr *e, const char **name)
2965 {
2966 int pure;
2967 gfc_component *comp;
2968
2969 *name = NULL;
2970
2971 if (e->symtree != NULL
2972 && e->symtree->n.sym != NULL
2973 && e->symtree->n.sym->attr.proc == PROC_ST_FUNCTION)
2974 return pure_stmt_function (e, e->symtree->n.sym);
2975
2976 comp = gfc_get_proc_ptr_comp (e);
2977 if (comp)
2978 {
2979 pure = gfc_pure (comp->ts.interface);
2980 *name = comp->name;
2981 }
2982 else if (e->value.function.esym)
2983 {
2984 pure = gfc_pure (e->value.function.esym);
2985 *name = e->value.function.esym->name;
2986 }
2987 else if (e->value.function.isym)
2988 {
2989 pure = e->value.function.isym->pure
2990 || e->value.function.isym->elemental;
2991 *name = e->value.function.isym->name;
2992 }
2993 else
2994 {
2995 /* Implicit functions are not pure. */
2996 pure = 0;
2997 *name = e->value.function.name;
2998 }
2999
3000 return pure;
3001 }
3002
3003
3004 /* Check if the expression is a reference to an implicitly pure function. */
3005
3006 int
3007 gfc_implicit_pure_function (gfc_expr *e)
3008 {
3009 gfc_component *comp = gfc_get_proc_ptr_comp (e);
3010 if (comp)
3011 return gfc_implicit_pure (comp->ts.interface);
3012 else if (e->value.function.esym)
3013 return gfc_implicit_pure (e->value.function.esym);
3014 else
3015 return 0;
3016 }
3017
3018
3019 static bool
3020 impure_stmt_fcn (gfc_expr *e, gfc_symbol *sym,
3021 int *f ATTRIBUTE_UNUSED)
3022 {
3023 const char *name;
3024
3025 /* Don't bother recursing into other statement functions
3026 since they will be checked individually for purity. */
3027 if (e->expr_type != EXPR_FUNCTION
3028 || !e->symtree
3029 || e->symtree->n.sym == sym
3030 || e->symtree->n.sym->attr.proc == PROC_ST_FUNCTION)
3031 return false;
3032
3033 return gfc_pure_function (e, &name) ? false : true;
3034 }
3035
3036
3037 static int
3038 pure_stmt_function (gfc_expr *e, gfc_symbol *sym)
3039 {
3040 return gfc_traverse_expr (e, sym, impure_stmt_fcn, 0) ? 0 : 1;
3041 }
3042
3043
3044 /* Check if an impure function is allowed in the current context. */
3045
3046 static bool check_pure_function (gfc_expr *e)
3047 {
3048 const char *name = NULL;
3049 if (!gfc_pure_function (e, &name) && name)
3050 {
3051 if (forall_flag)
3052 {
3053 gfc_error ("Reference to impure function %qs at %L inside a "
3054 "FORALL %s", name, &e->where,
3055 forall_flag == 2 ? "mask" : "block");
3056 return false;
3057 }
3058 else if (gfc_do_concurrent_flag)
3059 {
3060 gfc_error ("Reference to impure function %qs at %L inside a "
3061 "DO CONCURRENT %s", name, &e->where,
3062 gfc_do_concurrent_flag == 2 ? "mask" : "block");
3063 return false;
3064 }
3065 else if (gfc_pure (NULL))
3066 {
3067 gfc_error ("Reference to impure function %qs at %L "
3068 "within a PURE procedure", name, &e->where);
3069 return false;
3070 }
3071 if (!gfc_implicit_pure_function (e))
3072 gfc_unset_implicit_pure (NULL);
3073 }
3074 return true;
3075 }
3076
3077
3078 /* Update current procedure's array_outer_dependency flag, considering
3079 a call to procedure SYM. */
3080
3081 static void
3082 update_current_proc_array_outer_dependency (gfc_symbol *sym)
3083 {
3084 /* Check to see if this is a sibling function that has not yet
3085 been resolved. */
3086 gfc_namespace *sibling = gfc_current_ns->sibling;
3087 for (; sibling; sibling = sibling->sibling)
3088 {
3089 if (sibling->proc_name == sym)
3090 {
3091 gfc_resolve (sibling);
3092 break;
3093 }
3094 }
3095
3096 /* If SYM has references to outer arrays, so has the procedure calling
3097 SYM. If SYM is a procedure pointer, we can assume the worst. */
3098 if ((sym->attr.array_outer_dependency || sym->attr.proc_pointer)
3099 && gfc_current_ns->proc_name)
3100 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
3101 }
3102
3103
3104 /* Resolve a function call, which means resolving the arguments, then figuring
3105 out which entity the name refers to. */
3106
3107 static bool
3108 resolve_function (gfc_expr *expr)
3109 {
3110 gfc_actual_arglist *arg;
3111 gfc_symbol *sym;
3112 bool t;
3113 int temp;
3114 procedure_type p = PROC_INTRINSIC;
3115 bool no_formal_args;
3116
3117 sym = NULL;
3118 if (expr->symtree)
3119 sym = expr->symtree->n.sym;
3120
3121 /* If this is a procedure pointer component, it has already been resolved. */
3122 if (gfc_is_proc_ptr_comp (expr))
3123 return true;
3124
3125 /* Avoid re-resolving the arguments of caf_get, which can lead to inserting
3126 another caf_get. */
3127 if (sym && sym->attr.intrinsic
3128 && (sym->intmod_sym_id == GFC_ISYM_CAF_GET
3129 || sym->intmod_sym_id == GFC_ISYM_CAF_SEND))
3130 return true;
3131
3132 if (sym && sym->attr.intrinsic
3133 && !gfc_resolve_intrinsic (sym, &expr->where))
3134 return false;
3135
3136 if (sym && (sym->attr.flavor == FL_VARIABLE || sym->attr.subroutine))
3137 {
3138 gfc_error ("%qs at %L is not a function", sym->name, &expr->where);
3139 return false;
3140 }
3141
3142 /* If this is a deferred TBP with an abstract interface (which may
3143 of course be referenced), expr->value.function.esym will be set. */
3144 if (sym && sym->attr.abstract && !expr->value.function.esym)
3145 {
3146 gfc_error ("ABSTRACT INTERFACE %qs must not be referenced at %L",
3147 sym->name, &expr->where);
3148 return false;
3149 }
3150
3151 /* If this is a deferred TBP with an abstract interface, its result
3152 cannot be an assumed length character (F2003: C418). */
3153 if (sym && sym->attr.abstract && sym->attr.function
3154 && sym->result->ts.u.cl
3155 && sym->result->ts.u.cl->length == NULL
3156 && !sym->result->ts.deferred)
3157 {
3158 gfc_error ("ABSTRACT INTERFACE %qs at %L must not have an assumed "
3159 "character length result (F2008: C418)", sym->name,
3160 &sym->declared_at);
3161 return false;
3162 }
3163
3164 /* Switch off assumed size checking and do this again for certain kinds
3165 of procedure, once the procedure itself is resolved. */
3166 need_full_assumed_size++;
3167
3168 if (expr->symtree && expr->symtree->n.sym)
3169 p = expr->symtree->n.sym->attr.proc;
3170
3171 if (expr->value.function.isym && expr->value.function.isym->inquiry)
3172 inquiry_argument = true;
3173 no_formal_args = sym && is_external_proc (sym)
3174 && gfc_sym_get_dummy_args (sym) == NULL;
3175
3176 if (!resolve_actual_arglist (expr->value.function.actual,
3177 p, no_formal_args))
3178 {
3179 inquiry_argument = false;
3180 return false;
3181 }
3182
3183 inquiry_argument = false;
3184
3185 /* Resume assumed_size checking. */
3186 need_full_assumed_size--;
3187
3188 /* If the procedure is external, check for usage. */
3189 if (sym && is_external_proc (sym))
3190 resolve_global_procedure (sym, &expr->where, 0);
3191
3192 if (sym && sym->ts.type == BT_CHARACTER
3193 && sym->ts.u.cl
3194 && sym->ts.u.cl->length == NULL
3195 && !sym->attr.dummy
3196 && !sym->ts.deferred
3197 && expr->value.function.esym == NULL
3198 && !sym->attr.contained)
3199 {
3200 /* Internal procedures are taken care of in resolve_contained_fntype. */
3201 gfc_error ("Function %qs is declared CHARACTER(*) and cannot "
3202 "be used at %L since it is not a dummy argument",
3203 sym->name, &expr->where);
3204 return false;
3205 }
3206
3207 /* See if function is already resolved. */
3208
3209 if (expr->value.function.name != NULL
3210 || expr->value.function.isym != NULL)
3211 {
3212 if (expr->ts.type == BT_UNKNOWN)
3213 expr->ts = sym->ts;
3214 t = true;
3215 }
3216 else
3217 {
3218 /* Apply the rules of section 14.1.2. */
3219
3220 switch (procedure_kind (sym))
3221 {
3222 case PTYPE_GENERIC:
3223 t = resolve_generic_f (expr);
3224 break;
3225
3226 case PTYPE_SPECIFIC:
3227 t = resolve_specific_f (expr);
3228 break;
3229
3230 case PTYPE_UNKNOWN:
3231 t = resolve_unknown_f (expr);
3232 break;
3233
3234 default:
3235 gfc_internal_error ("resolve_function(): bad function type");
3236 }
3237 }
3238
3239 /* If the expression is still a function (it might have simplified),
3240 then we check to see if we are calling an elemental function. */
3241
3242 if (expr->expr_type != EXPR_FUNCTION)
3243 return t;
3244
3245 /* Walk the argument list looking for invalid BOZ. */
3246 if (expr->value.function.esym)
3247 {
3248 gfc_actual_arglist *a;
3249
3250 for (a = expr->value.function.actual; a; a = a->next)
3251 if (a->expr && a->expr->ts.type == BT_BOZ)
3252 {
3253 gfc_error ("A BOZ literal constant at %L cannot appear as an "
3254 "actual argument in a function reference",
3255 &a->expr->where);
3256 return false;
3257 }
3258 }
3259
3260 temp = need_full_assumed_size;
3261 need_full_assumed_size = 0;
3262
3263 if (!resolve_elemental_actual (expr, NULL))
3264 return false;
3265
3266 if (omp_workshare_flag
3267 && expr->value.function.esym
3268 && ! gfc_elemental (expr->value.function.esym))
3269 {
3270 gfc_error ("User defined non-ELEMENTAL function %qs at %L not allowed "
3271 "in WORKSHARE construct", expr->value.function.esym->name,
3272 &expr->where);
3273 t = false;
3274 }
3275
3276 #define GENERIC_ID expr->value.function.isym->id
3277 else if (expr->value.function.actual != NULL
3278 && expr->value.function.isym != NULL
3279 && GENERIC_ID != GFC_ISYM_LBOUND
3280 && GENERIC_ID != GFC_ISYM_LCOBOUND
3281 && GENERIC_ID != GFC_ISYM_UCOBOUND
3282 && GENERIC_ID != GFC_ISYM_LEN
3283 && GENERIC_ID != GFC_ISYM_LOC
3284 && GENERIC_ID != GFC_ISYM_C_LOC
3285 && GENERIC_ID != GFC_ISYM_PRESENT)
3286 {
3287 /* Array intrinsics must also have the last upper bound of an
3288 assumed size array argument. UBOUND and SIZE have to be
3289 excluded from the check if the second argument is anything
3290 than a constant. */
3291
3292 for (arg = expr->value.function.actual; arg; arg = arg->next)
3293 {
3294 if ((GENERIC_ID == GFC_ISYM_UBOUND || GENERIC_ID == GFC_ISYM_SIZE)
3295 && arg == expr->value.function.actual
3296 && arg->next != NULL && arg->next->expr)
3297 {
3298 if (arg->next->expr->expr_type != EXPR_CONSTANT)
3299 break;
3300
3301 if (arg->next->name && strcmp (arg->next->name, "kind") == 0)
3302 break;
3303
3304 if ((int)mpz_get_si (arg->next->expr->value.integer)
3305 < arg->expr->rank)
3306 break;
3307 }
3308
3309 if (arg->expr != NULL
3310 && arg->expr->rank > 0
3311 && resolve_assumed_size_actual (arg->expr))
3312 return false;
3313 }
3314 }
3315 #undef GENERIC_ID
3316
3317 need_full_assumed_size = temp;
3318
3319 if (!check_pure_function(expr))
3320 t = false;
3321
3322 /* Functions without the RECURSIVE attribution are not allowed to
3323 * call themselves. */
3324 if (expr->value.function.esym && !expr->value.function.esym->attr.recursive)
3325 {
3326 gfc_symbol *esym;
3327 esym = expr->value.function.esym;
3328
3329 if (is_illegal_recursion (esym, gfc_current_ns))
3330 {
3331 if (esym->attr.entry && esym->ns->entries)
3332 gfc_error ("ENTRY %qs at %L cannot be called recursively, as"
3333 " function %qs is not RECURSIVE",
3334 esym->name, &expr->where, esym->ns->entries->sym->name);
3335 else
3336 gfc_error ("Function %qs at %L cannot be called recursively, as it"
3337 " is not RECURSIVE", esym->name, &expr->where);
3338
3339 t = false;
3340 }
3341 }
3342
3343 /* Character lengths of use associated functions may contains references to
3344 symbols not referenced from the current program unit otherwise. Make sure
3345 those symbols are marked as referenced. */
3346
3347 if (expr->ts.type == BT_CHARACTER && expr->value.function.esym
3348 && expr->value.function.esym->attr.use_assoc)
3349 {
3350 gfc_expr_set_symbols_referenced (expr->ts.u.cl->length);
3351 }
3352
3353 /* Make sure that the expression has a typespec that works. */
3354 if (expr->ts.type == BT_UNKNOWN)
3355 {
3356 if (expr->symtree->n.sym->result
3357 && expr->symtree->n.sym->result->ts.type != BT_UNKNOWN
3358 && !expr->symtree->n.sym->result->attr.proc_pointer)
3359 expr->ts = expr->symtree->n.sym->result->ts;
3360 }
3361
3362 if (!expr->ref && !expr->value.function.isym)
3363 {
3364 if (expr->value.function.esym)
3365 update_current_proc_array_outer_dependency (expr->value.function.esym);
3366 else
3367 update_current_proc_array_outer_dependency (sym);
3368 }
3369 else if (expr->ref)
3370 /* typebound procedure: Assume the worst. */
3371 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
3372
3373 return t;
3374 }
3375
3376
3377 /************* Subroutine resolution *************/
3378
3379 static bool
3380 pure_subroutine (gfc_symbol *sym, const char *name, locus *loc)
3381 {
3382 if (gfc_pure (sym))
3383 return true;
3384
3385 if (forall_flag)
3386 {
3387 gfc_error ("Subroutine call to %qs in FORALL block at %L is not PURE",
3388 name, loc);
3389 return false;
3390 }
3391 else if (gfc_do_concurrent_flag)
3392 {
3393 gfc_error ("Subroutine call to %qs in DO CONCURRENT block at %L is not "
3394 "PURE", name, loc);
3395 return false;
3396 }
3397 else if (gfc_pure (NULL))
3398 {
3399 gfc_error ("Subroutine call to %qs at %L is not PURE", name, loc);
3400 return false;
3401 }
3402
3403 gfc_unset_implicit_pure (NULL);
3404 return true;
3405 }
3406
3407
3408 static match
3409 resolve_generic_s0 (gfc_code *c, gfc_symbol *sym)
3410 {
3411 gfc_symbol *s;
3412
3413 if (sym->attr.generic)
3414 {
3415 s = gfc_search_interface (sym->generic, 1, &c->ext.actual);
3416 if (s != NULL)
3417 {
3418 c->resolved_sym = s;
3419 if (!pure_subroutine (s, s->name, &c->loc))
3420 return MATCH_ERROR;
3421 return MATCH_YES;
3422 }
3423
3424 /* TODO: Need to search for elemental references in generic interface. */
3425 }
3426
3427 if (sym->attr.intrinsic)
3428 return gfc_intrinsic_sub_interface (c, 0);
3429
3430 return MATCH_NO;
3431 }
3432
3433
3434 static bool
3435 resolve_generic_s (gfc_code *c)
3436 {
3437 gfc_symbol *sym;
3438 match m;
3439
3440 sym = c->symtree->n.sym;
3441
3442 for (;;)
3443 {
3444 m = resolve_generic_s0 (c, sym);
3445 if (m == MATCH_YES)
3446 return true;
3447 else if (m == MATCH_ERROR)
3448 return false;
3449
3450 generic:
3451 if (sym->ns->parent == NULL)
3452 break;
3453 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
3454
3455 if (sym == NULL)
3456 break;
3457 if (!generic_sym (sym))
3458 goto generic;
3459 }
3460
3461 /* Last ditch attempt. See if the reference is to an intrinsic
3462 that possesses a matching interface. 14.1.2.4 */
3463 sym = c->symtree->n.sym;
3464
3465 if (!gfc_is_intrinsic (sym, 1, c->loc))
3466 {
3467 gfc_error ("There is no specific subroutine for the generic %qs at %L",
3468 sym->name, &c->loc);
3469 return false;
3470 }
3471
3472 m = gfc_intrinsic_sub_interface (c, 0);
3473 if (m == MATCH_YES)
3474 return true;
3475 if (m == MATCH_NO)
3476 gfc_error ("Generic subroutine %qs at %L is not consistent with an "
3477 "intrinsic subroutine interface", sym->name, &c->loc);
3478
3479 return false;
3480 }
3481
3482
3483 /* Resolve a subroutine call known to be specific. */
3484
3485 static match
3486 resolve_specific_s0 (gfc_code *c, gfc_symbol *sym)
3487 {
3488 match m;
3489
3490 if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
3491 {
3492 if (sym->attr.dummy)
3493 {
3494 sym->attr.proc = PROC_DUMMY;
3495 goto found;
3496 }
3497
3498 sym->attr.proc = PROC_EXTERNAL;
3499 goto found;
3500 }
3501
3502 if (sym->attr.proc == PROC_MODULE || sym->attr.proc == PROC_INTERNAL)
3503 goto found;
3504
3505 if (sym->attr.intrinsic)
3506 {
3507 m = gfc_intrinsic_sub_interface (c, 1);
3508 if (m == MATCH_YES)
3509 return MATCH_YES;
3510 if (m == MATCH_NO)
3511 gfc_error ("Subroutine %qs at %L is INTRINSIC but is not compatible "
3512 "with an intrinsic", sym->name, &c->loc);
3513
3514 return MATCH_ERROR;
3515 }
3516
3517 return MATCH_NO;
3518
3519 found:
3520 gfc_procedure_use (sym, &c->ext.actual, &c->loc);
3521
3522 c->resolved_sym = sym;
3523 if (!pure_subroutine (sym, sym->name, &c->loc))
3524 return MATCH_ERROR;
3525
3526 return MATCH_YES;
3527 }
3528
3529
3530 static bool
3531 resolve_specific_s (gfc_code *c)
3532 {
3533 gfc_symbol *sym;
3534 match m;
3535
3536 sym = c->symtree->n.sym;
3537
3538 for (;;)
3539 {
3540 m = resolve_specific_s0 (c, sym);
3541 if (m == MATCH_YES)
3542 return true;
3543 if (m == MATCH_ERROR)
3544 return false;
3545
3546 if (sym->ns->parent == NULL)
3547 break;
3548
3549 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
3550
3551 if (sym == NULL)
3552 break;
3553 }
3554
3555 sym = c->symtree->n.sym;
3556 gfc_error ("Unable to resolve the specific subroutine %qs at %L",
3557 sym->name, &c->loc);
3558
3559 return false;
3560 }
3561
3562
3563 /* Resolve a subroutine call not known to be generic nor specific. */
3564
3565 static bool
3566 resolve_unknown_s (gfc_code *c)
3567 {
3568 gfc_symbol *sym;
3569
3570 sym = c->symtree->n.sym;
3571
3572 if (sym->attr.dummy)
3573 {
3574 sym->attr.proc = PROC_DUMMY;
3575 goto found;
3576 }
3577
3578 /* See if we have an intrinsic function reference. */
3579
3580 if (gfc_is_intrinsic (sym, 1, c->loc))
3581 {
3582 if (gfc_intrinsic_sub_interface (c, 1) == MATCH_YES)
3583 return true;
3584 return false;
3585 }
3586
3587 /* The reference is to an external name. */
3588
3589 found:
3590 gfc_procedure_use (sym, &c->ext.actual, &c->loc);
3591
3592 c->resolved_sym = sym;
3593
3594 return pure_subroutine (sym, sym->name, &c->loc);
3595 }
3596
3597
3598 /* Resolve a subroutine call. Although it was tempting to use the same code
3599 for functions, subroutines and functions are stored differently and this
3600 makes things awkward. */
3601
3602 static bool
3603 resolve_call (gfc_code *c)
3604 {
3605 bool t;
3606 procedure_type ptype = PROC_INTRINSIC;
3607 gfc_symbol *csym, *sym;
3608 bool no_formal_args;
3609
3610 csym = c->symtree ? c->symtree->n.sym : NULL;
3611
3612 if (csym && csym->ts.type != BT_UNKNOWN)
3613 {
3614 gfc_error ("%qs at %L has a type, which is not consistent with "
3615 "the CALL at %L", csym->name, &csym->declared_at, &c->loc);
3616 return false;
3617 }
3618
3619 if (csym && gfc_current_ns->parent && csym->ns != gfc_current_ns)
3620 {
3621 gfc_symtree *st;
3622 gfc_find_sym_tree (c->symtree->name, gfc_current_ns, 1, &st);
3623 sym = st ? st->n.sym : NULL;
3624 if (sym && csym != sym
3625 && sym->ns == gfc_current_ns
3626 && sym->attr.flavor == FL_PROCEDURE
3627 && sym->attr.contained)
3628 {
3629 sym->refs++;
3630 if (csym->attr.generic)
3631 c->symtree->n.sym = sym;
3632 else
3633 c->symtree = st;
3634 csym = c->symtree->n.sym;
3635 }
3636 }
3637
3638 /* If this ia a deferred TBP, c->expr1 will be set. */
3639 if (!c->expr1 && csym)
3640 {
3641 if (csym->attr.abstract)
3642 {
3643 gfc_error ("ABSTRACT INTERFACE %qs must not be referenced at %L",
3644 csym->name, &c->loc);
3645 return false;
3646 }
3647
3648 /* Subroutines without the RECURSIVE attribution are not allowed to
3649 call themselves. */
3650 if (is_illegal_recursion (csym, gfc_current_ns))
3651 {
3652 if (csym->attr.entry && csym->ns->entries)
3653 gfc_error ("ENTRY %qs at %L cannot be called recursively, "
3654 "as subroutine %qs is not RECURSIVE",
3655 csym->name, &c->loc, csym->ns->entries->sym->name);
3656 else
3657 gfc_error ("SUBROUTINE %qs at %L cannot be called recursively, "
3658 "as it is not RECURSIVE", csym->name, &c->loc);
3659
3660 t = false;
3661 }
3662 }
3663
3664 /* Switch off assumed size checking and do this again for certain kinds
3665 of procedure, once the procedure itself is resolved. */
3666 need_full_assumed_size++;
3667
3668 if (csym)
3669 ptype = csym->attr.proc;
3670
3671 no_formal_args = csym && is_external_proc (csym)
3672 && gfc_sym_get_dummy_args (csym) == NULL;
3673 if (!resolve_actual_arglist (c->ext.actual, ptype, no_formal_args))
3674 return false;
3675
3676 /* Resume assumed_size checking. */
3677 need_full_assumed_size--;
3678
3679 /* If external, check for usage. */
3680 if (csym && is_external_proc (csym))
3681 resolve_global_procedure (csym, &c->loc, 1);
3682
3683 t = true;
3684 if (c->resolved_sym == NULL)
3685 {
3686 c->resolved_isym = NULL;
3687 switch (procedure_kind (csym))
3688 {
3689 case PTYPE_GENERIC:
3690 t = resolve_generic_s (c);
3691 break;
3692
3693 case PTYPE_SPECIFIC:
3694 t = resolve_specific_s (c);
3695 break;
3696
3697 case PTYPE_UNKNOWN:
3698 t = resolve_unknown_s (c);
3699 break;
3700
3701 default:
3702 gfc_internal_error ("resolve_subroutine(): bad function type");
3703 }
3704 }
3705
3706 /* Some checks of elemental subroutine actual arguments. */
3707 if (!resolve_elemental_actual (NULL, c))
3708 return false;
3709
3710 if (!c->expr1)
3711 update_current_proc_array_outer_dependency (csym);
3712 else
3713 /* Typebound procedure: Assume the worst. */
3714 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
3715
3716 return t;
3717 }
3718
3719
3720 /* Compare the shapes of two arrays that have non-NULL shapes. If both
3721 op1->shape and op2->shape are non-NULL return true if their shapes
3722 match. If both op1->shape and op2->shape are non-NULL return false
3723 if their shapes do not match. If either op1->shape or op2->shape is
3724 NULL, return true. */
3725
3726 static bool
3727 compare_shapes (gfc_expr *op1, gfc_expr *op2)
3728 {
3729 bool t;
3730 int i;
3731
3732 t = true;
3733
3734 if (op1->shape != NULL && op2->shape != NULL)
3735 {
3736 for (i = 0; i < op1->rank; i++)
3737 {
3738 if (mpz_cmp (op1->shape[i], op2->shape[i]) != 0)
3739 {
3740 gfc_error ("Shapes for operands at %L and %L are not conformable",
3741 &op1->where, &op2->where);
3742 t = false;
3743 break;
3744 }
3745 }
3746 }
3747
3748 return t;
3749 }
3750
3751 /* Convert a logical operator to the corresponding bitwise intrinsic call.
3752 For example A .AND. B becomes IAND(A, B). */
3753 static gfc_expr *
3754 logical_to_bitwise (gfc_expr *e)
3755 {
3756 gfc_expr *tmp, *op1, *op2;
3757 gfc_isym_id isym;
3758 gfc_actual_arglist *args = NULL;
3759
3760 gcc_assert (e->expr_type == EXPR_OP);
3761
3762 isym = GFC_ISYM_NONE;
3763 op1 = e->value.op.op1;
3764 op2 = e->value.op.op2;
3765
3766 switch (e->value.op.op)
3767 {
3768 case INTRINSIC_NOT:
3769 isym = GFC_ISYM_NOT;
3770 break;
3771 case INTRINSIC_AND:
3772 isym = GFC_ISYM_IAND;
3773 break;
3774 case INTRINSIC_OR:
3775 isym = GFC_ISYM_IOR;
3776 break;
3777 case INTRINSIC_NEQV:
3778 isym = GFC_ISYM_IEOR;
3779 break;
3780 case INTRINSIC_EQV:
3781 /* "Bitwise eqv" is just the complement of NEQV === IEOR.
3782 Change the old expression to NEQV, which will get replaced by IEOR,
3783 and wrap it in NOT. */
3784 tmp = gfc_copy_expr (e);
3785 tmp->value.op.op = INTRINSIC_NEQV;
3786 tmp = logical_to_bitwise (tmp);
3787 isym = GFC_ISYM_NOT;
3788 op1 = tmp;
3789 op2 = NULL;
3790 break;
3791 default:
3792 gfc_internal_error ("logical_to_bitwise(): Bad intrinsic");
3793 }
3794
3795 /* Inherit the original operation's operands as arguments. */
3796 args = gfc_get_actual_arglist ();
3797 args->expr = op1;
3798 if (op2)
3799 {
3800 args->next = gfc_get_actual_arglist ();
3801 args->next->expr = op2;
3802 }
3803
3804 /* Convert the expression to a function call. */
3805 e->expr_type = EXPR_FUNCTION;
3806 e->value.function.actual = args;
3807 e->value.function.isym = gfc_intrinsic_function_by_id (isym);
3808 e->value.function.name = e->value.function.isym->name;
3809 e->value.function.esym = NULL;
3810
3811 /* Make up a pre-resolved function call symtree if we need to. */
3812 if (!e->symtree || !e->symtree->n.sym)
3813 {
3814 gfc_symbol *sym;
3815 gfc_get_ha_sym_tree (e->value.function.isym->name, &e->symtree);
3816 sym = e->symtree->n.sym;
3817 sym->result = sym;
3818 sym->attr.flavor = FL_PROCEDURE;
3819 sym->attr.function = 1;
3820 sym->attr.elemental = 1;
3821 sym->attr.pure = 1;
3822 sym->attr.referenced = 1;
3823 gfc_intrinsic_symbol (sym);
3824 gfc_commit_symbol (sym);
3825 }
3826
3827 args->name = e->value.function.isym->formal->name;
3828 if (e->value.function.isym->formal->next)
3829 args->next->name = e->value.function.isym->formal->next->name;
3830
3831 return e;
3832 }
3833
3834 /* Recursively append candidate UOP to CANDIDATES. Store the number of
3835 candidates in CANDIDATES_LEN. */
3836 static void
3837 lookup_uop_fuzzy_find_candidates (gfc_symtree *uop,
3838 char **&candidates,
3839 size_t &candidates_len)
3840 {
3841 gfc_symtree *p;
3842
3843 if (uop == NULL)
3844 return;
3845
3846 /* Not sure how to properly filter here. Use all for a start.
3847 n.uop.op is NULL for empty interface operators (is that legal?) disregard
3848 these as i suppose they don't make terribly sense. */
3849
3850 if (uop->n.uop->op != NULL)
3851 vec_push (candidates, candidates_len, uop->name);
3852
3853 p = uop->left;
3854 if (p)
3855 lookup_uop_fuzzy_find_candidates (p, candidates, candidates_len);
3856
3857 p = uop->right;
3858 if (p)
3859 lookup_uop_fuzzy_find_candidates (p, candidates, candidates_len);
3860 }
3861
3862 /* Lookup user-operator OP fuzzily, taking names in UOP into account. */
3863
3864 static const char*
3865 lookup_uop_fuzzy (const char *op, gfc_symtree *uop)
3866 {
3867 char **candidates = NULL;
3868 size_t candidates_len = 0;
3869 lookup_uop_fuzzy_find_candidates (uop, candidates, candidates_len);
3870 return gfc_closest_fuzzy_match (op, candidates);
3871 }
3872
3873
3874 /* Callback finding an impure function as an operand to an .and. or
3875 .or. expression. Remember the last function warned about to
3876 avoid double warnings when recursing. */
3877
3878 static int
3879 impure_function_callback (gfc_expr **e, int *walk_subtrees ATTRIBUTE_UNUSED,
3880 void *data)
3881 {
3882 gfc_expr *f = *e;
3883 const char *name;
3884 static gfc_expr *last = NULL;
3885 bool *found = (bool *) data;
3886
3887 if (f->expr_type == EXPR_FUNCTION)
3888 {
3889 *found = 1;
3890 if (f != last && !gfc_pure_function (f, &name)
3891 && !gfc_implicit_pure_function (f))
3892 {
3893 if (name)
3894 gfc_warning (OPT_Wfunction_elimination,
3895 "Impure function %qs at %L might not be evaluated",
3896 name, &f->where);
3897 else
3898 gfc_warning (OPT_Wfunction_elimination,
3899 "Impure function at %L might not be evaluated",
3900 &f->where);
3901 }
3902 last = f;
3903 }
3904
3905 return 0;
3906 }
3907
3908
3909 /* Resolve an operator expression node. This can involve replacing the
3910 operation with a user defined function call. */
3911
3912 static bool
3913 resolve_operator (gfc_expr *e)
3914 {
3915 gfc_expr *op1, *op2;
3916 char msg[200];
3917 bool dual_locus_error;
3918 bool t = true;
3919
3920 /* Resolve all subnodes-- give them types. */
3921
3922 switch (e->value.op.op)
3923 {
3924 default:
3925 if (!gfc_resolve_expr (e->value.op.op2))
3926 return false;
3927
3928 /* Fall through. */
3929
3930 case INTRINSIC_NOT:
3931 case INTRINSIC_UPLUS:
3932 case INTRINSIC_UMINUS:
3933 case INTRINSIC_PARENTHESES:
3934 if (!gfc_resolve_expr (e->value.op.op1))
3935 return false;
3936 if (e->value.op.op1
3937 && e->value.op.op1->ts.type == BT_BOZ && !e->value.op.op2)
3938 {
3939 gfc_error ("BOZ literal constant at %L cannot be an operand of "
3940 "unary operator %qs", &e->value.op.op1->where,
3941 gfc_op2string (e->value.op.op));
3942 return false;
3943 }
3944 break;
3945 }
3946
3947 /* Typecheck the new node. */
3948
3949 op1 = e->value.op.op1;
3950 op2 = e->value.op.op2;
3951 dual_locus_error = false;
3952
3953 /* op1 and op2 cannot both be BOZ. */
3954 if (op1 && op1->ts.type == BT_BOZ
3955 && op2 && op2->ts.type == BT_BOZ)
3956 {
3957 gfc_error ("Operands at %L and %L cannot appear as operands of "
3958 "binary operator %qs", &op1->where, &op2->where,
3959 gfc_op2string (e->value.op.op));
3960 return false;
3961 }
3962
3963 if ((op1 && op1->expr_type == EXPR_NULL)
3964 || (op2 && op2->expr_type == EXPR_NULL))
3965 {
3966 sprintf (msg, _("Invalid context for NULL() pointer at %%L"));
3967 goto bad_op;
3968 }
3969
3970 switch (e->value.op.op)
3971 {
3972 case INTRINSIC_UPLUS:
3973 case INTRINSIC_UMINUS:
3974 if (op1->ts.type == BT_INTEGER
3975 || op1->ts.type == BT_REAL
3976 || op1->ts.type == BT_COMPLEX)
3977 {
3978 e->ts = op1->ts;
3979 break;
3980 }
3981
3982 sprintf (msg, _("Operand of unary numeric operator %%<%s%%> at %%L is %s"),
3983 gfc_op2string (e->value.op.op), gfc_typename (e));
3984 goto bad_op;
3985
3986 case INTRINSIC_PLUS:
3987 case INTRINSIC_MINUS:
3988 case INTRINSIC_TIMES:
3989 case INTRINSIC_DIVIDE:
3990 case INTRINSIC_POWER:
3991 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
3992 {
3993 gfc_type_convert_binary (e, 1);
3994 break;
3995 }
3996
3997 if (op1->ts.type == BT_DERIVED || op2->ts.type == BT_DERIVED)
3998 sprintf (msg,
3999 _("Unexpected derived-type entities in binary intrinsic "
4000 "numeric operator %%<%s%%> at %%L"),
4001 gfc_op2string (e->value.op.op));
4002 else
4003 sprintf (msg,
4004 _("Operands of binary numeric operator %%<%s%%> at %%L are %s/%s"),
4005 gfc_op2string (e->value.op.op), gfc_typename (op1),
4006 gfc_typename (op2));
4007 goto bad_op;
4008
4009 case INTRINSIC_CONCAT:
4010 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
4011 && op1->ts.kind == op2->ts.kind)
4012 {
4013 e->ts.type = BT_CHARACTER;
4014 e->ts.kind = op1->ts.kind;
4015 break;
4016 }
4017
4018 sprintf (msg,
4019 _("Operands of string concatenation operator at %%L are %s/%s"),
4020 gfc_typename (op1), gfc_typename (op2));
4021 goto bad_op;
4022
4023 case INTRINSIC_AND:
4024 case INTRINSIC_OR:
4025 case INTRINSIC_EQV:
4026 case INTRINSIC_NEQV:
4027 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
4028 {
4029 e->ts.type = BT_LOGICAL;
4030 e->ts.kind = gfc_kind_max (op1, op2);
4031 if (op1->ts.kind < e->ts.kind)
4032 gfc_convert_type (op1, &e->ts, 2);
4033 else if (op2->ts.kind < e->ts.kind)
4034 gfc_convert_type (op2, &e->ts, 2);
4035
4036 if (flag_frontend_optimize &&
4037 (e->value.op.op == INTRINSIC_AND || e->value.op.op == INTRINSIC_OR))
4038 {
4039 /* Warn about short-circuiting
4040 with impure function as second operand. */
4041 bool op2_f = false;
4042 gfc_expr_walker (&op2, impure_function_callback, &op2_f);
4043 }
4044 break;
4045 }
4046
4047 /* Logical ops on integers become bitwise ops with -fdec. */
4048 else if (flag_dec
4049 && (op1->ts.type == BT_INTEGER || op2->ts.type == BT_INTEGER))
4050 {
4051 e->ts.type = BT_INTEGER;
4052 e->ts.kind = gfc_kind_max (op1, op2);
4053 if (op1->ts.type != e->ts.type || op1->ts.kind != e->ts.kind)
4054 gfc_convert_type (op1, &e->ts, 1);
4055 if (op2->ts.type != e->ts.type || op2->ts.kind != e->ts.kind)
4056 gfc_convert_type (op2, &e->ts, 1);
4057 e = logical_to_bitwise (e);
4058 goto simplify_op;
4059 }
4060
4061 sprintf (msg, _("Operands of logical operator %%<%s%%> at %%L are %s/%s"),
4062 gfc_op2string (e->value.op.op), gfc_typename (op1),
4063 gfc_typename (op2));
4064
4065 goto bad_op;
4066
4067 case INTRINSIC_NOT:
4068 /* Logical ops on integers become bitwise ops with -fdec. */
4069 if (flag_dec && op1->ts.type == BT_INTEGER)
4070 {
4071 e->ts.type = BT_INTEGER;
4072 e->ts.kind = op1->ts.kind;
4073 e = logical_to_bitwise (e);
4074 goto simplify_op;
4075 }
4076
4077 if (op1->ts.type == BT_LOGICAL)
4078 {
4079 e->ts.type = BT_LOGICAL;
4080 e->ts.kind = op1->ts.kind;
4081 break;
4082 }
4083
4084 sprintf (msg, _("Operand of .not. operator at %%L is %s"),
4085 gfc_typename (op1));
4086 goto bad_op;
4087
4088 case INTRINSIC_GT:
4089 case INTRINSIC_GT_OS:
4090 case INTRINSIC_GE:
4091 case INTRINSIC_GE_OS:
4092 case INTRINSIC_LT:
4093 case INTRINSIC_LT_OS:
4094 case INTRINSIC_LE:
4095 case INTRINSIC_LE_OS:
4096 if (op1->ts.type == BT_COMPLEX || op2->ts.type == BT_COMPLEX)
4097 {
4098 strcpy (msg, _("COMPLEX quantities cannot be compared at %L"));
4099 goto bad_op;
4100 }
4101
4102 /* Fall through. */
4103
4104 case INTRINSIC_EQ:
4105 case INTRINSIC_EQ_OS:
4106 case INTRINSIC_NE:
4107 case INTRINSIC_NE_OS:
4108 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
4109 && op1->ts.kind == op2->ts.kind)
4110 {
4111 e->ts.type = BT_LOGICAL;
4112 e->ts.kind = gfc_default_logical_kind;
4113 break;
4114 }
4115
4116 /* If op1 is BOZ, then op2 is not!. Try to convert to type of op2. */
4117 if (op1->ts.type == BT_BOZ)
4118 {
4119 if (gfc_invalid_boz ("BOZ literal constant near %L cannot appear as "
4120 "an operand of a relational operator",
4121 &op1->where))
4122 return false;
4123
4124 if (op2->ts.type == BT_INTEGER && !gfc_boz2int (op1, op2->ts.kind))
4125 return false;
4126
4127 if (op2->ts.type == BT_REAL && !gfc_boz2real (op1, op2->ts.kind))
4128 return false;
4129 }
4130
4131 /* If op2 is BOZ, then op1 is not!. Try to convert to type of op2. */
4132 if (op2->ts.type == BT_BOZ)
4133 {
4134 if (gfc_invalid_boz ("BOZ literal constant near %L cannot appear as "
4135 "an operand of a relational operator",
4136 &op2->where))
4137 return false;
4138
4139 if (op1->ts.type == BT_INTEGER && !gfc_boz2int (op2, op1->ts.kind))
4140 return false;
4141
4142 if (op1->ts.type == BT_REAL && !gfc_boz2real (op2, op1->ts.kind))
4143 return false;
4144 }
4145
4146 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
4147 {
4148 gfc_type_convert_binary (e, 1);
4149
4150 e->ts.type = BT_LOGICAL;
4151 e->ts.kind = gfc_default_logical_kind;
4152
4153 if (warn_compare_reals)
4154 {
4155 gfc_intrinsic_op op = e->value.op.op;
4156
4157 /* Type conversion has made sure that the types of op1 and op2
4158 agree, so it is only necessary to check the first one. */
4159 if ((op1->ts.type == BT_REAL || op1->ts.type == BT_COMPLEX)
4160 && (op == INTRINSIC_EQ || op == INTRINSIC_EQ_OS
4161 || op == INTRINSIC_NE || op == INTRINSIC_NE_OS))
4162 {
4163 const char *msg;
4164
4165 if (op == INTRINSIC_EQ || op == INTRINSIC_EQ_OS)
4166 msg = "Equality comparison for %s at %L";
4167 else
4168 msg = "Inequality comparison for %s at %L";
4169
4170 gfc_warning (OPT_Wcompare_reals, msg,
4171 gfc_typename (op1), &op1->where);
4172 }
4173 }
4174
4175 break;
4176 }
4177
4178 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
4179 sprintf (msg,
4180 _("Logicals at %%L must be compared with %s instead of %s"),
4181 (e->value.op.op == INTRINSIC_EQ
4182 || e->value.op.op == INTRINSIC_EQ_OS)
4183 ? ".eqv." : ".neqv.", gfc_op2string (e->value.op.op));
4184 else
4185 sprintf (msg,
4186 _("Operands of comparison operator %%<%s%%> at %%L are %s/%s"),
4187 gfc_op2string (e->value.op.op), gfc_typename (op1),
4188 gfc_typename (op2));
4189
4190 goto bad_op;
4191
4192 case INTRINSIC_USER:
4193 if (e->value.op.uop->op == NULL)
4194 {
4195 const char *name = e->value.op.uop->name;
4196 const char *guessed;
4197 guessed = lookup_uop_fuzzy (name, e->value.op.uop->ns->uop_root);
4198 if (guessed)
4199 sprintf (msg, _("Unknown operator %%<%s%%> at %%L; did you mean '%s'?"),
4200 name, guessed);
4201 else
4202 sprintf (msg, _("Unknown operator %%<%s%%> at %%L"), name);
4203 }
4204 else if (op2 == NULL)
4205 sprintf (msg, _("Operand of user operator %%<%s%%> at %%L is %s"),
4206 e->value.op.uop->name, gfc_typename (op1));
4207 else
4208 {
4209 sprintf (msg, _("Operands of user operator %%<%s%%> at %%L are %s/%s"),
4210 e->value.op.uop->name, gfc_typename (op1),
4211 gfc_typename (op2));
4212 e->value.op.uop->op->sym->attr.referenced = 1;
4213 }
4214
4215 goto bad_op;
4216
4217 case INTRINSIC_PARENTHESES:
4218 e->ts = op1->ts;
4219 if (e->ts.type == BT_CHARACTER)
4220 e->ts.u.cl = op1->ts.u.cl;
4221 break;
4222
4223 default:
4224 gfc_internal_error ("resolve_operator(): Bad intrinsic");
4225 }
4226
4227 /* Deal with arrayness of an operand through an operator. */
4228
4229 switch (e->value.op.op)
4230 {
4231 case INTRINSIC_PLUS:
4232 case INTRINSIC_MINUS:
4233 case INTRINSIC_TIMES:
4234 case INTRINSIC_DIVIDE:
4235 case INTRINSIC_POWER:
4236 case INTRINSIC_CONCAT:
4237 case INTRINSIC_AND:
4238 case INTRINSIC_OR:
4239 case INTRINSIC_EQV:
4240 case INTRINSIC_NEQV:
4241 case INTRINSIC_EQ:
4242 case INTRINSIC_EQ_OS:
4243 case INTRINSIC_NE:
4244 case INTRINSIC_NE_OS:
4245 case INTRINSIC_GT:
4246 case INTRINSIC_GT_OS:
4247 case INTRINSIC_GE:
4248 case INTRINSIC_GE_OS:
4249 case INTRINSIC_LT:
4250 case INTRINSIC_LT_OS:
4251 case INTRINSIC_LE:
4252 case INTRINSIC_LE_OS:
4253
4254 if (op1->rank == 0 && op2->rank == 0)
4255 e->rank = 0;
4256
4257 if (op1->rank == 0 && op2->rank != 0)
4258 {
4259 e->rank = op2->rank;
4260
4261 if (e->shape == NULL)
4262 e->shape = gfc_copy_shape (op2->shape, op2->rank);
4263 }
4264
4265 if (op1->rank != 0 && op2->rank == 0)
4266 {
4267 e->rank = op1->rank;
4268
4269 if (e->shape == NULL)
4270 e->shape = gfc_copy_shape (op1->shape, op1->rank);
4271 }
4272
4273 if (op1->rank != 0 && op2->rank != 0)
4274 {
4275 if (op1->rank == op2->rank)
4276 {
4277 e->rank = op1->rank;
4278 if (e->shape == NULL)
4279 {
4280 t = compare_shapes (op1, op2);
4281 if (!t)
4282 e->shape = NULL;
4283 else
4284 e->shape = gfc_copy_shape (op1->shape, op1->rank);
4285 }
4286 }
4287 else
4288 {
4289 /* Allow higher level expressions to work. */
4290 e->rank = 0;
4291
4292 /* Try user-defined operators, and otherwise throw an error. */
4293 dual_locus_error = true;
4294 sprintf (msg,
4295 _("Inconsistent ranks for operator at %%L and %%L"));
4296 goto bad_op;
4297 }
4298 }
4299
4300 break;
4301
4302 case INTRINSIC_PARENTHESES:
4303 case INTRINSIC_NOT:
4304 case INTRINSIC_UPLUS:
4305 case INTRINSIC_UMINUS:
4306 /* Simply copy arrayness attribute */
4307 e->rank = op1->rank;
4308
4309 if (e->shape == NULL)
4310 e->shape = gfc_copy_shape (op1->shape, op1->rank);
4311
4312 break;
4313
4314 default:
4315 break;
4316 }
4317
4318 simplify_op:
4319
4320 /* Attempt to simplify the expression. */
4321 if (t)
4322 {
4323 t = gfc_simplify_expr (e, 0);
4324 /* Some calls do not succeed in simplification and return false
4325 even though there is no error; e.g. variable references to
4326 PARAMETER arrays. */
4327 if (!gfc_is_constant_expr (e))
4328 t = true;
4329 }
4330 return t;
4331
4332 bad_op:
4333
4334 {
4335 match m = gfc_extend_expr (e);
4336 if (m == MATCH_YES)
4337 return true;
4338 if (m == MATCH_ERROR)
4339 return false;
4340 }
4341
4342 if (dual_locus_error)
4343 gfc_error (msg, &op1->where, &op2->where);
4344 else
4345 gfc_error (msg, &e->where);
4346
4347 return false;
4348 }
4349
4350
4351 /************** Array resolution subroutines **************/
4352
4353 enum compare_result
4354 { CMP_LT, CMP_EQ, CMP_GT, CMP_UNKNOWN };
4355
4356 /* Compare two integer expressions. */
4357
4358 static compare_result
4359 compare_bound (gfc_expr *a, gfc_expr *b)
4360 {
4361 int i;
4362
4363 if (a == NULL || a->expr_type != EXPR_CONSTANT
4364 || b == NULL || b->expr_type != EXPR_CONSTANT)
4365 return CMP_UNKNOWN;
4366
4367 /* If either of the types isn't INTEGER, we must have
4368 raised an error earlier. */
4369
4370 if (a->ts.type != BT_INTEGER || b->ts.type != BT_INTEGER)
4371 return CMP_UNKNOWN;
4372
4373 i = mpz_cmp (a->value.integer, b->value.integer);
4374
4375 if (i < 0)
4376 return CMP_LT;
4377 if (i > 0)
4378 return CMP_GT;
4379 return CMP_EQ;
4380 }
4381
4382
4383 /* Compare an integer expression with an integer. */
4384
4385 static compare_result
4386 compare_bound_int (gfc_expr *a, int b)
4387 {
4388 int i;
4389
4390 if (a == NULL || a->expr_type != EXPR_CONSTANT)
4391 return CMP_UNKNOWN;
4392
4393 if (a->ts.type != BT_INTEGER)
4394 gfc_internal_error ("compare_bound_int(): Bad expression");
4395
4396 i = mpz_cmp_si (a->value.integer, b);
4397
4398 if (i < 0)
4399 return CMP_LT;
4400 if (i > 0)
4401 return CMP_GT;
4402 return CMP_EQ;
4403 }
4404
4405
4406 /* Compare an integer expression with a mpz_t. */
4407
4408 static compare_result
4409 compare_bound_mpz_t (gfc_expr *a, mpz_t b)
4410 {
4411 int i;
4412
4413 if (a == NULL || a->expr_type != EXPR_CONSTANT)
4414 return CMP_UNKNOWN;
4415
4416 if (a->ts.type != BT_INTEGER)
4417 gfc_internal_error ("compare_bound_int(): Bad expression");
4418
4419 i = mpz_cmp (a->value.integer, b);
4420
4421 if (i < 0)
4422 return CMP_LT;
4423 if (i > 0)
4424 return CMP_GT;
4425 return CMP_EQ;
4426 }
4427
4428
4429 /* Compute the last value of a sequence given by a triplet.
4430 Return 0 if it wasn't able to compute the last value, or if the
4431 sequence if empty, and 1 otherwise. */
4432
4433 static int
4434 compute_last_value_for_triplet (gfc_expr *start, gfc_expr *end,
4435 gfc_expr *stride, mpz_t last)
4436 {
4437 mpz_t rem;
4438
4439 if (start == NULL || start->expr_type != EXPR_CONSTANT
4440 || end == NULL || end->expr_type != EXPR_CONSTANT
4441 || (stride != NULL && stride->expr_type != EXPR_CONSTANT))
4442 return 0;
4443
4444 if (start->ts.type != BT_INTEGER || end->ts.type != BT_INTEGER
4445 || (stride != NULL && stride->ts.type != BT_INTEGER))
4446 return 0;
4447
4448 if (stride == NULL || compare_bound_int (stride, 1) == CMP_EQ)
4449 {
4450 if (compare_bound (start, end) == CMP_GT)
4451 return 0;
4452 mpz_set (last, end->value.integer);
4453 return 1;
4454 }
4455
4456 if (compare_bound_int (stride, 0) == CMP_GT)
4457 {
4458 /* Stride is positive */
4459 if (mpz_cmp (start->value.integer, end->value.integer) > 0)
4460 return 0;
4461 }
4462 else
4463 {
4464 /* Stride is negative */
4465 if (mpz_cmp (start->value.integer, end->value.integer) < 0)
4466 return 0;
4467 }
4468
4469 mpz_init (rem);
4470 mpz_sub (rem, end->value.integer, start->value.integer);
4471 mpz_tdiv_r (rem, rem, stride->value.integer);
4472 mpz_sub (last, end->value.integer, rem);
4473 mpz_clear (rem);
4474
4475 return 1;
4476 }
4477
4478
4479 /* Compare a single dimension of an array reference to the array
4480 specification. */
4481
4482 static bool
4483 check_dimension (int i, gfc_array_ref *ar, gfc_array_spec *as)
4484 {
4485 mpz_t last_value;
4486
4487 if (ar->dimen_type[i] == DIMEN_STAR)
4488 {
4489 gcc_assert (ar->stride[i] == NULL);
4490 /* This implies [*] as [*:] and [*:3] are not possible. */
4491 if (ar->start[i] == NULL)
4492 {
4493 gcc_assert (ar->end[i] == NULL);
4494 return true;
4495 }
4496 }
4497
4498 /* Given start, end and stride values, calculate the minimum and
4499 maximum referenced indexes. */
4500
4501 switch (ar->dimen_type[i])
4502 {
4503 case DIMEN_VECTOR:
4504 case DIMEN_THIS_IMAGE:
4505 break;
4506
4507 case DIMEN_STAR:
4508 case DIMEN_ELEMENT:
4509 if (compare_bound (ar->start[i], as->lower[i]) == CMP_LT)
4510 {
4511 if (i < as->rank)
4512 gfc_warning (0, "Array reference at %L is out of bounds "
4513 "(%ld < %ld) in dimension %d", &ar->c_where[i],
4514 mpz_get_si (ar->start[i]->value.integer),
4515 mpz_get_si (as->lower[i]->value.integer), i+1);
4516 else
4517 gfc_warning (0, "Array reference at %L is out of bounds "
4518 "(%ld < %ld) in codimension %d", &ar->c_where[i],
4519 mpz_get_si (ar->start[i]->value.integer),
4520 mpz_get_si (as->lower[i]->value.integer),
4521 i + 1 - as->rank);
4522 return true;
4523 }
4524 if (compare_bound (ar->start[i], as->upper[i]) == CMP_GT)
4525 {
4526 if (i < as->rank)
4527 gfc_warning (0, "Array reference at %L is out of bounds "
4528 "(%ld > %ld) in dimension %d", &ar->c_where[i],
4529 mpz_get_si (ar->start[i]->value.integer),
4530 mpz_get_si (as->upper[i]->value.integer), i+1);
4531 else
4532 gfc_warning (0, "Array reference at %L is out of bounds "
4533 "(%ld > %ld) in codimension %d", &ar->c_where[i],
4534 mpz_get_si (ar->start[i]->value.integer),
4535 mpz_get_si (as->upper[i]->value.integer),
4536 i + 1 - as->rank);
4537 return true;
4538 }
4539
4540 break;
4541
4542 case DIMEN_RANGE:
4543 {
4544 #define AR_START (ar->start[i] ? ar->start[i] : as->lower[i])
4545 #define AR_END (ar->end[i] ? ar->end[i] : as->upper[i])
4546
4547 compare_result comp_start_end = compare_bound (AR_START, AR_END);
4548
4549 /* Check for zero stride, which is not allowed. */
4550 if (compare_bound_int (ar->stride[i], 0) == CMP_EQ)
4551 {
4552 gfc_error ("Illegal stride of zero at %L", &ar->c_where[i]);
4553 return false;
4554 }
4555
4556 /* if start == len || (stride > 0 && start < len)
4557 || (stride < 0 && start > len),
4558 then the array section contains at least one element. In this
4559 case, there is an out-of-bounds access if
4560 (start < lower || start > upper). */
4561 if (compare_bound (AR_START, AR_END) == CMP_EQ
4562 || ((compare_bound_int (ar->stride[i], 0) == CMP_GT
4563 || ar->stride[i] == NULL) && comp_start_end == CMP_LT)
4564 || (compare_bound_int (ar->stride[i], 0) == CMP_LT
4565 && comp_start_end == CMP_GT))
4566 {
4567 if (compare_bound (AR_START, as->lower[i]) == CMP_LT)
4568 {
4569 gfc_warning (0, "Lower array reference at %L is out of bounds "
4570 "(%ld < %ld) in dimension %d", &ar->c_where[i],
4571 mpz_get_si (AR_START->value.integer),
4572 mpz_get_si (as->lower[i]->value.integer), i+1);
4573 return true;
4574 }
4575 if (compare_bound (AR_START, as->upper[i]) == CMP_GT)
4576 {
4577 gfc_warning (0, "Lower array reference at %L is out of bounds "
4578 "(%ld > %ld) in dimension %d", &ar->c_where[i],
4579 mpz_get_si (AR_START->value.integer),
4580 mpz_get_si (as->upper[i]->value.integer), i+1);
4581 return true;
4582 }
4583 }
4584
4585 /* If we can compute the highest index of the array section,
4586 then it also has to be between lower and upper. */
4587 mpz_init (last_value);
4588 if (compute_last_value_for_triplet (AR_START, AR_END, ar->stride[i],
4589 last_value))
4590 {
4591 if (compare_bound_mpz_t (as->lower[i], last_value) == CMP_GT)
4592 {
4593 gfc_warning (0, "Upper array reference at %L is out of bounds "
4594 "(%ld < %ld) in dimension %d", &ar->c_where[i],
4595 mpz_get_si (last_value),
4596 mpz_get_si (as->lower[i]->value.integer), i+1);
4597 mpz_clear (last_value);
4598 return true;
4599 }
4600 if (compare_bound_mpz_t (as->upper[i], last_value) == CMP_LT)
4601 {
4602 gfc_warning (0, "Upper array reference at %L is out of bounds "
4603 "(%ld > %ld) in dimension %d", &ar->c_where[i],
4604 mpz_get_si (last_value),
4605 mpz_get_si (as->upper[i]->value.integer), i+1);
4606 mpz_clear (last_value);
4607 return true;
4608 }
4609 }
4610 mpz_clear (last_value);
4611
4612 #undef AR_START
4613 #undef AR_END
4614 }
4615 break;
4616
4617 default:
4618 gfc_internal_error ("check_dimension(): Bad array reference");
4619 }
4620
4621 return true;
4622 }
4623
4624
4625 /* Compare an array reference with an array specification. */
4626
4627 static bool
4628 compare_spec_to_ref (gfc_array_ref *ar)
4629 {
4630 gfc_array_spec *as;
4631 int i;
4632
4633 as = ar->as;
4634 i = as->rank - 1;
4635 /* TODO: Full array sections are only allowed as actual parameters. */
4636 if (as->type == AS_ASSUMED_SIZE
4637 && (/*ar->type == AR_FULL
4638 ||*/ (ar->type == AR_SECTION
4639 && ar->dimen_type[i] == DIMEN_RANGE && ar->end[i] == NULL)))
4640 {
4641 gfc_error ("Rightmost upper bound of assumed size array section "
4642 "not specified at %L", &ar->where);
4643 return false;
4644 }
4645
4646 if (ar->type == AR_FULL)
4647 return true;
4648
4649 if (as->rank != ar->dimen)
4650 {
4651 gfc_error ("Rank mismatch in array reference at %L (%d/%d)",
4652 &ar->where, ar->dimen, as->rank);
4653 return false;
4654 }
4655
4656 /* ar->codimen == 0 is a local array. */
4657 if (as->corank != ar->codimen && ar->codimen != 0)
4658 {
4659 gfc_error ("Coindex rank mismatch in array reference at %L (%d/%d)",
4660 &ar->where, ar->codimen, as->corank);
4661 return false;
4662 }
4663
4664 for (i = 0; i < as->rank; i++)
4665 if (!check_dimension (i, ar, as))
4666 return false;
4667
4668 /* Local access has no coarray spec. */
4669 if (ar->codimen != 0)
4670 for (i = as->rank; i < as->rank + as->corank; i++)
4671 {
4672 if (ar->dimen_type[i] != DIMEN_ELEMENT && !ar->in_allocate
4673 && ar->dimen_type[i] != DIMEN_THIS_IMAGE)
4674 {
4675 gfc_error ("Coindex of codimension %d must be a scalar at %L",
4676 i + 1 - as->rank, &ar->where);
4677 return false;
4678 }
4679 if (!check_dimension (i, ar, as))
4680 return false;
4681 }
4682
4683 return true;
4684 }
4685
4686
4687 /* Resolve one part of an array index. */
4688
4689 static bool
4690 gfc_resolve_index_1 (gfc_expr *index, int check_scalar,
4691 int force_index_integer_kind)
4692 {
4693 gfc_typespec ts;
4694
4695 if (index == NULL)
4696 return true;
4697
4698 if (!gfc_resolve_expr (index))
4699 return false;
4700
4701 if (check_scalar && index->rank != 0)
4702 {
4703 gfc_error ("Array index at %L must be scalar", &index->where);
4704 return false;
4705 }
4706
4707 if (index->ts.type != BT_INTEGER && index->ts.type != BT_REAL)
4708 {
4709 gfc_error ("Array index at %L must be of INTEGER type, found %s",
4710 &index->where, gfc_basic_typename (index->ts.type));
4711 return false;
4712 }
4713
4714 if (index->ts.type == BT_REAL)
4715 if (!gfc_notify_std (GFC_STD_LEGACY, "REAL array index at %L",
4716 &index->where))
4717 return false;
4718
4719 if ((index->ts.kind != gfc_index_integer_kind
4720 && force_index_integer_kind)
4721 || index->ts.type != BT_INTEGER)
4722 {
4723 gfc_clear_ts (&ts);
4724 ts.type = BT_INTEGER;
4725 ts.kind = gfc_index_integer_kind;
4726
4727 gfc_convert_type_warn (index, &ts, 2, 0);
4728 }
4729
4730 return true;
4731 }
4732
4733 /* Resolve one part of an array index. */
4734
4735 bool
4736 gfc_resolve_index (gfc_expr *index, int check_scalar)
4737 {
4738 return gfc_resolve_index_1 (index, check_scalar, 1);
4739 }
4740
4741 /* Resolve a dim argument to an intrinsic function. */
4742
4743 bool
4744 gfc_resolve_dim_arg (gfc_expr *dim)
4745 {
4746 if (dim == NULL)
4747 return true;
4748
4749 if (!gfc_resolve_expr (dim))
4750 return false;
4751
4752 if (dim->rank != 0)
4753 {
4754 gfc_error ("Argument dim at %L must be scalar", &dim->where);
4755 return false;
4756
4757 }
4758
4759 if (dim->ts.type != BT_INTEGER)
4760 {
4761 gfc_error ("Argument dim at %L must be of INTEGER type", &dim->where);
4762 return false;
4763 }
4764
4765 if (dim->ts.kind != gfc_index_integer_kind)
4766 {
4767 gfc_typespec ts;
4768
4769 gfc_clear_ts (&ts);
4770 ts.type = BT_INTEGER;
4771 ts.kind = gfc_index_integer_kind;
4772
4773 gfc_convert_type_warn (dim, &ts, 2, 0);
4774 }
4775
4776 return true;
4777 }
4778
4779 /* Given an expression that contains array references, update those array
4780 references to point to the right array specifications. While this is
4781 filled in during matching, this information is difficult to save and load
4782 in a module, so we take care of it here.
4783
4784 The idea here is that the original array reference comes from the
4785 base symbol. We traverse the list of reference structures, setting
4786 the stored reference to references. Component references can
4787 provide an additional array specification. */
4788
4789 static void
4790 find_array_spec (gfc_expr *e)
4791 {
4792 gfc_array_spec *as;
4793 gfc_component *c;
4794 gfc_ref *ref;
4795 bool class_as = false;
4796
4797 if (e->symtree->n.sym->ts.type == BT_CLASS)
4798 {
4799 as = CLASS_DATA (e->symtree->n.sym)->as;
4800 class_as = true;
4801 }
4802 else
4803 as = e->symtree->n.sym->as;
4804
4805 for (ref = e->ref; ref; ref = ref->next)
4806 switch (ref->type)
4807 {
4808 case REF_ARRAY:
4809 if (as == NULL)
4810 gfc_internal_error ("find_array_spec(): Missing spec");
4811
4812 ref->u.ar.as = as;
4813 as = NULL;
4814 break;
4815
4816 case REF_COMPONENT:
4817 c = ref->u.c.component;
4818 if (c->attr.dimension)
4819 {
4820 if (as != NULL && !(class_as && as == c->as))
4821 gfc_internal_error ("find_array_spec(): unused as(1)");
4822 as = c->as;
4823 }
4824
4825 break;
4826
4827 case REF_SUBSTRING:
4828 case REF_INQUIRY:
4829 break;
4830 }
4831
4832 if (as != NULL)
4833 gfc_internal_error ("find_array_spec(): unused as(2)");
4834 }
4835
4836
4837 /* Resolve an array reference. */
4838
4839 static bool
4840 resolve_array_ref (gfc_array_ref *ar)
4841 {
4842 int i, check_scalar;
4843 gfc_expr *e;
4844
4845 for (i = 0; i < ar->dimen + ar->codimen; i++)
4846 {
4847 check_scalar = ar->dimen_type[i] == DIMEN_RANGE;
4848
4849 /* Do not force gfc_index_integer_kind for the start. We can
4850 do fine with any integer kind. This avoids temporary arrays
4851 created for indexing with a vector. */
4852 if (!gfc_resolve_index_1 (ar->start[i], check_scalar, 0))
4853 return false;
4854 if (!gfc_resolve_index (ar->end[i], check_scalar))
4855 return false;
4856 if (!gfc_resolve_index (ar->stride[i], check_scalar))
4857 return false;
4858
4859 e = ar->start[i];
4860
4861 if (ar->dimen_type[i] == DIMEN_UNKNOWN)
4862 switch (e->rank)
4863 {
4864 case 0:
4865 ar->dimen_type[i] = DIMEN_ELEMENT;
4866 break;
4867
4868 case 1:
4869 ar->dimen_type[i] = DIMEN_VECTOR;
4870 if (e->expr_type == EXPR_VARIABLE
4871 && e->symtree->n.sym->ts.type == BT_DERIVED)
4872 ar->start[i] = gfc_get_parentheses (e);
4873 break;
4874
4875 default:
4876 gfc_error ("Array index at %L is an array of rank %d",
4877 &ar->c_where[i], e->rank);
4878 return false;
4879 }
4880
4881 /* Fill in the upper bound, which may be lower than the
4882 specified one for something like a(2:10:5), which is
4883 identical to a(2:7:5). Only relevant for strides not equal
4884 to one. Don't try a division by zero. */
4885 if (ar->dimen_type[i] == DIMEN_RANGE
4886 && ar->stride[i] != NULL && ar->stride[i]->expr_type == EXPR_CONSTANT
4887 && mpz_cmp_si (ar->stride[i]->value.integer, 1L) != 0
4888 && mpz_cmp_si (ar->stride[i]->value.integer, 0L) != 0)
4889 {
4890 mpz_t size, end;
4891
4892 if (gfc_ref_dimen_size (ar, i, &size, &end))
4893 {
4894 if (ar->end[i] == NULL)
4895 {
4896 ar->end[i] =
4897 gfc_get_constant_expr (BT_INTEGER, gfc_index_integer_kind,
4898 &ar->where);
4899 mpz_set (ar->end[i]->value.integer, end);
4900 }
4901 else if (ar->end[i]->ts.type == BT_INTEGER
4902 && ar->end[i]->expr_type == EXPR_CONSTANT)
4903 {
4904 mpz_set (ar->end[i]->value.integer, end);
4905 }
4906 else
4907 gcc_unreachable ();
4908
4909 mpz_clear (size);
4910 mpz_clear (end);
4911 }
4912 }
4913 }
4914
4915 if (ar->type == AR_FULL)
4916 {
4917 if (ar->as->rank == 0)
4918 ar->type = AR_ELEMENT;
4919
4920 /* Make sure array is the same as array(:,:), this way
4921 we don't need to special case all the time. */
4922 ar->dimen = ar->as->rank;
4923 for (i = 0; i < ar->dimen; i++)
4924 {
4925 ar->dimen_type[i] = DIMEN_RANGE;
4926
4927 gcc_assert (ar->start[i] == NULL);
4928 gcc_assert (ar->end[i] == NULL);
4929 gcc_assert (ar->stride[i] == NULL);
4930 }
4931 }
4932
4933 /* If the reference type is unknown, figure out what kind it is. */
4934
4935 if (ar->type == AR_UNKNOWN)
4936 {
4937 ar->type = AR_ELEMENT;
4938 for (i = 0; i < ar->dimen; i++)
4939 if (ar->dimen_type[i] == DIMEN_RANGE
4940 || ar->dimen_type[i] == DIMEN_VECTOR)
4941 {
4942 ar->type = AR_SECTION;
4943 break;
4944 }
4945 }
4946
4947 if (!ar->as->cray_pointee && !compare_spec_to_ref (ar))
4948 return false;
4949
4950 if (ar->as->corank && ar->codimen == 0)
4951 {
4952 int n;
4953 ar->codimen = ar->as->corank;
4954 for (n = ar->dimen; n < ar->dimen + ar->codimen; n++)
4955 ar->dimen_type[n] = DIMEN_THIS_IMAGE;
4956 }
4957
4958 return true;
4959 }
4960
4961
4962 static bool
4963 resolve_substring (gfc_ref *ref, bool *equal_length)
4964 {
4965 int k = gfc_validate_kind (BT_INTEGER, gfc_charlen_int_kind, false);
4966
4967 if (ref->u.ss.start != NULL)
4968 {
4969 if (!gfc_resolve_expr (ref->u.ss.start))
4970 return false;
4971
4972 if (ref->u.ss.start->ts.type != BT_INTEGER)
4973 {
4974 gfc_error ("Substring start index at %L must be of type INTEGER",
4975 &ref->u.ss.start->where);
4976 return false;
4977 }
4978
4979 if (ref->u.ss.start->rank != 0)
4980 {
4981 gfc_error ("Substring start index at %L must be scalar",
4982 &ref->u.ss.start->where);
4983 return false;
4984 }
4985
4986 if (compare_bound_int (ref->u.ss.start, 1) == CMP_LT
4987 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
4988 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
4989 {
4990 gfc_error ("Substring start index at %L is less than one",
4991 &ref->u.ss.start->where);
4992 return false;
4993 }
4994 }
4995
4996 if (ref->u.ss.end != NULL)
4997 {
4998 if (!gfc_resolve_expr (ref->u.ss.end))
4999 return false;
5000
5001 if (ref->u.ss.end->ts.type != BT_INTEGER)
5002 {
5003 gfc_error ("Substring end index at %L must be of type INTEGER",
5004 &ref->u.ss.end->where);
5005 return false;
5006 }
5007
5008 if (ref->u.ss.end->rank != 0)
5009 {
5010 gfc_error ("Substring end index at %L must be scalar",
5011 &ref->u.ss.end->where);
5012 return false;
5013 }
5014
5015 if (ref->u.ss.length != NULL
5016 && compare_bound (ref->u.ss.end, ref->u.ss.length->length) == CMP_GT
5017 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
5018 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
5019 {
5020 gfc_error ("Substring end index at %L exceeds the string length",
5021 &ref->u.ss.start->where);
5022 return false;
5023 }
5024
5025 if (compare_bound_mpz_t (ref->u.ss.end,
5026 gfc_integer_kinds[k].huge) == CMP_GT
5027 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
5028 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
5029 {
5030 gfc_error ("Substring end index at %L is too large",
5031 &ref->u.ss.end->where);
5032 return false;
5033 }
5034 /* If the substring has the same length as the original
5035 variable, the reference itself can be deleted. */
5036
5037 if (ref->u.ss.length != NULL
5038 && compare_bound (ref->u.ss.end, ref->u.ss.length->length) == CMP_EQ
5039 && compare_bound_int (ref->u.ss.start, 1) == CMP_EQ)
5040 *equal_length = true;
5041 }
5042
5043 return true;
5044 }
5045
5046
5047 /* This function supplies missing substring charlens. */
5048
5049 void
5050 gfc_resolve_substring_charlen (gfc_expr *e)
5051 {
5052 gfc_ref *char_ref;
5053 gfc_expr *start, *end;
5054 gfc_typespec *ts = NULL;
5055 mpz_t diff;
5056
5057 for (char_ref = e->ref; char_ref; char_ref = char_ref->next)
5058 {
5059 if (char_ref->type == REF_SUBSTRING || char_ref->type == REF_INQUIRY)
5060 break;
5061 if (char_ref->type == REF_COMPONENT)
5062 ts = &char_ref->u.c.component->ts;
5063 }
5064
5065 if (!char_ref || char_ref->type == REF_INQUIRY)
5066 return;
5067
5068 gcc_assert (char_ref->next == NULL);
5069
5070 if (e->ts.u.cl)
5071 {
5072 if (e->ts.u.cl->length)
5073 gfc_free_expr (e->ts.u.cl->length);
5074 else if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.dummy)
5075 return;
5076 }
5077
5078 e->ts.type = BT_CHARACTER;
5079 e->ts.kind = gfc_default_character_kind;
5080
5081 if (!e->ts.u.cl)
5082 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
5083
5084 if (char_ref->u.ss.start)
5085 start = gfc_copy_expr (char_ref->u.ss.start);
5086 else
5087 start = gfc_get_int_expr (gfc_charlen_int_kind, NULL, 1);
5088
5089 if (char_ref->u.ss.end)
5090 end = gfc_copy_expr (char_ref->u.ss.end);
5091 else if (e->expr_type == EXPR_VARIABLE)
5092 {
5093 if (!ts)
5094 ts = &e->symtree->n.sym->ts;
5095 end = gfc_copy_expr (ts->u.cl->length);
5096 }
5097 else
5098 end = NULL;
5099
5100 if (!start || !end)
5101 {
5102 gfc_free_expr (start);
5103 gfc_free_expr (end);
5104 return;
5105 }
5106
5107 /* Length = (end - start + 1).
5108 Check first whether it has a constant length. */
5109 if (gfc_dep_difference (end, start, &diff))
5110 {
5111 gfc_expr *len = gfc_get_constant_expr (BT_INTEGER, gfc_charlen_int_kind,
5112 &e->where);
5113
5114 mpz_add_ui (len->value.integer, diff, 1);
5115 mpz_clear (diff);
5116 e->ts.u.cl->length = len;
5117 /* The check for length < 0 is handled below */
5118 }
5119 else
5120 {
5121 e->ts.u.cl->length = gfc_subtract (end, start);
5122 e->ts.u.cl->length = gfc_add (e->ts.u.cl->length,
5123 gfc_get_int_expr (gfc_charlen_int_kind,
5124 NULL, 1));
5125 }
5126
5127 /* F2008, 6.4.1: Both the starting point and the ending point shall
5128 be within the range 1, 2, ..., n unless the starting point exceeds
5129 the ending point, in which case the substring has length zero. */
5130
5131 if (mpz_cmp_si (e->ts.u.cl->length->value.integer, 0) < 0)
5132 mpz_set_si (e->ts.u.cl->length->value.integer, 0);
5133
5134 e->ts.u.cl->length->ts.type = BT_INTEGER;
5135 e->ts.u.cl->length->ts.kind = gfc_charlen_int_kind;
5136
5137 /* Make sure that the length is simplified. */
5138 gfc_simplify_expr (e->ts.u.cl->length, 1);
5139 gfc_resolve_expr (e->ts.u.cl->length);
5140 }
5141
5142
5143 /* Resolve subtype references. */
5144
5145 static bool
5146 resolve_ref (gfc_expr *expr)
5147 {
5148 int current_part_dimension, n_components, seen_part_dimension;
5149 gfc_ref *ref, **prev;
5150 bool equal_length;
5151
5152 for (ref = expr->ref; ref; ref = ref->next)
5153 if (ref->type == REF_ARRAY && ref->u.ar.as == NULL)
5154 {
5155 find_array_spec (expr);
5156 break;
5157 }
5158
5159 for (prev = &expr->ref; *prev != NULL;
5160 prev = *prev == NULL ? prev : &(*prev)->next)
5161 switch ((*prev)->type)
5162 {
5163 case REF_ARRAY:
5164 if (!resolve_array_ref (&(*prev)->u.ar))
5165 return false;
5166 break;
5167
5168 case REF_COMPONENT:
5169 case REF_INQUIRY:
5170 break;
5171
5172 case REF_SUBSTRING:
5173 equal_length = false;
5174 if (!resolve_substring (*prev, &equal_length))
5175 return false;
5176
5177 if (expr->expr_type != EXPR_SUBSTRING && equal_length)
5178 {
5179 /* Remove the reference and move the charlen, if any. */
5180 ref = *prev;
5181 *prev = ref->next;
5182 ref->next = NULL;
5183 expr->ts.u.cl = ref->u.ss.length;
5184 ref->u.ss.length = NULL;
5185 gfc_free_ref_list (ref);
5186 }
5187 break;
5188 }
5189
5190 /* Check constraints on part references. */
5191
5192 current_part_dimension = 0;
5193 seen_part_dimension = 0;
5194 n_components = 0;
5195
5196 for (ref = expr->ref; ref; ref = ref->next)
5197 {
5198 switch (ref->type)
5199 {
5200 case REF_ARRAY:
5201 switch (ref->u.ar.type)
5202 {
5203 case AR_FULL:
5204 /* Coarray scalar. */
5205 if (ref->u.ar.as->rank == 0)
5206 {
5207 current_part_dimension = 0;
5208 break;
5209 }
5210 /* Fall through. */
5211 case AR_SECTION:
5212 current_part_dimension = 1;
5213 break;
5214
5215 case AR_ELEMENT:
5216 current_part_dimension = 0;
5217 break;
5218
5219 case AR_UNKNOWN:
5220 gfc_internal_error ("resolve_ref(): Bad array reference");
5221 }
5222
5223 break;
5224
5225 case REF_COMPONENT:
5226 if (current_part_dimension || seen_part_dimension)
5227 {
5228 /* F03:C614. */
5229 if (ref->u.c.component->attr.pointer
5230 || ref->u.c.component->attr.proc_pointer
5231 || (ref->u.c.component->ts.type == BT_CLASS
5232 && CLASS_DATA (ref->u.c.component)->attr.pointer))
5233 {
5234 gfc_error ("Component to the right of a part reference "
5235 "with nonzero rank must not have the POINTER "
5236 "attribute at %L", &expr->where);
5237 return false;
5238 }
5239 else if (ref->u.c.component->attr.allocatable
5240 || (ref->u.c.component->ts.type == BT_CLASS
5241 && CLASS_DATA (ref->u.c.component)->attr.allocatable))
5242
5243 {
5244 gfc_error ("Component to the right of a part reference "
5245 "with nonzero rank must not have the ALLOCATABLE "
5246 "attribute at %L", &expr->where);
5247 return false;
5248 }
5249 }
5250
5251 n_components++;
5252 break;
5253
5254 case REF_SUBSTRING:
5255 case REF_INQUIRY:
5256 break;
5257 }
5258
5259 if (((ref->type == REF_COMPONENT && n_components > 1)
5260 || ref->next == NULL)
5261 && current_part_dimension
5262 && seen_part_dimension)
5263 {
5264 gfc_error ("Two or more part references with nonzero rank must "
5265 "not be specified at %L", &expr->where);
5266 return false;
5267 }
5268
5269 if (ref->type == REF_COMPONENT)
5270 {
5271 if (current_part_dimension)
5272 seen_part_dimension = 1;
5273
5274 /* reset to make sure */
5275 current_part_dimension = 0;
5276 }
5277 }
5278
5279 return true;
5280 }
5281
5282
5283 /* Given an expression, determine its shape. This is easier than it sounds.
5284 Leaves the shape array NULL if it is not possible to determine the shape. */
5285
5286 static void
5287 expression_shape (gfc_expr *e)
5288 {
5289 mpz_t array[GFC_MAX_DIMENSIONS];
5290 int i;
5291
5292 if (e->rank <= 0 || e->shape != NULL)
5293 return;
5294
5295 for (i = 0; i < e->rank; i++)
5296 if (!gfc_array_dimen_size (e, i, &array[i]))
5297 goto fail;
5298
5299 e->shape = gfc_get_shape (e->rank);
5300
5301 memcpy (e->shape, array, e->rank * sizeof (mpz_t));
5302
5303 return;
5304
5305 fail:
5306 for (i--; i >= 0; i--)
5307 mpz_clear (array[i]);
5308 }
5309
5310
5311 /* Given a variable expression node, compute the rank of the expression by
5312 examining the base symbol and any reference structures it may have. */
5313
5314 void
5315 expression_rank (gfc_expr *e)
5316 {
5317 gfc_ref *ref;
5318 int i, rank;
5319
5320 /* Just to make sure, because EXPR_COMPCALL's also have an e->ref and that
5321 could lead to serious confusion... */
5322 gcc_assert (e->expr_type != EXPR_COMPCALL);
5323
5324 if (e->ref == NULL)
5325 {
5326 if (e->expr_type == EXPR_ARRAY)
5327 goto done;
5328 /* Constructors can have a rank different from one via RESHAPE(). */
5329
5330 if (e->symtree == NULL)
5331 {
5332 e->rank = 0;
5333 goto done;
5334 }
5335
5336 e->rank = (e->symtree->n.sym->as == NULL)
5337 ? 0 : e->symtree->n.sym->as->rank;
5338 goto done;
5339 }
5340
5341 rank = 0;
5342
5343 for (ref = e->ref; ref; ref = ref->next)
5344 {
5345 if (ref->type == REF_COMPONENT && ref->u.c.component->attr.proc_pointer
5346 && ref->u.c.component->attr.function && !ref->next)
5347 rank = ref->u.c.component->as ? ref->u.c.component->as->rank : 0;
5348
5349 if (ref->type != REF_ARRAY)
5350 continue;
5351
5352 if (ref->u.ar.type == AR_FULL)
5353 {
5354 rank = ref->u.ar.as->rank;
5355 break;
5356 }
5357
5358 if (ref->u.ar.type == AR_SECTION)
5359 {
5360 /* Figure out the rank of the section. */
5361 if (rank != 0)
5362 gfc_internal_error ("expression_rank(): Two array specs");
5363
5364 for (i = 0; i < ref->u.ar.dimen; i++)
5365 if (ref->u.ar.dimen_type[i] == DIMEN_RANGE
5366 || ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
5367 rank++;
5368
5369 break;
5370 }
5371 }
5372
5373 e->rank = rank;
5374
5375 done:
5376 expression_shape (e);
5377 }
5378
5379
5380 static void
5381 add_caf_get_intrinsic (gfc_expr *e)
5382 {
5383 gfc_expr *wrapper, *tmp_expr;
5384 gfc_ref *ref;
5385 int n;
5386
5387 for (ref = e->ref; ref; ref = ref->next)
5388 if (ref->type == REF_ARRAY && ref->u.ar.codimen > 0)
5389 break;
5390 if (ref == NULL)
5391 return;
5392
5393 for (n = ref->u.ar.dimen; n < ref->u.ar.dimen + ref->u.ar.codimen; n++)
5394 if (ref->u.ar.dimen_type[n] != DIMEN_ELEMENT)
5395 return;
5396
5397 tmp_expr = XCNEW (gfc_expr);
5398 *tmp_expr = *e;
5399 wrapper = gfc_build_intrinsic_call (gfc_current_ns, GFC_ISYM_CAF_GET,
5400 "caf_get", tmp_expr->where, 1, tmp_expr);
5401 wrapper->ts = e->ts;
5402 wrapper->rank = e->rank;
5403 if (e->rank)
5404 wrapper->shape = gfc_copy_shape (e->shape, e->rank);
5405 *e = *wrapper;
5406 free (wrapper);
5407 }
5408
5409
5410 static void
5411 remove_caf_get_intrinsic (gfc_expr *e)
5412 {
5413 gcc_assert (e->expr_type == EXPR_FUNCTION && e->value.function.isym
5414 && e->value.function.isym->id == GFC_ISYM_CAF_GET);
5415 gfc_expr *e2 = e->value.function.actual->expr;
5416 e->value.function.actual->expr = NULL;
5417 gfc_free_actual_arglist (e->value.function.actual);
5418 gfc_free_shape (&e->shape, e->rank);
5419 *e = *e2;
5420 free (e2);
5421 }
5422
5423
5424 /* Resolve a variable expression. */
5425
5426 static bool
5427 resolve_variable (gfc_expr *e)
5428 {
5429 gfc_symbol *sym;
5430 bool t;
5431
5432 t = true;
5433
5434 if (e->symtree == NULL)
5435 return false;
5436 sym = e->symtree->n.sym;
5437
5438 /* Use same check as for TYPE(*) below; this check has to be before TYPE(*)
5439 as ts.type is set to BT_ASSUMED in resolve_symbol. */
5440 if (sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
5441 {
5442 if (!actual_arg || inquiry_argument)
5443 {
5444 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may only "
5445 "be used as actual argument", sym->name, &e->where);
5446 return false;
5447 }
5448 }
5449 /* TS 29113, 407b. */
5450 else if (e->ts.type == BT_ASSUMED)
5451 {
5452 if (!actual_arg)
5453 {
5454 gfc_error ("Assumed-type variable %s at %L may only be used "
5455 "as actual argument", sym->name, &e->where);
5456 return false;
5457 }
5458 else if (inquiry_argument && !first_actual_arg)
5459 {
5460 /* FIXME: It doesn't work reliably as inquiry_argument is not set
5461 for all inquiry functions in resolve_function; the reason is
5462 that the function-name resolution happens too late in that
5463 function. */
5464 gfc_error ("Assumed-type variable %s at %L as actual argument to "
5465 "an inquiry function shall be the first argument",
5466 sym->name, &e->where);
5467 return false;
5468 }
5469 }
5470 /* TS 29113, C535b. */
5471 else if (((sym->ts.type == BT_CLASS && sym->attr.class_ok
5472 && CLASS_DATA (sym)->as
5473 && CLASS_DATA (sym)->as->type == AS_ASSUMED_RANK)
5474 || (sym->ts.type != BT_CLASS && sym->as
5475 && sym->as->type == AS_ASSUMED_RANK))
5476 && !sym->attr.select_rank_temporary)
5477 {
5478 if (!actual_arg
5479 && !(cs_base && cs_base->current
5480 && cs_base->current->op == EXEC_SELECT_RANK))
5481 {
5482 gfc_error ("Assumed-rank variable %s at %L may only be used as "
5483 "actual argument", sym->name, &e->where);
5484 return false;
5485 }
5486 else if (inquiry_argument && !first_actual_arg)
5487 {
5488 /* FIXME: It doesn't work reliably as inquiry_argument is not set
5489 for all inquiry functions in resolve_function; the reason is
5490 that the function-name resolution happens too late in that
5491 function. */
5492 gfc_error ("Assumed-rank variable %s at %L as actual argument "
5493 "to an inquiry function shall be the first argument",
5494 sym->name, &e->where);
5495 return false;
5496 }
5497 }
5498
5499 if ((sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK)) && e->ref
5500 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
5501 && e->ref->next == NULL))
5502 {
5503 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall not have "
5504 "a subobject reference", sym->name, &e->ref->u.ar.where);
5505 return false;
5506 }
5507 /* TS 29113, 407b. */
5508 else if (e->ts.type == BT_ASSUMED && e->ref
5509 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
5510 && e->ref->next == NULL))
5511 {
5512 gfc_error ("Assumed-type variable %s at %L shall not have a subobject "
5513 "reference", sym->name, &e->ref->u.ar.where);
5514 return false;
5515 }
5516
5517 /* TS 29113, C535b. */
5518 if (((sym->ts.type == BT_CLASS && sym->attr.class_ok
5519 && CLASS_DATA (sym)->as
5520 && CLASS_DATA (sym)->as->type == AS_ASSUMED_RANK)
5521 || (sym->ts.type != BT_CLASS && sym->as
5522 && sym->as->type == AS_ASSUMED_RANK))
5523 && e->ref
5524 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
5525 && e->ref->next == NULL))
5526 {
5527 gfc_error ("Assumed-rank variable %s at %L shall not have a subobject "
5528 "reference", sym->name, &e->ref->u.ar.where);
5529 return false;
5530 }
5531
5532 /* For variables that are used in an associate (target => object) where
5533 the object's basetype is array valued while the target is scalar,
5534 the ts' type of the component refs is still array valued, which
5535 can't be translated that way. */
5536 if (sym->assoc && e->rank == 0 && e->ref && sym->ts.type == BT_CLASS
5537 && sym->assoc->target && sym->assoc->target->ts.type == BT_CLASS
5538 && CLASS_DATA (sym->assoc->target)->as)
5539 {
5540 gfc_ref *ref = e->ref;
5541 while (ref)
5542 {
5543 switch (ref->type)
5544 {
5545 case REF_COMPONENT:
5546 ref->u.c.sym = sym->ts.u.derived;
5547 /* Stop the loop. */
5548 ref = NULL;
5549 break;
5550 default:
5551 ref = ref->next;
5552 break;
5553 }
5554 }
5555 }
5556
5557 /* If this is an associate-name, it may be parsed with an array reference
5558 in error even though the target is scalar. Fail directly in this case.
5559 TODO Understand why class scalar expressions must be excluded. */
5560 if (sym->assoc && !(sym->ts.type == BT_CLASS && e->rank == 0))
5561 {
5562 if (sym->ts.type == BT_CLASS)
5563 gfc_fix_class_refs (e);
5564 if (!sym->attr.dimension && e->ref && e->ref->type == REF_ARRAY)
5565 return false;
5566 else if (sym->attr.dimension && (!e->ref || e->ref->type != REF_ARRAY))
5567 {
5568 /* This can happen because the parser did not detect that the
5569 associate name is an array and the expression had no array
5570 part_ref. */
5571 gfc_ref *ref = gfc_get_ref ();
5572 ref->type = REF_ARRAY;
5573 ref->u.ar = *gfc_get_array_ref();
5574 ref->u.ar.type = AR_FULL;
5575 if (sym->as)
5576 {
5577 ref->u.ar.as = sym->as;
5578 ref->u.ar.dimen = sym->as->rank;
5579 }
5580 ref->next = e->ref;
5581 e->ref = ref;
5582
5583 }
5584 }
5585
5586 if (sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.generic)
5587 sym->ts.u.derived = gfc_find_dt_in_generic (sym->ts.u.derived);
5588
5589 /* On the other hand, the parser may not have known this is an array;
5590 in this case, we have to add a FULL reference. */
5591 if (sym->assoc && sym->attr.dimension && !e->ref)
5592 {
5593 e->ref = gfc_get_ref ();
5594 e->ref->type = REF_ARRAY;
5595 e->ref->u.ar.type = AR_FULL;
5596 e->ref->u.ar.dimen = 0;
5597 }
5598
5599 /* Like above, but for class types, where the checking whether an array
5600 ref is present is more complicated. Furthermore make sure not to add
5601 the full array ref to _vptr or _len refs. */
5602 if (sym->assoc && sym->ts.type == BT_CLASS
5603 && CLASS_DATA (sym)->attr.dimension
5604 && (e->ts.type != BT_DERIVED || !e->ts.u.derived->attr.vtype))
5605 {
5606 gfc_ref *ref, *newref;
5607
5608 newref = gfc_get_ref ();
5609 newref->type = REF_ARRAY;
5610 newref->u.ar.type = AR_FULL;
5611 newref->u.ar.dimen = 0;
5612 /* Because this is an associate var and the first ref either is a ref to
5613 the _data component or not, no traversal of the ref chain is
5614 needed. The array ref needs to be inserted after the _data ref,
5615 or when that is not present, which may happend for polymorphic
5616 types, then at the first position. */
5617 ref = e->ref;
5618 if (!ref)
5619 e->ref = newref;
5620 else if (ref->type == REF_COMPONENT
5621 && strcmp ("_data", ref->u.c.component->name) == 0)
5622 {
5623 if (!ref->next || ref->next->type != REF_ARRAY)
5624 {
5625 newref->next = ref->next;
5626 ref->next = newref;
5627 }
5628 else
5629 /* Array ref present already. */
5630 gfc_free_ref_list (newref);
5631 }
5632 else if (ref->type == REF_ARRAY)
5633 /* Array ref present already. */
5634 gfc_free_ref_list (newref);
5635 else
5636 {
5637 newref->next = ref;
5638 e->ref = newref;
5639 }
5640 }
5641
5642 if (e->ref && !resolve_ref (e))
5643 return false;
5644
5645 if (sym->attr.flavor == FL_PROCEDURE
5646 && (!sym->attr.function
5647 || (sym->attr.function && sym->result
5648 && sym->result->attr.proc_pointer
5649 && !sym->result->attr.function)))
5650 {
5651 e->ts.type = BT_PROCEDURE;
5652 goto resolve_procedure;
5653 }
5654
5655 if (sym->ts.type != BT_UNKNOWN)
5656 gfc_variable_attr (e, &e->ts);
5657 else if (sym->attr.flavor == FL_PROCEDURE
5658 && sym->attr.function && sym->result
5659 && sym->result->ts.type != BT_UNKNOWN
5660 && sym->result->attr.proc_pointer)
5661 e->ts = sym->result->ts;
5662 else
5663 {
5664 /* Must be a simple variable reference. */
5665 if (!gfc_set_default_type (sym, 1, sym->ns))
5666 return false;
5667 e->ts = sym->ts;
5668 }
5669
5670 if (check_assumed_size_reference (sym, e))
5671 return false;
5672
5673 /* Deal with forward references to entries during gfc_resolve_code, to
5674 satisfy, at least partially, 12.5.2.5. */
5675 if (gfc_current_ns->entries
5676 && current_entry_id == sym->entry_id
5677 && cs_base
5678 && cs_base->current
5679 && cs_base->current->op != EXEC_ENTRY)
5680 {
5681 gfc_entry_list *entry;
5682 gfc_formal_arglist *formal;
5683 int n;
5684 bool seen, saved_specification_expr;
5685
5686 /* If the symbol is a dummy... */
5687 if (sym->attr.dummy && sym->ns == gfc_current_ns)
5688 {
5689 entry = gfc_current_ns->entries;
5690 seen = false;
5691
5692 /* ...test if the symbol is a parameter of previous entries. */
5693 for (; entry && entry->id <= current_entry_id; entry = entry->next)
5694 for (formal = entry->sym->formal; formal; formal = formal->next)
5695 {
5696 if (formal->sym && sym->name == formal->sym->name)
5697 {
5698 seen = true;
5699 break;
5700 }
5701 }
5702
5703 /* If it has not been seen as a dummy, this is an error. */
5704 if (!seen)
5705 {
5706 if (specification_expr)
5707 gfc_error ("Variable %qs, used in a specification expression"
5708 ", is referenced at %L before the ENTRY statement "
5709 "in which it is a parameter",
5710 sym->name, &cs_base->current->loc);
5711 else
5712 gfc_error ("Variable %qs is used at %L before the ENTRY "
5713 "statement in which it is a parameter",
5714 sym->name, &cs_base->current->loc);
5715 t = false;
5716 }
5717 }
5718
5719 /* Now do the same check on the specification expressions. */
5720 saved_specification_expr = specification_expr;
5721 specification_expr = true;
5722 if (sym->ts.type == BT_CHARACTER
5723 && !gfc_resolve_expr (sym->ts.u.cl->length))
5724 t = false;
5725
5726 if (sym->as)
5727 for (n = 0; n < sym->as->rank; n++)
5728 {
5729 if (!gfc_resolve_expr (sym->as->lower[n]))
5730 t = false;
5731 if (!gfc_resolve_expr (sym->as->upper[n]))
5732 t = false;
5733 }
5734 specification_expr = saved_specification_expr;
5735
5736 if (t)
5737 /* Update the symbol's entry level. */
5738 sym->entry_id = current_entry_id + 1;
5739 }
5740
5741 /* If a symbol has been host_associated mark it. This is used latter,
5742 to identify if aliasing is possible via host association. */
5743 if (sym->attr.flavor == FL_VARIABLE
5744 && gfc_current_ns->parent
5745 && (gfc_current_ns->parent == sym->ns
5746 || (gfc_current_ns->parent->parent
5747 && gfc_current_ns->parent->parent == sym->ns)))
5748 sym->attr.host_assoc = 1;
5749
5750 if (gfc_current_ns->proc_name
5751 && sym->attr.dimension
5752 && (sym->ns != gfc_current_ns
5753 || sym->attr.use_assoc
5754 || sym->attr.in_common))
5755 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
5756
5757 resolve_procedure:
5758 if (t && !resolve_procedure_expression (e))
5759 t = false;
5760
5761 /* F2008, C617 and C1229. */
5762 if (!inquiry_argument && (e->ts.type == BT_CLASS || e->ts.type == BT_DERIVED)
5763 && gfc_is_coindexed (e))
5764 {
5765 gfc_ref *ref, *ref2 = NULL;
5766
5767 for (ref = e->ref; ref; ref = ref->next)
5768 {
5769 if (ref->type == REF_COMPONENT)
5770 ref2 = ref;
5771 if (ref->type == REF_ARRAY && ref->u.ar.codimen > 0)
5772 break;
5773 }
5774
5775 for ( ; ref; ref = ref->next)
5776 if (ref->type == REF_COMPONENT)
5777 break;
5778
5779 /* Expression itself is not coindexed object. */
5780 if (ref && e->ts.type == BT_CLASS)
5781 {
5782 gfc_error ("Polymorphic subobject of coindexed object at %L",
5783 &e->where);
5784 t = false;
5785 }
5786
5787 /* Expression itself is coindexed object. */
5788 if (ref == NULL)
5789 {
5790 gfc_component *c;
5791 c = ref2 ? ref2->u.c.component : e->symtree->n.sym->components;
5792 for ( ; c; c = c->next)
5793 if (c->attr.allocatable && c->ts.type == BT_CLASS)
5794 {
5795 gfc_error ("Coindexed object with polymorphic allocatable "
5796 "subcomponent at %L", &e->where);
5797 t = false;
5798 break;
5799 }
5800 }
5801 }
5802
5803 if (t)
5804 expression_rank (e);
5805
5806 if (t && flag_coarray == GFC_FCOARRAY_LIB && gfc_is_coindexed (e))
5807 add_caf_get_intrinsic (e);
5808
5809 /* Simplify cases where access to a parameter array results in a
5810 single constant. Suppress errors since those will have been
5811 issued before, as warnings. */
5812 if (e->rank == 0 && sym->as && sym->attr.flavor == FL_PARAMETER)
5813 {
5814 gfc_push_suppress_errors ();
5815 gfc_simplify_expr (e, 1);
5816 gfc_pop_suppress_errors ();
5817 }
5818
5819 return t;
5820 }
5821
5822
5823 /* Checks to see that the correct symbol has been host associated.
5824 The only situation where this arises is that in which a twice
5825 contained function is parsed after the host association is made.
5826 Therefore, on detecting this, change the symbol in the expression
5827 and convert the array reference into an actual arglist if the old
5828 symbol is a variable. */
5829 static bool
5830 check_host_association (gfc_expr *e)
5831 {
5832 gfc_symbol *sym, *old_sym;
5833 gfc_symtree *st;
5834 int n;
5835 gfc_ref *ref;
5836 gfc_actual_arglist *arg, *tail = NULL;
5837 bool retval = e->expr_type == EXPR_FUNCTION;
5838
5839 /* If the expression is the result of substitution in
5840 interface.c(gfc_extend_expr) because there is no way in
5841 which the host association can be wrong. */
5842 if (e->symtree == NULL
5843 || e->symtree->n.sym == NULL
5844 || e->user_operator)
5845 return retval;
5846
5847 old_sym = e->symtree->n.sym;
5848
5849 if (gfc_current_ns->parent
5850 && old_sym->ns != gfc_current_ns)
5851 {
5852 /* Use the 'USE' name so that renamed module symbols are
5853 correctly handled. */
5854 gfc_find_symbol (e->symtree->name, gfc_current_ns, 1, &sym);
5855
5856 if (sym && old_sym != sym
5857 && sym->ts.type == old_sym->ts.type
5858 && sym->attr.flavor == FL_PROCEDURE
5859 && sym->attr.contained)
5860 {
5861 /* Clear the shape, since it might not be valid. */
5862 gfc_free_shape (&e->shape, e->rank);
5863
5864 /* Give the expression the right symtree! */
5865 gfc_find_sym_tree (e->symtree->name, NULL, 1, &st);
5866 gcc_assert (st != NULL);
5867
5868 if (old_sym->attr.flavor == FL_PROCEDURE
5869 || e->expr_type == EXPR_FUNCTION)
5870 {
5871 /* Original was function so point to the new symbol, since
5872 the actual argument list is already attached to the
5873 expression. */
5874 e->value.function.esym = NULL;
5875 e->symtree = st;
5876 }
5877 else
5878 {
5879 /* Original was variable so convert array references into
5880 an actual arglist. This does not need any checking now
5881 since resolve_function will take care of it. */
5882 e->value.function.actual = NULL;
5883 e->expr_type = EXPR_FUNCTION;
5884 e->symtree = st;
5885
5886 /* Ambiguity will not arise if the array reference is not
5887 the last reference. */
5888 for (ref = e->ref; ref; ref = ref->next)
5889 if (ref->type == REF_ARRAY && ref->next == NULL)
5890 break;
5891
5892 gcc_assert (ref->type == REF_ARRAY);
5893
5894 /* Grab the start expressions from the array ref and
5895 copy them into actual arguments. */
5896 for (n = 0; n < ref->u.ar.dimen; n++)
5897 {
5898 arg = gfc_get_actual_arglist ();
5899 arg->expr = gfc_copy_expr (ref->u.ar.start[n]);
5900 if (e->value.function.actual == NULL)
5901 tail = e->value.function.actual = arg;
5902 else
5903 {
5904 tail->next = arg;
5905 tail = arg;
5906 }
5907 }
5908
5909 /* Dump the reference list and set the rank. */
5910 gfc_free_ref_list (e->ref);
5911 e->ref = NULL;
5912 e->rank = sym->as ? sym->as->rank : 0;
5913 }
5914
5915 gfc_resolve_expr (e);
5916 sym->refs++;
5917 }
5918 }
5919 /* This might have changed! */
5920 return e->expr_type == EXPR_FUNCTION;
5921 }
5922
5923
5924 static void
5925 gfc_resolve_character_operator (gfc_expr *e)
5926 {
5927 gfc_expr *op1 = e->value.op.op1;
5928 gfc_expr *op2 = e->value.op.op2;
5929 gfc_expr *e1 = NULL;
5930 gfc_expr *e2 = NULL;
5931
5932 gcc_assert (e->value.op.op == INTRINSIC_CONCAT);
5933
5934 if (op1->ts.u.cl && op1->ts.u.cl->length)
5935 e1 = gfc_copy_expr (op1->ts.u.cl->length);
5936 else if (op1->expr_type == EXPR_CONSTANT)
5937 e1 = gfc_get_int_expr (gfc_charlen_int_kind, NULL,
5938 op1->value.character.length);
5939
5940 if (op2->ts.u.cl && op2->ts.u.cl->length)
5941 e2 = gfc_copy_expr (op2->ts.u.cl->length);
5942 else if (op2->expr_type == EXPR_CONSTANT)
5943 e2 = gfc_get_int_expr (gfc_charlen_int_kind, NULL,
5944 op2->value.character.length);
5945
5946 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
5947
5948 if (!e1 || !e2)
5949 {
5950 gfc_free_expr (e1);
5951 gfc_free_expr (e2);
5952
5953 return;
5954 }
5955
5956 e->ts.u.cl->length = gfc_add (e1, e2);
5957 e->ts.u.cl->length->ts.type = BT_INTEGER;
5958 e->ts.u.cl->length->ts.kind = gfc_charlen_int_kind;
5959 gfc_simplify_expr (e->ts.u.cl->length, 0);
5960 gfc_resolve_expr (e->ts.u.cl->length);
5961
5962 return;
5963 }
5964
5965
5966 /* Ensure that an character expression has a charlen and, if possible, a
5967 length expression. */
5968
5969 static void
5970 fixup_charlen (gfc_expr *e)
5971 {
5972 /* The cases fall through so that changes in expression type and the need
5973 for multiple fixes are picked up. In all circumstances, a charlen should
5974 be available for the middle end to hang a backend_decl on. */
5975 switch (e->expr_type)
5976 {
5977 case EXPR_OP:
5978 gfc_resolve_character_operator (e);
5979 /* FALLTHRU */
5980
5981 case EXPR_ARRAY:
5982 if (e->expr_type == EXPR_ARRAY)
5983 gfc_resolve_character_array_constructor (e);
5984 /* FALLTHRU */
5985
5986 case EXPR_SUBSTRING:
5987 if (!e->ts.u.cl && e->ref)
5988 gfc_resolve_substring_charlen (e);
5989 /* FALLTHRU */
5990
5991 default:
5992 if (!e->ts.u.cl)
5993 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
5994
5995 break;
5996 }
5997 }
5998
5999
6000 /* Update an actual argument to include the passed-object for type-bound
6001 procedures at the right position. */
6002
6003 static gfc_actual_arglist*
6004 update_arglist_pass (gfc_actual_arglist* lst, gfc_expr* po, unsigned argpos,
6005 const char *name)
6006 {
6007 gcc_assert (argpos > 0);
6008
6009 if (argpos == 1)
6010 {
6011 gfc_actual_arglist* result;
6012
6013 result = gfc_get_actual_arglist ();
6014 result->expr = po;
6015 result->next = lst;
6016 if (name)
6017 result->name = name;
6018
6019 return result;
6020 }
6021
6022 if (lst)
6023 lst->next = update_arglist_pass (lst->next, po, argpos - 1, name);
6024 else
6025 lst = update_arglist_pass (NULL, po, argpos - 1, name);
6026 return lst;
6027 }
6028
6029
6030 /* Extract the passed-object from an EXPR_COMPCALL (a copy of it). */
6031
6032 static gfc_expr*
6033 extract_compcall_passed_object (gfc_expr* e)
6034 {
6035 gfc_expr* po;
6036
6037 if (e->expr_type == EXPR_UNKNOWN)
6038 {
6039 gfc_error ("Error in typebound call at %L",
6040 &e->where);
6041 return NULL;
6042 }
6043
6044 gcc_assert (e->expr_type == EXPR_COMPCALL);
6045
6046 if (e->value.compcall.base_object)
6047 po = gfc_copy_expr (e->value.compcall.base_object);
6048 else
6049 {
6050 po = gfc_get_expr ();
6051 po->expr_type = EXPR_VARIABLE;
6052 po->symtree = e->symtree;
6053 po->ref = gfc_copy_ref (e->ref);
6054 po->where = e->where;
6055 }
6056
6057 if (!gfc_resolve_expr (po))
6058 return NULL;
6059
6060 return po;
6061 }
6062
6063
6064 /* Update the arglist of an EXPR_COMPCALL expression to include the
6065 passed-object. */
6066
6067 static bool
6068 update_compcall_arglist (gfc_expr* e)
6069 {
6070 gfc_expr* po;
6071 gfc_typebound_proc* tbp;
6072
6073 tbp = e->value.compcall.tbp;
6074
6075 if (tbp->error)
6076 return false;
6077
6078 po = extract_compcall_passed_object (e);
6079 if (!po)
6080 return false;
6081
6082 if (tbp->nopass || e->value.compcall.ignore_pass)
6083 {
6084 gfc_free_expr (po);
6085 return true;
6086 }
6087
6088 if (tbp->pass_arg_num <= 0)
6089 return false;
6090
6091 e->value.compcall.actual = update_arglist_pass (e->value.compcall.actual, po,
6092 tbp->pass_arg_num,
6093 tbp->pass_arg);
6094
6095 return true;
6096 }
6097
6098
6099 /* Extract the passed object from a PPC call (a copy of it). */
6100
6101 static gfc_expr*
6102 extract_ppc_passed_object (gfc_expr *e)
6103 {
6104 gfc_expr *po;
6105 gfc_ref **ref;
6106
6107 po = gfc_get_expr ();
6108 po->expr_type = EXPR_VARIABLE;
6109 po->symtree = e->symtree;
6110 po->ref = gfc_copy_ref (e->ref);
6111 po->where = e->where;
6112
6113 /* Remove PPC reference. */
6114 ref = &po->ref;
6115 while ((*ref)->next)
6116 ref = &(*ref)->next;
6117 gfc_free_ref_list (*ref);
6118 *ref = NULL;
6119
6120 if (!gfc_resolve_expr (po))
6121 return NULL;
6122
6123 return po;
6124 }
6125
6126
6127 /* Update the actual arglist of a procedure pointer component to include the
6128 passed-object. */
6129
6130 static bool
6131 update_ppc_arglist (gfc_expr* e)
6132 {
6133 gfc_expr* po;
6134 gfc_component *ppc;
6135 gfc_typebound_proc* tb;
6136
6137 ppc = gfc_get_proc_ptr_comp (e);
6138 if (!ppc)
6139 return false;
6140
6141 tb = ppc->tb;
6142
6143 if (tb->error)
6144 return false;
6145 else if (tb->nopass)
6146 return true;
6147
6148 po = extract_ppc_passed_object (e);
6149 if (!po)
6150 return false;
6151
6152 /* F08:R739. */
6153 if (po->rank != 0)
6154 {
6155 gfc_error ("Passed-object at %L must be scalar", &e->where);
6156 return false;
6157 }
6158
6159 /* F08:C611. */
6160 if (po->ts.type == BT_DERIVED && po->ts.u.derived->attr.abstract)
6161 {
6162 gfc_error ("Base object for procedure-pointer component call at %L is of"
6163 " ABSTRACT type %qs", &e->where, po->ts.u.derived->name);
6164 return false;
6165 }
6166
6167 gcc_assert (tb->pass_arg_num > 0);
6168 e->value.compcall.actual = update_arglist_pass (e->value.compcall.actual, po,
6169 tb->pass_arg_num,
6170 tb->pass_arg);
6171
6172 return true;
6173 }
6174
6175
6176 /* Check that the object a TBP is called on is valid, i.e. it must not be
6177 of ABSTRACT type (as in subobject%abstract_parent%tbp()). */
6178
6179 static bool
6180 check_typebound_baseobject (gfc_expr* e)
6181 {
6182 gfc_expr* base;
6183 bool return_value = false;
6184
6185 base = extract_compcall_passed_object (e);
6186 if (!base)
6187 return false;
6188
6189 if (base->ts.type != BT_DERIVED && base->ts.type != BT_CLASS)
6190 {
6191 gfc_error ("Error in typebound call at %L", &e->where);
6192 goto cleanup;
6193 }
6194
6195 if (base->ts.type == BT_CLASS && !gfc_expr_attr (base).class_ok)
6196 return false;
6197
6198 /* F08:C611. */
6199 if (base->ts.type == BT_DERIVED && base->ts.u.derived->attr.abstract)
6200 {
6201 gfc_error ("Base object for type-bound procedure call at %L is of"
6202 " ABSTRACT type %qs", &e->where, base->ts.u.derived->name);
6203 goto cleanup;
6204 }
6205
6206 /* F08:C1230. If the procedure called is NOPASS,
6207 the base object must be scalar. */
6208 if (e->value.compcall.tbp->nopass && base->rank != 0)
6209 {
6210 gfc_error ("Base object for NOPASS type-bound procedure call at %L must"
6211 " be scalar", &e->where);
6212 goto cleanup;
6213 }
6214
6215 return_value = true;
6216
6217 cleanup:
6218 gfc_free_expr (base);
6219 return return_value;
6220 }
6221
6222
6223 /* Resolve a call to a type-bound procedure, either function or subroutine,
6224 statically from the data in an EXPR_COMPCALL expression. The adapted
6225 arglist and the target-procedure symtree are returned. */
6226
6227 static bool
6228 resolve_typebound_static (gfc_expr* e, gfc_symtree** target,
6229 gfc_actual_arglist** actual)
6230 {
6231 gcc_assert (e->expr_type == EXPR_COMPCALL);
6232 gcc_assert (!e->value.compcall.tbp->is_generic);
6233
6234 /* Update the actual arglist for PASS. */
6235 if (!update_compcall_arglist (e))
6236 return false;
6237
6238 *actual = e->value.compcall.actual;
6239 *target = e->value.compcall.tbp->u.specific;
6240
6241 gfc_free_ref_list (e->ref);
6242 e->ref = NULL;
6243 e->value.compcall.actual = NULL;
6244
6245 /* If we find a deferred typebound procedure, check for derived types
6246 that an overriding typebound procedure has not been missed. */
6247 if (e->value.compcall.name
6248 && !e->value.compcall.tbp->non_overridable
6249 && e->value.compcall.base_object
6250 && e->value.compcall.base_object->ts.type == BT_DERIVED)
6251 {
6252 gfc_symtree *st;
6253 gfc_symbol *derived;
6254
6255 /* Use the derived type of the base_object. */
6256 derived = e->value.compcall.base_object->ts.u.derived;
6257 st = NULL;
6258
6259 /* If necessary, go through the inheritance chain. */
6260 while (!st && derived)
6261 {
6262 /* Look for the typebound procedure 'name'. */
6263 if (derived->f2k_derived && derived->f2k_derived->tb_sym_root)
6264 st = gfc_find_symtree (derived->f2k_derived->tb_sym_root,
6265 e->value.compcall.name);
6266 if (!st)
6267 derived = gfc_get_derived_super_type (derived);
6268 }
6269
6270 /* Now find the specific name in the derived type namespace. */
6271 if (st && st->n.tb && st->n.tb->u.specific)
6272 gfc_find_sym_tree (st->n.tb->u.specific->name,
6273 derived->ns, 1, &st);
6274 if (st)
6275 *target = st;
6276 }
6277 return true;
6278 }
6279
6280
6281 /* Get the ultimate declared type from an expression. In addition,
6282 return the last class/derived type reference and the copy of the
6283 reference list. If check_types is set true, derived types are
6284 identified as well as class references. */
6285 static gfc_symbol*
6286 get_declared_from_expr (gfc_ref **class_ref, gfc_ref **new_ref,
6287 gfc_expr *e, bool check_types)
6288 {
6289 gfc_symbol *declared;
6290 gfc_ref *ref;
6291
6292 declared = NULL;
6293 if (class_ref)
6294 *class_ref = NULL;
6295 if (new_ref)
6296 *new_ref = gfc_copy_ref (e->ref);
6297
6298 for (ref = e->ref; ref; ref = ref->next)
6299 {
6300 if (ref->type != REF_COMPONENT)
6301 continue;
6302
6303 if ((ref->u.c.component->ts.type == BT_CLASS
6304 || (check_types && gfc_bt_struct (ref->u.c.component->ts.type)))
6305 && ref->u.c.component->attr.flavor != FL_PROCEDURE)
6306 {
6307 declared = ref->u.c.component->ts.u.derived;
6308 if (class_ref)
6309 *class_ref = ref;
6310 }
6311 }
6312
6313 if (declared == NULL)
6314 declared = e->symtree->n.sym->ts.u.derived;
6315
6316 return declared;
6317 }
6318
6319
6320 /* Given an EXPR_COMPCALL calling a GENERIC typebound procedure, figure out
6321 which of the specific bindings (if any) matches the arglist and transform
6322 the expression into a call of that binding. */
6323
6324 static bool
6325 resolve_typebound_generic_call (gfc_expr* e, const char **name)
6326 {
6327 gfc_typebound_proc* genproc;
6328 const char* genname;
6329 gfc_symtree *st;
6330 gfc_symbol *derived;
6331
6332 gcc_assert (e->expr_type == EXPR_COMPCALL);
6333 genname = e->value.compcall.name;
6334 genproc = e->value.compcall.tbp;
6335
6336 if (!genproc->is_generic)
6337 return true;
6338
6339 /* Try the bindings on this type and in the inheritance hierarchy. */
6340 for (; genproc; genproc = genproc->overridden)
6341 {
6342 gfc_tbp_generic* g;
6343
6344 gcc_assert (genproc->is_generic);
6345 for (g = genproc->u.generic; g; g = g->next)
6346 {
6347 gfc_symbol* target;
6348 gfc_actual_arglist* args;
6349 bool matches;
6350
6351 gcc_assert (g->specific);
6352
6353 if (g->specific->error)
6354 continue;
6355
6356 target = g->specific->u.specific->n.sym;
6357
6358 /* Get the right arglist by handling PASS/NOPASS. */
6359 args = gfc_copy_actual_arglist (e->value.compcall.actual);
6360 if (!g->specific->nopass)
6361 {
6362 gfc_expr* po;
6363 po = extract_compcall_passed_object (e);
6364 if (!po)
6365 {
6366 gfc_free_actual_arglist (args);
6367 return false;
6368 }
6369
6370 gcc_assert (g->specific->pass_arg_num > 0);
6371 gcc_assert (!g->specific->error);
6372 args = update_arglist_pass (args, po, g->specific->pass_arg_num,
6373 g->specific->pass_arg);
6374 }
6375 resolve_actual_arglist (args, target->attr.proc,
6376 is_external_proc (target)
6377 && gfc_sym_get_dummy_args (target) == NULL);
6378
6379 /* Check if this arglist matches the formal. */
6380 matches = gfc_arglist_matches_symbol (&args, target);
6381
6382 /* Clean up and break out of the loop if we've found it. */
6383 gfc_free_actual_arglist (args);
6384 if (matches)
6385 {
6386 e->value.compcall.tbp = g->specific;
6387 genname = g->specific_st->name;
6388 /* Pass along the name for CLASS methods, where the vtab
6389 procedure pointer component has to be referenced. */
6390 if (name)
6391 *name = genname;
6392 goto success;
6393 }
6394 }
6395 }
6396
6397 /* Nothing matching found! */
6398 gfc_error ("Found no matching specific binding for the call to the GENERIC"
6399 " %qs at %L", genname, &e->where);
6400 return false;
6401
6402 success:
6403 /* Make sure that we have the right specific instance for the name. */
6404 derived = get_declared_from_expr (NULL, NULL, e, true);
6405
6406 st = gfc_find_typebound_proc (derived, NULL, genname, true, &e->where);
6407 if (st)
6408 e->value.compcall.tbp = st->n.tb;
6409
6410 return true;
6411 }
6412
6413
6414 /* Resolve a call to a type-bound subroutine. */
6415
6416 static bool
6417 resolve_typebound_call (gfc_code* c, const char **name, bool *overridable)
6418 {
6419 gfc_actual_arglist* newactual;
6420 gfc_symtree* target;
6421
6422 /* Check that's really a SUBROUTINE. */
6423 if (!c->expr1->value.compcall.tbp->subroutine)
6424 {
6425 if (!c->expr1->value.compcall.tbp->is_generic
6426 && c->expr1->value.compcall.tbp->u.specific
6427 && c->expr1->value.compcall.tbp->u.specific->n.sym
6428 && c->expr1->value.compcall.tbp->u.specific->n.sym->attr.subroutine)
6429 c->expr1->value.compcall.tbp->subroutine = 1;
6430 else
6431 {
6432 gfc_error ("%qs at %L should be a SUBROUTINE",
6433 c->expr1->value.compcall.name, &c->loc);
6434 return false;
6435 }
6436 }
6437
6438 if (!check_typebound_baseobject (c->expr1))
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 = c->expr1->value.compcall.name;
6445
6446 if (!resolve_typebound_generic_call (c->expr1, name))
6447 return false;
6448
6449 /* Pass along the NON_OVERRIDABLE attribute of the specific TBP. */
6450 if (overridable)
6451 *overridable = !c->expr1->value.compcall.tbp->non_overridable;
6452
6453 /* Transform into an ordinary EXEC_CALL for now. */
6454
6455 if (!resolve_typebound_static (c->expr1, &target, &newactual))
6456 return false;
6457
6458 c->ext.actual = newactual;
6459 c->symtree = target;
6460 c->op = (c->expr1->value.compcall.assign ? EXEC_ASSIGN_CALL : EXEC_CALL);
6461
6462 gcc_assert (!c->expr1->ref && !c->expr1->value.compcall.actual);
6463
6464 gfc_free_expr (c->expr1);
6465 c->expr1 = gfc_get_expr ();
6466 c->expr1->expr_type = EXPR_FUNCTION;
6467 c->expr1->symtree = target;
6468 c->expr1->where = c->loc;
6469
6470 return resolve_call (c);
6471 }
6472
6473
6474 /* Resolve a component-call expression. */
6475 static bool
6476 resolve_compcall (gfc_expr* e, const char **name)
6477 {
6478 gfc_actual_arglist* newactual;
6479 gfc_symtree* target;
6480
6481 /* Check that's really a FUNCTION. */
6482 if (!e->value.compcall.tbp->function)
6483 {
6484 gfc_error ("%qs at %L should be a FUNCTION",
6485 e->value.compcall.name, &e->where);
6486 return false;
6487 }
6488
6489
6490 /* These must not be assign-calls! */
6491 gcc_assert (!e->value.compcall.assign);
6492
6493 if (!check_typebound_baseobject (e))
6494 return false;
6495
6496 /* Pass along the name for CLASS methods, where the vtab
6497 procedure pointer component has to be referenced. */
6498 if (name)
6499 *name = e->value.compcall.name;
6500
6501 if (!resolve_typebound_generic_call (e, name))
6502 return false;
6503 gcc_assert (!e->value.compcall.tbp->is_generic);
6504
6505 /* Take the rank from the function's symbol. */
6506 if (e->value.compcall.tbp->u.specific->n.sym->as)
6507 e->rank = e->value.compcall.tbp->u.specific->n.sym->as->rank;
6508
6509 /* For now, we simply transform it into an EXPR_FUNCTION call with the same
6510 arglist to the TBP's binding target. */
6511
6512 if (!resolve_typebound_static (e, &target, &newactual))
6513 return false;
6514
6515 e->value.function.actual = newactual;
6516 e->value.function.name = NULL;
6517 e->value.function.esym = target->n.sym;
6518 e->value.function.isym = NULL;
6519 e->symtree = target;
6520 e->ts = target->n.sym->ts;
6521 e->expr_type = EXPR_FUNCTION;
6522
6523 /* Resolution is not necessary if this is a class subroutine; this
6524 function only has to identify the specific proc. Resolution of
6525 the call will be done next in resolve_typebound_call. */
6526 return gfc_resolve_expr (e);
6527 }
6528
6529
6530 static bool resolve_fl_derived (gfc_symbol *sym);
6531
6532
6533 /* Resolve a typebound function, or 'method'. First separate all
6534 the non-CLASS references by calling resolve_compcall directly. */
6535
6536 static bool
6537 resolve_typebound_function (gfc_expr* e)
6538 {
6539 gfc_symbol *declared;
6540 gfc_component *c;
6541 gfc_ref *new_ref;
6542 gfc_ref *class_ref;
6543 gfc_symtree *st;
6544 const char *name;
6545 gfc_typespec ts;
6546 gfc_expr *expr;
6547 bool overridable;
6548
6549 st = e->symtree;
6550
6551 /* Deal with typebound operators for CLASS objects. */
6552 expr = e->value.compcall.base_object;
6553 overridable = !e->value.compcall.tbp->non_overridable;
6554 if (expr && expr->ts.type == BT_CLASS && e->value.compcall.name)
6555 {
6556 /* If the base_object is not a variable, the corresponding actual
6557 argument expression must be stored in e->base_expression so
6558 that the corresponding tree temporary can be used as the base
6559 object in gfc_conv_procedure_call. */
6560 if (expr->expr_type != EXPR_VARIABLE)
6561 {
6562 gfc_actual_arglist *args;
6563
6564 for (args= e->value.function.actual; args; args = args->next)
6565 {
6566 if (expr == args->expr)
6567 expr = args->expr;
6568 }
6569 }
6570
6571 /* Since the typebound operators are generic, we have to ensure
6572 that any delays in resolution are corrected and that the vtab
6573 is present. */
6574 ts = expr->ts;
6575 declared = ts.u.derived;
6576 c = gfc_find_component (declared, "_vptr", true, true, NULL);
6577 if (c->ts.u.derived == NULL)
6578 c->ts.u.derived = gfc_find_derived_vtab (declared);
6579
6580 if (!resolve_compcall (e, &name))
6581 return false;
6582
6583 /* Use the generic name if it is there. */
6584 name = name ? name : e->value.function.esym->name;
6585 e->symtree = expr->symtree;
6586 e->ref = gfc_copy_ref (expr->ref);
6587 get_declared_from_expr (&class_ref, NULL, e, false);
6588
6589 /* Trim away the extraneous references that emerge from nested
6590 use of interface.c (extend_expr). */
6591 if (class_ref && class_ref->next)
6592 {
6593 gfc_free_ref_list (class_ref->next);
6594 class_ref->next = NULL;
6595 }
6596 else if (e->ref && !class_ref && expr->ts.type != BT_CLASS)
6597 {
6598 gfc_free_ref_list (e->ref);
6599 e->ref = NULL;
6600 }
6601
6602 gfc_add_vptr_component (e);
6603 gfc_add_component_ref (e, name);
6604 e->value.function.esym = NULL;
6605 if (expr->expr_type != EXPR_VARIABLE)
6606 e->base_expr = expr;
6607 return true;
6608 }
6609
6610 if (st == NULL)
6611 return resolve_compcall (e, NULL);
6612
6613 if (!resolve_ref (e))
6614 return false;
6615
6616 /* Get the CLASS declared type. */
6617 declared = get_declared_from_expr (&class_ref, &new_ref, e, true);
6618
6619 if (!resolve_fl_derived (declared))
6620 return false;
6621
6622 /* Weed out cases of the ultimate component being a derived type. */
6623 if ((class_ref && gfc_bt_struct (class_ref->u.c.component->ts.type))
6624 || (!class_ref && st->n.sym->ts.type != BT_CLASS))
6625 {
6626 gfc_free_ref_list (new_ref);
6627 return resolve_compcall (e, NULL);
6628 }
6629
6630 c = gfc_find_component (declared, "_data", true, true, NULL);
6631
6632 /* Treat the call as if it is a typebound procedure, in order to roll
6633 out the correct name for the specific function. */
6634 if (!resolve_compcall (e, &name))
6635 {
6636 gfc_free_ref_list (new_ref);
6637 return false;
6638 }
6639 ts = e->ts;
6640
6641 if (overridable)
6642 {
6643 /* Convert the expression to a procedure pointer component call. */
6644 e->value.function.esym = NULL;
6645 e->symtree = st;
6646
6647 if (new_ref)
6648 e->ref = new_ref;
6649
6650 /* '_vptr' points to the vtab, which contains the procedure pointers. */
6651 gfc_add_vptr_component (e);
6652 gfc_add_component_ref (e, name);
6653
6654 /* Recover the typespec for the expression. This is really only
6655 necessary for generic procedures, where the additional call
6656 to gfc_add_component_ref seems to throw the collection of the
6657 correct typespec. */
6658 e->ts = ts;
6659 }
6660 else if (new_ref)
6661 gfc_free_ref_list (new_ref);
6662
6663 return true;
6664 }
6665
6666 /* Resolve a typebound subroutine, or 'method'. First separate all
6667 the non-CLASS references by calling resolve_typebound_call
6668 directly. */
6669
6670 static bool
6671 resolve_typebound_subroutine (gfc_code *code)
6672 {
6673 gfc_symbol *declared;
6674 gfc_component *c;
6675 gfc_ref *new_ref;
6676 gfc_ref *class_ref;
6677 gfc_symtree *st;
6678 const char *name;
6679 gfc_typespec ts;
6680 gfc_expr *expr;
6681 bool overridable;
6682
6683 st = code->expr1->symtree;
6684
6685 /* Deal with typebound operators for CLASS objects. */
6686 expr = code->expr1->value.compcall.base_object;
6687 overridable = !code->expr1->value.compcall.tbp->non_overridable;
6688 if (expr && expr->ts.type == BT_CLASS && code->expr1->value.compcall.name)
6689 {
6690 /* If the base_object is not a variable, the corresponding actual
6691 argument expression must be stored in e->base_expression so
6692 that the corresponding tree temporary can be used as the base
6693 object in gfc_conv_procedure_call. */
6694 if (expr->expr_type != EXPR_VARIABLE)
6695 {
6696 gfc_actual_arglist *args;
6697
6698 args= code->expr1->value.function.actual;
6699 for (; args; args = args->next)
6700 if (expr == args->expr)
6701 expr = args->expr;
6702 }
6703
6704 /* Since the typebound operators are generic, we have to ensure
6705 that any delays in resolution are corrected and that the vtab
6706 is present. */
6707 declared = expr->ts.u.derived;
6708 c = gfc_find_component (declared, "_vptr", true, true, NULL);
6709 if (c->ts.u.derived == NULL)
6710 c->ts.u.derived = gfc_find_derived_vtab (declared);
6711
6712 if (!resolve_typebound_call (code, &name, NULL))
6713 return false;
6714
6715 /* Use the generic name if it is there. */
6716 name = name ? name : code->expr1->value.function.esym->name;
6717 code->expr1->symtree = expr->symtree;
6718 code->expr1->ref = gfc_copy_ref (expr->ref);
6719
6720 /* Trim away the extraneous references that emerge from nested
6721 use of interface.c (extend_expr). */
6722 get_declared_from_expr (&class_ref, NULL, code->expr1, false);
6723 if (class_ref && class_ref->next)
6724 {
6725 gfc_free_ref_list (class_ref->next);
6726 class_ref->next = NULL;
6727 }
6728 else if (code->expr1->ref && !class_ref)
6729 {
6730 gfc_free_ref_list (code->expr1->ref);
6731 code->expr1->ref = NULL;
6732 }
6733
6734 /* Now use the procedure in the vtable. */
6735 gfc_add_vptr_component (code->expr1);
6736 gfc_add_component_ref (code->expr1, name);
6737 code->expr1->value.function.esym = NULL;
6738 if (expr->expr_type != EXPR_VARIABLE)
6739 code->expr1->base_expr = expr;
6740 return true;
6741 }
6742
6743 if (st == NULL)
6744 return resolve_typebound_call (code, NULL, NULL);
6745
6746 if (!resolve_ref (code->expr1))
6747 return false;
6748
6749 /* Get the CLASS declared type. */
6750 get_declared_from_expr (&class_ref, &new_ref, code->expr1, true);
6751
6752 /* Weed out cases of the ultimate component being a derived type. */
6753 if ((class_ref && gfc_bt_struct (class_ref->u.c.component->ts.type))
6754 || (!class_ref && st->n.sym->ts.type != BT_CLASS))
6755 {
6756 gfc_free_ref_list (new_ref);
6757 return resolve_typebound_call (code, NULL, NULL);
6758 }
6759
6760 if (!resolve_typebound_call (code, &name, &overridable))
6761 {
6762 gfc_free_ref_list (new_ref);
6763 return false;
6764 }
6765 ts = code->expr1->ts;
6766
6767 if (overridable)
6768 {
6769 /* Convert the expression to a procedure pointer component call. */
6770 code->expr1->value.function.esym = NULL;
6771 code->expr1->symtree = st;
6772
6773 if (new_ref)
6774 code->expr1->ref = new_ref;
6775
6776 /* '_vptr' points to the vtab, which contains the procedure pointers. */
6777 gfc_add_vptr_component (code->expr1);
6778 gfc_add_component_ref (code->expr1, name);
6779
6780 /* Recover the typespec for the expression. This is really only
6781 necessary for generic procedures, where the additional call
6782 to gfc_add_component_ref seems to throw the collection of the
6783 correct typespec. */
6784 code->expr1->ts = ts;
6785 }
6786 else if (new_ref)
6787 gfc_free_ref_list (new_ref);
6788
6789 return true;
6790 }
6791
6792
6793 /* Resolve a CALL to a Procedure Pointer Component (Subroutine). */
6794
6795 static bool
6796 resolve_ppc_call (gfc_code* c)
6797 {
6798 gfc_component *comp;
6799
6800 comp = gfc_get_proc_ptr_comp (c->expr1);
6801 gcc_assert (comp != NULL);
6802
6803 c->resolved_sym = c->expr1->symtree->n.sym;
6804 c->expr1->expr_type = EXPR_VARIABLE;
6805
6806 if (!comp->attr.subroutine)
6807 gfc_add_subroutine (&comp->attr, comp->name, &c->expr1->where);
6808
6809 if (!resolve_ref (c->expr1))
6810 return false;
6811
6812 if (!update_ppc_arglist (c->expr1))
6813 return false;
6814
6815 c->ext.actual = c->expr1->value.compcall.actual;
6816
6817 if (!resolve_actual_arglist (c->ext.actual, comp->attr.proc,
6818 !(comp->ts.interface
6819 && comp->ts.interface->formal)))
6820 return false;
6821
6822 if (!pure_subroutine (comp->ts.interface, comp->name, &c->expr1->where))
6823 return false;
6824
6825 gfc_ppc_use (comp, &c->expr1->value.compcall.actual, &c->expr1->where);
6826
6827 return true;
6828 }
6829
6830
6831 /* Resolve a Function Call to a Procedure Pointer Component (Function). */
6832
6833 static bool
6834 resolve_expr_ppc (gfc_expr* e)
6835 {
6836 gfc_component *comp;
6837
6838 comp = gfc_get_proc_ptr_comp (e);
6839 gcc_assert (comp != NULL);
6840
6841 /* Convert to EXPR_FUNCTION. */
6842 e->expr_type = EXPR_FUNCTION;
6843 e->value.function.isym = NULL;
6844 e->value.function.actual = e->value.compcall.actual;
6845 e->ts = comp->ts;
6846 if (comp->as != NULL)
6847 e->rank = comp->as->rank;
6848
6849 if (!comp->attr.function)
6850 gfc_add_function (&comp->attr, comp->name, &e->where);
6851
6852 if (!resolve_ref (e))
6853 return false;
6854
6855 if (!resolve_actual_arglist (e->value.function.actual, comp->attr.proc,
6856 !(comp->ts.interface
6857 && comp->ts.interface->formal)))
6858 return false;
6859
6860 if (!update_ppc_arglist (e))
6861 return false;
6862
6863 if (!check_pure_function(e))
6864 return false;
6865
6866 gfc_ppc_use (comp, &e->value.compcall.actual, &e->where);
6867
6868 return true;
6869 }
6870
6871
6872 static bool
6873 gfc_is_expandable_expr (gfc_expr *e)
6874 {
6875 gfc_constructor *con;
6876
6877 if (e->expr_type == EXPR_ARRAY)
6878 {
6879 /* Traverse the constructor looking for variables that are flavor
6880 parameter. Parameters must be expanded since they are fully used at
6881 compile time. */
6882 con = gfc_constructor_first (e->value.constructor);
6883 for (; con; con = gfc_constructor_next (con))
6884 {
6885 if (con->expr->expr_type == EXPR_VARIABLE
6886 && con->expr->symtree
6887 && (con->expr->symtree->n.sym->attr.flavor == FL_PARAMETER
6888 || con->expr->symtree->n.sym->attr.flavor == FL_VARIABLE))
6889 return true;
6890 if (con->expr->expr_type == EXPR_ARRAY
6891 && gfc_is_expandable_expr (con->expr))
6892 return true;
6893 }
6894 }
6895
6896 return false;
6897 }
6898
6899
6900 /* Sometimes variables in specification expressions of the result
6901 of module procedures in submodules wind up not being the 'real'
6902 dummy. Find this, if possible, in the namespace of the first
6903 formal argument. */
6904
6905 static void
6906 fixup_unique_dummy (gfc_expr *e)
6907 {
6908 gfc_symtree *st = NULL;
6909 gfc_symbol *s = NULL;
6910
6911 if (e->symtree->n.sym->ns->proc_name
6912 && e->symtree->n.sym->ns->proc_name->formal)
6913 s = e->symtree->n.sym->ns->proc_name->formal->sym;
6914
6915 if (s != NULL)
6916 st = gfc_find_symtree (s->ns->sym_root, e->symtree->n.sym->name);
6917
6918 if (st != NULL
6919 && st->n.sym != NULL
6920 && st->n.sym->attr.dummy)
6921 e->symtree = st;
6922 }
6923
6924 /* Resolve an expression. That is, make sure that types of operands agree
6925 with their operators, intrinsic operators are converted to function calls
6926 for overloaded types and unresolved function references are resolved. */
6927
6928 bool
6929 gfc_resolve_expr (gfc_expr *e)
6930 {
6931 bool t;
6932 bool inquiry_save, actual_arg_save, first_actual_arg_save;
6933
6934 if (e == NULL || e->do_not_resolve_again)
6935 return true;
6936
6937 /* inquiry_argument only applies to variables. */
6938 inquiry_save = inquiry_argument;
6939 actual_arg_save = actual_arg;
6940 first_actual_arg_save = first_actual_arg;
6941
6942 if (e->expr_type != EXPR_VARIABLE)
6943 {
6944 inquiry_argument = false;
6945 actual_arg = false;
6946 first_actual_arg = false;
6947 }
6948 else if (e->symtree != NULL
6949 && *e->symtree->name == '@'
6950 && e->symtree->n.sym->attr.dummy)
6951 {
6952 /* Deal with submodule specification expressions that are not
6953 found to be referenced in module.c(read_cleanup). */
6954 fixup_unique_dummy (e);
6955 }
6956
6957 switch (e->expr_type)
6958 {
6959 case EXPR_OP:
6960 t = resolve_operator (e);
6961 break;
6962
6963 case EXPR_FUNCTION:
6964 case EXPR_VARIABLE:
6965
6966 if (check_host_association (e))
6967 t = resolve_function (e);
6968 else
6969 t = resolve_variable (e);
6970
6971 if (e->ts.type == BT_CHARACTER && e->ts.u.cl == NULL && e->ref
6972 && e->ref->type != REF_SUBSTRING)
6973 gfc_resolve_substring_charlen (e);
6974
6975 break;
6976
6977 case EXPR_COMPCALL:
6978 t = resolve_typebound_function (e);
6979 break;
6980
6981 case EXPR_SUBSTRING:
6982 t = resolve_ref (e);
6983 break;
6984
6985 case EXPR_CONSTANT:
6986 case EXPR_NULL:
6987 t = true;
6988 break;
6989
6990 case EXPR_PPC:
6991 t = resolve_expr_ppc (e);
6992 break;
6993
6994 case EXPR_ARRAY:
6995 t = false;
6996 if (!resolve_ref (e))
6997 break;
6998
6999 t = gfc_resolve_array_constructor (e);
7000 /* Also try to expand a constructor. */
7001 if (t)
7002 {
7003 expression_rank (e);
7004 if (gfc_is_constant_expr (e) || gfc_is_expandable_expr (e))
7005 gfc_expand_constructor (e, false);
7006 }
7007
7008 /* This provides the opportunity for the length of constructors with
7009 character valued function elements to propagate the string length
7010 to the expression. */
7011 if (t && e->ts.type == BT_CHARACTER)
7012 {
7013 /* For efficiency, we call gfc_expand_constructor for BT_CHARACTER
7014 here rather then add a duplicate test for it above. */
7015 gfc_expand_constructor (e, false);
7016 t = gfc_resolve_character_array_constructor (e);
7017 }
7018
7019 break;
7020
7021 case EXPR_STRUCTURE:
7022 t = resolve_ref (e);
7023 if (!t)
7024 break;
7025
7026 t = resolve_structure_cons (e, 0);
7027 if (!t)
7028 break;
7029
7030 t = gfc_simplify_expr (e, 0);
7031 break;
7032
7033 default:
7034 gfc_internal_error ("gfc_resolve_expr(): Bad expression type");
7035 }
7036
7037 if (e->ts.type == BT_CHARACTER && t && !e->ts.u.cl)
7038 fixup_charlen (e);
7039
7040 inquiry_argument = inquiry_save;
7041 actual_arg = actual_arg_save;
7042 first_actual_arg = first_actual_arg_save;
7043
7044 /* For some reason, resolving these expressions a second time mangles
7045 the typespec of the expression itself. */
7046 if (t && e->expr_type == EXPR_VARIABLE
7047 && e->symtree->n.sym->attr.select_rank_temporary
7048 && UNLIMITED_POLY (e->symtree->n.sym))
7049 e->do_not_resolve_again = 1;
7050
7051 return t;
7052 }
7053
7054
7055 /* Resolve an expression from an iterator. They must be scalar and have
7056 INTEGER or (optionally) REAL type. */
7057
7058 static bool
7059 gfc_resolve_iterator_expr (gfc_expr *expr, bool real_ok,
7060 const char *name_msgid)
7061 {
7062 if (!gfc_resolve_expr (expr))
7063 return false;
7064
7065 if (expr->rank != 0)
7066 {
7067 gfc_error ("%s at %L must be a scalar", _(name_msgid), &expr->where);
7068 return false;
7069 }
7070
7071 if (expr->ts.type != BT_INTEGER)
7072 {
7073 if (expr->ts.type == BT_REAL)
7074 {
7075 if (real_ok)
7076 return gfc_notify_std (GFC_STD_F95_DEL,
7077 "%s at %L must be integer",
7078 _(name_msgid), &expr->where);
7079 else
7080 {
7081 gfc_error ("%s at %L must be INTEGER", _(name_msgid),
7082 &expr->where);
7083 return false;
7084 }
7085 }
7086 else
7087 {
7088 gfc_error ("%s at %L must be INTEGER", _(name_msgid), &expr->where);
7089 return false;
7090 }
7091 }
7092 return true;
7093 }
7094
7095
7096 /* Resolve the expressions in an iterator structure. If REAL_OK is
7097 false allow only INTEGER type iterators, otherwise allow REAL types.
7098 Set own_scope to true for ac-implied-do and data-implied-do as those
7099 have a separate scope such that, e.g., a INTENT(IN) doesn't apply. */
7100
7101 bool
7102 gfc_resolve_iterator (gfc_iterator *iter, bool real_ok, bool own_scope)
7103 {
7104 if (!gfc_resolve_iterator_expr (iter->var, real_ok, "Loop variable"))
7105 return false;
7106
7107 if (!gfc_check_vardef_context (iter->var, false, false, own_scope,
7108 _("iterator variable")))
7109 return false;
7110
7111 if (!gfc_resolve_iterator_expr (iter->start, real_ok,
7112 "Start expression in DO loop"))
7113 return false;
7114
7115 if (!gfc_resolve_iterator_expr (iter->end, real_ok,
7116 "End expression in DO loop"))
7117 return false;
7118
7119 if (!gfc_resolve_iterator_expr (iter->step, real_ok,
7120 "Step expression in DO loop"))
7121 return false;
7122
7123 /* Convert start, end, and step to the same type as var. */
7124 if (iter->start->ts.kind != iter->var->ts.kind
7125 || iter->start->ts.type != iter->var->ts.type)
7126 gfc_convert_type (iter->start, &iter->var->ts, 1);
7127
7128 if (iter->end->ts.kind != iter->var->ts.kind
7129 || iter->end->ts.type != iter->var->ts.type)
7130 gfc_convert_type (iter->end, &iter->var->ts, 1);
7131
7132 if (iter->step->ts.kind != iter->var->ts.kind
7133 || iter->step->ts.type != iter->var->ts.type)
7134 gfc_convert_type (iter->step, &iter->var->ts, 1);
7135
7136 if (iter->step->expr_type == EXPR_CONSTANT)
7137 {
7138 if ((iter->step->ts.type == BT_INTEGER
7139 && mpz_cmp_ui (iter->step->value.integer, 0) == 0)
7140 || (iter->step->ts.type == BT_REAL
7141 && mpfr_sgn (iter->step->value.real) == 0))
7142 {
7143 gfc_error ("Step expression in DO loop at %L cannot be zero",
7144 &iter->step->where);
7145 return false;
7146 }
7147 }
7148
7149 if (iter->start->expr_type == EXPR_CONSTANT
7150 && iter->end->expr_type == EXPR_CONSTANT
7151 && iter->step->expr_type == EXPR_CONSTANT)
7152 {
7153 int sgn, cmp;
7154 if (iter->start->ts.type == BT_INTEGER)
7155 {
7156 sgn = mpz_cmp_ui (iter->step->value.integer, 0);
7157 cmp = mpz_cmp (iter->end->value.integer, iter->start->value.integer);
7158 }
7159 else
7160 {
7161 sgn = mpfr_sgn (iter->step->value.real);
7162 cmp = mpfr_cmp (iter->end->value.real, iter->start->value.real);
7163 }
7164 if (warn_zerotrip && ((sgn > 0 && cmp < 0) || (sgn < 0 && cmp > 0)))
7165 gfc_warning (OPT_Wzerotrip,
7166 "DO loop at %L will be executed zero times",
7167 &iter->step->where);
7168 }
7169
7170 if (iter->end->expr_type == EXPR_CONSTANT
7171 && iter->end->ts.type == BT_INTEGER
7172 && iter->step->expr_type == EXPR_CONSTANT
7173 && iter->step->ts.type == BT_INTEGER
7174 && (mpz_cmp_si (iter->step->value.integer, -1L) == 0
7175 || mpz_cmp_si (iter->step->value.integer, 1L) == 0))
7176 {
7177 bool is_step_positive = mpz_cmp_ui (iter->step->value.integer, 1) == 0;
7178 int k = gfc_validate_kind (BT_INTEGER, iter->end->ts.kind, false);
7179
7180 if (is_step_positive
7181 && mpz_cmp (iter->end->value.integer, gfc_integer_kinds[k].huge) == 0)
7182 gfc_warning (OPT_Wundefined_do_loop,
7183 "DO loop at %L is undefined as it overflows",
7184 &iter->step->where);
7185 else if (!is_step_positive
7186 && mpz_cmp (iter->end->value.integer,
7187 gfc_integer_kinds[k].min_int) == 0)
7188 gfc_warning (OPT_Wundefined_do_loop,
7189 "DO loop at %L is undefined as it underflows",
7190 &iter->step->where);
7191 }
7192
7193 return true;
7194 }
7195
7196
7197 /* Traversal function for find_forall_index. f == 2 signals that
7198 that variable itself is not to be checked - only the references. */
7199
7200 static bool
7201 forall_index (gfc_expr *expr, gfc_symbol *sym, int *f)
7202 {
7203 if (expr->expr_type != EXPR_VARIABLE)
7204 return false;
7205
7206 /* A scalar assignment */
7207 if (!expr->ref || *f == 1)
7208 {
7209 if (expr->symtree->n.sym == sym)
7210 return true;
7211 else
7212 return false;
7213 }
7214
7215 if (*f == 2)
7216 *f = 1;
7217 return false;
7218 }
7219
7220
7221 /* Check whether the FORALL index appears in the expression or not.
7222 Returns true if SYM is found in EXPR. */
7223
7224 bool
7225 find_forall_index (gfc_expr *expr, gfc_symbol *sym, int f)
7226 {
7227 if (gfc_traverse_expr (expr, sym, forall_index, f))
7228 return true;
7229 else
7230 return false;
7231 }
7232
7233
7234 /* Resolve a list of FORALL iterators. The FORALL index-name is constrained
7235 to be a scalar INTEGER variable. The subscripts and stride are scalar
7236 INTEGERs, and if stride is a constant it must be nonzero.
7237 Furthermore "A subscript or stride in a forall-triplet-spec shall
7238 not contain a reference to any index-name in the
7239 forall-triplet-spec-list in which it appears." (7.5.4.1) */
7240
7241 static void
7242 resolve_forall_iterators (gfc_forall_iterator *it)
7243 {
7244 gfc_forall_iterator *iter, *iter2;
7245
7246 for (iter = it; iter; iter = iter->next)
7247 {
7248 if (gfc_resolve_expr (iter->var)
7249 && (iter->var->ts.type != BT_INTEGER || iter->var->rank != 0))
7250 gfc_error ("FORALL index-name at %L must be a scalar INTEGER",
7251 &iter->var->where);
7252
7253 if (gfc_resolve_expr (iter->start)
7254 && (iter->start->ts.type != BT_INTEGER || iter->start->rank != 0))
7255 gfc_error ("FORALL start expression at %L must be a scalar INTEGER",
7256 &iter->start->where);
7257 if (iter->var->ts.kind != iter->start->ts.kind)
7258 gfc_convert_type (iter->start, &iter->var->ts, 1);
7259
7260 if (gfc_resolve_expr (iter->end)
7261 && (iter->end->ts.type != BT_INTEGER || iter->end->rank != 0))
7262 gfc_error ("FORALL end expression at %L must be a scalar INTEGER",
7263 &iter->end->where);
7264 if (iter->var->ts.kind != iter->end->ts.kind)
7265 gfc_convert_type (iter->end, &iter->var->ts, 1);
7266
7267 if (gfc_resolve_expr (iter->stride))
7268 {
7269 if (iter->stride->ts.type != BT_INTEGER || iter->stride->rank != 0)
7270 gfc_error ("FORALL stride expression at %L must be a scalar %s",
7271 &iter->stride->where, "INTEGER");
7272
7273 if (iter->stride->expr_type == EXPR_CONSTANT
7274 && mpz_cmp_ui (iter->stride->value.integer, 0) == 0)
7275 gfc_error ("FORALL stride expression at %L cannot be zero",
7276 &iter->stride->where);
7277 }
7278 if (iter->var->ts.kind != iter->stride->ts.kind)
7279 gfc_convert_type (iter->stride, &iter->var->ts, 1);
7280 }
7281
7282 for (iter = it; iter; iter = iter->next)
7283 for (iter2 = iter; iter2; iter2 = iter2->next)
7284 {
7285 if (find_forall_index (iter2->start, iter->var->symtree->n.sym, 0)
7286 || find_forall_index (iter2->end, iter->var->symtree->n.sym, 0)
7287 || find_forall_index (iter2->stride, iter->var->symtree->n.sym, 0))
7288 gfc_error ("FORALL index %qs may not appear in triplet "
7289 "specification at %L", iter->var->symtree->name,
7290 &iter2->start->where);
7291 }
7292 }
7293
7294
7295 /* Given a pointer to a symbol that is a derived type, see if it's
7296 inaccessible, i.e. if it's defined in another module and the components are
7297 PRIVATE. The search is recursive if necessary. Returns zero if no
7298 inaccessible components are found, nonzero otherwise. */
7299
7300 static int
7301 derived_inaccessible (gfc_symbol *sym)
7302 {
7303 gfc_component *c;
7304
7305 if (sym->attr.use_assoc && sym->attr.private_comp)
7306 return 1;
7307
7308 for (c = sym->components; c; c = c->next)
7309 {
7310 /* Prevent an infinite loop through this function. */
7311 if (c->ts.type == BT_DERIVED && c->attr.pointer
7312 && sym == c->ts.u.derived)
7313 continue;
7314
7315 if (c->ts.type == BT_DERIVED && derived_inaccessible (c->ts.u.derived))
7316 return 1;
7317 }
7318
7319 return 0;
7320 }
7321
7322
7323 /* Resolve the argument of a deallocate expression. The expression must be
7324 a pointer or a full array. */
7325
7326 static bool
7327 resolve_deallocate_expr (gfc_expr *e)
7328 {
7329 symbol_attribute attr;
7330 int allocatable, pointer;
7331 gfc_ref *ref;
7332 gfc_symbol *sym;
7333 gfc_component *c;
7334 bool unlimited;
7335
7336 if (!gfc_resolve_expr (e))
7337 return false;
7338
7339 if (e->expr_type != EXPR_VARIABLE)
7340 goto bad;
7341
7342 sym = e->symtree->n.sym;
7343 unlimited = UNLIMITED_POLY(sym);
7344
7345 if (sym->ts.type == BT_CLASS)
7346 {
7347 allocatable = CLASS_DATA (sym)->attr.allocatable;
7348 pointer = CLASS_DATA (sym)->attr.class_pointer;
7349 }
7350 else
7351 {
7352 allocatable = sym->attr.allocatable;
7353 pointer = sym->attr.pointer;
7354 }
7355 for (ref = e->ref; ref; ref = ref->next)
7356 {
7357 switch (ref->type)
7358 {
7359 case REF_ARRAY:
7360 if (ref->u.ar.type != AR_FULL
7361 && !(ref->u.ar.type == AR_ELEMENT && ref->u.ar.as->rank == 0
7362 && ref->u.ar.codimen && gfc_ref_this_image (ref)))
7363 allocatable = 0;
7364 break;
7365
7366 case REF_COMPONENT:
7367 c = ref->u.c.component;
7368 if (c->ts.type == BT_CLASS)
7369 {
7370 allocatable = CLASS_DATA (c)->attr.allocatable;
7371 pointer = CLASS_DATA (c)->attr.class_pointer;
7372 }
7373 else
7374 {
7375 allocatable = c->attr.allocatable;
7376 pointer = c->attr.pointer;
7377 }
7378 break;
7379
7380 case REF_SUBSTRING:
7381 case REF_INQUIRY:
7382 allocatable = 0;
7383 break;
7384 }
7385 }
7386
7387 attr = gfc_expr_attr (e);
7388
7389 if (allocatable == 0 && attr.pointer == 0 && !unlimited)
7390 {
7391 bad:
7392 gfc_error ("Allocate-object at %L must be ALLOCATABLE or a POINTER",
7393 &e->where);
7394 return false;
7395 }
7396
7397 /* F2008, C644. */
7398 if (gfc_is_coindexed (e))
7399 {
7400 gfc_error ("Coindexed allocatable object at %L", &e->where);
7401 return false;
7402 }
7403
7404 if (pointer
7405 && !gfc_check_vardef_context (e, true, true, false,
7406 _("DEALLOCATE object")))
7407 return false;
7408 if (!gfc_check_vardef_context (e, false, true, false,
7409 _("DEALLOCATE object")))
7410 return false;
7411
7412 return true;
7413 }
7414
7415
7416 /* Returns true if the expression e contains a reference to the symbol sym. */
7417 static bool
7418 sym_in_expr (gfc_expr *e, gfc_symbol *sym, int *f ATTRIBUTE_UNUSED)
7419 {
7420 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym == sym)
7421 return true;
7422
7423 return false;
7424 }
7425
7426 bool
7427 gfc_find_sym_in_expr (gfc_symbol *sym, gfc_expr *e)
7428 {
7429 return gfc_traverse_expr (e, sym, sym_in_expr, 0);
7430 }
7431
7432
7433 /* Given the expression node e for an allocatable/pointer of derived type to be
7434 allocated, get the expression node to be initialized afterwards (needed for
7435 derived types with default initializers, and derived types with allocatable
7436 components that need nullification.) */
7437
7438 gfc_expr *
7439 gfc_expr_to_initialize (gfc_expr *e)
7440 {
7441 gfc_expr *result;
7442 gfc_ref *ref;
7443 int i;
7444
7445 result = gfc_copy_expr (e);
7446
7447 /* Change the last array reference from AR_ELEMENT to AR_FULL. */
7448 for (ref = result->ref; ref; ref = ref->next)
7449 if (ref->type == REF_ARRAY && ref->next == NULL)
7450 {
7451 if (ref->u.ar.dimen == 0
7452 && ref->u.ar.as && ref->u.ar.as->corank)
7453 return result;
7454
7455 ref->u.ar.type = AR_FULL;
7456
7457 for (i = 0; i < ref->u.ar.dimen; i++)
7458 ref->u.ar.start[i] = ref->u.ar.end[i] = ref->u.ar.stride[i] = NULL;
7459
7460 break;
7461 }
7462
7463 gfc_free_shape (&result->shape, result->rank);
7464
7465 /* Recalculate rank, shape, etc. */
7466 gfc_resolve_expr (result);
7467 return result;
7468 }
7469
7470
7471 /* If the last ref of an expression is an array ref, return a copy of the
7472 expression with that one removed. Otherwise, a copy of the original
7473 expression. This is used for allocate-expressions and pointer assignment
7474 LHS, where there may be an array specification that needs to be stripped
7475 off when using gfc_check_vardef_context. */
7476
7477 static gfc_expr*
7478 remove_last_array_ref (gfc_expr* e)
7479 {
7480 gfc_expr* e2;
7481 gfc_ref** r;
7482
7483 e2 = gfc_copy_expr (e);
7484 for (r = &e2->ref; *r; r = &(*r)->next)
7485 if ((*r)->type == REF_ARRAY && !(*r)->next)
7486 {
7487 gfc_free_ref_list (*r);
7488 *r = NULL;
7489 break;
7490 }
7491
7492 return e2;
7493 }
7494
7495
7496 /* Used in resolve_allocate_expr to check that a allocation-object and
7497 a source-expr are conformable. This does not catch all possible
7498 cases; in particular a runtime checking is needed. */
7499
7500 static bool
7501 conformable_arrays (gfc_expr *e1, gfc_expr *e2)
7502 {
7503 gfc_ref *tail;
7504 for (tail = e2->ref; tail && tail->next; tail = tail->next);
7505
7506 /* First compare rank. */
7507 if ((tail && (!tail->u.ar.as || e1->rank != tail->u.ar.as->rank))
7508 || (!tail && e1->rank != e2->rank))
7509 {
7510 gfc_error ("Source-expr at %L must be scalar or have the "
7511 "same rank as the allocate-object at %L",
7512 &e1->where, &e2->where);
7513 return false;
7514 }
7515
7516 if (e1->shape)
7517 {
7518 int i;
7519 mpz_t s;
7520
7521 mpz_init (s);
7522
7523 for (i = 0; i < e1->rank; i++)
7524 {
7525 if (tail->u.ar.start[i] == NULL)
7526 break;
7527
7528 if (tail->u.ar.end[i])
7529 {
7530 mpz_set (s, tail->u.ar.end[i]->value.integer);
7531 mpz_sub (s, s, tail->u.ar.start[i]->value.integer);
7532 mpz_add_ui (s, s, 1);
7533 }
7534 else
7535 {
7536 mpz_set (s, tail->u.ar.start[i]->value.integer);
7537 }
7538
7539 if (mpz_cmp (e1->shape[i], s) != 0)
7540 {
7541 gfc_error ("Source-expr at %L and allocate-object at %L must "
7542 "have the same shape", &e1->where, &e2->where);
7543 mpz_clear (s);
7544 return false;
7545 }
7546 }
7547
7548 mpz_clear (s);
7549 }
7550
7551 return true;
7552 }
7553
7554
7555 /* Resolve the expression in an ALLOCATE statement, doing the additional
7556 checks to see whether the expression is OK or not. The expression must
7557 have a trailing array reference that gives the size of the array. */
7558
7559 static bool
7560 resolve_allocate_expr (gfc_expr *e, gfc_code *code, bool *array_alloc_wo_spec)
7561 {
7562 int i, pointer, allocatable, dimension, is_abstract;
7563 int codimension;
7564 bool coindexed;
7565 bool unlimited;
7566 symbol_attribute attr;
7567 gfc_ref *ref, *ref2;
7568 gfc_expr *e2;
7569 gfc_array_ref *ar;
7570 gfc_symbol *sym = NULL;
7571 gfc_alloc *a;
7572 gfc_component *c;
7573 bool t;
7574
7575 /* Mark the utmost array component as being in allocate to allow DIMEN_STAR
7576 checking of coarrays. */
7577 for (ref = e->ref; ref; ref = ref->next)
7578 if (ref->next == NULL)
7579 break;
7580
7581 if (ref && ref->type == REF_ARRAY)
7582 ref->u.ar.in_allocate = true;
7583
7584 if (!gfc_resolve_expr (e))
7585 goto failure;
7586
7587 /* Make sure the expression is allocatable or a pointer. If it is
7588 pointer, the next-to-last reference must be a pointer. */
7589
7590 ref2 = NULL;
7591 if (e->symtree)
7592 sym = e->symtree->n.sym;
7593
7594 /* Check whether ultimate component is abstract and CLASS. */
7595 is_abstract = 0;
7596
7597 /* Is the allocate-object unlimited polymorphic? */
7598 unlimited = UNLIMITED_POLY(e);
7599
7600 if (e->expr_type != EXPR_VARIABLE)
7601 {
7602 allocatable = 0;
7603 attr = gfc_expr_attr (e);
7604 pointer = attr.pointer;
7605 dimension = attr.dimension;
7606 codimension = attr.codimension;
7607 }
7608 else
7609 {
7610 if (sym->ts.type == BT_CLASS && CLASS_DATA (sym))
7611 {
7612 allocatable = CLASS_DATA (sym)->attr.allocatable;
7613 pointer = CLASS_DATA (sym)->attr.class_pointer;
7614 dimension = CLASS_DATA (sym)->attr.dimension;
7615 codimension = CLASS_DATA (sym)->attr.codimension;
7616 is_abstract = CLASS_DATA (sym)->attr.abstract;
7617 }
7618 else
7619 {
7620 allocatable = sym->attr.allocatable;
7621 pointer = sym->attr.pointer;
7622 dimension = sym->attr.dimension;
7623 codimension = sym->attr.codimension;
7624 }
7625
7626 coindexed = false;
7627
7628 for (ref = e->ref; ref; ref2 = ref, ref = ref->next)
7629 {
7630 switch (ref->type)
7631 {
7632 case REF_ARRAY:
7633 if (ref->u.ar.codimen > 0)
7634 {
7635 int n;
7636 for (n = ref->u.ar.dimen;
7637 n < ref->u.ar.dimen + ref->u.ar.codimen; n++)
7638 if (ref->u.ar.dimen_type[n] != DIMEN_THIS_IMAGE)
7639 {
7640 coindexed = true;
7641 break;
7642 }
7643 }
7644
7645 if (ref->next != NULL)
7646 pointer = 0;
7647 break;
7648
7649 case REF_COMPONENT:
7650 /* F2008, C644. */
7651 if (coindexed)
7652 {
7653 gfc_error ("Coindexed allocatable object at %L",
7654 &e->where);
7655 goto failure;
7656 }
7657
7658 c = ref->u.c.component;
7659 if (c->ts.type == BT_CLASS)
7660 {
7661 allocatable = CLASS_DATA (c)->attr.allocatable;
7662 pointer = CLASS_DATA (c)->attr.class_pointer;
7663 dimension = CLASS_DATA (c)->attr.dimension;
7664 codimension = CLASS_DATA (c)->attr.codimension;
7665 is_abstract = CLASS_DATA (c)->attr.abstract;
7666 }
7667 else
7668 {
7669 allocatable = c->attr.allocatable;
7670 pointer = c->attr.pointer;
7671 dimension = c->attr.dimension;
7672 codimension = c->attr.codimension;
7673 is_abstract = c->attr.abstract;
7674 }
7675 break;
7676
7677 case REF_SUBSTRING:
7678 case REF_INQUIRY:
7679 allocatable = 0;
7680 pointer = 0;
7681 break;
7682 }
7683 }
7684 }
7685
7686 /* Check for F08:C628. */
7687 if (allocatable == 0 && pointer == 0 && !unlimited)
7688 {
7689 gfc_error ("Allocate-object at %L must be ALLOCATABLE or a POINTER",
7690 &e->where);
7691 goto failure;
7692 }
7693
7694 /* Some checks for the SOURCE tag. */
7695 if (code->expr3)
7696 {
7697 /* Check F03:C631. */
7698 if (!gfc_type_compatible (&e->ts, &code->expr3->ts))
7699 {
7700 gfc_error ("Type of entity at %L is type incompatible with "
7701 "source-expr at %L", &e->where, &code->expr3->where);
7702 goto failure;
7703 }
7704
7705 /* Check F03:C632 and restriction following Note 6.18. */
7706 if (code->expr3->rank > 0 && !conformable_arrays (code->expr3, e))
7707 goto failure;
7708
7709 /* Check F03:C633. */
7710 if (code->expr3->ts.kind != e->ts.kind && !unlimited)
7711 {
7712 gfc_error ("The allocate-object at %L and the source-expr at %L "
7713 "shall have the same kind type parameter",
7714 &e->where, &code->expr3->where);
7715 goto failure;
7716 }
7717
7718 /* Check F2008, C642. */
7719 if (code->expr3->ts.type == BT_DERIVED
7720 && ((codimension && gfc_expr_attr (code->expr3).lock_comp)
7721 || (code->expr3->ts.u.derived->from_intmod
7722 == INTMOD_ISO_FORTRAN_ENV
7723 && code->expr3->ts.u.derived->intmod_sym_id
7724 == ISOFORTRAN_LOCK_TYPE)))
7725 {
7726 gfc_error ("The source-expr at %L shall neither be of type "
7727 "LOCK_TYPE nor have a LOCK_TYPE component if "
7728 "allocate-object at %L is a coarray",
7729 &code->expr3->where, &e->where);
7730 goto failure;
7731 }
7732
7733 /* Check TS18508, C702/C703. */
7734 if (code->expr3->ts.type == BT_DERIVED
7735 && ((codimension && gfc_expr_attr (code->expr3).event_comp)
7736 || (code->expr3->ts.u.derived->from_intmod
7737 == INTMOD_ISO_FORTRAN_ENV
7738 && code->expr3->ts.u.derived->intmod_sym_id
7739 == ISOFORTRAN_EVENT_TYPE)))
7740 {
7741 gfc_error ("The source-expr at %L shall neither be of type "
7742 "EVENT_TYPE nor have a EVENT_TYPE component if "
7743 "allocate-object at %L is a coarray",
7744 &code->expr3->where, &e->where);
7745 goto failure;
7746 }
7747 }
7748
7749 /* Check F08:C629. */
7750 if (is_abstract && code->ext.alloc.ts.type == BT_UNKNOWN
7751 && !code->expr3)
7752 {
7753 gcc_assert (e->ts.type == BT_CLASS);
7754 gfc_error ("Allocating %s of ABSTRACT base type at %L requires a "
7755 "type-spec or source-expr", sym->name, &e->where);
7756 goto failure;
7757 }
7758
7759 /* Check F08:C632. */
7760 if (code->ext.alloc.ts.type == BT_CHARACTER && !e->ts.deferred
7761 && !UNLIMITED_POLY (e))
7762 {
7763 int cmp;
7764
7765 if (!e->ts.u.cl->length)
7766 goto failure;
7767
7768 cmp = gfc_dep_compare_expr (e->ts.u.cl->length,
7769 code->ext.alloc.ts.u.cl->length);
7770 if (cmp == 1 || cmp == -1 || cmp == -3)
7771 {
7772 gfc_error ("Allocating %s at %L with type-spec requires the same "
7773 "character-length parameter as in the declaration",
7774 sym->name, &e->where);
7775 goto failure;
7776 }
7777 }
7778
7779 /* In the variable definition context checks, gfc_expr_attr is used
7780 on the expression. This is fooled by the array specification
7781 present in e, thus we have to eliminate that one temporarily. */
7782 e2 = remove_last_array_ref (e);
7783 t = true;
7784 if (t && pointer)
7785 t = gfc_check_vardef_context (e2, true, true, false,
7786 _("ALLOCATE object"));
7787 if (t)
7788 t = gfc_check_vardef_context (e2, false, true, false,
7789 _("ALLOCATE object"));
7790 gfc_free_expr (e2);
7791 if (!t)
7792 goto failure;
7793
7794 if (e->ts.type == BT_CLASS && CLASS_DATA (e)->attr.dimension
7795 && !code->expr3 && code->ext.alloc.ts.type == BT_DERIVED)
7796 {
7797 /* For class arrays, the initialization with SOURCE is done
7798 using _copy and trans_call. It is convenient to exploit that
7799 when the allocated type is different from the declared type but
7800 no SOURCE exists by setting expr3. */
7801 code->expr3 = gfc_default_initializer (&code->ext.alloc.ts);
7802 }
7803 else if (flag_coarray != GFC_FCOARRAY_LIB && e->ts.type == BT_DERIVED
7804 && e->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
7805 && e->ts.u.derived->intmod_sym_id == ISOFORTRAN_EVENT_TYPE)
7806 {
7807 /* We have to zero initialize the integer variable. */
7808 code->expr3 = gfc_get_int_expr (gfc_default_integer_kind, &e->where, 0);
7809 }
7810
7811 if (e->ts.type == BT_CLASS && !unlimited && !UNLIMITED_POLY (code->expr3))
7812 {
7813 /* Make sure the vtab symbol is present when
7814 the module variables are generated. */
7815 gfc_typespec ts = e->ts;
7816 if (code->expr3)
7817 ts = code->expr3->ts;
7818 else if (code->ext.alloc.ts.type == BT_DERIVED)
7819 ts = code->ext.alloc.ts;
7820
7821 /* Finding the vtab also publishes the type's symbol. Therefore this
7822 statement is necessary. */
7823 gfc_find_derived_vtab (ts.u.derived);
7824 }
7825 else if (unlimited && !UNLIMITED_POLY (code->expr3))
7826 {
7827 /* Again, make sure the vtab symbol is present when
7828 the module variables are generated. */
7829 gfc_typespec *ts = NULL;
7830 if (code->expr3)
7831 ts = &code->expr3->ts;
7832 else
7833 ts = &code->ext.alloc.ts;
7834
7835 gcc_assert (ts);
7836
7837 /* Finding the vtab also publishes the type's symbol. Therefore this
7838 statement is necessary. */
7839 gfc_find_vtab (ts);
7840 }
7841
7842 if (dimension == 0 && codimension == 0)
7843 goto success;
7844
7845 /* Make sure the last reference node is an array specification. */
7846
7847 if (!ref2 || ref2->type != REF_ARRAY || ref2->u.ar.type == AR_FULL
7848 || (dimension && ref2->u.ar.dimen == 0))
7849 {
7850 /* F08:C633. */
7851 if (code->expr3)
7852 {
7853 if (!gfc_notify_std (GFC_STD_F2008, "Array specification required "
7854 "in ALLOCATE statement at %L", &e->where))
7855 goto failure;
7856 if (code->expr3->rank != 0)
7857 *array_alloc_wo_spec = true;
7858 else
7859 {
7860 gfc_error ("Array specification or array-valued SOURCE= "
7861 "expression required in ALLOCATE statement at %L",
7862 &e->where);
7863 goto failure;
7864 }
7865 }
7866 else
7867 {
7868 gfc_error ("Array specification required in ALLOCATE statement "
7869 "at %L", &e->where);
7870 goto failure;
7871 }
7872 }
7873
7874 /* Make sure that the array section reference makes sense in the
7875 context of an ALLOCATE specification. */
7876
7877 ar = &ref2->u.ar;
7878
7879 if (codimension)
7880 for (i = ar->dimen; i < ar->dimen + ar->codimen; i++)
7881 {
7882 switch (ar->dimen_type[i])
7883 {
7884 case DIMEN_THIS_IMAGE:
7885 gfc_error ("Coarray specification required in ALLOCATE statement "
7886 "at %L", &e->where);
7887 goto failure;
7888
7889 case DIMEN_RANGE:
7890 if (ar->start[i] == 0 || ar->end[i] == 0)
7891 {
7892 /* If ar->stride[i] is NULL, we issued a previous error. */
7893 if (ar->stride[i] == NULL)
7894 gfc_error ("Bad array specification in ALLOCATE statement "
7895 "at %L", &e->where);
7896 goto failure;
7897 }
7898 else if (gfc_dep_compare_expr (ar->start[i], ar->end[i]) == 1)
7899 {
7900 gfc_error ("Upper cobound is less than lower cobound at %L",
7901 &ar->start[i]->where);
7902 goto failure;
7903 }
7904 break;
7905
7906 case DIMEN_ELEMENT:
7907 if (ar->start[i]->expr_type == EXPR_CONSTANT)
7908 {
7909 gcc_assert (ar->start[i]->ts.type == BT_INTEGER);
7910 if (mpz_cmp_si (ar->start[i]->value.integer, 1) < 0)
7911 {
7912 gfc_error ("Upper cobound is less than lower cobound "
7913 "of 1 at %L", &ar->start[i]->where);
7914 goto failure;
7915 }
7916 }
7917 break;
7918
7919 case DIMEN_STAR:
7920 break;
7921
7922 default:
7923 gfc_error ("Bad array specification in ALLOCATE statement at %L",
7924 &e->where);
7925 goto failure;
7926
7927 }
7928 }
7929 for (i = 0; i < ar->dimen; i++)
7930 {
7931 if (ar->type == AR_ELEMENT || ar->type == AR_FULL)
7932 goto check_symbols;
7933
7934 switch (ar->dimen_type[i])
7935 {
7936 case DIMEN_ELEMENT:
7937 break;
7938
7939 case DIMEN_RANGE:
7940 if (ar->start[i] != NULL
7941 && ar->end[i] != NULL
7942 && ar->stride[i] == NULL)
7943 break;
7944
7945 /* Fall through. */
7946
7947 case DIMEN_UNKNOWN:
7948 case DIMEN_VECTOR:
7949 case DIMEN_STAR:
7950 case DIMEN_THIS_IMAGE:
7951 gfc_error ("Bad array specification in ALLOCATE statement at %L",
7952 &e->where);
7953 goto failure;
7954 }
7955
7956 check_symbols:
7957 for (a = code->ext.alloc.list; a; a = a->next)
7958 {
7959 sym = a->expr->symtree->n.sym;
7960
7961 /* TODO - check derived type components. */
7962 if (gfc_bt_struct (sym->ts.type) || sym->ts.type == BT_CLASS)
7963 continue;
7964
7965 if ((ar->start[i] != NULL
7966 && gfc_find_sym_in_expr (sym, ar->start[i]))
7967 || (ar->end[i] != NULL
7968 && gfc_find_sym_in_expr (sym, ar->end[i])))
7969 {
7970 gfc_error ("%qs must not appear in the array specification at "
7971 "%L in the same ALLOCATE statement where it is "
7972 "itself allocated", sym->name, &ar->where);
7973 goto failure;
7974 }
7975 }
7976 }
7977
7978 for (i = ar->dimen; i < ar->codimen + ar->dimen; i++)
7979 {
7980 if (ar->dimen_type[i] == DIMEN_ELEMENT
7981 || ar->dimen_type[i] == DIMEN_RANGE)
7982 {
7983 if (i == (ar->dimen + ar->codimen - 1))
7984 {
7985 gfc_error ("Expected '*' in coindex specification in ALLOCATE "
7986 "statement at %L", &e->where);
7987 goto failure;
7988 }
7989 continue;
7990 }
7991
7992 if (ar->dimen_type[i] == DIMEN_STAR && i == (ar->dimen + ar->codimen - 1)
7993 && ar->stride[i] == NULL)
7994 break;
7995
7996 gfc_error ("Bad coarray specification in ALLOCATE statement at %L",
7997 &e->where);
7998 goto failure;
7999 }
8000
8001 success:
8002 return true;
8003
8004 failure:
8005 return false;
8006 }
8007
8008
8009 static void
8010 resolve_allocate_deallocate (gfc_code *code, const char *fcn)
8011 {
8012 gfc_expr *stat, *errmsg, *pe, *qe;
8013 gfc_alloc *a, *p, *q;
8014
8015 stat = code->expr1;
8016 errmsg = code->expr2;
8017
8018 /* Check the stat variable. */
8019 if (stat)
8020 {
8021 gfc_check_vardef_context (stat, false, false, false,
8022 _("STAT variable"));
8023
8024 if ((stat->ts.type != BT_INTEGER
8025 && !(stat->ref && (stat->ref->type == REF_ARRAY
8026 || stat->ref->type == REF_COMPONENT)))
8027 || stat->rank > 0)
8028 gfc_error ("Stat-variable at %L must be a scalar INTEGER "
8029 "variable", &stat->where);
8030
8031 for (p = code->ext.alloc.list; p; p = p->next)
8032 if (p->expr->symtree->n.sym->name == stat->symtree->n.sym->name)
8033 {
8034 gfc_ref *ref1, *ref2;
8035 bool found = true;
8036
8037 for (ref1 = p->expr->ref, ref2 = stat->ref; ref1 && ref2;
8038 ref1 = ref1->next, ref2 = ref2->next)
8039 {
8040 if (ref1->type != REF_COMPONENT || ref2->type != REF_COMPONENT)
8041 continue;
8042 if (ref1->u.c.component->name != ref2->u.c.component->name)
8043 {
8044 found = false;
8045 break;
8046 }
8047 }
8048
8049 if (found)
8050 {
8051 gfc_error ("Stat-variable at %L shall not be %sd within "
8052 "the same %s statement", &stat->where, fcn, fcn);
8053 break;
8054 }
8055 }
8056 }
8057
8058 /* Check the errmsg variable. */
8059 if (errmsg)
8060 {
8061 if (!stat)
8062 gfc_warning (0, "ERRMSG at %L is useless without a STAT tag",
8063 &errmsg->where);
8064
8065 gfc_check_vardef_context (errmsg, false, false, false,
8066 _("ERRMSG variable"));
8067
8068 /* F18:R928 alloc-opt is ERRMSG = errmsg-variable
8069 F18:R930 errmsg-variable is scalar-default-char-variable
8070 F18:R906 default-char-variable is variable
8071 F18:C906 default-char-variable shall be default character. */
8072 if ((errmsg->ts.type != BT_CHARACTER
8073 && !(errmsg->ref
8074 && (errmsg->ref->type == REF_ARRAY
8075 || errmsg->ref->type == REF_COMPONENT)))
8076 || errmsg->rank > 0
8077 || errmsg->ts.kind != gfc_default_character_kind)
8078 gfc_error ("ERRMSG variable at %L shall be a scalar default CHARACTER "
8079 "variable", &errmsg->where);
8080
8081 for (p = code->ext.alloc.list; p; p = p->next)
8082 if (p->expr->symtree->n.sym->name == errmsg->symtree->n.sym->name)
8083 {
8084 gfc_ref *ref1, *ref2;
8085 bool found = true;
8086
8087 for (ref1 = p->expr->ref, ref2 = errmsg->ref; ref1 && ref2;
8088 ref1 = ref1->next, ref2 = ref2->next)
8089 {
8090 if (ref1->type != REF_COMPONENT || ref2->type != REF_COMPONENT)
8091 continue;
8092 if (ref1->u.c.component->name != ref2->u.c.component->name)
8093 {
8094 found = false;
8095 break;
8096 }
8097 }
8098
8099 if (found)
8100 {
8101 gfc_error ("Errmsg-variable at %L shall not be %sd within "
8102 "the same %s statement", &errmsg->where, fcn, fcn);
8103 break;
8104 }
8105 }
8106 }
8107
8108 /* Check that an allocate-object appears only once in the statement. */
8109
8110 for (p = code->ext.alloc.list; p; p = p->next)
8111 {
8112 pe = p->expr;
8113 for (q = p->next; q; q = q->next)
8114 {
8115 qe = q->expr;
8116 if (pe->symtree->n.sym->name == qe->symtree->n.sym->name)
8117 {
8118 /* This is a potential collision. */
8119 gfc_ref *pr = pe->ref;
8120 gfc_ref *qr = qe->ref;
8121
8122 /* Follow the references until
8123 a) They start to differ, in which case there is no error;
8124 you can deallocate a%b and a%c in a single statement
8125 b) Both of them stop, which is an error
8126 c) One of them stops, which is also an error. */
8127 while (1)
8128 {
8129 if (pr == NULL && qr == NULL)
8130 {
8131 gfc_error ("Allocate-object at %L also appears at %L",
8132 &pe->where, &qe->where);
8133 break;
8134 }
8135 else if (pr != NULL && qr == NULL)
8136 {
8137 gfc_error ("Allocate-object at %L is subobject of"
8138 " object at %L", &pe->where, &qe->where);
8139 break;
8140 }
8141 else if (pr == NULL && qr != NULL)
8142 {
8143 gfc_error ("Allocate-object at %L is subobject of"
8144 " object at %L", &qe->where, &pe->where);
8145 break;
8146 }
8147 /* Here, pr != NULL && qr != NULL */
8148 gcc_assert(pr->type == qr->type);
8149 if (pr->type == REF_ARRAY)
8150 {
8151 /* Handle cases like allocate(v(3)%x(3), v(2)%x(3)),
8152 which are legal. */
8153 gcc_assert (qr->type == REF_ARRAY);
8154
8155 if (pr->next && qr->next)
8156 {
8157 int i;
8158 gfc_array_ref *par = &(pr->u.ar);
8159 gfc_array_ref *qar = &(qr->u.ar);
8160
8161 for (i=0; i<par->dimen; i++)
8162 {
8163 if ((par->start[i] != NULL
8164 || qar->start[i] != NULL)
8165 && gfc_dep_compare_expr (par->start[i],
8166 qar->start[i]) != 0)
8167 goto break_label;
8168 }
8169 }
8170 }
8171 else
8172 {
8173 if (pr->u.c.component->name != qr->u.c.component->name)
8174 break;
8175 }
8176
8177 pr = pr->next;
8178 qr = qr->next;
8179 }
8180 break_label:
8181 ;
8182 }
8183 }
8184 }
8185
8186 if (strcmp (fcn, "ALLOCATE") == 0)
8187 {
8188 bool arr_alloc_wo_spec = false;
8189
8190 /* Resolving the expr3 in the loop over all objects to allocate would
8191 execute loop invariant code for each loop item. Therefore do it just
8192 once here. */
8193 if (code->expr3 && code->expr3->mold
8194 && code->expr3->ts.type == BT_DERIVED)
8195 {
8196 /* Default initialization via MOLD (non-polymorphic). */
8197 gfc_expr *rhs = gfc_default_initializer (&code->expr3->ts);
8198 if (rhs != NULL)
8199 {
8200 gfc_resolve_expr (rhs);
8201 gfc_free_expr (code->expr3);
8202 code->expr3 = rhs;
8203 }
8204 }
8205 for (a = code->ext.alloc.list; a; a = a->next)
8206 resolve_allocate_expr (a->expr, code, &arr_alloc_wo_spec);
8207
8208 if (arr_alloc_wo_spec && code->expr3)
8209 {
8210 /* Mark the allocate to have to take the array specification
8211 from the expr3. */
8212 code->ext.alloc.arr_spec_from_expr3 = 1;
8213 }
8214 }
8215 else
8216 {
8217 for (a = code->ext.alloc.list; a; a = a->next)
8218 resolve_deallocate_expr (a->expr);
8219 }
8220 }
8221
8222
8223 /************ SELECT CASE resolution subroutines ************/
8224
8225 /* Callback function for our mergesort variant. Determines interval
8226 overlaps for CASEs. Return <0 if op1 < op2, 0 for overlap, >0 for
8227 op1 > op2. Assumes we're not dealing with the default case.
8228 We have op1 = (:L), (K:L) or (K:) and op2 = (:N), (M:N) or (M:).
8229 There are nine situations to check. */
8230
8231 static int
8232 compare_cases (const gfc_case *op1, const gfc_case *op2)
8233 {
8234 int retval;
8235
8236 if (op1->low == NULL) /* op1 = (:L) */
8237 {
8238 /* op2 = (:N), so overlap. */
8239 retval = 0;
8240 /* op2 = (M:) or (M:N), L < M */
8241 if (op2->low != NULL
8242 && gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
8243 retval = -1;
8244 }
8245 else if (op1->high == NULL) /* op1 = (K:) */
8246 {
8247 /* op2 = (M:), so overlap. */
8248 retval = 0;
8249 /* op2 = (:N) or (M:N), K > N */
8250 if (op2->high != NULL
8251 && gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
8252 retval = 1;
8253 }
8254 else /* op1 = (K:L) */
8255 {
8256 if (op2->low == NULL) /* op2 = (:N), K > N */
8257 retval = (gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
8258 ? 1 : 0;
8259 else if (op2->high == NULL) /* op2 = (M:), L < M */
8260 retval = (gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
8261 ? -1 : 0;
8262 else /* op2 = (M:N) */
8263 {
8264 retval = 0;
8265 /* L < M */
8266 if (gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
8267 retval = -1;
8268 /* K > N */
8269 else if (gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
8270 retval = 1;
8271 }
8272 }
8273
8274 return retval;
8275 }
8276
8277
8278 /* Merge-sort a double linked case list, detecting overlap in the
8279 process. LIST is the head of the double linked case list before it
8280 is sorted. Returns the head of the sorted list if we don't see any
8281 overlap, or NULL otherwise. */
8282
8283 static gfc_case *
8284 check_case_overlap (gfc_case *list)
8285 {
8286 gfc_case *p, *q, *e, *tail;
8287 int insize, nmerges, psize, qsize, cmp, overlap_seen;
8288
8289 /* If the passed list was empty, return immediately. */
8290 if (!list)
8291 return NULL;
8292
8293 overlap_seen = 0;
8294 insize = 1;
8295
8296 /* Loop unconditionally. The only exit from this loop is a return
8297 statement, when we've finished sorting the case list. */
8298 for (;;)
8299 {
8300 p = list;
8301 list = NULL;
8302 tail = NULL;
8303
8304 /* Count the number of merges we do in this pass. */
8305 nmerges = 0;
8306
8307 /* Loop while there exists a merge to be done. */
8308 while (p)
8309 {
8310 int i;
8311
8312 /* Count this merge. */
8313 nmerges++;
8314
8315 /* Cut the list in two pieces by stepping INSIZE places
8316 forward in the list, starting from P. */
8317 psize = 0;
8318 q = p;
8319 for (i = 0; i < insize; i++)
8320 {
8321 psize++;
8322 q = q->right;
8323 if (!q)
8324 break;
8325 }
8326 qsize = insize;
8327
8328 /* Now we have two lists. Merge them! */
8329 while (psize > 0 || (qsize > 0 && q != NULL))
8330 {
8331 /* See from which the next case to merge comes from. */
8332 if (psize == 0)
8333 {
8334 /* P is empty so the next case must come from Q. */
8335 e = q;
8336 q = q->right;
8337 qsize--;
8338 }
8339 else if (qsize == 0 || q == NULL)
8340 {
8341 /* Q is empty. */
8342 e = p;
8343 p = p->right;
8344 psize--;
8345 }
8346 else
8347 {
8348 cmp = compare_cases (p, q);
8349 if (cmp < 0)
8350 {
8351 /* The whole case range for P is less than the
8352 one for Q. */
8353 e = p;
8354 p = p->right;
8355 psize--;
8356 }
8357 else if (cmp > 0)
8358 {
8359 /* The whole case range for Q is greater than
8360 the case range for P. */
8361 e = q;
8362 q = q->right;
8363 qsize--;
8364 }
8365 else
8366 {
8367 /* The cases overlap, or they are the same
8368 element in the list. Either way, we must
8369 issue an error and get the next case from P. */
8370 /* FIXME: Sort P and Q by line number. */
8371 gfc_error ("CASE label at %L overlaps with CASE "
8372 "label at %L", &p->where, &q->where);
8373 overlap_seen = 1;
8374 e = p;
8375 p = p->right;
8376 psize--;
8377 }
8378 }
8379
8380 /* Add the next element to the merged list. */
8381 if (tail)
8382 tail->right = e;
8383 else
8384 list = e;
8385 e->left = tail;
8386 tail = e;
8387 }
8388
8389 /* P has now stepped INSIZE places along, and so has Q. So
8390 they're the same. */
8391 p = q;
8392 }
8393 tail->right = NULL;
8394
8395 /* If we have done only one merge or none at all, we've
8396 finished sorting the cases. */
8397 if (nmerges <= 1)
8398 {
8399 if (!overlap_seen)
8400 return list;
8401 else
8402 return NULL;
8403 }
8404
8405 /* Otherwise repeat, merging lists twice the size. */
8406 insize *= 2;
8407 }
8408 }
8409
8410
8411 /* Check to see if an expression is suitable for use in a CASE statement.
8412 Makes sure that all case expressions are scalar constants of the same
8413 type. Return false if anything is wrong. */
8414
8415 static bool
8416 validate_case_label_expr (gfc_expr *e, gfc_expr *case_expr)
8417 {
8418 if (e == NULL) return true;
8419
8420 if (e->ts.type != case_expr->ts.type)
8421 {
8422 gfc_error ("Expression in CASE statement at %L must be of type %s",
8423 &e->where, gfc_basic_typename (case_expr->ts.type));
8424 return false;
8425 }
8426
8427 /* C805 (R808) For a given case-construct, each case-value shall be of
8428 the same type as case-expr. For character type, length differences
8429 are allowed, but the kind type parameters shall be the same. */
8430
8431 if (case_expr->ts.type == BT_CHARACTER && e->ts.kind != case_expr->ts.kind)
8432 {
8433 gfc_error ("Expression in CASE statement at %L must be of kind %d",
8434 &e->where, case_expr->ts.kind);
8435 return false;
8436 }
8437
8438 /* Convert the case value kind to that of case expression kind,
8439 if needed */
8440
8441 if (e->ts.kind != case_expr->ts.kind)
8442 gfc_convert_type_warn (e, &case_expr->ts, 2, 0);
8443
8444 if (e->rank != 0)
8445 {
8446 gfc_error ("Expression in CASE statement at %L must be scalar",
8447 &e->where);
8448 return false;
8449 }
8450
8451 return true;
8452 }
8453
8454
8455 /* Given a completely parsed select statement, we:
8456
8457 - Validate all expressions and code within the SELECT.
8458 - Make sure that the selection expression is not of the wrong type.
8459 - Make sure that no case ranges overlap.
8460 - Eliminate unreachable cases and unreachable code resulting from
8461 removing case labels.
8462
8463 The standard does allow unreachable cases, e.g. CASE (5:3). But
8464 they are a hassle for code generation, and to prevent that, we just
8465 cut them out here. This is not necessary for overlapping cases
8466 because they are illegal and we never even try to generate code.
8467
8468 We have the additional caveat that a SELECT construct could have
8469 been a computed GOTO in the source code. Fortunately we can fairly
8470 easily work around that here: The case_expr for a "real" SELECT CASE
8471 is in code->expr1, but for a computed GOTO it is in code->expr2. All
8472 we have to do is make sure that the case_expr is a scalar integer
8473 expression. */
8474
8475 static void
8476 resolve_select (gfc_code *code, bool select_type)
8477 {
8478 gfc_code *body;
8479 gfc_expr *case_expr;
8480 gfc_case *cp, *default_case, *tail, *head;
8481 int seen_unreachable;
8482 int seen_logical;
8483 int ncases;
8484 bt type;
8485 bool t;
8486
8487 if (code->expr1 == NULL)
8488 {
8489 /* This was actually a computed GOTO statement. */
8490 case_expr = code->expr2;
8491 if (case_expr->ts.type != BT_INTEGER|| case_expr->rank != 0)
8492 gfc_error ("Selection expression in computed GOTO statement "
8493 "at %L must be a scalar integer expression",
8494 &case_expr->where);
8495
8496 /* Further checking is not necessary because this SELECT was built
8497 by the compiler, so it should always be OK. Just move the
8498 case_expr from expr2 to expr so that we can handle computed
8499 GOTOs as normal SELECTs from here on. */
8500 code->expr1 = code->expr2;
8501 code->expr2 = NULL;
8502 return;
8503 }
8504
8505 case_expr = code->expr1;
8506 type = case_expr->ts.type;
8507
8508 /* F08:C830. */
8509 if (type != BT_LOGICAL && type != BT_INTEGER && type != BT_CHARACTER)
8510 {
8511 gfc_error ("Argument of SELECT statement at %L cannot be %s",
8512 &case_expr->where, gfc_typename (case_expr));
8513
8514 /* Punt. Going on here just produce more garbage error messages. */
8515 return;
8516 }
8517
8518 /* F08:R842. */
8519 if (!select_type && case_expr->rank != 0)
8520 {
8521 gfc_error ("Argument of SELECT statement at %L must be a scalar "
8522 "expression", &case_expr->where);
8523
8524 /* Punt. */
8525 return;
8526 }
8527
8528 /* Raise a warning if an INTEGER case value exceeds the range of
8529 the case-expr. Later, all expressions will be promoted to the
8530 largest kind of all case-labels. */
8531
8532 if (type == BT_INTEGER)
8533 for (body = code->block; body; body = body->block)
8534 for (cp = body->ext.block.case_list; cp; cp = cp->next)
8535 {
8536 if (cp->low
8537 && gfc_check_integer_range (cp->low->value.integer,
8538 case_expr->ts.kind) != ARITH_OK)
8539 gfc_warning (0, "Expression in CASE statement at %L is "
8540 "not in the range of %s", &cp->low->where,
8541 gfc_typename (case_expr));
8542
8543 if (cp->high
8544 && cp->low != cp->high
8545 && gfc_check_integer_range (cp->high->value.integer,
8546 case_expr->ts.kind) != ARITH_OK)
8547 gfc_warning (0, "Expression in CASE statement at %L is "
8548 "not in the range of %s", &cp->high->where,
8549 gfc_typename (case_expr));
8550 }
8551
8552 /* PR 19168 has a long discussion concerning a mismatch of the kinds
8553 of the SELECT CASE expression and its CASE values. Walk the lists
8554 of case values, and if we find a mismatch, promote case_expr to
8555 the appropriate kind. */
8556
8557 if (type == BT_LOGICAL || type == BT_INTEGER)
8558 {
8559 for (body = code->block; body; body = body->block)
8560 {
8561 /* Walk the case label list. */
8562 for (cp = body->ext.block.case_list; cp; cp = cp->next)
8563 {
8564 /* Intercept the DEFAULT case. It does not have a kind. */
8565 if (cp->low == NULL && cp->high == NULL)
8566 continue;
8567
8568 /* Unreachable case ranges are discarded, so ignore. */
8569 if (cp->low != NULL && cp->high != NULL
8570 && cp->low != cp->high
8571 && gfc_compare_expr (cp->low, cp->high, INTRINSIC_GT) > 0)
8572 continue;
8573
8574 if (cp->low != NULL
8575 && case_expr->ts.kind != gfc_kind_max(case_expr, cp->low))
8576 gfc_convert_type_warn (case_expr, &cp->low->ts, 2, 0);
8577
8578 if (cp->high != NULL
8579 && case_expr->ts.kind != gfc_kind_max(case_expr, cp->high))
8580 gfc_convert_type_warn (case_expr, &cp->high->ts, 2, 0);
8581 }
8582 }
8583 }
8584
8585 /* Assume there is no DEFAULT case. */
8586 default_case = NULL;
8587 head = tail = NULL;
8588 ncases = 0;
8589 seen_logical = 0;
8590
8591 for (body = code->block; body; body = body->block)
8592 {
8593 /* Assume the CASE list is OK, and all CASE labels can be matched. */
8594 t = true;
8595 seen_unreachable = 0;
8596
8597 /* Walk the case label list, making sure that all case labels
8598 are legal. */
8599 for (cp = body->ext.block.case_list; cp; cp = cp->next)
8600 {
8601 /* Count the number of cases in the whole construct. */
8602 ncases++;
8603
8604 /* Intercept the DEFAULT case. */
8605 if (cp->low == NULL && cp->high == NULL)
8606 {
8607 if (default_case != NULL)
8608 {
8609 gfc_error ("The DEFAULT CASE at %L cannot be followed "
8610 "by a second DEFAULT CASE at %L",
8611 &default_case->where, &cp->where);
8612 t = false;
8613 break;
8614 }
8615 else
8616 {
8617 default_case = cp;
8618 continue;
8619 }
8620 }
8621
8622 /* Deal with single value cases and case ranges. Errors are
8623 issued from the validation function. */
8624 if (!validate_case_label_expr (cp->low, case_expr)
8625 || !validate_case_label_expr (cp->high, case_expr))
8626 {
8627 t = false;
8628 break;
8629 }
8630
8631 if (type == BT_LOGICAL
8632 && ((cp->low == NULL || cp->high == NULL)
8633 || cp->low != cp->high))
8634 {
8635 gfc_error ("Logical range in CASE statement at %L is not "
8636 "allowed", &cp->low->where);
8637 t = false;
8638 break;
8639 }
8640
8641 if (type == BT_LOGICAL && cp->low->expr_type == EXPR_CONSTANT)
8642 {
8643 int value;
8644 value = cp->low->value.logical == 0 ? 2 : 1;
8645 if (value & seen_logical)
8646 {
8647 gfc_error ("Constant logical value in CASE statement "
8648 "is repeated at %L",
8649 &cp->low->where);
8650 t = false;
8651 break;
8652 }
8653 seen_logical |= value;
8654 }
8655
8656 if (cp->low != NULL && cp->high != NULL
8657 && cp->low != cp->high
8658 && gfc_compare_expr (cp->low, cp->high, INTRINSIC_GT) > 0)
8659 {
8660 if (warn_surprising)
8661 gfc_warning (OPT_Wsurprising,
8662 "Range specification at %L can never be matched",
8663 &cp->where);
8664
8665 cp->unreachable = 1;
8666 seen_unreachable = 1;
8667 }
8668 else
8669 {
8670 /* If the case range can be matched, it can also overlap with
8671 other cases. To make sure it does not, we put it in a
8672 double linked list here. We sort that with a merge sort
8673 later on to detect any overlapping cases. */
8674 if (!head)
8675 {
8676 head = tail = cp;
8677 head->right = head->left = NULL;
8678 }
8679 else
8680 {
8681 tail->right = cp;
8682 tail->right->left = tail;
8683 tail = tail->right;
8684 tail->right = NULL;
8685 }
8686 }
8687 }
8688
8689 /* It there was a failure in the previous case label, give up
8690 for this case label list. Continue with the next block. */
8691 if (!t)
8692 continue;
8693
8694 /* See if any case labels that are unreachable have been seen.
8695 If so, we eliminate them. This is a bit of a kludge because
8696 the case lists for a single case statement (label) is a
8697 single forward linked lists. */
8698 if (seen_unreachable)
8699 {
8700 /* Advance until the first case in the list is reachable. */
8701 while (body->ext.block.case_list != NULL
8702 && body->ext.block.case_list->unreachable)
8703 {
8704 gfc_case *n = body->ext.block.case_list;
8705 body->ext.block.case_list = body->ext.block.case_list->next;
8706 n->next = NULL;
8707 gfc_free_case_list (n);
8708 }
8709
8710 /* Strip all other unreachable cases. */
8711 if (body->ext.block.case_list)
8712 {
8713 for (cp = body->ext.block.case_list; cp && cp->next; cp = cp->next)
8714 {
8715 if (cp->next->unreachable)
8716 {
8717 gfc_case *n = cp->next;
8718 cp->next = cp->next->next;
8719 n->next = NULL;
8720 gfc_free_case_list (n);
8721 }
8722 }
8723 }
8724 }
8725 }
8726
8727 /* See if there were overlapping cases. If the check returns NULL,
8728 there was overlap. In that case we don't do anything. If head
8729 is non-NULL, we prepend the DEFAULT case. The sorted list can
8730 then used during code generation for SELECT CASE constructs with
8731 a case expression of a CHARACTER type. */
8732 if (head)
8733 {
8734 head = check_case_overlap (head);
8735
8736 /* Prepend the default_case if it is there. */
8737 if (head != NULL && default_case)
8738 {
8739 default_case->left = NULL;
8740 default_case->right = head;
8741 head->left = default_case;
8742 }
8743 }
8744
8745 /* Eliminate dead blocks that may be the result if we've seen
8746 unreachable case labels for a block. */
8747 for (body = code; body && body->block; body = body->block)
8748 {
8749 if (body->block->ext.block.case_list == NULL)
8750 {
8751 /* Cut the unreachable block from the code chain. */
8752 gfc_code *c = body->block;
8753 body->block = c->block;
8754
8755 /* Kill the dead block, but not the blocks below it. */
8756 c->block = NULL;
8757 gfc_free_statements (c);
8758 }
8759 }
8760
8761 /* More than two cases is legal but insane for logical selects.
8762 Issue a warning for it. */
8763 if (warn_surprising && type == BT_LOGICAL && ncases > 2)
8764 gfc_warning (OPT_Wsurprising,
8765 "Logical SELECT CASE block at %L has more that two cases",
8766 &code->loc);
8767 }
8768
8769
8770 /* Check if a derived type is extensible. */
8771
8772 bool
8773 gfc_type_is_extensible (gfc_symbol *sym)
8774 {
8775 return !(sym->attr.is_bind_c || sym->attr.sequence
8776 || (sym->attr.is_class
8777 && sym->components->ts.u.derived->attr.unlimited_polymorphic));
8778 }
8779
8780
8781 static void
8782 resolve_types (gfc_namespace *ns);
8783
8784 /* Resolve an associate-name: Resolve target and ensure the type-spec is
8785 correct as well as possibly the array-spec. */
8786
8787 static void
8788 resolve_assoc_var (gfc_symbol* sym, bool resolve_target)
8789 {
8790 gfc_expr* target;
8791
8792 gcc_assert (sym->assoc);
8793 gcc_assert (sym->attr.flavor == FL_VARIABLE);
8794
8795 /* If this is for SELECT TYPE, the target may not yet be set. In that
8796 case, return. Resolution will be called later manually again when
8797 this is done. */
8798 target = sym->assoc->target;
8799 if (!target)
8800 return;
8801 gcc_assert (!sym->assoc->dangling);
8802
8803 if (resolve_target && !gfc_resolve_expr (target))
8804 return;
8805
8806 /* For variable targets, we get some attributes from the target. */
8807 if (target->expr_type == EXPR_VARIABLE)
8808 {
8809 gfc_symbol* tsym;
8810
8811 gcc_assert (target->symtree);
8812 tsym = target->symtree->n.sym;
8813
8814 sym->attr.asynchronous = tsym->attr.asynchronous;
8815 sym->attr.volatile_ = tsym->attr.volatile_;
8816
8817 sym->attr.target = tsym->attr.target
8818 || gfc_expr_attr (target).pointer;
8819 if (is_subref_array (target))
8820 sym->attr.subref_array_pointer = 1;
8821 }
8822
8823 if (target->expr_type == EXPR_NULL)
8824 {
8825 gfc_error ("Selector at %L cannot be NULL()", &target->where);
8826 return;
8827 }
8828 else if (target->ts.type == BT_UNKNOWN)
8829 {
8830 gfc_error ("Selector at %L has no type", &target->where);
8831 return;
8832 }
8833
8834 /* Get type if this was not already set. Note that it can be
8835 some other type than the target in case this is a SELECT TYPE
8836 selector! So we must not update when the type is already there. */
8837 if (sym->ts.type == BT_UNKNOWN)
8838 sym->ts = target->ts;
8839
8840 gcc_assert (sym->ts.type != BT_UNKNOWN);
8841
8842 /* See if this is a valid association-to-variable. */
8843 sym->assoc->variable = (target->expr_type == EXPR_VARIABLE
8844 && !gfc_has_vector_subscript (target));
8845
8846 /* Finally resolve if this is an array or not. */
8847 if (sym->attr.dimension && target->rank == 0)
8848 {
8849 /* primary.c makes the assumption that a reference to an associate
8850 name followed by a left parenthesis is an array reference. */
8851 if (sym->ts.type != BT_CHARACTER)
8852 gfc_error ("Associate-name %qs at %L is used as array",
8853 sym->name, &sym->declared_at);
8854 sym->attr.dimension = 0;
8855 return;
8856 }
8857
8858
8859 /* We cannot deal with class selectors that need temporaries. */
8860 if (target->ts.type == BT_CLASS
8861 && gfc_ref_needs_temporary_p (target->ref))
8862 {
8863 gfc_error ("CLASS selector at %L needs a temporary which is not "
8864 "yet implemented", &target->where);
8865 return;
8866 }
8867
8868 if (target->ts.type == BT_CLASS)
8869 gfc_fix_class_refs (target);
8870
8871 if (target->rank != 0 && !sym->attr.select_rank_temporary)
8872 {
8873 gfc_array_spec *as;
8874 /* The rank may be incorrectly guessed at parsing, therefore make sure
8875 it is corrected now. */
8876 if (sym->ts.type != BT_CLASS && (!sym->as || sym->assoc->rankguessed))
8877 {
8878 if (!sym->as)
8879 sym->as = gfc_get_array_spec ();
8880 as = sym->as;
8881 as->rank = target->rank;
8882 as->type = AS_DEFERRED;
8883 as->corank = gfc_get_corank (target);
8884 sym->attr.dimension = 1;
8885 if (as->corank != 0)
8886 sym->attr.codimension = 1;
8887 }
8888 else if (sym->ts.type == BT_CLASS && (!CLASS_DATA (sym)->as || sym->assoc->rankguessed))
8889 {
8890 if (!CLASS_DATA (sym)->as)
8891 CLASS_DATA (sym)->as = gfc_get_array_spec ();
8892 as = CLASS_DATA (sym)->as;
8893 as->rank = target->rank;
8894 as->type = AS_DEFERRED;
8895 as->corank = gfc_get_corank (target);
8896 CLASS_DATA (sym)->attr.dimension = 1;
8897 if (as->corank != 0)
8898 CLASS_DATA (sym)->attr.codimension = 1;
8899 }
8900 }
8901 else if (!sym->attr.select_rank_temporary)
8902 {
8903 /* target's rank is 0, but the type of the sym is still array valued,
8904 which has to be corrected. */
8905 if (sym->ts.type == BT_CLASS
8906 && CLASS_DATA (sym) && CLASS_DATA (sym)->as)
8907 {
8908 gfc_array_spec *as;
8909 symbol_attribute attr;
8910 /* The associated variable's type is still the array type
8911 correct this now. */
8912 gfc_typespec *ts = &target->ts;
8913 gfc_ref *ref;
8914 gfc_component *c;
8915 for (ref = target->ref; ref != NULL; ref = ref->next)
8916 {
8917 switch (ref->type)
8918 {
8919 case REF_COMPONENT:
8920 ts = &ref->u.c.component->ts;
8921 break;
8922 case REF_ARRAY:
8923 if (ts->type == BT_CLASS)
8924 ts = &ts->u.derived->components->ts;
8925 break;
8926 default:
8927 break;
8928 }
8929 }
8930 /* Create a scalar instance of the current class type. Because the
8931 rank of a class array goes into its name, the type has to be
8932 rebuild. The alternative of (re-)setting just the attributes
8933 and as in the current type, destroys the type also in other
8934 places. */
8935 as = NULL;
8936 sym->ts = *ts;
8937 sym->ts.type = BT_CLASS;
8938 attr = CLASS_DATA (sym)->attr;
8939 attr.class_ok = 0;
8940 attr.associate_var = 1;
8941 attr.dimension = attr.codimension = 0;
8942 attr.class_pointer = 1;
8943 if (!gfc_build_class_symbol (&sym->ts, &attr, &as))
8944 gcc_unreachable ();
8945 /* Make sure the _vptr is set. */
8946 c = gfc_find_component (sym->ts.u.derived, "_vptr", true, true, NULL);
8947 if (c->ts.u.derived == NULL)
8948 c->ts.u.derived = gfc_find_derived_vtab (sym->ts.u.derived);
8949 CLASS_DATA (sym)->attr.pointer = 1;
8950 CLASS_DATA (sym)->attr.class_pointer = 1;
8951 gfc_set_sym_referenced (sym->ts.u.derived);
8952 gfc_commit_symbol (sym->ts.u.derived);
8953 /* _vptr now has the _vtab in it, change it to the _vtype. */
8954 if (c->ts.u.derived->attr.vtab)
8955 c->ts.u.derived = c->ts.u.derived->ts.u.derived;
8956 c->ts.u.derived->ns->types_resolved = 0;
8957 resolve_types (c->ts.u.derived->ns);
8958 }
8959 }
8960
8961 /* Mark this as an associate variable. */
8962 sym->attr.associate_var = 1;
8963
8964 /* Fix up the type-spec for CHARACTER types. */
8965 if (sym->ts.type == BT_CHARACTER && !sym->attr.select_type_temporary)
8966 {
8967 if (!sym->ts.u.cl)
8968 sym->ts.u.cl = target->ts.u.cl;
8969
8970 if (sym->ts.deferred && target->expr_type == EXPR_VARIABLE
8971 && target->symtree->n.sym->attr.dummy
8972 && sym->ts.u.cl == target->ts.u.cl)
8973 {
8974 sym->ts.u.cl = gfc_new_charlen (sym->ns, NULL);
8975 sym->ts.deferred = 1;
8976 }
8977
8978 if (!sym->ts.u.cl->length
8979 && !sym->ts.deferred
8980 && target->expr_type == EXPR_CONSTANT)
8981 {
8982 sym->ts.u.cl->length =
8983 gfc_get_int_expr (gfc_charlen_int_kind, NULL,
8984 target->value.character.length);
8985 }
8986 else if ((!sym->ts.u.cl->length
8987 || sym->ts.u.cl->length->expr_type != EXPR_CONSTANT)
8988 && target->expr_type != EXPR_VARIABLE)
8989 {
8990 sym->ts.u.cl = gfc_new_charlen (sym->ns, NULL);
8991 sym->ts.deferred = 1;
8992
8993 /* This is reset in trans-stmt.c after the assignment
8994 of the target expression to the associate name. */
8995 sym->attr.allocatable = 1;
8996 }
8997 }
8998
8999 /* If the target is a good class object, so is the associate variable. */
9000 if (sym->ts.type == BT_CLASS && gfc_expr_attr (target).class_ok)
9001 sym->attr.class_ok = 1;
9002 }
9003
9004
9005 /* Ensure that SELECT TYPE expressions have the correct rank and a full
9006 array reference, where necessary. The symbols are artificial and so
9007 the dimension attribute and arrayspec can also be set. In addition,
9008 sometimes the expr1 arrives as BT_DERIVED, when the symbol is BT_CLASS.
9009 This is corrected here as well.*/
9010
9011 static void
9012 fixup_array_ref (gfc_expr **expr1, gfc_expr *expr2,
9013 int rank, gfc_ref *ref)
9014 {
9015 gfc_ref *nref = (*expr1)->ref;
9016 gfc_symbol *sym1 = (*expr1)->symtree->n.sym;
9017 gfc_symbol *sym2 = expr2 ? expr2->symtree->n.sym : NULL;
9018 (*expr1)->rank = rank;
9019 if (sym1->ts.type == BT_CLASS)
9020 {
9021 if ((*expr1)->ts.type != BT_CLASS)
9022 (*expr1)->ts = sym1->ts;
9023
9024 CLASS_DATA (sym1)->attr.dimension = 1;
9025 if (CLASS_DATA (sym1)->as == NULL && sym2)
9026 CLASS_DATA (sym1)->as
9027 = gfc_copy_array_spec (CLASS_DATA (sym2)->as);
9028 }
9029 else
9030 {
9031 sym1->attr.dimension = 1;
9032 if (sym1->as == NULL && sym2)
9033 sym1->as = gfc_copy_array_spec (sym2->as);
9034 }
9035
9036 for (; nref; nref = nref->next)
9037 if (nref->next == NULL)
9038 break;
9039
9040 if (ref && nref && nref->type != REF_ARRAY)
9041 nref->next = gfc_copy_ref (ref);
9042 else if (ref && !nref)
9043 (*expr1)->ref = gfc_copy_ref (ref);
9044 }
9045
9046
9047 static gfc_expr *
9048 build_loc_call (gfc_expr *sym_expr)
9049 {
9050 gfc_expr *loc_call;
9051 loc_call = gfc_get_expr ();
9052 loc_call->expr_type = EXPR_FUNCTION;
9053 gfc_get_sym_tree ("_loc", gfc_current_ns, &loc_call->symtree, false);
9054 loc_call->symtree->n.sym->attr.flavor = FL_PROCEDURE;
9055 loc_call->symtree->n.sym->attr.intrinsic = 1;
9056 loc_call->symtree->n.sym->result = loc_call->symtree->n.sym;
9057 gfc_commit_symbol (loc_call->symtree->n.sym);
9058 loc_call->ts.type = BT_INTEGER;
9059 loc_call->ts.kind = gfc_index_integer_kind;
9060 loc_call->value.function.isym = gfc_intrinsic_function_by_id (GFC_ISYM_LOC);
9061 loc_call->value.function.actual = gfc_get_actual_arglist ();
9062 loc_call->value.function.actual->expr = sym_expr;
9063 loc_call->where = sym_expr->where;
9064 return loc_call;
9065 }
9066
9067 /* Resolve a SELECT TYPE statement. */
9068
9069 static void
9070 resolve_select_type (gfc_code *code, gfc_namespace *old_ns)
9071 {
9072 gfc_symbol *selector_type;
9073 gfc_code *body, *new_st, *if_st, *tail;
9074 gfc_code *class_is = NULL, *default_case = NULL;
9075 gfc_case *c;
9076 gfc_symtree *st;
9077 char name[GFC_MAX_SYMBOL_LEN];
9078 gfc_namespace *ns;
9079 int error = 0;
9080 int rank = 0;
9081 gfc_ref* ref = NULL;
9082 gfc_expr *selector_expr = NULL;
9083
9084 ns = code->ext.block.ns;
9085 gfc_resolve (ns);
9086
9087 /* Check for F03:C813. */
9088 if (code->expr1->ts.type != BT_CLASS
9089 && !(code->expr2 && code->expr2->ts.type == BT_CLASS))
9090 {
9091 gfc_error ("Selector shall be polymorphic in SELECT TYPE statement "
9092 "at %L", &code->loc);
9093 return;
9094 }
9095
9096 if (!code->expr1->symtree->n.sym->attr.class_ok)
9097 return;
9098
9099 if (code->expr2)
9100 {
9101 gfc_ref *ref2 = NULL;
9102 for (ref = code->expr2->ref; ref != NULL; ref = ref->next)
9103 if (ref->type == REF_COMPONENT
9104 && ref->u.c.component->ts.type == BT_CLASS)
9105 ref2 = ref;
9106
9107 if (ref2)
9108 {
9109 if (code->expr1->symtree->n.sym->attr.untyped)
9110 code->expr1->symtree->n.sym->ts = ref2->u.c.component->ts;
9111 selector_type = CLASS_DATA (ref2->u.c.component)->ts.u.derived;
9112 }
9113 else
9114 {
9115 if (code->expr1->symtree->n.sym->attr.untyped)
9116 code->expr1->symtree->n.sym->ts = code->expr2->ts;
9117 selector_type = CLASS_DATA (code->expr2)->ts.u.derived;
9118 }
9119
9120 if (code->expr2->rank && CLASS_DATA (code->expr1)->as)
9121 CLASS_DATA (code->expr1)->as->rank = code->expr2->rank;
9122
9123 /* F2008: C803 The selector expression must not be coindexed. */
9124 if (gfc_is_coindexed (code->expr2))
9125 {
9126 gfc_error ("Selector at %L must not be coindexed",
9127 &code->expr2->where);
9128 return;
9129 }
9130
9131 }
9132 else
9133 {
9134 selector_type = CLASS_DATA (code->expr1)->ts.u.derived;
9135
9136 if (gfc_is_coindexed (code->expr1))
9137 {
9138 gfc_error ("Selector at %L must not be coindexed",
9139 &code->expr1->where);
9140 return;
9141 }
9142 }
9143
9144 /* Loop over TYPE IS / CLASS IS cases. */
9145 for (body = code->block; body; body = body->block)
9146 {
9147 c = body->ext.block.case_list;
9148
9149 if (!error)
9150 {
9151 /* Check for repeated cases. */
9152 for (tail = code->block; tail; tail = tail->block)
9153 {
9154 gfc_case *d = tail->ext.block.case_list;
9155 if (tail == body)
9156 break;
9157
9158 if (c->ts.type == d->ts.type
9159 && ((c->ts.type == BT_DERIVED
9160 && c->ts.u.derived && d->ts.u.derived
9161 && !strcmp (c->ts.u.derived->name,
9162 d->ts.u.derived->name))
9163 || c->ts.type == BT_UNKNOWN
9164 || (!(c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9165 && c->ts.kind == d->ts.kind)))
9166 {
9167 gfc_error ("TYPE IS at %L overlaps with TYPE IS at %L",
9168 &c->where, &d->where);
9169 return;
9170 }
9171 }
9172 }
9173
9174 /* Check F03:C815. */
9175 if ((c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9176 && !selector_type->attr.unlimited_polymorphic
9177 && !gfc_type_is_extensible (c->ts.u.derived))
9178 {
9179 gfc_error ("Derived type %qs at %L must be extensible",
9180 c->ts.u.derived->name, &c->where);
9181 error++;
9182 continue;
9183 }
9184
9185 /* Check F03:C816. */
9186 if (c->ts.type != BT_UNKNOWN && !selector_type->attr.unlimited_polymorphic
9187 && ((c->ts.type != BT_DERIVED && c->ts.type != BT_CLASS)
9188 || !gfc_type_is_extension_of (selector_type, c->ts.u.derived)))
9189 {
9190 if (c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9191 gfc_error ("Derived type %qs at %L must be an extension of %qs",
9192 c->ts.u.derived->name, &c->where, selector_type->name);
9193 else
9194 gfc_error ("Unexpected intrinsic type %qs at %L",
9195 gfc_basic_typename (c->ts.type), &c->where);
9196 error++;
9197 continue;
9198 }
9199
9200 /* Check F03:C814. */
9201 if (c->ts.type == BT_CHARACTER
9202 && (c->ts.u.cl->length != NULL || c->ts.deferred))
9203 {
9204 gfc_error ("The type-spec at %L shall specify that each length "
9205 "type parameter is assumed", &c->where);
9206 error++;
9207 continue;
9208 }
9209
9210 /* Intercept the DEFAULT case. */
9211 if (c->ts.type == BT_UNKNOWN)
9212 {
9213 /* Check F03:C818. */
9214 if (default_case)
9215 {
9216 gfc_error ("The DEFAULT CASE at %L cannot be followed "
9217 "by a second DEFAULT CASE at %L",
9218 &default_case->ext.block.case_list->where, &c->where);
9219 error++;
9220 continue;
9221 }
9222
9223 default_case = body;
9224 }
9225 }
9226
9227 if (error > 0)
9228 return;
9229
9230 /* Transform SELECT TYPE statement to BLOCK and associate selector to
9231 target if present. If there are any EXIT statements referring to the
9232 SELECT TYPE construct, this is no problem because the gfc_code
9233 reference stays the same and EXIT is equally possible from the BLOCK
9234 it is changed to. */
9235 code->op = EXEC_BLOCK;
9236 if (code->expr2)
9237 {
9238 gfc_association_list* assoc;
9239
9240 assoc = gfc_get_association_list ();
9241 assoc->st = code->expr1->symtree;
9242 assoc->target = gfc_copy_expr (code->expr2);
9243 assoc->target->where = code->expr2->where;
9244 /* assoc->variable will be set by resolve_assoc_var. */
9245
9246 code->ext.block.assoc = assoc;
9247 code->expr1->symtree->n.sym->assoc = assoc;
9248
9249 resolve_assoc_var (code->expr1->symtree->n.sym, false);
9250 }
9251 else
9252 code->ext.block.assoc = NULL;
9253
9254 /* Ensure that the selector rank and arrayspec are available to
9255 correct expressions in which they might be missing. */
9256 if (code->expr2 && code->expr2->rank)
9257 {
9258 rank = code->expr2->rank;
9259 for (ref = code->expr2->ref; ref; ref = ref->next)
9260 if (ref->next == NULL)
9261 break;
9262 if (ref && ref->type == REF_ARRAY)
9263 ref = gfc_copy_ref (ref);
9264
9265 /* Fixup expr1 if necessary. */
9266 if (rank)
9267 fixup_array_ref (&code->expr1, code->expr2, rank, ref);
9268 }
9269 else if (code->expr1->rank)
9270 {
9271 rank = code->expr1->rank;
9272 for (ref = code->expr1->ref; ref; ref = ref->next)
9273 if (ref->next == NULL)
9274 break;
9275 if (ref && ref->type == REF_ARRAY)
9276 ref = gfc_copy_ref (ref);
9277 }
9278
9279 /* Add EXEC_SELECT to switch on type. */
9280 new_st = gfc_get_code (code->op);
9281 new_st->expr1 = code->expr1;
9282 new_st->expr2 = code->expr2;
9283 new_st->block = code->block;
9284 code->expr1 = code->expr2 = NULL;
9285 code->block = NULL;
9286 if (!ns->code)
9287 ns->code = new_st;
9288 else
9289 ns->code->next = new_st;
9290 code = new_st;
9291 code->op = EXEC_SELECT_TYPE;
9292
9293 /* Use the intrinsic LOC function to generate an integer expression
9294 for the vtable of the selector. Note that the rank of the selector
9295 expression has to be set to zero. */
9296 gfc_add_vptr_component (code->expr1);
9297 code->expr1->rank = 0;
9298 code->expr1 = build_loc_call (code->expr1);
9299 selector_expr = code->expr1->value.function.actual->expr;
9300
9301 /* Loop over TYPE IS / CLASS IS cases. */
9302 for (body = code->block; body; body = body->block)
9303 {
9304 gfc_symbol *vtab;
9305 gfc_expr *e;
9306 c = body->ext.block.case_list;
9307
9308 /* Generate an index integer expression for address of the
9309 TYPE/CLASS vtable and store it in c->low. The hash expression
9310 is stored in c->high and is used to resolve intrinsic cases. */
9311 if (c->ts.type != BT_UNKNOWN)
9312 {
9313 if (c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9314 {
9315 vtab = gfc_find_derived_vtab (c->ts.u.derived);
9316 gcc_assert (vtab);
9317 c->high = gfc_get_int_expr (gfc_integer_4_kind, NULL,
9318 c->ts.u.derived->hash_value);
9319 }
9320 else
9321 {
9322 vtab = gfc_find_vtab (&c->ts);
9323 gcc_assert (vtab && CLASS_DATA (vtab)->initializer);
9324 e = CLASS_DATA (vtab)->initializer;
9325 c->high = gfc_copy_expr (e);
9326 if (c->high->ts.kind != gfc_integer_4_kind)
9327 {
9328 gfc_typespec ts;
9329 ts.kind = gfc_integer_4_kind;
9330 ts.type = BT_INTEGER;
9331 gfc_convert_type_warn (c->high, &ts, 2, 0);
9332 }
9333 }
9334
9335 e = gfc_lval_expr_from_sym (vtab);
9336 c->low = build_loc_call (e);
9337 }
9338 else
9339 continue;
9340
9341 /* Associate temporary to selector. This should only be done
9342 when this case is actually true, so build a new ASSOCIATE
9343 that does precisely this here (instead of using the
9344 'global' one). */
9345
9346 if (c->ts.type == BT_CLASS)
9347 sprintf (name, "__tmp_class_%s", c->ts.u.derived->name);
9348 else if (c->ts.type == BT_DERIVED)
9349 sprintf (name, "__tmp_type_%s", c->ts.u.derived->name);
9350 else if (c->ts.type == BT_CHARACTER)
9351 {
9352 HOST_WIDE_INT charlen = 0;
9353 if (c->ts.u.cl && c->ts.u.cl->length
9354 && c->ts.u.cl->length->expr_type == EXPR_CONSTANT)
9355 charlen = gfc_mpz_get_hwi (c->ts.u.cl->length->value.integer);
9356 snprintf (name, sizeof (name),
9357 "__tmp_%s_" HOST_WIDE_INT_PRINT_DEC "_%d",
9358 gfc_basic_typename (c->ts.type), charlen, c->ts.kind);
9359 }
9360 else
9361 sprintf (name, "__tmp_%s_%d", gfc_basic_typename (c->ts.type),
9362 c->ts.kind);
9363
9364 st = gfc_find_symtree (ns->sym_root, name);
9365 gcc_assert (st->n.sym->assoc);
9366 st->n.sym->assoc->target = gfc_get_variable_expr (selector_expr->symtree);
9367 st->n.sym->assoc->target->where = selector_expr->where;
9368 if (c->ts.type != BT_CLASS && c->ts.type != BT_UNKNOWN)
9369 {
9370 gfc_add_data_component (st->n.sym->assoc->target);
9371 /* Fixup the target expression if necessary. */
9372 if (rank)
9373 fixup_array_ref (&st->n.sym->assoc->target, NULL, rank, ref);
9374 }
9375
9376 new_st = gfc_get_code (EXEC_BLOCK);
9377 new_st->ext.block.ns = gfc_build_block_ns (ns);
9378 new_st->ext.block.ns->code = body->next;
9379 body->next = new_st;
9380
9381 /* Chain in the new list only if it is marked as dangling. Otherwise
9382 there is a CASE label overlap and this is already used. Just ignore,
9383 the error is diagnosed elsewhere. */
9384 if (st->n.sym->assoc->dangling)
9385 {
9386 new_st->ext.block.assoc = st->n.sym->assoc;
9387 st->n.sym->assoc->dangling = 0;
9388 }
9389
9390 resolve_assoc_var (st->n.sym, false);
9391 }
9392
9393 /* Take out CLASS IS cases for separate treatment. */
9394 body = code;
9395 while (body && body->block)
9396 {
9397 if (body->block->ext.block.case_list->ts.type == BT_CLASS)
9398 {
9399 /* Add to class_is list. */
9400 if (class_is == NULL)
9401 {
9402 class_is = body->block;
9403 tail = class_is;
9404 }
9405 else
9406 {
9407 for (tail = class_is; tail->block; tail = tail->block) ;
9408 tail->block = body->block;
9409 tail = tail->block;
9410 }
9411 /* Remove from EXEC_SELECT list. */
9412 body->block = body->block->block;
9413 tail->block = NULL;
9414 }
9415 else
9416 body = body->block;
9417 }
9418
9419 if (class_is)
9420 {
9421 gfc_symbol *vtab;
9422
9423 if (!default_case)
9424 {
9425 /* Add a default case to hold the CLASS IS cases. */
9426 for (tail = code; tail->block; tail = tail->block) ;
9427 tail->block = gfc_get_code (EXEC_SELECT_TYPE);
9428 tail = tail->block;
9429 tail->ext.block.case_list = gfc_get_case ();
9430 tail->ext.block.case_list->ts.type = BT_UNKNOWN;
9431 tail->next = NULL;
9432 default_case = tail;
9433 }
9434
9435 /* More than one CLASS IS block? */
9436 if (class_is->block)
9437 {
9438 gfc_code **c1,*c2;
9439 bool swapped;
9440 /* Sort CLASS IS blocks by extension level. */
9441 do
9442 {
9443 swapped = false;
9444 for (c1 = &class_is; (*c1) && (*c1)->block; c1 = &((*c1)->block))
9445 {
9446 c2 = (*c1)->block;
9447 /* F03:C817 (check for doubles). */
9448 if ((*c1)->ext.block.case_list->ts.u.derived->hash_value
9449 == c2->ext.block.case_list->ts.u.derived->hash_value)
9450 {
9451 gfc_error ("Double CLASS IS block in SELECT TYPE "
9452 "statement at %L",
9453 &c2->ext.block.case_list->where);
9454 return;
9455 }
9456 if ((*c1)->ext.block.case_list->ts.u.derived->attr.extension
9457 < c2->ext.block.case_list->ts.u.derived->attr.extension)
9458 {
9459 /* Swap. */
9460 (*c1)->block = c2->block;
9461 c2->block = *c1;
9462 *c1 = c2;
9463 swapped = true;
9464 }
9465 }
9466 }
9467 while (swapped);
9468 }
9469
9470 /* Generate IF chain. */
9471 if_st = gfc_get_code (EXEC_IF);
9472 new_st = if_st;
9473 for (body = class_is; body; body = body->block)
9474 {
9475 new_st->block = gfc_get_code (EXEC_IF);
9476 new_st = new_st->block;
9477 /* Set up IF condition: Call _gfortran_is_extension_of. */
9478 new_st->expr1 = gfc_get_expr ();
9479 new_st->expr1->expr_type = EXPR_FUNCTION;
9480 new_st->expr1->ts.type = BT_LOGICAL;
9481 new_st->expr1->ts.kind = 4;
9482 new_st->expr1->value.function.name = gfc_get_string (PREFIX ("is_extension_of"));
9483 new_st->expr1->value.function.isym = XCNEW (gfc_intrinsic_sym);
9484 new_st->expr1->value.function.isym->id = GFC_ISYM_EXTENDS_TYPE_OF;
9485 /* Set up arguments. */
9486 new_st->expr1->value.function.actual = gfc_get_actual_arglist ();
9487 new_st->expr1->value.function.actual->expr = gfc_get_variable_expr (selector_expr->symtree);
9488 new_st->expr1->value.function.actual->expr->where = code->loc;
9489 new_st->expr1->where = code->loc;
9490 gfc_add_vptr_component (new_st->expr1->value.function.actual->expr);
9491 vtab = gfc_find_derived_vtab (body->ext.block.case_list->ts.u.derived);
9492 st = gfc_find_symtree (vtab->ns->sym_root, vtab->name);
9493 new_st->expr1->value.function.actual->next = gfc_get_actual_arglist ();
9494 new_st->expr1->value.function.actual->next->expr = gfc_get_variable_expr (st);
9495 new_st->expr1->value.function.actual->next->expr->where = code->loc;
9496 new_st->next = body->next;
9497 }
9498 if (default_case->next)
9499 {
9500 new_st->block = gfc_get_code (EXEC_IF);
9501 new_st = new_st->block;
9502 new_st->next = default_case->next;
9503 }
9504
9505 /* Replace CLASS DEFAULT code by the IF chain. */
9506 default_case->next = if_st;
9507 }
9508
9509 /* Resolve the internal code. This cannot be done earlier because
9510 it requires that the sym->assoc of selectors is set already. */
9511 gfc_current_ns = ns;
9512 gfc_resolve_blocks (code->block, gfc_current_ns);
9513 gfc_current_ns = old_ns;
9514
9515 if (ref)
9516 free (ref);
9517 }
9518
9519
9520 /* Resolve a SELECT RANK statement. */
9521
9522 static void
9523 resolve_select_rank (gfc_code *code, gfc_namespace *old_ns)
9524 {
9525 gfc_namespace *ns;
9526 gfc_code *body, *new_st, *tail;
9527 gfc_case *c;
9528 char tname[GFC_MAX_SYMBOL_LEN];
9529 char name[2 * GFC_MAX_SYMBOL_LEN];
9530 gfc_symtree *st;
9531 gfc_expr *selector_expr = NULL;
9532 int case_value;
9533 HOST_WIDE_INT charlen = 0;
9534
9535 ns = code->ext.block.ns;
9536 gfc_resolve (ns);
9537
9538 code->op = EXEC_BLOCK;
9539 if (code->expr2)
9540 {
9541 gfc_association_list* assoc;
9542
9543 assoc = gfc_get_association_list ();
9544 assoc->st = code->expr1->symtree;
9545 assoc->target = gfc_copy_expr (code->expr2);
9546 assoc->target->where = code->expr2->where;
9547 /* assoc->variable will be set by resolve_assoc_var. */
9548
9549 code->ext.block.assoc = assoc;
9550 code->expr1->symtree->n.sym->assoc = assoc;
9551
9552 resolve_assoc_var (code->expr1->symtree->n.sym, false);
9553 }
9554 else
9555 code->ext.block.assoc = NULL;
9556
9557 /* Loop over RANK cases. Note that returning on the errors causes a
9558 cascade of further errors because the case blocks do not compile
9559 correctly. */
9560 for (body = code->block; body; body = body->block)
9561 {
9562 c = body->ext.block.case_list;
9563 if (c->low)
9564 case_value = (int) mpz_get_si (c->low->value.integer);
9565 else
9566 case_value = -2;
9567
9568 /* Check for repeated cases. */
9569 for (tail = code->block; tail; tail = tail->block)
9570 {
9571 gfc_case *d = tail->ext.block.case_list;
9572 int case_value2;
9573
9574 if (tail == body)
9575 break;
9576
9577 /* Check F2018: C1153. */
9578 if (!c->low && !d->low)
9579 gfc_error ("RANK DEFAULT at %L is repeated at %L",
9580 &c->where, &d->where);
9581
9582 if (!c->low || !d->low)
9583 continue;
9584
9585 /* Check F2018: C1153. */
9586 case_value2 = (int) mpz_get_si (d->low->value.integer);
9587 if ((case_value == case_value2) && case_value == -1)
9588 gfc_error ("RANK (*) at %L is repeated at %L",
9589 &c->where, &d->where);
9590 else if (case_value == case_value2)
9591 gfc_error ("RANK (%i) at %L is repeated at %L",
9592 case_value, &c->where, &d->where);
9593 }
9594
9595 if (!c->low)
9596 continue;
9597
9598 /* Check F2018: C1155. */
9599 if (case_value == -1 && (gfc_expr_attr (code->expr1).allocatable
9600 || gfc_expr_attr (code->expr1).pointer))
9601 gfc_error ("RANK (*) at %L cannot be used with the pointer or "
9602 "allocatable selector at %L", &c->where, &code->expr1->where);
9603
9604 if (case_value == -1 && (gfc_expr_attr (code->expr1).allocatable
9605 || gfc_expr_attr (code->expr1).pointer))
9606 gfc_error ("RANK (*) at %L cannot be used with the pointer or "
9607 "allocatable selector at %L", &c->where, &code->expr1->where);
9608 }
9609
9610 /* Add EXEC_SELECT to switch on rank. */
9611 new_st = gfc_get_code (code->op);
9612 new_st->expr1 = code->expr1;
9613 new_st->expr2 = code->expr2;
9614 new_st->block = code->block;
9615 code->expr1 = code->expr2 = NULL;
9616 code->block = NULL;
9617 if (!ns->code)
9618 ns->code = new_st;
9619 else
9620 ns->code->next = new_st;
9621 code = new_st;
9622 code->op = EXEC_SELECT_RANK;
9623
9624 selector_expr = code->expr1;
9625
9626 /* Loop over SELECT RANK cases. */
9627 for (body = code->block; body; body = body->block)
9628 {
9629 c = body->ext.block.case_list;
9630 int case_value;
9631
9632 /* Pass on the default case. */
9633 if (c->low == NULL)
9634 continue;
9635
9636 /* Associate temporary to selector. This should only be done
9637 when this case is actually true, so build a new ASSOCIATE
9638 that does precisely this here (instead of using the
9639 'global' one). */
9640 if (c->ts.type == BT_CHARACTER && c->ts.u.cl && c->ts.u.cl->length
9641 && c->ts.u.cl->length->expr_type == EXPR_CONSTANT)
9642 charlen = gfc_mpz_get_hwi (c->ts.u.cl->length->value.integer);
9643
9644 if (c->ts.type == BT_CLASS)
9645 sprintf (tname, "class_%s", c->ts.u.derived->name);
9646 else if (c->ts.type == BT_DERIVED)
9647 sprintf (tname, "type_%s", c->ts.u.derived->name);
9648 else if (c->ts.type != BT_CHARACTER)
9649 sprintf (tname, "%s_%d", gfc_basic_typename (c->ts.type), c->ts.kind);
9650 else
9651 sprintf (tname, "%s_" HOST_WIDE_INT_PRINT_DEC "_%d",
9652 gfc_basic_typename (c->ts.type), charlen, c->ts.kind);
9653
9654 case_value = (int) mpz_get_si (c->low->value.integer);
9655 if (case_value >= 0)
9656 sprintf (name, "__tmp_%s_rank_%d", tname, case_value);
9657 else
9658 sprintf (name, "__tmp_%s_rank_m%d", tname, -case_value);
9659
9660 st = gfc_find_symtree (ns->sym_root, name);
9661 gcc_assert (st->n.sym->assoc);
9662
9663 st->n.sym->assoc->target = gfc_get_variable_expr (selector_expr->symtree);
9664 st->n.sym->assoc->target->where = selector_expr->where;
9665
9666 new_st = gfc_get_code (EXEC_BLOCK);
9667 new_st->ext.block.ns = gfc_build_block_ns (ns);
9668 new_st->ext.block.ns->code = body->next;
9669 body->next = new_st;
9670
9671 /* Chain in the new list only if it is marked as dangling. Otherwise
9672 there is a CASE label overlap and this is already used. Just ignore,
9673 the error is diagnosed elsewhere. */
9674 if (st->n.sym->assoc->dangling)
9675 {
9676 new_st->ext.block.assoc = st->n.sym->assoc;
9677 st->n.sym->assoc->dangling = 0;
9678 }
9679
9680 resolve_assoc_var (st->n.sym, false);
9681 }
9682
9683 gfc_current_ns = ns;
9684 gfc_resolve_blocks (code->block, gfc_current_ns);
9685 gfc_current_ns = old_ns;
9686 }
9687
9688
9689 /* Resolve a transfer statement. This is making sure that:
9690 -- a derived type being transferred has only non-pointer components
9691 -- a derived type being transferred doesn't have private components, unless
9692 it's being transferred from the module where the type was defined
9693 -- we're not trying to transfer a whole assumed size array. */
9694
9695 static void
9696 resolve_transfer (gfc_code *code)
9697 {
9698 gfc_symbol *sym, *derived;
9699 gfc_ref *ref;
9700 gfc_expr *exp;
9701 bool write = false;
9702 bool formatted = false;
9703 gfc_dt *dt = code->ext.dt;
9704 gfc_symbol *dtio_sub = NULL;
9705
9706 exp = code->expr1;
9707
9708 while (exp != NULL && exp->expr_type == EXPR_OP
9709 && exp->value.op.op == INTRINSIC_PARENTHESES)
9710 exp = exp->value.op.op1;
9711
9712 if (exp && exp->expr_type == EXPR_NULL
9713 && code->ext.dt)
9714 {
9715 gfc_error ("Invalid context for NULL () intrinsic at %L",
9716 &exp->where);
9717 return;
9718 }
9719
9720 if (exp == NULL || (exp->expr_type != EXPR_VARIABLE
9721 && exp->expr_type != EXPR_FUNCTION
9722 && exp->expr_type != EXPR_STRUCTURE))
9723 return;
9724
9725 /* If we are reading, the variable will be changed. Note that
9726 code->ext.dt may be NULL if the TRANSFER is related to
9727 an INQUIRE statement -- but in this case, we are not reading, either. */
9728 if (dt && dt->dt_io_kind->value.iokind == M_READ
9729 && !gfc_check_vardef_context (exp, false, false, false,
9730 _("item in READ")))
9731 return;
9732
9733 const gfc_typespec *ts = exp->expr_type == EXPR_STRUCTURE
9734 || exp->expr_type == EXPR_FUNCTION
9735 ? &exp->ts : &exp->symtree->n.sym->ts;
9736
9737 /* Go to actual component transferred. */
9738 for (ref = exp->ref; ref; ref = ref->next)
9739 if (ref->type == REF_COMPONENT)
9740 ts = &ref->u.c.component->ts;
9741
9742 if (dt && dt->dt_io_kind->value.iokind != M_INQUIRE
9743 && (ts->type == BT_DERIVED || ts->type == BT_CLASS))
9744 {
9745 derived = ts->u.derived;
9746
9747 /* Determine when to use the formatted DTIO procedure. */
9748 if (dt && (dt->format_expr || dt->format_label))
9749 formatted = true;
9750
9751 write = dt->dt_io_kind->value.iokind == M_WRITE
9752 || dt->dt_io_kind->value.iokind == M_PRINT;
9753 dtio_sub = gfc_find_specific_dtio_proc (derived, write, formatted);
9754
9755 if (dtio_sub != NULL && exp->expr_type == EXPR_VARIABLE)
9756 {
9757 dt->udtio = exp;
9758 sym = exp->symtree->n.sym->ns->proc_name;
9759 /* Check to see if this is a nested DTIO call, with the
9760 dummy as the io-list object. */
9761 if (sym && sym == dtio_sub && sym->formal
9762 && sym->formal->sym == exp->symtree->n.sym
9763 && exp->ref == NULL)
9764 {
9765 if (!sym->attr.recursive)
9766 {
9767 gfc_error ("DTIO %s procedure at %L must be recursive",
9768 sym->name, &sym->declared_at);
9769 return;
9770 }
9771 }
9772 }
9773 }
9774
9775 if (ts->type == BT_CLASS && dtio_sub == NULL)
9776 {
9777 gfc_error ("Data transfer element at %L cannot be polymorphic unless "
9778 "it is processed by a defined input/output procedure",
9779 &code->loc);
9780 return;
9781 }
9782
9783 if (ts->type == BT_DERIVED)
9784 {
9785 /* Check that transferred derived type doesn't contain POINTER
9786 components unless it is processed by a defined input/output
9787 procedure". */
9788 if (ts->u.derived->attr.pointer_comp && dtio_sub == NULL)
9789 {
9790 gfc_error ("Data transfer element at %L cannot have POINTER "
9791 "components unless it is processed by a defined "
9792 "input/output procedure", &code->loc);
9793 return;
9794 }
9795
9796 /* F08:C935. */
9797 if (ts->u.derived->attr.proc_pointer_comp)
9798 {
9799 gfc_error ("Data transfer element at %L cannot have "
9800 "procedure pointer components", &code->loc);
9801 return;
9802 }
9803
9804 if (ts->u.derived->attr.alloc_comp && dtio_sub == NULL)
9805 {
9806 gfc_error ("Data transfer element at %L cannot have ALLOCATABLE "
9807 "components unless it is processed by a defined "
9808 "input/output procedure", &code->loc);
9809 return;
9810 }
9811
9812 /* C_PTR and C_FUNPTR have private components which means they cannot
9813 be printed. However, if -std=gnu and not -pedantic, allow
9814 the component to be printed to help debugging. */
9815 if (ts->u.derived->ts.f90_type == BT_VOID)
9816 {
9817 if (!gfc_notify_std (GFC_STD_GNU, "Data transfer element at %L "
9818 "cannot have PRIVATE components", &code->loc))
9819 return;
9820 }
9821 else if (derived_inaccessible (ts->u.derived) && dtio_sub == NULL)
9822 {
9823 gfc_error ("Data transfer element at %L cannot have "
9824 "PRIVATE components unless it is processed by "
9825 "a defined input/output procedure", &code->loc);
9826 return;
9827 }
9828 }
9829
9830 if (exp->expr_type == EXPR_STRUCTURE)
9831 return;
9832
9833 sym = exp->symtree->n.sym;
9834
9835 if (sym->as != NULL && sym->as->type == AS_ASSUMED_SIZE && exp->ref
9836 && exp->ref->type == REF_ARRAY && exp->ref->u.ar.type == AR_FULL)
9837 {
9838 gfc_error ("Data transfer element at %L cannot be a full reference to "
9839 "an assumed-size array", &code->loc);
9840 return;
9841 }
9842
9843 if (async_io_dt && exp->expr_type == EXPR_VARIABLE)
9844 exp->symtree->n.sym->attr.asynchronous = 1;
9845 }
9846
9847
9848 /*********** Toplevel code resolution subroutines ***********/
9849
9850 /* Find the set of labels that are reachable from this block. We also
9851 record the last statement in each block. */
9852
9853 static void
9854 find_reachable_labels (gfc_code *block)
9855 {
9856 gfc_code *c;
9857
9858 if (!block)
9859 return;
9860
9861 cs_base->reachable_labels = bitmap_alloc (&labels_obstack);
9862
9863 /* Collect labels in this block. We don't keep those corresponding
9864 to END {IF|SELECT}, these are checked in resolve_branch by going
9865 up through the code_stack. */
9866 for (c = block; c; c = c->next)
9867 {
9868 if (c->here && c->op != EXEC_END_NESTED_BLOCK)
9869 bitmap_set_bit (cs_base->reachable_labels, c->here->value);
9870 }
9871
9872 /* Merge with labels from parent block. */
9873 if (cs_base->prev)
9874 {
9875 gcc_assert (cs_base->prev->reachable_labels);
9876 bitmap_ior_into (cs_base->reachable_labels,
9877 cs_base->prev->reachable_labels);
9878 }
9879 }
9880
9881
9882 static void
9883 resolve_lock_unlock_event (gfc_code *code)
9884 {
9885 if (code->expr1->expr_type == EXPR_FUNCTION
9886 && code->expr1->value.function.isym
9887 && code->expr1->value.function.isym->id == GFC_ISYM_CAF_GET)
9888 remove_caf_get_intrinsic (code->expr1);
9889
9890 if ((code->op == EXEC_LOCK || code->op == EXEC_UNLOCK)
9891 && (code->expr1->ts.type != BT_DERIVED
9892 || code->expr1->expr_type != EXPR_VARIABLE
9893 || code->expr1->ts.u.derived->from_intmod != INTMOD_ISO_FORTRAN_ENV
9894 || code->expr1->ts.u.derived->intmod_sym_id != ISOFORTRAN_LOCK_TYPE
9895 || code->expr1->rank != 0
9896 || (!gfc_is_coarray (code->expr1) &&
9897 !gfc_is_coindexed (code->expr1))))
9898 gfc_error ("Lock variable at %L must be a scalar of type LOCK_TYPE",
9899 &code->expr1->where);
9900 else if ((code->op == EXEC_EVENT_POST || code->op == EXEC_EVENT_WAIT)
9901 && (code->expr1->ts.type != BT_DERIVED
9902 || code->expr1->expr_type != EXPR_VARIABLE
9903 || code->expr1->ts.u.derived->from_intmod
9904 != INTMOD_ISO_FORTRAN_ENV
9905 || code->expr1->ts.u.derived->intmod_sym_id
9906 != ISOFORTRAN_EVENT_TYPE
9907 || code->expr1->rank != 0))
9908 gfc_error ("Event variable at %L must be a scalar of type EVENT_TYPE",
9909 &code->expr1->where);
9910 else if (code->op == EXEC_EVENT_POST && !gfc_is_coarray (code->expr1)
9911 && !gfc_is_coindexed (code->expr1))
9912 gfc_error ("Event variable argument at %L must be a coarray or coindexed",
9913 &code->expr1->where);
9914 else if (code->op == EXEC_EVENT_WAIT && !gfc_is_coarray (code->expr1))
9915 gfc_error ("Event variable argument at %L must be a coarray but not "
9916 "coindexed", &code->expr1->where);
9917
9918 /* Check STAT. */
9919 if (code->expr2
9920 && (code->expr2->ts.type != BT_INTEGER || code->expr2->rank != 0
9921 || code->expr2->expr_type != EXPR_VARIABLE))
9922 gfc_error ("STAT= argument at %L must be a scalar INTEGER variable",
9923 &code->expr2->where);
9924
9925 if (code->expr2
9926 && !gfc_check_vardef_context (code->expr2, false, false, false,
9927 _("STAT variable")))
9928 return;
9929
9930 /* Check ERRMSG. */
9931 if (code->expr3
9932 && (code->expr3->ts.type != BT_CHARACTER || code->expr3->rank != 0
9933 || code->expr3->expr_type != EXPR_VARIABLE))
9934 gfc_error ("ERRMSG= argument at %L must be a scalar CHARACTER variable",
9935 &code->expr3->where);
9936
9937 if (code->expr3
9938 && !gfc_check_vardef_context (code->expr3, false, false, false,
9939 _("ERRMSG variable")))
9940 return;
9941
9942 /* Check for LOCK the ACQUIRED_LOCK. */
9943 if (code->op != EXEC_EVENT_WAIT && code->expr4
9944 && (code->expr4->ts.type != BT_LOGICAL || code->expr4->rank != 0
9945 || code->expr4->expr_type != EXPR_VARIABLE))
9946 gfc_error ("ACQUIRED_LOCK= argument at %L must be a scalar LOGICAL "
9947 "variable", &code->expr4->where);
9948
9949 if (code->op != EXEC_EVENT_WAIT && code->expr4
9950 && !gfc_check_vardef_context (code->expr4, false, false, false,
9951 _("ACQUIRED_LOCK variable")))
9952 return;
9953
9954 /* Check for EVENT WAIT the UNTIL_COUNT. */
9955 if (code->op == EXEC_EVENT_WAIT && code->expr4)
9956 {
9957 if (!gfc_resolve_expr (code->expr4) || code->expr4->ts.type != BT_INTEGER
9958 || code->expr4->rank != 0)
9959 gfc_error ("UNTIL_COUNT= argument at %L must be a scalar INTEGER "
9960 "expression", &code->expr4->where);
9961 }
9962 }
9963
9964
9965 static void
9966 resolve_critical (gfc_code *code)
9967 {
9968 gfc_symtree *symtree;
9969 gfc_symbol *lock_type;
9970 char name[GFC_MAX_SYMBOL_LEN];
9971 static int serial = 0;
9972
9973 if (flag_coarray != GFC_FCOARRAY_LIB)
9974 return;
9975
9976 symtree = gfc_find_symtree (gfc_current_ns->sym_root,
9977 GFC_PREFIX ("lock_type"));
9978 if (symtree)
9979 lock_type = symtree->n.sym;
9980 else
9981 {
9982 if (gfc_get_sym_tree (GFC_PREFIX ("lock_type"), gfc_current_ns, &symtree,
9983 false) != 0)
9984 gcc_unreachable ();
9985 lock_type = symtree->n.sym;
9986 lock_type->attr.flavor = FL_DERIVED;
9987 lock_type->attr.zero_comp = 1;
9988 lock_type->from_intmod = INTMOD_ISO_FORTRAN_ENV;
9989 lock_type->intmod_sym_id = ISOFORTRAN_LOCK_TYPE;
9990 }
9991
9992 sprintf(name, GFC_PREFIX ("lock_var") "%d",serial++);
9993 if (gfc_get_sym_tree (name, gfc_current_ns, &symtree, false) != 0)
9994 gcc_unreachable ();
9995
9996 code->resolved_sym = symtree->n.sym;
9997 symtree->n.sym->attr.flavor = FL_VARIABLE;
9998 symtree->n.sym->attr.referenced = 1;
9999 symtree->n.sym->attr.artificial = 1;
10000 symtree->n.sym->attr.codimension = 1;
10001 symtree->n.sym->ts.type = BT_DERIVED;
10002 symtree->n.sym->ts.u.derived = lock_type;
10003 symtree->n.sym->as = gfc_get_array_spec ();
10004 symtree->n.sym->as->corank = 1;
10005 symtree->n.sym->as->type = AS_EXPLICIT;
10006 symtree->n.sym->as->cotype = AS_EXPLICIT;
10007 symtree->n.sym->as->lower[0] = gfc_get_int_expr (gfc_default_integer_kind,
10008 NULL, 1);
10009 gfc_commit_symbols();
10010 }
10011
10012
10013 static void
10014 resolve_sync (gfc_code *code)
10015 {
10016 /* Check imageset. The * case matches expr1 == NULL. */
10017 if (code->expr1)
10018 {
10019 if (code->expr1->ts.type != BT_INTEGER || code->expr1->rank > 1)
10020 gfc_error ("Imageset argument at %L must be a scalar or rank-1 "
10021 "INTEGER expression", &code->expr1->where);
10022 if (code->expr1->expr_type == EXPR_CONSTANT && code->expr1->rank == 0
10023 && mpz_cmp_si (code->expr1->value.integer, 1) < 0)
10024 gfc_error ("Imageset argument at %L must between 1 and num_images()",
10025 &code->expr1->where);
10026 else if (code->expr1->expr_type == EXPR_ARRAY
10027 && gfc_simplify_expr (code->expr1, 0))
10028 {
10029 gfc_constructor *cons;
10030 cons = gfc_constructor_first (code->expr1->value.constructor);
10031 for (; cons; cons = gfc_constructor_next (cons))
10032 if (cons->expr->expr_type == EXPR_CONSTANT
10033 && mpz_cmp_si (cons->expr->value.integer, 1) < 0)
10034 gfc_error ("Imageset argument at %L must between 1 and "
10035 "num_images()", &cons->expr->where);
10036 }
10037 }
10038
10039 /* Check STAT. */
10040 gfc_resolve_expr (code->expr2);
10041 if (code->expr2
10042 && (code->expr2->ts.type != BT_INTEGER || code->expr2->rank != 0
10043 || code->expr2->expr_type != EXPR_VARIABLE))
10044 gfc_error ("STAT= argument at %L must be a scalar INTEGER variable",
10045 &code->expr2->where);
10046
10047 /* Check ERRMSG. */
10048 gfc_resolve_expr (code->expr3);
10049 if (code->expr3
10050 && (code->expr3->ts.type != BT_CHARACTER || code->expr3->rank != 0
10051 || code->expr3->expr_type != EXPR_VARIABLE))
10052 gfc_error ("ERRMSG= argument at %L must be a scalar CHARACTER variable",
10053 &code->expr3->where);
10054 }
10055
10056
10057 /* Given a branch to a label, see if the branch is conforming.
10058 The code node describes where the branch is located. */
10059
10060 static void
10061 resolve_branch (gfc_st_label *label, gfc_code *code)
10062 {
10063 code_stack *stack;
10064
10065 if (label == NULL)
10066 return;
10067
10068 /* Step one: is this a valid branching target? */
10069
10070 if (label->defined == ST_LABEL_UNKNOWN)
10071 {
10072 gfc_error ("Label %d referenced at %L is never defined", label->value,
10073 &code->loc);
10074 return;
10075 }
10076
10077 if (label->defined != ST_LABEL_TARGET && label->defined != ST_LABEL_DO_TARGET)
10078 {
10079 gfc_error ("Statement at %L is not a valid branch target statement "
10080 "for the branch statement at %L", &label->where, &code->loc);
10081 return;
10082 }
10083
10084 /* Step two: make sure this branch is not a branch to itself ;-) */
10085
10086 if (code->here == label)
10087 {
10088 gfc_warning (0,
10089 "Branch at %L may result in an infinite loop", &code->loc);
10090 return;
10091 }
10092
10093 /* Step three: See if the label is in the same block as the
10094 branching statement. The hard work has been done by setting up
10095 the bitmap reachable_labels. */
10096
10097 if (bitmap_bit_p (cs_base->reachable_labels, label->value))
10098 {
10099 /* Check now whether there is a CRITICAL construct; if so, check
10100 whether the label is still visible outside of the CRITICAL block,
10101 which is invalid. */
10102 for (stack = cs_base; stack; stack = stack->prev)
10103 {
10104 if (stack->current->op == EXEC_CRITICAL
10105 && bitmap_bit_p (stack->reachable_labels, label->value))
10106 gfc_error ("GOTO statement at %L leaves CRITICAL construct for "
10107 "label at %L", &code->loc, &label->where);
10108 else if (stack->current->op == EXEC_DO_CONCURRENT
10109 && bitmap_bit_p (stack->reachable_labels, label->value))
10110 gfc_error ("GOTO statement at %L leaves DO CONCURRENT construct "
10111 "for label at %L", &code->loc, &label->where);
10112 }
10113
10114 return;
10115 }
10116
10117 /* Step four: If we haven't found the label in the bitmap, it may
10118 still be the label of the END of the enclosing block, in which
10119 case we find it by going up the code_stack. */
10120
10121 for (stack = cs_base; stack; stack = stack->prev)
10122 {
10123 if (stack->current->next && stack->current->next->here == label)
10124 break;
10125 if (stack->current->op == EXEC_CRITICAL)
10126 {
10127 /* Note: A label at END CRITICAL does not leave the CRITICAL
10128 construct as END CRITICAL is still part of it. */
10129 gfc_error ("GOTO statement at %L leaves CRITICAL construct for label"
10130 " at %L", &code->loc, &label->where);
10131 return;
10132 }
10133 else if (stack->current->op == EXEC_DO_CONCURRENT)
10134 {
10135 gfc_error ("GOTO statement at %L leaves DO CONCURRENT construct for "
10136 "label at %L", &code->loc, &label->where);
10137 return;
10138 }
10139 }
10140
10141 if (stack)
10142 {
10143 gcc_assert (stack->current->next->op == EXEC_END_NESTED_BLOCK);
10144 return;
10145 }
10146
10147 /* The label is not in an enclosing block, so illegal. This was
10148 allowed in Fortran 66, so we allow it as extension. No
10149 further checks are necessary in this case. */
10150 gfc_notify_std (GFC_STD_LEGACY, "Label at %L is not in the same block "
10151 "as the GOTO statement at %L", &label->where,
10152 &code->loc);
10153 return;
10154 }
10155
10156
10157 /* Check whether EXPR1 has the same shape as EXPR2. */
10158
10159 static bool
10160 resolve_where_shape (gfc_expr *expr1, gfc_expr *expr2)
10161 {
10162 mpz_t shape[GFC_MAX_DIMENSIONS];
10163 mpz_t shape2[GFC_MAX_DIMENSIONS];
10164 bool result = false;
10165 int i;
10166
10167 /* Compare the rank. */
10168 if (expr1->rank != expr2->rank)
10169 return result;
10170
10171 /* Compare the size of each dimension. */
10172 for (i=0; i<expr1->rank; i++)
10173 {
10174 if (!gfc_array_dimen_size (expr1, i, &shape[i]))
10175 goto ignore;
10176
10177 if (!gfc_array_dimen_size (expr2, i, &shape2[i]))
10178 goto ignore;
10179
10180 if (mpz_cmp (shape[i], shape2[i]))
10181 goto over;
10182 }
10183
10184 /* When either of the two expression is an assumed size array, we
10185 ignore the comparison of dimension sizes. */
10186 ignore:
10187 result = true;
10188
10189 over:
10190 gfc_clear_shape (shape, i);
10191 gfc_clear_shape (shape2, i);
10192 return result;
10193 }
10194
10195
10196 /* Check whether a WHERE assignment target or a WHERE mask expression
10197 has the same shape as the outmost WHERE mask expression. */
10198
10199 static void
10200 resolve_where (gfc_code *code, gfc_expr *mask)
10201 {
10202 gfc_code *cblock;
10203 gfc_code *cnext;
10204 gfc_expr *e = NULL;
10205
10206 cblock = code->block;
10207
10208 /* Store the first WHERE mask-expr of the WHERE statement or construct.
10209 In case of nested WHERE, only the outmost one is stored. */
10210 if (mask == NULL) /* outmost WHERE */
10211 e = cblock->expr1;
10212 else /* inner WHERE */
10213 e = mask;
10214
10215 while (cblock)
10216 {
10217 if (cblock->expr1)
10218 {
10219 /* Check if the mask-expr has a consistent shape with the
10220 outmost WHERE mask-expr. */
10221 if (!resolve_where_shape (cblock->expr1, e))
10222 gfc_error ("WHERE mask at %L has inconsistent shape",
10223 &cblock->expr1->where);
10224 }
10225
10226 /* the assignment statement of a WHERE statement, or the first
10227 statement in where-body-construct of a WHERE construct */
10228 cnext = cblock->next;
10229 while (cnext)
10230 {
10231 switch (cnext->op)
10232 {
10233 /* WHERE assignment statement */
10234 case EXEC_ASSIGN:
10235
10236 /* Check shape consistent for WHERE assignment target. */
10237 if (e && !resolve_where_shape (cnext->expr1, e))
10238 gfc_error ("WHERE assignment target at %L has "
10239 "inconsistent shape", &cnext->expr1->where);
10240 break;
10241
10242
10243 case EXEC_ASSIGN_CALL:
10244 resolve_call (cnext);
10245 if (!cnext->resolved_sym->attr.elemental)
10246 gfc_error("Non-ELEMENTAL user-defined assignment in WHERE at %L",
10247 &cnext->ext.actual->expr->where);
10248 break;
10249
10250 /* WHERE or WHERE construct is part of a where-body-construct */
10251 case EXEC_WHERE:
10252 resolve_where (cnext, e);
10253 break;
10254
10255 default:
10256 gfc_error ("Unsupported statement inside WHERE at %L",
10257 &cnext->loc);
10258 }
10259 /* the next statement within the same where-body-construct */
10260 cnext = cnext->next;
10261 }
10262 /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
10263 cblock = cblock->block;
10264 }
10265 }
10266
10267
10268 /* Resolve assignment in FORALL construct.
10269 NVAR is the number of FORALL index variables, and VAR_EXPR records the
10270 FORALL index variables. */
10271
10272 static void
10273 gfc_resolve_assign_in_forall (gfc_code *code, int nvar, gfc_expr **var_expr)
10274 {
10275 int n;
10276
10277 for (n = 0; n < nvar; n++)
10278 {
10279 gfc_symbol *forall_index;
10280
10281 forall_index = var_expr[n]->symtree->n.sym;
10282
10283 /* Check whether the assignment target is one of the FORALL index
10284 variable. */
10285 if ((code->expr1->expr_type == EXPR_VARIABLE)
10286 && (code->expr1->symtree->n.sym == forall_index))
10287 gfc_error ("Assignment to a FORALL index variable at %L",
10288 &code->expr1->where);
10289 else
10290 {
10291 /* If one of the FORALL index variables doesn't appear in the
10292 assignment variable, then there could be a many-to-one
10293 assignment. Emit a warning rather than an error because the
10294 mask could be resolving this problem. */
10295 if (!find_forall_index (code->expr1, forall_index, 0))
10296 gfc_warning (0, "The FORALL with index %qs is not used on the "
10297 "left side of the assignment at %L and so might "
10298 "cause multiple assignment to this object",
10299 var_expr[n]->symtree->name, &code->expr1->where);
10300 }
10301 }
10302 }
10303
10304
10305 /* Resolve WHERE statement in FORALL construct. */
10306
10307 static void
10308 gfc_resolve_where_code_in_forall (gfc_code *code, int nvar,
10309 gfc_expr **var_expr)
10310 {
10311 gfc_code *cblock;
10312 gfc_code *cnext;
10313
10314 cblock = code->block;
10315 while (cblock)
10316 {
10317 /* the assignment statement of a WHERE statement, or the first
10318 statement in where-body-construct of a WHERE construct */
10319 cnext = cblock->next;
10320 while (cnext)
10321 {
10322 switch (cnext->op)
10323 {
10324 /* WHERE assignment statement */
10325 case EXEC_ASSIGN:
10326 gfc_resolve_assign_in_forall (cnext, nvar, var_expr);
10327 break;
10328
10329 /* WHERE operator assignment statement */
10330 case EXEC_ASSIGN_CALL:
10331 resolve_call (cnext);
10332 if (!cnext->resolved_sym->attr.elemental)
10333 gfc_error("Non-ELEMENTAL user-defined assignment in WHERE at %L",
10334 &cnext->ext.actual->expr->where);
10335 break;
10336
10337 /* WHERE or WHERE construct is part of a where-body-construct */
10338 case EXEC_WHERE:
10339 gfc_resolve_where_code_in_forall (cnext, nvar, var_expr);
10340 break;
10341
10342 default:
10343 gfc_error ("Unsupported statement inside WHERE at %L",
10344 &cnext->loc);
10345 }
10346 /* the next statement within the same where-body-construct */
10347 cnext = cnext->next;
10348 }
10349 /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
10350 cblock = cblock->block;
10351 }
10352 }
10353
10354
10355 /* Traverse the FORALL body to check whether the following errors exist:
10356 1. For assignment, check if a many-to-one assignment happens.
10357 2. For WHERE statement, check the WHERE body to see if there is any
10358 many-to-one assignment. */
10359
10360 static void
10361 gfc_resolve_forall_body (gfc_code *code, int nvar, gfc_expr **var_expr)
10362 {
10363 gfc_code *c;
10364
10365 c = code->block->next;
10366 while (c)
10367 {
10368 switch (c->op)
10369 {
10370 case EXEC_ASSIGN:
10371 case EXEC_POINTER_ASSIGN:
10372 gfc_resolve_assign_in_forall (c, nvar, var_expr);
10373 break;
10374
10375 case EXEC_ASSIGN_CALL:
10376 resolve_call (c);
10377 break;
10378
10379 /* Because the gfc_resolve_blocks() will handle the nested FORALL,
10380 there is no need to handle it here. */
10381 case EXEC_FORALL:
10382 break;
10383 case EXEC_WHERE:
10384 gfc_resolve_where_code_in_forall(c, nvar, var_expr);
10385 break;
10386 default:
10387 break;
10388 }
10389 /* The next statement in the FORALL body. */
10390 c = c->next;
10391 }
10392 }
10393
10394
10395 /* Counts the number of iterators needed inside a forall construct, including
10396 nested forall constructs. This is used to allocate the needed memory
10397 in gfc_resolve_forall. */
10398
10399 static int
10400 gfc_count_forall_iterators (gfc_code *code)
10401 {
10402 int max_iters, sub_iters, current_iters;
10403 gfc_forall_iterator *fa;
10404
10405 gcc_assert(code->op == EXEC_FORALL);
10406 max_iters = 0;
10407 current_iters = 0;
10408
10409 for (fa = code->ext.forall_iterator; fa; fa = fa->next)
10410 current_iters ++;
10411
10412 code = code->block->next;
10413
10414 while (code)
10415 {
10416 if (code->op == EXEC_FORALL)
10417 {
10418 sub_iters = gfc_count_forall_iterators (code);
10419 if (sub_iters > max_iters)
10420 max_iters = sub_iters;
10421 }
10422 code = code->next;
10423 }
10424
10425 return current_iters + max_iters;
10426 }
10427
10428
10429 /* Given a FORALL construct, first resolve the FORALL iterator, then call
10430 gfc_resolve_forall_body to resolve the FORALL body. */
10431
10432 static void
10433 gfc_resolve_forall (gfc_code *code, gfc_namespace *ns, int forall_save)
10434 {
10435 static gfc_expr **var_expr;
10436 static int total_var = 0;
10437 static int nvar = 0;
10438 int i, old_nvar, tmp;
10439 gfc_forall_iterator *fa;
10440
10441 old_nvar = nvar;
10442
10443 if (!gfc_notify_std (GFC_STD_F2018_OBS, "FORALL construct at %L", &code->loc))
10444 return;
10445
10446 /* Start to resolve a FORALL construct */
10447 if (forall_save == 0)
10448 {
10449 /* Count the total number of FORALL indices in the nested FORALL
10450 construct in order to allocate the VAR_EXPR with proper size. */
10451 total_var = gfc_count_forall_iterators (code);
10452
10453 /* Allocate VAR_EXPR with NUMBER_OF_FORALL_INDEX elements. */
10454 var_expr = XCNEWVEC (gfc_expr *, total_var);
10455 }
10456
10457 /* The information about FORALL iterator, including FORALL indices start, end
10458 and stride. An outer FORALL indice cannot appear in start, end or stride. */
10459 for (fa = code->ext.forall_iterator; fa; fa = fa->next)
10460 {
10461 /* Fortran 20008: C738 (R753). */
10462 if (fa->var->ref && fa->var->ref->type == REF_ARRAY)
10463 {
10464 gfc_error ("FORALL index-name at %L must be a scalar variable "
10465 "of type integer", &fa->var->where);
10466 continue;
10467 }
10468
10469 /* Check if any outer FORALL index name is the same as the current
10470 one. */
10471 for (i = 0; i < nvar; i++)
10472 {
10473 if (fa->var->symtree->n.sym == var_expr[i]->symtree->n.sym)
10474 gfc_error ("An outer FORALL construct already has an index "
10475 "with this name %L", &fa->var->where);
10476 }
10477
10478 /* Record the current FORALL index. */
10479 var_expr[nvar] = gfc_copy_expr (fa->var);
10480
10481 nvar++;
10482
10483 /* No memory leak. */
10484 gcc_assert (nvar <= total_var);
10485 }
10486
10487 /* Resolve the FORALL body. */
10488 gfc_resolve_forall_body (code, nvar, var_expr);
10489
10490 /* May call gfc_resolve_forall to resolve the inner FORALL loop. */
10491 gfc_resolve_blocks (code->block, ns);
10492
10493 tmp = nvar;
10494 nvar = old_nvar;
10495 /* Free only the VAR_EXPRs allocated in this frame. */
10496 for (i = nvar; i < tmp; i++)
10497 gfc_free_expr (var_expr[i]);
10498
10499 if (nvar == 0)
10500 {
10501 /* We are in the outermost FORALL construct. */
10502 gcc_assert (forall_save == 0);
10503
10504 /* VAR_EXPR is not needed any more. */
10505 free (var_expr);
10506 total_var = 0;
10507 }
10508 }
10509
10510
10511 /* Resolve a BLOCK construct statement. */
10512
10513 static void
10514 resolve_block_construct (gfc_code* code)
10515 {
10516 /* Resolve the BLOCK's namespace. */
10517 gfc_resolve (code->ext.block.ns);
10518
10519 /* For an ASSOCIATE block, the associations (and their targets) are already
10520 resolved during resolve_symbol. */
10521 }
10522
10523
10524 /* Resolve lists of blocks found in IF, SELECT CASE, WHERE, FORALL, GOTO and
10525 DO code nodes. */
10526
10527 void
10528 gfc_resolve_blocks (gfc_code *b, gfc_namespace *ns)
10529 {
10530 bool t;
10531
10532 for (; b; b = b->block)
10533 {
10534 t = gfc_resolve_expr (b->expr1);
10535 if (!gfc_resolve_expr (b->expr2))
10536 t = false;
10537
10538 switch (b->op)
10539 {
10540 case EXEC_IF:
10541 if (t && b->expr1 != NULL
10542 && (b->expr1->ts.type != BT_LOGICAL || b->expr1->rank != 0))
10543 gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
10544 &b->expr1->where);
10545 break;
10546
10547 case EXEC_WHERE:
10548 if (t
10549 && b->expr1 != NULL
10550 && (b->expr1->ts.type != BT_LOGICAL || b->expr1->rank == 0))
10551 gfc_error ("WHERE/ELSEWHERE clause at %L requires a LOGICAL array",
10552 &b->expr1->where);
10553 break;
10554
10555 case EXEC_GOTO:
10556 resolve_branch (b->label1, b);
10557 break;
10558
10559 case EXEC_BLOCK:
10560 resolve_block_construct (b);
10561 break;
10562
10563 case EXEC_SELECT:
10564 case EXEC_SELECT_TYPE:
10565 case EXEC_SELECT_RANK:
10566 case EXEC_FORALL:
10567 case EXEC_DO:
10568 case EXEC_DO_WHILE:
10569 case EXEC_DO_CONCURRENT:
10570 case EXEC_CRITICAL:
10571 case EXEC_READ:
10572 case EXEC_WRITE:
10573 case EXEC_IOLENGTH:
10574 case EXEC_WAIT:
10575 break;
10576
10577 case EXEC_OMP_ATOMIC:
10578 case EXEC_OACC_ATOMIC:
10579 {
10580 gfc_omp_atomic_op aop
10581 = (gfc_omp_atomic_op) (b->ext.omp_atomic & GFC_OMP_ATOMIC_MASK);
10582
10583 /* Verify this before calling gfc_resolve_code, which might
10584 change it. */
10585 gcc_assert (b->next && b->next->op == EXEC_ASSIGN);
10586 gcc_assert (((aop != GFC_OMP_ATOMIC_CAPTURE)
10587 && b->next->next == NULL)
10588 || ((aop == GFC_OMP_ATOMIC_CAPTURE)
10589 && b->next->next != NULL
10590 && b->next->next->op == EXEC_ASSIGN
10591 && b->next->next->next == NULL));
10592 }
10593 break;
10594
10595 case EXEC_OACC_PARALLEL_LOOP:
10596 case EXEC_OACC_PARALLEL:
10597 case EXEC_OACC_KERNELS_LOOP:
10598 case EXEC_OACC_KERNELS:
10599 case EXEC_OACC_DATA:
10600 case EXEC_OACC_HOST_DATA:
10601 case EXEC_OACC_LOOP:
10602 case EXEC_OACC_UPDATE:
10603 case EXEC_OACC_WAIT:
10604 case EXEC_OACC_CACHE:
10605 case EXEC_OACC_ENTER_DATA:
10606 case EXEC_OACC_EXIT_DATA:
10607 case EXEC_OACC_ROUTINE:
10608 case EXEC_OMP_CRITICAL:
10609 case EXEC_OMP_DISTRIBUTE:
10610 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
10611 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
10612 case EXEC_OMP_DISTRIBUTE_SIMD:
10613 case EXEC_OMP_DO:
10614 case EXEC_OMP_DO_SIMD:
10615 case EXEC_OMP_MASTER:
10616 case EXEC_OMP_ORDERED:
10617 case EXEC_OMP_PARALLEL:
10618 case EXEC_OMP_PARALLEL_DO:
10619 case EXEC_OMP_PARALLEL_DO_SIMD:
10620 case EXEC_OMP_PARALLEL_SECTIONS:
10621 case EXEC_OMP_PARALLEL_WORKSHARE:
10622 case EXEC_OMP_SECTIONS:
10623 case EXEC_OMP_SIMD:
10624 case EXEC_OMP_SINGLE:
10625 case EXEC_OMP_TARGET:
10626 case EXEC_OMP_TARGET_DATA:
10627 case EXEC_OMP_TARGET_ENTER_DATA:
10628 case EXEC_OMP_TARGET_EXIT_DATA:
10629 case EXEC_OMP_TARGET_PARALLEL:
10630 case EXEC_OMP_TARGET_PARALLEL_DO:
10631 case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
10632 case EXEC_OMP_TARGET_SIMD:
10633 case EXEC_OMP_TARGET_TEAMS:
10634 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
10635 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
10636 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
10637 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
10638 case EXEC_OMP_TARGET_UPDATE:
10639 case EXEC_OMP_TASK:
10640 case EXEC_OMP_TASKGROUP:
10641 case EXEC_OMP_TASKLOOP:
10642 case EXEC_OMP_TASKLOOP_SIMD:
10643 case EXEC_OMP_TASKWAIT:
10644 case EXEC_OMP_TASKYIELD:
10645 case EXEC_OMP_TEAMS:
10646 case EXEC_OMP_TEAMS_DISTRIBUTE:
10647 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
10648 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
10649 case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
10650 case EXEC_OMP_WORKSHARE:
10651 break;
10652
10653 default:
10654 gfc_internal_error ("gfc_resolve_blocks(): Bad block type");
10655 }
10656
10657 gfc_resolve_code (b->next, ns);
10658 }
10659 }
10660
10661
10662 /* Does everything to resolve an ordinary assignment. Returns true
10663 if this is an interface assignment. */
10664 static bool
10665 resolve_ordinary_assign (gfc_code *code, gfc_namespace *ns)
10666 {
10667 bool rval = false;
10668 gfc_expr *lhs;
10669 gfc_expr *rhs;
10670 int n;
10671 gfc_ref *ref;
10672 symbol_attribute attr;
10673
10674 if (gfc_extend_assign (code, ns))
10675 {
10676 gfc_expr** rhsptr;
10677
10678 if (code->op == EXEC_ASSIGN_CALL)
10679 {
10680 lhs = code->ext.actual->expr;
10681 rhsptr = &code->ext.actual->next->expr;
10682 }
10683 else
10684 {
10685 gfc_actual_arglist* args;
10686 gfc_typebound_proc* tbp;
10687
10688 gcc_assert (code->op == EXEC_COMPCALL);
10689
10690 args = code->expr1->value.compcall.actual;
10691 lhs = args->expr;
10692 rhsptr = &args->next->expr;
10693
10694 tbp = code->expr1->value.compcall.tbp;
10695 gcc_assert (!tbp->is_generic);
10696 }
10697
10698 /* Make a temporary rhs when there is a default initializer
10699 and rhs is the same symbol as the lhs. */
10700 if ((*rhsptr)->expr_type == EXPR_VARIABLE
10701 && (*rhsptr)->symtree->n.sym->ts.type == BT_DERIVED
10702 && gfc_has_default_initializer ((*rhsptr)->symtree->n.sym->ts.u.derived)
10703 && (lhs->symtree->n.sym == (*rhsptr)->symtree->n.sym))
10704 *rhsptr = gfc_get_parentheses (*rhsptr);
10705
10706 return true;
10707 }
10708
10709 lhs = code->expr1;
10710 rhs = code->expr2;
10711
10712 /* Handle the case of a BOZ literal on the RHS. */
10713 if (rhs->ts.type == BT_BOZ)
10714 {
10715 if (gfc_invalid_boz ("BOZ literal constant at %L is neither a DATA "
10716 "statement value nor an actual argument of "
10717 "INT/REAL/DBLE/CMPLX intrinsic subprogram",
10718 &rhs->where))
10719 return false;
10720
10721 switch (lhs->ts.type)
10722 {
10723 case BT_INTEGER:
10724 if (!gfc_boz2int (rhs, lhs->ts.kind))
10725 return false;
10726 break;
10727 case BT_REAL:
10728 if (!gfc_boz2real (rhs, lhs->ts.kind))
10729 return false;
10730 break;
10731 default:
10732 gfc_error ("Invalid use of BOZ literal constant at %L", &rhs->where);
10733 return false;
10734 }
10735 }
10736
10737 if (lhs->ts.type == BT_CHARACTER && warn_character_truncation)
10738 {
10739 HOST_WIDE_INT llen = 0, rlen = 0;
10740 if (lhs->ts.u.cl != NULL
10741 && lhs->ts.u.cl->length != NULL
10742 && lhs->ts.u.cl->length->expr_type == EXPR_CONSTANT)
10743 llen = gfc_mpz_get_hwi (lhs->ts.u.cl->length->value.integer);
10744
10745 if (rhs->expr_type == EXPR_CONSTANT)
10746 rlen = rhs->value.character.length;
10747
10748 else if (rhs->ts.u.cl != NULL
10749 && rhs->ts.u.cl->length != NULL
10750 && rhs->ts.u.cl->length->expr_type == EXPR_CONSTANT)
10751 rlen = gfc_mpz_get_hwi (rhs->ts.u.cl->length->value.integer);
10752
10753 if (rlen && llen && rlen > llen)
10754 gfc_warning_now (OPT_Wcharacter_truncation,
10755 "CHARACTER expression will be truncated "
10756 "in assignment (%ld/%ld) at %L",
10757 (long) llen, (long) rlen, &code->loc);
10758 }
10759
10760 /* Ensure that a vector index expression for the lvalue is evaluated
10761 to a temporary if the lvalue symbol is referenced in it. */
10762 if (lhs->rank)
10763 {
10764 for (ref = lhs->ref; ref; ref= ref->next)
10765 if (ref->type == REF_ARRAY)
10766 {
10767 for (n = 0; n < ref->u.ar.dimen; n++)
10768 if (ref->u.ar.dimen_type[n] == DIMEN_VECTOR
10769 && gfc_find_sym_in_expr (lhs->symtree->n.sym,
10770 ref->u.ar.start[n]))
10771 ref->u.ar.start[n]
10772 = gfc_get_parentheses (ref->u.ar.start[n]);
10773 }
10774 }
10775
10776 if (gfc_pure (NULL))
10777 {
10778 if (lhs->ts.type == BT_DERIVED
10779 && lhs->expr_type == EXPR_VARIABLE
10780 && lhs->ts.u.derived->attr.pointer_comp
10781 && rhs->expr_type == EXPR_VARIABLE
10782 && (gfc_impure_variable (rhs->symtree->n.sym)
10783 || gfc_is_coindexed (rhs)))
10784 {
10785 /* F2008, C1283. */
10786 if (gfc_is_coindexed (rhs))
10787 gfc_error ("Coindexed expression at %L is assigned to "
10788 "a derived type variable with a POINTER "
10789 "component in a PURE procedure",
10790 &rhs->where);
10791 else
10792 gfc_error ("The impure variable at %L is assigned to "
10793 "a derived type variable with a POINTER "
10794 "component in a PURE procedure (12.6)",
10795 &rhs->where);
10796 return rval;
10797 }
10798
10799 /* Fortran 2008, C1283. */
10800 if (gfc_is_coindexed (lhs))
10801 {
10802 gfc_error ("Assignment to coindexed variable at %L in a PURE "
10803 "procedure", &rhs->where);
10804 return rval;
10805 }
10806 }
10807
10808 if (gfc_implicit_pure (NULL))
10809 {
10810 if (lhs->expr_type == EXPR_VARIABLE
10811 && lhs->symtree->n.sym != gfc_current_ns->proc_name
10812 && lhs->symtree->n.sym->ns != gfc_current_ns)
10813 gfc_unset_implicit_pure (NULL);
10814
10815 if (lhs->ts.type == BT_DERIVED
10816 && lhs->expr_type == EXPR_VARIABLE
10817 && lhs->ts.u.derived->attr.pointer_comp
10818 && rhs->expr_type == EXPR_VARIABLE
10819 && (gfc_impure_variable (rhs->symtree->n.sym)
10820 || gfc_is_coindexed (rhs)))
10821 gfc_unset_implicit_pure (NULL);
10822
10823 /* Fortran 2008, C1283. */
10824 if (gfc_is_coindexed (lhs))
10825 gfc_unset_implicit_pure (NULL);
10826 }
10827
10828 /* F2008, 7.2.1.2. */
10829 attr = gfc_expr_attr (lhs);
10830 if (lhs->ts.type == BT_CLASS && attr.allocatable)
10831 {
10832 if (attr.codimension)
10833 {
10834 gfc_error ("Assignment to polymorphic coarray at %L is not "
10835 "permitted", &lhs->where);
10836 return false;
10837 }
10838 if (!gfc_notify_std (GFC_STD_F2008, "Assignment to an allocatable "
10839 "polymorphic variable at %L", &lhs->where))
10840 return false;
10841 if (!flag_realloc_lhs)
10842 {
10843 gfc_error ("Assignment to an allocatable polymorphic variable at %L "
10844 "requires %<-frealloc-lhs%>", &lhs->where);
10845 return false;
10846 }
10847 }
10848 else if (lhs->ts.type == BT_CLASS)
10849 {
10850 gfc_error ("Nonallocatable variable must not be polymorphic in intrinsic "
10851 "assignment at %L - check that there is a matching specific "
10852 "subroutine for '=' operator", &lhs->where);
10853 return false;
10854 }
10855
10856 bool lhs_coindexed = gfc_is_coindexed (lhs);
10857
10858 /* F2008, Section 7.2.1.2. */
10859 if (lhs_coindexed && gfc_has_ultimate_allocatable (lhs))
10860 {
10861 gfc_error ("Coindexed variable must not have an allocatable ultimate "
10862 "component in assignment at %L", &lhs->where);
10863 return false;
10864 }
10865
10866 /* Assign the 'data' of a class object to a derived type. */
10867 if (lhs->ts.type == BT_DERIVED
10868 && rhs->ts.type == BT_CLASS
10869 && rhs->expr_type != EXPR_ARRAY)
10870 gfc_add_data_component (rhs);
10871
10872 /* Make sure there is a vtable and, in particular, a _copy for the
10873 rhs type. */
10874 if (UNLIMITED_POLY (lhs) && lhs->rank && rhs->ts.type != BT_CLASS)
10875 gfc_find_vtab (&rhs->ts);
10876
10877 bool caf_convert_to_send = flag_coarray == GFC_FCOARRAY_LIB
10878 && (lhs_coindexed
10879 || (code->expr2->expr_type == EXPR_FUNCTION
10880 && code->expr2->value.function.isym
10881 && code->expr2->value.function.isym->id == GFC_ISYM_CAF_GET
10882 && (code->expr1->rank == 0 || code->expr2->rank != 0)
10883 && !gfc_expr_attr (rhs).allocatable
10884 && !gfc_has_vector_subscript (rhs)));
10885
10886 gfc_check_assign (lhs, rhs, 1, !caf_convert_to_send);
10887
10888 /* Insert a GFC_ISYM_CAF_SEND intrinsic, when the LHS is a coindexed variable.
10889 Additionally, insert this code when the RHS is a CAF as we then use the
10890 GFC_ISYM_CAF_SEND intrinsic just to avoid a temporary; but do not do so if
10891 the LHS is (re)allocatable or has a vector subscript. If the LHS is a
10892 noncoindexed array and the RHS is a coindexed scalar, use the normal code
10893 path. */
10894 if (caf_convert_to_send)
10895 {
10896 if (code->expr2->expr_type == EXPR_FUNCTION
10897 && code->expr2->value.function.isym
10898 && code->expr2->value.function.isym->id == GFC_ISYM_CAF_GET)
10899 remove_caf_get_intrinsic (code->expr2);
10900 code->op = EXEC_CALL;
10901 gfc_get_sym_tree (GFC_PREFIX ("caf_send"), ns, &code->symtree, true);
10902 code->resolved_sym = code->symtree->n.sym;
10903 code->resolved_sym->attr.flavor = FL_PROCEDURE;
10904 code->resolved_sym->attr.intrinsic = 1;
10905 code->resolved_sym->attr.subroutine = 1;
10906 code->resolved_isym = gfc_intrinsic_subroutine_by_id (GFC_ISYM_CAF_SEND);
10907 gfc_commit_symbol (code->resolved_sym);
10908 code->ext.actual = gfc_get_actual_arglist ();
10909 code->ext.actual->expr = lhs;
10910 code->ext.actual->next = gfc_get_actual_arglist ();
10911 code->ext.actual->next->expr = rhs;
10912 code->expr1 = NULL;
10913 code->expr2 = NULL;
10914 }
10915
10916 return false;
10917 }
10918
10919
10920 /* Add a component reference onto an expression. */
10921
10922 static void
10923 add_comp_ref (gfc_expr *e, gfc_component *c)
10924 {
10925 gfc_ref **ref;
10926 ref = &(e->ref);
10927 while (*ref)
10928 ref = &((*ref)->next);
10929 *ref = gfc_get_ref ();
10930 (*ref)->type = REF_COMPONENT;
10931 (*ref)->u.c.sym = e->ts.u.derived;
10932 (*ref)->u.c.component = c;
10933 e->ts = c->ts;
10934
10935 /* Add a full array ref, as necessary. */
10936 if (c->as)
10937 {
10938 gfc_add_full_array_ref (e, c->as);
10939 e->rank = c->as->rank;
10940 }
10941 }
10942
10943
10944 /* Build an assignment. Keep the argument 'op' for future use, so that
10945 pointer assignments can be made. */
10946
10947 static gfc_code *
10948 build_assignment (gfc_exec_op op, gfc_expr *expr1, gfc_expr *expr2,
10949 gfc_component *comp1, gfc_component *comp2, locus loc)
10950 {
10951 gfc_code *this_code;
10952
10953 this_code = gfc_get_code (op);
10954 this_code->next = NULL;
10955 this_code->expr1 = gfc_copy_expr (expr1);
10956 this_code->expr2 = gfc_copy_expr (expr2);
10957 this_code->loc = loc;
10958 if (comp1 && comp2)
10959 {
10960 add_comp_ref (this_code->expr1, comp1);
10961 add_comp_ref (this_code->expr2, comp2);
10962 }
10963
10964 return this_code;
10965 }
10966
10967
10968 /* Makes a temporary variable expression based on the characteristics of
10969 a given variable expression. */
10970
10971 static gfc_expr*
10972 get_temp_from_expr (gfc_expr *e, gfc_namespace *ns)
10973 {
10974 static int serial = 0;
10975 char name[GFC_MAX_SYMBOL_LEN];
10976 gfc_symtree *tmp;
10977 gfc_array_spec *as;
10978 gfc_array_ref *aref;
10979 gfc_ref *ref;
10980
10981 sprintf (name, GFC_PREFIX("DA%d"), serial++);
10982 gfc_get_sym_tree (name, ns, &tmp, false);
10983 gfc_add_type (tmp->n.sym, &e->ts, NULL);
10984
10985 if (e->expr_type == EXPR_CONSTANT && e->ts.type == BT_CHARACTER)
10986 tmp->n.sym->ts.u.cl->length = gfc_get_int_expr (gfc_charlen_int_kind,
10987 NULL,
10988 e->value.character.length);
10989
10990 as = NULL;
10991 ref = NULL;
10992 aref = NULL;
10993
10994 /* Obtain the arrayspec for the temporary. */
10995 if (e->rank && e->expr_type != EXPR_ARRAY
10996 && e->expr_type != EXPR_FUNCTION
10997 && e->expr_type != EXPR_OP)
10998 {
10999 aref = gfc_find_array_ref (e);
11000 if (e->expr_type == EXPR_VARIABLE
11001 && e->symtree->n.sym->as == aref->as)
11002 as = aref->as;
11003 else
11004 {
11005 for (ref = e->ref; ref; ref = ref->next)
11006 if (ref->type == REF_COMPONENT
11007 && ref->u.c.component->as == aref->as)
11008 {
11009 as = aref->as;
11010 break;
11011 }
11012 }
11013 }
11014
11015 /* Add the attributes and the arrayspec to the temporary. */
11016 tmp->n.sym->attr = gfc_expr_attr (e);
11017 tmp->n.sym->attr.function = 0;
11018 tmp->n.sym->attr.result = 0;
11019 tmp->n.sym->attr.flavor = FL_VARIABLE;
11020 tmp->n.sym->attr.dummy = 0;
11021 tmp->n.sym->attr.intent = INTENT_UNKNOWN;
11022
11023 if (as)
11024 {
11025 tmp->n.sym->as = gfc_copy_array_spec (as);
11026 if (!ref)
11027 ref = e->ref;
11028 if (as->type == AS_DEFERRED)
11029 tmp->n.sym->attr.allocatable = 1;
11030 }
11031 else if (e->rank && (e->expr_type == EXPR_ARRAY
11032 || e->expr_type == EXPR_FUNCTION
11033 || e->expr_type == EXPR_OP))
11034 {
11035 tmp->n.sym->as = gfc_get_array_spec ();
11036 tmp->n.sym->as->type = AS_DEFERRED;
11037 tmp->n.sym->as->rank = e->rank;
11038 tmp->n.sym->attr.allocatable = 1;
11039 tmp->n.sym->attr.dimension = 1;
11040 }
11041 else
11042 tmp->n.sym->attr.dimension = 0;
11043
11044 gfc_set_sym_referenced (tmp->n.sym);
11045 gfc_commit_symbol (tmp->n.sym);
11046 e = gfc_lval_expr_from_sym (tmp->n.sym);
11047
11048 /* Should the lhs be a section, use its array ref for the
11049 temporary expression. */
11050 if (aref && aref->type != AR_FULL)
11051 {
11052 gfc_free_ref_list (e->ref);
11053 e->ref = gfc_copy_ref (ref);
11054 }
11055 return e;
11056 }
11057
11058
11059 /* Add one line of code to the code chain, making sure that 'head' and
11060 'tail' are appropriately updated. */
11061
11062 static void
11063 add_code_to_chain (gfc_code **this_code, gfc_code **head, gfc_code **tail)
11064 {
11065 gcc_assert (this_code);
11066 if (*head == NULL)
11067 *head = *tail = *this_code;
11068 else
11069 *tail = gfc_append_code (*tail, *this_code);
11070 *this_code = NULL;
11071 }
11072
11073
11074 /* Counts the potential number of part array references that would
11075 result from resolution of typebound defined assignments. */
11076
11077 static int
11078 nonscalar_typebound_assign (gfc_symbol *derived, int depth)
11079 {
11080 gfc_component *c;
11081 int c_depth = 0, t_depth;
11082
11083 for (c= derived->components; c; c = c->next)
11084 {
11085 if ((!gfc_bt_struct (c->ts.type)
11086 || c->attr.pointer
11087 || c->attr.allocatable
11088 || c->attr.proc_pointer_comp
11089 || c->attr.class_pointer
11090 || c->attr.proc_pointer)
11091 && !c->attr.defined_assign_comp)
11092 continue;
11093
11094 if (c->as && c_depth == 0)
11095 c_depth = 1;
11096
11097 if (c->ts.u.derived->attr.defined_assign_comp)
11098 t_depth = nonscalar_typebound_assign (c->ts.u.derived,
11099 c->as ? 1 : 0);
11100 else
11101 t_depth = 0;
11102
11103 c_depth = t_depth > c_depth ? t_depth : c_depth;
11104 }
11105 return depth + c_depth;
11106 }
11107
11108
11109 /* Implement 7.2.1.3 of the F08 standard:
11110 "An intrinsic assignment where the variable is of derived type is
11111 performed as if each component of the variable were assigned from the
11112 corresponding component of expr using pointer assignment (7.2.2) for
11113 each pointer component, defined assignment for each nonpointer
11114 nonallocatable component of a type that has a type-bound defined
11115 assignment consistent with the component, intrinsic assignment for
11116 each other nonpointer nonallocatable component, ..."
11117
11118 The pointer assignments are taken care of by the intrinsic
11119 assignment of the structure itself. This function recursively adds
11120 defined assignments where required. The recursion is accomplished
11121 by calling gfc_resolve_code.
11122
11123 When the lhs in a defined assignment has intent INOUT, we need a
11124 temporary for the lhs. In pseudo-code:
11125
11126 ! Only call function lhs once.
11127 if (lhs is not a constant or an variable)
11128 temp_x = expr2
11129 expr2 => temp_x
11130 ! Do the intrinsic assignment
11131 expr1 = expr2
11132 ! Now do the defined assignments
11133 do over components with typebound defined assignment [%cmp]
11134 #if one component's assignment procedure is INOUT
11135 t1 = expr1
11136 #if expr2 non-variable
11137 temp_x = expr2
11138 expr2 => temp_x
11139 # endif
11140 expr1 = expr2
11141 # for each cmp
11142 t1%cmp {defined=} expr2%cmp
11143 expr1%cmp = t1%cmp
11144 #else
11145 expr1 = expr2
11146
11147 # for each cmp
11148 expr1%cmp {defined=} expr2%cmp
11149 #endif
11150 */
11151
11152 /* The temporary assignments have to be put on top of the additional
11153 code to avoid the result being changed by the intrinsic assignment.
11154 */
11155 static int component_assignment_level = 0;
11156 static gfc_code *tmp_head = NULL, *tmp_tail = NULL;
11157
11158 static void
11159 generate_component_assignments (gfc_code **code, gfc_namespace *ns)
11160 {
11161 gfc_component *comp1, *comp2;
11162 gfc_code *this_code = NULL, *head = NULL, *tail = NULL;
11163 gfc_expr *t1;
11164 int error_count, depth;
11165
11166 gfc_get_errors (NULL, &error_count);
11167
11168 /* Filter out continuing processing after an error. */
11169 if (error_count
11170 || (*code)->expr1->ts.type != BT_DERIVED
11171 || (*code)->expr2->ts.type != BT_DERIVED)
11172 return;
11173
11174 /* TODO: Handle more than one part array reference in assignments. */
11175 depth = nonscalar_typebound_assign ((*code)->expr1->ts.u.derived,
11176 (*code)->expr1->rank ? 1 : 0);
11177 if (depth > 1)
11178 {
11179 gfc_warning (0, "TODO: type-bound defined assignment(s) at %L not "
11180 "done because multiple part array references would "
11181 "occur in intermediate expressions.", &(*code)->loc);
11182 return;
11183 }
11184
11185 component_assignment_level++;
11186
11187 /* Create a temporary so that functions get called only once. */
11188 if ((*code)->expr2->expr_type != EXPR_VARIABLE
11189 && (*code)->expr2->expr_type != EXPR_CONSTANT)
11190 {
11191 gfc_expr *tmp_expr;
11192
11193 /* Assign the rhs to the temporary. */
11194 tmp_expr = get_temp_from_expr ((*code)->expr1, ns);
11195 this_code = build_assignment (EXEC_ASSIGN,
11196 tmp_expr, (*code)->expr2,
11197 NULL, NULL, (*code)->loc);
11198 /* Add the code and substitute the rhs expression. */
11199 add_code_to_chain (&this_code, &tmp_head, &tmp_tail);
11200 gfc_free_expr ((*code)->expr2);
11201 (*code)->expr2 = tmp_expr;
11202 }
11203
11204 /* Do the intrinsic assignment. This is not needed if the lhs is one
11205 of the temporaries generated here, since the intrinsic assignment
11206 to the final result already does this. */
11207 if ((*code)->expr1->symtree->n.sym->name[2] != '@')
11208 {
11209 this_code = build_assignment (EXEC_ASSIGN,
11210 (*code)->expr1, (*code)->expr2,
11211 NULL, NULL, (*code)->loc);
11212 add_code_to_chain (&this_code, &head, &tail);
11213 }
11214
11215 comp1 = (*code)->expr1->ts.u.derived->components;
11216 comp2 = (*code)->expr2->ts.u.derived->components;
11217
11218 t1 = NULL;
11219 for (; comp1; comp1 = comp1->next, comp2 = comp2->next)
11220 {
11221 bool inout = false;
11222
11223 /* The intrinsic assignment does the right thing for pointers
11224 of all kinds and allocatable components. */
11225 if (!gfc_bt_struct (comp1->ts.type)
11226 || comp1->attr.pointer
11227 || comp1->attr.allocatable
11228 || comp1->attr.proc_pointer_comp
11229 || comp1->attr.class_pointer
11230 || comp1->attr.proc_pointer)
11231 continue;
11232
11233 /* Make an assigment for this component. */
11234 this_code = build_assignment (EXEC_ASSIGN,
11235 (*code)->expr1, (*code)->expr2,
11236 comp1, comp2, (*code)->loc);
11237
11238 /* Convert the assignment if there is a defined assignment for
11239 this type. Otherwise, using the call from gfc_resolve_code,
11240 recurse into its components. */
11241 gfc_resolve_code (this_code, ns);
11242
11243 if (this_code->op == EXEC_ASSIGN_CALL)
11244 {
11245 gfc_formal_arglist *dummy_args;
11246 gfc_symbol *rsym;
11247 /* Check that there is a typebound defined assignment. If not,
11248 then this must be a module defined assignment. We cannot
11249 use the defined_assign_comp attribute here because it must
11250 be this derived type that has the defined assignment and not
11251 a parent type. */
11252 if (!(comp1->ts.u.derived->f2k_derived
11253 && comp1->ts.u.derived->f2k_derived
11254 ->tb_op[INTRINSIC_ASSIGN]))
11255 {
11256 gfc_free_statements (this_code);
11257 this_code = NULL;
11258 continue;
11259 }
11260
11261 /* If the first argument of the subroutine has intent INOUT
11262 a temporary must be generated and used instead. */
11263 rsym = this_code->resolved_sym;
11264 dummy_args = gfc_sym_get_dummy_args (rsym);
11265 if (dummy_args
11266 && dummy_args->sym->attr.intent == INTENT_INOUT)
11267 {
11268 gfc_code *temp_code;
11269 inout = true;
11270
11271 /* Build the temporary required for the assignment and put
11272 it at the head of the generated code. */
11273 if (!t1)
11274 {
11275 t1 = get_temp_from_expr ((*code)->expr1, ns);
11276 temp_code = build_assignment (EXEC_ASSIGN,
11277 t1, (*code)->expr1,
11278 NULL, NULL, (*code)->loc);
11279
11280 /* For allocatable LHS, check whether it is allocated. Note
11281 that allocatable components with defined assignment are
11282 not yet support. See PR 57696. */
11283 if ((*code)->expr1->symtree->n.sym->attr.allocatable)
11284 {
11285 gfc_code *block;
11286 gfc_expr *e =
11287 gfc_lval_expr_from_sym ((*code)->expr1->symtree->n.sym);
11288 block = gfc_get_code (EXEC_IF);
11289 block->block = gfc_get_code (EXEC_IF);
11290 block->block->expr1
11291 = gfc_build_intrinsic_call (ns,
11292 GFC_ISYM_ALLOCATED, "allocated",
11293 (*code)->loc, 1, e);
11294 block->block->next = temp_code;
11295 temp_code = block;
11296 }
11297 add_code_to_chain (&temp_code, &tmp_head, &tmp_tail);
11298 }
11299
11300 /* Replace the first actual arg with the component of the
11301 temporary. */
11302 gfc_free_expr (this_code->ext.actual->expr);
11303 this_code->ext.actual->expr = gfc_copy_expr (t1);
11304 add_comp_ref (this_code->ext.actual->expr, comp1);
11305
11306 /* If the LHS variable is allocatable and wasn't allocated and
11307 the temporary is allocatable, pointer assign the address of
11308 the freshly allocated LHS to the temporary. */
11309 if ((*code)->expr1->symtree->n.sym->attr.allocatable
11310 && gfc_expr_attr ((*code)->expr1).allocatable)
11311 {
11312 gfc_code *block;
11313 gfc_expr *cond;
11314
11315 cond = gfc_get_expr ();
11316 cond->ts.type = BT_LOGICAL;
11317 cond->ts.kind = gfc_default_logical_kind;
11318 cond->expr_type = EXPR_OP;
11319 cond->where = (*code)->loc;
11320 cond->value.op.op = INTRINSIC_NOT;
11321 cond->value.op.op1 = gfc_build_intrinsic_call (ns,
11322 GFC_ISYM_ALLOCATED, "allocated",
11323 (*code)->loc, 1, gfc_copy_expr (t1));
11324 block = gfc_get_code (EXEC_IF);
11325 block->block = gfc_get_code (EXEC_IF);
11326 block->block->expr1 = cond;
11327 block->block->next = build_assignment (EXEC_POINTER_ASSIGN,
11328 t1, (*code)->expr1,
11329 NULL, NULL, (*code)->loc);
11330 add_code_to_chain (&block, &head, &tail);
11331 }
11332 }
11333 }
11334 else if (this_code->op == EXEC_ASSIGN && !this_code->next)
11335 {
11336 /* Don't add intrinsic assignments since they are already
11337 effected by the intrinsic assignment of the structure. */
11338 gfc_free_statements (this_code);
11339 this_code = NULL;
11340 continue;
11341 }
11342
11343 add_code_to_chain (&this_code, &head, &tail);
11344
11345 if (t1 && inout)
11346 {
11347 /* Transfer the value to the final result. */
11348 this_code = build_assignment (EXEC_ASSIGN,
11349 (*code)->expr1, t1,
11350 comp1, comp2, (*code)->loc);
11351 add_code_to_chain (&this_code, &head, &tail);
11352 }
11353 }
11354
11355 /* Put the temporary assignments at the top of the generated code. */
11356 if (tmp_head && component_assignment_level == 1)
11357 {
11358 gfc_append_code (tmp_head, head);
11359 head = tmp_head;
11360 tmp_head = tmp_tail = NULL;
11361 }
11362
11363 // If we did a pointer assignment - thus, we need to ensure that the LHS is
11364 // not accidentally deallocated. Hence, nullify t1.
11365 if (t1 && (*code)->expr1->symtree->n.sym->attr.allocatable
11366 && gfc_expr_attr ((*code)->expr1).allocatable)
11367 {
11368 gfc_code *block;
11369 gfc_expr *cond;
11370 gfc_expr *e;
11371
11372 e = gfc_lval_expr_from_sym ((*code)->expr1->symtree->n.sym);
11373 cond = gfc_build_intrinsic_call (ns, GFC_ISYM_ASSOCIATED, "associated",
11374 (*code)->loc, 2, gfc_copy_expr (t1), e);
11375 block = gfc_get_code (EXEC_IF);
11376 block->block = gfc_get_code (EXEC_IF);
11377 block->block->expr1 = cond;
11378 block->block->next = build_assignment (EXEC_POINTER_ASSIGN,
11379 t1, gfc_get_null_expr (&(*code)->loc),
11380 NULL, NULL, (*code)->loc);
11381 gfc_append_code (tail, block);
11382 tail = block;
11383 }
11384
11385 /* Now attach the remaining code chain to the input code. Step on
11386 to the end of the new code since resolution is complete. */
11387 gcc_assert ((*code)->op == EXEC_ASSIGN);
11388 tail->next = (*code)->next;
11389 /* Overwrite 'code' because this would place the intrinsic assignment
11390 before the temporary for the lhs is created. */
11391 gfc_free_expr ((*code)->expr1);
11392 gfc_free_expr ((*code)->expr2);
11393 **code = *head;
11394 if (head != tail)
11395 free (head);
11396 *code = tail;
11397
11398 component_assignment_level--;
11399 }
11400
11401
11402 /* F2008: Pointer function assignments are of the form:
11403 ptr_fcn (args) = expr
11404 This function breaks these assignments into two statements:
11405 temporary_pointer => ptr_fcn(args)
11406 temporary_pointer = expr */
11407
11408 static bool
11409 resolve_ptr_fcn_assign (gfc_code **code, gfc_namespace *ns)
11410 {
11411 gfc_expr *tmp_ptr_expr;
11412 gfc_code *this_code;
11413 gfc_component *comp;
11414 gfc_symbol *s;
11415
11416 if ((*code)->expr1->expr_type != EXPR_FUNCTION)
11417 return false;
11418
11419 /* Even if standard does not support this feature, continue to build
11420 the two statements to avoid upsetting frontend_passes.c. */
11421 gfc_notify_std (GFC_STD_F2008, "Pointer procedure assignment at "
11422 "%L", &(*code)->loc);
11423
11424 comp = gfc_get_proc_ptr_comp ((*code)->expr1);
11425
11426 if (comp)
11427 s = comp->ts.interface;
11428 else
11429 s = (*code)->expr1->symtree->n.sym;
11430
11431 if (s == NULL || !s->result->attr.pointer)
11432 {
11433 gfc_error ("The function result on the lhs of the assignment at "
11434 "%L must have the pointer attribute.",
11435 &(*code)->expr1->where);
11436 (*code)->op = EXEC_NOP;
11437 return false;
11438 }
11439
11440 tmp_ptr_expr = get_temp_from_expr ((*code)->expr2, ns);
11441
11442 /* get_temp_from_expression is set up for ordinary assignments. To that
11443 end, where array bounds are not known, arrays are made allocatable.
11444 Change the temporary to a pointer here. */
11445 tmp_ptr_expr->symtree->n.sym->attr.pointer = 1;
11446 tmp_ptr_expr->symtree->n.sym->attr.allocatable = 0;
11447 tmp_ptr_expr->where = (*code)->loc;
11448
11449 this_code = build_assignment (EXEC_ASSIGN,
11450 tmp_ptr_expr, (*code)->expr2,
11451 NULL, NULL, (*code)->loc);
11452 this_code->next = (*code)->next;
11453 (*code)->next = this_code;
11454 (*code)->op = EXEC_POINTER_ASSIGN;
11455 (*code)->expr2 = (*code)->expr1;
11456 (*code)->expr1 = tmp_ptr_expr;
11457
11458 return true;
11459 }
11460
11461
11462 /* Deferred character length assignments from an operator expression
11463 require a temporary because the character length of the lhs can
11464 change in the course of the assignment. */
11465
11466 static bool
11467 deferred_op_assign (gfc_code **code, gfc_namespace *ns)
11468 {
11469 gfc_expr *tmp_expr;
11470 gfc_code *this_code;
11471
11472 if (!((*code)->expr1->ts.type == BT_CHARACTER
11473 && (*code)->expr1->ts.deferred && (*code)->expr1->rank
11474 && (*code)->expr2->expr_type == EXPR_OP))
11475 return false;
11476
11477 if (!gfc_check_dependency ((*code)->expr1, (*code)->expr2, 1))
11478 return false;
11479
11480 if (gfc_expr_attr ((*code)->expr1).pointer)
11481 return false;
11482
11483 tmp_expr = get_temp_from_expr ((*code)->expr1, ns);
11484 tmp_expr->where = (*code)->loc;
11485
11486 /* A new charlen is required to ensure that the variable string
11487 length is different to that of the original lhs. */
11488 tmp_expr->ts.u.cl = gfc_get_charlen();
11489 tmp_expr->symtree->n.sym->ts.u.cl = tmp_expr->ts.u.cl;
11490 tmp_expr->ts.u.cl->next = (*code)->expr2->ts.u.cl->next;
11491 (*code)->expr2->ts.u.cl->next = tmp_expr->ts.u.cl;
11492
11493 tmp_expr->symtree->n.sym->ts.deferred = 1;
11494
11495 this_code = build_assignment (EXEC_ASSIGN,
11496 (*code)->expr1,
11497 gfc_copy_expr (tmp_expr),
11498 NULL, NULL, (*code)->loc);
11499
11500 (*code)->expr1 = tmp_expr;
11501
11502 this_code->next = (*code)->next;
11503 (*code)->next = this_code;
11504
11505 return true;
11506 }
11507
11508
11509 /* Given a block of code, recursively resolve everything pointed to by this
11510 code block. */
11511
11512 void
11513 gfc_resolve_code (gfc_code *code, gfc_namespace *ns)
11514 {
11515 int omp_workshare_save;
11516 int forall_save, do_concurrent_save;
11517 code_stack frame;
11518 bool t;
11519
11520 frame.prev = cs_base;
11521 frame.head = code;
11522 cs_base = &frame;
11523
11524 find_reachable_labels (code);
11525
11526 for (; code; code = code->next)
11527 {
11528 frame.current = code;
11529 forall_save = forall_flag;
11530 do_concurrent_save = gfc_do_concurrent_flag;
11531
11532 if (code->op == EXEC_FORALL)
11533 {
11534 forall_flag = 1;
11535 gfc_resolve_forall (code, ns, forall_save);
11536 forall_flag = 2;
11537 }
11538 else if (code->block)
11539 {
11540 omp_workshare_save = -1;
11541 switch (code->op)
11542 {
11543 case EXEC_OACC_PARALLEL_LOOP:
11544 case EXEC_OACC_PARALLEL:
11545 case EXEC_OACC_KERNELS_LOOP:
11546 case EXEC_OACC_KERNELS:
11547 case EXEC_OACC_DATA:
11548 case EXEC_OACC_HOST_DATA:
11549 case EXEC_OACC_LOOP:
11550 gfc_resolve_oacc_blocks (code, ns);
11551 break;
11552 case EXEC_OMP_PARALLEL_WORKSHARE:
11553 omp_workshare_save = omp_workshare_flag;
11554 omp_workshare_flag = 1;
11555 gfc_resolve_omp_parallel_blocks (code, ns);
11556 break;
11557 case EXEC_OMP_PARALLEL:
11558 case EXEC_OMP_PARALLEL_DO:
11559 case EXEC_OMP_PARALLEL_DO_SIMD:
11560 case EXEC_OMP_PARALLEL_SECTIONS:
11561 case EXEC_OMP_TARGET_PARALLEL:
11562 case EXEC_OMP_TARGET_PARALLEL_DO:
11563 case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
11564 case EXEC_OMP_TARGET_TEAMS:
11565 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
11566 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
11567 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
11568 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
11569 case EXEC_OMP_TASK:
11570 case EXEC_OMP_TASKLOOP:
11571 case EXEC_OMP_TASKLOOP_SIMD:
11572 case EXEC_OMP_TEAMS:
11573 case EXEC_OMP_TEAMS_DISTRIBUTE:
11574 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
11575 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
11576 case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
11577 omp_workshare_save = omp_workshare_flag;
11578 omp_workshare_flag = 0;
11579 gfc_resolve_omp_parallel_blocks (code, ns);
11580 break;
11581 case EXEC_OMP_DISTRIBUTE:
11582 case EXEC_OMP_DISTRIBUTE_SIMD:
11583 case EXEC_OMP_DO:
11584 case EXEC_OMP_DO_SIMD:
11585 case EXEC_OMP_SIMD:
11586 case EXEC_OMP_TARGET_SIMD:
11587 gfc_resolve_omp_do_blocks (code, ns);
11588 break;
11589 case EXEC_SELECT_TYPE:
11590 /* Blocks are handled in resolve_select_type because we have
11591 to transform the SELECT TYPE into ASSOCIATE first. */
11592 break;
11593 case EXEC_DO_CONCURRENT:
11594 gfc_do_concurrent_flag = 1;
11595 gfc_resolve_blocks (code->block, ns);
11596 gfc_do_concurrent_flag = 2;
11597 break;
11598 case EXEC_OMP_WORKSHARE:
11599 omp_workshare_save = omp_workshare_flag;
11600 omp_workshare_flag = 1;
11601 /* FALL THROUGH */
11602 default:
11603 gfc_resolve_blocks (code->block, ns);
11604 break;
11605 }
11606
11607 if (omp_workshare_save != -1)
11608 omp_workshare_flag = omp_workshare_save;
11609 }
11610 start:
11611 t = true;
11612 if (code->op != EXEC_COMPCALL && code->op != EXEC_CALL_PPC)
11613 t = gfc_resolve_expr (code->expr1);
11614 forall_flag = forall_save;
11615 gfc_do_concurrent_flag = do_concurrent_save;
11616
11617 if (!gfc_resolve_expr (code->expr2))
11618 t = false;
11619
11620 if (code->op == EXEC_ALLOCATE
11621 && !gfc_resolve_expr (code->expr3))
11622 t = false;
11623
11624 switch (code->op)
11625 {
11626 case EXEC_NOP:
11627 case EXEC_END_BLOCK:
11628 case EXEC_END_NESTED_BLOCK:
11629 case EXEC_CYCLE:
11630 case EXEC_PAUSE:
11631 case EXEC_STOP:
11632 case EXEC_ERROR_STOP:
11633 case EXEC_EXIT:
11634 case EXEC_CONTINUE:
11635 case EXEC_DT_END:
11636 case EXEC_ASSIGN_CALL:
11637 break;
11638
11639 case EXEC_CRITICAL:
11640 resolve_critical (code);
11641 break;
11642
11643 case EXEC_SYNC_ALL:
11644 case EXEC_SYNC_IMAGES:
11645 case EXEC_SYNC_MEMORY:
11646 resolve_sync (code);
11647 break;
11648
11649 case EXEC_LOCK:
11650 case EXEC_UNLOCK:
11651 case EXEC_EVENT_POST:
11652 case EXEC_EVENT_WAIT:
11653 resolve_lock_unlock_event (code);
11654 break;
11655
11656 case EXEC_FAIL_IMAGE:
11657 case EXEC_FORM_TEAM:
11658 case EXEC_CHANGE_TEAM:
11659 case EXEC_END_TEAM:
11660 case EXEC_SYNC_TEAM:
11661 break;
11662
11663 case EXEC_ENTRY:
11664 /* Keep track of which entry we are up to. */
11665 current_entry_id = code->ext.entry->id;
11666 break;
11667
11668 case EXEC_WHERE:
11669 resolve_where (code, NULL);
11670 break;
11671
11672 case EXEC_GOTO:
11673 if (code->expr1 != NULL)
11674 {
11675 if (code->expr1->ts.type != BT_INTEGER)
11676 gfc_error ("ASSIGNED GOTO statement at %L requires an "
11677 "INTEGER variable", &code->expr1->where);
11678 else if (code->expr1->symtree->n.sym->attr.assign != 1)
11679 gfc_error ("Variable %qs has not been assigned a target "
11680 "label at %L", code->expr1->symtree->n.sym->name,
11681 &code->expr1->where);
11682 }
11683 else
11684 resolve_branch (code->label1, code);
11685 break;
11686
11687 case EXEC_RETURN:
11688 if (code->expr1 != NULL
11689 && (code->expr1->ts.type != BT_INTEGER || code->expr1->rank))
11690 gfc_error ("Alternate RETURN statement at %L requires a SCALAR-"
11691 "INTEGER return specifier", &code->expr1->where);
11692 break;
11693
11694 case EXEC_INIT_ASSIGN:
11695 case EXEC_END_PROCEDURE:
11696 break;
11697
11698 case EXEC_ASSIGN:
11699 if (!t)
11700 break;
11701
11702 /* Remove a GFC_ISYM_CAF_GET inserted for a coindexed variable on
11703 the LHS. */
11704 if (code->expr1->expr_type == EXPR_FUNCTION
11705 && code->expr1->value.function.isym
11706 && code->expr1->value.function.isym->id == GFC_ISYM_CAF_GET)
11707 remove_caf_get_intrinsic (code->expr1);
11708
11709 /* If this is a pointer function in an lvalue variable context,
11710 the new code will have to be resolved afresh. This is also the
11711 case with an error, where the code is transformed into NOP to
11712 prevent ICEs downstream. */
11713 if (resolve_ptr_fcn_assign (&code, ns)
11714 || code->op == EXEC_NOP)
11715 goto start;
11716
11717 if (!gfc_check_vardef_context (code->expr1, false, false, false,
11718 _("assignment")))
11719 break;
11720
11721 if (resolve_ordinary_assign (code, ns))
11722 {
11723 if (code->op == EXEC_COMPCALL)
11724 goto compcall;
11725 else
11726 goto call;
11727 }
11728
11729 /* Check for dependencies in deferred character length array
11730 assignments and generate a temporary, if necessary. */
11731 if (code->op == EXEC_ASSIGN && deferred_op_assign (&code, ns))
11732 break;
11733
11734 /* F03 7.4.1.3 for non-allocatable, non-pointer components. */
11735 if (code->op != EXEC_CALL && code->expr1->ts.type == BT_DERIVED
11736 && code->expr1->ts.u.derived
11737 && code->expr1->ts.u.derived->attr.defined_assign_comp)
11738 generate_component_assignments (&code, ns);
11739
11740 break;
11741
11742 case EXEC_LABEL_ASSIGN:
11743 if (code->label1->defined == ST_LABEL_UNKNOWN)
11744 gfc_error ("Label %d referenced at %L is never defined",
11745 code->label1->value, &code->label1->where);
11746 if (t
11747 && (code->expr1->expr_type != EXPR_VARIABLE
11748 || code->expr1->symtree->n.sym->ts.type != BT_INTEGER
11749 || code->expr1->symtree->n.sym->ts.kind
11750 != gfc_default_integer_kind
11751 || code->expr1->symtree->n.sym->as != NULL))
11752 gfc_error ("ASSIGN statement at %L requires a scalar "
11753 "default INTEGER variable", &code->expr1->where);
11754 break;
11755
11756 case EXEC_POINTER_ASSIGN:
11757 {
11758 gfc_expr* e;
11759
11760 if (!t)
11761 break;
11762
11763 /* This is both a variable definition and pointer assignment
11764 context, so check both of them. For rank remapping, a final
11765 array ref may be present on the LHS and fool gfc_expr_attr
11766 used in gfc_check_vardef_context. Remove it. */
11767 e = remove_last_array_ref (code->expr1);
11768 t = gfc_check_vardef_context (e, true, false, false,
11769 _("pointer assignment"));
11770 if (t)
11771 t = gfc_check_vardef_context (e, false, false, false,
11772 _("pointer assignment"));
11773 gfc_free_expr (e);
11774
11775 t = gfc_check_pointer_assign (code->expr1, code->expr2, !t) && t;
11776
11777 if (!t)
11778 break;
11779
11780 /* Assigning a class object always is a regular assign. */
11781 if (code->expr2->ts.type == BT_CLASS
11782 && code->expr1->ts.type == BT_CLASS
11783 && !CLASS_DATA (code->expr2)->attr.dimension
11784 && !(gfc_expr_attr (code->expr1).proc_pointer
11785 && code->expr2->expr_type == EXPR_VARIABLE
11786 && code->expr2->symtree->n.sym->attr.flavor
11787 == FL_PROCEDURE))
11788 code->op = EXEC_ASSIGN;
11789 break;
11790 }
11791
11792 case EXEC_ARITHMETIC_IF:
11793 {
11794 gfc_expr *e = code->expr1;
11795
11796 gfc_resolve_expr (e);
11797 if (e->expr_type == EXPR_NULL)
11798 gfc_error ("Invalid NULL at %L", &e->where);
11799
11800 if (t && (e->rank > 0
11801 || !(e->ts.type == BT_REAL || e->ts.type == BT_INTEGER)))
11802 gfc_error ("Arithmetic IF statement at %L requires a scalar "
11803 "REAL or INTEGER expression", &e->where);
11804
11805 resolve_branch (code->label1, code);
11806 resolve_branch (code->label2, code);
11807 resolve_branch (code->label3, code);
11808 }
11809 break;
11810
11811 case EXEC_IF:
11812 if (t && code->expr1 != NULL
11813 && (code->expr1->ts.type != BT_LOGICAL
11814 || code->expr1->rank != 0))
11815 gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
11816 &code->expr1->where);
11817 break;
11818
11819 case EXEC_CALL:
11820 call:
11821 resolve_call (code);
11822 break;
11823
11824 case EXEC_COMPCALL:
11825 compcall:
11826 resolve_typebound_subroutine (code);
11827 break;
11828
11829 case EXEC_CALL_PPC:
11830 resolve_ppc_call (code);
11831 break;
11832
11833 case EXEC_SELECT:
11834 /* Select is complicated. Also, a SELECT construct could be
11835 a transformed computed GOTO. */
11836 resolve_select (code, false);
11837 break;
11838
11839 case EXEC_SELECT_TYPE:
11840 resolve_select_type (code, ns);
11841 break;
11842
11843 case EXEC_SELECT_RANK:
11844 resolve_select_rank (code, ns);
11845 break;
11846
11847 case EXEC_BLOCK:
11848 resolve_block_construct (code);
11849 break;
11850
11851 case EXEC_DO:
11852 if (code->ext.iterator != NULL)
11853 {
11854 gfc_iterator *iter = code->ext.iterator;
11855 if (gfc_resolve_iterator (iter, true, false))
11856 gfc_resolve_do_iterator (code, iter->var->symtree->n.sym,
11857 true);
11858 }
11859 break;
11860
11861 case EXEC_DO_WHILE:
11862 if (code->expr1 == NULL)
11863 gfc_internal_error ("gfc_resolve_code(): No expression on "
11864 "DO WHILE");
11865 if (t
11866 && (code->expr1->rank != 0
11867 || code->expr1->ts.type != BT_LOGICAL))
11868 gfc_error ("Exit condition of DO WHILE loop at %L must be "
11869 "a scalar LOGICAL expression", &code->expr1->where);
11870 break;
11871
11872 case EXEC_ALLOCATE:
11873 if (t)
11874 resolve_allocate_deallocate (code, "ALLOCATE");
11875
11876 break;
11877
11878 case EXEC_DEALLOCATE:
11879 if (t)
11880 resolve_allocate_deallocate (code, "DEALLOCATE");
11881
11882 break;
11883
11884 case EXEC_OPEN:
11885 if (!gfc_resolve_open (code->ext.open))
11886 break;
11887
11888 resolve_branch (code->ext.open->err, code);
11889 break;
11890
11891 case EXEC_CLOSE:
11892 if (!gfc_resolve_close (code->ext.close))
11893 break;
11894
11895 resolve_branch (code->ext.close->err, code);
11896 break;
11897
11898 case EXEC_BACKSPACE:
11899 case EXEC_ENDFILE:
11900 case EXEC_REWIND:
11901 case EXEC_FLUSH:
11902 if (!gfc_resolve_filepos (code->ext.filepos, &code->loc))
11903 break;
11904
11905 resolve_branch (code->ext.filepos->err, code);
11906 break;
11907
11908 case EXEC_INQUIRE:
11909 if (!gfc_resolve_inquire (code->ext.inquire))
11910 break;
11911
11912 resolve_branch (code->ext.inquire->err, code);
11913 break;
11914
11915 case EXEC_IOLENGTH:
11916 gcc_assert (code->ext.inquire != NULL);
11917 if (!gfc_resolve_inquire (code->ext.inquire))
11918 break;
11919
11920 resolve_branch (code->ext.inquire->err, code);
11921 break;
11922
11923 case EXEC_WAIT:
11924 if (!gfc_resolve_wait (code->ext.wait))
11925 break;
11926
11927 resolve_branch (code->ext.wait->err, code);
11928 resolve_branch (code->ext.wait->end, code);
11929 resolve_branch (code->ext.wait->eor, code);
11930 break;
11931
11932 case EXEC_READ:
11933 case EXEC_WRITE:
11934 if (!gfc_resolve_dt (code->ext.dt, &code->loc))
11935 break;
11936
11937 resolve_branch (code->ext.dt->err, code);
11938 resolve_branch (code->ext.dt->end, code);
11939 resolve_branch (code->ext.dt->eor, code);
11940 break;
11941
11942 case EXEC_TRANSFER:
11943 resolve_transfer (code);
11944 break;
11945
11946 case EXEC_DO_CONCURRENT:
11947 case EXEC_FORALL:
11948 resolve_forall_iterators (code->ext.forall_iterator);
11949
11950 if (code->expr1 != NULL
11951 && (code->expr1->ts.type != BT_LOGICAL || code->expr1->rank))
11952 gfc_error ("FORALL mask clause at %L requires a scalar LOGICAL "
11953 "expression", &code->expr1->where);
11954 break;
11955
11956 case EXEC_OACC_PARALLEL_LOOP:
11957 case EXEC_OACC_PARALLEL:
11958 case EXEC_OACC_KERNELS_LOOP:
11959 case EXEC_OACC_KERNELS:
11960 case EXEC_OACC_DATA:
11961 case EXEC_OACC_HOST_DATA:
11962 case EXEC_OACC_LOOP:
11963 case EXEC_OACC_UPDATE:
11964 case EXEC_OACC_WAIT:
11965 case EXEC_OACC_CACHE:
11966 case EXEC_OACC_ENTER_DATA:
11967 case EXEC_OACC_EXIT_DATA:
11968 case EXEC_OACC_ATOMIC:
11969 case EXEC_OACC_DECLARE:
11970 gfc_resolve_oacc_directive (code, ns);
11971 break;
11972
11973 case EXEC_OMP_ATOMIC:
11974 case EXEC_OMP_BARRIER:
11975 case EXEC_OMP_CANCEL:
11976 case EXEC_OMP_CANCELLATION_POINT:
11977 case EXEC_OMP_CRITICAL:
11978 case EXEC_OMP_FLUSH:
11979 case EXEC_OMP_DISTRIBUTE:
11980 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
11981 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
11982 case EXEC_OMP_DISTRIBUTE_SIMD:
11983 case EXEC_OMP_DO:
11984 case EXEC_OMP_DO_SIMD:
11985 case EXEC_OMP_MASTER:
11986 case EXEC_OMP_ORDERED:
11987 case EXEC_OMP_SECTIONS:
11988 case EXEC_OMP_SIMD:
11989 case EXEC_OMP_SINGLE:
11990 case EXEC_OMP_TARGET:
11991 case EXEC_OMP_TARGET_DATA:
11992 case EXEC_OMP_TARGET_ENTER_DATA:
11993 case EXEC_OMP_TARGET_EXIT_DATA:
11994 case EXEC_OMP_TARGET_PARALLEL:
11995 case EXEC_OMP_TARGET_PARALLEL_DO:
11996 case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
11997 case EXEC_OMP_TARGET_SIMD:
11998 case EXEC_OMP_TARGET_TEAMS:
11999 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
12000 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
12001 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
12002 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
12003 case EXEC_OMP_TARGET_UPDATE:
12004 case EXEC_OMP_TASK:
12005 case EXEC_OMP_TASKGROUP:
12006 case EXEC_OMP_TASKLOOP:
12007 case EXEC_OMP_TASKLOOP_SIMD:
12008 case EXEC_OMP_TASKWAIT:
12009 case EXEC_OMP_TASKYIELD:
12010 case EXEC_OMP_TEAMS:
12011 case EXEC_OMP_TEAMS_DISTRIBUTE:
12012 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
12013 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
12014 case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
12015 case EXEC_OMP_WORKSHARE:
12016 gfc_resolve_omp_directive (code, ns);
12017 break;
12018
12019 case EXEC_OMP_PARALLEL:
12020 case EXEC_OMP_PARALLEL_DO:
12021 case EXEC_OMP_PARALLEL_DO_SIMD:
12022 case EXEC_OMP_PARALLEL_SECTIONS:
12023 case EXEC_OMP_PARALLEL_WORKSHARE:
12024 omp_workshare_save = omp_workshare_flag;
12025 omp_workshare_flag = 0;
12026 gfc_resolve_omp_directive (code, ns);
12027 omp_workshare_flag = omp_workshare_save;
12028 break;
12029
12030 default:
12031 gfc_internal_error ("gfc_resolve_code(): Bad statement code");
12032 }
12033 }
12034
12035 cs_base = frame.prev;
12036 }
12037
12038
12039 /* Resolve initial values and make sure they are compatible with
12040 the variable. */
12041
12042 static void
12043 resolve_values (gfc_symbol *sym)
12044 {
12045 bool t;
12046
12047 if (sym->value == NULL)
12048 return;
12049
12050 if (sym->value->expr_type == EXPR_STRUCTURE)
12051 t= resolve_structure_cons (sym->value, 1);
12052 else
12053 t = gfc_resolve_expr (sym->value);
12054
12055 if (!t)
12056 return;
12057
12058 gfc_check_assign_symbol (sym, NULL, sym->value);
12059 }
12060
12061
12062 /* Verify any BIND(C) derived types in the namespace so we can report errors
12063 for them once, rather than for each variable declared of that type. */
12064
12065 static void
12066 resolve_bind_c_derived_types (gfc_symbol *derived_sym)
12067 {
12068 if (derived_sym != NULL && derived_sym->attr.flavor == FL_DERIVED
12069 && derived_sym->attr.is_bind_c == 1)
12070 verify_bind_c_derived_type (derived_sym);
12071
12072 return;
12073 }
12074
12075
12076 /* Check the interfaces of DTIO procedures associated with derived
12077 type 'sym'. These procedures can either have typebound bindings or
12078 can appear in DTIO generic interfaces. */
12079
12080 static void
12081 gfc_verify_DTIO_procedures (gfc_symbol *sym)
12082 {
12083 if (!sym || sym->attr.flavor != FL_DERIVED)
12084 return;
12085
12086 gfc_check_dtio_interfaces (sym);
12087
12088 return;
12089 }
12090
12091 /* Verify that any binding labels used in a given namespace do not collide
12092 with the names or binding labels of any global symbols. Multiple INTERFACE
12093 for the same procedure are permitted. */
12094
12095 static void
12096 gfc_verify_binding_labels (gfc_symbol *sym)
12097 {
12098 gfc_gsymbol *gsym;
12099 const char *module;
12100
12101 if (!sym || !sym->attr.is_bind_c || sym->attr.is_iso_c
12102 || sym->attr.flavor == FL_DERIVED || !sym->binding_label)
12103 return;
12104
12105 gsym = gfc_find_case_gsymbol (gfc_gsym_root, sym->binding_label);
12106
12107 if (sym->module)
12108 module = sym->module;
12109 else if (sym->ns && sym->ns->proc_name
12110 && sym->ns->proc_name->attr.flavor == FL_MODULE)
12111 module = sym->ns->proc_name->name;
12112 else if (sym->ns && sym->ns->parent
12113 && sym->ns && sym->ns->parent->proc_name
12114 && sym->ns->parent->proc_name->attr.flavor == FL_MODULE)
12115 module = sym->ns->parent->proc_name->name;
12116 else
12117 module = NULL;
12118
12119 if (!gsym
12120 || (!gsym->defined
12121 && (gsym->type == GSYM_FUNCTION || gsym->type == GSYM_SUBROUTINE)))
12122 {
12123 if (!gsym)
12124 gsym = gfc_get_gsymbol (sym->binding_label, true);
12125 gsym->where = sym->declared_at;
12126 gsym->sym_name = sym->name;
12127 gsym->binding_label = sym->binding_label;
12128 gsym->ns = sym->ns;
12129 gsym->mod_name = module;
12130 if (sym->attr.function)
12131 gsym->type = GSYM_FUNCTION;
12132 else if (sym->attr.subroutine)
12133 gsym->type = GSYM_SUBROUTINE;
12134 /* Mark as variable/procedure as defined, unless its an INTERFACE. */
12135 gsym->defined = sym->attr.if_source != IFSRC_IFBODY;
12136 return;
12137 }
12138
12139 if (sym->attr.flavor == FL_VARIABLE && gsym->type != GSYM_UNKNOWN)
12140 {
12141 gfc_error ("Variable %qs with binding label %qs at %L uses the same global "
12142 "identifier as entity at %L", sym->name,
12143 sym->binding_label, &sym->declared_at, &gsym->where);
12144 /* Clear the binding label to prevent checking multiple times. */
12145 sym->binding_label = NULL;
12146 return;
12147 }
12148
12149 if (sym->attr.flavor == FL_VARIABLE && module
12150 && (strcmp (module, gsym->mod_name) != 0
12151 || strcmp (sym->name, gsym->sym_name) != 0))
12152 {
12153 /* This can only happen if the variable is defined in a module - if it
12154 isn't the same module, reject it. */
12155 gfc_error ("Variable %qs from module %qs with binding label %qs at %L "
12156 "uses the same global identifier as entity at %L from module %qs",
12157 sym->name, module, sym->binding_label,
12158 &sym->declared_at, &gsym->where, gsym->mod_name);
12159 sym->binding_label = NULL;
12160 return;
12161 }
12162
12163 if ((sym->attr.function || sym->attr.subroutine)
12164 && ((gsym->type != GSYM_SUBROUTINE && gsym->type != GSYM_FUNCTION)
12165 || (gsym->defined && sym->attr.if_source != IFSRC_IFBODY))
12166 && (sym != gsym->ns->proc_name && sym->attr.entry == 0)
12167 && (module != gsym->mod_name
12168 || strcmp (gsym->sym_name, sym->name) != 0
12169 || (module && strcmp (module, gsym->mod_name) != 0)))
12170 {
12171 /* Print an error if the procedure is defined multiple times; we have to
12172 exclude references to the same procedure via module association or
12173 multiple checks for the same procedure. */
12174 gfc_error ("Procedure %qs with binding label %qs at %L uses the same "
12175 "global identifier as entity at %L", sym->name,
12176 sym->binding_label, &sym->declared_at, &gsym->where);
12177 sym->binding_label = NULL;
12178 }
12179 }
12180
12181
12182 /* Resolve an index expression. */
12183
12184 static bool
12185 resolve_index_expr (gfc_expr *e)
12186 {
12187 if (!gfc_resolve_expr (e))
12188 return false;
12189
12190 if (!gfc_simplify_expr (e, 0))
12191 return false;
12192
12193 if (!gfc_specification_expr (e))
12194 return false;
12195
12196 return true;
12197 }
12198
12199
12200 /* Resolve a charlen structure. */
12201
12202 static bool
12203 resolve_charlen (gfc_charlen *cl)
12204 {
12205 int k;
12206 bool saved_specification_expr;
12207
12208 if (cl->resolved)
12209 return true;
12210
12211 cl->resolved = 1;
12212 saved_specification_expr = specification_expr;
12213 specification_expr = true;
12214
12215 if (cl->length_from_typespec)
12216 {
12217 if (!gfc_resolve_expr (cl->length))
12218 {
12219 specification_expr = saved_specification_expr;
12220 return false;
12221 }
12222
12223 if (!gfc_simplify_expr (cl->length, 0))
12224 {
12225 specification_expr = saved_specification_expr;
12226 return false;
12227 }
12228
12229 /* cl->length has been resolved. It should have an integer type. */
12230 if (cl->length->ts.type != BT_INTEGER)
12231 {
12232 gfc_error ("Scalar INTEGER expression expected at %L",
12233 &cl->length->where);
12234 return false;
12235 }
12236 }
12237 else
12238 {
12239 if (!resolve_index_expr (cl->length))
12240 {
12241 specification_expr = saved_specification_expr;
12242 return false;
12243 }
12244 }
12245
12246 /* F2008, 4.4.3.2: If the character length parameter value evaluates to
12247 a negative value, the length of character entities declared is zero. */
12248 if (cl->length && cl->length->expr_type == EXPR_CONSTANT
12249 && mpz_sgn (cl->length->value.integer) < 0)
12250 gfc_replace_expr (cl->length,
12251 gfc_get_int_expr (gfc_charlen_int_kind, NULL, 0));
12252
12253 /* Check that the character length is not too large. */
12254 k = gfc_validate_kind (BT_INTEGER, gfc_charlen_int_kind, false);
12255 if (cl->length && cl->length->expr_type == EXPR_CONSTANT
12256 && cl->length->ts.type == BT_INTEGER
12257 && mpz_cmp (cl->length->value.integer, gfc_integer_kinds[k].huge) > 0)
12258 {
12259 gfc_error ("String length at %L is too large", &cl->length->where);
12260 specification_expr = saved_specification_expr;
12261 return false;
12262 }
12263
12264 specification_expr = saved_specification_expr;
12265 return true;
12266 }
12267
12268
12269 /* Test for non-constant shape arrays. */
12270
12271 static bool
12272 is_non_constant_shape_array (gfc_symbol *sym)
12273 {
12274 gfc_expr *e;
12275 int i;
12276 bool not_constant;
12277
12278 not_constant = false;
12279 if (sym->as != NULL)
12280 {
12281 /* Unfortunately, !gfc_is_compile_time_shape hits a legal case that
12282 has not been simplified; parameter array references. Do the
12283 simplification now. */
12284 for (i = 0; i < sym->as->rank + sym->as->corank; i++)
12285 {
12286 e = sym->as->lower[i];
12287 if (e && (!resolve_index_expr(e)
12288 || !gfc_is_constant_expr (e)))
12289 not_constant = true;
12290 e = sym->as->upper[i];
12291 if (e && (!resolve_index_expr(e)
12292 || !gfc_is_constant_expr (e)))
12293 not_constant = true;
12294 }
12295 }
12296 return not_constant;
12297 }
12298
12299 /* Given a symbol and an initialization expression, add code to initialize
12300 the symbol to the function entry. */
12301 static void
12302 build_init_assign (gfc_symbol *sym, gfc_expr *init)
12303 {
12304 gfc_expr *lval;
12305 gfc_code *init_st;
12306 gfc_namespace *ns = sym->ns;
12307
12308 /* Search for the function namespace if this is a contained
12309 function without an explicit result. */
12310 if (sym->attr.function && sym == sym->result
12311 && sym->name != sym->ns->proc_name->name)
12312 {
12313 ns = ns->contained;
12314 for (;ns; ns = ns->sibling)
12315 if (strcmp (ns->proc_name->name, sym->name) == 0)
12316 break;
12317 }
12318
12319 if (ns == NULL)
12320 {
12321 gfc_free_expr (init);
12322 return;
12323 }
12324
12325 /* Build an l-value expression for the result. */
12326 lval = gfc_lval_expr_from_sym (sym);
12327
12328 /* Add the code at scope entry. */
12329 init_st = gfc_get_code (EXEC_INIT_ASSIGN);
12330 init_st->next = ns->code;
12331 ns->code = init_st;
12332
12333 /* Assign the default initializer to the l-value. */
12334 init_st->loc = sym->declared_at;
12335 init_st->expr1 = lval;
12336 init_st->expr2 = init;
12337 }
12338
12339
12340 /* Whether or not we can generate a default initializer for a symbol. */
12341
12342 static bool
12343 can_generate_init (gfc_symbol *sym)
12344 {
12345 symbol_attribute *a;
12346 if (!sym)
12347 return false;
12348 a = &sym->attr;
12349
12350 /* These symbols should never have a default initialization. */
12351 return !(
12352 a->allocatable
12353 || a->external
12354 || a->pointer
12355 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
12356 && (CLASS_DATA (sym)->attr.class_pointer
12357 || CLASS_DATA (sym)->attr.proc_pointer))
12358 || a->in_equivalence
12359 || a->in_common
12360 || a->data
12361 || sym->module
12362 || a->cray_pointee
12363 || a->cray_pointer
12364 || sym->assoc
12365 || (!a->referenced && !a->result)
12366 || (a->dummy && a->intent != INTENT_OUT)
12367 || (a->function && sym != sym->result)
12368 );
12369 }
12370
12371
12372 /* Assign the default initializer to a derived type variable or result. */
12373
12374 static void
12375 apply_default_init (gfc_symbol *sym)
12376 {
12377 gfc_expr *init = NULL;
12378
12379 if (sym->attr.flavor != FL_VARIABLE && !sym->attr.function)
12380 return;
12381
12382 if (sym->ts.type == BT_DERIVED && sym->ts.u.derived)
12383 init = gfc_generate_initializer (&sym->ts, can_generate_init (sym));
12384
12385 if (init == NULL && sym->ts.type != BT_CLASS)
12386 return;
12387
12388 build_init_assign (sym, init);
12389 sym->attr.referenced = 1;
12390 }
12391
12392
12393 /* Build an initializer for a local. Returns null if the symbol should not have
12394 a default initialization. */
12395
12396 static gfc_expr *
12397 build_default_init_expr (gfc_symbol *sym)
12398 {
12399 /* These symbols should never have a default initialization. */
12400 if (sym->attr.allocatable
12401 || sym->attr.external
12402 || sym->attr.dummy
12403 || sym->attr.pointer
12404 || sym->attr.in_equivalence
12405 || sym->attr.in_common
12406 || sym->attr.data
12407 || sym->module
12408 || sym->attr.cray_pointee
12409 || sym->attr.cray_pointer
12410 || sym->assoc)
12411 return NULL;
12412
12413 /* Get the appropriate init expression. */
12414 return gfc_build_default_init_expr (&sym->ts, &sym->declared_at);
12415 }
12416
12417 /* Add an initialization expression to a local variable. */
12418 static void
12419 apply_default_init_local (gfc_symbol *sym)
12420 {
12421 gfc_expr *init = NULL;
12422
12423 /* The symbol should be a variable or a function return value. */
12424 if ((sym->attr.flavor != FL_VARIABLE && !sym->attr.function)
12425 || (sym->attr.function && sym->result != sym))
12426 return;
12427
12428 /* Try to build the initializer expression. If we can't initialize
12429 this symbol, then init will be NULL. */
12430 init = build_default_init_expr (sym);
12431 if (init == NULL)
12432 return;
12433
12434 /* For saved variables, we don't want to add an initializer at function
12435 entry, so we just add a static initializer. Note that automatic variables
12436 are stack allocated even with -fno-automatic; we have also to exclude
12437 result variable, which are also nonstatic. */
12438 if (!sym->attr.automatic
12439 && (sym->attr.save || sym->ns->save_all
12440 || (flag_max_stack_var_size == 0 && !sym->attr.result
12441 && (sym->ns->proc_name && !sym->ns->proc_name->attr.recursive)
12442 && (!sym->attr.dimension || !is_non_constant_shape_array (sym)))))
12443 {
12444 /* Don't clobber an existing initializer! */
12445 gcc_assert (sym->value == NULL);
12446 sym->value = init;
12447 return;
12448 }
12449
12450 build_init_assign (sym, init);
12451 }
12452
12453
12454 /* Resolution of common features of flavors variable and procedure. */
12455
12456 static bool
12457 resolve_fl_var_and_proc (gfc_symbol *sym, int mp_flag)
12458 {
12459 gfc_array_spec *as;
12460
12461 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
12462 as = CLASS_DATA (sym)->as;
12463 else
12464 as = sym->as;
12465
12466 /* Constraints on deferred shape variable. */
12467 if (as == NULL || as->type != AS_DEFERRED)
12468 {
12469 bool pointer, allocatable, dimension;
12470
12471 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
12472 {
12473 pointer = CLASS_DATA (sym)->attr.class_pointer;
12474 allocatable = CLASS_DATA (sym)->attr.allocatable;
12475 dimension = CLASS_DATA (sym)->attr.dimension;
12476 }
12477 else
12478 {
12479 pointer = sym->attr.pointer && !sym->attr.select_type_temporary;
12480 allocatable = sym->attr.allocatable;
12481 dimension = sym->attr.dimension;
12482 }
12483
12484 if (allocatable)
12485 {
12486 if (dimension && as->type != AS_ASSUMED_RANK)
12487 {
12488 gfc_error ("Allocatable array %qs at %L must have a deferred "
12489 "shape or assumed rank", sym->name, &sym->declared_at);
12490 return false;
12491 }
12492 else if (!gfc_notify_std (GFC_STD_F2003, "Scalar object "
12493 "%qs at %L may not be ALLOCATABLE",
12494 sym->name, &sym->declared_at))
12495 return false;
12496 }
12497
12498 if (pointer && dimension && as->type != AS_ASSUMED_RANK)
12499 {
12500 gfc_error ("Array pointer %qs at %L must have a deferred shape or "
12501 "assumed rank", sym->name, &sym->declared_at);
12502 return false;
12503 }
12504 }
12505 else
12506 {
12507 if (!mp_flag && !sym->attr.allocatable && !sym->attr.pointer
12508 && sym->ts.type != BT_CLASS && !sym->assoc)
12509 {
12510 gfc_error ("Array %qs at %L cannot have a deferred shape",
12511 sym->name, &sym->declared_at);
12512 return false;
12513 }
12514 }
12515
12516 /* Constraints on polymorphic variables. */
12517 if (sym->ts.type == BT_CLASS && !(sym->result && sym->result != sym))
12518 {
12519 /* F03:C502. */
12520 if (sym->attr.class_ok
12521 && !sym->attr.select_type_temporary
12522 && !UNLIMITED_POLY (sym)
12523 && !gfc_type_is_extensible (CLASS_DATA (sym)->ts.u.derived))
12524 {
12525 gfc_error ("Type %qs of CLASS variable %qs at %L is not extensible",
12526 CLASS_DATA (sym)->ts.u.derived->name, sym->name,
12527 &sym->declared_at);
12528 return false;
12529 }
12530
12531 /* F03:C509. */
12532 /* Assume that use associated symbols were checked in the module ns.
12533 Class-variables that are associate-names are also something special
12534 and excepted from the test. */
12535 if (!sym->attr.class_ok && !sym->attr.use_assoc && !sym->assoc)
12536 {
12537 gfc_error ("CLASS variable %qs at %L must be dummy, allocatable "
12538 "or pointer", sym->name, &sym->declared_at);
12539 return false;
12540 }
12541 }
12542
12543 return true;
12544 }
12545
12546
12547 /* Additional checks for symbols with flavor variable and derived
12548 type. To be called from resolve_fl_variable. */
12549
12550 static bool
12551 resolve_fl_variable_derived (gfc_symbol *sym, int no_init_flag)
12552 {
12553 gcc_assert (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS);
12554
12555 /* Check to see if a derived type is blocked from being host
12556 associated by the presence of another class I symbol in the same
12557 namespace. 14.6.1.3 of the standard and the discussion on
12558 comp.lang.fortran. */
12559 if (sym->ns != sym->ts.u.derived->ns
12560 && !sym->ts.u.derived->attr.use_assoc
12561 && sym->ns->proc_name->attr.if_source != IFSRC_IFBODY)
12562 {
12563 gfc_symbol *s;
12564 gfc_find_symbol (sym->ts.u.derived->name, sym->ns, 0, &s);
12565 if (s && s->attr.generic)
12566 s = gfc_find_dt_in_generic (s);
12567 if (s && !gfc_fl_struct (s->attr.flavor))
12568 {
12569 gfc_error ("The type %qs cannot be host associated at %L "
12570 "because it is blocked by an incompatible object "
12571 "of the same name declared at %L",
12572 sym->ts.u.derived->name, &sym->declared_at,
12573 &s->declared_at);
12574 return false;
12575 }
12576 }
12577
12578 /* 4th constraint in section 11.3: "If an object of a type for which
12579 component-initialization is specified (R429) appears in the
12580 specification-part of a module and does not have the ALLOCATABLE
12581 or POINTER attribute, the object shall have the SAVE attribute."
12582
12583 The check for initializers is performed with
12584 gfc_has_default_initializer because gfc_default_initializer generates
12585 a hidden default for allocatable components. */
12586 if (!(sym->value || no_init_flag) && sym->ns->proc_name
12587 && sym->ns->proc_name->attr.flavor == FL_MODULE
12588 && !(sym->ns->save_all && !sym->attr.automatic) && !sym->attr.save
12589 && !sym->attr.pointer && !sym->attr.allocatable
12590 && gfc_has_default_initializer (sym->ts.u.derived)
12591 && !gfc_notify_std (GFC_STD_F2008, "Implied SAVE for module variable "
12592 "%qs at %L, needed due to the default "
12593 "initialization", sym->name, &sym->declared_at))
12594 return false;
12595
12596 /* Assign default initializer. */
12597 if (!(sym->value || sym->attr.pointer || sym->attr.allocatable)
12598 && (!no_init_flag || sym->attr.intent == INTENT_OUT))
12599 sym->value = gfc_generate_initializer (&sym->ts, can_generate_init (sym));
12600
12601 return true;
12602 }
12603
12604
12605 /* F2008, C402 (R401): A colon shall not be used as a type-param-value
12606 except in the declaration of an entity or component that has the POINTER
12607 or ALLOCATABLE attribute. */
12608
12609 static bool
12610 deferred_requirements (gfc_symbol *sym)
12611 {
12612 if (sym->ts.deferred
12613 && !(sym->attr.pointer
12614 || sym->attr.allocatable
12615 || sym->attr.associate_var
12616 || sym->attr.omp_udr_artificial_var))
12617 {
12618 /* If a function has a result variable, only check the variable. */
12619 if (sym->result && sym->name != sym->result->name)
12620 return true;
12621
12622 gfc_error ("Entity %qs at %L has a deferred type parameter and "
12623 "requires either the POINTER or ALLOCATABLE attribute",
12624 sym->name, &sym->declared_at);
12625 return false;
12626 }
12627 return true;
12628 }
12629
12630
12631 /* Resolve symbols with flavor variable. */
12632
12633 static bool
12634 resolve_fl_variable (gfc_symbol *sym, int mp_flag)
12635 {
12636 const char *auto_save_msg = "Automatic object %qs at %L cannot have the "
12637 "SAVE attribute";
12638
12639 if (!resolve_fl_var_and_proc (sym, mp_flag))
12640 return false;
12641
12642 /* Set this flag to check that variables are parameters of all entries.
12643 This check is effected by the call to gfc_resolve_expr through
12644 is_non_constant_shape_array. */
12645 bool saved_specification_expr = specification_expr;
12646 specification_expr = true;
12647
12648 if (sym->ns->proc_name
12649 && (sym->ns->proc_name->attr.flavor == FL_MODULE
12650 || sym->ns->proc_name->attr.is_main_program)
12651 && !sym->attr.use_assoc
12652 && !sym->attr.allocatable
12653 && !sym->attr.pointer
12654 && is_non_constant_shape_array (sym))
12655 {
12656 /* F08:C541. The shape of an array defined in a main program or module
12657 * needs to be constant. */
12658 gfc_error ("The module or main program array %qs at %L must "
12659 "have constant shape", sym->name, &sym->declared_at);
12660 specification_expr = saved_specification_expr;
12661 return false;
12662 }
12663
12664 /* Constraints on deferred type parameter. */
12665 if (!deferred_requirements (sym))
12666 return false;
12667
12668 if (sym->ts.type == BT_CHARACTER && !sym->attr.associate_var)
12669 {
12670 /* Make sure that character string variables with assumed length are
12671 dummy arguments. */
12672 gfc_expr *e = NULL;
12673
12674 if (sym->ts.u.cl)
12675 e = sym->ts.u.cl->length;
12676 else
12677 return false;
12678
12679 if (e == NULL && !sym->attr.dummy && !sym->attr.result
12680 && !sym->ts.deferred && !sym->attr.select_type_temporary
12681 && !sym->attr.omp_udr_artificial_var)
12682 {
12683 gfc_error ("Entity with assumed character length at %L must be a "
12684 "dummy argument or a PARAMETER", &sym->declared_at);
12685 specification_expr = saved_specification_expr;
12686 return false;
12687 }
12688
12689 if (e && sym->attr.save == SAVE_EXPLICIT && !gfc_is_constant_expr (e))
12690 {
12691 gfc_error (auto_save_msg, sym->name, &sym->declared_at);
12692 specification_expr = saved_specification_expr;
12693 return false;
12694 }
12695
12696 if (!gfc_is_constant_expr (e)
12697 && !(e->expr_type == EXPR_VARIABLE
12698 && e->symtree->n.sym->attr.flavor == FL_PARAMETER))
12699 {
12700 if (!sym->attr.use_assoc && sym->ns->proc_name
12701 && (sym->ns->proc_name->attr.flavor == FL_MODULE
12702 || sym->ns->proc_name->attr.is_main_program))
12703 {
12704 gfc_error ("%qs at %L must have constant character length "
12705 "in this context", sym->name, &sym->declared_at);
12706 specification_expr = saved_specification_expr;
12707 return false;
12708 }
12709 if (sym->attr.in_common)
12710 {
12711 gfc_error ("COMMON variable %qs at %L must have constant "
12712 "character length", sym->name, &sym->declared_at);
12713 specification_expr = saved_specification_expr;
12714 return false;
12715 }
12716 }
12717 }
12718
12719 if (sym->value == NULL && sym->attr.referenced)
12720 apply_default_init_local (sym); /* Try to apply a default initialization. */
12721
12722 /* Determine if the symbol may not have an initializer. */
12723 int no_init_flag = 0, automatic_flag = 0;
12724 if (sym->attr.allocatable || sym->attr.external || sym->attr.dummy
12725 || sym->attr.intrinsic || sym->attr.result)
12726 no_init_flag = 1;
12727 else if ((sym->attr.dimension || sym->attr.codimension) && !sym->attr.pointer
12728 && is_non_constant_shape_array (sym))
12729 {
12730 no_init_flag = automatic_flag = 1;
12731
12732 /* Also, they must not have the SAVE attribute.
12733 SAVE_IMPLICIT is checked below. */
12734 if (sym->as && sym->attr.codimension)
12735 {
12736 int corank = sym->as->corank;
12737 sym->as->corank = 0;
12738 no_init_flag = automatic_flag = is_non_constant_shape_array (sym);
12739 sym->as->corank = corank;
12740 }
12741 if (automatic_flag && sym->attr.save == SAVE_EXPLICIT)
12742 {
12743 gfc_error (auto_save_msg, sym->name, &sym->declared_at);
12744 specification_expr = saved_specification_expr;
12745 return false;
12746 }
12747 }
12748
12749 /* Ensure that any initializer is simplified. */
12750 if (sym->value)
12751 gfc_simplify_expr (sym->value, 1);
12752
12753 /* Reject illegal initializers. */
12754 if (!sym->mark && sym->value)
12755 {
12756 if (sym->attr.allocatable || (sym->ts.type == BT_CLASS
12757 && CLASS_DATA (sym)->attr.allocatable))
12758 gfc_error ("Allocatable %qs at %L cannot have an initializer",
12759 sym->name, &sym->declared_at);
12760 else if (sym->attr.external)
12761 gfc_error ("External %qs at %L cannot have an initializer",
12762 sym->name, &sym->declared_at);
12763 else if (sym->attr.dummy
12764 && !(sym->ts.type == BT_DERIVED && sym->attr.intent == INTENT_OUT))
12765 gfc_error ("Dummy %qs at %L cannot have an initializer",
12766 sym->name, &sym->declared_at);
12767 else if (sym->attr.intrinsic)
12768 gfc_error ("Intrinsic %qs at %L cannot have an initializer",
12769 sym->name, &sym->declared_at);
12770 else if (sym->attr.result)
12771 gfc_error ("Function result %qs at %L cannot have an initializer",
12772 sym->name, &sym->declared_at);
12773 else if (automatic_flag)
12774 gfc_error ("Automatic array %qs at %L cannot have an initializer",
12775 sym->name, &sym->declared_at);
12776 else
12777 goto no_init_error;
12778 specification_expr = saved_specification_expr;
12779 return false;
12780 }
12781
12782 no_init_error:
12783 if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS)
12784 {
12785 bool res = resolve_fl_variable_derived (sym, no_init_flag);
12786 specification_expr = saved_specification_expr;
12787 return res;
12788 }
12789
12790 specification_expr = saved_specification_expr;
12791 return true;
12792 }
12793
12794
12795 /* Compare the dummy characteristics of a module procedure interface
12796 declaration with the corresponding declaration in a submodule. */
12797 static gfc_formal_arglist *new_formal;
12798 static char errmsg[200];
12799
12800 static void
12801 compare_fsyms (gfc_symbol *sym)
12802 {
12803 gfc_symbol *fsym;
12804
12805 if (sym == NULL || new_formal == NULL)
12806 return;
12807
12808 fsym = new_formal->sym;
12809
12810 if (sym == fsym)
12811 return;
12812
12813 if (strcmp (sym->name, fsym->name) == 0)
12814 {
12815 if (!gfc_check_dummy_characteristics (fsym, sym, true, errmsg, 200))
12816 gfc_error ("%s at %L", errmsg, &fsym->declared_at);
12817 }
12818 }
12819
12820
12821 /* Resolve a procedure. */
12822
12823 static bool
12824 resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
12825 {
12826 gfc_formal_arglist *arg;
12827
12828 if (sym->attr.function
12829 && !resolve_fl_var_and_proc (sym, mp_flag))
12830 return false;
12831
12832 /* Constraints on deferred type parameter. */
12833 if (!deferred_requirements (sym))
12834 return false;
12835
12836 if (sym->ts.type == BT_CHARACTER)
12837 {
12838 gfc_charlen *cl = sym->ts.u.cl;
12839
12840 if (cl && cl->length && gfc_is_constant_expr (cl->length)
12841 && !resolve_charlen (cl))
12842 return false;
12843
12844 if ((!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
12845 && sym->attr.proc == PROC_ST_FUNCTION)
12846 {
12847 gfc_error ("Character-valued statement function %qs at %L must "
12848 "have constant length", sym->name, &sym->declared_at);
12849 return false;
12850 }
12851 }
12852
12853 /* Ensure that derived type for are not of a private type. Internal
12854 module procedures are excluded by 2.2.3.3 - i.e., they are not
12855 externally accessible and can access all the objects accessible in
12856 the host. */
12857 if (!(sym->ns->parent && sym->ns->parent->proc_name
12858 && sym->ns->parent->proc_name->attr.flavor == FL_MODULE)
12859 && gfc_check_symbol_access (sym))
12860 {
12861 gfc_interface *iface;
12862
12863 for (arg = gfc_sym_get_dummy_args (sym); arg; arg = arg->next)
12864 {
12865 if (arg->sym
12866 && arg->sym->ts.type == BT_DERIVED
12867 && !arg->sym->ts.u.derived->attr.use_assoc
12868 && !gfc_check_symbol_access (arg->sym->ts.u.derived)
12869 && !gfc_notify_std (GFC_STD_F2003, "%qs is of a PRIVATE type "
12870 "and cannot be a dummy argument"
12871 " of %qs, which is PUBLIC at %L",
12872 arg->sym->name, sym->name,
12873 &sym->declared_at))
12874 {
12875 /* Stop this message from recurring. */
12876 arg->sym->ts.u.derived->attr.access = ACCESS_PUBLIC;
12877 return false;
12878 }
12879 }
12880
12881 /* PUBLIC interfaces may expose PRIVATE procedures that take types
12882 PRIVATE to the containing module. */
12883 for (iface = sym->generic; iface; iface = iface->next)
12884 {
12885 for (arg = gfc_sym_get_dummy_args (iface->sym); arg; arg = arg->next)
12886 {
12887 if (arg->sym
12888 && arg->sym->ts.type == BT_DERIVED
12889 && !arg->sym->ts.u.derived->attr.use_assoc
12890 && !gfc_check_symbol_access (arg->sym->ts.u.derived)
12891 && !gfc_notify_std (GFC_STD_F2003, "Procedure %qs in "
12892 "PUBLIC interface %qs at %L "
12893 "takes dummy arguments of %qs which "
12894 "is PRIVATE", iface->sym->name,
12895 sym->name, &iface->sym->declared_at,
12896 gfc_typename(&arg->sym->ts)))
12897 {
12898 /* Stop this message from recurring. */
12899 arg->sym->ts.u.derived->attr.access = ACCESS_PUBLIC;
12900 return false;
12901 }
12902 }
12903 }
12904 }
12905
12906 if (sym->attr.function && sym->value && sym->attr.proc != PROC_ST_FUNCTION
12907 && !sym->attr.proc_pointer)
12908 {
12909 gfc_error ("Function %qs at %L cannot have an initializer",
12910 sym->name, &sym->declared_at);
12911
12912 /* Make sure no second error is issued for this. */
12913 sym->value->error = 1;
12914 return false;
12915 }
12916
12917 /* An external symbol may not have an initializer because it is taken to be
12918 a procedure. Exception: Procedure Pointers. */
12919 if (sym->attr.external && sym->value && !sym->attr.proc_pointer)
12920 {
12921 gfc_error ("External object %qs at %L may not have an initializer",
12922 sym->name, &sym->declared_at);
12923 return false;
12924 }
12925
12926 /* An elemental function is required to return a scalar 12.7.1 */
12927 if (sym->attr.elemental && sym->attr.function
12928 && (sym->as || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as)))
12929 {
12930 gfc_error ("ELEMENTAL function %qs at %L must have a scalar "
12931 "result", sym->name, &sym->declared_at);
12932 /* Reset so that the error only occurs once. */
12933 sym->attr.elemental = 0;
12934 return false;
12935 }
12936
12937 if (sym->attr.proc == PROC_ST_FUNCTION
12938 && (sym->attr.allocatable || sym->attr.pointer))
12939 {
12940 gfc_error ("Statement function %qs at %L may not have pointer or "
12941 "allocatable attribute", sym->name, &sym->declared_at);
12942 return false;
12943 }
12944
12945 /* 5.1.1.5 of the Standard: A function name declared with an asterisk
12946 char-len-param shall not be array-valued, pointer-valued, recursive
12947 or pure. ....snip... A character value of * may only be used in the
12948 following ways: (i) Dummy arg of procedure - dummy associates with
12949 actual length; (ii) To declare a named constant; or (iii) External
12950 function - but length must be declared in calling scoping unit. */
12951 if (sym->attr.function
12952 && sym->ts.type == BT_CHARACTER && !sym->ts.deferred
12953 && sym->ts.u.cl && sym->ts.u.cl->length == NULL)
12954 {
12955 if ((sym->as && sym->as->rank) || (sym->attr.pointer)
12956 || (sym->attr.recursive) || (sym->attr.pure))
12957 {
12958 if (sym->as && sym->as->rank)
12959 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
12960 "array-valued", sym->name, &sym->declared_at);
12961
12962 if (sym->attr.pointer)
12963 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
12964 "pointer-valued", sym->name, &sym->declared_at);
12965
12966 if (sym->attr.pure)
12967 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
12968 "pure", sym->name, &sym->declared_at);
12969
12970 if (sym->attr.recursive)
12971 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
12972 "recursive", sym->name, &sym->declared_at);
12973
12974 return false;
12975 }
12976
12977 /* Appendix B.2 of the standard. Contained functions give an
12978 error anyway. Deferred character length is an F2003 feature.
12979 Don't warn on intrinsic conversion functions, which start
12980 with two underscores. */
12981 if (!sym->attr.contained && !sym->ts.deferred
12982 && (sym->name[0] != '_' || sym->name[1] != '_'))
12983 gfc_notify_std (GFC_STD_F95_OBS,
12984 "CHARACTER(*) function %qs at %L",
12985 sym->name, &sym->declared_at);
12986 }
12987
12988 /* F2008, C1218. */
12989 if (sym->attr.elemental)
12990 {
12991 if (sym->attr.proc_pointer)
12992 {
12993 gfc_error ("Procedure pointer %qs at %L shall not be elemental",
12994 sym->name, &sym->declared_at);
12995 return false;
12996 }
12997 if (sym->attr.dummy)
12998 {
12999 gfc_error ("Dummy procedure %qs at %L shall not be elemental",
13000 sym->name, &sym->declared_at);
13001 return false;
13002 }
13003 }
13004
13005 /* F2018, C15100: "The result of an elemental function shall be scalar,
13006 and shall not have the POINTER or ALLOCATABLE attribute." The scalar
13007 pointer is tested and caught elsewhere. */
13008 if (sym->attr.elemental && sym->result
13009 && (sym->result->attr.allocatable || sym->result->attr.pointer))
13010 {
13011 gfc_error ("Function result variable %qs at %L of elemental "
13012 "function %qs shall not have an ALLOCATABLE or POINTER "
13013 "attribute", sym->result->name,
13014 &sym->result->declared_at, sym->name);
13015 return false;
13016 }
13017
13018 if (sym->attr.is_bind_c && sym->attr.is_c_interop != 1)
13019 {
13020 gfc_formal_arglist *curr_arg;
13021 int has_non_interop_arg = 0;
13022
13023 if (!verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common,
13024 sym->common_block))
13025 {
13026 /* Clear these to prevent looking at them again if there was an
13027 error. */
13028 sym->attr.is_bind_c = 0;
13029 sym->attr.is_c_interop = 0;
13030 sym->ts.is_c_interop = 0;
13031 }
13032 else
13033 {
13034 /* So far, no errors have been found. */
13035 sym->attr.is_c_interop = 1;
13036 sym->ts.is_c_interop = 1;
13037 }
13038
13039 curr_arg = gfc_sym_get_dummy_args (sym);
13040 while (curr_arg != NULL)
13041 {
13042 /* Skip implicitly typed dummy args here. */
13043 if (curr_arg->sym && curr_arg->sym->attr.implicit_type == 0)
13044 if (!gfc_verify_c_interop_param (curr_arg->sym))
13045 /* If something is found to fail, record the fact so we
13046 can mark the symbol for the procedure as not being
13047 BIND(C) to try and prevent multiple errors being
13048 reported. */
13049 has_non_interop_arg = 1;
13050
13051 curr_arg = curr_arg->next;
13052 }
13053
13054 /* See if any of the arguments were not interoperable and if so, clear
13055 the procedure symbol to prevent duplicate error messages. */
13056 if (has_non_interop_arg != 0)
13057 {
13058 sym->attr.is_c_interop = 0;
13059 sym->ts.is_c_interop = 0;
13060 sym->attr.is_bind_c = 0;
13061 }
13062 }
13063
13064 if (!sym->attr.proc_pointer)
13065 {
13066 if (sym->attr.save == SAVE_EXPLICIT)
13067 {
13068 gfc_error ("PROCEDURE attribute conflicts with SAVE attribute "
13069 "in %qs at %L", sym->name, &sym->declared_at);
13070 return false;
13071 }
13072 if (sym->attr.intent)
13073 {
13074 gfc_error ("PROCEDURE attribute conflicts with INTENT attribute "
13075 "in %qs at %L", sym->name, &sym->declared_at);
13076 return false;
13077 }
13078 if (sym->attr.subroutine && sym->attr.result)
13079 {
13080 gfc_error ("PROCEDURE attribute conflicts with RESULT attribute "
13081 "in %qs at %L", sym->name, &sym->declared_at);
13082 return false;
13083 }
13084 if (sym->attr.external && sym->attr.function && !sym->attr.module_procedure
13085 && ((sym->attr.if_source == IFSRC_DECL && !sym->attr.procedure)
13086 || sym->attr.contained))
13087 {
13088 gfc_error ("EXTERNAL attribute conflicts with FUNCTION attribute "
13089 "in %qs at %L", sym->name, &sym->declared_at);
13090 return false;
13091 }
13092 if (strcmp ("ppr@", sym->name) == 0)
13093 {
13094 gfc_error ("Procedure pointer result %qs at %L "
13095 "is missing the pointer attribute",
13096 sym->ns->proc_name->name, &sym->declared_at);
13097 return false;
13098 }
13099 }
13100
13101 /* Assume that a procedure whose body is not known has references
13102 to external arrays. */
13103 if (sym->attr.if_source != IFSRC_DECL)
13104 sym->attr.array_outer_dependency = 1;
13105
13106 /* Compare the characteristics of a module procedure with the
13107 interface declaration. Ideally this would be done with
13108 gfc_compare_interfaces but, at present, the formal interface
13109 cannot be copied to the ts.interface. */
13110 if (sym->attr.module_procedure
13111 && sym->attr.if_source == IFSRC_DECL)
13112 {
13113 gfc_symbol *iface;
13114 char name[2*GFC_MAX_SYMBOL_LEN + 1];
13115 char *module_name;
13116 char *submodule_name;
13117 strcpy (name, sym->ns->proc_name->name);
13118 module_name = strtok (name, ".");
13119 submodule_name = strtok (NULL, ".");
13120
13121 iface = sym->tlink;
13122 sym->tlink = NULL;
13123
13124 /* Make sure that the result uses the correct charlen for deferred
13125 length results. */
13126 if (iface && sym->result
13127 && iface->ts.type == BT_CHARACTER
13128 && iface->ts.deferred)
13129 sym->result->ts.u.cl = iface->ts.u.cl;
13130
13131 if (iface == NULL)
13132 goto check_formal;
13133
13134 /* Check the procedure characteristics. */
13135 if (sym->attr.elemental != iface->attr.elemental)
13136 {
13137 gfc_error ("Mismatch in ELEMENTAL attribute between MODULE "
13138 "PROCEDURE at %L and its interface in %s",
13139 &sym->declared_at, module_name);
13140 return false;
13141 }
13142
13143 if (sym->attr.pure != iface->attr.pure)
13144 {
13145 gfc_error ("Mismatch in PURE attribute between MODULE "
13146 "PROCEDURE at %L and its interface in %s",
13147 &sym->declared_at, module_name);
13148 return false;
13149 }
13150
13151 if (sym->attr.recursive != iface->attr.recursive)
13152 {
13153 gfc_error ("Mismatch in RECURSIVE attribute between MODULE "
13154 "PROCEDURE at %L and its interface in %s",
13155 &sym->declared_at, module_name);
13156 return false;
13157 }
13158
13159 /* Check the result characteristics. */
13160 if (!gfc_check_result_characteristics (sym, iface, errmsg, 200))
13161 {
13162 gfc_error ("%s between the MODULE PROCEDURE declaration "
13163 "in MODULE %qs and the declaration at %L in "
13164 "(SUB)MODULE %qs",
13165 errmsg, module_name, &sym->declared_at,
13166 submodule_name ? submodule_name : module_name);
13167 return false;
13168 }
13169
13170 check_formal:
13171 /* Check the characteristics of the formal arguments. */
13172 if (sym->formal && sym->formal_ns)
13173 {
13174 for (arg = sym->formal; arg && arg->sym; arg = arg->next)
13175 {
13176 new_formal = arg;
13177 gfc_traverse_ns (sym->formal_ns, compare_fsyms);
13178 }
13179 }
13180 }
13181 return true;
13182 }
13183
13184
13185 /* Resolve a list of finalizer procedures. That is, after they have hopefully
13186 been defined and we now know their defined arguments, check that they fulfill
13187 the requirements of the standard for procedures used as finalizers. */
13188
13189 static bool
13190 gfc_resolve_finalizers (gfc_symbol* derived, bool *finalizable)
13191 {
13192 gfc_finalizer* list;
13193 gfc_finalizer** prev_link; /* For removing wrong entries from the list. */
13194 bool result = true;
13195 bool seen_scalar = false;
13196 gfc_symbol *vtab;
13197 gfc_component *c;
13198 gfc_symbol *parent = gfc_get_derived_super_type (derived);
13199
13200 if (parent)
13201 gfc_resolve_finalizers (parent, finalizable);
13202
13203 /* Ensure that derived-type components have a their finalizers resolved. */
13204 bool has_final = derived->f2k_derived && derived->f2k_derived->finalizers;
13205 for (c = derived->components; c; c = c->next)
13206 if (c->ts.type == BT_DERIVED
13207 && !c->attr.pointer && !c->attr.proc_pointer && !c->attr.allocatable)
13208 {
13209 bool has_final2 = false;
13210 if (!gfc_resolve_finalizers (c->ts.u.derived, &has_final2))
13211 return false; /* Error. */
13212 has_final = has_final || has_final2;
13213 }
13214 /* Return early if not finalizable. */
13215 if (!has_final)
13216 {
13217 if (finalizable)
13218 *finalizable = false;
13219 return true;
13220 }
13221
13222 /* Walk over the list of finalizer-procedures, check them, and if any one
13223 does not fit in with the standard's definition, print an error and remove
13224 it from the list. */
13225 prev_link = &derived->f2k_derived->finalizers;
13226 for (list = derived->f2k_derived->finalizers; list; list = *prev_link)
13227 {
13228 gfc_formal_arglist *dummy_args;
13229 gfc_symbol* arg;
13230 gfc_finalizer* i;
13231 int my_rank;
13232
13233 /* Skip this finalizer if we already resolved it. */
13234 if (list->proc_tree)
13235 {
13236 if (list->proc_tree->n.sym->formal->sym->as == NULL
13237 || list->proc_tree->n.sym->formal->sym->as->rank == 0)
13238 seen_scalar = true;
13239 prev_link = &(list->next);
13240 continue;
13241 }
13242
13243 /* Check this exists and is a SUBROUTINE. */
13244 if (!list->proc_sym->attr.subroutine)
13245 {
13246 gfc_error ("FINAL procedure %qs at %L is not a SUBROUTINE",
13247 list->proc_sym->name, &list->where);
13248 goto error;
13249 }
13250
13251 /* We should have exactly one argument. */
13252 dummy_args = gfc_sym_get_dummy_args (list->proc_sym);
13253 if (!dummy_args || dummy_args->next)
13254 {
13255 gfc_error ("FINAL procedure at %L must have exactly one argument",
13256 &list->where);
13257 goto error;
13258 }
13259 arg = dummy_args->sym;
13260
13261 /* This argument must be of our type. */
13262 if (arg->ts.type != BT_DERIVED || arg->ts.u.derived != derived)
13263 {
13264 gfc_error ("Argument of FINAL procedure at %L must be of type %qs",
13265 &arg->declared_at, derived->name);
13266 goto error;
13267 }
13268
13269 /* It must neither be a pointer nor allocatable nor optional. */
13270 if (arg->attr.pointer)
13271 {
13272 gfc_error ("Argument of FINAL procedure at %L must not be a POINTER",
13273 &arg->declared_at);
13274 goto error;
13275 }
13276 if (arg->attr.allocatable)
13277 {
13278 gfc_error ("Argument of FINAL procedure at %L must not be"
13279 " ALLOCATABLE", &arg->declared_at);
13280 goto error;
13281 }
13282 if (arg->attr.optional)
13283 {
13284 gfc_error ("Argument of FINAL procedure at %L must not be OPTIONAL",
13285 &arg->declared_at);
13286 goto error;
13287 }
13288
13289 /* It must not be INTENT(OUT). */
13290 if (arg->attr.intent == INTENT_OUT)
13291 {
13292 gfc_error ("Argument of FINAL procedure at %L must not be"
13293 " INTENT(OUT)", &arg->declared_at);
13294 goto error;
13295 }
13296
13297 /* Warn if the procedure is non-scalar and not assumed shape. */
13298 if (warn_surprising && arg->as && arg->as->rank != 0
13299 && arg->as->type != AS_ASSUMED_SHAPE)
13300 gfc_warning (OPT_Wsurprising,
13301 "Non-scalar FINAL procedure at %L should have assumed"
13302 " shape argument", &arg->declared_at);
13303
13304 /* Check that it does not match in kind and rank with a FINAL procedure
13305 defined earlier. To really loop over the *earlier* declarations,
13306 we need to walk the tail of the list as new ones were pushed at the
13307 front. */
13308 /* TODO: Handle kind parameters once they are implemented. */
13309 my_rank = (arg->as ? arg->as->rank : 0);
13310 for (i = list->next; i; i = i->next)
13311 {
13312 gfc_formal_arglist *dummy_args;
13313
13314 /* Argument list might be empty; that is an error signalled earlier,
13315 but we nevertheless continued resolving. */
13316 dummy_args = gfc_sym_get_dummy_args (i->proc_sym);
13317 if (dummy_args)
13318 {
13319 gfc_symbol* i_arg = dummy_args->sym;
13320 const int i_rank = (i_arg->as ? i_arg->as->rank : 0);
13321 if (i_rank == my_rank)
13322 {
13323 gfc_error ("FINAL procedure %qs declared at %L has the same"
13324 " rank (%d) as %qs",
13325 list->proc_sym->name, &list->where, my_rank,
13326 i->proc_sym->name);
13327 goto error;
13328 }
13329 }
13330 }
13331
13332 /* Is this the/a scalar finalizer procedure? */
13333 if (my_rank == 0)
13334 seen_scalar = true;
13335
13336 /* Find the symtree for this procedure. */
13337 gcc_assert (!list->proc_tree);
13338 list->proc_tree = gfc_find_sym_in_symtree (list->proc_sym);
13339
13340 prev_link = &list->next;
13341 continue;
13342
13343 /* Remove wrong nodes immediately from the list so we don't risk any
13344 troubles in the future when they might fail later expectations. */
13345 error:
13346 i = list;
13347 *prev_link = list->next;
13348 gfc_free_finalizer (i);
13349 result = false;
13350 }
13351
13352 if (result == false)
13353 return false;
13354
13355 /* Warn if we haven't seen a scalar finalizer procedure (but we know there
13356 were nodes in the list, must have been for arrays. It is surely a good
13357 idea to have a scalar version there if there's something to finalize. */
13358 if (warn_surprising && derived->f2k_derived->finalizers && !seen_scalar)
13359 gfc_warning (OPT_Wsurprising,
13360 "Only array FINAL procedures declared for derived type %qs"
13361 " defined at %L, suggest also scalar one",
13362 derived->name, &derived->declared_at);
13363
13364 vtab = gfc_find_derived_vtab (derived);
13365 c = vtab->ts.u.derived->components->next->next->next->next->next;
13366 gfc_set_sym_referenced (c->initializer->symtree->n.sym);
13367
13368 if (finalizable)
13369 *finalizable = true;
13370
13371 return true;
13372 }
13373
13374
13375 /* Check if two GENERIC targets are ambiguous and emit an error is they are. */
13376
13377 static bool
13378 check_generic_tbp_ambiguity (gfc_tbp_generic* t1, gfc_tbp_generic* t2,
13379 const char* generic_name, locus where)
13380 {
13381 gfc_symbol *sym1, *sym2;
13382 const char *pass1, *pass2;
13383 gfc_formal_arglist *dummy_args;
13384
13385 gcc_assert (t1->specific && t2->specific);
13386 gcc_assert (!t1->specific->is_generic);
13387 gcc_assert (!t2->specific->is_generic);
13388 gcc_assert (t1->is_operator == t2->is_operator);
13389
13390 sym1 = t1->specific->u.specific->n.sym;
13391 sym2 = t2->specific->u.specific->n.sym;
13392
13393 if (sym1 == sym2)
13394 return true;
13395
13396 /* Both must be SUBROUTINEs or both must be FUNCTIONs. */
13397 if (sym1->attr.subroutine != sym2->attr.subroutine
13398 || sym1->attr.function != sym2->attr.function)
13399 {
13400 gfc_error ("%qs and %qs cannot be mixed FUNCTION/SUBROUTINE for"
13401 " GENERIC %qs at %L",
13402 sym1->name, sym2->name, generic_name, &where);
13403 return false;
13404 }
13405
13406 /* Determine PASS arguments. */
13407 if (t1->specific->nopass)
13408 pass1 = NULL;
13409 else if (t1->specific->pass_arg)
13410 pass1 = t1->specific->pass_arg;
13411 else
13412 {
13413 dummy_args = gfc_sym_get_dummy_args (t1->specific->u.specific->n.sym);
13414 if (dummy_args)
13415 pass1 = dummy_args->sym->name;
13416 else
13417 pass1 = NULL;
13418 }
13419 if (t2->specific->nopass)
13420 pass2 = NULL;
13421 else if (t2->specific->pass_arg)
13422 pass2 = t2->specific->pass_arg;
13423 else
13424 {
13425 dummy_args = gfc_sym_get_dummy_args (t2->specific->u.specific->n.sym);
13426 if (dummy_args)
13427 pass2 = dummy_args->sym->name;
13428 else
13429 pass2 = NULL;
13430 }
13431
13432 /* Compare the interfaces. */
13433 if (gfc_compare_interfaces (sym1, sym2, sym2->name, !t1->is_operator, 0,
13434 NULL, 0, pass1, pass2))
13435 {
13436 gfc_error ("%qs and %qs for GENERIC %qs at %L are ambiguous",
13437 sym1->name, sym2->name, generic_name, &where);
13438 return false;
13439 }
13440
13441 return true;
13442 }
13443
13444
13445 /* Worker function for resolving a generic procedure binding; this is used to
13446 resolve GENERIC as well as user and intrinsic OPERATOR typebound procedures.
13447
13448 The difference between those cases is finding possible inherited bindings
13449 that are overridden, as one has to look for them in tb_sym_root,
13450 tb_uop_root or tb_op, respectively. Thus the caller must already find
13451 the super-type and set p->overridden correctly. */
13452
13453 static bool
13454 resolve_tb_generic_targets (gfc_symbol* super_type,
13455 gfc_typebound_proc* p, const char* name)
13456 {
13457 gfc_tbp_generic* target;
13458 gfc_symtree* first_target;
13459 gfc_symtree* inherited;
13460
13461 gcc_assert (p && p->is_generic);
13462
13463 /* Try to find the specific bindings for the symtrees in our target-list. */
13464 gcc_assert (p->u.generic);
13465 for (target = p->u.generic; target; target = target->next)
13466 if (!target->specific)
13467 {
13468 gfc_typebound_proc* overridden_tbp;
13469 gfc_tbp_generic* g;
13470 const char* target_name;
13471
13472 target_name = target->specific_st->name;
13473
13474 /* Defined for this type directly. */
13475 if (target->specific_st->n.tb && !target->specific_st->n.tb->error)
13476 {
13477 target->specific = target->specific_st->n.tb;
13478 goto specific_found;
13479 }
13480
13481 /* Look for an inherited specific binding. */
13482 if (super_type)
13483 {
13484 inherited = gfc_find_typebound_proc (super_type, NULL, target_name,
13485 true, NULL);
13486
13487 if (inherited)
13488 {
13489 gcc_assert (inherited->n.tb);
13490 target->specific = inherited->n.tb;
13491 goto specific_found;
13492 }
13493 }
13494
13495 gfc_error ("Undefined specific binding %qs as target of GENERIC %qs"
13496 " at %L", target_name, name, &p->where);
13497 return false;
13498
13499 /* Once we've found the specific binding, check it is not ambiguous with
13500 other specifics already found or inherited for the same GENERIC. */
13501 specific_found:
13502 gcc_assert (target->specific);
13503
13504 /* This must really be a specific binding! */
13505 if (target->specific->is_generic)
13506 {
13507 gfc_error ("GENERIC %qs at %L must target a specific binding,"
13508 " %qs is GENERIC, too", name, &p->where, target_name);
13509 return false;
13510 }
13511
13512 /* Check those already resolved on this type directly. */
13513 for (g = p->u.generic; g; g = g->next)
13514 if (g != target && g->specific
13515 && !check_generic_tbp_ambiguity (target, g, name, p->where))
13516 return false;
13517
13518 /* Check for ambiguity with inherited specific targets. */
13519 for (overridden_tbp = p->overridden; overridden_tbp;
13520 overridden_tbp = overridden_tbp->overridden)
13521 if (overridden_tbp->is_generic)
13522 {
13523 for (g = overridden_tbp->u.generic; g; g = g->next)
13524 {
13525 gcc_assert (g->specific);
13526 if (!check_generic_tbp_ambiguity (target, g, name, p->where))
13527 return false;
13528 }
13529 }
13530 }
13531
13532 /* If we attempt to "overwrite" a specific binding, this is an error. */
13533 if (p->overridden && !p->overridden->is_generic)
13534 {
13535 gfc_error ("GENERIC %qs at %L cannot overwrite specific binding with"
13536 " the same name", name, &p->where);
13537 return false;
13538 }
13539
13540 /* Take the SUBROUTINE/FUNCTION attributes of the first specific target, as
13541 all must have the same attributes here. */
13542 first_target = p->u.generic->specific->u.specific;
13543 gcc_assert (first_target);
13544 p->subroutine = first_target->n.sym->attr.subroutine;
13545 p->function = first_target->n.sym->attr.function;
13546
13547 return true;
13548 }
13549
13550
13551 /* Resolve a GENERIC procedure binding for a derived type. */
13552
13553 static bool
13554 resolve_typebound_generic (gfc_symbol* derived, gfc_symtree* st)
13555 {
13556 gfc_symbol* super_type;
13557
13558 /* Find the overridden binding if any. */
13559 st->n.tb->overridden = NULL;
13560 super_type = gfc_get_derived_super_type (derived);
13561 if (super_type)
13562 {
13563 gfc_symtree* overridden;
13564 overridden = gfc_find_typebound_proc (super_type, NULL, st->name,
13565 true, NULL);
13566
13567 if (overridden && overridden->n.tb)
13568 st->n.tb->overridden = overridden->n.tb;
13569 }
13570
13571 /* Resolve using worker function. */
13572 return resolve_tb_generic_targets (super_type, st->n.tb, st->name);
13573 }
13574
13575
13576 /* Retrieve the target-procedure of an operator binding and do some checks in
13577 common for intrinsic and user-defined type-bound operators. */
13578
13579 static gfc_symbol*
13580 get_checked_tb_operator_target (gfc_tbp_generic* target, locus where)
13581 {
13582 gfc_symbol* target_proc;
13583
13584 gcc_assert (target->specific && !target->specific->is_generic);
13585 target_proc = target->specific->u.specific->n.sym;
13586 gcc_assert (target_proc);
13587
13588 /* F08:C468. All operator bindings must have a passed-object dummy argument. */
13589 if (target->specific->nopass)
13590 {
13591 gfc_error ("Type-bound operator at %L cannot be NOPASS", &where);
13592 return NULL;
13593 }
13594
13595 return target_proc;
13596 }
13597
13598
13599 /* Resolve a type-bound intrinsic operator. */
13600
13601 static bool
13602 resolve_typebound_intrinsic_op (gfc_symbol* derived, gfc_intrinsic_op op,
13603 gfc_typebound_proc* p)
13604 {
13605 gfc_symbol* super_type;
13606 gfc_tbp_generic* target;
13607
13608 /* If there's already an error here, do nothing (but don't fail again). */
13609 if (p->error)
13610 return true;
13611
13612 /* Operators should always be GENERIC bindings. */
13613 gcc_assert (p->is_generic);
13614
13615 /* Look for an overridden binding. */
13616 super_type = gfc_get_derived_super_type (derived);
13617 if (super_type && super_type->f2k_derived)
13618 p->overridden = gfc_find_typebound_intrinsic_op (super_type, NULL,
13619 op, true, NULL);
13620 else
13621 p->overridden = NULL;
13622
13623 /* Resolve general GENERIC properties using worker function. */
13624 if (!resolve_tb_generic_targets (super_type, p, gfc_op2string(op)))
13625 goto error;
13626
13627 /* Check the targets to be procedures of correct interface. */
13628 for (target = p->u.generic; target; target = target->next)
13629 {
13630 gfc_symbol* target_proc;
13631
13632 target_proc = get_checked_tb_operator_target (target, p->where);
13633 if (!target_proc)
13634 goto error;
13635
13636 if (!gfc_check_operator_interface (target_proc, op, p->where))
13637 goto error;
13638
13639 /* Add target to non-typebound operator list. */
13640 if (!target->specific->deferred && !derived->attr.use_assoc
13641 && p->access != ACCESS_PRIVATE && derived->ns == gfc_current_ns)
13642 {
13643 gfc_interface *head, *intr;
13644
13645 /* Preempt 'gfc_check_new_interface' for submodules, where the
13646 mechanism for handling module procedures winds up resolving
13647 operator interfaces twice and would otherwise cause an error. */
13648 for (intr = derived->ns->op[op]; intr; intr = intr->next)
13649 if (intr->sym == target_proc
13650 && target_proc->attr.used_in_submodule)
13651 return true;
13652
13653 if (!gfc_check_new_interface (derived->ns->op[op],
13654 target_proc, p->where))
13655 return false;
13656 head = derived->ns->op[op];
13657 intr = gfc_get_interface ();
13658 intr->sym = target_proc;
13659 intr->where = p->where;
13660 intr->next = head;
13661 derived->ns->op[op] = intr;
13662 }
13663 }
13664
13665 return true;
13666
13667 error:
13668 p->error = 1;
13669 return false;
13670 }
13671
13672
13673 /* Resolve a type-bound user operator (tree-walker callback). */
13674
13675 static gfc_symbol* resolve_bindings_derived;
13676 static bool resolve_bindings_result;
13677
13678 static bool check_uop_procedure (gfc_symbol* sym, locus where);
13679
13680 static void
13681 resolve_typebound_user_op (gfc_symtree* stree)
13682 {
13683 gfc_symbol* super_type;
13684 gfc_tbp_generic* target;
13685
13686 gcc_assert (stree && stree->n.tb);
13687
13688 if (stree->n.tb->error)
13689 return;
13690
13691 /* Operators should always be GENERIC bindings. */
13692 gcc_assert (stree->n.tb->is_generic);
13693
13694 /* Find overridden procedure, if any. */
13695 super_type = gfc_get_derived_super_type (resolve_bindings_derived);
13696 if (super_type && super_type->f2k_derived)
13697 {
13698 gfc_symtree* overridden;
13699 overridden = gfc_find_typebound_user_op (super_type, NULL,
13700 stree->name, true, NULL);
13701
13702 if (overridden && overridden->n.tb)
13703 stree->n.tb->overridden = overridden->n.tb;
13704 }
13705 else
13706 stree->n.tb->overridden = NULL;
13707
13708 /* Resolve basically using worker function. */
13709 if (!resolve_tb_generic_targets (super_type, stree->n.tb, stree->name))
13710 goto error;
13711
13712 /* Check the targets to be functions of correct interface. */
13713 for (target = stree->n.tb->u.generic; target; target = target->next)
13714 {
13715 gfc_symbol* target_proc;
13716
13717 target_proc = get_checked_tb_operator_target (target, stree->n.tb->where);
13718 if (!target_proc)
13719 goto error;
13720
13721 if (!check_uop_procedure (target_proc, stree->n.tb->where))
13722 goto error;
13723 }
13724
13725 return;
13726
13727 error:
13728 resolve_bindings_result = false;
13729 stree->n.tb->error = 1;
13730 }
13731
13732
13733 /* Resolve the type-bound procedures for a derived type. */
13734
13735 static void
13736 resolve_typebound_procedure (gfc_symtree* stree)
13737 {
13738 gfc_symbol* proc;
13739 locus where;
13740 gfc_symbol* me_arg;
13741 gfc_symbol* super_type;
13742 gfc_component* comp;
13743
13744 gcc_assert (stree);
13745
13746 /* Undefined specific symbol from GENERIC target definition. */
13747 if (!stree->n.tb)
13748 return;
13749
13750 if (stree->n.tb->error)
13751 return;
13752
13753 /* If this is a GENERIC binding, use that routine. */
13754 if (stree->n.tb->is_generic)
13755 {
13756 if (!resolve_typebound_generic (resolve_bindings_derived, stree))
13757 goto error;
13758 return;
13759 }
13760
13761 /* Get the target-procedure to check it. */
13762 gcc_assert (!stree->n.tb->is_generic);
13763 gcc_assert (stree->n.tb->u.specific);
13764 proc = stree->n.tb->u.specific->n.sym;
13765 where = stree->n.tb->where;
13766
13767 /* Default access should already be resolved from the parser. */
13768 gcc_assert (stree->n.tb->access != ACCESS_UNKNOWN);
13769
13770 if (stree->n.tb->deferred)
13771 {
13772 if (!check_proc_interface (proc, &where))
13773 goto error;
13774 }
13775 else
13776 {
13777 /* If proc has not been resolved at this point, proc->name may
13778 actually be a USE associated entity. See PR fortran/89647. */
13779 if (!proc->resolved
13780 && proc->attr.function == 0 && proc->attr.subroutine == 0)
13781 {
13782 gfc_symbol *tmp;
13783 gfc_find_symbol (proc->name, gfc_current_ns->parent, 1, &tmp);
13784 if (tmp && tmp->attr.use_assoc)
13785 {
13786 proc->module = tmp->module;
13787 proc->attr.proc = tmp->attr.proc;
13788 proc->attr.function = tmp->attr.function;
13789 proc->attr.subroutine = tmp->attr.subroutine;
13790 proc->attr.use_assoc = tmp->attr.use_assoc;
13791 proc->ts = tmp->ts;
13792 proc->result = tmp->result;
13793 }
13794 }
13795
13796 /* Check for F08:C465. */
13797 if ((!proc->attr.subroutine && !proc->attr.function)
13798 || (proc->attr.proc != PROC_MODULE
13799 && proc->attr.if_source != IFSRC_IFBODY)
13800 || proc->attr.abstract)
13801 {
13802 gfc_error ("%qs must be a module procedure or an external "
13803 "procedure with an explicit interface at %L",
13804 proc->name, &where);
13805 goto error;
13806 }
13807 }
13808
13809 stree->n.tb->subroutine = proc->attr.subroutine;
13810 stree->n.tb->function = proc->attr.function;
13811
13812 /* Find the super-type of the current derived type. We could do this once and
13813 store in a global if speed is needed, but as long as not I believe this is
13814 more readable and clearer. */
13815 super_type = gfc_get_derived_super_type (resolve_bindings_derived);
13816
13817 /* If PASS, resolve and check arguments if not already resolved / loaded
13818 from a .mod file. */
13819 if (!stree->n.tb->nopass && stree->n.tb->pass_arg_num == 0)
13820 {
13821 gfc_formal_arglist *dummy_args;
13822
13823 dummy_args = gfc_sym_get_dummy_args (proc);
13824 if (stree->n.tb->pass_arg)
13825 {
13826 gfc_formal_arglist *i;
13827
13828 /* If an explicit passing argument name is given, walk the arg-list
13829 and look for it. */
13830
13831 me_arg = NULL;
13832 stree->n.tb->pass_arg_num = 1;
13833 for (i = dummy_args; i; i = i->next)
13834 {
13835 if (!strcmp (i->sym->name, stree->n.tb->pass_arg))
13836 {
13837 me_arg = i->sym;
13838 break;
13839 }
13840 ++stree->n.tb->pass_arg_num;
13841 }
13842
13843 if (!me_arg)
13844 {
13845 gfc_error ("Procedure %qs with PASS(%s) at %L has no"
13846 " argument %qs",
13847 proc->name, stree->n.tb->pass_arg, &where,
13848 stree->n.tb->pass_arg);
13849 goto error;
13850 }
13851 }
13852 else
13853 {
13854 /* Otherwise, take the first one; there should in fact be at least
13855 one. */
13856 stree->n.tb->pass_arg_num = 1;
13857 if (!dummy_args)
13858 {
13859 gfc_error ("Procedure %qs with PASS at %L must have at"
13860 " least one argument", proc->name, &where);
13861 goto error;
13862 }
13863 me_arg = dummy_args->sym;
13864 }
13865
13866 /* Now check that the argument-type matches and the passed-object
13867 dummy argument is generally fine. */
13868
13869 gcc_assert (me_arg);
13870
13871 if (me_arg->ts.type != BT_CLASS)
13872 {
13873 gfc_error ("Non-polymorphic passed-object dummy argument of %qs"
13874 " at %L", proc->name, &where);
13875 goto error;
13876 }
13877
13878 if (CLASS_DATA (me_arg)->ts.u.derived
13879 != resolve_bindings_derived)
13880 {
13881 gfc_error ("Argument %qs of %qs with PASS(%s) at %L must be of"
13882 " the derived-type %qs", me_arg->name, proc->name,
13883 me_arg->name, &where, resolve_bindings_derived->name);
13884 goto error;
13885 }
13886
13887 gcc_assert (me_arg->ts.type == BT_CLASS);
13888 if (CLASS_DATA (me_arg)->as && CLASS_DATA (me_arg)->as->rank != 0)
13889 {
13890 gfc_error ("Passed-object dummy argument of %qs at %L must be"
13891 " scalar", proc->name, &where);
13892 goto error;
13893 }
13894 if (CLASS_DATA (me_arg)->attr.allocatable)
13895 {
13896 gfc_error ("Passed-object dummy argument of %qs at %L must not"
13897 " be ALLOCATABLE", proc->name, &where);
13898 goto error;
13899 }
13900 if (CLASS_DATA (me_arg)->attr.class_pointer)
13901 {
13902 gfc_error ("Passed-object dummy argument of %qs at %L must not"
13903 " be POINTER", proc->name, &where);
13904 goto error;
13905 }
13906 }
13907
13908 /* If we are extending some type, check that we don't override a procedure
13909 flagged NON_OVERRIDABLE. */
13910 stree->n.tb->overridden = NULL;
13911 if (super_type)
13912 {
13913 gfc_symtree* overridden;
13914 overridden = gfc_find_typebound_proc (super_type, NULL,
13915 stree->name, true, NULL);
13916
13917 if (overridden)
13918 {
13919 if (overridden->n.tb)
13920 stree->n.tb->overridden = overridden->n.tb;
13921
13922 if (!gfc_check_typebound_override (stree, overridden))
13923 goto error;
13924 }
13925 }
13926
13927 /* See if there's a name collision with a component directly in this type. */
13928 for (comp = resolve_bindings_derived->components; comp; comp = comp->next)
13929 if (!strcmp (comp->name, stree->name))
13930 {
13931 gfc_error ("Procedure %qs at %L has the same name as a component of"
13932 " %qs",
13933 stree->name, &where, resolve_bindings_derived->name);
13934 goto error;
13935 }
13936
13937 /* Try to find a name collision with an inherited component. */
13938 if (super_type && gfc_find_component (super_type, stree->name, true, true,
13939 NULL))
13940 {
13941 gfc_error ("Procedure %qs at %L has the same name as an inherited"
13942 " component of %qs",
13943 stree->name, &where, resolve_bindings_derived->name);
13944 goto error;
13945 }
13946
13947 stree->n.tb->error = 0;
13948 return;
13949
13950 error:
13951 resolve_bindings_result = false;
13952 stree->n.tb->error = 1;
13953 }
13954
13955
13956 static bool
13957 resolve_typebound_procedures (gfc_symbol* derived)
13958 {
13959 int op;
13960 gfc_symbol* super_type;
13961
13962 if (!derived->f2k_derived || !derived->f2k_derived->tb_sym_root)
13963 return true;
13964
13965 super_type = gfc_get_derived_super_type (derived);
13966 if (super_type)
13967 resolve_symbol (super_type);
13968
13969 resolve_bindings_derived = derived;
13970 resolve_bindings_result = true;
13971
13972 if (derived->f2k_derived->tb_sym_root)
13973 gfc_traverse_symtree (derived->f2k_derived->tb_sym_root,
13974 &resolve_typebound_procedure);
13975
13976 if (derived->f2k_derived->tb_uop_root)
13977 gfc_traverse_symtree (derived->f2k_derived->tb_uop_root,
13978 &resolve_typebound_user_op);
13979
13980 for (op = 0; op != GFC_INTRINSIC_OPS; ++op)
13981 {
13982 gfc_typebound_proc* p = derived->f2k_derived->tb_op[op];
13983 if (p && !resolve_typebound_intrinsic_op (derived,
13984 (gfc_intrinsic_op)op, p))
13985 resolve_bindings_result = false;
13986 }
13987
13988 return resolve_bindings_result;
13989 }
13990
13991
13992 /* Add a derived type to the dt_list. The dt_list is used in trans-types.c
13993 to give all identical derived types the same backend_decl. */
13994 static void
13995 add_dt_to_dt_list (gfc_symbol *derived)
13996 {
13997 if (!derived->dt_next)
13998 {
13999 if (gfc_derived_types)
14000 {
14001 derived->dt_next = gfc_derived_types->dt_next;
14002 gfc_derived_types->dt_next = derived;
14003 }
14004 else
14005 {
14006 derived->dt_next = derived;
14007 }
14008 gfc_derived_types = derived;
14009 }
14010 }
14011
14012
14013 /* Ensure that a derived-type is really not abstract, meaning that every
14014 inherited DEFERRED binding is overridden by a non-DEFERRED one. */
14015
14016 static bool
14017 ensure_not_abstract_walker (gfc_symbol* sub, gfc_symtree* st)
14018 {
14019 if (!st)
14020 return true;
14021
14022 if (!ensure_not_abstract_walker (sub, st->left))
14023 return false;
14024 if (!ensure_not_abstract_walker (sub, st->right))
14025 return false;
14026
14027 if (st->n.tb && st->n.tb->deferred)
14028 {
14029 gfc_symtree* overriding;
14030 overriding = gfc_find_typebound_proc (sub, NULL, st->name, true, NULL);
14031 if (!overriding)
14032 return false;
14033 gcc_assert (overriding->n.tb);
14034 if (overriding->n.tb->deferred)
14035 {
14036 gfc_error ("Derived-type %qs declared at %L must be ABSTRACT because"
14037 " %qs is DEFERRED and not overridden",
14038 sub->name, &sub->declared_at, st->name);
14039 return false;
14040 }
14041 }
14042
14043 return true;
14044 }
14045
14046 static bool
14047 ensure_not_abstract (gfc_symbol* sub, gfc_symbol* ancestor)
14048 {
14049 /* The algorithm used here is to recursively travel up the ancestry of sub
14050 and for each ancestor-type, check all bindings. If any of them is
14051 DEFERRED, look it up starting from sub and see if the found (overriding)
14052 binding is not DEFERRED.
14053 This is not the most efficient way to do this, but it should be ok and is
14054 clearer than something sophisticated. */
14055
14056 gcc_assert (ancestor && !sub->attr.abstract);
14057
14058 if (!ancestor->attr.abstract)
14059 return true;
14060
14061 /* Walk bindings of this ancestor. */
14062 if (ancestor->f2k_derived)
14063 {
14064 bool t;
14065 t = ensure_not_abstract_walker (sub, ancestor->f2k_derived->tb_sym_root);
14066 if (!t)
14067 return false;
14068 }
14069
14070 /* Find next ancestor type and recurse on it. */
14071 ancestor = gfc_get_derived_super_type (ancestor);
14072 if (ancestor)
14073 return ensure_not_abstract (sub, ancestor);
14074
14075 return true;
14076 }
14077
14078
14079 /* This check for typebound defined assignments is done recursively
14080 since the order in which derived types are resolved is not always in
14081 order of the declarations. */
14082
14083 static void
14084 check_defined_assignments (gfc_symbol *derived)
14085 {
14086 gfc_component *c;
14087
14088 for (c = derived->components; c; c = c->next)
14089 {
14090 if (!gfc_bt_struct (c->ts.type)
14091 || c->attr.pointer
14092 || c->attr.allocatable
14093 || c->attr.proc_pointer_comp
14094 || c->attr.class_pointer
14095 || c->attr.proc_pointer)
14096 continue;
14097
14098 if (c->ts.u.derived->attr.defined_assign_comp
14099 || (c->ts.u.derived->f2k_derived
14100 && c->ts.u.derived->f2k_derived->tb_op[INTRINSIC_ASSIGN]))
14101 {
14102 derived->attr.defined_assign_comp = 1;
14103 return;
14104 }
14105
14106 check_defined_assignments (c->ts.u.derived);
14107 if (c->ts.u.derived->attr.defined_assign_comp)
14108 {
14109 derived->attr.defined_assign_comp = 1;
14110 return;
14111 }
14112 }
14113 }
14114
14115
14116 /* Resolve a single component of a derived type or structure. */
14117
14118 static bool
14119 resolve_component (gfc_component *c, gfc_symbol *sym)
14120 {
14121 gfc_symbol *super_type;
14122 symbol_attribute *attr;
14123
14124 if (c->attr.artificial)
14125 return true;
14126
14127 /* Do not allow vtype components to be resolved in nameless namespaces
14128 such as block data because the procedure pointers will cause ICEs
14129 and vtables are not needed in these contexts. */
14130 if (sym->attr.vtype && sym->attr.use_assoc
14131 && sym->ns->proc_name == NULL)
14132 return true;
14133
14134 /* F2008, C442. */
14135 if ((!sym->attr.is_class || c != sym->components)
14136 && c->attr.codimension
14137 && (!c->attr.allocatable || (c->as && c->as->type != AS_DEFERRED)))
14138 {
14139 gfc_error ("Coarray component %qs at %L must be allocatable with "
14140 "deferred shape", c->name, &c->loc);
14141 return false;
14142 }
14143
14144 /* F2008, C443. */
14145 if (c->attr.codimension && c->ts.type == BT_DERIVED
14146 && c->ts.u.derived->ts.is_iso_c)
14147 {
14148 gfc_error ("Component %qs at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) "
14149 "shall not be a coarray", c->name, &c->loc);
14150 return false;
14151 }
14152
14153 /* F2008, C444. */
14154 if (gfc_bt_struct (c->ts.type) && c->ts.u.derived->attr.coarray_comp
14155 && (c->attr.codimension || c->attr.pointer || c->attr.dimension
14156 || c->attr.allocatable))
14157 {
14158 gfc_error ("Component %qs at %L with coarray component "
14159 "shall be a nonpointer, nonallocatable scalar",
14160 c->name, &c->loc);
14161 return false;
14162 }
14163
14164 /* F2008, C448. */
14165 if (c->ts.type == BT_CLASS)
14166 {
14167 if (CLASS_DATA (c))
14168 {
14169 attr = &(CLASS_DATA (c)->attr);
14170
14171 /* Fix up contiguous attribute. */
14172 if (c->attr.contiguous)
14173 attr->contiguous = 1;
14174 }
14175 else
14176 attr = NULL;
14177 }
14178 else
14179 attr = &c->attr;
14180
14181 if (attr && attr->contiguous && (!attr->dimension || !attr->pointer))
14182 {
14183 gfc_error ("Component %qs at %L has the CONTIGUOUS attribute but "
14184 "is not an array pointer", c->name, &c->loc);
14185 return false;
14186 }
14187
14188 /* F2003, 15.2.1 - length has to be one. */
14189 if (sym->attr.is_bind_c && c->ts.type == BT_CHARACTER
14190 && (c->ts.u.cl == NULL || c->ts.u.cl->length == NULL
14191 || !gfc_is_constant_expr (c->ts.u.cl->length)
14192 || mpz_cmp_si (c->ts.u.cl->length->value.integer, 1) != 0))
14193 {
14194 gfc_error ("Component %qs of BIND(C) type at %L must have length one",
14195 c->name, &c->loc);
14196 return false;
14197 }
14198
14199 if (c->attr.proc_pointer && c->ts.interface)
14200 {
14201 gfc_symbol *ifc = c->ts.interface;
14202
14203 if (!sym->attr.vtype && !check_proc_interface (ifc, &c->loc))
14204 {
14205 c->tb->error = 1;
14206 return false;
14207 }
14208
14209 if (ifc->attr.if_source || ifc->attr.intrinsic)
14210 {
14211 /* Resolve interface and copy attributes. */
14212 if (ifc->formal && !ifc->formal_ns)
14213 resolve_symbol (ifc);
14214 if (ifc->attr.intrinsic)
14215 gfc_resolve_intrinsic (ifc, &ifc->declared_at);
14216
14217 if (ifc->result)
14218 {
14219 c->ts = ifc->result->ts;
14220 c->attr.allocatable = ifc->result->attr.allocatable;
14221 c->attr.pointer = ifc->result->attr.pointer;
14222 c->attr.dimension = ifc->result->attr.dimension;
14223 c->as = gfc_copy_array_spec (ifc->result->as);
14224 c->attr.class_ok = ifc->result->attr.class_ok;
14225 }
14226 else
14227 {
14228 c->ts = ifc->ts;
14229 c->attr.allocatable = ifc->attr.allocatable;
14230 c->attr.pointer = ifc->attr.pointer;
14231 c->attr.dimension = ifc->attr.dimension;
14232 c->as = gfc_copy_array_spec (ifc->as);
14233 c->attr.class_ok = ifc->attr.class_ok;
14234 }
14235 c->ts.interface = ifc;
14236 c->attr.function = ifc->attr.function;
14237 c->attr.subroutine = ifc->attr.subroutine;
14238
14239 c->attr.pure = ifc->attr.pure;
14240 c->attr.elemental = ifc->attr.elemental;
14241 c->attr.recursive = ifc->attr.recursive;
14242 c->attr.always_explicit = ifc->attr.always_explicit;
14243 c->attr.ext_attr |= ifc->attr.ext_attr;
14244 /* Copy char length. */
14245 if (ifc->ts.type == BT_CHARACTER && ifc->ts.u.cl)
14246 {
14247 gfc_charlen *cl = gfc_new_charlen (sym->ns, ifc->ts.u.cl);
14248 if (cl->length && !cl->resolved
14249 && !gfc_resolve_expr (cl->length))
14250 {
14251 c->tb->error = 1;
14252 return false;
14253 }
14254 c->ts.u.cl = cl;
14255 }
14256 }
14257 }
14258 else if (c->attr.proc_pointer && c->ts.type == BT_UNKNOWN)
14259 {
14260 /* Since PPCs are not implicitly typed, a PPC without an explicit
14261 interface must be a subroutine. */
14262 gfc_add_subroutine (&c->attr, c->name, &c->loc);
14263 }
14264
14265 /* Procedure pointer components: Check PASS arg. */
14266 if (c->attr.proc_pointer && !c->tb->nopass && c->tb->pass_arg_num == 0
14267 && !sym->attr.vtype)
14268 {
14269 gfc_symbol* me_arg;
14270
14271 if (c->tb->pass_arg)
14272 {
14273 gfc_formal_arglist* i;
14274
14275 /* If an explicit passing argument name is given, walk the arg-list
14276 and look for it. */
14277
14278 me_arg = NULL;
14279 c->tb->pass_arg_num = 1;
14280 for (i = c->ts.interface->formal; i; i = i->next)
14281 {
14282 if (!strcmp (i->sym->name, c->tb->pass_arg))
14283 {
14284 me_arg = i->sym;
14285 break;
14286 }
14287 c->tb->pass_arg_num++;
14288 }
14289
14290 if (!me_arg)
14291 {
14292 gfc_error ("Procedure pointer component %qs with PASS(%s) "
14293 "at %L has no argument %qs", c->name,
14294 c->tb->pass_arg, &c->loc, c->tb->pass_arg);
14295 c->tb->error = 1;
14296 return false;
14297 }
14298 }
14299 else
14300 {
14301 /* Otherwise, take the first one; there should in fact be at least
14302 one. */
14303 c->tb->pass_arg_num = 1;
14304 if (!c->ts.interface->formal)
14305 {
14306 gfc_error ("Procedure pointer component %qs with PASS at %L "
14307 "must have at least one argument",
14308 c->name, &c->loc);
14309 c->tb->error = 1;
14310 return false;
14311 }
14312 me_arg = c->ts.interface->formal->sym;
14313 }
14314
14315 /* Now check that the argument-type matches. */
14316 gcc_assert (me_arg);
14317 if ((me_arg->ts.type != BT_DERIVED && me_arg->ts.type != BT_CLASS)
14318 || (me_arg->ts.type == BT_DERIVED && me_arg->ts.u.derived != sym)
14319 || (me_arg->ts.type == BT_CLASS
14320 && CLASS_DATA (me_arg)->ts.u.derived != sym))
14321 {
14322 gfc_error ("Argument %qs of %qs with PASS(%s) at %L must be of"
14323 " the derived type %qs", me_arg->name, c->name,
14324 me_arg->name, &c->loc, sym->name);
14325 c->tb->error = 1;
14326 return false;
14327 }
14328
14329 /* Check for F03:C453. */
14330 if (CLASS_DATA (me_arg)->attr.dimension)
14331 {
14332 gfc_error ("Argument %qs of %qs with PASS(%s) at %L "
14333 "must be scalar", me_arg->name, c->name, me_arg->name,
14334 &c->loc);
14335 c->tb->error = 1;
14336 return false;
14337 }
14338
14339 if (CLASS_DATA (me_arg)->attr.class_pointer)
14340 {
14341 gfc_error ("Argument %qs of %qs with PASS(%s) at %L "
14342 "may not have the POINTER attribute", me_arg->name,
14343 c->name, me_arg->name, &c->loc);
14344 c->tb->error = 1;
14345 return false;
14346 }
14347
14348 if (CLASS_DATA (me_arg)->attr.allocatable)
14349 {
14350 gfc_error ("Argument %qs of %qs with PASS(%s) at %L "
14351 "may not be ALLOCATABLE", me_arg->name, c->name,
14352 me_arg->name, &c->loc);
14353 c->tb->error = 1;
14354 return false;
14355 }
14356
14357 if (gfc_type_is_extensible (sym) && me_arg->ts.type != BT_CLASS)
14358 {
14359 gfc_error ("Non-polymorphic passed-object dummy argument of %qs"
14360 " at %L", c->name, &c->loc);
14361 return false;
14362 }
14363
14364 }
14365
14366 /* Check type-spec if this is not the parent-type component. */
14367 if (((sym->attr.is_class
14368 && (!sym->components->ts.u.derived->attr.extension
14369 || c != sym->components->ts.u.derived->components))
14370 || (!sym->attr.is_class
14371 && (!sym->attr.extension || c != sym->components)))
14372 && !sym->attr.vtype
14373 && !resolve_typespec_used (&c->ts, &c->loc, c->name))
14374 return false;
14375
14376 super_type = gfc_get_derived_super_type (sym);
14377
14378 /* If this type is an extension, set the accessibility of the parent
14379 component. */
14380 if (super_type
14381 && ((sym->attr.is_class
14382 && c == sym->components->ts.u.derived->components)
14383 || (!sym->attr.is_class && c == sym->components))
14384 && strcmp (super_type->name, c->name) == 0)
14385 c->attr.access = super_type->attr.access;
14386
14387 /* If this type is an extension, see if this component has the same name
14388 as an inherited type-bound procedure. */
14389 if (super_type && !sym->attr.is_class
14390 && gfc_find_typebound_proc (super_type, NULL, c->name, true, NULL))
14391 {
14392 gfc_error ("Component %qs of %qs at %L has the same name as an"
14393 " inherited type-bound procedure",
14394 c->name, sym->name, &c->loc);
14395 return false;
14396 }
14397
14398 if (c->ts.type == BT_CHARACTER && !c->attr.proc_pointer
14399 && !c->ts.deferred)
14400 {
14401 if (c->ts.u.cl->length == NULL
14402 || (!resolve_charlen(c->ts.u.cl))
14403 || !gfc_is_constant_expr (c->ts.u.cl->length))
14404 {
14405 gfc_error ("Character length of component %qs needs to "
14406 "be a constant specification expression at %L",
14407 c->name,
14408 c->ts.u.cl->length ? &c->ts.u.cl->length->where : &c->loc);
14409 return false;
14410 }
14411 }
14412
14413 if (c->ts.type == BT_CHARACTER && c->ts.deferred
14414 && !c->attr.pointer && !c->attr.allocatable)
14415 {
14416 gfc_error ("Character component %qs of %qs at %L with deferred "
14417 "length must be a POINTER or ALLOCATABLE",
14418 c->name, sym->name, &c->loc);
14419 return false;
14420 }
14421
14422 /* Add the hidden deferred length field. */
14423 if (c->ts.type == BT_CHARACTER
14424 && (c->ts.deferred || c->attr.pdt_string)
14425 && !c->attr.function
14426 && !sym->attr.is_class)
14427 {
14428 char name[GFC_MAX_SYMBOL_LEN+9];
14429 gfc_component *strlen;
14430 sprintf (name, "_%s_length", c->name);
14431 strlen = gfc_find_component (sym, name, true, true, NULL);
14432 if (strlen == NULL)
14433 {
14434 if (!gfc_add_component (sym, name, &strlen))
14435 return false;
14436 strlen->ts.type = BT_INTEGER;
14437 strlen->ts.kind = gfc_charlen_int_kind;
14438 strlen->attr.access = ACCESS_PRIVATE;
14439 strlen->attr.artificial = 1;
14440 }
14441 }
14442
14443 if (c->ts.type == BT_DERIVED
14444 && sym->component_access != ACCESS_PRIVATE
14445 && gfc_check_symbol_access (sym)
14446 && !is_sym_host_assoc (c->ts.u.derived, sym->ns)
14447 && !c->ts.u.derived->attr.use_assoc
14448 && !gfc_check_symbol_access (c->ts.u.derived)
14449 && !gfc_notify_std (GFC_STD_F2003, "the component %qs is a "
14450 "PRIVATE type and cannot be a component of "
14451 "%qs, which is PUBLIC at %L", c->name,
14452 sym->name, &sym->declared_at))
14453 return false;
14454
14455 if ((sym->attr.sequence || sym->attr.is_bind_c) && c->ts.type == BT_CLASS)
14456 {
14457 gfc_error ("Polymorphic component %s at %L in SEQUENCE or BIND(C) "
14458 "type %s", c->name, &c->loc, sym->name);
14459 return false;
14460 }
14461
14462 if (sym->attr.sequence)
14463 {
14464 if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.sequence == 0)
14465 {
14466 gfc_error ("Component %s of SEQUENCE type declared at %L does "
14467 "not have the SEQUENCE attribute",
14468 c->ts.u.derived->name, &sym->declared_at);
14469 return false;
14470 }
14471 }
14472
14473 if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.generic)
14474 c->ts.u.derived = gfc_find_dt_in_generic (c->ts.u.derived);
14475 else if (c->ts.type == BT_CLASS && c->attr.class_ok
14476 && CLASS_DATA (c)->ts.u.derived->attr.generic)
14477 CLASS_DATA (c)->ts.u.derived
14478 = gfc_find_dt_in_generic (CLASS_DATA (c)->ts.u.derived);
14479
14480 /* If an allocatable component derived type is of the same type as
14481 the enclosing derived type, we need a vtable generating so that
14482 the __deallocate procedure is created. */
14483 if ((c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
14484 && c->ts.u.derived == sym && c->attr.allocatable == 1)
14485 gfc_find_vtab (&c->ts);
14486
14487 /* Ensure that all the derived type components are put on the
14488 derived type list; even in formal namespaces, where derived type
14489 pointer components might not have been declared. */
14490 if (c->ts.type == BT_DERIVED
14491 && c->ts.u.derived
14492 && c->ts.u.derived->components
14493 && c->attr.pointer
14494 && sym != c->ts.u.derived)
14495 add_dt_to_dt_list (c->ts.u.derived);
14496
14497 if (!gfc_resolve_array_spec (c->as,
14498 !(c->attr.pointer || c->attr.proc_pointer
14499 || c->attr.allocatable)))
14500 return false;
14501
14502 if (c->initializer && !sym->attr.vtype
14503 && !c->attr.pdt_kind && !c->attr.pdt_len
14504 && !gfc_check_assign_symbol (sym, c, c->initializer))
14505 return false;
14506
14507 return true;
14508 }
14509
14510
14511 /* Be nice about the locus for a structure expression - show the locus of the
14512 first non-null sub-expression if we can. */
14513
14514 static locus *
14515 cons_where (gfc_expr *struct_expr)
14516 {
14517 gfc_constructor *cons;
14518
14519 gcc_assert (struct_expr && struct_expr->expr_type == EXPR_STRUCTURE);
14520
14521 cons = gfc_constructor_first (struct_expr->value.constructor);
14522 for (; cons; cons = gfc_constructor_next (cons))
14523 {
14524 if (cons->expr && cons->expr->expr_type != EXPR_NULL)
14525 return &cons->expr->where;
14526 }
14527
14528 return &struct_expr->where;
14529 }
14530
14531 /* Resolve the components of a structure type. Much less work than derived
14532 types. */
14533
14534 static bool
14535 resolve_fl_struct (gfc_symbol *sym)
14536 {
14537 gfc_component *c;
14538 gfc_expr *init = NULL;
14539 bool success;
14540
14541 /* Make sure UNIONs do not have overlapping initializers. */
14542 if (sym->attr.flavor == FL_UNION)
14543 {
14544 for (c = sym->components; c; c = c->next)
14545 {
14546 if (init && c->initializer)
14547 {
14548 gfc_error ("Conflicting initializers in union at %L and %L",
14549 cons_where (init), cons_where (c->initializer));
14550 gfc_free_expr (c->initializer);
14551 c->initializer = NULL;
14552 }
14553 if (init == NULL)
14554 init = c->initializer;
14555 }
14556 }
14557
14558 success = true;
14559 for (c = sym->components; c; c = c->next)
14560 if (!resolve_component (c, sym))
14561 success = false;
14562
14563 if (!success)
14564 return false;
14565
14566 if (sym->components)
14567 add_dt_to_dt_list (sym);
14568
14569 return true;
14570 }
14571
14572
14573 /* Resolve the components of a derived type. This does not have to wait until
14574 resolution stage, but can be done as soon as the dt declaration has been
14575 parsed. */
14576
14577 static bool
14578 resolve_fl_derived0 (gfc_symbol *sym)
14579 {
14580 gfc_symbol* super_type;
14581 gfc_component *c;
14582 gfc_formal_arglist *f;
14583 bool success;
14584
14585 if (sym->attr.unlimited_polymorphic)
14586 return true;
14587
14588 super_type = gfc_get_derived_super_type (sym);
14589
14590 /* F2008, C432. */
14591 if (super_type && sym->attr.coarray_comp && !super_type->attr.coarray_comp)
14592 {
14593 gfc_error ("As extending type %qs at %L has a coarray component, "
14594 "parent type %qs shall also have one", sym->name,
14595 &sym->declared_at, super_type->name);
14596 return false;
14597 }
14598
14599 /* Ensure the extended type gets resolved before we do. */
14600 if (super_type && !resolve_fl_derived0 (super_type))
14601 return false;
14602
14603 /* An ABSTRACT type must be extensible. */
14604 if (sym->attr.abstract && !gfc_type_is_extensible (sym))
14605 {
14606 gfc_error ("Non-extensible derived-type %qs at %L must not be ABSTRACT",
14607 sym->name, &sym->declared_at);
14608 return false;
14609 }
14610
14611 c = (sym->attr.is_class) ? sym->components->ts.u.derived->components
14612 : sym->components;
14613
14614 success = true;
14615 for ( ; c != NULL; c = c->next)
14616 if (!resolve_component (c, sym))
14617 success = false;
14618
14619 if (!success)
14620 return false;
14621
14622 /* Now add the caf token field, where needed. */
14623 if (flag_coarray != GFC_FCOARRAY_NONE
14624 && !sym->attr.is_class && !sym->attr.vtype)
14625 {
14626 for (c = sym->components; c; c = c->next)
14627 if (!c->attr.dimension && !c->attr.codimension
14628 && (c->attr.allocatable || c->attr.pointer))
14629 {
14630 char name[GFC_MAX_SYMBOL_LEN+9];
14631 gfc_component *token;
14632 sprintf (name, "_caf_%s", c->name);
14633 token = gfc_find_component (sym, name, true, true, NULL);
14634 if (token == NULL)
14635 {
14636 if (!gfc_add_component (sym, name, &token))
14637 return false;
14638 token->ts.type = BT_VOID;
14639 token->ts.kind = gfc_default_integer_kind;
14640 token->attr.access = ACCESS_PRIVATE;
14641 token->attr.artificial = 1;
14642 token->attr.caf_token = 1;
14643 }
14644 }
14645 }
14646
14647 check_defined_assignments (sym);
14648
14649 if (!sym->attr.defined_assign_comp && super_type)
14650 sym->attr.defined_assign_comp
14651 = super_type->attr.defined_assign_comp;
14652
14653 /* If this is a non-ABSTRACT type extending an ABSTRACT one, ensure that
14654 all DEFERRED bindings are overridden. */
14655 if (super_type && super_type->attr.abstract && !sym->attr.abstract
14656 && !sym->attr.is_class
14657 && !ensure_not_abstract (sym, super_type))
14658 return false;
14659
14660 /* Check that there is a component for every PDT parameter. */
14661 if (sym->attr.pdt_template)
14662 {
14663 for (f = sym->formal; f; f = f->next)
14664 {
14665 if (!f->sym)
14666 continue;
14667 c = gfc_find_component (sym, f->sym->name, true, true, NULL);
14668 if (c == NULL)
14669 {
14670 gfc_error ("Parameterized type %qs does not have a component "
14671 "corresponding to parameter %qs at %L", sym->name,
14672 f->sym->name, &sym->declared_at);
14673 break;
14674 }
14675 }
14676 }
14677
14678 /* Add derived type to the derived type list. */
14679 add_dt_to_dt_list (sym);
14680
14681 return true;
14682 }
14683
14684
14685 /* The following procedure does the full resolution of a derived type,
14686 including resolution of all type-bound procedures (if present). In contrast
14687 to 'resolve_fl_derived0' this can only be done after the module has been
14688 parsed completely. */
14689
14690 static bool
14691 resolve_fl_derived (gfc_symbol *sym)
14692 {
14693 gfc_symbol *gen_dt = NULL;
14694
14695 if (sym->attr.unlimited_polymorphic)
14696 return true;
14697
14698 if (!sym->attr.is_class)
14699 gfc_find_symbol (sym->name, sym->ns, 0, &gen_dt);
14700 if (gen_dt && gen_dt->generic && gen_dt->generic->next
14701 && (!gen_dt->generic->sym->attr.use_assoc
14702 || gen_dt->generic->sym->module != gen_dt->generic->next->sym->module)
14703 && !gfc_notify_std (GFC_STD_F2003, "Generic name %qs of function "
14704 "%qs at %L being the same name as derived "
14705 "type at %L", sym->name,
14706 gen_dt->generic->sym == sym
14707 ? gen_dt->generic->next->sym->name
14708 : gen_dt->generic->sym->name,
14709 gen_dt->generic->sym == sym
14710 ? &gen_dt->generic->next->sym->declared_at
14711 : &gen_dt->generic->sym->declared_at,
14712 &sym->declared_at))
14713 return false;
14714
14715 if (sym->components == NULL && !sym->attr.zero_comp && !sym->attr.use_assoc)
14716 {
14717 gfc_error ("Derived type %qs at %L has not been declared",
14718 sym->name, &sym->declared_at);
14719 return false;
14720 }
14721
14722 /* Resolve the finalizer procedures. */
14723 if (!gfc_resolve_finalizers (sym, NULL))
14724 return false;
14725
14726 if (sym->attr.is_class && sym->ts.u.derived == NULL)
14727 {
14728 /* Fix up incomplete CLASS symbols. */
14729 gfc_component *data = gfc_find_component (sym, "_data", true, true, NULL);
14730 gfc_component *vptr = gfc_find_component (sym, "_vptr", true, true, NULL);
14731
14732 /* Nothing more to do for unlimited polymorphic entities. */
14733 if (data->ts.u.derived->attr.unlimited_polymorphic)
14734 return true;
14735 else if (vptr->ts.u.derived == NULL)
14736 {
14737 gfc_symbol *vtab = gfc_find_derived_vtab (data->ts.u.derived);
14738 gcc_assert (vtab);
14739 vptr->ts.u.derived = vtab->ts.u.derived;
14740 if (!resolve_fl_derived0 (vptr->ts.u.derived))
14741 return false;
14742 }
14743 }
14744
14745 if (!resolve_fl_derived0 (sym))
14746 return false;
14747
14748 /* Resolve the type-bound procedures. */
14749 if (!resolve_typebound_procedures (sym))
14750 return false;
14751
14752 /* Generate module vtables subject to their accessibility and their not
14753 being vtables or pdt templates. If this is not done class declarations
14754 in external procedures wind up with their own version and so SELECT TYPE
14755 fails because the vptrs do not have the same address. */
14756 if (gfc_option.allow_std & GFC_STD_F2003
14757 && sym->ns->proc_name
14758 && sym->ns->proc_name->attr.flavor == FL_MODULE
14759 && sym->attr.access != ACCESS_PRIVATE
14760 && !(sym->attr.use_assoc || sym->attr.vtype || sym->attr.pdt_template))
14761 {
14762 gfc_symbol *vtab = gfc_find_derived_vtab (sym);
14763 gfc_set_sym_referenced (vtab);
14764 }
14765
14766 return true;
14767 }
14768
14769
14770 static bool
14771 resolve_fl_namelist (gfc_symbol *sym)
14772 {
14773 gfc_namelist *nl;
14774 gfc_symbol *nlsym;
14775
14776 for (nl = sym->namelist; nl; nl = nl->next)
14777 {
14778 /* Check again, the check in match only works if NAMELIST comes
14779 after the decl. */
14780 if (nl->sym->as && nl->sym->as->type == AS_ASSUMED_SIZE)
14781 {
14782 gfc_error ("Assumed size array %qs in namelist %qs at %L is not "
14783 "allowed", nl->sym->name, sym->name, &sym->declared_at);
14784 return false;
14785 }
14786
14787 if (nl->sym->as && nl->sym->as->type == AS_ASSUMED_SHAPE
14788 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST array object %qs "
14789 "with assumed shape in namelist %qs at %L",
14790 nl->sym->name, sym->name, &sym->declared_at))
14791 return false;
14792
14793 if (is_non_constant_shape_array (nl->sym)
14794 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST array object %qs "
14795 "with nonconstant shape in namelist %qs at %L",
14796 nl->sym->name, sym->name, &sym->declared_at))
14797 return false;
14798
14799 if (nl->sym->ts.type == BT_CHARACTER
14800 && (nl->sym->ts.u.cl->length == NULL
14801 || !gfc_is_constant_expr (nl->sym->ts.u.cl->length))
14802 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST object %qs with "
14803 "nonconstant character length in "
14804 "namelist %qs at %L", nl->sym->name,
14805 sym->name, &sym->declared_at))
14806 return false;
14807
14808 }
14809
14810 /* Reject PRIVATE objects in a PUBLIC namelist. */
14811 if (gfc_check_symbol_access (sym))
14812 {
14813 for (nl = sym->namelist; nl; nl = nl->next)
14814 {
14815 if (!nl->sym->attr.use_assoc
14816 && !is_sym_host_assoc (nl->sym, sym->ns)
14817 && !gfc_check_symbol_access (nl->sym))
14818 {
14819 gfc_error ("NAMELIST object %qs was declared PRIVATE and "
14820 "cannot be member of PUBLIC namelist %qs at %L",
14821 nl->sym->name, sym->name, &sym->declared_at);
14822 return false;
14823 }
14824
14825 if (nl->sym->ts.type == BT_DERIVED
14826 && (nl->sym->ts.u.derived->attr.alloc_comp
14827 || nl->sym->ts.u.derived->attr.pointer_comp))
14828 {
14829 if (!gfc_notify_std (GFC_STD_F2003, "NAMELIST object %qs in "
14830 "namelist %qs at %L with ALLOCATABLE "
14831 "or POINTER components", nl->sym->name,
14832 sym->name, &sym->declared_at))
14833 return false;
14834 return true;
14835 }
14836
14837 /* Types with private components that came here by USE-association. */
14838 if (nl->sym->ts.type == BT_DERIVED
14839 && derived_inaccessible (nl->sym->ts.u.derived))
14840 {
14841 gfc_error ("NAMELIST object %qs has use-associated PRIVATE "
14842 "components and cannot be member of namelist %qs at %L",
14843 nl->sym->name, sym->name, &sym->declared_at);
14844 return false;
14845 }
14846
14847 /* Types with private components that are defined in the same module. */
14848 if (nl->sym->ts.type == BT_DERIVED
14849 && !is_sym_host_assoc (nl->sym->ts.u.derived, sym->ns)
14850 && nl->sym->ts.u.derived->attr.private_comp)
14851 {
14852 gfc_error ("NAMELIST object %qs has PRIVATE components and "
14853 "cannot be a member of PUBLIC namelist %qs at %L",
14854 nl->sym->name, sym->name, &sym->declared_at);
14855 return false;
14856 }
14857 }
14858 }
14859
14860
14861 /* 14.1.2 A module or internal procedure represent local entities
14862 of the same type as a namelist member and so are not allowed. */
14863 for (nl = sym->namelist; nl; nl = nl->next)
14864 {
14865 if (nl->sym->ts.kind != 0 && nl->sym->attr.flavor == FL_VARIABLE)
14866 continue;
14867
14868 if (nl->sym->attr.function && nl->sym == nl->sym->result)
14869 if ((nl->sym == sym->ns->proc_name)
14870 ||
14871 (sym->ns->parent && nl->sym == sym->ns->parent->proc_name))
14872 continue;
14873
14874 nlsym = NULL;
14875 if (nl->sym->name)
14876 gfc_find_symbol (nl->sym->name, sym->ns, 1, &nlsym);
14877 if (nlsym && nlsym->attr.flavor == FL_PROCEDURE)
14878 {
14879 gfc_error ("PROCEDURE attribute conflicts with NAMELIST "
14880 "attribute in %qs at %L", nlsym->name,
14881 &sym->declared_at);
14882 return false;
14883 }
14884 }
14885
14886 if (async_io_dt)
14887 {
14888 for (nl = sym->namelist; nl; nl = nl->next)
14889 nl->sym->attr.asynchronous = 1;
14890 }
14891 return true;
14892 }
14893
14894
14895 static bool
14896 resolve_fl_parameter (gfc_symbol *sym)
14897 {
14898 /* A parameter array's shape needs to be constant. */
14899 if (sym->as != NULL
14900 && (sym->as->type == AS_DEFERRED
14901 || is_non_constant_shape_array (sym)))
14902 {
14903 gfc_error ("Parameter array %qs at %L cannot be automatic "
14904 "or of deferred shape", sym->name, &sym->declared_at);
14905 return false;
14906 }
14907
14908 /* Constraints on deferred type parameter. */
14909 if (!deferred_requirements (sym))
14910 return false;
14911
14912 /* Make sure a parameter that has been implicitly typed still
14913 matches the implicit type, since PARAMETER statements can precede
14914 IMPLICIT statements. */
14915 if (sym->attr.implicit_type
14916 && !gfc_compare_types (&sym->ts, gfc_get_default_type (sym->name,
14917 sym->ns)))
14918 {
14919 gfc_error ("Implicitly typed PARAMETER %qs at %L doesn't match a "
14920 "later IMPLICIT type", sym->name, &sym->declared_at);
14921 return false;
14922 }
14923
14924 /* Make sure the types of derived parameters are consistent. This
14925 type checking is deferred until resolution because the type may
14926 refer to a derived type from the host. */
14927 if (sym->ts.type == BT_DERIVED
14928 && !gfc_compare_types (&sym->ts, &sym->value->ts))
14929 {
14930 gfc_error ("Incompatible derived type in PARAMETER at %L",
14931 &sym->value->where);
14932 return false;
14933 }
14934
14935 /* F03:C509,C514. */
14936 if (sym->ts.type == BT_CLASS)
14937 {
14938 gfc_error ("CLASS variable %qs at %L cannot have the PARAMETER attribute",
14939 sym->name, &sym->declared_at);
14940 return false;
14941 }
14942
14943 return true;
14944 }
14945
14946
14947 /* Called by resolve_symbol to check PDTs. */
14948
14949 static void
14950 resolve_pdt (gfc_symbol* sym)
14951 {
14952 gfc_symbol *derived = NULL;
14953 gfc_actual_arglist *param;
14954 gfc_component *c;
14955 bool const_len_exprs = true;
14956 bool assumed_len_exprs = false;
14957 symbol_attribute *attr;
14958
14959 if (sym->ts.type == BT_DERIVED)
14960 {
14961 derived = sym->ts.u.derived;
14962 attr = &(sym->attr);
14963 }
14964 else if (sym->ts.type == BT_CLASS)
14965 {
14966 derived = CLASS_DATA (sym)->ts.u.derived;
14967 attr = &(CLASS_DATA (sym)->attr);
14968 }
14969 else
14970 gcc_unreachable ();
14971
14972 gcc_assert (derived->attr.pdt_type);
14973
14974 for (param = sym->param_list; param; param = param->next)
14975 {
14976 c = gfc_find_component (derived, param->name, false, true, NULL);
14977 gcc_assert (c);
14978 if (c->attr.pdt_kind)
14979 continue;
14980
14981 if (param->expr && !gfc_is_constant_expr (param->expr)
14982 && c->attr.pdt_len)
14983 const_len_exprs = false;
14984 else if (param->spec_type == SPEC_ASSUMED)
14985 assumed_len_exprs = true;
14986
14987 if (param->spec_type == SPEC_DEFERRED
14988 && !attr->allocatable && !attr->pointer)
14989 gfc_error ("The object %qs at %L has a deferred LEN "
14990 "parameter %qs and is neither allocatable "
14991 "nor a pointer", sym->name, &sym->declared_at,
14992 param->name);
14993
14994 }
14995
14996 if (!const_len_exprs
14997 && (sym->ns->proc_name->attr.is_main_program
14998 || sym->ns->proc_name->attr.flavor == FL_MODULE
14999 || sym->attr.save != SAVE_NONE))
15000 gfc_error ("The AUTOMATIC object %qs at %L must not have the "
15001 "SAVE attribute or be a variable declared in the "
15002 "main program, a module or a submodule(F08/C513)",
15003 sym->name, &sym->declared_at);
15004
15005 if (assumed_len_exprs && !(sym->attr.dummy
15006 || sym->attr.select_type_temporary || sym->attr.associate_var))
15007 gfc_error ("The object %qs at %L with ASSUMED type parameters "
15008 "must be a dummy or a SELECT TYPE selector(F08/4.2)",
15009 sym->name, &sym->declared_at);
15010 }
15011
15012
15013 /* Do anything necessary to resolve a symbol. Right now, we just
15014 assume that an otherwise unknown symbol is a variable. This sort
15015 of thing commonly happens for symbols in module. */
15016
15017 static void
15018 resolve_symbol (gfc_symbol *sym)
15019 {
15020 int check_constant, mp_flag;
15021 gfc_symtree *symtree;
15022 gfc_symtree *this_symtree;
15023 gfc_namespace *ns;
15024 gfc_component *c;
15025 symbol_attribute class_attr;
15026 gfc_array_spec *as;
15027 bool saved_specification_expr;
15028
15029 if (sym->resolved)
15030 return;
15031 sym->resolved = 1;
15032
15033 /* No symbol will ever have union type; only components can be unions.
15034 Union type declaration symbols have type BT_UNKNOWN but flavor FL_UNION
15035 (just like derived type declaration symbols have flavor FL_DERIVED). */
15036 gcc_assert (sym->ts.type != BT_UNION);
15037
15038 /* Coarrayed polymorphic objects with allocatable or pointer components are
15039 yet unsupported for -fcoarray=lib. */
15040 if (flag_coarray == GFC_FCOARRAY_LIB && sym->ts.type == BT_CLASS
15041 && sym->ts.u.derived && CLASS_DATA (sym)
15042 && CLASS_DATA (sym)->attr.codimension
15043 && (CLASS_DATA (sym)->ts.u.derived->attr.alloc_comp
15044 || CLASS_DATA (sym)->ts.u.derived->attr.pointer_comp))
15045 {
15046 gfc_error ("Sorry, allocatable/pointer components in polymorphic (CLASS) "
15047 "type coarrays at %L are unsupported", &sym->declared_at);
15048 return;
15049 }
15050
15051 if (sym->attr.artificial)
15052 return;
15053
15054 if (sym->attr.unlimited_polymorphic)
15055 return;
15056
15057 if (sym->attr.flavor == FL_UNKNOWN
15058 || (sym->attr.flavor == FL_PROCEDURE && !sym->attr.intrinsic
15059 && !sym->attr.generic && !sym->attr.external
15060 && sym->attr.if_source == IFSRC_UNKNOWN
15061 && sym->ts.type == BT_UNKNOWN))
15062 {
15063
15064 /* If we find that a flavorless symbol is an interface in one of the
15065 parent namespaces, find its symtree in this namespace, free the
15066 symbol and set the symtree to point to the interface symbol. */
15067 for (ns = gfc_current_ns->parent; ns; ns = ns->parent)
15068 {
15069 symtree = gfc_find_symtree (ns->sym_root, sym->name);
15070 if (symtree && (symtree->n.sym->generic ||
15071 (symtree->n.sym->attr.flavor == FL_PROCEDURE
15072 && sym->ns->construct_entities)))
15073 {
15074 this_symtree = gfc_find_symtree (gfc_current_ns->sym_root,
15075 sym->name);
15076 if (this_symtree->n.sym == sym)
15077 {
15078 symtree->n.sym->refs++;
15079 gfc_release_symbol (sym);
15080 this_symtree->n.sym = symtree->n.sym;
15081 return;
15082 }
15083 }
15084 }
15085
15086 /* Otherwise give it a flavor according to such attributes as
15087 it has. */
15088 if (sym->attr.flavor == FL_UNKNOWN && sym->attr.external == 0
15089 && sym->attr.intrinsic == 0)
15090 sym->attr.flavor = FL_VARIABLE;
15091 else if (sym->attr.flavor == FL_UNKNOWN)
15092 {
15093 sym->attr.flavor = FL_PROCEDURE;
15094 if (sym->attr.dimension)
15095 sym->attr.function = 1;
15096 }
15097 }
15098
15099 if (sym->attr.external && sym->ts.type != BT_UNKNOWN && !sym->attr.function)
15100 gfc_add_function (&sym->attr, sym->name, &sym->declared_at);
15101
15102 if (sym->attr.procedure && sym->attr.if_source != IFSRC_DECL
15103 && !resolve_procedure_interface (sym))
15104 return;
15105
15106 if (sym->attr.is_protected && !sym->attr.proc_pointer
15107 && (sym->attr.procedure || sym->attr.external))
15108 {
15109 if (sym->attr.external)
15110 gfc_error ("PROTECTED attribute conflicts with EXTERNAL attribute "
15111 "at %L", &sym->declared_at);
15112 else
15113 gfc_error ("PROCEDURE attribute conflicts with PROTECTED attribute "
15114 "at %L", &sym->declared_at);
15115
15116 return;
15117 }
15118
15119 if (sym->attr.flavor == FL_DERIVED && !resolve_fl_derived (sym))
15120 return;
15121
15122 else if ((sym->attr.flavor == FL_STRUCT || sym->attr.flavor == FL_UNION)
15123 && !resolve_fl_struct (sym))
15124 return;
15125
15126 /* Symbols that are module procedures with results (functions) have
15127 the types and array specification copied for type checking in
15128 procedures that call them, as well as for saving to a module
15129 file. These symbols can't stand the scrutiny that their results
15130 can. */
15131 mp_flag = (sym->result != NULL && sym->result != sym);
15132
15133 /* Make sure that the intrinsic is consistent with its internal
15134 representation. This needs to be done before assigning a default
15135 type to avoid spurious warnings. */
15136 if (sym->attr.flavor != FL_MODULE && sym->attr.intrinsic
15137 && !gfc_resolve_intrinsic (sym, &sym->declared_at))
15138 return;
15139
15140 /* Resolve associate names. */
15141 if (sym->assoc)
15142 resolve_assoc_var (sym, true);
15143
15144 /* Assign default type to symbols that need one and don't have one. */
15145 if (sym->ts.type == BT_UNKNOWN)
15146 {
15147 if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER)
15148 {
15149 gfc_set_default_type (sym, 1, NULL);
15150 }
15151
15152 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.external
15153 && !sym->attr.function && !sym->attr.subroutine
15154 && gfc_get_default_type (sym->name, sym->ns)->type == BT_UNKNOWN)
15155 gfc_add_subroutine (&sym->attr, sym->name, &sym->declared_at);
15156
15157 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.function)
15158 {
15159 /* The specific case of an external procedure should emit an error
15160 in the case that there is no implicit type. */
15161 if (!mp_flag)
15162 {
15163 if (!sym->attr.mixed_entry_master)
15164 gfc_set_default_type (sym, sym->attr.external, NULL);
15165 }
15166 else
15167 {
15168 /* Result may be in another namespace. */
15169 resolve_symbol (sym->result);
15170
15171 if (!sym->result->attr.proc_pointer)
15172 {
15173 sym->ts = sym->result->ts;
15174 sym->as = gfc_copy_array_spec (sym->result->as);
15175 sym->attr.dimension = sym->result->attr.dimension;
15176 sym->attr.pointer = sym->result->attr.pointer;
15177 sym->attr.allocatable = sym->result->attr.allocatable;
15178 sym->attr.contiguous = sym->result->attr.contiguous;
15179 }
15180 }
15181 }
15182 }
15183 else if (mp_flag && sym->attr.flavor == FL_PROCEDURE && sym->attr.function)
15184 {
15185 bool saved_specification_expr = specification_expr;
15186 specification_expr = true;
15187 gfc_resolve_array_spec (sym->result->as, false);
15188 specification_expr = saved_specification_expr;
15189 }
15190
15191 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
15192 {
15193 as = CLASS_DATA (sym)->as;
15194 class_attr = CLASS_DATA (sym)->attr;
15195 class_attr.pointer = class_attr.class_pointer;
15196 }
15197 else
15198 {
15199 class_attr = sym->attr;
15200 as = sym->as;
15201 }
15202
15203 /* F2008, C530. */
15204 if (sym->attr.contiguous
15205 && (!class_attr.dimension
15206 || (as->type != AS_ASSUMED_SHAPE && as->type != AS_ASSUMED_RANK
15207 && !class_attr.pointer)))
15208 {
15209 gfc_error ("%qs at %L has the CONTIGUOUS attribute but is not an "
15210 "array pointer or an assumed-shape or assumed-rank array",
15211 sym->name, &sym->declared_at);
15212 return;
15213 }
15214
15215 /* Assumed size arrays and assumed shape arrays must be dummy
15216 arguments. Array-spec's of implied-shape should have been resolved to
15217 AS_EXPLICIT already. */
15218
15219 if (as)
15220 {
15221 /* If AS_IMPLIED_SHAPE makes it to here, it must be a bad
15222 specification expression. */
15223 if (as->type == AS_IMPLIED_SHAPE)
15224 {
15225 int i;
15226 for (i=0; i<as->rank; i++)
15227 {
15228 if (as->lower[i] != NULL && as->upper[i] == NULL)
15229 {
15230 gfc_error ("Bad specification for assumed size array at %L",
15231 &as->lower[i]->where);
15232 return;
15233 }
15234 }
15235 gcc_unreachable();
15236 }
15237
15238 if (((as->type == AS_ASSUMED_SIZE && !as->cp_was_assumed)
15239 || as->type == AS_ASSUMED_SHAPE)
15240 && !sym->attr.dummy && !sym->attr.select_type_temporary)
15241 {
15242 if (as->type == AS_ASSUMED_SIZE)
15243 gfc_error ("Assumed size array at %L must be a dummy argument",
15244 &sym->declared_at);
15245 else
15246 gfc_error ("Assumed shape array at %L must be a dummy argument",
15247 &sym->declared_at);
15248 return;
15249 }
15250 /* TS 29113, C535a. */
15251 if (as->type == AS_ASSUMED_RANK && !sym->attr.dummy
15252 && !sym->attr.select_type_temporary
15253 && !(cs_base && cs_base->current
15254 && cs_base->current->op == EXEC_SELECT_RANK))
15255 {
15256 gfc_error ("Assumed-rank array at %L must be a dummy argument",
15257 &sym->declared_at);
15258 return;
15259 }
15260 if (as->type == AS_ASSUMED_RANK
15261 && (sym->attr.codimension || sym->attr.value))
15262 {
15263 gfc_error ("Assumed-rank array at %L may not have the VALUE or "
15264 "CODIMENSION attribute", &sym->declared_at);
15265 return;
15266 }
15267 }
15268
15269 /* Make sure symbols with known intent or optional are really dummy
15270 variable. Because of ENTRY statement, this has to be deferred
15271 until resolution time. */
15272
15273 if (!sym->attr.dummy
15274 && (sym->attr.optional || sym->attr.intent != INTENT_UNKNOWN))
15275 {
15276 gfc_error ("Symbol at %L is not a DUMMY variable", &sym->declared_at);
15277 return;
15278 }
15279
15280 if (sym->attr.value && !sym->attr.dummy)
15281 {
15282 gfc_error ("%qs at %L cannot have the VALUE attribute because "
15283 "it is not a dummy argument", sym->name, &sym->declared_at);
15284 return;
15285 }
15286
15287 if (sym->attr.value && sym->ts.type == BT_CHARACTER)
15288 {
15289 gfc_charlen *cl = sym->ts.u.cl;
15290 if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
15291 {
15292 gfc_error ("Character dummy variable %qs at %L with VALUE "
15293 "attribute must have constant length",
15294 sym->name, &sym->declared_at);
15295 return;
15296 }
15297
15298 if (sym->ts.is_c_interop
15299 && mpz_cmp_si (cl->length->value.integer, 1) != 0)
15300 {
15301 gfc_error ("C interoperable character dummy variable %qs at %L "
15302 "with VALUE attribute must have length one",
15303 sym->name, &sym->declared_at);
15304 return;
15305 }
15306 }
15307
15308 if (sym->ts.type == BT_DERIVED && !sym->attr.is_iso_c
15309 && sym->ts.u.derived->attr.generic)
15310 {
15311 sym->ts.u.derived = gfc_find_dt_in_generic (sym->ts.u.derived);
15312 if (!sym->ts.u.derived)
15313 {
15314 gfc_error ("The derived type %qs at %L is of type %qs, "
15315 "which has not been defined", sym->name,
15316 &sym->declared_at, sym->ts.u.derived->name);
15317 sym->ts.type = BT_UNKNOWN;
15318 return;
15319 }
15320 }
15321
15322 /* Use the same constraints as TYPE(*), except for the type check
15323 and that only scalars and assumed-size arrays are permitted. */
15324 if (sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
15325 {
15326 if (!sym->attr.dummy)
15327 {
15328 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall be "
15329 "a dummy argument", sym->name, &sym->declared_at);
15330 return;
15331 }
15332
15333 if (sym->ts.type != BT_ASSUMED && sym->ts.type != BT_INTEGER
15334 && sym->ts.type != BT_REAL && sym->ts.type != BT_LOGICAL
15335 && sym->ts.type != BT_COMPLEX)
15336 {
15337 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall be "
15338 "of type TYPE(*) or of an numeric intrinsic type",
15339 sym->name, &sym->declared_at);
15340 return;
15341 }
15342
15343 if (sym->attr.allocatable || sym->attr.codimension
15344 || sym->attr.pointer || sym->attr.value)
15345 {
15346 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may not "
15347 "have the ALLOCATABLE, CODIMENSION, POINTER or VALUE "
15348 "attribute", sym->name, &sym->declared_at);
15349 return;
15350 }
15351
15352 if (sym->attr.intent == INTENT_OUT)
15353 {
15354 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may not "
15355 "have the INTENT(OUT) attribute",
15356 sym->name, &sym->declared_at);
15357 return;
15358 }
15359 if (sym->attr.dimension && sym->as->type != AS_ASSUMED_SIZE)
15360 {
15361 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall "
15362 "either be a scalar or an assumed-size array",
15363 sym->name, &sym->declared_at);
15364 return;
15365 }
15366
15367 /* Set the type to TYPE(*) and add a dimension(*) to ensure
15368 NO_ARG_CHECK is correctly handled in trans*.c, e.g. with
15369 packing. */
15370 sym->ts.type = BT_ASSUMED;
15371 sym->as = gfc_get_array_spec ();
15372 sym->as->type = AS_ASSUMED_SIZE;
15373 sym->as->rank = 1;
15374 sym->as->lower[0] = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
15375 }
15376 else if (sym->ts.type == BT_ASSUMED)
15377 {
15378 /* TS 29113, C407a. */
15379 if (!sym->attr.dummy)
15380 {
15381 gfc_error ("Assumed type of variable %s at %L is only permitted "
15382 "for dummy variables", sym->name, &sym->declared_at);
15383 return;
15384 }
15385 if (sym->attr.allocatable || sym->attr.codimension
15386 || sym->attr.pointer || sym->attr.value)
15387 {
15388 gfc_error ("Assumed-type variable %s at %L may not have the "
15389 "ALLOCATABLE, CODIMENSION, POINTER or VALUE attribute",
15390 sym->name, &sym->declared_at);
15391 return;
15392 }
15393 if (sym->attr.intent == INTENT_OUT)
15394 {
15395 gfc_error ("Assumed-type variable %s at %L may not have the "
15396 "INTENT(OUT) attribute",
15397 sym->name, &sym->declared_at);
15398 return;
15399 }
15400 if (sym->attr.dimension && sym->as->type == AS_EXPLICIT)
15401 {
15402 gfc_error ("Assumed-type variable %s at %L shall not be an "
15403 "explicit-shape array", sym->name, &sym->declared_at);
15404 return;
15405 }
15406 }
15407
15408 /* If the symbol is marked as bind(c), that it is declared at module level
15409 scope and verify its type and kind. Do not do the latter for symbols
15410 that are implicitly typed because that is handled in
15411 gfc_set_default_type. Handle dummy arguments and procedure definitions
15412 separately. Also, anything that is use associated is not handled here
15413 but instead is handled in the module it is declared in. Finally, derived
15414 type definitions are allowed to be BIND(C) since that only implies that
15415 they're interoperable, and they are checked fully for interoperability
15416 when a variable is declared of that type. */
15417 if (sym->attr.is_bind_c && sym->attr.use_assoc == 0
15418 && sym->attr.dummy == 0 && sym->attr.flavor != FL_PROCEDURE
15419 && sym->attr.flavor != FL_DERIVED)
15420 {
15421 bool t = true;
15422
15423 /* First, make sure the variable is declared at the
15424 module-level scope (J3/04-007, Section 15.3). */
15425 if (sym->ns->proc_name->attr.flavor != FL_MODULE &&
15426 sym->attr.in_common == 0)
15427 {
15428 gfc_error ("Variable %qs at %L cannot be BIND(C) because it "
15429 "is neither a COMMON block nor declared at the "
15430 "module level scope", sym->name, &(sym->declared_at));
15431 t = false;
15432 }
15433 else if (sym->ts.type == BT_CHARACTER
15434 && (sym->ts.u.cl == NULL || sym->ts.u.cl->length == NULL
15435 || !gfc_is_constant_expr (sym->ts.u.cl->length)
15436 || mpz_cmp_si (sym->ts.u.cl->length->value.integer, 1) != 0))
15437 {
15438 gfc_error ("BIND(C) Variable %qs at %L must have length one",
15439 sym->name, &sym->declared_at);
15440 t = false;
15441 }
15442 else if (sym->common_head != NULL && sym->attr.implicit_type == 0)
15443 {
15444 t = verify_com_block_vars_c_interop (sym->common_head);
15445 }
15446 else if (sym->attr.implicit_type == 0)
15447 {
15448 /* If type() declaration, we need to verify that the components
15449 of the given type are all C interoperable, etc. */
15450 if (sym->ts.type == BT_DERIVED &&
15451 sym->ts.u.derived->attr.is_c_interop != 1)
15452 {
15453 /* Make sure the user marked the derived type as BIND(C). If
15454 not, call the verify routine. This could print an error
15455 for the derived type more than once if multiple variables
15456 of that type are declared. */
15457 if (sym->ts.u.derived->attr.is_bind_c != 1)
15458 verify_bind_c_derived_type (sym->ts.u.derived);
15459 t = false;
15460 }
15461
15462 /* Verify the variable itself as C interoperable if it
15463 is BIND(C). It is not possible for this to succeed if
15464 the verify_bind_c_derived_type failed, so don't have to handle
15465 any error returned by verify_bind_c_derived_type. */
15466 t = verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common,
15467 sym->common_block);
15468 }
15469
15470 if (!t)
15471 {
15472 /* clear the is_bind_c flag to prevent reporting errors more than
15473 once if something failed. */
15474 sym->attr.is_bind_c = 0;
15475 return;
15476 }
15477 }
15478
15479 /* If a derived type symbol has reached this point, without its
15480 type being declared, we have an error. Notice that most
15481 conditions that produce undefined derived types have already
15482 been dealt with. However, the likes of:
15483 implicit type(t) (t) ..... call foo (t) will get us here if
15484 the type is not declared in the scope of the implicit
15485 statement. Change the type to BT_UNKNOWN, both because it is so
15486 and to prevent an ICE. */
15487 if (sym->ts.type == BT_DERIVED && !sym->attr.is_iso_c
15488 && sym->ts.u.derived->components == NULL
15489 && !sym->ts.u.derived->attr.zero_comp)
15490 {
15491 gfc_error ("The derived type %qs at %L is of type %qs, "
15492 "which has not been defined", sym->name,
15493 &sym->declared_at, sym->ts.u.derived->name);
15494 sym->ts.type = BT_UNKNOWN;
15495 return;
15496 }
15497
15498 /* Make sure that the derived type has been resolved and that the
15499 derived type is visible in the symbol's namespace, if it is a
15500 module function and is not PRIVATE. */
15501 if (sym->ts.type == BT_DERIVED
15502 && sym->ts.u.derived->attr.use_assoc
15503 && sym->ns->proc_name
15504 && sym->ns->proc_name->attr.flavor == FL_MODULE
15505 && !resolve_fl_derived (sym->ts.u.derived))
15506 return;
15507
15508 /* Unless the derived-type declaration is use associated, Fortran 95
15509 does not allow public entries of private derived types.
15510 See 4.4.1 (F95) and 4.5.1.1 (F2003); and related interpretation
15511 161 in 95-006r3. */
15512 if (sym->ts.type == BT_DERIVED
15513 && sym->ns->proc_name && sym->ns->proc_name->attr.flavor == FL_MODULE
15514 && !sym->ts.u.derived->attr.use_assoc
15515 && gfc_check_symbol_access (sym)
15516 && !gfc_check_symbol_access (sym->ts.u.derived)
15517 && !gfc_notify_std (GFC_STD_F2003, "PUBLIC %s %qs at %L of PRIVATE "
15518 "derived type %qs",
15519 (sym->attr.flavor == FL_PARAMETER)
15520 ? "parameter" : "variable",
15521 sym->name, &sym->declared_at,
15522 sym->ts.u.derived->name))
15523 return;
15524
15525 /* F2008, C1302. */
15526 if (sym->ts.type == BT_DERIVED
15527 && ((sym->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
15528 && sym->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)
15529 || sym->ts.u.derived->attr.lock_comp)
15530 && !sym->attr.codimension && !sym->ts.u.derived->attr.coarray_comp)
15531 {
15532 gfc_error ("Variable %s at %L of type LOCK_TYPE or with subcomponent of "
15533 "type LOCK_TYPE must be a coarray", sym->name,
15534 &sym->declared_at);
15535 return;
15536 }
15537
15538 /* TS18508, C702/C703. */
15539 if (sym->ts.type == BT_DERIVED
15540 && ((sym->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
15541 && sym->ts.u.derived->intmod_sym_id == ISOFORTRAN_EVENT_TYPE)
15542 || sym->ts.u.derived->attr.event_comp)
15543 && !sym->attr.codimension && !sym->ts.u.derived->attr.coarray_comp)
15544 {
15545 gfc_error ("Variable %s at %L of type EVENT_TYPE or with subcomponent of "
15546 "type EVENT_TYPE must be a coarray", sym->name,
15547 &sym->declared_at);
15548 return;
15549 }
15550
15551 /* An assumed-size array with INTENT(OUT) shall not be of a type for which
15552 default initialization is defined (5.1.2.4.4). */
15553 if (sym->ts.type == BT_DERIVED
15554 && sym->attr.dummy
15555 && sym->attr.intent == INTENT_OUT
15556 && sym->as
15557 && sym->as->type == AS_ASSUMED_SIZE)
15558 {
15559 for (c = sym->ts.u.derived->components; c; c = c->next)
15560 {
15561 if (c->initializer)
15562 {
15563 gfc_error ("The INTENT(OUT) dummy argument %qs at %L is "
15564 "ASSUMED SIZE and so cannot have a default initializer",
15565 sym->name, &sym->declared_at);
15566 return;
15567 }
15568 }
15569 }
15570
15571 /* F2008, C542. */
15572 if (sym->ts.type == BT_DERIVED && sym->attr.dummy
15573 && sym->attr.intent == INTENT_OUT && sym->attr.lock_comp)
15574 {
15575 gfc_error ("Dummy argument %qs at %L of LOCK_TYPE shall not be "
15576 "INTENT(OUT)", sym->name, &sym->declared_at);
15577 return;
15578 }
15579
15580 /* TS18508. */
15581 if (sym->ts.type == BT_DERIVED && sym->attr.dummy
15582 && sym->attr.intent == INTENT_OUT && sym->attr.event_comp)
15583 {
15584 gfc_error ("Dummy argument %qs at %L of EVENT_TYPE shall not be "
15585 "INTENT(OUT)", sym->name, &sym->declared_at);
15586 return;
15587 }
15588
15589 /* F2008, C525. */
15590 if ((((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
15591 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
15592 && CLASS_DATA (sym)->attr.coarray_comp))
15593 || class_attr.codimension)
15594 && (sym->attr.result || sym->result == sym))
15595 {
15596 gfc_error ("Function result %qs at %L shall not be a coarray or have "
15597 "a coarray component", sym->name, &sym->declared_at);
15598 return;
15599 }
15600
15601 /* F2008, C524. */
15602 if (sym->attr.codimension && sym->ts.type == BT_DERIVED
15603 && sym->ts.u.derived->ts.is_iso_c)
15604 {
15605 gfc_error ("Variable %qs at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) "
15606 "shall not be a coarray", sym->name, &sym->declared_at);
15607 return;
15608 }
15609
15610 /* F2008, C525. */
15611 if (((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
15612 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
15613 && CLASS_DATA (sym)->attr.coarray_comp))
15614 && (class_attr.codimension || class_attr.pointer || class_attr.dimension
15615 || class_attr.allocatable))
15616 {
15617 gfc_error ("Variable %qs at %L with coarray component shall be a "
15618 "nonpointer, nonallocatable scalar, which is not a coarray",
15619 sym->name, &sym->declared_at);
15620 return;
15621 }
15622
15623 /* F2008, C526. The function-result case was handled above. */
15624 if (class_attr.codimension
15625 && !(class_attr.allocatable || sym->attr.dummy || sym->attr.save
15626 || sym->attr.select_type_temporary
15627 || sym->attr.associate_var
15628 || (sym->ns->save_all && !sym->attr.automatic)
15629 || sym->ns->proc_name->attr.flavor == FL_MODULE
15630 || sym->ns->proc_name->attr.is_main_program
15631 || sym->attr.function || sym->attr.result || sym->attr.use_assoc))
15632 {
15633 gfc_error ("Variable %qs at %L is a coarray and is not ALLOCATABLE, SAVE "
15634 "nor a dummy argument", sym->name, &sym->declared_at);
15635 return;
15636 }
15637 /* F2008, C528. */
15638 else if (class_attr.codimension && !sym->attr.select_type_temporary
15639 && !class_attr.allocatable && as && as->cotype == AS_DEFERRED)
15640 {
15641 gfc_error ("Coarray variable %qs at %L shall not have codimensions with "
15642 "deferred shape", sym->name, &sym->declared_at);
15643 return;
15644 }
15645 else if (class_attr.codimension && class_attr.allocatable && as
15646 && (as->cotype != AS_DEFERRED || as->type != AS_DEFERRED))
15647 {
15648 gfc_error ("Allocatable coarray variable %qs at %L must have "
15649 "deferred shape", sym->name, &sym->declared_at);
15650 return;
15651 }
15652
15653 /* F2008, C541. */
15654 if ((((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
15655 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
15656 && CLASS_DATA (sym)->attr.coarray_comp))
15657 || (class_attr.codimension && class_attr.allocatable))
15658 && sym->attr.dummy && sym->attr.intent == INTENT_OUT)
15659 {
15660 gfc_error ("Variable %qs at %L is INTENT(OUT) and can thus not be an "
15661 "allocatable coarray or have coarray components",
15662 sym->name, &sym->declared_at);
15663 return;
15664 }
15665
15666 if (class_attr.codimension && sym->attr.dummy
15667 && sym->ns->proc_name && sym->ns->proc_name->attr.is_bind_c)
15668 {
15669 gfc_error ("Coarray dummy variable %qs at %L not allowed in BIND(C) "
15670 "procedure %qs", sym->name, &sym->declared_at,
15671 sym->ns->proc_name->name);
15672 return;
15673 }
15674
15675 if (sym->ts.type == BT_LOGICAL
15676 && ((sym->attr.function && sym->attr.is_bind_c && sym->result == sym)
15677 || ((sym->attr.dummy || sym->attr.result) && sym->ns->proc_name
15678 && sym->ns->proc_name->attr.is_bind_c)))
15679 {
15680 int i;
15681 for (i = 0; gfc_logical_kinds[i].kind; i++)
15682 if (gfc_logical_kinds[i].kind == sym->ts.kind)
15683 break;
15684 if (!gfc_logical_kinds[i].c_bool && sym->attr.dummy
15685 && !gfc_notify_std (GFC_STD_GNU, "LOGICAL dummy argument %qs at "
15686 "%L with non-C_Bool kind in BIND(C) procedure "
15687 "%qs", sym->name, &sym->declared_at,
15688 sym->ns->proc_name->name))
15689 return;
15690 else if (!gfc_logical_kinds[i].c_bool
15691 && !gfc_notify_std (GFC_STD_GNU, "LOGICAL result variable "
15692 "%qs at %L with non-C_Bool kind in "
15693 "BIND(C) procedure %qs", sym->name,
15694 &sym->declared_at,
15695 sym->attr.function ? sym->name
15696 : sym->ns->proc_name->name))
15697 return;
15698 }
15699
15700 switch (sym->attr.flavor)
15701 {
15702 case FL_VARIABLE:
15703 if (!resolve_fl_variable (sym, mp_flag))
15704 return;
15705 break;
15706
15707 case FL_PROCEDURE:
15708 if (sym->formal && !sym->formal_ns)
15709 {
15710 /* Check that none of the arguments are a namelist. */
15711 gfc_formal_arglist *formal = sym->formal;
15712
15713 for (; formal; formal = formal->next)
15714 if (formal->sym && formal->sym->attr.flavor == FL_NAMELIST)
15715 {
15716 gfc_error ("Namelist %qs cannot be an argument to "
15717 "subroutine or function at %L",
15718 formal->sym->name, &sym->declared_at);
15719 return;
15720 }
15721 }
15722
15723 if (!resolve_fl_procedure (sym, mp_flag))
15724 return;
15725 break;
15726
15727 case FL_NAMELIST:
15728 if (!resolve_fl_namelist (sym))
15729 return;
15730 break;
15731
15732 case FL_PARAMETER:
15733 if (!resolve_fl_parameter (sym))
15734 return;
15735 break;
15736
15737 default:
15738 break;
15739 }
15740
15741 /* Resolve array specifier. Check as well some constraints
15742 on COMMON blocks. */
15743
15744 check_constant = sym->attr.in_common && !sym->attr.pointer;
15745
15746 /* Set the formal_arg_flag so that check_conflict will not throw
15747 an error for host associated variables in the specification
15748 expression for an array_valued function. */
15749 if ((sym->attr.function || sym->attr.result) && sym->as)
15750 formal_arg_flag = true;
15751
15752 saved_specification_expr = specification_expr;
15753 specification_expr = true;
15754 gfc_resolve_array_spec (sym->as, check_constant);
15755 specification_expr = saved_specification_expr;
15756
15757 formal_arg_flag = false;
15758
15759 /* Resolve formal namespaces. */
15760 if (sym->formal_ns && sym->formal_ns != gfc_current_ns
15761 && !sym->attr.contained && !sym->attr.intrinsic)
15762 gfc_resolve (sym->formal_ns);
15763
15764 /* Make sure the formal namespace is present. */
15765 if (sym->formal && !sym->formal_ns)
15766 {
15767 gfc_formal_arglist *formal = sym->formal;
15768 while (formal && !formal->sym)
15769 formal = formal->next;
15770
15771 if (formal)
15772 {
15773 sym->formal_ns = formal->sym->ns;
15774 if (sym->ns != formal->sym->ns)
15775 sym->formal_ns->refs++;
15776 }
15777 }
15778
15779 /* Check threadprivate restrictions. */
15780 if (sym->attr.threadprivate && !sym->attr.save
15781 && !(sym->ns->save_all && !sym->attr.automatic)
15782 && (!sym->attr.in_common
15783 && sym->module == NULL
15784 && (sym->ns->proc_name == NULL
15785 || sym->ns->proc_name->attr.flavor != FL_MODULE)))
15786 gfc_error ("Threadprivate at %L isn't SAVEd", &sym->declared_at);
15787
15788 /* Check omp declare target restrictions. */
15789 if (sym->attr.omp_declare_target
15790 && sym->attr.flavor == FL_VARIABLE
15791 && !sym->attr.save
15792 && !(sym->ns->save_all && !sym->attr.automatic)
15793 && (!sym->attr.in_common
15794 && sym->module == NULL
15795 && (sym->ns->proc_name == NULL
15796 || sym->ns->proc_name->attr.flavor != FL_MODULE)))
15797 gfc_error ("!$OMP DECLARE TARGET variable %qs at %L isn't SAVEd",
15798 sym->name, &sym->declared_at);
15799
15800 /* If we have come this far we can apply default-initializers, as
15801 described in 14.7.5, to those variables that have not already
15802 been assigned one. */
15803 if (sym->ts.type == BT_DERIVED
15804 && !sym->value
15805 && !sym->attr.allocatable
15806 && !sym->attr.alloc_comp)
15807 {
15808 symbol_attribute *a = &sym->attr;
15809
15810 if ((!a->save && !a->dummy && !a->pointer
15811 && !a->in_common && !a->use_assoc
15812 && a->referenced
15813 && !((a->function || a->result)
15814 && (!a->dimension
15815 || sym->ts.u.derived->attr.alloc_comp
15816 || sym->ts.u.derived->attr.pointer_comp))
15817 && !(a->function && sym != sym->result))
15818 || (a->dummy && a->intent == INTENT_OUT && !a->pointer))
15819 apply_default_init (sym);
15820 else if (a->function && sym->result && a->access != ACCESS_PRIVATE
15821 && (sym->ts.u.derived->attr.alloc_comp
15822 || sym->ts.u.derived->attr.pointer_comp))
15823 /* Mark the result symbol to be referenced, when it has allocatable
15824 components. */
15825 sym->result->attr.referenced = 1;
15826 }
15827
15828 if (sym->ts.type == BT_CLASS && sym->ns == gfc_current_ns
15829 && sym->attr.dummy && sym->attr.intent == INTENT_OUT
15830 && !CLASS_DATA (sym)->attr.class_pointer
15831 && !CLASS_DATA (sym)->attr.allocatable)
15832 apply_default_init (sym);
15833
15834 /* If this symbol has a type-spec, check it. */
15835 if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER
15836 || (sym->attr.flavor == FL_PROCEDURE && sym->attr.function))
15837 if (!resolve_typespec_used (&sym->ts, &sym->declared_at, sym->name))
15838 return;
15839
15840 if (sym->param_list)
15841 resolve_pdt (sym);
15842 }
15843
15844
15845 /************* Resolve DATA statements *************/
15846
15847 static struct
15848 {
15849 gfc_data_value *vnode;
15850 mpz_t left;
15851 }
15852 values;
15853
15854
15855 /* Advance the values structure to point to the next value in the data list. */
15856
15857 static bool
15858 next_data_value (void)
15859 {
15860 while (mpz_cmp_ui (values.left, 0) == 0)
15861 {
15862
15863 if (values.vnode->next == NULL)
15864 return false;
15865
15866 values.vnode = values.vnode->next;
15867 mpz_set (values.left, values.vnode->repeat);
15868 }
15869
15870 return true;
15871 }
15872
15873
15874 static bool
15875 check_data_variable (gfc_data_variable *var, locus *where)
15876 {
15877 gfc_expr *e;
15878 mpz_t size;
15879 mpz_t offset;
15880 bool t;
15881 ar_type mark = AR_UNKNOWN;
15882 int i;
15883 mpz_t section_index[GFC_MAX_DIMENSIONS];
15884 gfc_ref *ref;
15885 gfc_array_ref *ar;
15886 gfc_symbol *sym;
15887 int has_pointer;
15888
15889 if (!gfc_resolve_expr (var->expr))
15890 return false;
15891
15892 ar = NULL;
15893 mpz_init_set_si (offset, 0);
15894 e = var->expr;
15895
15896 if (e->expr_type == EXPR_FUNCTION && e->value.function.isym
15897 && e->value.function.isym->id == GFC_ISYM_CAF_GET)
15898 e = e->value.function.actual->expr;
15899
15900 if (e->expr_type != EXPR_VARIABLE)
15901 {
15902 gfc_error ("Expecting definable entity near %L", where);
15903 return false;
15904 }
15905
15906 sym = e->symtree->n.sym;
15907
15908 if (sym->ns->is_block_data && !sym->attr.in_common)
15909 {
15910 gfc_error ("BLOCK DATA element %qs at %L must be in COMMON",
15911 sym->name, &sym->declared_at);
15912 return false;
15913 }
15914
15915 if (e->ref == NULL && sym->as)
15916 {
15917 gfc_error ("DATA array %qs at %L must be specified in a previous"
15918 " declaration", sym->name, where);
15919 return false;
15920 }
15921
15922 if (gfc_is_coindexed (e))
15923 {
15924 gfc_error ("DATA element %qs at %L cannot have a coindex", sym->name,
15925 where);
15926 return false;
15927 }
15928
15929 has_pointer = sym->attr.pointer;
15930
15931 for (ref = e->ref; ref; ref = ref->next)
15932 {
15933 if (ref->type == REF_COMPONENT && ref->u.c.component->attr.pointer)
15934 has_pointer = 1;
15935
15936 if (has_pointer)
15937 {
15938 if (ref->type == REF_ARRAY && ref->u.ar.type != AR_FULL)
15939 {
15940 gfc_error ("DATA element %qs at %L is a pointer and so must "
15941 "be a full array", sym->name, where);
15942 return false;
15943 }
15944
15945 if (values.vnode->expr->expr_type == EXPR_CONSTANT)
15946 {
15947 gfc_error ("DATA object near %L has the pointer attribute "
15948 "and the corresponding DATA value is not a valid "
15949 "initial-data-target", where);
15950 return false;
15951 }
15952 }
15953 }
15954
15955 if (e->rank == 0 || has_pointer)
15956 {
15957 mpz_init_set_ui (size, 1);
15958 ref = NULL;
15959 }
15960 else
15961 {
15962 ref = e->ref;
15963
15964 /* Find the array section reference. */
15965 for (ref = e->ref; ref; ref = ref->next)
15966 {
15967 if (ref->type != REF_ARRAY)
15968 continue;
15969 if (ref->u.ar.type == AR_ELEMENT)
15970 continue;
15971 break;
15972 }
15973 gcc_assert (ref);
15974
15975 /* Set marks according to the reference pattern. */
15976 switch (ref->u.ar.type)
15977 {
15978 case AR_FULL:
15979 mark = AR_FULL;
15980 break;
15981
15982 case AR_SECTION:
15983 ar = &ref->u.ar;
15984 /* Get the start position of array section. */
15985 gfc_get_section_index (ar, section_index, &offset);
15986 mark = AR_SECTION;
15987 break;
15988
15989 default:
15990 gcc_unreachable ();
15991 }
15992
15993 if (!gfc_array_size (e, &size))
15994 {
15995 gfc_error ("Nonconstant array section at %L in DATA statement",
15996 where);
15997 mpz_clear (offset);
15998 return false;
15999 }
16000 }
16001
16002 t = true;
16003
16004 while (mpz_cmp_ui (size, 0) > 0)
16005 {
16006 if (!next_data_value ())
16007 {
16008 gfc_error ("DATA statement at %L has more variables than values",
16009 where);
16010 t = false;
16011 break;
16012 }
16013
16014 t = gfc_check_assign (var->expr, values.vnode->expr, 0);
16015 if (!t)
16016 break;
16017
16018 /* If we have more than one element left in the repeat count,
16019 and we have more than one element left in the target variable,
16020 then create a range assignment. */
16021 /* FIXME: Only done for full arrays for now, since array sections
16022 seem tricky. */
16023 if (mark == AR_FULL && ref && ref->next == NULL
16024 && mpz_cmp_ui (values.left, 1) > 0 && mpz_cmp_ui (size, 1) > 0)
16025 {
16026 mpz_t range;
16027
16028 if (mpz_cmp (size, values.left) >= 0)
16029 {
16030 mpz_init_set (range, values.left);
16031 mpz_sub (size, size, values.left);
16032 mpz_set_ui (values.left, 0);
16033 }
16034 else
16035 {
16036 mpz_init_set (range, size);
16037 mpz_sub (values.left, values.left, size);
16038 mpz_set_ui (size, 0);
16039 }
16040
16041 t = gfc_assign_data_value (var->expr, values.vnode->expr,
16042 offset, &range);
16043
16044 mpz_add (offset, offset, range);
16045 mpz_clear (range);
16046
16047 if (!t)
16048 break;
16049 }
16050
16051 /* Assign initial value to symbol. */
16052 else
16053 {
16054 mpz_sub_ui (values.left, values.left, 1);
16055 mpz_sub_ui (size, size, 1);
16056
16057 t = gfc_assign_data_value (var->expr, values.vnode->expr,
16058 offset, NULL);
16059 if (!t)
16060 break;
16061
16062 if (mark == AR_FULL)
16063 mpz_add_ui (offset, offset, 1);
16064
16065 /* Modify the array section indexes and recalculate the offset
16066 for next element. */
16067 else if (mark == AR_SECTION)
16068 gfc_advance_section (section_index, ar, &offset);
16069 }
16070 }
16071
16072 if (mark == AR_SECTION)
16073 {
16074 for (i = 0; i < ar->dimen; i++)
16075 mpz_clear (section_index[i]);
16076 }
16077
16078 mpz_clear (size);
16079 mpz_clear (offset);
16080
16081 return t;
16082 }
16083
16084
16085 static bool traverse_data_var (gfc_data_variable *, locus *);
16086
16087 /* Iterate over a list of elements in a DATA statement. */
16088
16089 static bool
16090 traverse_data_list (gfc_data_variable *var, locus *where)
16091 {
16092 mpz_t trip;
16093 iterator_stack frame;
16094 gfc_expr *e, *start, *end, *step;
16095 bool retval = true;
16096
16097 mpz_init (frame.value);
16098 mpz_init (trip);
16099
16100 start = gfc_copy_expr (var->iter.start);
16101 end = gfc_copy_expr (var->iter.end);
16102 step = gfc_copy_expr (var->iter.step);
16103
16104 if (!gfc_simplify_expr (start, 1)
16105 || start->expr_type != EXPR_CONSTANT)
16106 {
16107 gfc_error ("start of implied-do loop at %L could not be "
16108 "simplified to a constant value", &start->where);
16109 retval = false;
16110 goto cleanup;
16111 }
16112 if (!gfc_simplify_expr (end, 1)
16113 || end->expr_type != EXPR_CONSTANT)
16114 {
16115 gfc_error ("end of implied-do loop at %L could not be "
16116 "simplified to a constant value", &start->where);
16117 retval = false;
16118 goto cleanup;
16119 }
16120 if (!gfc_simplify_expr (step, 1)
16121 || step->expr_type != EXPR_CONSTANT)
16122 {
16123 gfc_error ("step of implied-do loop at %L could not be "
16124 "simplified to a constant value", &start->where);
16125 retval = false;
16126 goto cleanup;
16127 }
16128
16129 mpz_set (trip, end->value.integer);
16130 mpz_sub (trip, trip, start->value.integer);
16131 mpz_add (trip, trip, step->value.integer);
16132
16133 mpz_div (trip, trip, step->value.integer);
16134
16135 mpz_set (frame.value, start->value.integer);
16136
16137 frame.prev = iter_stack;
16138 frame.variable = var->iter.var->symtree;
16139 iter_stack = &frame;
16140
16141 while (mpz_cmp_ui (trip, 0) > 0)
16142 {
16143 if (!traverse_data_var (var->list, where))
16144 {
16145 retval = false;
16146 goto cleanup;
16147 }
16148
16149 e = gfc_copy_expr (var->expr);
16150 if (!gfc_simplify_expr (e, 1))
16151 {
16152 gfc_free_expr (e);
16153 retval = false;
16154 goto cleanup;
16155 }
16156
16157 mpz_add (frame.value, frame.value, step->value.integer);
16158
16159 mpz_sub_ui (trip, trip, 1);
16160 }
16161
16162 cleanup:
16163 mpz_clear (frame.value);
16164 mpz_clear (trip);
16165
16166 gfc_free_expr (start);
16167 gfc_free_expr (end);
16168 gfc_free_expr (step);
16169
16170 iter_stack = frame.prev;
16171 return retval;
16172 }
16173
16174
16175 /* Type resolve variables in the variable list of a DATA statement. */
16176
16177 static bool
16178 traverse_data_var (gfc_data_variable *var, locus *where)
16179 {
16180 bool t;
16181
16182 for (; var; var = var->next)
16183 {
16184 if (var->expr == NULL)
16185 t = traverse_data_list (var, where);
16186 else
16187 t = check_data_variable (var, where);
16188
16189 if (!t)
16190 return false;
16191 }
16192
16193 return true;
16194 }
16195
16196
16197 /* Resolve the expressions and iterators associated with a data statement.
16198 This is separate from the assignment checking because data lists should
16199 only be resolved once. */
16200
16201 static bool
16202 resolve_data_variables (gfc_data_variable *d)
16203 {
16204 for (; d; d = d->next)
16205 {
16206 if (d->list == NULL)
16207 {
16208 if (!gfc_resolve_expr (d->expr))
16209 return false;
16210 }
16211 else
16212 {
16213 if (!gfc_resolve_iterator (&d->iter, false, true))
16214 return false;
16215
16216 if (!resolve_data_variables (d->list))
16217 return false;
16218 }
16219 }
16220
16221 return true;
16222 }
16223
16224
16225 /* Resolve a single DATA statement. We implement this by storing a pointer to
16226 the value list into static variables, and then recursively traversing the
16227 variables list, expanding iterators and such. */
16228
16229 static void
16230 resolve_data (gfc_data *d)
16231 {
16232
16233 if (!resolve_data_variables (d->var))
16234 return;
16235
16236 values.vnode = d->value;
16237 if (d->value == NULL)
16238 mpz_set_ui (values.left, 0);
16239 else
16240 mpz_set (values.left, d->value->repeat);
16241
16242 if (!traverse_data_var (d->var, &d->where))
16243 return;
16244
16245 /* At this point, we better not have any values left. */
16246
16247 if (next_data_value ())
16248 gfc_error ("DATA statement at %L has more values than variables",
16249 &d->where);
16250 }
16251
16252
16253 /* 12.6 Constraint: In a pure subprogram any variable which is in common or
16254 accessed by host or use association, is a dummy argument to a pure function,
16255 is a dummy argument with INTENT (IN) to a pure subroutine, or an object that
16256 is storage associated with any such variable, shall not be used in the
16257 following contexts: (clients of this function). */
16258
16259 /* Determines if a variable is not 'pure', i.e., not assignable within a pure
16260 procedure. Returns zero if assignment is OK, nonzero if there is a
16261 problem. */
16262 int
16263 gfc_impure_variable (gfc_symbol *sym)
16264 {
16265 gfc_symbol *proc;
16266 gfc_namespace *ns;
16267
16268 if (sym->attr.use_assoc || sym->attr.in_common)
16269 return 1;
16270
16271 /* Check if the symbol's ns is inside the pure procedure. */
16272 for (ns = gfc_current_ns; ns; ns = ns->parent)
16273 {
16274 if (ns == sym->ns)
16275 break;
16276 if (ns->proc_name->attr.flavor == FL_PROCEDURE && !sym->attr.function)
16277 return 1;
16278 }
16279
16280 proc = sym->ns->proc_name;
16281 if (sym->attr.dummy
16282 && ((proc->attr.subroutine && sym->attr.intent == INTENT_IN)
16283 || proc->attr.function))
16284 return 1;
16285
16286 /* TODO: Sort out what can be storage associated, if anything, and include
16287 it here. In principle equivalences should be scanned but it does not
16288 seem to be possible to storage associate an impure variable this way. */
16289 return 0;
16290 }
16291
16292
16293 /* Test whether a symbol is pure or not. For a NULL pointer, checks if the
16294 current namespace is inside a pure procedure. */
16295
16296 int
16297 gfc_pure (gfc_symbol *sym)
16298 {
16299 symbol_attribute attr;
16300 gfc_namespace *ns;
16301
16302 if (sym == NULL)
16303 {
16304 /* Check if the current namespace or one of its parents
16305 belongs to a pure procedure. */
16306 for (ns = gfc_current_ns; ns; ns = ns->parent)
16307 {
16308 sym = ns->proc_name;
16309 if (sym == NULL)
16310 return 0;
16311 attr = sym->attr;
16312 if (attr.flavor == FL_PROCEDURE && attr.pure)
16313 return 1;
16314 }
16315 return 0;
16316 }
16317
16318 attr = sym->attr;
16319
16320 return attr.flavor == FL_PROCEDURE && attr.pure;
16321 }
16322
16323
16324 /* Test whether a symbol is implicitly pure or not. For a NULL pointer,
16325 checks if the current namespace is implicitly pure. Note that this
16326 function returns false for a PURE procedure. */
16327
16328 int
16329 gfc_implicit_pure (gfc_symbol *sym)
16330 {
16331 gfc_namespace *ns;
16332
16333 if (sym == NULL)
16334 {
16335 /* Check if the current procedure is implicit_pure. Walk up
16336 the procedure list until we find a procedure. */
16337 for (ns = gfc_current_ns; ns; ns = ns->parent)
16338 {
16339 sym = ns->proc_name;
16340 if (sym == NULL)
16341 return 0;
16342
16343 if (sym->attr.flavor == FL_PROCEDURE)
16344 break;
16345 }
16346 }
16347
16348 return sym->attr.flavor == FL_PROCEDURE && sym->attr.implicit_pure
16349 && !sym->attr.pure;
16350 }
16351
16352
16353 void
16354 gfc_unset_implicit_pure (gfc_symbol *sym)
16355 {
16356 gfc_namespace *ns;
16357
16358 if (sym == NULL)
16359 {
16360 /* Check if the current procedure is implicit_pure. Walk up
16361 the procedure list until we find a procedure. */
16362 for (ns = gfc_current_ns; ns; ns = ns->parent)
16363 {
16364 sym = ns->proc_name;
16365 if (sym == NULL)
16366 return;
16367
16368 if (sym->attr.flavor == FL_PROCEDURE)
16369 break;
16370 }
16371 }
16372
16373 if (sym->attr.flavor == FL_PROCEDURE)
16374 sym->attr.implicit_pure = 0;
16375 else
16376 sym->attr.pure = 0;
16377 }
16378
16379
16380 /* Test whether the current procedure is elemental or not. */
16381
16382 int
16383 gfc_elemental (gfc_symbol *sym)
16384 {
16385 symbol_attribute attr;
16386
16387 if (sym == NULL)
16388 sym = gfc_current_ns->proc_name;
16389 if (sym == NULL)
16390 return 0;
16391 attr = sym->attr;
16392
16393 return attr.flavor == FL_PROCEDURE && attr.elemental;
16394 }
16395
16396
16397 /* Warn about unused labels. */
16398
16399 static void
16400 warn_unused_fortran_label (gfc_st_label *label)
16401 {
16402 if (label == NULL)
16403 return;
16404
16405 warn_unused_fortran_label (label->left);
16406
16407 if (label->defined == ST_LABEL_UNKNOWN)
16408 return;
16409
16410 switch (label->referenced)
16411 {
16412 case ST_LABEL_UNKNOWN:
16413 gfc_warning (OPT_Wunused_label, "Label %d at %L defined but not used",
16414 label->value, &label->where);
16415 break;
16416
16417 case ST_LABEL_BAD_TARGET:
16418 gfc_warning (OPT_Wunused_label,
16419 "Label %d at %L defined but cannot be used",
16420 label->value, &label->where);
16421 break;
16422
16423 default:
16424 break;
16425 }
16426
16427 warn_unused_fortran_label (label->right);
16428 }
16429
16430
16431 /* Returns the sequence type of a symbol or sequence. */
16432
16433 static seq_type
16434 sequence_type (gfc_typespec ts)
16435 {
16436 seq_type result;
16437 gfc_component *c;
16438
16439 switch (ts.type)
16440 {
16441 case BT_DERIVED:
16442
16443 if (ts.u.derived->components == NULL)
16444 return SEQ_NONDEFAULT;
16445
16446 result = sequence_type (ts.u.derived->components->ts);
16447 for (c = ts.u.derived->components->next; c; c = c->next)
16448 if (sequence_type (c->ts) != result)
16449 return SEQ_MIXED;
16450
16451 return result;
16452
16453 case BT_CHARACTER:
16454 if (ts.kind != gfc_default_character_kind)
16455 return SEQ_NONDEFAULT;
16456
16457 return SEQ_CHARACTER;
16458
16459 case BT_INTEGER:
16460 if (ts.kind != gfc_default_integer_kind)
16461 return SEQ_NONDEFAULT;
16462
16463 return SEQ_NUMERIC;
16464
16465 case BT_REAL:
16466 if (!(ts.kind == gfc_default_real_kind
16467 || ts.kind == gfc_default_double_kind))
16468 return SEQ_NONDEFAULT;
16469
16470 return SEQ_NUMERIC;
16471
16472 case BT_COMPLEX:
16473 if (ts.kind != gfc_default_complex_kind)
16474 return SEQ_NONDEFAULT;
16475
16476 return SEQ_NUMERIC;
16477
16478 case BT_LOGICAL:
16479 if (ts.kind != gfc_default_logical_kind)
16480 return SEQ_NONDEFAULT;
16481
16482 return SEQ_NUMERIC;
16483
16484 default:
16485 return SEQ_NONDEFAULT;
16486 }
16487 }
16488
16489
16490 /* Resolve derived type EQUIVALENCE object. */
16491
16492 static bool
16493 resolve_equivalence_derived (gfc_symbol *derived, gfc_symbol *sym, gfc_expr *e)
16494 {
16495 gfc_component *c = derived->components;
16496
16497 if (!derived)
16498 return true;
16499
16500 /* Shall not be an object of nonsequence derived type. */
16501 if (!derived->attr.sequence)
16502 {
16503 gfc_error ("Derived type variable %qs at %L must have SEQUENCE "
16504 "attribute to be an EQUIVALENCE object", sym->name,
16505 &e->where);
16506 return false;
16507 }
16508
16509 /* Shall not have allocatable components. */
16510 if (derived->attr.alloc_comp)
16511 {
16512 gfc_error ("Derived type variable %qs at %L cannot have ALLOCATABLE "
16513 "components to be an EQUIVALENCE object",sym->name,
16514 &e->where);
16515 return false;
16516 }
16517
16518 if (sym->attr.in_common && gfc_has_default_initializer (sym->ts.u.derived))
16519 {
16520 gfc_error ("Derived type variable %qs at %L with default "
16521 "initialization cannot be in EQUIVALENCE with a variable "
16522 "in COMMON", sym->name, &e->where);
16523 return false;
16524 }
16525
16526 for (; c ; c = c->next)
16527 {
16528 if (gfc_bt_struct (c->ts.type)
16529 && (!resolve_equivalence_derived(c->ts.u.derived, sym, e)))
16530 return false;
16531
16532 /* Shall not be an object of sequence derived type containing a pointer
16533 in the structure. */
16534 if (c->attr.pointer)
16535 {
16536 gfc_error ("Derived type variable %qs at %L with pointer "
16537 "component(s) cannot be an EQUIVALENCE object",
16538 sym->name, &e->where);
16539 return false;
16540 }
16541 }
16542 return true;
16543 }
16544
16545
16546 /* Resolve equivalence object.
16547 An EQUIVALENCE object shall not be a dummy argument, a pointer, a target,
16548 an allocatable array, an object of nonsequence derived type, an object of
16549 sequence derived type containing a pointer at any level of component
16550 selection, an automatic object, a function name, an entry name, a result
16551 name, a named constant, a structure component, or a subobject of any of
16552 the preceding objects. A substring shall not have length zero. A
16553 derived type shall not have components with default initialization nor
16554 shall two objects of an equivalence group be initialized.
16555 Either all or none of the objects shall have an protected attribute.
16556 The simple constraints are done in symbol.c(check_conflict) and the rest
16557 are implemented here. */
16558
16559 static void
16560 resolve_equivalence (gfc_equiv *eq)
16561 {
16562 gfc_symbol *sym;
16563 gfc_symbol *first_sym;
16564 gfc_expr *e;
16565 gfc_ref *r;
16566 locus *last_where = NULL;
16567 seq_type eq_type, last_eq_type;
16568 gfc_typespec *last_ts;
16569 int object, cnt_protected;
16570 const char *msg;
16571
16572 last_ts = &eq->expr->symtree->n.sym->ts;
16573
16574 first_sym = eq->expr->symtree->n.sym;
16575
16576 cnt_protected = 0;
16577
16578 for (object = 1; eq; eq = eq->eq, object++)
16579 {
16580 e = eq->expr;
16581
16582 e->ts = e->symtree->n.sym->ts;
16583 /* match_varspec might not know yet if it is seeing
16584 array reference or substring reference, as it doesn't
16585 know the types. */
16586 if (e->ref && e->ref->type == REF_ARRAY)
16587 {
16588 gfc_ref *ref = e->ref;
16589 sym = e->symtree->n.sym;
16590
16591 if (sym->attr.dimension)
16592 {
16593 ref->u.ar.as = sym->as;
16594 ref = ref->next;
16595 }
16596
16597 /* For substrings, convert REF_ARRAY into REF_SUBSTRING. */
16598 if (e->ts.type == BT_CHARACTER
16599 && ref
16600 && ref->type == REF_ARRAY
16601 && ref->u.ar.dimen == 1
16602 && ref->u.ar.dimen_type[0] == DIMEN_RANGE
16603 && ref->u.ar.stride[0] == NULL)
16604 {
16605 gfc_expr *start = ref->u.ar.start[0];
16606 gfc_expr *end = ref->u.ar.end[0];
16607 void *mem = NULL;
16608
16609 /* Optimize away the (:) reference. */
16610 if (start == NULL && end == NULL)
16611 {
16612 if (e->ref == ref)
16613 e->ref = ref->next;
16614 else
16615 e->ref->next = ref->next;
16616 mem = ref;
16617 }
16618 else
16619 {
16620 ref->type = REF_SUBSTRING;
16621 if (start == NULL)
16622 start = gfc_get_int_expr (gfc_charlen_int_kind,
16623 NULL, 1);
16624 ref->u.ss.start = start;
16625 if (end == NULL && e->ts.u.cl)
16626 end = gfc_copy_expr (e->ts.u.cl->length);
16627 ref->u.ss.end = end;
16628 ref->u.ss.length = e->ts.u.cl;
16629 e->ts.u.cl = NULL;
16630 }
16631 ref = ref->next;
16632 free (mem);
16633 }
16634
16635 /* Any further ref is an error. */
16636 if (ref)
16637 {
16638 gcc_assert (ref->type == REF_ARRAY);
16639 gfc_error ("Syntax error in EQUIVALENCE statement at %L",
16640 &ref->u.ar.where);
16641 continue;
16642 }
16643 }
16644
16645 if (!gfc_resolve_expr (e))
16646 continue;
16647
16648 sym = e->symtree->n.sym;
16649
16650 if (sym->attr.is_protected)
16651 cnt_protected++;
16652 if (cnt_protected > 0 && cnt_protected != object)
16653 {
16654 gfc_error ("Either all or none of the objects in the "
16655 "EQUIVALENCE set at %L shall have the "
16656 "PROTECTED attribute",
16657 &e->where);
16658 break;
16659 }
16660
16661 /* Shall not equivalence common block variables in a PURE procedure. */
16662 if (sym->ns->proc_name
16663 && sym->ns->proc_name->attr.pure
16664 && sym->attr.in_common)
16665 {
16666 /* Need to check for symbols that may have entered the pure
16667 procedure via a USE statement. */
16668 bool saw_sym = false;
16669 if (sym->ns->use_stmts)
16670 {
16671 gfc_use_rename *r;
16672 for (r = sym->ns->use_stmts->rename; r; r = r->next)
16673 if (strcmp(r->use_name, sym->name) == 0) saw_sym = true;
16674 }
16675 else
16676 saw_sym = true;
16677
16678 if (saw_sym)
16679 gfc_error ("COMMON block member %qs at %L cannot be an "
16680 "EQUIVALENCE object in the pure procedure %qs",
16681 sym->name, &e->where, sym->ns->proc_name->name);
16682 break;
16683 }
16684
16685 /* Shall not be a named constant. */
16686 if (e->expr_type == EXPR_CONSTANT)
16687 {
16688 gfc_error ("Named constant %qs at %L cannot be an EQUIVALENCE "
16689 "object", sym->name, &e->where);
16690 continue;
16691 }
16692
16693 if (e->ts.type == BT_DERIVED
16694 && !resolve_equivalence_derived (e->ts.u.derived, sym, e))
16695 continue;
16696
16697 /* Check that the types correspond correctly:
16698 Note 5.28:
16699 A numeric sequence structure may be equivalenced to another sequence
16700 structure, an object of default integer type, default real type, double
16701 precision real type, default logical type such that components of the
16702 structure ultimately only become associated to objects of the same
16703 kind. A character sequence structure may be equivalenced to an object
16704 of default character kind or another character sequence structure.
16705 Other objects may be equivalenced only to objects of the same type and
16706 kind parameters. */
16707
16708 /* Identical types are unconditionally OK. */
16709 if (object == 1 || gfc_compare_types (last_ts, &sym->ts))
16710 goto identical_types;
16711
16712 last_eq_type = sequence_type (*last_ts);
16713 eq_type = sequence_type (sym->ts);
16714
16715 /* Since the pair of objects is not of the same type, mixed or
16716 non-default sequences can be rejected. */
16717
16718 msg = "Sequence %s with mixed components in EQUIVALENCE "
16719 "statement at %L with different type objects";
16720 if ((object ==2
16721 && last_eq_type == SEQ_MIXED
16722 && !gfc_notify_std (GFC_STD_GNU, msg, first_sym->name, last_where))
16723 || (eq_type == SEQ_MIXED
16724 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where)))
16725 continue;
16726
16727 msg = "Non-default type object or sequence %s in EQUIVALENCE "
16728 "statement at %L with objects of different type";
16729 if ((object ==2
16730 && last_eq_type == SEQ_NONDEFAULT
16731 && !gfc_notify_std (GFC_STD_GNU, msg, first_sym->name, last_where))
16732 || (eq_type == SEQ_NONDEFAULT
16733 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where)))
16734 continue;
16735
16736 msg ="Non-CHARACTER object %qs in default CHARACTER "
16737 "EQUIVALENCE statement at %L";
16738 if (last_eq_type == SEQ_CHARACTER
16739 && eq_type != SEQ_CHARACTER
16740 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where))
16741 continue;
16742
16743 msg ="Non-NUMERIC object %qs in default NUMERIC "
16744 "EQUIVALENCE statement at %L";
16745 if (last_eq_type == SEQ_NUMERIC
16746 && eq_type != SEQ_NUMERIC
16747 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where))
16748 continue;
16749
16750 identical_types:
16751 last_ts =&sym->ts;
16752 last_where = &e->where;
16753
16754 if (!e->ref)
16755 continue;
16756
16757 /* Shall not be an automatic array. */
16758 if (e->ref->type == REF_ARRAY
16759 && !gfc_resolve_array_spec (e->ref->u.ar.as, 1))
16760 {
16761 gfc_error ("Array %qs at %L with non-constant bounds cannot be "
16762 "an EQUIVALENCE object", sym->name, &e->where);
16763 continue;
16764 }
16765
16766 r = e->ref;
16767 while (r)
16768 {
16769 /* Shall not be a structure component. */
16770 if (r->type == REF_COMPONENT)
16771 {
16772 gfc_error ("Structure component %qs at %L cannot be an "
16773 "EQUIVALENCE object",
16774 r->u.c.component->name, &e->where);
16775 break;
16776 }
16777
16778 /* A substring shall not have length zero. */
16779 if (r->type == REF_SUBSTRING)
16780 {
16781 if (compare_bound (r->u.ss.start, r->u.ss.end) == CMP_GT)
16782 {
16783 gfc_error ("Substring at %L has length zero",
16784 &r->u.ss.start->where);
16785 break;
16786 }
16787 }
16788 r = r->next;
16789 }
16790 }
16791 }
16792
16793
16794 /* Function called by resolve_fntype to flag other symbol used in the
16795 length type parameter specification of function resuls. */
16796
16797 static bool
16798 flag_fn_result_spec (gfc_expr *expr,
16799 gfc_symbol *sym,
16800 int *f ATTRIBUTE_UNUSED)
16801 {
16802 gfc_namespace *ns;
16803 gfc_symbol *s;
16804
16805 if (expr->expr_type == EXPR_VARIABLE)
16806 {
16807 s = expr->symtree->n.sym;
16808 for (ns = s->ns; ns; ns = ns->parent)
16809 if (!ns->parent)
16810 break;
16811
16812 if (sym == s)
16813 {
16814 gfc_error ("Self reference in character length expression "
16815 "for %qs at %L", sym->name, &expr->where);
16816 return true;
16817 }
16818
16819 if (!s->fn_result_spec
16820 && s->attr.flavor == FL_PARAMETER)
16821 {
16822 /* Function contained in a module.... */
16823 if (ns->proc_name && ns->proc_name->attr.flavor == FL_MODULE)
16824 {
16825 gfc_symtree *st;
16826 s->fn_result_spec = 1;
16827 /* Make sure that this symbol is translated as a module
16828 variable. */
16829 st = gfc_get_unique_symtree (ns);
16830 st->n.sym = s;
16831 s->refs++;
16832 }
16833 /* ... which is use associated and called. */
16834 else if (s->attr.use_assoc || s->attr.used_in_submodule
16835 ||
16836 /* External function matched with an interface. */
16837 (s->ns->proc_name
16838 && ((s->ns == ns
16839 && s->ns->proc_name->attr.if_source == IFSRC_DECL)
16840 || s->ns->proc_name->attr.if_source == IFSRC_IFBODY)
16841 && s->ns->proc_name->attr.function))
16842 s->fn_result_spec = 1;
16843 }
16844 }
16845 return false;
16846 }
16847
16848
16849 /* Resolve function and ENTRY types, issue diagnostics if needed. */
16850
16851 static void
16852 resolve_fntype (gfc_namespace *ns)
16853 {
16854 gfc_entry_list *el;
16855 gfc_symbol *sym;
16856
16857 if (ns->proc_name == NULL || !ns->proc_name->attr.function)
16858 return;
16859
16860 /* If there are any entries, ns->proc_name is the entry master
16861 synthetic symbol and ns->entries->sym actual FUNCTION symbol. */
16862 if (ns->entries)
16863 sym = ns->entries->sym;
16864 else
16865 sym = ns->proc_name;
16866 if (sym->result == sym
16867 && sym->ts.type == BT_UNKNOWN
16868 && !gfc_set_default_type (sym, 0, NULL)
16869 && !sym->attr.untyped)
16870 {
16871 gfc_error ("Function %qs at %L has no IMPLICIT type",
16872 sym->name, &sym->declared_at);
16873 sym->attr.untyped = 1;
16874 }
16875
16876 if (sym->ts.type == BT_DERIVED && !sym->ts.u.derived->attr.use_assoc
16877 && !sym->attr.contained
16878 && !gfc_check_symbol_access (sym->ts.u.derived)
16879 && gfc_check_symbol_access (sym))
16880 {
16881 gfc_notify_std (GFC_STD_F2003, "PUBLIC function %qs at "
16882 "%L of PRIVATE type %qs", sym->name,
16883 &sym->declared_at, sym->ts.u.derived->name);
16884 }
16885
16886 if (ns->entries)
16887 for (el = ns->entries->next; el; el = el->next)
16888 {
16889 if (el->sym->result == el->sym
16890 && el->sym->ts.type == BT_UNKNOWN
16891 && !gfc_set_default_type (el->sym, 0, NULL)
16892 && !el->sym->attr.untyped)
16893 {
16894 gfc_error ("ENTRY %qs at %L has no IMPLICIT type",
16895 el->sym->name, &el->sym->declared_at);
16896 el->sym->attr.untyped = 1;
16897 }
16898 }
16899
16900 if (sym->ts.type == BT_CHARACTER)
16901 gfc_traverse_expr (sym->ts.u.cl->length, sym, flag_fn_result_spec, 0);
16902 }
16903
16904
16905 /* 12.3.2.1.1 Defined operators. */
16906
16907 static bool
16908 check_uop_procedure (gfc_symbol *sym, locus where)
16909 {
16910 gfc_formal_arglist *formal;
16911
16912 if (!sym->attr.function)
16913 {
16914 gfc_error ("User operator procedure %qs at %L must be a FUNCTION",
16915 sym->name, &where);
16916 return false;
16917 }
16918
16919 if (sym->ts.type == BT_CHARACTER
16920 && !((sym->ts.u.cl && sym->ts.u.cl->length) || sym->ts.deferred)
16921 && !(sym->result && ((sym->result->ts.u.cl
16922 && sym->result->ts.u.cl->length) || sym->result->ts.deferred)))
16923 {
16924 gfc_error ("User operator procedure %qs at %L cannot be assumed "
16925 "character length", sym->name, &where);
16926 return false;
16927 }
16928
16929 formal = gfc_sym_get_dummy_args (sym);
16930 if (!formal || !formal->sym)
16931 {
16932 gfc_error ("User operator procedure %qs at %L must have at least "
16933 "one argument", sym->name, &where);
16934 return false;
16935 }
16936
16937 if (formal->sym->attr.intent != INTENT_IN)
16938 {
16939 gfc_error ("First argument of operator interface at %L must be "
16940 "INTENT(IN)", &where);
16941 return false;
16942 }
16943
16944 if (formal->sym->attr.optional)
16945 {
16946 gfc_error ("First argument of operator interface at %L cannot be "
16947 "optional", &where);
16948 return false;
16949 }
16950
16951 formal = formal->next;
16952 if (!formal || !formal->sym)
16953 return true;
16954
16955 if (formal->sym->attr.intent != INTENT_IN)
16956 {
16957 gfc_error ("Second argument of operator interface at %L must be "
16958 "INTENT(IN)", &where);
16959 return false;
16960 }
16961
16962 if (formal->sym->attr.optional)
16963 {
16964 gfc_error ("Second argument of operator interface at %L cannot be "
16965 "optional", &where);
16966 return false;
16967 }
16968
16969 if (formal->next)
16970 {
16971 gfc_error ("Operator interface at %L must have, at most, two "
16972 "arguments", &where);
16973 return false;
16974 }
16975
16976 return true;
16977 }
16978
16979 static void
16980 gfc_resolve_uops (gfc_symtree *symtree)
16981 {
16982 gfc_interface *itr;
16983
16984 if (symtree == NULL)
16985 return;
16986
16987 gfc_resolve_uops (symtree->left);
16988 gfc_resolve_uops (symtree->right);
16989
16990 for (itr = symtree->n.uop->op; itr; itr = itr->next)
16991 check_uop_procedure (itr->sym, itr->sym->declared_at);
16992 }
16993
16994
16995 /* Examine all of the expressions associated with a program unit,
16996 assign types to all intermediate expressions, make sure that all
16997 assignments are to compatible types and figure out which names
16998 refer to which functions or subroutines. It doesn't check code
16999 block, which is handled by gfc_resolve_code. */
17000
17001 static void
17002 resolve_types (gfc_namespace *ns)
17003 {
17004 gfc_namespace *n;
17005 gfc_charlen *cl;
17006 gfc_data *d;
17007 gfc_equiv *eq;
17008 gfc_namespace* old_ns = gfc_current_ns;
17009
17010 if (ns->types_resolved)
17011 return;
17012
17013 /* Check that all IMPLICIT types are ok. */
17014 if (!ns->seen_implicit_none)
17015 {
17016 unsigned letter;
17017 for (letter = 0; letter != GFC_LETTERS; ++letter)
17018 if (ns->set_flag[letter]
17019 && !resolve_typespec_used (&ns->default_type[letter],
17020 &ns->implicit_loc[letter], NULL))
17021 return;
17022 }
17023
17024 gfc_current_ns = ns;
17025
17026 resolve_entries (ns);
17027
17028 resolve_common_vars (&ns->blank_common, false);
17029 resolve_common_blocks (ns->common_root);
17030
17031 resolve_contained_functions (ns);
17032
17033 if (ns->proc_name && ns->proc_name->attr.flavor == FL_PROCEDURE
17034 && ns->proc_name->attr.if_source == IFSRC_IFBODY)
17035 resolve_formal_arglist (ns->proc_name);
17036
17037 gfc_traverse_ns (ns, resolve_bind_c_derived_types);
17038
17039 for (cl = ns->cl_list; cl; cl = cl->next)
17040 resolve_charlen (cl);
17041
17042 gfc_traverse_ns (ns, resolve_symbol);
17043
17044 resolve_fntype (ns);
17045
17046 for (n = ns->contained; n; n = n->sibling)
17047 {
17048 if (gfc_pure (ns->proc_name) && !gfc_pure (n->proc_name))
17049 gfc_error ("Contained procedure %qs at %L of a PURE procedure must "
17050 "also be PURE", n->proc_name->name,
17051 &n->proc_name->declared_at);
17052
17053 resolve_types (n);
17054 }
17055
17056 forall_flag = 0;
17057 gfc_do_concurrent_flag = 0;
17058 gfc_check_interfaces (ns);
17059
17060 gfc_traverse_ns (ns, resolve_values);
17061
17062 if (ns->save_all || !flag_automatic)
17063 gfc_save_all (ns);
17064
17065 iter_stack = NULL;
17066 for (d = ns->data; d; d = d->next)
17067 resolve_data (d);
17068
17069 iter_stack = NULL;
17070 gfc_traverse_ns (ns, gfc_formalize_init_value);
17071
17072 gfc_traverse_ns (ns, gfc_verify_binding_labels);
17073
17074 for (eq = ns->equiv; eq; eq = eq->next)
17075 resolve_equivalence (eq);
17076
17077 /* Warn about unused labels. */
17078 if (warn_unused_label)
17079 warn_unused_fortran_label (ns->st_labels);
17080
17081 gfc_resolve_uops (ns->uop_root);
17082
17083 gfc_traverse_ns (ns, gfc_verify_DTIO_procedures);
17084
17085 gfc_resolve_omp_declare_simd (ns);
17086
17087 gfc_resolve_omp_udrs (ns->omp_udr_root);
17088
17089 ns->types_resolved = 1;
17090
17091 gfc_current_ns = old_ns;
17092 }
17093
17094
17095 /* Call gfc_resolve_code recursively. */
17096
17097 static void
17098 resolve_codes (gfc_namespace *ns)
17099 {
17100 gfc_namespace *n;
17101 bitmap_obstack old_obstack;
17102
17103 if (ns->resolved == 1)
17104 return;
17105
17106 for (n = ns->contained; n; n = n->sibling)
17107 resolve_codes (n);
17108
17109 gfc_current_ns = ns;
17110
17111 /* Don't clear 'cs_base' if this is the namespace of a BLOCK construct. */
17112 if (!(ns->proc_name && ns->proc_name->attr.flavor == FL_LABEL))
17113 cs_base = NULL;
17114
17115 /* Set to an out of range value. */
17116 current_entry_id = -1;
17117
17118 old_obstack = labels_obstack;
17119 bitmap_obstack_initialize (&labels_obstack);
17120
17121 gfc_resolve_oacc_declare (ns);
17122 gfc_resolve_oacc_routines (ns);
17123 gfc_resolve_omp_local_vars (ns);
17124 gfc_resolve_code (ns->code, ns);
17125
17126 bitmap_obstack_release (&labels_obstack);
17127 labels_obstack = old_obstack;
17128 }
17129
17130
17131 /* This function is called after a complete program unit has been compiled.
17132 Its purpose is to examine all of the expressions associated with a program
17133 unit, assign types to all intermediate expressions, make sure that all
17134 assignments are to compatible types and figure out which names refer to
17135 which functions or subroutines. */
17136
17137 void
17138 gfc_resolve (gfc_namespace *ns)
17139 {
17140 gfc_namespace *old_ns;
17141 code_stack *old_cs_base;
17142 struct gfc_omp_saved_state old_omp_state;
17143
17144 if (ns->resolved)
17145 return;
17146
17147 ns->resolved = -1;
17148 old_ns = gfc_current_ns;
17149 old_cs_base = cs_base;
17150
17151 /* As gfc_resolve can be called during resolution of an OpenMP construct
17152 body, we should clear any state associated to it, so that say NS's
17153 DO loops are not interpreted as OpenMP loops. */
17154 if (!ns->construct_entities)
17155 gfc_omp_save_and_clear_state (&old_omp_state);
17156
17157 resolve_types (ns);
17158 component_assignment_level = 0;
17159 resolve_codes (ns);
17160
17161 gfc_current_ns = old_ns;
17162 cs_base = old_cs_base;
17163 ns->resolved = 1;
17164
17165 gfc_run_passes (ns);
17166
17167 if (!ns->construct_entities)
17168 gfc_omp_restore_state (&old_omp_state);
17169 }