Fix PR fortran/93500, ICE on invalid.
[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 if (op1 == NULL && op2 == NULL)
3996 return false;
3997
3998 dual_locus_error = false;
3999
4000 /* op1 and op2 cannot both be BOZ. */
4001 if (op1 && op1->ts.type == BT_BOZ
4002 && op2 && op2->ts.type == BT_BOZ)
4003 {
4004 gfc_error ("Operands at %L and %L cannot appear as operands of "
4005 "binary operator %qs", &op1->where, &op2->where,
4006 gfc_op2string (e->value.op.op));
4007 return false;
4008 }
4009
4010 if ((op1 && op1->expr_type == EXPR_NULL)
4011 || (op2 && op2->expr_type == EXPR_NULL))
4012 {
4013 sprintf (msg, _("Invalid context for NULL() pointer at %%L"));
4014 goto bad_op;
4015 }
4016
4017 switch (e->value.op.op)
4018 {
4019 case INTRINSIC_UPLUS:
4020 case INTRINSIC_UMINUS:
4021 if (op1->ts.type == BT_INTEGER
4022 || op1->ts.type == BT_REAL
4023 || op1->ts.type == BT_COMPLEX)
4024 {
4025 e->ts = op1->ts;
4026 break;
4027 }
4028
4029 sprintf (msg, _("Operand of unary numeric operator %%<%s%%> at %%L is %s"),
4030 gfc_op2string (e->value.op.op), gfc_typename (e));
4031 goto bad_op;
4032
4033 case INTRINSIC_PLUS:
4034 case INTRINSIC_MINUS:
4035 case INTRINSIC_TIMES:
4036 case INTRINSIC_DIVIDE:
4037 case INTRINSIC_POWER:
4038 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
4039 {
4040 gfc_type_convert_binary (e, 1);
4041 break;
4042 }
4043
4044 if (op1->ts.type == BT_DERIVED || op2->ts.type == BT_DERIVED)
4045 sprintf (msg,
4046 _("Unexpected derived-type entities in binary intrinsic "
4047 "numeric operator %%<%s%%> at %%L"),
4048 gfc_op2string (e->value.op.op));
4049 else
4050 sprintf (msg,
4051 _("Operands of binary numeric operator %%<%s%%> at %%L are %s/%s"),
4052 gfc_op2string (e->value.op.op), gfc_typename (op1),
4053 gfc_typename (op2));
4054 goto bad_op;
4055
4056 case INTRINSIC_CONCAT:
4057 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
4058 && op1->ts.kind == op2->ts.kind)
4059 {
4060 e->ts.type = BT_CHARACTER;
4061 e->ts.kind = op1->ts.kind;
4062 break;
4063 }
4064
4065 sprintf (msg,
4066 _("Operands of string concatenation operator at %%L are %s/%s"),
4067 gfc_typename (op1), gfc_typename (op2));
4068 goto bad_op;
4069
4070 case INTRINSIC_AND:
4071 case INTRINSIC_OR:
4072 case INTRINSIC_EQV:
4073 case INTRINSIC_NEQV:
4074 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
4075 {
4076 e->ts.type = BT_LOGICAL;
4077 e->ts.kind = gfc_kind_max (op1, op2);
4078 if (op1->ts.kind < e->ts.kind)
4079 gfc_convert_type (op1, &e->ts, 2);
4080 else if (op2->ts.kind < e->ts.kind)
4081 gfc_convert_type (op2, &e->ts, 2);
4082
4083 if (flag_frontend_optimize &&
4084 (e->value.op.op == INTRINSIC_AND || e->value.op.op == INTRINSIC_OR))
4085 {
4086 /* Warn about short-circuiting
4087 with impure function as second operand. */
4088 bool op2_f = false;
4089 gfc_expr_walker (&op2, impure_function_callback, &op2_f);
4090 }
4091 break;
4092 }
4093
4094 /* Logical ops on integers become bitwise ops with -fdec. */
4095 else if (flag_dec
4096 && (op1->ts.type == BT_INTEGER || op2->ts.type == BT_INTEGER))
4097 {
4098 e->ts.type = BT_INTEGER;
4099 e->ts.kind = gfc_kind_max (op1, op2);
4100 if (op1->ts.type != e->ts.type || op1->ts.kind != e->ts.kind)
4101 gfc_convert_type (op1, &e->ts, 1);
4102 if (op2->ts.type != e->ts.type || op2->ts.kind != e->ts.kind)
4103 gfc_convert_type (op2, &e->ts, 1);
4104 e = logical_to_bitwise (e);
4105 goto simplify_op;
4106 }
4107
4108 sprintf (msg, _("Operands of logical operator %%<%s%%> at %%L are %s/%s"),
4109 gfc_op2string (e->value.op.op), gfc_typename (op1),
4110 gfc_typename (op2));
4111
4112 goto bad_op;
4113
4114 case INTRINSIC_NOT:
4115 /* Logical ops on integers become bitwise ops with -fdec. */
4116 if (flag_dec && op1->ts.type == BT_INTEGER)
4117 {
4118 e->ts.type = BT_INTEGER;
4119 e->ts.kind = op1->ts.kind;
4120 e = logical_to_bitwise (e);
4121 goto simplify_op;
4122 }
4123
4124 if (op1->ts.type == BT_LOGICAL)
4125 {
4126 e->ts.type = BT_LOGICAL;
4127 e->ts.kind = op1->ts.kind;
4128 break;
4129 }
4130
4131 sprintf (msg, _("Operand of .not. operator at %%L is %s"),
4132 gfc_typename (op1));
4133 goto bad_op;
4134
4135 case INTRINSIC_GT:
4136 case INTRINSIC_GT_OS:
4137 case INTRINSIC_GE:
4138 case INTRINSIC_GE_OS:
4139 case INTRINSIC_LT:
4140 case INTRINSIC_LT_OS:
4141 case INTRINSIC_LE:
4142 case INTRINSIC_LE_OS:
4143 if (op1->ts.type == BT_COMPLEX || op2->ts.type == BT_COMPLEX)
4144 {
4145 strcpy (msg, _("COMPLEX quantities cannot be compared at %L"));
4146 goto bad_op;
4147 }
4148
4149 /* Fall through. */
4150
4151 case INTRINSIC_EQ:
4152 case INTRINSIC_EQ_OS:
4153 case INTRINSIC_NE:
4154 case INTRINSIC_NE_OS:
4155
4156 if (flag_dec
4157 && is_character_based (op1->ts.type)
4158 && is_character_based (op2->ts.type))
4159 {
4160 convert_hollerith_to_character (op1);
4161 convert_hollerith_to_character (op2);
4162 }
4163
4164 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
4165 && op1->ts.kind == op2->ts.kind)
4166 {
4167 e->ts.type = BT_LOGICAL;
4168 e->ts.kind = gfc_default_logical_kind;
4169 break;
4170 }
4171
4172 /* If op1 is BOZ, then op2 is not!. Try to convert to type of op2. */
4173 if (op1->ts.type == BT_BOZ)
4174 {
4175 if (gfc_invalid_boz ("BOZ literal constant near %L cannot appear as "
4176 "an operand of a relational operator",
4177 &op1->where))
4178 return false;
4179
4180 if (op2->ts.type == BT_INTEGER && !gfc_boz2int (op1, op2->ts.kind))
4181 return false;
4182
4183 if (op2->ts.type == BT_REAL && !gfc_boz2real (op1, op2->ts.kind))
4184 return false;
4185 }
4186
4187 /* If op2 is BOZ, then op1 is not!. Try to convert to type of op2. */
4188 if (op2->ts.type == BT_BOZ)
4189 {
4190 if (gfc_invalid_boz ("BOZ literal constant near %L cannot appear as "
4191 "an operand of a relational operator",
4192 &op2->where))
4193 return false;
4194
4195 if (op1->ts.type == BT_INTEGER && !gfc_boz2int (op2, op1->ts.kind))
4196 return false;
4197
4198 if (op1->ts.type == BT_REAL && !gfc_boz2real (op2, op1->ts.kind))
4199 return false;
4200 }
4201 if (flag_dec
4202 && op1->ts.type == BT_HOLLERITH && gfc_numeric_ts (&op2->ts))
4203 convert_to_numeric (op1, op2);
4204
4205 if (flag_dec
4206 && gfc_numeric_ts (&op1->ts) && op2->ts.type == BT_HOLLERITH)
4207 convert_to_numeric (op2, op1);
4208
4209 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
4210 {
4211 gfc_type_convert_binary (e, 1);
4212
4213 e->ts.type = BT_LOGICAL;
4214 e->ts.kind = gfc_default_logical_kind;
4215
4216 if (warn_compare_reals)
4217 {
4218 gfc_intrinsic_op op = e->value.op.op;
4219
4220 /* Type conversion has made sure that the types of op1 and op2
4221 agree, so it is only necessary to check the first one. */
4222 if ((op1->ts.type == BT_REAL || op1->ts.type == BT_COMPLEX)
4223 && (op == INTRINSIC_EQ || op == INTRINSIC_EQ_OS
4224 || op == INTRINSIC_NE || op == INTRINSIC_NE_OS))
4225 {
4226 const char *msg;
4227
4228 if (op == INTRINSIC_EQ || op == INTRINSIC_EQ_OS)
4229 msg = "Equality comparison for %s at %L";
4230 else
4231 msg = "Inequality comparison for %s at %L";
4232
4233 gfc_warning (OPT_Wcompare_reals, msg,
4234 gfc_typename (op1), &op1->where);
4235 }
4236 }
4237
4238 break;
4239 }
4240
4241 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
4242 sprintf (msg,
4243 _("Logicals at %%L must be compared with %s instead of %s"),
4244 (e->value.op.op == INTRINSIC_EQ
4245 || e->value.op.op == INTRINSIC_EQ_OS)
4246 ? ".eqv." : ".neqv.", gfc_op2string (e->value.op.op));
4247 else
4248 sprintf (msg,
4249 _("Operands of comparison operator %%<%s%%> at %%L are %s/%s"),
4250 gfc_op2string (e->value.op.op), gfc_typename (op1),
4251 gfc_typename (op2));
4252
4253 goto bad_op;
4254
4255 case INTRINSIC_USER:
4256 if (e->value.op.uop->op == NULL)
4257 {
4258 const char *name = e->value.op.uop->name;
4259 const char *guessed;
4260 guessed = lookup_uop_fuzzy (name, e->value.op.uop->ns->uop_root);
4261 if (guessed)
4262 sprintf (msg, _("Unknown operator %%<%s%%> at %%L; did you mean '%s'?"),
4263 name, guessed);
4264 else
4265 sprintf (msg, _("Unknown operator %%<%s%%> at %%L"), name);
4266 }
4267 else if (op2 == NULL)
4268 sprintf (msg, _("Operand of user operator %%<%s%%> at %%L is %s"),
4269 e->value.op.uop->name, gfc_typename (op1));
4270 else
4271 {
4272 sprintf (msg, _("Operands of user operator %%<%s%%> at %%L are %s/%s"),
4273 e->value.op.uop->name, gfc_typename (op1),
4274 gfc_typename (op2));
4275 e->value.op.uop->op->sym->attr.referenced = 1;
4276 }
4277
4278 goto bad_op;
4279
4280 case INTRINSIC_PARENTHESES:
4281 e->ts = op1->ts;
4282 if (e->ts.type == BT_CHARACTER)
4283 e->ts.u.cl = op1->ts.u.cl;
4284 break;
4285
4286 default:
4287 gfc_internal_error ("resolve_operator(): Bad intrinsic");
4288 }
4289
4290 /* Deal with arrayness of an operand through an operator. */
4291
4292 switch (e->value.op.op)
4293 {
4294 case INTRINSIC_PLUS:
4295 case INTRINSIC_MINUS:
4296 case INTRINSIC_TIMES:
4297 case INTRINSIC_DIVIDE:
4298 case INTRINSIC_POWER:
4299 case INTRINSIC_CONCAT:
4300 case INTRINSIC_AND:
4301 case INTRINSIC_OR:
4302 case INTRINSIC_EQV:
4303 case INTRINSIC_NEQV:
4304 case INTRINSIC_EQ:
4305 case INTRINSIC_EQ_OS:
4306 case INTRINSIC_NE:
4307 case INTRINSIC_NE_OS:
4308 case INTRINSIC_GT:
4309 case INTRINSIC_GT_OS:
4310 case INTRINSIC_GE:
4311 case INTRINSIC_GE_OS:
4312 case INTRINSIC_LT:
4313 case INTRINSIC_LT_OS:
4314 case INTRINSIC_LE:
4315 case INTRINSIC_LE_OS:
4316
4317 if (op1->rank == 0 && op2->rank == 0)
4318 e->rank = 0;
4319
4320 if (op1->rank == 0 && op2->rank != 0)
4321 {
4322 e->rank = op2->rank;
4323
4324 if (e->shape == NULL)
4325 e->shape = gfc_copy_shape (op2->shape, op2->rank);
4326 }
4327
4328 if (op1->rank != 0 && op2->rank == 0)
4329 {
4330 e->rank = op1->rank;
4331
4332 if (e->shape == NULL)
4333 e->shape = gfc_copy_shape (op1->shape, op1->rank);
4334 }
4335
4336 if (op1->rank != 0 && op2->rank != 0)
4337 {
4338 if (op1->rank == op2->rank)
4339 {
4340 e->rank = op1->rank;
4341 if (e->shape == NULL)
4342 {
4343 t = compare_shapes (op1, op2);
4344 if (!t)
4345 e->shape = NULL;
4346 else
4347 e->shape = gfc_copy_shape (op1->shape, op1->rank);
4348 }
4349 }
4350 else
4351 {
4352 /* Allow higher level expressions to work. */
4353 e->rank = 0;
4354
4355 /* Try user-defined operators, and otherwise throw an error. */
4356 dual_locus_error = true;
4357 sprintf (msg,
4358 _("Inconsistent ranks for operator at %%L and %%L"));
4359 goto bad_op;
4360 }
4361 }
4362
4363 break;
4364
4365 case INTRINSIC_PARENTHESES:
4366 case INTRINSIC_NOT:
4367 case INTRINSIC_UPLUS:
4368 case INTRINSIC_UMINUS:
4369 /* Simply copy arrayness attribute */
4370 e->rank = op1->rank;
4371
4372 if (e->shape == NULL)
4373 e->shape = gfc_copy_shape (op1->shape, op1->rank);
4374
4375 break;
4376
4377 default:
4378 break;
4379 }
4380
4381 simplify_op:
4382
4383 /* Attempt to simplify the expression. */
4384 if (t)
4385 {
4386 t = gfc_simplify_expr (e, 0);
4387 /* Some calls do not succeed in simplification and return false
4388 even though there is no error; e.g. variable references to
4389 PARAMETER arrays. */
4390 if (!gfc_is_constant_expr (e))
4391 t = true;
4392 }
4393 return t;
4394
4395 bad_op:
4396
4397 {
4398 match m = gfc_extend_expr (e);
4399 if (m == MATCH_YES)
4400 return true;
4401 if (m == MATCH_ERROR)
4402 return false;
4403 }
4404
4405 if (dual_locus_error)
4406 gfc_error (msg, &op1->where, &op2->where);
4407 else
4408 gfc_error (msg, &e->where);
4409
4410 return false;
4411 }
4412
4413
4414 /************** Array resolution subroutines **************/
4415
4416 enum compare_result
4417 { CMP_LT, CMP_EQ, CMP_GT, CMP_UNKNOWN };
4418
4419 /* Compare two integer expressions. */
4420
4421 static compare_result
4422 compare_bound (gfc_expr *a, gfc_expr *b)
4423 {
4424 int i;
4425
4426 if (a == NULL || a->expr_type != EXPR_CONSTANT
4427 || b == NULL || b->expr_type != EXPR_CONSTANT)
4428 return CMP_UNKNOWN;
4429
4430 /* If either of the types isn't INTEGER, we must have
4431 raised an error earlier. */
4432
4433 if (a->ts.type != BT_INTEGER || b->ts.type != BT_INTEGER)
4434 return CMP_UNKNOWN;
4435
4436 i = mpz_cmp (a->value.integer, b->value.integer);
4437
4438 if (i < 0)
4439 return CMP_LT;
4440 if (i > 0)
4441 return CMP_GT;
4442 return CMP_EQ;
4443 }
4444
4445
4446 /* Compare an integer expression with an integer. */
4447
4448 static compare_result
4449 compare_bound_int (gfc_expr *a, int b)
4450 {
4451 int i;
4452
4453 if (a == NULL || a->expr_type != EXPR_CONSTANT)
4454 return CMP_UNKNOWN;
4455
4456 if (a->ts.type != BT_INTEGER)
4457 gfc_internal_error ("compare_bound_int(): Bad expression");
4458
4459 i = mpz_cmp_si (a->value.integer, b);
4460
4461 if (i < 0)
4462 return CMP_LT;
4463 if (i > 0)
4464 return CMP_GT;
4465 return CMP_EQ;
4466 }
4467
4468
4469 /* Compare an integer expression with a mpz_t. */
4470
4471 static compare_result
4472 compare_bound_mpz_t (gfc_expr *a, mpz_t b)
4473 {
4474 int i;
4475
4476 if (a == NULL || a->expr_type != EXPR_CONSTANT)
4477 return CMP_UNKNOWN;
4478
4479 if (a->ts.type != BT_INTEGER)
4480 gfc_internal_error ("compare_bound_int(): Bad expression");
4481
4482 i = mpz_cmp (a->value.integer, b);
4483
4484 if (i < 0)
4485 return CMP_LT;
4486 if (i > 0)
4487 return CMP_GT;
4488 return CMP_EQ;
4489 }
4490
4491
4492 /* Compute the last value of a sequence given by a triplet.
4493 Return 0 if it wasn't able to compute the last value, or if the
4494 sequence if empty, and 1 otherwise. */
4495
4496 static int
4497 compute_last_value_for_triplet (gfc_expr *start, gfc_expr *end,
4498 gfc_expr *stride, mpz_t last)
4499 {
4500 mpz_t rem;
4501
4502 if (start == NULL || start->expr_type != EXPR_CONSTANT
4503 || end == NULL || end->expr_type != EXPR_CONSTANT
4504 || (stride != NULL && stride->expr_type != EXPR_CONSTANT))
4505 return 0;
4506
4507 if (start->ts.type != BT_INTEGER || end->ts.type != BT_INTEGER
4508 || (stride != NULL && stride->ts.type != BT_INTEGER))
4509 return 0;
4510
4511 if (stride == NULL || compare_bound_int (stride, 1) == CMP_EQ)
4512 {
4513 if (compare_bound (start, end) == CMP_GT)
4514 return 0;
4515 mpz_set (last, end->value.integer);
4516 return 1;
4517 }
4518
4519 if (compare_bound_int (stride, 0) == CMP_GT)
4520 {
4521 /* Stride is positive */
4522 if (mpz_cmp (start->value.integer, end->value.integer) > 0)
4523 return 0;
4524 }
4525 else
4526 {
4527 /* Stride is negative */
4528 if (mpz_cmp (start->value.integer, end->value.integer) < 0)
4529 return 0;
4530 }
4531
4532 mpz_init (rem);
4533 mpz_sub (rem, end->value.integer, start->value.integer);
4534 mpz_tdiv_r (rem, rem, stride->value.integer);
4535 mpz_sub (last, end->value.integer, rem);
4536 mpz_clear (rem);
4537
4538 return 1;
4539 }
4540
4541
4542 /* Compare a single dimension of an array reference to the array
4543 specification. */
4544
4545 static bool
4546 check_dimension (int i, gfc_array_ref *ar, gfc_array_spec *as)
4547 {
4548 mpz_t last_value;
4549
4550 if (ar->dimen_type[i] == DIMEN_STAR)
4551 {
4552 gcc_assert (ar->stride[i] == NULL);
4553 /* This implies [*] as [*:] and [*:3] are not possible. */
4554 if (ar->start[i] == NULL)
4555 {
4556 gcc_assert (ar->end[i] == NULL);
4557 return true;
4558 }
4559 }
4560
4561 /* Given start, end and stride values, calculate the minimum and
4562 maximum referenced indexes. */
4563
4564 switch (ar->dimen_type[i])
4565 {
4566 case DIMEN_VECTOR:
4567 case DIMEN_THIS_IMAGE:
4568 break;
4569
4570 case DIMEN_STAR:
4571 case DIMEN_ELEMENT:
4572 if (compare_bound (ar->start[i], as->lower[i]) == CMP_LT)
4573 {
4574 if (i < as->rank)
4575 gfc_warning (0, "Array reference at %L is out of bounds "
4576 "(%ld < %ld) in dimension %d", &ar->c_where[i],
4577 mpz_get_si (ar->start[i]->value.integer),
4578 mpz_get_si (as->lower[i]->value.integer), i+1);
4579 else
4580 gfc_warning (0, "Array reference at %L is out of bounds "
4581 "(%ld < %ld) in codimension %d", &ar->c_where[i],
4582 mpz_get_si (ar->start[i]->value.integer),
4583 mpz_get_si (as->lower[i]->value.integer),
4584 i + 1 - as->rank);
4585 return true;
4586 }
4587 if (compare_bound (ar->start[i], as->upper[i]) == CMP_GT)
4588 {
4589 if (i < as->rank)
4590 gfc_warning (0, "Array reference at %L is out of bounds "
4591 "(%ld > %ld) in dimension %d", &ar->c_where[i],
4592 mpz_get_si (ar->start[i]->value.integer),
4593 mpz_get_si (as->upper[i]->value.integer), i+1);
4594 else
4595 gfc_warning (0, "Array reference at %L is out of bounds "
4596 "(%ld > %ld) in codimension %d", &ar->c_where[i],
4597 mpz_get_si (ar->start[i]->value.integer),
4598 mpz_get_si (as->upper[i]->value.integer),
4599 i + 1 - as->rank);
4600 return true;
4601 }
4602
4603 break;
4604
4605 case DIMEN_RANGE:
4606 {
4607 #define AR_START (ar->start[i] ? ar->start[i] : as->lower[i])
4608 #define AR_END (ar->end[i] ? ar->end[i] : as->upper[i])
4609
4610 compare_result comp_start_end = compare_bound (AR_START, AR_END);
4611
4612 /* Check for zero stride, which is not allowed. */
4613 if (compare_bound_int (ar->stride[i], 0) == CMP_EQ)
4614 {
4615 gfc_error ("Illegal stride of zero at %L", &ar->c_where[i]);
4616 return false;
4617 }
4618
4619 /* if start == len || (stride > 0 && start < len)
4620 || (stride < 0 && start > len),
4621 then the array section contains at least one element. In this
4622 case, there is an out-of-bounds access if
4623 (start < lower || start > upper). */
4624 if (compare_bound (AR_START, AR_END) == CMP_EQ
4625 || ((compare_bound_int (ar->stride[i], 0) == CMP_GT
4626 || ar->stride[i] == NULL) && comp_start_end == CMP_LT)
4627 || (compare_bound_int (ar->stride[i], 0) == CMP_LT
4628 && comp_start_end == CMP_GT))
4629 {
4630 if (compare_bound (AR_START, as->lower[i]) == CMP_LT)
4631 {
4632 gfc_warning (0, "Lower array reference at %L is out of bounds "
4633 "(%ld < %ld) in dimension %d", &ar->c_where[i],
4634 mpz_get_si (AR_START->value.integer),
4635 mpz_get_si (as->lower[i]->value.integer), i+1);
4636 return true;
4637 }
4638 if (compare_bound (AR_START, as->upper[i]) == CMP_GT)
4639 {
4640 gfc_warning (0, "Lower array reference at %L is out of bounds "
4641 "(%ld > %ld) in dimension %d", &ar->c_where[i],
4642 mpz_get_si (AR_START->value.integer),
4643 mpz_get_si (as->upper[i]->value.integer), i+1);
4644 return true;
4645 }
4646 }
4647
4648 /* If we can compute the highest index of the array section,
4649 then it also has to be between lower and upper. */
4650 mpz_init (last_value);
4651 if (compute_last_value_for_triplet (AR_START, AR_END, ar->stride[i],
4652 last_value))
4653 {
4654 if (compare_bound_mpz_t (as->lower[i], last_value) == CMP_GT)
4655 {
4656 gfc_warning (0, "Upper array reference at %L is out of bounds "
4657 "(%ld < %ld) in dimension %d", &ar->c_where[i],
4658 mpz_get_si (last_value),
4659 mpz_get_si (as->lower[i]->value.integer), i+1);
4660 mpz_clear (last_value);
4661 return true;
4662 }
4663 if (compare_bound_mpz_t (as->upper[i], last_value) == CMP_LT)
4664 {
4665 gfc_warning (0, "Upper array reference at %L is out of bounds "
4666 "(%ld > %ld) in dimension %d", &ar->c_where[i],
4667 mpz_get_si (last_value),
4668 mpz_get_si (as->upper[i]->value.integer), i+1);
4669 mpz_clear (last_value);
4670 return true;
4671 }
4672 }
4673 mpz_clear (last_value);
4674
4675 #undef AR_START
4676 #undef AR_END
4677 }
4678 break;
4679
4680 default:
4681 gfc_internal_error ("check_dimension(): Bad array reference");
4682 }
4683
4684 return true;
4685 }
4686
4687
4688 /* Compare an array reference with an array specification. */
4689
4690 static bool
4691 compare_spec_to_ref (gfc_array_ref *ar)
4692 {
4693 gfc_array_spec *as;
4694 int i;
4695
4696 as = ar->as;
4697 i = as->rank - 1;
4698 /* TODO: Full array sections are only allowed as actual parameters. */
4699 if (as->type == AS_ASSUMED_SIZE
4700 && (/*ar->type == AR_FULL
4701 ||*/ (ar->type == AR_SECTION
4702 && ar->dimen_type[i] == DIMEN_RANGE && ar->end[i] == NULL)))
4703 {
4704 gfc_error ("Rightmost upper bound of assumed size array section "
4705 "not specified at %L", &ar->where);
4706 return false;
4707 }
4708
4709 if (ar->type == AR_FULL)
4710 return true;
4711
4712 if (as->rank != ar->dimen)
4713 {
4714 gfc_error ("Rank mismatch in array reference at %L (%d/%d)",
4715 &ar->where, ar->dimen, as->rank);
4716 return false;
4717 }
4718
4719 /* ar->codimen == 0 is a local array. */
4720 if (as->corank != ar->codimen && ar->codimen != 0)
4721 {
4722 gfc_error ("Coindex rank mismatch in array reference at %L (%d/%d)",
4723 &ar->where, ar->codimen, as->corank);
4724 return false;
4725 }
4726
4727 for (i = 0; i < as->rank; i++)
4728 if (!check_dimension (i, ar, as))
4729 return false;
4730
4731 /* Local access has no coarray spec. */
4732 if (ar->codimen != 0)
4733 for (i = as->rank; i < as->rank + as->corank; i++)
4734 {
4735 if (ar->dimen_type[i] != DIMEN_ELEMENT && !ar->in_allocate
4736 && ar->dimen_type[i] != DIMEN_THIS_IMAGE)
4737 {
4738 gfc_error ("Coindex of codimension %d must be a scalar at %L",
4739 i + 1 - as->rank, &ar->where);
4740 return false;
4741 }
4742 if (!check_dimension (i, ar, as))
4743 return false;
4744 }
4745
4746 return true;
4747 }
4748
4749
4750 /* Resolve one part of an array index. */
4751
4752 static bool
4753 gfc_resolve_index_1 (gfc_expr *index, int check_scalar,
4754 int force_index_integer_kind)
4755 {
4756 gfc_typespec ts;
4757
4758 if (index == NULL)
4759 return true;
4760
4761 if (!gfc_resolve_expr (index))
4762 return false;
4763
4764 if (check_scalar && index->rank != 0)
4765 {
4766 gfc_error ("Array index at %L must be scalar", &index->where);
4767 return false;
4768 }
4769
4770 if (index->ts.type != BT_INTEGER && index->ts.type != BT_REAL)
4771 {
4772 gfc_error ("Array index at %L must be of INTEGER type, found %s",
4773 &index->where, gfc_basic_typename (index->ts.type));
4774 return false;
4775 }
4776
4777 if (index->ts.type == BT_REAL)
4778 if (!gfc_notify_std (GFC_STD_LEGACY, "REAL array index at %L",
4779 &index->where))
4780 return false;
4781
4782 if ((index->ts.kind != gfc_index_integer_kind
4783 && force_index_integer_kind)
4784 || index->ts.type != BT_INTEGER)
4785 {
4786 gfc_clear_ts (&ts);
4787 ts.type = BT_INTEGER;
4788 ts.kind = gfc_index_integer_kind;
4789
4790 gfc_convert_type_warn (index, &ts, 2, 0);
4791 }
4792
4793 return true;
4794 }
4795
4796 /* Resolve one part of an array index. */
4797
4798 bool
4799 gfc_resolve_index (gfc_expr *index, int check_scalar)
4800 {
4801 return gfc_resolve_index_1 (index, check_scalar, 1);
4802 }
4803
4804 /* Resolve a dim argument to an intrinsic function. */
4805
4806 bool
4807 gfc_resolve_dim_arg (gfc_expr *dim)
4808 {
4809 if (dim == NULL)
4810 return true;
4811
4812 if (!gfc_resolve_expr (dim))
4813 return false;
4814
4815 if (dim->rank != 0)
4816 {
4817 gfc_error ("Argument dim at %L must be scalar", &dim->where);
4818 return false;
4819
4820 }
4821
4822 if (dim->ts.type != BT_INTEGER)
4823 {
4824 gfc_error ("Argument dim at %L must be of INTEGER type", &dim->where);
4825 return false;
4826 }
4827
4828 if (dim->ts.kind != gfc_index_integer_kind)
4829 {
4830 gfc_typespec ts;
4831
4832 gfc_clear_ts (&ts);
4833 ts.type = BT_INTEGER;
4834 ts.kind = gfc_index_integer_kind;
4835
4836 gfc_convert_type_warn (dim, &ts, 2, 0);
4837 }
4838
4839 return true;
4840 }
4841
4842 /* Given an expression that contains array references, update those array
4843 references to point to the right array specifications. While this is
4844 filled in during matching, this information is difficult to save and load
4845 in a module, so we take care of it here.
4846
4847 The idea here is that the original array reference comes from the
4848 base symbol. We traverse the list of reference structures, setting
4849 the stored reference to references. Component references can
4850 provide an additional array specification. */
4851
4852 static void
4853 find_array_spec (gfc_expr *e)
4854 {
4855 gfc_array_spec *as;
4856 gfc_component *c;
4857 gfc_ref *ref;
4858 bool class_as = false;
4859
4860 if (e->symtree->n.sym->ts.type == BT_CLASS)
4861 {
4862 as = CLASS_DATA (e->symtree->n.sym)->as;
4863 class_as = true;
4864 }
4865 else
4866 as = e->symtree->n.sym->as;
4867
4868 for (ref = e->ref; ref; ref = ref->next)
4869 switch (ref->type)
4870 {
4871 case REF_ARRAY:
4872 if (as == NULL)
4873 gfc_internal_error ("find_array_spec(): Missing spec");
4874
4875 ref->u.ar.as = as;
4876 as = NULL;
4877 break;
4878
4879 case REF_COMPONENT:
4880 c = ref->u.c.component;
4881 if (c->attr.dimension)
4882 {
4883 if (as != NULL && !(class_as && as == c->as))
4884 gfc_internal_error ("find_array_spec(): unused as(1)");
4885 as = c->as;
4886 }
4887
4888 break;
4889
4890 case REF_SUBSTRING:
4891 case REF_INQUIRY:
4892 break;
4893 }
4894
4895 if (as != NULL)
4896 gfc_internal_error ("find_array_spec(): unused as(2)");
4897 }
4898
4899
4900 /* Resolve an array reference. */
4901
4902 static bool
4903 resolve_array_ref (gfc_array_ref *ar)
4904 {
4905 int i, check_scalar;
4906 gfc_expr *e;
4907
4908 for (i = 0; i < ar->dimen + ar->codimen; i++)
4909 {
4910 check_scalar = ar->dimen_type[i] == DIMEN_RANGE;
4911
4912 /* Do not force gfc_index_integer_kind for the start. We can
4913 do fine with any integer kind. This avoids temporary arrays
4914 created for indexing with a vector. */
4915 if (!gfc_resolve_index_1 (ar->start[i], check_scalar, 0))
4916 return false;
4917 if (!gfc_resolve_index (ar->end[i], check_scalar))
4918 return false;
4919 if (!gfc_resolve_index (ar->stride[i], check_scalar))
4920 return false;
4921
4922 e = ar->start[i];
4923
4924 if (ar->dimen_type[i] == DIMEN_UNKNOWN)
4925 switch (e->rank)
4926 {
4927 case 0:
4928 ar->dimen_type[i] = DIMEN_ELEMENT;
4929 break;
4930
4931 case 1:
4932 ar->dimen_type[i] = DIMEN_VECTOR;
4933 if (e->expr_type == EXPR_VARIABLE
4934 && e->symtree->n.sym->ts.type == BT_DERIVED)
4935 ar->start[i] = gfc_get_parentheses (e);
4936 break;
4937
4938 default:
4939 gfc_error ("Array index at %L is an array of rank %d",
4940 &ar->c_where[i], e->rank);
4941 return false;
4942 }
4943
4944 /* Fill in the upper bound, which may be lower than the
4945 specified one for something like a(2:10:5), which is
4946 identical to a(2:7:5). Only relevant for strides not equal
4947 to one. Don't try a division by zero. */
4948 if (ar->dimen_type[i] == DIMEN_RANGE
4949 && ar->stride[i] != NULL && ar->stride[i]->expr_type == EXPR_CONSTANT
4950 && mpz_cmp_si (ar->stride[i]->value.integer, 1L) != 0
4951 && mpz_cmp_si (ar->stride[i]->value.integer, 0L) != 0)
4952 {
4953 mpz_t size, end;
4954
4955 if (gfc_ref_dimen_size (ar, i, &size, &end))
4956 {
4957 if (ar->end[i] == NULL)
4958 {
4959 ar->end[i] =
4960 gfc_get_constant_expr (BT_INTEGER, gfc_index_integer_kind,
4961 &ar->where);
4962 mpz_set (ar->end[i]->value.integer, end);
4963 }
4964 else if (ar->end[i]->ts.type == BT_INTEGER
4965 && ar->end[i]->expr_type == EXPR_CONSTANT)
4966 {
4967 mpz_set (ar->end[i]->value.integer, end);
4968 }
4969 else
4970 gcc_unreachable ();
4971
4972 mpz_clear (size);
4973 mpz_clear (end);
4974 }
4975 }
4976 }
4977
4978 if (ar->type == AR_FULL)
4979 {
4980 if (ar->as->rank == 0)
4981 ar->type = AR_ELEMENT;
4982
4983 /* Make sure array is the same as array(:,:), this way
4984 we don't need to special case all the time. */
4985 ar->dimen = ar->as->rank;
4986 for (i = 0; i < ar->dimen; i++)
4987 {
4988 ar->dimen_type[i] = DIMEN_RANGE;
4989
4990 gcc_assert (ar->start[i] == NULL);
4991 gcc_assert (ar->end[i] == NULL);
4992 gcc_assert (ar->stride[i] == NULL);
4993 }
4994 }
4995
4996 /* If the reference type is unknown, figure out what kind it is. */
4997
4998 if (ar->type == AR_UNKNOWN)
4999 {
5000 ar->type = AR_ELEMENT;
5001 for (i = 0; i < ar->dimen; i++)
5002 if (ar->dimen_type[i] == DIMEN_RANGE
5003 || ar->dimen_type[i] == DIMEN_VECTOR)
5004 {
5005 ar->type = AR_SECTION;
5006 break;
5007 }
5008 }
5009
5010 if (!ar->as->cray_pointee && !compare_spec_to_ref (ar))
5011 return false;
5012
5013 if (ar->as->corank && ar->codimen == 0)
5014 {
5015 int n;
5016 ar->codimen = ar->as->corank;
5017 for (n = ar->dimen; n < ar->dimen + ar->codimen; n++)
5018 ar->dimen_type[n] = DIMEN_THIS_IMAGE;
5019 }
5020
5021 return true;
5022 }
5023
5024
5025 static bool
5026 resolve_substring (gfc_ref *ref, bool *equal_length)
5027 {
5028 int k = gfc_validate_kind (BT_INTEGER, gfc_charlen_int_kind, false);
5029
5030 if (ref->u.ss.start != NULL)
5031 {
5032 if (!gfc_resolve_expr (ref->u.ss.start))
5033 return false;
5034
5035 if (ref->u.ss.start->ts.type != BT_INTEGER)
5036 {
5037 gfc_error ("Substring start index at %L must be of type INTEGER",
5038 &ref->u.ss.start->where);
5039 return false;
5040 }
5041
5042 if (ref->u.ss.start->rank != 0)
5043 {
5044 gfc_error ("Substring start index at %L must be scalar",
5045 &ref->u.ss.start->where);
5046 return false;
5047 }
5048
5049 if (compare_bound_int (ref->u.ss.start, 1) == CMP_LT
5050 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
5051 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
5052 {
5053 gfc_error ("Substring start index at %L is less than one",
5054 &ref->u.ss.start->where);
5055 return false;
5056 }
5057 }
5058
5059 if (ref->u.ss.end != NULL)
5060 {
5061 if (!gfc_resolve_expr (ref->u.ss.end))
5062 return false;
5063
5064 if (ref->u.ss.end->ts.type != BT_INTEGER)
5065 {
5066 gfc_error ("Substring end index at %L must be of type INTEGER",
5067 &ref->u.ss.end->where);
5068 return false;
5069 }
5070
5071 if (ref->u.ss.end->rank != 0)
5072 {
5073 gfc_error ("Substring end index at %L must be scalar",
5074 &ref->u.ss.end->where);
5075 return false;
5076 }
5077
5078 if (ref->u.ss.length != NULL
5079 && compare_bound (ref->u.ss.end, ref->u.ss.length->length) == CMP_GT
5080 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
5081 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
5082 {
5083 gfc_error ("Substring end index at %L exceeds the string length",
5084 &ref->u.ss.start->where);
5085 return false;
5086 }
5087
5088 if (compare_bound_mpz_t (ref->u.ss.end,
5089 gfc_integer_kinds[k].huge) == CMP_GT
5090 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
5091 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
5092 {
5093 gfc_error ("Substring end index at %L is too large",
5094 &ref->u.ss.end->where);
5095 return false;
5096 }
5097 /* If the substring has the same length as the original
5098 variable, the reference itself can be deleted. */
5099
5100 if (ref->u.ss.length != NULL
5101 && compare_bound (ref->u.ss.end, ref->u.ss.length->length) == CMP_EQ
5102 && compare_bound_int (ref->u.ss.start, 1) == CMP_EQ)
5103 *equal_length = true;
5104 }
5105
5106 return true;
5107 }
5108
5109
5110 /* This function supplies missing substring charlens. */
5111
5112 void
5113 gfc_resolve_substring_charlen (gfc_expr *e)
5114 {
5115 gfc_ref *char_ref;
5116 gfc_expr *start, *end;
5117 gfc_typespec *ts = NULL;
5118 mpz_t diff;
5119
5120 for (char_ref = e->ref; char_ref; char_ref = char_ref->next)
5121 {
5122 if (char_ref->type == REF_SUBSTRING || char_ref->type == REF_INQUIRY)
5123 break;
5124 if (char_ref->type == REF_COMPONENT)
5125 ts = &char_ref->u.c.component->ts;
5126 }
5127
5128 if (!char_ref || char_ref->type == REF_INQUIRY)
5129 return;
5130
5131 gcc_assert (char_ref->next == NULL);
5132
5133 if (e->ts.u.cl)
5134 {
5135 if (e->ts.u.cl->length)
5136 gfc_free_expr (e->ts.u.cl->length);
5137 else if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.dummy)
5138 return;
5139 }
5140
5141 e->ts.type = BT_CHARACTER;
5142 e->ts.kind = gfc_default_character_kind;
5143
5144 if (!e->ts.u.cl)
5145 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
5146
5147 if (char_ref->u.ss.start)
5148 start = gfc_copy_expr (char_ref->u.ss.start);
5149 else
5150 start = gfc_get_int_expr (gfc_charlen_int_kind, NULL, 1);
5151
5152 if (char_ref->u.ss.end)
5153 end = gfc_copy_expr (char_ref->u.ss.end);
5154 else if (e->expr_type == EXPR_VARIABLE)
5155 {
5156 if (!ts)
5157 ts = &e->symtree->n.sym->ts;
5158 end = gfc_copy_expr (ts->u.cl->length);
5159 }
5160 else
5161 end = NULL;
5162
5163 if (!start || !end)
5164 {
5165 gfc_free_expr (start);
5166 gfc_free_expr (end);
5167 return;
5168 }
5169
5170 /* Length = (end - start + 1).
5171 Check first whether it has a constant length. */
5172 if (gfc_dep_difference (end, start, &diff))
5173 {
5174 gfc_expr *len = gfc_get_constant_expr (BT_INTEGER, gfc_charlen_int_kind,
5175 &e->where);
5176
5177 mpz_add_ui (len->value.integer, diff, 1);
5178 mpz_clear (diff);
5179 e->ts.u.cl->length = len;
5180 /* The check for length < 0 is handled below */
5181 }
5182 else
5183 {
5184 e->ts.u.cl->length = gfc_subtract (end, start);
5185 e->ts.u.cl->length = gfc_add (e->ts.u.cl->length,
5186 gfc_get_int_expr (gfc_charlen_int_kind,
5187 NULL, 1));
5188 }
5189
5190 /* F2008, 6.4.1: Both the starting point and the ending point shall
5191 be within the range 1, 2, ..., n unless the starting point exceeds
5192 the ending point, in which case the substring has length zero. */
5193
5194 if (mpz_cmp_si (e->ts.u.cl->length->value.integer, 0) < 0)
5195 mpz_set_si (e->ts.u.cl->length->value.integer, 0);
5196
5197 e->ts.u.cl->length->ts.type = BT_INTEGER;
5198 e->ts.u.cl->length->ts.kind = gfc_charlen_int_kind;
5199
5200 /* Make sure that the length is simplified. */
5201 gfc_simplify_expr (e->ts.u.cl->length, 1);
5202 gfc_resolve_expr (e->ts.u.cl->length);
5203 }
5204
5205
5206 /* Resolve subtype references. */
5207
5208 bool
5209 gfc_resolve_ref (gfc_expr *expr)
5210 {
5211 int current_part_dimension, n_components, seen_part_dimension, dim;
5212 gfc_ref *ref, **prev, *array_ref;
5213 bool equal_length;
5214
5215 for (ref = expr->ref; ref; ref = ref->next)
5216 if (ref->type == REF_ARRAY && ref->u.ar.as == NULL)
5217 {
5218 find_array_spec (expr);
5219 break;
5220 }
5221
5222 for (prev = &expr->ref; *prev != NULL;
5223 prev = *prev == NULL ? prev : &(*prev)->next)
5224 switch ((*prev)->type)
5225 {
5226 case REF_ARRAY:
5227 if (!resolve_array_ref (&(*prev)->u.ar))
5228 return false;
5229 break;
5230
5231 case REF_COMPONENT:
5232 case REF_INQUIRY:
5233 break;
5234
5235 case REF_SUBSTRING:
5236 equal_length = false;
5237 if (!resolve_substring (*prev, &equal_length))
5238 return false;
5239
5240 if (expr->expr_type != EXPR_SUBSTRING && equal_length)
5241 {
5242 /* Remove the reference and move the charlen, if any. */
5243 ref = *prev;
5244 *prev = ref->next;
5245 ref->next = NULL;
5246 expr->ts.u.cl = ref->u.ss.length;
5247 ref->u.ss.length = NULL;
5248 gfc_free_ref_list (ref);
5249 }
5250 break;
5251 }
5252
5253 /* Check constraints on part references. */
5254
5255 current_part_dimension = 0;
5256 seen_part_dimension = 0;
5257 n_components = 0;
5258 array_ref = NULL;
5259
5260 for (ref = expr->ref; ref; ref = ref->next)
5261 {
5262 switch (ref->type)
5263 {
5264 case REF_ARRAY:
5265 array_ref = ref;
5266 switch (ref->u.ar.type)
5267 {
5268 case AR_FULL:
5269 /* Coarray scalar. */
5270 if (ref->u.ar.as->rank == 0)
5271 {
5272 current_part_dimension = 0;
5273 break;
5274 }
5275 /* Fall through. */
5276 case AR_SECTION:
5277 current_part_dimension = 1;
5278 break;
5279
5280 case AR_ELEMENT:
5281 array_ref = NULL;
5282 current_part_dimension = 0;
5283 break;
5284
5285 case AR_UNKNOWN:
5286 gfc_internal_error ("resolve_ref(): Bad array reference");
5287 }
5288
5289 break;
5290
5291 case REF_COMPONENT:
5292 if (current_part_dimension || seen_part_dimension)
5293 {
5294 /* F03:C614. */
5295 if (ref->u.c.component->attr.pointer
5296 || ref->u.c.component->attr.proc_pointer
5297 || (ref->u.c.component->ts.type == BT_CLASS
5298 && CLASS_DATA (ref->u.c.component)->attr.pointer))
5299 {
5300 gfc_error ("Component to the right of a part reference "
5301 "with nonzero rank must not have the POINTER "
5302 "attribute at %L", &expr->where);
5303 return false;
5304 }
5305 else if (ref->u.c.component->attr.allocatable
5306 || (ref->u.c.component->ts.type == BT_CLASS
5307 && CLASS_DATA (ref->u.c.component)->attr.allocatable))
5308
5309 {
5310 gfc_error ("Component to the right of a part reference "
5311 "with nonzero rank must not have the ALLOCATABLE "
5312 "attribute at %L", &expr->where);
5313 return false;
5314 }
5315 }
5316
5317 n_components++;
5318 break;
5319
5320 case REF_SUBSTRING:
5321 break;
5322
5323 case REF_INQUIRY:
5324 /* Implement requirement in note 9.7 of F2018 that the result of the
5325 LEN inquiry be a scalar. */
5326 if (ref->u.i == INQUIRY_LEN && array_ref && expr->ts.deferred)
5327 {
5328 array_ref->u.ar.type = AR_ELEMENT;
5329 expr->rank = 0;
5330 /* INQUIRY_LEN is not evaluated from the rest of the expr
5331 but directly from the string length. This means that setting
5332 the array indices to one does not matter but might trigger
5333 a runtime bounds error. Suppress the check. */
5334 expr->no_bounds_check = 1;
5335 for (dim = 0; dim < array_ref->u.ar.dimen; dim++)
5336 {
5337 array_ref->u.ar.dimen_type[dim] = DIMEN_ELEMENT;
5338 if (array_ref->u.ar.start[dim])
5339 gfc_free_expr (array_ref->u.ar.start[dim]);
5340 array_ref->u.ar.start[dim]
5341 = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
5342 if (array_ref->u.ar.end[dim])
5343 gfc_free_expr (array_ref->u.ar.end[dim]);
5344 if (array_ref->u.ar.stride[dim])
5345 gfc_free_expr (array_ref->u.ar.stride[dim]);
5346 }
5347 }
5348 break;
5349 }
5350
5351 if (((ref->type == REF_COMPONENT && n_components > 1)
5352 || ref->next == NULL)
5353 && current_part_dimension
5354 && seen_part_dimension)
5355 {
5356 gfc_error ("Two or more part references with nonzero rank must "
5357 "not be specified at %L", &expr->where);
5358 return false;
5359 }
5360
5361 if (ref->type == REF_COMPONENT)
5362 {
5363 if (current_part_dimension)
5364 seen_part_dimension = 1;
5365
5366 /* reset to make sure */
5367 current_part_dimension = 0;
5368 }
5369 }
5370
5371 return true;
5372 }
5373
5374
5375 /* Given an expression, determine its shape. This is easier than it sounds.
5376 Leaves the shape array NULL if it is not possible to determine the shape. */
5377
5378 static void
5379 expression_shape (gfc_expr *e)
5380 {
5381 mpz_t array[GFC_MAX_DIMENSIONS];
5382 int i;
5383
5384 if (e->rank <= 0 || e->shape != NULL)
5385 return;
5386
5387 for (i = 0; i < e->rank; i++)
5388 if (!gfc_array_dimen_size (e, i, &array[i]))
5389 goto fail;
5390
5391 e->shape = gfc_get_shape (e->rank);
5392
5393 memcpy (e->shape, array, e->rank * sizeof (mpz_t));
5394
5395 return;
5396
5397 fail:
5398 for (i--; i >= 0; i--)
5399 mpz_clear (array[i]);
5400 }
5401
5402
5403 /* Given a variable expression node, compute the rank of the expression by
5404 examining the base symbol and any reference structures it may have. */
5405
5406 void
5407 gfc_expression_rank (gfc_expr *e)
5408 {
5409 gfc_ref *ref;
5410 int i, rank;
5411
5412 /* Just to make sure, because EXPR_COMPCALL's also have an e->ref and that
5413 could lead to serious confusion... */
5414 gcc_assert (e->expr_type != EXPR_COMPCALL);
5415
5416 if (e->ref == NULL)
5417 {
5418 if (e->expr_type == EXPR_ARRAY)
5419 goto done;
5420 /* Constructors can have a rank different from one via RESHAPE(). */
5421
5422 e->rank = ((e->symtree == NULL || e->symtree->n.sym->as == NULL)
5423 ? 0 : e->symtree->n.sym->as->rank);
5424 goto done;
5425 }
5426
5427 rank = 0;
5428
5429 for (ref = e->ref; ref; ref = ref->next)
5430 {
5431 if (ref->type == REF_COMPONENT && ref->u.c.component->attr.proc_pointer
5432 && ref->u.c.component->attr.function && !ref->next)
5433 rank = ref->u.c.component->as ? ref->u.c.component->as->rank : 0;
5434
5435 if (ref->type != REF_ARRAY)
5436 continue;
5437
5438 if (ref->u.ar.type == AR_FULL)
5439 {
5440 rank = ref->u.ar.as->rank;
5441 break;
5442 }
5443
5444 if (ref->u.ar.type == AR_SECTION)
5445 {
5446 /* Figure out the rank of the section. */
5447 if (rank != 0)
5448 gfc_internal_error ("gfc_expression_rank(): Two array specs");
5449
5450 for (i = 0; i < ref->u.ar.dimen; i++)
5451 if (ref->u.ar.dimen_type[i] == DIMEN_RANGE
5452 || ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
5453 rank++;
5454
5455 break;
5456 }
5457 }
5458
5459 e->rank = rank;
5460
5461 done:
5462 expression_shape (e);
5463 }
5464
5465
5466 static void
5467 add_caf_get_intrinsic (gfc_expr *e)
5468 {
5469 gfc_expr *wrapper, *tmp_expr;
5470 gfc_ref *ref;
5471 int n;
5472
5473 for (ref = e->ref; ref; ref = ref->next)
5474 if (ref->type == REF_ARRAY && ref->u.ar.codimen > 0)
5475 break;
5476 if (ref == NULL)
5477 return;
5478
5479 for (n = ref->u.ar.dimen; n < ref->u.ar.dimen + ref->u.ar.codimen; n++)
5480 if (ref->u.ar.dimen_type[n] != DIMEN_ELEMENT)
5481 return;
5482
5483 tmp_expr = XCNEW (gfc_expr);
5484 *tmp_expr = *e;
5485 wrapper = gfc_build_intrinsic_call (gfc_current_ns, GFC_ISYM_CAF_GET,
5486 "caf_get", tmp_expr->where, 1, tmp_expr);
5487 wrapper->ts = e->ts;
5488 wrapper->rank = e->rank;
5489 if (e->rank)
5490 wrapper->shape = gfc_copy_shape (e->shape, e->rank);
5491 *e = *wrapper;
5492 free (wrapper);
5493 }
5494
5495
5496 static void
5497 remove_caf_get_intrinsic (gfc_expr *e)
5498 {
5499 gcc_assert (e->expr_type == EXPR_FUNCTION && e->value.function.isym
5500 && e->value.function.isym->id == GFC_ISYM_CAF_GET);
5501 gfc_expr *e2 = e->value.function.actual->expr;
5502 e->value.function.actual->expr = NULL;
5503 gfc_free_actual_arglist (e->value.function.actual);
5504 gfc_free_shape (&e->shape, e->rank);
5505 *e = *e2;
5506 free (e2);
5507 }
5508
5509
5510 /* Resolve a variable expression. */
5511
5512 static bool
5513 resolve_variable (gfc_expr *e)
5514 {
5515 gfc_symbol *sym;
5516 bool t;
5517
5518 t = true;
5519
5520 if (e->symtree == NULL)
5521 return false;
5522 sym = e->symtree->n.sym;
5523
5524 /* Use same check as for TYPE(*) below; this check has to be before TYPE(*)
5525 as ts.type is set to BT_ASSUMED in resolve_symbol. */
5526 if (sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
5527 {
5528 if (!actual_arg || inquiry_argument)
5529 {
5530 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may only "
5531 "be used as actual argument", sym->name, &e->where);
5532 return false;
5533 }
5534 }
5535 /* TS 29113, 407b. */
5536 else if (e->ts.type == BT_ASSUMED)
5537 {
5538 if (!actual_arg)
5539 {
5540 gfc_error ("Assumed-type variable %s at %L may only be used "
5541 "as actual argument", sym->name, &e->where);
5542 return false;
5543 }
5544 else if (inquiry_argument && !first_actual_arg)
5545 {
5546 /* FIXME: It doesn't work reliably as inquiry_argument is not set
5547 for all inquiry functions in resolve_function; the reason is
5548 that the function-name resolution happens too late in that
5549 function. */
5550 gfc_error ("Assumed-type variable %s at %L as actual argument to "
5551 "an inquiry function shall be the first argument",
5552 sym->name, &e->where);
5553 return false;
5554 }
5555 }
5556 /* TS 29113, C535b. */
5557 else if (((sym->ts.type == BT_CLASS && sym->attr.class_ok
5558 && CLASS_DATA (sym)->as
5559 && CLASS_DATA (sym)->as->type == AS_ASSUMED_RANK)
5560 || (sym->ts.type != BT_CLASS && sym->as
5561 && sym->as->type == AS_ASSUMED_RANK))
5562 && !sym->attr.select_rank_temporary)
5563 {
5564 if (!actual_arg
5565 && !(cs_base && cs_base->current
5566 && cs_base->current->op == EXEC_SELECT_RANK))
5567 {
5568 gfc_error ("Assumed-rank variable %s at %L may only be used as "
5569 "actual argument", sym->name, &e->where);
5570 return false;
5571 }
5572 else if (inquiry_argument && !first_actual_arg)
5573 {
5574 /* FIXME: It doesn't work reliably as inquiry_argument is not set
5575 for all inquiry functions in resolve_function; the reason is
5576 that the function-name resolution happens too late in that
5577 function. */
5578 gfc_error ("Assumed-rank variable %s at %L as actual argument "
5579 "to an inquiry function shall be the first argument",
5580 sym->name, &e->where);
5581 return false;
5582 }
5583 }
5584
5585 if ((sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK)) && e->ref
5586 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
5587 && e->ref->next == NULL))
5588 {
5589 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall not have "
5590 "a subobject reference", sym->name, &e->ref->u.ar.where);
5591 return false;
5592 }
5593 /* TS 29113, 407b. */
5594 else if (e->ts.type == BT_ASSUMED && e->ref
5595 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
5596 && e->ref->next == NULL))
5597 {
5598 gfc_error ("Assumed-type variable %s at %L shall not have a subobject "
5599 "reference", sym->name, &e->ref->u.ar.where);
5600 return false;
5601 }
5602
5603 /* TS 29113, C535b. */
5604 if (((sym->ts.type == BT_CLASS && sym->attr.class_ok
5605 && CLASS_DATA (sym)->as
5606 && CLASS_DATA (sym)->as->type == AS_ASSUMED_RANK)
5607 || (sym->ts.type != BT_CLASS && sym->as
5608 && sym->as->type == AS_ASSUMED_RANK))
5609 && e->ref
5610 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
5611 && e->ref->next == NULL))
5612 {
5613 gfc_error ("Assumed-rank variable %s at %L shall not have a subobject "
5614 "reference", sym->name, &e->ref->u.ar.where);
5615 return false;
5616 }
5617
5618 /* For variables that are used in an associate (target => object) where
5619 the object's basetype is array valued while the target is scalar,
5620 the ts' type of the component refs is still array valued, which
5621 can't be translated that way. */
5622 if (sym->assoc && e->rank == 0 && e->ref && sym->ts.type == BT_CLASS
5623 && sym->assoc->target && sym->assoc->target->ts.type == BT_CLASS
5624 && CLASS_DATA (sym->assoc->target)->as)
5625 {
5626 gfc_ref *ref = e->ref;
5627 while (ref)
5628 {
5629 switch (ref->type)
5630 {
5631 case REF_COMPONENT:
5632 ref->u.c.sym = sym->ts.u.derived;
5633 /* Stop the loop. */
5634 ref = NULL;
5635 break;
5636 default:
5637 ref = ref->next;
5638 break;
5639 }
5640 }
5641 }
5642
5643 /* If this is an associate-name, it may be parsed with an array reference
5644 in error even though the target is scalar. Fail directly in this case.
5645 TODO Understand why class scalar expressions must be excluded. */
5646 if (sym->assoc && !(sym->ts.type == BT_CLASS && e->rank == 0))
5647 {
5648 if (sym->ts.type == BT_CLASS)
5649 gfc_fix_class_refs (e);
5650 if (!sym->attr.dimension && e->ref && e->ref->type == REF_ARRAY)
5651 return false;
5652 else if (sym->attr.dimension && (!e->ref || e->ref->type != REF_ARRAY))
5653 {
5654 /* This can happen because the parser did not detect that the
5655 associate name is an array and the expression had no array
5656 part_ref. */
5657 gfc_ref *ref = gfc_get_ref ();
5658 ref->type = REF_ARRAY;
5659 ref->u.ar = *gfc_get_array_ref();
5660 ref->u.ar.type = AR_FULL;
5661 if (sym->as)
5662 {
5663 ref->u.ar.as = sym->as;
5664 ref->u.ar.dimen = sym->as->rank;
5665 }
5666 ref->next = e->ref;
5667 e->ref = ref;
5668
5669 }
5670 }
5671
5672 if (sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.generic)
5673 sym->ts.u.derived = gfc_find_dt_in_generic (sym->ts.u.derived);
5674
5675 /* On the other hand, the parser may not have known this is an array;
5676 in this case, we have to add a FULL reference. */
5677 if (sym->assoc && sym->attr.dimension && !e->ref)
5678 {
5679 e->ref = gfc_get_ref ();
5680 e->ref->type = REF_ARRAY;
5681 e->ref->u.ar.type = AR_FULL;
5682 e->ref->u.ar.dimen = 0;
5683 }
5684
5685 /* Like above, but for class types, where the checking whether an array
5686 ref is present is more complicated. Furthermore make sure not to add
5687 the full array ref to _vptr or _len refs. */
5688 if (sym->assoc && sym->ts.type == BT_CLASS
5689 && CLASS_DATA (sym)->attr.dimension
5690 && (e->ts.type != BT_DERIVED || !e->ts.u.derived->attr.vtype))
5691 {
5692 gfc_ref *ref, *newref;
5693
5694 newref = gfc_get_ref ();
5695 newref->type = REF_ARRAY;
5696 newref->u.ar.type = AR_FULL;
5697 newref->u.ar.dimen = 0;
5698 /* Because this is an associate var and the first ref either is a ref to
5699 the _data component or not, no traversal of the ref chain is
5700 needed. The array ref needs to be inserted after the _data ref,
5701 or when that is not present, which may happend for polymorphic
5702 types, then at the first position. */
5703 ref = e->ref;
5704 if (!ref)
5705 e->ref = newref;
5706 else if (ref->type == REF_COMPONENT
5707 && strcmp ("_data", ref->u.c.component->name) == 0)
5708 {
5709 if (!ref->next || ref->next->type != REF_ARRAY)
5710 {
5711 newref->next = ref->next;
5712 ref->next = newref;
5713 }
5714 else
5715 /* Array ref present already. */
5716 gfc_free_ref_list (newref);
5717 }
5718 else if (ref->type == REF_ARRAY)
5719 /* Array ref present already. */
5720 gfc_free_ref_list (newref);
5721 else
5722 {
5723 newref->next = ref;
5724 e->ref = newref;
5725 }
5726 }
5727
5728 if (e->ref && !gfc_resolve_ref (e))
5729 return false;
5730
5731 if (sym->attr.flavor == FL_PROCEDURE
5732 && (!sym->attr.function
5733 || (sym->attr.function && sym->result
5734 && sym->result->attr.proc_pointer
5735 && !sym->result->attr.function)))
5736 {
5737 e->ts.type = BT_PROCEDURE;
5738 goto resolve_procedure;
5739 }
5740
5741 if (sym->ts.type != BT_UNKNOWN)
5742 gfc_variable_attr (e, &e->ts);
5743 else if (sym->attr.flavor == FL_PROCEDURE
5744 && sym->attr.function && sym->result
5745 && sym->result->ts.type != BT_UNKNOWN
5746 && sym->result->attr.proc_pointer)
5747 e->ts = sym->result->ts;
5748 else
5749 {
5750 /* Must be a simple variable reference. */
5751 if (!gfc_set_default_type (sym, 1, sym->ns))
5752 return false;
5753 e->ts = sym->ts;
5754 }
5755
5756 if (check_assumed_size_reference (sym, e))
5757 return false;
5758
5759 /* Deal with forward references to entries during gfc_resolve_code, to
5760 satisfy, at least partially, 12.5.2.5. */
5761 if (gfc_current_ns->entries
5762 && current_entry_id == sym->entry_id
5763 && cs_base
5764 && cs_base->current
5765 && cs_base->current->op != EXEC_ENTRY)
5766 {
5767 gfc_entry_list *entry;
5768 gfc_formal_arglist *formal;
5769 int n;
5770 bool seen, saved_specification_expr;
5771
5772 /* If the symbol is a dummy... */
5773 if (sym->attr.dummy && sym->ns == gfc_current_ns)
5774 {
5775 entry = gfc_current_ns->entries;
5776 seen = false;
5777
5778 /* ...test if the symbol is a parameter of previous entries. */
5779 for (; entry && entry->id <= current_entry_id; entry = entry->next)
5780 for (formal = entry->sym->formal; formal; formal = formal->next)
5781 {
5782 if (formal->sym && sym->name == formal->sym->name)
5783 {
5784 seen = true;
5785 break;
5786 }
5787 }
5788
5789 /* If it has not been seen as a dummy, this is an error. */
5790 if (!seen)
5791 {
5792 if (specification_expr)
5793 gfc_error ("Variable %qs, used in a specification expression"
5794 ", is referenced at %L before the ENTRY statement "
5795 "in which it is a parameter",
5796 sym->name, &cs_base->current->loc);
5797 else
5798 gfc_error ("Variable %qs is used at %L before the ENTRY "
5799 "statement in which it is a parameter",
5800 sym->name, &cs_base->current->loc);
5801 t = false;
5802 }
5803 }
5804
5805 /* Now do the same check on the specification expressions. */
5806 saved_specification_expr = specification_expr;
5807 specification_expr = true;
5808 if (sym->ts.type == BT_CHARACTER
5809 && !gfc_resolve_expr (sym->ts.u.cl->length))
5810 t = false;
5811
5812 if (sym->as)
5813 for (n = 0; n < sym->as->rank; n++)
5814 {
5815 if (!gfc_resolve_expr (sym->as->lower[n]))
5816 t = false;
5817 if (!gfc_resolve_expr (sym->as->upper[n]))
5818 t = false;
5819 }
5820 specification_expr = saved_specification_expr;
5821
5822 if (t)
5823 /* Update the symbol's entry level. */
5824 sym->entry_id = current_entry_id + 1;
5825 }
5826
5827 /* If a symbol has been host_associated mark it. This is used latter,
5828 to identify if aliasing is possible via host association. */
5829 if (sym->attr.flavor == FL_VARIABLE
5830 && gfc_current_ns->parent
5831 && (gfc_current_ns->parent == sym->ns
5832 || (gfc_current_ns->parent->parent
5833 && gfc_current_ns->parent->parent == sym->ns)))
5834 sym->attr.host_assoc = 1;
5835
5836 if (gfc_current_ns->proc_name
5837 && sym->attr.dimension
5838 && (sym->ns != gfc_current_ns
5839 || sym->attr.use_assoc
5840 || sym->attr.in_common))
5841 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
5842
5843 resolve_procedure:
5844 if (t && !resolve_procedure_expression (e))
5845 t = false;
5846
5847 /* F2008, C617 and C1229. */
5848 if (!inquiry_argument && (e->ts.type == BT_CLASS || e->ts.type == BT_DERIVED)
5849 && gfc_is_coindexed (e))
5850 {
5851 gfc_ref *ref, *ref2 = NULL;
5852
5853 for (ref = e->ref; ref; ref = ref->next)
5854 {
5855 if (ref->type == REF_COMPONENT)
5856 ref2 = ref;
5857 if (ref->type == REF_ARRAY && ref->u.ar.codimen > 0)
5858 break;
5859 }
5860
5861 for ( ; ref; ref = ref->next)
5862 if (ref->type == REF_COMPONENT)
5863 break;
5864
5865 /* Expression itself is not coindexed object. */
5866 if (ref && e->ts.type == BT_CLASS)
5867 {
5868 gfc_error ("Polymorphic subobject of coindexed object at %L",
5869 &e->where);
5870 t = false;
5871 }
5872
5873 /* Expression itself is coindexed object. */
5874 if (ref == NULL)
5875 {
5876 gfc_component *c;
5877 c = ref2 ? ref2->u.c.component : e->symtree->n.sym->components;
5878 for ( ; c; c = c->next)
5879 if (c->attr.allocatable && c->ts.type == BT_CLASS)
5880 {
5881 gfc_error ("Coindexed object with polymorphic allocatable "
5882 "subcomponent at %L", &e->where);
5883 t = false;
5884 break;
5885 }
5886 }
5887 }
5888
5889 if (t)
5890 gfc_expression_rank (e);
5891
5892 if (t && flag_coarray == GFC_FCOARRAY_LIB && gfc_is_coindexed (e))
5893 add_caf_get_intrinsic (e);
5894
5895 /* Simplify cases where access to a parameter array results in a
5896 single constant. Suppress errors since those will have been
5897 issued before, as warnings. */
5898 if (e->rank == 0 && sym->as && sym->attr.flavor == FL_PARAMETER)
5899 {
5900 gfc_push_suppress_errors ();
5901 gfc_simplify_expr (e, 1);
5902 gfc_pop_suppress_errors ();
5903 }
5904
5905 return t;
5906 }
5907
5908
5909 /* Checks to see that the correct symbol has been host associated.
5910 The only situation where this arises is that in which a twice
5911 contained function is parsed after the host association is made.
5912 Therefore, on detecting this, change the symbol in the expression
5913 and convert the array reference into an actual arglist if the old
5914 symbol is a variable. */
5915 static bool
5916 check_host_association (gfc_expr *e)
5917 {
5918 gfc_symbol *sym, *old_sym;
5919 gfc_symtree *st;
5920 int n;
5921 gfc_ref *ref;
5922 gfc_actual_arglist *arg, *tail = NULL;
5923 bool retval = e->expr_type == EXPR_FUNCTION;
5924
5925 /* If the expression is the result of substitution in
5926 interface.c(gfc_extend_expr) because there is no way in
5927 which the host association can be wrong. */
5928 if (e->symtree == NULL
5929 || e->symtree->n.sym == NULL
5930 || e->user_operator)
5931 return retval;
5932
5933 old_sym = e->symtree->n.sym;
5934
5935 if (gfc_current_ns->parent
5936 && old_sym->ns != gfc_current_ns)
5937 {
5938 /* Use the 'USE' name so that renamed module symbols are
5939 correctly handled. */
5940 gfc_find_symbol (e->symtree->name, gfc_current_ns, 1, &sym);
5941
5942 if (sym && old_sym != sym
5943 && sym->ts.type == old_sym->ts.type
5944 && sym->attr.flavor == FL_PROCEDURE
5945 && sym->attr.contained)
5946 {
5947 /* Clear the shape, since it might not be valid. */
5948 gfc_free_shape (&e->shape, e->rank);
5949
5950 /* Give the expression the right symtree! */
5951 gfc_find_sym_tree (e->symtree->name, NULL, 1, &st);
5952 gcc_assert (st != NULL);
5953
5954 if (old_sym->attr.flavor == FL_PROCEDURE
5955 || e->expr_type == EXPR_FUNCTION)
5956 {
5957 /* Original was function so point to the new symbol, since
5958 the actual argument list is already attached to the
5959 expression. */
5960 e->value.function.esym = NULL;
5961 e->symtree = st;
5962 }
5963 else
5964 {
5965 /* Original was variable so convert array references into
5966 an actual arglist. This does not need any checking now
5967 since resolve_function will take care of it. */
5968 e->value.function.actual = NULL;
5969 e->expr_type = EXPR_FUNCTION;
5970 e->symtree = st;
5971
5972 /* Ambiguity will not arise if the array reference is not
5973 the last reference. */
5974 for (ref = e->ref; ref; ref = ref->next)
5975 if (ref->type == REF_ARRAY && ref->next == NULL)
5976 break;
5977
5978 gcc_assert (ref->type == REF_ARRAY);
5979
5980 /* Grab the start expressions from the array ref and
5981 copy them into actual arguments. */
5982 for (n = 0; n < ref->u.ar.dimen; n++)
5983 {
5984 arg = gfc_get_actual_arglist ();
5985 arg->expr = gfc_copy_expr (ref->u.ar.start[n]);
5986 if (e->value.function.actual == NULL)
5987 tail = e->value.function.actual = arg;
5988 else
5989 {
5990 tail->next = arg;
5991 tail = arg;
5992 }
5993 }
5994
5995 /* Dump the reference list and set the rank. */
5996 gfc_free_ref_list (e->ref);
5997 e->ref = NULL;
5998 e->rank = sym->as ? sym->as->rank : 0;
5999 }
6000
6001 gfc_resolve_expr (e);
6002 sym->refs++;
6003 }
6004 }
6005 /* This might have changed! */
6006 return e->expr_type == EXPR_FUNCTION;
6007 }
6008
6009
6010 static void
6011 gfc_resolve_character_operator (gfc_expr *e)
6012 {
6013 gfc_expr *op1 = e->value.op.op1;
6014 gfc_expr *op2 = e->value.op.op2;
6015 gfc_expr *e1 = NULL;
6016 gfc_expr *e2 = NULL;
6017
6018 gcc_assert (e->value.op.op == INTRINSIC_CONCAT);
6019
6020 if (op1->ts.u.cl && op1->ts.u.cl->length)
6021 e1 = gfc_copy_expr (op1->ts.u.cl->length);
6022 else if (op1->expr_type == EXPR_CONSTANT)
6023 e1 = gfc_get_int_expr (gfc_charlen_int_kind, NULL,
6024 op1->value.character.length);
6025
6026 if (op2->ts.u.cl && op2->ts.u.cl->length)
6027 e2 = gfc_copy_expr (op2->ts.u.cl->length);
6028 else if (op2->expr_type == EXPR_CONSTANT)
6029 e2 = gfc_get_int_expr (gfc_charlen_int_kind, NULL,
6030 op2->value.character.length);
6031
6032 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
6033
6034 if (!e1 || !e2)
6035 {
6036 gfc_free_expr (e1);
6037 gfc_free_expr (e2);
6038
6039 return;
6040 }
6041
6042 e->ts.u.cl->length = gfc_add (e1, e2);
6043 e->ts.u.cl->length->ts.type = BT_INTEGER;
6044 e->ts.u.cl->length->ts.kind = gfc_charlen_int_kind;
6045 gfc_simplify_expr (e->ts.u.cl->length, 0);
6046 gfc_resolve_expr (e->ts.u.cl->length);
6047
6048 return;
6049 }
6050
6051
6052 /* Ensure that an character expression has a charlen and, if possible, a
6053 length expression. */
6054
6055 static void
6056 fixup_charlen (gfc_expr *e)
6057 {
6058 /* The cases fall through so that changes in expression type and the need
6059 for multiple fixes are picked up. In all circumstances, a charlen should
6060 be available for the middle end to hang a backend_decl on. */
6061 switch (e->expr_type)
6062 {
6063 case EXPR_OP:
6064 gfc_resolve_character_operator (e);
6065 /* FALLTHRU */
6066
6067 case EXPR_ARRAY:
6068 if (e->expr_type == EXPR_ARRAY)
6069 gfc_resolve_character_array_constructor (e);
6070 /* FALLTHRU */
6071
6072 case EXPR_SUBSTRING:
6073 if (!e->ts.u.cl && e->ref)
6074 gfc_resolve_substring_charlen (e);
6075 /* FALLTHRU */
6076
6077 default:
6078 if (!e->ts.u.cl)
6079 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
6080
6081 break;
6082 }
6083 }
6084
6085
6086 /* Update an actual argument to include the passed-object for type-bound
6087 procedures at the right position. */
6088
6089 static gfc_actual_arglist*
6090 update_arglist_pass (gfc_actual_arglist* lst, gfc_expr* po, unsigned argpos,
6091 const char *name)
6092 {
6093 gcc_assert (argpos > 0);
6094
6095 if (argpos == 1)
6096 {
6097 gfc_actual_arglist* result;
6098
6099 result = gfc_get_actual_arglist ();
6100 result->expr = po;
6101 result->next = lst;
6102 if (name)
6103 result->name = name;
6104
6105 return result;
6106 }
6107
6108 if (lst)
6109 lst->next = update_arglist_pass (lst->next, po, argpos - 1, name);
6110 else
6111 lst = update_arglist_pass (NULL, po, argpos - 1, name);
6112 return lst;
6113 }
6114
6115
6116 /* Extract the passed-object from an EXPR_COMPCALL (a copy of it). */
6117
6118 static gfc_expr*
6119 extract_compcall_passed_object (gfc_expr* e)
6120 {
6121 gfc_expr* po;
6122
6123 if (e->expr_type == EXPR_UNKNOWN)
6124 {
6125 gfc_error ("Error in typebound call at %L",
6126 &e->where);
6127 return NULL;
6128 }
6129
6130 gcc_assert (e->expr_type == EXPR_COMPCALL);
6131
6132 if (e->value.compcall.base_object)
6133 po = gfc_copy_expr (e->value.compcall.base_object);
6134 else
6135 {
6136 po = gfc_get_expr ();
6137 po->expr_type = EXPR_VARIABLE;
6138 po->symtree = e->symtree;
6139 po->ref = gfc_copy_ref (e->ref);
6140 po->where = e->where;
6141 }
6142
6143 if (!gfc_resolve_expr (po))
6144 return NULL;
6145
6146 return po;
6147 }
6148
6149
6150 /* Update the arglist of an EXPR_COMPCALL expression to include the
6151 passed-object. */
6152
6153 static bool
6154 update_compcall_arglist (gfc_expr* e)
6155 {
6156 gfc_expr* po;
6157 gfc_typebound_proc* tbp;
6158
6159 tbp = e->value.compcall.tbp;
6160
6161 if (tbp->error)
6162 return false;
6163
6164 po = extract_compcall_passed_object (e);
6165 if (!po)
6166 return false;
6167
6168 if (tbp->nopass || e->value.compcall.ignore_pass)
6169 {
6170 gfc_free_expr (po);
6171 return true;
6172 }
6173
6174 if (tbp->pass_arg_num <= 0)
6175 return false;
6176
6177 e->value.compcall.actual = update_arglist_pass (e->value.compcall.actual, po,
6178 tbp->pass_arg_num,
6179 tbp->pass_arg);
6180
6181 return true;
6182 }
6183
6184
6185 /* Extract the passed object from a PPC call (a copy of it). */
6186
6187 static gfc_expr*
6188 extract_ppc_passed_object (gfc_expr *e)
6189 {
6190 gfc_expr *po;
6191 gfc_ref **ref;
6192
6193 po = gfc_get_expr ();
6194 po->expr_type = EXPR_VARIABLE;
6195 po->symtree = e->symtree;
6196 po->ref = gfc_copy_ref (e->ref);
6197 po->where = e->where;
6198
6199 /* Remove PPC reference. */
6200 ref = &po->ref;
6201 while ((*ref)->next)
6202 ref = &(*ref)->next;
6203 gfc_free_ref_list (*ref);
6204 *ref = NULL;
6205
6206 if (!gfc_resolve_expr (po))
6207 return NULL;
6208
6209 return po;
6210 }
6211
6212
6213 /* Update the actual arglist of a procedure pointer component to include the
6214 passed-object. */
6215
6216 static bool
6217 update_ppc_arglist (gfc_expr* e)
6218 {
6219 gfc_expr* po;
6220 gfc_component *ppc;
6221 gfc_typebound_proc* tb;
6222
6223 ppc = gfc_get_proc_ptr_comp (e);
6224 if (!ppc)
6225 return false;
6226
6227 tb = ppc->tb;
6228
6229 if (tb->error)
6230 return false;
6231 else if (tb->nopass)
6232 return true;
6233
6234 po = extract_ppc_passed_object (e);
6235 if (!po)
6236 return false;
6237
6238 /* F08:R739. */
6239 if (po->rank != 0)
6240 {
6241 gfc_error ("Passed-object at %L must be scalar", &e->where);
6242 return false;
6243 }
6244
6245 /* F08:C611. */
6246 if (po->ts.type == BT_DERIVED && po->ts.u.derived->attr.abstract)
6247 {
6248 gfc_error ("Base object for procedure-pointer component call at %L is of"
6249 " ABSTRACT type %qs", &e->where, po->ts.u.derived->name);
6250 return false;
6251 }
6252
6253 gcc_assert (tb->pass_arg_num > 0);
6254 e->value.compcall.actual = update_arglist_pass (e->value.compcall.actual, po,
6255 tb->pass_arg_num,
6256 tb->pass_arg);
6257
6258 return true;
6259 }
6260
6261
6262 /* Check that the object a TBP is called on is valid, i.e. it must not be
6263 of ABSTRACT type (as in subobject%abstract_parent%tbp()). */
6264
6265 static bool
6266 check_typebound_baseobject (gfc_expr* e)
6267 {
6268 gfc_expr* base;
6269 bool return_value = false;
6270
6271 base = extract_compcall_passed_object (e);
6272 if (!base)
6273 return false;
6274
6275 if (base->ts.type != BT_DERIVED && base->ts.type != BT_CLASS)
6276 {
6277 gfc_error ("Error in typebound call at %L", &e->where);
6278 goto cleanup;
6279 }
6280
6281 if (base->ts.type == BT_CLASS && !gfc_expr_attr (base).class_ok)
6282 return false;
6283
6284 /* F08:C611. */
6285 if (base->ts.type == BT_DERIVED && base->ts.u.derived->attr.abstract)
6286 {
6287 gfc_error ("Base object for type-bound procedure call at %L is of"
6288 " ABSTRACT type %qs", &e->where, base->ts.u.derived->name);
6289 goto cleanup;
6290 }
6291
6292 /* F08:C1230. If the procedure called is NOPASS,
6293 the base object must be scalar. */
6294 if (e->value.compcall.tbp->nopass && base->rank != 0)
6295 {
6296 gfc_error ("Base object for NOPASS type-bound procedure call at %L must"
6297 " be scalar", &e->where);
6298 goto cleanup;
6299 }
6300
6301 return_value = true;
6302
6303 cleanup:
6304 gfc_free_expr (base);
6305 return return_value;
6306 }
6307
6308
6309 /* Resolve a call to a type-bound procedure, either function or subroutine,
6310 statically from the data in an EXPR_COMPCALL expression. The adapted
6311 arglist and the target-procedure symtree are returned. */
6312
6313 static bool
6314 resolve_typebound_static (gfc_expr* e, gfc_symtree** target,
6315 gfc_actual_arglist** actual)
6316 {
6317 gcc_assert (e->expr_type == EXPR_COMPCALL);
6318 gcc_assert (!e->value.compcall.tbp->is_generic);
6319
6320 /* Update the actual arglist for PASS. */
6321 if (!update_compcall_arglist (e))
6322 return false;
6323
6324 *actual = e->value.compcall.actual;
6325 *target = e->value.compcall.tbp->u.specific;
6326
6327 gfc_free_ref_list (e->ref);
6328 e->ref = NULL;
6329 e->value.compcall.actual = NULL;
6330
6331 /* If we find a deferred typebound procedure, check for derived types
6332 that an overriding typebound procedure has not been missed. */
6333 if (e->value.compcall.name
6334 && !e->value.compcall.tbp->non_overridable
6335 && e->value.compcall.base_object
6336 && e->value.compcall.base_object->ts.type == BT_DERIVED)
6337 {
6338 gfc_symtree *st;
6339 gfc_symbol *derived;
6340
6341 /* Use the derived type of the base_object. */
6342 derived = e->value.compcall.base_object->ts.u.derived;
6343 st = NULL;
6344
6345 /* If necessary, go through the inheritance chain. */
6346 while (!st && derived)
6347 {
6348 /* Look for the typebound procedure 'name'. */
6349 if (derived->f2k_derived && derived->f2k_derived->tb_sym_root)
6350 st = gfc_find_symtree (derived->f2k_derived->tb_sym_root,
6351 e->value.compcall.name);
6352 if (!st)
6353 derived = gfc_get_derived_super_type (derived);
6354 }
6355
6356 /* Now find the specific name in the derived type namespace. */
6357 if (st && st->n.tb && st->n.tb->u.specific)
6358 gfc_find_sym_tree (st->n.tb->u.specific->name,
6359 derived->ns, 1, &st);
6360 if (st)
6361 *target = st;
6362 }
6363 return true;
6364 }
6365
6366
6367 /* Get the ultimate declared type from an expression. In addition,
6368 return the last class/derived type reference and the copy of the
6369 reference list. If check_types is set true, derived types are
6370 identified as well as class references. */
6371 static gfc_symbol*
6372 get_declared_from_expr (gfc_ref **class_ref, gfc_ref **new_ref,
6373 gfc_expr *e, bool check_types)
6374 {
6375 gfc_symbol *declared;
6376 gfc_ref *ref;
6377
6378 declared = NULL;
6379 if (class_ref)
6380 *class_ref = NULL;
6381 if (new_ref)
6382 *new_ref = gfc_copy_ref (e->ref);
6383
6384 for (ref = e->ref; ref; ref = ref->next)
6385 {
6386 if (ref->type != REF_COMPONENT)
6387 continue;
6388
6389 if ((ref->u.c.component->ts.type == BT_CLASS
6390 || (check_types && gfc_bt_struct (ref->u.c.component->ts.type)))
6391 && ref->u.c.component->attr.flavor != FL_PROCEDURE)
6392 {
6393 declared = ref->u.c.component->ts.u.derived;
6394 if (class_ref)
6395 *class_ref = ref;
6396 }
6397 }
6398
6399 if (declared == NULL)
6400 declared = e->symtree->n.sym->ts.u.derived;
6401
6402 return declared;
6403 }
6404
6405
6406 /* Given an EXPR_COMPCALL calling a GENERIC typebound procedure, figure out
6407 which of the specific bindings (if any) matches the arglist and transform
6408 the expression into a call of that binding. */
6409
6410 static bool
6411 resolve_typebound_generic_call (gfc_expr* e, const char **name)
6412 {
6413 gfc_typebound_proc* genproc;
6414 const char* genname;
6415 gfc_symtree *st;
6416 gfc_symbol *derived;
6417
6418 gcc_assert (e->expr_type == EXPR_COMPCALL);
6419 genname = e->value.compcall.name;
6420 genproc = e->value.compcall.tbp;
6421
6422 if (!genproc->is_generic)
6423 return true;
6424
6425 /* Try the bindings on this type and in the inheritance hierarchy. */
6426 for (; genproc; genproc = genproc->overridden)
6427 {
6428 gfc_tbp_generic* g;
6429
6430 gcc_assert (genproc->is_generic);
6431 for (g = genproc->u.generic; g; g = g->next)
6432 {
6433 gfc_symbol* target;
6434 gfc_actual_arglist* args;
6435 bool matches;
6436
6437 gcc_assert (g->specific);
6438
6439 if (g->specific->error)
6440 continue;
6441
6442 target = g->specific->u.specific->n.sym;
6443
6444 /* Get the right arglist by handling PASS/NOPASS. */
6445 args = gfc_copy_actual_arglist (e->value.compcall.actual);
6446 if (!g->specific->nopass)
6447 {
6448 gfc_expr* po;
6449 po = extract_compcall_passed_object (e);
6450 if (!po)
6451 {
6452 gfc_free_actual_arglist (args);
6453 return false;
6454 }
6455
6456 gcc_assert (g->specific->pass_arg_num > 0);
6457 gcc_assert (!g->specific->error);
6458 args = update_arglist_pass (args, po, g->specific->pass_arg_num,
6459 g->specific->pass_arg);
6460 }
6461 resolve_actual_arglist (args, target->attr.proc,
6462 is_external_proc (target)
6463 && gfc_sym_get_dummy_args (target) == NULL);
6464
6465 /* Check if this arglist matches the formal. */
6466 matches = gfc_arglist_matches_symbol (&args, target);
6467
6468 /* Clean up and break out of the loop if we've found it. */
6469 gfc_free_actual_arglist (args);
6470 if (matches)
6471 {
6472 e->value.compcall.tbp = g->specific;
6473 genname = g->specific_st->name;
6474 /* Pass along the name for CLASS methods, where the vtab
6475 procedure pointer component has to be referenced. */
6476 if (name)
6477 *name = genname;
6478 goto success;
6479 }
6480 }
6481 }
6482
6483 /* Nothing matching found! */
6484 gfc_error ("Found no matching specific binding for the call to the GENERIC"
6485 " %qs at %L", genname, &e->where);
6486 return false;
6487
6488 success:
6489 /* Make sure that we have the right specific instance for the name. */
6490 derived = get_declared_from_expr (NULL, NULL, e, true);
6491
6492 st = gfc_find_typebound_proc (derived, NULL, genname, true, &e->where);
6493 if (st)
6494 e->value.compcall.tbp = st->n.tb;
6495
6496 return true;
6497 }
6498
6499
6500 /* Resolve a call to a type-bound subroutine. */
6501
6502 static bool
6503 resolve_typebound_call (gfc_code* c, const char **name, bool *overridable)
6504 {
6505 gfc_actual_arglist* newactual;
6506 gfc_symtree* target;
6507
6508 /* Check that's really a SUBROUTINE. */
6509 if (!c->expr1->value.compcall.tbp->subroutine)
6510 {
6511 if (!c->expr1->value.compcall.tbp->is_generic
6512 && c->expr1->value.compcall.tbp->u.specific
6513 && c->expr1->value.compcall.tbp->u.specific->n.sym
6514 && c->expr1->value.compcall.tbp->u.specific->n.sym->attr.subroutine)
6515 c->expr1->value.compcall.tbp->subroutine = 1;
6516 else
6517 {
6518 gfc_error ("%qs at %L should be a SUBROUTINE",
6519 c->expr1->value.compcall.name, &c->loc);
6520 return false;
6521 }
6522 }
6523
6524 if (!check_typebound_baseobject (c->expr1))
6525 return false;
6526
6527 /* Pass along the name for CLASS methods, where the vtab
6528 procedure pointer component has to be referenced. */
6529 if (name)
6530 *name = c->expr1->value.compcall.name;
6531
6532 if (!resolve_typebound_generic_call (c->expr1, name))
6533 return false;
6534
6535 /* Pass along the NON_OVERRIDABLE attribute of the specific TBP. */
6536 if (overridable)
6537 *overridable = !c->expr1->value.compcall.tbp->non_overridable;
6538
6539 /* Transform into an ordinary EXEC_CALL for now. */
6540
6541 if (!resolve_typebound_static (c->expr1, &target, &newactual))
6542 return false;
6543
6544 c->ext.actual = newactual;
6545 c->symtree = target;
6546 c->op = (c->expr1->value.compcall.assign ? EXEC_ASSIGN_CALL : EXEC_CALL);
6547
6548 gcc_assert (!c->expr1->ref && !c->expr1->value.compcall.actual);
6549
6550 gfc_free_expr (c->expr1);
6551 c->expr1 = gfc_get_expr ();
6552 c->expr1->expr_type = EXPR_FUNCTION;
6553 c->expr1->symtree = target;
6554 c->expr1->where = c->loc;
6555
6556 return resolve_call (c);
6557 }
6558
6559
6560 /* Resolve a component-call expression. */
6561 static bool
6562 resolve_compcall (gfc_expr* e, const char **name)
6563 {
6564 gfc_actual_arglist* newactual;
6565 gfc_symtree* target;
6566
6567 /* Check that's really a FUNCTION. */
6568 if (!e->value.compcall.tbp->function)
6569 {
6570 gfc_error ("%qs at %L should be a FUNCTION",
6571 e->value.compcall.name, &e->where);
6572 return false;
6573 }
6574
6575
6576 /* These must not be assign-calls! */
6577 gcc_assert (!e->value.compcall.assign);
6578
6579 if (!check_typebound_baseobject (e))
6580 return false;
6581
6582 /* Pass along the name for CLASS methods, where the vtab
6583 procedure pointer component has to be referenced. */
6584 if (name)
6585 *name = e->value.compcall.name;
6586
6587 if (!resolve_typebound_generic_call (e, name))
6588 return false;
6589 gcc_assert (!e->value.compcall.tbp->is_generic);
6590
6591 /* Take the rank from the function's symbol. */
6592 if (e->value.compcall.tbp->u.specific->n.sym->as)
6593 e->rank = e->value.compcall.tbp->u.specific->n.sym->as->rank;
6594
6595 /* For now, we simply transform it into an EXPR_FUNCTION call with the same
6596 arglist to the TBP's binding target. */
6597
6598 if (!resolve_typebound_static (e, &target, &newactual))
6599 return false;
6600
6601 e->value.function.actual = newactual;
6602 e->value.function.name = NULL;
6603 e->value.function.esym = target->n.sym;
6604 e->value.function.isym = NULL;
6605 e->symtree = target;
6606 e->ts = target->n.sym->ts;
6607 e->expr_type = EXPR_FUNCTION;
6608
6609 /* Resolution is not necessary if this is a class subroutine; this
6610 function only has to identify the specific proc. Resolution of
6611 the call will be done next in resolve_typebound_call. */
6612 return gfc_resolve_expr (e);
6613 }
6614
6615
6616 static bool resolve_fl_derived (gfc_symbol *sym);
6617
6618
6619 /* Resolve a typebound function, or 'method'. First separate all
6620 the non-CLASS references by calling resolve_compcall directly. */
6621
6622 static bool
6623 resolve_typebound_function (gfc_expr* e)
6624 {
6625 gfc_symbol *declared;
6626 gfc_component *c;
6627 gfc_ref *new_ref;
6628 gfc_ref *class_ref;
6629 gfc_symtree *st;
6630 const char *name;
6631 gfc_typespec ts;
6632 gfc_expr *expr;
6633 bool overridable;
6634
6635 st = e->symtree;
6636
6637 /* Deal with typebound operators for CLASS objects. */
6638 expr = e->value.compcall.base_object;
6639 overridable = !e->value.compcall.tbp->non_overridable;
6640 if (expr && expr->ts.type == BT_CLASS && e->value.compcall.name)
6641 {
6642 /* Since the typebound operators are generic, we have to ensure
6643 that any delays in resolution are corrected and that the vtab
6644 is present. */
6645 ts = expr->ts;
6646 declared = ts.u.derived;
6647 c = gfc_find_component (declared, "_vptr", true, true, NULL);
6648 if (c->ts.u.derived == NULL)
6649 c->ts.u.derived = gfc_find_derived_vtab (declared);
6650
6651 if (!resolve_compcall (e, &name))
6652 return false;
6653
6654 /* Use the generic name if it is there. */
6655 name = name ? name : e->value.function.esym->name;
6656 e->symtree = expr->symtree;
6657 e->ref = gfc_copy_ref (expr->ref);
6658 get_declared_from_expr (&class_ref, NULL, e, false);
6659
6660 /* Trim away the extraneous references that emerge from nested
6661 use of interface.c (extend_expr). */
6662 if (class_ref && class_ref->next)
6663 {
6664 gfc_free_ref_list (class_ref->next);
6665 class_ref->next = NULL;
6666 }
6667 else if (e->ref && !class_ref && expr->ts.type != BT_CLASS)
6668 {
6669 gfc_free_ref_list (e->ref);
6670 e->ref = NULL;
6671 }
6672
6673 gfc_add_vptr_component (e);
6674 gfc_add_component_ref (e, name);
6675 e->value.function.esym = NULL;
6676 if (expr->expr_type != EXPR_VARIABLE)
6677 e->base_expr = expr;
6678 return true;
6679 }
6680
6681 if (st == NULL)
6682 return resolve_compcall (e, NULL);
6683
6684 if (!gfc_resolve_ref (e))
6685 return false;
6686
6687 /* Get the CLASS declared type. */
6688 declared = get_declared_from_expr (&class_ref, &new_ref, e, true);
6689
6690 if (!resolve_fl_derived (declared))
6691 return false;
6692
6693 /* Weed out cases of the ultimate component being a derived type. */
6694 if ((class_ref && gfc_bt_struct (class_ref->u.c.component->ts.type))
6695 || (!class_ref && st->n.sym->ts.type != BT_CLASS))
6696 {
6697 gfc_free_ref_list (new_ref);
6698 return resolve_compcall (e, NULL);
6699 }
6700
6701 c = gfc_find_component (declared, "_data", true, true, NULL);
6702
6703 /* Treat the call as if it is a typebound procedure, in order to roll
6704 out the correct name for the specific function. */
6705 if (!resolve_compcall (e, &name))
6706 {
6707 gfc_free_ref_list (new_ref);
6708 return false;
6709 }
6710 ts = e->ts;
6711
6712 if (overridable)
6713 {
6714 /* Convert the expression to a procedure pointer component call. */
6715 e->value.function.esym = NULL;
6716 e->symtree = st;
6717
6718 if (new_ref)
6719 e->ref = new_ref;
6720
6721 /* '_vptr' points to the vtab, which contains the procedure pointers. */
6722 gfc_add_vptr_component (e);
6723 gfc_add_component_ref (e, name);
6724
6725 /* Recover the typespec for the expression. This is really only
6726 necessary for generic procedures, where the additional call
6727 to gfc_add_component_ref seems to throw the collection of the
6728 correct typespec. */
6729 e->ts = ts;
6730 }
6731 else if (new_ref)
6732 gfc_free_ref_list (new_ref);
6733
6734 return true;
6735 }
6736
6737 /* Resolve a typebound subroutine, or 'method'. First separate all
6738 the non-CLASS references by calling resolve_typebound_call
6739 directly. */
6740
6741 static bool
6742 resolve_typebound_subroutine (gfc_code *code)
6743 {
6744 gfc_symbol *declared;
6745 gfc_component *c;
6746 gfc_ref *new_ref;
6747 gfc_ref *class_ref;
6748 gfc_symtree *st;
6749 const char *name;
6750 gfc_typespec ts;
6751 gfc_expr *expr;
6752 bool overridable;
6753
6754 st = code->expr1->symtree;
6755
6756 /* Deal with typebound operators for CLASS objects. */
6757 expr = code->expr1->value.compcall.base_object;
6758 overridable = !code->expr1->value.compcall.tbp->non_overridable;
6759 if (expr && expr->ts.type == BT_CLASS && code->expr1->value.compcall.name)
6760 {
6761 /* If the base_object is not a variable, the corresponding actual
6762 argument expression must be stored in e->base_expression so
6763 that the corresponding tree temporary can be used as the base
6764 object in gfc_conv_procedure_call. */
6765 if (expr->expr_type != EXPR_VARIABLE)
6766 {
6767 gfc_actual_arglist *args;
6768
6769 args= code->expr1->value.function.actual;
6770 for (; args; args = args->next)
6771 if (expr == args->expr)
6772 expr = args->expr;
6773 }
6774
6775 /* Since the typebound operators are generic, we have to ensure
6776 that any delays in resolution are corrected and that the vtab
6777 is present. */
6778 declared = expr->ts.u.derived;
6779 c = gfc_find_component (declared, "_vptr", true, true, NULL);
6780 if (c->ts.u.derived == NULL)
6781 c->ts.u.derived = gfc_find_derived_vtab (declared);
6782
6783 if (!resolve_typebound_call (code, &name, NULL))
6784 return false;
6785
6786 /* Use the generic name if it is there. */
6787 name = name ? name : code->expr1->value.function.esym->name;
6788 code->expr1->symtree = expr->symtree;
6789 code->expr1->ref = gfc_copy_ref (expr->ref);
6790
6791 /* Trim away the extraneous references that emerge from nested
6792 use of interface.c (extend_expr). */
6793 get_declared_from_expr (&class_ref, NULL, code->expr1, false);
6794 if (class_ref && class_ref->next)
6795 {
6796 gfc_free_ref_list (class_ref->next);
6797 class_ref->next = NULL;
6798 }
6799 else if (code->expr1->ref && !class_ref)
6800 {
6801 gfc_free_ref_list (code->expr1->ref);
6802 code->expr1->ref = NULL;
6803 }
6804
6805 /* Now use the procedure in the vtable. */
6806 gfc_add_vptr_component (code->expr1);
6807 gfc_add_component_ref (code->expr1, name);
6808 code->expr1->value.function.esym = NULL;
6809 if (expr->expr_type != EXPR_VARIABLE)
6810 code->expr1->base_expr = expr;
6811 return true;
6812 }
6813
6814 if (st == NULL)
6815 return resolve_typebound_call (code, NULL, NULL);
6816
6817 if (!gfc_resolve_ref (code->expr1))
6818 return false;
6819
6820 /* Get the CLASS declared type. */
6821 get_declared_from_expr (&class_ref, &new_ref, code->expr1, true);
6822
6823 /* Weed out cases of the ultimate component being a derived type. */
6824 if ((class_ref && gfc_bt_struct (class_ref->u.c.component->ts.type))
6825 || (!class_ref && st->n.sym->ts.type != BT_CLASS))
6826 {
6827 gfc_free_ref_list (new_ref);
6828 return resolve_typebound_call (code, NULL, NULL);
6829 }
6830
6831 if (!resolve_typebound_call (code, &name, &overridable))
6832 {
6833 gfc_free_ref_list (new_ref);
6834 return false;
6835 }
6836 ts = code->expr1->ts;
6837
6838 if (overridable)
6839 {
6840 /* Convert the expression to a procedure pointer component call. */
6841 code->expr1->value.function.esym = NULL;
6842 code->expr1->symtree = st;
6843
6844 if (new_ref)
6845 code->expr1->ref = new_ref;
6846
6847 /* '_vptr' points to the vtab, which contains the procedure pointers. */
6848 gfc_add_vptr_component (code->expr1);
6849 gfc_add_component_ref (code->expr1, name);
6850
6851 /* Recover the typespec for the expression. This is really only
6852 necessary for generic procedures, where the additional call
6853 to gfc_add_component_ref seems to throw the collection of the
6854 correct typespec. */
6855 code->expr1->ts = ts;
6856 }
6857 else if (new_ref)
6858 gfc_free_ref_list (new_ref);
6859
6860 return true;
6861 }
6862
6863
6864 /* Resolve a CALL to a Procedure Pointer Component (Subroutine). */
6865
6866 static bool
6867 resolve_ppc_call (gfc_code* c)
6868 {
6869 gfc_component *comp;
6870
6871 comp = gfc_get_proc_ptr_comp (c->expr1);
6872 gcc_assert (comp != NULL);
6873
6874 c->resolved_sym = c->expr1->symtree->n.sym;
6875 c->expr1->expr_type = EXPR_VARIABLE;
6876
6877 if (!comp->attr.subroutine)
6878 gfc_add_subroutine (&comp->attr, comp->name, &c->expr1->where);
6879
6880 if (!gfc_resolve_ref (c->expr1))
6881 return false;
6882
6883 if (!update_ppc_arglist (c->expr1))
6884 return false;
6885
6886 c->ext.actual = c->expr1->value.compcall.actual;
6887
6888 if (!resolve_actual_arglist (c->ext.actual, comp->attr.proc,
6889 !(comp->ts.interface
6890 && comp->ts.interface->formal)))
6891 return false;
6892
6893 if (!pure_subroutine (comp->ts.interface, comp->name, &c->expr1->where))
6894 return false;
6895
6896 gfc_ppc_use (comp, &c->expr1->value.compcall.actual, &c->expr1->where);
6897
6898 return true;
6899 }
6900
6901
6902 /* Resolve a Function Call to a Procedure Pointer Component (Function). */
6903
6904 static bool
6905 resolve_expr_ppc (gfc_expr* e)
6906 {
6907 gfc_component *comp;
6908
6909 comp = gfc_get_proc_ptr_comp (e);
6910 gcc_assert (comp != NULL);
6911
6912 /* Convert to EXPR_FUNCTION. */
6913 e->expr_type = EXPR_FUNCTION;
6914 e->value.function.isym = NULL;
6915 e->value.function.actual = e->value.compcall.actual;
6916 e->ts = comp->ts;
6917 if (comp->as != NULL)
6918 e->rank = comp->as->rank;
6919
6920 if (!comp->attr.function)
6921 gfc_add_function (&comp->attr, comp->name, &e->where);
6922
6923 if (!gfc_resolve_ref (e))
6924 return false;
6925
6926 if (!resolve_actual_arglist (e->value.function.actual, comp->attr.proc,
6927 !(comp->ts.interface
6928 && comp->ts.interface->formal)))
6929 return false;
6930
6931 if (!update_ppc_arglist (e))
6932 return false;
6933
6934 if (!check_pure_function(e))
6935 return false;
6936
6937 gfc_ppc_use (comp, &e->value.compcall.actual, &e->where);
6938
6939 return true;
6940 }
6941
6942
6943 static bool
6944 gfc_is_expandable_expr (gfc_expr *e)
6945 {
6946 gfc_constructor *con;
6947
6948 if (e->expr_type == EXPR_ARRAY)
6949 {
6950 /* Traverse the constructor looking for variables that are flavor
6951 parameter. Parameters must be expanded since they are fully used at
6952 compile time. */
6953 con = gfc_constructor_first (e->value.constructor);
6954 for (; con; con = gfc_constructor_next (con))
6955 {
6956 if (con->expr->expr_type == EXPR_VARIABLE
6957 && con->expr->symtree
6958 && (con->expr->symtree->n.sym->attr.flavor == FL_PARAMETER
6959 || con->expr->symtree->n.sym->attr.flavor == FL_VARIABLE))
6960 return true;
6961 if (con->expr->expr_type == EXPR_ARRAY
6962 && gfc_is_expandable_expr (con->expr))
6963 return true;
6964 }
6965 }
6966
6967 return false;
6968 }
6969
6970
6971 /* Sometimes variables in specification expressions of the result
6972 of module procedures in submodules wind up not being the 'real'
6973 dummy. Find this, if possible, in the namespace of the first
6974 formal argument. */
6975
6976 static void
6977 fixup_unique_dummy (gfc_expr *e)
6978 {
6979 gfc_symtree *st = NULL;
6980 gfc_symbol *s = NULL;
6981
6982 if (e->symtree->n.sym->ns->proc_name
6983 && e->symtree->n.sym->ns->proc_name->formal)
6984 s = e->symtree->n.sym->ns->proc_name->formal->sym;
6985
6986 if (s != NULL)
6987 st = gfc_find_symtree (s->ns->sym_root, e->symtree->n.sym->name);
6988
6989 if (st != NULL
6990 && st->n.sym != NULL
6991 && st->n.sym->attr.dummy)
6992 e->symtree = st;
6993 }
6994
6995 /* Resolve an expression. That is, make sure that types of operands agree
6996 with their operators, intrinsic operators are converted to function calls
6997 for overloaded types and unresolved function references are resolved. */
6998
6999 bool
7000 gfc_resolve_expr (gfc_expr *e)
7001 {
7002 bool t;
7003 bool inquiry_save, actual_arg_save, first_actual_arg_save;
7004
7005 if (e == NULL || e->do_not_resolve_again)
7006 return true;
7007
7008 /* inquiry_argument only applies to variables. */
7009 inquiry_save = inquiry_argument;
7010 actual_arg_save = actual_arg;
7011 first_actual_arg_save = first_actual_arg;
7012
7013 if (e->expr_type != EXPR_VARIABLE)
7014 {
7015 inquiry_argument = false;
7016 actual_arg = false;
7017 first_actual_arg = false;
7018 }
7019 else if (e->symtree != NULL
7020 && *e->symtree->name == '@'
7021 && e->symtree->n.sym->attr.dummy)
7022 {
7023 /* Deal with submodule specification expressions that are not
7024 found to be referenced in module.c(read_cleanup). */
7025 fixup_unique_dummy (e);
7026 }
7027
7028 switch (e->expr_type)
7029 {
7030 case EXPR_OP:
7031 t = resolve_operator (e);
7032 break;
7033
7034 case EXPR_FUNCTION:
7035 case EXPR_VARIABLE:
7036
7037 if (check_host_association (e))
7038 t = resolve_function (e);
7039 else
7040 t = resolve_variable (e);
7041
7042 if (e->ts.type == BT_CHARACTER && e->ts.u.cl == NULL && e->ref
7043 && e->ref->type != REF_SUBSTRING)
7044 gfc_resolve_substring_charlen (e);
7045
7046 break;
7047
7048 case EXPR_COMPCALL:
7049 t = resolve_typebound_function (e);
7050 break;
7051
7052 case EXPR_SUBSTRING:
7053 t = gfc_resolve_ref (e);
7054 break;
7055
7056 case EXPR_CONSTANT:
7057 case EXPR_NULL:
7058 t = true;
7059 break;
7060
7061 case EXPR_PPC:
7062 t = resolve_expr_ppc (e);
7063 break;
7064
7065 case EXPR_ARRAY:
7066 t = false;
7067 if (!gfc_resolve_ref (e))
7068 break;
7069
7070 t = gfc_resolve_array_constructor (e);
7071 /* Also try to expand a constructor. */
7072 if (t)
7073 {
7074 gfc_expression_rank (e);
7075 if (gfc_is_constant_expr (e) || gfc_is_expandable_expr (e))
7076 gfc_expand_constructor (e, false);
7077 }
7078
7079 /* This provides the opportunity for the length of constructors with
7080 character valued function elements to propagate the string length
7081 to the expression. */
7082 if (t && e->ts.type == BT_CHARACTER)
7083 {
7084 /* For efficiency, we call gfc_expand_constructor for BT_CHARACTER
7085 here rather then add a duplicate test for it above. */
7086 gfc_expand_constructor (e, false);
7087 t = gfc_resolve_character_array_constructor (e);
7088 }
7089
7090 break;
7091
7092 case EXPR_STRUCTURE:
7093 t = gfc_resolve_ref (e);
7094 if (!t)
7095 break;
7096
7097 t = resolve_structure_cons (e, 0);
7098 if (!t)
7099 break;
7100
7101 t = gfc_simplify_expr (e, 0);
7102 break;
7103
7104 default:
7105 gfc_internal_error ("gfc_resolve_expr(): Bad expression type");
7106 }
7107
7108 if (e->ts.type == BT_CHARACTER && t && !e->ts.u.cl)
7109 fixup_charlen (e);
7110
7111 inquiry_argument = inquiry_save;
7112 actual_arg = actual_arg_save;
7113 first_actual_arg = first_actual_arg_save;
7114
7115 /* For some reason, resolving these expressions a second time mangles
7116 the typespec of the expression itself. */
7117 if (t && e->expr_type == EXPR_VARIABLE
7118 && e->symtree->n.sym->attr.select_rank_temporary
7119 && UNLIMITED_POLY (e->symtree->n.sym))
7120 e->do_not_resolve_again = 1;
7121
7122 return t;
7123 }
7124
7125
7126 /* Resolve an expression from an iterator. They must be scalar and have
7127 INTEGER or (optionally) REAL type. */
7128
7129 static bool
7130 gfc_resolve_iterator_expr (gfc_expr *expr, bool real_ok,
7131 const char *name_msgid)
7132 {
7133 if (!gfc_resolve_expr (expr))
7134 return false;
7135
7136 if (expr->rank != 0)
7137 {
7138 gfc_error ("%s at %L must be a scalar", _(name_msgid), &expr->where);
7139 return false;
7140 }
7141
7142 if (expr->ts.type != BT_INTEGER)
7143 {
7144 if (expr->ts.type == BT_REAL)
7145 {
7146 if (real_ok)
7147 return gfc_notify_std (GFC_STD_F95_DEL,
7148 "%s at %L must be integer",
7149 _(name_msgid), &expr->where);
7150 else
7151 {
7152 gfc_error ("%s at %L must be INTEGER", _(name_msgid),
7153 &expr->where);
7154 return false;
7155 }
7156 }
7157 else
7158 {
7159 gfc_error ("%s at %L must be INTEGER", _(name_msgid), &expr->where);
7160 return false;
7161 }
7162 }
7163 return true;
7164 }
7165
7166
7167 /* Resolve the expressions in an iterator structure. If REAL_OK is
7168 false allow only INTEGER type iterators, otherwise allow REAL types.
7169 Set own_scope to true for ac-implied-do and data-implied-do as those
7170 have a separate scope such that, e.g., a INTENT(IN) doesn't apply. */
7171
7172 bool
7173 gfc_resolve_iterator (gfc_iterator *iter, bool real_ok, bool own_scope)
7174 {
7175 if (!gfc_resolve_iterator_expr (iter->var, real_ok, "Loop variable"))
7176 return false;
7177
7178 if (!gfc_check_vardef_context (iter->var, false, false, own_scope,
7179 _("iterator variable")))
7180 return false;
7181
7182 if (!gfc_resolve_iterator_expr (iter->start, real_ok,
7183 "Start expression in DO loop"))
7184 return false;
7185
7186 if (!gfc_resolve_iterator_expr (iter->end, real_ok,
7187 "End expression in DO loop"))
7188 return false;
7189
7190 if (!gfc_resolve_iterator_expr (iter->step, real_ok,
7191 "Step expression in DO loop"))
7192 return false;
7193
7194 /* Convert start, end, and step to the same type as var. */
7195 if (iter->start->ts.kind != iter->var->ts.kind
7196 || iter->start->ts.type != iter->var->ts.type)
7197 gfc_convert_type (iter->start, &iter->var->ts, 1);
7198
7199 if (iter->end->ts.kind != iter->var->ts.kind
7200 || iter->end->ts.type != iter->var->ts.type)
7201 gfc_convert_type (iter->end, &iter->var->ts, 1);
7202
7203 if (iter->step->ts.kind != iter->var->ts.kind
7204 || iter->step->ts.type != iter->var->ts.type)
7205 gfc_convert_type (iter->step, &iter->var->ts, 1);
7206
7207 if (iter->step->expr_type == EXPR_CONSTANT)
7208 {
7209 if ((iter->step->ts.type == BT_INTEGER
7210 && mpz_cmp_ui (iter->step->value.integer, 0) == 0)
7211 || (iter->step->ts.type == BT_REAL
7212 && mpfr_sgn (iter->step->value.real) == 0))
7213 {
7214 gfc_error ("Step expression in DO loop at %L cannot be zero",
7215 &iter->step->where);
7216 return false;
7217 }
7218 }
7219
7220 if (iter->start->expr_type == EXPR_CONSTANT
7221 && iter->end->expr_type == EXPR_CONSTANT
7222 && iter->step->expr_type == EXPR_CONSTANT)
7223 {
7224 int sgn, cmp;
7225 if (iter->start->ts.type == BT_INTEGER)
7226 {
7227 sgn = mpz_cmp_ui (iter->step->value.integer, 0);
7228 cmp = mpz_cmp (iter->end->value.integer, iter->start->value.integer);
7229 }
7230 else
7231 {
7232 sgn = mpfr_sgn (iter->step->value.real);
7233 cmp = mpfr_cmp (iter->end->value.real, iter->start->value.real);
7234 }
7235 if (warn_zerotrip && ((sgn > 0 && cmp < 0) || (sgn < 0 && cmp > 0)))
7236 gfc_warning (OPT_Wzerotrip,
7237 "DO loop at %L will be executed zero times",
7238 &iter->step->where);
7239 }
7240
7241 if (iter->end->expr_type == EXPR_CONSTANT
7242 && iter->end->ts.type == BT_INTEGER
7243 && iter->step->expr_type == EXPR_CONSTANT
7244 && iter->step->ts.type == BT_INTEGER
7245 && (mpz_cmp_si (iter->step->value.integer, -1L) == 0
7246 || mpz_cmp_si (iter->step->value.integer, 1L) == 0))
7247 {
7248 bool is_step_positive = mpz_cmp_ui (iter->step->value.integer, 1) == 0;
7249 int k = gfc_validate_kind (BT_INTEGER, iter->end->ts.kind, false);
7250
7251 if (is_step_positive
7252 && mpz_cmp (iter->end->value.integer, gfc_integer_kinds[k].huge) == 0)
7253 gfc_warning (OPT_Wundefined_do_loop,
7254 "DO loop at %L is undefined as it overflows",
7255 &iter->step->where);
7256 else if (!is_step_positive
7257 && mpz_cmp (iter->end->value.integer,
7258 gfc_integer_kinds[k].min_int) == 0)
7259 gfc_warning (OPT_Wundefined_do_loop,
7260 "DO loop at %L is undefined as it underflows",
7261 &iter->step->where);
7262 }
7263
7264 return true;
7265 }
7266
7267
7268 /* Traversal function for find_forall_index. f == 2 signals that
7269 that variable itself is not to be checked - only the references. */
7270
7271 static bool
7272 forall_index (gfc_expr *expr, gfc_symbol *sym, int *f)
7273 {
7274 if (expr->expr_type != EXPR_VARIABLE)
7275 return false;
7276
7277 /* A scalar assignment */
7278 if (!expr->ref || *f == 1)
7279 {
7280 if (expr->symtree->n.sym == sym)
7281 return true;
7282 else
7283 return false;
7284 }
7285
7286 if (*f == 2)
7287 *f = 1;
7288 return false;
7289 }
7290
7291
7292 /* Check whether the FORALL index appears in the expression or not.
7293 Returns true if SYM is found in EXPR. */
7294
7295 bool
7296 find_forall_index (gfc_expr *expr, gfc_symbol *sym, int f)
7297 {
7298 if (gfc_traverse_expr (expr, sym, forall_index, f))
7299 return true;
7300 else
7301 return false;
7302 }
7303
7304
7305 /* Resolve a list of FORALL iterators. The FORALL index-name is constrained
7306 to be a scalar INTEGER variable. The subscripts and stride are scalar
7307 INTEGERs, and if stride is a constant it must be nonzero.
7308 Furthermore "A subscript or stride in a forall-triplet-spec shall
7309 not contain a reference to any index-name in the
7310 forall-triplet-spec-list in which it appears." (7.5.4.1) */
7311
7312 static void
7313 resolve_forall_iterators (gfc_forall_iterator *it)
7314 {
7315 gfc_forall_iterator *iter, *iter2;
7316
7317 for (iter = it; iter; iter = iter->next)
7318 {
7319 if (gfc_resolve_expr (iter->var)
7320 && (iter->var->ts.type != BT_INTEGER || iter->var->rank != 0))
7321 gfc_error ("FORALL index-name at %L must be a scalar INTEGER",
7322 &iter->var->where);
7323
7324 if (gfc_resolve_expr (iter->start)
7325 && (iter->start->ts.type != BT_INTEGER || iter->start->rank != 0))
7326 gfc_error ("FORALL start expression at %L must be a scalar INTEGER",
7327 &iter->start->where);
7328 if (iter->var->ts.kind != iter->start->ts.kind)
7329 gfc_convert_type (iter->start, &iter->var->ts, 1);
7330
7331 if (gfc_resolve_expr (iter->end)
7332 && (iter->end->ts.type != BT_INTEGER || iter->end->rank != 0))
7333 gfc_error ("FORALL end expression at %L must be a scalar INTEGER",
7334 &iter->end->where);
7335 if (iter->var->ts.kind != iter->end->ts.kind)
7336 gfc_convert_type (iter->end, &iter->var->ts, 1);
7337
7338 if (gfc_resolve_expr (iter->stride))
7339 {
7340 if (iter->stride->ts.type != BT_INTEGER || iter->stride->rank != 0)
7341 gfc_error ("FORALL stride expression at %L must be a scalar %s",
7342 &iter->stride->where, "INTEGER");
7343
7344 if (iter->stride->expr_type == EXPR_CONSTANT
7345 && mpz_cmp_ui (iter->stride->value.integer, 0) == 0)
7346 gfc_error ("FORALL stride expression at %L cannot be zero",
7347 &iter->stride->where);
7348 }
7349 if (iter->var->ts.kind != iter->stride->ts.kind)
7350 gfc_convert_type (iter->stride, &iter->var->ts, 1);
7351 }
7352
7353 for (iter = it; iter; iter = iter->next)
7354 for (iter2 = iter; iter2; iter2 = iter2->next)
7355 {
7356 if (find_forall_index (iter2->start, iter->var->symtree->n.sym, 0)
7357 || find_forall_index (iter2->end, iter->var->symtree->n.sym, 0)
7358 || find_forall_index (iter2->stride, iter->var->symtree->n.sym, 0))
7359 gfc_error ("FORALL index %qs may not appear in triplet "
7360 "specification at %L", iter->var->symtree->name,
7361 &iter2->start->where);
7362 }
7363 }
7364
7365
7366 /* Given a pointer to a symbol that is a derived type, see if it's
7367 inaccessible, i.e. if it's defined in another module and the components are
7368 PRIVATE. The search is recursive if necessary. Returns zero if no
7369 inaccessible components are found, nonzero otherwise. */
7370
7371 static int
7372 derived_inaccessible (gfc_symbol *sym)
7373 {
7374 gfc_component *c;
7375
7376 if (sym->attr.use_assoc && sym->attr.private_comp)
7377 return 1;
7378
7379 for (c = sym->components; c; c = c->next)
7380 {
7381 /* Prevent an infinite loop through this function. */
7382 if (c->ts.type == BT_DERIVED && c->attr.pointer
7383 && sym == c->ts.u.derived)
7384 continue;
7385
7386 if (c->ts.type == BT_DERIVED && derived_inaccessible (c->ts.u.derived))
7387 return 1;
7388 }
7389
7390 return 0;
7391 }
7392
7393
7394 /* Resolve the argument of a deallocate expression. The expression must be
7395 a pointer or a full array. */
7396
7397 static bool
7398 resolve_deallocate_expr (gfc_expr *e)
7399 {
7400 symbol_attribute attr;
7401 int allocatable, pointer;
7402 gfc_ref *ref;
7403 gfc_symbol *sym;
7404 gfc_component *c;
7405 bool unlimited;
7406
7407 if (!gfc_resolve_expr (e))
7408 return false;
7409
7410 if (e->expr_type != EXPR_VARIABLE)
7411 goto bad;
7412
7413 sym = e->symtree->n.sym;
7414 unlimited = UNLIMITED_POLY(sym);
7415
7416 if (sym->ts.type == BT_CLASS)
7417 {
7418 allocatable = CLASS_DATA (sym)->attr.allocatable;
7419 pointer = CLASS_DATA (sym)->attr.class_pointer;
7420 }
7421 else
7422 {
7423 allocatable = sym->attr.allocatable;
7424 pointer = sym->attr.pointer;
7425 }
7426 for (ref = e->ref; ref; ref = ref->next)
7427 {
7428 switch (ref->type)
7429 {
7430 case REF_ARRAY:
7431 if (ref->u.ar.type != AR_FULL
7432 && !(ref->u.ar.type == AR_ELEMENT && ref->u.ar.as->rank == 0
7433 && ref->u.ar.codimen && gfc_ref_this_image (ref)))
7434 allocatable = 0;
7435 break;
7436
7437 case REF_COMPONENT:
7438 c = ref->u.c.component;
7439 if (c->ts.type == BT_CLASS)
7440 {
7441 allocatable = CLASS_DATA (c)->attr.allocatable;
7442 pointer = CLASS_DATA (c)->attr.class_pointer;
7443 }
7444 else
7445 {
7446 allocatable = c->attr.allocatable;
7447 pointer = c->attr.pointer;
7448 }
7449 break;
7450
7451 case REF_SUBSTRING:
7452 case REF_INQUIRY:
7453 allocatable = 0;
7454 break;
7455 }
7456 }
7457
7458 attr = gfc_expr_attr (e);
7459
7460 if (allocatable == 0 && attr.pointer == 0 && !unlimited)
7461 {
7462 bad:
7463 gfc_error ("Allocate-object at %L must be ALLOCATABLE or a POINTER",
7464 &e->where);
7465 return false;
7466 }
7467
7468 /* F2008, C644. */
7469 if (gfc_is_coindexed (e))
7470 {
7471 gfc_error ("Coindexed allocatable object at %L", &e->where);
7472 return false;
7473 }
7474
7475 if (pointer
7476 && !gfc_check_vardef_context (e, true, true, false,
7477 _("DEALLOCATE object")))
7478 return false;
7479 if (!gfc_check_vardef_context (e, false, true, false,
7480 _("DEALLOCATE object")))
7481 return false;
7482
7483 return true;
7484 }
7485
7486
7487 /* Returns true if the expression e contains a reference to the symbol sym. */
7488 static bool
7489 sym_in_expr (gfc_expr *e, gfc_symbol *sym, int *f ATTRIBUTE_UNUSED)
7490 {
7491 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym == sym)
7492 return true;
7493
7494 return false;
7495 }
7496
7497 bool
7498 gfc_find_sym_in_expr (gfc_symbol *sym, gfc_expr *e)
7499 {
7500 return gfc_traverse_expr (e, sym, sym_in_expr, 0);
7501 }
7502
7503
7504 /* Given the expression node e for an allocatable/pointer of derived type to be
7505 allocated, get the expression node to be initialized afterwards (needed for
7506 derived types with default initializers, and derived types with allocatable
7507 components that need nullification.) */
7508
7509 gfc_expr *
7510 gfc_expr_to_initialize (gfc_expr *e)
7511 {
7512 gfc_expr *result;
7513 gfc_ref *ref;
7514 int i;
7515
7516 result = gfc_copy_expr (e);
7517
7518 /* Change the last array reference from AR_ELEMENT to AR_FULL. */
7519 for (ref = result->ref; ref; ref = ref->next)
7520 if (ref->type == REF_ARRAY && ref->next == NULL)
7521 {
7522 if (ref->u.ar.dimen == 0
7523 && ref->u.ar.as && ref->u.ar.as->corank)
7524 return result;
7525
7526 ref->u.ar.type = AR_FULL;
7527
7528 for (i = 0; i < ref->u.ar.dimen; i++)
7529 ref->u.ar.start[i] = ref->u.ar.end[i] = ref->u.ar.stride[i] = NULL;
7530
7531 break;
7532 }
7533
7534 gfc_free_shape (&result->shape, result->rank);
7535
7536 /* Recalculate rank, shape, etc. */
7537 gfc_resolve_expr (result);
7538 return result;
7539 }
7540
7541
7542 /* If the last ref of an expression is an array ref, return a copy of the
7543 expression with that one removed. Otherwise, a copy of the original
7544 expression. This is used for allocate-expressions and pointer assignment
7545 LHS, where there may be an array specification that needs to be stripped
7546 off when using gfc_check_vardef_context. */
7547
7548 static gfc_expr*
7549 remove_last_array_ref (gfc_expr* e)
7550 {
7551 gfc_expr* e2;
7552 gfc_ref** r;
7553
7554 e2 = gfc_copy_expr (e);
7555 for (r = &e2->ref; *r; r = &(*r)->next)
7556 if ((*r)->type == REF_ARRAY && !(*r)->next)
7557 {
7558 gfc_free_ref_list (*r);
7559 *r = NULL;
7560 break;
7561 }
7562
7563 return e2;
7564 }
7565
7566
7567 /* Used in resolve_allocate_expr to check that a allocation-object and
7568 a source-expr are conformable. This does not catch all possible
7569 cases; in particular a runtime checking is needed. */
7570
7571 static bool
7572 conformable_arrays (gfc_expr *e1, gfc_expr *e2)
7573 {
7574 gfc_ref *tail;
7575 for (tail = e2->ref; tail && tail->next; tail = tail->next);
7576
7577 /* First compare rank. */
7578 if ((tail && (!tail->u.ar.as || e1->rank != tail->u.ar.as->rank))
7579 || (!tail && e1->rank != e2->rank))
7580 {
7581 gfc_error ("Source-expr at %L must be scalar or have the "
7582 "same rank as the allocate-object at %L",
7583 &e1->where, &e2->where);
7584 return false;
7585 }
7586
7587 if (e1->shape)
7588 {
7589 int i;
7590 mpz_t s;
7591
7592 mpz_init (s);
7593
7594 for (i = 0; i < e1->rank; i++)
7595 {
7596 if (tail->u.ar.start[i] == NULL)
7597 break;
7598
7599 if (tail->u.ar.end[i])
7600 {
7601 mpz_set (s, tail->u.ar.end[i]->value.integer);
7602 mpz_sub (s, s, tail->u.ar.start[i]->value.integer);
7603 mpz_add_ui (s, s, 1);
7604 }
7605 else
7606 {
7607 mpz_set (s, tail->u.ar.start[i]->value.integer);
7608 }
7609
7610 if (mpz_cmp (e1->shape[i], s) != 0)
7611 {
7612 gfc_error ("Source-expr at %L and allocate-object at %L must "
7613 "have the same shape", &e1->where, &e2->where);
7614 mpz_clear (s);
7615 return false;
7616 }
7617 }
7618
7619 mpz_clear (s);
7620 }
7621
7622 return true;
7623 }
7624
7625
7626 /* Resolve the expression in an ALLOCATE statement, doing the additional
7627 checks to see whether the expression is OK or not. The expression must
7628 have a trailing array reference that gives the size of the array. */
7629
7630 static bool
7631 resolve_allocate_expr (gfc_expr *e, gfc_code *code, bool *array_alloc_wo_spec)
7632 {
7633 int i, pointer, allocatable, dimension, is_abstract;
7634 int codimension;
7635 bool coindexed;
7636 bool unlimited;
7637 symbol_attribute attr;
7638 gfc_ref *ref, *ref2;
7639 gfc_expr *e2;
7640 gfc_array_ref *ar;
7641 gfc_symbol *sym = NULL;
7642 gfc_alloc *a;
7643 gfc_component *c;
7644 bool t;
7645
7646 /* Mark the utmost array component as being in allocate to allow DIMEN_STAR
7647 checking of coarrays. */
7648 for (ref = e->ref; ref; ref = ref->next)
7649 if (ref->next == NULL)
7650 break;
7651
7652 if (ref && ref->type == REF_ARRAY)
7653 ref->u.ar.in_allocate = true;
7654
7655 if (!gfc_resolve_expr (e))
7656 goto failure;
7657
7658 /* Make sure the expression is allocatable or a pointer. If it is
7659 pointer, the next-to-last reference must be a pointer. */
7660
7661 ref2 = NULL;
7662 if (e->symtree)
7663 sym = e->symtree->n.sym;
7664
7665 /* Check whether ultimate component is abstract and CLASS. */
7666 is_abstract = 0;
7667
7668 /* Is the allocate-object unlimited polymorphic? */
7669 unlimited = UNLIMITED_POLY(e);
7670
7671 if (e->expr_type != EXPR_VARIABLE)
7672 {
7673 allocatable = 0;
7674 attr = gfc_expr_attr (e);
7675 pointer = attr.pointer;
7676 dimension = attr.dimension;
7677 codimension = attr.codimension;
7678 }
7679 else
7680 {
7681 if (sym->ts.type == BT_CLASS && CLASS_DATA (sym))
7682 {
7683 allocatable = CLASS_DATA (sym)->attr.allocatable;
7684 pointer = CLASS_DATA (sym)->attr.class_pointer;
7685 dimension = CLASS_DATA (sym)->attr.dimension;
7686 codimension = CLASS_DATA (sym)->attr.codimension;
7687 is_abstract = CLASS_DATA (sym)->attr.abstract;
7688 }
7689 else
7690 {
7691 allocatable = sym->attr.allocatable;
7692 pointer = sym->attr.pointer;
7693 dimension = sym->attr.dimension;
7694 codimension = sym->attr.codimension;
7695 }
7696
7697 coindexed = false;
7698
7699 for (ref = e->ref; ref; ref2 = ref, ref = ref->next)
7700 {
7701 switch (ref->type)
7702 {
7703 case REF_ARRAY:
7704 if (ref->u.ar.codimen > 0)
7705 {
7706 int n;
7707 for (n = ref->u.ar.dimen;
7708 n < ref->u.ar.dimen + ref->u.ar.codimen; n++)
7709 if (ref->u.ar.dimen_type[n] != DIMEN_THIS_IMAGE)
7710 {
7711 coindexed = true;
7712 break;
7713 }
7714 }
7715
7716 if (ref->next != NULL)
7717 pointer = 0;
7718 break;
7719
7720 case REF_COMPONENT:
7721 /* F2008, C644. */
7722 if (coindexed)
7723 {
7724 gfc_error ("Coindexed allocatable object at %L",
7725 &e->where);
7726 goto failure;
7727 }
7728
7729 c = ref->u.c.component;
7730 if (c->ts.type == BT_CLASS)
7731 {
7732 allocatable = CLASS_DATA (c)->attr.allocatable;
7733 pointer = CLASS_DATA (c)->attr.class_pointer;
7734 dimension = CLASS_DATA (c)->attr.dimension;
7735 codimension = CLASS_DATA (c)->attr.codimension;
7736 is_abstract = CLASS_DATA (c)->attr.abstract;
7737 }
7738 else
7739 {
7740 allocatable = c->attr.allocatable;
7741 pointer = c->attr.pointer;
7742 dimension = c->attr.dimension;
7743 codimension = c->attr.codimension;
7744 is_abstract = c->attr.abstract;
7745 }
7746 break;
7747
7748 case REF_SUBSTRING:
7749 case REF_INQUIRY:
7750 allocatable = 0;
7751 pointer = 0;
7752 break;
7753 }
7754 }
7755 }
7756
7757 /* Check for F08:C628. */
7758 if (allocatable == 0 && pointer == 0 && !unlimited)
7759 {
7760 gfc_error ("Allocate-object at %L must be ALLOCATABLE or a POINTER",
7761 &e->where);
7762 goto failure;
7763 }
7764
7765 /* Some checks for the SOURCE tag. */
7766 if (code->expr3)
7767 {
7768 /* Check F03:C631. */
7769 if (!gfc_type_compatible (&e->ts, &code->expr3->ts))
7770 {
7771 gfc_error ("Type of entity at %L is type incompatible with "
7772 "source-expr at %L", &e->where, &code->expr3->where);
7773 goto failure;
7774 }
7775
7776 /* Check F03:C632 and restriction following Note 6.18. */
7777 if (code->expr3->rank > 0 && !conformable_arrays (code->expr3, e))
7778 goto failure;
7779
7780 /* Check F03:C633. */
7781 if (code->expr3->ts.kind != e->ts.kind && !unlimited)
7782 {
7783 gfc_error ("The allocate-object at %L and the source-expr at %L "
7784 "shall have the same kind type parameter",
7785 &e->where, &code->expr3->where);
7786 goto failure;
7787 }
7788
7789 /* Check F2008, C642. */
7790 if (code->expr3->ts.type == BT_DERIVED
7791 && ((codimension && gfc_expr_attr (code->expr3).lock_comp)
7792 || (code->expr3->ts.u.derived->from_intmod
7793 == INTMOD_ISO_FORTRAN_ENV
7794 && code->expr3->ts.u.derived->intmod_sym_id
7795 == ISOFORTRAN_LOCK_TYPE)))
7796 {
7797 gfc_error ("The source-expr at %L shall neither be of type "
7798 "LOCK_TYPE nor have a LOCK_TYPE component if "
7799 "allocate-object at %L is a coarray",
7800 &code->expr3->where, &e->where);
7801 goto failure;
7802 }
7803
7804 /* Check TS18508, C702/C703. */
7805 if (code->expr3->ts.type == BT_DERIVED
7806 && ((codimension && gfc_expr_attr (code->expr3).event_comp)
7807 || (code->expr3->ts.u.derived->from_intmod
7808 == INTMOD_ISO_FORTRAN_ENV
7809 && code->expr3->ts.u.derived->intmod_sym_id
7810 == ISOFORTRAN_EVENT_TYPE)))
7811 {
7812 gfc_error ("The source-expr at %L shall neither be of type "
7813 "EVENT_TYPE nor have a EVENT_TYPE component if "
7814 "allocate-object at %L is a coarray",
7815 &code->expr3->where, &e->where);
7816 goto failure;
7817 }
7818 }
7819
7820 /* Check F08:C629. */
7821 if (is_abstract && code->ext.alloc.ts.type == BT_UNKNOWN
7822 && !code->expr3)
7823 {
7824 gcc_assert (e->ts.type == BT_CLASS);
7825 gfc_error ("Allocating %s of ABSTRACT base type at %L requires a "
7826 "type-spec or source-expr", sym->name, &e->where);
7827 goto failure;
7828 }
7829
7830 /* Check F08:C632. */
7831 if (code->ext.alloc.ts.type == BT_CHARACTER && !e->ts.deferred
7832 && !UNLIMITED_POLY (e))
7833 {
7834 int cmp;
7835
7836 if (!e->ts.u.cl->length)
7837 goto failure;
7838
7839 cmp = gfc_dep_compare_expr (e->ts.u.cl->length,
7840 code->ext.alloc.ts.u.cl->length);
7841 if (cmp == 1 || cmp == -1 || cmp == -3)
7842 {
7843 gfc_error ("Allocating %s at %L with type-spec requires the same "
7844 "character-length parameter as in the declaration",
7845 sym->name, &e->where);
7846 goto failure;
7847 }
7848 }
7849
7850 /* In the variable definition context checks, gfc_expr_attr is used
7851 on the expression. This is fooled by the array specification
7852 present in e, thus we have to eliminate that one temporarily. */
7853 e2 = remove_last_array_ref (e);
7854 t = true;
7855 if (t && pointer)
7856 t = gfc_check_vardef_context (e2, true, true, false,
7857 _("ALLOCATE object"));
7858 if (t)
7859 t = gfc_check_vardef_context (e2, false, true, false,
7860 _("ALLOCATE object"));
7861 gfc_free_expr (e2);
7862 if (!t)
7863 goto failure;
7864
7865 if (e->ts.type == BT_CLASS && CLASS_DATA (e)->attr.dimension
7866 && !code->expr3 && code->ext.alloc.ts.type == BT_DERIVED)
7867 {
7868 /* For class arrays, the initialization with SOURCE is done
7869 using _copy and trans_call. It is convenient to exploit that
7870 when the allocated type is different from the declared type but
7871 no SOURCE exists by setting expr3. */
7872 code->expr3 = gfc_default_initializer (&code->ext.alloc.ts);
7873 }
7874 else if (flag_coarray != GFC_FCOARRAY_LIB && e->ts.type == BT_DERIVED
7875 && e->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
7876 && e->ts.u.derived->intmod_sym_id == ISOFORTRAN_EVENT_TYPE)
7877 {
7878 /* We have to zero initialize the integer variable. */
7879 code->expr3 = gfc_get_int_expr (gfc_default_integer_kind, &e->where, 0);
7880 }
7881
7882 if (e->ts.type == BT_CLASS && !unlimited && !UNLIMITED_POLY (code->expr3))
7883 {
7884 /* Make sure the vtab symbol is present when
7885 the module variables are generated. */
7886 gfc_typespec ts = e->ts;
7887 if (code->expr3)
7888 ts = code->expr3->ts;
7889 else if (code->ext.alloc.ts.type == BT_DERIVED)
7890 ts = code->ext.alloc.ts;
7891
7892 /* Finding the vtab also publishes the type's symbol. Therefore this
7893 statement is necessary. */
7894 gfc_find_derived_vtab (ts.u.derived);
7895 }
7896 else if (unlimited && !UNLIMITED_POLY (code->expr3))
7897 {
7898 /* Again, make sure the vtab symbol is present when
7899 the module variables are generated. */
7900 gfc_typespec *ts = NULL;
7901 if (code->expr3)
7902 ts = &code->expr3->ts;
7903 else
7904 ts = &code->ext.alloc.ts;
7905
7906 gcc_assert (ts);
7907
7908 /* Finding the vtab also publishes the type's symbol. Therefore this
7909 statement is necessary. */
7910 gfc_find_vtab (ts);
7911 }
7912
7913 if (dimension == 0 && codimension == 0)
7914 goto success;
7915
7916 /* Make sure the last reference node is an array specification. */
7917
7918 if (!ref2 || ref2->type != REF_ARRAY || ref2->u.ar.type == AR_FULL
7919 || (dimension && ref2->u.ar.dimen == 0))
7920 {
7921 /* F08:C633. */
7922 if (code->expr3)
7923 {
7924 if (!gfc_notify_std (GFC_STD_F2008, "Array specification required "
7925 "in ALLOCATE statement at %L", &e->where))
7926 goto failure;
7927 if (code->expr3->rank != 0)
7928 *array_alloc_wo_spec = true;
7929 else
7930 {
7931 gfc_error ("Array specification or array-valued SOURCE= "
7932 "expression required in ALLOCATE statement at %L",
7933 &e->where);
7934 goto failure;
7935 }
7936 }
7937 else
7938 {
7939 gfc_error ("Array specification required in ALLOCATE statement "
7940 "at %L", &e->where);
7941 goto failure;
7942 }
7943 }
7944
7945 /* Make sure that the array section reference makes sense in the
7946 context of an ALLOCATE specification. */
7947
7948 ar = &ref2->u.ar;
7949
7950 if (codimension)
7951 for (i = ar->dimen; i < ar->dimen + ar->codimen; i++)
7952 {
7953 switch (ar->dimen_type[i])
7954 {
7955 case DIMEN_THIS_IMAGE:
7956 gfc_error ("Coarray specification required in ALLOCATE statement "
7957 "at %L", &e->where);
7958 goto failure;
7959
7960 case DIMEN_RANGE:
7961 if (ar->start[i] == 0 || ar->end[i] == 0)
7962 {
7963 /* If ar->stride[i] is NULL, we issued a previous error. */
7964 if (ar->stride[i] == NULL)
7965 gfc_error ("Bad array specification in ALLOCATE statement "
7966 "at %L", &e->where);
7967 goto failure;
7968 }
7969 else if (gfc_dep_compare_expr (ar->start[i], ar->end[i]) == 1)
7970 {
7971 gfc_error ("Upper cobound is less than lower cobound at %L",
7972 &ar->start[i]->where);
7973 goto failure;
7974 }
7975 break;
7976
7977 case DIMEN_ELEMENT:
7978 if (ar->start[i]->expr_type == EXPR_CONSTANT)
7979 {
7980 gcc_assert (ar->start[i]->ts.type == BT_INTEGER);
7981 if (mpz_cmp_si (ar->start[i]->value.integer, 1) < 0)
7982 {
7983 gfc_error ("Upper cobound is less than lower cobound "
7984 "of 1 at %L", &ar->start[i]->where);
7985 goto failure;
7986 }
7987 }
7988 break;
7989
7990 case DIMEN_STAR:
7991 break;
7992
7993 default:
7994 gfc_error ("Bad array specification in ALLOCATE statement at %L",
7995 &e->where);
7996 goto failure;
7997
7998 }
7999 }
8000 for (i = 0; i < ar->dimen; i++)
8001 {
8002 if (ar->type == AR_ELEMENT || ar->type == AR_FULL)
8003 goto check_symbols;
8004
8005 switch (ar->dimen_type[i])
8006 {
8007 case DIMEN_ELEMENT:
8008 break;
8009
8010 case DIMEN_RANGE:
8011 if (ar->start[i] != NULL
8012 && ar->end[i] != NULL
8013 && ar->stride[i] == NULL)
8014 break;
8015
8016 /* Fall through. */
8017
8018 case DIMEN_UNKNOWN:
8019 case DIMEN_VECTOR:
8020 case DIMEN_STAR:
8021 case DIMEN_THIS_IMAGE:
8022 gfc_error ("Bad array specification in ALLOCATE statement at %L",
8023 &e->where);
8024 goto failure;
8025 }
8026
8027 check_symbols:
8028 for (a = code->ext.alloc.list; a; a = a->next)
8029 {
8030 sym = a->expr->symtree->n.sym;
8031
8032 /* TODO - check derived type components. */
8033 if (gfc_bt_struct (sym->ts.type) || sym->ts.type == BT_CLASS)
8034 continue;
8035
8036 if ((ar->start[i] != NULL
8037 && gfc_find_sym_in_expr (sym, ar->start[i]))
8038 || (ar->end[i] != NULL
8039 && gfc_find_sym_in_expr (sym, ar->end[i])))
8040 {
8041 gfc_error ("%qs must not appear in the array specification at "
8042 "%L in the same ALLOCATE statement where it is "
8043 "itself allocated", sym->name, &ar->where);
8044 goto failure;
8045 }
8046 }
8047 }
8048
8049 for (i = ar->dimen; i < ar->codimen + ar->dimen; i++)
8050 {
8051 if (ar->dimen_type[i] == DIMEN_ELEMENT
8052 || ar->dimen_type[i] == DIMEN_RANGE)
8053 {
8054 if (i == (ar->dimen + ar->codimen - 1))
8055 {
8056 gfc_error ("Expected '*' in coindex specification in ALLOCATE "
8057 "statement at %L", &e->where);
8058 goto failure;
8059 }
8060 continue;
8061 }
8062
8063 if (ar->dimen_type[i] == DIMEN_STAR && i == (ar->dimen + ar->codimen - 1)
8064 && ar->stride[i] == NULL)
8065 break;
8066
8067 gfc_error ("Bad coarray specification in ALLOCATE statement at %L",
8068 &e->where);
8069 goto failure;
8070 }
8071
8072 success:
8073 return true;
8074
8075 failure:
8076 return false;
8077 }
8078
8079
8080 static void
8081 resolve_allocate_deallocate (gfc_code *code, const char *fcn)
8082 {
8083 gfc_expr *stat, *errmsg, *pe, *qe;
8084 gfc_alloc *a, *p, *q;
8085
8086 stat = code->expr1;
8087 errmsg = code->expr2;
8088
8089 /* Check the stat variable. */
8090 if (stat)
8091 {
8092 gfc_check_vardef_context (stat, false, false, false,
8093 _("STAT variable"));
8094
8095 if ((stat->ts.type != BT_INTEGER
8096 && !(stat->ref && (stat->ref->type == REF_ARRAY
8097 || stat->ref->type == REF_COMPONENT)))
8098 || stat->rank > 0)
8099 gfc_error ("Stat-variable at %L must be a scalar INTEGER "
8100 "variable", &stat->where);
8101
8102 for (p = code->ext.alloc.list; p; p = p->next)
8103 if (p->expr->symtree->n.sym->name == stat->symtree->n.sym->name)
8104 {
8105 gfc_ref *ref1, *ref2;
8106 bool found = true;
8107
8108 for (ref1 = p->expr->ref, ref2 = stat->ref; ref1 && ref2;
8109 ref1 = ref1->next, ref2 = ref2->next)
8110 {
8111 if (ref1->type != REF_COMPONENT || ref2->type != REF_COMPONENT)
8112 continue;
8113 if (ref1->u.c.component->name != ref2->u.c.component->name)
8114 {
8115 found = false;
8116 break;
8117 }
8118 }
8119
8120 if (found)
8121 {
8122 gfc_error ("Stat-variable at %L shall not be %sd within "
8123 "the same %s statement", &stat->where, fcn, fcn);
8124 break;
8125 }
8126 }
8127 }
8128
8129 /* Check the errmsg variable. */
8130 if (errmsg)
8131 {
8132 if (!stat)
8133 gfc_warning (0, "ERRMSG at %L is useless without a STAT tag",
8134 &errmsg->where);
8135
8136 gfc_check_vardef_context (errmsg, false, false, false,
8137 _("ERRMSG variable"));
8138
8139 /* F18:R928 alloc-opt is ERRMSG = errmsg-variable
8140 F18:R930 errmsg-variable is scalar-default-char-variable
8141 F18:R906 default-char-variable is variable
8142 F18:C906 default-char-variable shall be default character. */
8143 if ((errmsg->ts.type != BT_CHARACTER
8144 && !(errmsg->ref
8145 && (errmsg->ref->type == REF_ARRAY
8146 || errmsg->ref->type == REF_COMPONENT)))
8147 || errmsg->rank > 0
8148 || errmsg->ts.kind != gfc_default_character_kind)
8149 gfc_error ("ERRMSG variable at %L shall be a scalar default CHARACTER "
8150 "variable", &errmsg->where);
8151
8152 for (p = code->ext.alloc.list; p; p = p->next)
8153 if (p->expr->symtree->n.sym->name == errmsg->symtree->n.sym->name)
8154 {
8155 gfc_ref *ref1, *ref2;
8156 bool found = true;
8157
8158 for (ref1 = p->expr->ref, ref2 = errmsg->ref; ref1 && ref2;
8159 ref1 = ref1->next, ref2 = ref2->next)
8160 {
8161 if (ref1->type != REF_COMPONENT || ref2->type != REF_COMPONENT)
8162 continue;
8163 if (ref1->u.c.component->name != ref2->u.c.component->name)
8164 {
8165 found = false;
8166 break;
8167 }
8168 }
8169
8170 if (found)
8171 {
8172 gfc_error ("Errmsg-variable at %L shall not be %sd within "
8173 "the same %s statement", &errmsg->where, fcn, fcn);
8174 break;
8175 }
8176 }
8177 }
8178
8179 /* Check that an allocate-object appears only once in the statement. */
8180
8181 for (p = code->ext.alloc.list; p; p = p->next)
8182 {
8183 pe = p->expr;
8184 for (q = p->next; q; q = q->next)
8185 {
8186 qe = q->expr;
8187 if (pe->symtree->n.sym->name == qe->symtree->n.sym->name)
8188 {
8189 /* This is a potential collision. */
8190 gfc_ref *pr = pe->ref;
8191 gfc_ref *qr = qe->ref;
8192
8193 /* Follow the references until
8194 a) They start to differ, in which case there is no error;
8195 you can deallocate a%b and a%c in a single statement
8196 b) Both of them stop, which is an error
8197 c) One of them stops, which is also an error. */
8198 while (1)
8199 {
8200 if (pr == NULL && qr == NULL)
8201 {
8202 gfc_error ("Allocate-object at %L also appears at %L",
8203 &pe->where, &qe->where);
8204 break;
8205 }
8206 else if (pr != NULL && qr == NULL)
8207 {
8208 gfc_error ("Allocate-object at %L is subobject of"
8209 " object at %L", &pe->where, &qe->where);
8210 break;
8211 }
8212 else if (pr == NULL && qr != NULL)
8213 {
8214 gfc_error ("Allocate-object at %L is subobject of"
8215 " object at %L", &qe->where, &pe->where);
8216 break;
8217 }
8218 /* Here, pr != NULL && qr != NULL */
8219 gcc_assert(pr->type == qr->type);
8220 if (pr->type == REF_ARRAY)
8221 {
8222 /* Handle cases like allocate(v(3)%x(3), v(2)%x(3)),
8223 which are legal. */
8224 gcc_assert (qr->type == REF_ARRAY);
8225
8226 if (pr->next && qr->next)
8227 {
8228 int i;
8229 gfc_array_ref *par = &(pr->u.ar);
8230 gfc_array_ref *qar = &(qr->u.ar);
8231
8232 for (i=0; i<par->dimen; i++)
8233 {
8234 if ((par->start[i] != NULL
8235 || qar->start[i] != NULL)
8236 && gfc_dep_compare_expr (par->start[i],
8237 qar->start[i]) != 0)
8238 goto break_label;
8239 }
8240 }
8241 }
8242 else
8243 {
8244 if (pr->u.c.component->name != qr->u.c.component->name)
8245 break;
8246 }
8247
8248 pr = pr->next;
8249 qr = qr->next;
8250 }
8251 break_label:
8252 ;
8253 }
8254 }
8255 }
8256
8257 if (strcmp (fcn, "ALLOCATE") == 0)
8258 {
8259 bool arr_alloc_wo_spec = false;
8260
8261 /* Resolving the expr3 in the loop over all objects to allocate would
8262 execute loop invariant code for each loop item. Therefore do it just
8263 once here. */
8264 if (code->expr3 && code->expr3->mold
8265 && code->expr3->ts.type == BT_DERIVED)
8266 {
8267 /* Default initialization via MOLD (non-polymorphic). */
8268 gfc_expr *rhs = gfc_default_initializer (&code->expr3->ts);
8269 if (rhs != NULL)
8270 {
8271 gfc_resolve_expr (rhs);
8272 gfc_free_expr (code->expr3);
8273 code->expr3 = rhs;
8274 }
8275 }
8276 for (a = code->ext.alloc.list; a; a = a->next)
8277 resolve_allocate_expr (a->expr, code, &arr_alloc_wo_spec);
8278
8279 if (arr_alloc_wo_spec && code->expr3)
8280 {
8281 /* Mark the allocate to have to take the array specification
8282 from the expr3. */
8283 code->ext.alloc.arr_spec_from_expr3 = 1;
8284 }
8285 }
8286 else
8287 {
8288 for (a = code->ext.alloc.list; a; a = a->next)
8289 resolve_deallocate_expr (a->expr);
8290 }
8291 }
8292
8293
8294 /************ SELECT CASE resolution subroutines ************/
8295
8296 /* Callback function for our mergesort variant. Determines interval
8297 overlaps for CASEs. Return <0 if op1 < op2, 0 for overlap, >0 for
8298 op1 > op2. Assumes we're not dealing with the default case.
8299 We have op1 = (:L), (K:L) or (K:) and op2 = (:N), (M:N) or (M:).
8300 There are nine situations to check. */
8301
8302 static int
8303 compare_cases (const gfc_case *op1, const gfc_case *op2)
8304 {
8305 int retval;
8306
8307 if (op1->low == NULL) /* op1 = (:L) */
8308 {
8309 /* op2 = (:N), so overlap. */
8310 retval = 0;
8311 /* op2 = (M:) or (M:N), L < M */
8312 if (op2->low != NULL
8313 && gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
8314 retval = -1;
8315 }
8316 else if (op1->high == NULL) /* op1 = (K:) */
8317 {
8318 /* op2 = (M:), so overlap. */
8319 retval = 0;
8320 /* op2 = (:N) or (M:N), K > N */
8321 if (op2->high != NULL
8322 && gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
8323 retval = 1;
8324 }
8325 else /* op1 = (K:L) */
8326 {
8327 if (op2->low == NULL) /* op2 = (:N), K > N */
8328 retval = (gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
8329 ? 1 : 0;
8330 else if (op2->high == NULL) /* op2 = (M:), L < M */
8331 retval = (gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
8332 ? -1 : 0;
8333 else /* op2 = (M:N) */
8334 {
8335 retval = 0;
8336 /* L < M */
8337 if (gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
8338 retval = -1;
8339 /* K > N */
8340 else if (gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
8341 retval = 1;
8342 }
8343 }
8344
8345 return retval;
8346 }
8347
8348
8349 /* Merge-sort a double linked case list, detecting overlap in the
8350 process. LIST is the head of the double linked case list before it
8351 is sorted. Returns the head of the sorted list if we don't see any
8352 overlap, or NULL otherwise. */
8353
8354 static gfc_case *
8355 check_case_overlap (gfc_case *list)
8356 {
8357 gfc_case *p, *q, *e, *tail;
8358 int insize, nmerges, psize, qsize, cmp, overlap_seen;
8359
8360 /* If the passed list was empty, return immediately. */
8361 if (!list)
8362 return NULL;
8363
8364 overlap_seen = 0;
8365 insize = 1;
8366
8367 /* Loop unconditionally. The only exit from this loop is a return
8368 statement, when we've finished sorting the case list. */
8369 for (;;)
8370 {
8371 p = list;
8372 list = NULL;
8373 tail = NULL;
8374
8375 /* Count the number of merges we do in this pass. */
8376 nmerges = 0;
8377
8378 /* Loop while there exists a merge to be done. */
8379 while (p)
8380 {
8381 int i;
8382
8383 /* Count this merge. */
8384 nmerges++;
8385
8386 /* Cut the list in two pieces by stepping INSIZE places
8387 forward in the list, starting from P. */
8388 psize = 0;
8389 q = p;
8390 for (i = 0; i < insize; i++)
8391 {
8392 psize++;
8393 q = q->right;
8394 if (!q)
8395 break;
8396 }
8397 qsize = insize;
8398
8399 /* Now we have two lists. Merge them! */
8400 while (psize > 0 || (qsize > 0 && q != NULL))
8401 {
8402 /* See from which the next case to merge comes from. */
8403 if (psize == 0)
8404 {
8405 /* P is empty so the next case must come from Q. */
8406 e = q;
8407 q = q->right;
8408 qsize--;
8409 }
8410 else if (qsize == 0 || q == NULL)
8411 {
8412 /* Q is empty. */
8413 e = p;
8414 p = p->right;
8415 psize--;
8416 }
8417 else
8418 {
8419 cmp = compare_cases (p, q);
8420 if (cmp < 0)
8421 {
8422 /* The whole case range for P is less than the
8423 one for Q. */
8424 e = p;
8425 p = p->right;
8426 psize--;
8427 }
8428 else if (cmp > 0)
8429 {
8430 /* The whole case range for Q is greater than
8431 the case range for P. */
8432 e = q;
8433 q = q->right;
8434 qsize--;
8435 }
8436 else
8437 {
8438 /* The cases overlap, or they are the same
8439 element in the list. Either way, we must
8440 issue an error and get the next case from P. */
8441 /* FIXME: Sort P and Q by line number. */
8442 gfc_error ("CASE label at %L overlaps with CASE "
8443 "label at %L", &p->where, &q->where);
8444 overlap_seen = 1;
8445 e = p;
8446 p = p->right;
8447 psize--;
8448 }
8449 }
8450
8451 /* Add the next element to the merged list. */
8452 if (tail)
8453 tail->right = e;
8454 else
8455 list = e;
8456 e->left = tail;
8457 tail = e;
8458 }
8459
8460 /* P has now stepped INSIZE places along, and so has Q. So
8461 they're the same. */
8462 p = q;
8463 }
8464 tail->right = NULL;
8465
8466 /* If we have done only one merge or none at all, we've
8467 finished sorting the cases. */
8468 if (nmerges <= 1)
8469 {
8470 if (!overlap_seen)
8471 return list;
8472 else
8473 return NULL;
8474 }
8475
8476 /* Otherwise repeat, merging lists twice the size. */
8477 insize *= 2;
8478 }
8479 }
8480
8481
8482 /* Check to see if an expression is suitable for use in a CASE statement.
8483 Makes sure that all case expressions are scalar constants of the same
8484 type. Return false if anything is wrong. */
8485
8486 static bool
8487 validate_case_label_expr (gfc_expr *e, gfc_expr *case_expr)
8488 {
8489 if (e == NULL) return true;
8490
8491 if (e->ts.type != case_expr->ts.type)
8492 {
8493 gfc_error ("Expression in CASE statement at %L must be of type %s",
8494 &e->where, gfc_basic_typename (case_expr->ts.type));
8495 return false;
8496 }
8497
8498 /* C805 (R808) For a given case-construct, each case-value shall be of
8499 the same type as case-expr. For character type, length differences
8500 are allowed, but the kind type parameters shall be the same. */
8501
8502 if (case_expr->ts.type == BT_CHARACTER && e->ts.kind != case_expr->ts.kind)
8503 {
8504 gfc_error ("Expression in CASE statement at %L must be of kind %d",
8505 &e->where, case_expr->ts.kind);
8506 return false;
8507 }
8508
8509 /* Convert the case value kind to that of case expression kind,
8510 if needed */
8511
8512 if (e->ts.kind != case_expr->ts.kind)
8513 gfc_convert_type_warn (e, &case_expr->ts, 2, 0);
8514
8515 if (e->rank != 0)
8516 {
8517 gfc_error ("Expression in CASE statement at %L must be scalar",
8518 &e->where);
8519 return false;
8520 }
8521
8522 return true;
8523 }
8524
8525
8526 /* Given a completely parsed select statement, we:
8527
8528 - Validate all expressions and code within the SELECT.
8529 - Make sure that the selection expression is not of the wrong type.
8530 - Make sure that no case ranges overlap.
8531 - Eliminate unreachable cases and unreachable code resulting from
8532 removing case labels.
8533
8534 The standard does allow unreachable cases, e.g. CASE (5:3). But
8535 they are a hassle for code generation, and to prevent that, we just
8536 cut them out here. This is not necessary for overlapping cases
8537 because they are illegal and we never even try to generate code.
8538
8539 We have the additional caveat that a SELECT construct could have
8540 been a computed GOTO in the source code. Fortunately we can fairly
8541 easily work around that here: The case_expr for a "real" SELECT CASE
8542 is in code->expr1, but for a computed GOTO it is in code->expr2. All
8543 we have to do is make sure that the case_expr is a scalar integer
8544 expression. */
8545
8546 static void
8547 resolve_select (gfc_code *code, bool select_type)
8548 {
8549 gfc_code *body;
8550 gfc_expr *case_expr;
8551 gfc_case *cp, *default_case, *tail, *head;
8552 int seen_unreachable;
8553 int seen_logical;
8554 int ncases;
8555 bt type;
8556 bool t;
8557
8558 if (code->expr1 == NULL)
8559 {
8560 /* This was actually a computed GOTO statement. */
8561 case_expr = code->expr2;
8562 if (case_expr->ts.type != BT_INTEGER|| case_expr->rank != 0)
8563 gfc_error ("Selection expression in computed GOTO statement "
8564 "at %L must be a scalar integer expression",
8565 &case_expr->where);
8566
8567 /* Further checking is not necessary because this SELECT was built
8568 by the compiler, so it should always be OK. Just move the
8569 case_expr from expr2 to expr so that we can handle computed
8570 GOTOs as normal SELECTs from here on. */
8571 code->expr1 = code->expr2;
8572 code->expr2 = NULL;
8573 return;
8574 }
8575
8576 case_expr = code->expr1;
8577 type = case_expr->ts.type;
8578
8579 /* F08:C830. */
8580 if (type != BT_LOGICAL && type != BT_INTEGER && type != BT_CHARACTER)
8581 {
8582 gfc_error ("Argument of SELECT statement at %L cannot be %s",
8583 &case_expr->where, gfc_typename (case_expr));
8584
8585 /* Punt. Going on here just produce more garbage error messages. */
8586 return;
8587 }
8588
8589 /* F08:R842. */
8590 if (!select_type && case_expr->rank != 0)
8591 {
8592 gfc_error ("Argument of SELECT statement at %L must be a scalar "
8593 "expression", &case_expr->where);
8594
8595 /* Punt. */
8596 return;
8597 }
8598
8599 /* Raise a warning if an INTEGER case value exceeds the range of
8600 the case-expr. Later, all expressions will be promoted to the
8601 largest kind of all case-labels. */
8602
8603 if (type == BT_INTEGER)
8604 for (body = code->block; body; body = body->block)
8605 for (cp = body->ext.block.case_list; cp; cp = cp->next)
8606 {
8607 if (cp->low
8608 && gfc_check_integer_range (cp->low->value.integer,
8609 case_expr->ts.kind) != ARITH_OK)
8610 gfc_warning (0, "Expression in CASE statement at %L is "
8611 "not in the range of %s", &cp->low->where,
8612 gfc_typename (case_expr));
8613
8614 if (cp->high
8615 && cp->low != cp->high
8616 && gfc_check_integer_range (cp->high->value.integer,
8617 case_expr->ts.kind) != ARITH_OK)
8618 gfc_warning (0, "Expression in CASE statement at %L is "
8619 "not in the range of %s", &cp->high->where,
8620 gfc_typename (case_expr));
8621 }
8622
8623 /* PR 19168 has a long discussion concerning a mismatch of the kinds
8624 of the SELECT CASE expression and its CASE values. Walk the lists
8625 of case values, and if we find a mismatch, promote case_expr to
8626 the appropriate kind. */
8627
8628 if (type == BT_LOGICAL || type == BT_INTEGER)
8629 {
8630 for (body = code->block; body; body = body->block)
8631 {
8632 /* Walk the case label list. */
8633 for (cp = body->ext.block.case_list; cp; cp = cp->next)
8634 {
8635 /* Intercept the DEFAULT case. It does not have a kind. */
8636 if (cp->low == NULL && cp->high == NULL)
8637 continue;
8638
8639 /* Unreachable case ranges are discarded, so ignore. */
8640 if (cp->low != NULL && cp->high != NULL
8641 && cp->low != cp->high
8642 && gfc_compare_expr (cp->low, cp->high, INTRINSIC_GT) > 0)
8643 continue;
8644
8645 if (cp->low != NULL
8646 && case_expr->ts.kind != gfc_kind_max(case_expr, cp->low))
8647 gfc_convert_type_warn (case_expr, &cp->low->ts, 2, 0);
8648
8649 if (cp->high != NULL
8650 && case_expr->ts.kind != gfc_kind_max(case_expr, cp->high))
8651 gfc_convert_type_warn (case_expr, &cp->high->ts, 2, 0);
8652 }
8653 }
8654 }
8655
8656 /* Assume there is no DEFAULT case. */
8657 default_case = NULL;
8658 head = tail = NULL;
8659 ncases = 0;
8660 seen_logical = 0;
8661
8662 for (body = code->block; body; body = body->block)
8663 {
8664 /* Assume the CASE list is OK, and all CASE labels can be matched. */
8665 t = true;
8666 seen_unreachable = 0;
8667
8668 /* Walk the case label list, making sure that all case labels
8669 are legal. */
8670 for (cp = body->ext.block.case_list; cp; cp = cp->next)
8671 {
8672 /* Count the number of cases in the whole construct. */
8673 ncases++;
8674
8675 /* Intercept the DEFAULT case. */
8676 if (cp->low == NULL && cp->high == NULL)
8677 {
8678 if (default_case != NULL)
8679 {
8680 gfc_error ("The DEFAULT CASE at %L cannot be followed "
8681 "by a second DEFAULT CASE at %L",
8682 &default_case->where, &cp->where);
8683 t = false;
8684 break;
8685 }
8686 else
8687 {
8688 default_case = cp;
8689 continue;
8690 }
8691 }
8692
8693 /* Deal with single value cases and case ranges. Errors are
8694 issued from the validation function. */
8695 if (!validate_case_label_expr (cp->low, case_expr)
8696 || !validate_case_label_expr (cp->high, case_expr))
8697 {
8698 t = false;
8699 break;
8700 }
8701
8702 if (type == BT_LOGICAL
8703 && ((cp->low == NULL || cp->high == NULL)
8704 || cp->low != cp->high))
8705 {
8706 gfc_error ("Logical range in CASE statement at %L is not "
8707 "allowed", &cp->low->where);
8708 t = false;
8709 break;
8710 }
8711
8712 if (type == BT_LOGICAL && cp->low->expr_type == EXPR_CONSTANT)
8713 {
8714 int value;
8715 value = cp->low->value.logical == 0 ? 2 : 1;
8716 if (value & seen_logical)
8717 {
8718 gfc_error ("Constant logical value in CASE statement "
8719 "is repeated at %L",
8720 &cp->low->where);
8721 t = false;
8722 break;
8723 }
8724 seen_logical |= value;
8725 }
8726
8727 if (cp->low != NULL && cp->high != NULL
8728 && cp->low != cp->high
8729 && gfc_compare_expr (cp->low, cp->high, INTRINSIC_GT) > 0)
8730 {
8731 if (warn_surprising)
8732 gfc_warning (OPT_Wsurprising,
8733 "Range specification at %L can never be matched",
8734 &cp->where);
8735
8736 cp->unreachable = 1;
8737 seen_unreachable = 1;
8738 }
8739 else
8740 {
8741 /* If the case range can be matched, it can also overlap with
8742 other cases. To make sure it does not, we put it in a
8743 double linked list here. We sort that with a merge sort
8744 later on to detect any overlapping cases. */
8745 if (!head)
8746 {
8747 head = tail = cp;
8748 head->right = head->left = NULL;
8749 }
8750 else
8751 {
8752 tail->right = cp;
8753 tail->right->left = tail;
8754 tail = tail->right;
8755 tail->right = NULL;
8756 }
8757 }
8758 }
8759
8760 /* It there was a failure in the previous case label, give up
8761 for this case label list. Continue with the next block. */
8762 if (!t)
8763 continue;
8764
8765 /* See if any case labels that are unreachable have been seen.
8766 If so, we eliminate them. This is a bit of a kludge because
8767 the case lists for a single case statement (label) is a
8768 single forward linked lists. */
8769 if (seen_unreachable)
8770 {
8771 /* Advance until the first case in the list is reachable. */
8772 while (body->ext.block.case_list != NULL
8773 && body->ext.block.case_list->unreachable)
8774 {
8775 gfc_case *n = body->ext.block.case_list;
8776 body->ext.block.case_list = body->ext.block.case_list->next;
8777 n->next = NULL;
8778 gfc_free_case_list (n);
8779 }
8780
8781 /* Strip all other unreachable cases. */
8782 if (body->ext.block.case_list)
8783 {
8784 for (cp = body->ext.block.case_list; cp && cp->next; cp = cp->next)
8785 {
8786 if (cp->next->unreachable)
8787 {
8788 gfc_case *n = cp->next;
8789 cp->next = cp->next->next;
8790 n->next = NULL;
8791 gfc_free_case_list (n);
8792 }
8793 }
8794 }
8795 }
8796 }
8797
8798 /* See if there were overlapping cases. If the check returns NULL,
8799 there was overlap. In that case we don't do anything. If head
8800 is non-NULL, we prepend the DEFAULT case. The sorted list can
8801 then used during code generation for SELECT CASE constructs with
8802 a case expression of a CHARACTER type. */
8803 if (head)
8804 {
8805 head = check_case_overlap (head);
8806
8807 /* Prepend the default_case if it is there. */
8808 if (head != NULL && default_case)
8809 {
8810 default_case->left = NULL;
8811 default_case->right = head;
8812 head->left = default_case;
8813 }
8814 }
8815
8816 /* Eliminate dead blocks that may be the result if we've seen
8817 unreachable case labels for a block. */
8818 for (body = code; body && body->block; body = body->block)
8819 {
8820 if (body->block->ext.block.case_list == NULL)
8821 {
8822 /* Cut the unreachable block from the code chain. */
8823 gfc_code *c = body->block;
8824 body->block = c->block;
8825
8826 /* Kill the dead block, but not the blocks below it. */
8827 c->block = NULL;
8828 gfc_free_statements (c);
8829 }
8830 }
8831
8832 /* More than two cases is legal but insane for logical selects.
8833 Issue a warning for it. */
8834 if (warn_surprising && type == BT_LOGICAL && ncases > 2)
8835 gfc_warning (OPT_Wsurprising,
8836 "Logical SELECT CASE block at %L has more that two cases",
8837 &code->loc);
8838 }
8839
8840
8841 /* Check if a derived type is extensible. */
8842
8843 bool
8844 gfc_type_is_extensible (gfc_symbol *sym)
8845 {
8846 return !(sym->attr.is_bind_c || sym->attr.sequence
8847 || (sym->attr.is_class
8848 && sym->components->ts.u.derived->attr.unlimited_polymorphic));
8849 }
8850
8851
8852 static void
8853 resolve_types (gfc_namespace *ns);
8854
8855 /* Resolve an associate-name: Resolve target and ensure the type-spec is
8856 correct as well as possibly the array-spec. */
8857
8858 static void
8859 resolve_assoc_var (gfc_symbol* sym, bool resolve_target)
8860 {
8861 gfc_expr* target;
8862
8863 gcc_assert (sym->assoc);
8864 gcc_assert (sym->attr.flavor == FL_VARIABLE);
8865
8866 /* If this is for SELECT TYPE, the target may not yet be set. In that
8867 case, return. Resolution will be called later manually again when
8868 this is done. */
8869 target = sym->assoc->target;
8870 if (!target)
8871 return;
8872 gcc_assert (!sym->assoc->dangling);
8873
8874 if (resolve_target && !gfc_resolve_expr (target))
8875 return;
8876
8877 /* For variable targets, we get some attributes from the target. */
8878 if (target->expr_type == EXPR_VARIABLE)
8879 {
8880 gfc_symbol *tsym, *dsym;
8881
8882 gcc_assert (target->symtree);
8883 tsym = target->symtree->n.sym;
8884
8885 if (gfc_expr_attr (target).proc_pointer)
8886 {
8887 gfc_error ("Associating entity %qs at %L is a procedure pointer",
8888 tsym->name, &target->where);
8889 return;
8890 }
8891
8892 if (tsym->attr.flavor == FL_PROCEDURE && tsym->generic
8893 && (dsym = gfc_find_dt_in_generic (tsym)) != NULL
8894 && dsym->attr.flavor == FL_DERIVED)
8895 {
8896 gfc_error ("Derived type %qs cannot be used as a variable at %L",
8897 tsym->name, &target->where);
8898 return;
8899 }
8900
8901 if (tsym->attr.flavor == FL_PROCEDURE)
8902 {
8903 bool is_error = true;
8904 if (tsym->attr.function && tsym->result == tsym)
8905 for (gfc_namespace *ns = sym->ns; ns; ns = ns->parent)
8906 if (tsym == ns->proc_name)
8907 {
8908 is_error = false;
8909 break;
8910 }
8911 if (is_error)
8912 {
8913 gfc_error ("Associating entity %qs at %L is a procedure name",
8914 tsym->name, &target->where);
8915 return;
8916 }
8917 }
8918
8919 sym->attr.asynchronous = tsym->attr.asynchronous;
8920 sym->attr.volatile_ = tsym->attr.volatile_;
8921
8922 sym->attr.target = tsym->attr.target
8923 || gfc_expr_attr (target).pointer;
8924 if (is_subref_array (target))
8925 sym->attr.subref_array_pointer = 1;
8926 }
8927 else if (target->ts.type == BT_PROCEDURE)
8928 {
8929 gfc_error ("Associating selector-expression at %L yields a procedure",
8930 &target->where);
8931 return;
8932 }
8933
8934 if (target->expr_type == EXPR_NULL)
8935 {
8936 gfc_error ("Selector at %L cannot be NULL()", &target->where);
8937 return;
8938 }
8939 else if (target->ts.type == BT_UNKNOWN)
8940 {
8941 gfc_error ("Selector at %L has no type", &target->where);
8942 return;
8943 }
8944
8945 /* Get type if this was not already set. Note that it can be
8946 some other type than the target in case this is a SELECT TYPE
8947 selector! So we must not update when the type is already there. */
8948 if (sym->ts.type == BT_UNKNOWN)
8949 sym->ts = target->ts;
8950
8951 gcc_assert (sym->ts.type != BT_UNKNOWN);
8952
8953 /* See if this is a valid association-to-variable. */
8954 sym->assoc->variable = (target->expr_type == EXPR_VARIABLE
8955 && !gfc_has_vector_subscript (target));
8956
8957 /* Finally resolve if this is an array or not. */
8958 if (sym->attr.dimension && target->rank == 0)
8959 {
8960 /* primary.c makes the assumption that a reference to an associate
8961 name followed by a left parenthesis is an array reference. */
8962 if (sym->ts.type != BT_CHARACTER)
8963 gfc_error ("Associate-name %qs at %L is used as array",
8964 sym->name, &sym->declared_at);
8965 sym->attr.dimension = 0;
8966 return;
8967 }
8968
8969
8970 /* We cannot deal with class selectors that need temporaries. */
8971 if (target->ts.type == BT_CLASS
8972 && gfc_ref_needs_temporary_p (target->ref))
8973 {
8974 gfc_error ("CLASS selector at %L needs a temporary which is not "
8975 "yet implemented", &target->where);
8976 return;
8977 }
8978
8979 if (target->ts.type == BT_CLASS)
8980 gfc_fix_class_refs (target);
8981
8982 if (target->rank != 0 && !sym->attr.select_rank_temporary)
8983 {
8984 gfc_array_spec *as;
8985 /* The rank may be incorrectly guessed at parsing, therefore make sure
8986 it is corrected now. */
8987 if (sym->ts.type != BT_CLASS && (!sym->as || sym->assoc->rankguessed))
8988 {
8989 if (!sym->as)
8990 sym->as = gfc_get_array_spec ();
8991 as = sym->as;
8992 as->rank = target->rank;
8993 as->type = AS_DEFERRED;
8994 as->corank = gfc_get_corank (target);
8995 sym->attr.dimension = 1;
8996 if (as->corank != 0)
8997 sym->attr.codimension = 1;
8998 }
8999 else if (sym->ts.type == BT_CLASS && (!CLASS_DATA (sym)->as || sym->assoc->rankguessed))
9000 {
9001 if (!CLASS_DATA (sym)->as)
9002 CLASS_DATA (sym)->as = gfc_get_array_spec ();
9003 as = CLASS_DATA (sym)->as;
9004 as->rank = target->rank;
9005 as->type = AS_DEFERRED;
9006 as->corank = gfc_get_corank (target);
9007 CLASS_DATA (sym)->attr.dimension = 1;
9008 if (as->corank != 0)
9009 CLASS_DATA (sym)->attr.codimension = 1;
9010 }
9011 }
9012 else if (!sym->attr.select_rank_temporary)
9013 {
9014 /* target's rank is 0, but the type of the sym is still array valued,
9015 which has to be corrected. */
9016 if (sym->ts.type == BT_CLASS
9017 && CLASS_DATA (sym) && CLASS_DATA (sym)->as)
9018 {
9019 gfc_array_spec *as;
9020 symbol_attribute attr;
9021 /* The associated variable's type is still the array type
9022 correct this now. */
9023 gfc_typespec *ts = &target->ts;
9024 gfc_ref *ref;
9025 gfc_component *c;
9026 for (ref = target->ref; ref != NULL; ref = ref->next)
9027 {
9028 switch (ref->type)
9029 {
9030 case REF_COMPONENT:
9031 ts = &ref->u.c.component->ts;
9032 break;
9033 case REF_ARRAY:
9034 if (ts->type == BT_CLASS)
9035 ts = &ts->u.derived->components->ts;
9036 break;
9037 default:
9038 break;
9039 }
9040 }
9041 /* Create a scalar instance of the current class type. Because the
9042 rank of a class array goes into its name, the type has to be
9043 rebuild. The alternative of (re-)setting just the attributes
9044 and as in the current type, destroys the type also in other
9045 places. */
9046 as = NULL;
9047 sym->ts = *ts;
9048 sym->ts.type = BT_CLASS;
9049 attr = CLASS_DATA (sym)->attr;
9050 attr.class_ok = 0;
9051 attr.associate_var = 1;
9052 attr.dimension = attr.codimension = 0;
9053 attr.class_pointer = 1;
9054 if (!gfc_build_class_symbol (&sym->ts, &attr, &as))
9055 gcc_unreachable ();
9056 /* Make sure the _vptr is set. */
9057 c = gfc_find_component (sym->ts.u.derived, "_vptr", true, true, NULL);
9058 if (c->ts.u.derived == NULL)
9059 c->ts.u.derived = gfc_find_derived_vtab (sym->ts.u.derived);
9060 CLASS_DATA (sym)->attr.pointer = 1;
9061 CLASS_DATA (sym)->attr.class_pointer = 1;
9062 gfc_set_sym_referenced (sym->ts.u.derived);
9063 gfc_commit_symbol (sym->ts.u.derived);
9064 /* _vptr now has the _vtab in it, change it to the _vtype. */
9065 if (c->ts.u.derived->attr.vtab)
9066 c->ts.u.derived = c->ts.u.derived->ts.u.derived;
9067 c->ts.u.derived->ns->types_resolved = 0;
9068 resolve_types (c->ts.u.derived->ns);
9069 }
9070 }
9071
9072 /* Mark this as an associate variable. */
9073 sym->attr.associate_var = 1;
9074
9075 /* Fix up the type-spec for CHARACTER types. */
9076 if (sym->ts.type == BT_CHARACTER && !sym->attr.select_type_temporary)
9077 {
9078 if (!sym->ts.u.cl)
9079 sym->ts.u.cl = target->ts.u.cl;
9080
9081 if (sym->ts.deferred && target->expr_type == EXPR_VARIABLE
9082 && target->symtree->n.sym->attr.dummy
9083 && sym->ts.u.cl == target->ts.u.cl)
9084 {
9085 sym->ts.u.cl = gfc_new_charlen (sym->ns, NULL);
9086 sym->ts.deferred = 1;
9087 }
9088
9089 if (!sym->ts.u.cl->length
9090 && !sym->ts.deferred
9091 && target->expr_type == EXPR_CONSTANT)
9092 {
9093 sym->ts.u.cl->length =
9094 gfc_get_int_expr (gfc_charlen_int_kind, NULL,
9095 target->value.character.length);
9096 }
9097 else if ((!sym->ts.u.cl->length
9098 || sym->ts.u.cl->length->expr_type != EXPR_CONSTANT)
9099 && target->expr_type != EXPR_VARIABLE)
9100 {
9101 sym->ts.u.cl = gfc_new_charlen (sym->ns, NULL);
9102 sym->ts.deferred = 1;
9103
9104 /* This is reset in trans-stmt.c after the assignment
9105 of the target expression to the associate name. */
9106 sym->attr.allocatable = 1;
9107 }
9108 }
9109
9110 /* If the target is a good class object, so is the associate variable. */
9111 if (sym->ts.type == BT_CLASS && gfc_expr_attr (target).class_ok)
9112 sym->attr.class_ok = 1;
9113 }
9114
9115
9116 /* Ensure that SELECT TYPE expressions have the correct rank and a full
9117 array reference, where necessary. The symbols are artificial and so
9118 the dimension attribute and arrayspec can also be set. In addition,
9119 sometimes the expr1 arrives as BT_DERIVED, when the symbol is BT_CLASS.
9120 This is corrected here as well.*/
9121
9122 static void
9123 fixup_array_ref (gfc_expr **expr1, gfc_expr *expr2,
9124 int rank, gfc_ref *ref)
9125 {
9126 gfc_ref *nref = (*expr1)->ref;
9127 gfc_symbol *sym1 = (*expr1)->symtree->n.sym;
9128 gfc_symbol *sym2 = expr2 ? expr2->symtree->n.sym : NULL;
9129 (*expr1)->rank = rank;
9130 if (sym1->ts.type == BT_CLASS)
9131 {
9132 if ((*expr1)->ts.type != BT_CLASS)
9133 (*expr1)->ts = sym1->ts;
9134
9135 CLASS_DATA (sym1)->attr.dimension = 1;
9136 if (CLASS_DATA (sym1)->as == NULL && sym2)
9137 CLASS_DATA (sym1)->as
9138 = gfc_copy_array_spec (CLASS_DATA (sym2)->as);
9139 }
9140 else
9141 {
9142 sym1->attr.dimension = 1;
9143 if (sym1->as == NULL && sym2)
9144 sym1->as = gfc_copy_array_spec (sym2->as);
9145 }
9146
9147 for (; nref; nref = nref->next)
9148 if (nref->next == NULL)
9149 break;
9150
9151 if (ref && nref && nref->type != REF_ARRAY)
9152 nref->next = gfc_copy_ref (ref);
9153 else if (ref && !nref)
9154 (*expr1)->ref = gfc_copy_ref (ref);
9155 }
9156
9157
9158 static gfc_expr *
9159 build_loc_call (gfc_expr *sym_expr)
9160 {
9161 gfc_expr *loc_call;
9162 loc_call = gfc_get_expr ();
9163 loc_call->expr_type = EXPR_FUNCTION;
9164 gfc_get_sym_tree ("_loc", gfc_current_ns, &loc_call->symtree, false);
9165 loc_call->symtree->n.sym->attr.flavor = FL_PROCEDURE;
9166 loc_call->symtree->n.sym->attr.intrinsic = 1;
9167 loc_call->symtree->n.sym->result = loc_call->symtree->n.sym;
9168 gfc_commit_symbol (loc_call->symtree->n.sym);
9169 loc_call->ts.type = BT_INTEGER;
9170 loc_call->ts.kind = gfc_index_integer_kind;
9171 loc_call->value.function.isym = gfc_intrinsic_function_by_id (GFC_ISYM_LOC);
9172 loc_call->value.function.actual = gfc_get_actual_arglist ();
9173 loc_call->value.function.actual->expr = sym_expr;
9174 loc_call->where = sym_expr->where;
9175 return loc_call;
9176 }
9177
9178 /* Resolve a SELECT TYPE statement. */
9179
9180 static void
9181 resolve_select_type (gfc_code *code, gfc_namespace *old_ns)
9182 {
9183 gfc_symbol *selector_type;
9184 gfc_code *body, *new_st, *if_st, *tail;
9185 gfc_code *class_is = NULL, *default_case = NULL;
9186 gfc_case *c;
9187 gfc_symtree *st;
9188 char name[GFC_MAX_SYMBOL_LEN];
9189 gfc_namespace *ns;
9190 int error = 0;
9191 int rank = 0;
9192 gfc_ref* ref = NULL;
9193 gfc_expr *selector_expr = NULL;
9194
9195 ns = code->ext.block.ns;
9196 gfc_resolve (ns);
9197
9198 /* Check for F03:C813. */
9199 if (code->expr1->ts.type != BT_CLASS
9200 && !(code->expr2 && code->expr2->ts.type == BT_CLASS))
9201 {
9202 gfc_error ("Selector shall be polymorphic in SELECT TYPE statement "
9203 "at %L", &code->loc);
9204 return;
9205 }
9206
9207 if (!code->expr1->symtree->n.sym->attr.class_ok)
9208 return;
9209
9210 if (code->expr2)
9211 {
9212 gfc_ref *ref2 = NULL;
9213 for (ref = code->expr2->ref; ref != NULL; ref = ref->next)
9214 if (ref->type == REF_COMPONENT
9215 && ref->u.c.component->ts.type == BT_CLASS)
9216 ref2 = ref;
9217
9218 if (ref2)
9219 {
9220 if (code->expr1->symtree->n.sym->attr.untyped)
9221 code->expr1->symtree->n.sym->ts = ref2->u.c.component->ts;
9222 selector_type = CLASS_DATA (ref2->u.c.component)->ts.u.derived;
9223 }
9224 else
9225 {
9226 if (code->expr1->symtree->n.sym->attr.untyped)
9227 code->expr1->symtree->n.sym->ts = code->expr2->ts;
9228 selector_type = CLASS_DATA (code->expr2)->ts.u.derived;
9229 }
9230
9231 if (code->expr2->rank && CLASS_DATA (code->expr1)->as)
9232 CLASS_DATA (code->expr1)->as->rank = code->expr2->rank;
9233
9234 /* F2008: C803 The selector expression must not be coindexed. */
9235 if (gfc_is_coindexed (code->expr2))
9236 {
9237 gfc_error ("Selector at %L must not be coindexed",
9238 &code->expr2->where);
9239 return;
9240 }
9241
9242 }
9243 else
9244 {
9245 selector_type = CLASS_DATA (code->expr1)->ts.u.derived;
9246
9247 if (gfc_is_coindexed (code->expr1))
9248 {
9249 gfc_error ("Selector at %L must not be coindexed",
9250 &code->expr1->where);
9251 return;
9252 }
9253 }
9254
9255 /* Loop over TYPE IS / CLASS IS cases. */
9256 for (body = code->block; body; body = body->block)
9257 {
9258 c = body->ext.block.case_list;
9259
9260 if (!error)
9261 {
9262 /* Check for repeated cases. */
9263 for (tail = code->block; tail; tail = tail->block)
9264 {
9265 gfc_case *d = tail->ext.block.case_list;
9266 if (tail == body)
9267 break;
9268
9269 if (c->ts.type == d->ts.type
9270 && ((c->ts.type == BT_DERIVED
9271 && c->ts.u.derived && d->ts.u.derived
9272 && !strcmp (c->ts.u.derived->name,
9273 d->ts.u.derived->name))
9274 || c->ts.type == BT_UNKNOWN
9275 || (!(c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9276 && c->ts.kind == d->ts.kind)))
9277 {
9278 gfc_error ("TYPE IS at %L overlaps with TYPE IS at %L",
9279 &c->where, &d->where);
9280 return;
9281 }
9282 }
9283 }
9284
9285 /* Check F03:C815. */
9286 if ((c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9287 && !selector_type->attr.unlimited_polymorphic
9288 && !gfc_type_is_extensible (c->ts.u.derived))
9289 {
9290 gfc_error ("Derived type %qs at %L must be extensible",
9291 c->ts.u.derived->name, &c->where);
9292 error++;
9293 continue;
9294 }
9295
9296 /* Check F03:C816. */
9297 if (c->ts.type != BT_UNKNOWN && !selector_type->attr.unlimited_polymorphic
9298 && ((c->ts.type != BT_DERIVED && c->ts.type != BT_CLASS)
9299 || !gfc_type_is_extension_of (selector_type, c->ts.u.derived)))
9300 {
9301 if (c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9302 gfc_error ("Derived type %qs at %L must be an extension of %qs",
9303 c->ts.u.derived->name, &c->where, selector_type->name);
9304 else
9305 gfc_error ("Unexpected intrinsic type %qs at %L",
9306 gfc_basic_typename (c->ts.type), &c->where);
9307 error++;
9308 continue;
9309 }
9310
9311 /* Check F03:C814. */
9312 if (c->ts.type == BT_CHARACTER
9313 && (c->ts.u.cl->length != NULL || c->ts.deferred))
9314 {
9315 gfc_error ("The type-spec at %L shall specify that each length "
9316 "type parameter is assumed", &c->where);
9317 error++;
9318 continue;
9319 }
9320
9321 /* Intercept the DEFAULT case. */
9322 if (c->ts.type == BT_UNKNOWN)
9323 {
9324 /* Check F03:C818. */
9325 if (default_case)
9326 {
9327 gfc_error ("The DEFAULT CASE at %L cannot be followed "
9328 "by a second DEFAULT CASE at %L",
9329 &default_case->ext.block.case_list->where, &c->where);
9330 error++;
9331 continue;
9332 }
9333
9334 default_case = body;
9335 }
9336 }
9337
9338 if (error > 0)
9339 return;
9340
9341 /* Transform SELECT TYPE statement to BLOCK and associate selector to
9342 target if present. If there are any EXIT statements referring to the
9343 SELECT TYPE construct, this is no problem because the gfc_code
9344 reference stays the same and EXIT is equally possible from the BLOCK
9345 it is changed to. */
9346 code->op = EXEC_BLOCK;
9347 if (code->expr2)
9348 {
9349 gfc_association_list* assoc;
9350
9351 assoc = gfc_get_association_list ();
9352 assoc->st = code->expr1->symtree;
9353 assoc->target = gfc_copy_expr (code->expr2);
9354 assoc->target->where = code->expr2->where;
9355 /* assoc->variable will be set by resolve_assoc_var. */
9356
9357 code->ext.block.assoc = assoc;
9358 code->expr1->symtree->n.sym->assoc = assoc;
9359
9360 resolve_assoc_var (code->expr1->symtree->n.sym, false);
9361 }
9362 else
9363 code->ext.block.assoc = NULL;
9364
9365 /* Ensure that the selector rank and arrayspec are available to
9366 correct expressions in which they might be missing. */
9367 if (code->expr2 && code->expr2->rank)
9368 {
9369 rank = code->expr2->rank;
9370 for (ref = code->expr2->ref; ref; ref = ref->next)
9371 if (ref->next == NULL)
9372 break;
9373 if (ref && ref->type == REF_ARRAY)
9374 ref = gfc_copy_ref (ref);
9375
9376 /* Fixup expr1 if necessary. */
9377 if (rank)
9378 fixup_array_ref (&code->expr1, code->expr2, rank, ref);
9379 }
9380 else if (code->expr1->rank)
9381 {
9382 rank = code->expr1->rank;
9383 for (ref = code->expr1->ref; ref; ref = ref->next)
9384 if (ref->next == NULL)
9385 break;
9386 if (ref && ref->type == REF_ARRAY)
9387 ref = gfc_copy_ref (ref);
9388 }
9389
9390 /* Add EXEC_SELECT to switch on type. */
9391 new_st = gfc_get_code (code->op);
9392 new_st->expr1 = code->expr1;
9393 new_st->expr2 = code->expr2;
9394 new_st->block = code->block;
9395 code->expr1 = code->expr2 = NULL;
9396 code->block = NULL;
9397 if (!ns->code)
9398 ns->code = new_st;
9399 else
9400 ns->code->next = new_st;
9401 code = new_st;
9402 code->op = EXEC_SELECT_TYPE;
9403
9404 /* Use the intrinsic LOC function to generate an integer expression
9405 for the vtable of the selector. Note that the rank of the selector
9406 expression has to be set to zero. */
9407 gfc_add_vptr_component (code->expr1);
9408 code->expr1->rank = 0;
9409 code->expr1 = build_loc_call (code->expr1);
9410 selector_expr = code->expr1->value.function.actual->expr;
9411
9412 /* Loop over TYPE IS / CLASS IS cases. */
9413 for (body = code->block; body; body = body->block)
9414 {
9415 gfc_symbol *vtab;
9416 gfc_expr *e;
9417 c = body->ext.block.case_list;
9418
9419 /* Generate an index integer expression for address of the
9420 TYPE/CLASS vtable and store it in c->low. The hash expression
9421 is stored in c->high and is used to resolve intrinsic cases. */
9422 if (c->ts.type != BT_UNKNOWN)
9423 {
9424 if (c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9425 {
9426 vtab = gfc_find_derived_vtab (c->ts.u.derived);
9427 gcc_assert (vtab);
9428 c->high = gfc_get_int_expr (gfc_integer_4_kind, NULL,
9429 c->ts.u.derived->hash_value);
9430 }
9431 else
9432 {
9433 vtab = gfc_find_vtab (&c->ts);
9434 gcc_assert (vtab && CLASS_DATA (vtab)->initializer);
9435 e = CLASS_DATA (vtab)->initializer;
9436 c->high = gfc_copy_expr (e);
9437 if (c->high->ts.kind != gfc_integer_4_kind)
9438 {
9439 gfc_typespec ts;
9440 ts.kind = gfc_integer_4_kind;
9441 ts.type = BT_INTEGER;
9442 gfc_convert_type_warn (c->high, &ts, 2, 0);
9443 }
9444 }
9445
9446 e = gfc_lval_expr_from_sym (vtab);
9447 c->low = build_loc_call (e);
9448 }
9449 else
9450 continue;
9451
9452 /* Associate temporary to selector. This should only be done
9453 when this case is actually true, so build a new ASSOCIATE
9454 that does precisely this here (instead of using the
9455 'global' one). */
9456
9457 if (c->ts.type == BT_CLASS)
9458 sprintf (name, "__tmp_class_%s", c->ts.u.derived->name);
9459 else if (c->ts.type == BT_DERIVED)
9460 sprintf (name, "__tmp_type_%s", c->ts.u.derived->name);
9461 else if (c->ts.type == BT_CHARACTER)
9462 {
9463 HOST_WIDE_INT charlen = 0;
9464 if (c->ts.u.cl && c->ts.u.cl->length
9465 && c->ts.u.cl->length->expr_type == EXPR_CONSTANT)
9466 charlen = gfc_mpz_get_hwi (c->ts.u.cl->length->value.integer);
9467 snprintf (name, sizeof (name),
9468 "__tmp_%s_" HOST_WIDE_INT_PRINT_DEC "_%d",
9469 gfc_basic_typename (c->ts.type), charlen, c->ts.kind);
9470 }
9471 else
9472 sprintf (name, "__tmp_%s_%d", gfc_basic_typename (c->ts.type),
9473 c->ts.kind);
9474
9475 st = gfc_find_symtree (ns->sym_root, name);
9476 gcc_assert (st->n.sym->assoc);
9477 st->n.sym->assoc->target = gfc_get_variable_expr (selector_expr->symtree);
9478 st->n.sym->assoc->target->where = selector_expr->where;
9479 if (c->ts.type != BT_CLASS && c->ts.type != BT_UNKNOWN)
9480 {
9481 gfc_add_data_component (st->n.sym->assoc->target);
9482 /* Fixup the target expression if necessary. */
9483 if (rank)
9484 fixup_array_ref (&st->n.sym->assoc->target, NULL, rank, ref);
9485 }
9486
9487 new_st = gfc_get_code (EXEC_BLOCK);
9488 new_st->ext.block.ns = gfc_build_block_ns (ns);
9489 new_st->ext.block.ns->code = body->next;
9490 body->next = new_st;
9491
9492 /* Chain in the new list only if it is marked as dangling. Otherwise
9493 there is a CASE label overlap and this is already used. Just ignore,
9494 the error is diagnosed elsewhere. */
9495 if (st->n.sym->assoc->dangling)
9496 {
9497 new_st->ext.block.assoc = st->n.sym->assoc;
9498 st->n.sym->assoc->dangling = 0;
9499 }
9500
9501 resolve_assoc_var (st->n.sym, false);
9502 }
9503
9504 /* Take out CLASS IS cases for separate treatment. */
9505 body = code;
9506 while (body && body->block)
9507 {
9508 if (body->block->ext.block.case_list->ts.type == BT_CLASS)
9509 {
9510 /* Add to class_is list. */
9511 if (class_is == NULL)
9512 {
9513 class_is = body->block;
9514 tail = class_is;
9515 }
9516 else
9517 {
9518 for (tail = class_is; tail->block; tail = tail->block) ;
9519 tail->block = body->block;
9520 tail = tail->block;
9521 }
9522 /* Remove from EXEC_SELECT list. */
9523 body->block = body->block->block;
9524 tail->block = NULL;
9525 }
9526 else
9527 body = body->block;
9528 }
9529
9530 if (class_is)
9531 {
9532 gfc_symbol *vtab;
9533
9534 if (!default_case)
9535 {
9536 /* Add a default case to hold the CLASS IS cases. */
9537 for (tail = code; tail->block; tail = tail->block) ;
9538 tail->block = gfc_get_code (EXEC_SELECT_TYPE);
9539 tail = tail->block;
9540 tail->ext.block.case_list = gfc_get_case ();
9541 tail->ext.block.case_list->ts.type = BT_UNKNOWN;
9542 tail->next = NULL;
9543 default_case = tail;
9544 }
9545
9546 /* More than one CLASS IS block? */
9547 if (class_is->block)
9548 {
9549 gfc_code **c1,*c2;
9550 bool swapped;
9551 /* Sort CLASS IS blocks by extension level. */
9552 do
9553 {
9554 swapped = false;
9555 for (c1 = &class_is; (*c1) && (*c1)->block; c1 = &((*c1)->block))
9556 {
9557 c2 = (*c1)->block;
9558 /* F03:C817 (check for doubles). */
9559 if ((*c1)->ext.block.case_list->ts.u.derived->hash_value
9560 == c2->ext.block.case_list->ts.u.derived->hash_value)
9561 {
9562 gfc_error ("Double CLASS IS block in SELECT TYPE "
9563 "statement at %L",
9564 &c2->ext.block.case_list->where);
9565 return;
9566 }
9567 if ((*c1)->ext.block.case_list->ts.u.derived->attr.extension
9568 < c2->ext.block.case_list->ts.u.derived->attr.extension)
9569 {
9570 /* Swap. */
9571 (*c1)->block = c2->block;
9572 c2->block = *c1;
9573 *c1 = c2;
9574 swapped = true;
9575 }
9576 }
9577 }
9578 while (swapped);
9579 }
9580
9581 /* Generate IF chain. */
9582 if_st = gfc_get_code (EXEC_IF);
9583 new_st = if_st;
9584 for (body = class_is; body; body = body->block)
9585 {
9586 new_st->block = gfc_get_code (EXEC_IF);
9587 new_st = new_st->block;
9588 /* Set up IF condition: Call _gfortran_is_extension_of. */
9589 new_st->expr1 = gfc_get_expr ();
9590 new_st->expr1->expr_type = EXPR_FUNCTION;
9591 new_st->expr1->ts.type = BT_LOGICAL;
9592 new_st->expr1->ts.kind = 4;
9593 new_st->expr1->value.function.name = gfc_get_string (PREFIX ("is_extension_of"));
9594 new_st->expr1->value.function.isym = XCNEW (gfc_intrinsic_sym);
9595 new_st->expr1->value.function.isym->id = GFC_ISYM_EXTENDS_TYPE_OF;
9596 /* Set up arguments. */
9597 new_st->expr1->value.function.actual = gfc_get_actual_arglist ();
9598 new_st->expr1->value.function.actual->expr = gfc_get_variable_expr (selector_expr->symtree);
9599 new_st->expr1->value.function.actual->expr->where = code->loc;
9600 new_st->expr1->where = code->loc;
9601 gfc_add_vptr_component (new_st->expr1->value.function.actual->expr);
9602 vtab = gfc_find_derived_vtab (body->ext.block.case_list->ts.u.derived);
9603 st = gfc_find_symtree (vtab->ns->sym_root, vtab->name);
9604 new_st->expr1->value.function.actual->next = gfc_get_actual_arglist ();
9605 new_st->expr1->value.function.actual->next->expr = gfc_get_variable_expr (st);
9606 new_st->expr1->value.function.actual->next->expr->where = code->loc;
9607 new_st->next = body->next;
9608 }
9609 if (default_case->next)
9610 {
9611 new_st->block = gfc_get_code (EXEC_IF);
9612 new_st = new_st->block;
9613 new_st->next = default_case->next;
9614 }
9615
9616 /* Replace CLASS DEFAULT code by the IF chain. */
9617 default_case->next = if_st;
9618 }
9619
9620 /* Resolve the internal code. This cannot be done earlier because
9621 it requires that the sym->assoc of selectors is set already. */
9622 gfc_current_ns = ns;
9623 gfc_resolve_blocks (code->block, gfc_current_ns);
9624 gfc_current_ns = old_ns;
9625
9626 if (ref)
9627 free (ref);
9628 }
9629
9630
9631 /* Resolve a SELECT RANK statement. */
9632
9633 static void
9634 resolve_select_rank (gfc_code *code, gfc_namespace *old_ns)
9635 {
9636 gfc_namespace *ns;
9637 gfc_code *body, *new_st, *tail;
9638 gfc_case *c;
9639 char tname[GFC_MAX_SYMBOL_LEN];
9640 char name[2 * GFC_MAX_SYMBOL_LEN];
9641 gfc_symtree *st;
9642 gfc_expr *selector_expr = NULL;
9643 int case_value;
9644 HOST_WIDE_INT charlen = 0;
9645
9646 ns = code->ext.block.ns;
9647 gfc_resolve (ns);
9648
9649 code->op = EXEC_BLOCK;
9650 if (code->expr2)
9651 {
9652 gfc_association_list* assoc;
9653
9654 assoc = gfc_get_association_list ();
9655 assoc->st = code->expr1->symtree;
9656 assoc->target = gfc_copy_expr (code->expr2);
9657 assoc->target->where = code->expr2->where;
9658 /* assoc->variable will be set by resolve_assoc_var. */
9659
9660 code->ext.block.assoc = assoc;
9661 code->expr1->symtree->n.sym->assoc = assoc;
9662
9663 resolve_assoc_var (code->expr1->symtree->n.sym, false);
9664 }
9665 else
9666 code->ext.block.assoc = NULL;
9667
9668 /* Loop over RANK cases. Note that returning on the errors causes a
9669 cascade of further errors because the case blocks do not compile
9670 correctly. */
9671 for (body = code->block; body; body = body->block)
9672 {
9673 c = body->ext.block.case_list;
9674 if (c->low)
9675 case_value = (int) mpz_get_si (c->low->value.integer);
9676 else
9677 case_value = -2;
9678
9679 /* Check for repeated cases. */
9680 for (tail = code->block; tail; tail = tail->block)
9681 {
9682 gfc_case *d = tail->ext.block.case_list;
9683 int case_value2;
9684
9685 if (tail == body)
9686 break;
9687
9688 /* Check F2018: C1153. */
9689 if (!c->low && !d->low)
9690 gfc_error ("RANK DEFAULT at %L is repeated at %L",
9691 &c->where, &d->where);
9692
9693 if (!c->low || !d->low)
9694 continue;
9695
9696 /* Check F2018: C1153. */
9697 case_value2 = (int) mpz_get_si (d->low->value.integer);
9698 if ((case_value == case_value2) && case_value == -1)
9699 gfc_error ("RANK (*) at %L is repeated at %L",
9700 &c->where, &d->where);
9701 else if (case_value == case_value2)
9702 gfc_error ("RANK (%i) at %L is repeated at %L",
9703 case_value, &c->where, &d->where);
9704 }
9705
9706 if (!c->low)
9707 continue;
9708
9709 /* Check F2018: C1155. */
9710 if (case_value == -1 && (gfc_expr_attr (code->expr1).allocatable
9711 || gfc_expr_attr (code->expr1).pointer))
9712 gfc_error ("RANK (*) at %L cannot be used with the pointer or "
9713 "allocatable selector at %L", &c->where, &code->expr1->where);
9714
9715 if (case_value == -1 && (gfc_expr_attr (code->expr1).allocatable
9716 || gfc_expr_attr (code->expr1).pointer))
9717 gfc_error ("RANK (*) at %L cannot be used with the pointer or "
9718 "allocatable selector at %L", &c->where, &code->expr1->where);
9719 }
9720
9721 /* Add EXEC_SELECT to switch on rank. */
9722 new_st = gfc_get_code (code->op);
9723 new_st->expr1 = code->expr1;
9724 new_st->expr2 = code->expr2;
9725 new_st->block = code->block;
9726 code->expr1 = code->expr2 = NULL;
9727 code->block = NULL;
9728 if (!ns->code)
9729 ns->code = new_st;
9730 else
9731 ns->code->next = new_st;
9732 code = new_st;
9733 code->op = EXEC_SELECT_RANK;
9734
9735 selector_expr = code->expr1;
9736
9737 /* Loop over SELECT RANK cases. */
9738 for (body = code->block; body; body = body->block)
9739 {
9740 c = body->ext.block.case_list;
9741 int case_value;
9742
9743 /* Pass on the default case. */
9744 if (c->low == NULL)
9745 continue;
9746
9747 /* Associate temporary to selector. This should only be done
9748 when this case is actually true, so build a new ASSOCIATE
9749 that does precisely this here (instead of using the
9750 'global' one). */
9751 if (c->ts.type == BT_CHARACTER && c->ts.u.cl && c->ts.u.cl->length
9752 && c->ts.u.cl->length->expr_type == EXPR_CONSTANT)
9753 charlen = gfc_mpz_get_hwi (c->ts.u.cl->length->value.integer);
9754
9755 if (c->ts.type == BT_CLASS)
9756 sprintf (tname, "class_%s", c->ts.u.derived->name);
9757 else if (c->ts.type == BT_DERIVED)
9758 sprintf (tname, "type_%s", c->ts.u.derived->name);
9759 else if (c->ts.type != BT_CHARACTER)
9760 sprintf (tname, "%s_%d", gfc_basic_typename (c->ts.type), c->ts.kind);
9761 else
9762 sprintf (tname, "%s_" HOST_WIDE_INT_PRINT_DEC "_%d",
9763 gfc_basic_typename (c->ts.type), charlen, c->ts.kind);
9764
9765 case_value = (int) mpz_get_si (c->low->value.integer);
9766 if (case_value >= 0)
9767 sprintf (name, "__tmp_%s_rank_%d", tname, case_value);
9768 else
9769 sprintf (name, "__tmp_%s_rank_m%d", tname, -case_value);
9770
9771 st = gfc_find_symtree (ns->sym_root, name);
9772 gcc_assert (st->n.sym->assoc);
9773
9774 st->n.sym->assoc->target = gfc_get_variable_expr (selector_expr->symtree);
9775 st->n.sym->assoc->target->where = selector_expr->where;
9776
9777 new_st = gfc_get_code (EXEC_BLOCK);
9778 new_st->ext.block.ns = gfc_build_block_ns (ns);
9779 new_st->ext.block.ns->code = body->next;
9780 body->next = new_st;
9781
9782 /* Chain in the new list only if it is marked as dangling. Otherwise
9783 there is a CASE label overlap and this is already used. Just ignore,
9784 the error is diagnosed elsewhere. */
9785 if (st->n.sym->assoc->dangling)
9786 {
9787 new_st->ext.block.assoc = st->n.sym->assoc;
9788 st->n.sym->assoc->dangling = 0;
9789 }
9790
9791 resolve_assoc_var (st->n.sym, false);
9792 }
9793
9794 gfc_current_ns = ns;
9795 gfc_resolve_blocks (code->block, gfc_current_ns);
9796 gfc_current_ns = old_ns;
9797 }
9798
9799
9800 /* Resolve a transfer statement. This is making sure that:
9801 -- a derived type being transferred has only non-pointer components
9802 -- a derived type being transferred doesn't have private components, unless
9803 it's being transferred from the module where the type was defined
9804 -- we're not trying to transfer a whole assumed size array. */
9805
9806 static void
9807 resolve_transfer (gfc_code *code)
9808 {
9809 gfc_symbol *sym, *derived;
9810 gfc_ref *ref;
9811 gfc_expr *exp;
9812 bool write = false;
9813 bool formatted = false;
9814 gfc_dt *dt = code->ext.dt;
9815 gfc_symbol *dtio_sub = NULL;
9816
9817 exp = code->expr1;
9818
9819 while (exp != NULL && exp->expr_type == EXPR_OP
9820 && exp->value.op.op == INTRINSIC_PARENTHESES)
9821 exp = exp->value.op.op1;
9822
9823 if (exp && exp->expr_type == EXPR_NULL
9824 && code->ext.dt)
9825 {
9826 gfc_error ("Invalid context for NULL () intrinsic at %L",
9827 &exp->where);
9828 return;
9829 }
9830
9831 if (exp == NULL || (exp->expr_type != EXPR_VARIABLE
9832 && exp->expr_type != EXPR_FUNCTION
9833 && exp->expr_type != EXPR_STRUCTURE))
9834 return;
9835
9836 /* If we are reading, the variable will be changed. Note that
9837 code->ext.dt may be NULL if the TRANSFER is related to
9838 an INQUIRE statement -- but in this case, we are not reading, either. */
9839 if (dt && dt->dt_io_kind->value.iokind == M_READ
9840 && !gfc_check_vardef_context (exp, false, false, false,
9841 _("item in READ")))
9842 return;
9843
9844 const gfc_typespec *ts = exp->expr_type == EXPR_STRUCTURE
9845 || exp->expr_type == EXPR_FUNCTION
9846 ? &exp->ts : &exp->symtree->n.sym->ts;
9847
9848 /* Go to actual component transferred. */
9849 for (ref = exp->ref; ref; ref = ref->next)
9850 if (ref->type == REF_COMPONENT)
9851 ts = &ref->u.c.component->ts;
9852
9853 if (dt && dt->dt_io_kind->value.iokind != M_INQUIRE
9854 && (ts->type == BT_DERIVED || ts->type == BT_CLASS))
9855 {
9856 derived = ts->u.derived;
9857
9858 /* Determine when to use the formatted DTIO procedure. */
9859 if (dt && (dt->format_expr || dt->format_label))
9860 formatted = true;
9861
9862 write = dt->dt_io_kind->value.iokind == M_WRITE
9863 || dt->dt_io_kind->value.iokind == M_PRINT;
9864 dtio_sub = gfc_find_specific_dtio_proc (derived, write, formatted);
9865
9866 if (dtio_sub != NULL && exp->expr_type == EXPR_VARIABLE)
9867 {
9868 dt->udtio = exp;
9869 sym = exp->symtree->n.sym->ns->proc_name;
9870 /* Check to see if this is a nested DTIO call, with the
9871 dummy as the io-list object. */
9872 if (sym && sym == dtio_sub && sym->formal
9873 && sym->formal->sym == exp->symtree->n.sym
9874 && exp->ref == NULL)
9875 {
9876 if (!sym->attr.recursive)
9877 {
9878 gfc_error ("DTIO %s procedure at %L must be recursive",
9879 sym->name, &sym->declared_at);
9880 return;
9881 }
9882 }
9883 }
9884 }
9885
9886 if (ts->type == BT_CLASS && dtio_sub == NULL)
9887 {
9888 gfc_error ("Data transfer element at %L cannot be polymorphic unless "
9889 "it is processed by a defined input/output procedure",
9890 &code->loc);
9891 return;
9892 }
9893
9894 if (ts->type == BT_DERIVED)
9895 {
9896 /* Check that transferred derived type doesn't contain POINTER
9897 components unless it is processed by a defined input/output
9898 procedure". */
9899 if (ts->u.derived->attr.pointer_comp && dtio_sub == NULL)
9900 {
9901 gfc_error ("Data transfer element at %L cannot have POINTER "
9902 "components unless it is processed by a defined "
9903 "input/output procedure", &code->loc);
9904 return;
9905 }
9906
9907 /* F08:C935. */
9908 if (ts->u.derived->attr.proc_pointer_comp)
9909 {
9910 gfc_error ("Data transfer element at %L cannot have "
9911 "procedure pointer components", &code->loc);
9912 return;
9913 }
9914
9915 if (ts->u.derived->attr.alloc_comp && dtio_sub == NULL)
9916 {
9917 gfc_error ("Data transfer element at %L cannot have ALLOCATABLE "
9918 "components unless it is processed by a defined "
9919 "input/output procedure", &code->loc);
9920 return;
9921 }
9922
9923 /* C_PTR and C_FUNPTR have private components which means they cannot
9924 be printed. However, if -std=gnu and not -pedantic, allow
9925 the component to be printed to help debugging. */
9926 if (ts->u.derived->ts.f90_type == BT_VOID)
9927 {
9928 if (!gfc_notify_std (GFC_STD_GNU, "Data transfer element at %L "
9929 "cannot have PRIVATE components", &code->loc))
9930 return;
9931 }
9932 else if (derived_inaccessible (ts->u.derived) && dtio_sub == NULL)
9933 {
9934 gfc_error ("Data transfer element at %L cannot have "
9935 "PRIVATE components unless it is processed by "
9936 "a defined input/output procedure", &code->loc);
9937 return;
9938 }
9939 }
9940
9941 if (exp->expr_type == EXPR_STRUCTURE)
9942 return;
9943
9944 sym = exp->symtree->n.sym;
9945
9946 if (sym->as != NULL && sym->as->type == AS_ASSUMED_SIZE && exp->ref
9947 && exp->ref->type == REF_ARRAY && exp->ref->u.ar.type == AR_FULL)
9948 {
9949 gfc_error ("Data transfer element at %L cannot be a full reference to "
9950 "an assumed-size array", &code->loc);
9951 return;
9952 }
9953 }
9954
9955
9956 /*********** Toplevel code resolution subroutines ***********/
9957
9958 /* Find the set of labels that are reachable from this block. We also
9959 record the last statement in each block. */
9960
9961 static void
9962 find_reachable_labels (gfc_code *block)
9963 {
9964 gfc_code *c;
9965
9966 if (!block)
9967 return;
9968
9969 cs_base->reachable_labels = bitmap_alloc (&labels_obstack);
9970
9971 /* Collect labels in this block. We don't keep those corresponding
9972 to END {IF|SELECT}, these are checked in resolve_branch by going
9973 up through the code_stack. */
9974 for (c = block; c; c = c->next)
9975 {
9976 if (c->here && c->op != EXEC_END_NESTED_BLOCK)
9977 bitmap_set_bit (cs_base->reachable_labels, c->here->value);
9978 }
9979
9980 /* Merge with labels from parent block. */
9981 if (cs_base->prev)
9982 {
9983 gcc_assert (cs_base->prev->reachable_labels);
9984 bitmap_ior_into (cs_base->reachable_labels,
9985 cs_base->prev->reachable_labels);
9986 }
9987 }
9988
9989
9990 static void
9991 resolve_lock_unlock_event (gfc_code *code)
9992 {
9993 if (code->expr1->expr_type == EXPR_FUNCTION
9994 && code->expr1->value.function.isym
9995 && code->expr1->value.function.isym->id == GFC_ISYM_CAF_GET)
9996 remove_caf_get_intrinsic (code->expr1);
9997
9998 if ((code->op == EXEC_LOCK || code->op == EXEC_UNLOCK)
9999 && (code->expr1->ts.type != BT_DERIVED
10000 || code->expr1->expr_type != EXPR_VARIABLE
10001 || code->expr1->ts.u.derived->from_intmod != INTMOD_ISO_FORTRAN_ENV
10002 || code->expr1->ts.u.derived->intmod_sym_id != ISOFORTRAN_LOCK_TYPE
10003 || code->expr1->rank != 0
10004 || (!gfc_is_coarray (code->expr1) &&
10005 !gfc_is_coindexed (code->expr1))))
10006 gfc_error ("Lock variable at %L must be a scalar of type LOCK_TYPE",
10007 &code->expr1->where);
10008 else if ((code->op == EXEC_EVENT_POST || code->op == EXEC_EVENT_WAIT)
10009 && (code->expr1->ts.type != BT_DERIVED
10010 || code->expr1->expr_type != EXPR_VARIABLE
10011 || code->expr1->ts.u.derived->from_intmod
10012 != INTMOD_ISO_FORTRAN_ENV
10013 || code->expr1->ts.u.derived->intmod_sym_id
10014 != ISOFORTRAN_EVENT_TYPE
10015 || code->expr1->rank != 0))
10016 gfc_error ("Event variable at %L must be a scalar of type EVENT_TYPE",
10017 &code->expr1->where);
10018 else if (code->op == EXEC_EVENT_POST && !gfc_is_coarray (code->expr1)
10019 && !gfc_is_coindexed (code->expr1))
10020 gfc_error ("Event variable argument at %L must be a coarray or coindexed",
10021 &code->expr1->where);
10022 else if (code->op == EXEC_EVENT_WAIT && !gfc_is_coarray (code->expr1))
10023 gfc_error ("Event variable argument at %L must be a coarray but not "
10024 "coindexed", &code->expr1->where);
10025
10026 /* Check STAT. */
10027 if (code->expr2
10028 && (code->expr2->ts.type != BT_INTEGER || code->expr2->rank != 0
10029 || code->expr2->expr_type != EXPR_VARIABLE))
10030 gfc_error ("STAT= argument at %L must be a scalar INTEGER variable",
10031 &code->expr2->where);
10032
10033 if (code->expr2
10034 && !gfc_check_vardef_context (code->expr2, false, false, false,
10035 _("STAT variable")))
10036 return;
10037
10038 /* Check ERRMSG. */
10039 if (code->expr3
10040 && (code->expr3->ts.type != BT_CHARACTER || code->expr3->rank != 0
10041 || code->expr3->expr_type != EXPR_VARIABLE))
10042 gfc_error ("ERRMSG= argument at %L must be a scalar CHARACTER variable",
10043 &code->expr3->where);
10044
10045 if (code->expr3
10046 && !gfc_check_vardef_context (code->expr3, false, false, false,
10047 _("ERRMSG variable")))
10048 return;
10049
10050 /* Check for LOCK the ACQUIRED_LOCK. */
10051 if (code->op != EXEC_EVENT_WAIT && code->expr4
10052 && (code->expr4->ts.type != BT_LOGICAL || code->expr4->rank != 0
10053 || code->expr4->expr_type != EXPR_VARIABLE))
10054 gfc_error ("ACQUIRED_LOCK= argument at %L must be a scalar LOGICAL "
10055 "variable", &code->expr4->where);
10056
10057 if (code->op != EXEC_EVENT_WAIT && code->expr4
10058 && !gfc_check_vardef_context (code->expr4, false, false, false,
10059 _("ACQUIRED_LOCK variable")))
10060 return;
10061
10062 /* Check for EVENT WAIT the UNTIL_COUNT. */
10063 if (code->op == EXEC_EVENT_WAIT && code->expr4)
10064 {
10065 if (!gfc_resolve_expr (code->expr4) || code->expr4->ts.type != BT_INTEGER
10066 || code->expr4->rank != 0)
10067 gfc_error ("UNTIL_COUNT= argument at %L must be a scalar INTEGER "
10068 "expression", &code->expr4->where);
10069 }
10070 }
10071
10072
10073 static void
10074 resolve_critical (gfc_code *code)
10075 {
10076 gfc_symtree *symtree;
10077 gfc_symbol *lock_type;
10078 char name[GFC_MAX_SYMBOL_LEN];
10079 static int serial = 0;
10080
10081 if (flag_coarray != GFC_FCOARRAY_LIB)
10082 return;
10083
10084 symtree = gfc_find_symtree (gfc_current_ns->sym_root,
10085 GFC_PREFIX ("lock_type"));
10086 if (symtree)
10087 lock_type = symtree->n.sym;
10088 else
10089 {
10090 if (gfc_get_sym_tree (GFC_PREFIX ("lock_type"), gfc_current_ns, &symtree,
10091 false) != 0)
10092 gcc_unreachable ();
10093 lock_type = symtree->n.sym;
10094 lock_type->attr.flavor = FL_DERIVED;
10095 lock_type->attr.zero_comp = 1;
10096 lock_type->from_intmod = INTMOD_ISO_FORTRAN_ENV;
10097 lock_type->intmod_sym_id = ISOFORTRAN_LOCK_TYPE;
10098 }
10099
10100 sprintf(name, GFC_PREFIX ("lock_var") "%d",serial++);
10101 if (gfc_get_sym_tree (name, gfc_current_ns, &symtree, false) != 0)
10102 gcc_unreachable ();
10103
10104 code->resolved_sym = symtree->n.sym;
10105 symtree->n.sym->attr.flavor = FL_VARIABLE;
10106 symtree->n.sym->attr.referenced = 1;
10107 symtree->n.sym->attr.artificial = 1;
10108 symtree->n.sym->attr.codimension = 1;
10109 symtree->n.sym->ts.type = BT_DERIVED;
10110 symtree->n.sym->ts.u.derived = lock_type;
10111 symtree->n.sym->as = gfc_get_array_spec ();
10112 symtree->n.sym->as->corank = 1;
10113 symtree->n.sym->as->type = AS_EXPLICIT;
10114 symtree->n.sym->as->cotype = AS_EXPLICIT;
10115 symtree->n.sym->as->lower[0] = gfc_get_int_expr (gfc_default_integer_kind,
10116 NULL, 1);
10117 gfc_commit_symbols();
10118 }
10119
10120
10121 static void
10122 resolve_sync (gfc_code *code)
10123 {
10124 /* Check imageset. The * case matches expr1 == NULL. */
10125 if (code->expr1)
10126 {
10127 if (code->expr1->ts.type != BT_INTEGER || code->expr1->rank > 1)
10128 gfc_error ("Imageset argument at %L must be a scalar or rank-1 "
10129 "INTEGER expression", &code->expr1->where);
10130 if (code->expr1->expr_type == EXPR_CONSTANT && code->expr1->rank == 0
10131 && mpz_cmp_si (code->expr1->value.integer, 1) < 0)
10132 gfc_error ("Imageset argument at %L must between 1 and num_images()",
10133 &code->expr1->where);
10134 else if (code->expr1->expr_type == EXPR_ARRAY
10135 && gfc_simplify_expr (code->expr1, 0))
10136 {
10137 gfc_constructor *cons;
10138 cons = gfc_constructor_first (code->expr1->value.constructor);
10139 for (; cons; cons = gfc_constructor_next (cons))
10140 if (cons->expr->expr_type == EXPR_CONSTANT
10141 && mpz_cmp_si (cons->expr->value.integer, 1) < 0)
10142 gfc_error ("Imageset argument at %L must between 1 and "
10143 "num_images()", &cons->expr->where);
10144 }
10145 }
10146
10147 /* Check STAT. */
10148 gfc_resolve_expr (code->expr2);
10149 if (code->expr2
10150 && (code->expr2->ts.type != BT_INTEGER || code->expr2->rank != 0
10151 || code->expr2->expr_type != EXPR_VARIABLE))
10152 gfc_error ("STAT= argument at %L must be a scalar INTEGER variable",
10153 &code->expr2->where);
10154
10155 /* Check ERRMSG. */
10156 gfc_resolve_expr (code->expr3);
10157 if (code->expr3
10158 && (code->expr3->ts.type != BT_CHARACTER || code->expr3->rank != 0
10159 || code->expr3->expr_type != EXPR_VARIABLE))
10160 gfc_error ("ERRMSG= argument at %L must be a scalar CHARACTER variable",
10161 &code->expr3->where);
10162 }
10163
10164
10165 /* Given a branch to a label, see if the branch is conforming.
10166 The code node describes where the branch is located. */
10167
10168 static void
10169 resolve_branch (gfc_st_label *label, gfc_code *code)
10170 {
10171 code_stack *stack;
10172
10173 if (label == NULL)
10174 return;
10175
10176 /* Step one: is this a valid branching target? */
10177
10178 if (label->defined == ST_LABEL_UNKNOWN)
10179 {
10180 gfc_error ("Label %d referenced at %L is never defined", label->value,
10181 &code->loc);
10182 return;
10183 }
10184
10185 if (label->defined != ST_LABEL_TARGET && label->defined != ST_LABEL_DO_TARGET)
10186 {
10187 gfc_error ("Statement at %L is not a valid branch target statement "
10188 "for the branch statement at %L", &label->where, &code->loc);
10189 return;
10190 }
10191
10192 /* Step two: make sure this branch is not a branch to itself ;-) */
10193
10194 if (code->here == label)
10195 {
10196 gfc_warning (0,
10197 "Branch at %L may result in an infinite loop", &code->loc);
10198 return;
10199 }
10200
10201 /* Step three: See if the label is in the same block as the
10202 branching statement. The hard work has been done by setting up
10203 the bitmap reachable_labels. */
10204
10205 if (bitmap_bit_p (cs_base->reachable_labels, label->value))
10206 {
10207 /* Check now whether there is a CRITICAL construct; if so, check
10208 whether the label is still visible outside of the CRITICAL block,
10209 which is invalid. */
10210 for (stack = cs_base; stack; stack = stack->prev)
10211 {
10212 if (stack->current->op == EXEC_CRITICAL
10213 && bitmap_bit_p (stack->reachable_labels, label->value))
10214 gfc_error ("GOTO statement at %L leaves CRITICAL construct for "
10215 "label at %L", &code->loc, &label->where);
10216 else if (stack->current->op == EXEC_DO_CONCURRENT
10217 && bitmap_bit_p (stack->reachable_labels, label->value))
10218 gfc_error ("GOTO statement at %L leaves DO CONCURRENT construct "
10219 "for label at %L", &code->loc, &label->where);
10220 }
10221
10222 return;
10223 }
10224
10225 /* Step four: If we haven't found the label in the bitmap, it may
10226 still be the label of the END of the enclosing block, in which
10227 case we find it by going up the code_stack. */
10228
10229 for (stack = cs_base; stack; stack = stack->prev)
10230 {
10231 if (stack->current->next && stack->current->next->here == label)
10232 break;
10233 if (stack->current->op == EXEC_CRITICAL)
10234 {
10235 /* Note: A label at END CRITICAL does not leave the CRITICAL
10236 construct as END CRITICAL is still part of it. */
10237 gfc_error ("GOTO statement at %L leaves CRITICAL construct for label"
10238 " at %L", &code->loc, &label->where);
10239 return;
10240 }
10241 else if (stack->current->op == EXEC_DO_CONCURRENT)
10242 {
10243 gfc_error ("GOTO statement at %L leaves DO CONCURRENT construct for "
10244 "label at %L", &code->loc, &label->where);
10245 return;
10246 }
10247 }
10248
10249 if (stack)
10250 {
10251 gcc_assert (stack->current->next->op == EXEC_END_NESTED_BLOCK);
10252 return;
10253 }
10254
10255 /* The label is not in an enclosing block, so illegal. This was
10256 allowed in Fortran 66, so we allow it as extension. No
10257 further checks are necessary in this case. */
10258 gfc_notify_std (GFC_STD_LEGACY, "Label at %L is not in the same block "
10259 "as the GOTO statement at %L", &label->where,
10260 &code->loc);
10261 return;
10262 }
10263
10264
10265 /* Check whether EXPR1 has the same shape as EXPR2. */
10266
10267 static bool
10268 resolve_where_shape (gfc_expr *expr1, gfc_expr *expr2)
10269 {
10270 mpz_t shape[GFC_MAX_DIMENSIONS];
10271 mpz_t shape2[GFC_MAX_DIMENSIONS];
10272 bool result = false;
10273 int i;
10274
10275 /* Compare the rank. */
10276 if (expr1->rank != expr2->rank)
10277 return result;
10278
10279 /* Compare the size of each dimension. */
10280 for (i=0; i<expr1->rank; i++)
10281 {
10282 if (!gfc_array_dimen_size (expr1, i, &shape[i]))
10283 goto ignore;
10284
10285 if (!gfc_array_dimen_size (expr2, i, &shape2[i]))
10286 goto ignore;
10287
10288 if (mpz_cmp (shape[i], shape2[i]))
10289 goto over;
10290 }
10291
10292 /* When either of the two expression is an assumed size array, we
10293 ignore the comparison of dimension sizes. */
10294 ignore:
10295 result = true;
10296
10297 over:
10298 gfc_clear_shape (shape, i);
10299 gfc_clear_shape (shape2, i);
10300 return result;
10301 }
10302
10303
10304 /* Check whether a WHERE assignment target or a WHERE mask expression
10305 has the same shape as the outmost WHERE mask expression. */
10306
10307 static void
10308 resolve_where (gfc_code *code, gfc_expr *mask)
10309 {
10310 gfc_code *cblock;
10311 gfc_code *cnext;
10312 gfc_expr *e = NULL;
10313
10314 cblock = code->block;
10315
10316 /* Store the first WHERE mask-expr of the WHERE statement or construct.
10317 In case of nested WHERE, only the outmost one is stored. */
10318 if (mask == NULL) /* outmost WHERE */
10319 e = cblock->expr1;
10320 else /* inner WHERE */
10321 e = mask;
10322
10323 while (cblock)
10324 {
10325 if (cblock->expr1)
10326 {
10327 /* Check if the mask-expr has a consistent shape with the
10328 outmost WHERE mask-expr. */
10329 if (!resolve_where_shape (cblock->expr1, e))
10330 gfc_error ("WHERE mask at %L has inconsistent shape",
10331 &cblock->expr1->where);
10332 }
10333
10334 /* the assignment statement of a WHERE statement, or the first
10335 statement in where-body-construct of a WHERE construct */
10336 cnext = cblock->next;
10337 while (cnext)
10338 {
10339 switch (cnext->op)
10340 {
10341 /* WHERE assignment statement */
10342 case EXEC_ASSIGN:
10343
10344 /* Check shape consistent for WHERE assignment target. */
10345 if (e && !resolve_where_shape (cnext->expr1, e))
10346 gfc_error ("WHERE assignment target at %L has "
10347 "inconsistent shape", &cnext->expr1->where);
10348 break;
10349
10350
10351 case EXEC_ASSIGN_CALL:
10352 resolve_call (cnext);
10353 if (!cnext->resolved_sym->attr.elemental)
10354 gfc_error("Non-ELEMENTAL user-defined assignment in WHERE at %L",
10355 &cnext->ext.actual->expr->where);
10356 break;
10357
10358 /* WHERE or WHERE construct is part of a where-body-construct */
10359 case EXEC_WHERE:
10360 resolve_where (cnext, e);
10361 break;
10362
10363 default:
10364 gfc_error ("Unsupported statement inside WHERE at %L",
10365 &cnext->loc);
10366 }
10367 /* the next statement within the same where-body-construct */
10368 cnext = cnext->next;
10369 }
10370 /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
10371 cblock = cblock->block;
10372 }
10373 }
10374
10375
10376 /* Resolve assignment in FORALL construct.
10377 NVAR is the number of FORALL index variables, and VAR_EXPR records the
10378 FORALL index variables. */
10379
10380 static void
10381 gfc_resolve_assign_in_forall (gfc_code *code, int nvar, gfc_expr **var_expr)
10382 {
10383 int n;
10384
10385 for (n = 0; n < nvar; n++)
10386 {
10387 gfc_symbol *forall_index;
10388
10389 forall_index = var_expr[n]->symtree->n.sym;
10390
10391 /* Check whether the assignment target is one of the FORALL index
10392 variable. */
10393 if ((code->expr1->expr_type == EXPR_VARIABLE)
10394 && (code->expr1->symtree->n.sym == forall_index))
10395 gfc_error ("Assignment to a FORALL index variable at %L",
10396 &code->expr1->where);
10397 else
10398 {
10399 /* If one of the FORALL index variables doesn't appear in the
10400 assignment variable, then there could be a many-to-one
10401 assignment. Emit a warning rather than an error because the
10402 mask could be resolving this problem. */
10403 if (!find_forall_index (code->expr1, forall_index, 0))
10404 gfc_warning (0, "The FORALL with index %qs is not used on the "
10405 "left side of the assignment at %L and so might "
10406 "cause multiple assignment to this object",
10407 var_expr[n]->symtree->name, &code->expr1->where);
10408 }
10409 }
10410 }
10411
10412
10413 /* Resolve WHERE statement in FORALL construct. */
10414
10415 static void
10416 gfc_resolve_where_code_in_forall (gfc_code *code, int nvar,
10417 gfc_expr **var_expr)
10418 {
10419 gfc_code *cblock;
10420 gfc_code *cnext;
10421
10422 cblock = code->block;
10423 while (cblock)
10424 {
10425 /* the assignment statement of a WHERE statement, or the first
10426 statement in where-body-construct of a WHERE construct */
10427 cnext = cblock->next;
10428 while (cnext)
10429 {
10430 switch (cnext->op)
10431 {
10432 /* WHERE assignment statement */
10433 case EXEC_ASSIGN:
10434 gfc_resolve_assign_in_forall (cnext, nvar, var_expr);
10435 break;
10436
10437 /* WHERE operator assignment statement */
10438 case EXEC_ASSIGN_CALL:
10439 resolve_call (cnext);
10440 if (!cnext->resolved_sym->attr.elemental)
10441 gfc_error("Non-ELEMENTAL user-defined assignment in WHERE at %L",
10442 &cnext->ext.actual->expr->where);
10443 break;
10444
10445 /* WHERE or WHERE construct is part of a where-body-construct */
10446 case EXEC_WHERE:
10447 gfc_resolve_where_code_in_forall (cnext, nvar, var_expr);
10448 break;
10449
10450 default:
10451 gfc_error ("Unsupported statement inside WHERE at %L",
10452 &cnext->loc);
10453 }
10454 /* the next statement within the same where-body-construct */
10455 cnext = cnext->next;
10456 }
10457 /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
10458 cblock = cblock->block;
10459 }
10460 }
10461
10462
10463 /* Traverse the FORALL body to check whether the following errors exist:
10464 1. For assignment, check if a many-to-one assignment happens.
10465 2. For WHERE statement, check the WHERE body to see if there is any
10466 many-to-one assignment. */
10467
10468 static void
10469 gfc_resolve_forall_body (gfc_code *code, int nvar, gfc_expr **var_expr)
10470 {
10471 gfc_code *c;
10472
10473 c = code->block->next;
10474 while (c)
10475 {
10476 switch (c->op)
10477 {
10478 case EXEC_ASSIGN:
10479 case EXEC_POINTER_ASSIGN:
10480 gfc_resolve_assign_in_forall (c, nvar, var_expr);
10481 break;
10482
10483 case EXEC_ASSIGN_CALL:
10484 resolve_call (c);
10485 break;
10486
10487 /* Because the gfc_resolve_blocks() will handle the nested FORALL,
10488 there is no need to handle it here. */
10489 case EXEC_FORALL:
10490 break;
10491 case EXEC_WHERE:
10492 gfc_resolve_where_code_in_forall(c, nvar, var_expr);
10493 break;
10494 default:
10495 break;
10496 }
10497 /* The next statement in the FORALL body. */
10498 c = c->next;
10499 }
10500 }
10501
10502
10503 /* Counts the number of iterators needed inside a forall construct, including
10504 nested forall constructs. This is used to allocate the needed memory
10505 in gfc_resolve_forall. */
10506
10507 static int
10508 gfc_count_forall_iterators (gfc_code *code)
10509 {
10510 int max_iters, sub_iters, current_iters;
10511 gfc_forall_iterator *fa;
10512
10513 gcc_assert(code->op == EXEC_FORALL);
10514 max_iters = 0;
10515 current_iters = 0;
10516
10517 for (fa = code->ext.forall_iterator; fa; fa = fa->next)
10518 current_iters ++;
10519
10520 code = code->block->next;
10521
10522 while (code)
10523 {
10524 if (code->op == EXEC_FORALL)
10525 {
10526 sub_iters = gfc_count_forall_iterators (code);
10527 if (sub_iters > max_iters)
10528 max_iters = sub_iters;
10529 }
10530 code = code->next;
10531 }
10532
10533 return current_iters + max_iters;
10534 }
10535
10536
10537 /* Given a FORALL construct, first resolve the FORALL iterator, then call
10538 gfc_resolve_forall_body to resolve the FORALL body. */
10539
10540 static void
10541 gfc_resolve_forall (gfc_code *code, gfc_namespace *ns, int forall_save)
10542 {
10543 static gfc_expr **var_expr;
10544 static int total_var = 0;
10545 static int nvar = 0;
10546 int i, old_nvar, tmp;
10547 gfc_forall_iterator *fa;
10548
10549 old_nvar = nvar;
10550
10551 if (!gfc_notify_std (GFC_STD_F2018_OBS, "FORALL construct at %L", &code->loc))
10552 return;
10553
10554 /* Start to resolve a FORALL construct */
10555 if (forall_save == 0)
10556 {
10557 /* Count the total number of FORALL indices in the nested FORALL
10558 construct in order to allocate the VAR_EXPR with proper size. */
10559 total_var = gfc_count_forall_iterators (code);
10560
10561 /* Allocate VAR_EXPR with NUMBER_OF_FORALL_INDEX elements. */
10562 var_expr = XCNEWVEC (gfc_expr *, total_var);
10563 }
10564
10565 /* The information about FORALL iterator, including FORALL indices start, end
10566 and stride. An outer FORALL indice cannot appear in start, end or stride. */
10567 for (fa = code->ext.forall_iterator; fa; fa = fa->next)
10568 {
10569 /* Fortran 20008: C738 (R753). */
10570 if (fa->var->ref && fa->var->ref->type == REF_ARRAY)
10571 {
10572 gfc_error ("FORALL index-name at %L must be a scalar variable "
10573 "of type integer", &fa->var->where);
10574 continue;
10575 }
10576
10577 /* Check if any outer FORALL index name is the same as the current
10578 one. */
10579 for (i = 0; i < nvar; i++)
10580 {
10581 if (fa->var->symtree->n.sym == var_expr[i]->symtree->n.sym)
10582 gfc_error ("An outer FORALL construct already has an index "
10583 "with this name %L", &fa->var->where);
10584 }
10585
10586 /* Record the current FORALL index. */
10587 var_expr[nvar] = gfc_copy_expr (fa->var);
10588
10589 nvar++;
10590
10591 /* No memory leak. */
10592 gcc_assert (nvar <= total_var);
10593 }
10594
10595 /* Resolve the FORALL body. */
10596 gfc_resolve_forall_body (code, nvar, var_expr);
10597
10598 /* May call gfc_resolve_forall to resolve the inner FORALL loop. */
10599 gfc_resolve_blocks (code->block, ns);
10600
10601 tmp = nvar;
10602 nvar = old_nvar;
10603 /* Free only the VAR_EXPRs allocated in this frame. */
10604 for (i = nvar; i < tmp; i++)
10605 gfc_free_expr (var_expr[i]);
10606
10607 if (nvar == 0)
10608 {
10609 /* We are in the outermost FORALL construct. */
10610 gcc_assert (forall_save == 0);
10611
10612 /* VAR_EXPR is not needed any more. */
10613 free (var_expr);
10614 total_var = 0;
10615 }
10616 }
10617
10618
10619 /* Resolve a BLOCK construct statement. */
10620
10621 static void
10622 resolve_block_construct (gfc_code* code)
10623 {
10624 /* Resolve the BLOCK's namespace. */
10625 gfc_resolve (code->ext.block.ns);
10626
10627 /* For an ASSOCIATE block, the associations (and their targets) are already
10628 resolved during resolve_symbol. */
10629 }
10630
10631
10632 /* Resolve lists of blocks found in IF, SELECT CASE, WHERE, FORALL, GOTO and
10633 DO code nodes. */
10634
10635 void
10636 gfc_resolve_blocks (gfc_code *b, gfc_namespace *ns)
10637 {
10638 bool t;
10639
10640 for (; b; b = b->block)
10641 {
10642 t = gfc_resolve_expr (b->expr1);
10643 if (!gfc_resolve_expr (b->expr2))
10644 t = false;
10645
10646 switch (b->op)
10647 {
10648 case EXEC_IF:
10649 if (t && b->expr1 != NULL
10650 && (b->expr1->ts.type != BT_LOGICAL || b->expr1->rank != 0))
10651 gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
10652 &b->expr1->where);
10653 break;
10654
10655 case EXEC_WHERE:
10656 if (t
10657 && b->expr1 != NULL
10658 && (b->expr1->ts.type != BT_LOGICAL || b->expr1->rank == 0))
10659 gfc_error ("WHERE/ELSEWHERE clause at %L requires a LOGICAL array",
10660 &b->expr1->where);
10661 break;
10662
10663 case EXEC_GOTO:
10664 resolve_branch (b->label1, b);
10665 break;
10666
10667 case EXEC_BLOCK:
10668 resolve_block_construct (b);
10669 break;
10670
10671 case EXEC_SELECT:
10672 case EXEC_SELECT_TYPE:
10673 case EXEC_SELECT_RANK:
10674 case EXEC_FORALL:
10675 case EXEC_DO:
10676 case EXEC_DO_WHILE:
10677 case EXEC_DO_CONCURRENT:
10678 case EXEC_CRITICAL:
10679 case EXEC_READ:
10680 case EXEC_WRITE:
10681 case EXEC_IOLENGTH:
10682 case EXEC_WAIT:
10683 break;
10684
10685 case EXEC_OMP_ATOMIC:
10686 case EXEC_OACC_ATOMIC:
10687 {
10688 gfc_omp_atomic_op aop
10689 = (gfc_omp_atomic_op) (b->ext.omp_atomic & GFC_OMP_ATOMIC_MASK);
10690
10691 /* Verify this before calling gfc_resolve_code, which might
10692 change it. */
10693 gcc_assert (b->next && b->next->op == EXEC_ASSIGN);
10694 gcc_assert (((aop != GFC_OMP_ATOMIC_CAPTURE)
10695 && b->next->next == NULL)
10696 || ((aop == GFC_OMP_ATOMIC_CAPTURE)
10697 && b->next->next != NULL
10698 && b->next->next->op == EXEC_ASSIGN
10699 && b->next->next->next == NULL));
10700 }
10701 break;
10702
10703 case EXEC_OACC_PARALLEL_LOOP:
10704 case EXEC_OACC_PARALLEL:
10705 case EXEC_OACC_KERNELS_LOOP:
10706 case EXEC_OACC_KERNELS:
10707 case EXEC_OACC_SERIAL_LOOP:
10708 case EXEC_OACC_SERIAL:
10709 case EXEC_OACC_DATA:
10710 case EXEC_OACC_HOST_DATA:
10711 case EXEC_OACC_LOOP:
10712 case EXEC_OACC_UPDATE:
10713 case EXEC_OACC_WAIT:
10714 case EXEC_OACC_CACHE:
10715 case EXEC_OACC_ENTER_DATA:
10716 case EXEC_OACC_EXIT_DATA:
10717 case EXEC_OACC_ROUTINE:
10718 case EXEC_OMP_CRITICAL:
10719 case EXEC_OMP_DISTRIBUTE:
10720 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
10721 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
10722 case EXEC_OMP_DISTRIBUTE_SIMD:
10723 case EXEC_OMP_DO:
10724 case EXEC_OMP_DO_SIMD:
10725 case EXEC_OMP_MASTER:
10726 case EXEC_OMP_ORDERED:
10727 case EXEC_OMP_PARALLEL:
10728 case EXEC_OMP_PARALLEL_DO:
10729 case EXEC_OMP_PARALLEL_DO_SIMD:
10730 case EXEC_OMP_PARALLEL_SECTIONS:
10731 case EXEC_OMP_PARALLEL_WORKSHARE:
10732 case EXEC_OMP_SECTIONS:
10733 case EXEC_OMP_SIMD:
10734 case EXEC_OMP_SINGLE:
10735 case EXEC_OMP_TARGET:
10736 case EXEC_OMP_TARGET_DATA:
10737 case EXEC_OMP_TARGET_ENTER_DATA:
10738 case EXEC_OMP_TARGET_EXIT_DATA:
10739 case EXEC_OMP_TARGET_PARALLEL:
10740 case EXEC_OMP_TARGET_PARALLEL_DO:
10741 case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
10742 case EXEC_OMP_TARGET_SIMD:
10743 case EXEC_OMP_TARGET_TEAMS:
10744 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
10745 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
10746 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
10747 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
10748 case EXEC_OMP_TARGET_UPDATE:
10749 case EXEC_OMP_TASK:
10750 case EXEC_OMP_TASKGROUP:
10751 case EXEC_OMP_TASKLOOP:
10752 case EXEC_OMP_TASKLOOP_SIMD:
10753 case EXEC_OMP_TASKWAIT:
10754 case EXEC_OMP_TASKYIELD:
10755 case EXEC_OMP_TEAMS:
10756 case EXEC_OMP_TEAMS_DISTRIBUTE:
10757 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
10758 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
10759 case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
10760 case EXEC_OMP_WORKSHARE:
10761 break;
10762
10763 default:
10764 gfc_internal_error ("gfc_resolve_blocks(): Bad block type");
10765 }
10766
10767 gfc_resolve_code (b->next, ns);
10768 }
10769 }
10770
10771
10772 /* Does everything to resolve an ordinary assignment. Returns true
10773 if this is an interface assignment. */
10774 static bool
10775 resolve_ordinary_assign (gfc_code *code, gfc_namespace *ns)
10776 {
10777 bool rval = false;
10778 gfc_expr *lhs;
10779 gfc_expr *rhs;
10780 int n;
10781 gfc_ref *ref;
10782 symbol_attribute attr;
10783
10784 if (gfc_extend_assign (code, ns))
10785 {
10786 gfc_expr** rhsptr;
10787
10788 if (code->op == EXEC_ASSIGN_CALL)
10789 {
10790 lhs = code->ext.actual->expr;
10791 rhsptr = &code->ext.actual->next->expr;
10792 }
10793 else
10794 {
10795 gfc_actual_arglist* args;
10796 gfc_typebound_proc* tbp;
10797
10798 gcc_assert (code->op == EXEC_COMPCALL);
10799
10800 args = code->expr1->value.compcall.actual;
10801 lhs = args->expr;
10802 rhsptr = &args->next->expr;
10803
10804 tbp = code->expr1->value.compcall.tbp;
10805 gcc_assert (!tbp->is_generic);
10806 }
10807
10808 /* Make a temporary rhs when there is a default initializer
10809 and rhs is the same symbol as the lhs. */
10810 if ((*rhsptr)->expr_type == EXPR_VARIABLE
10811 && (*rhsptr)->symtree->n.sym->ts.type == BT_DERIVED
10812 && gfc_has_default_initializer ((*rhsptr)->symtree->n.sym->ts.u.derived)
10813 && (lhs->symtree->n.sym == (*rhsptr)->symtree->n.sym))
10814 *rhsptr = gfc_get_parentheses (*rhsptr);
10815
10816 return true;
10817 }
10818
10819 lhs = code->expr1;
10820 rhs = code->expr2;
10821
10822 if ((gfc_numeric_ts (&lhs->ts) || lhs->ts.type == BT_LOGICAL)
10823 && rhs->ts.type == BT_CHARACTER
10824 && (rhs->expr_type != EXPR_CONSTANT || !flag_dec_char_conversions))
10825 {
10826 /* Use of -fdec-char-conversions allows assignment of character data
10827 to non-character variables. This not permited for nonconstant
10828 strings. */
10829 gfc_error ("Cannot convert %s to %s at %L", gfc_typename (rhs),
10830 gfc_typename (lhs), &rhs->where);
10831 return false;
10832 }
10833
10834 /* Handle the case of a BOZ literal on the RHS. */
10835 if (rhs->ts.type == BT_BOZ)
10836 {
10837 if (gfc_invalid_boz ("BOZ literal constant at %L is neither a DATA "
10838 "statement value nor an actual argument of "
10839 "INT/REAL/DBLE/CMPLX intrinsic subprogram",
10840 &rhs->where))
10841 return false;
10842
10843 switch (lhs->ts.type)
10844 {
10845 case BT_INTEGER:
10846 if (!gfc_boz2int (rhs, lhs->ts.kind))
10847 return false;
10848 break;
10849 case BT_REAL:
10850 if (!gfc_boz2real (rhs, lhs->ts.kind))
10851 return false;
10852 break;
10853 default:
10854 gfc_error ("Invalid use of BOZ literal constant at %L", &rhs->where);
10855 return false;
10856 }
10857 }
10858
10859 if (lhs->ts.type == BT_CHARACTER && warn_character_truncation)
10860 {
10861 HOST_WIDE_INT llen = 0, rlen = 0;
10862 if (lhs->ts.u.cl != NULL
10863 && lhs->ts.u.cl->length != NULL
10864 && lhs->ts.u.cl->length->expr_type == EXPR_CONSTANT)
10865 llen = gfc_mpz_get_hwi (lhs->ts.u.cl->length->value.integer);
10866
10867 if (rhs->expr_type == EXPR_CONSTANT)
10868 rlen = rhs->value.character.length;
10869
10870 else if (rhs->ts.u.cl != NULL
10871 && rhs->ts.u.cl->length != NULL
10872 && rhs->ts.u.cl->length->expr_type == EXPR_CONSTANT)
10873 rlen = gfc_mpz_get_hwi (rhs->ts.u.cl->length->value.integer);
10874
10875 if (rlen && llen && rlen > llen)
10876 gfc_warning_now (OPT_Wcharacter_truncation,
10877 "CHARACTER expression will be truncated "
10878 "in assignment (%ld/%ld) at %L",
10879 (long) llen, (long) rlen, &code->loc);
10880 }
10881
10882 /* Ensure that a vector index expression for the lvalue is evaluated
10883 to a temporary if the lvalue symbol is referenced in it. */
10884 if (lhs->rank)
10885 {
10886 for (ref = lhs->ref; ref; ref= ref->next)
10887 if (ref->type == REF_ARRAY)
10888 {
10889 for (n = 0; n < ref->u.ar.dimen; n++)
10890 if (ref->u.ar.dimen_type[n] == DIMEN_VECTOR
10891 && gfc_find_sym_in_expr (lhs->symtree->n.sym,
10892 ref->u.ar.start[n]))
10893 ref->u.ar.start[n]
10894 = gfc_get_parentheses (ref->u.ar.start[n]);
10895 }
10896 }
10897
10898 if (gfc_pure (NULL))
10899 {
10900 if (lhs->ts.type == BT_DERIVED
10901 && lhs->expr_type == EXPR_VARIABLE
10902 && lhs->ts.u.derived->attr.pointer_comp
10903 && rhs->expr_type == EXPR_VARIABLE
10904 && (gfc_impure_variable (rhs->symtree->n.sym)
10905 || gfc_is_coindexed (rhs)))
10906 {
10907 /* F2008, C1283. */
10908 if (gfc_is_coindexed (rhs))
10909 gfc_error ("Coindexed expression at %L is assigned to "
10910 "a derived type variable with a POINTER "
10911 "component in a PURE procedure",
10912 &rhs->where);
10913 else
10914 /* F2008, C1283 (4). */
10915 gfc_error ("In a pure subprogram an INTENT(IN) dummy argument "
10916 "shall not be used as the expr at %L of an intrinsic "
10917 "assignment statement in which the variable is of a "
10918 "derived type if the derived type has a pointer "
10919 "component at any level of component selection.",
10920 &rhs->where);
10921 return rval;
10922 }
10923
10924 /* Fortran 2008, C1283. */
10925 if (gfc_is_coindexed (lhs))
10926 {
10927 gfc_error ("Assignment to coindexed variable at %L in a PURE "
10928 "procedure", &rhs->where);
10929 return rval;
10930 }
10931 }
10932
10933 if (gfc_implicit_pure (NULL))
10934 {
10935 if (lhs->expr_type == EXPR_VARIABLE
10936 && lhs->symtree->n.sym != gfc_current_ns->proc_name
10937 && lhs->symtree->n.sym->ns != gfc_current_ns)
10938 gfc_unset_implicit_pure (NULL);
10939
10940 if (lhs->ts.type == BT_DERIVED
10941 && lhs->expr_type == EXPR_VARIABLE
10942 && lhs->ts.u.derived->attr.pointer_comp
10943 && rhs->expr_type == EXPR_VARIABLE
10944 && (gfc_impure_variable (rhs->symtree->n.sym)
10945 || gfc_is_coindexed (rhs)))
10946 gfc_unset_implicit_pure (NULL);
10947
10948 /* Fortran 2008, C1283. */
10949 if (gfc_is_coindexed (lhs))
10950 gfc_unset_implicit_pure (NULL);
10951 }
10952
10953 /* F2008, 7.2.1.2. */
10954 attr = gfc_expr_attr (lhs);
10955 if (lhs->ts.type == BT_CLASS && attr.allocatable)
10956 {
10957 if (attr.codimension)
10958 {
10959 gfc_error ("Assignment to polymorphic coarray at %L is not "
10960 "permitted", &lhs->where);
10961 return false;
10962 }
10963 if (!gfc_notify_std (GFC_STD_F2008, "Assignment to an allocatable "
10964 "polymorphic variable at %L", &lhs->where))
10965 return false;
10966 if (!flag_realloc_lhs)
10967 {
10968 gfc_error ("Assignment to an allocatable polymorphic variable at %L "
10969 "requires %<-frealloc-lhs%>", &lhs->where);
10970 return false;
10971 }
10972 }
10973 else if (lhs->ts.type == BT_CLASS)
10974 {
10975 gfc_error ("Nonallocatable variable must not be polymorphic in intrinsic "
10976 "assignment at %L - check that there is a matching specific "
10977 "subroutine for '=' operator", &lhs->where);
10978 return false;
10979 }
10980
10981 bool lhs_coindexed = gfc_is_coindexed (lhs);
10982
10983 /* F2008, Section 7.2.1.2. */
10984 if (lhs_coindexed && gfc_has_ultimate_allocatable (lhs))
10985 {
10986 gfc_error ("Coindexed variable must not have an allocatable ultimate "
10987 "component in assignment at %L", &lhs->where);
10988 return false;
10989 }
10990
10991 /* Assign the 'data' of a class object to a derived type. */
10992 if (lhs->ts.type == BT_DERIVED
10993 && rhs->ts.type == BT_CLASS
10994 && rhs->expr_type != EXPR_ARRAY)
10995 gfc_add_data_component (rhs);
10996
10997 /* Make sure there is a vtable and, in particular, a _copy for the
10998 rhs type. */
10999 if (UNLIMITED_POLY (lhs) && lhs->rank && rhs->ts.type != BT_CLASS)
11000 gfc_find_vtab (&rhs->ts);
11001
11002 bool caf_convert_to_send = flag_coarray == GFC_FCOARRAY_LIB
11003 && (lhs_coindexed
11004 || (code->expr2->expr_type == EXPR_FUNCTION
11005 && code->expr2->value.function.isym
11006 && code->expr2->value.function.isym->id == GFC_ISYM_CAF_GET
11007 && (code->expr1->rank == 0 || code->expr2->rank != 0)
11008 && !gfc_expr_attr (rhs).allocatable
11009 && !gfc_has_vector_subscript (rhs)));
11010
11011 gfc_check_assign (lhs, rhs, 1, !caf_convert_to_send);
11012
11013 /* Insert a GFC_ISYM_CAF_SEND intrinsic, when the LHS is a coindexed variable.
11014 Additionally, insert this code when the RHS is a CAF as we then use the
11015 GFC_ISYM_CAF_SEND intrinsic just to avoid a temporary; but do not do so if
11016 the LHS is (re)allocatable or has a vector subscript. If the LHS is a
11017 noncoindexed array and the RHS is a coindexed scalar, use the normal code
11018 path. */
11019 if (caf_convert_to_send)
11020 {
11021 if (code->expr2->expr_type == EXPR_FUNCTION
11022 && code->expr2->value.function.isym
11023 && code->expr2->value.function.isym->id == GFC_ISYM_CAF_GET)
11024 remove_caf_get_intrinsic (code->expr2);
11025 code->op = EXEC_CALL;
11026 gfc_get_sym_tree (GFC_PREFIX ("caf_send"), ns, &code->symtree, true);
11027 code->resolved_sym = code->symtree->n.sym;
11028 code->resolved_sym->attr.flavor = FL_PROCEDURE;
11029 code->resolved_sym->attr.intrinsic = 1;
11030 code->resolved_sym->attr.subroutine = 1;
11031 code->resolved_isym = gfc_intrinsic_subroutine_by_id (GFC_ISYM_CAF_SEND);
11032 gfc_commit_symbol (code->resolved_sym);
11033 code->ext.actual = gfc_get_actual_arglist ();
11034 code->ext.actual->expr = lhs;
11035 code->ext.actual->next = gfc_get_actual_arglist ();
11036 code->ext.actual->next->expr = rhs;
11037 code->expr1 = NULL;
11038 code->expr2 = NULL;
11039 }
11040
11041 return false;
11042 }
11043
11044
11045 /* Add a component reference onto an expression. */
11046
11047 static void
11048 add_comp_ref (gfc_expr *e, gfc_component *c)
11049 {
11050 gfc_ref **ref;
11051 ref = &(e->ref);
11052 while (*ref)
11053 ref = &((*ref)->next);
11054 *ref = gfc_get_ref ();
11055 (*ref)->type = REF_COMPONENT;
11056 (*ref)->u.c.sym = e->ts.u.derived;
11057 (*ref)->u.c.component = c;
11058 e->ts = c->ts;
11059
11060 /* Add a full array ref, as necessary. */
11061 if (c->as)
11062 {
11063 gfc_add_full_array_ref (e, c->as);
11064 e->rank = c->as->rank;
11065 }
11066 }
11067
11068
11069 /* Build an assignment. Keep the argument 'op' for future use, so that
11070 pointer assignments can be made. */
11071
11072 static gfc_code *
11073 build_assignment (gfc_exec_op op, gfc_expr *expr1, gfc_expr *expr2,
11074 gfc_component *comp1, gfc_component *comp2, locus loc)
11075 {
11076 gfc_code *this_code;
11077
11078 this_code = gfc_get_code (op);
11079 this_code->next = NULL;
11080 this_code->expr1 = gfc_copy_expr (expr1);
11081 this_code->expr2 = gfc_copy_expr (expr2);
11082 this_code->loc = loc;
11083 if (comp1 && comp2)
11084 {
11085 add_comp_ref (this_code->expr1, comp1);
11086 add_comp_ref (this_code->expr2, comp2);
11087 }
11088
11089 return this_code;
11090 }
11091
11092
11093 /* Makes a temporary variable expression based on the characteristics of
11094 a given variable expression. */
11095
11096 static gfc_expr*
11097 get_temp_from_expr (gfc_expr *e, gfc_namespace *ns)
11098 {
11099 static int serial = 0;
11100 char name[GFC_MAX_SYMBOL_LEN];
11101 gfc_symtree *tmp;
11102 gfc_array_spec *as;
11103 gfc_array_ref *aref;
11104 gfc_ref *ref;
11105
11106 sprintf (name, GFC_PREFIX("DA%d"), serial++);
11107 gfc_get_sym_tree (name, ns, &tmp, false);
11108 gfc_add_type (tmp->n.sym, &e->ts, NULL);
11109
11110 if (e->expr_type == EXPR_CONSTANT && e->ts.type == BT_CHARACTER)
11111 tmp->n.sym->ts.u.cl->length = gfc_get_int_expr (gfc_charlen_int_kind,
11112 NULL,
11113 e->value.character.length);
11114
11115 as = NULL;
11116 ref = NULL;
11117 aref = NULL;
11118
11119 /* Obtain the arrayspec for the temporary. */
11120 if (e->rank && e->expr_type != EXPR_ARRAY
11121 && e->expr_type != EXPR_FUNCTION
11122 && e->expr_type != EXPR_OP)
11123 {
11124 aref = gfc_find_array_ref (e);
11125 if (e->expr_type == EXPR_VARIABLE
11126 && e->symtree->n.sym->as == aref->as)
11127 as = aref->as;
11128 else
11129 {
11130 for (ref = e->ref; ref; ref = ref->next)
11131 if (ref->type == REF_COMPONENT
11132 && ref->u.c.component->as == aref->as)
11133 {
11134 as = aref->as;
11135 break;
11136 }
11137 }
11138 }
11139
11140 /* Add the attributes and the arrayspec to the temporary. */
11141 tmp->n.sym->attr = gfc_expr_attr (e);
11142 tmp->n.sym->attr.function = 0;
11143 tmp->n.sym->attr.result = 0;
11144 tmp->n.sym->attr.flavor = FL_VARIABLE;
11145 tmp->n.sym->attr.dummy = 0;
11146 tmp->n.sym->attr.intent = INTENT_UNKNOWN;
11147
11148 if (as)
11149 {
11150 tmp->n.sym->as = gfc_copy_array_spec (as);
11151 if (!ref)
11152 ref = e->ref;
11153 if (as->type == AS_DEFERRED)
11154 tmp->n.sym->attr.allocatable = 1;
11155 }
11156 else if (e->rank && (e->expr_type == EXPR_ARRAY
11157 || e->expr_type == EXPR_FUNCTION
11158 || e->expr_type == EXPR_OP))
11159 {
11160 tmp->n.sym->as = gfc_get_array_spec ();
11161 tmp->n.sym->as->type = AS_DEFERRED;
11162 tmp->n.sym->as->rank = e->rank;
11163 tmp->n.sym->attr.allocatable = 1;
11164 tmp->n.sym->attr.dimension = 1;
11165 }
11166 else
11167 tmp->n.sym->attr.dimension = 0;
11168
11169 gfc_set_sym_referenced (tmp->n.sym);
11170 gfc_commit_symbol (tmp->n.sym);
11171 e = gfc_lval_expr_from_sym (tmp->n.sym);
11172
11173 /* Should the lhs be a section, use its array ref for the
11174 temporary expression. */
11175 if (aref && aref->type != AR_FULL)
11176 {
11177 gfc_free_ref_list (e->ref);
11178 e->ref = gfc_copy_ref (ref);
11179 }
11180 return e;
11181 }
11182
11183
11184 /* Add one line of code to the code chain, making sure that 'head' and
11185 'tail' are appropriately updated. */
11186
11187 static void
11188 add_code_to_chain (gfc_code **this_code, gfc_code **head, gfc_code **tail)
11189 {
11190 gcc_assert (this_code);
11191 if (*head == NULL)
11192 *head = *tail = *this_code;
11193 else
11194 *tail = gfc_append_code (*tail, *this_code);
11195 *this_code = NULL;
11196 }
11197
11198
11199 /* Counts the potential number of part array references that would
11200 result from resolution of typebound defined assignments. */
11201
11202 static int
11203 nonscalar_typebound_assign (gfc_symbol *derived, int depth)
11204 {
11205 gfc_component *c;
11206 int c_depth = 0, t_depth;
11207
11208 for (c= derived->components; c; c = c->next)
11209 {
11210 if ((!gfc_bt_struct (c->ts.type)
11211 || c->attr.pointer
11212 || c->attr.allocatable
11213 || c->attr.proc_pointer_comp
11214 || c->attr.class_pointer
11215 || c->attr.proc_pointer)
11216 && !c->attr.defined_assign_comp)
11217 continue;
11218
11219 if (c->as && c_depth == 0)
11220 c_depth = 1;
11221
11222 if (c->ts.u.derived->attr.defined_assign_comp)
11223 t_depth = nonscalar_typebound_assign (c->ts.u.derived,
11224 c->as ? 1 : 0);
11225 else
11226 t_depth = 0;
11227
11228 c_depth = t_depth > c_depth ? t_depth : c_depth;
11229 }
11230 return depth + c_depth;
11231 }
11232
11233
11234 /* Implement 7.2.1.3 of the F08 standard:
11235 "An intrinsic assignment where the variable is of derived type is
11236 performed as if each component of the variable were assigned from the
11237 corresponding component of expr using pointer assignment (7.2.2) for
11238 each pointer component, defined assignment for each nonpointer
11239 nonallocatable component of a type that has a type-bound defined
11240 assignment consistent with the component, intrinsic assignment for
11241 each other nonpointer nonallocatable component, ..."
11242
11243 The pointer assignments are taken care of by the intrinsic
11244 assignment of the structure itself. This function recursively adds
11245 defined assignments where required. The recursion is accomplished
11246 by calling gfc_resolve_code.
11247
11248 When the lhs in a defined assignment has intent INOUT, we need a
11249 temporary for the lhs. In pseudo-code:
11250
11251 ! Only call function lhs once.
11252 if (lhs is not a constant or an variable)
11253 temp_x = expr2
11254 expr2 => temp_x
11255 ! Do the intrinsic assignment
11256 expr1 = expr2
11257 ! Now do the defined assignments
11258 do over components with typebound defined assignment [%cmp]
11259 #if one component's assignment procedure is INOUT
11260 t1 = expr1
11261 #if expr2 non-variable
11262 temp_x = expr2
11263 expr2 => temp_x
11264 # endif
11265 expr1 = expr2
11266 # for each cmp
11267 t1%cmp {defined=} expr2%cmp
11268 expr1%cmp = t1%cmp
11269 #else
11270 expr1 = expr2
11271
11272 # for each cmp
11273 expr1%cmp {defined=} expr2%cmp
11274 #endif
11275 */
11276
11277 /* The temporary assignments have to be put on top of the additional
11278 code to avoid the result being changed by the intrinsic assignment.
11279 */
11280 static int component_assignment_level = 0;
11281 static gfc_code *tmp_head = NULL, *tmp_tail = NULL;
11282
11283 static void
11284 generate_component_assignments (gfc_code **code, gfc_namespace *ns)
11285 {
11286 gfc_component *comp1, *comp2;
11287 gfc_code *this_code = NULL, *head = NULL, *tail = NULL;
11288 gfc_expr *t1;
11289 int error_count, depth;
11290
11291 gfc_get_errors (NULL, &error_count);
11292
11293 /* Filter out continuing processing after an error. */
11294 if (error_count
11295 || (*code)->expr1->ts.type != BT_DERIVED
11296 || (*code)->expr2->ts.type != BT_DERIVED)
11297 return;
11298
11299 /* TODO: Handle more than one part array reference in assignments. */
11300 depth = nonscalar_typebound_assign ((*code)->expr1->ts.u.derived,
11301 (*code)->expr1->rank ? 1 : 0);
11302 if (depth > 1)
11303 {
11304 gfc_warning (0, "TODO: type-bound defined assignment(s) at %L not "
11305 "done because multiple part array references would "
11306 "occur in intermediate expressions.", &(*code)->loc);
11307 return;
11308 }
11309
11310 component_assignment_level++;
11311
11312 /* Create a temporary so that functions get called only once. */
11313 if ((*code)->expr2->expr_type != EXPR_VARIABLE
11314 && (*code)->expr2->expr_type != EXPR_CONSTANT)
11315 {
11316 gfc_expr *tmp_expr;
11317
11318 /* Assign the rhs to the temporary. */
11319 tmp_expr = get_temp_from_expr ((*code)->expr1, ns);
11320 this_code = build_assignment (EXEC_ASSIGN,
11321 tmp_expr, (*code)->expr2,
11322 NULL, NULL, (*code)->loc);
11323 /* Add the code and substitute the rhs expression. */
11324 add_code_to_chain (&this_code, &tmp_head, &tmp_tail);
11325 gfc_free_expr ((*code)->expr2);
11326 (*code)->expr2 = tmp_expr;
11327 }
11328
11329 /* Do the intrinsic assignment. This is not needed if the lhs is one
11330 of the temporaries generated here, since the intrinsic assignment
11331 to the final result already does this. */
11332 if ((*code)->expr1->symtree->n.sym->name[2] != '@')
11333 {
11334 this_code = build_assignment (EXEC_ASSIGN,
11335 (*code)->expr1, (*code)->expr2,
11336 NULL, NULL, (*code)->loc);
11337 add_code_to_chain (&this_code, &head, &tail);
11338 }
11339
11340 comp1 = (*code)->expr1->ts.u.derived->components;
11341 comp2 = (*code)->expr2->ts.u.derived->components;
11342
11343 t1 = NULL;
11344 for (; comp1; comp1 = comp1->next, comp2 = comp2->next)
11345 {
11346 bool inout = false;
11347
11348 /* The intrinsic assignment does the right thing for pointers
11349 of all kinds and allocatable components. */
11350 if (!gfc_bt_struct (comp1->ts.type)
11351 || comp1->attr.pointer
11352 || comp1->attr.allocatable
11353 || comp1->attr.proc_pointer_comp
11354 || comp1->attr.class_pointer
11355 || comp1->attr.proc_pointer)
11356 continue;
11357
11358 /* Make an assigment for this component. */
11359 this_code = build_assignment (EXEC_ASSIGN,
11360 (*code)->expr1, (*code)->expr2,
11361 comp1, comp2, (*code)->loc);
11362
11363 /* Convert the assignment if there is a defined assignment for
11364 this type. Otherwise, using the call from gfc_resolve_code,
11365 recurse into its components. */
11366 gfc_resolve_code (this_code, ns);
11367
11368 if (this_code->op == EXEC_ASSIGN_CALL)
11369 {
11370 gfc_formal_arglist *dummy_args;
11371 gfc_symbol *rsym;
11372 /* Check that there is a typebound defined assignment. If not,
11373 then this must be a module defined assignment. We cannot
11374 use the defined_assign_comp attribute here because it must
11375 be this derived type that has the defined assignment and not
11376 a parent type. */
11377 if (!(comp1->ts.u.derived->f2k_derived
11378 && comp1->ts.u.derived->f2k_derived
11379 ->tb_op[INTRINSIC_ASSIGN]))
11380 {
11381 gfc_free_statements (this_code);
11382 this_code = NULL;
11383 continue;
11384 }
11385
11386 /* If the first argument of the subroutine has intent INOUT
11387 a temporary must be generated and used instead. */
11388 rsym = this_code->resolved_sym;
11389 dummy_args = gfc_sym_get_dummy_args (rsym);
11390 if (dummy_args
11391 && dummy_args->sym->attr.intent == INTENT_INOUT)
11392 {
11393 gfc_code *temp_code;
11394 inout = true;
11395
11396 /* Build the temporary required for the assignment and put
11397 it at the head of the generated code. */
11398 if (!t1)
11399 {
11400 t1 = get_temp_from_expr ((*code)->expr1, ns);
11401 temp_code = build_assignment (EXEC_ASSIGN,
11402 t1, (*code)->expr1,
11403 NULL, NULL, (*code)->loc);
11404
11405 /* For allocatable LHS, check whether it is allocated. Note
11406 that allocatable components with defined assignment are
11407 not yet support. See PR 57696. */
11408 if ((*code)->expr1->symtree->n.sym->attr.allocatable)
11409 {
11410 gfc_code *block;
11411 gfc_expr *e =
11412 gfc_lval_expr_from_sym ((*code)->expr1->symtree->n.sym);
11413 block = gfc_get_code (EXEC_IF);
11414 block->block = gfc_get_code (EXEC_IF);
11415 block->block->expr1
11416 = gfc_build_intrinsic_call (ns,
11417 GFC_ISYM_ALLOCATED, "allocated",
11418 (*code)->loc, 1, e);
11419 block->block->next = temp_code;
11420 temp_code = block;
11421 }
11422 add_code_to_chain (&temp_code, &tmp_head, &tmp_tail);
11423 }
11424
11425 /* Replace the first actual arg with the component of the
11426 temporary. */
11427 gfc_free_expr (this_code->ext.actual->expr);
11428 this_code->ext.actual->expr = gfc_copy_expr (t1);
11429 add_comp_ref (this_code->ext.actual->expr, comp1);
11430
11431 /* If the LHS variable is allocatable and wasn't allocated and
11432 the temporary is allocatable, pointer assign the address of
11433 the freshly allocated LHS to the temporary. */
11434 if ((*code)->expr1->symtree->n.sym->attr.allocatable
11435 && gfc_expr_attr ((*code)->expr1).allocatable)
11436 {
11437 gfc_code *block;
11438 gfc_expr *cond;
11439
11440 cond = gfc_get_expr ();
11441 cond->ts.type = BT_LOGICAL;
11442 cond->ts.kind = gfc_default_logical_kind;
11443 cond->expr_type = EXPR_OP;
11444 cond->where = (*code)->loc;
11445 cond->value.op.op = INTRINSIC_NOT;
11446 cond->value.op.op1 = gfc_build_intrinsic_call (ns,
11447 GFC_ISYM_ALLOCATED, "allocated",
11448 (*code)->loc, 1, gfc_copy_expr (t1));
11449 block = gfc_get_code (EXEC_IF);
11450 block->block = gfc_get_code (EXEC_IF);
11451 block->block->expr1 = cond;
11452 block->block->next = build_assignment (EXEC_POINTER_ASSIGN,
11453 t1, (*code)->expr1,
11454 NULL, NULL, (*code)->loc);
11455 add_code_to_chain (&block, &head, &tail);
11456 }
11457 }
11458 }
11459 else if (this_code->op == EXEC_ASSIGN && !this_code->next)
11460 {
11461 /* Don't add intrinsic assignments since they are already
11462 effected by the intrinsic assignment of the structure. */
11463 gfc_free_statements (this_code);
11464 this_code = NULL;
11465 continue;
11466 }
11467
11468 add_code_to_chain (&this_code, &head, &tail);
11469
11470 if (t1 && inout)
11471 {
11472 /* Transfer the value to the final result. */
11473 this_code = build_assignment (EXEC_ASSIGN,
11474 (*code)->expr1, t1,
11475 comp1, comp2, (*code)->loc);
11476 add_code_to_chain (&this_code, &head, &tail);
11477 }
11478 }
11479
11480 /* Put the temporary assignments at the top of the generated code. */
11481 if (tmp_head && component_assignment_level == 1)
11482 {
11483 gfc_append_code (tmp_head, head);
11484 head = tmp_head;
11485 tmp_head = tmp_tail = NULL;
11486 }
11487
11488 // If we did a pointer assignment - thus, we need to ensure that the LHS is
11489 // not accidentally deallocated. Hence, nullify t1.
11490 if (t1 && (*code)->expr1->symtree->n.sym->attr.allocatable
11491 && gfc_expr_attr ((*code)->expr1).allocatable)
11492 {
11493 gfc_code *block;
11494 gfc_expr *cond;
11495 gfc_expr *e;
11496
11497 e = gfc_lval_expr_from_sym ((*code)->expr1->symtree->n.sym);
11498 cond = gfc_build_intrinsic_call (ns, GFC_ISYM_ASSOCIATED, "associated",
11499 (*code)->loc, 2, gfc_copy_expr (t1), e);
11500 block = gfc_get_code (EXEC_IF);
11501 block->block = gfc_get_code (EXEC_IF);
11502 block->block->expr1 = cond;
11503 block->block->next = build_assignment (EXEC_POINTER_ASSIGN,
11504 t1, gfc_get_null_expr (&(*code)->loc),
11505 NULL, NULL, (*code)->loc);
11506 gfc_append_code (tail, block);
11507 tail = block;
11508 }
11509
11510 /* Now attach the remaining code chain to the input code. Step on
11511 to the end of the new code since resolution is complete. */
11512 gcc_assert ((*code)->op == EXEC_ASSIGN);
11513 tail->next = (*code)->next;
11514 /* Overwrite 'code' because this would place the intrinsic assignment
11515 before the temporary for the lhs is created. */
11516 gfc_free_expr ((*code)->expr1);
11517 gfc_free_expr ((*code)->expr2);
11518 **code = *head;
11519 if (head != tail)
11520 free (head);
11521 *code = tail;
11522
11523 component_assignment_level--;
11524 }
11525
11526
11527 /* F2008: Pointer function assignments are of the form:
11528 ptr_fcn (args) = expr
11529 This function breaks these assignments into two statements:
11530 temporary_pointer => ptr_fcn(args)
11531 temporary_pointer = expr */
11532
11533 static bool
11534 resolve_ptr_fcn_assign (gfc_code **code, gfc_namespace *ns)
11535 {
11536 gfc_expr *tmp_ptr_expr;
11537 gfc_code *this_code;
11538 gfc_component *comp;
11539 gfc_symbol *s;
11540
11541 if ((*code)->expr1->expr_type != EXPR_FUNCTION)
11542 return false;
11543
11544 /* Even if standard does not support this feature, continue to build
11545 the two statements to avoid upsetting frontend_passes.c. */
11546 gfc_notify_std (GFC_STD_F2008, "Pointer procedure assignment at "
11547 "%L", &(*code)->loc);
11548
11549 comp = gfc_get_proc_ptr_comp ((*code)->expr1);
11550
11551 if (comp)
11552 s = comp->ts.interface;
11553 else
11554 s = (*code)->expr1->symtree->n.sym;
11555
11556 if (s == NULL || !s->result->attr.pointer)
11557 {
11558 gfc_error ("The function result on the lhs of the assignment at "
11559 "%L must have the pointer attribute.",
11560 &(*code)->expr1->where);
11561 (*code)->op = EXEC_NOP;
11562 return false;
11563 }
11564
11565 tmp_ptr_expr = get_temp_from_expr ((*code)->expr2, ns);
11566
11567 /* get_temp_from_expression is set up for ordinary assignments. To that
11568 end, where array bounds are not known, arrays are made allocatable.
11569 Change the temporary to a pointer here. */
11570 tmp_ptr_expr->symtree->n.sym->attr.pointer = 1;
11571 tmp_ptr_expr->symtree->n.sym->attr.allocatable = 0;
11572 tmp_ptr_expr->where = (*code)->loc;
11573
11574 this_code = build_assignment (EXEC_ASSIGN,
11575 tmp_ptr_expr, (*code)->expr2,
11576 NULL, NULL, (*code)->loc);
11577 this_code->next = (*code)->next;
11578 (*code)->next = this_code;
11579 (*code)->op = EXEC_POINTER_ASSIGN;
11580 (*code)->expr2 = (*code)->expr1;
11581 (*code)->expr1 = tmp_ptr_expr;
11582
11583 return true;
11584 }
11585
11586
11587 /* Deferred character length assignments from an operator expression
11588 require a temporary because the character length of the lhs can
11589 change in the course of the assignment. */
11590
11591 static bool
11592 deferred_op_assign (gfc_code **code, gfc_namespace *ns)
11593 {
11594 gfc_expr *tmp_expr;
11595 gfc_code *this_code;
11596
11597 if (!((*code)->expr1->ts.type == BT_CHARACTER
11598 && (*code)->expr1->ts.deferred && (*code)->expr1->rank
11599 && (*code)->expr2->expr_type == EXPR_OP))
11600 return false;
11601
11602 if (!gfc_check_dependency ((*code)->expr1, (*code)->expr2, 1))
11603 return false;
11604
11605 if (gfc_expr_attr ((*code)->expr1).pointer)
11606 return false;
11607
11608 tmp_expr = get_temp_from_expr ((*code)->expr1, ns);
11609 tmp_expr->where = (*code)->loc;
11610
11611 /* A new charlen is required to ensure that the variable string
11612 length is different to that of the original lhs. */
11613 tmp_expr->ts.u.cl = gfc_get_charlen();
11614 tmp_expr->symtree->n.sym->ts.u.cl = tmp_expr->ts.u.cl;
11615 tmp_expr->ts.u.cl->next = (*code)->expr2->ts.u.cl->next;
11616 (*code)->expr2->ts.u.cl->next = tmp_expr->ts.u.cl;
11617
11618 tmp_expr->symtree->n.sym->ts.deferred = 1;
11619
11620 this_code = build_assignment (EXEC_ASSIGN,
11621 (*code)->expr1,
11622 gfc_copy_expr (tmp_expr),
11623 NULL, NULL, (*code)->loc);
11624
11625 (*code)->expr1 = tmp_expr;
11626
11627 this_code->next = (*code)->next;
11628 (*code)->next = this_code;
11629
11630 return true;
11631 }
11632
11633
11634 /* Given a block of code, recursively resolve everything pointed to by this
11635 code block. */
11636
11637 void
11638 gfc_resolve_code (gfc_code *code, gfc_namespace *ns)
11639 {
11640 int omp_workshare_save;
11641 int forall_save, do_concurrent_save;
11642 code_stack frame;
11643 bool t;
11644
11645 frame.prev = cs_base;
11646 frame.head = code;
11647 cs_base = &frame;
11648
11649 find_reachable_labels (code);
11650
11651 for (; code; code = code->next)
11652 {
11653 frame.current = code;
11654 forall_save = forall_flag;
11655 do_concurrent_save = gfc_do_concurrent_flag;
11656
11657 if (code->op == EXEC_FORALL)
11658 {
11659 forall_flag = 1;
11660 gfc_resolve_forall (code, ns, forall_save);
11661 forall_flag = 2;
11662 }
11663 else if (code->block)
11664 {
11665 omp_workshare_save = -1;
11666 switch (code->op)
11667 {
11668 case EXEC_OACC_PARALLEL_LOOP:
11669 case EXEC_OACC_PARALLEL:
11670 case EXEC_OACC_KERNELS_LOOP:
11671 case EXEC_OACC_KERNELS:
11672 case EXEC_OACC_SERIAL_LOOP:
11673 case EXEC_OACC_SERIAL:
11674 case EXEC_OACC_DATA:
11675 case EXEC_OACC_HOST_DATA:
11676 case EXEC_OACC_LOOP:
11677 gfc_resolve_oacc_blocks (code, ns);
11678 break;
11679 case EXEC_OMP_PARALLEL_WORKSHARE:
11680 omp_workshare_save = omp_workshare_flag;
11681 omp_workshare_flag = 1;
11682 gfc_resolve_omp_parallel_blocks (code, ns);
11683 break;
11684 case EXEC_OMP_PARALLEL:
11685 case EXEC_OMP_PARALLEL_DO:
11686 case EXEC_OMP_PARALLEL_DO_SIMD:
11687 case EXEC_OMP_PARALLEL_SECTIONS:
11688 case EXEC_OMP_TARGET_PARALLEL:
11689 case EXEC_OMP_TARGET_PARALLEL_DO:
11690 case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
11691 case EXEC_OMP_TARGET_TEAMS:
11692 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
11693 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
11694 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
11695 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
11696 case EXEC_OMP_TASK:
11697 case EXEC_OMP_TASKLOOP:
11698 case EXEC_OMP_TASKLOOP_SIMD:
11699 case EXEC_OMP_TEAMS:
11700 case EXEC_OMP_TEAMS_DISTRIBUTE:
11701 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
11702 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
11703 case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
11704 omp_workshare_save = omp_workshare_flag;
11705 omp_workshare_flag = 0;
11706 gfc_resolve_omp_parallel_blocks (code, ns);
11707 break;
11708 case EXEC_OMP_DISTRIBUTE:
11709 case EXEC_OMP_DISTRIBUTE_SIMD:
11710 case EXEC_OMP_DO:
11711 case EXEC_OMP_DO_SIMD:
11712 case EXEC_OMP_SIMD:
11713 case EXEC_OMP_TARGET_SIMD:
11714 gfc_resolve_omp_do_blocks (code, ns);
11715 break;
11716 case EXEC_SELECT_TYPE:
11717 /* Blocks are handled in resolve_select_type because we have
11718 to transform the SELECT TYPE into ASSOCIATE first. */
11719 break;
11720 case EXEC_DO_CONCURRENT:
11721 gfc_do_concurrent_flag = 1;
11722 gfc_resolve_blocks (code->block, ns);
11723 gfc_do_concurrent_flag = 2;
11724 break;
11725 case EXEC_OMP_WORKSHARE:
11726 omp_workshare_save = omp_workshare_flag;
11727 omp_workshare_flag = 1;
11728 /* FALL THROUGH */
11729 default:
11730 gfc_resolve_blocks (code->block, ns);
11731 break;
11732 }
11733
11734 if (omp_workshare_save != -1)
11735 omp_workshare_flag = omp_workshare_save;
11736 }
11737 start:
11738 t = true;
11739 if (code->op != EXEC_COMPCALL && code->op != EXEC_CALL_PPC)
11740 t = gfc_resolve_expr (code->expr1);
11741 forall_flag = forall_save;
11742 gfc_do_concurrent_flag = do_concurrent_save;
11743
11744 if (!gfc_resolve_expr (code->expr2))
11745 t = false;
11746
11747 if (code->op == EXEC_ALLOCATE
11748 && !gfc_resolve_expr (code->expr3))
11749 t = false;
11750
11751 switch (code->op)
11752 {
11753 case EXEC_NOP:
11754 case EXEC_END_BLOCK:
11755 case EXEC_END_NESTED_BLOCK:
11756 case EXEC_CYCLE:
11757 case EXEC_PAUSE:
11758 case EXEC_STOP:
11759 case EXEC_ERROR_STOP:
11760 case EXEC_EXIT:
11761 case EXEC_CONTINUE:
11762 case EXEC_DT_END:
11763 case EXEC_ASSIGN_CALL:
11764 break;
11765
11766 case EXEC_CRITICAL:
11767 resolve_critical (code);
11768 break;
11769
11770 case EXEC_SYNC_ALL:
11771 case EXEC_SYNC_IMAGES:
11772 case EXEC_SYNC_MEMORY:
11773 resolve_sync (code);
11774 break;
11775
11776 case EXEC_LOCK:
11777 case EXEC_UNLOCK:
11778 case EXEC_EVENT_POST:
11779 case EXEC_EVENT_WAIT:
11780 resolve_lock_unlock_event (code);
11781 break;
11782
11783 case EXEC_FAIL_IMAGE:
11784 case EXEC_FORM_TEAM:
11785 case EXEC_CHANGE_TEAM:
11786 case EXEC_END_TEAM:
11787 case EXEC_SYNC_TEAM:
11788 break;
11789
11790 case EXEC_ENTRY:
11791 /* Keep track of which entry we are up to. */
11792 current_entry_id = code->ext.entry->id;
11793 break;
11794
11795 case EXEC_WHERE:
11796 resolve_where (code, NULL);
11797 break;
11798
11799 case EXEC_GOTO:
11800 if (code->expr1 != NULL)
11801 {
11802 if (code->expr1->ts.type != BT_INTEGER)
11803 gfc_error ("ASSIGNED GOTO statement at %L requires an "
11804 "INTEGER variable", &code->expr1->where);
11805 else if (code->expr1->symtree->n.sym->attr.assign != 1)
11806 gfc_error ("Variable %qs has not been assigned a target "
11807 "label at %L", code->expr1->symtree->n.sym->name,
11808 &code->expr1->where);
11809 }
11810 else
11811 resolve_branch (code->label1, code);
11812 break;
11813
11814 case EXEC_RETURN:
11815 if (code->expr1 != NULL
11816 && (code->expr1->ts.type != BT_INTEGER || code->expr1->rank))
11817 gfc_error ("Alternate RETURN statement at %L requires a SCALAR-"
11818 "INTEGER return specifier", &code->expr1->where);
11819 break;
11820
11821 case EXEC_INIT_ASSIGN:
11822 case EXEC_END_PROCEDURE:
11823 break;
11824
11825 case EXEC_ASSIGN:
11826 if (!t)
11827 break;
11828
11829 /* Remove a GFC_ISYM_CAF_GET inserted for a coindexed variable on
11830 the LHS. */
11831 if (code->expr1->expr_type == EXPR_FUNCTION
11832 && code->expr1->value.function.isym
11833 && code->expr1->value.function.isym->id == GFC_ISYM_CAF_GET)
11834 remove_caf_get_intrinsic (code->expr1);
11835
11836 /* If this is a pointer function in an lvalue variable context,
11837 the new code will have to be resolved afresh. This is also the
11838 case with an error, where the code is transformed into NOP to
11839 prevent ICEs downstream. */
11840 if (resolve_ptr_fcn_assign (&code, ns)
11841 || code->op == EXEC_NOP)
11842 goto start;
11843
11844 if (!gfc_check_vardef_context (code->expr1, false, false, false,
11845 _("assignment")))
11846 break;
11847
11848 if (resolve_ordinary_assign (code, ns))
11849 {
11850 if (code->op == EXEC_COMPCALL)
11851 goto compcall;
11852 else
11853 goto call;
11854 }
11855
11856 /* Check for dependencies in deferred character length array
11857 assignments and generate a temporary, if necessary. */
11858 if (code->op == EXEC_ASSIGN && deferred_op_assign (&code, ns))
11859 break;
11860
11861 /* F03 7.4.1.3 for non-allocatable, non-pointer components. */
11862 if (code->op != EXEC_CALL && code->expr1->ts.type == BT_DERIVED
11863 && code->expr1->ts.u.derived
11864 && code->expr1->ts.u.derived->attr.defined_assign_comp)
11865 generate_component_assignments (&code, ns);
11866
11867 break;
11868
11869 case EXEC_LABEL_ASSIGN:
11870 if (code->label1->defined == ST_LABEL_UNKNOWN)
11871 gfc_error ("Label %d referenced at %L is never defined",
11872 code->label1->value, &code->label1->where);
11873 if (t
11874 && (code->expr1->expr_type != EXPR_VARIABLE
11875 || code->expr1->symtree->n.sym->ts.type != BT_INTEGER
11876 || code->expr1->symtree->n.sym->ts.kind
11877 != gfc_default_integer_kind
11878 || code->expr1->symtree->n.sym->as != NULL))
11879 gfc_error ("ASSIGN statement at %L requires a scalar "
11880 "default INTEGER variable", &code->expr1->where);
11881 break;
11882
11883 case EXEC_POINTER_ASSIGN:
11884 {
11885 gfc_expr* e;
11886
11887 if (!t)
11888 break;
11889
11890 /* This is both a variable definition and pointer assignment
11891 context, so check both of them. For rank remapping, a final
11892 array ref may be present on the LHS and fool gfc_expr_attr
11893 used in gfc_check_vardef_context. Remove it. */
11894 e = remove_last_array_ref (code->expr1);
11895 t = gfc_check_vardef_context (e, true, false, false,
11896 _("pointer assignment"));
11897 if (t)
11898 t = gfc_check_vardef_context (e, false, false, false,
11899 _("pointer assignment"));
11900 gfc_free_expr (e);
11901
11902 t = gfc_check_pointer_assign (code->expr1, code->expr2, !t) && t;
11903
11904 if (!t)
11905 break;
11906
11907 /* Assigning a class object always is a regular assign. */
11908 if (code->expr2->ts.type == BT_CLASS
11909 && code->expr1->ts.type == BT_CLASS
11910 && !CLASS_DATA (code->expr2)->attr.dimension
11911 && !(gfc_expr_attr (code->expr1).proc_pointer
11912 && code->expr2->expr_type == EXPR_VARIABLE
11913 && code->expr2->symtree->n.sym->attr.flavor
11914 == FL_PROCEDURE))
11915 code->op = EXEC_ASSIGN;
11916 break;
11917 }
11918
11919 case EXEC_ARITHMETIC_IF:
11920 {
11921 gfc_expr *e = code->expr1;
11922
11923 gfc_resolve_expr (e);
11924 if (e->expr_type == EXPR_NULL)
11925 gfc_error ("Invalid NULL at %L", &e->where);
11926
11927 if (t && (e->rank > 0
11928 || !(e->ts.type == BT_REAL || e->ts.type == BT_INTEGER)))
11929 gfc_error ("Arithmetic IF statement at %L requires a scalar "
11930 "REAL or INTEGER expression", &e->where);
11931
11932 resolve_branch (code->label1, code);
11933 resolve_branch (code->label2, code);
11934 resolve_branch (code->label3, code);
11935 }
11936 break;
11937
11938 case EXEC_IF:
11939 if (t && code->expr1 != NULL
11940 && (code->expr1->ts.type != BT_LOGICAL
11941 || code->expr1->rank != 0))
11942 gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
11943 &code->expr1->where);
11944 break;
11945
11946 case EXEC_CALL:
11947 call:
11948 resolve_call (code);
11949 break;
11950
11951 case EXEC_COMPCALL:
11952 compcall:
11953 resolve_typebound_subroutine (code);
11954 break;
11955
11956 case EXEC_CALL_PPC:
11957 resolve_ppc_call (code);
11958 break;
11959
11960 case EXEC_SELECT:
11961 /* Select is complicated. Also, a SELECT construct could be
11962 a transformed computed GOTO. */
11963 resolve_select (code, false);
11964 break;
11965
11966 case EXEC_SELECT_TYPE:
11967 resolve_select_type (code, ns);
11968 break;
11969
11970 case EXEC_SELECT_RANK:
11971 resolve_select_rank (code, ns);
11972 break;
11973
11974 case EXEC_BLOCK:
11975 resolve_block_construct (code);
11976 break;
11977
11978 case EXEC_DO:
11979 if (code->ext.iterator != NULL)
11980 {
11981 gfc_iterator *iter = code->ext.iterator;
11982 if (gfc_resolve_iterator (iter, true, false))
11983 gfc_resolve_do_iterator (code, iter->var->symtree->n.sym,
11984 true);
11985 }
11986 break;
11987
11988 case EXEC_DO_WHILE:
11989 if (code->expr1 == NULL)
11990 gfc_internal_error ("gfc_resolve_code(): No expression on "
11991 "DO WHILE");
11992 if (t
11993 && (code->expr1->rank != 0
11994 || code->expr1->ts.type != BT_LOGICAL))
11995 gfc_error ("Exit condition of DO WHILE loop at %L must be "
11996 "a scalar LOGICAL expression", &code->expr1->where);
11997 break;
11998
11999 case EXEC_ALLOCATE:
12000 if (t)
12001 resolve_allocate_deallocate (code, "ALLOCATE");
12002
12003 break;
12004
12005 case EXEC_DEALLOCATE:
12006 if (t)
12007 resolve_allocate_deallocate (code, "DEALLOCATE");
12008
12009 break;
12010
12011 case EXEC_OPEN:
12012 if (!gfc_resolve_open (code->ext.open, &code->loc))
12013 break;
12014
12015 resolve_branch (code->ext.open->err, code);
12016 break;
12017
12018 case EXEC_CLOSE:
12019 if (!gfc_resolve_close (code->ext.close, &code->loc))
12020 break;
12021
12022 resolve_branch (code->ext.close->err, code);
12023 break;
12024
12025 case EXEC_BACKSPACE:
12026 case EXEC_ENDFILE:
12027 case EXEC_REWIND:
12028 case EXEC_FLUSH:
12029 if (!gfc_resolve_filepos (code->ext.filepos, &code->loc))
12030 break;
12031
12032 resolve_branch (code->ext.filepos->err, code);
12033 break;
12034
12035 case EXEC_INQUIRE:
12036 if (!gfc_resolve_inquire (code->ext.inquire))
12037 break;
12038
12039 resolve_branch (code->ext.inquire->err, code);
12040 break;
12041
12042 case EXEC_IOLENGTH:
12043 gcc_assert (code->ext.inquire != NULL);
12044 if (!gfc_resolve_inquire (code->ext.inquire))
12045 break;
12046
12047 resolve_branch (code->ext.inquire->err, code);
12048 break;
12049
12050 case EXEC_WAIT:
12051 if (!gfc_resolve_wait (code->ext.wait))
12052 break;
12053
12054 resolve_branch (code->ext.wait->err, code);
12055 resolve_branch (code->ext.wait->end, code);
12056 resolve_branch (code->ext.wait->eor, code);
12057 break;
12058
12059 case EXEC_READ:
12060 case EXEC_WRITE:
12061 if (!gfc_resolve_dt (code, code->ext.dt, &code->loc))
12062 break;
12063
12064 resolve_branch (code->ext.dt->err, code);
12065 resolve_branch (code->ext.dt->end, code);
12066 resolve_branch (code->ext.dt->eor, code);
12067 break;
12068
12069 case EXEC_TRANSFER:
12070 resolve_transfer (code);
12071 break;
12072
12073 case EXEC_DO_CONCURRENT:
12074 case EXEC_FORALL:
12075 resolve_forall_iterators (code->ext.forall_iterator);
12076
12077 if (code->expr1 != NULL
12078 && (code->expr1->ts.type != BT_LOGICAL || code->expr1->rank))
12079 gfc_error ("FORALL mask clause at %L requires a scalar LOGICAL "
12080 "expression", &code->expr1->where);
12081 break;
12082
12083 case EXEC_OACC_PARALLEL_LOOP:
12084 case EXEC_OACC_PARALLEL:
12085 case EXEC_OACC_KERNELS_LOOP:
12086 case EXEC_OACC_KERNELS:
12087 case EXEC_OACC_SERIAL_LOOP:
12088 case EXEC_OACC_SERIAL:
12089 case EXEC_OACC_DATA:
12090 case EXEC_OACC_HOST_DATA:
12091 case EXEC_OACC_LOOP:
12092 case EXEC_OACC_UPDATE:
12093 case EXEC_OACC_WAIT:
12094 case EXEC_OACC_CACHE:
12095 case EXEC_OACC_ENTER_DATA:
12096 case EXEC_OACC_EXIT_DATA:
12097 case EXEC_OACC_ATOMIC:
12098 case EXEC_OACC_DECLARE:
12099 gfc_resolve_oacc_directive (code, ns);
12100 break;
12101
12102 case EXEC_OMP_ATOMIC:
12103 case EXEC_OMP_BARRIER:
12104 case EXEC_OMP_CANCEL:
12105 case EXEC_OMP_CANCELLATION_POINT:
12106 case EXEC_OMP_CRITICAL:
12107 case EXEC_OMP_FLUSH:
12108 case EXEC_OMP_DISTRIBUTE:
12109 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
12110 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
12111 case EXEC_OMP_DISTRIBUTE_SIMD:
12112 case EXEC_OMP_DO:
12113 case EXEC_OMP_DO_SIMD:
12114 case EXEC_OMP_MASTER:
12115 case EXEC_OMP_ORDERED:
12116 case EXEC_OMP_SECTIONS:
12117 case EXEC_OMP_SIMD:
12118 case EXEC_OMP_SINGLE:
12119 case EXEC_OMP_TARGET:
12120 case EXEC_OMP_TARGET_DATA:
12121 case EXEC_OMP_TARGET_ENTER_DATA:
12122 case EXEC_OMP_TARGET_EXIT_DATA:
12123 case EXEC_OMP_TARGET_PARALLEL:
12124 case EXEC_OMP_TARGET_PARALLEL_DO:
12125 case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
12126 case EXEC_OMP_TARGET_SIMD:
12127 case EXEC_OMP_TARGET_TEAMS:
12128 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
12129 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
12130 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
12131 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
12132 case EXEC_OMP_TARGET_UPDATE:
12133 case EXEC_OMP_TASK:
12134 case EXEC_OMP_TASKGROUP:
12135 case EXEC_OMP_TASKLOOP:
12136 case EXEC_OMP_TASKLOOP_SIMD:
12137 case EXEC_OMP_TASKWAIT:
12138 case EXEC_OMP_TASKYIELD:
12139 case EXEC_OMP_TEAMS:
12140 case EXEC_OMP_TEAMS_DISTRIBUTE:
12141 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
12142 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
12143 case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
12144 case EXEC_OMP_WORKSHARE:
12145 gfc_resolve_omp_directive (code, ns);
12146 break;
12147
12148 case EXEC_OMP_PARALLEL:
12149 case EXEC_OMP_PARALLEL_DO:
12150 case EXEC_OMP_PARALLEL_DO_SIMD:
12151 case EXEC_OMP_PARALLEL_SECTIONS:
12152 case EXEC_OMP_PARALLEL_WORKSHARE:
12153 omp_workshare_save = omp_workshare_flag;
12154 omp_workshare_flag = 0;
12155 gfc_resolve_omp_directive (code, ns);
12156 omp_workshare_flag = omp_workshare_save;
12157 break;
12158
12159 default:
12160 gfc_internal_error ("gfc_resolve_code(): Bad statement code");
12161 }
12162 }
12163
12164 cs_base = frame.prev;
12165 }
12166
12167
12168 /* Resolve initial values and make sure they are compatible with
12169 the variable. */
12170
12171 static void
12172 resolve_values (gfc_symbol *sym)
12173 {
12174 bool t;
12175
12176 if (sym->value == NULL)
12177 return;
12178
12179 if (sym->value->expr_type == EXPR_STRUCTURE)
12180 t= resolve_structure_cons (sym->value, 1);
12181 else
12182 t = gfc_resolve_expr (sym->value);
12183
12184 if (!t)
12185 return;
12186
12187 gfc_check_assign_symbol (sym, NULL, sym->value);
12188 }
12189
12190
12191 /* Verify any BIND(C) derived types in the namespace so we can report errors
12192 for them once, rather than for each variable declared of that type. */
12193
12194 static void
12195 resolve_bind_c_derived_types (gfc_symbol *derived_sym)
12196 {
12197 if (derived_sym != NULL && derived_sym->attr.flavor == FL_DERIVED
12198 && derived_sym->attr.is_bind_c == 1)
12199 verify_bind_c_derived_type (derived_sym);
12200
12201 return;
12202 }
12203
12204
12205 /* Check the interfaces of DTIO procedures associated with derived
12206 type 'sym'. These procedures can either have typebound bindings or
12207 can appear in DTIO generic interfaces. */
12208
12209 static void
12210 gfc_verify_DTIO_procedures (gfc_symbol *sym)
12211 {
12212 if (!sym || sym->attr.flavor != FL_DERIVED)
12213 return;
12214
12215 gfc_check_dtio_interfaces (sym);
12216
12217 return;
12218 }
12219
12220 /* Verify that any binding labels used in a given namespace do not collide
12221 with the names or binding labels of any global symbols. Multiple INTERFACE
12222 for the same procedure are permitted. */
12223
12224 static void
12225 gfc_verify_binding_labels (gfc_symbol *sym)
12226 {
12227 gfc_gsymbol *gsym;
12228 const char *module;
12229
12230 if (!sym || !sym->attr.is_bind_c || sym->attr.is_iso_c
12231 || sym->attr.flavor == FL_DERIVED || !sym->binding_label)
12232 return;
12233
12234 gsym = gfc_find_case_gsymbol (gfc_gsym_root, sym->binding_label);
12235
12236 if (sym->module)
12237 module = sym->module;
12238 else if (sym->ns && sym->ns->proc_name
12239 && sym->ns->proc_name->attr.flavor == FL_MODULE)
12240 module = sym->ns->proc_name->name;
12241 else if (sym->ns && sym->ns->parent
12242 && sym->ns && sym->ns->parent->proc_name
12243 && sym->ns->parent->proc_name->attr.flavor == FL_MODULE)
12244 module = sym->ns->parent->proc_name->name;
12245 else
12246 module = NULL;
12247
12248 if (!gsym
12249 || (!gsym->defined
12250 && (gsym->type == GSYM_FUNCTION || gsym->type == GSYM_SUBROUTINE)))
12251 {
12252 if (!gsym)
12253 gsym = gfc_get_gsymbol (sym->binding_label, true);
12254 gsym->where = sym->declared_at;
12255 gsym->sym_name = sym->name;
12256 gsym->binding_label = sym->binding_label;
12257 gsym->ns = sym->ns;
12258 gsym->mod_name = module;
12259 if (sym->attr.function)
12260 gsym->type = GSYM_FUNCTION;
12261 else if (sym->attr.subroutine)
12262 gsym->type = GSYM_SUBROUTINE;
12263 /* Mark as variable/procedure as defined, unless its an INTERFACE. */
12264 gsym->defined = sym->attr.if_source != IFSRC_IFBODY;
12265 return;
12266 }
12267
12268 if (sym->attr.flavor == FL_VARIABLE && gsym->type != GSYM_UNKNOWN)
12269 {
12270 gfc_error ("Variable %qs with binding label %qs at %L uses the same global "
12271 "identifier as entity at %L", sym->name,
12272 sym->binding_label, &sym->declared_at, &gsym->where);
12273 /* Clear the binding label to prevent checking multiple times. */
12274 sym->binding_label = NULL;
12275 return;
12276 }
12277
12278 if (sym->attr.flavor == FL_VARIABLE && module
12279 && (strcmp (module, gsym->mod_name) != 0
12280 || strcmp (sym->name, gsym->sym_name) != 0))
12281 {
12282 /* This can only happen if the variable is defined in a module - if it
12283 isn't the same module, reject it. */
12284 gfc_error ("Variable %qs from module %qs with binding label %qs at %L "
12285 "uses the same global identifier as entity at %L from module %qs",
12286 sym->name, module, sym->binding_label,
12287 &sym->declared_at, &gsym->where, gsym->mod_name);
12288 sym->binding_label = NULL;
12289 return;
12290 }
12291
12292 if ((sym->attr.function || sym->attr.subroutine)
12293 && ((gsym->type != GSYM_SUBROUTINE && gsym->type != GSYM_FUNCTION)
12294 || (gsym->defined && sym->attr.if_source != IFSRC_IFBODY))
12295 && (sym != gsym->ns->proc_name && sym->attr.entry == 0)
12296 && (module != gsym->mod_name
12297 || strcmp (gsym->sym_name, sym->name) != 0
12298 || (module && strcmp (module, gsym->mod_name) != 0)))
12299 {
12300 /* Print an error if the procedure is defined multiple times; we have to
12301 exclude references to the same procedure via module association or
12302 multiple checks for the same procedure. */
12303 gfc_error ("Procedure %qs with binding label %qs at %L uses the same "
12304 "global identifier as entity at %L", sym->name,
12305 sym->binding_label, &sym->declared_at, &gsym->where);
12306 sym->binding_label = NULL;
12307 }
12308 }
12309
12310
12311 /* Resolve an index expression. */
12312
12313 static bool
12314 resolve_index_expr (gfc_expr *e)
12315 {
12316 if (!gfc_resolve_expr (e))
12317 return false;
12318
12319 if (!gfc_simplify_expr (e, 0))
12320 return false;
12321
12322 if (!gfc_specification_expr (e))
12323 return false;
12324
12325 return true;
12326 }
12327
12328
12329 /* Resolve a charlen structure. */
12330
12331 static bool
12332 resolve_charlen (gfc_charlen *cl)
12333 {
12334 int k;
12335 bool saved_specification_expr;
12336
12337 if (cl->resolved)
12338 return true;
12339
12340 cl->resolved = 1;
12341 saved_specification_expr = specification_expr;
12342 specification_expr = true;
12343
12344 if (cl->length_from_typespec)
12345 {
12346 if (!gfc_resolve_expr (cl->length))
12347 {
12348 specification_expr = saved_specification_expr;
12349 return false;
12350 }
12351
12352 if (!gfc_simplify_expr (cl->length, 0))
12353 {
12354 specification_expr = saved_specification_expr;
12355 return false;
12356 }
12357
12358 /* cl->length has been resolved. It should have an integer type. */
12359 if (cl->length->ts.type != BT_INTEGER)
12360 {
12361 gfc_error ("Scalar INTEGER expression expected at %L",
12362 &cl->length->where);
12363 return false;
12364 }
12365 }
12366 else
12367 {
12368 if (!resolve_index_expr (cl->length))
12369 {
12370 specification_expr = saved_specification_expr;
12371 return false;
12372 }
12373 }
12374
12375 /* F2008, 4.4.3.2: If the character length parameter value evaluates to
12376 a negative value, the length of character entities declared is zero. */
12377 if (cl->length && cl->length->expr_type == EXPR_CONSTANT
12378 && mpz_sgn (cl->length->value.integer) < 0)
12379 gfc_replace_expr (cl->length,
12380 gfc_get_int_expr (gfc_charlen_int_kind, NULL, 0));
12381
12382 /* Check that the character length is not too large. */
12383 k = gfc_validate_kind (BT_INTEGER, gfc_charlen_int_kind, false);
12384 if (cl->length && cl->length->expr_type == EXPR_CONSTANT
12385 && cl->length->ts.type == BT_INTEGER
12386 && mpz_cmp (cl->length->value.integer, gfc_integer_kinds[k].huge) > 0)
12387 {
12388 gfc_error ("String length at %L is too large", &cl->length->where);
12389 specification_expr = saved_specification_expr;
12390 return false;
12391 }
12392
12393 specification_expr = saved_specification_expr;
12394 return true;
12395 }
12396
12397
12398 /* Test for non-constant shape arrays. */
12399
12400 static bool
12401 is_non_constant_shape_array (gfc_symbol *sym)
12402 {
12403 gfc_expr *e;
12404 int i;
12405 bool not_constant;
12406
12407 not_constant = false;
12408 if (sym->as != NULL)
12409 {
12410 /* Unfortunately, !gfc_is_compile_time_shape hits a legal case that
12411 has not been simplified; parameter array references. Do the
12412 simplification now. */
12413 for (i = 0; i < sym->as->rank + sym->as->corank; i++)
12414 {
12415 if (i == GFC_MAX_DIMENSIONS)
12416 break;
12417
12418 e = sym->as->lower[i];
12419 if (e && (!resolve_index_expr(e)
12420 || !gfc_is_constant_expr (e)))
12421 not_constant = true;
12422 e = sym->as->upper[i];
12423 if (e && (!resolve_index_expr(e)
12424 || !gfc_is_constant_expr (e)))
12425 not_constant = true;
12426 }
12427 }
12428 return not_constant;
12429 }
12430
12431 /* Given a symbol and an initialization expression, add code to initialize
12432 the symbol to the function entry. */
12433 static void
12434 build_init_assign (gfc_symbol *sym, gfc_expr *init)
12435 {
12436 gfc_expr *lval;
12437 gfc_code *init_st;
12438 gfc_namespace *ns = sym->ns;
12439
12440 /* Search for the function namespace if this is a contained
12441 function without an explicit result. */
12442 if (sym->attr.function && sym == sym->result
12443 && sym->name != sym->ns->proc_name->name)
12444 {
12445 ns = ns->contained;
12446 for (;ns; ns = ns->sibling)
12447 if (strcmp (ns->proc_name->name, sym->name) == 0)
12448 break;
12449 }
12450
12451 if (ns == NULL)
12452 {
12453 gfc_free_expr (init);
12454 return;
12455 }
12456
12457 /* Build an l-value expression for the result. */
12458 lval = gfc_lval_expr_from_sym (sym);
12459
12460 /* Add the code at scope entry. */
12461 init_st = gfc_get_code (EXEC_INIT_ASSIGN);
12462 init_st->next = ns->code;
12463 ns->code = init_st;
12464
12465 /* Assign the default initializer to the l-value. */
12466 init_st->loc = sym->declared_at;
12467 init_st->expr1 = lval;
12468 init_st->expr2 = init;
12469 }
12470
12471
12472 /* Whether or not we can generate a default initializer for a symbol. */
12473
12474 static bool
12475 can_generate_init (gfc_symbol *sym)
12476 {
12477 symbol_attribute *a;
12478 if (!sym)
12479 return false;
12480 a = &sym->attr;
12481
12482 /* These symbols should never have a default initialization. */
12483 return !(
12484 a->allocatable
12485 || a->external
12486 || a->pointer
12487 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
12488 && (CLASS_DATA (sym)->attr.class_pointer
12489 || CLASS_DATA (sym)->attr.proc_pointer))
12490 || a->in_equivalence
12491 || a->in_common
12492 || a->data
12493 || sym->module
12494 || a->cray_pointee
12495 || a->cray_pointer
12496 || sym->assoc
12497 || (!a->referenced && !a->result)
12498 || (a->dummy && a->intent != INTENT_OUT)
12499 || (a->function && sym != sym->result)
12500 );
12501 }
12502
12503
12504 /* Assign the default initializer to a derived type variable or result. */
12505
12506 static void
12507 apply_default_init (gfc_symbol *sym)
12508 {
12509 gfc_expr *init = NULL;
12510
12511 if (sym->attr.flavor != FL_VARIABLE && !sym->attr.function)
12512 return;
12513
12514 if (sym->ts.type == BT_DERIVED && sym->ts.u.derived)
12515 init = gfc_generate_initializer (&sym->ts, can_generate_init (sym));
12516
12517 if (init == NULL && sym->ts.type != BT_CLASS)
12518 return;
12519
12520 build_init_assign (sym, init);
12521 sym->attr.referenced = 1;
12522 }
12523
12524
12525 /* Build an initializer for a local. Returns null if the symbol should not have
12526 a default initialization. */
12527
12528 static gfc_expr *
12529 build_default_init_expr (gfc_symbol *sym)
12530 {
12531 /* These symbols should never have a default initialization. */
12532 if (sym->attr.allocatable
12533 || sym->attr.external
12534 || sym->attr.dummy
12535 || sym->attr.pointer
12536 || sym->attr.in_equivalence
12537 || sym->attr.in_common
12538 || sym->attr.data
12539 || sym->module
12540 || sym->attr.cray_pointee
12541 || sym->attr.cray_pointer
12542 || sym->assoc)
12543 return NULL;
12544
12545 /* Get the appropriate init expression. */
12546 return gfc_build_default_init_expr (&sym->ts, &sym->declared_at);
12547 }
12548
12549 /* Add an initialization expression to a local variable. */
12550 static void
12551 apply_default_init_local (gfc_symbol *sym)
12552 {
12553 gfc_expr *init = NULL;
12554
12555 /* The symbol should be a variable or a function return value. */
12556 if ((sym->attr.flavor != FL_VARIABLE && !sym->attr.function)
12557 || (sym->attr.function && sym->result != sym))
12558 return;
12559
12560 /* Try to build the initializer expression. If we can't initialize
12561 this symbol, then init will be NULL. */
12562 init = build_default_init_expr (sym);
12563 if (init == NULL)
12564 return;
12565
12566 /* For saved variables, we don't want to add an initializer at function
12567 entry, so we just add a static initializer. Note that automatic variables
12568 are stack allocated even with -fno-automatic; we have also to exclude
12569 result variable, which are also nonstatic. */
12570 if (!sym->attr.automatic
12571 && (sym->attr.save || sym->ns->save_all
12572 || (flag_max_stack_var_size == 0 && !sym->attr.result
12573 && (sym->ns->proc_name && !sym->ns->proc_name->attr.recursive)
12574 && (!sym->attr.dimension || !is_non_constant_shape_array (sym)))))
12575 {
12576 /* Don't clobber an existing initializer! */
12577 gcc_assert (sym->value == NULL);
12578 sym->value = init;
12579 return;
12580 }
12581
12582 build_init_assign (sym, init);
12583 }
12584
12585
12586 /* Resolution of common features of flavors variable and procedure. */
12587
12588 static bool
12589 resolve_fl_var_and_proc (gfc_symbol *sym, int mp_flag)
12590 {
12591 gfc_array_spec *as;
12592
12593 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
12594 as = CLASS_DATA (sym)->as;
12595 else
12596 as = sym->as;
12597
12598 /* Constraints on deferred shape variable. */
12599 if (as == NULL || as->type != AS_DEFERRED)
12600 {
12601 bool pointer, allocatable, dimension;
12602
12603 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
12604 {
12605 pointer = CLASS_DATA (sym)->attr.class_pointer;
12606 allocatable = CLASS_DATA (sym)->attr.allocatable;
12607 dimension = CLASS_DATA (sym)->attr.dimension;
12608 }
12609 else
12610 {
12611 pointer = sym->attr.pointer && !sym->attr.select_type_temporary;
12612 allocatable = sym->attr.allocatable;
12613 dimension = sym->attr.dimension;
12614 }
12615
12616 if (allocatable)
12617 {
12618 if (dimension && as->type != AS_ASSUMED_RANK)
12619 {
12620 gfc_error ("Allocatable array %qs at %L must have a deferred "
12621 "shape or assumed rank", sym->name, &sym->declared_at);
12622 return false;
12623 }
12624 else if (!gfc_notify_std (GFC_STD_F2003, "Scalar object "
12625 "%qs at %L may not be ALLOCATABLE",
12626 sym->name, &sym->declared_at))
12627 return false;
12628 }
12629
12630 if (pointer && dimension && as->type != AS_ASSUMED_RANK)
12631 {
12632 gfc_error ("Array pointer %qs at %L must have a deferred shape or "
12633 "assumed rank", sym->name, &sym->declared_at);
12634 sym->error = 1;
12635 return false;
12636 }
12637 }
12638 else
12639 {
12640 if (!mp_flag && !sym->attr.allocatable && !sym->attr.pointer
12641 && sym->ts.type != BT_CLASS && !sym->assoc)
12642 {
12643 gfc_error ("Array %qs at %L cannot have a deferred shape",
12644 sym->name, &sym->declared_at);
12645 return false;
12646 }
12647 }
12648
12649 /* Constraints on polymorphic variables. */
12650 if (sym->ts.type == BT_CLASS && !(sym->result && sym->result != sym))
12651 {
12652 /* F03:C502. */
12653 if (sym->attr.class_ok
12654 && !sym->attr.select_type_temporary
12655 && !UNLIMITED_POLY (sym)
12656 && !gfc_type_is_extensible (CLASS_DATA (sym)->ts.u.derived))
12657 {
12658 gfc_error ("Type %qs of CLASS variable %qs at %L is not extensible",
12659 CLASS_DATA (sym)->ts.u.derived->name, sym->name,
12660 &sym->declared_at);
12661 return false;
12662 }
12663
12664 /* F03:C509. */
12665 /* Assume that use associated symbols were checked in the module ns.
12666 Class-variables that are associate-names are also something special
12667 and excepted from the test. */
12668 if (!sym->attr.class_ok && !sym->attr.use_assoc && !sym->assoc)
12669 {
12670 gfc_error ("CLASS variable %qs at %L must be dummy, allocatable "
12671 "or pointer", sym->name, &sym->declared_at);
12672 return false;
12673 }
12674 }
12675
12676 return true;
12677 }
12678
12679
12680 /* Additional checks for symbols with flavor variable and derived
12681 type. To be called from resolve_fl_variable. */
12682
12683 static bool
12684 resolve_fl_variable_derived (gfc_symbol *sym, int no_init_flag)
12685 {
12686 gcc_assert (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS);
12687
12688 /* Check to see if a derived type is blocked from being host
12689 associated by the presence of another class I symbol in the same
12690 namespace. 14.6.1.3 of the standard and the discussion on
12691 comp.lang.fortran. */
12692 if (sym->ns != sym->ts.u.derived->ns
12693 && !sym->ts.u.derived->attr.use_assoc
12694 && sym->ns->proc_name->attr.if_source != IFSRC_IFBODY)
12695 {
12696 gfc_symbol *s;
12697 gfc_find_symbol (sym->ts.u.derived->name, sym->ns, 0, &s);
12698 if (s && s->attr.generic)
12699 s = gfc_find_dt_in_generic (s);
12700 if (s && !gfc_fl_struct (s->attr.flavor))
12701 {
12702 gfc_error ("The type %qs cannot be host associated at %L "
12703 "because it is blocked by an incompatible object "
12704 "of the same name declared at %L",
12705 sym->ts.u.derived->name, &sym->declared_at,
12706 &s->declared_at);
12707 return false;
12708 }
12709 }
12710
12711 /* 4th constraint in section 11.3: "If an object of a type for which
12712 component-initialization is specified (R429) appears in the
12713 specification-part of a module and does not have the ALLOCATABLE
12714 or POINTER attribute, the object shall have the SAVE attribute."
12715
12716 The check for initializers is performed with
12717 gfc_has_default_initializer because gfc_default_initializer generates
12718 a hidden default for allocatable components. */
12719 if (!(sym->value || no_init_flag) && sym->ns->proc_name
12720 && sym->ns->proc_name->attr.flavor == FL_MODULE
12721 && !(sym->ns->save_all && !sym->attr.automatic) && !sym->attr.save
12722 && !sym->attr.pointer && !sym->attr.allocatable
12723 && gfc_has_default_initializer (sym->ts.u.derived)
12724 && !gfc_notify_std (GFC_STD_F2008, "Implied SAVE for module variable "
12725 "%qs at %L, needed due to the default "
12726 "initialization", sym->name, &sym->declared_at))
12727 return false;
12728
12729 /* Assign default initializer. */
12730 if (!(sym->value || sym->attr.pointer || sym->attr.allocatable)
12731 && (!no_init_flag || sym->attr.intent == INTENT_OUT))
12732 sym->value = gfc_generate_initializer (&sym->ts, can_generate_init (sym));
12733
12734 return true;
12735 }
12736
12737
12738 /* F2008, C402 (R401): A colon shall not be used as a type-param-value
12739 except in the declaration of an entity or component that has the POINTER
12740 or ALLOCATABLE attribute. */
12741
12742 static bool
12743 deferred_requirements (gfc_symbol *sym)
12744 {
12745 if (sym->ts.deferred
12746 && !(sym->attr.pointer
12747 || sym->attr.allocatable
12748 || sym->attr.associate_var
12749 || sym->attr.omp_udr_artificial_var))
12750 {
12751 /* If a function has a result variable, only check the variable. */
12752 if (sym->result && sym->name != sym->result->name)
12753 return true;
12754
12755 gfc_error ("Entity %qs at %L has a deferred type parameter and "
12756 "requires either the POINTER or ALLOCATABLE attribute",
12757 sym->name, &sym->declared_at);
12758 return false;
12759 }
12760 return true;
12761 }
12762
12763
12764 /* Resolve symbols with flavor variable. */
12765
12766 static bool
12767 resolve_fl_variable (gfc_symbol *sym, int mp_flag)
12768 {
12769 const char *auto_save_msg = "Automatic object %qs at %L cannot have the "
12770 "SAVE attribute";
12771
12772 if (!resolve_fl_var_and_proc (sym, mp_flag))
12773 return false;
12774
12775 /* Set this flag to check that variables are parameters of all entries.
12776 This check is effected by the call to gfc_resolve_expr through
12777 is_non_constant_shape_array. */
12778 bool saved_specification_expr = specification_expr;
12779 specification_expr = true;
12780
12781 if (sym->ns->proc_name
12782 && (sym->ns->proc_name->attr.flavor == FL_MODULE
12783 || sym->ns->proc_name->attr.is_main_program)
12784 && !sym->attr.use_assoc
12785 && !sym->attr.allocatable
12786 && !sym->attr.pointer
12787 && is_non_constant_shape_array (sym))
12788 {
12789 /* F08:C541. The shape of an array defined in a main program or module
12790 * needs to be constant. */
12791 gfc_error ("The module or main program array %qs at %L must "
12792 "have constant shape", sym->name, &sym->declared_at);
12793 specification_expr = saved_specification_expr;
12794 return false;
12795 }
12796
12797 /* Constraints on deferred type parameter. */
12798 if (!deferred_requirements (sym))
12799 return false;
12800
12801 if (sym->ts.type == BT_CHARACTER && !sym->attr.associate_var)
12802 {
12803 /* Make sure that character string variables with assumed length are
12804 dummy arguments. */
12805 gfc_expr *e = NULL;
12806
12807 if (sym->ts.u.cl)
12808 e = sym->ts.u.cl->length;
12809 else
12810 return false;
12811
12812 if (e == NULL && !sym->attr.dummy && !sym->attr.result
12813 && !sym->ts.deferred && !sym->attr.select_type_temporary
12814 && !sym->attr.omp_udr_artificial_var)
12815 {
12816 gfc_error ("Entity with assumed character length at %L must be a "
12817 "dummy argument or a PARAMETER", &sym->declared_at);
12818 specification_expr = saved_specification_expr;
12819 return false;
12820 }
12821
12822 if (e && sym->attr.save == SAVE_EXPLICIT && !gfc_is_constant_expr (e))
12823 {
12824 gfc_error (auto_save_msg, sym->name, &sym->declared_at);
12825 specification_expr = saved_specification_expr;
12826 return false;
12827 }
12828
12829 if (!gfc_is_constant_expr (e)
12830 && !(e->expr_type == EXPR_VARIABLE
12831 && e->symtree->n.sym->attr.flavor == FL_PARAMETER))
12832 {
12833 if (!sym->attr.use_assoc && sym->ns->proc_name
12834 && (sym->ns->proc_name->attr.flavor == FL_MODULE
12835 || sym->ns->proc_name->attr.is_main_program))
12836 {
12837 gfc_error ("%qs at %L must have constant character length "
12838 "in this context", sym->name, &sym->declared_at);
12839 specification_expr = saved_specification_expr;
12840 return false;
12841 }
12842 if (sym->attr.in_common)
12843 {
12844 gfc_error ("COMMON variable %qs at %L must have constant "
12845 "character length", sym->name, &sym->declared_at);
12846 specification_expr = saved_specification_expr;
12847 return false;
12848 }
12849 }
12850 }
12851
12852 if (sym->value == NULL && sym->attr.referenced)
12853 apply_default_init_local (sym); /* Try to apply a default initialization. */
12854
12855 /* Determine if the symbol may not have an initializer. */
12856 int no_init_flag = 0, automatic_flag = 0;
12857 if (sym->attr.allocatable || sym->attr.external || sym->attr.dummy
12858 || sym->attr.intrinsic || sym->attr.result)
12859 no_init_flag = 1;
12860 else if ((sym->attr.dimension || sym->attr.codimension) && !sym->attr.pointer
12861 && is_non_constant_shape_array (sym))
12862 {
12863 no_init_flag = automatic_flag = 1;
12864
12865 /* Also, they must not have the SAVE attribute.
12866 SAVE_IMPLICIT is checked below. */
12867 if (sym->as && sym->attr.codimension)
12868 {
12869 int corank = sym->as->corank;
12870 sym->as->corank = 0;
12871 no_init_flag = automatic_flag = is_non_constant_shape_array (sym);
12872 sym->as->corank = corank;
12873 }
12874 if (automatic_flag && sym->attr.save == SAVE_EXPLICIT)
12875 {
12876 gfc_error (auto_save_msg, sym->name, &sym->declared_at);
12877 specification_expr = saved_specification_expr;
12878 return false;
12879 }
12880 }
12881
12882 /* Ensure that any initializer is simplified. */
12883 if (sym->value)
12884 gfc_simplify_expr (sym->value, 1);
12885
12886 /* Reject illegal initializers. */
12887 if (!sym->mark && sym->value)
12888 {
12889 if (sym->attr.allocatable || (sym->ts.type == BT_CLASS
12890 && CLASS_DATA (sym)->attr.allocatable))
12891 gfc_error ("Allocatable %qs at %L cannot have an initializer",
12892 sym->name, &sym->declared_at);
12893 else if (sym->attr.external)
12894 gfc_error ("External %qs at %L cannot have an initializer",
12895 sym->name, &sym->declared_at);
12896 else if (sym->attr.dummy
12897 && !(sym->ts.type == BT_DERIVED && sym->attr.intent == INTENT_OUT))
12898 gfc_error ("Dummy %qs at %L cannot have an initializer",
12899 sym->name, &sym->declared_at);
12900 else if (sym->attr.intrinsic)
12901 gfc_error ("Intrinsic %qs at %L cannot have an initializer",
12902 sym->name, &sym->declared_at);
12903 else if (sym->attr.result)
12904 gfc_error ("Function result %qs at %L cannot have an initializer",
12905 sym->name, &sym->declared_at);
12906 else if (automatic_flag)
12907 gfc_error ("Automatic array %qs at %L cannot have an initializer",
12908 sym->name, &sym->declared_at);
12909 else
12910 goto no_init_error;
12911 specification_expr = saved_specification_expr;
12912 return false;
12913 }
12914
12915 no_init_error:
12916 if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS)
12917 {
12918 bool res = resolve_fl_variable_derived (sym, no_init_flag);
12919 specification_expr = saved_specification_expr;
12920 return res;
12921 }
12922
12923 specification_expr = saved_specification_expr;
12924 return true;
12925 }
12926
12927
12928 /* Compare the dummy characteristics of a module procedure interface
12929 declaration with the corresponding declaration in a submodule. */
12930 static gfc_formal_arglist *new_formal;
12931 static char errmsg[200];
12932
12933 static void
12934 compare_fsyms (gfc_symbol *sym)
12935 {
12936 gfc_symbol *fsym;
12937
12938 if (sym == NULL || new_formal == NULL)
12939 return;
12940
12941 fsym = new_formal->sym;
12942
12943 if (sym == fsym)
12944 return;
12945
12946 if (strcmp (sym->name, fsym->name) == 0)
12947 {
12948 if (!gfc_check_dummy_characteristics (fsym, sym, true, errmsg, 200))
12949 gfc_error ("%s at %L", errmsg, &fsym->declared_at);
12950 }
12951 }
12952
12953
12954 /* Resolve a procedure. */
12955
12956 static bool
12957 resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
12958 {
12959 gfc_formal_arglist *arg;
12960
12961 if (sym->attr.function
12962 && !resolve_fl_var_and_proc (sym, mp_flag))
12963 return false;
12964
12965 /* Constraints on deferred type parameter. */
12966 if (!deferred_requirements (sym))
12967 return false;
12968
12969 if (sym->ts.type == BT_CHARACTER)
12970 {
12971 gfc_charlen *cl = sym->ts.u.cl;
12972
12973 if (cl && cl->length && gfc_is_constant_expr (cl->length)
12974 && !resolve_charlen (cl))
12975 return false;
12976
12977 if ((!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
12978 && sym->attr.proc == PROC_ST_FUNCTION)
12979 {
12980 gfc_error ("Character-valued statement function %qs at %L must "
12981 "have constant length", sym->name, &sym->declared_at);
12982 return false;
12983 }
12984 }
12985
12986 /* Ensure that derived type for are not of a private type. Internal
12987 module procedures are excluded by 2.2.3.3 - i.e., they are not
12988 externally accessible and can access all the objects accessible in
12989 the host. */
12990 if (!(sym->ns->parent && sym->ns->parent->proc_name
12991 && sym->ns->parent->proc_name->attr.flavor == FL_MODULE)
12992 && gfc_check_symbol_access (sym))
12993 {
12994 gfc_interface *iface;
12995
12996 for (arg = gfc_sym_get_dummy_args (sym); arg; arg = arg->next)
12997 {
12998 if (arg->sym
12999 && arg->sym->ts.type == BT_DERIVED
13000 && !arg->sym->ts.u.derived->attr.use_assoc
13001 && !gfc_check_symbol_access (arg->sym->ts.u.derived)
13002 && !gfc_notify_std (GFC_STD_F2003, "%qs is of a PRIVATE type "
13003 "and cannot be a dummy argument"
13004 " of %qs, which is PUBLIC at %L",
13005 arg->sym->name, sym->name,
13006 &sym->declared_at))
13007 {
13008 /* Stop this message from recurring. */
13009 arg->sym->ts.u.derived->attr.access = ACCESS_PUBLIC;
13010 return false;
13011 }
13012 }
13013
13014 /* PUBLIC interfaces may expose PRIVATE procedures that take types
13015 PRIVATE to the containing module. */
13016 for (iface = sym->generic; iface; iface = iface->next)
13017 {
13018 for (arg = gfc_sym_get_dummy_args (iface->sym); arg; arg = arg->next)
13019 {
13020 if (arg->sym
13021 && arg->sym->ts.type == BT_DERIVED
13022 && !arg->sym->ts.u.derived->attr.use_assoc
13023 && !gfc_check_symbol_access (arg->sym->ts.u.derived)
13024 && !gfc_notify_std (GFC_STD_F2003, "Procedure %qs in "
13025 "PUBLIC interface %qs at %L "
13026 "takes dummy arguments of %qs which "
13027 "is PRIVATE", iface->sym->name,
13028 sym->name, &iface->sym->declared_at,
13029 gfc_typename(&arg->sym->ts)))
13030 {
13031 /* Stop this message from recurring. */
13032 arg->sym->ts.u.derived->attr.access = ACCESS_PUBLIC;
13033 return false;
13034 }
13035 }
13036 }
13037 }
13038
13039 if (sym->attr.function && sym->value && sym->attr.proc != PROC_ST_FUNCTION
13040 && !sym->attr.proc_pointer)
13041 {
13042 gfc_error ("Function %qs at %L cannot have an initializer",
13043 sym->name, &sym->declared_at);
13044
13045 /* Make sure no second error is issued for this. */
13046 sym->value->error = 1;
13047 return false;
13048 }
13049
13050 /* An external symbol may not have an initializer because it is taken to be
13051 a procedure. Exception: Procedure Pointers. */
13052 if (sym->attr.external && sym->value && !sym->attr.proc_pointer)
13053 {
13054 gfc_error ("External object %qs at %L may not have an initializer",
13055 sym->name, &sym->declared_at);
13056 return false;
13057 }
13058
13059 /* An elemental function is required to return a scalar 12.7.1 */
13060 if (sym->attr.elemental && sym->attr.function
13061 && (sym->as || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as)))
13062 {
13063 gfc_error ("ELEMENTAL function %qs at %L must have a scalar "
13064 "result", sym->name, &sym->declared_at);
13065 /* Reset so that the error only occurs once. */
13066 sym->attr.elemental = 0;
13067 return false;
13068 }
13069
13070 if (sym->attr.proc == PROC_ST_FUNCTION
13071 && (sym->attr.allocatable || sym->attr.pointer))
13072 {
13073 gfc_error ("Statement function %qs at %L may not have pointer or "
13074 "allocatable attribute", sym->name, &sym->declared_at);
13075 return false;
13076 }
13077
13078 /* 5.1.1.5 of the Standard: A function name declared with an asterisk
13079 char-len-param shall not be array-valued, pointer-valued, recursive
13080 or pure. ....snip... A character value of * may only be used in the
13081 following ways: (i) Dummy arg of procedure - dummy associates with
13082 actual length; (ii) To declare a named constant; or (iii) External
13083 function - but length must be declared in calling scoping unit. */
13084 if (sym->attr.function
13085 && sym->ts.type == BT_CHARACTER && !sym->ts.deferred
13086 && sym->ts.u.cl && sym->ts.u.cl->length == NULL)
13087 {
13088 if ((sym->as && sym->as->rank) || (sym->attr.pointer)
13089 || (sym->attr.recursive) || (sym->attr.pure))
13090 {
13091 if (sym->as && sym->as->rank)
13092 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
13093 "array-valued", sym->name, &sym->declared_at);
13094
13095 if (sym->attr.pointer)
13096 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
13097 "pointer-valued", sym->name, &sym->declared_at);
13098
13099 if (sym->attr.pure)
13100 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
13101 "pure", sym->name, &sym->declared_at);
13102
13103 if (sym->attr.recursive)
13104 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
13105 "recursive", sym->name, &sym->declared_at);
13106
13107 return false;
13108 }
13109
13110 /* Appendix B.2 of the standard. Contained functions give an
13111 error anyway. Deferred character length is an F2003 feature.
13112 Don't warn on intrinsic conversion functions, which start
13113 with two underscores. */
13114 if (!sym->attr.contained && !sym->ts.deferred
13115 && (sym->name[0] != '_' || sym->name[1] != '_'))
13116 gfc_notify_std (GFC_STD_F95_OBS,
13117 "CHARACTER(*) function %qs at %L",
13118 sym->name, &sym->declared_at);
13119 }
13120
13121 /* F2008, C1218. */
13122 if (sym->attr.elemental)
13123 {
13124 if (sym->attr.proc_pointer)
13125 {
13126 gfc_error ("Procedure pointer %qs at %L shall not be elemental",
13127 sym->name, &sym->declared_at);
13128 return false;
13129 }
13130 if (sym->attr.dummy)
13131 {
13132 gfc_error ("Dummy procedure %qs at %L shall not be elemental",
13133 sym->name, &sym->declared_at);
13134 return false;
13135 }
13136 }
13137
13138 /* F2018, C15100: "The result of an elemental function shall be scalar,
13139 and shall not have the POINTER or ALLOCATABLE attribute." The scalar
13140 pointer is tested and caught elsewhere. */
13141 if (sym->attr.elemental && sym->result
13142 && (sym->result->attr.allocatable || sym->result->attr.pointer))
13143 {
13144 gfc_error ("Function result variable %qs at %L of elemental "
13145 "function %qs shall not have an ALLOCATABLE or POINTER "
13146 "attribute", sym->result->name,
13147 &sym->result->declared_at, sym->name);
13148 return false;
13149 }
13150
13151 if (sym->attr.is_bind_c && sym->attr.is_c_interop != 1)
13152 {
13153 gfc_formal_arglist *curr_arg;
13154 int has_non_interop_arg = 0;
13155
13156 if (!verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common,
13157 sym->common_block))
13158 {
13159 /* Clear these to prevent looking at them again if there was an
13160 error. */
13161 sym->attr.is_bind_c = 0;
13162 sym->attr.is_c_interop = 0;
13163 sym->ts.is_c_interop = 0;
13164 }
13165 else
13166 {
13167 /* So far, no errors have been found. */
13168 sym->attr.is_c_interop = 1;
13169 sym->ts.is_c_interop = 1;
13170 }
13171
13172 curr_arg = gfc_sym_get_dummy_args (sym);
13173 while (curr_arg != NULL)
13174 {
13175 /* Skip implicitly typed dummy args here. */
13176 if (curr_arg->sym && curr_arg->sym->attr.implicit_type == 0)
13177 if (!gfc_verify_c_interop_param (curr_arg->sym))
13178 /* If something is found to fail, record the fact so we
13179 can mark the symbol for the procedure as not being
13180 BIND(C) to try and prevent multiple errors being
13181 reported. */
13182 has_non_interop_arg = 1;
13183
13184 curr_arg = curr_arg->next;
13185 }
13186
13187 /* See if any of the arguments were not interoperable and if so, clear
13188 the procedure symbol to prevent duplicate error messages. */
13189 if (has_non_interop_arg != 0)
13190 {
13191 sym->attr.is_c_interop = 0;
13192 sym->ts.is_c_interop = 0;
13193 sym->attr.is_bind_c = 0;
13194 }
13195 }
13196
13197 if (!sym->attr.proc_pointer)
13198 {
13199 if (sym->attr.save == SAVE_EXPLICIT)
13200 {
13201 gfc_error ("PROCEDURE attribute conflicts with SAVE attribute "
13202 "in %qs at %L", sym->name, &sym->declared_at);
13203 return false;
13204 }
13205 if (sym->attr.intent)
13206 {
13207 gfc_error ("PROCEDURE attribute conflicts with INTENT attribute "
13208 "in %qs at %L", sym->name, &sym->declared_at);
13209 return false;
13210 }
13211 if (sym->attr.subroutine && sym->attr.result)
13212 {
13213 gfc_error ("PROCEDURE attribute conflicts with RESULT attribute "
13214 "in %qs at %L", sym->name, &sym->declared_at);
13215 return false;
13216 }
13217 if (sym->attr.external && sym->attr.function && !sym->attr.module_procedure
13218 && ((sym->attr.if_source == IFSRC_DECL && !sym->attr.procedure)
13219 || sym->attr.contained))
13220 {
13221 gfc_error ("EXTERNAL attribute conflicts with FUNCTION attribute "
13222 "in %qs at %L", sym->name, &sym->declared_at);
13223 return false;
13224 }
13225 if (strcmp ("ppr@", sym->name) == 0)
13226 {
13227 gfc_error ("Procedure pointer result %qs at %L "
13228 "is missing the pointer attribute",
13229 sym->ns->proc_name->name, &sym->declared_at);
13230 return false;
13231 }
13232 }
13233
13234 /* Assume that a procedure whose body is not known has references
13235 to external arrays. */
13236 if (sym->attr.if_source != IFSRC_DECL)
13237 sym->attr.array_outer_dependency = 1;
13238
13239 /* Compare the characteristics of a module procedure with the
13240 interface declaration. Ideally this would be done with
13241 gfc_compare_interfaces but, at present, the formal interface
13242 cannot be copied to the ts.interface. */
13243 if (sym->attr.module_procedure
13244 && sym->attr.if_source == IFSRC_DECL)
13245 {
13246 gfc_symbol *iface;
13247 char name[2*GFC_MAX_SYMBOL_LEN + 1];
13248 char *module_name;
13249 char *submodule_name;
13250 strcpy (name, sym->ns->proc_name->name);
13251 module_name = strtok (name, ".");
13252 submodule_name = strtok (NULL, ".");
13253
13254 iface = sym->tlink;
13255 sym->tlink = NULL;
13256
13257 /* Make sure that the result uses the correct charlen for deferred
13258 length results. */
13259 if (iface && sym->result
13260 && iface->ts.type == BT_CHARACTER
13261 && iface->ts.deferred)
13262 sym->result->ts.u.cl = iface->ts.u.cl;
13263
13264 if (iface == NULL)
13265 goto check_formal;
13266
13267 /* Check the procedure characteristics. */
13268 if (sym->attr.elemental != iface->attr.elemental)
13269 {
13270 gfc_error ("Mismatch in ELEMENTAL attribute between MODULE "
13271 "PROCEDURE at %L and its interface in %s",
13272 &sym->declared_at, module_name);
13273 return false;
13274 }
13275
13276 if (sym->attr.pure != iface->attr.pure)
13277 {
13278 gfc_error ("Mismatch in PURE attribute between MODULE "
13279 "PROCEDURE at %L and its interface in %s",
13280 &sym->declared_at, module_name);
13281 return false;
13282 }
13283
13284 if (sym->attr.recursive != iface->attr.recursive)
13285 {
13286 gfc_error ("Mismatch in RECURSIVE attribute between MODULE "
13287 "PROCEDURE at %L and its interface in %s",
13288 &sym->declared_at, module_name);
13289 return false;
13290 }
13291
13292 /* Check the result characteristics. */
13293 if (!gfc_check_result_characteristics (sym, iface, errmsg, 200))
13294 {
13295 gfc_error ("%s between the MODULE PROCEDURE declaration "
13296 "in MODULE %qs and the declaration at %L in "
13297 "(SUB)MODULE %qs",
13298 errmsg, module_name, &sym->declared_at,
13299 submodule_name ? submodule_name : module_name);
13300 return false;
13301 }
13302
13303 check_formal:
13304 /* Check the characteristics of the formal arguments. */
13305 if (sym->formal && sym->formal_ns)
13306 {
13307 for (arg = sym->formal; arg && arg->sym; arg = arg->next)
13308 {
13309 new_formal = arg;
13310 gfc_traverse_ns (sym->formal_ns, compare_fsyms);
13311 }
13312 }
13313 }
13314 return true;
13315 }
13316
13317
13318 /* Resolve a list of finalizer procedures. That is, after they have hopefully
13319 been defined and we now know their defined arguments, check that they fulfill
13320 the requirements of the standard for procedures used as finalizers. */
13321
13322 static bool
13323 gfc_resolve_finalizers (gfc_symbol* derived, bool *finalizable)
13324 {
13325 gfc_finalizer* list;
13326 gfc_finalizer** prev_link; /* For removing wrong entries from the list. */
13327 bool result = true;
13328 bool seen_scalar = false;
13329 gfc_symbol *vtab;
13330 gfc_component *c;
13331 gfc_symbol *parent = gfc_get_derived_super_type (derived);
13332
13333 if (parent)
13334 gfc_resolve_finalizers (parent, finalizable);
13335
13336 /* Ensure that derived-type components have a their finalizers resolved. */
13337 bool has_final = derived->f2k_derived && derived->f2k_derived->finalizers;
13338 for (c = derived->components; c; c = c->next)
13339 if (c->ts.type == BT_DERIVED
13340 && !c->attr.pointer && !c->attr.proc_pointer && !c->attr.allocatable)
13341 {
13342 bool has_final2 = false;
13343 if (!gfc_resolve_finalizers (c->ts.u.derived, &has_final2))
13344 return false; /* Error. */
13345 has_final = has_final || has_final2;
13346 }
13347 /* Return early if not finalizable. */
13348 if (!has_final)
13349 {
13350 if (finalizable)
13351 *finalizable = false;
13352 return true;
13353 }
13354
13355 /* Walk over the list of finalizer-procedures, check them, and if any one
13356 does not fit in with the standard's definition, print an error and remove
13357 it from the list. */
13358 prev_link = &derived->f2k_derived->finalizers;
13359 for (list = derived->f2k_derived->finalizers; list; list = *prev_link)
13360 {
13361 gfc_formal_arglist *dummy_args;
13362 gfc_symbol* arg;
13363 gfc_finalizer* i;
13364 int my_rank;
13365
13366 /* Skip this finalizer if we already resolved it. */
13367 if (list->proc_tree)
13368 {
13369 if (list->proc_tree->n.sym->formal->sym->as == NULL
13370 || list->proc_tree->n.sym->formal->sym->as->rank == 0)
13371 seen_scalar = true;
13372 prev_link = &(list->next);
13373 continue;
13374 }
13375
13376 /* Check this exists and is a SUBROUTINE. */
13377 if (!list->proc_sym->attr.subroutine)
13378 {
13379 gfc_error ("FINAL procedure %qs at %L is not a SUBROUTINE",
13380 list->proc_sym->name, &list->where);
13381 goto error;
13382 }
13383
13384 /* We should have exactly one argument. */
13385 dummy_args = gfc_sym_get_dummy_args (list->proc_sym);
13386 if (!dummy_args || dummy_args->next)
13387 {
13388 gfc_error ("FINAL procedure at %L must have exactly one argument",
13389 &list->where);
13390 goto error;
13391 }
13392 arg = dummy_args->sym;
13393
13394 /* This argument must be of our type. */
13395 if (arg->ts.type != BT_DERIVED || arg->ts.u.derived != derived)
13396 {
13397 gfc_error ("Argument of FINAL procedure at %L must be of type %qs",
13398 &arg->declared_at, derived->name);
13399 goto error;
13400 }
13401
13402 /* It must neither be a pointer nor allocatable nor optional. */
13403 if (arg->attr.pointer)
13404 {
13405 gfc_error ("Argument of FINAL procedure at %L must not be a POINTER",
13406 &arg->declared_at);
13407 goto error;
13408 }
13409 if (arg->attr.allocatable)
13410 {
13411 gfc_error ("Argument of FINAL procedure at %L must not be"
13412 " ALLOCATABLE", &arg->declared_at);
13413 goto error;
13414 }
13415 if (arg->attr.optional)
13416 {
13417 gfc_error ("Argument of FINAL procedure at %L must not be OPTIONAL",
13418 &arg->declared_at);
13419 goto error;
13420 }
13421
13422 /* It must not be INTENT(OUT). */
13423 if (arg->attr.intent == INTENT_OUT)
13424 {
13425 gfc_error ("Argument of FINAL procedure at %L must not be"
13426 " INTENT(OUT)", &arg->declared_at);
13427 goto error;
13428 }
13429
13430 /* Warn if the procedure is non-scalar and not assumed shape. */
13431 if (warn_surprising && arg->as && arg->as->rank != 0
13432 && arg->as->type != AS_ASSUMED_SHAPE)
13433 gfc_warning (OPT_Wsurprising,
13434 "Non-scalar FINAL procedure at %L should have assumed"
13435 " shape argument", &arg->declared_at);
13436
13437 /* Check that it does not match in kind and rank with a FINAL procedure
13438 defined earlier. To really loop over the *earlier* declarations,
13439 we need to walk the tail of the list as new ones were pushed at the
13440 front. */
13441 /* TODO: Handle kind parameters once they are implemented. */
13442 my_rank = (arg->as ? arg->as->rank : 0);
13443 for (i = list->next; i; i = i->next)
13444 {
13445 gfc_formal_arglist *dummy_args;
13446
13447 /* Argument list might be empty; that is an error signalled earlier,
13448 but we nevertheless continued resolving. */
13449 dummy_args = gfc_sym_get_dummy_args (i->proc_sym);
13450 if (dummy_args)
13451 {
13452 gfc_symbol* i_arg = dummy_args->sym;
13453 const int i_rank = (i_arg->as ? i_arg->as->rank : 0);
13454 if (i_rank == my_rank)
13455 {
13456 gfc_error ("FINAL procedure %qs declared at %L has the same"
13457 " rank (%d) as %qs",
13458 list->proc_sym->name, &list->where, my_rank,
13459 i->proc_sym->name);
13460 goto error;
13461 }
13462 }
13463 }
13464
13465 /* Is this the/a scalar finalizer procedure? */
13466 if (my_rank == 0)
13467 seen_scalar = true;
13468
13469 /* Find the symtree for this procedure. */
13470 gcc_assert (!list->proc_tree);
13471 list->proc_tree = gfc_find_sym_in_symtree (list->proc_sym);
13472
13473 prev_link = &list->next;
13474 continue;
13475
13476 /* Remove wrong nodes immediately from the list so we don't risk any
13477 troubles in the future when they might fail later expectations. */
13478 error:
13479 i = list;
13480 *prev_link = list->next;
13481 gfc_free_finalizer (i);
13482 result = false;
13483 }
13484
13485 if (result == false)
13486 return false;
13487
13488 /* Warn if we haven't seen a scalar finalizer procedure (but we know there
13489 were nodes in the list, must have been for arrays. It is surely a good
13490 idea to have a scalar version there if there's something to finalize. */
13491 if (warn_surprising && derived->f2k_derived->finalizers && !seen_scalar)
13492 gfc_warning (OPT_Wsurprising,
13493 "Only array FINAL procedures declared for derived type %qs"
13494 " defined at %L, suggest also scalar one",
13495 derived->name, &derived->declared_at);
13496
13497 vtab = gfc_find_derived_vtab (derived);
13498 c = vtab->ts.u.derived->components->next->next->next->next->next;
13499 gfc_set_sym_referenced (c->initializer->symtree->n.sym);
13500
13501 if (finalizable)
13502 *finalizable = true;
13503
13504 return true;
13505 }
13506
13507
13508 /* Check if two GENERIC targets are ambiguous and emit an error is they are. */
13509
13510 static bool
13511 check_generic_tbp_ambiguity (gfc_tbp_generic* t1, gfc_tbp_generic* t2,
13512 const char* generic_name, locus where)
13513 {
13514 gfc_symbol *sym1, *sym2;
13515 const char *pass1, *pass2;
13516 gfc_formal_arglist *dummy_args;
13517
13518 gcc_assert (t1->specific && t2->specific);
13519 gcc_assert (!t1->specific->is_generic);
13520 gcc_assert (!t2->specific->is_generic);
13521 gcc_assert (t1->is_operator == t2->is_operator);
13522
13523 sym1 = t1->specific->u.specific->n.sym;
13524 sym2 = t2->specific->u.specific->n.sym;
13525
13526 if (sym1 == sym2)
13527 return true;
13528
13529 /* Both must be SUBROUTINEs or both must be FUNCTIONs. */
13530 if (sym1->attr.subroutine != sym2->attr.subroutine
13531 || sym1->attr.function != sym2->attr.function)
13532 {
13533 gfc_error ("%qs and %qs cannot be mixed FUNCTION/SUBROUTINE for"
13534 " GENERIC %qs at %L",
13535 sym1->name, sym2->name, generic_name, &where);
13536 return false;
13537 }
13538
13539 /* Determine PASS arguments. */
13540 if (t1->specific->nopass)
13541 pass1 = NULL;
13542 else if (t1->specific->pass_arg)
13543 pass1 = t1->specific->pass_arg;
13544 else
13545 {
13546 dummy_args = gfc_sym_get_dummy_args (t1->specific->u.specific->n.sym);
13547 if (dummy_args)
13548 pass1 = dummy_args->sym->name;
13549 else
13550 pass1 = NULL;
13551 }
13552 if (t2->specific->nopass)
13553 pass2 = NULL;
13554 else if (t2->specific->pass_arg)
13555 pass2 = t2->specific->pass_arg;
13556 else
13557 {
13558 dummy_args = gfc_sym_get_dummy_args (t2->specific->u.specific->n.sym);
13559 if (dummy_args)
13560 pass2 = dummy_args->sym->name;
13561 else
13562 pass2 = NULL;
13563 }
13564
13565 /* Compare the interfaces. */
13566 if (gfc_compare_interfaces (sym1, sym2, sym2->name, !t1->is_operator, 0,
13567 NULL, 0, pass1, pass2))
13568 {
13569 gfc_error ("%qs and %qs for GENERIC %qs at %L are ambiguous",
13570 sym1->name, sym2->name, generic_name, &where);
13571 return false;
13572 }
13573
13574 return true;
13575 }
13576
13577
13578 /* Worker function for resolving a generic procedure binding; this is used to
13579 resolve GENERIC as well as user and intrinsic OPERATOR typebound procedures.
13580
13581 The difference between those cases is finding possible inherited bindings
13582 that are overridden, as one has to look for them in tb_sym_root,
13583 tb_uop_root or tb_op, respectively. Thus the caller must already find
13584 the super-type and set p->overridden correctly. */
13585
13586 static bool
13587 resolve_tb_generic_targets (gfc_symbol* super_type,
13588 gfc_typebound_proc* p, const char* name)
13589 {
13590 gfc_tbp_generic* target;
13591 gfc_symtree* first_target;
13592 gfc_symtree* inherited;
13593
13594 gcc_assert (p && p->is_generic);
13595
13596 /* Try to find the specific bindings for the symtrees in our target-list. */
13597 gcc_assert (p->u.generic);
13598 for (target = p->u.generic; target; target = target->next)
13599 if (!target->specific)
13600 {
13601 gfc_typebound_proc* overridden_tbp;
13602 gfc_tbp_generic* g;
13603 const char* target_name;
13604
13605 target_name = target->specific_st->name;
13606
13607 /* Defined for this type directly. */
13608 if (target->specific_st->n.tb && !target->specific_st->n.tb->error)
13609 {
13610 target->specific = target->specific_st->n.tb;
13611 goto specific_found;
13612 }
13613
13614 /* Look for an inherited specific binding. */
13615 if (super_type)
13616 {
13617 inherited = gfc_find_typebound_proc (super_type, NULL, target_name,
13618 true, NULL);
13619
13620 if (inherited)
13621 {
13622 gcc_assert (inherited->n.tb);
13623 target->specific = inherited->n.tb;
13624 goto specific_found;
13625 }
13626 }
13627
13628 gfc_error ("Undefined specific binding %qs as target of GENERIC %qs"
13629 " at %L", target_name, name, &p->where);
13630 return false;
13631
13632 /* Once we've found the specific binding, check it is not ambiguous with
13633 other specifics already found or inherited for the same GENERIC. */
13634 specific_found:
13635 gcc_assert (target->specific);
13636
13637 /* This must really be a specific binding! */
13638 if (target->specific->is_generic)
13639 {
13640 gfc_error ("GENERIC %qs at %L must target a specific binding,"
13641 " %qs is GENERIC, too", name, &p->where, target_name);
13642 return false;
13643 }
13644
13645 /* Check those already resolved on this type directly. */
13646 for (g = p->u.generic; g; g = g->next)
13647 if (g != target && g->specific
13648 && !check_generic_tbp_ambiguity (target, g, name, p->where))
13649 return false;
13650
13651 /* Check for ambiguity with inherited specific targets. */
13652 for (overridden_tbp = p->overridden; overridden_tbp;
13653 overridden_tbp = overridden_tbp->overridden)
13654 if (overridden_tbp->is_generic)
13655 {
13656 for (g = overridden_tbp->u.generic; g; g = g->next)
13657 {
13658 gcc_assert (g->specific);
13659 if (!check_generic_tbp_ambiguity (target, g, name, p->where))
13660 return false;
13661 }
13662 }
13663 }
13664
13665 /* If we attempt to "overwrite" a specific binding, this is an error. */
13666 if (p->overridden && !p->overridden->is_generic)
13667 {
13668 gfc_error ("GENERIC %qs at %L cannot overwrite specific binding with"
13669 " the same name", name, &p->where);
13670 return false;
13671 }
13672
13673 /* Take the SUBROUTINE/FUNCTION attributes of the first specific target, as
13674 all must have the same attributes here. */
13675 first_target = p->u.generic->specific->u.specific;
13676 gcc_assert (first_target);
13677 p->subroutine = first_target->n.sym->attr.subroutine;
13678 p->function = first_target->n.sym->attr.function;
13679
13680 return true;
13681 }
13682
13683
13684 /* Resolve a GENERIC procedure binding for a derived type. */
13685
13686 static bool
13687 resolve_typebound_generic (gfc_symbol* derived, gfc_symtree* st)
13688 {
13689 gfc_symbol* super_type;
13690
13691 /* Find the overridden binding if any. */
13692 st->n.tb->overridden = NULL;
13693 super_type = gfc_get_derived_super_type (derived);
13694 if (super_type)
13695 {
13696 gfc_symtree* overridden;
13697 overridden = gfc_find_typebound_proc (super_type, NULL, st->name,
13698 true, NULL);
13699
13700 if (overridden && overridden->n.tb)
13701 st->n.tb->overridden = overridden->n.tb;
13702 }
13703
13704 /* Resolve using worker function. */
13705 return resolve_tb_generic_targets (super_type, st->n.tb, st->name);
13706 }
13707
13708
13709 /* Retrieve the target-procedure of an operator binding and do some checks in
13710 common for intrinsic and user-defined type-bound operators. */
13711
13712 static gfc_symbol*
13713 get_checked_tb_operator_target (gfc_tbp_generic* target, locus where)
13714 {
13715 gfc_symbol* target_proc;
13716
13717 gcc_assert (target->specific && !target->specific->is_generic);
13718 target_proc = target->specific->u.specific->n.sym;
13719 gcc_assert (target_proc);
13720
13721 /* F08:C468. All operator bindings must have a passed-object dummy argument. */
13722 if (target->specific->nopass)
13723 {
13724 gfc_error ("Type-bound operator at %L cannot be NOPASS", &where);
13725 return NULL;
13726 }
13727
13728 return target_proc;
13729 }
13730
13731
13732 /* Resolve a type-bound intrinsic operator. */
13733
13734 static bool
13735 resolve_typebound_intrinsic_op (gfc_symbol* derived, gfc_intrinsic_op op,
13736 gfc_typebound_proc* p)
13737 {
13738 gfc_symbol* super_type;
13739 gfc_tbp_generic* target;
13740
13741 /* If there's already an error here, do nothing (but don't fail again). */
13742 if (p->error)
13743 return true;
13744
13745 /* Operators should always be GENERIC bindings. */
13746 gcc_assert (p->is_generic);
13747
13748 /* Look for an overridden binding. */
13749 super_type = gfc_get_derived_super_type (derived);
13750 if (super_type && super_type->f2k_derived)
13751 p->overridden = gfc_find_typebound_intrinsic_op (super_type, NULL,
13752 op, true, NULL);
13753 else
13754 p->overridden = NULL;
13755
13756 /* Resolve general GENERIC properties using worker function. */
13757 if (!resolve_tb_generic_targets (super_type, p, gfc_op2string(op)))
13758 goto error;
13759
13760 /* Check the targets to be procedures of correct interface. */
13761 for (target = p->u.generic; target; target = target->next)
13762 {
13763 gfc_symbol* target_proc;
13764
13765 target_proc = get_checked_tb_operator_target (target, p->where);
13766 if (!target_proc)
13767 goto error;
13768
13769 if (!gfc_check_operator_interface (target_proc, op, p->where))
13770 goto error;
13771
13772 /* Add target to non-typebound operator list. */
13773 if (!target->specific->deferred && !derived->attr.use_assoc
13774 && p->access != ACCESS_PRIVATE && derived->ns == gfc_current_ns)
13775 {
13776 gfc_interface *head, *intr;
13777
13778 /* Preempt 'gfc_check_new_interface' for submodules, where the
13779 mechanism for handling module procedures winds up resolving
13780 operator interfaces twice and would otherwise cause an error. */
13781 for (intr = derived->ns->op[op]; intr; intr = intr->next)
13782 if (intr->sym == target_proc
13783 && target_proc->attr.used_in_submodule)
13784 return true;
13785
13786 if (!gfc_check_new_interface (derived->ns->op[op],
13787 target_proc, p->where))
13788 return false;
13789 head = derived->ns->op[op];
13790 intr = gfc_get_interface ();
13791 intr->sym = target_proc;
13792 intr->where = p->where;
13793 intr->next = head;
13794 derived->ns->op[op] = intr;
13795 }
13796 }
13797
13798 return true;
13799
13800 error:
13801 p->error = 1;
13802 return false;
13803 }
13804
13805
13806 /* Resolve a type-bound user operator (tree-walker callback). */
13807
13808 static gfc_symbol* resolve_bindings_derived;
13809 static bool resolve_bindings_result;
13810
13811 static bool check_uop_procedure (gfc_symbol* sym, locus where);
13812
13813 static void
13814 resolve_typebound_user_op (gfc_symtree* stree)
13815 {
13816 gfc_symbol* super_type;
13817 gfc_tbp_generic* target;
13818
13819 gcc_assert (stree && stree->n.tb);
13820
13821 if (stree->n.tb->error)
13822 return;
13823
13824 /* Operators should always be GENERIC bindings. */
13825 gcc_assert (stree->n.tb->is_generic);
13826
13827 /* Find overridden procedure, if any. */
13828 super_type = gfc_get_derived_super_type (resolve_bindings_derived);
13829 if (super_type && super_type->f2k_derived)
13830 {
13831 gfc_symtree* overridden;
13832 overridden = gfc_find_typebound_user_op (super_type, NULL,
13833 stree->name, true, NULL);
13834
13835 if (overridden && overridden->n.tb)
13836 stree->n.tb->overridden = overridden->n.tb;
13837 }
13838 else
13839 stree->n.tb->overridden = NULL;
13840
13841 /* Resolve basically using worker function. */
13842 if (!resolve_tb_generic_targets (super_type, stree->n.tb, stree->name))
13843 goto error;
13844
13845 /* Check the targets to be functions of correct interface. */
13846 for (target = stree->n.tb->u.generic; target; target = target->next)
13847 {
13848 gfc_symbol* target_proc;
13849
13850 target_proc = get_checked_tb_operator_target (target, stree->n.tb->where);
13851 if (!target_proc)
13852 goto error;
13853
13854 if (!check_uop_procedure (target_proc, stree->n.tb->where))
13855 goto error;
13856 }
13857
13858 return;
13859
13860 error:
13861 resolve_bindings_result = false;
13862 stree->n.tb->error = 1;
13863 }
13864
13865
13866 /* Resolve the type-bound procedures for a derived type. */
13867
13868 static void
13869 resolve_typebound_procedure (gfc_symtree* stree)
13870 {
13871 gfc_symbol* proc;
13872 locus where;
13873 gfc_symbol* me_arg;
13874 gfc_symbol* super_type;
13875 gfc_component* comp;
13876
13877 gcc_assert (stree);
13878
13879 /* Undefined specific symbol from GENERIC target definition. */
13880 if (!stree->n.tb)
13881 return;
13882
13883 if (stree->n.tb->error)
13884 return;
13885
13886 /* If this is a GENERIC binding, use that routine. */
13887 if (stree->n.tb->is_generic)
13888 {
13889 if (!resolve_typebound_generic (resolve_bindings_derived, stree))
13890 goto error;
13891 return;
13892 }
13893
13894 /* Get the target-procedure to check it. */
13895 gcc_assert (!stree->n.tb->is_generic);
13896 gcc_assert (stree->n.tb->u.specific);
13897 proc = stree->n.tb->u.specific->n.sym;
13898 where = stree->n.tb->where;
13899
13900 /* Default access should already be resolved from the parser. */
13901 gcc_assert (stree->n.tb->access != ACCESS_UNKNOWN);
13902
13903 if (stree->n.tb->deferred)
13904 {
13905 if (!check_proc_interface (proc, &where))
13906 goto error;
13907 }
13908 else
13909 {
13910 /* If proc has not been resolved at this point, proc->name may
13911 actually be a USE associated entity. See PR fortran/89647. */
13912 if (!proc->resolved
13913 && proc->attr.function == 0 && proc->attr.subroutine == 0)
13914 {
13915 gfc_symbol *tmp;
13916 gfc_find_symbol (proc->name, gfc_current_ns->parent, 1, &tmp);
13917 if (tmp && tmp->attr.use_assoc)
13918 {
13919 proc->module = tmp->module;
13920 proc->attr.proc = tmp->attr.proc;
13921 proc->attr.function = tmp->attr.function;
13922 proc->attr.subroutine = tmp->attr.subroutine;
13923 proc->attr.use_assoc = tmp->attr.use_assoc;
13924 proc->ts = tmp->ts;
13925 proc->result = tmp->result;
13926 }
13927 }
13928
13929 /* Check for F08:C465. */
13930 if ((!proc->attr.subroutine && !proc->attr.function)
13931 || (proc->attr.proc != PROC_MODULE
13932 && proc->attr.if_source != IFSRC_IFBODY)
13933 || proc->attr.abstract)
13934 {
13935 gfc_error ("%qs must be a module procedure or an external "
13936 "procedure with an explicit interface at %L",
13937 proc->name, &where);
13938 goto error;
13939 }
13940 }
13941
13942 stree->n.tb->subroutine = proc->attr.subroutine;
13943 stree->n.tb->function = proc->attr.function;
13944
13945 /* Find the super-type of the current derived type. We could do this once and
13946 store in a global if speed is needed, but as long as not I believe this is
13947 more readable and clearer. */
13948 super_type = gfc_get_derived_super_type (resolve_bindings_derived);
13949
13950 /* If PASS, resolve and check arguments if not already resolved / loaded
13951 from a .mod file. */
13952 if (!stree->n.tb->nopass && stree->n.tb->pass_arg_num == 0)
13953 {
13954 gfc_formal_arglist *dummy_args;
13955
13956 dummy_args = gfc_sym_get_dummy_args (proc);
13957 if (stree->n.tb->pass_arg)
13958 {
13959 gfc_formal_arglist *i;
13960
13961 /* If an explicit passing argument name is given, walk the arg-list
13962 and look for it. */
13963
13964 me_arg = NULL;
13965 stree->n.tb->pass_arg_num = 1;
13966 for (i = dummy_args; i; i = i->next)
13967 {
13968 if (!strcmp (i->sym->name, stree->n.tb->pass_arg))
13969 {
13970 me_arg = i->sym;
13971 break;
13972 }
13973 ++stree->n.tb->pass_arg_num;
13974 }
13975
13976 if (!me_arg)
13977 {
13978 gfc_error ("Procedure %qs with PASS(%s) at %L has no"
13979 " argument %qs",
13980 proc->name, stree->n.tb->pass_arg, &where,
13981 stree->n.tb->pass_arg);
13982 goto error;
13983 }
13984 }
13985 else
13986 {
13987 /* Otherwise, take the first one; there should in fact be at least
13988 one. */
13989 stree->n.tb->pass_arg_num = 1;
13990 if (!dummy_args)
13991 {
13992 gfc_error ("Procedure %qs with PASS at %L must have at"
13993 " least one argument", proc->name, &where);
13994 goto error;
13995 }
13996 me_arg = dummy_args->sym;
13997 }
13998
13999 /* Now check that the argument-type matches and the passed-object
14000 dummy argument is generally fine. */
14001
14002 gcc_assert (me_arg);
14003
14004 if (me_arg->ts.type != BT_CLASS)
14005 {
14006 gfc_error ("Non-polymorphic passed-object dummy argument of %qs"
14007 " at %L", proc->name, &where);
14008 goto error;
14009 }
14010
14011 if (CLASS_DATA (me_arg)->ts.u.derived
14012 != resolve_bindings_derived)
14013 {
14014 gfc_error ("Argument %qs of %qs with PASS(%s) at %L must be of"
14015 " the derived-type %qs", me_arg->name, proc->name,
14016 me_arg->name, &where, resolve_bindings_derived->name);
14017 goto error;
14018 }
14019
14020 gcc_assert (me_arg->ts.type == BT_CLASS);
14021 if (CLASS_DATA (me_arg)->as && CLASS_DATA (me_arg)->as->rank != 0)
14022 {
14023 gfc_error ("Passed-object dummy argument of %qs at %L must be"
14024 " scalar", proc->name, &where);
14025 goto error;
14026 }
14027 if (CLASS_DATA (me_arg)->attr.allocatable)
14028 {
14029 gfc_error ("Passed-object dummy argument of %qs at %L must not"
14030 " be ALLOCATABLE", proc->name, &where);
14031 goto error;
14032 }
14033 if (CLASS_DATA (me_arg)->attr.class_pointer)
14034 {
14035 gfc_error ("Passed-object dummy argument of %qs at %L must not"
14036 " be POINTER", proc->name, &where);
14037 goto error;
14038 }
14039 }
14040
14041 /* If we are extending some type, check that we don't override a procedure
14042 flagged NON_OVERRIDABLE. */
14043 stree->n.tb->overridden = NULL;
14044 if (super_type)
14045 {
14046 gfc_symtree* overridden;
14047 overridden = gfc_find_typebound_proc (super_type, NULL,
14048 stree->name, true, NULL);
14049
14050 if (overridden)
14051 {
14052 if (overridden->n.tb)
14053 stree->n.tb->overridden = overridden->n.tb;
14054
14055 if (!gfc_check_typebound_override (stree, overridden))
14056 goto error;
14057 }
14058 }
14059
14060 /* See if there's a name collision with a component directly in this type. */
14061 for (comp = resolve_bindings_derived->components; comp; comp = comp->next)
14062 if (!strcmp (comp->name, stree->name))
14063 {
14064 gfc_error ("Procedure %qs at %L has the same name as a component of"
14065 " %qs",
14066 stree->name, &where, resolve_bindings_derived->name);
14067 goto error;
14068 }
14069
14070 /* Try to find a name collision with an inherited component. */
14071 if (super_type && gfc_find_component (super_type, stree->name, true, true,
14072 NULL))
14073 {
14074 gfc_error ("Procedure %qs at %L has the same name as an inherited"
14075 " component of %qs",
14076 stree->name, &where, resolve_bindings_derived->name);
14077 goto error;
14078 }
14079
14080 stree->n.tb->error = 0;
14081 return;
14082
14083 error:
14084 resolve_bindings_result = false;
14085 stree->n.tb->error = 1;
14086 }
14087
14088
14089 static bool
14090 resolve_typebound_procedures (gfc_symbol* derived)
14091 {
14092 int op;
14093 gfc_symbol* super_type;
14094
14095 if (!derived->f2k_derived || !derived->f2k_derived->tb_sym_root)
14096 return true;
14097
14098 super_type = gfc_get_derived_super_type (derived);
14099 if (super_type)
14100 resolve_symbol (super_type);
14101
14102 resolve_bindings_derived = derived;
14103 resolve_bindings_result = true;
14104
14105 if (derived->f2k_derived->tb_sym_root)
14106 gfc_traverse_symtree (derived->f2k_derived->tb_sym_root,
14107 &resolve_typebound_procedure);
14108
14109 if (derived->f2k_derived->tb_uop_root)
14110 gfc_traverse_symtree (derived->f2k_derived->tb_uop_root,
14111 &resolve_typebound_user_op);
14112
14113 for (op = 0; op != GFC_INTRINSIC_OPS; ++op)
14114 {
14115 gfc_typebound_proc* p = derived->f2k_derived->tb_op[op];
14116 if (p && !resolve_typebound_intrinsic_op (derived,
14117 (gfc_intrinsic_op)op, p))
14118 resolve_bindings_result = false;
14119 }
14120
14121 return resolve_bindings_result;
14122 }
14123
14124
14125 /* Add a derived type to the dt_list. The dt_list is used in trans-types.c
14126 to give all identical derived types the same backend_decl. */
14127 static void
14128 add_dt_to_dt_list (gfc_symbol *derived)
14129 {
14130 if (!derived->dt_next)
14131 {
14132 if (gfc_derived_types)
14133 {
14134 derived->dt_next = gfc_derived_types->dt_next;
14135 gfc_derived_types->dt_next = derived;
14136 }
14137 else
14138 {
14139 derived->dt_next = derived;
14140 }
14141 gfc_derived_types = derived;
14142 }
14143 }
14144
14145
14146 /* Ensure that a derived-type is really not abstract, meaning that every
14147 inherited DEFERRED binding is overridden by a non-DEFERRED one. */
14148
14149 static bool
14150 ensure_not_abstract_walker (gfc_symbol* sub, gfc_symtree* st)
14151 {
14152 if (!st)
14153 return true;
14154
14155 if (!ensure_not_abstract_walker (sub, st->left))
14156 return false;
14157 if (!ensure_not_abstract_walker (sub, st->right))
14158 return false;
14159
14160 if (st->n.tb && st->n.tb->deferred)
14161 {
14162 gfc_symtree* overriding;
14163 overriding = gfc_find_typebound_proc (sub, NULL, st->name, true, NULL);
14164 if (!overriding)
14165 return false;
14166 gcc_assert (overriding->n.tb);
14167 if (overriding->n.tb->deferred)
14168 {
14169 gfc_error ("Derived-type %qs declared at %L must be ABSTRACT because"
14170 " %qs is DEFERRED and not overridden",
14171 sub->name, &sub->declared_at, st->name);
14172 return false;
14173 }
14174 }
14175
14176 return true;
14177 }
14178
14179 static bool
14180 ensure_not_abstract (gfc_symbol* sub, gfc_symbol* ancestor)
14181 {
14182 /* The algorithm used here is to recursively travel up the ancestry of sub
14183 and for each ancestor-type, check all bindings. If any of them is
14184 DEFERRED, look it up starting from sub and see if the found (overriding)
14185 binding is not DEFERRED.
14186 This is not the most efficient way to do this, but it should be ok and is
14187 clearer than something sophisticated. */
14188
14189 gcc_assert (ancestor && !sub->attr.abstract);
14190
14191 if (!ancestor->attr.abstract)
14192 return true;
14193
14194 /* Walk bindings of this ancestor. */
14195 if (ancestor->f2k_derived)
14196 {
14197 bool t;
14198 t = ensure_not_abstract_walker (sub, ancestor->f2k_derived->tb_sym_root);
14199 if (!t)
14200 return false;
14201 }
14202
14203 /* Find next ancestor type and recurse on it. */
14204 ancestor = gfc_get_derived_super_type (ancestor);
14205 if (ancestor)
14206 return ensure_not_abstract (sub, ancestor);
14207
14208 return true;
14209 }
14210
14211
14212 /* This check for typebound defined assignments is done recursively
14213 since the order in which derived types are resolved is not always in
14214 order of the declarations. */
14215
14216 static void
14217 check_defined_assignments (gfc_symbol *derived)
14218 {
14219 gfc_component *c;
14220
14221 for (c = derived->components; c; c = c->next)
14222 {
14223 if (!gfc_bt_struct (c->ts.type)
14224 || c->attr.pointer
14225 || c->attr.allocatable
14226 || c->attr.proc_pointer_comp
14227 || c->attr.class_pointer
14228 || c->attr.proc_pointer)
14229 continue;
14230
14231 if (c->ts.u.derived->attr.defined_assign_comp
14232 || (c->ts.u.derived->f2k_derived
14233 && c->ts.u.derived->f2k_derived->tb_op[INTRINSIC_ASSIGN]))
14234 {
14235 derived->attr.defined_assign_comp = 1;
14236 return;
14237 }
14238
14239 check_defined_assignments (c->ts.u.derived);
14240 if (c->ts.u.derived->attr.defined_assign_comp)
14241 {
14242 derived->attr.defined_assign_comp = 1;
14243 return;
14244 }
14245 }
14246 }
14247
14248
14249 /* Resolve a single component of a derived type or structure. */
14250
14251 static bool
14252 resolve_component (gfc_component *c, gfc_symbol *sym)
14253 {
14254 gfc_symbol *super_type;
14255 symbol_attribute *attr;
14256
14257 if (c->attr.artificial)
14258 return true;
14259
14260 /* Do not allow vtype components to be resolved in nameless namespaces
14261 such as block data because the procedure pointers will cause ICEs
14262 and vtables are not needed in these contexts. */
14263 if (sym->attr.vtype && sym->attr.use_assoc
14264 && sym->ns->proc_name == NULL)
14265 return true;
14266
14267 /* F2008, C442. */
14268 if ((!sym->attr.is_class || c != sym->components)
14269 && c->attr.codimension
14270 && (!c->attr.allocatable || (c->as && c->as->type != AS_DEFERRED)))
14271 {
14272 gfc_error ("Coarray component %qs at %L must be allocatable with "
14273 "deferred shape", c->name, &c->loc);
14274 return false;
14275 }
14276
14277 /* F2008, C443. */
14278 if (c->attr.codimension && c->ts.type == BT_DERIVED
14279 && c->ts.u.derived->ts.is_iso_c)
14280 {
14281 gfc_error ("Component %qs at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) "
14282 "shall not be a coarray", c->name, &c->loc);
14283 return false;
14284 }
14285
14286 /* F2008, C444. */
14287 if (gfc_bt_struct (c->ts.type) && c->ts.u.derived->attr.coarray_comp
14288 && (c->attr.codimension || c->attr.pointer || c->attr.dimension
14289 || c->attr.allocatable))
14290 {
14291 gfc_error ("Component %qs at %L with coarray component "
14292 "shall be a nonpointer, nonallocatable scalar",
14293 c->name, &c->loc);
14294 return false;
14295 }
14296
14297 /* F2008, C448. */
14298 if (c->ts.type == BT_CLASS)
14299 {
14300 if (CLASS_DATA (c))
14301 {
14302 attr = &(CLASS_DATA (c)->attr);
14303
14304 /* Fix up contiguous attribute. */
14305 if (c->attr.contiguous)
14306 attr->contiguous = 1;
14307 }
14308 else
14309 attr = NULL;
14310 }
14311 else
14312 attr = &c->attr;
14313
14314 if (attr && attr->contiguous && (!attr->dimension || !attr->pointer))
14315 {
14316 gfc_error ("Component %qs at %L has the CONTIGUOUS attribute but "
14317 "is not an array pointer", c->name, &c->loc);
14318 return false;
14319 }
14320
14321 /* F2003, 15.2.1 - length has to be one. */
14322 if (sym->attr.is_bind_c && c->ts.type == BT_CHARACTER
14323 && (c->ts.u.cl == NULL || c->ts.u.cl->length == NULL
14324 || !gfc_is_constant_expr (c->ts.u.cl->length)
14325 || mpz_cmp_si (c->ts.u.cl->length->value.integer, 1) != 0))
14326 {
14327 gfc_error ("Component %qs of BIND(C) type at %L must have length one",
14328 c->name, &c->loc);
14329 return false;
14330 }
14331
14332 if (c->attr.proc_pointer && c->ts.interface)
14333 {
14334 gfc_symbol *ifc = c->ts.interface;
14335
14336 if (!sym->attr.vtype && !check_proc_interface (ifc, &c->loc))
14337 {
14338 c->tb->error = 1;
14339 return false;
14340 }
14341
14342 if (ifc->attr.if_source || ifc->attr.intrinsic)
14343 {
14344 /* Resolve interface and copy attributes. */
14345 if (ifc->formal && !ifc->formal_ns)
14346 resolve_symbol (ifc);
14347 if (ifc->attr.intrinsic)
14348 gfc_resolve_intrinsic (ifc, &ifc->declared_at);
14349
14350 if (ifc->result)
14351 {
14352 c->ts = ifc->result->ts;
14353 c->attr.allocatable = ifc->result->attr.allocatable;
14354 c->attr.pointer = ifc->result->attr.pointer;
14355 c->attr.dimension = ifc->result->attr.dimension;
14356 c->as = gfc_copy_array_spec (ifc->result->as);
14357 c->attr.class_ok = ifc->result->attr.class_ok;
14358 }
14359 else
14360 {
14361 c->ts = ifc->ts;
14362 c->attr.allocatable = ifc->attr.allocatable;
14363 c->attr.pointer = ifc->attr.pointer;
14364 c->attr.dimension = ifc->attr.dimension;
14365 c->as = gfc_copy_array_spec (ifc->as);
14366 c->attr.class_ok = ifc->attr.class_ok;
14367 }
14368 c->ts.interface = ifc;
14369 c->attr.function = ifc->attr.function;
14370 c->attr.subroutine = ifc->attr.subroutine;
14371
14372 c->attr.pure = ifc->attr.pure;
14373 c->attr.elemental = ifc->attr.elemental;
14374 c->attr.recursive = ifc->attr.recursive;
14375 c->attr.always_explicit = ifc->attr.always_explicit;
14376 c->attr.ext_attr |= ifc->attr.ext_attr;
14377 /* Copy char length. */
14378 if (ifc->ts.type == BT_CHARACTER && ifc->ts.u.cl)
14379 {
14380 gfc_charlen *cl = gfc_new_charlen (sym->ns, ifc->ts.u.cl);
14381 if (cl->length && !cl->resolved
14382 && !gfc_resolve_expr (cl->length))
14383 {
14384 c->tb->error = 1;
14385 return false;
14386 }
14387 c->ts.u.cl = cl;
14388 }
14389 }
14390 }
14391 else if (c->attr.proc_pointer && c->ts.type == BT_UNKNOWN)
14392 {
14393 /* Since PPCs are not implicitly typed, a PPC without an explicit
14394 interface must be a subroutine. */
14395 gfc_add_subroutine (&c->attr, c->name, &c->loc);
14396 }
14397
14398 /* Procedure pointer components: Check PASS arg. */
14399 if (c->attr.proc_pointer && !c->tb->nopass && c->tb->pass_arg_num == 0
14400 && !sym->attr.vtype)
14401 {
14402 gfc_symbol* me_arg;
14403
14404 if (c->tb->pass_arg)
14405 {
14406 gfc_formal_arglist* i;
14407
14408 /* If an explicit passing argument name is given, walk the arg-list
14409 and look for it. */
14410
14411 me_arg = NULL;
14412 c->tb->pass_arg_num = 1;
14413 for (i = c->ts.interface->formal; i; i = i->next)
14414 {
14415 if (!strcmp (i->sym->name, c->tb->pass_arg))
14416 {
14417 me_arg = i->sym;
14418 break;
14419 }
14420 c->tb->pass_arg_num++;
14421 }
14422
14423 if (!me_arg)
14424 {
14425 gfc_error ("Procedure pointer component %qs with PASS(%s) "
14426 "at %L has no argument %qs", c->name,
14427 c->tb->pass_arg, &c->loc, c->tb->pass_arg);
14428 c->tb->error = 1;
14429 return false;
14430 }
14431 }
14432 else
14433 {
14434 /* Otherwise, take the first one; there should in fact be at least
14435 one. */
14436 c->tb->pass_arg_num = 1;
14437 if (!c->ts.interface->formal)
14438 {
14439 gfc_error ("Procedure pointer component %qs with PASS at %L "
14440 "must have at least one argument",
14441 c->name, &c->loc);
14442 c->tb->error = 1;
14443 return false;
14444 }
14445 me_arg = c->ts.interface->formal->sym;
14446 }
14447
14448 /* Now check that the argument-type matches. */
14449 gcc_assert (me_arg);
14450 if ((me_arg->ts.type != BT_DERIVED && me_arg->ts.type != BT_CLASS)
14451 || (me_arg->ts.type == BT_DERIVED && me_arg->ts.u.derived != sym)
14452 || (me_arg->ts.type == BT_CLASS
14453 && CLASS_DATA (me_arg)->ts.u.derived != sym))
14454 {
14455 gfc_error ("Argument %qs of %qs with PASS(%s) at %L must be of"
14456 " the derived type %qs", me_arg->name, c->name,
14457 me_arg->name, &c->loc, sym->name);
14458 c->tb->error = 1;
14459 return false;
14460 }
14461
14462 /* Check for F03:C453. */
14463 if (CLASS_DATA (me_arg)->attr.dimension)
14464 {
14465 gfc_error ("Argument %qs of %qs with PASS(%s) at %L "
14466 "must be scalar", me_arg->name, c->name, me_arg->name,
14467 &c->loc);
14468 c->tb->error = 1;
14469 return false;
14470 }
14471
14472 if (CLASS_DATA (me_arg)->attr.class_pointer)
14473 {
14474 gfc_error ("Argument %qs of %qs with PASS(%s) at %L "
14475 "may not have the POINTER attribute", me_arg->name,
14476 c->name, me_arg->name, &c->loc);
14477 c->tb->error = 1;
14478 return false;
14479 }
14480
14481 if (CLASS_DATA (me_arg)->attr.allocatable)
14482 {
14483 gfc_error ("Argument %qs of %qs with PASS(%s) at %L "
14484 "may not be ALLOCATABLE", me_arg->name, c->name,
14485 me_arg->name, &c->loc);
14486 c->tb->error = 1;
14487 return false;
14488 }
14489
14490 if (gfc_type_is_extensible (sym) && me_arg->ts.type != BT_CLASS)
14491 {
14492 gfc_error ("Non-polymorphic passed-object dummy argument of %qs"
14493 " at %L", c->name, &c->loc);
14494 return false;
14495 }
14496
14497 }
14498
14499 /* Check type-spec if this is not the parent-type component. */
14500 if (((sym->attr.is_class
14501 && (!sym->components->ts.u.derived->attr.extension
14502 || c != sym->components->ts.u.derived->components))
14503 || (!sym->attr.is_class
14504 && (!sym->attr.extension || c != sym->components)))
14505 && !sym->attr.vtype
14506 && !resolve_typespec_used (&c->ts, &c->loc, c->name))
14507 return false;
14508
14509 super_type = gfc_get_derived_super_type (sym);
14510
14511 /* If this type is an extension, set the accessibility of the parent
14512 component. */
14513 if (super_type
14514 && ((sym->attr.is_class
14515 && c == sym->components->ts.u.derived->components)
14516 || (!sym->attr.is_class && c == sym->components))
14517 && strcmp (super_type->name, c->name) == 0)
14518 c->attr.access = super_type->attr.access;
14519
14520 /* If this type is an extension, see if this component has the same name
14521 as an inherited type-bound procedure. */
14522 if (super_type && !sym->attr.is_class
14523 && gfc_find_typebound_proc (super_type, NULL, c->name, true, NULL))
14524 {
14525 gfc_error ("Component %qs of %qs at %L has the same name as an"
14526 " inherited type-bound procedure",
14527 c->name, sym->name, &c->loc);
14528 return false;
14529 }
14530
14531 if (c->ts.type == BT_CHARACTER && !c->attr.proc_pointer
14532 && !c->ts.deferred)
14533 {
14534 if (c->ts.u.cl->length == NULL
14535 || (!resolve_charlen(c->ts.u.cl))
14536 || !gfc_is_constant_expr (c->ts.u.cl->length))
14537 {
14538 gfc_error ("Character length of component %qs needs to "
14539 "be a constant specification expression at %L",
14540 c->name,
14541 c->ts.u.cl->length ? &c->ts.u.cl->length->where : &c->loc);
14542 return false;
14543 }
14544 }
14545
14546 if (c->ts.type == BT_CHARACTER && c->ts.deferred
14547 && !c->attr.pointer && !c->attr.allocatable)
14548 {
14549 gfc_error ("Character component %qs of %qs at %L with deferred "
14550 "length must be a POINTER or ALLOCATABLE",
14551 c->name, sym->name, &c->loc);
14552 return false;
14553 }
14554
14555 /* Add the hidden deferred length field. */
14556 if (c->ts.type == BT_CHARACTER
14557 && (c->ts.deferred || c->attr.pdt_string)
14558 && !c->attr.function
14559 && !sym->attr.is_class)
14560 {
14561 char name[GFC_MAX_SYMBOL_LEN+9];
14562 gfc_component *strlen;
14563 sprintf (name, "_%s_length", c->name);
14564 strlen = gfc_find_component (sym, name, true, true, NULL);
14565 if (strlen == NULL)
14566 {
14567 if (!gfc_add_component (sym, name, &strlen))
14568 return false;
14569 strlen->ts.type = BT_INTEGER;
14570 strlen->ts.kind = gfc_charlen_int_kind;
14571 strlen->attr.access = ACCESS_PRIVATE;
14572 strlen->attr.artificial = 1;
14573 }
14574 }
14575
14576 if (c->ts.type == BT_DERIVED
14577 && sym->component_access != ACCESS_PRIVATE
14578 && gfc_check_symbol_access (sym)
14579 && !is_sym_host_assoc (c->ts.u.derived, sym->ns)
14580 && !c->ts.u.derived->attr.use_assoc
14581 && !gfc_check_symbol_access (c->ts.u.derived)
14582 && !gfc_notify_std (GFC_STD_F2003, "the component %qs is a "
14583 "PRIVATE type and cannot be a component of "
14584 "%qs, which is PUBLIC at %L", c->name,
14585 sym->name, &sym->declared_at))
14586 return false;
14587
14588 if ((sym->attr.sequence || sym->attr.is_bind_c) && c->ts.type == BT_CLASS)
14589 {
14590 gfc_error ("Polymorphic component %s at %L in SEQUENCE or BIND(C) "
14591 "type %s", c->name, &c->loc, sym->name);
14592 return false;
14593 }
14594
14595 if (sym->attr.sequence)
14596 {
14597 if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.sequence == 0)
14598 {
14599 gfc_error ("Component %s of SEQUENCE type declared at %L does "
14600 "not have the SEQUENCE attribute",
14601 c->ts.u.derived->name, &sym->declared_at);
14602 return false;
14603 }
14604 }
14605
14606 if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.generic)
14607 c->ts.u.derived = gfc_find_dt_in_generic (c->ts.u.derived);
14608 else if (c->ts.type == BT_CLASS && c->attr.class_ok
14609 && CLASS_DATA (c)->ts.u.derived->attr.generic)
14610 CLASS_DATA (c)->ts.u.derived
14611 = gfc_find_dt_in_generic (CLASS_DATA (c)->ts.u.derived);
14612
14613 /* If an allocatable component derived type is of the same type as
14614 the enclosing derived type, we need a vtable generating so that
14615 the __deallocate procedure is created. */
14616 if ((c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
14617 && c->ts.u.derived == sym && c->attr.allocatable == 1)
14618 gfc_find_vtab (&c->ts);
14619
14620 /* Ensure that all the derived type components are put on the
14621 derived type list; even in formal namespaces, where derived type
14622 pointer components might not have been declared. */
14623 if (c->ts.type == BT_DERIVED
14624 && c->ts.u.derived
14625 && c->ts.u.derived->components
14626 && c->attr.pointer
14627 && sym != c->ts.u.derived)
14628 add_dt_to_dt_list (c->ts.u.derived);
14629
14630 if (!gfc_resolve_array_spec (c->as,
14631 !(c->attr.pointer || c->attr.proc_pointer
14632 || c->attr.allocatable)))
14633 return false;
14634
14635 if (c->initializer && !sym->attr.vtype
14636 && !c->attr.pdt_kind && !c->attr.pdt_len
14637 && !gfc_check_assign_symbol (sym, c, c->initializer))
14638 return false;
14639
14640 return true;
14641 }
14642
14643
14644 /* Be nice about the locus for a structure expression - show the locus of the
14645 first non-null sub-expression if we can. */
14646
14647 static locus *
14648 cons_where (gfc_expr *struct_expr)
14649 {
14650 gfc_constructor *cons;
14651
14652 gcc_assert (struct_expr && struct_expr->expr_type == EXPR_STRUCTURE);
14653
14654 cons = gfc_constructor_first (struct_expr->value.constructor);
14655 for (; cons; cons = gfc_constructor_next (cons))
14656 {
14657 if (cons->expr && cons->expr->expr_type != EXPR_NULL)
14658 return &cons->expr->where;
14659 }
14660
14661 return &struct_expr->where;
14662 }
14663
14664 /* Resolve the components of a structure type. Much less work than derived
14665 types. */
14666
14667 static bool
14668 resolve_fl_struct (gfc_symbol *sym)
14669 {
14670 gfc_component *c;
14671 gfc_expr *init = NULL;
14672 bool success;
14673
14674 /* Make sure UNIONs do not have overlapping initializers. */
14675 if (sym->attr.flavor == FL_UNION)
14676 {
14677 for (c = sym->components; c; c = c->next)
14678 {
14679 if (init && c->initializer)
14680 {
14681 gfc_error ("Conflicting initializers in union at %L and %L",
14682 cons_where (init), cons_where (c->initializer));
14683 gfc_free_expr (c->initializer);
14684 c->initializer = NULL;
14685 }
14686 if (init == NULL)
14687 init = c->initializer;
14688 }
14689 }
14690
14691 success = true;
14692 for (c = sym->components; c; c = c->next)
14693 if (!resolve_component (c, sym))
14694 success = false;
14695
14696 if (!success)
14697 return false;
14698
14699 if (sym->components)
14700 add_dt_to_dt_list (sym);
14701
14702 return true;
14703 }
14704
14705
14706 /* Resolve the components of a derived type. This does not have to wait until
14707 resolution stage, but can be done as soon as the dt declaration has been
14708 parsed. */
14709
14710 static bool
14711 resolve_fl_derived0 (gfc_symbol *sym)
14712 {
14713 gfc_symbol* super_type;
14714 gfc_component *c;
14715 gfc_formal_arglist *f;
14716 bool success;
14717
14718 if (sym->attr.unlimited_polymorphic)
14719 return true;
14720
14721 super_type = gfc_get_derived_super_type (sym);
14722
14723 /* F2008, C432. */
14724 if (super_type && sym->attr.coarray_comp && !super_type->attr.coarray_comp)
14725 {
14726 gfc_error ("As extending type %qs at %L has a coarray component, "
14727 "parent type %qs shall also have one", sym->name,
14728 &sym->declared_at, super_type->name);
14729 return false;
14730 }
14731
14732 /* Ensure the extended type gets resolved before we do. */
14733 if (super_type && !resolve_fl_derived0 (super_type))
14734 return false;
14735
14736 /* An ABSTRACT type must be extensible. */
14737 if (sym->attr.abstract && !gfc_type_is_extensible (sym))
14738 {
14739 gfc_error ("Non-extensible derived-type %qs at %L must not be ABSTRACT",
14740 sym->name, &sym->declared_at);
14741 return false;
14742 }
14743
14744 c = (sym->attr.is_class) ? sym->components->ts.u.derived->components
14745 : sym->components;
14746
14747 success = true;
14748 for ( ; c != NULL; c = c->next)
14749 if (!resolve_component (c, sym))
14750 success = false;
14751
14752 if (!success)
14753 return false;
14754
14755 /* Now add the caf token field, where needed. */
14756 if (flag_coarray != GFC_FCOARRAY_NONE
14757 && !sym->attr.is_class && !sym->attr.vtype)
14758 {
14759 for (c = sym->components; c; c = c->next)
14760 if (!c->attr.dimension && !c->attr.codimension
14761 && (c->attr.allocatable || c->attr.pointer))
14762 {
14763 char name[GFC_MAX_SYMBOL_LEN+9];
14764 gfc_component *token;
14765 sprintf (name, "_caf_%s", c->name);
14766 token = gfc_find_component (sym, name, true, true, NULL);
14767 if (token == NULL)
14768 {
14769 if (!gfc_add_component (sym, name, &token))
14770 return false;
14771 token->ts.type = BT_VOID;
14772 token->ts.kind = gfc_default_integer_kind;
14773 token->attr.access = ACCESS_PRIVATE;
14774 token->attr.artificial = 1;
14775 token->attr.caf_token = 1;
14776 }
14777 }
14778 }
14779
14780 check_defined_assignments (sym);
14781
14782 if (!sym->attr.defined_assign_comp && super_type)
14783 sym->attr.defined_assign_comp
14784 = super_type->attr.defined_assign_comp;
14785
14786 /* If this is a non-ABSTRACT type extending an ABSTRACT one, ensure that
14787 all DEFERRED bindings are overridden. */
14788 if (super_type && super_type->attr.abstract && !sym->attr.abstract
14789 && !sym->attr.is_class
14790 && !ensure_not_abstract (sym, super_type))
14791 return false;
14792
14793 /* Check that there is a component for every PDT parameter. */
14794 if (sym->attr.pdt_template)
14795 {
14796 for (f = sym->formal; f; f = f->next)
14797 {
14798 if (!f->sym)
14799 continue;
14800 c = gfc_find_component (sym, f->sym->name, true, true, NULL);
14801 if (c == NULL)
14802 {
14803 gfc_error ("Parameterized type %qs does not have a component "
14804 "corresponding to parameter %qs at %L", sym->name,
14805 f->sym->name, &sym->declared_at);
14806 break;
14807 }
14808 }
14809 }
14810
14811 /* Add derived type to the derived type list. */
14812 add_dt_to_dt_list (sym);
14813
14814 return true;
14815 }
14816
14817
14818 /* The following procedure does the full resolution of a derived type,
14819 including resolution of all type-bound procedures (if present). In contrast
14820 to 'resolve_fl_derived0' this can only be done after the module has been
14821 parsed completely. */
14822
14823 static bool
14824 resolve_fl_derived (gfc_symbol *sym)
14825 {
14826 gfc_symbol *gen_dt = NULL;
14827
14828 if (sym->attr.unlimited_polymorphic)
14829 return true;
14830
14831 if (!sym->attr.is_class)
14832 gfc_find_symbol (sym->name, sym->ns, 0, &gen_dt);
14833 if (gen_dt && gen_dt->generic && gen_dt->generic->next
14834 && (!gen_dt->generic->sym->attr.use_assoc
14835 || gen_dt->generic->sym->module != gen_dt->generic->next->sym->module)
14836 && !gfc_notify_std (GFC_STD_F2003, "Generic name %qs of function "
14837 "%qs at %L being the same name as derived "
14838 "type at %L", sym->name,
14839 gen_dt->generic->sym == sym
14840 ? gen_dt->generic->next->sym->name
14841 : gen_dt->generic->sym->name,
14842 gen_dt->generic->sym == sym
14843 ? &gen_dt->generic->next->sym->declared_at
14844 : &gen_dt->generic->sym->declared_at,
14845 &sym->declared_at))
14846 return false;
14847
14848 if (sym->components == NULL && !sym->attr.zero_comp && !sym->attr.use_assoc)
14849 {
14850 gfc_error ("Derived type %qs at %L has not been declared",
14851 sym->name, &sym->declared_at);
14852 return false;
14853 }
14854
14855 /* Resolve the finalizer procedures. */
14856 if (!gfc_resolve_finalizers (sym, NULL))
14857 return false;
14858
14859 if (sym->attr.is_class && sym->ts.u.derived == NULL)
14860 {
14861 /* Fix up incomplete CLASS symbols. */
14862 gfc_component *data = gfc_find_component (sym, "_data", true, true, NULL);
14863 gfc_component *vptr = gfc_find_component (sym, "_vptr", true, true, NULL);
14864
14865 /* Nothing more to do for unlimited polymorphic entities. */
14866 if (data->ts.u.derived->attr.unlimited_polymorphic)
14867 return true;
14868 else if (vptr->ts.u.derived == NULL)
14869 {
14870 gfc_symbol *vtab = gfc_find_derived_vtab (data->ts.u.derived);
14871 gcc_assert (vtab);
14872 vptr->ts.u.derived = vtab->ts.u.derived;
14873 if (!resolve_fl_derived0 (vptr->ts.u.derived))
14874 return false;
14875 }
14876 }
14877
14878 if (!resolve_fl_derived0 (sym))
14879 return false;
14880
14881 /* Resolve the type-bound procedures. */
14882 if (!resolve_typebound_procedures (sym))
14883 return false;
14884
14885 /* Generate module vtables subject to their accessibility and their not
14886 being vtables or pdt templates. If this is not done class declarations
14887 in external procedures wind up with their own version and so SELECT TYPE
14888 fails because the vptrs do not have the same address. */
14889 if (gfc_option.allow_std & GFC_STD_F2003
14890 && sym->ns->proc_name
14891 && sym->ns->proc_name->attr.flavor == FL_MODULE
14892 && sym->attr.access != ACCESS_PRIVATE
14893 && !(sym->attr.use_assoc || sym->attr.vtype || sym->attr.pdt_template))
14894 {
14895 gfc_symbol *vtab = gfc_find_derived_vtab (sym);
14896 gfc_set_sym_referenced (vtab);
14897 }
14898
14899 return true;
14900 }
14901
14902
14903 static bool
14904 resolve_fl_namelist (gfc_symbol *sym)
14905 {
14906 gfc_namelist *nl;
14907 gfc_symbol *nlsym;
14908
14909 for (nl = sym->namelist; nl; nl = nl->next)
14910 {
14911 /* Check again, the check in match only works if NAMELIST comes
14912 after the decl. */
14913 if (nl->sym->as && nl->sym->as->type == AS_ASSUMED_SIZE)
14914 {
14915 gfc_error ("Assumed size array %qs in namelist %qs at %L is not "
14916 "allowed", nl->sym->name, sym->name, &sym->declared_at);
14917 return false;
14918 }
14919
14920 if (nl->sym->as && nl->sym->as->type == AS_ASSUMED_SHAPE
14921 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST array object %qs "
14922 "with assumed shape in namelist %qs at %L",
14923 nl->sym->name, sym->name, &sym->declared_at))
14924 return false;
14925
14926 if (is_non_constant_shape_array (nl->sym)
14927 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST array object %qs "
14928 "with nonconstant shape in namelist %qs at %L",
14929 nl->sym->name, sym->name, &sym->declared_at))
14930 return false;
14931
14932 if (nl->sym->ts.type == BT_CHARACTER
14933 && (nl->sym->ts.u.cl->length == NULL
14934 || !gfc_is_constant_expr (nl->sym->ts.u.cl->length))
14935 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST object %qs with "
14936 "nonconstant character length in "
14937 "namelist %qs at %L", nl->sym->name,
14938 sym->name, &sym->declared_at))
14939 return false;
14940
14941 }
14942
14943 /* Reject PRIVATE objects in a PUBLIC namelist. */
14944 if (gfc_check_symbol_access (sym))
14945 {
14946 for (nl = sym->namelist; nl; nl = nl->next)
14947 {
14948 if (!nl->sym->attr.use_assoc
14949 && !is_sym_host_assoc (nl->sym, sym->ns)
14950 && !gfc_check_symbol_access (nl->sym))
14951 {
14952 gfc_error ("NAMELIST object %qs was declared PRIVATE and "
14953 "cannot be member of PUBLIC namelist %qs at %L",
14954 nl->sym->name, sym->name, &sym->declared_at);
14955 return false;
14956 }
14957
14958 if (nl->sym->ts.type == BT_DERIVED
14959 && (nl->sym->ts.u.derived->attr.alloc_comp
14960 || nl->sym->ts.u.derived->attr.pointer_comp))
14961 {
14962 if (!gfc_notify_std (GFC_STD_F2003, "NAMELIST object %qs in "
14963 "namelist %qs at %L with ALLOCATABLE "
14964 "or POINTER components", nl->sym->name,
14965 sym->name, &sym->declared_at))
14966 return false;
14967 return true;
14968 }
14969
14970 /* Types with private components that came here by USE-association. */
14971 if (nl->sym->ts.type == BT_DERIVED
14972 && derived_inaccessible (nl->sym->ts.u.derived))
14973 {
14974 gfc_error ("NAMELIST object %qs has use-associated PRIVATE "
14975 "components and cannot be member of namelist %qs at %L",
14976 nl->sym->name, sym->name, &sym->declared_at);
14977 return false;
14978 }
14979
14980 /* Types with private components that are defined in the same module. */
14981 if (nl->sym->ts.type == BT_DERIVED
14982 && !is_sym_host_assoc (nl->sym->ts.u.derived, sym->ns)
14983 && nl->sym->ts.u.derived->attr.private_comp)
14984 {
14985 gfc_error ("NAMELIST object %qs has PRIVATE components and "
14986 "cannot be a member of PUBLIC namelist %qs at %L",
14987 nl->sym->name, sym->name, &sym->declared_at);
14988 return false;
14989 }
14990 }
14991 }
14992
14993
14994 /* 14.1.2 A module or internal procedure represent local entities
14995 of the same type as a namelist member and so are not allowed. */
14996 for (nl = sym->namelist; nl; nl = nl->next)
14997 {
14998 if (nl->sym->ts.kind != 0 && nl->sym->attr.flavor == FL_VARIABLE)
14999 continue;
15000
15001 if (nl->sym->attr.function && nl->sym == nl->sym->result)
15002 if ((nl->sym == sym->ns->proc_name)
15003 ||
15004 (sym->ns->parent && nl->sym == sym->ns->parent->proc_name))
15005 continue;
15006
15007 nlsym = NULL;
15008 if (nl->sym->name)
15009 gfc_find_symbol (nl->sym->name, sym->ns, 1, &nlsym);
15010 if (nlsym && nlsym->attr.flavor == FL_PROCEDURE)
15011 {
15012 gfc_error ("PROCEDURE attribute conflicts with NAMELIST "
15013 "attribute in %qs at %L", nlsym->name,
15014 &sym->declared_at);
15015 return false;
15016 }
15017 }
15018
15019 return true;
15020 }
15021
15022
15023 static bool
15024 resolve_fl_parameter (gfc_symbol *sym)
15025 {
15026 /* A parameter array's shape needs to be constant. */
15027 if (sym->as != NULL
15028 && (sym->as->type == AS_DEFERRED
15029 || is_non_constant_shape_array (sym)))
15030 {
15031 gfc_error ("Parameter array %qs at %L cannot be automatic "
15032 "or of deferred shape", sym->name, &sym->declared_at);
15033 return false;
15034 }
15035
15036 /* Constraints on deferred type parameter. */
15037 if (!deferred_requirements (sym))
15038 return false;
15039
15040 /* Make sure a parameter that has been implicitly typed still
15041 matches the implicit type, since PARAMETER statements can precede
15042 IMPLICIT statements. */
15043 if (sym->attr.implicit_type
15044 && !gfc_compare_types (&sym->ts, gfc_get_default_type (sym->name,
15045 sym->ns)))
15046 {
15047 gfc_error ("Implicitly typed PARAMETER %qs at %L doesn't match a "
15048 "later IMPLICIT type", sym->name, &sym->declared_at);
15049 return false;
15050 }
15051
15052 /* Make sure the types of derived parameters are consistent. This
15053 type checking is deferred until resolution because the type may
15054 refer to a derived type from the host. */
15055 if (sym->ts.type == BT_DERIVED
15056 && !gfc_compare_types (&sym->ts, &sym->value->ts))
15057 {
15058 gfc_error ("Incompatible derived type in PARAMETER at %L",
15059 &sym->value->where);
15060 return false;
15061 }
15062
15063 /* F03:C509,C514. */
15064 if (sym->ts.type == BT_CLASS)
15065 {
15066 gfc_error ("CLASS variable %qs at %L cannot have the PARAMETER attribute",
15067 sym->name, &sym->declared_at);
15068 return false;
15069 }
15070
15071 return true;
15072 }
15073
15074
15075 /* Called by resolve_symbol to check PDTs. */
15076
15077 static void
15078 resolve_pdt (gfc_symbol* sym)
15079 {
15080 gfc_symbol *derived = NULL;
15081 gfc_actual_arglist *param;
15082 gfc_component *c;
15083 bool const_len_exprs = true;
15084 bool assumed_len_exprs = false;
15085 symbol_attribute *attr;
15086
15087 if (sym->ts.type == BT_DERIVED)
15088 {
15089 derived = sym->ts.u.derived;
15090 attr = &(sym->attr);
15091 }
15092 else if (sym->ts.type == BT_CLASS)
15093 {
15094 derived = CLASS_DATA (sym)->ts.u.derived;
15095 attr = &(CLASS_DATA (sym)->attr);
15096 }
15097 else
15098 gcc_unreachable ();
15099
15100 gcc_assert (derived->attr.pdt_type);
15101
15102 for (param = sym->param_list; param; param = param->next)
15103 {
15104 c = gfc_find_component (derived, param->name, false, true, NULL);
15105 gcc_assert (c);
15106 if (c->attr.pdt_kind)
15107 continue;
15108
15109 if (param->expr && !gfc_is_constant_expr (param->expr)
15110 && c->attr.pdt_len)
15111 const_len_exprs = false;
15112 else if (param->spec_type == SPEC_ASSUMED)
15113 assumed_len_exprs = true;
15114
15115 if (param->spec_type == SPEC_DEFERRED
15116 && !attr->allocatable && !attr->pointer)
15117 gfc_error ("The object %qs at %L has a deferred LEN "
15118 "parameter %qs and is neither allocatable "
15119 "nor a pointer", sym->name, &sym->declared_at,
15120 param->name);
15121
15122 }
15123
15124 if (!const_len_exprs
15125 && (sym->ns->proc_name->attr.is_main_program
15126 || sym->ns->proc_name->attr.flavor == FL_MODULE
15127 || sym->attr.save != SAVE_NONE))
15128 gfc_error ("The AUTOMATIC object %qs at %L must not have the "
15129 "SAVE attribute or be a variable declared in the "
15130 "main program, a module or a submodule(F08/C513)",
15131 sym->name, &sym->declared_at);
15132
15133 if (assumed_len_exprs && !(sym->attr.dummy
15134 || sym->attr.select_type_temporary || sym->attr.associate_var))
15135 gfc_error ("The object %qs at %L with ASSUMED type parameters "
15136 "must be a dummy or a SELECT TYPE selector(F08/4.2)",
15137 sym->name, &sym->declared_at);
15138 }
15139
15140
15141 /* Do anything necessary to resolve a symbol. Right now, we just
15142 assume that an otherwise unknown symbol is a variable. This sort
15143 of thing commonly happens for symbols in module. */
15144
15145 static void
15146 resolve_symbol (gfc_symbol *sym)
15147 {
15148 int check_constant, mp_flag;
15149 gfc_symtree *symtree;
15150 gfc_symtree *this_symtree;
15151 gfc_namespace *ns;
15152 gfc_component *c;
15153 symbol_attribute class_attr;
15154 gfc_array_spec *as;
15155 bool saved_specification_expr;
15156
15157 if (sym->resolved)
15158 return;
15159 sym->resolved = 1;
15160
15161 /* No symbol will ever have union type; only components can be unions.
15162 Union type declaration symbols have type BT_UNKNOWN but flavor FL_UNION
15163 (just like derived type declaration symbols have flavor FL_DERIVED). */
15164 gcc_assert (sym->ts.type != BT_UNION);
15165
15166 /* Coarrayed polymorphic objects with allocatable or pointer components are
15167 yet unsupported for -fcoarray=lib. */
15168 if (flag_coarray == GFC_FCOARRAY_LIB && sym->ts.type == BT_CLASS
15169 && sym->ts.u.derived && CLASS_DATA (sym)
15170 && CLASS_DATA (sym)->attr.codimension
15171 && (CLASS_DATA (sym)->ts.u.derived->attr.alloc_comp
15172 || CLASS_DATA (sym)->ts.u.derived->attr.pointer_comp))
15173 {
15174 gfc_error ("Sorry, allocatable/pointer components in polymorphic (CLASS) "
15175 "type coarrays at %L are unsupported", &sym->declared_at);
15176 return;
15177 }
15178
15179 if (sym->attr.artificial)
15180 return;
15181
15182 if (sym->attr.unlimited_polymorphic)
15183 return;
15184
15185 if (sym->attr.flavor == FL_UNKNOWN
15186 || (sym->attr.flavor == FL_PROCEDURE && !sym->attr.intrinsic
15187 && !sym->attr.generic && !sym->attr.external
15188 && sym->attr.if_source == IFSRC_UNKNOWN
15189 && sym->ts.type == BT_UNKNOWN))
15190 {
15191
15192 /* If we find that a flavorless symbol is an interface in one of the
15193 parent namespaces, find its symtree in this namespace, free the
15194 symbol and set the symtree to point to the interface symbol. */
15195 for (ns = gfc_current_ns->parent; ns; ns = ns->parent)
15196 {
15197 symtree = gfc_find_symtree (ns->sym_root, sym->name);
15198 if (symtree && (symtree->n.sym->generic ||
15199 (symtree->n.sym->attr.flavor == FL_PROCEDURE
15200 && sym->ns->construct_entities)))
15201 {
15202 this_symtree = gfc_find_symtree (gfc_current_ns->sym_root,
15203 sym->name);
15204 if (this_symtree->n.sym == sym)
15205 {
15206 symtree->n.sym->refs++;
15207 gfc_release_symbol (sym);
15208 this_symtree->n.sym = symtree->n.sym;
15209 return;
15210 }
15211 }
15212 }
15213
15214 /* Otherwise give it a flavor according to such attributes as
15215 it has. */
15216 if (sym->attr.flavor == FL_UNKNOWN && sym->attr.external == 0
15217 && sym->attr.intrinsic == 0)
15218 sym->attr.flavor = FL_VARIABLE;
15219 else if (sym->attr.flavor == FL_UNKNOWN)
15220 {
15221 sym->attr.flavor = FL_PROCEDURE;
15222 if (sym->attr.dimension)
15223 sym->attr.function = 1;
15224 }
15225 }
15226
15227 if (sym->attr.external && sym->ts.type != BT_UNKNOWN && !sym->attr.function)
15228 gfc_add_function (&sym->attr, sym->name, &sym->declared_at);
15229
15230 if (sym->attr.procedure && sym->attr.if_source != IFSRC_DECL
15231 && !resolve_procedure_interface (sym))
15232 return;
15233
15234 if (sym->attr.is_protected && !sym->attr.proc_pointer
15235 && (sym->attr.procedure || sym->attr.external))
15236 {
15237 if (sym->attr.external)
15238 gfc_error ("PROTECTED attribute conflicts with EXTERNAL attribute "
15239 "at %L", &sym->declared_at);
15240 else
15241 gfc_error ("PROCEDURE attribute conflicts with PROTECTED attribute "
15242 "at %L", &sym->declared_at);
15243
15244 return;
15245 }
15246
15247 if (sym->attr.flavor == FL_DERIVED && !resolve_fl_derived (sym))
15248 return;
15249
15250 else if ((sym->attr.flavor == FL_STRUCT || sym->attr.flavor == FL_UNION)
15251 && !resolve_fl_struct (sym))
15252 return;
15253
15254 /* Symbols that are module procedures with results (functions) have
15255 the types and array specification copied for type checking in
15256 procedures that call them, as well as for saving to a module
15257 file. These symbols can't stand the scrutiny that their results
15258 can. */
15259 mp_flag = (sym->result != NULL && sym->result != sym);
15260
15261 /* Make sure that the intrinsic is consistent with its internal
15262 representation. This needs to be done before assigning a default
15263 type to avoid spurious warnings. */
15264 if (sym->attr.flavor != FL_MODULE && sym->attr.intrinsic
15265 && !gfc_resolve_intrinsic (sym, &sym->declared_at))
15266 return;
15267
15268 /* Resolve associate names. */
15269 if (sym->assoc)
15270 resolve_assoc_var (sym, true);
15271
15272 /* Assign default type to symbols that need one and don't have one. */
15273 if (sym->ts.type == BT_UNKNOWN)
15274 {
15275 if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER)
15276 {
15277 gfc_set_default_type (sym, 1, NULL);
15278 }
15279
15280 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.external
15281 && !sym->attr.function && !sym->attr.subroutine
15282 && gfc_get_default_type (sym->name, sym->ns)->type == BT_UNKNOWN)
15283 gfc_add_subroutine (&sym->attr, sym->name, &sym->declared_at);
15284
15285 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.function)
15286 {
15287 /* The specific case of an external procedure should emit an error
15288 in the case that there is no implicit type. */
15289 if (!mp_flag)
15290 {
15291 if (!sym->attr.mixed_entry_master)
15292 gfc_set_default_type (sym, sym->attr.external, NULL);
15293 }
15294 else
15295 {
15296 /* Result may be in another namespace. */
15297 resolve_symbol (sym->result);
15298
15299 if (!sym->result->attr.proc_pointer)
15300 {
15301 sym->ts = sym->result->ts;
15302 sym->as = gfc_copy_array_spec (sym->result->as);
15303 sym->attr.dimension = sym->result->attr.dimension;
15304 sym->attr.pointer = sym->result->attr.pointer;
15305 sym->attr.allocatable = sym->result->attr.allocatable;
15306 sym->attr.contiguous = sym->result->attr.contiguous;
15307 }
15308 }
15309 }
15310 }
15311 else if (mp_flag && sym->attr.flavor == FL_PROCEDURE && sym->attr.function)
15312 {
15313 bool saved_specification_expr = specification_expr;
15314 specification_expr = true;
15315 gfc_resolve_array_spec (sym->result->as, false);
15316 specification_expr = saved_specification_expr;
15317 }
15318
15319 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
15320 {
15321 as = CLASS_DATA (sym)->as;
15322 class_attr = CLASS_DATA (sym)->attr;
15323 class_attr.pointer = class_attr.class_pointer;
15324 }
15325 else
15326 {
15327 class_attr = sym->attr;
15328 as = sym->as;
15329 }
15330
15331 /* F2008, C530. */
15332 if (sym->attr.contiguous
15333 && (!class_attr.dimension
15334 || (as->type != AS_ASSUMED_SHAPE && as->type != AS_ASSUMED_RANK
15335 && !class_attr.pointer)))
15336 {
15337 gfc_error ("%qs at %L has the CONTIGUOUS attribute but is not an "
15338 "array pointer or an assumed-shape or assumed-rank array",
15339 sym->name, &sym->declared_at);
15340 return;
15341 }
15342
15343 /* Assumed size arrays and assumed shape arrays must be dummy
15344 arguments. Array-spec's of implied-shape should have been resolved to
15345 AS_EXPLICIT already. */
15346
15347 if (as)
15348 {
15349 /* If AS_IMPLIED_SHAPE makes it to here, it must be a bad
15350 specification expression. */
15351 if (as->type == AS_IMPLIED_SHAPE)
15352 {
15353 int i;
15354 for (i=0; i<as->rank; i++)
15355 {
15356 if (as->lower[i] != NULL && as->upper[i] == NULL)
15357 {
15358 gfc_error ("Bad specification for assumed size array at %L",
15359 &as->lower[i]->where);
15360 return;
15361 }
15362 }
15363 gcc_unreachable();
15364 }
15365
15366 if (((as->type == AS_ASSUMED_SIZE && !as->cp_was_assumed)
15367 || as->type == AS_ASSUMED_SHAPE)
15368 && !sym->attr.dummy && !sym->attr.select_type_temporary)
15369 {
15370 if (as->type == AS_ASSUMED_SIZE)
15371 gfc_error ("Assumed size array at %L must be a dummy argument",
15372 &sym->declared_at);
15373 else
15374 gfc_error ("Assumed shape array at %L must be a dummy argument",
15375 &sym->declared_at);
15376 return;
15377 }
15378 /* TS 29113, C535a. */
15379 if (as->type == AS_ASSUMED_RANK && !sym->attr.dummy
15380 && !sym->attr.select_type_temporary
15381 && !(cs_base && cs_base->current
15382 && cs_base->current->op == EXEC_SELECT_RANK))
15383 {
15384 gfc_error ("Assumed-rank array at %L must be a dummy argument",
15385 &sym->declared_at);
15386 return;
15387 }
15388 if (as->type == AS_ASSUMED_RANK
15389 && (sym->attr.codimension || sym->attr.value))
15390 {
15391 gfc_error ("Assumed-rank array at %L may not have the VALUE or "
15392 "CODIMENSION attribute", &sym->declared_at);
15393 return;
15394 }
15395 }
15396
15397 /* Make sure symbols with known intent or optional are really dummy
15398 variable. Because of ENTRY statement, this has to be deferred
15399 until resolution time. */
15400
15401 if (!sym->attr.dummy
15402 && (sym->attr.optional || sym->attr.intent != INTENT_UNKNOWN))
15403 {
15404 gfc_error ("Symbol at %L is not a DUMMY variable", &sym->declared_at);
15405 return;
15406 }
15407
15408 if (sym->attr.value && !sym->attr.dummy)
15409 {
15410 gfc_error ("%qs at %L cannot have the VALUE attribute because "
15411 "it is not a dummy argument", sym->name, &sym->declared_at);
15412 return;
15413 }
15414
15415 if (sym->attr.value && sym->ts.type == BT_CHARACTER)
15416 {
15417 gfc_charlen *cl = sym->ts.u.cl;
15418 if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
15419 {
15420 gfc_error ("Character dummy variable %qs at %L with VALUE "
15421 "attribute must have constant length",
15422 sym->name, &sym->declared_at);
15423 return;
15424 }
15425
15426 if (sym->ts.is_c_interop
15427 && mpz_cmp_si (cl->length->value.integer, 1) != 0)
15428 {
15429 gfc_error ("C interoperable character dummy variable %qs at %L "
15430 "with VALUE attribute must have length one",
15431 sym->name, &sym->declared_at);
15432 return;
15433 }
15434 }
15435
15436 if (sym->ts.type == BT_DERIVED && !sym->attr.is_iso_c
15437 && sym->ts.u.derived->attr.generic)
15438 {
15439 sym->ts.u.derived = gfc_find_dt_in_generic (sym->ts.u.derived);
15440 if (!sym->ts.u.derived)
15441 {
15442 gfc_error ("The derived type %qs at %L is of type %qs, "
15443 "which has not been defined", sym->name,
15444 &sym->declared_at, sym->ts.u.derived->name);
15445 sym->ts.type = BT_UNKNOWN;
15446 return;
15447 }
15448 }
15449
15450 /* Use the same constraints as TYPE(*), except for the type check
15451 and that only scalars and assumed-size arrays are permitted. */
15452 if (sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
15453 {
15454 if (!sym->attr.dummy)
15455 {
15456 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall be "
15457 "a dummy argument", sym->name, &sym->declared_at);
15458 return;
15459 }
15460
15461 if (sym->ts.type != BT_ASSUMED && sym->ts.type != BT_INTEGER
15462 && sym->ts.type != BT_REAL && sym->ts.type != BT_LOGICAL
15463 && sym->ts.type != BT_COMPLEX)
15464 {
15465 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall be "
15466 "of type TYPE(*) or of an numeric intrinsic type",
15467 sym->name, &sym->declared_at);
15468 return;
15469 }
15470
15471 if (sym->attr.allocatable || sym->attr.codimension
15472 || sym->attr.pointer || sym->attr.value)
15473 {
15474 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may not "
15475 "have the ALLOCATABLE, CODIMENSION, POINTER or VALUE "
15476 "attribute", sym->name, &sym->declared_at);
15477 return;
15478 }
15479
15480 if (sym->attr.intent == INTENT_OUT)
15481 {
15482 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may not "
15483 "have the INTENT(OUT) attribute",
15484 sym->name, &sym->declared_at);
15485 return;
15486 }
15487 if (sym->attr.dimension && sym->as->type != AS_ASSUMED_SIZE)
15488 {
15489 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall "
15490 "either be a scalar or an assumed-size array",
15491 sym->name, &sym->declared_at);
15492 return;
15493 }
15494
15495 /* Set the type to TYPE(*) and add a dimension(*) to ensure
15496 NO_ARG_CHECK is correctly handled in trans*.c, e.g. with
15497 packing. */
15498 sym->ts.type = BT_ASSUMED;
15499 sym->as = gfc_get_array_spec ();
15500 sym->as->type = AS_ASSUMED_SIZE;
15501 sym->as->rank = 1;
15502 sym->as->lower[0] = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
15503 }
15504 else if (sym->ts.type == BT_ASSUMED)
15505 {
15506 /* TS 29113, C407a. */
15507 if (!sym->attr.dummy)
15508 {
15509 gfc_error ("Assumed type of variable %s at %L is only permitted "
15510 "for dummy variables", sym->name, &sym->declared_at);
15511 return;
15512 }
15513 if (sym->attr.allocatable || sym->attr.codimension
15514 || sym->attr.pointer || sym->attr.value)
15515 {
15516 gfc_error ("Assumed-type variable %s at %L may not have the "
15517 "ALLOCATABLE, CODIMENSION, POINTER or VALUE attribute",
15518 sym->name, &sym->declared_at);
15519 return;
15520 }
15521 if (sym->attr.intent == INTENT_OUT)
15522 {
15523 gfc_error ("Assumed-type variable %s at %L may not have the "
15524 "INTENT(OUT) attribute",
15525 sym->name, &sym->declared_at);
15526 return;
15527 }
15528 if (sym->attr.dimension && sym->as->type == AS_EXPLICIT)
15529 {
15530 gfc_error ("Assumed-type variable %s at %L shall not be an "
15531 "explicit-shape array", sym->name, &sym->declared_at);
15532 return;
15533 }
15534 }
15535
15536 /* If the symbol is marked as bind(c), that it is declared at module level
15537 scope and verify its type and kind. Do not do the latter for symbols
15538 that are implicitly typed because that is handled in
15539 gfc_set_default_type. Handle dummy arguments and procedure definitions
15540 separately. Also, anything that is use associated is not handled here
15541 but instead is handled in the module it is declared in. Finally, derived
15542 type definitions are allowed to be BIND(C) since that only implies that
15543 they're interoperable, and they are checked fully for interoperability
15544 when a variable is declared of that type. */
15545 if (sym->attr.is_bind_c && sym->attr.use_assoc == 0
15546 && sym->attr.dummy == 0 && sym->attr.flavor != FL_PROCEDURE
15547 && sym->attr.flavor != FL_DERIVED)
15548 {
15549 bool t = true;
15550
15551 /* First, make sure the variable is declared at the
15552 module-level scope (J3/04-007, Section 15.3). */
15553 if (sym->ns->proc_name->attr.flavor != FL_MODULE &&
15554 sym->attr.in_common == 0)
15555 {
15556 gfc_error ("Variable %qs at %L cannot be BIND(C) because it "
15557 "is neither a COMMON block nor declared at the "
15558 "module level scope", sym->name, &(sym->declared_at));
15559 t = false;
15560 }
15561 else if (sym->ts.type == BT_CHARACTER
15562 && (sym->ts.u.cl == NULL || sym->ts.u.cl->length == NULL
15563 || !gfc_is_constant_expr (sym->ts.u.cl->length)
15564 || mpz_cmp_si (sym->ts.u.cl->length->value.integer, 1) != 0))
15565 {
15566 gfc_error ("BIND(C) Variable %qs at %L must have length one",
15567 sym->name, &sym->declared_at);
15568 t = false;
15569 }
15570 else if (sym->common_head != NULL && sym->attr.implicit_type == 0)
15571 {
15572 t = verify_com_block_vars_c_interop (sym->common_head);
15573 }
15574 else if (sym->attr.implicit_type == 0)
15575 {
15576 /* If type() declaration, we need to verify that the components
15577 of the given type are all C interoperable, etc. */
15578 if (sym->ts.type == BT_DERIVED &&
15579 sym->ts.u.derived->attr.is_c_interop != 1)
15580 {
15581 /* Make sure the user marked the derived type as BIND(C). If
15582 not, call the verify routine. This could print an error
15583 for the derived type more than once if multiple variables
15584 of that type are declared. */
15585 if (sym->ts.u.derived->attr.is_bind_c != 1)
15586 verify_bind_c_derived_type (sym->ts.u.derived);
15587 t = false;
15588 }
15589
15590 /* Verify the variable itself as C interoperable if it
15591 is BIND(C). It is not possible for this to succeed if
15592 the verify_bind_c_derived_type failed, so don't have to handle
15593 any error returned by verify_bind_c_derived_type. */
15594 t = verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common,
15595 sym->common_block);
15596 }
15597
15598 if (!t)
15599 {
15600 /* clear the is_bind_c flag to prevent reporting errors more than
15601 once if something failed. */
15602 sym->attr.is_bind_c = 0;
15603 return;
15604 }
15605 }
15606
15607 /* If a derived type symbol has reached this point, without its
15608 type being declared, we have an error. Notice that most
15609 conditions that produce undefined derived types have already
15610 been dealt with. However, the likes of:
15611 implicit type(t) (t) ..... call foo (t) will get us here if
15612 the type is not declared in the scope of the implicit
15613 statement. Change the type to BT_UNKNOWN, both because it is so
15614 and to prevent an ICE. */
15615 if (sym->ts.type == BT_DERIVED && !sym->attr.is_iso_c
15616 && sym->ts.u.derived->components == NULL
15617 && !sym->ts.u.derived->attr.zero_comp)
15618 {
15619 gfc_error ("The derived type %qs at %L is of type %qs, "
15620 "which has not been defined", sym->name,
15621 &sym->declared_at, sym->ts.u.derived->name);
15622 sym->ts.type = BT_UNKNOWN;
15623 return;
15624 }
15625
15626 /* Make sure that the derived type has been resolved and that the
15627 derived type is visible in the symbol's namespace, if it is a
15628 module function and is not PRIVATE. */
15629 if (sym->ts.type == BT_DERIVED
15630 && sym->ts.u.derived->attr.use_assoc
15631 && sym->ns->proc_name
15632 && sym->ns->proc_name->attr.flavor == FL_MODULE
15633 && !resolve_fl_derived (sym->ts.u.derived))
15634 return;
15635
15636 /* Unless the derived-type declaration is use associated, Fortran 95
15637 does not allow public entries of private derived types.
15638 See 4.4.1 (F95) and 4.5.1.1 (F2003); and related interpretation
15639 161 in 95-006r3. */
15640 if (sym->ts.type == BT_DERIVED
15641 && sym->ns->proc_name && sym->ns->proc_name->attr.flavor == FL_MODULE
15642 && !sym->ts.u.derived->attr.use_assoc
15643 && gfc_check_symbol_access (sym)
15644 && !gfc_check_symbol_access (sym->ts.u.derived)
15645 && !gfc_notify_std (GFC_STD_F2003, "PUBLIC %s %qs at %L of PRIVATE "
15646 "derived type %qs",
15647 (sym->attr.flavor == FL_PARAMETER)
15648 ? "parameter" : "variable",
15649 sym->name, &sym->declared_at,
15650 sym->ts.u.derived->name))
15651 return;
15652
15653 /* F2008, C1302. */
15654 if (sym->ts.type == BT_DERIVED
15655 && ((sym->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
15656 && sym->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)
15657 || sym->ts.u.derived->attr.lock_comp)
15658 && !sym->attr.codimension && !sym->ts.u.derived->attr.coarray_comp)
15659 {
15660 gfc_error ("Variable %s at %L of type LOCK_TYPE or with subcomponent of "
15661 "type LOCK_TYPE must be a coarray", sym->name,
15662 &sym->declared_at);
15663 return;
15664 }
15665
15666 /* TS18508, C702/C703. */
15667 if (sym->ts.type == BT_DERIVED
15668 && ((sym->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
15669 && sym->ts.u.derived->intmod_sym_id == ISOFORTRAN_EVENT_TYPE)
15670 || sym->ts.u.derived->attr.event_comp)
15671 && !sym->attr.codimension && !sym->ts.u.derived->attr.coarray_comp)
15672 {
15673 gfc_error ("Variable %s at %L of type EVENT_TYPE or with subcomponent of "
15674 "type EVENT_TYPE must be a coarray", sym->name,
15675 &sym->declared_at);
15676 return;
15677 }
15678
15679 /* An assumed-size array with INTENT(OUT) shall not be of a type for which
15680 default initialization is defined (5.1.2.4.4). */
15681 if (sym->ts.type == BT_DERIVED
15682 && sym->attr.dummy
15683 && sym->attr.intent == INTENT_OUT
15684 && sym->as
15685 && sym->as->type == AS_ASSUMED_SIZE)
15686 {
15687 for (c = sym->ts.u.derived->components; c; c = c->next)
15688 {
15689 if (c->initializer)
15690 {
15691 gfc_error ("The INTENT(OUT) dummy argument %qs at %L is "
15692 "ASSUMED SIZE and so cannot have a default initializer",
15693 sym->name, &sym->declared_at);
15694 return;
15695 }
15696 }
15697 }
15698
15699 /* F2008, C542. */
15700 if (sym->ts.type == BT_DERIVED && sym->attr.dummy
15701 && sym->attr.intent == INTENT_OUT && sym->attr.lock_comp)
15702 {
15703 gfc_error ("Dummy argument %qs at %L of LOCK_TYPE shall not be "
15704 "INTENT(OUT)", sym->name, &sym->declared_at);
15705 return;
15706 }
15707
15708 /* TS18508. */
15709 if (sym->ts.type == BT_DERIVED && sym->attr.dummy
15710 && sym->attr.intent == INTENT_OUT && sym->attr.event_comp)
15711 {
15712 gfc_error ("Dummy argument %qs at %L of EVENT_TYPE shall not be "
15713 "INTENT(OUT)", sym->name, &sym->declared_at);
15714 return;
15715 }
15716
15717 /* F2008, C525. */
15718 if ((((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
15719 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
15720 && CLASS_DATA (sym)->attr.coarray_comp))
15721 || class_attr.codimension)
15722 && (sym->attr.result || sym->result == sym))
15723 {
15724 gfc_error ("Function result %qs at %L shall not be a coarray or have "
15725 "a coarray component", sym->name, &sym->declared_at);
15726 return;
15727 }
15728
15729 /* F2008, C524. */
15730 if (sym->attr.codimension && sym->ts.type == BT_DERIVED
15731 && sym->ts.u.derived->ts.is_iso_c)
15732 {
15733 gfc_error ("Variable %qs at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) "
15734 "shall not be a coarray", sym->name, &sym->declared_at);
15735 return;
15736 }
15737
15738 /* F2008, C525. */
15739 if (((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
15740 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
15741 && CLASS_DATA (sym)->attr.coarray_comp))
15742 && (class_attr.codimension || class_attr.pointer || class_attr.dimension
15743 || class_attr.allocatable))
15744 {
15745 gfc_error ("Variable %qs at %L with coarray component shall be a "
15746 "nonpointer, nonallocatable scalar, which is not a coarray",
15747 sym->name, &sym->declared_at);
15748 return;
15749 }
15750
15751 /* F2008, C526. The function-result case was handled above. */
15752 if (class_attr.codimension
15753 && !(class_attr.allocatable || sym->attr.dummy || sym->attr.save
15754 || sym->attr.select_type_temporary
15755 || sym->attr.associate_var
15756 || (sym->ns->save_all && !sym->attr.automatic)
15757 || sym->ns->proc_name->attr.flavor == FL_MODULE
15758 || sym->ns->proc_name->attr.is_main_program
15759 || sym->attr.function || sym->attr.result || sym->attr.use_assoc))
15760 {
15761 gfc_error ("Variable %qs at %L is a coarray and is not ALLOCATABLE, SAVE "
15762 "nor a dummy argument", sym->name, &sym->declared_at);
15763 return;
15764 }
15765 /* F2008, C528. */
15766 else if (class_attr.codimension && !sym->attr.select_type_temporary
15767 && !class_attr.allocatable && as && as->cotype == AS_DEFERRED)
15768 {
15769 gfc_error ("Coarray variable %qs at %L shall not have codimensions with "
15770 "deferred shape", sym->name, &sym->declared_at);
15771 return;
15772 }
15773 else if (class_attr.codimension && class_attr.allocatable && as
15774 && (as->cotype != AS_DEFERRED || as->type != AS_DEFERRED))
15775 {
15776 gfc_error ("Allocatable coarray variable %qs at %L must have "
15777 "deferred shape", sym->name, &sym->declared_at);
15778 return;
15779 }
15780
15781 /* F2008, C541. */
15782 if ((((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
15783 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
15784 && CLASS_DATA (sym)->attr.coarray_comp))
15785 || (class_attr.codimension && class_attr.allocatable))
15786 && sym->attr.dummy && sym->attr.intent == INTENT_OUT)
15787 {
15788 gfc_error ("Variable %qs at %L is INTENT(OUT) and can thus not be an "
15789 "allocatable coarray or have coarray components",
15790 sym->name, &sym->declared_at);
15791 return;
15792 }
15793
15794 if (class_attr.codimension && sym->attr.dummy
15795 && sym->ns->proc_name && sym->ns->proc_name->attr.is_bind_c)
15796 {
15797 gfc_error ("Coarray dummy variable %qs at %L not allowed in BIND(C) "
15798 "procedure %qs", sym->name, &sym->declared_at,
15799 sym->ns->proc_name->name);
15800 return;
15801 }
15802
15803 if (sym->ts.type == BT_LOGICAL
15804 && ((sym->attr.function && sym->attr.is_bind_c && sym->result == sym)
15805 || ((sym->attr.dummy || sym->attr.result) && sym->ns->proc_name
15806 && sym->ns->proc_name->attr.is_bind_c)))
15807 {
15808 int i;
15809 for (i = 0; gfc_logical_kinds[i].kind; i++)
15810 if (gfc_logical_kinds[i].kind == sym->ts.kind)
15811 break;
15812 if (!gfc_logical_kinds[i].c_bool && sym->attr.dummy
15813 && !gfc_notify_std (GFC_STD_GNU, "LOGICAL dummy argument %qs at "
15814 "%L with non-C_Bool kind in BIND(C) procedure "
15815 "%qs", sym->name, &sym->declared_at,
15816 sym->ns->proc_name->name))
15817 return;
15818 else if (!gfc_logical_kinds[i].c_bool
15819 && !gfc_notify_std (GFC_STD_GNU, "LOGICAL result variable "
15820 "%qs at %L with non-C_Bool kind in "
15821 "BIND(C) procedure %qs", sym->name,
15822 &sym->declared_at,
15823 sym->attr.function ? sym->name
15824 : sym->ns->proc_name->name))
15825 return;
15826 }
15827
15828 switch (sym->attr.flavor)
15829 {
15830 case FL_VARIABLE:
15831 if (!resolve_fl_variable (sym, mp_flag))
15832 return;
15833 break;
15834
15835 case FL_PROCEDURE:
15836 if (sym->formal && !sym->formal_ns)
15837 {
15838 /* Check that none of the arguments are a namelist. */
15839 gfc_formal_arglist *formal = sym->formal;
15840
15841 for (; formal; formal = formal->next)
15842 if (formal->sym && formal->sym->attr.flavor == FL_NAMELIST)
15843 {
15844 gfc_error ("Namelist %qs cannot be an argument to "
15845 "subroutine or function at %L",
15846 formal->sym->name, &sym->declared_at);
15847 return;
15848 }
15849 }
15850
15851 if (!resolve_fl_procedure (sym, mp_flag))
15852 return;
15853 break;
15854
15855 case FL_NAMELIST:
15856 if (!resolve_fl_namelist (sym))
15857 return;
15858 break;
15859
15860 case FL_PARAMETER:
15861 if (!resolve_fl_parameter (sym))
15862 return;
15863 break;
15864
15865 default:
15866 break;
15867 }
15868
15869 /* Resolve array specifier. Check as well some constraints
15870 on COMMON blocks. */
15871
15872 check_constant = sym->attr.in_common && !sym->attr.pointer;
15873
15874 /* Set the formal_arg_flag so that check_conflict will not throw
15875 an error for host associated variables in the specification
15876 expression for an array_valued function. */
15877 if ((sym->attr.function || sym->attr.result) && sym->as)
15878 formal_arg_flag = true;
15879
15880 saved_specification_expr = specification_expr;
15881 specification_expr = true;
15882 gfc_resolve_array_spec (sym->as, check_constant);
15883 specification_expr = saved_specification_expr;
15884
15885 formal_arg_flag = false;
15886
15887 /* Resolve formal namespaces. */
15888 if (sym->formal_ns && sym->formal_ns != gfc_current_ns
15889 && !sym->attr.contained && !sym->attr.intrinsic)
15890 gfc_resolve (sym->formal_ns);
15891
15892 /* Make sure the formal namespace is present. */
15893 if (sym->formal && !sym->formal_ns)
15894 {
15895 gfc_formal_arglist *formal = sym->formal;
15896 while (formal && !formal->sym)
15897 formal = formal->next;
15898
15899 if (formal)
15900 {
15901 sym->formal_ns = formal->sym->ns;
15902 if (sym->ns != formal->sym->ns)
15903 sym->formal_ns->refs++;
15904 }
15905 }
15906
15907 /* Check threadprivate restrictions. */
15908 if (sym->attr.threadprivate && !sym->attr.save
15909 && !(sym->ns->save_all && !sym->attr.automatic)
15910 && (!sym->attr.in_common
15911 && sym->module == NULL
15912 && (sym->ns->proc_name == NULL
15913 || sym->ns->proc_name->attr.flavor != FL_MODULE)))
15914 gfc_error ("Threadprivate at %L isn't SAVEd", &sym->declared_at);
15915
15916 /* Check omp declare target restrictions. */
15917 if (sym->attr.omp_declare_target
15918 && sym->attr.flavor == FL_VARIABLE
15919 && !sym->attr.save
15920 && !(sym->ns->save_all && !sym->attr.automatic)
15921 && (!sym->attr.in_common
15922 && sym->module == NULL
15923 && (sym->ns->proc_name == NULL
15924 || sym->ns->proc_name->attr.flavor != FL_MODULE)))
15925 gfc_error ("!$OMP DECLARE TARGET variable %qs at %L isn't SAVEd",
15926 sym->name, &sym->declared_at);
15927
15928 /* If we have come this far we can apply default-initializers, as
15929 described in 14.7.5, to those variables that have not already
15930 been assigned one. */
15931 if (sym->ts.type == BT_DERIVED
15932 && !sym->value
15933 && !sym->attr.allocatable
15934 && !sym->attr.alloc_comp)
15935 {
15936 symbol_attribute *a = &sym->attr;
15937
15938 if ((!a->save && !a->dummy && !a->pointer
15939 && !a->in_common && !a->use_assoc
15940 && a->referenced
15941 && !((a->function || a->result)
15942 && (!a->dimension
15943 || sym->ts.u.derived->attr.alloc_comp
15944 || sym->ts.u.derived->attr.pointer_comp))
15945 && !(a->function && sym != sym->result))
15946 || (a->dummy && a->intent == INTENT_OUT && !a->pointer))
15947 apply_default_init (sym);
15948 else if (a->function && sym->result && a->access != ACCESS_PRIVATE
15949 && (sym->ts.u.derived->attr.alloc_comp
15950 || sym->ts.u.derived->attr.pointer_comp))
15951 /* Mark the result symbol to be referenced, when it has allocatable
15952 components. */
15953 sym->result->attr.referenced = 1;
15954 }
15955
15956 if (sym->ts.type == BT_CLASS && sym->ns == gfc_current_ns
15957 && sym->attr.dummy && sym->attr.intent == INTENT_OUT
15958 && !CLASS_DATA (sym)->attr.class_pointer
15959 && !CLASS_DATA (sym)->attr.allocatable)
15960 apply_default_init (sym);
15961
15962 /* If this symbol has a type-spec, check it. */
15963 if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER
15964 || (sym->attr.flavor == FL_PROCEDURE && sym->attr.function))
15965 if (!resolve_typespec_used (&sym->ts, &sym->declared_at, sym->name))
15966 return;
15967
15968 if (sym->param_list)
15969 resolve_pdt (sym);
15970 }
15971
15972
15973 /************* Resolve DATA statements *************/
15974
15975 static struct
15976 {
15977 gfc_data_value *vnode;
15978 mpz_t left;
15979 }
15980 values;
15981
15982
15983 /* Advance the values structure to point to the next value in the data list. */
15984
15985 static bool
15986 next_data_value (void)
15987 {
15988 while (mpz_cmp_ui (values.left, 0) == 0)
15989 {
15990
15991 if (values.vnode->next == NULL)
15992 return false;
15993
15994 values.vnode = values.vnode->next;
15995 mpz_set (values.left, values.vnode->repeat);
15996 }
15997
15998 return true;
15999 }
16000
16001
16002 static bool
16003 check_data_variable (gfc_data_variable *var, locus *where)
16004 {
16005 gfc_expr *e;
16006 mpz_t size;
16007 mpz_t offset;
16008 bool t;
16009 ar_type mark = AR_UNKNOWN;
16010 int i;
16011 mpz_t section_index[GFC_MAX_DIMENSIONS];
16012 gfc_ref *ref;
16013 gfc_array_ref *ar;
16014 gfc_symbol *sym;
16015 int has_pointer;
16016
16017 if (!gfc_resolve_expr (var->expr))
16018 return false;
16019
16020 ar = NULL;
16021 mpz_init_set_si (offset, 0);
16022 e = var->expr;
16023
16024 if (e->expr_type == EXPR_FUNCTION && e->value.function.isym
16025 && e->value.function.isym->id == GFC_ISYM_CAF_GET)
16026 e = e->value.function.actual->expr;
16027
16028 if (e->expr_type != EXPR_VARIABLE)
16029 {
16030 gfc_error ("Expecting definable entity near %L", where);
16031 return false;
16032 }
16033
16034 sym = e->symtree->n.sym;
16035
16036 if (sym->ns->is_block_data && !sym->attr.in_common)
16037 {
16038 gfc_error ("BLOCK DATA element %qs at %L must be in COMMON",
16039 sym->name, &sym->declared_at);
16040 return false;
16041 }
16042
16043 if (e->ref == NULL && sym->as)
16044 {
16045 gfc_error ("DATA array %qs at %L must be specified in a previous"
16046 " declaration", sym->name, where);
16047 return false;
16048 }
16049
16050 if (gfc_is_coindexed (e))
16051 {
16052 gfc_error ("DATA element %qs at %L cannot have a coindex", sym->name,
16053 where);
16054 return false;
16055 }
16056
16057 has_pointer = sym->attr.pointer;
16058
16059 for (ref = e->ref; ref; ref = ref->next)
16060 {
16061 if (ref->type == REF_COMPONENT && ref->u.c.component->attr.pointer)
16062 has_pointer = 1;
16063
16064 if (has_pointer)
16065 {
16066 if (ref->type == REF_ARRAY && ref->u.ar.type != AR_FULL)
16067 {
16068 gfc_error ("DATA element %qs at %L is a pointer and so must "
16069 "be a full array", sym->name, where);
16070 return false;
16071 }
16072
16073 if (values.vnode->expr->expr_type == EXPR_CONSTANT)
16074 {
16075 gfc_error ("DATA object near %L has the pointer attribute "
16076 "and the corresponding DATA value is not a valid "
16077 "initial-data-target", where);
16078 return false;
16079 }
16080 }
16081 }
16082
16083 if (e->rank == 0 || has_pointer)
16084 {
16085 mpz_init_set_ui (size, 1);
16086 ref = NULL;
16087 }
16088 else
16089 {
16090 ref = e->ref;
16091
16092 /* Find the array section reference. */
16093 for (ref = e->ref; ref; ref = ref->next)
16094 {
16095 if (ref->type != REF_ARRAY)
16096 continue;
16097 if (ref->u.ar.type == AR_ELEMENT)
16098 continue;
16099 break;
16100 }
16101 gcc_assert (ref);
16102
16103 /* Set marks according to the reference pattern. */
16104 switch (ref->u.ar.type)
16105 {
16106 case AR_FULL:
16107 mark = AR_FULL;
16108 break;
16109
16110 case AR_SECTION:
16111 ar = &ref->u.ar;
16112 /* Get the start position of array section. */
16113 gfc_get_section_index (ar, section_index, &offset);
16114 mark = AR_SECTION;
16115 break;
16116
16117 default:
16118 gcc_unreachable ();
16119 }
16120
16121 if (!gfc_array_size (e, &size))
16122 {
16123 gfc_error ("Nonconstant array section at %L in DATA statement",
16124 where);
16125 mpz_clear (offset);
16126 return false;
16127 }
16128 }
16129
16130 t = true;
16131
16132 while (mpz_cmp_ui (size, 0) > 0)
16133 {
16134 if (!next_data_value ())
16135 {
16136 gfc_error ("DATA statement at %L has more variables than values",
16137 where);
16138 t = false;
16139 break;
16140 }
16141
16142 t = gfc_check_assign (var->expr, values.vnode->expr, 0);
16143 if (!t)
16144 break;
16145
16146 /* If we have more than one element left in the repeat count,
16147 and we have more than one element left in the target variable,
16148 then create a range assignment. */
16149 /* FIXME: Only done for full arrays for now, since array sections
16150 seem tricky. */
16151 if (mark == AR_FULL && ref && ref->next == NULL
16152 && mpz_cmp_ui (values.left, 1) > 0 && mpz_cmp_ui (size, 1) > 0)
16153 {
16154 mpz_t range;
16155
16156 if (mpz_cmp (size, values.left) >= 0)
16157 {
16158 mpz_init_set (range, values.left);
16159 mpz_sub (size, size, values.left);
16160 mpz_set_ui (values.left, 0);
16161 }
16162 else
16163 {
16164 mpz_init_set (range, size);
16165 mpz_sub (values.left, values.left, size);
16166 mpz_set_ui (size, 0);
16167 }
16168
16169 t = gfc_assign_data_value (var->expr, values.vnode->expr,
16170 offset, &range);
16171
16172 mpz_add (offset, offset, range);
16173 mpz_clear (range);
16174
16175 if (!t)
16176 break;
16177 }
16178
16179 /* Assign initial value to symbol. */
16180 else
16181 {
16182 mpz_sub_ui (values.left, values.left, 1);
16183 mpz_sub_ui (size, size, 1);
16184
16185 t = gfc_assign_data_value (var->expr, values.vnode->expr,
16186 offset, NULL);
16187 if (!t)
16188 break;
16189
16190 if (mark == AR_FULL)
16191 mpz_add_ui (offset, offset, 1);
16192
16193 /* Modify the array section indexes and recalculate the offset
16194 for next element. */
16195 else if (mark == AR_SECTION)
16196 gfc_advance_section (section_index, ar, &offset);
16197 }
16198 }
16199
16200 if (mark == AR_SECTION)
16201 {
16202 for (i = 0; i < ar->dimen; i++)
16203 mpz_clear (section_index[i]);
16204 }
16205
16206 mpz_clear (size);
16207 mpz_clear (offset);
16208
16209 return t;
16210 }
16211
16212
16213 static bool traverse_data_var (gfc_data_variable *, locus *);
16214
16215 /* Iterate over a list of elements in a DATA statement. */
16216
16217 static bool
16218 traverse_data_list (gfc_data_variable *var, locus *where)
16219 {
16220 mpz_t trip;
16221 iterator_stack frame;
16222 gfc_expr *e, *start, *end, *step;
16223 bool retval = true;
16224
16225 mpz_init (frame.value);
16226 mpz_init (trip);
16227
16228 start = gfc_copy_expr (var->iter.start);
16229 end = gfc_copy_expr (var->iter.end);
16230 step = gfc_copy_expr (var->iter.step);
16231
16232 if (!gfc_simplify_expr (start, 1)
16233 || start->expr_type != EXPR_CONSTANT)
16234 {
16235 gfc_error ("start of implied-do loop at %L could not be "
16236 "simplified to a constant value", &start->where);
16237 retval = false;
16238 goto cleanup;
16239 }
16240 if (!gfc_simplify_expr (end, 1)
16241 || end->expr_type != EXPR_CONSTANT)
16242 {
16243 gfc_error ("end of implied-do loop at %L could not be "
16244 "simplified to a constant value", &start->where);
16245 retval = false;
16246 goto cleanup;
16247 }
16248 if (!gfc_simplify_expr (step, 1)
16249 || step->expr_type != EXPR_CONSTANT)
16250 {
16251 gfc_error ("step of implied-do loop at %L could not be "
16252 "simplified to a constant value", &start->where);
16253 retval = false;
16254 goto cleanup;
16255 }
16256
16257 mpz_set (trip, end->value.integer);
16258 mpz_sub (trip, trip, start->value.integer);
16259 mpz_add (trip, trip, step->value.integer);
16260
16261 mpz_div (trip, trip, step->value.integer);
16262
16263 mpz_set (frame.value, start->value.integer);
16264
16265 frame.prev = iter_stack;
16266 frame.variable = var->iter.var->symtree;
16267 iter_stack = &frame;
16268
16269 while (mpz_cmp_ui (trip, 0) > 0)
16270 {
16271 if (!traverse_data_var (var->list, where))
16272 {
16273 retval = false;
16274 goto cleanup;
16275 }
16276
16277 e = gfc_copy_expr (var->expr);
16278 if (!gfc_simplify_expr (e, 1))
16279 {
16280 gfc_free_expr (e);
16281 retval = false;
16282 goto cleanup;
16283 }
16284
16285 mpz_add (frame.value, frame.value, step->value.integer);
16286
16287 mpz_sub_ui (trip, trip, 1);
16288 }
16289
16290 cleanup:
16291 mpz_clear (frame.value);
16292 mpz_clear (trip);
16293
16294 gfc_free_expr (start);
16295 gfc_free_expr (end);
16296 gfc_free_expr (step);
16297
16298 iter_stack = frame.prev;
16299 return retval;
16300 }
16301
16302
16303 /* Type resolve variables in the variable list of a DATA statement. */
16304
16305 static bool
16306 traverse_data_var (gfc_data_variable *var, locus *where)
16307 {
16308 bool t;
16309
16310 for (; var; var = var->next)
16311 {
16312 if (var->expr == NULL)
16313 t = traverse_data_list (var, where);
16314 else
16315 t = check_data_variable (var, where);
16316
16317 if (!t)
16318 return false;
16319 }
16320
16321 return true;
16322 }
16323
16324
16325 /* Resolve the expressions and iterators associated with a data statement.
16326 This is separate from the assignment checking because data lists should
16327 only be resolved once. */
16328
16329 static bool
16330 resolve_data_variables (gfc_data_variable *d)
16331 {
16332 for (; d; d = d->next)
16333 {
16334 if (d->list == NULL)
16335 {
16336 if (!gfc_resolve_expr (d->expr))
16337 return false;
16338 }
16339 else
16340 {
16341 if (!gfc_resolve_iterator (&d->iter, false, true))
16342 return false;
16343
16344 if (!resolve_data_variables (d->list))
16345 return false;
16346 }
16347 }
16348
16349 return true;
16350 }
16351
16352
16353 /* Resolve a single DATA statement. We implement this by storing a pointer to
16354 the value list into static variables, and then recursively traversing the
16355 variables list, expanding iterators and such. */
16356
16357 static void
16358 resolve_data (gfc_data *d)
16359 {
16360
16361 if (!resolve_data_variables (d->var))
16362 return;
16363
16364 values.vnode = d->value;
16365 if (d->value == NULL)
16366 mpz_set_ui (values.left, 0);
16367 else
16368 mpz_set (values.left, d->value->repeat);
16369
16370 if (!traverse_data_var (d->var, &d->where))
16371 return;
16372
16373 /* At this point, we better not have any values left. */
16374
16375 if (next_data_value ())
16376 gfc_error ("DATA statement at %L has more values than variables",
16377 &d->where);
16378 }
16379
16380
16381 /* 12.6 Constraint: In a pure subprogram any variable which is in common or
16382 accessed by host or use association, is a dummy argument to a pure function,
16383 is a dummy argument with INTENT (IN) to a pure subroutine, or an object that
16384 is storage associated with any such variable, shall not be used in the
16385 following contexts: (clients of this function). */
16386
16387 /* Determines if a variable is not 'pure', i.e., not assignable within a pure
16388 procedure. Returns zero if assignment is OK, nonzero if there is a
16389 problem. */
16390 int
16391 gfc_impure_variable (gfc_symbol *sym)
16392 {
16393 gfc_symbol *proc;
16394 gfc_namespace *ns;
16395
16396 if (sym->attr.use_assoc || sym->attr.in_common)
16397 return 1;
16398
16399 /* Check if the symbol's ns is inside the pure procedure. */
16400 for (ns = gfc_current_ns; ns; ns = ns->parent)
16401 {
16402 if (ns == sym->ns)
16403 break;
16404 if (ns->proc_name->attr.flavor == FL_PROCEDURE && !sym->attr.function)
16405 return 1;
16406 }
16407
16408 proc = sym->ns->proc_name;
16409 if (sym->attr.dummy
16410 && ((proc->attr.subroutine && sym->attr.intent == INTENT_IN)
16411 || proc->attr.function))
16412 return 1;
16413
16414 /* TODO: Sort out what can be storage associated, if anything, and include
16415 it here. In principle equivalences should be scanned but it does not
16416 seem to be possible to storage associate an impure variable this way. */
16417 return 0;
16418 }
16419
16420
16421 /* Test whether a symbol is pure or not. For a NULL pointer, checks if the
16422 current namespace is inside a pure procedure. */
16423
16424 int
16425 gfc_pure (gfc_symbol *sym)
16426 {
16427 symbol_attribute attr;
16428 gfc_namespace *ns;
16429
16430 if (sym == NULL)
16431 {
16432 /* Check if the current namespace or one of its parents
16433 belongs to a pure procedure. */
16434 for (ns = gfc_current_ns; ns; ns = ns->parent)
16435 {
16436 sym = ns->proc_name;
16437 if (sym == NULL)
16438 return 0;
16439 attr = sym->attr;
16440 if (attr.flavor == FL_PROCEDURE && attr.pure)
16441 return 1;
16442 }
16443 return 0;
16444 }
16445
16446 attr = sym->attr;
16447
16448 return attr.flavor == FL_PROCEDURE && attr.pure;
16449 }
16450
16451
16452 /* Test whether a symbol is implicitly pure or not. For a NULL pointer,
16453 checks if the current namespace is implicitly pure. Note that this
16454 function returns false for a PURE procedure. */
16455
16456 int
16457 gfc_implicit_pure (gfc_symbol *sym)
16458 {
16459 gfc_namespace *ns;
16460
16461 if (sym == NULL)
16462 {
16463 /* Check if the current procedure is implicit_pure. Walk up
16464 the procedure list until we find a procedure. */
16465 for (ns = gfc_current_ns; ns; ns = ns->parent)
16466 {
16467 sym = ns->proc_name;
16468 if (sym == NULL)
16469 return 0;
16470
16471 if (sym->attr.flavor == FL_PROCEDURE)
16472 break;
16473 }
16474 }
16475
16476 return sym->attr.flavor == FL_PROCEDURE && sym->attr.implicit_pure
16477 && !sym->attr.pure;
16478 }
16479
16480
16481 void
16482 gfc_unset_implicit_pure (gfc_symbol *sym)
16483 {
16484 gfc_namespace *ns;
16485
16486 if (sym == NULL)
16487 {
16488 /* Check if the current procedure is implicit_pure. Walk up
16489 the procedure list until we find a procedure. */
16490 for (ns = gfc_current_ns; ns; ns = ns->parent)
16491 {
16492 sym = ns->proc_name;
16493 if (sym == NULL)
16494 return;
16495
16496 if (sym->attr.flavor == FL_PROCEDURE)
16497 break;
16498 }
16499 }
16500
16501 if (sym->attr.flavor == FL_PROCEDURE)
16502 sym->attr.implicit_pure = 0;
16503 else
16504 sym->attr.pure = 0;
16505 }
16506
16507
16508 /* Test whether the current procedure is elemental or not. */
16509
16510 int
16511 gfc_elemental (gfc_symbol *sym)
16512 {
16513 symbol_attribute attr;
16514
16515 if (sym == NULL)
16516 sym = gfc_current_ns->proc_name;
16517 if (sym == NULL)
16518 return 0;
16519 attr = sym->attr;
16520
16521 return attr.flavor == FL_PROCEDURE && attr.elemental;
16522 }
16523
16524
16525 /* Warn about unused labels. */
16526
16527 static void
16528 warn_unused_fortran_label (gfc_st_label *label)
16529 {
16530 if (label == NULL)
16531 return;
16532
16533 warn_unused_fortran_label (label->left);
16534
16535 if (label->defined == ST_LABEL_UNKNOWN)
16536 return;
16537
16538 switch (label->referenced)
16539 {
16540 case ST_LABEL_UNKNOWN:
16541 gfc_warning (OPT_Wunused_label, "Label %d at %L defined but not used",
16542 label->value, &label->where);
16543 break;
16544
16545 case ST_LABEL_BAD_TARGET:
16546 gfc_warning (OPT_Wunused_label,
16547 "Label %d at %L defined but cannot be used",
16548 label->value, &label->where);
16549 break;
16550
16551 default:
16552 break;
16553 }
16554
16555 warn_unused_fortran_label (label->right);
16556 }
16557
16558
16559 /* Returns the sequence type of a symbol or sequence. */
16560
16561 static seq_type
16562 sequence_type (gfc_typespec ts)
16563 {
16564 seq_type result;
16565 gfc_component *c;
16566
16567 switch (ts.type)
16568 {
16569 case BT_DERIVED:
16570
16571 if (ts.u.derived->components == NULL)
16572 return SEQ_NONDEFAULT;
16573
16574 result = sequence_type (ts.u.derived->components->ts);
16575 for (c = ts.u.derived->components->next; c; c = c->next)
16576 if (sequence_type (c->ts) != result)
16577 return SEQ_MIXED;
16578
16579 return result;
16580
16581 case BT_CHARACTER:
16582 if (ts.kind != gfc_default_character_kind)
16583 return SEQ_NONDEFAULT;
16584
16585 return SEQ_CHARACTER;
16586
16587 case BT_INTEGER:
16588 if (ts.kind != gfc_default_integer_kind)
16589 return SEQ_NONDEFAULT;
16590
16591 return SEQ_NUMERIC;
16592
16593 case BT_REAL:
16594 if (!(ts.kind == gfc_default_real_kind
16595 || ts.kind == gfc_default_double_kind))
16596 return SEQ_NONDEFAULT;
16597
16598 return SEQ_NUMERIC;
16599
16600 case BT_COMPLEX:
16601 if (ts.kind != gfc_default_complex_kind)
16602 return SEQ_NONDEFAULT;
16603
16604 return SEQ_NUMERIC;
16605
16606 case BT_LOGICAL:
16607 if (ts.kind != gfc_default_logical_kind)
16608 return SEQ_NONDEFAULT;
16609
16610 return SEQ_NUMERIC;
16611
16612 default:
16613 return SEQ_NONDEFAULT;
16614 }
16615 }
16616
16617
16618 /* Resolve derived type EQUIVALENCE object. */
16619
16620 static bool
16621 resolve_equivalence_derived (gfc_symbol *derived, gfc_symbol *sym, gfc_expr *e)
16622 {
16623 gfc_component *c = derived->components;
16624
16625 if (!derived)
16626 return true;
16627
16628 /* Shall not be an object of nonsequence derived type. */
16629 if (!derived->attr.sequence)
16630 {
16631 gfc_error ("Derived type variable %qs at %L must have SEQUENCE "
16632 "attribute to be an EQUIVALENCE object", sym->name,
16633 &e->where);
16634 return false;
16635 }
16636
16637 /* Shall not have allocatable components. */
16638 if (derived->attr.alloc_comp)
16639 {
16640 gfc_error ("Derived type variable %qs at %L cannot have ALLOCATABLE "
16641 "components to be an EQUIVALENCE object",sym->name,
16642 &e->where);
16643 return false;
16644 }
16645
16646 if (sym->attr.in_common && gfc_has_default_initializer (sym->ts.u.derived))
16647 {
16648 gfc_error ("Derived type variable %qs at %L with default "
16649 "initialization cannot be in EQUIVALENCE with a variable "
16650 "in COMMON", sym->name, &e->where);
16651 return false;
16652 }
16653
16654 for (; c ; c = c->next)
16655 {
16656 if (gfc_bt_struct (c->ts.type)
16657 && (!resolve_equivalence_derived(c->ts.u.derived, sym, e)))
16658 return false;
16659
16660 /* Shall not be an object of sequence derived type containing a pointer
16661 in the structure. */
16662 if (c->attr.pointer)
16663 {
16664 gfc_error ("Derived type variable %qs at %L with pointer "
16665 "component(s) cannot be an EQUIVALENCE object",
16666 sym->name, &e->where);
16667 return false;
16668 }
16669 }
16670 return true;
16671 }
16672
16673
16674 /* Resolve equivalence object.
16675 An EQUIVALENCE object shall not be a dummy argument, a pointer, a target,
16676 an allocatable array, an object of nonsequence derived type, an object of
16677 sequence derived type containing a pointer at any level of component
16678 selection, an automatic object, a function name, an entry name, a result
16679 name, a named constant, a structure component, or a subobject of any of
16680 the preceding objects. A substring shall not have length zero. A
16681 derived type shall not have components with default initialization nor
16682 shall two objects of an equivalence group be initialized.
16683 Either all or none of the objects shall have an protected attribute.
16684 The simple constraints are done in symbol.c(check_conflict) and the rest
16685 are implemented here. */
16686
16687 static void
16688 resolve_equivalence (gfc_equiv *eq)
16689 {
16690 gfc_symbol *sym;
16691 gfc_symbol *first_sym;
16692 gfc_expr *e;
16693 gfc_ref *r;
16694 locus *last_where = NULL;
16695 seq_type eq_type, last_eq_type;
16696 gfc_typespec *last_ts;
16697 int object, cnt_protected;
16698 const char *msg;
16699
16700 last_ts = &eq->expr->symtree->n.sym->ts;
16701
16702 first_sym = eq->expr->symtree->n.sym;
16703
16704 cnt_protected = 0;
16705
16706 for (object = 1; eq; eq = eq->eq, object++)
16707 {
16708 e = eq->expr;
16709
16710 e->ts = e->symtree->n.sym->ts;
16711 /* match_varspec might not know yet if it is seeing
16712 array reference or substring reference, as it doesn't
16713 know the types. */
16714 if (e->ref && e->ref->type == REF_ARRAY)
16715 {
16716 gfc_ref *ref = e->ref;
16717 sym = e->symtree->n.sym;
16718
16719 if (sym->attr.dimension)
16720 {
16721 ref->u.ar.as = sym->as;
16722 ref = ref->next;
16723 }
16724
16725 /* For substrings, convert REF_ARRAY into REF_SUBSTRING. */
16726 if (e->ts.type == BT_CHARACTER
16727 && ref
16728 && ref->type == REF_ARRAY
16729 && ref->u.ar.dimen == 1
16730 && ref->u.ar.dimen_type[0] == DIMEN_RANGE
16731 && ref->u.ar.stride[0] == NULL)
16732 {
16733 gfc_expr *start = ref->u.ar.start[0];
16734 gfc_expr *end = ref->u.ar.end[0];
16735 void *mem = NULL;
16736
16737 /* Optimize away the (:) reference. */
16738 if (start == NULL && end == NULL)
16739 {
16740 if (e->ref == ref)
16741 e->ref = ref->next;
16742 else
16743 e->ref->next = ref->next;
16744 mem = ref;
16745 }
16746 else
16747 {
16748 ref->type = REF_SUBSTRING;
16749 if (start == NULL)
16750 start = gfc_get_int_expr (gfc_charlen_int_kind,
16751 NULL, 1);
16752 ref->u.ss.start = start;
16753 if (end == NULL && e->ts.u.cl)
16754 end = gfc_copy_expr (e->ts.u.cl->length);
16755 ref->u.ss.end = end;
16756 ref->u.ss.length = e->ts.u.cl;
16757 e->ts.u.cl = NULL;
16758 }
16759 ref = ref->next;
16760 free (mem);
16761 }
16762
16763 /* Any further ref is an error. */
16764 if (ref)
16765 {
16766 gcc_assert (ref->type == REF_ARRAY);
16767 gfc_error ("Syntax error in EQUIVALENCE statement at %L",
16768 &ref->u.ar.where);
16769 continue;
16770 }
16771 }
16772
16773 if (!gfc_resolve_expr (e))
16774 continue;
16775
16776 sym = e->symtree->n.sym;
16777
16778 if (sym->attr.is_protected)
16779 cnt_protected++;
16780 if (cnt_protected > 0 && cnt_protected != object)
16781 {
16782 gfc_error ("Either all or none of the objects in the "
16783 "EQUIVALENCE set at %L shall have the "
16784 "PROTECTED attribute",
16785 &e->where);
16786 break;
16787 }
16788
16789 /* Shall not equivalence common block variables in a PURE procedure. */
16790 if (sym->ns->proc_name
16791 && sym->ns->proc_name->attr.pure
16792 && sym->attr.in_common)
16793 {
16794 /* Need to check for symbols that may have entered the pure
16795 procedure via a USE statement. */
16796 bool saw_sym = false;
16797 if (sym->ns->use_stmts)
16798 {
16799 gfc_use_rename *r;
16800 for (r = sym->ns->use_stmts->rename; r; r = r->next)
16801 if (strcmp(r->use_name, sym->name) == 0) saw_sym = true;
16802 }
16803 else
16804 saw_sym = true;
16805
16806 if (saw_sym)
16807 gfc_error ("COMMON block member %qs at %L cannot be an "
16808 "EQUIVALENCE object in the pure procedure %qs",
16809 sym->name, &e->where, sym->ns->proc_name->name);
16810 break;
16811 }
16812
16813 /* Shall not be a named constant. */
16814 if (e->expr_type == EXPR_CONSTANT)
16815 {
16816 gfc_error ("Named constant %qs at %L cannot be an EQUIVALENCE "
16817 "object", sym->name, &e->where);
16818 continue;
16819 }
16820
16821 if (e->ts.type == BT_DERIVED
16822 && !resolve_equivalence_derived (e->ts.u.derived, sym, e))
16823 continue;
16824
16825 /* Check that the types correspond correctly:
16826 Note 5.28:
16827 A numeric sequence structure may be equivalenced to another sequence
16828 structure, an object of default integer type, default real type, double
16829 precision real type, default logical type such that components of the
16830 structure ultimately only become associated to objects of the same
16831 kind. A character sequence structure may be equivalenced to an object
16832 of default character kind or another character sequence structure.
16833 Other objects may be equivalenced only to objects of the same type and
16834 kind parameters. */
16835
16836 /* Identical types are unconditionally OK. */
16837 if (object == 1 || gfc_compare_types (last_ts, &sym->ts))
16838 goto identical_types;
16839
16840 last_eq_type = sequence_type (*last_ts);
16841 eq_type = sequence_type (sym->ts);
16842
16843 /* Since the pair of objects is not of the same type, mixed or
16844 non-default sequences can be rejected. */
16845
16846 msg = "Sequence %s with mixed components in EQUIVALENCE "
16847 "statement at %L with different type objects";
16848 if ((object ==2
16849 && last_eq_type == SEQ_MIXED
16850 && !gfc_notify_std (GFC_STD_GNU, msg, first_sym->name, last_where))
16851 || (eq_type == SEQ_MIXED
16852 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where)))
16853 continue;
16854
16855 msg = "Non-default type object or sequence %s in EQUIVALENCE "
16856 "statement at %L with objects of different type";
16857 if ((object ==2
16858 && last_eq_type == SEQ_NONDEFAULT
16859 && !gfc_notify_std (GFC_STD_GNU, msg, first_sym->name, last_where))
16860 || (eq_type == SEQ_NONDEFAULT
16861 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where)))
16862 continue;
16863
16864 msg ="Non-CHARACTER object %qs in default CHARACTER "
16865 "EQUIVALENCE statement at %L";
16866 if (last_eq_type == SEQ_CHARACTER
16867 && eq_type != SEQ_CHARACTER
16868 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where))
16869 continue;
16870
16871 msg ="Non-NUMERIC object %qs in default NUMERIC "
16872 "EQUIVALENCE statement at %L";
16873 if (last_eq_type == SEQ_NUMERIC
16874 && eq_type != SEQ_NUMERIC
16875 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where))
16876 continue;
16877
16878 identical_types:
16879
16880 last_ts =&sym->ts;
16881 last_where = &e->where;
16882
16883 if (!e->ref)
16884 continue;
16885
16886 /* Shall not be an automatic array. */
16887 if (e->ref->type == REF_ARRAY && is_non_constant_shape_array (sym))
16888 {
16889 gfc_error ("Array %qs at %L with non-constant bounds cannot be "
16890 "an EQUIVALENCE object", sym->name, &e->where);
16891 continue;
16892 }
16893
16894 r = e->ref;
16895 while (r)
16896 {
16897 /* Shall not be a structure component. */
16898 if (r->type == REF_COMPONENT)
16899 {
16900 gfc_error ("Structure component %qs at %L cannot be an "
16901 "EQUIVALENCE object",
16902 r->u.c.component->name, &e->where);
16903 break;
16904 }
16905
16906 /* A substring shall not have length zero. */
16907 if (r->type == REF_SUBSTRING)
16908 {
16909 if (compare_bound (r->u.ss.start, r->u.ss.end) == CMP_GT)
16910 {
16911 gfc_error ("Substring at %L has length zero",
16912 &r->u.ss.start->where);
16913 break;
16914 }
16915 }
16916 r = r->next;
16917 }
16918 }
16919 }
16920
16921
16922 /* Function called by resolve_fntype to flag other symbols used in the
16923 length type parameter specification of function results. */
16924
16925 static bool
16926 flag_fn_result_spec (gfc_expr *expr,
16927 gfc_symbol *sym,
16928 int *f ATTRIBUTE_UNUSED)
16929 {
16930 gfc_namespace *ns;
16931 gfc_symbol *s;
16932
16933 if (expr->expr_type == EXPR_VARIABLE)
16934 {
16935 s = expr->symtree->n.sym;
16936 for (ns = s->ns; ns; ns = ns->parent)
16937 if (!ns->parent)
16938 break;
16939
16940 if (sym == s)
16941 {
16942 gfc_error ("Self reference in character length expression "
16943 "for %qs at %L", sym->name, &expr->where);
16944 return true;
16945 }
16946
16947 if (!s->fn_result_spec
16948 && s->attr.flavor == FL_PARAMETER)
16949 {
16950 /* Function contained in a module.... */
16951 if (ns->proc_name && ns->proc_name->attr.flavor == FL_MODULE)
16952 {
16953 gfc_symtree *st;
16954 s->fn_result_spec = 1;
16955 /* Make sure that this symbol is translated as a module
16956 variable. */
16957 st = gfc_get_unique_symtree (ns);
16958 st->n.sym = s;
16959 s->refs++;
16960 }
16961 /* ... which is use associated and called. */
16962 else if (s->attr.use_assoc || s->attr.used_in_submodule
16963 ||
16964 /* External function matched with an interface. */
16965 (s->ns->proc_name
16966 && ((s->ns == ns
16967 && s->ns->proc_name->attr.if_source == IFSRC_DECL)
16968 || s->ns->proc_name->attr.if_source == IFSRC_IFBODY)
16969 && s->ns->proc_name->attr.function))
16970 s->fn_result_spec = 1;
16971 }
16972 }
16973 return false;
16974 }
16975
16976
16977 /* Resolve function and ENTRY types, issue diagnostics if needed. */
16978
16979 static void
16980 resolve_fntype (gfc_namespace *ns)
16981 {
16982 gfc_entry_list *el;
16983 gfc_symbol *sym;
16984
16985 if (ns->proc_name == NULL || !ns->proc_name->attr.function)
16986 return;
16987
16988 /* If there are any entries, ns->proc_name is the entry master
16989 synthetic symbol and ns->entries->sym actual FUNCTION symbol. */
16990 if (ns->entries)
16991 sym = ns->entries->sym;
16992 else
16993 sym = ns->proc_name;
16994 if (sym->result == sym
16995 && sym->ts.type == BT_UNKNOWN
16996 && !gfc_set_default_type (sym, 0, NULL)
16997 && !sym->attr.untyped)
16998 {
16999 gfc_error ("Function %qs at %L has no IMPLICIT type",
17000 sym->name, &sym->declared_at);
17001 sym->attr.untyped = 1;
17002 }
17003
17004 if (sym->ts.type == BT_DERIVED && !sym->ts.u.derived->attr.use_assoc
17005 && !sym->attr.contained
17006 && !gfc_check_symbol_access (sym->ts.u.derived)
17007 && gfc_check_symbol_access (sym))
17008 {
17009 gfc_notify_std (GFC_STD_F2003, "PUBLIC function %qs at "
17010 "%L of PRIVATE type %qs", sym->name,
17011 &sym->declared_at, sym->ts.u.derived->name);
17012 }
17013
17014 if (ns->entries)
17015 for (el = ns->entries->next; el; el = el->next)
17016 {
17017 if (el->sym->result == el->sym
17018 && el->sym->ts.type == BT_UNKNOWN
17019 && !gfc_set_default_type (el->sym, 0, NULL)
17020 && !el->sym->attr.untyped)
17021 {
17022 gfc_error ("ENTRY %qs at %L has no IMPLICIT type",
17023 el->sym->name, &el->sym->declared_at);
17024 el->sym->attr.untyped = 1;
17025 }
17026 }
17027
17028 if (sym->ts.type == BT_CHARACTER)
17029 gfc_traverse_expr (sym->ts.u.cl->length, sym, flag_fn_result_spec, 0);
17030 }
17031
17032
17033 /* 12.3.2.1.1 Defined operators. */
17034
17035 static bool
17036 check_uop_procedure (gfc_symbol *sym, locus where)
17037 {
17038 gfc_formal_arglist *formal;
17039
17040 if (!sym->attr.function)
17041 {
17042 gfc_error ("User operator procedure %qs at %L must be a FUNCTION",
17043 sym->name, &where);
17044 return false;
17045 }
17046
17047 if (sym->ts.type == BT_CHARACTER
17048 && !((sym->ts.u.cl && sym->ts.u.cl->length) || sym->ts.deferred)
17049 && !(sym->result && ((sym->result->ts.u.cl
17050 && sym->result->ts.u.cl->length) || sym->result->ts.deferred)))
17051 {
17052 gfc_error ("User operator procedure %qs at %L cannot be assumed "
17053 "character length", sym->name, &where);
17054 return false;
17055 }
17056
17057 formal = gfc_sym_get_dummy_args (sym);
17058 if (!formal || !formal->sym)
17059 {
17060 gfc_error ("User operator procedure %qs at %L must have at least "
17061 "one argument", sym->name, &where);
17062 return false;
17063 }
17064
17065 if (formal->sym->attr.intent != INTENT_IN)
17066 {
17067 gfc_error ("First argument of operator interface at %L must be "
17068 "INTENT(IN)", &where);
17069 return false;
17070 }
17071
17072 if (formal->sym->attr.optional)
17073 {
17074 gfc_error ("First argument of operator interface at %L cannot be "
17075 "optional", &where);
17076 return false;
17077 }
17078
17079 formal = formal->next;
17080 if (!formal || !formal->sym)
17081 return true;
17082
17083 if (formal->sym->attr.intent != INTENT_IN)
17084 {
17085 gfc_error ("Second argument of operator interface at %L must be "
17086 "INTENT(IN)", &where);
17087 return false;
17088 }
17089
17090 if (formal->sym->attr.optional)
17091 {
17092 gfc_error ("Second argument of operator interface at %L cannot be "
17093 "optional", &where);
17094 return false;
17095 }
17096
17097 if (formal->next)
17098 {
17099 gfc_error ("Operator interface at %L must have, at most, two "
17100 "arguments", &where);
17101 return false;
17102 }
17103
17104 return true;
17105 }
17106
17107 static void
17108 gfc_resolve_uops (gfc_symtree *symtree)
17109 {
17110 gfc_interface *itr;
17111
17112 if (symtree == NULL)
17113 return;
17114
17115 gfc_resolve_uops (symtree->left);
17116 gfc_resolve_uops (symtree->right);
17117
17118 for (itr = symtree->n.uop->op; itr; itr = itr->next)
17119 check_uop_procedure (itr->sym, itr->sym->declared_at);
17120 }
17121
17122
17123 /* Examine all of the expressions associated with a program unit,
17124 assign types to all intermediate expressions, make sure that all
17125 assignments are to compatible types and figure out which names
17126 refer to which functions or subroutines. It doesn't check code
17127 block, which is handled by gfc_resolve_code. */
17128
17129 static void
17130 resolve_types (gfc_namespace *ns)
17131 {
17132 gfc_namespace *n;
17133 gfc_charlen *cl;
17134 gfc_data *d;
17135 gfc_equiv *eq;
17136 gfc_namespace* old_ns = gfc_current_ns;
17137 bool recursive = ns->proc_name && ns->proc_name->attr.recursive;
17138
17139 if (ns->types_resolved)
17140 return;
17141
17142 /* Check that all IMPLICIT types are ok. */
17143 if (!ns->seen_implicit_none)
17144 {
17145 unsigned letter;
17146 for (letter = 0; letter != GFC_LETTERS; ++letter)
17147 if (ns->set_flag[letter]
17148 && !resolve_typespec_used (&ns->default_type[letter],
17149 &ns->implicit_loc[letter], NULL))
17150 return;
17151 }
17152
17153 gfc_current_ns = ns;
17154
17155 resolve_entries (ns);
17156
17157 resolve_common_vars (&ns->blank_common, false);
17158 resolve_common_blocks (ns->common_root);
17159
17160 resolve_contained_functions (ns);
17161
17162 if (ns->proc_name && ns->proc_name->attr.flavor == FL_PROCEDURE
17163 && ns->proc_name->attr.if_source == IFSRC_IFBODY)
17164 gfc_resolve_formal_arglist (ns->proc_name);
17165
17166 gfc_traverse_ns (ns, resolve_bind_c_derived_types);
17167
17168 for (cl = ns->cl_list; cl; cl = cl->next)
17169 resolve_charlen (cl);
17170
17171 gfc_traverse_ns (ns, resolve_symbol);
17172
17173 resolve_fntype (ns);
17174
17175 for (n = ns->contained; n; n = n->sibling)
17176 {
17177 if (gfc_pure (ns->proc_name) && !gfc_pure (n->proc_name))
17178 gfc_error ("Contained procedure %qs at %L of a PURE procedure must "
17179 "also be PURE", n->proc_name->name,
17180 &n->proc_name->declared_at);
17181
17182 resolve_types (n);
17183 }
17184
17185 forall_flag = 0;
17186 gfc_do_concurrent_flag = 0;
17187 gfc_check_interfaces (ns);
17188
17189 gfc_traverse_ns (ns, resolve_values);
17190
17191 if (ns->save_all || (!flag_automatic && !recursive))
17192 gfc_save_all (ns);
17193
17194 iter_stack = NULL;
17195 for (d = ns->data; d; d = d->next)
17196 resolve_data (d);
17197
17198 iter_stack = NULL;
17199 gfc_traverse_ns (ns, gfc_formalize_init_value);
17200
17201 gfc_traverse_ns (ns, gfc_verify_binding_labels);
17202
17203 for (eq = ns->equiv; eq; eq = eq->next)
17204 resolve_equivalence (eq);
17205
17206 /* Warn about unused labels. */
17207 if (warn_unused_label)
17208 warn_unused_fortran_label (ns->st_labels);
17209
17210 gfc_resolve_uops (ns->uop_root);
17211
17212 gfc_traverse_ns (ns, gfc_verify_DTIO_procedures);
17213
17214 gfc_resolve_omp_declare_simd (ns);
17215
17216 gfc_resolve_omp_udrs (ns->omp_udr_root);
17217
17218 ns->types_resolved = 1;
17219
17220 gfc_current_ns = old_ns;
17221 }
17222
17223
17224 /* Call gfc_resolve_code recursively. */
17225
17226 static void
17227 resolve_codes (gfc_namespace *ns)
17228 {
17229 gfc_namespace *n;
17230 bitmap_obstack old_obstack;
17231
17232 if (ns->resolved == 1)
17233 return;
17234
17235 for (n = ns->contained; n; n = n->sibling)
17236 resolve_codes (n);
17237
17238 gfc_current_ns = ns;
17239
17240 /* Don't clear 'cs_base' if this is the namespace of a BLOCK construct. */
17241 if (!(ns->proc_name && ns->proc_name->attr.flavor == FL_LABEL))
17242 cs_base = NULL;
17243
17244 /* Set to an out of range value. */
17245 current_entry_id = -1;
17246
17247 old_obstack = labels_obstack;
17248 bitmap_obstack_initialize (&labels_obstack);
17249
17250 gfc_resolve_oacc_declare (ns);
17251 gfc_resolve_oacc_routines (ns);
17252 gfc_resolve_omp_local_vars (ns);
17253 gfc_resolve_code (ns->code, ns);
17254
17255 bitmap_obstack_release (&labels_obstack);
17256 labels_obstack = old_obstack;
17257 }
17258
17259
17260 /* This function is called after a complete program unit has been compiled.
17261 Its purpose is to examine all of the expressions associated with a program
17262 unit, assign types to all intermediate expressions, make sure that all
17263 assignments are to compatible types and figure out which names refer to
17264 which functions or subroutines. */
17265
17266 void
17267 gfc_resolve (gfc_namespace *ns)
17268 {
17269 gfc_namespace *old_ns;
17270 code_stack *old_cs_base;
17271 struct gfc_omp_saved_state old_omp_state;
17272
17273 if (ns->resolved)
17274 return;
17275
17276 ns->resolved = -1;
17277 old_ns = gfc_current_ns;
17278 old_cs_base = cs_base;
17279
17280 /* As gfc_resolve can be called during resolution of an OpenMP construct
17281 body, we should clear any state associated to it, so that say NS's
17282 DO loops are not interpreted as OpenMP loops. */
17283 if (!ns->construct_entities)
17284 gfc_omp_save_and_clear_state (&old_omp_state);
17285
17286 resolve_types (ns);
17287 component_assignment_level = 0;
17288 resolve_codes (ns);
17289
17290 gfc_current_ns = old_ns;
17291 cs_base = old_cs_base;
17292 ns->resolved = 1;
17293
17294 gfc_run_passes (ns);
17295
17296 if (!ns->construct_entities)
17297 gfc_omp_restore_state (&old_omp_state);
17298 }