Fix ICE on invalid, PR94090.
[gcc.git] / gcc / fortran / resolve.c
1 /* Perform type resolution on the various structures.
2 Copyright (C) 2001-2020 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 void
268 gfc_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 gfc_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 gfc_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 bool bad_result_characteristics;
2605 if (!gfc_compare_interfaces (sym, def_sym, sym->name, 0, 1,
2606 reason, sizeof(reason), NULL, NULL,
2607 &bad_result_characteristics))
2608 {
2609 /* Turn erros into warnings with -std=gnu and -std=legacy,
2610 unless a function returns a wrong type, which can lead
2611 to all kinds of ICEs and wrong code. */
2612
2613 if (!pedantic && (gfc_option.allow_std & GFC_STD_GNU)
2614 && !bad_result_characteristics)
2615 gfc_errors_to_warnings (true);
2616
2617 gfc_error ("Interface mismatch in global procedure %qs at %L: %s",
2618 sym->name, &sym->declared_at, reason);
2619 gfc_errors_to_warnings (false);
2620 goto done;
2621 }
2622 }
2623
2624 done:
2625
2626 if (gsym->type == GSYM_UNKNOWN)
2627 {
2628 gsym->type = type;
2629 gsym->where = *where;
2630 }
2631
2632 gsym->used = 1;
2633 }
2634
2635
2636 /************* Function resolution *************/
2637
2638 /* Resolve a function call known to be generic.
2639 Section 14.1.2.4.1. */
2640
2641 static match
2642 resolve_generic_f0 (gfc_expr *expr, gfc_symbol *sym)
2643 {
2644 gfc_symbol *s;
2645
2646 if (sym->attr.generic)
2647 {
2648 s = gfc_search_interface (sym->generic, 0, &expr->value.function.actual);
2649 if (s != NULL)
2650 {
2651 expr->value.function.name = s->name;
2652 expr->value.function.esym = s;
2653
2654 if (s->ts.type != BT_UNKNOWN)
2655 expr->ts = s->ts;
2656 else if (s->result != NULL && s->result->ts.type != BT_UNKNOWN)
2657 expr->ts = s->result->ts;
2658
2659 if (s->as != NULL)
2660 expr->rank = s->as->rank;
2661 else if (s->result != NULL && s->result->as != NULL)
2662 expr->rank = s->result->as->rank;
2663
2664 gfc_set_sym_referenced (expr->value.function.esym);
2665
2666 return MATCH_YES;
2667 }
2668
2669 /* TODO: Need to search for elemental references in generic
2670 interface. */
2671 }
2672
2673 if (sym->attr.intrinsic)
2674 return gfc_intrinsic_func_interface (expr, 0);
2675
2676 return MATCH_NO;
2677 }
2678
2679
2680 static bool
2681 resolve_generic_f (gfc_expr *expr)
2682 {
2683 gfc_symbol *sym;
2684 match m;
2685 gfc_interface *intr = NULL;
2686
2687 sym = expr->symtree->n.sym;
2688
2689 for (;;)
2690 {
2691 m = resolve_generic_f0 (expr, sym);
2692 if (m == MATCH_YES)
2693 return true;
2694 else if (m == MATCH_ERROR)
2695 return false;
2696
2697 generic:
2698 if (!intr)
2699 for (intr = sym->generic; intr; intr = intr->next)
2700 if (gfc_fl_struct (intr->sym->attr.flavor))
2701 break;
2702
2703 if (sym->ns->parent == NULL)
2704 break;
2705 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
2706
2707 if (sym == NULL)
2708 break;
2709 if (!generic_sym (sym))
2710 goto generic;
2711 }
2712
2713 /* Last ditch attempt. See if the reference is to an intrinsic
2714 that possesses a matching interface. 14.1.2.4 */
2715 if (sym && !intr && !gfc_is_intrinsic (sym, 0, expr->where))
2716 {
2717 if (gfc_init_expr_flag)
2718 gfc_error ("Function %qs in initialization expression at %L "
2719 "must be an intrinsic function",
2720 expr->symtree->n.sym->name, &expr->where);
2721 else
2722 gfc_error ("There is no specific function for the generic %qs "
2723 "at %L", expr->symtree->n.sym->name, &expr->where);
2724 return false;
2725 }
2726
2727 if (intr)
2728 {
2729 if (!gfc_convert_to_structure_constructor (expr, intr->sym, NULL,
2730 NULL, false))
2731 return false;
2732 if (!gfc_use_derived (expr->ts.u.derived))
2733 return false;
2734 return resolve_structure_cons (expr, 0);
2735 }
2736
2737 m = gfc_intrinsic_func_interface (expr, 0);
2738 if (m == MATCH_YES)
2739 return true;
2740
2741 if (m == MATCH_NO)
2742 gfc_error ("Generic function %qs at %L is not consistent with a "
2743 "specific intrinsic interface", expr->symtree->n.sym->name,
2744 &expr->where);
2745
2746 return false;
2747 }
2748
2749
2750 /* Resolve a function call known to be specific. */
2751
2752 static match
2753 resolve_specific_f0 (gfc_symbol *sym, gfc_expr *expr)
2754 {
2755 match m;
2756
2757 if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
2758 {
2759 if (sym->attr.dummy)
2760 {
2761 sym->attr.proc = PROC_DUMMY;
2762 goto found;
2763 }
2764
2765 sym->attr.proc = PROC_EXTERNAL;
2766 goto found;
2767 }
2768
2769 if (sym->attr.proc == PROC_MODULE
2770 || sym->attr.proc == PROC_ST_FUNCTION
2771 || sym->attr.proc == PROC_INTERNAL)
2772 goto found;
2773
2774 if (sym->attr.intrinsic)
2775 {
2776 m = gfc_intrinsic_func_interface (expr, 1);
2777 if (m == MATCH_YES)
2778 return MATCH_YES;
2779 if (m == MATCH_NO)
2780 gfc_error ("Function %qs at %L is INTRINSIC but is not compatible "
2781 "with an intrinsic", sym->name, &expr->where);
2782
2783 return MATCH_ERROR;
2784 }
2785
2786 return MATCH_NO;
2787
2788 found:
2789 gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
2790
2791 if (sym->result)
2792 expr->ts = sym->result->ts;
2793 else
2794 expr->ts = sym->ts;
2795 expr->value.function.name = sym->name;
2796 expr->value.function.esym = sym;
2797 /* Prevent crash when sym->ts.u.derived->components is not set due to previous
2798 error(s). */
2799 if (sym->ts.type == BT_CLASS && !CLASS_DATA (sym))
2800 return MATCH_ERROR;
2801 if (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as)
2802 expr->rank = CLASS_DATA (sym)->as->rank;
2803 else if (sym->as != NULL)
2804 expr->rank = sym->as->rank;
2805
2806 return MATCH_YES;
2807 }
2808
2809
2810 static bool
2811 resolve_specific_f (gfc_expr *expr)
2812 {
2813 gfc_symbol *sym;
2814 match m;
2815
2816 sym = expr->symtree->n.sym;
2817
2818 for (;;)
2819 {
2820 m = resolve_specific_f0 (sym, expr);
2821 if (m == MATCH_YES)
2822 return true;
2823 if (m == MATCH_ERROR)
2824 return false;
2825
2826 if (sym->ns->parent == NULL)
2827 break;
2828
2829 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
2830
2831 if (sym == NULL)
2832 break;
2833 }
2834
2835 gfc_error ("Unable to resolve the specific function %qs at %L",
2836 expr->symtree->n.sym->name, &expr->where);
2837
2838 return true;
2839 }
2840
2841 /* Recursively append candidate SYM to CANDIDATES. Store the number of
2842 candidates in CANDIDATES_LEN. */
2843
2844 static void
2845 lookup_function_fuzzy_find_candidates (gfc_symtree *sym,
2846 char **&candidates,
2847 size_t &candidates_len)
2848 {
2849 gfc_symtree *p;
2850
2851 if (sym == NULL)
2852 return;
2853 if ((sym->n.sym->ts.type != BT_UNKNOWN || sym->n.sym->attr.external)
2854 && sym->n.sym->attr.flavor == FL_PROCEDURE)
2855 vec_push (candidates, candidates_len, sym->name);
2856
2857 p = sym->left;
2858 if (p)
2859 lookup_function_fuzzy_find_candidates (p, candidates, candidates_len);
2860
2861 p = sym->right;
2862 if (p)
2863 lookup_function_fuzzy_find_candidates (p, candidates, candidates_len);
2864 }
2865
2866
2867 /* Lookup function FN fuzzily, taking names in SYMROOT into account. */
2868
2869 const char*
2870 gfc_lookup_function_fuzzy (const char *fn, gfc_symtree *symroot)
2871 {
2872 char **candidates = NULL;
2873 size_t candidates_len = 0;
2874 lookup_function_fuzzy_find_candidates (symroot, candidates, candidates_len);
2875 return gfc_closest_fuzzy_match (fn, candidates);
2876 }
2877
2878
2879 /* Resolve a procedure call not known to be generic nor specific. */
2880
2881 static bool
2882 resolve_unknown_f (gfc_expr *expr)
2883 {
2884 gfc_symbol *sym;
2885 gfc_typespec *ts;
2886
2887 sym = expr->symtree->n.sym;
2888
2889 if (sym->attr.dummy)
2890 {
2891 sym->attr.proc = PROC_DUMMY;
2892 expr->value.function.name = sym->name;
2893 goto set_type;
2894 }
2895
2896 /* See if we have an intrinsic function reference. */
2897
2898 if (gfc_is_intrinsic (sym, 0, expr->where))
2899 {
2900 if (gfc_intrinsic_func_interface (expr, 1) == MATCH_YES)
2901 return true;
2902 return false;
2903 }
2904
2905 /* The reference is to an external name. */
2906
2907 sym->attr.proc = PROC_EXTERNAL;
2908 expr->value.function.name = sym->name;
2909 expr->value.function.esym = expr->symtree->n.sym;
2910
2911 if (sym->as != NULL)
2912 expr->rank = sym->as->rank;
2913
2914 /* Type of the expression is either the type of the symbol or the
2915 default type of the symbol. */
2916
2917 set_type:
2918 gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
2919
2920 if (sym->ts.type != BT_UNKNOWN)
2921 expr->ts = sym->ts;
2922 else
2923 {
2924 ts = gfc_get_default_type (sym->name, sym->ns);
2925
2926 if (ts->type == BT_UNKNOWN)
2927 {
2928 const char *guessed
2929 = gfc_lookup_function_fuzzy (sym->name, sym->ns->sym_root);
2930 if (guessed)
2931 gfc_error ("Function %qs at %L has no IMPLICIT type"
2932 "; did you mean %qs?",
2933 sym->name, &expr->where, guessed);
2934 else
2935 gfc_error ("Function %qs at %L has no IMPLICIT type",
2936 sym->name, &expr->where);
2937 return false;
2938 }
2939 else
2940 expr->ts = *ts;
2941 }
2942
2943 return true;
2944 }
2945
2946
2947 /* Return true, if the symbol is an external procedure. */
2948 static bool
2949 is_external_proc (gfc_symbol *sym)
2950 {
2951 if (!sym->attr.dummy && !sym->attr.contained
2952 && !gfc_is_intrinsic (sym, sym->attr.subroutine, sym->declared_at)
2953 && sym->attr.proc != PROC_ST_FUNCTION
2954 && !sym->attr.proc_pointer
2955 && !sym->attr.use_assoc
2956 && sym->name)
2957 return true;
2958
2959 return false;
2960 }
2961
2962
2963 /* Figure out if a function reference is pure or not. Also set the name
2964 of the function for a potential error message. Return nonzero if the
2965 function is PURE, zero if not. */
2966 static int
2967 pure_stmt_function (gfc_expr *, gfc_symbol *);
2968
2969 int
2970 gfc_pure_function (gfc_expr *e, const char **name)
2971 {
2972 int pure;
2973 gfc_component *comp;
2974
2975 *name = NULL;
2976
2977 if (e->symtree != NULL
2978 && e->symtree->n.sym != NULL
2979 && e->symtree->n.sym->attr.proc == PROC_ST_FUNCTION)
2980 return pure_stmt_function (e, e->symtree->n.sym);
2981
2982 comp = gfc_get_proc_ptr_comp (e);
2983 if (comp)
2984 {
2985 pure = gfc_pure (comp->ts.interface);
2986 *name = comp->name;
2987 }
2988 else if (e->value.function.esym)
2989 {
2990 pure = gfc_pure (e->value.function.esym);
2991 *name = e->value.function.esym->name;
2992 }
2993 else if (e->value.function.isym)
2994 {
2995 pure = e->value.function.isym->pure
2996 || e->value.function.isym->elemental;
2997 *name = e->value.function.isym->name;
2998 }
2999 else
3000 {
3001 /* Implicit functions are not pure. */
3002 pure = 0;
3003 *name = e->value.function.name;
3004 }
3005
3006 return pure;
3007 }
3008
3009
3010 /* Check if the expression is a reference to an implicitly pure function. */
3011
3012 int
3013 gfc_implicit_pure_function (gfc_expr *e)
3014 {
3015 gfc_component *comp = gfc_get_proc_ptr_comp (e);
3016 if (comp)
3017 return gfc_implicit_pure (comp->ts.interface);
3018 else if (e->value.function.esym)
3019 return gfc_implicit_pure (e->value.function.esym);
3020 else
3021 return 0;
3022 }
3023
3024
3025 static bool
3026 impure_stmt_fcn (gfc_expr *e, gfc_symbol *sym,
3027 int *f ATTRIBUTE_UNUSED)
3028 {
3029 const char *name;
3030
3031 /* Don't bother recursing into other statement functions
3032 since they will be checked individually for purity. */
3033 if (e->expr_type != EXPR_FUNCTION
3034 || !e->symtree
3035 || e->symtree->n.sym == sym
3036 || e->symtree->n.sym->attr.proc == PROC_ST_FUNCTION)
3037 return false;
3038
3039 return gfc_pure_function (e, &name) ? false : true;
3040 }
3041
3042
3043 static int
3044 pure_stmt_function (gfc_expr *e, gfc_symbol *sym)
3045 {
3046 return gfc_traverse_expr (e, sym, impure_stmt_fcn, 0) ? 0 : 1;
3047 }
3048
3049
3050 /* Check if an impure function is allowed in the current context. */
3051
3052 static bool check_pure_function (gfc_expr *e)
3053 {
3054 const char *name = NULL;
3055 if (!gfc_pure_function (e, &name) && name)
3056 {
3057 if (forall_flag)
3058 {
3059 gfc_error ("Reference to impure function %qs at %L inside a "
3060 "FORALL %s", name, &e->where,
3061 forall_flag == 2 ? "mask" : "block");
3062 return false;
3063 }
3064 else if (gfc_do_concurrent_flag)
3065 {
3066 gfc_error ("Reference to impure function %qs at %L inside a "
3067 "DO CONCURRENT %s", name, &e->where,
3068 gfc_do_concurrent_flag == 2 ? "mask" : "block");
3069 return false;
3070 }
3071 else if (gfc_pure (NULL))
3072 {
3073 gfc_error ("Reference to impure function %qs at %L "
3074 "within a PURE procedure", name, &e->where);
3075 return false;
3076 }
3077 if (!gfc_implicit_pure_function (e))
3078 gfc_unset_implicit_pure (NULL);
3079 }
3080 return true;
3081 }
3082
3083
3084 /* Update current procedure's array_outer_dependency flag, considering
3085 a call to procedure SYM. */
3086
3087 static void
3088 update_current_proc_array_outer_dependency (gfc_symbol *sym)
3089 {
3090 /* Check to see if this is a sibling function that has not yet
3091 been resolved. */
3092 gfc_namespace *sibling = gfc_current_ns->sibling;
3093 for (; sibling; sibling = sibling->sibling)
3094 {
3095 if (sibling->proc_name == sym)
3096 {
3097 gfc_resolve (sibling);
3098 break;
3099 }
3100 }
3101
3102 /* If SYM has references to outer arrays, so has the procedure calling
3103 SYM. If SYM is a procedure pointer, we can assume the worst. */
3104 if ((sym->attr.array_outer_dependency || sym->attr.proc_pointer)
3105 && gfc_current_ns->proc_name)
3106 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
3107 }
3108
3109
3110 /* Resolve a function call, which means resolving the arguments, then figuring
3111 out which entity the name refers to. */
3112
3113 static bool
3114 resolve_function (gfc_expr *expr)
3115 {
3116 gfc_actual_arglist *arg;
3117 gfc_symbol *sym;
3118 bool t;
3119 int temp;
3120 procedure_type p = PROC_INTRINSIC;
3121 bool no_formal_args;
3122
3123 sym = NULL;
3124 if (expr->symtree)
3125 sym = expr->symtree->n.sym;
3126
3127 /* If this is a procedure pointer component, it has already been resolved. */
3128 if (gfc_is_proc_ptr_comp (expr))
3129 return true;
3130
3131 /* Avoid re-resolving the arguments of caf_get, which can lead to inserting
3132 another caf_get. */
3133 if (sym && sym->attr.intrinsic
3134 && (sym->intmod_sym_id == GFC_ISYM_CAF_GET
3135 || sym->intmod_sym_id == GFC_ISYM_CAF_SEND))
3136 return true;
3137
3138 if (expr->ref)
3139 {
3140 gfc_error ("Unexpected junk after %qs at %L", expr->symtree->n.sym->name,
3141 &expr->where);
3142 return false;
3143 }
3144
3145 if (sym && sym->attr.intrinsic
3146 && !gfc_resolve_intrinsic (sym, &expr->where))
3147 return false;
3148
3149 if (sym && (sym->attr.flavor == FL_VARIABLE || sym->attr.subroutine))
3150 {
3151 gfc_error ("%qs at %L is not a function", sym->name, &expr->where);
3152 return false;
3153 }
3154
3155 /* If this is a deferred TBP with an abstract interface (which may
3156 of course be referenced), expr->value.function.esym will be set. */
3157 if (sym && sym->attr.abstract && !expr->value.function.esym)
3158 {
3159 gfc_error ("ABSTRACT INTERFACE %qs must not be referenced at %L",
3160 sym->name, &expr->where);
3161 return false;
3162 }
3163
3164 /* If this is a deferred TBP with an abstract interface, its result
3165 cannot be an assumed length character (F2003: C418). */
3166 if (sym && sym->attr.abstract && sym->attr.function
3167 && sym->result->ts.u.cl
3168 && sym->result->ts.u.cl->length == NULL
3169 && !sym->result->ts.deferred)
3170 {
3171 gfc_error ("ABSTRACT INTERFACE %qs at %L must not have an assumed "
3172 "character length result (F2008: C418)", sym->name,
3173 &sym->declared_at);
3174 return false;
3175 }
3176
3177 /* Switch off assumed size checking and do this again for certain kinds
3178 of procedure, once the procedure itself is resolved. */
3179 need_full_assumed_size++;
3180
3181 if (expr->symtree && expr->symtree->n.sym)
3182 p = expr->symtree->n.sym->attr.proc;
3183
3184 if (expr->value.function.isym && expr->value.function.isym->inquiry)
3185 inquiry_argument = true;
3186 no_formal_args = sym && is_external_proc (sym)
3187 && gfc_sym_get_dummy_args (sym) == NULL;
3188
3189 if (!resolve_actual_arglist (expr->value.function.actual,
3190 p, no_formal_args))
3191 {
3192 inquiry_argument = false;
3193 return false;
3194 }
3195
3196 inquiry_argument = false;
3197
3198 /* Resume assumed_size checking. */
3199 need_full_assumed_size--;
3200
3201 /* If the procedure is external, check for usage. */
3202 if (sym && is_external_proc (sym))
3203 resolve_global_procedure (sym, &expr->where, 0);
3204
3205 if (sym && sym->ts.type == BT_CHARACTER
3206 && sym->ts.u.cl
3207 && sym->ts.u.cl->length == NULL
3208 && !sym->attr.dummy
3209 && !sym->ts.deferred
3210 && expr->value.function.esym == NULL
3211 && !sym->attr.contained)
3212 {
3213 /* Internal procedures are taken care of in resolve_contained_fntype. */
3214 gfc_error ("Function %qs is declared CHARACTER(*) and cannot "
3215 "be used at %L since it is not a dummy argument",
3216 sym->name, &expr->where);
3217 return false;
3218 }
3219
3220 /* See if function is already resolved. */
3221
3222 if (expr->value.function.name != NULL
3223 || expr->value.function.isym != NULL)
3224 {
3225 if (expr->ts.type == BT_UNKNOWN)
3226 expr->ts = sym->ts;
3227 t = true;
3228 }
3229 else
3230 {
3231 /* Apply the rules of section 14.1.2. */
3232
3233 switch (procedure_kind (sym))
3234 {
3235 case PTYPE_GENERIC:
3236 t = resolve_generic_f (expr);
3237 break;
3238
3239 case PTYPE_SPECIFIC:
3240 t = resolve_specific_f (expr);
3241 break;
3242
3243 case PTYPE_UNKNOWN:
3244 t = resolve_unknown_f (expr);
3245 break;
3246
3247 default:
3248 gfc_internal_error ("resolve_function(): bad function type");
3249 }
3250 }
3251
3252 /* If the expression is still a function (it might have simplified),
3253 then we check to see if we are calling an elemental function. */
3254
3255 if (expr->expr_type != EXPR_FUNCTION)
3256 return t;
3257
3258 /* Walk the argument list looking for invalid BOZ. */
3259 for (arg = expr->value.function.actual; arg; arg = arg->next)
3260 if (arg->expr && arg->expr->ts.type == BT_BOZ)
3261 {
3262 gfc_error ("A BOZ literal constant at %L cannot appear as an "
3263 "actual argument in a function reference",
3264 &arg->expr->where);
3265 return false;
3266 }
3267
3268 temp = need_full_assumed_size;
3269 need_full_assumed_size = 0;
3270
3271 if (!resolve_elemental_actual (expr, NULL))
3272 return false;
3273
3274 if (omp_workshare_flag
3275 && expr->value.function.esym
3276 && ! gfc_elemental (expr->value.function.esym))
3277 {
3278 gfc_error ("User defined non-ELEMENTAL function %qs at %L not allowed "
3279 "in WORKSHARE construct", expr->value.function.esym->name,
3280 &expr->where);
3281 t = false;
3282 }
3283
3284 #define GENERIC_ID expr->value.function.isym->id
3285 else if (expr->value.function.actual != NULL
3286 && expr->value.function.isym != NULL
3287 && GENERIC_ID != GFC_ISYM_LBOUND
3288 && GENERIC_ID != GFC_ISYM_LCOBOUND
3289 && GENERIC_ID != GFC_ISYM_UCOBOUND
3290 && GENERIC_ID != GFC_ISYM_LEN
3291 && GENERIC_ID != GFC_ISYM_LOC
3292 && GENERIC_ID != GFC_ISYM_C_LOC
3293 && GENERIC_ID != GFC_ISYM_PRESENT)
3294 {
3295 /* Array intrinsics must also have the last upper bound of an
3296 assumed size array argument. UBOUND and SIZE have to be
3297 excluded from the check if the second argument is anything
3298 than a constant. */
3299
3300 for (arg = expr->value.function.actual; arg; arg = arg->next)
3301 {
3302 if ((GENERIC_ID == GFC_ISYM_UBOUND || GENERIC_ID == GFC_ISYM_SIZE)
3303 && arg == expr->value.function.actual
3304 && arg->next != NULL && arg->next->expr)
3305 {
3306 if (arg->next->expr->expr_type != EXPR_CONSTANT)
3307 break;
3308
3309 if (arg->next->name && strcmp (arg->next->name, "kind") == 0)
3310 break;
3311
3312 if ((int)mpz_get_si (arg->next->expr->value.integer)
3313 < arg->expr->rank)
3314 break;
3315 }
3316
3317 if (arg->expr != NULL
3318 && arg->expr->rank > 0
3319 && resolve_assumed_size_actual (arg->expr))
3320 return false;
3321 }
3322 }
3323 #undef GENERIC_ID
3324
3325 need_full_assumed_size = temp;
3326
3327 if (!check_pure_function(expr))
3328 t = false;
3329
3330 /* Functions without the RECURSIVE attribution are not allowed to
3331 * call themselves. */
3332 if (expr->value.function.esym && !expr->value.function.esym->attr.recursive)
3333 {
3334 gfc_symbol *esym;
3335 esym = expr->value.function.esym;
3336
3337 if (is_illegal_recursion (esym, gfc_current_ns))
3338 {
3339 if (esym->attr.entry && esym->ns->entries)
3340 gfc_error ("ENTRY %qs at %L cannot be called recursively, as"
3341 " function %qs is not RECURSIVE",
3342 esym->name, &expr->where, esym->ns->entries->sym->name);
3343 else
3344 gfc_error ("Function %qs at %L cannot be called recursively, as it"
3345 " is not RECURSIVE", esym->name, &expr->where);
3346
3347 t = false;
3348 }
3349 }
3350
3351 /* Character lengths of use associated functions may contains references to
3352 symbols not referenced from the current program unit otherwise. Make sure
3353 those symbols are marked as referenced. */
3354
3355 if (expr->ts.type == BT_CHARACTER && expr->value.function.esym
3356 && expr->value.function.esym->attr.use_assoc)
3357 {
3358 gfc_expr_set_symbols_referenced (expr->ts.u.cl->length);
3359 }
3360
3361 /* Make sure that the expression has a typespec that works. */
3362 if (expr->ts.type == BT_UNKNOWN)
3363 {
3364 if (expr->symtree->n.sym->result
3365 && expr->symtree->n.sym->result->ts.type != BT_UNKNOWN
3366 && !expr->symtree->n.sym->result->attr.proc_pointer)
3367 expr->ts = expr->symtree->n.sym->result->ts;
3368 }
3369
3370 if (!expr->ref && !expr->value.function.isym)
3371 {
3372 if (expr->value.function.esym)
3373 update_current_proc_array_outer_dependency (expr->value.function.esym);
3374 else
3375 update_current_proc_array_outer_dependency (sym);
3376 }
3377 else if (expr->ref)
3378 /* typebound procedure: Assume the worst. */
3379 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
3380
3381 return t;
3382 }
3383
3384
3385 /************* Subroutine resolution *************/
3386
3387 static bool
3388 pure_subroutine (gfc_symbol *sym, const char *name, locus *loc)
3389 {
3390 if (gfc_pure (sym))
3391 return true;
3392
3393 if (forall_flag)
3394 {
3395 gfc_error ("Subroutine call to %qs in FORALL block at %L is not PURE",
3396 name, loc);
3397 return false;
3398 }
3399 else if (gfc_do_concurrent_flag)
3400 {
3401 gfc_error ("Subroutine call to %qs in DO CONCURRENT block at %L is not "
3402 "PURE", name, loc);
3403 return false;
3404 }
3405 else if (gfc_pure (NULL))
3406 {
3407 gfc_error ("Subroutine call to %qs at %L is not PURE", name, loc);
3408 return false;
3409 }
3410
3411 gfc_unset_implicit_pure (NULL);
3412 return true;
3413 }
3414
3415
3416 static match
3417 resolve_generic_s0 (gfc_code *c, gfc_symbol *sym)
3418 {
3419 gfc_symbol *s;
3420
3421 if (sym->attr.generic)
3422 {
3423 s = gfc_search_interface (sym->generic, 1, &c->ext.actual);
3424 if (s != NULL)
3425 {
3426 c->resolved_sym = s;
3427 if (!pure_subroutine (s, s->name, &c->loc))
3428 return MATCH_ERROR;
3429 return MATCH_YES;
3430 }
3431
3432 /* TODO: Need to search for elemental references in generic interface. */
3433 }
3434
3435 if (sym->attr.intrinsic)
3436 return gfc_intrinsic_sub_interface (c, 0);
3437
3438 return MATCH_NO;
3439 }
3440
3441
3442 static bool
3443 resolve_generic_s (gfc_code *c)
3444 {
3445 gfc_symbol *sym;
3446 match m;
3447
3448 sym = c->symtree->n.sym;
3449
3450 for (;;)
3451 {
3452 m = resolve_generic_s0 (c, sym);
3453 if (m == MATCH_YES)
3454 return true;
3455 else if (m == MATCH_ERROR)
3456 return false;
3457
3458 generic:
3459 if (sym->ns->parent == NULL)
3460 break;
3461 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
3462
3463 if (sym == NULL)
3464 break;
3465 if (!generic_sym (sym))
3466 goto generic;
3467 }
3468
3469 /* Last ditch attempt. See if the reference is to an intrinsic
3470 that possesses a matching interface. 14.1.2.4 */
3471 sym = c->symtree->n.sym;
3472
3473 if (!gfc_is_intrinsic (sym, 1, c->loc))
3474 {
3475 gfc_error ("There is no specific subroutine for the generic %qs at %L",
3476 sym->name, &c->loc);
3477 return false;
3478 }
3479
3480 m = gfc_intrinsic_sub_interface (c, 0);
3481 if (m == MATCH_YES)
3482 return true;
3483 if (m == MATCH_NO)
3484 gfc_error ("Generic subroutine %qs at %L is not consistent with an "
3485 "intrinsic subroutine interface", sym->name, &c->loc);
3486
3487 return false;
3488 }
3489
3490
3491 /* Resolve a subroutine call known to be specific. */
3492
3493 static match
3494 resolve_specific_s0 (gfc_code *c, gfc_symbol *sym)
3495 {
3496 match m;
3497
3498 if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
3499 {
3500 if (sym->attr.dummy)
3501 {
3502 sym->attr.proc = PROC_DUMMY;
3503 goto found;
3504 }
3505
3506 sym->attr.proc = PROC_EXTERNAL;
3507 goto found;
3508 }
3509
3510 if (sym->attr.proc == PROC_MODULE || sym->attr.proc == PROC_INTERNAL)
3511 goto found;
3512
3513 if (sym->attr.intrinsic)
3514 {
3515 m = gfc_intrinsic_sub_interface (c, 1);
3516 if (m == MATCH_YES)
3517 return MATCH_YES;
3518 if (m == MATCH_NO)
3519 gfc_error ("Subroutine %qs at %L is INTRINSIC but is not compatible "
3520 "with an intrinsic", sym->name, &c->loc);
3521
3522 return MATCH_ERROR;
3523 }
3524
3525 return MATCH_NO;
3526
3527 found:
3528 gfc_procedure_use (sym, &c->ext.actual, &c->loc);
3529
3530 c->resolved_sym = sym;
3531 if (!pure_subroutine (sym, sym->name, &c->loc))
3532 return MATCH_ERROR;
3533
3534 return MATCH_YES;
3535 }
3536
3537
3538 static bool
3539 resolve_specific_s (gfc_code *c)
3540 {
3541 gfc_symbol *sym;
3542 match m;
3543
3544 sym = c->symtree->n.sym;
3545
3546 for (;;)
3547 {
3548 m = resolve_specific_s0 (c, sym);
3549 if (m == MATCH_YES)
3550 return true;
3551 if (m == MATCH_ERROR)
3552 return false;
3553
3554 if (sym->ns->parent == NULL)
3555 break;
3556
3557 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
3558
3559 if (sym == NULL)
3560 break;
3561 }
3562
3563 sym = c->symtree->n.sym;
3564 gfc_error ("Unable to resolve the specific subroutine %qs at %L",
3565 sym->name, &c->loc);
3566
3567 return false;
3568 }
3569
3570
3571 /* Resolve a subroutine call not known to be generic nor specific. */
3572
3573 static bool
3574 resolve_unknown_s (gfc_code *c)
3575 {
3576 gfc_symbol *sym;
3577
3578 sym = c->symtree->n.sym;
3579
3580 if (sym->attr.dummy)
3581 {
3582 sym->attr.proc = PROC_DUMMY;
3583 goto found;
3584 }
3585
3586 /* See if we have an intrinsic function reference. */
3587
3588 if (gfc_is_intrinsic (sym, 1, c->loc))
3589 {
3590 if (gfc_intrinsic_sub_interface (c, 1) == MATCH_YES)
3591 return true;
3592 return false;
3593 }
3594
3595 /* The reference is to an external name. */
3596
3597 found:
3598 gfc_procedure_use (sym, &c->ext.actual, &c->loc);
3599
3600 c->resolved_sym = sym;
3601
3602 return pure_subroutine (sym, sym->name, &c->loc);
3603 }
3604
3605
3606 /* Resolve a subroutine call. Although it was tempting to use the same code
3607 for functions, subroutines and functions are stored differently and this
3608 makes things awkward. */
3609
3610 static bool
3611 resolve_call (gfc_code *c)
3612 {
3613 bool t;
3614 procedure_type ptype = PROC_INTRINSIC;
3615 gfc_symbol *csym, *sym;
3616 bool no_formal_args;
3617
3618 csym = c->symtree ? c->symtree->n.sym : NULL;
3619
3620 if (csym && csym->ts.type != BT_UNKNOWN)
3621 {
3622 gfc_error ("%qs at %L has a type, which is not consistent with "
3623 "the CALL at %L", csym->name, &csym->declared_at, &c->loc);
3624 return false;
3625 }
3626
3627 if (csym && gfc_current_ns->parent && csym->ns != gfc_current_ns)
3628 {
3629 gfc_symtree *st;
3630 gfc_find_sym_tree (c->symtree->name, gfc_current_ns, 1, &st);
3631 sym = st ? st->n.sym : NULL;
3632 if (sym && csym != sym
3633 && sym->ns == gfc_current_ns
3634 && sym->attr.flavor == FL_PROCEDURE
3635 && sym->attr.contained)
3636 {
3637 sym->refs++;
3638 if (csym->attr.generic)
3639 c->symtree->n.sym = sym;
3640 else
3641 c->symtree = st;
3642 csym = c->symtree->n.sym;
3643 }
3644 }
3645
3646 /* If this ia a deferred TBP, c->expr1 will be set. */
3647 if (!c->expr1 && csym)
3648 {
3649 if (csym->attr.abstract)
3650 {
3651 gfc_error ("ABSTRACT INTERFACE %qs must not be referenced at %L",
3652 csym->name, &c->loc);
3653 return false;
3654 }
3655
3656 /* Subroutines without the RECURSIVE attribution are not allowed to
3657 call themselves. */
3658 if (is_illegal_recursion (csym, gfc_current_ns))
3659 {
3660 if (csym->attr.entry && csym->ns->entries)
3661 gfc_error ("ENTRY %qs at %L cannot be called recursively, "
3662 "as subroutine %qs is not RECURSIVE",
3663 csym->name, &c->loc, csym->ns->entries->sym->name);
3664 else
3665 gfc_error ("SUBROUTINE %qs at %L cannot be called recursively, "
3666 "as it is not RECURSIVE", csym->name, &c->loc);
3667
3668 t = false;
3669 }
3670 }
3671
3672 /* Switch off assumed size checking and do this again for certain kinds
3673 of procedure, once the procedure itself is resolved. */
3674 need_full_assumed_size++;
3675
3676 if (csym)
3677 ptype = csym->attr.proc;
3678
3679 no_formal_args = csym && is_external_proc (csym)
3680 && gfc_sym_get_dummy_args (csym) == NULL;
3681 if (!resolve_actual_arglist (c->ext.actual, ptype, no_formal_args))
3682 return false;
3683
3684 /* Resume assumed_size checking. */
3685 need_full_assumed_size--;
3686
3687 /* If external, check for usage. */
3688 if (csym && is_external_proc (csym))
3689 resolve_global_procedure (csym, &c->loc, 1);
3690
3691 t = true;
3692 if (c->resolved_sym == NULL)
3693 {
3694 c->resolved_isym = NULL;
3695 switch (procedure_kind (csym))
3696 {
3697 case PTYPE_GENERIC:
3698 t = resolve_generic_s (c);
3699 break;
3700
3701 case PTYPE_SPECIFIC:
3702 t = resolve_specific_s (c);
3703 break;
3704
3705 case PTYPE_UNKNOWN:
3706 t = resolve_unknown_s (c);
3707 break;
3708
3709 default:
3710 gfc_internal_error ("resolve_subroutine(): bad function type");
3711 }
3712 }
3713
3714 /* Some checks of elemental subroutine actual arguments. */
3715 if (!resolve_elemental_actual (NULL, c))
3716 return false;
3717
3718 if (!c->expr1)
3719 update_current_proc_array_outer_dependency (csym);
3720 else
3721 /* Typebound procedure: Assume the worst. */
3722 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
3723
3724 return t;
3725 }
3726
3727
3728 /* Compare the shapes of two arrays that have non-NULL shapes. If both
3729 op1->shape and op2->shape are non-NULL return true if their shapes
3730 match. If both op1->shape and op2->shape are non-NULL return false
3731 if their shapes do not match. If either op1->shape or op2->shape is
3732 NULL, return true. */
3733
3734 static bool
3735 compare_shapes (gfc_expr *op1, gfc_expr *op2)
3736 {
3737 bool t;
3738 int i;
3739
3740 t = true;
3741
3742 if (op1->shape != NULL && op2->shape != NULL)
3743 {
3744 for (i = 0; i < op1->rank; i++)
3745 {
3746 if (mpz_cmp (op1->shape[i], op2->shape[i]) != 0)
3747 {
3748 gfc_error ("Shapes for operands at %L and %L are not conformable",
3749 &op1->where, &op2->where);
3750 t = false;
3751 break;
3752 }
3753 }
3754 }
3755
3756 return t;
3757 }
3758
3759 /* Convert a logical operator to the corresponding bitwise intrinsic call.
3760 For example A .AND. B becomes IAND(A, B). */
3761 static gfc_expr *
3762 logical_to_bitwise (gfc_expr *e)
3763 {
3764 gfc_expr *tmp, *op1, *op2;
3765 gfc_isym_id isym;
3766 gfc_actual_arglist *args = NULL;
3767
3768 gcc_assert (e->expr_type == EXPR_OP);
3769
3770 isym = GFC_ISYM_NONE;
3771 op1 = e->value.op.op1;
3772 op2 = e->value.op.op2;
3773
3774 switch (e->value.op.op)
3775 {
3776 case INTRINSIC_NOT:
3777 isym = GFC_ISYM_NOT;
3778 break;
3779 case INTRINSIC_AND:
3780 isym = GFC_ISYM_IAND;
3781 break;
3782 case INTRINSIC_OR:
3783 isym = GFC_ISYM_IOR;
3784 break;
3785 case INTRINSIC_NEQV:
3786 isym = GFC_ISYM_IEOR;
3787 break;
3788 case INTRINSIC_EQV:
3789 /* "Bitwise eqv" is just the complement of NEQV === IEOR.
3790 Change the old expression to NEQV, which will get replaced by IEOR,
3791 and wrap it in NOT. */
3792 tmp = gfc_copy_expr (e);
3793 tmp->value.op.op = INTRINSIC_NEQV;
3794 tmp = logical_to_bitwise (tmp);
3795 isym = GFC_ISYM_NOT;
3796 op1 = tmp;
3797 op2 = NULL;
3798 break;
3799 default:
3800 gfc_internal_error ("logical_to_bitwise(): Bad intrinsic");
3801 }
3802
3803 /* Inherit the original operation's operands as arguments. */
3804 args = gfc_get_actual_arglist ();
3805 args->expr = op1;
3806 if (op2)
3807 {
3808 args->next = gfc_get_actual_arglist ();
3809 args->next->expr = op2;
3810 }
3811
3812 /* Convert the expression to a function call. */
3813 e->expr_type = EXPR_FUNCTION;
3814 e->value.function.actual = args;
3815 e->value.function.isym = gfc_intrinsic_function_by_id (isym);
3816 e->value.function.name = e->value.function.isym->name;
3817 e->value.function.esym = NULL;
3818
3819 /* Make up a pre-resolved function call symtree if we need to. */
3820 if (!e->symtree || !e->symtree->n.sym)
3821 {
3822 gfc_symbol *sym;
3823 gfc_get_ha_sym_tree (e->value.function.isym->name, &e->symtree);
3824 sym = e->symtree->n.sym;
3825 sym->result = sym;
3826 sym->attr.flavor = FL_PROCEDURE;
3827 sym->attr.function = 1;
3828 sym->attr.elemental = 1;
3829 sym->attr.pure = 1;
3830 sym->attr.referenced = 1;
3831 gfc_intrinsic_symbol (sym);
3832 gfc_commit_symbol (sym);
3833 }
3834
3835 args->name = e->value.function.isym->formal->name;
3836 if (e->value.function.isym->formal->next)
3837 args->next->name = e->value.function.isym->formal->next->name;
3838
3839 return e;
3840 }
3841
3842 /* Recursively append candidate UOP to CANDIDATES. Store the number of
3843 candidates in CANDIDATES_LEN. */
3844 static void
3845 lookup_uop_fuzzy_find_candidates (gfc_symtree *uop,
3846 char **&candidates,
3847 size_t &candidates_len)
3848 {
3849 gfc_symtree *p;
3850
3851 if (uop == NULL)
3852 return;
3853
3854 /* Not sure how to properly filter here. Use all for a start.
3855 n.uop.op is NULL for empty interface operators (is that legal?) disregard
3856 these as i suppose they don't make terribly sense. */
3857
3858 if (uop->n.uop->op != NULL)
3859 vec_push (candidates, candidates_len, uop->name);
3860
3861 p = uop->left;
3862 if (p)
3863 lookup_uop_fuzzy_find_candidates (p, candidates, candidates_len);
3864
3865 p = uop->right;
3866 if (p)
3867 lookup_uop_fuzzy_find_candidates (p, candidates, candidates_len);
3868 }
3869
3870 /* Lookup user-operator OP fuzzily, taking names in UOP into account. */
3871
3872 static const char*
3873 lookup_uop_fuzzy (const char *op, gfc_symtree *uop)
3874 {
3875 char **candidates = NULL;
3876 size_t candidates_len = 0;
3877 lookup_uop_fuzzy_find_candidates (uop, candidates, candidates_len);
3878 return gfc_closest_fuzzy_match (op, candidates);
3879 }
3880
3881
3882 /* Callback finding an impure function as an operand to an .and. or
3883 .or. expression. Remember the last function warned about to
3884 avoid double warnings when recursing. */
3885
3886 static int
3887 impure_function_callback (gfc_expr **e, int *walk_subtrees ATTRIBUTE_UNUSED,
3888 void *data)
3889 {
3890 gfc_expr *f = *e;
3891 const char *name;
3892 static gfc_expr *last = NULL;
3893 bool *found = (bool *) data;
3894
3895 if (f->expr_type == EXPR_FUNCTION)
3896 {
3897 *found = 1;
3898 if (f != last && !gfc_pure_function (f, &name)
3899 && !gfc_implicit_pure_function (f))
3900 {
3901 if (name)
3902 gfc_warning (OPT_Wfunction_elimination,
3903 "Impure function %qs at %L might not be evaluated",
3904 name, &f->where);
3905 else
3906 gfc_warning (OPT_Wfunction_elimination,
3907 "Impure function at %L might not be evaluated",
3908 &f->where);
3909 }
3910 last = f;
3911 }
3912
3913 return 0;
3914 }
3915
3916 /* Return true if TYPE is character based, false otherwise. */
3917
3918 static int
3919 is_character_based (bt type)
3920 {
3921 return type == BT_CHARACTER || type == BT_HOLLERITH;
3922 }
3923
3924
3925 /* If expression is a hollerith, convert it to character and issue a warning
3926 for the conversion. */
3927
3928 static void
3929 convert_hollerith_to_character (gfc_expr *e)
3930 {
3931 if (e->ts.type == BT_HOLLERITH)
3932 {
3933 gfc_typespec t;
3934 gfc_clear_ts (&t);
3935 t.type = BT_CHARACTER;
3936 t.kind = e->ts.kind;
3937 gfc_convert_type_warn (e, &t, 2, 1);
3938 }
3939 }
3940
3941 /* Convert to numeric and issue a warning for the conversion. */
3942
3943 static void
3944 convert_to_numeric (gfc_expr *a, gfc_expr *b)
3945 {
3946 gfc_typespec t;
3947 gfc_clear_ts (&t);
3948 t.type = b->ts.type;
3949 t.kind = b->ts.kind;
3950 gfc_convert_type_warn (a, &t, 2, 1);
3951 }
3952
3953 /* Resolve an operator expression node. This can involve replacing the
3954 operation with a user defined function call. */
3955
3956 static bool
3957 resolve_operator (gfc_expr *e)
3958 {
3959 gfc_expr *op1, *op2;
3960 char msg[200];
3961 bool dual_locus_error;
3962 bool t = true;
3963
3964 /* Resolve all subnodes-- give them types. */
3965
3966 switch (e->value.op.op)
3967 {
3968 default:
3969 if (!gfc_resolve_expr (e->value.op.op2))
3970 return false;
3971
3972 /* Fall through. */
3973
3974 case INTRINSIC_NOT:
3975 case INTRINSIC_UPLUS:
3976 case INTRINSIC_UMINUS:
3977 case INTRINSIC_PARENTHESES:
3978 if (!gfc_resolve_expr (e->value.op.op1))
3979 return false;
3980 if (e->value.op.op1
3981 && e->value.op.op1->ts.type == BT_BOZ && !e->value.op.op2)
3982 {
3983 gfc_error ("BOZ literal constant at %L cannot be an operand of "
3984 "unary operator %qs", &e->value.op.op1->where,
3985 gfc_op2string (e->value.op.op));
3986 return false;
3987 }
3988 break;
3989 }
3990
3991 /* Typecheck the new node. */
3992
3993 op1 = e->value.op.op1;
3994 op2 = e->value.op.op2;
3995 dual_locus_error = false;
3996
3997 /* op1 and op2 cannot both be BOZ. */
3998 if (op1 && op1->ts.type == BT_BOZ
3999 && op2 && op2->ts.type == BT_BOZ)
4000 {
4001 gfc_error ("Operands at %L and %L cannot appear as operands of "
4002 "binary operator %qs", &op1->where, &op2->where,
4003 gfc_op2string (e->value.op.op));
4004 return false;
4005 }
4006
4007 if ((op1 && op1->expr_type == EXPR_NULL)
4008 || (op2 && op2->expr_type == EXPR_NULL))
4009 {
4010 sprintf (msg, _("Invalid context for NULL() pointer at %%L"));
4011 goto bad_op;
4012 }
4013
4014 switch (e->value.op.op)
4015 {
4016 case INTRINSIC_UPLUS:
4017 case INTRINSIC_UMINUS:
4018 if (op1->ts.type == BT_INTEGER
4019 || op1->ts.type == BT_REAL
4020 || op1->ts.type == BT_COMPLEX)
4021 {
4022 e->ts = op1->ts;
4023 break;
4024 }
4025
4026 sprintf (msg, _("Operand of unary numeric operator %%<%s%%> at %%L is %s"),
4027 gfc_op2string (e->value.op.op), gfc_typename (e));
4028 goto bad_op;
4029
4030 case INTRINSIC_PLUS:
4031 case INTRINSIC_MINUS:
4032 case INTRINSIC_TIMES:
4033 case INTRINSIC_DIVIDE:
4034 case INTRINSIC_POWER:
4035 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
4036 {
4037 gfc_type_convert_binary (e, 1);
4038 break;
4039 }
4040
4041 if (op1->ts.type == BT_DERIVED || op2->ts.type == BT_DERIVED)
4042 sprintf (msg,
4043 _("Unexpected derived-type entities in binary intrinsic "
4044 "numeric operator %%<%s%%> at %%L"),
4045 gfc_op2string (e->value.op.op));
4046 else
4047 sprintf (msg,
4048 _("Operands of binary numeric operator %%<%s%%> at %%L are %s/%s"),
4049 gfc_op2string (e->value.op.op), gfc_typename (op1),
4050 gfc_typename (op2));
4051 goto bad_op;
4052
4053 case INTRINSIC_CONCAT:
4054 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
4055 && op1->ts.kind == op2->ts.kind)
4056 {
4057 e->ts.type = BT_CHARACTER;
4058 e->ts.kind = op1->ts.kind;
4059 break;
4060 }
4061
4062 sprintf (msg,
4063 _("Operands of string concatenation operator at %%L are %s/%s"),
4064 gfc_typename (op1), gfc_typename (op2));
4065 goto bad_op;
4066
4067 case INTRINSIC_AND:
4068 case INTRINSIC_OR:
4069 case INTRINSIC_EQV:
4070 case INTRINSIC_NEQV:
4071 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
4072 {
4073 e->ts.type = BT_LOGICAL;
4074 e->ts.kind = gfc_kind_max (op1, op2);
4075 if (op1->ts.kind < e->ts.kind)
4076 gfc_convert_type (op1, &e->ts, 2);
4077 else if (op2->ts.kind < e->ts.kind)
4078 gfc_convert_type (op2, &e->ts, 2);
4079
4080 if (flag_frontend_optimize &&
4081 (e->value.op.op == INTRINSIC_AND || e->value.op.op == INTRINSIC_OR))
4082 {
4083 /* Warn about short-circuiting
4084 with impure function as second operand. */
4085 bool op2_f = false;
4086 gfc_expr_walker (&op2, impure_function_callback, &op2_f);
4087 }
4088 break;
4089 }
4090
4091 /* Logical ops on integers become bitwise ops with -fdec. */
4092 else if (flag_dec
4093 && (op1->ts.type == BT_INTEGER || op2->ts.type == BT_INTEGER))
4094 {
4095 e->ts.type = BT_INTEGER;
4096 e->ts.kind = gfc_kind_max (op1, op2);
4097 if (op1->ts.type != e->ts.type || op1->ts.kind != e->ts.kind)
4098 gfc_convert_type (op1, &e->ts, 1);
4099 if (op2->ts.type != e->ts.type || op2->ts.kind != e->ts.kind)
4100 gfc_convert_type (op2, &e->ts, 1);
4101 e = logical_to_bitwise (e);
4102 goto simplify_op;
4103 }
4104
4105 sprintf (msg, _("Operands of logical operator %%<%s%%> at %%L are %s/%s"),
4106 gfc_op2string (e->value.op.op), gfc_typename (op1),
4107 gfc_typename (op2));
4108
4109 goto bad_op;
4110
4111 case INTRINSIC_NOT:
4112 /* Logical ops on integers become bitwise ops with -fdec. */
4113 if (flag_dec && op1->ts.type == BT_INTEGER)
4114 {
4115 e->ts.type = BT_INTEGER;
4116 e->ts.kind = op1->ts.kind;
4117 e = logical_to_bitwise (e);
4118 goto simplify_op;
4119 }
4120
4121 if (op1->ts.type == BT_LOGICAL)
4122 {
4123 e->ts.type = BT_LOGICAL;
4124 e->ts.kind = op1->ts.kind;
4125 break;
4126 }
4127
4128 sprintf (msg, _("Operand of .not. operator at %%L is %s"),
4129 gfc_typename (op1));
4130 goto bad_op;
4131
4132 case INTRINSIC_GT:
4133 case INTRINSIC_GT_OS:
4134 case INTRINSIC_GE:
4135 case INTRINSIC_GE_OS:
4136 case INTRINSIC_LT:
4137 case INTRINSIC_LT_OS:
4138 case INTRINSIC_LE:
4139 case INTRINSIC_LE_OS:
4140 if (op1->ts.type == BT_COMPLEX || op2->ts.type == BT_COMPLEX)
4141 {
4142 strcpy (msg, _("COMPLEX quantities cannot be compared at %L"));
4143 goto bad_op;
4144 }
4145
4146 /* Fall through. */
4147
4148 case INTRINSIC_EQ:
4149 case INTRINSIC_EQ_OS:
4150 case INTRINSIC_NE:
4151 case INTRINSIC_NE_OS:
4152
4153 if (flag_dec
4154 && is_character_based (op1->ts.type)
4155 && is_character_based (op2->ts.type))
4156 {
4157 convert_hollerith_to_character (op1);
4158 convert_hollerith_to_character (op2);
4159 }
4160
4161 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
4162 && op1->ts.kind == op2->ts.kind)
4163 {
4164 e->ts.type = BT_LOGICAL;
4165 e->ts.kind = gfc_default_logical_kind;
4166 break;
4167 }
4168
4169 /* If op1 is BOZ, then op2 is not!. Try to convert to type of op2. */
4170 if (op1->ts.type == BT_BOZ)
4171 {
4172 if (gfc_invalid_boz ("BOZ literal constant near %L cannot appear as "
4173 "an operand of a relational operator",
4174 &op1->where))
4175 return false;
4176
4177 if (op2->ts.type == BT_INTEGER && !gfc_boz2int (op1, op2->ts.kind))
4178 return false;
4179
4180 if (op2->ts.type == BT_REAL && !gfc_boz2real (op1, op2->ts.kind))
4181 return false;
4182 }
4183
4184 /* If op2 is BOZ, then op1 is not!. Try to convert to type of op2. */
4185 if (op2->ts.type == BT_BOZ)
4186 {
4187 if (gfc_invalid_boz ("BOZ literal constant near %L cannot appear as "
4188 "an operand of a relational operator",
4189 &op2->where))
4190 return false;
4191
4192 if (op1->ts.type == BT_INTEGER && !gfc_boz2int (op2, op1->ts.kind))
4193 return false;
4194
4195 if (op1->ts.type == BT_REAL && !gfc_boz2real (op2, op1->ts.kind))
4196 return false;
4197 }
4198 if (flag_dec
4199 && op1->ts.type == BT_HOLLERITH && gfc_numeric_ts (&op2->ts))
4200 convert_to_numeric (op1, op2);
4201
4202 if (flag_dec
4203 && gfc_numeric_ts (&op1->ts) && op2->ts.type == BT_HOLLERITH)
4204 convert_to_numeric (op2, op1);
4205
4206 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
4207 {
4208 gfc_type_convert_binary (e, 1);
4209
4210 e->ts.type = BT_LOGICAL;
4211 e->ts.kind = gfc_default_logical_kind;
4212
4213 if (warn_compare_reals)
4214 {
4215 gfc_intrinsic_op op = e->value.op.op;
4216
4217 /* Type conversion has made sure that the types of op1 and op2
4218 agree, so it is only necessary to check the first one. */
4219 if ((op1->ts.type == BT_REAL || op1->ts.type == BT_COMPLEX)
4220 && (op == INTRINSIC_EQ || op == INTRINSIC_EQ_OS
4221 || op == INTRINSIC_NE || op == INTRINSIC_NE_OS))
4222 {
4223 const char *msg;
4224
4225 if (op == INTRINSIC_EQ || op == INTRINSIC_EQ_OS)
4226 msg = "Equality comparison for %s at %L";
4227 else
4228 msg = "Inequality comparison for %s at %L";
4229
4230 gfc_warning (OPT_Wcompare_reals, msg,
4231 gfc_typename (op1), &op1->where);
4232 }
4233 }
4234
4235 break;
4236 }
4237
4238 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
4239 sprintf (msg,
4240 _("Logicals at %%L must be compared with %s instead of %s"),
4241 (e->value.op.op == INTRINSIC_EQ
4242 || e->value.op.op == INTRINSIC_EQ_OS)
4243 ? ".eqv." : ".neqv.", gfc_op2string (e->value.op.op));
4244 else
4245 sprintf (msg,
4246 _("Operands of comparison operator %%<%s%%> at %%L are %s/%s"),
4247 gfc_op2string (e->value.op.op), gfc_typename (op1),
4248 gfc_typename (op2));
4249
4250 goto bad_op;
4251
4252 case INTRINSIC_USER:
4253 if (e->value.op.uop->op == NULL)
4254 {
4255 const char *name = e->value.op.uop->name;
4256 const char *guessed;
4257 guessed = lookup_uop_fuzzy (name, e->value.op.uop->ns->uop_root);
4258 if (guessed)
4259 sprintf (msg, _("Unknown operator %%<%s%%> at %%L; did you mean '%s'?"),
4260 name, guessed);
4261 else
4262 sprintf (msg, _("Unknown operator %%<%s%%> at %%L"), name);
4263 }
4264 else if (op2 == NULL)
4265 sprintf (msg, _("Operand of user operator %%<%s%%> at %%L is %s"),
4266 e->value.op.uop->name, gfc_typename (op1));
4267 else
4268 {
4269 sprintf (msg, _("Operands of user operator %%<%s%%> at %%L are %s/%s"),
4270 e->value.op.uop->name, gfc_typename (op1),
4271 gfc_typename (op2));
4272 e->value.op.uop->op->sym->attr.referenced = 1;
4273 }
4274
4275 goto bad_op;
4276
4277 case INTRINSIC_PARENTHESES:
4278 e->ts = op1->ts;
4279 if (e->ts.type == BT_CHARACTER)
4280 e->ts.u.cl = op1->ts.u.cl;
4281 break;
4282
4283 default:
4284 gfc_internal_error ("resolve_operator(): Bad intrinsic");
4285 }
4286
4287 /* Deal with arrayness of an operand through an operator. */
4288
4289 switch (e->value.op.op)
4290 {
4291 case INTRINSIC_PLUS:
4292 case INTRINSIC_MINUS:
4293 case INTRINSIC_TIMES:
4294 case INTRINSIC_DIVIDE:
4295 case INTRINSIC_POWER:
4296 case INTRINSIC_CONCAT:
4297 case INTRINSIC_AND:
4298 case INTRINSIC_OR:
4299 case INTRINSIC_EQV:
4300 case INTRINSIC_NEQV:
4301 case INTRINSIC_EQ:
4302 case INTRINSIC_EQ_OS:
4303 case INTRINSIC_NE:
4304 case INTRINSIC_NE_OS:
4305 case INTRINSIC_GT:
4306 case INTRINSIC_GT_OS:
4307 case INTRINSIC_GE:
4308 case INTRINSIC_GE_OS:
4309 case INTRINSIC_LT:
4310 case INTRINSIC_LT_OS:
4311 case INTRINSIC_LE:
4312 case INTRINSIC_LE_OS:
4313
4314 if (op1->rank == 0 && op2->rank == 0)
4315 e->rank = 0;
4316
4317 if (op1->rank == 0 && op2->rank != 0)
4318 {
4319 e->rank = op2->rank;
4320
4321 if (e->shape == NULL)
4322 e->shape = gfc_copy_shape (op2->shape, op2->rank);
4323 }
4324
4325 if (op1->rank != 0 && op2->rank == 0)
4326 {
4327 e->rank = op1->rank;
4328
4329 if (e->shape == NULL)
4330 e->shape = gfc_copy_shape (op1->shape, op1->rank);
4331 }
4332
4333 if (op1->rank != 0 && op2->rank != 0)
4334 {
4335 if (op1->rank == op2->rank)
4336 {
4337 e->rank = op1->rank;
4338 if (e->shape == NULL)
4339 {
4340 t = compare_shapes (op1, op2);
4341 if (!t)
4342 e->shape = NULL;
4343 else
4344 e->shape = gfc_copy_shape (op1->shape, op1->rank);
4345 }
4346 }
4347 else
4348 {
4349 /* Allow higher level expressions to work. */
4350 e->rank = 0;
4351
4352 /* Try user-defined operators, and otherwise throw an error. */
4353 dual_locus_error = true;
4354 sprintf (msg,
4355 _("Inconsistent ranks for operator at %%L and %%L"));
4356 goto bad_op;
4357 }
4358 }
4359
4360 break;
4361
4362 case INTRINSIC_PARENTHESES:
4363 case INTRINSIC_NOT:
4364 case INTRINSIC_UPLUS:
4365 case INTRINSIC_UMINUS:
4366 /* Simply copy arrayness attribute */
4367 e->rank = op1->rank;
4368
4369 if (e->shape == NULL)
4370 e->shape = gfc_copy_shape (op1->shape, op1->rank);
4371
4372 break;
4373
4374 default:
4375 break;
4376 }
4377
4378 simplify_op:
4379
4380 /* Attempt to simplify the expression. */
4381 if (t)
4382 {
4383 t = gfc_simplify_expr (e, 0);
4384 /* Some calls do not succeed in simplification and return false
4385 even though there is no error; e.g. variable references to
4386 PARAMETER arrays. */
4387 if (!gfc_is_constant_expr (e))
4388 t = true;
4389 }
4390 return t;
4391
4392 bad_op:
4393
4394 {
4395 match m = gfc_extend_expr (e);
4396 if (m == MATCH_YES)
4397 return true;
4398 if (m == MATCH_ERROR)
4399 return false;
4400 }
4401
4402 if (dual_locus_error)
4403 gfc_error (msg, &op1->where, &op2->where);
4404 else
4405 gfc_error (msg, &e->where);
4406
4407 return false;
4408 }
4409
4410
4411 /************** Array resolution subroutines **************/
4412
4413 enum compare_result
4414 { CMP_LT, CMP_EQ, CMP_GT, CMP_UNKNOWN };
4415
4416 /* Compare two integer expressions. */
4417
4418 static compare_result
4419 compare_bound (gfc_expr *a, gfc_expr *b)
4420 {
4421 int i;
4422
4423 if (a == NULL || a->expr_type != EXPR_CONSTANT
4424 || b == NULL || b->expr_type != EXPR_CONSTANT)
4425 return CMP_UNKNOWN;
4426
4427 /* If either of the types isn't INTEGER, we must have
4428 raised an error earlier. */
4429
4430 if (a->ts.type != BT_INTEGER || b->ts.type != BT_INTEGER)
4431 return CMP_UNKNOWN;
4432
4433 i = mpz_cmp (a->value.integer, b->value.integer);
4434
4435 if (i < 0)
4436 return CMP_LT;
4437 if (i > 0)
4438 return CMP_GT;
4439 return CMP_EQ;
4440 }
4441
4442
4443 /* Compare an integer expression with an integer. */
4444
4445 static compare_result
4446 compare_bound_int (gfc_expr *a, int b)
4447 {
4448 int i;
4449
4450 if (a == NULL || a->expr_type != EXPR_CONSTANT)
4451 return CMP_UNKNOWN;
4452
4453 if (a->ts.type != BT_INTEGER)
4454 gfc_internal_error ("compare_bound_int(): Bad expression");
4455
4456 i = mpz_cmp_si (a->value.integer, b);
4457
4458 if (i < 0)
4459 return CMP_LT;
4460 if (i > 0)
4461 return CMP_GT;
4462 return CMP_EQ;
4463 }
4464
4465
4466 /* Compare an integer expression with a mpz_t. */
4467
4468 static compare_result
4469 compare_bound_mpz_t (gfc_expr *a, mpz_t b)
4470 {
4471 int i;
4472
4473 if (a == NULL || a->expr_type != EXPR_CONSTANT)
4474 return CMP_UNKNOWN;
4475
4476 if (a->ts.type != BT_INTEGER)
4477 gfc_internal_error ("compare_bound_int(): Bad expression");
4478
4479 i = mpz_cmp (a->value.integer, b);
4480
4481 if (i < 0)
4482 return CMP_LT;
4483 if (i > 0)
4484 return CMP_GT;
4485 return CMP_EQ;
4486 }
4487
4488
4489 /* Compute the last value of a sequence given by a triplet.
4490 Return 0 if it wasn't able to compute the last value, or if the
4491 sequence if empty, and 1 otherwise. */
4492
4493 static int
4494 compute_last_value_for_triplet (gfc_expr *start, gfc_expr *end,
4495 gfc_expr *stride, mpz_t last)
4496 {
4497 mpz_t rem;
4498
4499 if (start == NULL || start->expr_type != EXPR_CONSTANT
4500 || end == NULL || end->expr_type != EXPR_CONSTANT
4501 || (stride != NULL && stride->expr_type != EXPR_CONSTANT))
4502 return 0;
4503
4504 if (start->ts.type != BT_INTEGER || end->ts.type != BT_INTEGER
4505 || (stride != NULL && stride->ts.type != BT_INTEGER))
4506 return 0;
4507
4508 if (stride == NULL || compare_bound_int (stride, 1) == CMP_EQ)
4509 {
4510 if (compare_bound (start, end) == CMP_GT)
4511 return 0;
4512 mpz_set (last, end->value.integer);
4513 return 1;
4514 }
4515
4516 if (compare_bound_int (stride, 0) == CMP_GT)
4517 {
4518 /* Stride is positive */
4519 if (mpz_cmp (start->value.integer, end->value.integer) > 0)
4520 return 0;
4521 }
4522 else
4523 {
4524 /* Stride is negative */
4525 if (mpz_cmp (start->value.integer, end->value.integer) < 0)
4526 return 0;
4527 }
4528
4529 mpz_init (rem);
4530 mpz_sub (rem, end->value.integer, start->value.integer);
4531 mpz_tdiv_r (rem, rem, stride->value.integer);
4532 mpz_sub (last, end->value.integer, rem);
4533 mpz_clear (rem);
4534
4535 return 1;
4536 }
4537
4538
4539 /* Compare a single dimension of an array reference to the array
4540 specification. */
4541
4542 static bool
4543 check_dimension (int i, gfc_array_ref *ar, gfc_array_spec *as)
4544 {
4545 mpz_t last_value;
4546
4547 if (ar->dimen_type[i] == DIMEN_STAR)
4548 {
4549 gcc_assert (ar->stride[i] == NULL);
4550 /* This implies [*] as [*:] and [*:3] are not possible. */
4551 if (ar->start[i] == NULL)
4552 {
4553 gcc_assert (ar->end[i] == NULL);
4554 return true;
4555 }
4556 }
4557
4558 /* Given start, end and stride values, calculate the minimum and
4559 maximum referenced indexes. */
4560
4561 switch (ar->dimen_type[i])
4562 {
4563 case DIMEN_VECTOR:
4564 case DIMEN_THIS_IMAGE:
4565 break;
4566
4567 case DIMEN_STAR:
4568 case DIMEN_ELEMENT:
4569 if (compare_bound (ar->start[i], as->lower[i]) == CMP_LT)
4570 {
4571 if (i < as->rank)
4572 gfc_warning (0, "Array reference at %L is out of bounds "
4573 "(%ld < %ld) in dimension %d", &ar->c_where[i],
4574 mpz_get_si (ar->start[i]->value.integer),
4575 mpz_get_si (as->lower[i]->value.integer), i+1);
4576 else
4577 gfc_warning (0, "Array reference at %L is out of bounds "
4578 "(%ld < %ld) in codimension %d", &ar->c_where[i],
4579 mpz_get_si (ar->start[i]->value.integer),
4580 mpz_get_si (as->lower[i]->value.integer),
4581 i + 1 - as->rank);
4582 return true;
4583 }
4584 if (compare_bound (ar->start[i], as->upper[i]) == CMP_GT)
4585 {
4586 if (i < as->rank)
4587 gfc_warning (0, "Array reference at %L is out of bounds "
4588 "(%ld > %ld) in dimension %d", &ar->c_where[i],
4589 mpz_get_si (ar->start[i]->value.integer),
4590 mpz_get_si (as->upper[i]->value.integer), i+1);
4591 else
4592 gfc_warning (0, "Array reference at %L is out of bounds "
4593 "(%ld > %ld) in codimension %d", &ar->c_where[i],
4594 mpz_get_si (ar->start[i]->value.integer),
4595 mpz_get_si (as->upper[i]->value.integer),
4596 i + 1 - as->rank);
4597 return true;
4598 }
4599
4600 break;
4601
4602 case DIMEN_RANGE:
4603 {
4604 #define AR_START (ar->start[i] ? ar->start[i] : as->lower[i])
4605 #define AR_END (ar->end[i] ? ar->end[i] : as->upper[i])
4606
4607 compare_result comp_start_end = compare_bound (AR_START, AR_END);
4608
4609 /* Check for zero stride, which is not allowed. */
4610 if (compare_bound_int (ar->stride[i], 0) == CMP_EQ)
4611 {
4612 gfc_error ("Illegal stride of zero at %L", &ar->c_where[i]);
4613 return false;
4614 }
4615
4616 /* if start == len || (stride > 0 && start < len)
4617 || (stride < 0 && start > len),
4618 then the array section contains at least one element. In this
4619 case, there is an out-of-bounds access if
4620 (start < lower || start > upper). */
4621 if (compare_bound (AR_START, AR_END) == CMP_EQ
4622 || ((compare_bound_int (ar->stride[i], 0) == CMP_GT
4623 || ar->stride[i] == NULL) && comp_start_end == CMP_LT)
4624 || (compare_bound_int (ar->stride[i], 0) == CMP_LT
4625 && comp_start_end == CMP_GT))
4626 {
4627 if (compare_bound (AR_START, as->lower[i]) == CMP_LT)
4628 {
4629 gfc_warning (0, "Lower array reference at %L is out of bounds "
4630 "(%ld < %ld) in dimension %d", &ar->c_where[i],
4631 mpz_get_si (AR_START->value.integer),
4632 mpz_get_si (as->lower[i]->value.integer), i+1);
4633 return true;
4634 }
4635 if (compare_bound (AR_START, as->upper[i]) == CMP_GT)
4636 {
4637 gfc_warning (0, "Lower array reference at %L is out of bounds "
4638 "(%ld > %ld) in dimension %d", &ar->c_where[i],
4639 mpz_get_si (AR_START->value.integer),
4640 mpz_get_si (as->upper[i]->value.integer), i+1);
4641 return true;
4642 }
4643 }
4644
4645 /* If we can compute the highest index of the array section,
4646 then it also has to be between lower and upper. */
4647 mpz_init (last_value);
4648 if (compute_last_value_for_triplet (AR_START, AR_END, ar->stride[i],
4649 last_value))
4650 {
4651 if (compare_bound_mpz_t (as->lower[i], last_value) == CMP_GT)
4652 {
4653 gfc_warning (0, "Upper array reference at %L is out of bounds "
4654 "(%ld < %ld) in dimension %d", &ar->c_where[i],
4655 mpz_get_si (last_value),
4656 mpz_get_si (as->lower[i]->value.integer), i+1);
4657 mpz_clear (last_value);
4658 return true;
4659 }
4660 if (compare_bound_mpz_t (as->upper[i], last_value) == CMP_LT)
4661 {
4662 gfc_warning (0, "Upper array reference at %L is out of bounds "
4663 "(%ld > %ld) in dimension %d", &ar->c_where[i],
4664 mpz_get_si (last_value),
4665 mpz_get_si (as->upper[i]->value.integer), i+1);
4666 mpz_clear (last_value);
4667 return true;
4668 }
4669 }
4670 mpz_clear (last_value);
4671
4672 #undef AR_START
4673 #undef AR_END
4674 }
4675 break;
4676
4677 default:
4678 gfc_internal_error ("check_dimension(): Bad array reference");
4679 }
4680
4681 return true;
4682 }
4683
4684
4685 /* Compare an array reference with an array specification. */
4686
4687 static bool
4688 compare_spec_to_ref (gfc_array_ref *ar)
4689 {
4690 gfc_array_spec *as;
4691 int i;
4692
4693 as = ar->as;
4694 i = as->rank - 1;
4695 /* TODO: Full array sections are only allowed as actual parameters. */
4696 if (as->type == AS_ASSUMED_SIZE
4697 && (/*ar->type == AR_FULL
4698 ||*/ (ar->type == AR_SECTION
4699 && ar->dimen_type[i] == DIMEN_RANGE && ar->end[i] == NULL)))
4700 {
4701 gfc_error ("Rightmost upper bound of assumed size array section "
4702 "not specified at %L", &ar->where);
4703 return false;
4704 }
4705
4706 if (ar->type == AR_FULL)
4707 return true;
4708
4709 if (as->rank != ar->dimen)
4710 {
4711 gfc_error ("Rank mismatch in array reference at %L (%d/%d)",
4712 &ar->where, ar->dimen, as->rank);
4713 return false;
4714 }
4715
4716 /* ar->codimen == 0 is a local array. */
4717 if (as->corank != ar->codimen && ar->codimen != 0)
4718 {
4719 gfc_error ("Coindex rank mismatch in array reference at %L (%d/%d)",
4720 &ar->where, ar->codimen, as->corank);
4721 return false;
4722 }
4723
4724 for (i = 0; i < as->rank; i++)
4725 if (!check_dimension (i, ar, as))
4726 return false;
4727
4728 /* Local access has no coarray spec. */
4729 if (ar->codimen != 0)
4730 for (i = as->rank; i < as->rank + as->corank; i++)
4731 {
4732 if (ar->dimen_type[i] != DIMEN_ELEMENT && !ar->in_allocate
4733 && ar->dimen_type[i] != DIMEN_THIS_IMAGE)
4734 {
4735 gfc_error ("Coindex of codimension %d must be a scalar at %L",
4736 i + 1 - as->rank, &ar->where);
4737 return false;
4738 }
4739 if (!check_dimension (i, ar, as))
4740 return false;
4741 }
4742
4743 return true;
4744 }
4745
4746
4747 /* Resolve one part of an array index. */
4748
4749 static bool
4750 gfc_resolve_index_1 (gfc_expr *index, int check_scalar,
4751 int force_index_integer_kind)
4752 {
4753 gfc_typespec ts;
4754
4755 if (index == NULL)
4756 return true;
4757
4758 if (!gfc_resolve_expr (index))
4759 return false;
4760
4761 if (check_scalar && index->rank != 0)
4762 {
4763 gfc_error ("Array index at %L must be scalar", &index->where);
4764 return false;
4765 }
4766
4767 if (index->ts.type != BT_INTEGER && index->ts.type != BT_REAL)
4768 {
4769 gfc_error ("Array index at %L must be of INTEGER type, found %s",
4770 &index->where, gfc_basic_typename (index->ts.type));
4771 return false;
4772 }
4773
4774 if (index->ts.type == BT_REAL)
4775 if (!gfc_notify_std (GFC_STD_LEGACY, "REAL array index at %L",
4776 &index->where))
4777 return false;
4778
4779 if ((index->ts.kind != gfc_index_integer_kind
4780 && force_index_integer_kind)
4781 || index->ts.type != BT_INTEGER)
4782 {
4783 gfc_clear_ts (&ts);
4784 ts.type = BT_INTEGER;
4785 ts.kind = gfc_index_integer_kind;
4786
4787 gfc_convert_type_warn (index, &ts, 2, 0);
4788 }
4789
4790 return true;
4791 }
4792
4793 /* Resolve one part of an array index. */
4794
4795 bool
4796 gfc_resolve_index (gfc_expr *index, int check_scalar)
4797 {
4798 return gfc_resolve_index_1 (index, check_scalar, 1);
4799 }
4800
4801 /* Resolve a dim argument to an intrinsic function. */
4802
4803 bool
4804 gfc_resolve_dim_arg (gfc_expr *dim)
4805 {
4806 if (dim == NULL)
4807 return true;
4808
4809 if (!gfc_resolve_expr (dim))
4810 return false;
4811
4812 if (dim->rank != 0)
4813 {
4814 gfc_error ("Argument dim at %L must be scalar", &dim->where);
4815 return false;
4816
4817 }
4818
4819 if (dim->ts.type != BT_INTEGER)
4820 {
4821 gfc_error ("Argument dim at %L must be of INTEGER type", &dim->where);
4822 return false;
4823 }
4824
4825 if (dim->ts.kind != gfc_index_integer_kind)
4826 {
4827 gfc_typespec ts;
4828
4829 gfc_clear_ts (&ts);
4830 ts.type = BT_INTEGER;
4831 ts.kind = gfc_index_integer_kind;
4832
4833 gfc_convert_type_warn (dim, &ts, 2, 0);
4834 }
4835
4836 return true;
4837 }
4838
4839 /* Given an expression that contains array references, update those array
4840 references to point to the right array specifications. While this is
4841 filled in during matching, this information is difficult to save and load
4842 in a module, so we take care of it here.
4843
4844 The idea here is that the original array reference comes from the
4845 base symbol. We traverse the list of reference structures, setting
4846 the stored reference to references. Component references can
4847 provide an additional array specification. */
4848
4849 static void
4850 find_array_spec (gfc_expr *e)
4851 {
4852 gfc_array_spec *as;
4853 gfc_component *c;
4854 gfc_ref *ref;
4855 bool class_as = false;
4856
4857 if (e->symtree->n.sym->ts.type == BT_CLASS)
4858 {
4859 as = CLASS_DATA (e->symtree->n.sym)->as;
4860 class_as = true;
4861 }
4862 else
4863 as = e->symtree->n.sym->as;
4864
4865 for (ref = e->ref; ref; ref = ref->next)
4866 switch (ref->type)
4867 {
4868 case REF_ARRAY:
4869 if (as == NULL)
4870 gfc_internal_error ("find_array_spec(): Missing spec");
4871
4872 ref->u.ar.as = as;
4873 as = NULL;
4874 break;
4875
4876 case REF_COMPONENT:
4877 c = ref->u.c.component;
4878 if (c->attr.dimension)
4879 {
4880 if (as != NULL && !(class_as && as == c->as))
4881 gfc_internal_error ("find_array_spec(): unused as(1)");
4882 as = c->as;
4883 }
4884
4885 break;
4886
4887 case REF_SUBSTRING:
4888 case REF_INQUIRY:
4889 break;
4890 }
4891
4892 if (as != NULL)
4893 gfc_internal_error ("find_array_spec(): unused as(2)");
4894 }
4895
4896
4897 /* Resolve an array reference. */
4898
4899 static bool
4900 resolve_array_ref (gfc_array_ref *ar)
4901 {
4902 int i, check_scalar;
4903 gfc_expr *e;
4904
4905 for (i = 0; i < ar->dimen + ar->codimen; i++)
4906 {
4907 check_scalar = ar->dimen_type[i] == DIMEN_RANGE;
4908
4909 /* Do not force gfc_index_integer_kind for the start. We can
4910 do fine with any integer kind. This avoids temporary arrays
4911 created for indexing with a vector. */
4912 if (!gfc_resolve_index_1 (ar->start[i], check_scalar, 0))
4913 return false;
4914 if (!gfc_resolve_index (ar->end[i], check_scalar))
4915 return false;
4916 if (!gfc_resolve_index (ar->stride[i], check_scalar))
4917 return false;
4918
4919 e = ar->start[i];
4920
4921 if (ar->dimen_type[i] == DIMEN_UNKNOWN)
4922 switch (e->rank)
4923 {
4924 case 0:
4925 ar->dimen_type[i] = DIMEN_ELEMENT;
4926 break;
4927
4928 case 1:
4929 ar->dimen_type[i] = DIMEN_VECTOR;
4930 if (e->expr_type == EXPR_VARIABLE
4931 && e->symtree->n.sym->ts.type == BT_DERIVED)
4932 ar->start[i] = gfc_get_parentheses (e);
4933 break;
4934
4935 default:
4936 gfc_error ("Array index at %L is an array of rank %d",
4937 &ar->c_where[i], e->rank);
4938 return false;
4939 }
4940
4941 /* Fill in the upper bound, which may be lower than the
4942 specified one for something like a(2:10:5), which is
4943 identical to a(2:7:5). Only relevant for strides not equal
4944 to one. Don't try a division by zero. */
4945 if (ar->dimen_type[i] == DIMEN_RANGE
4946 && ar->stride[i] != NULL && ar->stride[i]->expr_type == EXPR_CONSTANT
4947 && mpz_cmp_si (ar->stride[i]->value.integer, 1L) != 0
4948 && mpz_cmp_si (ar->stride[i]->value.integer, 0L) != 0)
4949 {
4950 mpz_t size, end;
4951
4952 if (gfc_ref_dimen_size (ar, i, &size, &end))
4953 {
4954 if (ar->end[i] == NULL)
4955 {
4956 ar->end[i] =
4957 gfc_get_constant_expr (BT_INTEGER, gfc_index_integer_kind,
4958 &ar->where);
4959 mpz_set (ar->end[i]->value.integer, end);
4960 }
4961 else if (ar->end[i]->ts.type == BT_INTEGER
4962 && ar->end[i]->expr_type == EXPR_CONSTANT)
4963 {
4964 mpz_set (ar->end[i]->value.integer, end);
4965 }
4966 else
4967 gcc_unreachable ();
4968
4969 mpz_clear (size);
4970 mpz_clear (end);
4971 }
4972 }
4973 }
4974
4975 if (ar->type == AR_FULL)
4976 {
4977 if (ar->as->rank == 0)
4978 ar->type = AR_ELEMENT;
4979
4980 /* Make sure array is the same as array(:,:), this way
4981 we don't need to special case all the time. */
4982 ar->dimen = ar->as->rank;
4983 for (i = 0; i < ar->dimen; i++)
4984 {
4985 ar->dimen_type[i] = DIMEN_RANGE;
4986
4987 gcc_assert (ar->start[i] == NULL);
4988 gcc_assert (ar->end[i] == NULL);
4989 gcc_assert (ar->stride[i] == NULL);
4990 }
4991 }
4992
4993 /* If the reference type is unknown, figure out what kind it is. */
4994
4995 if (ar->type == AR_UNKNOWN)
4996 {
4997 ar->type = AR_ELEMENT;
4998 for (i = 0; i < ar->dimen; i++)
4999 if (ar->dimen_type[i] == DIMEN_RANGE
5000 || ar->dimen_type[i] == DIMEN_VECTOR)
5001 {
5002 ar->type = AR_SECTION;
5003 break;
5004 }
5005 }
5006
5007 if (!ar->as->cray_pointee && !compare_spec_to_ref (ar))
5008 return false;
5009
5010 if (ar->as->corank && ar->codimen == 0)
5011 {
5012 int n;
5013 ar->codimen = ar->as->corank;
5014 for (n = ar->dimen; n < ar->dimen + ar->codimen; n++)
5015 ar->dimen_type[n] = DIMEN_THIS_IMAGE;
5016 }
5017
5018 return true;
5019 }
5020
5021
5022 static bool
5023 resolve_substring (gfc_ref *ref, bool *equal_length)
5024 {
5025 int k = gfc_validate_kind (BT_INTEGER, gfc_charlen_int_kind, false);
5026
5027 if (ref->u.ss.start != NULL)
5028 {
5029 if (!gfc_resolve_expr (ref->u.ss.start))
5030 return false;
5031
5032 if (ref->u.ss.start->ts.type != BT_INTEGER)
5033 {
5034 gfc_error ("Substring start index at %L must be of type INTEGER",
5035 &ref->u.ss.start->where);
5036 return false;
5037 }
5038
5039 if (ref->u.ss.start->rank != 0)
5040 {
5041 gfc_error ("Substring start index at %L must be scalar",
5042 &ref->u.ss.start->where);
5043 return false;
5044 }
5045
5046 if (compare_bound_int (ref->u.ss.start, 1) == CMP_LT
5047 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
5048 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
5049 {
5050 gfc_error ("Substring start index at %L is less than one",
5051 &ref->u.ss.start->where);
5052 return false;
5053 }
5054 }
5055
5056 if (ref->u.ss.end != NULL)
5057 {
5058 if (!gfc_resolve_expr (ref->u.ss.end))
5059 return false;
5060
5061 if (ref->u.ss.end->ts.type != BT_INTEGER)
5062 {
5063 gfc_error ("Substring end index at %L must be of type INTEGER",
5064 &ref->u.ss.end->where);
5065 return false;
5066 }
5067
5068 if (ref->u.ss.end->rank != 0)
5069 {
5070 gfc_error ("Substring end index at %L must be scalar",
5071 &ref->u.ss.end->where);
5072 return false;
5073 }
5074
5075 if (ref->u.ss.length != NULL
5076 && compare_bound (ref->u.ss.end, ref->u.ss.length->length) == CMP_GT
5077 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
5078 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
5079 {
5080 gfc_error ("Substring end index at %L exceeds the string length",
5081 &ref->u.ss.start->where);
5082 return false;
5083 }
5084
5085 if (compare_bound_mpz_t (ref->u.ss.end,
5086 gfc_integer_kinds[k].huge) == CMP_GT
5087 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
5088 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
5089 {
5090 gfc_error ("Substring end index at %L is too large",
5091 &ref->u.ss.end->where);
5092 return false;
5093 }
5094 /* If the substring has the same length as the original
5095 variable, the reference itself can be deleted. */
5096
5097 if (ref->u.ss.length != NULL
5098 && compare_bound (ref->u.ss.end, ref->u.ss.length->length) == CMP_EQ
5099 && compare_bound_int (ref->u.ss.start, 1) == CMP_EQ)
5100 *equal_length = true;
5101 }
5102
5103 return true;
5104 }
5105
5106
5107 /* This function supplies missing substring charlens. */
5108
5109 void
5110 gfc_resolve_substring_charlen (gfc_expr *e)
5111 {
5112 gfc_ref *char_ref;
5113 gfc_expr *start, *end;
5114 gfc_typespec *ts = NULL;
5115 mpz_t diff;
5116
5117 for (char_ref = e->ref; char_ref; char_ref = char_ref->next)
5118 {
5119 if (char_ref->type == REF_SUBSTRING || char_ref->type == REF_INQUIRY)
5120 break;
5121 if (char_ref->type == REF_COMPONENT)
5122 ts = &char_ref->u.c.component->ts;
5123 }
5124
5125 if (!char_ref || char_ref->type == REF_INQUIRY)
5126 return;
5127
5128 gcc_assert (char_ref->next == NULL);
5129
5130 if (e->ts.u.cl)
5131 {
5132 if (e->ts.u.cl->length)
5133 gfc_free_expr (e->ts.u.cl->length);
5134 else if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.dummy)
5135 return;
5136 }
5137
5138 e->ts.type = BT_CHARACTER;
5139 e->ts.kind = gfc_default_character_kind;
5140
5141 if (!e->ts.u.cl)
5142 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
5143
5144 if (char_ref->u.ss.start)
5145 start = gfc_copy_expr (char_ref->u.ss.start);
5146 else
5147 start = gfc_get_int_expr (gfc_charlen_int_kind, NULL, 1);
5148
5149 if (char_ref->u.ss.end)
5150 end = gfc_copy_expr (char_ref->u.ss.end);
5151 else if (e->expr_type == EXPR_VARIABLE)
5152 {
5153 if (!ts)
5154 ts = &e->symtree->n.sym->ts;
5155 end = gfc_copy_expr (ts->u.cl->length);
5156 }
5157 else
5158 end = NULL;
5159
5160 if (!start || !end)
5161 {
5162 gfc_free_expr (start);
5163 gfc_free_expr (end);
5164 return;
5165 }
5166
5167 /* Length = (end - start + 1).
5168 Check first whether it has a constant length. */
5169 if (gfc_dep_difference (end, start, &diff))
5170 {
5171 gfc_expr *len = gfc_get_constant_expr (BT_INTEGER, gfc_charlen_int_kind,
5172 &e->where);
5173
5174 mpz_add_ui (len->value.integer, diff, 1);
5175 mpz_clear (diff);
5176 e->ts.u.cl->length = len;
5177 /* The check for length < 0 is handled below */
5178 }
5179 else
5180 {
5181 e->ts.u.cl->length = gfc_subtract (end, start);
5182 e->ts.u.cl->length = gfc_add (e->ts.u.cl->length,
5183 gfc_get_int_expr (gfc_charlen_int_kind,
5184 NULL, 1));
5185 }
5186
5187 /* F2008, 6.4.1: Both the starting point and the ending point shall
5188 be within the range 1, 2, ..., n unless the starting point exceeds
5189 the ending point, in which case the substring has length zero. */
5190
5191 if (mpz_cmp_si (e->ts.u.cl->length->value.integer, 0) < 0)
5192 mpz_set_si (e->ts.u.cl->length->value.integer, 0);
5193
5194 e->ts.u.cl->length->ts.type = BT_INTEGER;
5195 e->ts.u.cl->length->ts.kind = gfc_charlen_int_kind;
5196
5197 /* Make sure that the length is simplified. */
5198 gfc_simplify_expr (e->ts.u.cl->length, 1);
5199 gfc_resolve_expr (e->ts.u.cl->length);
5200 }
5201
5202
5203 /* Resolve subtype references. */
5204
5205 bool
5206 gfc_resolve_ref (gfc_expr *expr)
5207 {
5208 int current_part_dimension, n_components, seen_part_dimension, dim;
5209 gfc_ref *ref, **prev, *array_ref;
5210 bool equal_length;
5211
5212 for (ref = expr->ref; ref; ref = ref->next)
5213 if (ref->type == REF_ARRAY && ref->u.ar.as == NULL)
5214 {
5215 find_array_spec (expr);
5216 break;
5217 }
5218
5219 for (prev = &expr->ref; *prev != NULL;
5220 prev = *prev == NULL ? prev : &(*prev)->next)
5221 switch ((*prev)->type)
5222 {
5223 case REF_ARRAY:
5224 if (!resolve_array_ref (&(*prev)->u.ar))
5225 return false;
5226 break;
5227
5228 case REF_COMPONENT:
5229 case REF_INQUIRY:
5230 break;
5231
5232 case REF_SUBSTRING:
5233 equal_length = false;
5234 if (!resolve_substring (*prev, &equal_length))
5235 return false;
5236
5237 if (expr->expr_type != EXPR_SUBSTRING && equal_length)
5238 {
5239 /* Remove the reference and move the charlen, if any. */
5240 ref = *prev;
5241 *prev = ref->next;
5242 ref->next = NULL;
5243 expr->ts.u.cl = ref->u.ss.length;
5244 ref->u.ss.length = NULL;
5245 gfc_free_ref_list (ref);
5246 }
5247 break;
5248 }
5249
5250 /* Check constraints on part references. */
5251
5252 current_part_dimension = 0;
5253 seen_part_dimension = 0;
5254 n_components = 0;
5255 array_ref = NULL;
5256
5257 for (ref = expr->ref; ref; ref = ref->next)
5258 {
5259 switch (ref->type)
5260 {
5261 case REF_ARRAY:
5262 array_ref = ref;
5263 switch (ref->u.ar.type)
5264 {
5265 case AR_FULL:
5266 /* Coarray scalar. */
5267 if (ref->u.ar.as->rank == 0)
5268 {
5269 current_part_dimension = 0;
5270 break;
5271 }
5272 /* Fall through. */
5273 case AR_SECTION:
5274 current_part_dimension = 1;
5275 break;
5276
5277 case AR_ELEMENT:
5278 array_ref = NULL;
5279 current_part_dimension = 0;
5280 break;
5281
5282 case AR_UNKNOWN:
5283 gfc_internal_error ("resolve_ref(): Bad array reference");
5284 }
5285
5286 break;
5287
5288 case REF_COMPONENT:
5289 if (current_part_dimension || seen_part_dimension)
5290 {
5291 /* F03:C614. */
5292 if (ref->u.c.component->attr.pointer
5293 || ref->u.c.component->attr.proc_pointer
5294 || (ref->u.c.component->ts.type == BT_CLASS
5295 && CLASS_DATA (ref->u.c.component)->attr.pointer))
5296 {
5297 gfc_error ("Component to the right of a part reference "
5298 "with nonzero rank must not have the POINTER "
5299 "attribute at %L", &expr->where);
5300 return false;
5301 }
5302 else if (ref->u.c.component->attr.allocatable
5303 || (ref->u.c.component->ts.type == BT_CLASS
5304 && CLASS_DATA (ref->u.c.component)->attr.allocatable))
5305
5306 {
5307 gfc_error ("Component to the right of a part reference "
5308 "with nonzero rank must not have the ALLOCATABLE "
5309 "attribute at %L", &expr->where);
5310 return false;
5311 }
5312 }
5313
5314 n_components++;
5315 break;
5316
5317 case REF_SUBSTRING:
5318 break;
5319
5320 case REF_INQUIRY:
5321 /* Implement requirement in note 9.7 of F2018 that the result of the
5322 LEN inquiry be a scalar. */
5323 if (ref->u.i == INQUIRY_LEN && array_ref && expr->ts.deferred)
5324 {
5325 array_ref->u.ar.type = AR_ELEMENT;
5326 expr->rank = 0;
5327 /* INQUIRY_LEN is not evaluated from the rest of the expr
5328 but directly from the string length. This means that setting
5329 the array indices to one does not matter but might trigger
5330 a runtime bounds error. Suppress the check. */
5331 expr->no_bounds_check = 1;
5332 for (dim = 0; dim < array_ref->u.ar.dimen; dim++)
5333 {
5334 array_ref->u.ar.dimen_type[dim] = DIMEN_ELEMENT;
5335 if (array_ref->u.ar.start[dim])
5336 gfc_free_expr (array_ref->u.ar.start[dim]);
5337 array_ref->u.ar.start[dim]
5338 = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
5339 if (array_ref->u.ar.end[dim])
5340 gfc_free_expr (array_ref->u.ar.end[dim]);
5341 if (array_ref->u.ar.stride[dim])
5342 gfc_free_expr (array_ref->u.ar.stride[dim]);
5343 }
5344 }
5345 break;
5346 }
5347
5348 if (((ref->type == REF_COMPONENT && n_components > 1)
5349 || ref->next == NULL)
5350 && current_part_dimension
5351 && seen_part_dimension)
5352 {
5353 gfc_error ("Two or more part references with nonzero rank must "
5354 "not be specified at %L", &expr->where);
5355 return false;
5356 }
5357
5358 if (ref->type == REF_COMPONENT)
5359 {
5360 if (current_part_dimension)
5361 seen_part_dimension = 1;
5362
5363 /* reset to make sure */
5364 current_part_dimension = 0;
5365 }
5366 }
5367
5368 return true;
5369 }
5370
5371
5372 /* Given an expression, determine its shape. This is easier than it sounds.
5373 Leaves the shape array NULL if it is not possible to determine the shape. */
5374
5375 static void
5376 expression_shape (gfc_expr *e)
5377 {
5378 mpz_t array[GFC_MAX_DIMENSIONS];
5379 int i;
5380
5381 if (e->rank <= 0 || e->shape != NULL)
5382 return;
5383
5384 for (i = 0; i < e->rank; i++)
5385 if (!gfc_array_dimen_size (e, i, &array[i]))
5386 goto fail;
5387
5388 e->shape = gfc_get_shape (e->rank);
5389
5390 memcpy (e->shape, array, e->rank * sizeof (mpz_t));
5391
5392 return;
5393
5394 fail:
5395 for (i--; i >= 0; i--)
5396 mpz_clear (array[i]);
5397 }
5398
5399
5400 /* Given a variable expression node, compute the rank of the expression by
5401 examining the base symbol and any reference structures it may have. */
5402
5403 void
5404 gfc_expression_rank (gfc_expr *e)
5405 {
5406 gfc_ref *ref;
5407 int i, rank;
5408
5409 /* Just to make sure, because EXPR_COMPCALL's also have an e->ref and that
5410 could lead to serious confusion... */
5411 gcc_assert (e->expr_type != EXPR_COMPCALL);
5412
5413 if (e->ref == NULL)
5414 {
5415 if (e->expr_type == EXPR_ARRAY)
5416 goto done;
5417 /* Constructors can have a rank different from one via RESHAPE(). */
5418
5419 e->rank = ((e->symtree == NULL || e->symtree->n.sym->as == NULL)
5420 ? 0 : e->symtree->n.sym->as->rank);
5421 goto done;
5422 }
5423
5424 rank = 0;
5425
5426 for (ref = e->ref; ref; ref = ref->next)
5427 {
5428 if (ref->type == REF_COMPONENT && ref->u.c.component->attr.proc_pointer
5429 && ref->u.c.component->attr.function && !ref->next)
5430 rank = ref->u.c.component->as ? ref->u.c.component->as->rank : 0;
5431
5432 if (ref->type != REF_ARRAY)
5433 continue;
5434
5435 if (ref->u.ar.type == AR_FULL)
5436 {
5437 rank = ref->u.ar.as->rank;
5438 break;
5439 }
5440
5441 if (ref->u.ar.type == AR_SECTION)
5442 {
5443 /* Figure out the rank of the section. */
5444 if (rank != 0)
5445 gfc_internal_error ("gfc_expression_rank(): Two array specs");
5446
5447 for (i = 0; i < ref->u.ar.dimen; i++)
5448 if (ref->u.ar.dimen_type[i] == DIMEN_RANGE
5449 || ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
5450 rank++;
5451
5452 break;
5453 }
5454 }
5455
5456 e->rank = rank;
5457
5458 done:
5459 expression_shape (e);
5460 }
5461
5462
5463 static void
5464 add_caf_get_intrinsic (gfc_expr *e)
5465 {
5466 gfc_expr *wrapper, *tmp_expr;
5467 gfc_ref *ref;
5468 int n;
5469
5470 for (ref = e->ref; ref; ref = ref->next)
5471 if (ref->type == REF_ARRAY && ref->u.ar.codimen > 0)
5472 break;
5473 if (ref == NULL)
5474 return;
5475
5476 for (n = ref->u.ar.dimen; n < ref->u.ar.dimen + ref->u.ar.codimen; n++)
5477 if (ref->u.ar.dimen_type[n] != DIMEN_ELEMENT)
5478 return;
5479
5480 tmp_expr = XCNEW (gfc_expr);
5481 *tmp_expr = *e;
5482 wrapper = gfc_build_intrinsic_call (gfc_current_ns, GFC_ISYM_CAF_GET,
5483 "caf_get", tmp_expr->where, 1, tmp_expr);
5484 wrapper->ts = e->ts;
5485 wrapper->rank = e->rank;
5486 if (e->rank)
5487 wrapper->shape = gfc_copy_shape (e->shape, e->rank);
5488 *e = *wrapper;
5489 free (wrapper);
5490 }
5491
5492
5493 static void
5494 remove_caf_get_intrinsic (gfc_expr *e)
5495 {
5496 gcc_assert (e->expr_type == EXPR_FUNCTION && e->value.function.isym
5497 && e->value.function.isym->id == GFC_ISYM_CAF_GET);
5498 gfc_expr *e2 = e->value.function.actual->expr;
5499 e->value.function.actual->expr = NULL;
5500 gfc_free_actual_arglist (e->value.function.actual);
5501 gfc_free_shape (&e->shape, e->rank);
5502 *e = *e2;
5503 free (e2);
5504 }
5505
5506
5507 /* Resolve a variable expression. */
5508
5509 static bool
5510 resolve_variable (gfc_expr *e)
5511 {
5512 gfc_symbol *sym;
5513 bool t;
5514
5515 t = true;
5516
5517 if (e->symtree == NULL)
5518 return false;
5519 sym = e->symtree->n.sym;
5520
5521 /* Use same check as for TYPE(*) below; this check has to be before TYPE(*)
5522 as ts.type is set to BT_ASSUMED in resolve_symbol. */
5523 if (sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
5524 {
5525 if (!actual_arg || inquiry_argument)
5526 {
5527 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may only "
5528 "be used as actual argument", sym->name, &e->where);
5529 return false;
5530 }
5531 }
5532 /* TS 29113, 407b. */
5533 else if (e->ts.type == BT_ASSUMED)
5534 {
5535 if (!actual_arg)
5536 {
5537 gfc_error ("Assumed-type variable %s at %L may only be used "
5538 "as actual argument", sym->name, &e->where);
5539 return false;
5540 }
5541 else if (inquiry_argument && !first_actual_arg)
5542 {
5543 /* FIXME: It doesn't work reliably as inquiry_argument is not set
5544 for all inquiry functions in resolve_function; the reason is
5545 that the function-name resolution happens too late in that
5546 function. */
5547 gfc_error ("Assumed-type variable %s at %L as actual argument to "
5548 "an inquiry function shall be the first argument",
5549 sym->name, &e->where);
5550 return false;
5551 }
5552 }
5553 /* TS 29113, C535b. */
5554 else if (((sym->ts.type == BT_CLASS && sym->attr.class_ok
5555 && CLASS_DATA (sym)->as
5556 && CLASS_DATA (sym)->as->type == AS_ASSUMED_RANK)
5557 || (sym->ts.type != BT_CLASS && sym->as
5558 && sym->as->type == AS_ASSUMED_RANK))
5559 && !sym->attr.select_rank_temporary)
5560 {
5561 if (!actual_arg
5562 && !(cs_base && cs_base->current
5563 && cs_base->current->op == EXEC_SELECT_RANK))
5564 {
5565 gfc_error ("Assumed-rank variable %s at %L may only be used as "
5566 "actual argument", sym->name, &e->where);
5567 return false;
5568 }
5569 else if (inquiry_argument && !first_actual_arg)
5570 {
5571 /* FIXME: It doesn't work reliably as inquiry_argument is not set
5572 for all inquiry functions in resolve_function; the reason is
5573 that the function-name resolution happens too late in that
5574 function. */
5575 gfc_error ("Assumed-rank variable %s at %L as actual argument "
5576 "to an inquiry function shall be the first argument",
5577 sym->name, &e->where);
5578 return false;
5579 }
5580 }
5581
5582 if ((sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK)) && e->ref
5583 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
5584 && e->ref->next == NULL))
5585 {
5586 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall not have "
5587 "a subobject reference", sym->name, &e->ref->u.ar.where);
5588 return false;
5589 }
5590 /* TS 29113, 407b. */
5591 else if (e->ts.type == BT_ASSUMED && e->ref
5592 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
5593 && e->ref->next == NULL))
5594 {
5595 gfc_error ("Assumed-type variable %s at %L shall not have a subobject "
5596 "reference", sym->name, &e->ref->u.ar.where);
5597 return false;
5598 }
5599
5600 /* TS 29113, C535b. */
5601 if (((sym->ts.type == BT_CLASS && sym->attr.class_ok
5602 && CLASS_DATA (sym)->as
5603 && CLASS_DATA (sym)->as->type == AS_ASSUMED_RANK)
5604 || (sym->ts.type != BT_CLASS && sym->as
5605 && sym->as->type == AS_ASSUMED_RANK))
5606 && e->ref
5607 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
5608 && e->ref->next == NULL))
5609 {
5610 gfc_error ("Assumed-rank variable %s at %L shall not have a subobject "
5611 "reference", sym->name, &e->ref->u.ar.where);
5612 return false;
5613 }
5614
5615 /* For variables that are used in an associate (target => object) where
5616 the object's basetype is array valued while the target is scalar,
5617 the ts' type of the component refs is still array valued, which
5618 can't be translated that way. */
5619 if (sym->assoc && e->rank == 0 && e->ref && sym->ts.type == BT_CLASS
5620 && sym->assoc->target && sym->assoc->target->ts.type == BT_CLASS
5621 && CLASS_DATA (sym->assoc->target)->as)
5622 {
5623 gfc_ref *ref = e->ref;
5624 while (ref)
5625 {
5626 switch (ref->type)
5627 {
5628 case REF_COMPONENT:
5629 ref->u.c.sym = sym->ts.u.derived;
5630 /* Stop the loop. */
5631 ref = NULL;
5632 break;
5633 default:
5634 ref = ref->next;
5635 break;
5636 }
5637 }
5638 }
5639
5640 /* If this is an associate-name, it may be parsed with an array reference
5641 in error even though the target is scalar. Fail directly in this case.
5642 TODO Understand why class scalar expressions must be excluded. */
5643 if (sym->assoc && !(sym->ts.type == BT_CLASS && e->rank == 0))
5644 {
5645 if (sym->ts.type == BT_CLASS)
5646 gfc_fix_class_refs (e);
5647 if (!sym->attr.dimension && e->ref && e->ref->type == REF_ARRAY)
5648 return false;
5649 else if (sym->attr.dimension && (!e->ref || e->ref->type != REF_ARRAY))
5650 {
5651 /* This can happen because the parser did not detect that the
5652 associate name is an array and the expression had no array
5653 part_ref. */
5654 gfc_ref *ref = gfc_get_ref ();
5655 ref->type = REF_ARRAY;
5656 ref->u.ar = *gfc_get_array_ref();
5657 ref->u.ar.type = AR_FULL;
5658 if (sym->as)
5659 {
5660 ref->u.ar.as = sym->as;
5661 ref->u.ar.dimen = sym->as->rank;
5662 }
5663 ref->next = e->ref;
5664 e->ref = ref;
5665
5666 }
5667 }
5668
5669 if (sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.generic)
5670 sym->ts.u.derived = gfc_find_dt_in_generic (sym->ts.u.derived);
5671
5672 /* On the other hand, the parser may not have known this is an array;
5673 in this case, we have to add a FULL reference. */
5674 if (sym->assoc && sym->attr.dimension && !e->ref)
5675 {
5676 e->ref = gfc_get_ref ();
5677 e->ref->type = REF_ARRAY;
5678 e->ref->u.ar.type = AR_FULL;
5679 e->ref->u.ar.dimen = 0;
5680 }
5681
5682 /* Like above, but for class types, where the checking whether an array
5683 ref is present is more complicated. Furthermore make sure not to add
5684 the full array ref to _vptr or _len refs. */
5685 if (sym->assoc && sym->ts.type == BT_CLASS
5686 && CLASS_DATA (sym)->attr.dimension
5687 && (e->ts.type != BT_DERIVED || !e->ts.u.derived->attr.vtype))
5688 {
5689 gfc_ref *ref, *newref;
5690
5691 newref = gfc_get_ref ();
5692 newref->type = REF_ARRAY;
5693 newref->u.ar.type = AR_FULL;
5694 newref->u.ar.dimen = 0;
5695 /* Because this is an associate var and the first ref either is a ref to
5696 the _data component or not, no traversal of the ref chain is
5697 needed. The array ref needs to be inserted after the _data ref,
5698 or when that is not present, which may happend for polymorphic
5699 types, then at the first position. */
5700 ref = e->ref;
5701 if (!ref)
5702 e->ref = newref;
5703 else if (ref->type == REF_COMPONENT
5704 && strcmp ("_data", ref->u.c.component->name) == 0)
5705 {
5706 if (!ref->next || ref->next->type != REF_ARRAY)
5707 {
5708 newref->next = ref->next;
5709 ref->next = newref;
5710 }
5711 else
5712 /* Array ref present already. */
5713 gfc_free_ref_list (newref);
5714 }
5715 else if (ref->type == REF_ARRAY)
5716 /* Array ref present already. */
5717 gfc_free_ref_list (newref);
5718 else
5719 {
5720 newref->next = ref;
5721 e->ref = newref;
5722 }
5723 }
5724
5725 if (e->ref && !gfc_resolve_ref (e))
5726 return false;
5727
5728 if (sym->attr.flavor == FL_PROCEDURE
5729 && (!sym->attr.function
5730 || (sym->attr.function && sym->result
5731 && sym->result->attr.proc_pointer
5732 && !sym->result->attr.function)))
5733 {
5734 e->ts.type = BT_PROCEDURE;
5735 goto resolve_procedure;
5736 }
5737
5738 if (sym->ts.type != BT_UNKNOWN)
5739 gfc_variable_attr (e, &e->ts);
5740 else if (sym->attr.flavor == FL_PROCEDURE
5741 && sym->attr.function && sym->result
5742 && sym->result->ts.type != BT_UNKNOWN
5743 && sym->result->attr.proc_pointer)
5744 e->ts = sym->result->ts;
5745 else
5746 {
5747 /* Must be a simple variable reference. */
5748 if (!gfc_set_default_type (sym, 1, sym->ns))
5749 return false;
5750 e->ts = sym->ts;
5751 }
5752
5753 if (check_assumed_size_reference (sym, e))
5754 return false;
5755
5756 /* Deal with forward references to entries during gfc_resolve_code, to
5757 satisfy, at least partially, 12.5.2.5. */
5758 if (gfc_current_ns->entries
5759 && current_entry_id == sym->entry_id
5760 && cs_base
5761 && cs_base->current
5762 && cs_base->current->op != EXEC_ENTRY)
5763 {
5764 gfc_entry_list *entry;
5765 gfc_formal_arglist *formal;
5766 int n;
5767 bool seen, saved_specification_expr;
5768
5769 /* If the symbol is a dummy... */
5770 if (sym->attr.dummy && sym->ns == gfc_current_ns)
5771 {
5772 entry = gfc_current_ns->entries;
5773 seen = false;
5774
5775 /* ...test if the symbol is a parameter of previous entries. */
5776 for (; entry && entry->id <= current_entry_id; entry = entry->next)
5777 for (formal = entry->sym->formal; formal; formal = formal->next)
5778 {
5779 if (formal->sym && sym->name == formal->sym->name)
5780 {
5781 seen = true;
5782 break;
5783 }
5784 }
5785
5786 /* If it has not been seen as a dummy, this is an error. */
5787 if (!seen)
5788 {
5789 if (specification_expr)
5790 gfc_error ("Variable %qs, used in a specification expression"
5791 ", is referenced at %L before the ENTRY statement "
5792 "in which it is a parameter",
5793 sym->name, &cs_base->current->loc);
5794 else
5795 gfc_error ("Variable %qs is used at %L before the ENTRY "
5796 "statement in which it is a parameter",
5797 sym->name, &cs_base->current->loc);
5798 t = false;
5799 }
5800 }
5801
5802 /* Now do the same check on the specification expressions. */
5803 saved_specification_expr = specification_expr;
5804 specification_expr = true;
5805 if (sym->ts.type == BT_CHARACTER
5806 && !gfc_resolve_expr (sym->ts.u.cl->length))
5807 t = false;
5808
5809 if (sym->as)
5810 for (n = 0; n < sym->as->rank; n++)
5811 {
5812 if (!gfc_resolve_expr (sym->as->lower[n]))
5813 t = false;
5814 if (!gfc_resolve_expr (sym->as->upper[n]))
5815 t = false;
5816 }
5817 specification_expr = saved_specification_expr;
5818
5819 if (t)
5820 /* Update the symbol's entry level. */
5821 sym->entry_id = current_entry_id + 1;
5822 }
5823
5824 /* If a symbol has been host_associated mark it. This is used latter,
5825 to identify if aliasing is possible via host association. */
5826 if (sym->attr.flavor == FL_VARIABLE
5827 && gfc_current_ns->parent
5828 && (gfc_current_ns->parent == sym->ns
5829 || (gfc_current_ns->parent->parent
5830 && gfc_current_ns->parent->parent == sym->ns)))
5831 sym->attr.host_assoc = 1;
5832
5833 if (gfc_current_ns->proc_name
5834 && sym->attr.dimension
5835 && (sym->ns != gfc_current_ns
5836 || sym->attr.use_assoc
5837 || sym->attr.in_common))
5838 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
5839
5840 resolve_procedure:
5841 if (t && !resolve_procedure_expression (e))
5842 t = false;
5843
5844 /* F2008, C617 and C1229. */
5845 if (!inquiry_argument && (e->ts.type == BT_CLASS || e->ts.type == BT_DERIVED)
5846 && gfc_is_coindexed (e))
5847 {
5848 gfc_ref *ref, *ref2 = NULL;
5849
5850 for (ref = e->ref; ref; ref = ref->next)
5851 {
5852 if (ref->type == REF_COMPONENT)
5853 ref2 = ref;
5854 if (ref->type == REF_ARRAY && ref->u.ar.codimen > 0)
5855 break;
5856 }
5857
5858 for ( ; ref; ref = ref->next)
5859 if (ref->type == REF_COMPONENT)
5860 break;
5861
5862 /* Expression itself is not coindexed object. */
5863 if (ref && e->ts.type == BT_CLASS)
5864 {
5865 gfc_error ("Polymorphic subobject of coindexed object at %L",
5866 &e->where);
5867 t = false;
5868 }
5869
5870 /* Expression itself is coindexed object. */
5871 if (ref == NULL)
5872 {
5873 gfc_component *c;
5874 c = ref2 ? ref2->u.c.component : e->symtree->n.sym->components;
5875 for ( ; c; c = c->next)
5876 if (c->attr.allocatable && c->ts.type == BT_CLASS)
5877 {
5878 gfc_error ("Coindexed object with polymorphic allocatable "
5879 "subcomponent at %L", &e->where);
5880 t = false;
5881 break;
5882 }
5883 }
5884 }
5885
5886 if (t)
5887 gfc_expression_rank (e);
5888
5889 if (t && flag_coarray == GFC_FCOARRAY_LIB && gfc_is_coindexed (e))
5890 add_caf_get_intrinsic (e);
5891
5892 /* Simplify cases where access to a parameter array results in a
5893 single constant. Suppress errors since those will have been
5894 issued before, as warnings. */
5895 if (e->rank == 0 && sym->as && sym->attr.flavor == FL_PARAMETER)
5896 {
5897 gfc_push_suppress_errors ();
5898 gfc_simplify_expr (e, 1);
5899 gfc_pop_suppress_errors ();
5900 }
5901
5902 return t;
5903 }
5904
5905
5906 /* Checks to see that the correct symbol has been host associated.
5907 The only situation where this arises is that in which a twice
5908 contained function is parsed after the host association is made.
5909 Therefore, on detecting this, change the symbol in the expression
5910 and convert the array reference into an actual arglist if the old
5911 symbol is a variable. */
5912 static bool
5913 check_host_association (gfc_expr *e)
5914 {
5915 gfc_symbol *sym, *old_sym;
5916 gfc_symtree *st;
5917 int n;
5918 gfc_ref *ref;
5919 gfc_actual_arglist *arg, *tail = NULL;
5920 bool retval = e->expr_type == EXPR_FUNCTION;
5921
5922 /* If the expression is the result of substitution in
5923 interface.c(gfc_extend_expr) because there is no way in
5924 which the host association can be wrong. */
5925 if (e->symtree == NULL
5926 || e->symtree->n.sym == NULL
5927 || e->user_operator)
5928 return retval;
5929
5930 old_sym = e->symtree->n.sym;
5931
5932 if (gfc_current_ns->parent
5933 && old_sym->ns != gfc_current_ns)
5934 {
5935 /* Use the 'USE' name so that renamed module symbols are
5936 correctly handled. */
5937 gfc_find_symbol (e->symtree->name, gfc_current_ns, 1, &sym);
5938
5939 if (sym && old_sym != sym
5940 && sym->ts.type == old_sym->ts.type
5941 && sym->attr.flavor == FL_PROCEDURE
5942 && sym->attr.contained)
5943 {
5944 /* Clear the shape, since it might not be valid. */
5945 gfc_free_shape (&e->shape, e->rank);
5946
5947 /* Give the expression the right symtree! */
5948 gfc_find_sym_tree (e->symtree->name, NULL, 1, &st);
5949 gcc_assert (st != NULL);
5950
5951 if (old_sym->attr.flavor == FL_PROCEDURE
5952 || e->expr_type == EXPR_FUNCTION)
5953 {
5954 /* Original was function so point to the new symbol, since
5955 the actual argument list is already attached to the
5956 expression. */
5957 e->value.function.esym = NULL;
5958 e->symtree = st;
5959 }
5960 else
5961 {
5962 /* Original was variable so convert array references into
5963 an actual arglist. This does not need any checking now
5964 since resolve_function will take care of it. */
5965 e->value.function.actual = NULL;
5966 e->expr_type = EXPR_FUNCTION;
5967 e->symtree = st;
5968
5969 /* Ambiguity will not arise if the array reference is not
5970 the last reference. */
5971 for (ref = e->ref; ref; ref = ref->next)
5972 if (ref->type == REF_ARRAY && ref->next == NULL)
5973 break;
5974
5975 gcc_assert (ref->type == REF_ARRAY);
5976
5977 /* Grab the start expressions from the array ref and
5978 copy them into actual arguments. */
5979 for (n = 0; n < ref->u.ar.dimen; n++)
5980 {
5981 arg = gfc_get_actual_arglist ();
5982 arg->expr = gfc_copy_expr (ref->u.ar.start[n]);
5983 if (e->value.function.actual == NULL)
5984 tail = e->value.function.actual = arg;
5985 else
5986 {
5987 tail->next = arg;
5988 tail = arg;
5989 }
5990 }
5991
5992 /* Dump the reference list and set the rank. */
5993 gfc_free_ref_list (e->ref);
5994 e->ref = NULL;
5995 e->rank = sym->as ? sym->as->rank : 0;
5996 }
5997
5998 gfc_resolve_expr (e);
5999 sym->refs++;
6000 }
6001 }
6002 /* This might have changed! */
6003 return e->expr_type == EXPR_FUNCTION;
6004 }
6005
6006
6007 static void
6008 gfc_resolve_character_operator (gfc_expr *e)
6009 {
6010 gfc_expr *op1 = e->value.op.op1;
6011 gfc_expr *op2 = e->value.op.op2;
6012 gfc_expr *e1 = NULL;
6013 gfc_expr *e2 = NULL;
6014
6015 gcc_assert (e->value.op.op == INTRINSIC_CONCAT);
6016
6017 if (op1->ts.u.cl && op1->ts.u.cl->length)
6018 e1 = gfc_copy_expr (op1->ts.u.cl->length);
6019 else if (op1->expr_type == EXPR_CONSTANT)
6020 e1 = gfc_get_int_expr (gfc_charlen_int_kind, NULL,
6021 op1->value.character.length);
6022
6023 if (op2->ts.u.cl && op2->ts.u.cl->length)
6024 e2 = gfc_copy_expr (op2->ts.u.cl->length);
6025 else if (op2->expr_type == EXPR_CONSTANT)
6026 e2 = gfc_get_int_expr (gfc_charlen_int_kind, NULL,
6027 op2->value.character.length);
6028
6029 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
6030
6031 if (!e1 || !e2)
6032 {
6033 gfc_free_expr (e1);
6034 gfc_free_expr (e2);
6035
6036 return;
6037 }
6038
6039 e->ts.u.cl->length = gfc_add (e1, e2);
6040 e->ts.u.cl->length->ts.type = BT_INTEGER;
6041 e->ts.u.cl->length->ts.kind = gfc_charlen_int_kind;
6042 gfc_simplify_expr (e->ts.u.cl->length, 0);
6043 gfc_resolve_expr (e->ts.u.cl->length);
6044
6045 return;
6046 }
6047
6048
6049 /* Ensure that an character expression has a charlen and, if possible, a
6050 length expression. */
6051
6052 static void
6053 fixup_charlen (gfc_expr *e)
6054 {
6055 /* The cases fall through so that changes in expression type and the need
6056 for multiple fixes are picked up. In all circumstances, a charlen should
6057 be available for the middle end to hang a backend_decl on. */
6058 switch (e->expr_type)
6059 {
6060 case EXPR_OP:
6061 gfc_resolve_character_operator (e);
6062 /* FALLTHRU */
6063
6064 case EXPR_ARRAY:
6065 if (e->expr_type == EXPR_ARRAY)
6066 gfc_resolve_character_array_constructor (e);
6067 /* FALLTHRU */
6068
6069 case EXPR_SUBSTRING:
6070 if (!e->ts.u.cl && e->ref)
6071 gfc_resolve_substring_charlen (e);
6072 /* FALLTHRU */
6073
6074 default:
6075 if (!e->ts.u.cl)
6076 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
6077
6078 break;
6079 }
6080 }
6081
6082
6083 /* Update an actual argument to include the passed-object for type-bound
6084 procedures at the right position. */
6085
6086 static gfc_actual_arglist*
6087 update_arglist_pass (gfc_actual_arglist* lst, gfc_expr* po, unsigned argpos,
6088 const char *name)
6089 {
6090 gcc_assert (argpos > 0);
6091
6092 if (argpos == 1)
6093 {
6094 gfc_actual_arglist* result;
6095
6096 result = gfc_get_actual_arglist ();
6097 result->expr = po;
6098 result->next = lst;
6099 if (name)
6100 result->name = name;
6101
6102 return result;
6103 }
6104
6105 if (lst)
6106 lst->next = update_arglist_pass (lst->next, po, argpos - 1, name);
6107 else
6108 lst = update_arglist_pass (NULL, po, argpos - 1, name);
6109 return lst;
6110 }
6111
6112
6113 /* Extract the passed-object from an EXPR_COMPCALL (a copy of it). */
6114
6115 static gfc_expr*
6116 extract_compcall_passed_object (gfc_expr* e)
6117 {
6118 gfc_expr* po;
6119
6120 if (e->expr_type == EXPR_UNKNOWN)
6121 {
6122 gfc_error ("Error in typebound call at %L",
6123 &e->where);
6124 return NULL;
6125 }
6126
6127 gcc_assert (e->expr_type == EXPR_COMPCALL);
6128
6129 if (e->value.compcall.base_object)
6130 po = gfc_copy_expr (e->value.compcall.base_object);
6131 else
6132 {
6133 po = gfc_get_expr ();
6134 po->expr_type = EXPR_VARIABLE;
6135 po->symtree = e->symtree;
6136 po->ref = gfc_copy_ref (e->ref);
6137 po->where = e->where;
6138 }
6139
6140 if (!gfc_resolve_expr (po))
6141 return NULL;
6142
6143 return po;
6144 }
6145
6146
6147 /* Update the arglist of an EXPR_COMPCALL expression to include the
6148 passed-object. */
6149
6150 static bool
6151 update_compcall_arglist (gfc_expr* e)
6152 {
6153 gfc_expr* po;
6154 gfc_typebound_proc* tbp;
6155
6156 tbp = e->value.compcall.tbp;
6157
6158 if (tbp->error)
6159 return false;
6160
6161 po = extract_compcall_passed_object (e);
6162 if (!po)
6163 return false;
6164
6165 if (tbp->nopass || e->value.compcall.ignore_pass)
6166 {
6167 gfc_free_expr (po);
6168 return true;
6169 }
6170
6171 if (tbp->pass_arg_num <= 0)
6172 return false;
6173
6174 e->value.compcall.actual = update_arglist_pass (e->value.compcall.actual, po,
6175 tbp->pass_arg_num,
6176 tbp->pass_arg);
6177
6178 return true;
6179 }
6180
6181
6182 /* Extract the passed object from a PPC call (a copy of it). */
6183
6184 static gfc_expr*
6185 extract_ppc_passed_object (gfc_expr *e)
6186 {
6187 gfc_expr *po;
6188 gfc_ref **ref;
6189
6190 po = gfc_get_expr ();
6191 po->expr_type = EXPR_VARIABLE;
6192 po->symtree = e->symtree;
6193 po->ref = gfc_copy_ref (e->ref);
6194 po->where = e->where;
6195
6196 /* Remove PPC reference. */
6197 ref = &po->ref;
6198 while ((*ref)->next)
6199 ref = &(*ref)->next;
6200 gfc_free_ref_list (*ref);
6201 *ref = NULL;
6202
6203 if (!gfc_resolve_expr (po))
6204 return NULL;
6205
6206 return po;
6207 }
6208
6209
6210 /* Update the actual arglist of a procedure pointer component to include the
6211 passed-object. */
6212
6213 static bool
6214 update_ppc_arglist (gfc_expr* e)
6215 {
6216 gfc_expr* po;
6217 gfc_component *ppc;
6218 gfc_typebound_proc* tb;
6219
6220 ppc = gfc_get_proc_ptr_comp (e);
6221 if (!ppc)
6222 return false;
6223
6224 tb = ppc->tb;
6225
6226 if (tb->error)
6227 return false;
6228 else if (tb->nopass)
6229 return true;
6230
6231 po = extract_ppc_passed_object (e);
6232 if (!po)
6233 return false;
6234
6235 /* F08:R739. */
6236 if (po->rank != 0)
6237 {
6238 gfc_error ("Passed-object at %L must be scalar", &e->where);
6239 return false;
6240 }
6241
6242 /* F08:C611. */
6243 if (po->ts.type == BT_DERIVED && po->ts.u.derived->attr.abstract)
6244 {
6245 gfc_error ("Base object for procedure-pointer component call at %L is of"
6246 " ABSTRACT type %qs", &e->where, po->ts.u.derived->name);
6247 return false;
6248 }
6249
6250 gcc_assert (tb->pass_arg_num > 0);
6251 e->value.compcall.actual = update_arglist_pass (e->value.compcall.actual, po,
6252 tb->pass_arg_num,
6253 tb->pass_arg);
6254
6255 return true;
6256 }
6257
6258
6259 /* Check that the object a TBP is called on is valid, i.e. it must not be
6260 of ABSTRACT type (as in subobject%abstract_parent%tbp()). */
6261
6262 static bool
6263 check_typebound_baseobject (gfc_expr* e)
6264 {
6265 gfc_expr* base;
6266 bool return_value = false;
6267
6268 base = extract_compcall_passed_object (e);
6269 if (!base)
6270 return false;
6271
6272 if (base->ts.type != BT_DERIVED && base->ts.type != BT_CLASS)
6273 {
6274 gfc_error ("Error in typebound call at %L", &e->where);
6275 goto cleanup;
6276 }
6277
6278 if (base->ts.type == BT_CLASS && !gfc_expr_attr (base).class_ok)
6279 return false;
6280
6281 /* F08:C611. */
6282 if (base->ts.type == BT_DERIVED && base->ts.u.derived->attr.abstract)
6283 {
6284 gfc_error ("Base object for type-bound procedure call at %L is of"
6285 " ABSTRACT type %qs", &e->where, base->ts.u.derived->name);
6286 goto cleanup;
6287 }
6288
6289 /* F08:C1230. If the procedure called is NOPASS,
6290 the base object must be scalar. */
6291 if (e->value.compcall.tbp->nopass && base->rank != 0)
6292 {
6293 gfc_error ("Base object for NOPASS type-bound procedure call at %L must"
6294 " be scalar", &e->where);
6295 goto cleanup;
6296 }
6297
6298 return_value = true;
6299
6300 cleanup:
6301 gfc_free_expr (base);
6302 return return_value;
6303 }
6304
6305
6306 /* Resolve a call to a type-bound procedure, either function or subroutine,
6307 statically from the data in an EXPR_COMPCALL expression. The adapted
6308 arglist and the target-procedure symtree are returned. */
6309
6310 static bool
6311 resolve_typebound_static (gfc_expr* e, gfc_symtree** target,
6312 gfc_actual_arglist** actual)
6313 {
6314 gcc_assert (e->expr_type == EXPR_COMPCALL);
6315 gcc_assert (!e->value.compcall.tbp->is_generic);
6316
6317 /* Update the actual arglist for PASS. */
6318 if (!update_compcall_arglist (e))
6319 return false;
6320
6321 *actual = e->value.compcall.actual;
6322 *target = e->value.compcall.tbp->u.specific;
6323
6324 gfc_free_ref_list (e->ref);
6325 e->ref = NULL;
6326 e->value.compcall.actual = NULL;
6327
6328 /* If we find a deferred typebound procedure, check for derived types
6329 that an overriding typebound procedure has not been missed. */
6330 if (e->value.compcall.name
6331 && !e->value.compcall.tbp->non_overridable
6332 && e->value.compcall.base_object
6333 && e->value.compcall.base_object->ts.type == BT_DERIVED)
6334 {
6335 gfc_symtree *st;
6336 gfc_symbol *derived;
6337
6338 /* Use the derived type of the base_object. */
6339 derived = e->value.compcall.base_object->ts.u.derived;
6340 st = NULL;
6341
6342 /* If necessary, go through the inheritance chain. */
6343 while (!st && derived)
6344 {
6345 /* Look for the typebound procedure 'name'. */
6346 if (derived->f2k_derived && derived->f2k_derived->tb_sym_root)
6347 st = gfc_find_symtree (derived->f2k_derived->tb_sym_root,
6348 e->value.compcall.name);
6349 if (!st)
6350 derived = gfc_get_derived_super_type (derived);
6351 }
6352
6353 /* Now find the specific name in the derived type namespace. */
6354 if (st && st->n.tb && st->n.tb->u.specific)
6355 gfc_find_sym_tree (st->n.tb->u.specific->name,
6356 derived->ns, 1, &st);
6357 if (st)
6358 *target = st;
6359 }
6360 return true;
6361 }
6362
6363
6364 /* Get the ultimate declared type from an expression. In addition,
6365 return the last class/derived type reference and the copy of the
6366 reference list. If check_types is set true, derived types are
6367 identified as well as class references. */
6368 static gfc_symbol*
6369 get_declared_from_expr (gfc_ref **class_ref, gfc_ref **new_ref,
6370 gfc_expr *e, bool check_types)
6371 {
6372 gfc_symbol *declared;
6373 gfc_ref *ref;
6374
6375 declared = NULL;
6376 if (class_ref)
6377 *class_ref = NULL;
6378 if (new_ref)
6379 *new_ref = gfc_copy_ref (e->ref);
6380
6381 for (ref = e->ref; ref; ref = ref->next)
6382 {
6383 if (ref->type != REF_COMPONENT)
6384 continue;
6385
6386 if ((ref->u.c.component->ts.type == BT_CLASS
6387 || (check_types && gfc_bt_struct (ref->u.c.component->ts.type)))
6388 && ref->u.c.component->attr.flavor != FL_PROCEDURE)
6389 {
6390 declared = ref->u.c.component->ts.u.derived;
6391 if (class_ref)
6392 *class_ref = ref;
6393 }
6394 }
6395
6396 if (declared == NULL)
6397 declared = e->symtree->n.sym->ts.u.derived;
6398
6399 return declared;
6400 }
6401
6402
6403 /* Given an EXPR_COMPCALL calling a GENERIC typebound procedure, figure out
6404 which of the specific bindings (if any) matches the arglist and transform
6405 the expression into a call of that binding. */
6406
6407 static bool
6408 resolve_typebound_generic_call (gfc_expr* e, const char **name)
6409 {
6410 gfc_typebound_proc* genproc;
6411 const char* genname;
6412 gfc_symtree *st;
6413 gfc_symbol *derived;
6414
6415 gcc_assert (e->expr_type == EXPR_COMPCALL);
6416 genname = e->value.compcall.name;
6417 genproc = e->value.compcall.tbp;
6418
6419 if (!genproc->is_generic)
6420 return true;
6421
6422 /* Try the bindings on this type and in the inheritance hierarchy. */
6423 for (; genproc; genproc = genproc->overridden)
6424 {
6425 gfc_tbp_generic* g;
6426
6427 gcc_assert (genproc->is_generic);
6428 for (g = genproc->u.generic; g; g = g->next)
6429 {
6430 gfc_symbol* target;
6431 gfc_actual_arglist* args;
6432 bool matches;
6433
6434 gcc_assert (g->specific);
6435
6436 if (g->specific->error)
6437 continue;
6438
6439 target = g->specific->u.specific->n.sym;
6440
6441 /* Get the right arglist by handling PASS/NOPASS. */
6442 args = gfc_copy_actual_arglist (e->value.compcall.actual);
6443 if (!g->specific->nopass)
6444 {
6445 gfc_expr* po;
6446 po = extract_compcall_passed_object (e);
6447 if (!po)
6448 {
6449 gfc_free_actual_arglist (args);
6450 return false;
6451 }
6452
6453 gcc_assert (g->specific->pass_arg_num > 0);
6454 gcc_assert (!g->specific->error);
6455 args = update_arglist_pass (args, po, g->specific->pass_arg_num,
6456 g->specific->pass_arg);
6457 }
6458 resolve_actual_arglist (args, target->attr.proc,
6459 is_external_proc (target)
6460 && gfc_sym_get_dummy_args (target) == NULL);
6461
6462 /* Check if this arglist matches the formal. */
6463 matches = gfc_arglist_matches_symbol (&args, target);
6464
6465 /* Clean up and break out of the loop if we've found it. */
6466 gfc_free_actual_arglist (args);
6467 if (matches)
6468 {
6469 e->value.compcall.tbp = g->specific;
6470 genname = g->specific_st->name;
6471 /* Pass along the name for CLASS methods, where the vtab
6472 procedure pointer component has to be referenced. */
6473 if (name)
6474 *name = genname;
6475 goto success;
6476 }
6477 }
6478 }
6479
6480 /* Nothing matching found! */
6481 gfc_error ("Found no matching specific binding for the call to the GENERIC"
6482 " %qs at %L", genname, &e->where);
6483 return false;
6484
6485 success:
6486 /* Make sure that we have the right specific instance for the name. */
6487 derived = get_declared_from_expr (NULL, NULL, e, true);
6488
6489 st = gfc_find_typebound_proc (derived, NULL, genname, true, &e->where);
6490 if (st)
6491 e->value.compcall.tbp = st->n.tb;
6492
6493 return true;
6494 }
6495
6496
6497 /* Resolve a call to a type-bound subroutine. */
6498
6499 static bool
6500 resolve_typebound_call (gfc_code* c, const char **name, bool *overridable)
6501 {
6502 gfc_actual_arglist* newactual;
6503 gfc_symtree* target;
6504
6505 /* Check that's really a SUBROUTINE. */
6506 if (!c->expr1->value.compcall.tbp->subroutine)
6507 {
6508 if (!c->expr1->value.compcall.tbp->is_generic
6509 && c->expr1->value.compcall.tbp->u.specific
6510 && c->expr1->value.compcall.tbp->u.specific->n.sym
6511 && c->expr1->value.compcall.tbp->u.specific->n.sym->attr.subroutine)
6512 c->expr1->value.compcall.tbp->subroutine = 1;
6513 else
6514 {
6515 gfc_error ("%qs at %L should be a SUBROUTINE",
6516 c->expr1->value.compcall.name, &c->loc);
6517 return false;
6518 }
6519 }
6520
6521 if (!check_typebound_baseobject (c->expr1))
6522 return false;
6523
6524 /* Pass along the name for CLASS methods, where the vtab
6525 procedure pointer component has to be referenced. */
6526 if (name)
6527 *name = c->expr1->value.compcall.name;
6528
6529 if (!resolve_typebound_generic_call (c->expr1, name))
6530 return false;
6531
6532 /* Pass along the NON_OVERRIDABLE attribute of the specific TBP. */
6533 if (overridable)
6534 *overridable = !c->expr1->value.compcall.tbp->non_overridable;
6535
6536 /* Transform into an ordinary EXEC_CALL for now. */
6537
6538 if (!resolve_typebound_static (c->expr1, &target, &newactual))
6539 return false;
6540
6541 c->ext.actual = newactual;
6542 c->symtree = target;
6543 c->op = (c->expr1->value.compcall.assign ? EXEC_ASSIGN_CALL : EXEC_CALL);
6544
6545 gcc_assert (!c->expr1->ref && !c->expr1->value.compcall.actual);
6546
6547 gfc_free_expr (c->expr1);
6548 c->expr1 = gfc_get_expr ();
6549 c->expr1->expr_type = EXPR_FUNCTION;
6550 c->expr1->symtree = target;
6551 c->expr1->where = c->loc;
6552
6553 return resolve_call (c);
6554 }
6555
6556
6557 /* Resolve a component-call expression. */
6558 static bool
6559 resolve_compcall (gfc_expr* e, const char **name)
6560 {
6561 gfc_actual_arglist* newactual;
6562 gfc_symtree* target;
6563
6564 /* Check that's really a FUNCTION. */
6565 if (!e->value.compcall.tbp->function)
6566 {
6567 gfc_error ("%qs at %L should be a FUNCTION",
6568 e->value.compcall.name, &e->where);
6569 return false;
6570 }
6571
6572
6573 /* These must not be assign-calls! */
6574 gcc_assert (!e->value.compcall.assign);
6575
6576 if (!check_typebound_baseobject (e))
6577 return false;
6578
6579 /* Pass along the name for CLASS methods, where the vtab
6580 procedure pointer component has to be referenced. */
6581 if (name)
6582 *name = e->value.compcall.name;
6583
6584 if (!resolve_typebound_generic_call (e, name))
6585 return false;
6586 gcc_assert (!e->value.compcall.tbp->is_generic);
6587
6588 /* Take the rank from the function's symbol. */
6589 if (e->value.compcall.tbp->u.specific->n.sym->as)
6590 e->rank = e->value.compcall.tbp->u.specific->n.sym->as->rank;
6591
6592 /* For now, we simply transform it into an EXPR_FUNCTION call with the same
6593 arglist to the TBP's binding target. */
6594
6595 if (!resolve_typebound_static (e, &target, &newactual))
6596 return false;
6597
6598 e->value.function.actual = newactual;
6599 e->value.function.name = NULL;
6600 e->value.function.esym = target->n.sym;
6601 e->value.function.isym = NULL;
6602 e->symtree = target;
6603 e->ts = target->n.sym->ts;
6604 e->expr_type = EXPR_FUNCTION;
6605
6606 /* Resolution is not necessary if this is a class subroutine; this
6607 function only has to identify the specific proc. Resolution of
6608 the call will be done next in resolve_typebound_call. */
6609 return gfc_resolve_expr (e);
6610 }
6611
6612
6613 static bool resolve_fl_derived (gfc_symbol *sym);
6614
6615
6616 /* Resolve a typebound function, or 'method'. First separate all
6617 the non-CLASS references by calling resolve_compcall directly. */
6618
6619 static bool
6620 resolve_typebound_function (gfc_expr* e)
6621 {
6622 gfc_symbol *declared;
6623 gfc_component *c;
6624 gfc_ref *new_ref;
6625 gfc_ref *class_ref;
6626 gfc_symtree *st;
6627 const char *name;
6628 gfc_typespec ts;
6629 gfc_expr *expr;
6630 bool overridable;
6631
6632 st = e->symtree;
6633
6634 /* Deal with typebound operators for CLASS objects. */
6635 expr = e->value.compcall.base_object;
6636 overridable = !e->value.compcall.tbp->non_overridable;
6637 if (expr && expr->ts.type == BT_CLASS && e->value.compcall.name)
6638 {
6639 /* Since the typebound operators are generic, we have to ensure
6640 that any delays in resolution are corrected and that the vtab
6641 is present. */
6642 ts = expr->ts;
6643 declared = ts.u.derived;
6644 c = gfc_find_component (declared, "_vptr", true, true, NULL);
6645 if (c->ts.u.derived == NULL)
6646 c->ts.u.derived = gfc_find_derived_vtab (declared);
6647
6648 if (!resolve_compcall (e, &name))
6649 return false;
6650
6651 /* Use the generic name if it is there. */
6652 name = name ? name : e->value.function.esym->name;
6653 e->symtree = expr->symtree;
6654 e->ref = gfc_copy_ref (expr->ref);
6655 get_declared_from_expr (&class_ref, NULL, e, false);
6656
6657 /* Trim away the extraneous references that emerge from nested
6658 use of interface.c (extend_expr). */
6659 if (class_ref && class_ref->next)
6660 {
6661 gfc_free_ref_list (class_ref->next);
6662 class_ref->next = NULL;
6663 }
6664 else if (e->ref && !class_ref && expr->ts.type != BT_CLASS)
6665 {
6666 gfc_free_ref_list (e->ref);
6667 e->ref = NULL;
6668 }
6669
6670 gfc_add_vptr_component (e);
6671 gfc_add_component_ref (e, name);
6672 e->value.function.esym = NULL;
6673 if (expr->expr_type != EXPR_VARIABLE)
6674 e->base_expr = expr;
6675 return true;
6676 }
6677
6678 if (st == NULL)
6679 return resolve_compcall (e, NULL);
6680
6681 if (!gfc_resolve_ref (e))
6682 return false;
6683
6684 /* Get the CLASS declared type. */
6685 declared = get_declared_from_expr (&class_ref, &new_ref, e, true);
6686
6687 if (!resolve_fl_derived (declared))
6688 return false;
6689
6690 /* Weed out cases of the ultimate component being a derived type. */
6691 if ((class_ref && gfc_bt_struct (class_ref->u.c.component->ts.type))
6692 || (!class_ref && st->n.sym->ts.type != BT_CLASS))
6693 {
6694 gfc_free_ref_list (new_ref);
6695 return resolve_compcall (e, NULL);
6696 }
6697
6698 c = gfc_find_component (declared, "_data", true, true, NULL);
6699
6700 /* Treat the call as if it is a typebound procedure, in order to roll
6701 out the correct name for the specific function. */
6702 if (!resolve_compcall (e, &name))
6703 {
6704 gfc_free_ref_list (new_ref);
6705 return false;
6706 }
6707 ts = e->ts;
6708
6709 if (overridable)
6710 {
6711 /* Convert the expression to a procedure pointer component call. */
6712 e->value.function.esym = NULL;
6713 e->symtree = st;
6714
6715 if (new_ref)
6716 e->ref = new_ref;
6717
6718 /* '_vptr' points to the vtab, which contains the procedure pointers. */
6719 gfc_add_vptr_component (e);
6720 gfc_add_component_ref (e, name);
6721
6722 /* Recover the typespec for the expression. This is really only
6723 necessary for generic procedures, where the additional call
6724 to gfc_add_component_ref seems to throw the collection of the
6725 correct typespec. */
6726 e->ts = ts;
6727 }
6728 else if (new_ref)
6729 gfc_free_ref_list (new_ref);
6730
6731 return true;
6732 }
6733
6734 /* Resolve a typebound subroutine, or 'method'. First separate all
6735 the non-CLASS references by calling resolve_typebound_call
6736 directly. */
6737
6738 static bool
6739 resolve_typebound_subroutine (gfc_code *code)
6740 {
6741 gfc_symbol *declared;
6742 gfc_component *c;
6743 gfc_ref *new_ref;
6744 gfc_ref *class_ref;
6745 gfc_symtree *st;
6746 const char *name;
6747 gfc_typespec ts;
6748 gfc_expr *expr;
6749 bool overridable;
6750
6751 st = code->expr1->symtree;
6752
6753 /* Deal with typebound operators for CLASS objects. */
6754 expr = code->expr1->value.compcall.base_object;
6755 overridable = !code->expr1->value.compcall.tbp->non_overridable;
6756 if (expr && expr->ts.type == BT_CLASS && code->expr1->value.compcall.name)
6757 {
6758 /* If the base_object is not a variable, the corresponding actual
6759 argument expression must be stored in e->base_expression so
6760 that the corresponding tree temporary can be used as the base
6761 object in gfc_conv_procedure_call. */
6762 if (expr->expr_type != EXPR_VARIABLE)
6763 {
6764 gfc_actual_arglist *args;
6765
6766 args= code->expr1->value.function.actual;
6767 for (; args; args = args->next)
6768 if (expr == args->expr)
6769 expr = args->expr;
6770 }
6771
6772 /* Since the typebound operators are generic, we have to ensure
6773 that any delays in resolution are corrected and that the vtab
6774 is present. */
6775 declared = expr->ts.u.derived;
6776 c = gfc_find_component (declared, "_vptr", true, true, NULL);
6777 if (c->ts.u.derived == NULL)
6778 c->ts.u.derived = gfc_find_derived_vtab (declared);
6779
6780 if (!resolve_typebound_call (code, &name, NULL))
6781 return false;
6782
6783 /* Use the generic name if it is there. */
6784 name = name ? name : code->expr1->value.function.esym->name;
6785 code->expr1->symtree = expr->symtree;
6786 code->expr1->ref = gfc_copy_ref (expr->ref);
6787
6788 /* Trim away the extraneous references that emerge from nested
6789 use of interface.c (extend_expr). */
6790 get_declared_from_expr (&class_ref, NULL, code->expr1, false);
6791 if (class_ref && class_ref->next)
6792 {
6793 gfc_free_ref_list (class_ref->next);
6794 class_ref->next = NULL;
6795 }
6796 else if (code->expr1->ref && !class_ref)
6797 {
6798 gfc_free_ref_list (code->expr1->ref);
6799 code->expr1->ref = NULL;
6800 }
6801
6802 /* Now use the procedure in the vtable. */
6803 gfc_add_vptr_component (code->expr1);
6804 gfc_add_component_ref (code->expr1, name);
6805 code->expr1->value.function.esym = NULL;
6806 if (expr->expr_type != EXPR_VARIABLE)
6807 code->expr1->base_expr = expr;
6808 return true;
6809 }
6810
6811 if (st == NULL)
6812 return resolve_typebound_call (code, NULL, NULL);
6813
6814 if (!gfc_resolve_ref (code->expr1))
6815 return false;
6816
6817 /* Get the CLASS declared type. */
6818 get_declared_from_expr (&class_ref, &new_ref, code->expr1, true);
6819
6820 /* Weed out cases of the ultimate component being a derived type. */
6821 if ((class_ref && gfc_bt_struct (class_ref->u.c.component->ts.type))
6822 || (!class_ref && st->n.sym->ts.type != BT_CLASS))
6823 {
6824 gfc_free_ref_list (new_ref);
6825 return resolve_typebound_call (code, NULL, NULL);
6826 }
6827
6828 if (!resolve_typebound_call (code, &name, &overridable))
6829 {
6830 gfc_free_ref_list (new_ref);
6831 return false;
6832 }
6833 ts = code->expr1->ts;
6834
6835 if (overridable)
6836 {
6837 /* Convert the expression to a procedure pointer component call. */
6838 code->expr1->value.function.esym = NULL;
6839 code->expr1->symtree = st;
6840
6841 if (new_ref)
6842 code->expr1->ref = new_ref;
6843
6844 /* '_vptr' points to the vtab, which contains the procedure pointers. */
6845 gfc_add_vptr_component (code->expr1);
6846 gfc_add_component_ref (code->expr1, name);
6847
6848 /* Recover the typespec for the expression. This is really only
6849 necessary for generic procedures, where the additional call
6850 to gfc_add_component_ref seems to throw the collection of the
6851 correct typespec. */
6852 code->expr1->ts = ts;
6853 }
6854 else if (new_ref)
6855 gfc_free_ref_list (new_ref);
6856
6857 return true;
6858 }
6859
6860
6861 /* Resolve a CALL to a Procedure Pointer Component (Subroutine). */
6862
6863 static bool
6864 resolve_ppc_call (gfc_code* c)
6865 {
6866 gfc_component *comp;
6867
6868 comp = gfc_get_proc_ptr_comp (c->expr1);
6869 gcc_assert (comp != NULL);
6870
6871 c->resolved_sym = c->expr1->symtree->n.sym;
6872 c->expr1->expr_type = EXPR_VARIABLE;
6873
6874 if (!comp->attr.subroutine)
6875 gfc_add_subroutine (&comp->attr, comp->name, &c->expr1->where);
6876
6877 if (!gfc_resolve_ref (c->expr1))
6878 return false;
6879
6880 if (!update_ppc_arglist (c->expr1))
6881 return false;
6882
6883 c->ext.actual = c->expr1->value.compcall.actual;
6884
6885 if (!resolve_actual_arglist (c->ext.actual, comp->attr.proc,
6886 !(comp->ts.interface
6887 && comp->ts.interface->formal)))
6888 return false;
6889
6890 if (!pure_subroutine (comp->ts.interface, comp->name, &c->expr1->where))
6891 return false;
6892
6893 gfc_ppc_use (comp, &c->expr1->value.compcall.actual, &c->expr1->where);
6894
6895 return true;
6896 }
6897
6898
6899 /* Resolve a Function Call to a Procedure Pointer Component (Function). */
6900
6901 static bool
6902 resolve_expr_ppc (gfc_expr* e)
6903 {
6904 gfc_component *comp;
6905
6906 comp = gfc_get_proc_ptr_comp (e);
6907 gcc_assert (comp != NULL);
6908
6909 /* Convert to EXPR_FUNCTION. */
6910 e->expr_type = EXPR_FUNCTION;
6911 e->value.function.isym = NULL;
6912 e->value.function.actual = e->value.compcall.actual;
6913 e->ts = comp->ts;
6914 if (comp->as != NULL)
6915 e->rank = comp->as->rank;
6916
6917 if (!comp->attr.function)
6918 gfc_add_function (&comp->attr, comp->name, &e->where);
6919
6920 if (!gfc_resolve_ref (e))
6921 return false;
6922
6923 if (!resolve_actual_arglist (e->value.function.actual, comp->attr.proc,
6924 !(comp->ts.interface
6925 && comp->ts.interface->formal)))
6926 return false;
6927
6928 if (!update_ppc_arglist (e))
6929 return false;
6930
6931 if (!check_pure_function(e))
6932 return false;
6933
6934 gfc_ppc_use (comp, &e->value.compcall.actual, &e->where);
6935
6936 return true;
6937 }
6938
6939
6940 static bool
6941 gfc_is_expandable_expr (gfc_expr *e)
6942 {
6943 gfc_constructor *con;
6944
6945 if (e->expr_type == EXPR_ARRAY)
6946 {
6947 /* Traverse the constructor looking for variables that are flavor
6948 parameter. Parameters must be expanded since they are fully used at
6949 compile time. */
6950 con = gfc_constructor_first (e->value.constructor);
6951 for (; con; con = gfc_constructor_next (con))
6952 {
6953 if (con->expr->expr_type == EXPR_VARIABLE
6954 && con->expr->symtree
6955 && (con->expr->symtree->n.sym->attr.flavor == FL_PARAMETER
6956 || con->expr->symtree->n.sym->attr.flavor == FL_VARIABLE))
6957 return true;
6958 if (con->expr->expr_type == EXPR_ARRAY
6959 && gfc_is_expandable_expr (con->expr))
6960 return true;
6961 }
6962 }
6963
6964 return false;
6965 }
6966
6967
6968 /* Sometimes variables in specification expressions of the result
6969 of module procedures in submodules wind up not being the 'real'
6970 dummy. Find this, if possible, in the namespace of the first
6971 formal argument. */
6972
6973 static void
6974 fixup_unique_dummy (gfc_expr *e)
6975 {
6976 gfc_symtree *st = NULL;
6977 gfc_symbol *s = NULL;
6978
6979 if (e->symtree->n.sym->ns->proc_name
6980 && e->symtree->n.sym->ns->proc_name->formal)
6981 s = e->symtree->n.sym->ns->proc_name->formal->sym;
6982
6983 if (s != NULL)
6984 st = gfc_find_symtree (s->ns->sym_root, e->symtree->n.sym->name);
6985
6986 if (st != NULL
6987 && st->n.sym != NULL
6988 && st->n.sym->attr.dummy)
6989 e->symtree = st;
6990 }
6991
6992 /* Resolve an expression. That is, make sure that types of operands agree
6993 with their operators, intrinsic operators are converted to function calls
6994 for overloaded types and unresolved function references are resolved. */
6995
6996 bool
6997 gfc_resolve_expr (gfc_expr *e)
6998 {
6999 bool t;
7000 bool inquiry_save, actual_arg_save, first_actual_arg_save;
7001
7002 if (e == NULL || e->do_not_resolve_again)
7003 return true;
7004
7005 /* inquiry_argument only applies to variables. */
7006 inquiry_save = inquiry_argument;
7007 actual_arg_save = actual_arg;
7008 first_actual_arg_save = first_actual_arg;
7009
7010 if (e->expr_type != EXPR_VARIABLE)
7011 {
7012 inquiry_argument = false;
7013 actual_arg = false;
7014 first_actual_arg = false;
7015 }
7016 else if (e->symtree != NULL
7017 && *e->symtree->name == '@'
7018 && e->symtree->n.sym->attr.dummy)
7019 {
7020 /* Deal with submodule specification expressions that are not
7021 found to be referenced in module.c(read_cleanup). */
7022 fixup_unique_dummy (e);
7023 }
7024
7025 switch (e->expr_type)
7026 {
7027 case EXPR_OP:
7028 t = resolve_operator (e);
7029 break;
7030
7031 case EXPR_FUNCTION:
7032 case EXPR_VARIABLE:
7033
7034 if (check_host_association (e))
7035 t = resolve_function (e);
7036 else
7037 t = resolve_variable (e);
7038
7039 if (e->ts.type == BT_CHARACTER && e->ts.u.cl == NULL && e->ref
7040 && e->ref->type != REF_SUBSTRING)
7041 gfc_resolve_substring_charlen (e);
7042
7043 break;
7044
7045 case EXPR_COMPCALL:
7046 t = resolve_typebound_function (e);
7047 break;
7048
7049 case EXPR_SUBSTRING:
7050 t = gfc_resolve_ref (e);
7051 break;
7052
7053 case EXPR_CONSTANT:
7054 case EXPR_NULL:
7055 t = true;
7056 break;
7057
7058 case EXPR_PPC:
7059 t = resolve_expr_ppc (e);
7060 break;
7061
7062 case EXPR_ARRAY:
7063 t = false;
7064 if (!gfc_resolve_ref (e))
7065 break;
7066
7067 t = gfc_resolve_array_constructor (e);
7068 /* Also try to expand a constructor. */
7069 if (t)
7070 {
7071 gfc_expression_rank (e);
7072 if (gfc_is_constant_expr (e) || gfc_is_expandable_expr (e))
7073 gfc_expand_constructor (e, false);
7074 }
7075
7076 /* This provides the opportunity for the length of constructors with
7077 character valued function elements to propagate the string length
7078 to the expression. */
7079 if (t && e->ts.type == BT_CHARACTER)
7080 {
7081 /* For efficiency, we call gfc_expand_constructor for BT_CHARACTER
7082 here rather then add a duplicate test for it above. */
7083 gfc_expand_constructor (e, false);
7084 t = gfc_resolve_character_array_constructor (e);
7085 }
7086
7087 break;
7088
7089 case EXPR_STRUCTURE:
7090 t = gfc_resolve_ref (e);
7091 if (!t)
7092 break;
7093
7094 t = resolve_structure_cons (e, 0);
7095 if (!t)
7096 break;
7097
7098 t = gfc_simplify_expr (e, 0);
7099 break;
7100
7101 default:
7102 gfc_internal_error ("gfc_resolve_expr(): Bad expression type");
7103 }
7104
7105 if (e->ts.type == BT_CHARACTER && t && !e->ts.u.cl)
7106 fixup_charlen (e);
7107
7108 inquiry_argument = inquiry_save;
7109 actual_arg = actual_arg_save;
7110 first_actual_arg = first_actual_arg_save;
7111
7112 /* For some reason, resolving these expressions a second time mangles
7113 the typespec of the expression itself. */
7114 if (t && e->expr_type == EXPR_VARIABLE
7115 && e->symtree->n.sym->attr.select_rank_temporary
7116 && UNLIMITED_POLY (e->symtree->n.sym))
7117 e->do_not_resolve_again = 1;
7118
7119 return t;
7120 }
7121
7122
7123 /* Resolve an expression from an iterator. They must be scalar and have
7124 INTEGER or (optionally) REAL type. */
7125
7126 static bool
7127 gfc_resolve_iterator_expr (gfc_expr *expr, bool real_ok,
7128 const char *name_msgid)
7129 {
7130 if (!gfc_resolve_expr (expr))
7131 return false;
7132
7133 if (expr->rank != 0)
7134 {
7135 gfc_error ("%s at %L must be a scalar", _(name_msgid), &expr->where);
7136 return false;
7137 }
7138
7139 if (expr->ts.type != BT_INTEGER)
7140 {
7141 if (expr->ts.type == BT_REAL)
7142 {
7143 if (real_ok)
7144 return gfc_notify_std (GFC_STD_F95_DEL,
7145 "%s at %L must be integer",
7146 _(name_msgid), &expr->where);
7147 else
7148 {
7149 gfc_error ("%s at %L must be INTEGER", _(name_msgid),
7150 &expr->where);
7151 return false;
7152 }
7153 }
7154 else
7155 {
7156 gfc_error ("%s at %L must be INTEGER", _(name_msgid), &expr->where);
7157 return false;
7158 }
7159 }
7160 return true;
7161 }
7162
7163
7164 /* Resolve the expressions in an iterator structure. If REAL_OK is
7165 false allow only INTEGER type iterators, otherwise allow REAL types.
7166 Set own_scope to true for ac-implied-do and data-implied-do as those
7167 have a separate scope such that, e.g., a INTENT(IN) doesn't apply. */
7168
7169 bool
7170 gfc_resolve_iterator (gfc_iterator *iter, bool real_ok, bool own_scope)
7171 {
7172 if (!gfc_resolve_iterator_expr (iter->var, real_ok, "Loop variable"))
7173 return false;
7174
7175 if (!gfc_check_vardef_context (iter->var, false, false, own_scope,
7176 _("iterator variable")))
7177 return false;
7178
7179 if (!gfc_resolve_iterator_expr (iter->start, real_ok,
7180 "Start expression in DO loop"))
7181 return false;
7182
7183 if (!gfc_resolve_iterator_expr (iter->end, real_ok,
7184 "End expression in DO loop"))
7185 return false;
7186
7187 if (!gfc_resolve_iterator_expr (iter->step, real_ok,
7188 "Step expression in DO loop"))
7189 return false;
7190
7191 /* Convert start, end, and step to the same type as var. */
7192 if (iter->start->ts.kind != iter->var->ts.kind
7193 || iter->start->ts.type != iter->var->ts.type)
7194 gfc_convert_type (iter->start, &iter->var->ts, 1);
7195
7196 if (iter->end->ts.kind != iter->var->ts.kind
7197 || iter->end->ts.type != iter->var->ts.type)
7198 gfc_convert_type (iter->end, &iter->var->ts, 1);
7199
7200 if (iter->step->ts.kind != iter->var->ts.kind
7201 || iter->step->ts.type != iter->var->ts.type)
7202 gfc_convert_type (iter->step, &iter->var->ts, 1);
7203
7204 if (iter->step->expr_type == EXPR_CONSTANT)
7205 {
7206 if ((iter->step->ts.type == BT_INTEGER
7207 && mpz_cmp_ui (iter->step->value.integer, 0) == 0)
7208 || (iter->step->ts.type == BT_REAL
7209 && mpfr_sgn (iter->step->value.real) == 0))
7210 {
7211 gfc_error ("Step expression in DO loop at %L cannot be zero",
7212 &iter->step->where);
7213 return false;
7214 }
7215 }
7216
7217 if (iter->start->expr_type == EXPR_CONSTANT
7218 && iter->end->expr_type == EXPR_CONSTANT
7219 && iter->step->expr_type == EXPR_CONSTANT)
7220 {
7221 int sgn, cmp;
7222 if (iter->start->ts.type == BT_INTEGER)
7223 {
7224 sgn = mpz_cmp_ui (iter->step->value.integer, 0);
7225 cmp = mpz_cmp (iter->end->value.integer, iter->start->value.integer);
7226 }
7227 else
7228 {
7229 sgn = mpfr_sgn (iter->step->value.real);
7230 cmp = mpfr_cmp (iter->end->value.real, iter->start->value.real);
7231 }
7232 if (warn_zerotrip && ((sgn > 0 && cmp < 0) || (sgn < 0 && cmp > 0)))
7233 gfc_warning (OPT_Wzerotrip,
7234 "DO loop at %L will be executed zero times",
7235 &iter->step->where);
7236 }
7237
7238 if (iter->end->expr_type == EXPR_CONSTANT
7239 && iter->end->ts.type == BT_INTEGER
7240 && iter->step->expr_type == EXPR_CONSTANT
7241 && iter->step->ts.type == BT_INTEGER
7242 && (mpz_cmp_si (iter->step->value.integer, -1L) == 0
7243 || mpz_cmp_si (iter->step->value.integer, 1L) == 0))
7244 {
7245 bool is_step_positive = mpz_cmp_ui (iter->step->value.integer, 1) == 0;
7246 int k = gfc_validate_kind (BT_INTEGER, iter->end->ts.kind, false);
7247
7248 if (is_step_positive
7249 && mpz_cmp (iter->end->value.integer, gfc_integer_kinds[k].huge) == 0)
7250 gfc_warning (OPT_Wundefined_do_loop,
7251 "DO loop at %L is undefined as it overflows",
7252 &iter->step->where);
7253 else if (!is_step_positive
7254 && mpz_cmp (iter->end->value.integer,
7255 gfc_integer_kinds[k].min_int) == 0)
7256 gfc_warning (OPT_Wundefined_do_loop,
7257 "DO loop at %L is undefined as it underflows",
7258 &iter->step->where);
7259 }
7260
7261 return true;
7262 }
7263
7264
7265 /* Traversal function for find_forall_index. f == 2 signals that
7266 that variable itself is not to be checked - only the references. */
7267
7268 static bool
7269 forall_index (gfc_expr *expr, gfc_symbol *sym, int *f)
7270 {
7271 if (expr->expr_type != EXPR_VARIABLE)
7272 return false;
7273
7274 /* A scalar assignment */
7275 if (!expr->ref || *f == 1)
7276 {
7277 if (expr->symtree->n.sym == sym)
7278 return true;
7279 else
7280 return false;
7281 }
7282
7283 if (*f == 2)
7284 *f = 1;
7285 return false;
7286 }
7287
7288
7289 /* Check whether the FORALL index appears in the expression or not.
7290 Returns true if SYM is found in EXPR. */
7291
7292 bool
7293 find_forall_index (gfc_expr *expr, gfc_symbol *sym, int f)
7294 {
7295 if (gfc_traverse_expr (expr, sym, forall_index, f))
7296 return true;
7297 else
7298 return false;
7299 }
7300
7301
7302 /* Resolve a list of FORALL iterators. The FORALL index-name is constrained
7303 to be a scalar INTEGER variable. The subscripts and stride are scalar
7304 INTEGERs, and if stride is a constant it must be nonzero.
7305 Furthermore "A subscript or stride in a forall-triplet-spec shall
7306 not contain a reference to any index-name in the
7307 forall-triplet-spec-list in which it appears." (7.5.4.1) */
7308
7309 static void
7310 resolve_forall_iterators (gfc_forall_iterator *it)
7311 {
7312 gfc_forall_iterator *iter, *iter2;
7313
7314 for (iter = it; iter; iter = iter->next)
7315 {
7316 if (gfc_resolve_expr (iter->var)
7317 && (iter->var->ts.type != BT_INTEGER || iter->var->rank != 0))
7318 gfc_error ("FORALL index-name at %L must be a scalar INTEGER",
7319 &iter->var->where);
7320
7321 if (gfc_resolve_expr (iter->start)
7322 && (iter->start->ts.type != BT_INTEGER || iter->start->rank != 0))
7323 gfc_error ("FORALL start expression at %L must be a scalar INTEGER",
7324 &iter->start->where);
7325 if (iter->var->ts.kind != iter->start->ts.kind)
7326 gfc_convert_type (iter->start, &iter->var->ts, 1);
7327
7328 if (gfc_resolve_expr (iter->end)
7329 && (iter->end->ts.type != BT_INTEGER || iter->end->rank != 0))
7330 gfc_error ("FORALL end expression at %L must be a scalar INTEGER",
7331 &iter->end->where);
7332 if (iter->var->ts.kind != iter->end->ts.kind)
7333 gfc_convert_type (iter->end, &iter->var->ts, 1);
7334
7335 if (gfc_resolve_expr (iter->stride))
7336 {
7337 if (iter->stride->ts.type != BT_INTEGER || iter->stride->rank != 0)
7338 gfc_error ("FORALL stride expression at %L must be a scalar %s",
7339 &iter->stride->where, "INTEGER");
7340
7341 if (iter->stride->expr_type == EXPR_CONSTANT
7342 && mpz_cmp_ui (iter->stride->value.integer, 0) == 0)
7343 gfc_error ("FORALL stride expression at %L cannot be zero",
7344 &iter->stride->where);
7345 }
7346 if (iter->var->ts.kind != iter->stride->ts.kind)
7347 gfc_convert_type (iter->stride, &iter->var->ts, 1);
7348 }
7349
7350 for (iter = it; iter; iter = iter->next)
7351 for (iter2 = iter; iter2; iter2 = iter2->next)
7352 {
7353 if (find_forall_index (iter2->start, iter->var->symtree->n.sym, 0)
7354 || find_forall_index (iter2->end, iter->var->symtree->n.sym, 0)
7355 || find_forall_index (iter2->stride, iter->var->symtree->n.sym, 0))
7356 gfc_error ("FORALL index %qs may not appear in triplet "
7357 "specification at %L", iter->var->symtree->name,
7358 &iter2->start->where);
7359 }
7360 }
7361
7362
7363 /* Given a pointer to a symbol that is a derived type, see if it's
7364 inaccessible, i.e. if it's defined in another module and the components are
7365 PRIVATE. The search is recursive if necessary. Returns zero if no
7366 inaccessible components are found, nonzero otherwise. */
7367
7368 static int
7369 derived_inaccessible (gfc_symbol *sym)
7370 {
7371 gfc_component *c;
7372
7373 if (sym->attr.use_assoc && sym->attr.private_comp)
7374 return 1;
7375
7376 for (c = sym->components; c; c = c->next)
7377 {
7378 /* Prevent an infinite loop through this function. */
7379 if (c->ts.type == BT_DERIVED && c->attr.pointer
7380 && sym == c->ts.u.derived)
7381 continue;
7382
7383 if (c->ts.type == BT_DERIVED && derived_inaccessible (c->ts.u.derived))
7384 return 1;
7385 }
7386
7387 return 0;
7388 }
7389
7390
7391 /* Resolve the argument of a deallocate expression. The expression must be
7392 a pointer or a full array. */
7393
7394 static bool
7395 resolve_deallocate_expr (gfc_expr *e)
7396 {
7397 symbol_attribute attr;
7398 int allocatable, pointer;
7399 gfc_ref *ref;
7400 gfc_symbol *sym;
7401 gfc_component *c;
7402 bool unlimited;
7403
7404 if (!gfc_resolve_expr (e))
7405 return false;
7406
7407 if (e->expr_type != EXPR_VARIABLE)
7408 goto bad;
7409
7410 sym = e->symtree->n.sym;
7411 unlimited = UNLIMITED_POLY(sym);
7412
7413 if (sym->ts.type == BT_CLASS)
7414 {
7415 allocatable = CLASS_DATA (sym)->attr.allocatable;
7416 pointer = CLASS_DATA (sym)->attr.class_pointer;
7417 }
7418 else
7419 {
7420 allocatable = sym->attr.allocatable;
7421 pointer = sym->attr.pointer;
7422 }
7423 for (ref = e->ref; ref; ref = ref->next)
7424 {
7425 switch (ref->type)
7426 {
7427 case REF_ARRAY:
7428 if (ref->u.ar.type != AR_FULL
7429 && !(ref->u.ar.type == AR_ELEMENT && ref->u.ar.as->rank == 0
7430 && ref->u.ar.codimen && gfc_ref_this_image (ref)))
7431 allocatable = 0;
7432 break;
7433
7434 case REF_COMPONENT:
7435 c = ref->u.c.component;
7436 if (c->ts.type == BT_CLASS)
7437 {
7438 allocatable = CLASS_DATA (c)->attr.allocatable;
7439 pointer = CLASS_DATA (c)->attr.class_pointer;
7440 }
7441 else
7442 {
7443 allocatable = c->attr.allocatable;
7444 pointer = c->attr.pointer;
7445 }
7446 break;
7447
7448 case REF_SUBSTRING:
7449 case REF_INQUIRY:
7450 allocatable = 0;
7451 break;
7452 }
7453 }
7454
7455 attr = gfc_expr_attr (e);
7456
7457 if (allocatable == 0 && attr.pointer == 0 && !unlimited)
7458 {
7459 bad:
7460 gfc_error ("Allocate-object at %L must be ALLOCATABLE or a POINTER",
7461 &e->where);
7462 return false;
7463 }
7464
7465 /* F2008, C644. */
7466 if (gfc_is_coindexed (e))
7467 {
7468 gfc_error ("Coindexed allocatable object at %L", &e->where);
7469 return false;
7470 }
7471
7472 if (pointer
7473 && !gfc_check_vardef_context (e, true, true, false,
7474 _("DEALLOCATE object")))
7475 return false;
7476 if (!gfc_check_vardef_context (e, false, true, false,
7477 _("DEALLOCATE object")))
7478 return false;
7479
7480 return true;
7481 }
7482
7483
7484 /* Returns true if the expression e contains a reference to the symbol sym. */
7485 static bool
7486 sym_in_expr (gfc_expr *e, gfc_symbol *sym, int *f ATTRIBUTE_UNUSED)
7487 {
7488 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym == sym)
7489 return true;
7490
7491 return false;
7492 }
7493
7494 bool
7495 gfc_find_sym_in_expr (gfc_symbol *sym, gfc_expr *e)
7496 {
7497 return gfc_traverse_expr (e, sym, sym_in_expr, 0);
7498 }
7499
7500
7501 /* Given the expression node e for an allocatable/pointer of derived type to be
7502 allocated, get the expression node to be initialized afterwards (needed for
7503 derived types with default initializers, and derived types with allocatable
7504 components that need nullification.) */
7505
7506 gfc_expr *
7507 gfc_expr_to_initialize (gfc_expr *e)
7508 {
7509 gfc_expr *result;
7510 gfc_ref *ref;
7511 int i;
7512
7513 result = gfc_copy_expr (e);
7514
7515 /* Change the last array reference from AR_ELEMENT to AR_FULL. */
7516 for (ref = result->ref; ref; ref = ref->next)
7517 if (ref->type == REF_ARRAY && ref->next == NULL)
7518 {
7519 if (ref->u.ar.dimen == 0
7520 && ref->u.ar.as && ref->u.ar.as->corank)
7521 return result;
7522
7523 ref->u.ar.type = AR_FULL;
7524
7525 for (i = 0; i < ref->u.ar.dimen; i++)
7526 ref->u.ar.start[i] = ref->u.ar.end[i] = ref->u.ar.stride[i] = NULL;
7527
7528 break;
7529 }
7530
7531 gfc_free_shape (&result->shape, result->rank);
7532
7533 /* Recalculate rank, shape, etc. */
7534 gfc_resolve_expr (result);
7535 return result;
7536 }
7537
7538
7539 /* If the last ref of an expression is an array ref, return a copy of the
7540 expression with that one removed. Otherwise, a copy of the original
7541 expression. This is used for allocate-expressions and pointer assignment
7542 LHS, where there may be an array specification that needs to be stripped
7543 off when using gfc_check_vardef_context. */
7544
7545 static gfc_expr*
7546 remove_last_array_ref (gfc_expr* e)
7547 {
7548 gfc_expr* e2;
7549 gfc_ref** r;
7550
7551 e2 = gfc_copy_expr (e);
7552 for (r = &e2->ref; *r; r = &(*r)->next)
7553 if ((*r)->type == REF_ARRAY && !(*r)->next)
7554 {
7555 gfc_free_ref_list (*r);
7556 *r = NULL;
7557 break;
7558 }
7559
7560 return e2;
7561 }
7562
7563
7564 /* Used in resolve_allocate_expr to check that a allocation-object and
7565 a source-expr are conformable. This does not catch all possible
7566 cases; in particular a runtime checking is needed. */
7567
7568 static bool
7569 conformable_arrays (gfc_expr *e1, gfc_expr *e2)
7570 {
7571 gfc_ref *tail;
7572 for (tail = e2->ref; tail && tail->next; tail = tail->next);
7573
7574 /* First compare rank. */
7575 if ((tail && (!tail->u.ar.as || e1->rank != tail->u.ar.as->rank))
7576 || (!tail && e1->rank != e2->rank))
7577 {
7578 gfc_error ("Source-expr at %L must be scalar or have the "
7579 "same rank as the allocate-object at %L",
7580 &e1->where, &e2->where);
7581 return false;
7582 }
7583
7584 if (e1->shape)
7585 {
7586 int i;
7587 mpz_t s;
7588
7589 mpz_init (s);
7590
7591 for (i = 0; i < e1->rank; i++)
7592 {
7593 if (tail->u.ar.start[i] == NULL)
7594 break;
7595
7596 if (tail->u.ar.end[i])
7597 {
7598 mpz_set (s, tail->u.ar.end[i]->value.integer);
7599 mpz_sub (s, s, tail->u.ar.start[i]->value.integer);
7600 mpz_add_ui (s, s, 1);
7601 }
7602 else
7603 {
7604 mpz_set (s, tail->u.ar.start[i]->value.integer);
7605 }
7606
7607 if (mpz_cmp (e1->shape[i], s) != 0)
7608 {
7609 gfc_error ("Source-expr at %L and allocate-object at %L must "
7610 "have the same shape", &e1->where, &e2->where);
7611 mpz_clear (s);
7612 return false;
7613 }
7614 }
7615
7616 mpz_clear (s);
7617 }
7618
7619 return true;
7620 }
7621
7622
7623 /* Resolve the expression in an ALLOCATE statement, doing the additional
7624 checks to see whether the expression is OK or not. The expression must
7625 have a trailing array reference that gives the size of the array. */
7626
7627 static bool
7628 resolve_allocate_expr (gfc_expr *e, gfc_code *code, bool *array_alloc_wo_spec)
7629 {
7630 int i, pointer, allocatable, dimension, is_abstract;
7631 int codimension;
7632 bool coindexed;
7633 bool unlimited;
7634 symbol_attribute attr;
7635 gfc_ref *ref, *ref2;
7636 gfc_expr *e2;
7637 gfc_array_ref *ar;
7638 gfc_symbol *sym = NULL;
7639 gfc_alloc *a;
7640 gfc_component *c;
7641 bool t;
7642
7643 /* Mark the utmost array component as being in allocate to allow DIMEN_STAR
7644 checking of coarrays. */
7645 for (ref = e->ref; ref; ref = ref->next)
7646 if (ref->next == NULL)
7647 break;
7648
7649 if (ref && ref->type == REF_ARRAY)
7650 ref->u.ar.in_allocate = true;
7651
7652 if (!gfc_resolve_expr (e))
7653 goto failure;
7654
7655 /* Make sure the expression is allocatable or a pointer. If it is
7656 pointer, the next-to-last reference must be a pointer. */
7657
7658 ref2 = NULL;
7659 if (e->symtree)
7660 sym = e->symtree->n.sym;
7661
7662 /* Check whether ultimate component is abstract and CLASS. */
7663 is_abstract = 0;
7664
7665 /* Is the allocate-object unlimited polymorphic? */
7666 unlimited = UNLIMITED_POLY(e);
7667
7668 if (e->expr_type != EXPR_VARIABLE)
7669 {
7670 allocatable = 0;
7671 attr = gfc_expr_attr (e);
7672 pointer = attr.pointer;
7673 dimension = attr.dimension;
7674 codimension = attr.codimension;
7675 }
7676 else
7677 {
7678 if (sym->ts.type == BT_CLASS && CLASS_DATA (sym))
7679 {
7680 allocatable = CLASS_DATA (sym)->attr.allocatable;
7681 pointer = CLASS_DATA (sym)->attr.class_pointer;
7682 dimension = CLASS_DATA (sym)->attr.dimension;
7683 codimension = CLASS_DATA (sym)->attr.codimension;
7684 is_abstract = CLASS_DATA (sym)->attr.abstract;
7685 }
7686 else
7687 {
7688 allocatable = sym->attr.allocatable;
7689 pointer = sym->attr.pointer;
7690 dimension = sym->attr.dimension;
7691 codimension = sym->attr.codimension;
7692 }
7693
7694 coindexed = false;
7695
7696 for (ref = e->ref; ref; ref2 = ref, ref = ref->next)
7697 {
7698 switch (ref->type)
7699 {
7700 case REF_ARRAY:
7701 if (ref->u.ar.codimen > 0)
7702 {
7703 int n;
7704 for (n = ref->u.ar.dimen;
7705 n < ref->u.ar.dimen + ref->u.ar.codimen; n++)
7706 if (ref->u.ar.dimen_type[n] != DIMEN_THIS_IMAGE)
7707 {
7708 coindexed = true;
7709 break;
7710 }
7711 }
7712
7713 if (ref->next != NULL)
7714 pointer = 0;
7715 break;
7716
7717 case REF_COMPONENT:
7718 /* F2008, C644. */
7719 if (coindexed)
7720 {
7721 gfc_error ("Coindexed allocatable object at %L",
7722 &e->where);
7723 goto failure;
7724 }
7725
7726 c = ref->u.c.component;
7727 if (c->ts.type == BT_CLASS)
7728 {
7729 allocatable = CLASS_DATA (c)->attr.allocatable;
7730 pointer = CLASS_DATA (c)->attr.class_pointer;
7731 dimension = CLASS_DATA (c)->attr.dimension;
7732 codimension = CLASS_DATA (c)->attr.codimension;
7733 is_abstract = CLASS_DATA (c)->attr.abstract;
7734 }
7735 else
7736 {
7737 allocatable = c->attr.allocatable;
7738 pointer = c->attr.pointer;
7739 dimension = c->attr.dimension;
7740 codimension = c->attr.codimension;
7741 is_abstract = c->attr.abstract;
7742 }
7743 break;
7744
7745 case REF_SUBSTRING:
7746 case REF_INQUIRY:
7747 allocatable = 0;
7748 pointer = 0;
7749 break;
7750 }
7751 }
7752 }
7753
7754 /* Check for F08:C628. */
7755 if (allocatable == 0 && pointer == 0 && !unlimited)
7756 {
7757 gfc_error ("Allocate-object at %L must be ALLOCATABLE or a POINTER",
7758 &e->where);
7759 goto failure;
7760 }
7761
7762 /* Some checks for the SOURCE tag. */
7763 if (code->expr3)
7764 {
7765 /* Check F03:C631. */
7766 if (!gfc_type_compatible (&e->ts, &code->expr3->ts))
7767 {
7768 gfc_error ("Type of entity at %L is type incompatible with "
7769 "source-expr at %L", &e->where, &code->expr3->where);
7770 goto failure;
7771 }
7772
7773 /* Check F03:C632 and restriction following Note 6.18. */
7774 if (code->expr3->rank > 0 && !conformable_arrays (code->expr3, e))
7775 goto failure;
7776
7777 /* Check F03:C633. */
7778 if (code->expr3->ts.kind != e->ts.kind && !unlimited)
7779 {
7780 gfc_error ("The allocate-object at %L and the source-expr at %L "
7781 "shall have the same kind type parameter",
7782 &e->where, &code->expr3->where);
7783 goto failure;
7784 }
7785
7786 /* Check F2008, C642. */
7787 if (code->expr3->ts.type == BT_DERIVED
7788 && ((codimension && gfc_expr_attr (code->expr3).lock_comp)
7789 || (code->expr3->ts.u.derived->from_intmod
7790 == INTMOD_ISO_FORTRAN_ENV
7791 && code->expr3->ts.u.derived->intmod_sym_id
7792 == ISOFORTRAN_LOCK_TYPE)))
7793 {
7794 gfc_error ("The source-expr at %L shall neither be of type "
7795 "LOCK_TYPE nor have a LOCK_TYPE component if "
7796 "allocate-object at %L is a coarray",
7797 &code->expr3->where, &e->where);
7798 goto failure;
7799 }
7800
7801 /* Check TS18508, C702/C703. */
7802 if (code->expr3->ts.type == BT_DERIVED
7803 && ((codimension && gfc_expr_attr (code->expr3).event_comp)
7804 || (code->expr3->ts.u.derived->from_intmod
7805 == INTMOD_ISO_FORTRAN_ENV
7806 && code->expr3->ts.u.derived->intmod_sym_id
7807 == ISOFORTRAN_EVENT_TYPE)))
7808 {
7809 gfc_error ("The source-expr at %L shall neither be of type "
7810 "EVENT_TYPE nor have a EVENT_TYPE component if "
7811 "allocate-object at %L is a coarray",
7812 &code->expr3->where, &e->where);
7813 goto failure;
7814 }
7815 }
7816
7817 /* Check F08:C629. */
7818 if (is_abstract && code->ext.alloc.ts.type == BT_UNKNOWN
7819 && !code->expr3)
7820 {
7821 gcc_assert (e->ts.type == BT_CLASS);
7822 gfc_error ("Allocating %s of ABSTRACT base type at %L requires a "
7823 "type-spec or source-expr", sym->name, &e->where);
7824 goto failure;
7825 }
7826
7827 /* Check F08:C632. */
7828 if (code->ext.alloc.ts.type == BT_CHARACTER && !e->ts.deferred
7829 && !UNLIMITED_POLY (e))
7830 {
7831 int cmp;
7832
7833 if (!e->ts.u.cl->length)
7834 goto failure;
7835
7836 cmp = gfc_dep_compare_expr (e->ts.u.cl->length,
7837 code->ext.alloc.ts.u.cl->length);
7838 if (cmp == 1 || cmp == -1 || cmp == -3)
7839 {
7840 gfc_error ("Allocating %s at %L with type-spec requires the same "
7841 "character-length parameter as in the declaration",
7842 sym->name, &e->where);
7843 goto failure;
7844 }
7845 }
7846
7847 /* In the variable definition context checks, gfc_expr_attr is used
7848 on the expression. This is fooled by the array specification
7849 present in e, thus we have to eliminate that one temporarily. */
7850 e2 = remove_last_array_ref (e);
7851 t = true;
7852 if (t && pointer)
7853 t = gfc_check_vardef_context (e2, true, true, false,
7854 _("ALLOCATE object"));
7855 if (t)
7856 t = gfc_check_vardef_context (e2, false, true, false,
7857 _("ALLOCATE object"));
7858 gfc_free_expr (e2);
7859 if (!t)
7860 goto failure;
7861
7862 if (e->ts.type == BT_CLASS && CLASS_DATA (e)->attr.dimension
7863 && !code->expr3 && code->ext.alloc.ts.type == BT_DERIVED)
7864 {
7865 /* For class arrays, the initialization with SOURCE is done
7866 using _copy and trans_call. It is convenient to exploit that
7867 when the allocated type is different from the declared type but
7868 no SOURCE exists by setting expr3. */
7869 code->expr3 = gfc_default_initializer (&code->ext.alloc.ts);
7870 }
7871 else if (flag_coarray != GFC_FCOARRAY_LIB && e->ts.type == BT_DERIVED
7872 && e->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
7873 && e->ts.u.derived->intmod_sym_id == ISOFORTRAN_EVENT_TYPE)
7874 {
7875 /* We have to zero initialize the integer variable. */
7876 code->expr3 = gfc_get_int_expr (gfc_default_integer_kind, &e->where, 0);
7877 }
7878
7879 if (e->ts.type == BT_CLASS && !unlimited && !UNLIMITED_POLY (code->expr3))
7880 {
7881 /* Make sure the vtab symbol is present when
7882 the module variables are generated. */
7883 gfc_typespec ts = e->ts;
7884 if (code->expr3)
7885 ts = code->expr3->ts;
7886 else if (code->ext.alloc.ts.type == BT_DERIVED)
7887 ts = code->ext.alloc.ts;
7888
7889 /* Finding the vtab also publishes the type's symbol. Therefore this
7890 statement is necessary. */
7891 gfc_find_derived_vtab (ts.u.derived);
7892 }
7893 else if (unlimited && !UNLIMITED_POLY (code->expr3))
7894 {
7895 /* Again, make sure the vtab symbol is present when
7896 the module variables are generated. */
7897 gfc_typespec *ts = NULL;
7898 if (code->expr3)
7899 ts = &code->expr3->ts;
7900 else
7901 ts = &code->ext.alloc.ts;
7902
7903 gcc_assert (ts);
7904
7905 /* Finding the vtab also publishes the type's symbol. Therefore this
7906 statement is necessary. */
7907 gfc_find_vtab (ts);
7908 }
7909
7910 if (dimension == 0 && codimension == 0)
7911 goto success;
7912
7913 /* Make sure the last reference node is an array specification. */
7914
7915 if (!ref2 || ref2->type != REF_ARRAY || ref2->u.ar.type == AR_FULL
7916 || (dimension && ref2->u.ar.dimen == 0))
7917 {
7918 /* F08:C633. */
7919 if (code->expr3)
7920 {
7921 if (!gfc_notify_std (GFC_STD_F2008, "Array specification required "
7922 "in ALLOCATE statement at %L", &e->where))
7923 goto failure;
7924 if (code->expr3->rank != 0)
7925 *array_alloc_wo_spec = true;
7926 else
7927 {
7928 gfc_error ("Array specification or array-valued SOURCE= "
7929 "expression required in ALLOCATE statement at %L",
7930 &e->where);
7931 goto failure;
7932 }
7933 }
7934 else
7935 {
7936 gfc_error ("Array specification required in ALLOCATE statement "
7937 "at %L", &e->where);
7938 goto failure;
7939 }
7940 }
7941
7942 /* Make sure that the array section reference makes sense in the
7943 context of an ALLOCATE specification. */
7944
7945 ar = &ref2->u.ar;
7946
7947 if (codimension)
7948 for (i = ar->dimen; i < ar->dimen + ar->codimen; i++)
7949 {
7950 switch (ar->dimen_type[i])
7951 {
7952 case DIMEN_THIS_IMAGE:
7953 gfc_error ("Coarray specification required in ALLOCATE statement "
7954 "at %L", &e->where);
7955 goto failure;
7956
7957 case DIMEN_RANGE:
7958 if (ar->start[i] == 0 || ar->end[i] == 0)
7959 {
7960 /* If ar->stride[i] is NULL, we issued a previous error. */
7961 if (ar->stride[i] == NULL)
7962 gfc_error ("Bad array specification in ALLOCATE statement "
7963 "at %L", &e->where);
7964 goto failure;
7965 }
7966 else if (gfc_dep_compare_expr (ar->start[i], ar->end[i]) == 1)
7967 {
7968 gfc_error ("Upper cobound is less than lower cobound at %L",
7969 &ar->start[i]->where);
7970 goto failure;
7971 }
7972 break;
7973
7974 case DIMEN_ELEMENT:
7975 if (ar->start[i]->expr_type == EXPR_CONSTANT)
7976 {
7977 gcc_assert (ar->start[i]->ts.type == BT_INTEGER);
7978 if (mpz_cmp_si (ar->start[i]->value.integer, 1) < 0)
7979 {
7980 gfc_error ("Upper cobound is less than lower cobound "
7981 "of 1 at %L", &ar->start[i]->where);
7982 goto failure;
7983 }
7984 }
7985 break;
7986
7987 case DIMEN_STAR:
7988 break;
7989
7990 default:
7991 gfc_error ("Bad array specification in ALLOCATE statement at %L",
7992 &e->where);
7993 goto failure;
7994
7995 }
7996 }
7997 for (i = 0; i < ar->dimen; i++)
7998 {
7999 if (ar->type == AR_ELEMENT || ar->type == AR_FULL)
8000 goto check_symbols;
8001
8002 switch (ar->dimen_type[i])
8003 {
8004 case DIMEN_ELEMENT:
8005 break;
8006
8007 case DIMEN_RANGE:
8008 if (ar->start[i] != NULL
8009 && ar->end[i] != NULL
8010 && ar->stride[i] == NULL)
8011 break;
8012
8013 /* Fall through. */
8014
8015 case DIMEN_UNKNOWN:
8016 case DIMEN_VECTOR:
8017 case DIMEN_STAR:
8018 case DIMEN_THIS_IMAGE:
8019 gfc_error ("Bad array specification in ALLOCATE statement at %L",
8020 &e->where);
8021 goto failure;
8022 }
8023
8024 check_symbols:
8025 for (a = code->ext.alloc.list; a; a = a->next)
8026 {
8027 sym = a->expr->symtree->n.sym;
8028
8029 /* TODO - check derived type components. */
8030 if (gfc_bt_struct (sym->ts.type) || sym->ts.type == BT_CLASS)
8031 continue;
8032
8033 if ((ar->start[i] != NULL
8034 && gfc_find_sym_in_expr (sym, ar->start[i]))
8035 || (ar->end[i] != NULL
8036 && gfc_find_sym_in_expr (sym, ar->end[i])))
8037 {
8038 gfc_error ("%qs must not appear in the array specification at "
8039 "%L in the same ALLOCATE statement where it is "
8040 "itself allocated", sym->name, &ar->where);
8041 goto failure;
8042 }
8043 }
8044 }
8045
8046 for (i = ar->dimen; i < ar->codimen + ar->dimen; i++)
8047 {
8048 if (ar->dimen_type[i] == DIMEN_ELEMENT
8049 || ar->dimen_type[i] == DIMEN_RANGE)
8050 {
8051 if (i == (ar->dimen + ar->codimen - 1))
8052 {
8053 gfc_error ("Expected '*' in coindex specification in ALLOCATE "
8054 "statement at %L", &e->where);
8055 goto failure;
8056 }
8057 continue;
8058 }
8059
8060 if (ar->dimen_type[i] == DIMEN_STAR && i == (ar->dimen + ar->codimen - 1)
8061 && ar->stride[i] == NULL)
8062 break;
8063
8064 gfc_error ("Bad coarray specification in ALLOCATE statement at %L",
8065 &e->where);
8066 goto failure;
8067 }
8068
8069 success:
8070 return true;
8071
8072 failure:
8073 return false;
8074 }
8075
8076
8077 static void
8078 resolve_allocate_deallocate (gfc_code *code, const char *fcn)
8079 {
8080 gfc_expr *stat, *errmsg, *pe, *qe;
8081 gfc_alloc *a, *p, *q;
8082
8083 stat = code->expr1;
8084 errmsg = code->expr2;
8085
8086 /* Check the stat variable. */
8087 if (stat)
8088 {
8089 gfc_check_vardef_context (stat, false, false, false,
8090 _("STAT variable"));
8091
8092 if ((stat->ts.type != BT_INTEGER
8093 && !(stat->ref && (stat->ref->type == REF_ARRAY
8094 || stat->ref->type == REF_COMPONENT)))
8095 || stat->rank > 0)
8096 gfc_error ("Stat-variable at %L must be a scalar INTEGER "
8097 "variable", &stat->where);
8098
8099 for (p = code->ext.alloc.list; p; p = p->next)
8100 if (p->expr->symtree->n.sym->name == stat->symtree->n.sym->name)
8101 {
8102 gfc_ref *ref1, *ref2;
8103 bool found = true;
8104
8105 for (ref1 = p->expr->ref, ref2 = stat->ref; ref1 && ref2;
8106 ref1 = ref1->next, ref2 = ref2->next)
8107 {
8108 if (ref1->type != REF_COMPONENT || ref2->type != REF_COMPONENT)
8109 continue;
8110 if (ref1->u.c.component->name != ref2->u.c.component->name)
8111 {
8112 found = false;
8113 break;
8114 }
8115 }
8116
8117 if (found)
8118 {
8119 gfc_error ("Stat-variable at %L shall not be %sd within "
8120 "the same %s statement", &stat->where, fcn, fcn);
8121 break;
8122 }
8123 }
8124 }
8125
8126 /* Check the errmsg variable. */
8127 if (errmsg)
8128 {
8129 if (!stat)
8130 gfc_warning (0, "ERRMSG at %L is useless without a STAT tag",
8131 &errmsg->where);
8132
8133 gfc_check_vardef_context (errmsg, false, false, false,
8134 _("ERRMSG variable"));
8135
8136 /* F18:R928 alloc-opt is ERRMSG = errmsg-variable
8137 F18:R930 errmsg-variable is scalar-default-char-variable
8138 F18:R906 default-char-variable is variable
8139 F18:C906 default-char-variable shall be default character. */
8140 if ((errmsg->ts.type != BT_CHARACTER
8141 && !(errmsg->ref
8142 && (errmsg->ref->type == REF_ARRAY
8143 || errmsg->ref->type == REF_COMPONENT)))
8144 || errmsg->rank > 0
8145 || errmsg->ts.kind != gfc_default_character_kind)
8146 gfc_error ("ERRMSG variable at %L shall be a scalar default CHARACTER "
8147 "variable", &errmsg->where);
8148
8149 for (p = code->ext.alloc.list; p; p = p->next)
8150 if (p->expr->symtree->n.sym->name == errmsg->symtree->n.sym->name)
8151 {
8152 gfc_ref *ref1, *ref2;
8153 bool found = true;
8154
8155 for (ref1 = p->expr->ref, ref2 = errmsg->ref; ref1 && ref2;
8156 ref1 = ref1->next, ref2 = ref2->next)
8157 {
8158 if (ref1->type != REF_COMPONENT || ref2->type != REF_COMPONENT)
8159 continue;
8160 if (ref1->u.c.component->name != ref2->u.c.component->name)
8161 {
8162 found = false;
8163 break;
8164 }
8165 }
8166
8167 if (found)
8168 {
8169 gfc_error ("Errmsg-variable at %L shall not be %sd within "
8170 "the same %s statement", &errmsg->where, fcn, fcn);
8171 break;
8172 }
8173 }
8174 }
8175
8176 /* Check that an allocate-object appears only once in the statement. */
8177
8178 for (p = code->ext.alloc.list; p; p = p->next)
8179 {
8180 pe = p->expr;
8181 for (q = p->next; q; q = q->next)
8182 {
8183 qe = q->expr;
8184 if (pe->symtree->n.sym->name == qe->symtree->n.sym->name)
8185 {
8186 /* This is a potential collision. */
8187 gfc_ref *pr = pe->ref;
8188 gfc_ref *qr = qe->ref;
8189
8190 /* Follow the references until
8191 a) They start to differ, in which case there is no error;
8192 you can deallocate a%b and a%c in a single statement
8193 b) Both of them stop, which is an error
8194 c) One of them stops, which is also an error. */
8195 while (1)
8196 {
8197 if (pr == NULL && qr == NULL)
8198 {
8199 gfc_error ("Allocate-object at %L also appears at %L",
8200 &pe->where, &qe->where);
8201 break;
8202 }
8203 else if (pr != NULL && qr == NULL)
8204 {
8205 gfc_error ("Allocate-object at %L is subobject of"
8206 " object at %L", &pe->where, &qe->where);
8207 break;
8208 }
8209 else if (pr == NULL && qr != NULL)
8210 {
8211 gfc_error ("Allocate-object at %L is subobject of"
8212 " object at %L", &qe->where, &pe->where);
8213 break;
8214 }
8215 /* Here, pr != NULL && qr != NULL */
8216 gcc_assert(pr->type == qr->type);
8217 if (pr->type == REF_ARRAY)
8218 {
8219 /* Handle cases like allocate(v(3)%x(3), v(2)%x(3)),
8220 which are legal. */
8221 gcc_assert (qr->type == REF_ARRAY);
8222
8223 if (pr->next && qr->next)
8224 {
8225 int i;
8226 gfc_array_ref *par = &(pr->u.ar);
8227 gfc_array_ref *qar = &(qr->u.ar);
8228
8229 for (i=0; i<par->dimen; i++)
8230 {
8231 if ((par->start[i] != NULL
8232 || qar->start[i] != NULL)
8233 && gfc_dep_compare_expr (par->start[i],
8234 qar->start[i]) != 0)
8235 goto break_label;
8236 }
8237 }
8238 }
8239 else
8240 {
8241 if (pr->u.c.component->name != qr->u.c.component->name)
8242 break;
8243 }
8244
8245 pr = pr->next;
8246 qr = qr->next;
8247 }
8248 break_label:
8249 ;
8250 }
8251 }
8252 }
8253
8254 if (strcmp (fcn, "ALLOCATE") == 0)
8255 {
8256 bool arr_alloc_wo_spec = false;
8257
8258 /* Resolving the expr3 in the loop over all objects to allocate would
8259 execute loop invariant code for each loop item. Therefore do it just
8260 once here. */
8261 if (code->expr3 && code->expr3->mold
8262 && code->expr3->ts.type == BT_DERIVED)
8263 {
8264 /* Default initialization via MOLD (non-polymorphic). */
8265 gfc_expr *rhs = gfc_default_initializer (&code->expr3->ts);
8266 if (rhs != NULL)
8267 {
8268 gfc_resolve_expr (rhs);
8269 gfc_free_expr (code->expr3);
8270 code->expr3 = rhs;
8271 }
8272 }
8273 for (a = code->ext.alloc.list; a; a = a->next)
8274 resolve_allocate_expr (a->expr, code, &arr_alloc_wo_spec);
8275
8276 if (arr_alloc_wo_spec && code->expr3)
8277 {
8278 /* Mark the allocate to have to take the array specification
8279 from the expr3. */
8280 code->ext.alloc.arr_spec_from_expr3 = 1;
8281 }
8282 }
8283 else
8284 {
8285 for (a = code->ext.alloc.list; a; a = a->next)
8286 resolve_deallocate_expr (a->expr);
8287 }
8288 }
8289
8290
8291 /************ SELECT CASE resolution subroutines ************/
8292
8293 /* Callback function for our mergesort variant. Determines interval
8294 overlaps for CASEs. Return <0 if op1 < op2, 0 for overlap, >0 for
8295 op1 > op2. Assumes we're not dealing with the default case.
8296 We have op1 = (:L), (K:L) or (K:) and op2 = (:N), (M:N) or (M:).
8297 There are nine situations to check. */
8298
8299 static int
8300 compare_cases (const gfc_case *op1, const gfc_case *op2)
8301 {
8302 int retval;
8303
8304 if (op1->low == NULL) /* op1 = (:L) */
8305 {
8306 /* op2 = (:N), so overlap. */
8307 retval = 0;
8308 /* op2 = (M:) or (M:N), L < M */
8309 if (op2->low != NULL
8310 && gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
8311 retval = -1;
8312 }
8313 else if (op1->high == NULL) /* op1 = (K:) */
8314 {
8315 /* op2 = (M:), so overlap. */
8316 retval = 0;
8317 /* op2 = (:N) or (M:N), K > N */
8318 if (op2->high != NULL
8319 && gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
8320 retval = 1;
8321 }
8322 else /* op1 = (K:L) */
8323 {
8324 if (op2->low == NULL) /* op2 = (:N), K > N */
8325 retval = (gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
8326 ? 1 : 0;
8327 else if (op2->high == NULL) /* op2 = (M:), L < M */
8328 retval = (gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
8329 ? -1 : 0;
8330 else /* op2 = (M:N) */
8331 {
8332 retval = 0;
8333 /* L < M */
8334 if (gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
8335 retval = -1;
8336 /* K > N */
8337 else if (gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
8338 retval = 1;
8339 }
8340 }
8341
8342 return retval;
8343 }
8344
8345
8346 /* Merge-sort a double linked case list, detecting overlap in the
8347 process. LIST is the head of the double linked case list before it
8348 is sorted. Returns the head of the sorted list if we don't see any
8349 overlap, or NULL otherwise. */
8350
8351 static gfc_case *
8352 check_case_overlap (gfc_case *list)
8353 {
8354 gfc_case *p, *q, *e, *tail;
8355 int insize, nmerges, psize, qsize, cmp, overlap_seen;
8356
8357 /* If the passed list was empty, return immediately. */
8358 if (!list)
8359 return NULL;
8360
8361 overlap_seen = 0;
8362 insize = 1;
8363
8364 /* Loop unconditionally. The only exit from this loop is a return
8365 statement, when we've finished sorting the case list. */
8366 for (;;)
8367 {
8368 p = list;
8369 list = NULL;
8370 tail = NULL;
8371
8372 /* Count the number of merges we do in this pass. */
8373 nmerges = 0;
8374
8375 /* Loop while there exists a merge to be done. */
8376 while (p)
8377 {
8378 int i;
8379
8380 /* Count this merge. */
8381 nmerges++;
8382
8383 /* Cut the list in two pieces by stepping INSIZE places
8384 forward in the list, starting from P. */
8385 psize = 0;
8386 q = p;
8387 for (i = 0; i < insize; i++)
8388 {
8389 psize++;
8390 q = q->right;
8391 if (!q)
8392 break;
8393 }
8394 qsize = insize;
8395
8396 /* Now we have two lists. Merge them! */
8397 while (psize > 0 || (qsize > 0 && q != NULL))
8398 {
8399 /* See from which the next case to merge comes from. */
8400 if (psize == 0)
8401 {
8402 /* P is empty so the next case must come from Q. */
8403 e = q;
8404 q = q->right;
8405 qsize--;
8406 }
8407 else if (qsize == 0 || q == NULL)
8408 {
8409 /* Q is empty. */
8410 e = p;
8411 p = p->right;
8412 psize--;
8413 }
8414 else
8415 {
8416 cmp = compare_cases (p, q);
8417 if (cmp < 0)
8418 {
8419 /* The whole case range for P is less than the
8420 one for Q. */
8421 e = p;
8422 p = p->right;
8423 psize--;
8424 }
8425 else if (cmp > 0)
8426 {
8427 /* The whole case range for Q is greater than
8428 the case range for P. */
8429 e = q;
8430 q = q->right;
8431 qsize--;
8432 }
8433 else
8434 {
8435 /* The cases overlap, or they are the same
8436 element in the list. Either way, we must
8437 issue an error and get the next case from P. */
8438 /* FIXME: Sort P and Q by line number. */
8439 gfc_error ("CASE label at %L overlaps with CASE "
8440 "label at %L", &p->where, &q->where);
8441 overlap_seen = 1;
8442 e = p;
8443 p = p->right;
8444 psize--;
8445 }
8446 }
8447
8448 /* Add the next element to the merged list. */
8449 if (tail)
8450 tail->right = e;
8451 else
8452 list = e;
8453 e->left = tail;
8454 tail = e;
8455 }
8456
8457 /* P has now stepped INSIZE places along, and so has Q. So
8458 they're the same. */
8459 p = q;
8460 }
8461 tail->right = NULL;
8462
8463 /* If we have done only one merge or none at all, we've
8464 finished sorting the cases. */
8465 if (nmerges <= 1)
8466 {
8467 if (!overlap_seen)
8468 return list;
8469 else
8470 return NULL;
8471 }
8472
8473 /* Otherwise repeat, merging lists twice the size. */
8474 insize *= 2;
8475 }
8476 }
8477
8478
8479 /* Check to see if an expression is suitable for use in a CASE statement.
8480 Makes sure that all case expressions are scalar constants of the same
8481 type. Return false if anything is wrong. */
8482
8483 static bool
8484 validate_case_label_expr (gfc_expr *e, gfc_expr *case_expr)
8485 {
8486 if (e == NULL) return true;
8487
8488 if (e->ts.type != case_expr->ts.type)
8489 {
8490 gfc_error ("Expression in CASE statement at %L must be of type %s",
8491 &e->where, gfc_basic_typename (case_expr->ts.type));
8492 return false;
8493 }
8494
8495 /* C805 (R808) For a given case-construct, each case-value shall be of
8496 the same type as case-expr. For character type, length differences
8497 are allowed, but the kind type parameters shall be the same. */
8498
8499 if (case_expr->ts.type == BT_CHARACTER && e->ts.kind != case_expr->ts.kind)
8500 {
8501 gfc_error ("Expression in CASE statement at %L must be of kind %d",
8502 &e->where, case_expr->ts.kind);
8503 return false;
8504 }
8505
8506 /* Convert the case value kind to that of case expression kind,
8507 if needed */
8508
8509 if (e->ts.kind != case_expr->ts.kind)
8510 gfc_convert_type_warn (e, &case_expr->ts, 2, 0);
8511
8512 if (e->rank != 0)
8513 {
8514 gfc_error ("Expression in CASE statement at %L must be scalar",
8515 &e->where);
8516 return false;
8517 }
8518
8519 return true;
8520 }
8521
8522
8523 /* Given a completely parsed select statement, we:
8524
8525 - Validate all expressions and code within the SELECT.
8526 - Make sure that the selection expression is not of the wrong type.
8527 - Make sure that no case ranges overlap.
8528 - Eliminate unreachable cases and unreachable code resulting from
8529 removing case labels.
8530
8531 The standard does allow unreachable cases, e.g. CASE (5:3). But
8532 they are a hassle for code generation, and to prevent that, we just
8533 cut them out here. This is not necessary for overlapping cases
8534 because they are illegal and we never even try to generate code.
8535
8536 We have the additional caveat that a SELECT construct could have
8537 been a computed GOTO in the source code. Fortunately we can fairly
8538 easily work around that here: The case_expr for a "real" SELECT CASE
8539 is in code->expr1, but for a computed GOTO it is in code->expr2. All
8540 we have to do is make sure that the case_expr is a scalar integer
8541 expression. */
8542
8543 static void
8544 resolve_select (gfc_code *code, bool select_type)
8545 {
8546 gfc_code *body;
8547 gfc_expr *case_expr;
8548 gfc_case *cp, *default_case, *tail, *head;
8549 int seen_unreachable;
8550 int seen_logical;
8551 int ncases;
8552 bt type;
8553 bool t;
8554
8555 if (code->expr1 == NULL)
8556 {
8557 /* This was actually a computed GOTO statement. */
8558 case_expr = code->expr2;
8559 if (case_expr->ts.type != BT_INTEGER|| case_expr->rank != 0)
8560 gfc_error ("Selection expression in computed GOTO statement "
8561 "at %L must be a scalar integer expression",
8562 &case_expr->where);
8563
8564 /* Further checking is not necessary because this SELECT was built
8565 by the compiler, so it should always be OK. Just move the
8566 case_expr from expr2 to expr so that we can handle computed
8567 GOTOs as normal SELECTs from here on. */
8568 code->expr1 = code->expr2;
8569 code->expr2 = NULL;
8570 return;
8571 }
8572
8573 case_expr = code->expr1;
8574 type = case_expr->ts.type;
8575
8576 /* F08:C830. */
8577 if (type != BT_LOGICAL && type != BT_INTEGER && type != BT_CHARACTER)
8578 {
8579 gfc_error ("Argument of SELECT statement at %L cannot be %s",
8580 &case_expr->where, gfc_typename (case_expr));
8581
8582 /* Punt. Going on here just produce more garbage error messages. */
8583 return;
8584 }
8585
8586 /* F08:R842. */
8587 if (!select_type && case_expr->rank != 0)
8588 {
8589 gfc_error ("Argument of SELECT statement at %L must be a scalar "
8590 "expression", &case_expr->where);
8591
8592 /* Punt. */
8593 return;
8594 }
8595
8596 /* Raise a warning if an INTEGER case value exceeds the range of
8597 the case-expr. Later, all expressions will be promoted to the
8598 largest kind of all case-labels. */
8599
8600 if (type == BT_INTEGER)
8601 for (body = code->block; body; body = body->block)
8602 for (cp = body->ext.block.case_list; cp; cp = cp->next)
8603 {
8604 if (cp->low
8605 && gfc_check_integer_range (cp->low->value.integer,
8606 case_expr->ts.kind) != ARITH_OK)
8607 gfc_warning (0, "Expression in CASE statement at %L is "
8608 "not in the range of %s", &cp->low->where,
8609 gfc_typename (case_expr));
8610
8611 if (cp->high
8612 && cp->low != cp->high
8613 && gfc_check_integer_range (cp->high->value.integer,
8614 case_expr->ts.kind) != ARITH_OK)
8615 gfc_warning (0, "Expression in CASE statement at %L is "
8616 "not in the range of %s", &cp->high->where,
8617 gfc_typename (case_expr));
8618 }
8619
8620 /* PR 19168 has a long discussion concerning a mismatch of the kinds
8621 of the SELECT CASE expression and its CASE values. Walk the lists
8622 of case values, and if we find a mismatch, promote case_expr to
8623 the appropriate kind. */
8624
8625 if (type == BT_LOGICAL || type == BT_INTEGER)
8626 {
8627 for (body = code->block; body; body = body->block)
8628 {
8629 /* Walk the case label list. */
8630 for (cp = body->ext.block.case_list; cp; cp = cp->next)
8631 {
8632 /* Intercept the DEFAULT case. It does not have a kind. */
8633 if (cp->low == NULL && cp->high == NULL)
8634 continue;
8635
8636 /* Unreachable case ranges are discarded, so ignore. */
8637 if (cp->low != NULL && cp->high != NULL
8638 && cp->low != cp->high
8639 && gfc_compare_expr (cp->low, cp->high, INTRINSIC_GT) > 0)
8640 continue;
8641
8642 if (cp->low != NULL
8643 && case_expr->ts.kind != gfc_kind_max(case_expr, cp->low))
8644 gfc_convert_type_warn (case_expr, &cp->low->ts, 2, 0);
8645
8646 if (cp->high != NULL
8647 && case_expr->ts.kind != gfc_kind_max(case_expr, cp->high))
8648 gfc_convert_type_warn (case_expr, &cp->high->ts, 2, 0);
8649 }
8650 }
8651 }
8652
8653 /* Assume there is no DEFAULT case. */
8654 default_case = NULL;
8655 head = tail = NULL;
8656 ncases = 0;
8657 seen_logical = 0;
8658
8659 for (body = code->block; body; body = body->block)
8660 {
8661 /* Assume the CASE list is OK, and all CASE labels can be matched. */
8662 t = true;
8663 seen_unreachable = 0;
8664
8665 /* Walk the case label list, making sure that all case labels
8666 are legal. */
8667 for (cp = body->ext.block.case_list; cp; cp = cp->next)
8668 {
8669 /* Count the number of cases in the whole construct. */
8670 ncases++;
8671
8672 /* Intercept the DEFAULT case. */
8673 if (cp->low == NULL && cp->high == NULL)
8674 {
8675 if (default_case != NULL)
8676 {
8677 gfc_error ("The DEFAULT CASE at %L cannot be followed "
8678 "by a second DEFAULT CASE at %L",
8679 &default_case->where, &cp->where);
8680 t = false;
8681 break;
8682 }
8683 else
8684 {
8685 default_case = cp;
8686 continue;
8687 }
8688 }
8689
8690 /* Deal with single value cases and case ranges. Errors are
8691 issued from the validation function. */
8692 if (!validate_case_label_expr (cp->low, case_expr)
8693 || !validate_case_label_expr (cp->high, case_expr))
8694 {
8695 t = false;
8696 break;
8697 }
8698
8699 if (type == BT_LOGICAL
8700 && ((cp->low == NULL || cp->high == NULL)
8701 || cp->low != cp->high))
8702 {
8703 gfc_error ("Logical range in CASE statement at %L is not "
8704 "allowed", &cp->low->where);
8705 t = false;
8706 break;
8707 }
8708
8709 if (type == BT_LOGICAL && cp->low->expr_type == EXPR_CONSTANT)
8710 {
8711 int value;
8712 value = cp->low->value.logical == 0 ? 2 : 1;
8713 if (value & seen_logical)
8714 {
8715 gfc_error ("Constant logical value in CASE statement "
8716 "is repeated at %L",
8717 &cp->low->where);
8718 t = false;
8719 break;
8720 }
8721 seen_logical |= value;
8722 }
8723
8724 if (cp->low != NULL && cp->high != NULL
8725 && cp->low != cp->high
8726 && gfc_compare_expr (cp->low, cp->high, INTRINSIC_GT) > 0)
8727 {
8728 if (warn_surprising)
8729 gfc_warning (OPT_Wsurprising,
8730 "Range specification at %L can never be matched",
8731 &cp->where);
8732
8733 cp->unreachable = 1;
8734 seen_unreachable = 1;
8735 }
8736 else
8737 {
8738 /* If the case range can be matched, it can also overlap with
8739 other cases. To make sure it does not, we put it in a
8740 double linked list here. We sort that with a merge sort
8741 later on to detect any overlapping cases. */
8742 if (!head)
8743 {
8744 head = tail = cp;
8745 head->right = head->left = NULL;
8746 }
8747 else
8748 {
8749 tail->right = cp;
8750 tail->right->left = tail;
8751 tail = tail->right;
8752 tail->right = NULL;
8753 }
8754 }
8755 }
8756
8757 /* It there was a failure in the previous case label, give up
8758 for this case label list. Continue with the next block. */
8759 if (!t)
8760 continue;
8761
8762 /* See if any case labels that are unreachable have been seen.
8763 If so, we eliminate them. This is a bit of a kludge because
8764 the case lists for a single case statement (label) is a
8765 single forward linked lists. */
8766 if (seen_unreachable)
8767 {
8768 /* Advance until the first case in the list is reachable. */
8769 while (body->ext.block.case_list != NULL
8770 && body->ext.block.case_list->unreachable)
8771 {
8772 gfc_case *n = body->ext.block.case_list;
8773 body->ext.block.case_list = body->ext.block.case_list->next;
8774 n->next = NULL;
8775 gfc_free_case_list (n);
8776 }
8777
8778 /* Strip all other unreachable cases. */
8779 if (body->ext.block.case_list)
8780 {
8781 for (cp = body->ext.block.case_list; cp && cp->next; cp = cp->next)
8782 {
8783 if (cp->next->unreachable)
8784 {
8785 gfc_case *n = cp->next;
8786 cp->next = cp->next->next;
8787 n->next = NULL;
8788 gfc_free_case_list (n);
8789 }
8790 }
8791 }
8792 }
8793 }
8794
8795 /* See if there were overlapping cases. If the check returns NULL,
8796 there was overlap. In that case we don't do anything. If head
8797 is non-NULL, we prepend the DEFAULT case. The sorted list can
8798 then used during code generation for SELECT CASE constructs with
8799 a case expression of a CHARACTER type. */
8800 if (head)
8801 {
8802 head = check_case_overlap (head);
8803
8804 /* Prepend the default_case if it is there. */
8805 if (head != NULL && default_case)
8806 {
8807 default_case->left = NULL;
8808 default_case->right = head;
8809 head->left = default_case;
8810 }
8811 }
8812
8813 /* Eliminate dead blocks that may be the result if we've seen
8814 unreachable case labels for a block. */
8815 for (body = code; body && body->block; body = body->block)
8816 {
8817 if (body->block->ext.block.case_list == NULL)
8818 {
8819 /* Cut the unreachable block from the code chain. */
8820 gfc_code *c = body->block;
8821 body->block = c->block;
8822
8823 /* Kill the dead block, but not the blocks below it. */
8824 c->block = NULL;
8825 gfc_free_statements (c);
8826 }
8827 }
8828
8829 /* More than two cases is legal but insane for logical selects.
8830 Issue a warning for it. */
8831 if (warn_surprising && type == BT_LOGICAL && ncases > 2)
8832 gfc_warning (OPT_Wsurprising,
8833 "Logical SELECT CASE block at %L has more that two cases",
8834 &code->loc);
8835 }
8836
8837
8838 /* Check if a derived type is extensible. */
8839
8840 bool
8841 gfc_type_is_extensible (gfc_symbol *sym)
8842 {
8843 return !(sym->attr.is_bind_c || sym->attr.sequence
8844 || (sym->attr.is_class
8845 && sym->components->ts.u.derived->attr.unlimited_polymorphic));
8846 }
8847
8848
8849 static void
8850 resolve_types (gfc_namespace *ns);
8851
8852 /* Resolve an associate-name: Resolve target and ensure the type-spec is
8853 correct as well as possibly the array-spec. */
8854
8855 static void
8856 resolve_assoc_var (gfc_symbol* sym, bool resolve_target)
8857 {
8858 gfc_expr* target;
8859
8860 gcc_assert (sym->assoc);
8861 gcc_assert (sym->attr.flavor == FL_VARIABLE);
8862
8863 /* If this is for SELECT TYPE, the target may not yet be set. In that
8864 case, return. Resolution will be called later manually again when
8865 this is done. */
8866 target = sym->assoc->target;
8867 if (!target)
8868 return;
8869 gcc_assert (!sym->assoc->dangling);
8870
8871 if (resolve_target && !gfc_resolve_expr (target))
8872 return;
8873
8874 /* For variable targets, we get some attributes from the target. */
8875 if (target->expr_type == EXPR_VARIABLE)
8876 {
8877 gfc_symbol *tsym, *dsym;
8878
8879 gcc_assert (target->symtree);
8880 tsym = target->symtree->n.sym;
8881
8882 if (gfc_expr_attr (target).proc_pointer)
8883 {
8884 gfc_error ("Associating entity %qs at %L is a procedure pointer",
8885 tsym->name, &target->where);
8886 return;
8887 }
8888
8889 if (tsym->attr.flavor == FL_PROCEDURE && tsym->generic
8890 && (dsym = gfc_find_dt_in_generic (tsym)) != NULL
8891 && dsym->attr.flavor == FL_DERIVED)
8892 {
8893 gfc_error ("Derived type %qs cannot be used as a variable at %L",
8894 tsym->name, &target->where);
8895 return;
8896 }
8897
8898 if (tsym->attr.flavor == FL_PROCEDURE)
8899 {
8900 bool is_error = true;
8901 if (tsym->attr.function && tsym->result == tsym)
8902 for (gfc_namespace *ns = sym->ns; ns; ns = ns->parent)
8903 if (tsym == ns->proc_name)
8904 {
8905 is_error = false;
8906 break;
8907 }
8908 if (is_error)
8909 {
8910 gfc_error ("Associating entity %qs at %L is a procedure name",
8911 tsym->name, &target->where);
8912 return;
8913 }
8914 }
8915
8916 sym->attr.asynchronous = tsym->attr.asynchronous;
8917 sym->attr.volatile_ = tsym->attr.volatile_;
8918
8919 sym->attr.target = tsym->attr.target
8920 || gfc_expr_attr (target).pointer;
8921 if (is_subref_array (target))
8922 sym->attr.subref_array_pointer = 1;
8923 }
8924 else if (target->ts.type == BT_PROCEDURE)
8925 {
8926 gfc_error ("Associating selector-expression at %L yields a procedure",
8927 &target->where);
8928 return;
8929 }
8930
8931 if (target->expr_type == EXPR_NULL)
8932 {
8933 gfc_error ("Selector at %L cannot be NULL()", &target->where);
8934 return;
8935 }
8936 else if (target->ts.type == BT_UNKNOWN)
8937 {
8938 gfc_error ("Selector at %L has no type", &target->where);
8939 return;
8940 }
8941
8942 /* Get type if this was not already set. Note that it can be
8943 some other type than the target in case this is a SELECT TYPE
8944 selector! So we must not update when the type is already there. */
8945 if (sym->ts.type == BT_UNKNOWN)
8946 sym->ts = target->ts;
8947
8948 gcc_assert (sym->ts.type != BT_UNKNOWN);
8949
8950 /* See if this is a valid association-to-variable. */
8951 sym->assoc->variable = (target->expr_type == EXPR_VARIABLE
8952 && !gfc_has_vector_subscript (target));
8953
8954 /* Finally resolve if this is an array or not. */
8955 if (sym->attr.dimension && target->rank == 0)
8956 {
8957 /* primary.c makes the assumption that a reference to an associate
8958 name followed by a left parenthesis is an array reference. */
8959 if (sym->ts.type != BT_CHARACTER)
8960 gfc_error ("Associate-name %qs at %L is used as array",
8961 sym->name, &sym->declared_at);
8962 sym->attr.dimension = 0;
8963 return;
8964 }
8965
8966
8967 /* We cannot deal with class selectors that need temporaries. */
8968 if (target->ts.type == BT_CLASS
8969 && gfc_ref_needs_temporary_p (target->ref))
8970 {
8971 gfc_error ("CLASS selector at %L needs a temporary which is not "
8972 "yet implemented", &target->where);
8973 return;
8974 }
8975
8976 if (target->ts.type == BT_CLASS)
8977 gfc_fix_class_refs (target);
8978
8979 if (target->rank != 0 && !sym->attr.select_rank_temporary)
8980 {
8981 gfc_array_spec *as;
8982 /* The rank may be incorrectly guessed at parsing, therefore make sure
8983 it is corrected now. */
8984 if (sym->ts.type != BT_CLASS && (!sym->as || sym->assoc->rankguessed))
8985 {
8986 if (!sym->as)
8987 sym->as = gfc_get_array_spec ();
8988 as = sym->as;
8989 as->rank = target->rank;
8990 as->type = AS_DEFERRED;
8991 as->corank = gfc_get_corank (target);
8992 sym->attr.dimension = 1;
8993 if (as->corank != 0)
8994 sym->attr.codimension = 1;
8995 }
8996 else if (sym->ts.type == BT_CLASS && (!CLASS_DATA (sym)->as || sym->assoc->rankguessed))
8997 {
8998 if (!CLASS_DATA (sym)->as)
8999 CLASS_DATA (sym)->as = gfc_get_array_spec ();
9000 as = CLASS_DATA (sym)->as;
9001 as->rank = target->rank;
9002 as->type = AS_DEFERRED;
9003 as->corank = gfc_get_corank (target);
9004 CLASS_DATA (sym)->attr.dimension = 1;
9005 if (as->corank != 0)
9006 CLASS_DATA (sym)->attr.codimension = 1;
9007 }
9008 }
9009 else if (!sym->attr.select_rank_temporary)
9010 {
9011 /* target's rank is 0, but the type of the sym is still array valued,
9012 which has to be corrected. */
9013 if (sym->ts.type == BT_CLASS
9014 && CLASS_DATA (sym) && CLASS_DATA (sym)->as)
9015 {
9016 gfc_array_spec *as;
9017 symbol_attribute attr;
9018 /* The associated variable's type is still the array type
9019 correct this now. */
9020 gfc_typespec *ts = &target->ts;
9021 gfc_ref *ref;
9022 gfc_component *c;
9023 for (ref = target->ref; ref != NULL; ref = ref->next)
9024 {
9025 switch (ref->type)
9026 {
9027 case REF_COMPONENT:
9028 ts = &ref->u.c.component->ts;
9029 break;
9030 case REF_ARRAY:
9031 if (ts->type == BT_CLASS)
9032 ts = &ts->u.derived->components->ts;
9033 break;
9034 default:
9035 break;
9036 }
9037 }
9038 /* Create a scalar instance of the current class type. Because the
9039 rank of a class array goes into its name, the type has to be
9040 rebuild. The alternative of (re-)setting just the attributes
9041 and as in the current type, destroys the type also in other
9042 places. */
9043 as = NULL;
9044 sym->ts = *ts;
9045 sym->ts.type = BT_CLASS;
9046 attr = CLASS_DATA (sym)->attr;
9047 attr.class_ok = 0;
9048 attr.associate_var = 1;
9049 attr.dimension = attr.codimension = 0;
9050 attr.class_pointer = 1;
9051 if (!gfc_build_class_symbol (&sym->ts, &attr, &as))
9052 gcc_unreachable ();
9053 /* Make sure the _vptr is set. */
9054 c = gfc_find_component (sym->ts.u.derived, "_vptr", true, true, NULL);
9055 if (c->ts.u.derived == NULL)
9056 c->ts.u.derived = gfc_find_derived_vtab (sym->ts.u.derived);
9057 CLASS_DATA (sym)->attr.pointer = 1;
9058 CLASS_DATA (sym)->attr.class_pointer = 1;
9059 gfc_set_sym_referenced (sym->ts.u.derived);
9060 gfc_commit_symbol (sym->ts.u.derived);
9061 /* _vptr now has the _vtab in it, change it to the _vtype. */
9062 if (c->ts.u.derived->attr.vtab)
9063 c->ts.u.derived = c->ts.u.derived->ts.u.derived;
9064 c->ts.u.derived->ns->types_resolved = 0;
9065 resolve_types (c->ts.u.derived->ns);
9066 }
9067 }
9068
9069 /* Mark this as an associate variable. */
9070 sym->attr.associate_var = 1;
9071
9072 /* Fix up the type-spec for CHARACTER types. */
9073 if (sym->ts.type == BT_CHARACTER && !sym->attr.select_type_temporary)
9074 {
9075 if (!sym->ts.u.cl)
9076 sym->ts.u.cl = target->ts.u.cl;
9077
9078 if (sym->ts.deferred && target->expr_type == EXPR_VARIABLE
9079 && target->symtree->n.sym->attr.dummy
9080 && sym->ts.u.cl == target->ts.u.cl)
9081 {
9082 sym->ts.u.cl = gfc_new_charlen (sym->ns, NULL);
9083 sym->ts.deferred = 1;
9084 }
9085
9086 if (!sym->ts.u.cl->length
9087 && !sym->ts.deferred
9088 && target->expr_type == EXPR_CONSTANT)
9089 {
9090 sym->ts.u.cl->length =
9091 gfc_get_int_expr (gfc_charlen_int_kind, NULL,
9092 target->value.character.length);
9093 }
9094 else if ((!sym->ts.u.cl->length
9095 || sym->ts.u.cl->length->expr_type != EXPR_CONSTANT)
9096 && target->expr_type != EXPR_VARIABLE)
9097 {
9098 sym->ts.u.cl = gfc_new_charlen (sym->ns, NULL);
9099 sym->ts.deferred = 1;
9100
9101 /* This is reset in trans-stmt.c after the assignment
9102 of the target expression to the associate name. */
9103 sym->attr.allocatable = 1;
9104 }
9105 }
9106
9107 /* If the target is a good class object, so is the associate variable. */
9108 if (sym->ts.type == BT_CLASS && gfc_expr_attr (target).class_ok)
9109 sym->attr.class_ok = 1;
9110 }
9111
9112
9113 /* Ensure that SELECT TYPE expressions have the correct rank and a full
9114 array reference, where necessary. The symbols are artificial and so
9115 the dimension attribute and arrayspec can also be set. In addition,
9116 sometimes the expr1 arrives as BT_DERIVED, when the symbol is BT_CLASS.
9117 This is corrected here as well.*/
9118
9119 static void
9120 fixup_array_ref (gfc_expr **expr1, gfc_expr *expr2,
9121 int rank, gfc_ref *ref)
9122 {
9123 gfc_ref *nref = (*expr1)->ref;
9124 gfc_symbol *sym1 = (*expr1)->symtree->n.sym;
9125 gfc_symbol *sym2 = expr2 ? expr2->symtree->n.sym : NULL;
9126 (*expr1)->rank = rank;
9127 if (sym1->ts.type == BT_CLASS)
9128 {
9129 if ((*expr1)->ts.type != BT_CLASS)
9130 (*expr1)->ts = sym1->ts;
9131
9132 CLASS_DATA (sym1)->attr.dimension = 1;
9133 if (CLASS_DATA (sym1)->as == NULL && sym2)
9134 CLASS_DATA (sym1)->as
9135 = gfc_copy_array_spec (CLASS_DATA (sym2)->as);
9136 }
9137 else
9138 {
9139 sym1->attr.dimension = 1;
9140 if (sym1->as == NULL && sym2)
9141 sym1->as = gfc_copy_array_spec (sym2->as);
9142 }
9143
9144 for (; nref; nref = nref->next)
9145 if (nref->next == NULL)
9146 break;
9147
9148 if (ref && nref && nref->type != REF_ARRAY)
9149 nref->next = gfc_copy_ref (ref);
9150 else if (ref && !nref)
9151 (*expr1)->ref = gfc_copy_ref (ref);
9152 }
9153
9154
9155 static gfc_expr *
9156 build_loc_call (gfc_expr *sym_expr)
9157 {
9158 gfc_expr *loc_call;
9159 loc_call = gfc_get_expr ();
9160 loc_call->expr_type = EXPR_FUNCTION;
9161 gfc_get_sym_tree ("_loc", gfc_current_ns, &loc_call->symtree, false);
9162 loc_call->symtree->n.sym->attr.flavor = FL_PROCEDURE;
9163 loc_call->symtree->n.sym->attr.intrinsic = 1;
9164 loc_call->symtree->n.sym->result = loc_call->symtree->n.sym;
9165 gfc_commit_symbol (loc_call->symtree->n.sym);
9166 loc_call->ts.type = BT_INTEGER;
9167 loc_call->ts.kind = gfc_index_integer_kind;
9168 loc_call->value.function.isym = gfc_intrinsic_function_by_id (GFC_ISYM_LOC);
9169 loc_call->value.function.actual = gfc_get_actual_arglist ();
9170 loc_call->value.function.actual->expr = sym_expr;
9171 loc_call->where = sym_expr->where;
9172 return loc_call;
9173 }
9174
9175 /* Resolve a SELECT TYPE statement. */
9176
9177 static void
9178 resolve_select_type (gfc_code *code, gfc_namespace *old_ns)
9179 {
9180 gfc_symbol *selector_type;
9181 gfc_code *body, *new_st, *if_st, *tail;
9182 gfc_code *class_is = NULL, *default_case = NULL;
9183 gfc_case *c;
9184 gfc_symtree *st;
9185 char name[GFC_MAX_SYMBOL_LEN];
9186 gfc_namespace *ns;
9187 int error = 0;
9188 int rank = 0;
9189 gfc_ref* ref = NULL;
9190 gfc_expr *selector_expr = NULL;
9191
9192 ns = code->ext.block.ns;
9193 gfc_resolve (ns);
9194
9195 /* Check for F03:C813. */
9196 if (code->expr1->ts.type != BT_CLASS
9197 && !(code->expr2 && code->expr2->ts.type == BT_CLASS))
9198 {
9199 gfc_error ("Selector shall be polymorphic in SELECT TYPE statement "
9200 "at %L", &code->loc);
9201 return;
9202 }
9203
9204 if (!code->expr1->symtree->n.sym->attr.class_ok)
9205 return;
9206
9207 if (code->expr2)
9208 {
9209 gfc_ref *ref2 = NULL;
9210 for (ref = code->expr2->ref; ref != NULL; ref = ref->next)
9211 if (ref->type == REF_COMPONENT
9212 && ref->u.c.component->ts.type == BT_CLASS)
9213 ref2 = ref;
9214
9215 if (ref2)
9216 {
9217 if (code->expr1->symtree->n.sym->attr.untyped)
9218 code->expr1->symtree->n.sym->ts = ref2->u.c.component->ts;
9219 selector_type = CLASS_DATA (ref2->u.c.component)->ts.u.derived;
9220 }
9221 else
9222 {
9223 if (code->expr1->symtree->n.sym->attr.untyped)
9224 code->expr1->symtree->n.sym->ts = code->expr2->ts;
9225 selector_type = CLASS_DATA (code->expr2)->ts.u.derived;
9226 }
9227
9228 if (code->expr2->rank && CLASS_DATA (code->expr1)->as)
9229 CLASS_DATA (code->expr1)->as->rank = code->expr2->rank;
9230
9231 /* F2008: C803 The selector expression must not be coindexed. */
9232 if (gfc_is_coindexed (code->expr2))
9233 {
9234 gfc_error ("Selector at %L must not be coindexed",
9235 &code->expr2->where);
9236 return;
9237 }
9238
9239 }
9240 else
9241 {
9242 selector_type = CLASS_DATA (code->expr1)->ts.u.derived;
9243
9244 if (gfc_is_coindexed (code->expr1))
9245 {
9246 gfc_error ("Selector at %L must not be coindexed",
9247 &code->expr1->where);
9248 return;
9249 }
9250 }
9251
9252 /* Loop over TYPE IS / CLASS IS cases. */
9253 for (body = code->block; body; body = body->block)
9254 {
9255 c = body->ext.block.case_list;
9256
9257 if (!error)
9258 {
9259 /* Check for repeated cases. */
9260 for (tail = code->block; tail; tail = tail->block)
9261 {
9262 gfc_case *d = tail->ext.block.case_list;
9263 if (tail == body)
9264 break;
9265
9266 if (c->ts.type == d->ts.type
9267 && ((c->ts.type == BT_DERIVED
9268 && c->ts.u.derived && d->ts.u.derived
9269 && !strcmp (c->ts.u.derived->name,
9270 d->ts.u.derived->name))
9271 || c->ts.type == BT_UNKNOWN
9272 || (!(c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9273 && c->ts.kind == d->ts.kind)))
9274 {
9275 gfc_error ("TYPE IS at %L overlaps with TYPE IS at %L",
9276 &c->where, &d->where);
9277 return;
9278 }
9279 }
9280 }
9281
9282 /* Check F03:C815. */
9283 if ((c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9284 && !selector_type->attr.unlimited_polymorphic
9285 && !gfc_type_is_extensible (c->ts.u.derived))
9286 {
9287 gfc_error ("Derived type %qs at %L must be extensible",
9288 c->ts.u.derived->name, &c->where);
9289 error++;
9290 continue;
9291 }
9292
9293 /* Check F03:C816. */
9294 if (c->ts.type != BT_UNKNOWN && !selector_type->attr.unlimited_polymorphic
9295 && ((c->ts.type != BT_DERIVED && c->ts.type != BT_CLASS)
9296 || !gfc_type_is_extension_of (selector_type, c->ts.u.derived)))
9297 {
9298 if (c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9299 gfc_error ("Derived type %qs at %L must be an extension of %qs",
9300 c->ts.u.derived->name, &c->where, selector_type->name);
9301 else
9302 gfc_error ("Unexpected intrinsic type %qs at %L",
9303 gfc_basic_typename (c->ts.type), &c->where);
9304 error++;
9305 continue;
9306 }
9307
9308 /* Check F03:C814. */
9309 if (c->ts.type == BT_CHARACTER
9310 && (c->ts.u.cl->length != NULL || c->ts.deferred))
9311 {
9312 gfc_error ("The type-spec at %L shall specify that each length "
9313 "type parameter is assumed", &c->where);
9314 error++;
9315 continue;
9316 }
9317
9318 /* Intercept the DEFAULT case. */
9319 if (c->ts.type == BT_UNKNOWN)
9320 {
9321 /* Check F03:C818. */
9322 if (default_case)
9323 {
9324 gfc_error ("The DEFAULT CASE at %L cannot be followed "
9325 "by a second DEFAULT CASE at %L",
9326 &default_case->ext.block.case_list->where, &c->where);
9327 error++;
9328 continue;
9329 }
9330
9331 default_case = body;
9332 }
9333 }
9334
9335 if (error > 0)
9336 return;
9337
9338 /* Transform SELECT TYPE statement to BLOCK and associate selector to
9339 target if present. If there are any EXIT statements referring to the
9340 SELECT TYPE construct, this is no problem because the gfc_code
9341 reference stays the same and EXIT is equally possible from the BLOCK
9342 it is changed to. */
9343 code->op = EXEC_BLOCK;
9344 if (code->expr2)
9345 {
9346 gfc_association_list* assoc;
9347
9348 assoc = gfc_get_association_list ();
9349 assoc->st = code->expr1->symtree;
9350 assoc->target = gfc_copy_expr (code->expr2);
9351 assoc->target->where = code->expr2->where;
9352 /* assoc->variable will be set by resolve_assoc_var. */
9353
9354 code->ext.block.assoc = assoc;
9355 code->expr1->symtree->n.sym->assoc = assoc;
9356
9357 resolve_assoc_var (code->expr1->symtree->n.sym, false);
9358 }
9359 else
9360 code->ext.block.assoc = NULL;
9361
9362 /* Ensure that the selector rank and arrayspec are available to
9363 correct expressions in which they might be missing. */
9364 if (code->expr2 && code->expr2->rank)
9365 {
9366 rank = code->expr2->rank;
9367 for (ref = code->expr2->ref; ref; ref = ref->next)
9368 if (ref->next == NULL)
9369 break;
9370 if (ref && ref->type == REF_ARRAY)
9371 ref = gfc_copy_ref (ref);
9372
9373 /* Fixup expr1 if necessary. */
9374 if (rank)
9375 fixup_array_ref (&code->expr1, code->expr2, rank, ref);
9376 }
9377 else if (code->expr1->rank)
9378 {
9379 rank = code->expr1->rank;
9380 for (ref = code->expr1->ref; ref; ref = ref->next)
9381 if (ref->next == NULL)
9382 break;
9383 if (ref && ref->type == REF_ARRAY)
9384 ref = gfc_copy_ref (ref);
9385 }
9386
9387 /* Add EXEC_SELECT to switch on type. */
9388 new_st = gfc_get_code (code->op);
9389 new_st->expr1 = code->expr1;
9390 new_st->expr2 = code->expr2;
9391 new_st->block = code->block;
9392 code->expr1 = code->expr2 = NULL;
9393 code->block = NULL;
9394 if (!ns->code)
9395 ns->code = new_st;
9396 else
9397 ns->code->next = new_st;
9398 code = new_st;
9399 code->op = EXEC_SELECT_TYPE;
9400
9401 /* Use the intrinsic LOC function to generate an integer expression
9402 for the vtable of the selector. Note that the rank of the selector
9403 expression has to be set to zero. */
9404 gfc_add_vptr_component (code->expr1);
9405 code->expr1->rank = 0;
9406 code->expr1 = build_loc_call (code->expr1);
9407 selector_expr = code->expr1->value.function.actual->expr;
9408
9409 /* Loop over TYPE IS / CLASS IS cases. */
9410 for (body = code->block; body; body = body->block)
9411 {
9412 gfc_symbol *vtab;
9413 gfc_expr *e;
9414 c = body->ext.block.case_list;
9415
9416 /* Generate an index integer expression for address of the
9417 TYPE/CLASS vtable and store it in c->low. The hash expression
9418 is stored in c->high and is used to resolve intrinsic cases. */
9419 if (c->ts.type != BT_UNKNOWN)
9420 {
9421 if (c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9422 {
9423 vtab = gfc_find_derived_vtab (c->ts.u.derived);
9424 gcc_assert (vtab);
9425 c->high = gfc_get_int_expr (gfc_integer_4_kind, NULL,
9426 c->ts.u.derived->hash_value);
9427 }
9428 else
9429 {
9430 vtab = gfc_find_vtab (&c->ts);
9431 gcc_assert (vtab && CLASS_DATA (vtab)->initializer);
9432 e = CLASS_DATA (vtab)->initializer;
9433 c->high = gfc_copy_expr (e);
9434 if (c->high->ts.kind != gfc_integer_4_kind)
9435 {
9436 gfc_typespec ts;
9437 ts.kind = gfc_integer_4_kind;
9438 ts.type = BT_INTEGER;
9439 gfc_convert_type_warn (c->high, &ts, 2, 0);
9440 }
9441 }
9442
9443 e = gfc_lval_expr_from_sym (vtab);
9444 c->low = build_loc_call (e);
9445 }
9446 else
9447 continue;
9448
9449 /* Associate temporary to selector. This should only be done
9450 when this case is actually true, so build a new ASSOCIATE
9451 that does precisely this here (instead of using the
9452 'global' one). */
9453
9454 if (c->ts.type == BT_CLASS)
9455 sprintf (name, "__tmp_class_%s", c->ts.u.derived->name);
9456 else if (c->ts.type == BT_DERIVED)
9457 sprintf (name, "__tmp_type_%s", c->ts.u.derived->name);
9458 else if (c->ts.type == BT_CHARACTER)
9459 {
9460 HOST_WIDE_INT charlen = 0;
9461 if (c->ts.u.cl && c->ts.u.cl->length
9462 && c->ts.u.cl->length->expr_type == EXPR_CONSTANT)
9463 charlen = gfc_mpz_get_hwi (c->ts.u.cl->length->value.integer);
9464 snprintf (name, sizeof (name),
9465 "__tmp_%s_" HOST_WIDE_INT_PRINT_DEC "_%d",
9466 gfc_basic_typename (c->ts.type), charlen, c->ts.kind);
9467 }
9468 else
9469 sprintf (name, "__tmp_%s_%d", gfc_basic_typename (c->ts.type),
9470 c->ts.kind);
9471
9472 st = gfc_find_symtree (ns->sym_root, name);
9473 gcc_assert (st->n.sym->assoc);
9474 st->n.sym->assoc->target = gfc_get_variable_expr (selector_expr->symtree);
9475 st->n.sym->assoc->target->where = selector_expr->where;
9476 if (c->ts.type != BT_CLASS && c->ts.type != BT_UNKNOWN)
9477 {
9478 gfc_add_data_component (st->n.sym->assoc->target);
9479 /* Fixup the target expression if necessary. */
9480 if (rank)
9481 fixup_array_ref (&st->n.sym->assoc->target, NULL, rank, ref);
9482 }
9483
9484 new_st = gfc_get_code (EXEC_BLOCK);
9485 new_st->ext.block.ns = gfc_build_block_ns (ns);
9486 new_st->ext.block.ns->code = body->next;
9487 body->next = new_st;
9488
9489 /* Chain in the new list only if it is marked as dangling. Otherwise
9490 there is a CASE label overlap and this is already used. Just ignore,
9491 the error is diagnosed elsewhere. */
9492 if (st->n.sym->assoc->dangling)
9493 {
9494 new_st->ext.block.assoc = st->n.sym->assoc;
9495 st->n.sym->assoc->dangling = 0;
9496 }
9497
9498 resolve_assoc_var (st->n.sym, false);
9499 }
9500
9501 /* Take out CLASS IS cases for separate treatment. */
9502 body = code;
9503 while (body && body->block)
9504 {
9505 if (body->block->ext.block.case_list->ts.type == BT_CLASS)
9506 {
9507 /* Add to class_is list. */
9508 if (class_is == NULL)
9509 {
9510 class_is = body->block;
9511 tail = class_is;
9512 }
9513 else
9514 {
9515 for (tail = class_is; tail->block; tail = tail->block) ;
9516 tail->block = body->block;
9517 tail = tail->block;
9518 }
9519 /* Remove from EXEC_SELECT list. */
9520 body->block = body->block->block;
9521 tail->block = NULL;
9522 }
9523 else
9524 body = body->block;
9525 }
9526
9527 if (class_is)
9528 {
9529 gfc_symbol *vtab;
9530
9531 if (!default_case)
9532 {
9533 /* Add a default case to hold the CLASS IS cases. */
9534 for (tail = code; tail->block; tail = tail->block) ;
9535 tail->block = gfc_get_code (EXEC_SELECT_TYPE);
9536 tail = tail->block;
9537 tail->ext.block.case_list = gfc_get_case ();
9538 tail->ext.block.case_list->ts.type = BT_UNKNOWN;
9539 tail->next = NULL;
9540 default_case = tail;
9541 }
9542
9543 /* More than one CLASS IS block? */
9544 if (class_is->block)
9545 {
9546 gfc_code **c1,*c2;
9547 bool swapped;
9548 /* Sort CLASS IS blocks by extension level. */
9549 do
9550 {
9551 swapped = false;
9552 for (c1 = &class_is; (*c1) && (*c1)->block; c1 = &((*c1)->block))
9553 {
9554 c2 = (*c1)->block;
9555 /* F03:C817 (check for doubles). */
9556 if ((*c1)->ext.block.case_list->ts.u.derived->hash_value
9557 == c2->ext.block.case_list->ts.u.derived->hash_value)
9558 {
9559 gfc_error ("Double CLASS IS block in SELECT TYPE "
9560 "statement at %L",
9561 &c2->ext.block.case_list->where);
9562 return;
9563 }
9564 if ((*c1)->ext.block.case_list->ts.u.derived->attr.extension
9565 < c2->ext.block.case_list->ts.u.derived->attr.extension)
9566 {
9567 /* Swap. */
9568 (*c1)->block = c2->block;
9569 c2->block = *c1;
9570 *c1 = c2;
9571 swapped = true;
9572 }
9573 }
9574 }
9575 while (swapped);
9576 }
9577
9578 /* Generate IF chain. */
9579 if_st = gfc_get_code (EXEC_IF);
9580 new_st = if_st;
9581 for (body = class_is; body; body = body->block)
9582 {
9583 new_st->block = gfc_get_code (EXEC_IF);
9584 new_st = new_st->block;
9585 /* Set up IF condition: Call _gfortran_is_extension_of. */
9586 new_st->expr1 = gfc_get_expr ();
9587 new_st->expr1->expr_type = EXPR_FUNCTION;
9588 new_st->expr1->ts.type = BT_LOGICAL;
9589 new_st->expr1->ts.kind = 4;
9590 new_st->expr1->value.function.name = gfc_get_string (PREFIX ("is_extension_of"));
9591 new_st->expr1->value.function.isym = XCNEW (gfc_intrinsic_sym);
9592 new_st->expr1->value.function.isym->id = GFC_ISYM_EXTENDS_TYPE_OF;
9593 /* Set up arguments. */
9594 new_st->expr1->value.function.actual = gfc_get_actual_arglist ();
9595 new_st->expr1->value.function.actual->expr = gfc_get_variable_expr (selector_expr->symtree);
9596 new_st->expr1->value.function.actual->expr->where = code->loc;
9597 new_st->expr1->where = code->loc;
9598 gfc_add_vptr_component (new_st->expr1->value.function.actual->expr);
9599 vtab = gfc_find_derived_vtab (body->ext.block.case_list->ts.u.derived);
9600 st = gfc_find_symtree (vtab->ns->sym_root, vtab->name);
9601 new_st->expr1->value.function.actual->next = gfc_get_actual_arglist ();
9602 new_st->expr1->value.function.actual->next->expr = gfc_get_variable_expr (st);
9603 new_st->expr1->value.function.actual->next->expr->where = code->loc;
9604 new_st->next = body->next;
9605 }
9606 if (default_case->next)
9607 {
9608 new_st->block = gfc_get_code (EXEC_IF);
9609 new_st = new_st->block;
9610 new_st->next = default_case->next;
9611 }
9612
9613 /* Replace CLASS DEFAULT code by the IF chain. */
9614 default_case->next = if_st;
9615 }
9616
9617 /* Resolve the internal code. This cannot be done earlier because
9618 it requires that the sym->assoc of selectors is set already. */
9619 gfc_current_ns = ns;
9620 gfc_resolve_blocks (code->block, gfc_current_ns);
9621 gfc_current_ns = old_ns;
9622
9623 if (ref)
9624 free (ref);
9625 }
9626
9627
9628 /* Resolve a SELECT RANK statement. */
9629
9630 static void
9631 resolve_select_rank (gfc_code *code, gfc_namespace *old_ns)
9632 {
9633 gfc_namespace *ns;
9634 gfc_code *body, *new_st, *tail;
9635 gfc_case *c;
9636 char tname[GFC_MAX_SYMBOL_LEN];
9637 char name[2 * GFC_MAX_SYMBOL_LEN];
9638 gfc_symtree *st;
9639 gfc_expr *selector_expr = NULL;
9640 int case_value;
9641 HOST_WIDE_INT charlen = 0;
9642
9643 ns = code->ext.block.ns;
9644 gfc_resolve (ns);
9645
9646 code->op = EXEC_BLOCK;
9647 if (code->expr2)
9648 {
9649 gfc_association_list* assoc;
9650
9651 assoc = gfc_get_association_list ();
9652 assoc->st = code->expr1->symtree;
9653 assoc->target = gfc_copy_expr (code->expr2);
9654 assoc->target->where = code->expr2->where;
9655 /* assoc->variable will be set by resolve_assoc_var. */
9656
9657 code->ext.block.assoc = assoc;
9658 code->expr1->symtree->n.sym->assoc = assoc;
9659
9660 resolve_assoc_var (code->expr1->symtree->n.sym, false);
9661 }
9662 else
9663 code->ext.block.assoc = NULL;
9664
9665 /* Loop over RANK cases. Note that returning on the errors causes a
9666 cascade of further errors because the case blocks do not compile
9667 correctly. */
9668 for (body = code->block; body; body = body->block)
9669 {
9670 c = body->ext.block.case_list;
9671 if (c->low)
9672 case_value = (int) mpz_get_si (c->low->value.integer);
9673 else
9674 case_value = -2;
9675
9676 /* Check for repeated cases. */
9677 for (tail = code->block; tail; tail = tail->block)
9678 {
9679 gfc_case *d = tail->ext.block.case_list;
9680 int case_value2;
9681
9682 if (tail == body)
9683 break;
9684
9685 /* Check F2018: C1153. */
9686 if (!c->low && !d->low)
9687 gfc_error ("RANK DEFAULT at %L is repeated at %L",
9688 &c->where, &d->where);
9689
9690 if (!c->low || !d->low)
9691 continue;
9692
9693 /* Check F2018: C1153. */
9694 case_value2 = (int) mpz_get_si (d->low->value.integer);
9695 if ((case_value == case_value2) && case_value == -1)
9696 gfc_error ("RANK (*) at %L is repeated at %L",
9697 &c->where, &d->where);
9698 else if (case_value == case_value2)
9699 gfc_error ("RANK (%i) at %L is repeated at %L",
9700 case_value, &c->where, &d->where);
9701 }
9702
9703 if (!c->low)
9704 continue;
9705
9706 /* Check F2018: C1155. */
9707 if (case_value == -1 && (gfc_expr_attr (code->expr1).allocatable
9708 || gfc_expr_attr (code->expr1).pointer))
9709 gfc_error ("RANK (*) at %L cannot be used with the pointer or "
9710 "allocatable selector at %L", &c->where, &code->expr1->where);
9711
9712 if (case_value == -1 && (gfc_expr_attr (code->expr1).allocatable
9713 || gfc_expr_attr (code->expr1).pointer))
9714 gfc_error ("RANK (*) at %L cannot be used with the pointer or "
9715 "allocatable selector at %L", &c->where, &code->expr1->where);
9716 }
9717
9718 /* Add EXEC_SELECT to switch on rank. */
9719 new_st = gfc_get_code (code->op);
9720 new_st->expr1 = code->expr1;
9721 new_st->expr2 = code->expr2;
9722 new_st->block = code->block;
9723 code->expr1 = code->expr2 = NULL;
9724 code->block = NULL;
9725 if (!ns->code)
9726 ns->code = new_st;
9727 else
9728 ns->code->next = new_st;
9729 code = new_st;
9730 code->op = EXEC_SELECT_RANK;
9731
9732 selector_expr = code->expr1;
9733
9734 /* Loop over SELECT RANK cases. */
9735 for (body = code->block; body; body = body->block)
9736 {
9737 c = body->ext.block.case_list;
9738 int case_value;
9739
9740 /* Pass on the default case. */
9741 if (c->low == NULL)
9742 continue;
9743
9744 /* Associate temporary to selector. This should only be done
9745 when this case is actually true, so build a new ASSOCIATE
9746 that does precisely this here (instead of using the
9747 'global' one). */
9748 if (c->ts.type == BT_CHARACTER && c->ts.u.cl && c->ts.u.cl->length
9749 && c->ts.u.cl->length->expr_type == EXPR_CONSTANT)
9750 charlen = gfc_mpz_get_hwi (c->ts.u.cl->length->value.integer);
9751
9752 if (c->ts.type == BT_CLASS)
9753 sprintf (tname, "class_%s", c->ts.u.derived->name);
9754 else if (c->ts.type == BT_DERIVED)
9755 sprintf (tname, "type_%s", c->ts.u.derived->name);
9756 else if (c->ts.type != BT_CHARACTER)
9757 sprintf (tname, "%s_%d", gfc_basic_typename (c->ts.type), c->ts.kind);
9758 else
9759 sprintf (tname, "%s_" HOST_WIDE_INT_PRINT_DEC "_%d",
9760 gfc_basic_typename (c->ts.type), charlen, c->ts.kind);
9761
9762 case_value = (int) mpz_get_si (c->low->value.integer);
9763 if (case_value >= 0)
9764 sprintf (name, "__tmp_%s_rank_%d", tname, case_value);
9765 else
9766 sprintf (name, "__tmp_%s_rank_m%d", tname, -case_value);
9767
9768 st = gfc_find_symtree (ns->sym_root, name);
9769 gcc_assert (st->n.sym->assoc);
9770
9771 st->n.sym->assoc->target = gfc_get_variable_expr (selector_expr->symtree);
9772 st->n.sym->assoc->target->where = selector_expr->where;
9773
9774 new_st = gfc_get_code (EXEC_BLOCK);
9775 new_st->ext.block.ns = gfc_build_block_ns (ns);
9776 new_st->ext.block.ns->code = body->next;
9777 body->next = new_st;
9778
9779 /* Chain in the new list only if it is marked as dangling. Otherwise
9780 there is a CASE label overlap and this is already used. Just ignore,
9781 the error is diagnosed elsewhere. */
9782 if (st->n.sym->assoc->dangling)
9783 {
9784 new_st->ext.block.assoc = st->n.sym->assoc;
9785 st->n.sym->assoc->dangling = 0;
9786 }
9787
9788 resolve_assoc_var (st->n.sym, false);
9789 }
9790
9791 gfc_current_ns = ns;
9792 gfc_resolve_blocks (code->block, gfc_current_ns);
9793 gfc_current_ns = old_ns;
9794 }
9795
9796
9797 /* Resolve a transfer statement. This is making sure that:
9798 -- a derived type being transferred has only non-pointer components
9799 -- a derived type being transferred doesn't have private components, unless
9800 it's being transferred from the module where the type was defined
9801 -- we're not trying to transfer a whole assumed size array. */
9802
9803 static void
9804 resolve_transfer (gfc_code *code)
9805 {
9806 gfc_symbol *sym, *derived;
9807 gfc_ref *ref;
9808 gfc_expr *exp;
9809 bool write = false;
9810 bool formatted = false;
9811 gfc_dt *dt = code->ext.dt;
9812 gfc_symbol *dtio_sub = NULL;
9813
9814 exp = code->expr1;
9815
9816 while (exp != NULL && exp->expr_type == EXPR_OP
9817 && exp->value.op.op == INTRINSIC_PARENTHESES)
9818 exp = exp->value.op.op1;
9819
9820 if (exp && exp->expr_type == EXPR_NULL
9821 && code->ext.dt)
9822 {
9823 gfc_error ("Invalid context for NULL () intrinsic at %L",
9824 &exp->where);
9825 return;
9826 }
9827
9828 if (exp == NULL || (exp->expr_type != EXPR_VARIABLE
9829 && exp->expr_type != EXPR_FUNCTION
9830 && exp->expr_type != EXPR_STRUCTURE))
9831 return;
9832
9833 /* If we are reading, the variable will be changed. Note that
9834 code->ext.dt may be NULL if the TRANSFER is related to
9835 an INQUIRE statement -- but in this case, we are not reading, either. */
9836 if (dt && dt->dt_io_kind->value.iokind == M_READ
9837 && !gfc_check_vardef_context (exp, false, false, false,
9838 _("item in READ")))
9839 return;
9840
9841 const gfc_typespec *ts = exp->expr_type == EXPR_STRUCTURE
9842 || exp->expr_type == EXPR_FUNCTION
9843 ? &exp->ts : &exp->symtree->n.sym->ts;
9844
9845 /* Go to actual component transferred. */
9846 for (ref = exp->ref; ref; ref = ref->next)
9847 if (ref->type == REF_COMPONENT)
9848 ts = &ref->u.c.component->ts;
9849
9850 if (dt && dt->dt_io_kind->value.iokind != M_INQUIRE
9851 && (ts->type == BT_DERIVED || ts->type == BT_CLASS))
9852 {
9853 derived = ts->u.derived;
9854
9855 /* Determine when to use the formatted DTIO procedure. */
9856 if (dt && (dt->format_expr || dt->format_label))
9857 formatted = true;
9858
9859 write = dt->dt_io_kind->value.iokind == M_WRITE
9860 || dt->dt_io_kind->value.iokind == M_PRINT;
9861 dtio_sub = gfc_find_specific_dtio_proc (derived, write, formatted);
9862
9863 if (dtio_sub != NULL && exp->expr_type == EXPR_VARIABLE)
9864 {
9865 dt->udtio = exp;
9866 sym = exp->symtree->n.sym->ns->proc_name;
9867 /* Check to see if this is a nested DTIO call, with the
9868 dummy as the io-list object. */
9869 if (sym && sym == dtio_sub && sym->formal
9870 && sym->formal->sym == exp->symtree->n.sym
9871 && exp->ref == NULL)
9872 {
9873 if (!sym->attr.recursive)
9874 {
9875 gfc_error ("DTIO %s procedure at %L must be recursive",
9876 sym->name, &sym->declared_at);
9877 return;
9878 }
9879 }
9880 }
9881 }
9882
9883 if (ts->type == BT_CLASS && dtio_sub == NULL)
9884 {
9885 gfc_error ("Data transfer element at %L cannot be polymorphic unless "
9886 "it is processed by a defined input/output procedure",
9887 &code->loc);
9888 return;
9889 }
9890
9891 if (ts->type == BT_DERIVED)
9892 {
9893 /* Check that transferred derived type doesn't contain POINTER
9894 components unless it is processed by a defined input/output
9895 procedure". */
9896 if (ts->u.derived->attr.pointer_comp && dtio_sub == NULL)
9897 {
9898 gfc_error ("Data transfer element at %L cannot have POINTER "
9899 "components unless it is processed by a defined "
9900 "input/output procedure", &code->loc);
9901 return;
9902 }
9903
9904 /* F08:C935. */
9905 if (ts->u.derived->attr.proc_pointer_comp)
9906 {
9907 gfc_error ("Data transfer element at %L cannot have "
9908 "procedure pointer components", &code->loc);
9909 return;
9910 }
9911
9912 if (ts->u.derived->attr.alloc_comp && dtio_sub == NULL)
9913 {
9914 gfc_error ("Data transfer element at %L cannot have ALLOCATABLE "
9915 "components unless it is processed by a defined "
9916 "input/output procedure", &code->loc);
9917 return;
9918 }
9919
9920 /* C_PTR and C_FUNPTR have private components which means they cannot
9921 be printed. However, if -std=gnu and not -pedantic, allow
9922 the component to be printed to help debugging. */
9923 if (ts->u.derived->ts.f90_type == BT_VOID)
9924 {
9925 if (!gfc_notify_std (GFC_STD_GNU, "Data transfer element at %L "
9926 "cannot have PRIVATE components", &code->loc))
9927 return;
9928 }
9929 else if (derived_inaccessible (ts->u.derived) && dtio_sub == NULL)
9930 {
9931 gfc_error ("Data transfer element at %L cannot have "
9932 "PRIVATE components unless it is processed by "
9933 "a defined input/output procedure", &code->loc);
9934 return;
9935 }
9936 }
9937
9938 if (exp->expr_type == EXPR_STRUCTURE)
9939 return;
9940
9941 sym = exp->symtree->n.sym;
9942
9943 if (sym->as != NULL && sym->as->type == AS_ASSUMED_SIZE && exp->ref
9944 && exp->ref->type == REF_ARRAY && exp->ref->u.ar.type == AR_FULL)
9945 {
9946 gfc_error ("Data transfer element at %L cannot be a full reference to "
9947 "an assumed-size array", &code->loc);
9948 return;
9949 }
9950 }
9951
9952
9953 /*********** Toplevel code resolution subroutines ***********/
9954
9955 /* Find the set of labels that are reachable from this block. We also
9956 record the last statement in each block. */
9957
9958 static void
9959 find_reachable_labels (gfc_code *block)
9960 {
9961 gfc_code *c;
9962
9963 if (!block)
9964 return;
9965
9966 cs_base->reachable_labels = bitmap_alloc (&labels_obstack);
9967
9968 /* Collect labels in this block. We don't keep those corresponding
9969 to END {IF|SELECT}, these are checked in resolve_branch by going
9970 up through the code_stack. */
9971 for (c = block; c; c = c->next)
9972 {
9973 if (c->here && c->op != EXEC_END_NESTED_BLOCK)
9974 bitmap_set_bit (cs_base->reachable_labels, c->here->value);
9975 }
9976
9977 /* Merge with labels from parent block. */
9978 if (cs_base->prev)
9979 {
9980 gcc_assert (cs_base->prev->reachable_labels);
9981 bitmap_ior_into (cs_base->reachable_labels,
9982 cs_base->prev->reachable_labels);
9983 }
9984 }
9985
9986
9987 static void
9988 resolve_lock_unlock_event (gfc_code *code)
9989 {
9990 if (code->expr1->expr_type == EXPR_FUNCTION
9991 && code->expr1->value.function.isym
9992 && code->expr1->value.function.isym->id == GFC_ISYM_CAF_GET)
9993 remove_caf_get_intrinsic (code->expr1);
9994
9995 if ((code->op == EXEC_LOCK || code->op == EXEC_UNLOCK)
9996 && (code->expr1->ts.type != BT_DERIVED
9997 || code->expr1->expr_type != EXPR_VARIABLE
9998 || code->expr1->ts.u.derived->from_intmod != INTMOD_ISO_FORTRAN_ENV
9999 || code->expr1->ts.u.derived->intmod_sym_id != ISOFORTRAN_LOCK_TYPE
10000 || code->expr1->rank != 0
10001 || (!gfc_is_coarray (code->expr1) &&
10002 !gfc_is_coindexed (code->expr1))))
10003 gfc_error ("Lock variable at %L must be a scalar of type LOCK_TYPE",
10004 &code->expr1->where);
10005 else if ((code->op == EXEC_EVENT_POST || code->op == EXEC_EVENT_WAIT)
10006 && (code->expr1->ts.type != BT_DERIVED
10007 || code->expr1->expr_type != EXPR_VARIABLE
10008 || code->expr1->ts.u.derived->from_intmod
10009 != INTMOD_ISO_FORTRAN_ENV
10010 || code->expr1->ts.u.derived->intmod_sym_id
10011 != ISOFORTRAN_EVENT_TYPE
10012 || code->expr1->rank != 0))
10013 gfc_error ("Event variable at %L must be a scalar of type EVENT_TYPE",
10014 &code->expr1->where);
10015 else if (code->op == EXEC_EVENT_POST && !gfc_is_coarray (code->expr1)
10016 && !gfc_is_coindexed (code->expr1))
10017 gfc_error ("Event variable argument at %L must be a coarray or coindexed",
10018 &code->expr1->where);
10019 else if (code->op == EXEC_EVENT_WAIT && !gfc_is_coarray (code->expr1))
10020 gfc_error ("Event variable argument at %L must be a coarray but not "
10021 "coindexed", &code->expr1->where);
10022
10023 /* Check STAT. */
10024 if (code->expr2
10025 && (code->expr2->ts.type != BT_INTEGER || code->expr2->rank != 0
10026 || code->expr2->expr_type != EXPR_VARIABLE))
10027 gfc_error ("STAT= argument at %L must be a scalar INTEGER variable",
10028 &code->expr2->where);
10029
10030 if (code->expr2
10031 && !gfc_check_vardef_context (code->expr2, false, false, false,
10032 _("STAT variable")))
10033 return;
10034
10035 /* Check ERRMSG. */
10036 if (code->expr3
10037 && (code->expr3->ts.type != BT_CHARACTER || code->expr3->rank != 0
10038 || code->expr3->expr_type != EXPR_VARIABLE))
10039 gfc_error ("ERRMSG= argument at %L must be a scalar CHARACTER variable",
10040 &code->expr3->where);
10041
10042 if (code->expr3
10043 && !gfc_check_vardef_context (code->expr3, false, false, false,
10044 _("ERRMSG variable")))
10045 return;
10046
10047 /* Check for LOCK the ACQUIRED_LOCK. */
10048 if (code->op != EXEC_EVENT_WAIT && code->expr4
10049 && (code->expr4->ts.type != BT_LOGICAL || code->expr4->rank != 0
10050 || code->expr4->expr_type != EXPR_VARIABLE))
10051 gfc_error ("ACQUIRED_LOCK= argument at %L must be a scalar LOGICAL "
10052 "variable", &code->expr4->where);
10053
10054 if (code->op != EXEC_EVENT_WAIT && code->expr4
10055 && !gfc_check_vardef_context (code->expr4, false, false, false,
10056 _("ACQUIRED_LOCK variable")))
10057 return;
10058
10059 /* Check for EVENT WAIT the UNTIL_COUNT. */
10060 if (code->op == EXEC_EVENT_WAIT && code->expr4)
10061 {
10062 if (!gfc_resolve_expr (code->expr4) || code->expr4->ts.type != BT_INTEGER
10063 || code->expr4->rank != 0)
10064 gfc_error ("UNTIL_COUNT= argument at %L must be a scalar INTEGER "
10065 "expression", &code->expr4->where);
10066 }
10067 }
10068
10069
10070 static void
10071 resolve_critical (gfc_code *code)
10072 {
10073 gfc_symtree *symtree;
10074 gfc_symbol *lock_type;
10075 char name[GFC_MAX_SYMBOL_LEN];
10076 static int serial = 0;
10077
10078 if (flag_coarray != GFC_FCOARRAY_LIB)
10079 return;
10080
10081 symtree = gfc_find_symtree (gfc_current_ns->sym_root,
10082 GFC_PREFIX ("lock_type"));
10083 if (symtree)
10084 lock_type = symtree->n.sym;
10085 else
10086 {
10087 if (gfc_get_sym_tree (GFC_PREFIX ("lock_type"), gfc_current_ns, &symtree,
10088 false) != 0)
10089 gcc_unreachable ();
10090 lock_type = symtree->n.sym;
10091 lock_type->attr.flavor = FL_DERIVED;
10092 lock_type->attr.zero_comp = 1;
10093 lock_type->from_intmod = INTMOD_ISO_FORTRAN_ENV;
10094 lock_type->intmod_sym_id = ISOFORTRAN_LOCK_TYPE;
10095 }
10096
10097 sprintf(name, GFC_PREFIX ("lock_var") "%d",serial++);
10098 if (gfc_get_sym_tree (name, gfc_current_ns, &symtree, false) != 0)
10099 gcc_unreachable ();
10100
10101 code->resolved_sym = symtree->n.sym;
10102 symtree->n.sym->attr.flavor = FL_VARIABLE;
10103 symtree->n.sym->attr.referenced = 1;
10104 symtree->n.sym->attr.artificial = 1;
10105 symtree->n.sym->attr.codimension = 1;
10106 symtree->n.sym->ts.type = BT_DERIVED;
10107 symtree->n.sym->ts.u.derived = lock_type;
10108 symtree->n.sym->as = gfc_get_array_spec ();
10109 symtree->n.sym->as->corank = 1;
10110 symtree->n.sym->as->type = AS_EXPLICIT;
10111 symtree->n.sym->as->cotype = AS_EXPLICIT;
10112 symtree->n.sym->as->lower[0] = gfc_get_int_expr (gfc_default_integer_kind,
10113 NULL, 1);
10114 gfc_commit_symbols();
10115 }
10116
10117
10118 static void
10119 resolve_sync (gfc_code *code)
10120 {
10121 /* Check imageset. The * case matches expr1 == NULL. */
10122 if (code->expr1)
10123 {
10124 if (code->expr1->ts.type != BT_INTEGER || code->expr1->rank > 1)
10125 gfc_error ("Imageset argument at %L must be a scalar or rank-1 "
10126 "INTEGER expression", &code->expr1->where);
10127 if (code->expr1->expr_type == EXPR_CONSTANT && code->expr1->rank == 0
10128 && mpz_cmp_si (code->expr1->value.integer, 1) < 0)
10129 gfc_error ("Imageset argument at %L must between 1 and num_images()",
10130 &code->expr1->where);
10131 else if (code->expr1->expr_type == EXPR_ARRAY
10132 && gfc_simplify_expr (code->expr1, 0))
10133 {
10134 gfc_constructor *cons;
10135 cons = gfc_constructor_first (code->expr1->value.constructor);
10136 for (; cons; cons = gfc_constructor_next (cons))
10137 if (cons->expr->expr_type == EXPR_CONSTANT
10138 && mpz_cmp_si (cons->expr->value.integer, 1) < 0)
10139 gfc_error ("Imageset argument at %L must between 1 and "
10140 "num_images()", &cons->expr->where);
10141 }
10142 }
10143
10144 /* Check STAT. */
10145 gfc_resolve_expr (code->expr2);
10146 if (code->expr2
10147 && (code->expr2->ts.type != BT_INTEGER || code->expr2->rank != 0
10148 || code->expr2->expr_type != EXPR_VARIABLE))
10149 gfc_error ("STAT= argument at %L must be a scalar INTEGER variable",
10150 &code->expr2->where);
10151
10152 /* Check ERRMSG. */
10153 gfc_resolve_expr (code->expr3);
10154 if (code->expr3
10155 && (code->expr3->ts.type != BT_CHARACTER || code->expr3->rank != 0
10156 || code->expr3->expr_type != EXPR_VARIABLE))
10157 gfc_error ("ERRMSG= argument at %L must be a scalar CHARACTER variable",
10158 &code->expr3->where);
10159 }
10160
10161
10162 /* Given a branch to a label, see if the branch is conforming.
10163 The code node describes where the branch is located. */
10164
10165 static void
10166 resolve_branch (gfc_st_label *label, gfc_code *code)
10167 {
10168 code_stack *stack;
10169
10170 if (label == NULL)
10171 return;
10172
10173 /* Step one: is this a valid branching target? */
10174
10175 if (label->defined == ST_LABEL_UNKNOWN)
10176 {
10177 gfc_error ("Label %d referenced at %L is never defined", label->value,
10178 &code->loc);
10179 return;
10180 }
10181
10182 if (label->defined != ST_LABEL_TARGET && label->defined != ST_LABEL_DO_TARGET)
10183 {
10184 gfc_error ("Statement at %L is not a valid branch target statement "
10185 "for the branch statement at %L", &label->where, &code->loc);
10186 return;
10187 }
10188
10189 /* Step two: make sure this branch is not a branch to itself ;-) */
10190
10191 if (code->here == label)
10192 {
10193 gfc_warning (0,
10194 "Branch at %L may result in an infinite loop", &code->loc);
10195 return;
10196 }
10197
10198 /* Step three: See if the label is in the same block as the
10199 branching statement. The hard work has been done by setting up
10200 the bitmap reachable_labels. */
10201
10202 if (bitmap_bit_p (cs_base->reachable_labels, label->value))
10203 {
10204 /* Check now whether there is a CRITICAL construct; if so, check
10205 whether the label is still visible outside of the CRITICAL block,
10206 which is invalid. */
10207 for (stack = cs_base; stack; stack = stack->prev)
10208 {
10209 if (stack->current->op == EXEC_CRITICAL
10210 && bitmap_bit_p (stack->reachable_labels, label->value))
10211 gfc_error ("GOTO statement at %L leaves CRITICAL construct for "
10212 "label at %L", &code->loc, &label->where);
10213 else if (stack->current->op == EXEC_DO_CONCURRENT
10214 && bitmap_bit_p (stack->reachable_labels, label->value))
10215 gfc_error ("GOTO statement at %L leaves DO CONCURRENT construct "
10216 "for label at %L", &code->loc, &label->where);
10217 }
10218
10219 return;
10220 }
10221
10222 /* Step four: If we haven't found the label in the bitmap, it may
10223 still be the label of the END of the enclosing block, in which
10224 case we find it by going up the code_stack. */
10225
10226 for (stack = cs_base; stack; stack = stack->prev)
10227 {
10228 if (stack->current->next && stack->current->next->here == label)
10229 break;
10230 if (stack->current->op == EXEC_CRITICAL)
10231 {
10232 /* Note: A label at END CRITICAL does not leave the CRITICAL
10233 construct as END CRITICAL is still part of it. */
10234 gfc_error ("GOTO statement at %L leaves CRITICAL construct for label"
10235 " at %L", &code->loc, &label->where);
10236 return;
10237 }
10238 else if (stack->current->op == EXEC_DO_CONCURRENT)
10239 {
10240 gfc_error ("GOTO statement at %L leaves DO CONCURRENT construct for "
10241 "label at %L", &code->loc, &label->where);
10242 return;
10243 }
10244 }
10245
10246 if (stack)
10247 {
10248 gcc_assert (stack->current->next->op == EXEC_END_NESTED_BLOCK);
10249 return;
10250 }
10251
10252 /* The label is not in an enclosing block, so illegal. This was
10253 allowed in Fortran 66, so we allow it as extension. No
10254 further checks are necessary in this case. */
10255 gfc_notify_std (GFC_STD_LEGACY, "Label at %L is not in the same block "
10256 "as the GOTO statement at %L", &label->where,
10257 &code->loc);
10258 return;
10259 }
10260
10261
10262 /* Check whether EXPR1 has the same shape as EXPR2. */
10263
10264 static bool
10265 resolve_where_shape (gfc_expr *expr1, gfc_expr *expr2)
10266 {
10267 mpz_t shape[GFC_MAX_DIMENSIONS];
10268 mpz_t shape2[GFC_MAX_DIMENSIONS];
10269 bool result = false;
10270 int i;
10271
10272 /* Compare the rank. */
10273 if (expr1->rank != expr2->rank)
10274 return result;
10275
10276 /* Compare the size of each dimension. */
10277 for (i=0; i<expr1->rank; i++)
10278 {
10279 if (!gfc_array_dimen_size (expr1, i, &shape[i]))
10280 goto ignore;
10281
10282 if (!gfc_array_dimen_size (expr2, i, &shape2[i]))
10283 goto ignore;
10284
10285 if (mpz_cmp (shape[i], shape2[i]))
10286 goto over;
10287 }
10288
10289 /* When either of the two expression is an assumed size array, we
10290 ignore the comparison of dimension sizes. */
10291 ignore:
10292 result = true;
10293
10294 over:
10295 gfc_clear_shape (shape, i);
10296 gfc_clear_shape (shape2, i);
10297 return result;
10298 }
10299
10300
10301 /* Check whether a WHERE assignment target or a WHERE mask expression
10302 has the same shape as the outmost WHERE mask expression. */
10303
10304 static void
10305 resolve_where (gfc_code *code, gfc_expr *mask)
10306 {
10307 gfc_code *cblock;
10308 gfc_code *cnext;
10309 gfc_expr *e = NULL;
10310
10311 cblock = code->block;
10312
10313 /* Store the first WHERE mask-expr of the WHERE statement or construct.
10314 In case of nested WHERE, only the outmost one is stored. */
10315 if (mask == NULL) /* outmost WHERE */
10316 e = cblock->expr1;
10317 else /* inner WHERE */
10318 e = mask;
10319
10320 while (cblock)
10321 {
10322 if (cblock->expr1)
10323 {
10324 /* Check if the mask-expr has a consistent shape with the
10325 outmost WHERE mask-expr. */
10326 if (!resolve_where_shape (cblock->expr1, e))
10327 gfc_error ("WHERE mask at %L has inconsistent shape",
10328 &cblock->expr1->where);
10329 }
10330
10331 /* the assignment statement of a WHERE statement, or the first
10332 statement in where-body-construct of a WHERE construct */
10333 cnext = cblock->next;
10334 while (cnext)
10335 {
10336 switch (cnext->op)
10337 {
10338 /* WHERE assignment statement */
10339 case EXEC_ASSIGN:
10340
10341 /* Check shape consistent for WHERE assignment target. */
10342 if (e && !resolve_where_shape (cnext->expr1, e))
10343 gfc_error ("WHERE assignment target at %L has "
10344 "inconsistent shape", &cnext->expr1->where);
10345 break;
10346
10347
10348 case EXEC_ASSIGN_CALL:
10349 resolve_call (cnext);
10350 if (!cnext->resolved_sym->attr.elemental)
10351 gfc_error("Non-ELEMENTAL user-defined assignment in WHERE at %L",
10352 &cnext->ext.actual->expr->where);
10353 break;
10354
10355 /* WHERE or WHERE construct is part of a where-body-construct */
10356 case EXEC_WHERE:
10357 resolve_where (cnext, e);
10358 break;
10359
10360 default:
10361 gfc_error ("Unsupported statement inside WHERE at %L",
10362 &cnext->loc);
10363 }
10364 /* the next statement within the same where-body-construct */
10365 cnext = cnext->next;
10366 }
10367 /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
10368 cblock = cblock->block;
10369 }
10370 }
10371
10372
10373 /* Resolve assignment in FORALL construct.
10374 NVAR is the number of FORALL index variables, and VAR_EXPR records the
10375 FORALL index variables. */
10376
10377 static void
10378 gfc_resolve_assign_in_forall (gfc_code *code, int nvar, gfc_expr **var_expr)
10379 {
10380 int n;
10381
10382 for (n = 0; n < nvar; n++)
10383 {
10384 gfc_symbol *forall_index;
10385
10386 forall_index = var_expr[n]->symtree->n.sym;
10387
10388 /* Check whether the assignment target is one of the FORALL index
10389 variable. */
10390 if ((code->expr1->expr_type == EXPR_VARIABLE)
10391 && (code->expr1->symtree->n.sym == forall_index))
10392 gfc_error ("Assignment to a FORALL index variable at %L",
10393 &code->expr1->where);
10394 else
10395 {
10396 /* If one of the FORALL index variables doesn't appear in the
10397 assignment variable, then there could be a many-to-one
10398 assignment. Emit a warning rather than an error because the
10399 mask could be resolving this problem. */
10400 if (!find_forall_index (code->expr1, forall_index, 0))
10401 gfc_warning (0, "The FORALL with index %qs is not used on the "
10402 "left side of the assignment at %L and so might "
10403 "cause multiple assignment to this object",
10404 var_expr[n]->symtree->name, &code->expr1->where);
10405 }
10406 }
10407 }
10408
10409
10410 /* Resolve WHERE statement in FORALL construct. */
10411
10412 static void
10413 gfc_resolve_where_code_in_forall (gfc_code *code, int nvar,
10414 gfc_expr **var_expr)
10415 {
10416 gfc_code *cblock;
10417 gfc_code *cnext;
10418
10419 cblock = code->block;
10420 while (cblock)
10421 {
10422 /* the assignment statement of a WHERE statement, or the first
10423 statement in where-body-construct of a WHERE construct */
10424 cnext = cblock->next;
10425 while (cnext)
10426 {
10427 switch (cnext->op)
10428 {
10429 /* WHERE assignment statement */
10430 case EXEC_ASSIGN:
10431 gfc_resolve_assign_in_forall (cnext, nvar, var_expr);
10432 break;
10433
10434 /* WHERE operator assignment statement */
10435 case EXEC_ASSIGN_CALL:
10436 resolve_call (cnext);
10437 if (!cnext->resolved_sym->attr.elemental)
10438 gfc_error("Non-ELEMENTAL user-defined assignment in WHERE at %L",
10439 &cnext->ext.actual->expr->where);
10440 break;
10441
10442 /* WHERE or WHERE construct is part of a where-body-construct */
10443 case EXEC_WHERE:
10444 gfc_resolve_where_code_in_forall (cnext, nvar, var_expr);
10445 break;
10446
10447 default:
10448 gfc_error ("Unsupported statement inside WHERE at %L",
10449 &cnext->loc);
10450 }
10451 /* the next statement within the same where-body-construct */
10452 cnext = cnext->next;
10453 }
10454 /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
10455 cblock = cblock->block;
10456 }
10457 }
10458
10459
10460 /* Traverse the FORALL body to check whether the following errors exist:
10461 1. For assignment, check if a many-to-one assignment happens.
10462 2. For WHERE statement, check the WHERE body to see if there is any
10463 many-to-one assignment. */
10464
10465 static void
10466 gfc_resolve_forall_body (gfc_code *code, int nvar, gfc_expr **var_expr)
10467 {
10468 gfc_code *c;
10469
10470 c = code->block->next;
10471 while (c)
10472 {
10473 switch (c->op)
10474 {
10475 case EXEC_ASSIGN:
10476 case EXEC_POINTER_ASSIGN:
10477 gfc_resolve_assign_in_forall (c, nvar, var_expr);
10478 break;
10479
10480 case EXEC_ASSIGN_CALL:
10481 resolve_call (c);
10482 break;
10483
10484 /* Because the gfc_resolve_blocks() will handle the nested FORALL,
10485 there is no need to handle it here. */
10486 case EXEC_FORALL:
10487 break;
10488 case EXEC_WHERE:
10489 gfc_resolve_where_code_in_forall(c, nvar, var_expr);
10490 break;
10491 default:
10492 break;
10493 }
10494 /* The next statement in the FORALL body. */
10495 c = c->next;
10496 }
10497 }
10498
10499
10500 /* Counts the number of iterators needed inside a forall construct, including
10501 nested forall constructs. This is used to allocate the needed memory
10502 in gfc_resolve_forall. */
10503
10504 static int
10505 gfc_count_forall_iterators (gfc_code *code)
10506 {
10507 int max_iters, sub_iters, current_iters;
10508 gfc_forall_iterator *fa;
10509
10510 gcc_assert(code->op == EXEC_FORALL);
10511 max_iters = 0;
10512 current_iters = 0;
10513
10514 for (fa = code->ext.forall_iterator; fa; fa = fa->next)
10515 current_iters ++;
10516
10517 code = code->block->next;
10518
10519 while (code)
10520 {
10521 if (code->op == EXEC_FORALL)
10522 {
10523 sub_iters = gfc_count_forall_iterators (code);
10524 if (sub_iters > max_iters)
10525 max_iters = sub_iters;
10526 }
10527 code = code->next;
10528 }
10529
10530 return current_iters + max_iters;
10531 }
10532
10533
10534 /* Given a FORALL construct, first resolve the FORALL iterator, then call
10535 gfc_resolve_forall_body to resolve the FORALL body. */
10536
10537 static void
10538 gfc_resolve_forall (gfc_code *code, gfc_namespace *ns, int forall_save)
10539 {
10540 static gfc_expr **var_expr;
10541 static int total_var = 0;
10542 static int nvar = 0;
10543 int i, old_nvar, tmp;
10544 gfc_forall_iterator *fa;
10545
10546 old_nvar = nvar;
10547
10548 if (!gfc_notify_std (GFC_STD_F2018_OBS, "FORALL construct at %L", &code->loc))
10549 return;
10550
10551 /* Start to resolve a FORALL construct */
10552 if (forall_save == 0)
10553 {
10554 /* Count the total number of FORALL indices in the nested FORALL
10555 construct in order to allocate the VAR_EXPR with proper size. */
10556 total_var = gfc_count_forall_iterators (code);
10557
10558 /* Allocate VAR_EXPR with NUMBER_OF_FORALL_INDEX elements. */
10559 var_expr = XCNEWVEC (gfc_expr *, total_var);
10560 }
10561
10562 /* The information about FORALL iterator, including FORALL indices start, end
10563 and stride. An outer FORALL indice cannot appear in start, end or stride. */
10564 for (fa = code->ext.forall_iterator; fa; fa = fa->next)
10565 {
10566 /* Fortran 20008: C738 (R753). */
10567 if (fa->var->ref && fa->var->ref->type == REF_ARRAY)
10568 {
10569 gfc_error ("FORALL index-name at %L must be a scalar variable "
10570 "of type integer", &fa->var->where);
10571 continue;
10572 }
10573
10574 /* Check if any outer FORALL index name is the same as the current
10575 one. */
10576 for (i = 0; i < nvar; i++)
10577 {
10578 if (fa->var->symtree->n.sym == var_expr[i]->symtree->n.sym)
10579 gfc_error ("An outer FORALL construct already has an index "
10580 "with this name %L", &fa->var->where);
10581 }
10582
10583 /* Record the current FORALL index. */
10584 var_expr[nvar] = gfc_copy_expr (fa->var);
10585
10586 nvar++;
10587
10588 /* No memory leak. */
10589 gcc_assert (nvar <= total_var);
10590 }
10591
10592 /* Resolve the FORALL body. */
10593 gfc_resolve_forall_body (code, nvar, var_expr);
10594
10595 /* May call gfc_resolve_forall to resolve the inner FORALL loop. */
10596 gfc_resolve_blocks (code->block, ns);
10597
10598 tmp = nvar;
10599 nvar = old_nvar;
10600 /* Free only the VAR_EXPRs allocated in this frame. */
10601 for (i = nvar; i < tmp; i++)
10602 gfc_free_expr (var_expr[i]);
10603
10604 if (nvar == 0)
10605 {
10606 /* We are in the outermost FORALL construct. */
10607 gcc_assert (forall_save == 0);
10608
10609 /* VAR_EXPR is not needed any more. */
10610 free (var_expr);
10611 total_var = 0;
10612 }
10613 }
10614
10615
10616 /* Resolve a BLOCK construct statement. */
10617
10618 static void
10619 resolve_block_construct (gfc_code* code)
10620 {
10621 /* Resolve the BLOCK's namespace. */
10622 gfc_resolve (code->ext.block.ns);
10623
10624 /* For an ASSOCIATE block, the associations (and their targets) are already
10625 resolved during resolve_symbol. */
10626 }
10627
10628
10629 /* Resolve lists of blocks found in IF, SELECT CASE, WHERE, FORALL, GOTO and
10630 DO code nodes. */
10631
10632 void
10633 gfc_resolve_blocks (gfc_code *b, gfc_namespace *ns)
10634 {
10635 bool t;
10636
10637 for (; b; b = b->block)
10638 {
10639 t = gfc_resolve_expr (b->expr1);
10640 if (!gfc_resolve_expr (b->expr2))
10641 t = false;
10642
10643 switch (b->op)
10644 {
10645 case EXEC_IF:
10646 if (t && b->expr1 != NULL
10647 && (b->expr1->ts.type != BT_LOGICAL || b->expr1->rank != 0))
10648 gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
10649 &b->expr1->where);
10650 break;
10651
10652 case EXEC_WHERE:
10653 if (t
10654 && b->expr1 != NULL
10655 && (b->expr1->ts.type != BT_LOGICAL || b->expr1->rank == 0))
10656 gfc_error ("WHERE/ELSEWHERE clause at %L requires a LOGICAL array",
10657 &b->expr1->where);
10658 break;
10659
10660 case EXEC_GOTO:
10661 resolve_branch (b->label1, b);
10662 break;
10663
10664 case EXEC_BLOCK:
10665 resolve_block_construct (b);
10666 break;
10667
10668 case EXEC_SELECT:
10669 case EXEC_SELECT_TYPE:
10670 case EXEC_SELECT_RANK:
10671 case EXEC_FORALL:
10672 case EXEC_DO:
10673 case EXEC_DO_WHILE:
10674 case EXEC_DO_CONCURRENT:
10675 case EXEC_CRITICAL:
10676 case EXEC_READ:
10677 case EXEC_WRITE:
10678 case EXEC_IOLENGTH:
10679 case EXEC_WAIT:
10680 break;
10681
10682 case EXEC_OMP_ATOMIC:
10683 case EXEC_OACC_ATOMIC:
10684 {
10685 gfc_omp_atomic_op aop
10686 = (gfc_omp_atomic_op) (b->ext.omp_atomic & GFC_OMP_ATOMIC_MASK);
10687
10688 /* Verify this before calling gfc_resolve_code, which might
10689 change it. */
10690 gcc_assert (b->next && b->next->op == EXEC_ASSIGN);
10691 gcc_assert (((aop != GFC_OMP_ATOMIC_CAPTURE)
10692 && b->next->next == NULL)
10693 || ((aop == GFC_OMP_ATOMIC_CAPTURE)
10694 && b->next->next != NULL
10695 && b->next->next->op == EXEC_ASSIGN
10696 && b->next->next->next == NULL));
10697 }
10698 break;
10699
10700 case EXEC_OACC_PARALLEL_LOOP:
10701 case EXEC_OACC_PARALLEL:
10702 case EXEC_OACC_KERNELS_LOOP:
10703 case EXEC_OACC_KERNELS:
10704 case EXEC_OACC_SERIAL_LOOP:
10705 case EXEC_OACC_SERIAL:
10706 case EXEC_OACC_DATA:
10707 case EXEC_OACC_HOST_DATA:
10708 case EXEC_OACC_LOOP:
10709 case EXEC_OACC_UPDATE:
10710 case EXEC_OACC_WAIT:
10711 case EXEC_OACC_CACHE:
10712 case EXEC_OACC_ENTER_DATA:
10713 case EXEC_OACC_EXIT_DATA:
10714 case EXEC_OACC_ROUTINE:
10715 case EXEC_OMP_CRITICAL:
10716 case EXEC_OMP_DISTRIBUTE:
10717 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
10718 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
10719 case EXEC_OMP_DISTRIBUTE_SIMD:
10720 case EXEC_OMP_DO:
10721 case EXEC_OMP_DO_SIMD:
10722 case EXEC_OMP_MASTER:
10723 case EXEC_OMP_ORDERED:
10724 case EXEC_OMP_PARALLEL:
10725 case EXEC_OMP_PARALLEL_DO:
10726 case EXEC_OMP_PARALLEL_DO_SIMD:
10727 case EXEC_OMP_PARALLEL_SECTIONS:
10728 case EXEC_OMP_PARALLEL_WORKSHARE:
10729 case EXEC_OMP_SECTIONS:
10730 case EXEC_OMP_SIMD:
10731 case EXEC_OMP_SINGLE:
10732 case EXEC_OMP_TARGET:
10733 case EXEC_OMP_TARGET_DATA:
10734 case EXEC_OMP_TARGET_ENTER_DATA:
10735 case EXEC_OMP_TARGET_EXIT_DATA:
10736 case EXEC_OMP_TARGET_PARALLEL:
10737 case EXEC_OMP_TARGET_PARALLEL_DO:
10738 case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
10739 case EXEC_OMP_TARGET_SIMD:
10740 case EXEC_OMP_TARGET_TEAMS:
10741 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
10742 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
10743 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
10744 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
10745 case EXEC_OMP_TARGET_UPDATE:
10746 case EXEC_OMP_TASK:
10747 case EXEC_OMP_TASKGROUP:
10748 case EXEC_OMP_TASKLOOP:
10749 case EXEC_OMP_TASKLOOP_SIMD:
10750 case EXEC_OMP_TASKWAIT:
10751 case EXEC_OMP_TASKYIELD:
10752 case EXEC_OMP_TEAMS:
10753 case EXEC_OMP_TEAMS_DISTRIBUTE:
10754 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
10755 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
10756 case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
10757 case EXEC_OMP_WORKSHARE:
10758 break;
10759
10760 default:
10761 gfc_internal_error ("gfc_resolve_blocks(): Bad block type");
10762 }
10763
10764 gfc_resolve_code (b->next, ns);
10765 }
10766 }
10767
10768
10769 /* Does everything to resolve an ordinary assignment. Returns true
10770 if this is an interface assignment. */
10771 static bool
10772 resolve_ordinary_assign (gfc_code *code, gfc_namespace *ns)
10773 {
10774 bool rval = false;
10775 gfc_expr *lhs;
10776 gfc_expr *rhs;
10777 int n;
10778 gfc_ref *ref;
10779 symbol_attribute attr;
10780
10781 if (gfc_extend_assign (code, ns))
10782 {
10783 gfc_expr** rhsptr;
10784
10785 if (code->op == EXEC_ASSIGN_CALL)
10786 {
10787 lhs = code->ext.actual->expr;
10788 rhsptr = &code->ext.actual->next->expr;
10789 }
10790 else
10791 {
10792 gfc_actual_arglist* args;
10793 gfc_typebound_proc* tbp;
10794
10795 gcc_assert (code->op == EXEC_COMPCALL);
10796
10797 args = code->expr1->value.compcall.actual;
10798 lhs = args->expr;
10799 rhsptr = &args->next->expr;
10800
10801 tbp = code->expr1->value.compcall.tbp;
10802 gcc_assert (!tbp->is_generic);
10803 }
10804
10805 /* Make a temporary rhs when there is a default initializer
10806 and rhs is the same symbol as the lhs. */
10807 if ((*rhsptr)->expr_type == EXPR_VARIABLE
10808 && (*rhsptr)->symtree->n.sym->ts.type == BT_DERIVED
10809 && gfc_has_default_initializer ((*rhsptr)->symtree->n.sym->ts.u.derived)
10810 && (lhs->symtree->n.sym == (*rhsptr)->symtree->n.sym))
10811 *rhsptr = gfc_get_parentheses (*rhsptr);
10812
10813 return true;
10814 }
10815
10816 lhs = code->expr1;
10817 rhs = code->expr2;
10818
10819 if ((gfc_numeric_ts (&lhs->ts) || lhs->ts.type == BT_LOGICAL)
10820 && rhs->ts.type == BT_CHARACTER
10821 && (rhs->expr_type != EXPR_CONSTANT || !flag_dec_char_conversions))
10822 {
10823 /* Use of -fdec-char-conversions allows assignment of character data
10824 to non-character variables. This not permited for nonconstant
10825 strings. */
10826 gfc_error ("Cannot convert %s to %s at %L", gfc_typename (rhs),
10827 gfc_typename (lhs), &rhs->where);
10828 return false;
10829 }
10830
10831 /* Handle the case of a BOZ literal on the RHS. */
10832 if (rhs->ts.type == BT_BOZ)
10833 {
10834 if (gfc_invalid_boz ("BOZ literal constant at %L is neither a DATA "
10835 "statement value nor an actual argument of "
10836 "INT/REAL/DBLE/CMPLX intrinsic subprogram",
10837 &rhs->where))
10838 return false;
10839
10840 switch (lhs->ts.type)
10841 {
10842 case BT_INTEGER:
10843 if (!gfc_boz2int (rhs, lhs->ts.kind))
10844 return false;
10845 break;
10846 case BT_REAL:
10847 if (!gfc_boz2real (rhs, lhs->ts.kind))
10848 return false;
10849 break;
10850 default:
10851 gfc_error ("Invalid use of BOZ literal constant at %L", &rhs->where);
10852 return false;
10853 }
10854 }
10855
10856 if (lhs->ts.type == BT_CHARACTER && warn_character_truncation)
10857 {
10858 HOST_WIDE_INT llen = 0, rlen = 0;
10859 if (lhs->ts.u.cl != NULL
10860 && lhs->ts.u.cl->length != NULL
10861 && lhs->ts.u.cl->length->expr_type == EXPR_CONSTANT)
10862 llen = gfc_mpz_get_hwi (lhs->ts.u.cl->length->value.integer);
10863
10864 if (rhs->expr_type == EXPR_CONSTANT)
10865 rlen = rhs->value.character.length;
10866
10867 else if (rhs->ts.u.cl != NULL
10868 && rhs->ts.u.cl->length != NULL
10869 && rhs->ts.u.cl->length->expr_type == EXPR_CONSTANT)
10870 rlen = gfc_mpz_get_hwi (rhs->ts.u.cl->length->value.integer);
10871
10872 if (rlen && llen && rlen > llen)
10873 gfc_warning_now (OPT_Wcharacter_truncation,
10874 "CHARACTER expression will be truncated "
10875 "in assignment (%ld/%ld) at %L",
10876 (long) llen, (long) rlen, &code->loc);
10877 }
10878
10879 /* Ensure that a vector index expression for the lvalue is evaluated
10880 to a temporary if the lvalue symbol is referenced in it. */
10881 if (lhs->rank)
10882 {
10883 for (ref = lhs->ref; ref; ref= ref->next)
10884 if (ref->type == REF_ARRAY)
10885 {
10886 for (n = 0; n < ref->u.ar.dimen; n++)
10887 if (ref->u.ar.dimen_type[n] == DIMEN_VECTOR
10888 && gfc_find_sym_in_expr (lhs->symtree->n.sym,
10889 ref->u.ar.start[n]))
10890 ref->u.ar.start[n]
10891 = gfc_get_parentheses (ref->u.ar.start[n]);
10892 }
10893 }
10894
10895 if (gfc_pure (NULL))
10896 {
10897 if (lhs->ts.type == BT_DERIVED
10898 && lhs->expr_type == EXPR_VARIABLE
10899 && lhs->ts.u.derived->attr.pointer_comp
10900 && rhs->expr_type == EXPR_VARIABLE
10901 && (gfc_impure_variable (rhs->symtree->n.sym)
10902 || gfc_is_coindexed (rhs)))
10903 {
10904 /* F2008, C1283. */
10905 if (gfc_is_coindexed (rhs))
10906 gfc_error ("Coindexed expression at %L is assigned to "
10907 "a derived type variable with a POINTER "
10908 "component in a PURE procedure",
10909 &rhs->where);
10910 else
10911 /* F2008, C1283 (4). */
10912 gfc_error ("In a pure subprogram an INTENT(IN) dummy argument "
10913 "shall not be used as the expr at %L of an intrinsic "
10914 "assignment statement in which the variable is of a "
10915 "derived type if the derived type has a pointer "
10916 "component at any level of component selection.",
10917 &rhs->where);
10918 return rval;
10919 }
10920
10921 /* Fortran 2008, C1283. */
10922 if (gfc_is_coindexed (lhs))
10923 {
10924 gfc_error ("Assignment to coindexed variable at %L in a PURE "
10925 "procedure", &rhs->where);
10926 return rval;
10927 }
10928 }
10929
10930 if (gfc_implicit_pure (NULL))
10931 {
10932 if (lhs->expr_type == EXPR_VARIABLE
10933 && lhs->symtree->n.sym != gfc_current_ns->proc_name
10934 && lhs->symtree->n.sym->ns != gfc_current_ns)
10935 gfc_unset_implicit_pure (NULL);
10936
10937 if (lhs->ts.type == BT_DERIVED
10938 && lhs->expr_type == EXPR_VARIABLE
10939 && lhs->ts.u.derived->attr.pointer_comp
10940 && rhs->expr_type == EXPR_VARIABLE
10941 && (gfc_impure_variable (rhs->symtree->n.sym)
10942 || gfc_is_coindexed (rhs)))
10943 gfc_unset_implicit_pure (NULL);
10944
10945 /* Fortran 2008, C1283. */
10946 if (gfc_is_coindexed (lhs))
10947 gfc_unset_implicit_pure (NULL);
10948 }
10949
10950 /* F2008, 7.2.1.2. */
10951 attr = gfc_expr_attr (lhs);
10952 if (lhs->ts.type == BT_CLASS && attr.allocatable)
10953 {
10954 if (attr.codimension)
10955 {
10956 gfc_error ("Assignment to polymorphic coarray at %L is not "
10957 "permitted", &lhs->where);
10958 return false;
10959 }
10960 if (!gfc_notify_std (GFC_STD_F2008, "Assignment to an allocatable "
10961 "polymorphic variable at %L", &lhs->where))
10962 return false;
10963 if (!flag_realloc_lhs)
10964 {
10965 gfc_error ("Assignment to an allocatable polymorphic variable at %L "
10966 "requires %<-frealloc-lhs%>", &lhs->where);
10967 return false;
10968 }
10969 }
10970 else if (lhs->ts.type == BT_CLASS)
10971 {
10972 gfc_error ("Nonallocatable variable must not be polymorphic in intrinsic "
10973 "assignment at %L - check that there is a matching specific "
10974 "subroutine for '=' operator", &lhs->where);
10975 return false;
10976 }
10977
10978 bool lhs_coindexed = gfc_is_coindexed (lhs);
10979
10980 /* F2008, Section 7.2.1.2. */
10981 if (lhs_coindexed && gfc_has_ultimate_allocatable (lhs))
10982 {
10983 gfc_error ("Coindexed variable must not have an allocatable ultimate "
10984 "component in assignment at %L", &lhs->where);
10985 return false;
10986 }
10987
10988 /* Assign the 'data' of a class object to a derived type. */
10989 if (lhs->ts.type == BT_DERIVED
10990 && rhs->ts.type == BT_CLASS
10991 && rhs->expr_type != EXPR_ARRAY)
10992 gfc_add_data_component (rhs);
10993
10994 /* Make sure there is a vtable and, in particular, a _copy for the
10995 rhs type. */
10996 if (UNLIMITED_POLY (lhs) && lhs->rank && rhs->ts.type != BT_CLASS)
10997 gfc_find_vtab (&rhs->ts);
10998
10999 bool caf_convert_to_send = flag_coarray == GFC_FCOARRAY_LIB
11000 && (lhs_coindexed
11001 || (code->expr2->expr_type == EXPR_FUNCTION
11002 && code->expr2->value.function.isym
11003 && code->expr2->value.function.isym->id == GFC_ISYM_CAF_GET
11004 && (code->expr1->rank == 0 || code->expr2->rank != 0)
11005 && !gfc_expr_attr (rhs).allocatable
11006 && !gfc_has_vector_subscript (rhs)));
11007
11008 gfc_check_assign (lhs, rhs, 1, !caf_convert_to_send);
11009
11010 /* Insert a GFC_ISYM_CAF_SEND intrinsic, when the LHS is a coindexed variable.
11011 Additionally, insert this code when the RHS is a CAF as we then use the
11012 GFC_ISYM_CAF_SEND intrinsic just to avoid a temporary; but do not do so if
11013 the LHS is (re)allocatable or has a vector subscript. If the LHS is a
11014 noncoindexed array and the RHS is a coindexed scalar, use the normal code
11015 path. */
11016 if (caf_convert_to_send)
11017 {
11018 if (code->expr2->expr_type == EXPR_FUNCTION
11019 && code->expr2->value.function.isym
11020 && code->expr2->value.function.isym->id == GFC_ISYM_CAF_GET)
11021 remove_caf_get_intrinsic (code->expr2);
11022 code->op = EXEC_CALL;
11023 gfc_get_sym_tree (GFC_PREFIX ("caf_send"), ns, &code->symtree, true);
11024 code->resolved_sym = code->symtree->n.sym;
11025 code->resolved_sym->attr.flavor = FL_PROCEDURE;
11026 code->resolved_sym->attr.intrinsic = 1;
11027 code->resolved_sym->attr.subroutine = 1;
11028 code->resolved_isym = gfc_intrinsic_subroutine_by_id (GFC_ISYM_CAF_SEND);
11029 gfc_commit_symbol (code->resolved_sym);
11030 code->ext.actual = gfc_get_actual_arglist ();
11031 code->ext.actual->expr = lhs;
11032 code->ext.actual->next = gfc_get_actual_arglist ();
11033 code->ext.actual->next->expr = rhs;
11034 code->expr1 = NULL;
11035 code->expr2 = NULL;
11036 }
11037
11038 return false;
11039 }
11040
11041
11042 /* Add a component reference onto an expression. */
11043
11044 static void
11045 add_comp_ref (gfc_expr *e, gfc_component *c)
11046 {
11047 gfc_ref **ref;
11048 ref = &(e->ref);
11049 while (*ref)
11050 ref = &((*ref)->next);
11051 *ref = gfc_get_ref ();
11052 (*ref)->type = REF_COMPONENT;
11053 (*ref)->u.c.sym = e->ts.u.derived;
11054 (*ref)->u.c.component = c;
11055 e->ts = c->ts;
11056
11057 /* Add a full array ref, as necessary. */
11058 if (c->as)
11059 {
11060 gfc_add_full_array_ref (e, c->as);
11061 e->rank = c->as->rank;
11062 }
11063 }
11064
11065
11066 /* Build an assignment. Keep the argument 'op' for future use, so that
11067 pointer assignments can be made. */
11068
11069 static gfc_code *
11070 build_assignment (gfc_exec_op op, gfc_expr *expr1, gfc_expr *expr2,
11071 gfc_component *comp1, gfc_component *comp2, locus loc)
11072 {
11073 gfc_code *this_code;
11074
11075 this_code = gfc_get_code (op);
11076 this_code->next = NULL;
11077 this_code->expr1 = gfc_copy_expr (expr1);
11078 this_code->expr2 = gfc_copy_expr (expr2);
11079 this_code->loc = loc;
11080 if (comp1 && comp2)
11081 {
11082 add_comp_ref (this_code->expr1, comp1);
11083 add_comp_ref (this_code->expr2, comp2);
11084 }
11085
11086 return this_code;
11087 }
11088
11089
11090 /* Makes a temporary variable expression based on the characteristics of
11091 a given variable expression. */
11092
11093 static gfc_expr*
11094 get_temp_from_expr (gfc_expr *e, gfc_namespace *ns)
11095 {
11096 static int serial = 0;
11097 char name[GFC_MAX_SYMBOL_LEN];
11098 gfc_symtree *tmp;
11099 gfc_array_spec *as;
11100 gfc_array_ref *aref;
11101 gfc_ref *ref;
11102
11103 sprintf (name, GFC_PREFIX("DA%d"), serial++);
11104 gfc_get_sym_tree (name, ns, &tmp, false);
11105 gfc_add_type (tmp->n.sym, &e->ts, NULL);
11106
11107 if (e->expr_type == EXPR_CONSTANT && e->ts.type == BT_CHARACTER)
11108 tmp->n.sym->ts.u.cl->length = gfc_get_int_expr (gfc_charlen_int_kind,
11109 NULL,
11110 e->value.character.length);
11111
11112 as = NULL;
11113 ref = NULL;
11114 aref = NULL;
11115
11116 /* Obtain the arrayspec for the temporary. */
11117 if (e->rank && e->expr_type != EXPR_ARRAY
11118 && e->expr_type != EXPR_FUNCTION
11119 && e->expr_type != EXPR_OP)
11120 {
11121 aref = gfc_find_array_ref (e);
11122 if (e->expr_type == EXPR_VARIABLE
11123 && e->symtree->n.sym->as == aref->as)
11124 as = aref->as;
11125 else
11126 {
11127 for (ref = e->ref; ref; ref = ref->next)
11128 if (ref->type == REF_COMPONENT
11129 && ref->u.c.component->as == aref->as)
11130 {
11131 as = aref->as;
11132 break;
11133 }
11134 }
11135 }
11136
11137 /* Add the attributes and the arrayspec to the temporary. */
11138 tmp->n.sym->attr = gfc_expr_attr (e);
11139 tmp->n.sym->attr.function = 0;
11140 tmp->n.sym->attr.result = 0;
11141 tmp->n.sym->attr.flavor = FL_VARIABLE;
11142 tmp->n.sym->attr.dummy = 0;
11143 tmp->n.sym->attr.intent = INTENT_UNKNOWN;
11144
11145 if (as)
11146 {
11147 tmp->n.sym->as = gfc_copy_array_spec (as);
11148 if (!ref)
11149 ref = e->ref;
11150 if (as->type == AS_DEFERRED)
11151 tmp->n.sym->attr.allocatable = 1;
11152 }
11153 else if (e->rank && (e->expr_type == EXPR_ARRAY
11154 || e->expr_type == EXPR_FUNCTION
11155 || e->expr_type == EXPR_OP))
11156 {
11157 tmp->n.sym->as = gfc_get_array_spec ();
11158 tmp->n.sym->as->type = AS_DEFERRED;
11159 tmp->n.sym->as->rank = e->rank;
11160 tmp->n.sym->attr.allocatable = 1;
11161 tmp->n.sym->attr.dimension = 1;
11162 }
11163 else
11164 tmp->n.sym->attr.dimension = 0;
11165
11166 gfc_set_sym_referenced (tmp->n.sym);
11167 gfc_commit_symbol (tmp->n.sym);
11168 e = gfc_lval_expr_from_sym (tmp->n.sym);
11169
11170 /* Should the lhs be a section, use its array ref for the
11171 temporary expression. */
11172 if (aref && aref->type != AR_FULL)
11173 {
11174 gfc_free_ref_list (e->ref);
11175 e->ref = gfc_copy_ref (ref);
11176 }
11177 return e;
11178 }
11179
11180
11181 /* Add one line of code to the code chain, making sure that 'head' and
11182 'tail' are appropriately updated. */
11183
11184 static void
11185 add_code_to_chain (gfc_code **this_code, gfc_code **head, gfc_code **tail)
11186 {
11187 gcc_assert (this_code);
11188 if (*head == NULL)
11189 *head = *tail = *this_code;
11190 else
11191 *tail = gfc_append_code (*tail, *this_code);
11192 *this_code = NULL;
11193 }
11194
11195
11196 /* Counts the potential number of part array references that would
11197 result from resolution of typebound defined assignments. */
11198
11199 static int
11200 nonscalar_typebound_assign (gfc_symbol *derived, int depth)
11201 {
11202 gfc_component *c;
11203 int c_depth = 0, t_depth;
11204
11205 for (c= derived->components; c; c = c->next)
11206 {
11207 if ((!gfc_bt_struct (c->ts.type)
11208 || c->attr.pointer
11209 || c->attr.allocatable
11210 || c->attr.proc_pointer_comp
11211 || c->attr.class_pointer
11212 || c->attr.proc_pointer)
11213 && !c->attr.defined_assign_comp)
11214 continue;
11215
11216 if (c->as && c_depth == 0)
11217 c_depth = 1;
11218
11219 if (c->ts.u.derived->attr.defined_assign_comp)
11220 t_depth = nonscalar_typebound_assign (c->ts.u.derived,
11221 c->as ? 1 : 0);
11222 else
11223 t_depth = 0;
11224
11225 c_depth = t_depth > c_depth ? t_depth : c_depth;
11226 }
11227 return depth + c_depth;
11228 }
11229
11230
11231 /* Implement 7.2.1.3 of the F08 standard:
11232 "An intrinsic assignment where the variable is of derived type is
11233 performed as if each component of the variable were assigned from the
11234 corresponding component of expr using pointer assignment (7.2.2) for
11235 each pointer component, defined assignment for each nonpointer
11236 nonallocatable component of a type that has a type-bound defined
11237 assignment consistent with the component, intrinsic assignment for
11238 each other nonpointer nonallocatable component, ..."
11239
11240 The pointer assignments are taken care of by the intrinsic
11241 assignment of the structure itself. This function recursively adds
11242 defined assignments where required. The recursion is accomplished
11243 by calling gfc_resolve_code.
11244
11245 When the lhs in a defined assignment has intent INOUT, we need a
11246 temporary for the lhs. In pseudo-code:
11247
11248 ! Only call function lhs once.
11249 if (lhs is not a constant or an variable)
11250 temp_x = expr2
11251 expr2 => temp_x
11252 ! Do the intrinsic assignment
11253 expr1 = expr2
11254 ! Now do the defined assignments
11255 do over components with typebound defined assignment [%cmp]
11256 #if one component's assignment procedure is INOUT
11257 t1 = expr1
11258 #if expr2 non-variable
11259 temp_x = expr2
11260 expr2 => temp_x
11261 # endif
11262 expr1 = expr2
11263 # for each cmp
11264 t1%cmp {defined=} expr2%cmp
11265 expr1%cmp = t1%cmp
11266 #else
11267 expr1 = expr2
11268
11269 # for each cmp
11270 expr1%cmp {defined=} expr2%cmp
11271 #endif
11272 */
11273
11274 /* The temporary assignments have to be put on top of the additional
11275 code to avoid the result being changed by the intrinsic assignment.
11276 */
11277 static int component_assignment_level = 0;
11278 static gfc_code *tmp_head = NULL, *tmp_tail = NULL;
11279
11280 static void
11281 generate_component_assignments (gfc_code **code, gfc_namespace *ns)
11282 {
11283 gfc_component *comp1, *comp2;
11284 gfc_code *this_code = NULL, *head = NULL, *tail = NULL;
11285 gfc_expr *t1;
11286 int error_count, depth;
11287
11288 gfc_get_errors (NULL, &error_count);
11289
11290 /* Filter out continuing processing after an error. */
11291 if (error_count
11292 || (*code)->expr1->ts.type != BT_DERIVED
11293 || (*code)->expr2->ts.type != BT_DERIVED)
11294 return;
11295
11296 /* TODO: Handle more than one part array reference in assignments. */
11297 depth = nonscalar_typebound_assign ((*code)->expr1->ts.u.derived,
11298 (*code)->expr1->rank ? 1 : 0);
11299 if (depth > 1)
11300 {
11301 gfc_warning (0, "TODO: type-bound defined assignment(s) at %L not "
11302 "done because multiple part array references would "
11303 "occur in intermediate expressions.", &(*code)->loc);
11304 return;
11305 }
11306
11307 component_assignment_level++;
11308
11309 /* Create a temporary so that functions get called only once. */
11310 if ((*code)->expr2->expr_type != EXPR_VARIABLE
11311 && (*code)->expr2->expr_type != EXPR_CONSTANT)
11312 {
11313 gfc_expr *tmp_expr;
11314
11315 /* Assign the rhs to the temporary. */
11316 tmp_expr = get_temp_from_expr ((*code)->expr1, ns);
11317 this_code = build_assignment (EXEC_ASSIGN,
11318 tmp_expr, (*code)->expr2,
11319 NULL, NULL, (*code)->loc);
11320 /* Add the code and substitute the rhs expression. */
11321 add_code_to_chain (&this_code, &tmp_head, &tmp_tail);
11322 gfc_free_expr ((*code)->expr2);
11323 (*code)->expr2 = tmp_expr;
11324 }
11325
11326 /* Do the intrinsic assignment. This is not needed if the lhs is one
11327 of the temporaries generated here, since the intrinsic assignment
11328 to the final result already does this. */
11329 if ((*code)->expr1->symtree->n.sym->name[2] != '@')
11330 {
11331 this_code = build_assignment (EXEC_ASSIGN,
11332 (*code)->expr1, (*code)->expr2,
11333 NULL, NULL, (*code)->loc);
11334 add_code_to_chain (&this_code, &head, &tail);
11335 }
11336
11337 comp1 = (*code)->expr1->ts.u.derived->components;
11338 comp2 = (*code)->expr2->ts.u.derived->components;
11339
11340 t1 = NULL;
11341 for (; comp1; comp1 = comp1->next, comp2 = comp2->next)
11342 {
11343 bool inout = false;
11344
11345 /* The intrinsic assignment does the right thing for pointers
11346 of all kinds and allocatable components. */
11347 if (!gfc_bt_struct (comp1->ts.type)
11348 || comp1->attr.pointer
11349 || comp1->attr.allocatable
11350 || comp1->attr.proc_pointer_comp
11351 || comp1->attr.class_pointer
11352 || comp1->attr.proc_pointer)
11353 continue;
11354
11355 /* Make an assigment for this component. */
11356 this_code = build_assignment (EXEC_ASSIGN,
11357 (*code)->expr1, (*code)->expr2,
11358 comp1, comp2, (*code)->loc);
11359
11360 /* Convert the assignment if there is a defined assignment for
11361 this type. Otherwise, using the call from gfc_resolve_code,
11362 recurse into its components. */
11363 gfc_resolve_code (this_code, ns);
11364
11365 if (this_code->op == EXEC_ASSIGN_CALL)
11366 {
11367 gfc_formal_arglist *dummy_args;
11368 gfc_symbol *rsym;
11369 /* Check that there is a typebound defined assignment. If not,
11370 then this must be a module defined assignment. We cannot
11371 use the defined_assign_comp attribute here because it must
11372 be this derived type that has the defined assignment and not
11373 a parent type. */
11374 if (!(comp1->ts.u.derived->f2k_derived
11375 && comp1->ts.u.derived->f2k_derived
11376 ->tb_op[INTRINSIC_ASSIGN]))
11377 {
11378 gfc_free_statements (this_code);
11379 this_code = NULL;
11380 continue;
11381 }
11382
11383 /* If the first argument of the subroutine has intent INOUT
11384 a temporary must be generated and used instead. */
11385 rsym = this_code->resolved_sym;
11386 dummy_args = gfc_sym_get_dummy_args (rsym);
11387 if (dummy_args
11388 && dummy_args->sym->attr.intent == INTENT_INOUT)
11389 {
11390 gfc_code *temp_code;
11391 inout = true;
11392
11393 /* Build the temporary required for the assignment and put
11394 it at the head of the generated code. */
11395 if (!t1)
11396 {
11397 t1 = get_temp_from_expr ((*code)->expr1, ns);
11398 temp_code = build_assignment (EXEC_ASSIGN,
11399 t1, (*code)->expr1,
11400 NULL, NULL, (*code)->loc);
11401
11402 /* For allocatable LHS, check whether it is allocated. Note
11403 that allocatable components with defined assignment are
11404 not yet support. See PR 57696. */
11405 if ((*code)->expr1->symtree->n.sym->attr.allocatable)
11406 {
11407 gfc_code *block;
11408 gfc_expr *e =
11409 gfc_lval_expr_from_sym ((*code)->expr1->symtree->n.sym);
11410 block = gfc_get_code (EXEC_IF);
11411 block->block = gfc_get_code (EXEC_IF);
11412 block->block->expr1
11413 = gfc_build_intrinsic_call (ns,
11414 GFC_ISYM_ALLOCATED, "allocated",
11415 (*code)->loc, 1, e);
11416 block->block->next = temp_code;
11417 temp_code = block;
11418 }
11419 add_code_to_chain (&temp_code, &tmp_head, &tmp_tail);
11420 }
11421
11422 /* Replace the first actual arg with the component of the
11423 temporary. */
11424 gfc_free_expr (this_code->ext.actual->expr);
11425 this_code->ext.actual->expr = gfc_copy_expr (t1);
11426 add_comp_ref (this_code->ext.actual->expr, comp1);
11427
11428 /* If the LHS variable is allocatable and wasn't allocated and
11429 the temporary is allocatable, pointer assign the address of
11430 the freshly allocated LHS to the temporary. */
11431 if ((*code)->expr1->symtree->n.sym->attr.allocatable
11432 && gfc_expr_attr ((*code)->expr1).allocatable)
11433 {
11434 gfc_code *block;
11435 gfc_expr *cond;
11436
11437 cond = gfc_get_expr ();
11438 cond->ts.type = BT_LOGICAL;
11439 cond->ts.kind = gfc_default_logical_kind;
11440 cond->expr_type = EXPR_OP;
11441 cond->where = (*code)->loc;
11442 cond->value.op.op = INTRINSIC_NOT;
11443 cond->value.op.op1 = gfc_build_intrinsic_call (ns,
11444 GFC_ISYM_ALLOCATED, "allocated",
11445 (*code)->loc, 1, gfc_copy_expr (t1));
11446 block = gfc_get_code (EXEC_IF);
11447 block->block = gfc_get_code (EXEC_IF);
11448 block->block->expr1 = cond;
11449 block->block->next = build_assignment (EXEC_POINTER_ASSIGN,
11450 t1, (*code)->expr1,
11451 NULL, NULL, (*code)->loc);
11452 add_code_to_chain (&block, &head, &tail);
11453 }
11454 }
11455 }
11456 else if (this_code->op == EXEC_ASSIGN && !this_code->next)
11457 {
11458 /* Don't add intrinsic assignments since they are already
11459 effected by the intrinsic assignment of the structure. */
11460 gfc_free_statements (this_code);
11461 this_code = NULL;
11462 continue;
11463 }
11464
11465 add_code_to_chain (&this_code, &head, &tail);
11466
11467 if (t1 && inout)
11468 {
11469 /* Transfer the value to the final result. */
11470 this_code = build_assignment (EXEC_ASSIGN,
11471 (*code)->expr1, t1,
11472 comp1, comp2, (*code)->loc);
11473 add_code_to_chain (&this_code, &head, &tail);
11474 }
11475 }
11476
11477 /* Put the temporary assignments at the top of the generated code. */
11478 if (tmp_head && component_assignment_level == 1)
11479 {
11480 gfc_append_code (tmp_head, head);
11481 head = tmp_head;
11482 tmp_head = tmp_tail = NULL;
11483 }
11484
11485 // If we did a pointer assignment - thus, we need to ensure that the LHS is
11486 // not accidentally deallocated. Hence, nullify t1.
11487 if (t1 && (*code)->expr1->symtree->n.sym->attr.allocatable
11488 && gfc_expr_attr ((*code)->expr1).allocatable)
11489 {
11490 gfc_code *block;
11491 gfc_expr *cond;
11492 gfc_expr *e;
11493
11494 e = gfc_lval_expr_from_sym ((*code)->expr1->symtree->n.sym);
11495 cond = gfc_build_intrinsic_call (ns, GFC_ISYM_ASSOCIATED, "associated",
11496 (*code)->loc, 2, gfc_copy_expr (t1), e);
11497 block = gfc_get_code (EXEC_IF);
11498 block->block = gfc_get_code (EXEC_IF);
11499 block->block->expr1 = cond;
11500 block->block->next = build_assignment (EXEC_POINTER_ASSIGN,
11501 t1, gfc_get_null_expr (&(*code)->loc),
11502 NULL, NULL, (*code)->loc);
11503 gfc_append_code (tail, block);
11504 tail = block;
11505 }
11506
11507 /* Now attach the remaining code chain to the input code. Step on
11508 to the end of the new code since resolution is complete. */
11509 gcc_assert ((*code)->op == EXEC_ASSIGN);
11510 tail->next = (*code)->next;
11511 /* Overwrite 'code' because this would place the intrinsic assignment
11512 before the temporary for the lhs is created. */
11513 gfc_free_expr ((*code)->expr1);
11514 gfc_free_expr ((*code)->expr2);
11515 **code = *head;
11516 if (head != tail)
11517 free (head);
11518 *code = tail;
11519
11520 component_assignment_level--;
11521 }
11522
11523
11524 /* F2008: Pointer function assignments are of the form:
11525 ptr_fcn (args) = expr
11526 This function breaks these assignments into two statements:
11527 temporary_pointer => ptr_fcn(args)
11528 temporary_pointer = expr */
11529
11530 static bool
11531 resolve_ptr_fcn_assign (gfc_code **code, gfc_namespace *ns)
11532 {
11533 gfc_expr *tmp_ptr_expr;
11534 gfc_code *this_code;
11535 gfc_component *comp;
11536 gfc_symbol *s;
11537
11538 if ((*code)->expr1->expr_type != EXPR_FUNCTION)
11539 return false;
11540
11541 /* Even if standard does not support this feature, continue to build
11542 the two statements to avoid upsetting frontend_passes.c. */
11543 gfc_notify_std (GFC_STD_F2008, "Pointer procedure assignment at "
11544 "%L", &(*code)->loc);
11545
11546 comp = gfc_get_proc_ptr_comp ((*code)->expr1);
11547
11548 if (comp)
11549 s = comp->ts.interface;
11550 else
11551 s = (*code)->expr1->symtree->n.sym;
11552
11553 if (s == NULL || !s->result->attr.pointer)
11554 {
11555 gfc_error ("The function result on the lhs of the assignment at "
11556 "%L must have the pointer attribute.",
11557 &(*code)->expr1->where);
11558 (*code)->op = EXEC_NOP;
11559 return false;
11560 }
11561
11562 tmp_ptr_expr = get_temp_from_expr ((*code)->expr2, ns);
11563
11564 /* get_temp_from_expression is set up for ordinary assignments. To that
11565 end, where array bounds are not known, arrays are made allocatable.
11566 Change the temporary to a pointer here. */
11567 tmp_ptr_expr->symtree->n.sym->attr.pointer = 1;
11568 tmp_ptr_expr->symtree->n.sym->attr.allocatable = 0;
11569 tmp_ptr_expr->where = (*code)->loc;
11570
11571 this_code = build_assignment (EXEC_ASSIGN,
11572 tmp_ptr_expr, (*code)->expr2,
11573 NULL, NULL, (*code)->loc);
11574 this_code->next = (*code)->next;
11575 (*code)->next = this_code;
11576 (*code)->op = EXEC_POINTER_ASSIGN;
11577 (*code)->expr2 = (*code)->expr1;
11578 (*code)->expr1 = tmp_ptr_expr;
11579
11580 return true;
11581 }
11582
11583
11584 /* Deferred character length assignments from an operator expression
11585 require a temporary because the character length of the lhs can
11586 change in the course of the assignment. */
11587
11588 static bool
11589 deferred_op_assign (gfc_code **code, gfc_namespace *ns)
11590 {
11591 gfc_expr *tmp_expr;
11592 gfc_code *this_code;
11593
11594 if (!((*code)->expr1->ts.type == BT_CHARACTER
11595 && (*code)->expr1->ts.deferred && (*code)->expr1->rank
11596 && (*code)->expr2->expr_type == EXPR_OP))
11597 return false;
11598
11599 if (!gfc_check_dependency ((*code)->expr1, (*code)->expr2, 1))
11600 return false;
11601
11602 if (gfc_expr_attr ((*code)->expr1).pointer)
11603 return false;
11604
11605 tmp_expr = get_temp_from_expr ((*code)->expr1, ns);
11606 tmp_expr->where = (*code)->loc;
11607
11608 /* A new charlen is required to ensure that the variable string
11609 length is different to that of the original lhs. */
11610 tmp_expr->ts.u.cl = gfc_get_charlen();
11611 tmp_expr->symtree->n.sym->ts.u.cl = tmp_expr->ts.u.cl;
11612 tmp_expr->ts.u.cl->next = (*code)->expr2->ts.u.cl->next;
11613 (*code)->expr2->ts.u.cl->next = tmp_expr->ts.u.cl;
11614
11615 tmp_expr->symtree->n.sym->ts.deferred = 1;
11616
11617 this_code = build_assignment (EXEC_ASSIGN,
11618 (*code)->expr1,
11619 gfc_copy_expr (tmp_expr),
11620 NULL, NULL, (*code)->loc);
11621
11622 (*code)->expr1 = tmp_expr;
11623
11624 this_code->next = (*code)->next;
11625 (*code)->next = this_code;
11626
11627 return true;
11628 }
11629
11630
11631 /* Given a block of code, recursively resolve everything pointed to by this
11632 code block. */
11633
11634 void
11635 gfc_resolve_code (gfc_code *code, gfc_namespace *ns)
11636 {
11637 int omp_workshare_save;
11638 int forall_save, do_concurrent_save;
11639 code_stack frame;
11640 bool t;
11641
11642 frame.prev = cs_base;
11643 frame.head = code;
11644 cs_base = &frame;
11645
11646 find_reachable_labels (code);
11647
11648 for (; code; code = code->next)
11649 {
11650 frame.current = code;
11651 forall_save = forall_flag;
11652 do_concurrent_save = gfc_do_concurrent_flag;
11653
11654 if (code->op == EXEC_FORALL)
11655 {
11656 forall_flag = 1;
11657 gfc_resolve_forall (code, ns, forall_save);
11658 forall_flag = 2;
11659 }
11660 else if (code->block)
11661 {
11662 omp_workshare_save = -1;
11663 switch (code->op)
11664 {
11665 case EXEC_OACC_PARALLEL_LOOP:
11666 case EXEC_OACC_PARALLEL:
11667 case EXEC_OACC_KERNELS_LOOP:
11668 case EXEC_OACC_KERNELS:
11669 case EXEC_OACC_SERIAL_LOOP:
11670 case EXEC_OACC_SERIAL:
11671 case EXEC_OACC_DATA:
11672 case EXEC_OACC_HOST_DATA:
11673 case EXEC_OACC_LOOP:
11674 gfc_resolve_oacc_blocks (code, ns);
11675 break;
11676 case EXEC_OMP_PARALLEL_WORKSHARE:
11677 omp_workshare_save = omp_workshare_flag;
11678 omp_workshare_flag = 1;
11679 gfc_resolve_omp_parallel_blocks (code, ns);
11680 break;
11681 case EXEC_OMP_PARALLEL:
11682 case EXEC_OMP_PARALLEL_DO:
11683 case EXEC_OMP_PARALLEL_DO_SIMD:
11684 case EXEC_OMP_PARALLEL_SECTIONS:
11685 case EXEC_OMP_TARGET_PARALLEL:
11686 case EXEC_OMP_TARGET_PARALLEL_DO:
11687 case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
11688 case EXEC_OMP_TARGET_TEAMS:
11689 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
11690 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
11691 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
11692 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
11693 case EXEC_OMP_TASK:
11694 case EXEC_OMP_TASKLOOP:
11695 case EXEC_OMP_TASKLOOP_SIMD:
11696 case EXEC_OMP_TEAMS:
11697 case EXEC_OMP_TEAMS_DISTRIBUTE:
11698 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
11699 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
11700 case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
11701 omp_workshare_save = omp_workshare_flag;
11702 omp_workshare_flag = 0;
11703 gfc_resolve_omp_parallel_blocks (code, ns);
11704 break;
11705 case EXEC_OMP_DISTRIBUTE:
11706 case EXEC_OMP_DISTRIBUTE_SIMD:
11707 case EXEC_OMP_DO:
11708 case EXEC_OMP_DO_SIMD:
11709 case EXEC_OMP_SIMD:
11710 case EXEC_OMP_TARGET_SIMD:
11711 gfc_resolve_omp_do_blocks (code, ns);
11712 break;
11713 case EXEC_SELECT_TYPE:
11714 /* Blocks are handled in resolve_select_type because we have
11715 to transform the SELECT TYPE into ASSOCIATE first. */
11716 break;
11717 case EXEC_DO_CONCURRENT:
11718 gfc_do_concurrent_flag = 1;
11719 gfc_resolve_blocks (code->block, ns);
11720 gfc_do_concurrent_flag = 2;
11721 break;
11722 case EXEC_OMP_WORKSHARE:
11723 omp_workshare_save = omp_workshare_flag;
11724 omp_workshare_flag = 1;
11725 /* FALL THROUGH */
11726 default:
11727 gfc_resolve_blocks (code->block, ns);
11728 break;
11729 }
11730
11731 if (omp_workshare_save != -1)
11732 omp_workshare_flag = omp_workshare_save;
11733 }
11734 start:
11735 t = true;
11736 if (code->op != EXEC_COMPCALL && code->op != EXEC_CALL_PPC)
11737 t = gfc_resolve_expr (code->expr1);
11738 forall_flag = forall_save;
11739 gfc_do_concurrent_flag = do_concurrent_save;
11740
11741 if (!gfc_resolve_expr (code->expr2))
11742 t = false;
11743
11744 if (code->op == EXEC_ALLOCATE
11745 && !gfc_resolve_expr (code->expr3))
11746 t = false;
11747
11748 switch (code->op)
11749 {
11750 case EXEC_NOP:
11751 case EXEC_END_BLOCK:
11752 case EXEC_END_NESTED_BLOCK:
11753 case EXEC_CYCLE:
11754 case EXEC_PAUSE:
11755 case EXEC_STOP:
11756 case EXEC_ERROR_STOP:
11757 case EXEC_EXIT:
11758 case EXEC_CONTINUE:
11759 case EXEC_DT_END:
11760 case EXEC_ASSIGN_CALL:
11761 break;
11762
11763 case EXEC_CRITICAL:
11764 resolve_critical (code);
11765 break;
11766
11767 case EXEC_SYNC_ALL:
11768 case EXEC_SYNC_IMAGES:
11769 case EXEC_SYNC_MEMORY:
11770 resolve_sync (code);
11771 break;
11772
11773 case EXEC_LOCK:
11774 case EXEC_UNLOCK:
11775 case EXEC_EVENT_POST:
11776 case EXEC_EVENT_WAIT:
11777 resolve_lock_unlock_event (code);
11778 break;
11779
11780 case EXEC_FAIL_IMAGE:
11781 case EXEC_FORM_TEAM:
11782 case EXEC_CHANGE_TEAM:
11783 case EXEC_END_TEAM:
11784 case EXEC_SYNC_TEAM:
11785 break;
11786
11787 case EXEC_ENTRY:
11788 /* Keep track of which entry we are up to. */
11789 current_entry_id = code->ext.entry->id;
11790 break;
11791
11792 case EXEC_WHERE:
11793 resolve_where (code, NULL);
11794 break;
11795
11796 case EXEC_GOTO:
11797 if (code->expr1 != NULL)
11798 {
11799 if (code->expr1->ts.type != BT_INTEGER)
11800 gfc_error ("ASSIGNED GOTO statement at %L requires an "
11801 "INTEGER variable", &code->expr1->where);
11802 else if (code->expr1->symtree->n.sym->attr.assign != 1)
11803 gfc_error ("Variable %qs has not been assigned a target "
11804 "label at %L", code->expr1->symtree->n.sym->name,
11805 &code->expr1->where);
11806 }
11807 else
11808 resolve_branch (code->label1, code);
11809 break;
11810
11811 case EXEC_RETURN:
11812 if (code->expr1 != NULL
11813 && (code->expr1->ts.type != BT_INTEGER || code->expr1->rank))
11814 gfc_error ("Alternate RETURN statement at %L requires a SCALAR-"
11815 "INTEGER return specifier", &code->expr1->where);
11816 break;
11817
11818 case EXEC_INIT_ASSIGN:
11819 case EXEC_END_PROCEDURE:
11820 break;
11821
11822 case EXEC_ASSIGN:
11823 if (!t)
11824 break;
11825
11826 /* Remove a GFC_ISYM_CAF_GET inserted for a coindexed variable on
11827 the LHS. */
11828 if (code->expr1->expr_type == EXPR_FUNCTION
11829 && code->expr1->value.function.isym
11830 && code->expr1->value.function.isym->id == GFC_ISYM_CAF_GET)
11831 remove_caf_get_intrinsic (code->expr1);
11832
11833 /* If this is a pointer function in an lvalue variable context,
11834 the new code will have to be resolved afresh. This is also the
11835 case with an error, where the code is transformed into NOP to
11836 prevent ICEs downstream. */
11837 if (resolve_ptr_fcn_assign (&code, ns)
11838 || code->op == EXEC_NOP)
11839 goto start;
11840
11841 if (!gfc_check_vardef_context (code->expr1, false, false, false,
11842 _("assignment")))
11843 break;
11844
11845 if (resolve_ordinary_assign (code, ns))
11846 {
11847 if (code->op == EXEC_COMPCALL)
11848 goto compcall;
11849 else
11850 goto call;
11851 }
11852
11853 /* Check for dependencies in deferred character length array
11854 assignments and generate a temporary, if necessary. */
11855 if (code->op == EXEC_ASSIGN && deferred_op_assign (&code, ns))
11856 break;
11857
11858 /* F03 7.4.1.3 for non-allocatable, non-pointer components. */
11859 if (code->op != EXEC_CALL && code->expr1->ts.type == BT_DERIVED
11860 && code->expr1->ts.u.derived
11861 && code->expr1->ts.u.derived->attr.defined_assign_comp)
11862 generate_component_assignments (&code, ns);
11863
11864 break;
11865
11866 case EXEC_LABEL_ASSIGN:
11867 if (code->label1->defined == ST_LABEL_UNKNOWN)
11868 gfc_error ("Label %d referenced at %L is never defined",
11869 code->label1->value, &code->label1->where);
11870 if (t
11871 && (code->expr1->expr_type != EXPR_VARIABLE
11872 || code->expr1->symtree->n.sym->ts.type != BT_INTEGER
11873 || code->expr1->symtree->n.sym->ts.kind
11874 != gfc_default_integer_kind
11875 || code->expr1->symtree->n.sym->as != NULL))
11876 gfc_error ("ASSIGN statement at %L requires a scalar "
11877 "default INTEGER variable", &code->expr1->where);
11878 break;
11879
11880 case EXEC_POINTER_ASSIGN:
11881 {
11882 gfc_expr* e;
11883
11884 if (!t)
11885 break;
11886
11887 /* This is both a variable definition and pointer assignment
11888 context, so check both of them. For rank remapping, a final
11889 array ref may be present on the LHS and fool gfc_expr_attr
11890 used in gfc_check_vardef_context. Remove it. */
11891 e = remove_last_array_ref (code->expr1);
11892 t = gfc_check_vardef_context (e, true, false, false,
11893 _("pointer assignment"));
11894 if (t)
11895 t = gfc_check_vardef_context (e, false, false, false,
11896 _("pointer assignment"));
11897 gfc_free_expr (e);
11898
11899 t = gfc_check_pointer_assign (code->expr1, code->expr2, !t) && t;
11900
11901 if (!t)
11902 break;
11903
11904 /* Assigning a class object always is a regular assign. */
11905 if (code->expr2->ts.type == BT_CLASS
11906 && code->expr1->ts.type == BT_CLASS
11907 && !CLASS_DATA (code->expr2)->attr.dimension
11908 && !(gfc_expr_attr (code->expr1).proc_pointer
11909 && code->expr2->expr_type == EXPR_VARIABLE
11910 && code->expr2->symtree->n.sym->attr.flavor
11911 == FL_PROCEDURE))
11912 code->op = EXEC_ASSIGN;
11913 break;
11914 }
11915
11916 case EXEC_ARITHMETIC_IF:
11917 {
11918 gfc_expr *e = code->expr1;
11919
11920 gfc_resolve_expr (e);
11921 if (e->expr_type == EXPR_NULL)
11922 gfc_error ("Invalid NULL at %L", &e->where);
11923
11924 if (t && (e->rank > 0
11925 || !(e->ts.type == BT_REAL || e->ts.type == BT_INTEGER)))
11926 gfc_error ("Arithmetic IF statement at %L requires a scalar "
11927 "REAL or INTEGER expression", &e->where);
11928
11929 resolve_branch (code->label1, code);
11930 resolve_branch (code->label2, code);
11931 resolve_branch (code->label3, code);
11932 }
11933 break;
11934
11935 case EXEC_IF:
11936 if (t && code->expr1 != NULL
11937 && (code->expr1->ts.type != BT_LOGICAL
11938 || code->expr1->rank != 0))
11939 gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
11940 &code->expr1->where);
11941 break;
11942
11943 case EXEC_CALL:
11944 call:
11945 resolve_call (code);
11946 break;
11947
11948 case EXEC_COMPCALL:
11949 compcall:
11950 resolve_typebound_subroutine (code);
11951 break;
11952
11953 case EXEC_CALL_PPC:
11954 resolve_ppc_call (code);
11955 break;
11956
11957 case EXEC_SELECT:
11958 /* Select is complicated. Also, a SELECT construct could be
11959 a transformed computed GOTO. */
11960 resolve_select (code, false);
11961 break;
11962
11963 case EXEC_SELECT_TYPE:
11964 resolve_select_type (code, ns);
11965 break;
11966
11967 case EXEC_SELECT_RANK:
11968 resolve_select_rank (code, ns);
11969 break;
11970
11971 case EXEC_BLOCK:
11972 resolve_block_construct (code);
11973 break;
11974
11975 case EXEC_DO:
11976 if (code->ext.iterator != NULL)
11977 {
11978 gfc_iterator *iter = code->ext.iterator;
11979 if (gfc_resolve_iterator (iter, true, false))
11980 gfc_resolve_do_iterator (code, iter->var->symtree->n.sym,
11981 true);
11982 }
11983 break;
11984
11985 case EXEC_DO_WHILE:
11986 if (code->expr1 == NULL)
11987 gfc_internal_error ("gfc_resolve_code(): No expression on "
11988 "DO WHILE");
11989 if (t
11990 && (code->expr1->rank != 0
11991 || code->expr1->ts.type != BT_LOGICAL))
11992 gfc_error ("Exit condition of DO WHILE loop at %L must be "
11993 "a scalar LOGICAL expression", &code->expr1->where);
11994 break;
11995
11996 case EXEC_ALLOCATE:
11997 if (t)
11998 resolve_allocate_deallocate (code, "ALLOCATE");
11999
12000 break;
12001
12002 case EXEC_DEALLOCATE:
12003 if (t)
12004 resolve_allocate_deallocate (code, "DEALLOCATE");
12005
12006 break;
12007
12008 case EXEC_OPEN:
12009 if (!gfc_resolve_open (code->ext.open, &code->loc))
12010 break;
12011
12012 resolve_branch (code->ext.open->err, code);
12013 break;
12014
12015 case EXEC_CLOSE:
12016 if (!gfc_resolve_close (code->ext.close, &code->loc))
12017 break;
12018
12019 resolve_branch (code->ext.close->err, code);
12020 break;
12021
12022 case EXEC_BACKSPACE:
12023 case EXEC_ENDFILE:
12024 case EXEC_REWIND:
12025 case EXEC_FLUSH:
12026 if (!gfc_resolve_filepos (code->ext.filepos, &code->loc))
12027 break;
12028
12029 resolve_branch (code->ext.filepos->err, code);
12030 break;
12031
12032 case EXEC_INQUIRE:
12033 if (!gfc_resolve_inquire (code->ext.inquire))
12034 break;
12035
12036 resolve_branch (code->ext.inquire->err, code);
12037 break;
12038
12039 case EXEC_IOLENGTH:
12040 gcc_assert (code->ext.inquire != NULL);
12041 if (!gfc_resolve_inquire (code->ext.inquire))
12042 break;
12043
12044 resolve_branch (code->ext.inquire->err, code);
12045 break;
12046
12047 case EXEC_WAIT:
12048 if (!gfc_resolve_wait (code->ext.wait))
12049 break;
12050
12051 resolve_branch (code->ext.wait->err, code);
12052 resolve_branch (code->ext.wait->end, code);
12053 resolve_branch (code->ext.wait->eor, code);
12054 break;
12055
12056 case EXEC_READ:
12057 case EXEC_WRITE:
12058 if (!gfc_resolve_dt (code, code->ext.dt, &code->loc))
12059 break;
12060
12061 resolve_branch (code->ext.dt->err, code);
12062 resolve_branch (code->ext.dt->end, code);
12063 resolve_branch (code->ext.dt->eor, code);
12064 break;
12065
12066 case EXEC_TRANSFER:
12067 resolve_transfer (code);
12068 break;
12069
12070 case EXEC_DO_CONCURRENT:
12071 case EXEC_FORALL:
12072 resolve_forall_iterators (code->ext.forall_iterator);
12073
12074 if (code->expr1 != NULL
12075 && (code->expr1->ts.type != BT_LOGICAL || code->expr1->rank))
12076 gfc_error ("FORALL mask clause at %L requires a scalar LOGICAL "
12077 "expression", &code->expr1->where);
12078 break;
12079
12080 case EXEC_OACC_PARALLEL_LOOP:
12081 case EXEC_OACC_PARALLEL:
12082 case EXEC_OACC_KERNELS_LOOP:
12083 case EXEC_OACC_KERNELS:
12084 case EXEC_OACC_SERIAL_LOOP:
12085 case EXEC_OACC_SERIAL:
12086 case EXEC_OACC_DATA:
12087 case EXEC_OACC_HOST_DATA:
12088 case EXEC_OACC_LOOP:
12089 case EXEC_OACC_UPDATE:
12090 case EXEC_OACC_WAIT:
12091 case EXEC_OACC_CACHE:
12092 case EXEC_OACC_ENTER_DATA:
12093 case EXEC_OACC_EXIT_DATA:
12094 case EXEC_OACC_ATOMIC:
12095 case EXEC_OACC_DECLARE:
12096 gfc_resolve_oacc_directive (code, ns);
12097 break;
12098
12099 case EXEC_OMP_ATOMIC:
12100 case EXEC_OMP_BARRIER:
12101 case EXEC_OMP_CANCEL:
12102 case EXEC_OMP_CANCELLATION_POINT:
12103 case EXEC_OMP_CRITICAL:
12104 case EXEC_OMP_FLUSH:
12105 case EXEC_OMP_DISTRIBUTE:
12106 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
12107 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
12108 case EXEC_OMP_DISTRIBUTE_SIMD:
12109 case EXEC_OMP_DO:
12110 case EXEC_OMP_DO_SIMD:
12111 case EXEC_OMP_MASTER:
12112 case EXEC_OMP_ORDERED:
12113 case EXEC_OMP_SECTIONS:
12114 case EXEC_OMP_SIMD:
12115 case EXEC_OMP_SINGLE:
12116 case EXEC_OMP_TARGET:
12117 case EXEC_OMP_TARGET_DATA:
12118 case EXEC_OMP_TARGET_ENTER_DATA:
12119 case EXEC_OMP_TARGET_EXIT_DATA:
12120 case EXEC_OMP_TARGET_PARALLEL:
12121 case EXEC_OMP_TARGET_PARALLEL_DO:
12122 case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
12123 case EXEC_OMP_TARGET_SIMD:
12124 case EXEC_OMP_TARGET_TEAMS:
12125 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
12126 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
12127 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
12128 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
12129 case EXEC_OMP_TARGET_UPDATE:
12130 case EXEC_OMP_TASK:
12131 case EXEC_OMP_TASKGROUP:
12132 case EXEC_OMP_TASKLOOP:
12133 case EXEC_OMP_TASKLOOP_SIMD:
12134 case EXEC_OMP_TASKWAIT:
12135 case EXEC_OMP_TASKYIELD:
12136 case EXEC_OMP_TEAMS:
12137 case EXEC_OMP_TEAMS_DISTRIBUTE:
12138 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
12139 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
12140 case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
12141 case EXEC_OMP_WORKSHARE:
12142 gfc_resolve_omp_directive (code, ns);
12143 break;
12144
12145 case EXEC_OMP_PARALLEL:
12146 case EXEC_OMP_PARALLEL_DO:
12147 case EXEC_OMP_PARALLEL_DO_SIMD:
12148 case EXEC_OMP_PARALLEL_SECTIONS:
12149 case EXEC_OMP_PARALLEL_WORKSHARE:
12150 omp_workshare_save = omp_workshare_flag;
12151 omp_workshare_flag = 0;
12152 gfc_resolve_omp_directive (code, ns);
12153 omp_workshare_flag = omp_workshare_save;
12154 break;
12155
12156 default:
12157 gfc_internal_error ("gfc_resolve_code(): Bad statement code");
12158 }
12159 }
12160
12161 cs_base = frame.prev;
12162 }
12163
12164
12165 /* Resolve initial values and make sure they are compatible with
12166 the variable. */
12167
12168 static void
12169 resolve_values (gfc_symbol *sym)
12170 {
12171 bool t;
12172
12173 if (sym->value == NULL)
12174 return;
12175
12176 if (sym->value->expr_type == EXPR_STRUCTURE)
12177 t= resolve_structure_cons (sym->value, 1);
12178 else
12179 t = gfc_resolve_expr (sym->value);
12180
12181 if (!t)
12182 return;
12183
12184 gfc_check_assign_symbol (sym, NULL, sym->value);
12185 }
12186
12187
12188 /* Verify any BIND(C) derived types in the namespace so we can report errors
12189 for them once, rather than for each variable declared of that type. */
12190
12191 static void
12192 resolve_bind_c_derived_types (gfc_symbol *derived_sym)
12193 {
12194 if (derived_sym != NULL && derived_sym->attr.flavor == FL_DERIVED
12195 && derived_sym->attr.is_bind_c == 1)
12196 verify_bind_c_derived_type (derived_sym);
12197
12198 return;
12199 }
12200
12201
12202 /* Check the interfaces of DTIO procedures associated with derived
12203 type 'sym'. These procedures can either have typebound bindings or
12204 can appear in DTIO generic interfaces. */
12205
12206 static void
12207 gfc_verify_DTIO_procedures (gfc_symbol *sym)
12208 {
12209 if (!sym || sym->attr.flavor != FL_DERIVED)
12210 return;
12211
12212 gfc_check_dtio_interfaces (sym);
12213
12214 return;
12215 }
12216
12217 /* Verify that any binding labels used in a given namespace do not collide
12218 with the names or binding labels of any global symbols. Multiple INTERFACE
12219 for the same procedure are permitted. */
12220
12221 static void
12222 gfc_verify_binding_labels (gfc_symbol *sym)
12223 {
12224 gfc_gsymbol *gsym;
12225 const char *module;
12226
12227 if (!sym || !sym->attr.is_bind_c || sym->attr.is_iso_c
12228 || sym->attr.flavor == FL_DERIVED || !sym->binding_label)
12229 return;
12230
12231 gsym = gfc_find_case_gsymbol (gfc_gsym_root, sym->binding_label);
12232
12233 if (sym->module)
12234 module = sym->module;
12235 else if (sym->ns && sym->ns->proc_name
12236 && sym->ns->proc_name->attr.flavor == FL_MODULE)
12237 module = sym->ns->proc_name->name;
12238 else if (sym->ns && sym->ns->parent
12239 && sym->ns && sym->ns->parent->proc_name
12240 && sym->ns->parent->proc_name->attr.flavor == FL_MODULE)
12241 module = sym->ns->parent->proc_name->name;
12242 else
12243 module = NULL;
12244
12245 if (!gsym
12246 || (!gsym->defined
12247 && (gsym->type == GSYM_FUNCTION || gsym->type == GSYM_SUBROUTINE)))
12248 {
12249 if (!gsym)
12250 gsym = gfc_get_gsymbol (sym->binding_label, true);
12251 gsym->where = sym->declared_at;
12252 gsym->sym_name = sym->name;
12253 gsym->binding_label = sym->binding_label;
12254 gsym->ns = sym->ns;
12255 gsym->mod_name = module;
12256 if (sym->attr.function)
12257 gsym->type = GSYM_FUNCTION;
12258 else if (sym->attr.subroutine)
12259 gsym->type = GSYM_SUBROUTINE;
12260 /* Mark as variable/procedure as defined, unless its an INTERFACE. */
12261 gsym->defined = sym->attr.if_source != IFSRC_IFBODY;
12262 return;
12263 }
12264
12265 if (sym->attr.flavor == FL_VARIABLE && gsym->type != GSYM_UNKNOWN)
12266 {
12267 gfc_error ("Variable %qs with binding label %qs at %L uses the same global "
12268 "identifier as entity at %L", sym->name,
12269 sym->binding_label, &sym->declared_at, &gsym->where);
12270 /* Clear the binding label to prevent checking multiple times. */
12271 sym->binding_label = NULL;
12272 return;
12273 }
12274
12275 if (sym->attr.flavor == FL_VARIABLE && module
12276 && (strcmp (module, gsym->mod_name) != 0
12277 || strcmp (sym->name, gsym->sym_name) != 0))
12278 {
12279 /* This can only happen if the variable is defined in a module - if it
12280 isn't the same module, reject it. */
12281 gfc_error ("Variable %qs from module %qs with binding label %qs at %L "
12282 "uses the same global identifier as entity at %L from module %qs",
12283 sym->name, module, sym->binding_label,
12284 &sym->declared_at, &gsym->where, gsym->mod_name);
12285 sym->binding_label = NULL;
12286 return;
12287 }
12288
12289 if ((sym->attr.function || sym->attr.subroutine)
12290 && ((gsym->type != GSYM_SUBROUTINE && gsym->type != GSYM_FUNCTION)
12291 || (gsym->defined && sym->attr.if_source != IFSRC_IFBODY))
12292 && (sym != gsym->ns->proc_name && sym->attr.entry == 0)
12293 && (module != gsym->mod_name
12294 || strcmp (gsym->sym_name, sym->name) != 0
12295 || (module && strcmp (module, gsym->mod_name) != 0)))
12296 {
12297 /* Print an error if the procedure is defined multiple times; we have to
12298 exclude references to the same procedure via module association or
12299 multiple checks for the same procedure. */
12300 gfc_error ("Procedure %qs with binding label %qs at %L uses the same "
12301 "global identifier as entity at %L", sym->name,
12302 sym->binding_label, &sym->declared_at, &gsym->where);
12303 sym->binding_label = NULL;
12304 }
12305 }
12306
12307
12308 /* Resolve an index expression. */
12309
12310 static bool
12311 resolve_index_expr (gfc_expr *e)
12312 {
12313 if (!gfc_resolve_expr (e))
12314 return false;
12315
12316 if (!gfc_simplify_expr (e, 0))
12317 return false;
12318
12319 if (!gfc_specification_expr (e))
12320 return false;
12321
12322 return true;
12323 }
12324
12325
12326 /* Resolve a charlen structure. */
12327
12328 static bool
12329 resolve_charlen (gfc_charlen *cl)
12330 {
12331 int k;
12332 bool saved_specification_expr;
12333
12334 if (cl->resolved)
12335 return true;
12336
12337 cl->resolved = 1;
12338 saved_specification_expr = specification_expr;
12339 specification_expr = true;
12340
12341 if (cl->length_from_typespec)
12342 {
12343 if (!gfc_resolve_expr (cl->length))
12344 {
12345 specification_expr = saved_specification_expr;
12346 return false;
12347 }
12348
12349 if (!gfc_simplify_expr (cl->length, 0))
12350 {
12351 specification_expr = saved_specification_expr;
12352 return false;
12353 }
12354
12355 /* cl->length has been resolved. It should have an integer type. */
12356 if (cl->length->ts.type != BT_INTEGER)
12357 {
12358 gfc_error ("Scalar INTEGER expression expected at %L",
12359 &cl->length->where);
12360 return false;
12361 }
12362 }
12363 else
12364 {
12365 if (!resolve_index_expr (cl->length))
12366 {
12367 specification_expr = saved_specification_expr;
12368 return false;
12369 }
12370 }
12371
12372 /* F2008, 4.4.3.2: If the character length parameter value evaluates to
12373 a negative value, the length of character entities declared is zero. */
12374 if (cl->length && cl->length->expr_type == EXPR_CONSTANT
12375 && mpz_sgn (cl->length->value.integer) < 0)
12376 gfc_replace_expr (cl->length,
12377 gfc_get_int_expr (gfc_charlen_int_kind, NULL, 0));
12378
12379 /* Check that the character length is not too large. */
12380 k = gfc_validate_kind (BT_INTEGER, gfc_charlen_int_kind, false);
12381 if (cl->length && cl->length->expr_type == EXPR_CONSTANT
12382 && cl->length->ts.type == BT_INTEGER
12383 && mpz_cmp (cl->length->value.integer, gfc_integer_kinds[k].huge) > 0)
12384 {
12385 gfc_error ("String length at %L is too large", &cl->length->where);
12386 specification_expr = saved_specification_expr;
12387 return false;
12388 }
12389
12390 specification_expr = saved_specification_expr;
12391 return true;
12392 }
12393
12394
12395 /* Test for non-constant shape arrays. */
12396
12397 static bool
12398 is_non_constant_shape_array (gfc_symbol *sym)
12399 {
12400 gfc_expr *e;
12401 int i;
12402 bool not_constant;
12403
12404 not_constant = false;
12405 if (sym->as != NULL)
12406 {
12407 /* Unfortunately, !gfc_is_compile_time_shape hits a legal case that
12408 has not been simplified; parameter array references. Do the
12409 simplification now. */
12410 for (i = 0; i < sym->as->rank + sym->as->corank; i++)
12411 {
12412 if (i == GFC_MAX_DIMENSIONS)
12413 break;
12414
12415 e = sym->as->lower[i];
12416 if (e && (!resolve_index_expr(e)
12417 || !gfc_is_constant_expr (e)))
12418 not_constant = true;
12419 e = sym->as->upper[i];
12420 if (e && (!resolve_index_expr(e)
12421 || !gfc_is_constant_expr (e)))
12422 not_constant = true;
12423 }
12424 }
12425 return not_constant;
12426 }
12427
12428 /* Given a symbol and an initialization expression, add code to initialize
12429 the symbol to the function entry. */
12430 static void
12431 build_init_assign (gfc_symbol *sym, gfc_expr *init)
12432 {
12433 gfc_expr *lval;
12434 gfc_code *init_st;
12435 gfc_namespace *ns = sym->ns;
12436
12437 /* Search for the function namespace if this is a contained
12438 function without an explicit result. */
12439 if (sym->attr.function && sym == sym->result
12440 && sym->name != sym->ns->proc_name->name)
12441 {
12442 ns = ns->contained;
12443 for (;ns; ns = ns->sibling)
12444 if (strcmp (ns->proc_name->name, sym->name) == 0)
12445 break;
12446 }
12447
12448 if (ns == NULL)
12449 {
12450 gfc_free_expr (init);
12451 return;
12452 }
12453
12454 /* Build an l-value expression for the result. */
12455 lval = gfc_lval_expr_from_sym (sym);
12456
12457 /* Add the code at scope entry. */
12458 init_st = gfc_get_code (EXEC_INIT_ASSIGN);
12459 init_st->next = ns->code;
12460 ns->code = init_st;
12461
12462 /* Assign the default initializer to the l-value. */
12463 init_st->loc = sym->declared_at;
12464 init_st->expr1 = lval;
12465 init_st->expr2 = init;
12466 }
12467
12468
12469 /* Whether or not we can generate a default initializer for a symbol. */
12470
12471 static bool
12472 can_generate_init (gfc_symbol *sym)
12473 {
12474 symbol_attribute *a;
12475 if (!sym)
12476 return false;
12477 a = &sym->attr;
12478
12479 /* These symbols should never have a default initialization. */
12480 return !(
12481 a->allocatable
12482 || a->external
12483 || a->pointer
12484 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
12485 && (CLASS_DATA (sym)->attr.class_pointer
12486 || CLASS_DATA (sym)->attr.proc_pointer))
12487 || a->in_equivalence
12488 || a->in_common
12489 || a->data
12490 || sym->module
12491 || a->cray_pointee
12492 || a->cray_pointer
12493 || sym->assoc
12494 || (!a->referenced && !a->result)
12495 || (a->dummy && a->intent != INTENT_OUT)
12496 || (a->function && sym != sym->result)
12497 );
12498 }
12499
12500
12501 /* Assign the default initializer to a derived type variable or result. */
12502
12503 static void
12504 apply_default_init (gfc_symbol *sym)
12505 {
12506 gfc_expr *init = NULL;
12507
12508 if (sym->attr.flavor != FL_VARIABLE && !sym->attr.function)
12509 return;
12510
12511 if (sym->ts.type == BT_DERIVED && sym->ts.u.derived)
12512 init = gfc_generate_initializer (&sym->ts, can_generate_init (sym));
12513
12514 if (init == NULL && sym->ts.type != BT_CLASS)
12515 return;
12516
12517 build_init_assign (sym, init);
12518 sym->attr.referenced = 1;
12519 }
12520
12521
12522 /* Build an initializer for a local. Returns null if the symbol should not have
12523 a default initialization. */
12524
12525 static gfc_expr *
12526 build_default_init_expr (gfc_symbol *sym)
12527 {
12528 /* These symbols should never have a default initialization. */
12529 if (sym->attr.allocatable
12530 || sym->attr.external
12531 || sym->attr.dummy
12532 || sym->attr.pointer
12533 || sym->attr.in_equivalence
12534 || sym->attr.in_common
12535 || sym->attr.data
12536 || sym->module
12537 || sym->attr.cray_pointee
12538 || sym->attr.cray_pointer
12539 || sym->assoc)
12540 return NULL;
12541
12542 /* Get the appropriate init expression. */
12543 return gfc_build_default_init_expr (&sym->ts, &sym->declared_at);
12544 }
12545
12546 /* Add an initialization expression to a local variable. */
12547 static void
12548 apply_default_init_local (gfc_symbol *sym)
12549 {
12550 gfc_expr *init = NULL;
12551
12552 /* The symbol should be a variable or a function return value. */
12553 if ((sym->attr.flavor != FL_VARIABLE && !sym->attr.function)
12554 || (sym->attr.function && sym->result != sym))
12555 return;
12556
12557 /* Try to build the initializer expression. If we can't initialize
12558 this symbol, then init will be NULL. */
12559 init = build_default_init_expr (sym);
12560 if (init == NULL)
12561 return;
12562
12563 /* For saved variables, we don't want to add an initializer at function
12564 entry, so we just add a static initializer. Note that automatic variables
12565 are stack allocated even with -fno-automatic; we have also to exclude
12566 result variable, which are also nonstatic. */
12567 if (!sym->attr.automatic
12568 && (sym->attr.save || sym->ns->save_all
12569 || (flag_max_stack_var_size == 0 && !sym->attr.result
12570 && (sym->ns->proc_name && !sym->ns->proc_name->attr.recursive)
12571 && (!sym->attr.dimension || !is_non_constant_shape_array (sym)))))
12572 {
12573 /* Don't clobber an existing initializer! */
12574 gcc_assert (sym->value == NULL);
12575 sym->value = init;
12576 return;
12577 }
12578
12579 build_init_assign (sym, init);
12580 }
12581
12582
12583 /* Resolution of common features of flavors variable and procedure. */
12584
12585 static bool
12586 resolve_fl_var_and_proc (gfc_symbol *sym, int mp_flag)
12587 {
12588 gfc_array_spec *as;
12589
12590 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
12591 as = CLASS_DATA (sym)->as;
12592 else
12593 as = sym->as;
12594
12595 /* Constraints on deferred shape variable. */
12596 if (as == NULL || as->type != AS_DEFERRED)
12597 {
12598 bool pointer, allocatable, dimension;
12599
12600 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
12601 {
12602 pointer = CLASS_DATA (sym)->attr.class_pointer;
12603 allocatable = CLASS_DATA (sym)->attr.allocatable;
12604 dimension = CLASS_DATA (sym)->attr.dimension;
12605 }
12606 else
12607 {
12608 pointer = sym->attr.pointer && !sym->attr.select_type_temporary;
12609 allocatable = sym->attr.allocatable;
12610 dimension = sym->attr.dimension;
12611 }
12612
12613 if (allocatable)
12614 {
12615 if (dimension && as->type != AS_ASSUMED_RANK)
12616 {
12617 gfc_error ("Allocatable array %qs at %L must have a deferred "
12618 "shape or assumed rank", sym->name, &sym->declared_at);
12619 return false;
12620 }
12621 else if (!gfc_notify_std (GFC_STD_F2003, "Scalar object "
12622 "%qs at %L may not be ALLOCATABLE",
12623 sym->name, &sym->declared_at))
12624 return false;
12625 }
12626
12627 if (pointer && dimension && as->type != AS_ASSUMED_RANK)
12628 {
12629 gfc_error ("Array pointer %qs at %L must have a deferred shape or "
12630 "assumed rank", sym->name, &sym->declared_at);
12631 sym->error = 1;
12632 return false;
12633 }
12634 }
12635 else
12636 {
12637 if (!mp_flag && !sym->attr.allocatable && !sym->attr.pointer
12638 && sym->ts.type != BT_CLASS && !sym->assoc)
12639 {
12640 gfc_error ("Array %qs at %L cannot have a deferred shape",
12641 sym->name, &sym->declared_at);
12642 return false;
12643 }
12644 }
12645
12646 /* Constraints on polymorphic variables. */
12647 if (sym->ts.type == BT_CLASS && !(sym->result && sym->result != sym))
12648 {
12649 /* F03:C502. */
12650 if (sym->attr.class_ok
12651 && !sym->attr.select_type_temporary
12652 && !UNLIMITED_POLY (sym)
12653 && !gfc_type_is_extensible (CLASS_DATA (sym)->ts.u.derived))
12654 {
12655 gfc_error ("Type %qs of CLASS variable %qs at %L is not extensible",
12656 CLASS_DATA (sym)->ts.u.derived->name, sym->name,
12657 &sym->declared_at);
12658 return false;
12659 }
12660
12661 /* F03:C509. */
12662 /* Assume that use associated symbols were checked in the module ns.
12663 Class-variables that are associate-names are also something special
12664 and excepted from the test. */
12665 if (!sym->attr.class_ok && !sym->attr.use_assoc && !sym->assoc)
12666 {
12667 gfc_error ("CLASS variable %qs at %L must be dummy, allocatable "
12668 "or pointer", sym->name, &sym->declared_at);
12669 return false;
12670 }
12671 }
12672
12673 return true;
12674 }
12675
12676
12677 /* Additional checks for symbols with flavor variable and derived
12678 type. To be called from resolve_fl_variable. */
12679
12680 static bool
12681 resolve_fl_variable_derived (gfc_symbol *sym, int no_init_flag)
12682 {
12683 gcc_assert (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS);
12684
12685 /* Check to see if a derived type is blocked from being host
12686 associated by the presence of another class I symbol in the same
12687 namespace. 14.6.1.3 of the standard and the discussion on
12688 comp.lang.fortran. */
12689 if (sym->ns != sym->ts.u.derived->ns
12690 && !sym->ts.u.derived->attr.use_assoc
12691 && sym->ns->proc_name->attr.if_source != IFSRC_IFBODY)
12692 {
12693 gfc_symbol *s;
12694 gfc_find_symbol (sym->ts.u.derived->name, sym->ns, 0, &s);
12695 if (s && s->attr.generic)
12696 s = gfc_find_dt_in_generic (s);
12697 if (s && !gfc_fl_struct (s->attr.flavor))
12698 {
12699 gfc_error ("The type %qs cannot be host associated at %L "
12700 "because it is blocked by an incompatible object "
12701 "of the same name declared at %L",
12702 sym->ts.u.derived->name, &sym->declared_at,
12703 &s->declared_at);
12704 return false;
12705 }
12706 }
12707
12708 /* 4th constraint in section 11.3: "If an object of a type for which
12709 component-initialization is specified (R429) appears in the
12710 specification-part of a module and does not have the ALLOCATABLE
12711 or POINTER attribute, the object shall have the SAVE attribute."
12712
12713 The check for initializers is performed with
12714 gfc_has_default_initializer because gfc_default_initializer generates
12715 a hidden default for allocatable components. */
12716 if (!(sym->value || no_init_flag) && sym->ns->proc_name
12717 && sym->ns->proc_name->attr.flavor == FL_MODULE
12718 && !(sym->ns->save_all && !sym->attr.automatic) && !sym->attr.save
12719 && !sym->attr.pointer && !sym->attr.allocatable
12720 && gfc_has_default_initializer (sym->ts.u.derived)
12721 && !gfc_notify_std (GFC_STD_F2008, "Implied SAVE for module variable "
12722 "%qs at %L, needed due to the default "
12723 "initialization", sym->name, &sym->declared_at))
12724 return false;
12725
12726 /* Assign default initializer. */
12727 if (!(sym->value || sym->attr.pointer || sym->attr.allocatable)
12728 && (!no_init_flag || sym->attr.intent == INTENT_OUT))
12729 sym->value = gfc_generate_initializer (&sym->ts, can_generate_init (sym));
12730
12731 return true;
12732 }
12733
12734
12735 /* F2008, C402 (R401): A colon shall not be used as a type-param-value
12736 except in the declaration of an entity or component that has the POINTER
12737 or ALLOCATABLE attribute. */
12738
12739 static bool
12740 deferred_requirements (gfc_symbol *sym)
12741 {
12742 if (sym->ts.deferred
12743 && !(sym->attr.pointer
12744 || sym->attr.allocatable
12745 || sym->attr.associate_var
12746 || sym->attr.omp_udr_artificial_var))
12747 {
12748 /* If a function has a result variable, only check the variable. */
12749 if (sym->result && sym->name != sym->result->name)
12750 return true;
12751
12752 gfc_error ("Entity %qs at %L has a deferred type parameter and "
12753 "requires either the POINTER or ALLOCATABLE attribute",
12754 sym->name, &sym->declared_at);
12755 return false;
12756 }
12757 return true;
12758 }
12759
12760
12761 /* Resolve symbols with flavor variable. */
12762
12763 static bool
12764 resolve_fl_variable (gfc_symbol *sym, int mp_flag)
12765 {
12766 const char *auto_save_msg = "Automatic object %qs at %L cannot have the "
12767 "SAVE attribute";
12768
12769 if (!resolve_fl_var_and_proc (sym, mp_flag))
12770 return false;
12771
12772 /* Set this flag to check that variables are parameters of all entries.
12773 This check is effected by the call to gfc_resolve_expr through
12774 is_non_constant_shape_array. */
12775 bool saved_specification_expr = specification_expr;
12776 specification_expr = true;
12777
12778 if (sym->ns->proc_name
12779 && (sym->ns->proc_name->attr.flavor == FL_MODULE
12780 || sym->ns->proc_name->attr.is_main_program)
12781 && !sym->attr.use_assoc
12782 && !sym->attr.allocatable
12783 && !sym->attr.pointer
12784 && is_non_constant_shape_array (sym))
12785 {
12786 /* F08:C541. The shape of an array defined in a main program or module
12787 * needs to be constant. */
12788 gfc_error ("The module or main program array %qs at %L must "
12789 "have constant shape", sym->name, &sym->declared_at);
12790 specification_expr = saved_specification_expr;
12791 return false;
12792 }
12793
12794 /* Constraints on deferred type parameter. */
12795 if (!deferred_requirements (sym))
12796 return false;
12797
12798 if (sym->ts.type == BT_CHARACTER && !sym->attr.associate_var)
12799 {
12800 /* Make sure that character string variables with assumed length are
12801 dummy arguments. */
12802 gfc_expr *e = NULL;
12803
12804 if (sym->ts.u.cl)
12805 e = sym->ts.u.cl->length;
12806 else
12807 return false;
12808
12809 if (e == NULL && !sym->attr.dummy && !sym->attr.result
12810 && !sym->ts.deferred && !sym->attr.select_type_temporary
12811 && !sym->attr.omp_udr_artificial_var)
12812 {
12813 gfc_error ("Entity with assumed character length at %L must be a "
12814 "dummy argument or a PARAMETER", &sym->declared_at);
12815 specification_expr = saved_specification_expr;
12816 return false;
12817 }
12818
12819 if (e && sym->attr.save == SAVE_EXPLICIT && !gfc_is_constant_expr (e))
12820 {
12821 gfc_error (auto_save_msg, sym->name, &sym->declared_at);
12822 specification_expr = saved_specification_expr;
12823 return false;
12824 }
12825
12826 if (!gfc_is_constant_expr (e)
12827 && !(e->expr_type == EXPR_VARIABLE
12828 && e->symtree->n.sym->attr.flavor == FL_PARAMETER))
12829 {
12830 if (!sym->attr.use_assoc && sym->ns->proc_name
12831 && (sym->ns->proc_name->attr.flavor == FL_MODULE
12832 || sym->ns->proc_name->attr.is_main_program))
12833 {
12834 gfc_error ("%qs at %L must have constant character length "
12835 "in this context", sym->name, &sym->declared_at);
12836 specification_expr = saved_specification_expr;
12837 return false;
12838 }
12839 if (sym->attr.in_common)
12840 {
12841 gfc_error ("COMMON variable %qs at %L must have constant "
12842 "character length", sym->name, &sym->declared_at);
12843 specification_expr = saved_specification_expr;
12844 return false;
12845 }
12846 }
12847 }
12848
12849 if (sym->value == NULL && sym->attr.referenced)
12850 apply_default_init_local (sym); /* Try to apply a default initialization. */
12851
12852 /* Determine if the symbol may not have an initializer. */
12853 int no_init_flag = 0, automatic_flag = 0;
12854 if (sym->attr.allocatable || sym->attr.external || sym->attr.dummy
12855 || sym->attr.intrinsic || sym->attr.result)
12856 no_init_flag = 1;
12857 else if ((sym->attr.dimension || sym->attr.codimension) && !sym->attr.pointer
12858 && is_non_constant_shape_array (sym))
12859 {
12860 no_init_flag = automatic_flag = 1;
12861
12862 /* Also, they must not have the SAVE attribute.
12863 SAVE_IMPLICIT is checked below. */
12864 if (sym->as && sym->attr.codimension)
12865 {
12866 int corank = sym->as->corank;
12867 sym->as->corank = 0;
12868 no_init_flag = automatic_flag = is_non_constant_shape_array (sym);
12869 sym->as->corank = corank;
12870 }
12871 if (automatic_flag && sym->attr.save == SAVE_EXPLICIT)
12872 {
12873 gfc_error (auto_save_msg, sym->name, &sym->declared_at);
12874 specification_expr = saved_specification_expr;
12875 return false;
12876 }
12877 }
12878
12879 /* Ensure that any initializer is simplified. */
12880 if (sym->value)
12881 gfc_simplify_expr (sym->value, 1);
12882
12883 /* Reject illegal initializers. */
12884 if (!sym->mark && sym->value)
12885 {
12886 if (sym->attr.allocatable || (sym->ts.type == BT_CLASS
12887 && CLASS_DATA (sym)->attr.allocatable))
12888 gfc_error ("Allocatable %qs at %L cannot have an initializer",
12889 sym->name, &sym->declared_at);
12890 else if (sym->attr.external)
12891 gfc_error ("External %qs at %L cannot have an initializer",
12892 sym->name, &sym->declared_at);
12893 else if (sym->attr.dummy
12894 && !(sym->ts.type == BT_DERIVED && sym->attr.intent == INTENT_OUT))
12895 gfc_error ("Dummy %qs at %L cannot have an initializer",
12896 sym->name, &sym->declared_at);
12897 else if (sym->attr.intrinsic)
12898 gfc_error ("Intrinsic %qs at %L cannot have an initializer",
12899 sym->name, &sym->declared_at);
12900 else if (sym->attr.result)
12901 gfc_error ("Function result %qs at %L cannot have an initializer",
12902 sym->name, &sym->declared_at);
12903 else if (automatic_flag)
12904 gfc_error ("Automatic array %qs at %L cannot have an initializer",
12905 sym->name, &sym->declared_at);
12906 else
12907 goto no_init_error;
12908 specification_expr = saved_specification_expr;
12909 return false;
12910 }
12911
12912 no_init_error:
12913 if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS)
12914 {
12915 bool res = resolve_fl_variable_derived (sym, no_init_flag);
12916 specification_expr = saved_specification_expr;
12917 return res;
12918 }
12919
12920 specification_expr = saved_specification_expr;
12921 return true;
12922 }
12923
12924
12925 /* Compare the dummy characteristics of a module procedure interface
12926 declaration with the corresponding declaration in a submodule. */
12927 static gfc_formal_arglist *new_formal;
12928 static char errmsg[200];
12929
12930 static void
12931 compare_fsyms (gfc_symbol *sym)
12932 {
12933 gfc_symbol *fsym;
12934
12935 if (sym == NULL || new_formal == NULL)
12936 return;
12937
12938 fsym = new_formal->sym;
12939
12940 if (sym == fsym)
12941 return;
12942
12943 if (strcmp (sym->name, fsym->name) == 0)
12944 {
12945 if (!gfc_check_dummy_characteristics (fsym, sym, true, errmsg, 200))
12946 gfc_error ("%s at %L", errmsg, &fsym->declared_at);
12947 }
12948 }
12949
12950
12951 /* Resolve a procedure. */
12952
12953 static bool
12954 resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
12955 {
12956 gfc_formal_arglist *arg;
12957
12958 if (sym->attr.function
12959 && !resolve_fl_var_and_proc (sym, mp_flag))
12960 return false;
12961
12962 /* Constraints on deferred type parameter. */
12963 if (!deferred_requirements (sym))
12964 return false;
12965
12966 if (sym->ts.type == BT_CHARACTER)
12967 {
12968 gfc_charlen *cl = sym->ts.u.cl;
12969
12970 if (cl && cl->length && gfc_is_constant_expr (cl->length)
12971 && !resolve_charlen (cl))
12972 return false;
12973
12974 if ((!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
12975 && sym->attr.proc == PROC_ST_FUNCTION)
12976 {
12977 gfc_error ("Character-valued statement function %qs at %L must "
12978 "have constant length", sym->name, &sym->declared_at);
12979 return false;
12980 }
12981 }
12982
12983 /* Ensure that derived type for are not of a private type. Internal
12984 module procedures are excluded by 2.2.3.3 - i.e., they are not
12985 externally accessible and can access all the objects accessible in
12986 the host. */
12987 if (!(sym->ns->parent && sym->ns->parent->proc_name
12988 && sym->ns->parent->proc_name->attr.flavor == FL_MODULE)
12989 && gfc_check_symbol_access (sym))
12990 {
12991 gfc_interface *iface;
12992
12993 for (arg = gfc_sym_get_dummy_args (sym); arg; arg = arg->next)
12994 {
12995 if (arg->sym
12996 && arg->sym->ts.type == BT_DERIVED
12997 && !arg->sym->ts.u.derived->attr.use_assoc
12998 && !gfc_check_symbol_access (arg->sym->ts.u.derived)
12999 && !gfc_notify_std (GFC_STD_F2003, "%qs is of a PRIVATE type "
13000 "and cannot be a dummy argument"
13001 " of %qs, which is PUBLIC at %L",
13002 arg->sym->name, sym->name,
13003 &sym->declared_at))
13004 {
13005 /* Stop this message from recurring. */
13006 arg->sym->ts.u.derived->attr.access = ACCESS_PUBLIC;
13007 return false;
13008 }
13009 }
13010
13011 /* PUBLIC interfaces may expose PRIVATE procedures that take types
13012 PRIVATE to the containing module. */
13013 for (iface = sym->generic; iface; iface = iface->next)
13014 {
13015 for (arg = gfc_sym_get_dummy_args (iface->sym); arg; arg = arg->next)
13016 {
13017 if (arg->sym
13018 && arg->sym->ts.type == BT_DERIVED
13019 && !arg->sym->ts.u.derived->attr.use_assoc
13020 && !gfc_check_symbol_access (arg->sym->ts.u.derived)
13021 && !gfc_notify_std (GFC_STD_F2003, "Procedure %qs in "
13022 "PUBLIC interface %qs at %L "
13023 "takes dummy arguments of %qs which "
13024 "is PRIVATE", iface->sym->name,
13025 sym->name, &iface->sym->declared_at,
13026 gfc_typename(&arg->sym->ts)))
13027 {
13028 /* Stop this message from recurring. */
13029 arg->sym->ts.u.derived->attr.access = ACCESS_PUBLIC;
13030 return false;
13031 }
13032 }
13033 }
13034 }
13035
13036 if (sym->attr.function && sym->value && sym->attr.proc != PROC_ST_FUNCTION
13037 && !sym->attr.proc_pointer)
13038 {
13039 gfc_error ("Function %qs at %L cannot have an initializer",
13040 sym->name, &sym->declared_at);
13041
13042 /* Make sure no second error is issued for this. */
13043 sym->value->error = 1;
13044 return false;
13045 }
13046
13047 /* An external symbol may not have an initializer because it is taken to be
13048 a procedure. Exception: Procedure Pointers. */
13049 if (sym->attr.external && sym->value && !sym->attr.proc_pointer)
13050 {
13051 gfc_error ("External object %qs at %L may not have an initializer",
13052 sym->name, &sym->declared_at);
13053 return false;
13054 }
13055
13056 /* An elemental function is required to return a scalar 12.7.1 */
13057 if (sym->attr.elemental && sym->attr.function
13058 && (sym->as || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as)))
13059 {
13060 gfc_error ("ELEMENTAL function %qs at %L must have a scalar "
13061 "result", sym->name, &sym->declared_at);
13062 /* Reset so that the error only occurs once. */
13063 sym->attr.elemental = 0;
13064 return false;
13065 }
13066
13067 if (sym->attr.proc == PROC_ST_FUNCTION
13068 && (sym->attr.allocatable || sym->attr.pointer))
13069 {
13070 gfc_error ("Statement function %qs at %L may not have pointer or "
13071 "allocatable attribute", sym->name, &sym->declared_at);
13072 return false;
13073 }
13074
13075 /* 5.1.1.5 of the Standard: A function name declared with an asterisk
13076 char-len-param shall not be array-valued, pointer-valued, recursive
13077 or pure. ....snip... A character value of * may only be used in the
13078 following ways: (i) Dummy arg of procedure - dummy associates with
13079 actual length; (ii) To declare a named constant; or (iii) External
13080 function - but length must be declared in calling scoping unit. */
13081 if (sym->attr.function
13082 && sym->ts.type == BT_CHARACTER && !sym->ts.deferred
13083 && sym->ts.u.cl && sym->ts.u.cl->length == NULL)
13084 {
13085 if ((sym->as && sym->as->rank) || (sym->attr.pointer)
13086 || (sym->attr.recursive) || (sym->attr.pure))
13087 {
13088 if (sym->as && sym->as->rank)
13089 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
13090 "array-valued", sym->name, &sym->declared_at);
13091
13092 if (sym->attr.pointer)
13093 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
13094 "pointer-valued", sym->name, &sym->declared_at);
13095
13096 if (sym->attr.pure)
13097 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
13098 "pure", sym->name, &sym->declared_at);
13099
13100 if (sym->attr.recursive)
13101 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
13102 "recursive", sym->name, &sym->declared_at);
13103
13104 return false;
13105 }
13106
13107 /* Appendix B.2 of the standard. Contained functions give an
13108 error anyway. Deferred character length is an F2003 feature.
13109 Don't warn on intrinsic conversion functions, which start
13110 with two underscores. */
13111 if (!sym->attr.contained && !sym->ts.deferred
13112 && (sym->name[0] != '_' || sym->name[1] != '_'))
13113 gfc_notify_std (GFC_STD_F95_OBS,
13114 "CHARACTER(*) function %qs at %L",
13115 sym->name, &sym->declared_at);
13116 }
13117
13118 /* F2008, C1218. */
13119 if (sym->attr.elemental)
13120 {
13121 if (sym->attr.proc_pointer)
13122 {
13123 gfc_error ("Procedure pointer %qs at %L shall not be elemental",
13124 sym->name, &sym->declared_at);
13125 return false;
13126 }
13127 if (sym->attr.dummy)
13128 {
13129 gfc_error ("Dummy procedure %qs at %L shall not be elemental",
13130 sym->name, &sym->declared_at);
13131 return false;
13132 }
13133 }
13134
13135 /* F2018, C15100: "The result of an elemental function shall be scalar,
13136 and shall not have the POINTER or ALLOCATABLE attribute." The scalar
13137 pointer is tested and caught elsewhere. */
13138 if (sym->attr.elemental && sym->result
13139 && (sym->result->attr.allocatable || sym->result->attr.pointer))
13140 {
13141 gfc_error ("Function result variable %qs at %L of elemental "
13142 "function %qs shall not have an ALLOCATABLE or POINTER "
13143 "attribute", sym->result->name,
13144 &sym->result->declared_at, sym->name);
13145 return false;
13146 }
13147
13148 if (sym->attr.is_bind_c && sym->attr.is_c_interop != 1)
13149 {
13150 gfc_formal_arglist *curr_arg;
13151 int has_non_interop_arg = 0;
13152
13153 if (!verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common,
13154 sym->common_block))
13155 {
13156 /* Clear these to prevent looking at them again if there was an
13157 error. */
13158 sym->attr.is_bind_c = 0;
13159 sym->attr.is_c_interop = 0;
13160 sym->ts.is_c_interop = 0;
13161 }
13162 else
13163 {
13164 /* So far, no errors have been found. */
13165 sym->attr.is_c_interop = 1;
13166 sym->ts.is_c_interop = 1;
13167 }
13168
13169 curr_arg = gfc_sym_get_dummy_args (sym);
13170 while (curr_arg != NULL)
13171 {
13172 /* Skip implicitly typed dummy args here. */
13173 if (curr_arg->sym && curr_arg->sym->attr.implicit_type == 0)
13174 if (!gfc_verify_c_interop_param (curr_arg->sym))
13175 /* If something is found to fail, record the fact so we
13176 can mark the symbol for the procedure as not being
13177 BIND(C) to try and prevent multiple errors being
13178 reported. */
13179 has_non_interop_arg = 1;
13180
13181 curr_arg = curr_arg->next;
13182 }
13183
13184 /* See if any of the arguments were not interoperable and if so, clear
13185 the procedure symbol to prevent duplicate error messages. */
13186 if (has_non_interop_arg != 0)
13187 {
13188 sym->attr.is_c_interop = 0;
13189 sym->ts.is_c_interop = 0;
13190 sym->attr.is_bind_c = 0;
13191 }
13192 }
13193
13194 if (!sym->attr.proc_pointer)
13195 {
13196 if (sym->attr.save == SAVE_EXPLICIT)
13197 {
13198 gfc_error ("PROCEDURE attribute conflicts with SAVE attribute "
13199 "in %qs at %L", sym->name, &sym->declared_at);
13200 return false;
13201 }
13202 if (sym->attr.intent)
13203 {
13204 gfc_error ("PROCEDURE attribute conflicts with INTENT attribute "
13205 "in %qs at %L", sym->name, &sym->declared_at);
13206 return false;
13207 }
13208 if (sym->attr.subroutine && sym->attr.result)
13209 {
13210 gfc_error ("PROCEDURE attribute conflicts with RESULT attribute "
13211 "in %qs at %L", sym->name, &sym->declared_at);
13212 return false;
13213 }
13214 if (sym->attr.external && sym->attr.function && !sym->attr.module_procedure
13215 && ((sym->attr.if_source == IFSRC_DECL && !sym->attr.procedure)
13216 || sym->attr.contained))
13217 {
13218 gfc_error ("EXTERNAL attribute conflicts with FUNCTION attribute "
13219 "in %qs at %L", sym->name, &sym->declared_at);
13220 return false;
13221 }
13222 if (strcmp ("ppr@", sym->name) == 0)
13223 {
13224 gfc_error ("Procedure pointer result %qs at %L "
13225 "is missing the pointer attribute",
13226 sym->ns->proc_name->name, &sym->declared_at);
13227 return false;
13228 }
13229 }
13230
13231 /* Assume that a procedure whose body is not known has references
13232 to external arrays. */
13233 if (sym->attr.if_source != IFSRC_DECL)
13234 sym->attr.array_outer_dependency = 1;
13235
13236 /* Compare the characteristics of a module procedure with the
13237 interface declaration. Ideally this would be done with
13238 gfc_compare_interfaces but, at present, the formal interface
13239 cannot be copied to the ts.interface. */
13240 if (sym->attr.module_procedure
13241 && sym->attr.if_source == IFSRC_DECL)
13242 {
13243 gfc_symbol *iface;
13244 char name[2*GFC_MAX_SYMBOL_LEN + 1];
13245 char *module_name;
13246 char *submodule_name;
13247 strcpy (name, sym->ns->proc_name->name);
13248 module_name = strtok (name, ".");
13249 submodule_name = strtok (NULL, ".");
13250
13251 iface = sym->tlink;
13252 sym->tlink = NULL;
13253
13254 /* Make sure that the result uses the correct charlen for deferred
13255 length results. */
13256 if (iface && sym->result
13257 && iface->ts.type == BT_CHARACTER
13258 && iface->ts.deferred)
13259 sym->result->ts.u.cl = iface->ts.u.cl;
13260
13261 if (iface == NULL)
13262 goto check_formal;
13263
13264 /* Check the procedure characteristics. */
13265 if (sym->attr.elemental != iface->attr.elemental)
13266 {
13267 gfc_error ("Mismatch in ELEMENTAL attribute between MODULE "
13268 "PROCEDURE at %L and its interface in %s",
13269 &sym->declared_at, module_name);
13270 return false;
13271 }
13272
13273 if (sym->attr.pure != iface->attr.pure)
13274 {
13275 gfc_error ("Mismatch in PURE attribute between MODULE "
13276 "PROCEDURE at %L and its interface in %s",
13277 &sym->declared_at, module_name);
13278 return false;
13279 }
13280
13281 if (sym->attr.recursive != iface->attr.recursive)
13282 {
13283 gfc_error ("Mismatch in RECURSIVE attribute between MODULE "
13284 "PROCEDURE at %L and its interface in %s",
13285 &sym->declared_at, module_name);
13286 return false;
13287 }
13288
13289 /* Check the result characteristics. */
13290 if (!gfc_check_result_characteristics (sym, iface, errmsg, 200))
13291 {
13292 gfc_error ("%s between the MODULE PROCEDURE declaration "
13293 "in MODULE %qs and the declaration at %L in "
13294 "(SUB)MODULE %qs",
13295 errmsg, module_name, &sym->declared_at,
13296 submodule_name ? submodule_name : module_name);
13297 return false;
13298 }
13299
13300 check_formal:
13301 /* Check the characteristics of the formal arguments. */
13302 if (sym->formal && sym->formal_ns)
13303 {
13304 for (arg = sym->formal; arg && arg->sym; arg = arg->next)
13305 {
13306 new_formal = arg;
13307 gfc_traverse_ns (sym->formal_ns, compare_fsyms);
13308 }
13309 }
13310 }
13311 return true;
13312 }
13313
13314
13315 /* Resolve a list of finalizer procedures. That is, after they have hopefully
13316 been defined and we now know their defined arguments, check that they fulfill
13317 the requirements of the standard for procedures used as finalizers. */
13318
13319 static bool
13320 gfc_resolve_finalizers (gfc_symbol* derived, bool *finalizable)
13321 {
13322 gfc_finalizer* list;
13323 gfc_finalizer** prev_link; /* For removing wrong entries from the list. */
13324 bool result = true;
13325 bool seen_scalar = false;
13326 gfc_symbol *vtab;
13327 gfc_component *c;
13328 gfc_symbol *parent = gfc_get_derived_super_type (derived);
13329
13330 if (parent)
13331 gfc_resolve_finalizers (parent, finalizable);
13332
13333 /* Ensure that derived-type components have a their finalizers resolved. */
13334 bool has_final = derived->f2k_derived && derived->f2k_derived->finalizers;
13335 for (c = derived->components; c; c = c->next)
13336 if (c->ts.type == BT_DERIVED
13337 && !c->attr.pointer && !c->attr.proc_pointer && !c->attr.allocatable)
13338 {
13339 bool has_final2 = false;
13340 if (!gfc_resolve_finalizers (c->ts.u.derived, &has_final2))
13341 return false; /* Error. */
13342 has_final = has_final || has_final2;
13343 }
13344 /* Return early if not finalizable. */
13345 if (!has_final)
13346 {
13347 if (finalizable)
13348 *finalizable = false;
13349 return true;
13350 }
13351
13352 /* Walk over the list of finalizer-procedures, check them, and if any one
13353 does not fit in with the standard's definition, print an error and remove
13354 it from the list. */
13355 prev_link = &derived->f2k_derived->finalizers;
13356 for (list = derived->f2k_derived->finalizers; list; list = *prev_link)
13357 {
13358 gfc_formal_arglist *dummy_args;
13359 gfc_symbol* arg;
13360 gfc_finalizer* i;
13361 int my_rank;
13362
13363 /* Skip this finalizer if we already resolved it. */
13364 if (list->proc_tree)
13365 {
13366 if (list->proc_tree->n.sym->formal->sym->as == NULL
13367 || list->proc_tree->n.sym->formal->sym->as->rank == 0)
13368 seen_scalar = true;
13369 prev_link = &(list->next);
13370 continue;
13371 }
13372
13373 /* Check this exists and is a SUBROUTINE. */
13374 if (!list->proc_sym->attr.subroutine)
13375 {
13376 gfc_error ("FINAL procedure %qs at %L is not a SUBROUTINE",
13377 list->proc_sym->name, &list->where);
13378 goto error;
13379 }
13380
13381 /* We should have exactly one argument. */
13382 dummy_args = gfc_sym_get_dummy_args (list->proc_sym);
13383 if (!dummy_args || dummy_args->next)
13384 {
13385 gfc_error ("FINAL procedure at %L must have exactly one argument",
13386 &list->where);
13387 goto error;
13388 }
13389 arg = dummy_args->sym;
13390
13391 /* This argument must be of our type. */
13392 if (arg->ts.type != BT_DERIVED || arg->ts.u.derived != derived)
13393 {
13394 gfc_error ("Argument of FINAL procedure at %L must be of type %qs",
13395 &arg->declared_at, derived->name);
13396 goto error;
13397 }
13398
13399 /* It must neither be a pointer nor allocatable nor optional. */
13400 if (arg->attr.pointer)
13401 {
13402 gfc_error ("Argument of FINAL procedure at %L must not be a POINTER",
13403 &arg->declared_at);
13404 goto error;
13405 }
13406 if (arg->attr.allocatable)
13407 {
13408 gfc_error ("Argument of FINAL procedure at %L must not be"
13409 " ALLOCATABLE", &arg->declared_at);
13410 goto error;
13411 }
13412 if (arg->attr.optional)
13413 {
13414 gfc_error ("Argument of FINAL procedure at %L must not be OPTIONAL",
13415 &arg->declared_at);
13416 goto error;
13417 }
13418
13419 /* It must not be INTENT(OUT). */
13420 if (arg->attr.intent == INTENT_OUT)
13421 {
13422 gfc_error ("Argument of FINAL procedure at %L must not be"
13423 " INTENT(OUT)", &arg->declared_at);
13424 goto error;
13425 }
13426
13427 /* Warn if the procedure is non-scalar and not assumed shape. */
13428 if (warn_surprising && arg->as && arg->as->rank != 0
13429 && arg->as->type != AS_ASSUMED_SHAPE)
13430 gfc_warning (OPT_Wsurprising,
13431 "Non-scalar FINAL procedure at %L should have assumed"
13432 " shape argument", &arg->declared_at);
13433
13434 /* Check that it does not match in kind and rank with a FINAL procedure
13435 defined earlier. To really loop over the *earlier* declarations,
13436 we need to walk the tail of the list as new ones were pushed at the
13437 front. */
13438 /* TODO: Handle kind parameters once they are implemented. */
13439 my_rank = (arg->as ? arg->as->rank : 0);
13440 for (i = list->next; i; i = i->next)
13441 {
13442 gfc_formal_arglist *dummy_args;
13443
13444 /* Argument list might be empty; that is an error signalled earlier,
13445 but we nevertheless continued resolving. */
13446 dummy_args = gfc_sym_get_dummy_args (i->proc_sym);
13447 if (dummy_args)
13448 {
13449 gfc_symbol* i_arg = dummy_args->sym;
13450 const int i_rank = (i_arg->as ? i_arg->as->rank : 0);
13451 if (i_rank == my_rank)
13452 {
13453 gfc_error ("FINAL procedure %qs declared at %L has the same"
13454 " rank (%d) as %qs",
13455 list->proc_sym->name, &list->where, my_rank,
13456 i->proc_sym->name);
13457 goto error;
13458 }
13459 }
13460 }
13461
13462 /* Is this the/a scalar finalizer procedure? */
13463 if (my_rank == 0)
13464 seen_scalar = true;
13465
13466 /* Find the symtree for this procedure. */
13467 gcc_assert (!list->proc_tree);
13468 list->proc_tree = gfc_find_sym_in_symtree (list->proc_sym);
13469
13470 prev_link = &list->next;
13471 continue;
13472
13473 /* Remove wrong nodes immediately from the list so we don't risk any
13474 troubles in the future when they might fail later expectations. */
13475 error:
13476 i = list;
13477 *prev_link = list->next;
13478 gfc_free_finalizer (i);
13479 result = false;
13480 }
13481
13482 if (result == false)
13483 return false;
13484
13485 /* Warn if we haven't seen a scalar finalizer procedure (but we know there
13486 were nodes in the list, must have been for arrays. It is surely a good
13487 idea to have a scalar version there if there's something to finalize. */
13488 if (warn_surprising && derived->f2k_derived->finalizers && !seen_scalar)
13489 gfc_warning (OPT_Wsurprising,
13490 "Only array FINAL procedures declared for derived type %qs"
13491 " defined at %L, suggest also scalar one",
13492 derived->name, &derived->declared_at);
13493
13494 vtab = gfc_find_derived_vtab (derived);
13495 c = vtab->ts.u.derived->components->next->next->next->next->next;
13496 gfc_set_sym_referenced (c->initializer->symtree->n.sym);
13497
13498 if (finalizable)
13499 *finalizable = true;
13500
13501 return true;
13502 }
13503
13504
13505 /* Check if two GENERIC targets are ambiguous and emit an error is they are. */
13506
13507 static bool
13508 check_generic_tbp_ambiguity (gfc_tbp_generic* t1, gfc_tbp_generic* t2,
13509 const char* generic_name, locus where)
13510 {
13511 gfc_symbol *sym1, *sym2;
13512 const char *pass1, *pass2;
13513 gfc_formal_arglist *dummy_args;
13514
13515 gcc_assert (t1->specific && t2->specific);
13516 gcc_assert (!t1->specific->is_generic);
13517 gcc_assert (!t2->specific->is_generic);
13518 gcc_assert (t1->is_operator == t2->is_operator);
13519
13520 sym1 = t1->specific->u.specific->n.sym;
13521 sym2 = t2->specific->u.specific->n.sym;
13522
13523 if (sym1 == sym2)
13524 return true;
13525
13526 /* Both must be SUBROUTINEs or both must be FUNCTIONs. */
13527 if (sym1->attr.subroutine != sym2->attr.subroutine
13528 || sym1->attr.function != sym2->attr.function)
13529 {
13530 gfc_error ("%qs and %qs cannot be mixed FUNCTION/SUBROUTINE for"
13531 " GENERIC %qs at %L",
13532 sym1->name, sym2->name, generic_name, &where);
13533 return false;
13534 }
13535
13536 /* Determine PASS arguments. */
13537 if (t1->specific->nopass)
13538 pass1 = NULL;
13539 else if (t1->specific->pass_arg)
13540 pass1 = t1->specific->pass_arg;
13541 else
13542 {
13543 dummy_args = gfc_sym_get_dummy_args (t1->specific->u.specific->n.sym);
13544 if (dummy_args)
13545 pass1 = dummy_args->sym->name;
13546 else
13547 pass1 = NULL;
13548 }
13549 if (t2->specific->nopass)
13550 pass2 = NULL;
13551 else if (t2->specific->pass_arg)
13552 pass2 = t2->specific->pass_arg;
13553 else
13554 {
13555 dummy_args = gfc_sym_get_dummy_args (t2->specific->u.specific->n.sym);
13556 if (dummy_args)
13557 pass2 = dummy_args->sym->name;
13558 else
13559 pass2 = NULL;
13560 }
13561
13562 /* Compare the interfaces. */
13563 if (gfc_compare_interfaces (sym1, sym2, sym2->name, !t1->is_operator, 0,
13564 NULL, 0, pass1, pass2))
13565 {
13566 gfc_error ("%qs and %qs for GENERIC %qs at %L are ambiguous",
13567 sym1->name, sym2->name, generic_name, &where);
13568 return false;
13569 }
13570
13571 return true;
13572 }
13573
13574
13575 /* Worker function for resolving a generic procedure binding; this is used to
13576 resolve GENERIC as well as user and intrinsic OPERATOR typebound procedures.
13577
13578 The difference between those cases is finding possible inherited bindings
13579 that are overridden, as one has to look for them in tb_sym_root,
13580 tb_uop_root or tb_op, respectively. Thus the caller must already find
13581 the super-type and set p->overridden correctly. */
13582
13583 static bool
13584 resolve_tb_generic_targets (gfc_symbol* super_type,
13585 gfc_typebound_proc* p, const char* name)
13586 {
13587 gfc_tbp_generic* target;
13588 gfc_symtree* first_target;
13589 gfc_symtree* inherited;
13590
13591 gcc_assert (p && p->is_generic);
13592
13593 /* Try to find the specific bindings for the symtrees in our target-list. */
13594 gcc_assert (p->u.generic);
13595 for (target = p->u.generic; target; target = target->next)
13596 if (!target->specific)
13597 {
13598 gfc_typebound_proc* overridden_tbp;
13599 gfc_tbp_generic* g;
13600 const char* target_name;
13601
13602 target_name = target->specific_st->name;
13603
13604 /* Defined for this type directly. */
13605 if (target->specific_st->n.tb && !target->specific_st->n.tb->error)
13606 {
13607 target->specific = target->specific_st->n.tb;
13608 goto specific_found;
13609 }
13610
13611 /* Look for an inherited specific binding. */
13612 if (super_type)
13613 {
13614 inherited = gfc_find_typebound_proc (super_type, NULL, target_name,
13615 true, NULL);
13616
13617 if (inherited)
13618 {
13619 gcc_assert (inherited->n.tb);
13620 target->specific = inherited->n.tb;
13621 goto specific_found;
13622 }
13623 }
13624
13625 gfc_error ("Undefined specific binding %qs as target of GENERIC %qs"
13626 " at %L", target_name, name, &p->where);
13627 return false;
13628
13629 /* Once we've found the specific binding, check it is not ambiguous with
13630 other specifics already found or inherited for the same GENERIC. */
13631 specific_found:
13632 gcc_assert (target->specific);
13633
13634 /* This must really be a specific binding! */
13635 if (target->specific->is_generic)
13636 {
13637 gfc_error ("GENERIC %qs at %L must target a specific binding,"
13638 " %qs is GENERIC, too", name, &p->where, target_name);
13639 return false;
13640 }
13641
13642 /* Check those already resolved on this type directly. */
13643 for (g = p->u.generic; g; g = g->next)
13644 if (g != target && g->specific
13645 && !check_generic_tbp_ambiguity (target, g, name, p->where))
13646 return false;
13647
13648 /* Check for ambiguity with inherited specific targets. */
13649 for (overridden_tbp = p->overridden; overridden_tbp;
13650 overridden_tbp = overridden_tbp->overridden)
13651 if (overridden_tbp->is_generic)
13652 {
13653 for (g = overridden_tbp->u.generic; g; g = g->next)
13654 {
13655 gcc_assert (g->specific);
13656 if (!check_generic_tbp_ambiguity (target, g, name, p->where))
13657 return false;
13658 }
13659 }
13660 }
13661
13662 /* If we attempt to "overwrite" a specific binding, this is an error. */
13663 if (p->overridden && !p->overridden->is_generic)
13664 {
13665 gfc_error ("GENERIC %qs at %L cannot overwrite specific binding with"
13666 " the same name", name, &p->where);
13667 return false;
13668 }
13669
13670 /* Take the SUBROUTINE/FUNCTION attributes of the first specific target, as
13671 all must have the same attributes here. */
13672 first_target = p->u.generic->specific->u.specific;
13673 gcc_assert (first_target);
13674 p->subroutine = first_target->n.sym->attr.subroutine;
13675 p->function = first_target->n.sym->attr.function;
13676
13677 return true;
13678 }
13679
13680
13681 /* Resolve a GENERIC procedure binding for a derived type. */
13682
13683 static bool
13684 resolve_typebound_generic (gfc_symbol* derived, gfc_symtree* st)
13685 {
13686 gfc_symbol* super_type;
13687
13688 /* Find the overridden binding if any. */
13689 st->n.tb->overridden = NULL;
13690 super_type = gfc_get_derived_super_type (derived);
13691 if (super_type)
13692 {
13693 gfc_symtree* overridden;
13694 overridden = gfc_find_typebound_proc (super_type, NULL, st->name,
13695 true, NULL);
13696
13697 if (overridden && overridden->n.tb)
13698 st->n.tb->overridden = overridden->n.tb;
13699 }
13700
13701 /* Resolve using worker function. */
13702 return resolve_tb_generic_targets (super_type, st->n.tb, st->name);
13703 }
13704
13705
13706 /* Retrieve the target-procedure of an operator binding and do some checks in
13707 common for intrinsic and user-defined type-bound operators. */
13708
13709 static gfc_symbol*
13710 get_checked_tb_operator_target (gfc_tbp_generic* target, locus where)
13711 {
13712 gfc_symbol* target_proc;
13713
13714 gcc_assert (target->specific && !target->specific->is_generic);
13715 target_proc = target->specific->u.specific->n.sym;
13716 gcc_assert (target_proc);
13717
13718 /* F08:C468. All operator bindings must have a passed-object dummy argument. */
13719 if (target->specific->nopass)
13720 {
13721 gfc_error ("Type-bound operator at %L cannot be NOPASS", &where);
13722 return NULL;
13723 }
13724
13725 return target_proc;
13726 }
13727
13728
13729 /* Resolve a type-bound intrinsic operator. */
13730
13731 static bool
13732 resolve_typebound_intrinsic_op (gfc_symbol* derived, gfc_intrinsic_op op,
13733 gfc_typebound_proc* p)
13734 {
13735 gfc_symbol* super_type;
13736 gfc_tbp_generic* target;
13737
13738 /* If there's already an error here, do nothing (but don't fail again). */
13739 if (p->error)
13740 return true;
13741
13742 /* Operators should always be GENERIC bindings. */
13743 gcc_assert (p->is_generic);
13744
13745 /* Look for an overridden binding. */
13746 super_type = gfc_get_derived_super_type (derived);
13747 if (super_type && super_type->f2k_derived)
13748 p->overridden = gfc_find_typebound_intrinsic_op (super_type, NULL,
13749 op, true, NULL);
13750 else
13751 p->overridden = NULL;
13752
13753 /* Resolve general GENERIC properties using worker function. */
13754 if (!resolve_tb_generic_targets (super_type, p, gfc_op2string(op)))
13755 goto error;
13756
13757 /* Check the targets to be procedures of correct interface. */
13758 for (target = p->u.generic; target; target = target->next)
13759 {
13760 gfc_symbol* target_proc;
13761
13762 target_proc = get_checked_tb_operator_target (target, p->where);
13763 if (!target_proc)
13764 goto error;
13765
13766 if (!gfc_check_operator_interface (target_proc, op, p->where))
13767 goto error;
13768
13769 /* Add target to non-typebound operator list. */
13770 if (!target->specific->deferred && !derived->attr.use_assoc
13771 && p->access != ACCESS_PRIVATE && derived->ns == gfc_current_ns)
13772 {
13773 gfc_interface *head, *intr;
13774
13775 /* Preempt 'gfc_check_new_interface' for submodules, where the
13776 mechanism for handling module procedures winds up resolving
13777 operator interfaces twice and would otherwise cause an error. */
13778 for (intr = derived->ns->op[op]; intr; intr = intr->next)
13779 if (intr->sym == target_proc
13780 && target_proc->attr.used_in_submodule)
13781 return true;
13782
13783 if (!gfc_check_new_interface (derived->ns->op[op],
13784 target_proc, p->where))
13785 return false;
13786 head = derived->ns->op[op];
13787 intr = gfc_get_interface ();
13788 intr->sym = target_proc;
13789 intr->where = p->where;
13790 intr->next = head;
13791 derived->ns->op[op] = intr;
13792 }
13793 }
13794
13795 return true;
13796
13797 error:
13798 p->error = 1;
13799 return false;
13800 }
13801
13802
13803 /* Resolve a type-bound user operator (tree-walker callback). */
13804
13805 static gfc_symbol* resolve_bindings_derived;
13806 static bool resolve_bindings_result;
13807
13808 static bool check_uop_procedure (gfc_symbol* sym, locus where);
13809
13810 static void
13811 resolve_typebound_user_op (gfc_symtree* stree)
13812 {
13813 gfc_symbol* super_type;
13814 gfc_tbp_generic* target;
13815
13816 gcc_assert (stree && stree->n.tb);
13817
13818 if (stree->n.tb->error)
13819 return;
13820
13821 /* Operators should always be GENERIC bindings. */
13822 gcc_assert (stree->n.tb->is_generic);
13823
13824 /* Find overridden procedure, if any. */
13825 super_type = gfc_get_derived_super_type (resolve_bindings_derived);
13826 if (super_type && super_type->f2k_derived)
13827 {
13828 gfc_symtree* overridden;
13829 overridden = gfc_find_typebound_user_op (super_type, NULL,
13830 stree->name, true, NULL);
13831
13832 if (overridden && overridden->n.tb)
13833 stree->n.tb->overridden = overridden->n.tb;
13834 }
13835 else
13836 stree->n.tb->overridden = NULL;
13837
13838 /* Resolve basically using worker function. */
13839 if (!resolve_tb_generic_targets (super_type, stree->n.tb, stree->name))
13840 goto error;
13841
13842 /* Check the targets to be functions of correct interface. */
13843 for (target = stree->n.tb->u.generic; target; target = target->next)
13844 {
13845 gfc_symbol* target_proc;
13846
13847 target_proc = get_checked_tb_operator_target (target, stree->n.tb->where);
13848 if (!target_proc)
13849 goto error;
13850
13851 if (!check_uop_procedure (target_proc, stree->n.tb->where))
13852 goto error;
13853 }
13854
13855 return;
13856
13857 error:
13858 resolve_bindings_result = false;
13859 stree->n.tb->error = 1;
13860 }
13861
13862
13863 /* Resolve the type-bound procedures for a derived type. */
13864
13865 static void
13866 resolve_typebound_procedure (gfc_symtree* stree)
13867 {
13868 gfc_symbol* proc;
13869 locus where;
13870 gfc_symbol* me_arg;
13871 gfc_symbol* super_type;
13872 gfc_component* comp;
13873
13874 gcc_assert (stree);
13875
13876 /* Undefined specific symbol from GENERIC target definition. */
13877 if (!stree->n.tb)
13878 return;
13879
13880 if (stree->n.tb->error)
13881 return;
13882
13883 /* If this is a GENERIC binding, use that routine. */
13884 if (stree->n.tb->is_generic)
13885 {
13886 if (!resolve_typebound_generic (resolve_bindings_derived, stree))
13887 goto error;
13888 return;
13889 }
13890
13891 /* Get the target-procedure to check it. */
13892 gcc_assert (!stree->n.tb->is_generic);
13893 gcc_assert (stree->n.tb->u.specific);
13894 proc = stree->n.tb->u.specific->n.sym;
13895 where = stree->n.tb->where;
13896
13897 /* Default access should already be resolved from the parser. */
13898 gcc_assert (stree->n.tb->access != ACCESS_UNKNOWN);
13899
13900 if (stree->n.tb->deferred)
13901 {
13902 if (!check_proc_interface (proc, &where))
13903 goto error;
13904 }
13905 else
13906 {
13907 /* If proc has not been resolved at this point, proc->name may
13908 actually be a USE associated entity. See PR fortran/89647. */
13909 if (!proc->resolved
13910 && proc->attr.function == 0 && proc->attr.subroutine == 0)
13911 {
13912 gfc_symbol *tmp;
13913 gfc_find_symbol (proc->name, gfc_current_ns->parent, 1, &tmp);
13914 if (tmp && tmp->attr.use_assoc)
13915 {
13916 proc->module = tmp->module;
13917 proc->attr.proc = tmp->attr.proc;
13918 proc->attr.function = tmp->attr.function;
13919 proc->attr.subroutine = tmp->attr.subroutine;
13920 proc->attr.use_assoc = tmp->attr.use_assoc;
13921 proc->ts = tmp->ts;
13922 proc->result = tmp->result;
13923 }
13924 }
13925
13926 /* Check for F08:C465. */
13927 if ((!proc->attr.subroutine && !proc->attr.function)
13928 || (proc->attr.proc != PROC_MODULE
13929 && proc->attr.if_source != IFSRC_IFBODY)
13930 || proc->attr.abstract)
13931 {
13932 gfc_error ("%qs must be a module procedure or an external "
13933 "procedure with an explicit interface at %L",
13934 proc->name, &where);
13935 goto error;
13936 }
13937 }
13938
13939 stree->n.tb->subroutine = proc->attr.subroutine;
13940 stree->n.tb->function = proc->attr.function;
13941
13942 /* Find the super-type of the current derived type. We could do this once and
13943 store in a global if speed is needed, but as long as not I believe this is
13944 more readable and clearer. */
13945 super_type = gfc_get_derived_super_type (resolve_bindings_derived);
13946
13947 /* If PASS, resolve and check arguments if not already resolved / loaded
13948 from a .mod file. */
13949 if (!stree->n.tb->nopass && stree->n.tb->pass_arg_num == 0)
13950 {
13951 gfc_formal_arglist *dummy_args;
13952
13953 dummy_args = gfc_sym_get_dummy_args (proc);
13954 if (stree->n.tb->pass_arg)
13955 {
13956 gfc_formal_arglist *i;
13957
13958 /* If an explicit passing argument name is given, walk the arg-list
13959 and look for it. */
13960
13961 me_arg = NULL;
13962 stree->n.tb->pass_arg_num = 1;
13963 for (i = dummy_args; i; i = i->next)
13964 {
13965 if (!strcmp (i->sym->name, stree->n.tb->pass_arg))
13966 {
13967 me_arg = i->sym;
13968 break;
13969 }
13970 ++stree->n.tb->pass_arg_num;
13971 }
13972
13973 if (!me_arg)
13974 {
13975 gfc_error ("Procedure %qs with PASS(%s) at %L has no"
13976 " argument %qs",
13977 proc->name, stree->n.tb->pass_arg, &where,
13978 stree->n.tb->pass_arg);
13979 goto error;
13980 }
13981 }
13982 else
13983 {
13984 /* Otherwise, take the first one; there should in fact be at least
13985 one. */
13986 stree->n.tb->pass_arg_num = 1;
13987 if (!dummy_args)
13988 {
13989 gfc_error ("Procedure %qs with PASS at %L must have at"
13990 " least one argument", proc->name, &where);
13991 goto error;
13992 }
13993 me_arg = dummy_args->sym;
13994 }
13995
13996 /* Now check that the argument-type matches and the passed-object
13997 dummy argument is generally fine. */
13998
13999 gcc_assert (me_arg);
14000
14001 if (me_arg->ts.type != BT_CLASS)
14002 {
14003 gfc_error ("Non-polymorphic passed-object dummy argument of %qs"
14004 " at %L", proc->name, &where);
14005 goto error;
14006 }
14007
14008 if (CLASS_DATA (me_arg)->ts.u.derived
14009 != resolve_bindings_derived)
14010 {
14011 gfc_error ("Argument %qs of %qs with PASS(%s) at %L must be of"
14012 " the derived-type %qs", me_arg->name, proc->name,
14013 me_arg->name, &where, resolve_bindings_derived->name);
14014 goto error;
14015 }
14016
14017 gcc_assert (me_arg->ts.type == BT_CLASS);
14018 if (CLASS_DATA (me_arg)->as && CLASS_DATA (me_arg)->as->rank != 0)
14019 {
14020 gfc_error ("Passed-object dummy argument of %qs at %L must be"
14021 " scalar", proc->name, &where);
14022 goto error;
14023 }
14024 if (CLASS_DATA (me_arg)->attr.allocatable)
14025 {
14026 gfc_error ("Passed-object dummy argument of %qs at %L must not"
14027 " be ALLOCATABLE", proc->name, &where);
14028 goto error;
14029 }
14030 if (CLASS_DATA (me_arg)->attr.class_pointer)
14031 {
14032 gfc_error ("Passed-object dummy argument of %qs at %L must not"
14033 " be POINTER", proc->name, &where);
14034 goto error;
14035 }
14036 }
14037
14038 /* If we are extending some type, check that we don't override a procedure
14039 flagged NON_OVERRIDABLE. */
14040 stree->n.tb->overridden = NULL;
14041 if (super_type)
14042 {
14043 gfc_symtree* overridden;
14044 overridden = gfc_find_typebound_proc (super_type, NULL,
14045 stree->name, true, NULL);
14046
14047 if (overridden)
14048 {
14049 if (overridden->n.tb)
14050 stree->n.tb->overridden = overridden->n.tb;
14051
14052 if (!gfc_check_typebound_override (stree, overridden))
14053 goto error;
14054 }
14055 }
14056
14057 /* See if there's a name collision with a component directly in this type. */
14058 for (comp = resolve_bindings_derived->components; comp; comp = comp->next)
14059 if (!strcmp (comp->name, stree->name))
14060 {
14061 gfc_error ("Procedure %qs at %L has the same name as a component of"
14062 " %qs",
14063 stree->name, &where, resolve_bindings_derived->name);
14064 goto error;
14065 }
14066
14067 /* Try to find a name collision with an inherited component. */
14068 if (super_type && gfc_find_component (super_type, stree->name, true, true,
14069 NULL))
14070 {
14071 gfc_error ("Procedure %qs at %L has the same name as an inherited"
14072 " component of %qs",
14073 stree->name, &where, resolve_bindings_derived->name);
14074 goto error;
14075 }
14076
14077 stree->n.tb->error = 0;
14078 return;
14079
14080 error:
14081 resolve_bindings_result = false;
14082 stree->n.tb->error = 1;
14083 }
14084
14085
14086 static bool
14087 resolve_typebound_procedures (gfc_symbol* derived)
14088 {
14089 int op;
14090 gfc_symbol* super_type;
14091
14092 if (!derived->f2k_derived || !derived->f2k_derived->tb_sym_root)
14093 return true;
14094
14095 super_type = gfc_get_derived_super_type (derived);
14096 if (super_type)
14097 resolve_symbol (super_type);
14098
14099 resolve_bindings_derived = derived;
14100 resolve_bindings_result = true;
14101
14102 if (derived->f2k_derived->tb_sym_root)
14103 gfc_traverse_symtree (derived->f2k_derived->tb_sym_root,
14104 &resolve_typebound_procedure);
14105
14106 if (derived->f2k_derived->tb_uop_root)
14107 gfc_traverse_symtree (derived->f2k_derived->tb_uop_root,
14108 &resolve_typebound_user_op);
14109
14110 for (op = 0; op != GFC_INTRINSIC_OPS; ++op)
14111 {
14112 gfc_typebound_proc* p = derived->f2k_derived->tb_op[op];
14113 if (p && !resolve_typebound_intrinsic_op (derived,
14114 (gfc_intrinsic_op)op, p))
14115 resolve_bindings_result = false;
14116 }
14117
14118 return resolve_bindings_result;
14119 }
14120
14121
14122 /* Add a derived type to the dt_list. The dt_list is used in trans-types.c
14123 to give all identical derived types the same backend_decl. */
14124 static void
14125 add_dt_to_dt_list (gfc_symbol *derived)
14126 {
14127 if (!derived->dt_next)
14128 {
14129 if (gfc_derived_types)
14130 {
14131 derived->dt_next = gfc_derived_types->dt_next;
14132 gfc_derived_types->dt_next = derived;
14133 }
14134 else
14135 {
14136 derived->dt_next = derived;
14137 }
14138 gfc_derived_types = derived;
14139 }
14140 }
14141
14142
14143 /* Ensure that a derived-type is really not abstract, meaning that every
14144 inherited DEFERRED binding is overridden by a non-DEFERRED one. */
14145
14146 static bool
14147 ensure_not_abstract_walker (gfc_symbol* sub, gfc_symtree* st)
14148 {
14149 if (!st)
14150 return true;
14151
14152 if (!ensure_not_abstract_walker (sub, st->left))
14153 return false;
14154 if (!ensure_not_abstract_walker (sub, st->right))
14155 return false;
14156
14157 if (st->n.tb && st->n.tb->deferred)
14158 {
14159 gfc_symtree* overriding;
14160 overriding = gfc_find_typebound_proc (sub, NULL, st->name, true, NULL);
14161 if (!overriding)
14162 return false;
14163 gcc_assert (overriding->n.tb);
14164 if (overriding->n.tb->deferred)
14165 {
14166 gfc_error ("Derived-type %qs declared at %L must be ABSTRACT because"
14167 " %qs is DEFERRED and not overridden",
14168 sub->name, &sub->declared_at, st->name);
14169 return false;
14170 }
14171 }
14172
14173 return true;
14174 }
14175
14176 static bool
14177 ensure_not_abstract (gfc_symbol* sub, gfc_symbol* ancestor)
14178 {
14179 /* The algorithm used here is to recursively travel up the ancestry of sub
14180 and for each ancestor-type, check all bindings. If any of them is
14181 DEFERRED, look it up starting from sub and see if the found (overriding)
14182 binding is not DEFERRED.
14183 This is not the most efficient way to do this, but it should be ok and is
14184 clearer than something sophisticated. */
14185
14186 gcc_assert (ancestor && !sub->attr.abstract);
14187
14188 if (!ancestor->attr.abstract)
14189 return true;
14190
14191 /* Walk bindings of this ancestor. */
14192 if (ancestor->f2k_derived)
14193 {
14194 bool t;
14195 t = ensure_not_abstract_walker (sub, ancestor->f2k_derived->tb_sym_root);
14196 if (!t)
14197 return false;
14198 }
14199
14200 /* Find next ancestor type and recurse on it. */
14201 ancestor = gfc_get_derived_super_type (ancestor);
14202 if (ancestor)
14203 return ensure_not_abstract (sub, ancestor);
14204
14205 return true;
14206 }
14207
14208
14209 /* This check for typebound defined assignments is done recursively
14210 since the order in which derived types are resolved is not always in
14211 order of the declarations. */
14212
14213 static void
14214 check_defined_assignments (gfc_symbol *derived)
14215 {
14216 gfc_component *c;
14217
14218 for (c = derived->components; c; c = c->next)
14219 {
14220 if (!gfc_bt_struct (c->ts.type)
14221 || c->attr.pointer
14222 || c->attr.allocatable
14223 || c->attr.proc_pointer_comp
14224 || c->attr.class_pointer
14225 || c->attr.proc_pointer)
14226 continue;
14227
14228 if (c->ts.u.derived->attr.defined_assign_comp
14229 || (c->ts.u.derived->f2k_derived
14230 && c->ts.u.derived->f2k_derived->tb_op[INTRINSIC_ASSIGN]))
14231 {
14232 derived->attr.defined_assign_comp = 1;
14233 return;
14234 }
14235
14236 check_defined_assignments (c->ts.u.derived);
14237 if (c->ts.u.derived->attr.defined_assign_comp)
14238 {
14239 derived->attr.defined_assign_comp = 1;
14240 return;
14241 }
14242 }
14243 }
14244
14245
14246 /* Resolve a single component of a derived type or structure. */
14247
14248 static bool
14249 resolve_component (gfc_component *c, gfc_symbol *sym)
14250 {
14251 gfc_symbol *super_type;
14252 symbol_attribute *attr;
14253
14254 if (c->attr.artificial)
14255 return true;
14256
14257 /* Do not allow vtype components to be resolved in nameless namespaces
14258 such as block data because the procedure pointers will cause ICEs
14259 and vtables are not needed in these contexts. */
14260 if (sym->attr.vtype && sym->attr.use_assoc
14261 && sym->ns->proc_name == NULL)
14262 return true;
14263
14264 /* F2008, C442. */
14265 if ((!sym->attr.is_class || c != sym->components)
14266 && c->attr.codimension
14267 && (!c->attr.allocatable || (c->as && c->as->type != AS_DEFERRED)))
14268 {
14269 gfc_error ("Coarray component %qs at %L must be allocatable with "
14270 "deferred shape", c->name, &c->loc);
14271 return false;
14272 }
14273
14274 /* F2008, C443. */
14275 if (c->attr.codimension && c->ts.type == BT_DERIVED
14276 && c->ts.u.derived->ts.is_iso_c)
14277 {
14278 gfc_error ("Component %qs at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) "
14279 "shall not be a coarray", c->name, &c->loc);
14280 return false;
14281 }
14282
14283 /* F2008, C444. */
14284 if (gfc_bt_struct (c->ts.type) && c->ts.u.derived->attr.coarray_comp
14285 && (c->attr.codimension || c->attr.pointer || c->attr.dimension
14286 || c->attr.allocatable))
14287 {
14288 gfc_error ("Component %qs at %L with coarray component "
14289 "shall be a nonpointer, nonallocatable scalar",
14290 c->name, &c->loc);
14291 return false;
14292 }
14293
14294 /* F2008, C448. */
14295 if (c->ts.type == BT_CLASS)
14296 {
14297 if (CLASS_DATA (c))
14298 {
14299 attr = &(CLASS_DATA (c)->attr);
14300
14301 /* Fix up contiguous attribute. */
14302 if (c->attr.contiguous)
14303 attr->contiguous = 1;
14304 }
14305 else
14306 attr = NULL;
14307 }
14308 else
14309 attr = &c->attr;
14310
14311 if (attr && attr->contiguous && (!attr->dimension || !attr->pointer))
14312 {
14313 gfc_error ("Component %qs at %L has the CONTIGUOUS attribute but "
14314 "is not an array pointer", c->name, &c->loc);
14315 return false;
14316 }
14317
14318 /* F2003, 15.2.1 - length has to be one. */
14319 if (sym->attr.is_bind_c && c->ts.type == BT_CHARACTER
14320 && (c->ts.u.cl == NULL || c->ts.u.cl->length == NULL
14321 || !gfc_is_constant_expr (c->ts.u.cl->length)
14322 || mpz_cmp_si (c->ts.u.cl->length->value.integer, 1) != 0))
14323 {
14324 gfc_error ("Component %qs of BIND(C) type at %L must have length one",
14325 c->name, &c->loc);
14326 return false;
14327 }
14328
14329 if (c->attr.proc_pointer && c->ts.interface)
14330 {
14331 gfc_symbol *ifc = c->ts.interface;
14332
14333 if (!sym->attr.vtype && !check_proc_interface (ifc, &c->loc))
14334 {
14335 c->tb->error = 1;
14336 return false;
14337 }
14338
14339 if (ifc->attr.if_source || ifc->attr.intrinsic)
14340 {
14341 /* Resolve interface and copy attributes. */
14342 if (ifc->formal && !ifc->formal_ns)
14343 resolve_symbol (ifc);
14344 if (ifc->attr.intrinsic)
14345 gfc_resolve_intrinsic (ifc, &ifc->declared_at);
14346
14347 if (ifc->result)
14348 {
14349 c->ts = ifc->result->ts;
14350 c->attr.allocatable = ifc->result->attr.allocatable;
14351 c->attr.pointer = ifc->result->attr.pointer;
14352 c->attr.dimension = ifc->result->attr.dimension;
14353 c->as = gfc_copy_array_spec (ifc->result->as);
14354 c->attr.class_ok = ifc->result->attr.class_ok;
14355 }
14356 else
14357 {
14358 c->ts = ifc->ts;
14359 c->attr.allocatable = ifc->attr.allocatable;
14360 c->attr.pointer = ifc->attr.pointer;
14361 c->attr.dimension = ifc->attr.dimension;
14362 c->as = gfc_copy_array_spec (ifc->as);
14363 c->attr.class_ok = ifc->attr.class_ok;
14364 }
14365 c->ts.interface = ifc;
14366 c->attr.function = ifc->attr.function;
14367 c->attr.subroutine = ifc->attr.subroutine;
14368
14369 c->attr.pure = ifc->attr.pure;
14370 c->attr.elemental = ifc->attr.elemental;
14371 c->attr.recursive = ifc->attr.recursive;
14372 c->attr.always_explicit = ifc->attr.always_explicit;
14373 c->attr.ext_attr |= ifc->attr.ext_attr;
14374 /* Copy char length. */
14375 if (ifc->ts.type == BT_CHARACTER && ifc->ts.u.cl)
14376 {
14377 gfc_charlen *cl = gfc_new_charlen (sym->ns, ifc->ts.u.cl);
14378 if (cl->length && !cl->resolved
14379 && !gfc_resolve_expr (cl->length))
14380 {
14381 c->tb->error = 1;
14382 return false;
14383 }
14384 c->ts.u.cl = cl;
14385 }
14386 }
14387 }
14388 else if (c->attr.proc_pointer && c->ts.type == BT_UNKNOWN)
14389 {
14390 /* Since PPCs are not implicitly typed, a PPC without an explicit
14391 interface must be a subroutine. */
14392 gfc_add_subroutine (&c->attr, c->name, &c->loc);
14393 }
14394
14395 /* Procedure pointer components: Check PASS arg. */
14396 if (c->attr.proc_pointer && !c->tb->nopass && c->tb->pass_arg_num == 0
14397 && !sym->attr.vtype)
14398 {
14399 gfc_symbol* me_arg;
14400
14401 if (c->tb->pass_arg)
14402 {
14403 gfc_formal_arglist* i;
14404
14405 /* If an explicit passing argument name is given, walk the arg-list
14406 and look for it. */
14407
14408 me_arg = NULL;
14409 c->tb->pass_arg_num = 1;
14410 for (i = c->ts.interface->formal; i; i = i->next)
14411 {
14412 if (!strcmp (i->sym->name, c->tb->pass_arg))
14413 {
14414 me_arg = i->sym;
14415 break;
14416 }
14417 c->tb->pass_arg_num++;
14418 }
14419
14420 if (!me_arg)
14421 {
14422 gfc_error ("Procedure pointer component %qs with PASS(%s) "
14423 "at %L has no argument %qs", c->name,
14424 c->tb->pass_arg, &c->loc, c->tb->pass_arg);
14425 c->tb->error = 1;
14426 return false;
14427 }
14428 }
14429 else
14430 {
14431 /* Otherwise, take the first one; there should in fact be at least
14432 one. */
14433 c->tb->pass_arg_num = 1;
14434 if (!c->ts.interface->formal)
14435 {
14436 gfc_error ("Procedure pointer component %qs with PASS at %L "
14437 "must have at least one argument",
14438 c->name, &c->loc);
14439 c->tb->error = 1;
14440 return false;
14441 }
14442 me_arg = c->ts.interface->formal->sym;
14443 }
14444
14445 /* Now check that the argument-type matches. */
14446 gcc_assert (me_arg);
14447 if ((me_arg->ts.type != BT_DERIVED && me_arg->ts.type != BT_CLASS)
14448 || (me_arg->ts.type == BT_DERIVED && me_arg->ts.u.derived != sym)
14449 || (me_arg->ts.type == BT_CLASS
14450 && CLASS_DATA (me_arg)->ts.u.derived != sym))
14451 {
14452 gfc_error ("Argument %qs of %qs with PASS(%s) at %L must be of"
14453 " the derived type %qs", me_arg->name, c->name,
14454 me_arg->name, &c->loc, sym->name);
14455 c->tb->error = 1;
14456 return false;
14457 }
14458
14459 /* Check for F03:C453. */
14460 if (CLASS_DATA (me_arg)->attr.dimension)
14461 {
14462 gfc_error ("Argument %qs of %qs with PASS(%s) at %L "
14463 "must be scalar", me_arg->name, c->name, me_arg->name,
14464 &c->loc);
14465 c->tb->error = 1;
14466 return false;
14467 }
14468
14469 if (CLASS_DATA (me_arg)->attr.class_pointer)
14470 {
14471 gfc_error ("Argument %qs of %qs with PASS(%s) at %L "
14472 "may not have the POINTER attribute", me_arg->name,
14473 c->name, me_arg->name, &c->loc);
14474 c->tb->error = 1;
14475 return false;
14476 }
14477
14478 if (CLASS_DATA (me_arg)->attr.allocatable)
14479 {
14480 gfc_error ("Argument %qs of %qs with PASS(%s) at %L "
14481 "may not be ALLOCATABLE", me_arg->name, c->name,
14482 me_arg->name, &c->loc);
14483 c->tb->error = 1;
14484 return false;
14485 }
14486
14487 if (gfc_type_is_extensible (sym) && me_arg->ts.type != BT_CLASS)
14488 {
14489 gfc_error ("Non-polymorphic passed-object dummy argument of %qs"
14490 " at %L", c->name, &c->loc);
14491 return false;
14492 }
14493
14494 }
14495
14496 /* Check type-spec if this is not the parent-type component. */
14497 if (((sym->attr.is_class
14498 && (!sym->components->ts.u.derived->attr.extension
14499 || c != sym->components->ts.u.derived->components))
14500 || (!sym->attr.is_class
14501 && (!sym->attr.extension || c != sym->components)))
14502 && !sym->attr.vtype
14503 && !resolve_typespec_used (&c->ts, &c->loc, c->name))
14504 return false;
14505
14506 super_type = gfc_get_derived_super_type (sym);
14507
14508 /* If this type is an extension, set the accessibility of the parent
14509 component. */
14510 if (super_type
14511 && ((sym->attr.is_class
14512 && c == sym->components->ts.u.derived->components)
14513 || (!sym->attr.is_class && c == sym->components))
14514 && strcmp (super_type->name, c->name) == 0)
14515 c->attr.access = super_type->attr.access;
14516
14517 /* If this type is an extension, see if this component has the same name
14518 as an inherited type-bound procedure. */
14519 if (super_type && !sym->attr.is_class
14520 && gfc_find_typebound_proc (super_type, NULL, c->name, true, NULL))
14521 {
14522 gfc_error ("Component %qs of %qs at %L has the same name as an"
14523 " inherited type-bound procedure",
14524 c->name, sym->name, &c->loc);
14525 return false;
14526 }
14527
14528 if (c->ts.type == BT_CHARACTER && !c->attr.proc_pointer
14529 && !c->ts.deferred)
14530 {
14531 if (c->ts.u.cl->length == NULL
14532 || (!resolve_charlen(c->ts.u.cl))
14533 || !gfc_is_constant_expr (c->ts.u.cl->length))
14534 {
14535 gfc_error ("Character length of component %qs needs to "
14536 "be a constant specification expression at %L",
14537 c->name,
14538 c->ts.u.cl->length ? &c->ts.u.cl->length->where : &c->loc);
14539 return false;
14540 }
14541 }
14542
14543 if (c->ts.type == BT_CHARACTER && c->ts.deferred
14544 && !c->attr.pointer && !c->attr.allocatable)
14545 {
14546 gfc_error ("Character component %qs of %qs at %L with deferred "
14547 "length must be a POINTER or ALLOCATABLE",
14548 c->name, sym->name, &c->loc);
14549 return false;
14550 }
14551
14552 /* Add the hidden deferred length field. */
14553 if (c->ts.type == BT_CHARACTER
14554 && (c->ts.deferred || c->attr.pdt_string)
14555 && !c->attr.function
14556 && !sym->attr.is_class)
14557 {
14558 char name[GFC_MAX_SYMBOL_LEN+9];
14559 gfc_component *strlen;
14560 sprintf (name, "_%s_length", c->name);
14561 strlen = gfc_find_component (sym, name, true, true, NULL);
14562 if (strlen == NULL)
14563 {
14564 if (!gfc_add_component (sym, name, &strlen))
14565 return false;
14566 strlen->ts.type = BT_INTEGER;
14567 strlen->ts.kind = gfc_charlen_int_kind;
14568 strlen->attr.access = ACCESS_PRIVATE;
14569 strlen->attr.artificial = 1;
14570 }
14571 }
14572
14573 if (c->ts.type == BT_DERIVED
14574 && sym->component_access != ACCESS_PRIVATE
14575 && gfc_check_symbol_access (sym)
14576 && !is_sym_host_assoc (c->ts.u.derived, sym->ns)
14577 && !c->ts.u.derived->attr.use_assoc
14578 && !gfc_check_symbol_access (c->ts.u.derived)
14579 && !gfc_notify_std (GFC_STD_F2003, "the component %qs is a "
14580 "PRIVATE type and cannot be a component of "
14581 "%qs, which is PUBLIC at %L", c->name,
14582 sym->name, &sym->declared_at))
14583 return false;
14584
14585 if ((sym->attr.sequence || sym->attr.is_bind_c) && c->ts.type == BT_CLASS)
14586 {
14587 gfc_error ("Polymorphic component %s at %L in SEQUENCE or BIND(C) "
14588 "type %s", c->name, &c->loc, sym->name);
14589 return false;
14590 }
14591
14592 if (sym->attr.sequence)
14593 {
14594 if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.sequence == 0)
14595 {
14596 gfc_error ("Component %s of SEQUENCE type declared at %L does "
14597 "not have the SEQUENCE attribute",
14598 c->ts.u.derived->name, &sym->declared_at);
14599 return false;
14600 }
14601 }
14602
14603 if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.generic)
14604 c->ts.u.derived = gfc_find_dt_in_generic (c->ts.u.derived);
14605 else if (c->ts.type == BT_CLASS && c->attr.class_ok
14606 && CLASS_DATA (c)->ts.u.derived->attr.generic)
14607 CLASS_DATA (c)->ts.u.derived
14608 = gfc_find_dt_in_generic (CLASS_DATA (c)->ts.u.derived);
14609
14610 /* If an allocatable component derived type is of the same type as
14611 the enclosing derived type, we need a vtable generating so that
14612 the __deallocate procedure is created. */
14613 if ((c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
14614 && c->ts.u.derived == sym && c->attr.allocatable == 1)
14615 gfc_find_vtab (&c->ts);
14616
14617 /* Ensure that all the derived type components are put on the
14618 derived type list; even in formal namespaces, where derived type
14619 pointer components might not have been declared. */
14620 if (c->ts.type == BT_DERIVED
14621 && c->ts.u.derived
14622 && c->ts.u.derived->components
14623 && c->attr.pointer
14624 && sym != c->ts.u.derived)
14625 add_dt_to_dt_list (c->ts.u.derived);
14626
14627 if (!gfc_resolve_array_spec (c->as,
14628 !(c->attr.pointer || c->attr.proc_pointer
14629 || c->attr.allocatable)))
14630 return false;
14631
14632 if (c->initializer && !sym->attr.vtype
14633 && !c->attr.pdt_kind && !c->attr.pdt_len
14634 && !gfc_check_assign_symbol (sym, c, c->initializer))
14635 return false;
14636
14637 return true;
14638 }
14639
14640
14641 /* Be nice about the locus for a structure expression - show the locus of the
14642 first non-null sub-expression if we can. */
14643
14644 static locus *
14645 cons_where (gfc_expr *struct_expr)
14646 {
14647 gfc_constructor *cons;
14648
14649 gcc_assert (struct_expr && struct_expr->expr_type == EXPR_STRUCTURE);
14650
14651 cons = gfc_constructor_first (struct_expr->value.constructor);
14652 for (; cons; cons = gfc_constructor_next (cons))
14653 {
14654 if (cons->expr && cons->expr->expr_type != EXPR_NULL)
14655 return &cons->expr->where;
14656 }
14657
14658 return &struct_expr->where;
14659 }
14660
14661 /* Resolve the components of a structure type. Much less work than derived
14662 types. */
14663
14664 static bool
14665 resolve_fl_struct (gfc_symbol *sym)
14666 {
14667 gfc_component *c;
14668 gfc_expr *init = NULL;
14669 bool success;
14670
14671 /* Make sure UNIONs do not have overlapping initializers. */
14672 if (sym->attr.flavor == FL_UNION)
14673 {
14674 for (c = sym->components; c; c = c->next)
14675 {
14676 if (init && c->initializer)
14677 {
14678 gfc_error ("Conflicting initializers in union at %L and %L",
14679 cons_where (init), cons_where (c->initializer));
14680 gfc_free_expr (c->initializer);
14681 c->initializer = NULL;
14682 }
14683 if (init == NULL)
14684 init = c->initializer;
14685 }
14686 }
14687
14688 success = true;
14689 for (c = sym->components; c; c = c->next)
14690 if (!resolve_component (c, sym))
14691 success = false;
14692
14693 if (!success)
14694 return false;
14695
14696 if (sym->components)
14697 add_dt_to_dt_list (sym);
14698
14699 return true;
14700 }
14701
14702
14703 /* Resolve the components of a derived type. This does not have to wait until
14704 resolution stage, but can be done as soon as the dt declaration has been
14705 parsed. */
14706
14707 static bool
14708 resolve_fl_derived0 (gfc_symbol *sym)
14709 {
14710 gfc_symbol* super_type;
14711 gfc_component *c;
14712 gfc_formal_arglist *f;
14713 bool success;
14714
14715 if (sym->attr.unlimited_polymorphic)
14716 return true;
14717
14718 super_type = gfc_get_derived_super_type (sym);
14719
14720 /* F2008, C432. */
14721 if (super_type && sym->attr.coarray_comp && !super_type->attr.coarray_comp)
14722 {
14723 gfc_error ("As extending type %qs at %L has a coarray component, "
14724 "parent type %qs shall also have one", sym->name,
14725 &sym->declared_at, super_type->name);
14726 return false;
14727 }
14728
14729 /* Ensure the extended type gets resolved before we do. */
14730 if (super_type && !resolve_fl_derived0 (super_type))
14731 return false;
14732
14733 /* An ABSTRACT type must be extensible. */
14734 if (sym->attr.abstract && !gfc_type_is_extensible (sym))
14735 {
14736 gfc_error ("Non-extensible derived-type %qs at %L must not be ABSTRACT",
14737 sym->name, &sym->declared_at);
14738 return false;
14739 }
14740
14741 c = (sym->attr.is_class) ? sym->components->ts.u.derived->components
14742 : sym->components;
14743
14744 success = true;
14745 for ( ; c != NULL; c = c->next)
14746 if (!resolve_component (c, sym))
14747 success = false;
14748
14749 if (!success)
14750 return false;
14751
14752 /* Now add the caf token field, where needed. */
14753 if (flag_coarray != GFC_FCOARRAY_NONE
14754 && !sym->attr.is_class && !sym->attr.vtype)
14755 {
14756 for (c = sym->components; c; c = c->next)
14757 if (!c->attr.dimension && !c->attr.codimension
14758 && (c->attr.allocatable || c->attr.pointer))
14759 {
14760 char name[GFC_MAX_SYMBOL_LEN+9];
14761 gfc_component *token;
14762 sprintf (name, "_caf_%s", c->name);
14763 token = gfc_find_component (sym, name, true, true, NULL);
14764 if (token == NULL)
14765 {
14766 if (!gfc_add_component (sym, name, &token))
14767 return false;
14768 token->ts.type = BT_VOID;
14769 token->ts.kind = gfc_default_integer_kind;
14770 token->attr.access = ACCESS_PRIVATE;
14771 token->attr.artificial = 1;
14772 token->attr.caf_token = 1;
14773 }
14774 }
14775 }
14776
14777 check_defined_assignments (sym);
14778
14779 if (!sym->attr.defined_assign_comp && super_type)
14780 sym->attr.defined_assign_comp
14781 = super_type->attr.defined_assign_comp;
14782
14783 /* If this is a non-ABSTRACT type extending an ABSTRACT one, ensure that
14784 all DEFERRED bindings are overridden. */
14785 if (super_type && super_type->attr.abstract && !sym->attr.abstract
14786 && !sym->attr.is_class
14787 && !ensure_not_abstract (sym, super_type))
14788 return false;
14789
14790 /* Check that there is a component for every PDT parameter. */
14791 if (sym->attr.pdt_template)
14792 {
14793 for (f = sym->formal; f; f = f->next)
14794 {
14795 if (!f->sym)
14796 continue;
14797 c = gfc_find_component (sym, f->sym->name, true, true, NULL);
14798 if (c == NULL)
14799 {
14800 gfc_error ("Parameterized type %qs does not have a component "
14801 "corresponding to parameter %qs at %L", sym->name,
14802 f->sym->name, &sym->declared_at);
14803 break;
14804 }
14805 }
14806 }
14807
14808 /* Add derived type to the derived type list. */
14809 add_dt_to_dt_list (sym);
14810
14811 return true;
14812 }
14813
14814
14815 /* The following procedure does the full resolution of a derived type,
14816 including resolution of all type-bound procedures (if present). In contrast
14817 to 'resolve_fl_derived0' this can only be done after the module has been
14818 parsed completely. */
14819
14820 static bool
14821 resolve_fl_derived (gfc_symbol *sym)
14822 {
14823 gfc_symbol *gen_dt = NULL;
14824
14825 if (sym->attr.unlimited_polymorphic)
14826 return true;
14827
14828 if (!sym->attr.is_class)
14829 gfc_find_symbol (sym->name, sym->ns, 0, &gen_dt);
14830 if (gen_dt && gen_dt->generic && gen_dt->generic->next
14831 && (!gen_dt->generic->sym->attr.use_assoc
14832 || gen_dt->generic->sym->module != gen_dt->generic->next->sym->module)
14833 && !gfc_notify_std (GFC_STD_F2003, "Generic name %qs of function "
14834 "%qs at %L being the same name as derived "
14835 "type at %L", sym->name,
14836 gen_dt->generic->sym == sym
14837 ? gen_dt->generic->next->sym->name
14838 : gen_dt->generic->sym->name,
14839 gen_dt->generic->sym == sym
14840 ? &gen_dt->generic->next->sym->declared_at
14841 : &gen_dt->generic->sym->declared_at,
14842 &sym->declared_at))
14843 return false;
14844
14845 if (sym->components == NULL && !sym->attr.zero_comp && !sym->attr.use_assoc)
14846 {
14847 gfc_error ("Derived type %qs at %L has not been declared",
14848 sym->name, &sym->declared_at);
14849 return false;
14850 }
14851
14852 /* Resolve the finalizer procedures. */
14853 if (!gfc_resolve_finalizers (sym, NULL))
14854 return false;
14855
14856 if (sym->attr.is_class && sym->ts.u.derived == NULL)
14857 {
14858 /* Fix up incomplete CLASS symbols. */
14859 gfc_component *data = gfc_find_component (sym, "_data", true, true, NULL);
14860 gfc_component *vptr = gfc_find_component (sym, "_vptr", true, true, NULL);
14861
14862 /* Nothing more to do for unlimited polymorphic entities. */
14863 if (data->ts.u.derived->attr.unlimited_polymorphic)
14864 return true;
14865 else if (vptr->ts.u.derived == NULL)
14866 {
14867 gfc_symbol *vtab = gfc_find_derived_vtab (data->ts.u.derived);
14868 gcc_assert (vtab);
14869 vptr->ts.u.derived = vtab->ts.u.derived;
14870 if (!resolve_fl_derived0 (vptr->ts.u.derived))
14871 return false;
14872 }
14873 }
14874
14875 if (!resolve_fl_derived0 (sym))
14876 return false;
14877
14878 /* Resolve the type-bound procedures. */
14879 if (!resolve_typebound_procedures (sym))
14880 return false;
14881
14882 /* Generate module vtables subject to their accessibility and their not
14883 being vtables or pdt templates. If this is not done class declarations
14884 in external procedures wind up with their own version and so SELECT TYPE
14885 fails because the vptrs do not have the same address. */
14886 if (gfc_option.allow_std & GFC_STD_F2003
14887 && sym->ns->proc_name
14888 && sym->ns->proc_name->attr.flavor == FL_MODULE
14889 && sym->attr.access != ACCESS_PRIVATE
14890 && !(sym->attr.use_assoc || sym->attr.vtype || sym->attr.pdt_template))
14891 {
14892 gfc_symbol *vtab = gfc_find_derived_vtab (sym);
14893 gfc_set_sym_referenced (vtab);
14894 }
14895
14896 return true;
14897 }
14898
14899
14900 static bool
14901 resolve_fl_namelist (gfc_symbol *sym)
14902 {
14903 gfc_namelist *nl;
14904 gfc_symbol *nlsym;
14905
14906 for (nl = sym->namelist; nl; nl = nl->next)
14907 {
14908 /* Check again, the check in match only works if NAMELIST comes
14909 after the decl. */
14910 if (nl->sym->as && nl->sym->as->type == AS_ASSUMED_SIZE)
14911 {
14912 gfc_error ("Assumed size array %qs in namelist %qs at %L is not "
14913 "allowed", nl->sym->name, sym->name, &sym->declared_at);
14914 return false;
14915 }
14916
14917 if (nl->sym->as && nl->sym->as->type == AS_ASSUMED_SHAPE
14918 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST array object %qs "
14919 "with assumed shape in namelist %qs at %L",
14920 nl->sym->name, sym->name, &sym->declared_at))
14921 return false;
14922
14923 if (is_non_constant_shape_array (nl->sym)
14924 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST array object %qs "
14925 "with nonconstant shape in namelist %qs at %L",
14926 nl->sym->name, sym->name, &sym->declared_at))
14927 return false;
14928
14929 if (nl->sym->ts.type == BT_CHARACTER
14930 && (nl->sym->ts.u.cl->length == NULL
14931 || !gfc_is_constant_expr (nl->sym->ts.u.cl->length))
14932 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST object %qs with "
14933 "nonconstant character length in "
14934 "namelist %qs at %L", nl->sym->name,
14935 sym->name, &sym->declared_at))
14936 return false;
14937
14938 }
14939
14940 /* Reject PRIVATE objects in a PUBLIC namelist. */
14941 if (gfc_check_symbol_access (sym))
14942 {
14943 for (nl = sym->namelist; nl; nl = nl->next)
14944 {
14945 if (!nl->sym->attr.use_assoc
14946 && !is_sym_host_assoc (nl->sym, sym->ns)
14947 && !gfc_check_symbol_access (nl->sym))
14948 {
14949 gfc_error ("NAMELIST object %qs was declared PRIVATE and "
14950 "cannot be member of PUBLIC namelist %qs at %L",
14951 nl->sym->name, sym->name, &sym->declared_at);
14952 return false;
14953 }
14954
14955 if (nl->sym->ts.type == BT_DERIVED
14956 && (nl->sym->ts.u.derived->attr.alloc_comp
14957 || nl->sym->ts.u.derived->attr.pointer_comp))
14958 {
14959 if (!gfc_notify_std (GFC_STD_F2003, "NAMELIST object %qs in "
14960 "namelist %qs at %L with ALLOCATABLE "
14961 "or POINTER components", nl->sym->name,
14962 sym->name, &sym->declared_at))
14963 return false;
14964 return true;
14965 }
14966
14967 /* Types with private components that came here by USE-association. */
14968 if (nl->sym->ts.type == BT_DERIVED
14969 && derived_inaccessible (nl->sym->ts.u.derived))
14970 {
14971 gfc_error ("NAMELIST object %qs has use-associated PRIVATE "
14972 "components and cannot be member of namelist %qs at %L",
14973 nl->sym->name, sym->name, &sym->declared_at);
14974 return false;
14975 }
14976
14977 /* Types with private components that are defined in the same module. */
14978 if (nl->sym->ts.type == BT_DERIVED
14979 && !is_sym_host_assoc (nl->sym->ts.u.derived, sym->ns)
14980 && nl->sym->ts.u.derived->attr.private_comp)
14981 {
14982 gfc_error ("NAMELIST object %qs has PRIVATE components and "
14983 "cannot be a member of PUBLIC namelist %qs at %L",
14984 nl->sym->name, sym->name, &sym->declared_at);
14985 return false;
14986 }
14987 }
14988 }
14989
14990
14991 /* 14.1.2 A module or internal procedure represent local entities
14992 of the same type as a namelist member and so are not allowed. */
14993 for (nl = sym->namelist; nl; nl = nl->next)
14994 {
14995 if (nl->sym->ts.kind != 0 && nl->sym->attr.flavor == FL_VARIABLE)
14996 continue;
14997
14998 if (nl->sym->attr.function && nl->sym == nl->sym->result)
14999 if ((nl->sym == sym->ns->proc_name)
15000 ||
15001 (sym->ns->parent && nl->sym == sym->ns->parent->proc_name))
15002 continue;
15003
15004 nlsym = NULL;
15005 if (nl->sym->name)
15006 gfc_find_symbol (nl->sym->name, sym->ns, 1, &nlsym);
15007 if (nlsym && nlsym->attr.flavor == FL_PROCEDURE)
15008 {
15009 gfc_error ("PROCEDURE attribute conflicts with NAMELIST "
15010 "attribute in %qs at %L", nlsym->name,
15011 &sym->declared_at);
15012 return false;
15013 }
15014 }
15015
15016 return true;
15017 }
15018
15019
15020 static bool
15021 resolve_fl_parameter (gfc_symbol *sym)
15022 {
15023 /* A parameter array's shape needs to be constant. */
15024 if (sym->as != NULL
15025 && (sym->as->type == AS_DEFERRED
15026 || is_non_constant_shape_array (sym)))
15027 {
15028 gfc_error ("Parameter array %qs at %L cannot be automatic "
15029 "or of deferred shape", sym->name, &sym->declared_at);
15030 return false;
15031 }
15032
15033 /* Constraints on deferred type parameter. */
15034 if (!deferred_requirements (sym))
15035 return false;
15036
15037 /* Make sure a parameter that has been implicitly typed still
15038 matches the implicit type, since PARAMETER statements can precede
15039 IMPLICIT statements. */
15040 if (sym->attr.implicit_type
15041 && !gfc_compare_types (&sym->ts, gfc_get_default_type (sym->name,
15042 sym->ns)))
15043 {
15044 gfc_error ("Implicitly typed PARAMETER %qs at %L doesn't match a "
15045 "later IMPLICIT type", sym->name, &sym->declared_at);
15046 return false;
15047 }
15048
15049 /* Make sure the types of derived parameters are consistent. This
15050 type checking is deferred until resolution because the type may
15051 refer to a derived type from the host. */
15052 if (sym->ts.type == BT_DERIVED
15053 && !gfc_compare_types (&sym->ts, &sym->value->ts))
15054 {
15055 gfc_error ("Incompatible derived type in PARAMETER at %L",
15056 &sym->value->where);
15057 return false;
15058 }
15059
15060 /* F03:C509,C514. */
15061 if (sym->ts.type == BT_CLASS)
15062 {
15063 gfc_error ("CLASS variable %qs at %L cannot have the PARAMETER attribute",
15064 sym->name, &sym->declared_at);
15065 return false;
15066 }
15067
15068 return true;
15069 }
15070
15071
15072 /* Called by resolve_symbol to check PDTs. */
15073
15074 static void
15075 resolve_pdt (gfc_symbol* sym)
15076 {
15077 gfc_symbol *derived = NULL;
15078 gfc_actual_arglist *param;
15079 gfc_component *c;
15080 bool const_len_exprs = true;
15081 bool assumed_len_exprs = false;
15082 symbol_attribute *attr;
15083
15084 if (sym->ts.type == BT_DERIVED)
15085 {
15086 derived = sym->ts.u.derived;
15087 attr = &(sym->attr);
15088 }
15089 else if (sym->ts.type == BT_CLASS)
15090 {
15091 derived = CLASS_DATA (sym)->ts.u.derived;
15092 attr = &(CLASS_DATA (sym)->attr);
15093 }
15094 else
15095 gcc_unreachable ();
15096
15097 gcc_assert (derived->attr.pdt_type);
15098
15099 for (param = sym->param_list; param; param = param->next)
15100 {
15101 c = gfc_find_component (derived, param->name, false, true, NULL);
15102 gcc_assert (c);
15103 if (c->attr.pdt_kind)
15104 continue;
15105
15106 if (param->expr && !gfc_is_constant_expr (param->expr)
15107 && c->attr.pdt_len)
15108 const_len_exprs = false;
15109 else if (param->spec_type == SPEC_ASSUMED)
15110 assumed_len_exprs = true;
15111
15112 if (param->spec_type == SPEC_DEFERRED
15113 && !attr->allocatable && !attr->pointer)
15114 gfc_error ("The object %qs at %L has a deferred LEN "
15115 "parameter %qs and is neither allocatable "
15116 "nor a pointer", sym->name, &sym->declared_at,
15117 param->name);
15118
15119 }
15120
15121 if (!const_len_exprs
15122 && (sym->ns->proc_name->attr.is_main_program
15123 || sym->ns->proc_name->attr.flavor == FL_MODULE
15124 || sym->attr.save != SAVE_NONE))
15125 gfc_error ("The AUTOMATIC object %qs at %L must not have the "
15126 "SAVE attribute or be a variable declared in the "
15127 "main program, a module or a submodule(F08/C513)",
15128 sym->name, &sym->declared_at);
15129
15130 if (assumed_len_exprs && !(sym->attr.dummy
15131 || sym->attr.select_type_temporary || sym->attr.associate_var))
15132 gfc_error ("The object %qs at %L with ASSUMED type parameters "
15133 "must be a dummy or a SELECT TYPE selector(F08/4.2)",
15134 sym->name, &sym->declared_at);
15135 }
15136
15137
15138 /* Do anything necessary to resolve a symbol. Right now, we just
15139 assume that an otherwise unknown symbol is a variable. This sort
15140 of thing commonly happens for symbols in module. */
15141
15142 static void
15143 resolve_symbol (gfc_symbol *sym)
15144 {
15145 int check_constant, mp_flag;
15146 gfc_symtree *symtree;
15147 gfc_symtree *this_symtree;
15148 gfc_namespace *ns;
15149 gfc_component *c;
15150 symbol_attribute class_attr;
15151 gfc_array_spec *as;
15152 bool saved_specification_expr;
15153
15154 if (sym->resolved)
15155 return;
15156 sym->resolved = 1;
15157
15158 /* No symbol will ever have union type; only components can be unions.
15159 Union type declaration symbols have type BT_UNKNOWN but flavor FL_UNION
15160 (just like derived type declaration symbols have flavor FL_DERIVED). */
15161 gcc_assert (sym->ts.type != BT_UNION);
15162
15163 /* Coarrayed polymorphic objects with allocatable or pointer components are
15164 yet unsupported for -fcoarray=lib. */
15165 if (flag_coarray == GFC_FCOARRAY_LIB && sym->ts.type == BT_CLASS
15166 && sym->ts.u.derived && CLASS_DATA (sym)
15167 && CLASS_DATA (sym)->attr.codimension
15168 && (CLASS_DATA (sym)->ts.u.derived->attr.alloc_comp
15169 || CLASS_DATA (sym)->ts.u.derived->attr.pointer_comp))
15170 {
15171 gfc_error ("Sorry, allocatable/pointer components in polymorphic (CLASS) "
15172 "type coarrays at %L are unsupported", &sym->declared_at);
15173 return;
15174 }
15175
15176 if (sym->attr.artificial)
15177 return;
15178
15179 if (sym->attr.unlimited_polymorphic)
15180 return;
15181
15182 if (sym->attr.flavor == FL_UNKNOWN
15183 || (sym->attr.flavor == FL_PROCEDURE && !sym->attr.intrinsic
15184 && !sym->attr.generic && !sym->attr.external
15185 && sym->attr.if_source == IFSRC_UNKNOWN
15186 && sym->ts.type == BT_UNKNOWN))
15187 {
15188
15189 /* If we find that a flavorless symbol is an interface in one of the
15190 parent namespaces, find its symtree in this namespace, free the
15191 symbol and set the symtree to point to the interface symbol. */
15192 for (ns = gfc_current_ns->parent; ns; ns = ns->parent)
15193 {
15194 symtree = gfc_find_symtree (ns->sym_root, sym->name);
15195 if (symtree && (symtree->n.sym->generic ||
15196 (symtree->n.sym->attr.flavor == FL_PROCEDURE
15197 && sym->ns->construct_entities)))
15198 {
15199 this_symtree = gfc_find_symtree (gfc_current_ns->sym_root,
15200 sym->name);
15201 if (this_symtree->n.sym == sym)
15202 {
15203 symtree->n.sym->refs++;
15204 gfc_release_symbol (sym);
15205 this_symtree->n.sym = symtree->n.sym;
15206 return;
15207 }
15208 }
15209 }
15210
15211 /* Otherwise give it a flavor according to such attributes as
15212 it has. */
15213 if (sym->attr.flavor == FL_UNKNOWN && sym->attr.external == 0
15214 && sym->attr.intrinsic == 0)
15215 sym->attr.flavor = FL_VARIABLE;
15216 else if (sym->attr.flavor == FL_UNKNOWN)
15217 {
15218 sym->attr.flavor = FL_PROCEDURE;
15219 if (sym->attr.dimension)
15220 sym->attr.function = 1;
15221 }
15222 }
15223
15224 if (sym->attr.external && sym->ts.type != BT_UNKNOWN && !sym->attr.function)
15225 gfc_add_function (&sym->attr, sym->name, &sym->declared_at);
15226
15227 if (sym->attr.procedure && sym->attr.if_source != IFSRC_DECL
15228 && !resolve_procedure_interface (sym))
15229 return;
15230
15231 if (sym->attr.is_protected && !sym->attr.proc_pointer
15232 && (sym->attr.procedure || sym->attr.external))
15233 {
15234 if (sym->attr.external)
15235 gfc_error ("PROTECTED attribute conflicts with EXTERNAL attribute "
15236 "at %L", &sym->declared_at);
15237 else
15238 gfc_error ("PROCEDURE attribute conflicts with PROTECTED attribute "
15239 "at %L", &sym->declared_at);
15240
15241 return;
15242 }
15243
15244 if (sym->attr.flavor == FL_DERIVED && !resolve_fl_derived (sym))
15245 return;
15246
15247 else if ((sym->attr.flavor == FL_STRUCT || sym->attr.flavor == FL_UNION)
15248 && !resolve_fl_struct (sym))
15249 return;
15250
15251 /* Symbols that are module procedures with results (functions) have
15252 the types and array specification copied for type checking in
15253 procedures that call them, as well as for saving to a module
15254 file. These symbols can't stand the scrutiny that their results
15255 can. */
15256 mp_flag = (sym->result != NULL && sym->result != sym);
15257
15258 /* Make sure that the intrinsic is consistent with its internal
15259 representation. This needs to be done before assigning a default
15260 type to avoid spurious warnings. */
15261 if (sym->attr.flavor != FL_MODULE && sym->attr.intrinsic
15262 && !gfc_resolve_intrinsic (sym, &sym->declared_at))
15263 return;
15264
15265 /* Resolve associate names. */
15266 if (sym->assoc)
15267 resolve_assoc_var (sym, true);
15268
15269 /* Assign default type to symbols that need one and don't have one. */
15270 if (sym->ts.type == BT_UNKNOWN)
15271 {
15272 if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER)
15273 {
15274 gfc_set_default_type (sym, 1, NULL);
15275 }
15276
15277 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.external
15278 && !sym->attr.function && !sym->attr.subroutine
15279 && gfc_get_default_type (sym->name, sym->ns)->type == BT_UNKNOWN)
15280 gfc_add_subroutine (&sym->attr, sym->name, &sym->declared_at);
15281
15282 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.function)
15283 {
15284 /* The specific case of an external procedure should emit an error
15285 in the case that there is no implicit type. */
15286 if (!mp_flag)
15287 {
15288 if (!sym->attr.mixed_entry_master)
15289 gfc_set_default_type (sym, sym->attr.external, NULL);
15290 }
15291 else
15292 {
15293 /* Result may be in another namespace. */
15294 resolve_symbol (sym->result);
15295
15296 if (!sym->result->attr.proc_pointer)
15297 {
15298 sym->ts = sym->result->ts;
15299 sym->as = gfc_copy_array_spec (sym->result->as);
15300 sym->attr.dimension = sym->result->attr.dimension;
15301 sym->attr.pointer = sym->result->attr.pointer;
15302 sym->attr.allocatable = sym->result->attr.allocatable;
15303 sym->attr.contiguous = sym->result->attr.contiguous;
15304 }
15305 }
15306 }
15307 }
15308 else if (mp_flag && sym->attr.flavor == FL_PROCEDURE && sym->attr.function)
15309 {
15310 bool saved_specification_expr = specification_expr;
15311 specification_expr = true;
15312 gfc_resolve_array_spec (sym->result->as, false);
15313 specification_expr = saved_specification_expr;
15314 }
15315
15316 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
15317 {
15318 as = CLASS_DATA (sym)->as;
15319 class_attr = CLASS_DATA (sym)->attr;
15320 class_attr.pointer = class_attr.class_pointer;
15321 }
15322 else
15323 {
15324 class_attr = sym->attr;
15325 as = sym->as;
15326 }
15327
15328 /* F2008, C530. */
15329 if (sym->attr.contiguous
15330 && (!class_attr.dimension
15331 || (as->type != AS_ASSUMED_SHAPE && as->type != AS_ASSUMED_RANK
15332 && !class_attr.pointer)))
15333 {
15334 gfc_error ("%qs at %L has the CONTIGUOUS attribute but is not an "
15335 "array pointer or an assumed-shape or assumed-rank array",
15336 sym->name, &sym->declared_at);
15337 return;
15338 }
15339
15340 /* Assumed size arrays and assumed shape arrays must be dummy
15341 arguments. Array-spec's of implied-shape should have been resolved to
15342 AS_EXPLICIT already. */
15343
15344 if (as)
15345 {
15346 /* If AS_IMPLIED_SHAPE makes it to here, it must be a bad
15347 specification expression. */
15348 if (as->type == AS_IMPLIED_SHAPE)
15349 {
15350 int i;
15351 for (i=0; i<as->rank; i++)
15352 {
15353 if (as->lower[i] != NULL && as->upper[i] == NULL)
15354 {
15355 gfc_error ("Bad specification for assumed size array at %L",
15356 &as->lower[i]->where);
15357 return;
15358 }
15359 }
15360 gcc_unreachable();
15361 }
15362
15363 if (((as->type == AS_ASSUMED_SIZE && !as->cp_was_assumed)
15364 || as->type == AS_ASSUMED_SHAPE)
15365 && !sym->attr.dummy && !sym->attr.select_type_temporary)
15366 {
15367 if (as->type == AS_ASSUMED_SIZE)
15368 gfc_error ("Assumed size array at %L must be a dummy argument",
15369 &sym->declared_at);
15370 else
15371 gfc_error ("Assumed shape array at %L must be a dummy argument",
15372 &sym->declared_at);
15373 return;
15374 }
15375 /* TS 29113, C535a. */
15376 if (as->type == AS_ASSUMED_RANK && !sym->attr.dummy
15377 && !sym->attr.select_type_temporary
15378 && !(cs_base && cs_base->current
15379 && cs_base->current->op == EXEC_SELECT_RANK))
15380 {
15381 gfc_error ("Assumed-rank array at %L must be a dummy argument",
15382 &sym->declared_at);
15383 return;
15384 }
15385 if (as->type == AS_ASSUMED_RANK
15386 && (sym->attr.codimension || sym->attr.value))
15387 {
15388 gfc_error ("Assumed-rank array at %L may not have the VALUE or "
15389 "CODIMENSION attribute", &sym->declared_at);
15390 return;
15391 }
15392 }
15393
15394 /* Make sure symbols with known intent or optional are really dummy
15395 variable. Because of ENTRY statement, this has to be deferred
15396 until resolution time. */
15397
15398 if (!sym->attr.dummy
15399 && (sym->attr.optional || sym->attr.intent != INTENT_UNKNOWN))
15400 {
15401 gfc_error ("Symbol at %L is not a DUMMY variable", &sym->declared_at);
15402 return;
15403 }
15404
15405 if (sym->attr.value && !sym->attr.dummy)
15406 {
15407 gfc_error ("%qs at %L cannot have the VALUE attribute because "
15408 "it is not a dummy argument", sym->name, &sym->declared_at);
15409 return;
15410 }
15411
15412 if (sym->attr.value && sym->ts.type == BT_CHARACTER)
15413 {
15414 gfc_charlen *cl = sym->ts.u.cl;
15415 if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
15416 {
15417 gfc_error ("Character dummy variable %qs at %L with VALUE "
15418 "attribute must have constant length",
15419 sym->name, &sym->declared_at);
15420 return;
15421 }
15422
15423 if (sym->ts.is_c_interop
15424 && mpz_cmp_si (cl->length->value.integer, 1) != 0)
15425 {
15426 gfc_error ("C interoperable character dummy variable %qs at %L "
15427 "with VALUE attribute must have length one",
15428 sym->name, &sym->declared_at);
15429 return;
15430 }
15431 }
15432
15433 if (sym->ts.type == BT_DERIVED && !sym->attr.is_iso_c
15434 && sym->ts.u.derived->attr.generic)
15435 {
15436 sym->ts.u.derived = gfc_find_dt_in_generic (sym->ts.u.derived);
15437 if (!sym->ts.u.derived)
15438 {
15439 gfc_error ("The derived type %qs at %L is of type %qs, "
15440 "which has not been defined", sym->name,
15441 &sym->declared_at, sym->ts.u.derived->name);
15442 sym->ts.type = BT_UNKNOWN;
15443 return;
15444 }
15445 }
15446
15447 /* Use the same constraints as TYPE(*), except for the type check
15448 and that only scalars and assumed-size arrays are permitted. */
15449 if (sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
15450 {
15451 if (!sym->attr.dummy)
15452 {
15453 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall be "
15454 "a dummy argument", sym->name, &sym->declared_at);
15455 return;
15456 }
15457
15458 if (sym->ts.type != BT_ASSUMED && sym->ts.type != BT_INTEGER
15459 && sym->ts.type != BT_REAL && sym->ts.type != BT_LOGICAL
15460 && sym->ts.type != BT_COMPLEX)
15461 {
15462 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall be "
15463 "of type TYPE(*) or of an numeric intrinsic type",
15464 sym->name, &sym->declared_at);
15465 return;
15466 }
15467
15468 if (sym->attr.allocatable || sym->attr.codimension
15469 || sym->attr.pointer || sym->attr.value)
15470 {
15471 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may not "
15472 "have the ALLOCATABLE, CODIMENSION, POINTER or VALUE "
15473 "attribute", sym->name, &sym->declared_at);
15474 return;
15475 }
15476
15477 if (sym->attr.intent == INTENT_OUT)
15478 {
15479 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may not "
15480 "have the INTENT(OUT) attribute",
15481 sym->name, &sym->declared_at);
15482 return;
15483 }
15484 if (sym->attr.dimension && sym->as->type != AS_ASSUMED_SIZE)
15485 {
15486 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall "
15487 "either be a scalar or an assumed-size array",
15488 sym->name, &sym->declared_at);
15489 return;
15490 }
15491
15492 /* Set the type to TYPE(*) and add a dimension(*) to ensure
15493 NO_ARG_CHECK is correctly handled in trans*.c, e.g. with
15494 packing. */
15495 sym->ts.type = BT_ASSUMED;
15496 sym->as = gfc_get_array_spec ();
15497 sym->as->type = AS_ASSUMED_SIZE;
15498 sym->as->rank = 1;
15499 sym->as->lower[0] = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
15500 }
15501 else if (sym->ts.type == BT_ASSUMED)
15502 {
15503 /* TS 29113, C407a. */
15504 if (!sym->attr.dummy)
15505 {
15506 gfc_error ("Assumed type of variable %s at %L is only permitted "
15507 "for dummy variables", sym->name, &sym->declared_at);
15508 return;
15509 }
15510 if (sym->attr.allocatable || sym->attr.codimension
15511 || sym->attr.pointer || sym->attr.value)
15512 {
15513 gfc_error ("Assumed-type variable %s at %L may not have the "
15514 "ALLOCATABLE, CODIMENSION, POINTER or VALUE attribute",
15515 sym->name, &sym->declared_at);
15516 return;
15517 }
15518 if (sym->attr.intent == INTENT_OUT)
15519 {
15520 gfc_error ("Assumed-type variable %s at %L may not have the "
15521 "INTENT(OUT) attribute",
15522 sym->name, &sym->declared_at);
15523 return;
15524 }
15525 if (sym->attr.dimension && sym->as->type == AS_EXPLICIT)
15526 {
15527 gfc_error ("Assumed-type variable %s at %L shall not be an "
15528 "explicit-shape array", sym->name, &sym->declared_at);
15529 return;
15530 }
15531 }
15532
15533 /* If the symbol is marked as bind(c), that it is declared at module level
15534 scope and verify its type and kind. Do not do the latter for symbols
15535 that are implicitly typed because that is handled in
15536 gfc_set_default_type. Handle dummy arguments and procedure definitions
15537 separately. Also, anything that is use associated is not handled here
15538 but instead is handled in the module it is declared in. Finally, derived
15539 type definitions are allowed to be BIND(C) since that only implies that
15540 they're interoperable, and they are checked fully for interoperability
15541 when a variable is declared of that type. */
15542 if (sym->attr.is_bind_c && sym->attr.use_assoc == 0
15543 && sym->attr.dummy == 0 && sym->attr.flavor != FL_PROCEDURE
15544 && sym->attr.flavor != FL_DERIVED)
15545 {
15546 bool t = true;
15547
15548 /* First, make sure the variable is declared at the
15549 module-level scope (J3/04-007, Section 15.3). */
15550 if (sym->ns->proc_name->attr.flavor != FL_MODULE &&
15551 sym->attr.in_common == 0)
15552 {
15553 gfc_error ("Variable %qs at %L cannot be BIND(C) because it "
15554 "is neither a COMMON block nor declared at the "
15555 "module level scope", sym->name, &(sym->declared_at));
15556 t = false;
15557 }
15558 else if (sym->ts.type == BT_CHARACTER
15559 && (sym->ts.u.cl == NULL || sym->ts.u.cl->length == NULL
15560 || !gfc_is_constant_expr (sym->ts.u.cl->length)
15561 || mpz_cmp_si (sym->ts.u.cl->length->value.integer, 1) != 0))
15562 {
15563 gfc_error ("BIND(C) Variable %qs at %L must have length one",
15564 sym->name, &sym->declared_at);
15565 t = false;
15566 }
15567 else if (sym->common_head != NULL && sym->attr.implicit_type == 0)
15568 {
15569 t = verify_com_block_vars_c_interop (sym->common_head);
15570 }
15571 else if (sym->attr.implicit_type == 0)
15572 {
15573 /* If type() declaration, we need to verify that the components
15574 of the given type are all C interoperable, etc. */
15575 if (sym->ts.type == BT_DERIVED &&
15576 sym->ts.u.derived->attr.is_c_interop != 1)
15577 {
15578 /* Make sure the user marked the derived type as BIND(C). If
15579 not, call the verify routine. This could print an error
15580 for the derived type more than once if multiple variables
15581 of that type are declared. */
15582 if (sym->ts.u.derived->attr.is_bind_c != 1)
15583 verify_bind_c_derived_type (sym->ts.u.derived);
15584 t = false;
15585 }
15586
15587 /* Verify the variable itself as C interoperable if it
15588 is BIND(C). It is not possible for this to succeed if
15589 the verify_bind_c_derived_type failed, so don't have to handle
15590 any error returned by verify_bind_c_derived_type. */
15591 t = verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common,
15592 sym->common_block);
15593 }
15594
15595 if (!t)
15596 {
15597 /* clear the is_bind_c flag to prevent reporting errors more than
15598 once if something failed. */
15599 sym->attr.is_bind_c = 0;
15600 return;
15601 }
15602 }
15603
15604 /* If a derived type symbol has reached this point, without its
15605 type being declared, we have an error. Notice that most
15606 conditions that produce undefined derived types have already
15607 been dealt with. However, the likes of:
15608 implicit type(t) (t) ..... call foo (t) will get us here if
15609 the type is not declared in the scope of the implicit
15610 statement. Change the type to BT_UNKNOWN, both because it is so
15611 and to prevent an ICE. */
15612 if (sym->ts.type == BT_DERIVED && !sym->attr.is_iso_c
15613 && sym->ts.u.derived->components == NULL
15614 && !sym->ts.u.derived->attr.zero_comp)
15615 {
15616 gfc_error ("The derived type %qs at %L is of type %qs, "
15617 "which has not been defined", sym->name,
15618 &sym->declared_at, sym->ts.u.derived->name);
15619 sym->ts.type = BT_UNKNOWN;
15620 return;
15621 }
15622
15623 /* Make sure that the derived type has been resolved and that the
15624 derived type is visible in the symbol's namespace, if it is a
15625 module function and is not PRIVATE. */
15626 if (sym->ts.type == BT_DERIVED
15627 && sym->ts.u.derived->attr.use_assoc
15628 && sym->ns->proc_name
15629 && sym->ns->proc_name->attr.flavor == FL_MODULE
15630 && !resolve_fl_derived (sym->ts.u.derived))
15631 return;
15632
15633 /* Unless the derived-type declaration is use associated, Fortran 95
15634 does not allow public entries of private derived types.
15635 See 4.4.1 (F95) and 4.5.1.1 (F2003); and related interpretation
15636 161 in 95-006r3. */
15637 if (sym->ts.type == BT_DERIVED
15638 && sym->ns->proc_name && sym->ns->proc_name->attr.flavor == FL_MODULE
15639 && !sym->ts.u.derived->attr.use_assoc
15640 && gfc_check_symbol_access (sym)
15641 && !gfc_check_symbol_access (sym->ts.u.derived)
15642 && !gfc_notify_std (GFC_STD_F2003, "PUBLIC %s %qs at %L of PRIVATE "
15643 "derived type %qs",
15644 (sym->attr.flavor == FL_PARAMETER)
15645 ? "parameter" : "variable",
15646 sym->name, &sym->declared_at,
15647 sym->ts.u.derived->name))
15648 return;
15649
15650 /* F2008, C1302. */
15651 if (sym->ts.type == BT_DERIVED
15652 && ((sym->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
15653 && sym->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)
15654 || sym->ts.u.derived->attr.lock_comp)
15655 && !sym->attr.codimension && !sym->ts.u.derived->attr.coarray_comp)
15656 {
15657 gfc_error ("Variable %s at %L of type LOCK_TYPE or with subcomponent of "
15658 "type LOCK_TYPE must be a coarray", sym->name,
15659 &sym->declared_at);
15660 return;
15661 }
15662
15663 /* TS18508, C702/C703. */
15664 if (sym->ts.type == BT_DERIVED
15665 && ((sym->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
15666 && sym->ts.u.derived->intmod_sym_id == ISOFORTRAN_EVENT_TYPE)
15667 || sym->ts.u.derived->attr.event_comp)
15668 && !sym->attr.codimension && !sym->ts.u.derived->attr.coarray_comp)
15669 {
15670 gfc_error ("Variable %s at %L of type EVENT_TYPE or with subcomponent of "
15671 "type EVENT_TYPE must be a coarray", sym->name,
15672 &sym->declared_at);
15673 return;
15674 }
15675
15676 /* An assumed-size array with INTENT(OUT) shall not be of a type for which
15677 default initialization is defined (5.1.2.4.4). */
15678 if (sym->ts.type == BT_DERIVED
15679 && sym->attr.dummy
15680 && sym->attr.intent == INTENT_OUT
15681 && sym->as
15682 && sym->as->type == AS_ASSUMED_SIZE)
15683 {
15684 for (c = sym->ts.u.derived->components; c; c = c->next)
15685 {
15686 if (c->initializer)
15687 {
15688 gfc_error ("The INTENT(OUT) dummy argument %qs at %L is "
15689 "ASSUMED SIZE and so cannot have a default initializer",
15690 sym->name, &sym->declared_at);
15691 return;
15692 }
15693 }
15694 }
15695
15696 /* F2008, C542. */
15697 if (sym->ts.type == BT_DERIVED && sym->attr.dummy
15698 && sym->attr.intent == INTENT_OUT && sym->attr.lock_comp)
15699 {
15700 gfc_error ("Dummy argument %qs at %L of LOCK_TYPE shall not be "
15701 "INTENT(OUT)", sym->name, &sym->declared_at);
15702 return;
15703 }
15704
15705 /* TS18508. */
15706 if (sym->ts.type == BT_DERIVED && sym->attr.dummy
15707 && sym->attr.intent == INTENT_OUT && sym->attr.event_comp)
15708 {
15709 gfc_error ("Dummy argument %qs at %L of EVENT_TYPE shall not be "
15710 "INTENT(OUT)", sym->name, &sym->declared_at);
15711 return;
15712 }
15713
15714 /* F2008, C525. */
15715 if ((((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
15716 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
15717 && CLASS_DATA (sym)->attr.coarray_comp))
15718 || class_attr.codimension)
15719 && (sym->attr.result || sym->result == sym))
15720 {
15721 gfc_error ("Function result %qs at %L shall not be a coarray or have "
15722 "a coarray component", sym->name, &sym->declared_at);
15723 return;
15724 }
15725
15726 /* F2008, C524. */
15727 if (sym->attr.codimension && sym->ts.type == BT_DERIVED
15728 && sym->ts.u.derived->ts.is_iso_c)
15729 {
15730 gfc_error ("Variable %qs at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) "
15731 "shall not be a coarray", sym->name, &sym->declared_at);
15732 return;
15733 }
15734
15735 /* F2008, C525. */
15736 if (((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
15737 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
15738 && CLASS_DATA (sym)->attr.coarray_comp))
15739 && (class_attr.codimension || class_attr.pointer || class_attr.dimension
15740 || class_attr.allocatable))
15741 {
15742 gfc_error ("Variable %qs at %L with coarray component shall be a "
15743 "nonpointer, nonallocatable scalar, which is not a coarray",
15744 sym->name, &sym->declared_at);
15745 return;
15746 }
15747
15748 /* F2008, C526. The function-result case was handled above. */
15749 if (class_attr.codimension
15750 && !(class_attr.allocatable || sym->attr.dummy || sym->attr.save
15751 || sym->attr.select_type_temporary
15752 || sym->attr.associate_var
15753 || (sym->ns->save_all && !sym->attr.automatic)
15754 || sym->ns->proc_name->attr.flavor == FL_MODULE
15755 || sym->ns->proc_name->attr.is_main_program
15756 || sym->attr.function || sym->attr.result || sym->attr.use_assoc))
15757 {
15758 gfc_error ("Variable %qs at %L is a coarray and is not ALLOCATABLE, SAVE "
15759 "nor a dummy argument", sym->name, &sym->declared_at);
15760 return;
15761 }
15762 /* F2008, C528. */
15763 else if (class_attr.codimension && !sym->attr.select_type_temporary
15764 && !class_attr.allocatable && as && as->cotype == AS_DEFERRED)
15765 {
15766 gfc_error ("Coarray variable %qs at %L shall not have codimensions with "
15767 "deferred shape", sym->name, &sym->declared_at);
15768 return;
15769 }
15770 else if (class_attr.codimension && class_attr.allocatable && as
15771 && (as->cotype != AS_DEFERRED || as->type != AS_DEFERRED))
15772 {
15773 gfc_error ("Allocatable coarray variable %qs at %L must have "
15774 "deferred shape", sym->name, &sym->declared_at);
15775 return;
15776 }
15777
15778 /* F2008, C541. */
15779 if ((((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
15780 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
15781 && CLASS_DATA (sym)->attr.coarray_comp))
15782 || (class_attr.codimension && class_attr.allocatable))
15783 && sym->attr.dummy && sym->attr.intent == INTENT_OUT)
15784 {
15785 gfc_error ("Variable %qs at %L is INTENT(OUT) and can thus not be an "
15786 "allocatable coarray or have coarray components",
15787 sym->name, &sym->declared_at);
15788 return;
15789 }
15790
15791 if (class_attr.codimension && sym->attr.dummy
15792 && sym->ns->proc_name && sym->ns->proc_name->attr.is_bind_c)
15793 {
15794 gfc_error ("Coarray dummy variable %qs at %L not allowed in BIND(C) "
15795 "procedure %qs", sym->name, &sym->declared_at,
15796 sym->ns->proc_name->name);
15797 return;
15798 }
15799
15800 if (sym->ts.type == BT_LOGICAL
15801 && ((sym->attr.function && sym->attr.is_bind_c && sym->result == sym)
15802 || ((sym->attr.dummy || sym->attr.result) && sym->ns->proc_name
15803 && sym->ns->proc_name->attr.is_bind_c)))
15804 {
15805 int i;
15806 for (i = 0; gfc_logical_kinds[i].kind; i++)
15807 if (gfc_logical_kinds[i].kind == sym->ts.kind)
15808 break;
15809 if (!gfc_logical_kinds[i].c_bool && sym->attr.dummy
15810 && !gfc_notify_std (GFC_STD_GNU, "LOGICAL dummy argument %qs at "
15811 "%L with non-C_Bool kind in BIND(C) procedure "
15812 "%qs", sym->name, &sym->declared_at,
15813 sym->ns->proc_name->name))
15814 return;
15815 else if (!gfc_logical_kinds[i].c_bool
15816 && !gfc_notify_std (GFC_STD_GNU, "LOGICAL result variable "
15817 "%qs at %L with non-C_Bool kind in "
15818 "BIND(C) procedure %qs", sym->name,
15819 &sym->declared_at,
15820 sym->attr.function ? sym->name
15821 : sym->ns->proc_name->name))
15822 return;
15823 }
15824
15825 switch (sym->attr.flavor)
15826 {
15827 case FL_VARIABLE:
15828 if (!resolve_fl_variable (sym, mp_flag))
15829 return;
15830 break;
15831
15832 case FL_PROCEDURE:
15833 if (sym->formal && !sym->formal_ns)
15834 {
15835 /* Check that none of the arguments are a namelist. */
15836 gfc_formal_arglist *formal = sym->formal;
15837
15838 for (; formal; formal = formal->next)
15839 if (formal->sym && formal->sym->attr.flavor == FL_NAMELIST)
15840 {
15841 gfc_error ("Namelist %qs cannot be an argument to "
15842 "subroutine or function at %L",
15843 formal->sym->name, &sym->declared_at);
15844 return;
15845 }
15846 }
15847
15848 if (!resolve_fl_procedure (sym, mp_flag))
15849 return;
15850 break;
15851
15852 case FL_NAMELIST:
15853 if (!resolve_fl_namelist (sym))
15854 return;
15855 break;
15856
15857 case FL_PARAMETER:
15858 if (!resolve_fl_parameter (sym))
15859 return;
15860 break;
15861
15862 default:
15863 break;
15864 }
15865
15866 /* Resolve array specifier. Check as well some constraints
15867 on COMMON blocks. */
15868
15869 check_constant = sym->attr.in_common && !sym->attr.pointer;
15870
15871 /* Set the formal_arg_flag so that check_conflict will not throw
15872 an error for host associated variables in the specification
15873 expression for an array_valued function. */
15874 if ((sym->attr.function || sym->attr.result) && sym->as)
15875 formal_arg_flag = true;
15876
15877 saved_specification_expr = specification_expr;
15878 specification_expr = true;
15879 gfc_resolve_array_spec (sym->as, check_constant);
15880 specification_expr = saved_specification_expr;
15881
15882 formal_arg_flag = false;
15883
15884 /* Resolve formal namespaces. */
15885 if (sym->formal_ns && sym->formal_ns != gfc_current_ns
15886 && !sym->attr.contained && !sym->attr.intrinsic)
15887 gfc_resolve (sym->formal_ns);
15888
15889 /* Make sure the formal namespace is present. */
15890 if (sym->formal && !sym->formal_ns)
15891 {
15892 gfc_formal_arglist *formal = sym->formal;
15893 while (formal && !formal->sym)
15894 formal = formal->next;
15895
15896 if (formal)
15897 {
15898 sym->formal_ns = formal->sym->ns;
15899 if (sym->ns != formal->sym->ns)
15900 sym->formal_ns->refs++;
15901 }
15902 }
15903
15904 /* Check threadprivate restrictions. */
15905 if (sym->attr.threadprivate && !sym->attr.save
15906 && !(sym->ns->save_all && !sym->attr.automatic)
15907 && (!sym->attr.in_common
15908 && sym->module == NULL
15909 && (sym->ns->proc_name == NULL
15910 || sym->ns->proc_name->attr.flavor != FL_MODULE)))
15911 gfc_error ("Threadprivate at %L isn't SAVEd", &sym->declared_at);
15912
15913 /* Check omp declare target restrictions. */
15914 if (sym->attr.omp_declare_target
15915 && sym->attr.flavor == FL_VARIABLE
15916 && !sym->attr.save
15917 && !(sym->ns->save_all && !sym->attr.automatic)
15918 && (!sym->attr.in_common
15919 && sym->module == NULL
15920 && (sym->ns->proc_name == NULL
15921 || sym->ns->proc_name->attr.flavor != FL_MODULE)))
15922 gfc_error ("!$OMP DECLARE TARGET variable %qs at %L isn't SAVEd",
15923 sym->name, &sym->declared_at);
15924
15925 /* If we have come this far we can apply default-initializers, as
15926 described in 14.7.5, to those variables that have not already
15927 been assigned one. */
15928 if (sym->ts.type == BT_DERIVED
15929 && !sym->value
15930 && !sym->attr.allocatable
15931 && !sym->attr.alloc_comp)
15932 {
15933 symbol_attribute *a = &sym->attr;
15934
15935 if ((!a->save && !a->dummy && !a->pointer
15936 && !a->in_common && !a->use_assoc
15937 && a->referenced
15938 && !((a->function || a->result)
15939 && (!a->dimension
15940 || sym->ts.u.derived->attr.alloc_comp
15941 || sym->ts.u.derived->attr.pointer_comp))
15942 && !(a->function && sym != sym->result))
15943 || (a->dummy && a->intent == INTENT_OUT && !a->pointer))
15944 apply_default_init (sym);
15945 else if (a->function && sym->result && a->access != ACCESS_PRIVATE
15946 && (sym->ts.u.derived->attr.alloc_comp
15947 || sym->ts.u.derived->attr.pointer_comp))
15948 /* Mark the result symbol to be referenced, when it has allocatable
15949 components. */
15950 sym->result->attr.referenced = 1;
15951 }
15952
15953 if (sym->ts.type == BT_CLASS && sym->ns == gfc_current_ns
15954 && sym->attr.dummy && sym->attr.intent == INTENT_OUT
15955 && !CLASS_DATA (sym)->attr.class_pointer
15956 && !CLASS_DATA (sym)->attr.allocatable)
15957 apply_default_init (sym);
15958
15959 /* If this symbol has a type-spec, check it. */
15960 if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER
15961 || (sym->attr.flavor == FL_PROCEDURE && sym->attr.function))
15962 if (!resolve_typespec_used (&sym->ts, &sym->declared_at, sym->name))
15963 return;
15964
15965 if (sym->param_list)
15966 resolve_pdt (sym);
15967 }
15968
15969
15970 /************* Resolve DATA statements *************/
15971
15972 static struct
15973 {
15974 gfc_data_value *vnode;
15975 mpz_t left;
15976 }
15977 values;
15978
15979
15980 /* Advance the values structure to point to the next value in the data list. */
15981
15982 static bool
15983 next_data_value (void)
15984 {
15985 while (mpz_cmp_ui (values.left, 0) == 0)
15986 {
15987
15988 if (values.vnode->next == NULL)
15989 return false;
15990
15991 values.vnode = values.vnode->next;
15992 mpz_set (values.left, values.vnode->repeat);
15993 }
15994
15995 return true;
15996 }
15997
15998
15999 static bool
16000 check_data_variable (gfc_data_variable *var, locus *where)
16001 {
16002 gfc_expr *e;
16003 mpz_t size;
16004 mpz_t offset;
16005 bool t;
16006 ar_type mark = AR_UNKNOWN;
16007 int i;
16008 mpz_t section_index[GFC_MAX_DIMENSIONS];
16009 gfc_ref *ref;
16010 gfc_array_ref *ar;
16011 gfc_symbol *sym;
16012 int has_pointer;
16013
16014 if (!gfc_resolve_expr (var->expr))
16015 return false;
16016
16017 ar = NULL;
16018 mpz_init_set_si (offset, 0);
16019 e = var->expr;
16020
16021 if (e->expr_type == EXPR_FUNCTION && e->value.function.isym
16022 && e->value.function.isym->id == GFC_ISYM_CAF_GET)
16023 e = e->value.function.actual->expr;
16024
16025 if (e->expr_type != EXPR_VARIABLE)
16026 {
16027 gfc_error ("Expecting definable entity near %L", where);
16028 return false;
16029 }
16030
16031 sym = e->symtree->n.sym;
16032
16033 if (sym->ns->is_block_data && !sym->attr.in_common)
16034 {
16035 gfc_error ("BLOCK DATA element %qs at %L must be in COMMON",
16036 sym->name, &sym->declared_at);
16037 return false;
16038 }
16039
16040 if (e->ref == NULL && sym->as)
16041 {
16042 gfc_error ("DATA array %qs at %L must be specified in a previous"
16043 " declaration", sym->name, where);
16044 return false;
16045 }
16046
16047 if (gfc_is_coindexed (e))
16048 {
16049 gfc_error ("DATA element %qs at %L cannot have a coindex", sym->name,
16050 where);
16051 return false;
16052 }
16053
16054 has_pointer = sym->attr.pointer;
16055
16056 for (ref = e->ref; ref; ref = ref->next)
16057 {
16058 if (ref->type == REF_COMPONENT && ref->u.c.component->attr.pointer)
16059 has_pointer = 1;
16060
16061 if (has_pointer)
16062 {
16063 if (ref->type == REF_ARRAY && ref->u.ar.type != AR_FULL)
16064 {
16065 gfc_error ("DATA element %qs at %L is a pointer and so must "
16066 "be a full array", sym->name, where);
16067 return false;
16068 }
16069
16070 if (values.vnode->expr->expr_type == EXPR_CONSTANT)
16071 {
16072 gfc_error ("DATA object near %L has the pointer attribute "
16073 "and the corresponding DATA value is not a valid "
16074 "initial-data-target", where);
16075 return false;
16076 }
16077 }
16078 }
16079
16080 if (e->rank == 0 || has_pointer)
16081 {
16082 mpz_init_set_ui (size, 1);
16083 ref = NULL;
16084 }
16085 else
16086 {
16087 ref = e->ref;
16088
16089 /* Find the array section reference. */
16090 for (ref = e->ref; ref; ref = ref->next)
16091 {
16092 if (ref->type != REF_ARRAY)
16093 continue;
16094 if (ref->u.ar.type == AR_ELEMENT)
16095 continue;
16096 break;
16097 }
16098 gcc_assert (ref);
16099
16100 /* Set marks according to the reference pattern. */
16101 switch (ref->u.ar.type)
16102 {
16103 case AR_FULL:
16104 mark = AR_FULL;
16105 break;
16106
16107 case AR_SECTION:
16108 ar = &ref->u.ar;
16109 /* Get the start position of array section. */
16110 gfc_get_section_index (ar, section_index, &offset);
16111 mark = AR_SECTION;
16112 break;
16113
16114 default:
16115 gcc_unreachable ();
16116 }
16117
16118 if (!gfc_array_size (e, &size))
16119 {
16120 gfc_error ("Nonconstant array section at %L in DATA statement",
16121 where);
16122 mpz_clear (offset);
16123 return false;
16124 }
16125 }
16126
16127 t = true;
16128
16129 while (mpz_cmp_ui (size, 0) > 0)
16130 {
16131 if (!next_data_value ())
16132 {
16133 gfc_error ("DATA statement at %L has more variables than values",
16134 where);
16135 t = false;
16136 break;
16137 }
16138
16139 t = gfc_check_assign (var->expr, values.vnode->expr, 0);
16140 if (!t)
16141 break;
16142
16143 /* If we have more than one element left in the repeat count,
16144 and we have more than one element left in the target variable,
16145 then create a range assignment. */
16146 /* FIXME: Only done for full arrays for now, since array sections
16147 seem tricky. */
16148 if (mark == AR_FULL && ref && ref->next == NULL
16149 && mpz_cmp_ui (values.left, 1) > 0 && mpz_cmp_ui (size, 1) > 0)
16150 {
16151 mpz_t range;
16152
16153 if (mpz_cmp (size, values.left) >= 0)
16154 {
16155 mpz_init_set (range, values.left);
16156 mpz_sub (size, size, values.left);
16157 mpz_set_ui (values.left, 0);
16158 }
16159 else
16160 {
16161 mpz_init_set (range, size);
16162 mpz_sub (values.left, values.left, size);
16163 mpz_set_ui (size, 0);
16164 }
16165
16166 t = gfc_assign_data_value (var->expr, values.vnode->expr,
16167 offset, &range);
16168
16169 mpz_add (offset, offset, range);
16170 mpz_clear (range);
16171
16172 if (!t)
16173 break;
16174 }
16175
16176 /* Assign initial value to symbol. */
16177 else
16178 {
16179 mpz_sub_ui (values.left, values.left, 1);
16180 mpz_sub_ui (size, size, 1);
16181
16182 t = gfc_assign_data_value (var->expr, values.vnode->expr,
16183 offset, NULL);
16184 if (!t)
16185 break;
16186
16187 if (mark == AR_FULL)
16188 mpz_add_ui (offset, offset, 1);
16189
16190 /* Modify the array section indexes and recalculate the offset
16191 for next element. */
16192 else if (mark == AR_SECTION)
16193 gfc_advance_section (section_index, ar, &offset);
16194 }
16195 }
16196
16197 if (mark == AR_SECTION)
16198 {
16199 for (i = 0; i < ar->dimen; i++)
16200 mpz_clear (section_index[i]);
16201 }
16202
16203 mpz_clear (size);
16204 mpz_clear (offset);
16205
16206 return t;
16207 }
16208
16209
16210 static bool traverse_data_var (gfc_data_variable *, locus *);
16211
16212 /* Iterate over a list of elements in a DATA statement. */
16213
16214 static bool
16215 traverse_data_list (gfc_data_variable *var, locus *where)
16216 {
16217 mpz_t trip;
16218 iterator_stack frame;
16219 gfc_expr *e, *start, *end, *step;
16220 bool retval = true;
16221
16222 mpz_init (frame.value);
16223 mpz_init (trip);
16224
16225 start = gfc_copy_expr (var->iter.start);
16226 end = gfc_copy_expr (var->iter.end);
16227 step = gfc_copy_expr (var->iter.step);
16228
16229 if (!gfc_simplify_expr (start, 1)
16230 || start->expr_type != EXPR_CONSTANT)
16231 {
16232 gfc_error ("start of implied-do loop at %L could not be "
16233 "simplified to a constant value", &start->where);
16234 retval = false;
16235 goto cleanup;
16236 }
16237 if (!gfc_simplify_expr (end, 1)
16238 || end->expr_type != EXPR_CONSTANT)
16239 {
16240 gfc_error ("end of implied-do loop at %L could not be "
16241 "simplified to a constant value", &start->where);
16242 retval = false;
16243 goto cleanup;
16244 }
16245 if (!gfc_simplify_expr (step, 1)
16246 || step->expr_type != EXPR_CONSTANT)
16247 {
16248 gfc_error ("step of implied-do loop at %L could not be "
16249 "simplified to a constant value", &start->where);
16250 retval = false;
16251 goto cleanup;
16252 }
16253
16254 mpz_set (trip, end->value.integer);
16255 mpz_sub (trip, trip, start->value.integer);
16256 mpz_add (trip, trip, step->value.integer);
16257
16258 mpz_div (trip, trip, step->value.integer);
16259
16260 mpz_set (frame.value, start->value.integer);
16261
16262 frame.prev = iter_stack;
16263 frame.variable = var->iter.var->symtree;
16264 iter_stack = &frame;
16265
16266 while (mpz_cmp_ui (trip, 0) > 0)
16267 {
16268 if (!traverse_data_var (var->list, where))
16269 {
16270 retval = false;
16271 goto cleanup;
16272 }
16273
16274 e = gfc_copy_expr (var->expr);
16275 if (!gfc_simplify_expr (e, 1))
16276 {
16277 gfc_free_expr (e);
16278 retval = false;
16279 goto cleanup;
16280 }
16281
16282 mpz_add (frame.value, frame.value, step->value.integer);
16283
16284 mpz_sub_ui (trip, trip, 1);
16285 }
16286
16287 cleanup:
16288 mpz_clear (frame.value);
16289 mpz_clear (trip);
16290
16291 gfc_free_expr (start);
16292 gfc_free_expr (end);
16293 gfc_free_expr (step);
16294
16295 iter_stack = frame.prev;
16296 return retval;
16297 }
16298
16299
16300 /* Type resolve variables in the variable list of a DATA statement. */
16301
16302 static bool
16303 traverse_data_var (gfc_data_variable *var, locus *where)
16304 {
16305 bool t;
16306
16307 for (; var; var = var->next)
16308 {
16309 if (var->expr == NULL)
16310 t = traverse_data_list (var, where);
16311 else
16312 t = check_data_variable (var, where);
16313
16314 if (!t)
16315 return false;
16316 }
16317
16318 return true;
16319 }
16320
16321
16322 /* Resolve the expressions and iterators associated with a data statement.
16323 This is separate from the assignment checking because data lists should
16324 only be resolved once. */
16325
16326 static bool
16327 resolve_data_variables (gfc_data_variable *d)
16328 {
16329 for (; d; d = d->next)
16330 {
16331 if (d->list == NULL)
16332 {
16333 if (!gfc_resolve_expr (d->expr))
16334 return false;
16335 }
16336 else
16337 {
16338 if (!gfc_resolve_iterator (&d->iter, false, true))
16339 return false;
16340
16341 if (!resolve_data_variables (d->list))
16342 return false;
16343 }
16344 }
16345
16346 return true;
16347 }
16348
16349
16350 /* Resolve a single DATA statement. We implement this by storing a pointer to
16351 the value list into static variables, and then recursively traversing the
16352 variables list, expanding iterators and such. */
16353
16354 static void
16355 resolve_data (gfc_data *d)
16356 {
16357
16358 if (!resolve_data_variables (d->var))
16359 return;
16360
16361 values.vnode = d->value;
16362 if (d->value == NULL)
16363 mpz_set_ui (values.left, 0);
16364 else
16365 mpz_set (values.left, d->value->repeat);
16366
16367 if (!traverse_data_var (d->var, &d->where))
16368 return;
16369
16370 /* At this point, we better not have any values left. */
16371
16372 if (next_data_value ())
16373 gfc_error ("DATA statement at %L has more values than variables",
16374 &d->where);
16375 }
16376
16377
16378 /* 12.6 Constraint: In a pure subprogram any variable which is in common or
16379 accessed by host or use association, is a dummy argument to a pure function,
16380 is a dummy argument with INTENT (IN) to a pure subroutine, or an object that
16381 is storage associated with any such variable, shall not be used in the
16382 following contexts: (clients of this function). */
16383
16384 /* Determines if a variable is not 'pure', i.e., not assignable within a pure
16385 procedure. Returns zero if assignment is OK, nonzero if there is a
16386 problem. */
16387 int
16388 gfc_impure_variable (gfc_symbol *sym)
16389 {
16390 gfc_symbol *proc;
16391 gfc_namespace *ns;
16392
16393 if (sym->attr.use_assoc || sym->attr.in_common)
16394 return 1;
16395
16396 /* Check if the symbol's ns is inside the pure procedure. */
16397 for (ns = gfc_current_ns; ns; ns = ns->parent)
16398 {
16399 if (ns == sym->ns)
16400 break;
16401 if (ns->proc_name->attr.flavor == FL_PROCEDURE && !sym->attr.function)
16402 return 1;
16403 }
16404
16405 proc = sym->ns->proc_name;
16406 if (sym->attr.dummy
16407 && ((proc->attr.subroutine && sym->attr.intent == INTENT_IN)
16408 || proc->attr.function))
16409 return 1;
16410
16411 /* TODO: Sort out what can be storage associated, if anything, and include
16412 it here. In principle equivalences should be scanned but it does not
16413 seem to be possible to storage associate an impure variable this way. */
16414 return 0;
16415 }
16416
16417
16418 /* Test whether a symbol is pure or not. For a NULL pointer, checks if the
16419 current namespace is inside a pure procedure. */
16420
16421 int
16422 gfc_pure (gfc_symbol *sym)
16423 {
16424 symbol_attribute attr;
16425 gfc_namespace *ns;
16426
16427 if (sym == NULL)
16428 {
16429 /* Check if the current namespace or one of its parents
16430 belongs to a pure procedure. */
16431 for (ns = gfc_current_ns; ns; ns = ns->parent)
16432 {
16433 sym = ns->proc_name;
16434 if (sym == NULL)
16435 return 0;
16436 attr = sym->attr;
16437 if (attr.flavor == FL_PROCEDURE && attr.pure)
16438 return 1;
16439 }
16440 return 0;
16441 }
16442
16443 attr = sym->attr;
16444
16445 return attr.flavor == FL_PROCEDURE && attr.pure;
16446 }
16447
16448
16449 /* Test whether a symbol is implicitly pure or not. For a NULL pointer,
16450 checks if the current namespace is implicitly pure. Note that this
16451 function returns false for a PURE procedure. */
16452
16453 int
16454 gfc_implicit_pure (gfc_symbol *sym)
16455 {
16456 gfc_namespace *ns;
16457
16458 if (sym == NULL)
16459 {
16460 /* Check if the current procedure is implicit_pure. Walk up
16461 the procedure list until we find a procedure. */
16462 for (ns = gfc_current_ns; ns; ns = ns->parent)
16463 {
16464 sym = ns->proc_name;
16465 if (sym == NULL)
16466 return 0;
16467
16468 if (sym->attr.flavor == FL_PROCEDURE)
16469 break;
16470 }
16471 }
16472
16473 return sym->attr.flavor == FL_PROCEDURE && sym->attr.implicit_pure
16474 && !sym->attr.pure;
16475 }
16476
16477
16478 void
16479 gfc_unset_implicit_pure (gfc_symbol *sym)
16480 {
16481 gfc_namespace *ns;
16482
16483 if (sym == NULL)
16484 {
16485 /* Check if the current procedure is implicit_pure. Walk up
16486 the procedure list until we find a procedure. */
16487 for (ns = gfc_current_ns; ns; ns = ns->parent)
16488 {
16489 sym = ns->proc_name;
16490 if (sym == NULL)
16491 return;
16492
16493 if (sym->attr.flavor == FL_PROCEDURE)
16494 break;
16495 }
16496 }
16497
16498 if (sym->attr.flavor == FL_PROCEDURE)
16499 sym->attr.implicit_pure = 0;
16500 else
16501 sym->attr.pure = 0;
16502 }
16503
16504
16505 /* Test whether the current procedure is elemental or not. */
16506
16507 int
16508 gfc_elemental (gfc_symbol *sym)
16509 {
16510 symbol_attribute attr;
16511
16512 if (sym == NULL)
16513 sym = gfc_current_ns->proc_name;
16514 if (sym == NULL)
16515 return 0;
16516 attr = sym->attr;
16517
16518 return attr.flavor == FL_PROCEDURE && attr.elemental;
16519 }
16520
16521
16522 /* Warn about unused labels. */
16523
16524 static void
16525 warn_unused_fortran_label (gfc_st_label *label)
16526 {
16527 if (label == NULL)
16528 return;
16529
16530 warn_unused_fortran_label (label->left);
16531
16532 if (label->defined == ST_LABEL_UNKNOWN)
16533 return;
16534
16535 switch (label->referenced)
16536 {
16537 case ST_LABEL_UNKNOWN:
16538 gfc_warning (OPT_Wunused_label, "Label %d at %L defined but not used",
16539 label->value, &label->where);
16540 break;
16541
16542 case ST_LABEL_BAD_TARGET:
16543 gfc_warning (OPT_Wunused_label,
16544 "Label %d at %L defined but cannot be used",
16545 label->value, &label->where);
16546 break;
16547
16548 default:
16549 break;
16550 }
16551
16552 warn_unused_fortran_label (label->right);
16553 }
16554
16555
16556 /* Returns the sequence type of a symbol or sequence. */
16557
16558 static seq_type
16559 sequence_type (gfc_typespec ts)
16560 {
16561 seq_type result;
16562 gfc_component *c;
16563
16564 switch (ts.type)
16565 {
16566 case BT_DERIVED:
16567
16568 if (ts.u.derived->components == NULL)
16569 return SEQ_NONDEFAULT;
16570
16571 result = sequence_type (ts.u.derived->components->ts);
16572 for (c = ts.u.derived->components->next; c; c = c->next)
16573 if (sequence_type (c->ts) != result)
16574 return SEQ_MIXED;
16575
16576 return result;
16577
16578 case BT_CHARACTER:
16579 if (ts.kind != gfc_default_character_kind)
16580 return SEQ_NONDEFAULT;
16581
16582 return SEQ_CHARACTER;
16583
16584 case BT_INTEGER:
16585 if (ts.kind != gfc_default_integer_kind)
16586 return SEQ_NONDEFAULT;
16587
16588 return SEQ_NUMERIC;
16589
16590 case BT_REAL:
16591 if (!(ts.kind == gfc_default_real_kind
16592 || ts.kind == gfc_default_double_kind))
16593 return SEQ_NONDEFAULT;
16594
16595 return SEQ_NUMERIC;
16596
16597 case BT_COMPLEX:
16598 if (ts.kind != gfc_default_complex_kind)
16599 return SEQ_NONDEFAULT;
16600
16601 return SEQ_NUMERIC;
16602
16603 case BT_LOGICAL:
16604 if (ts.kind != gfc_default_logical_kind)
16605 return SEQ_NONDEFAULT;
16606
16607 return SEQ_NUMERIC;
16608
16609 default:
16610 return SEQ_NONDEFAULT;
16611 }
16612 }
16613
16614
16615 /* Resolve derived type EQUIVALENCE object. */
16616
16617 static bool
16618 resolve_equivalence_derived (gfc_symbol *derived, gfc_symbol *sym, gfc_expr *e)
16619 {
16620 gfc_component *c = derived->components;
16621
16622 if (!derived)
16623 return true;
16624
16625 /* Shall not be an object of nonsequence derived type. */
16626 if (!derived->attr.sequence)
16627 {
16628 gfc_error ("Derived type variable %qs at %L must have SEQUENCE "
16629 "attribute to be an EQUIVALENCE object", sym->name,
16630 &e->where);
16631 return false;
16632 }
16633
16634 /* Shall not have allocatable components. */
16635 if (derived->attr.alloc_comp)
16636 {
16637 gfc_error ("Derived type variable %qs at %L cannot have ALLOCATABLE "
16638 "components to be an EQUIVALENCE object",sym->name,
16639 &e->where);
16640 return false;
16641 }
16642
16643 if (sym->attr.in_common && gfc_has_default_initializer (sym->ts.u.derived))
16644 {
16645 gfc_error ("Derived type variable %qs at %L with default "
16646 "initialization cannot be in EQUIVALENCE with a variable "
16647 "in COMMON", sym->name, &e->where);
16648 return false;
16649 }
16650
16651 for (; c ; c = c->next)
16652 {
16653 if (gfc_bt_struct (c->ts.type)
16654 && (!resolve_equivalence_derived(c->ts.u.derived, sym, e)))
16655 return false;
16656
16657 /* Shall not be an object of sequence derived type containing a pointer
16658 in the structure. */
16659 if (c->attr.pointer)
16660 {
16661 gfc_error ("Derived type variable %qs at %L with pointer "
16662 "component(s) cannot be an EQUIVALENCE object",
16663 sym->name, &e->where);
16664 return false;
16665 }
16666 }
16667 return true;
16668 }
16669
16670
16671 /* Resolve equivalence object.
16672 An EQUIVALENCE object shall not be a dummy argument, a pointer, a target,
16673 an allocatable array, an object of nonsequence derived type, an object of
16674 sequence derived type containing a pointer at any level of component
16675 selection, an automatic object, a function name, an entry name, a result
16676 name, a named constant, a structure component, or a subobject of any of
16677 the preceding objects. A substring shall not have length zero. A
16678 derived type shall not have components with default initialization nor
16679 shall two objects of an equivalence group be initialized.
16680 Either all or none of the objects shall have an protected attribute.
16681 The simple constraints are done in symbol.c(check_conflict) and the rest
16682 are implemented here. */
16683
16684 static void
16685 resolve_equivalence (gfc_equiv *eq)
16686 {
16687 gfc_symbol *sym;
16688 gfc_symbol *first_sym;
16689 gfc_expr *e;
16690 gfc_ref *r;
16691 locus *last_where = NULL;
16692 seq_type eq_type, last_eq_type;
16693 gfc_typespec *last_ts;
16694 int object, cnt_protected;
16695 const char *msg;
16696
16697 last_ts = &eq->expr->symtree->n.sym->ts;
16698
16699 first_sym = eq->expr->symtree->n.sym;
16700
16701 cnt_protected = 0;
16702
16703 for (object = 1; eq; eq = eq->eq, object++)
16704 {
16705 e = eq->expr;
16706
16707 e->ts = e->symtree->n.sym->ts;
16708 /* match_varspec might not know yet if it is seeing
16709 array reference or substring reference, as it doesn't
16710 know the types. */
16711 if (e->ref && e->ref->type == REF_ARRAY)
16712 {
16713 gfc_ref *ref = e->ref;
16714 sym = e->symtree->n.sym;
16715
16716 if (sym->attr.dimension)
16717 {
16718 ref->u.ar.as = sym->as;
16719 ref = ref->next;
16720 }
16721
16722 /* For substrings, convert REF_ARRAY into REF_SUBSTRING. */
16723 if (e->ts.type == BT_CHARACTER
16724 && ref
16725 && ref->type == REF_ARRAY
16726 && ref->u.ar.dimen == 1
16727 && ref->u.ar.dimen_type[0] == DIMEN_RANGE
16728 && ref->u.ar.stride[0] == NULL)
16729 {
16730 gfc_expr *start = ref->u.ar.start[0];
16731 gfc_expr *end = ref->u.ar.end[0];
16732 void *mem = NULL;
16733
16734 /* Optimize away the (:) reference. */
16735 if (start == NULL && end == NULL)
16736 {
16737 if (e->ref == ref)
16738 e->ref = ref->next;
16739 else
16740 e->ref->next = ref->next;
16741 mem = ref;
16742 }
16743 else
16744 {
16745 ref->type = REF_SUBSTRING;
16746 if (start == NULL)
16747 start = gfc_get_int_expr (gfc_charlen_int_kind,
16748 NULL, 1);
16749 ref->u.ss.start = start;
16750 if (end == NULL && e->ts.u.cl)
16751 end = gfc_copy_expr (e->ts.u.cl->length);
16752 ref->u.ss.end = end;
16753 ref->u.ss.length = e->ts.u.cl;
16754 e->ts.u.cl = NULL;
16755 }
16756 ref = ref->next;
16757 free (mem);
16758 }
16759
16760 /* Any further ref is an error. */
16761 if (ref)
16762 {
16763 gcc_assert (ref->type == REF_ARRAY);
16764 gfc_error ("Syntax error in EQUIVALENCE statement at %L",
16765 &ref->u.ar.where);
16766 continue;
16767 }
16768 }
16769
16770 if (!gfc_resolve_expr (e))
16771 continue;
16772
16773 sym = e->symtree->n.sym;
16774
16775 if (sym->attr.is_protected)
16776 cnt_protected++;
16777 if (cnt_protected > 0 && cnt_protected != object)
16778 {
16779 gfc_error ("Either all or none of the objects in the "
16780 "EQUIVALENCE set at %L shall have the "
16781 "PROTECTED attribute",
16782 &e->where);
16783 break;
16784 }
16785
16786 /* Shall not equivalence common block variables in a PURE procedure. */
16787 if (sym->ns->proc_name
16788 && sym->ns->proc_name->attr.pure
16789 && sym->attr.in_common)
16790 {
16791 /* Need to check for symbols that may have entered the pure
16792 procedure via a USE statement. */
16793 bool saw_sym = false;
16794 if (sym->ns->use_stmts)
16795 {
16796 gfc_use_rename *r;
16797 for (r = sym->ns->use_stmts->rename; r; r = r->next)
16798 if (strcmp(r->use_name, sym->name) == 0) saw_sym = true;
16799 }
16800 else
16801 saw_sym = true;
16802
16803 if (saw_sym)
16804 gfc_error ("COMMON block member %qs at %L cannot be an "
16805 "EQUIVALENCE object in the pure procedure %qs",
16806 sym->name, &e->where, sym->ns->proc_name->name);
16807 break;
16808 }
16809
16810 /* Shall not be a named constant. */
16811 if (e->expr_type == EXPR_CONSTANT)
16812 {
16813 gfc_error ("Named constant %qs at %L cannot be an EQUIVALENCE "
16814 "object", sym->name, &e->where);
16815 continue;
16816 }
16817
16818 if (e->ts.type == BT_DERIVED
16819 && !resolve_equivalence_derived (e->ts.u.derived, sym, e))
16820 continue;
16821
16822 /* Check that the types correspond correctly:
16823 Note 5.28:
16824 A numeric sequence structure may be equivalenced to another sequence
16825 structure, an object of default integer type, default real type, double
16826 precision real type, default logical type such that components of the
16827 structure ultimately only become associated to objects of the same
16828 kind. A character sequence structure may be equivalenced to an object
16829 of default character kind or another character sequence structure.
16830 Other objects may be equivalenced only to objects of the same type and
16831 kind parameters. */
16832
16833 /* Identical types are unconditionally OK. */
16834 if (object == 1 || gfc_compare_types (last_ts, &sym->ts))
16835 goto identical_types;
16836
16837 last_eq_type = sequence_type (*last_ts);
16838 eq_type = sequence_type (sym->ts);
16839
16840 /* Since the pair of objects is not of the same type, mixed or
16841 non-default sequences can be rejected. */
16842
16843 msg = "Sequence %s with mixed components in EQUIVALENCE "
16844 "statement at %L with different type objects";
16845 if ((object ==2
16846 && last_eq_type == SEQ_MIXED
16847 && !gfc_notify_std (GFC_STD_GNU, msg, first_sym->name, last_where))
16848 || (eq_type == SEQ_MIXED
16849 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where)))
16850 continue;
16851
16852 msg = "Non-default type object or sequence %s in EQUIVALENCE "
16853 "statement at %L with objects of different type";
16854 if ((object ==2
16855 && last_eq_type == SEQ_NONDEFAULT
16856 && !gfc_notify_std (GFC_STD_GNU, msg, first_sym->name, last_where))
16857 || (eq_type == SEQ_NONDEFAULT
16858 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where)))
16859 continue;
16860
16861 msg ="Non-CHARACTER object %qs in default CHARACTER "
16862 "EQUIVALENCE statement at %L";
16863 if (last_eq_type == SEQ_CHARACTER
16864 && eq_type != SEQ_CHARACTER
16865 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where))
16866 continue;
16867
16868 msg ="Non-NUMERIC object %qs in default NUMERIC "
16869 "EQUIVALENCE statement at %L";
16870 if (last_eq_type == SEQ_NUMERIC
16871 && eq_type != SEQ_NUMERIC
16872 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where))
16873 continue;
16874
16875 identical_types:
16876
16877 last_ts =&sym->ts;
16878 last_where = &e->where;
16879
16880 if (!e->ref)
16881 continue;
16882
16883 /* Shall not be an automatic array. */
16884 if (e->ref->type == REF_ARRAY && is_non_constant_shape_array (sym))
16885 {
16886 gfc_error ("Array %qs at %L with non-constant bounds cannot be "
16887 "an EQUIVALENCE object", sym->name, &e->where);
16888 continue;
16889 }
16890
16891 r = e->ref;
16892 while (r)
16893 {
16894 /* Shall not be a structure component. */
16895 if (r->type == REF_COMPONENT)
16896 {
16897 gfc_error ("Structure component %qs at %L cannot be an "
16898 "EQUIVALENCE object",
16899 r->u.c.component->name, &e->where);
16900 break;
16901 }
16902
16903 /* A substring shall not have length zero. */
16904 if (r->type == REF_SUBSTRING)
16905 {
16906 if (compare_bound (r->u.ss.start, r->u.ss.end) == CMP_GT)
16907 {
16908 gfc_error ("Substring at %L has length zero",
16909 &r->u.ss.start->where);
16910 break;
16911 }
16912 }
16913 r = r->next;
16914 }
16915 }
16916 }
16917
16918
16919 /* Function called by resolve_fntype to flag other symbols used in the
16920 length type parameter specification of function results. */
16921
16922 static bool
16923 flag_fn_result_spec (gfc_expr *expr,
16924 gfc_symbol *sym,
16925 int *f ATTRIBUTE_UNUSED)
16926 {
16927 gfc_namespace *ns;
16928 gfc_symbol *s;
16929
16930 if (expr->expr_type == EXPR_VARIABLE)
16931 {
16932 s = expr->symtree->n.sym;
16933 for (ns = s->ns; ns; ns = ns->parent)
16934 if (!ns->parent)
16935 break;
16936
16937 if (sym == s)
16938 {
16939 gfc_error ("Self reference in character length expression "
16940 "for %qs at %L", sym->name, &expr->where);
16941 return true;
16942 }
16943
16944 if (!s->fn_result_spec
16945 && s->attr.flavor == FL_PARAMETER)
16946 {
16947 /* Function contained in a module.... */
16948 if (ns->proc_name && ns->proc_name->attr.flavor == FL_MODULE)
16949 {
16950 gfc_symtree *st;
16951 s->fn_result_spec = 1;
16952 /* Make sure that this symbol is translated as a module
16953 variable. */
16954 st = gfc_get_unique_symtree (ns);
16955 st->n.sym = s;
16956 s->refs++;
16957 }
16958 /* ... which is use associated and called. */
16959 else if (s->attr.use_assoc || s->attr.used_in_submodule
16960 ||
16961 /* External function matched with an interface. */
16962 (s->ns->proc_name
16963 && ((s->ns == ns
16964 && s->ns->proc_name->attr.if_source == IFSRC_DECL)
16965 || s->ns->proc_name->attr.if_source == IFSRC_IFBODY)
16966 && s->ns->proc_name->attr.function))
16967 s->fn_result_spec = 1;
16968 }
16969 }
16970 return false;
16971 }
16972
16973
16974 /* Resolve function and ENTRY types, issue diagnostics if needed. */
16975
16976 static void
16977 resolve_fntype (gfc_namespace *ns)
16978 {
16979 gfc_entry_list *el;
16980 gfc_symbol *sym;
16981
16982 if (ns->proc_name == NULL || !ns->proc_name->attr.function)
16983 return;
16984
16985 /* If there are any entries, ns->proc_name is the entry master
16986 synthetic symbol and ns->entries->sym actual FUNCTION symbol. */
16987 if (ns->entries)
16988 sym = ns->entries->sym;
16989 else
16990 sym = ns->proc_name;
16991 if (sym->result == sym
16992 && sym->ts.type == BT_UNKNOWN
16993 && !gfc_set_default_type (sym, 0, NULL)
16994 && !sym->attr.untyped)
16995 {
16996 gfc_error ("Function %qs at %L has no IMPLICIT type",
16997 sym->name, &sym->declared_at);
16998 sym->attr.untyped = 1;
16999 }
17000
17001 if (sym->ts.type == BT_DERIVED && !sym->ts.u.derived->attr.use_assoc
17002 && !sym->attr.contained
17003 && !gfc_check_symbol_access (sym->ts.u.derived)
17004 && gfc_check_symbol_access (sym))
17005 {
17006 gfc_notify_std (GFC_STD_F2003, "PUBLIC function %qs at "
17007 "%L of PRIVATE type %qs", sym->name,
17008 &sym->declared_at, sym->ts.u.derived->name);
17009 }
17010
17011 if (ns->entries)
17012 for (el = ns->entries->next; el; el = el->next)
17013 {
17014 if (el->sym->result == el->sym
17015 && el->sym->ts.type == BT_UNKNOWN
17016 && !gfc_set_default_type (el->sym, 0, NULL)
17017 && !el->sym->attr.untyped)
17018 {
17019 gfc_error ("ENTRY %qs at %L has no IMPLICIT type",
17020 el->sym->name, &el->sym->declared_at);
17021 el->sym->attr.untyped = 1;
17022 }
17023 }
17024
17025 if (sym->ts.type == BT_CHARACTER)
17026 gfc_traverse_expr (sym->ts.u.cl->length, sym, flag_fn_result_spec, 0);
17027 }
17028
17029
17030 /* 12.3.2.1.1 Defined operators. */
17031
17032 static bool
17033 check_uop_procedure (gfc_symbol *sym, locus where)
17034 {
17035 gfc_formal_arglist *formal;
17036
17037 if (!sym->attr.function)
17038 {
17039 gfc_error ("User operator procedure %qs at %L must be a FUNCTION",
17040 sym->name, &where);
17041 return false;
17042 }
17043
17044 if (sym->ts.type == BT_CHARACTER
17045 && !((sym->ts.u.cl && sym->ts.u.cl->length) || sym->ts.deferred)
17046 && !(sym->result && ((sym->result->ts.u.cl
17047 && sym->result->ts.u.cl->length) || sym->result->ts.deferred)))
17048 {
17049 gfc_error ("User operator procedure %qs at %L cannot be assumed "
17050 "character length", sym->name, &where);
17051 return false;
17052 }
17053
17054 formal = gfc_sym_get_dummy_args (sym);
17055 if (!formal || !formal->sym)
17056 {
17057 gfc_error ("User operator procedure %qs at %L must have at least "
17058 "one argument", sym->name, &where);
17059 return false;
17060 }
17061
17062 if (formal->sym->attr.intent != INTENT_IN)
17063 {
17064 gfc_error ("First argument of operator interface at %L must be "
17065 "INTENT(IN)", &where);
17066 return false;
17067 }
17068
17069 if (formal->sym->attr.optional)
17070 {
17071 gfc_error ("First argument of operator interface at %L cannot be "
17072 "optional", &where);
17073 return false;
17074 }
17075
17076 formal = formal->next;
17077 if (!formal || !formal->sym)
17078 return true;
17079
17080 if (formal->sym->attr.intent != INTENT_IN)
17081 {
17082 gfc_error ("Second argument of operator interface at %L must be "
17083 "INTENT(IN)", &where);
17084 return false;
17085 }
17086
17087 if (formal->sym->attr.optional)
17088 {
17089 gfc_error ("Second argument of operator interface at %L cannot be "
17090 "optional", &where);
17091 return false;
17092 }
17093
17094 if (formal->next)
17095 {
17096 gfc_error ("Operator interface at %L must have, at most, two "
17097 "arguments", &where);
17098 return false;
17099 }
17100
17101 return true;
17102 }
17103
17104 static void
17105 gfc_resolve_uops (gfc_symtree *symtree)
17106 {
17107 gfc_interface *itr;
17108
17109 if (symtree == NULL)
17110 return;
17111
17112 gfc_resolve_uops (symtree->left);
17113 gfc_resolve_uops (symtree->right);
17114
17115 for (itr = symtree->n.uop->op; itr; itr = itr->next)
17116 check_uop_procedure (itr->sym, itr->sym->declared_at);
17117 }
17118
17119
17120 /* Examine all of the expressions associated with a program unit,
17121 assign types to all intermediate expressions, make sure that all
17122 assignments are to compatible types and figure out which names
17123 refer to which functions or subroutines. It doesn't check code
17124 block, which is handled by gfc_resolve_code. */
17125
17126 static void
17127 resolve_types (gfc_namespace *ns)
17128 {
17129 gfc_namespace *n;
17130 gfc_charlen *cl;
17131 gfc_data *d;
17132 gfc_equiv *eq;
17133 gfc_namespace* old_ns = gfc_current_ns;
17134 bool recursive = ns->proc_name && ns->proc_name->attr.recursive;
17135
17136 if (ns->types_resolved)
17137 return;
17138
17139 /* Check that all IMPLICIT types are ok. */
17140 if (!ns->seen_implicit_none)
17141 {
17142 unsigned letter;
17143 for (letter = 0; letter != GFC_LETTERS; ++letter)
17144 if (ns->set_flag[letter]
17145 && !resolve_typespec_used (&ns->default_type[letter],
17146 &ns->implicit_loc[letter], NULL))
17147 return;
17148 }
17149
17150 gfc_current_ns = ns;
17151
17152 resolve_entries (ns);
17153
17154 resolve_common_vars (&ns->blank_common, false);
17155 resolve_common_blocks (ns->common_root);
17156
17157 resolve_contained_functions (ns);
17158
17159 if (ns->proc_name && ns->proc_name->attr.flavor == FL_PROCEDURE
17160 && ns->proc_name->attr.if_source == IFSRC_IFBODY)
17161 gfc_resolve_formal_arglist (ns->proc_name);
17162
17163 gfc_traverse_ns (ns, resolve_bind_c_derived_types);
17164
17165 for (cl = ns->cl_list; cl; cl = cl->next)
17166 resolve_charlen (cl);
17167
17168 gfc_traverse_ns (ns, resolve_symbol);
17169
17170 resolve_fntype (ns);
17171
17172 for (n = ns->contained; n; n = n->sibling)
17173 {
17174 if (gfc_pure (ns->proc_name) && !gfc_pure (n->proc_name))
17175 gfc_error ("Contained procedure %qs at %L of a PURE procedure must "
17176 "also be PURE", n->proc_name->name,
17177 &n->proc_name->declared_at);
17178
17179 resolve_types (n);
17180 }
17181
17182 forall_flag = 0;
17183 gfc_do_concurrent_flag = 0;
17184 gfc_check_interfaces (ns);
17185
17186 gfc_traverse_ns (ns, resolve_values);
17187
17188 if (ns->save_all || (!flag_automatic && !recursive))
17189 gfc_save_all (ns);
17190
17191 iter_stack = NULL;
17192 for (d = ns->data; d; d = d->next)
17193 resolve_data (d);
17194
17195 iter_stack = NULL;
17196 gfc_traverse_ns (ns, gfc_formalize_init_value);
17197
17198 gfc_traverse_ns (ns, gfc_verify_binding_labels);
17199
17200 for (eq = ns->equiv; eq; eq = eq->next)
17201 resolve_equivalence (eq);
17202
17203 /* Warn about unused labels. */
17204 if (warn_unused_label)
17205 warn_unused_fortran_label (ns->st_labels);
17206
17207 gfc_resolve_uops (ns->uop_root);
17208
17209 gfc_traverse_ns (ns, gfc_verify_DTIO_procedures);
17210
17211 gfc_resolve_omp_declare_simd (ns);
17212
17213 gfc_resolve_omp_udrs (ns->omp_udr_root);
17214
17215 ns->types_resolved = 1;
17216
17217 gfc_current_ns = old_ns;
17218 }
17219
17220
17221 /* Call gfc_resolve_code recursively. */
17222
17223 static void
17224 resolve_codes (gfc_namespace *ns)
17225 {
17226 gfc_namespace *n;
17227 bitmap_obstack old_obstack;
17228
17229 if (ns->resolved == 1)
17230 return;
17231
17232 for (n = ns->contained; n; n = n->sibling)
17233 resolve_codes (n);
17234
17235 gfc_current_ns = ns;
17236
17237 /* Don't clear 'cs_base' if this is the namespace of a BLOCK construct. */
17238 if (!(ns->proc_name && ns->proc_name->attr.flavor == FL_LABEL))
17239 cs_base = NULL;
17240
17241 /* Set to an out of range value. */
17242 current_entry_id = -1;
17243
17244 old_obstack = labels_obstack;
17245 bitmap_obstack_initialize (&labels_obstack);
17246
17247 gfc_resolve_oacc_declare (ns);
17248 gfc_resolve_oacc_routines (ns);
17249 gfc_resolve_omp_local_vars (ns);
17250 gfc_resolve_code (ns->code, ns);
17251
17252 bitmap_obstack_release (&labels_obstack);
17253 labels_obstack = old_obstack;
17254 }
17255
17256
17257 /* This function is called after a complete program unit has been compiled.
17258 Its purpose is to examine all of the expressions associated with a program
17259 unit, assign types to all intermediate expressions, make sure that all
17260 assignments are to compatible types and figure out which names refer to
17261 which functions or subroutines. */
17262
17263 void
17264 gfc_resolve (gfc_namespace *ns)
17265 {
17266 gfc_namespace *old_ns;
17267 code_stack *old_cs_base;
17268 struct gfc_omp_saved_state old_omp_state;
17269
17270 if (ns->resolved)
17271 return;
17272
17273 ns->resolved = -1;
17274 old_ns = gfc_current_ns;
17275 old_cs_base = cs_base;
17276
17277 /* As gfc_resolve can be called during resolution of an OpenMP construct
17278 body, we should clear any state associated to it, so that say NS's
17279 DO loops are not interpreted as OpenMP loops. */
17280 if (!ns->construct_entities)
17281 gfc_omp_save_and_clear_state (&old_omp_state);
17282
17283 resolve_types (ns);
17284 component_assignment_level = 0;
17285 resolve_codes (ns);
17286
17287 gfc_current_ns = old_ns;
17288 cs_base = old_cs_base;
17289 ns->resolved = 1;
17290
17291 gfc_run_passes (ns);
17292
17293 if (!ns->construct_entities)
17294 gfc_omp_restore_state (&old_omp_state);
17295 }