re PR fortran/92018 (ICE in gfc_conv_constant_to_tree, at fortran/trans-const.c:370)
[gcc.git] / gcc / fortran / resolve.c
1 /* Perform type resolution on the various structures.
2 Copyright (C) 2001-2019 Free Software Foundation, Inc.
3 Contributed by Andy Vaught
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
20
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "options.h"
25 #include "bitmap.h"
26 #include "gfortran.h"
27 #include "arith.h" /* For gfc_compare_expr(). */
28 #include "dependency.h"
29 #include "data.h"
30 #include "target-memory.h" /* for gfc_simplify_transfer */
31 #include "constructor.h"
32
33 /* Types used in equivalence statements. */
34
35 enum seq_type
36 {
37 SEQ_NONDEFAULT, SEQ_NUMERIC, SEQ_CHARACTER, SEQ_MIXED
38 };
39
40 /* Stack to keep track of the nesting of blocks as we move through the
41 code. See resolve_branch() and gfc_resolve_code(). */
42
43 typedef struct code_stack
44 {
45 struct gfc_code *head, *current;
46 struct code_stack *prev;
47
48 /* This bitmap keeps track of the targets valid for a branch from
49 inside this block except for END {IF|SELECT}s of enclosing
50 blocks. */
51 bitmap reachable_labels;
52 }
53 code_stack;
54
55 static code_stack *cs_base = NULL;
56
57
58 /* Nonzero if we're inside a FORALL or DO CONCURRENT block. */
59
60 static int forall_flag;
61 int gfc_do_concurrent_flag;
62
63 /* True when we are resolving an expression that is an actual argument to
64 a procedure. */
65 static bool actual_arg = false;
66 /* True when we are resolving an expression that is the first actual argument
67 to a procedure. */
68 static bool first_actual_arg = false;
69
70
71 /* Nonzero if we're inside a OpenMP WORKSHARE or PARALLEL WORKSHARE block. */
72
73 static int omp_workshare_flag;
74
75 /* True if we are processing a formal arglist. The corresponding function
76 resets the flag each time that it is read. */
77 static bool formal_arg_flag = false;
78
79 /* True if we are resolving a specification expression. */
80 static bool specification_expr = false;
81
82 /* The id of the last entry seen. */
83 static int current_entry_id;
84
85 /* We use bitmaps to determine if a branch target is valid. */
86 static bitmap_obstack labels_obstack;
87
88 /* True when simplifying a EXPR_VARIABLE argument to an inquiry function. */
89 static bool inquiry_argument = false;
90
91
92 bool
93 gfc_is_formal_arg (void)
94 {
95 return formal_arg_flag;
96 }
97
98 /* Is the symbol host associated? */
99 static bool
100 is_sym_host_assoc (gfc_symbol *sym, gfc_namespace *ns)
101 {
102 for (ns = ns->parent; ns; ns = ns->parent)
103 {
104 if (sym->ns == ns)
105 return true;
106 }
107
108 return false;
109 }
110
111 /* Ensure a typespec used is valid; for instance, TYPE(t) is invalid if t is
112 an ABSTRACT derived-type. If where is not NULL, an error message with that
113 locus is printed, optionally using name. */
114
115 static bool
116 resolve_typespec_used (gfc_typespec* ts, locus* where, const char* name)
117 {
118 if (ts->type == BT_DERIVED && ts->u.derived->attr.abstract)
119 {
120 if (where)
121 {
122 if (name)
123 gfc_error ("%qs at %L is of the ABSTRACT type %qs",
124 name, where, ts->u.derived->name);
125 else
126 gfc_error ("ABSTRACT type %qs used at %L",
127 ts->u.derived->name, where);
128 }
129
130 return false;
131 }
132
133 return true;
134 }
135
136
137 static bool
138 check_proc_interface (gfc_symbol *ifc, locus *where)
139 {
140 /* Several checks for F08:C1216. */
141 if (ifc->attr.procedure)
142 {
143 gfc_error ("Interface %qs at %L is declared "
144 "in a later PROCEDURE statement", ifc->name, where);
145 return false;
146 }
147 if (ifc->generic)
148 {
149 /* For generic interfaces, check if there is
150 a specific procedure with the same name. */
151 gfc_interface *gen = ifc->generic;
152 while (gen && strcmp (gen->sym->name, ifc->name) != 0)
153 gen = gen->next;
154 if (!gen)
155 {
156 gfc_error ("Interface %qs at %L may not be generic",
157 ifc->name, where);
158 return false;
159 }
160 }
161 if (ifc->attr.proc == PROC_ST_FUNCTION)
162 {
163 gfc_error ("Interface %qs at %L may not be a statement function",
164 ifc->name, where);
165 return false;
166 }
167 if (gfc_is_intrinsic (ifc, 0, ifc->declared_at)
168 || gfc_is_intrinsic (ifc, 1, ifc->declared_at))
169 ifc->attr.intrinsic = 1;
170 if (ifc->attr.intrinsic && !gfc_intrinsic_actual_ok (ifc->name, 0))
171 {
172 gfc_error ("Intrinsic procedure %qs not allowed in "
173 "PROCEDURE statement at %L", ifc->name, where);
174 return false;
175 }
176 if (!ifc->attr.if_source && !ifc->attr.intrinsic && ifc->name[0] != '\0')
177 {
178 gfc_error ("Interface %qs at %L must be explicit", ifc->name, where);
179 return false;
180 }
181 return true;
182 }
183
184
185 static void resolve_symbol (gfc_symbol *sym);
186
187
188 /* Resolve the interface for a PROCEDURE declaration or procedure pointer. */
189
190 static bool
191 resolve_procedure_interface (gfc_symbol *sym)
192 {
193 gfc_symbol *ifc = sym->ts.interface;
194
195 if (!ifc)
196 return true;
197
198 if (ifc == sym)
199 {
200 gfc_error ("PROCEDURE %qs at %L may not be used as its own interface",
201 sym->name, &sym->declared_at);
202 return false;
203 }
204 if (!check_proc_interface (ifc, &sym->declared_at))
205 return false;
206
207 if (ifc->attr.if_source || ifc->attr.intrinsic)
208 {
209 /* Resolve interface and copy attributes. */
210 resolve_symbol (ifc);
211 if (ifc->attr.intrinsic)
212 gfc_resolve_intrinsic (ifc, &ifc->declared_at);
213
214 if (ifc->result)
215 {
216 sym->ts = ifc->result->ts;
217 sym->attr.allocatable = ifc->result->attr.allocatable;
218 sym->attr.pointer = ifc->result->attr.pointer;
219 sym->attr.dimension = ifc->result->attr.dimension;
220 sym->attr.class_ok = ifc->result->attr.class_ok;
221 sym->as = gfc_copy_array_spec (ifc->result->as);
222 sym->result = sym;
223 }
224 else
225 {
226 sym->ts = ifc->ts;
227 sym->attr.allocatable = ifc->attr.allocatable;
228 sym->attr.pointer = ifc->attr.pointer;
229 sym->attr.dimension = ifc->attr.dimension;
230 sym->attr.class_ok = ifc->attr.class_ok;
231 sym->as = gfc_copy_array_spec (ifc->as);
232 }
233 sym->ts.interface = ifc;
234 sym->attr.function = ifc->attr.function;
235 sym->attr.subroutine = ifc->attr.subroutine;
236
237 sym->attr.pure = ifc->attr.pure;
238 sym->attr.elemental = ifc->attr.elemental;
239 sym->attr.contiguous = ifc->attr.contiguous;
240 sym->attr.recursive = ifc->attr.recursive;
241 sym->attr.always_explicit = ifc->attr.always_explicit;
242 sym->attr.ext_attr |= ifc->attr.ext_attr;
243 sym->attr.is_bind_c = ifc->attr.is_bind_c;
244 /* Copy char length. */
245 if (ifc->ts.type == BT_CHARACTER && ifc->ts.u.cl)
246 {
247 sym->ts.u.cl = gfc_new_charlen (sym->ns, ifc->ts.u.cl);
248 if (sym->ts.u.cl->length && !sym->ts.u.cl->resolved
249 && !gfc_resolve_expr (sym->ts.u.cl->length))
250 return false;
251 }
252 }
253
254 return true;
255 }
256
257
258 /* Resolve types of formal argument lists. These have to be done early so that
259 the formal argument lists of module procedures can be copied to the
260 containing module before the individual procedures are resolved
261 individually. We also resolve argument lists of procedures in interface
262 blocks because they are self-contained scoping units.
263
264 Since a dummy argument cannot be a non-dummy procedure, the only
265 resort left for untyped names are the IMPLICIT types. */
266
267 static void
268 resolve_formal_arglist (gfc_symbol *proc)
269 {
270 gfc_formal_arglist *f;
271 gfc_symbol *sym;
272 bool saved_specification_expr;
273 int i;
274
275 if (proc->result != NULL)
276 sym = proc->result;
277 else
278 sym = proc;
279
280 if (gfc_elemental (proc)
281 || sym->attr.pointer || sym->attr.allocatable
282 || (sym->as && sym->as->rank != 0))
283 {
284 proc->attr.always_explicit = 1;
285 sym->attr.always_explicit = 1;
286 }
287
288 formal_arg_flag = true;
289
290 for (f = proc->formal; f; f = f->next)
291 {
292 gfc_array_spec *as;
293
294 sym = f->sym;
295
296 if (sym == NULL)
297 {
298 /* Alternate return placeholder. */
299 if (gfc_elemental (proc))
300 gfc_error ("Alternate return specifier in elemental subroutine "
301 "%qs at %L is not allowed", proc->name,
302 &proc->declared_at);
303 if (proc->attr.function)
304 gfc_error ("Alternate return specifier in function "
305 "%qs at %L is not allowed", proc->name,
306 &proc->declared_at);
307 continue;
308 }
309 else if (sym->attr.procedure && sym->attr.if_source != IFSRC_DECL
310 && !resolve_procedure_interface (sym))
311 return;
312
313 if (strcmp (proc->name, sym->name) == 0)
314 {
315 gfc_error ("Self-referential argument "
316 "%qs at %L is not allowed", sym->name,
317 &proc->declared_at);
318 return;
319 }
320
321 if (sym->attr.if_source != IFSRC_UNKNOWN)
322 resolve_formal_arglist (sym);
323
324 if (sym->attr.subroutine || sym->attr.external)
325 {
326 if (sym->attr.flavor == FL_UNKNOWN)
327 gfc_add_flavor (&sym->attr, FL_PROCEDURE, sym->name, &sym->declared_at);
328 }
329 else
330 {
331 if (sym->ts.type == BT_UNKNOWN && !proc->attr.intrinsic
332 && (!sym->attr.function || sym->result == sym))
333 gfc_set_default_type (sym, 1, sym->ns);
334 }
335
336 as = sym->ts.type == BT_CLASS && sym->attr.class_ok
337 ? CLASS_DATA (sym)->as : sym->as;
338
339 saved_specification_expr = specification_expr;
340 specification_expr = true;
341 gfc_resolve_array_spec (as, 0);
342 specification_expr = saved_specification_expr;
343
344 /* We can't tell if an array with dimension (:) is assumed or deferred
345 shape until we know if it has the pointer or allocatable attributes.
346 */
347 if (as && as->rank > 0 && as->type == AS_DEFERRED
348 && ((sym->ts.type != BT_CLASS
349 && !(sym->attr.pointer || sym->attr.allocatable))
350 || (sym->ts.type == BT_CLASS
351 && !(CLASS_DATA (sym)->attr.class_pointer
352 || CLASS_DATA (sym)->attr.allocatable)))
353 && sym->attr.flavor != FL_PROCEDURE)
354 {
355 as->type = AS_ASSUMED_SHAPE;
356 for (i = 0; i < as->rank; i++)
357 as->lower[i] = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
358 }
359
360 if ((as && as->rank > 0 && as->type == AS_ASSUMED_SHAPE)
361 || (as && as->type == AS_ASSUMED_RANK)
362 || sym->attr.pointer || sym->attr.allocatable || sym->attr.target
363 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
364 && (CLASS_DATA (sym)->attr.class_pointer
365 || CLASS_DATA (sym)->attr.allocatable
366 || CLASS_DATA (sym)->attr.target))
367 || sym->attr.optional)
368 {
369 proc->attr.always_explicit = 1;
370 if (proc->result)
371 proc->result->attr.always_explicit = 1;
372 }
373
374 /* If the flavor is unknown at this point, it has to be a variable.
375 A procedure specification would have already set the type. */
376
377 if (sym->attr.flavor == FL_UNKNOWN)
378 gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, &sym->declared_at);
379
380 if (gfc_pure (proc))
381 {
382 if (sym->attr.flavor == FL_PROCEDURE)
383 {
384 /* F08:C1279. */
385 if (!gfc_pure (sym))
386 {
387 gfc_error ("Dummy procedure %qs of PURE procedure at %L must "
388 "also be PURE", sym->name, &sym->declared_at);
389 continue;
390 }
391 }
392 else if (!sym->attr.pointer)
393 {
394 if (proc->attr.function && sym->attr.intent != INTENT_IN)
395 {
396 if (sym->attr.value)
397 gfc_notify_std (GFC_STD_F2008, "Argument %qs"
398 " of pure function %qs at %L with VALUE "
399 "attribute but without INTENT(IN)",
400 sym->name, proc->name, &sym->declared_at);
401 else
402 gfc_error ("Argument %qs of pure function %qs at %L must "
403 "be INTENT(IN) or VALUE", sym->name, proc->name,
404 &sym->declared_at);
405 }
406
407 if (proc->attr.subroutine && sym->attr.intent == INTENT_UNKNOWN)
408 {
409 if (sym->attr.value)
410 gfc_notify_std (GFC_STD_F2008, "Argument %qs"
411 " of pure subroutine %qs at %L with VALUE "
412 "attribute but without INTENT", sym->name,
413 proc->name, &sym->declared_at);
414 else
415 gfc_error ("Argument %qs of pure subroutine %qs at %L "
416 "must have its INTENT specified or have the "
417 "VALUE attribute", sym->name, proc->name,
418 &sym->declared_at);
419 }
420 }
421
422 /* F08:C1278a. */
423 if (sym->ts.type == BT_CLASS && sym->attr.intent == INTENT_OUT)
424 {
425 gfc_error ("INTENT(OUT) argument %qs of pure procedure %qs at %L"
426 " may not be polymorphic", sym->name, proc->name,
427 &sym->declared_at);
428 continue;
429 }
430 }
431
432 if (proc->attr.implicit_pure)
433 {
434 if (sym->attr.flavor == FL_PROCEDURE)
435 {
436 if (!gfc_pure (sym))
437 proc->attr.implicit_pure = 0;
438 }
439 else if (!sym->attr.pointer)
440 {
441 if (proc->attr.function && sym->attr.intent != INTENT_IN
442 && !sym->value)
443 proc->attr.implicit_pure = 0;
444
445 if (proc->attr.subroutine && sym->attr.intent == INTENT_UNKNOWN
446 && !sym->value)
447 proc->attr.implicit_pure = 0;
448 }
449 }
450
451 if (gfc_elemental (proc))
452 {
453 /* F08:C1289. */
454 if (sym->attr.codimension
455 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
456 && CLASS_DATA (sym)->attr.codimension))
457 {
458 gfc_error ("Coarray dummy argument %qs at %L to elemental "
459 "procedure", sym->name, &sym->declared_at);
460 continue;
461 }
462
463 if (sym->as || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
464 && CLASS_DATA (sym)->as))
465 {
466 gfc_error ("Argument %qs of elemental procedure at %L must "
467 "be scalar", sym->name, &sym->declared_at);
468 continue;
469 }
470
471 if (sym->attr.allocatable
472 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
473 && CLASS_DATA (sym)->attr.allocatable))
474 {
475 gfc_error ("Argument %qs of elemental procedure at %L cannot "
476 "have the ALLOCATABLE attribute", sym->name,
477 &sym->declared_at);
478 continue;
479 }
480
481 if (sym->attr.pointer
482 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
483 && CLASS_DATA (sym)->attr.class_pointer))
484 {
485 gfc_error ("Argument %qs of elemental procedure at %L cannot "
486 "have the POINTER attribute", sym->name,
487 &sym->declared_at);
488 continue;
489 }
490
491 if (sym->attr.flavor == FL_PROCEDURE)
492 {
493 gfc_error ("Dummy procedure %qs not allowed in elemental "
494 "procedure %qs at %L", sym->name, proc->name,
495 &sym->declared_at);
496 continue;
497 }
498
499 /* Fortran 2008 Corrigendum 1, C1290a. */
500 if (sym->attr.intent == INTENT_UNKNOWN && !sym->attr.value)
501 {
502 gfc_error ("Argument %qs of elemental procedure %qs at %L must "
503 "have its INTENT specified or have the VALUE "
504 "attribute", sym->name, proc->name,
505 &sym->declared_at);
506 continue;
507 }
508 }
509
510 /* Each dummy shall be specified to be scalar. */
511 if (proc->attr.proc == PROC_ST_FUNCTION)
512 {
513 if (sym->as != NULL)
514 {
515 /* F03:C1263 (R1238) The function-name and each dummy-arg-name
516 shall be specified, explicitly or implicitly, to be scalar. */
517 gfc_error ("Argument '%s' of statement function '%s' at %L "
518 "must be scalar", sym->name, proc->name,
519 &proc->declared_at);
520 continue;
521 }
522
523 if (sym->ts.type == BT_CHARACTER)
524 {
525 gfc_charlen *cl = sym->ts.u.cl;
526 if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
527 {
528 gfc_error ("Character-valued argument %qs of statement "
529 "function at %L must have constant length",
530 sym->name, &sym->declared_at);
531 continue;
532 }
533 }
534 }
535 }
536 formal_arg_flag = false;
537 }
538
539
540 /* Work function called when searching for symbols that have argument lists
541 associated with them. */
542
543 static void
544 find_arglists (gfc_symbol *sym)
545 {
546 if (sym->attr.if_source == IFSRC_UNKNOWN || sym->ns != gfc_current_ns
547 || gfc_fl_struct (sym->attr.flavor) || sym->attr.intrinsic)
548 return;
549
550 resolve_formal_arglist (sym);
551 }
552
553
554 /* Given a namespace, resolve all formal argument lists within the namespace.
555 */
556
557 static void
558 resolve_formal_arglists (gfc_namespace *ns)
559 {
560 if (ns == NULL)
561 return;
562
563 gfc_traverse_ns (ns, find_arglists);
564 }
565
566
567 static void
568 resolve_contained_fntype (gfc_symbol *sym, gfc_namespace *ns)
569 {
570 bool t;
571
572 if (sym && sym->attr.flavor == FL_PROCEDURE
573 && sym->ns->parent
574 && sym->ns->parent->proc_name
575 && sym->ns->parent->proc_name->attr.flavor == FL_PROCEDURE
576 && !strcmp (sym->name, sym->ns->parent->proc_name->name))
577 gfc_error ("Contained procedure %qs at %L has the same name as its "
578 "encompassing procedure", sym->name, &sym->declared_at);
579
580 /* If this namespace is not a function or an entry master function,
581 ignore it. */
582 if (! sym || !(sym->attr.function || sym->attr.flavor == FL_VARIABLE)
583 || sym->attr.entry_master)
584 return;
585
586 if (!sym->result)
587 return;
588
589 /* Try to find out of what the return type is. */
590 if (sym->result->ts.type == BT_UNKNOWN && sym->result->ts.interface == NULL)
591 {
592 t = gfc_set_default_type (sym->result, 0, ns);
593
594 if (!t && !sym->result->attr.untyped)
595 {
596 if (sym->result == sym)
597 gfc_error ("Contained function %qs at %L has no IMPLICIT type",
598 sym->name, &sym->declared_at);
599 else if (!sym->result->attr.proc_pointer)
600 gfc_error ("Result %qs of contained function %qs at %L has "
601 "no IMPLICIT type", sym->result->name, sym->name,
602 &sym->result->declared_at);
603 sym->result->attr.untyped = 1;
604 }
605 }
606
607 /* Fortran 2008 Draft Standard, page 535, C418, on type-param-value
608 type, lists the only ways a character length value of * can be used:
609 dummy arguments of procedures, named constants, function results and
610 in allocate statements if the allocate_object is an assumed length dummy
611 in external functions. Internal function results and results of module
612 procedures are not on this list, ergo, not permitted. */
613
614 if (sym->result->ts.type == BT_CHARACTER)
615 {
616 gfc_charlen *cl = sym->result->ts.u.cl;
617 if ((!cl || !cl->length) && !sym->result->ts.deferred)
618 {
619 /* See if this is a module-procedure and adapt error message
620 accordingly. */
621 bool module_proc;
622 gcc_assert (ns->parent && ns->parent->proc_name);
623 module_proc = (ns->parent->proc_name->attr.flavor == FL_MODULE);
624
625 gfc_error (module_proc
626 ? G_("Character-valued module procedure %qs at %L"
627 " must not be assumed length")
628 : G_("Character-valued internal function %qs at %L"
629 " must not be assumed length"),
630 sym->name, &sym->declared_at);
631 }
632 }
633 }
634
635
636 /* Add NEW_ARGS to the formal argument list of PROC, taking care not to
637 introduce duplicates. */
638
639 static void
640 merge_argument_lists (gfc_symbol *proc, gfc_formal_arglist *new_args)
641 {
642 gfc_formal_arglist *f, *new_arglist;
643 gfc_symbol *new_sym;
644
645 for (; new_args != NULL; new_args = new_args->next)
646 {
647 new_sym = new_args->sym;
648 /* See if this arg is already in the formal argument list. */
649 for (f = proc->formal; f; f = f->next)
650 {
651 if (new_sym == f->sym)
652 break;
653 }
654
655 if (f)
656 continue;
657
658 /* Add a new argument. Argument order is not important. */
659 new_arglist = gfc_get_formal_arglist ();
660 new_arglist->sym = new_sym;
661 new_arglist->next = proc->formal;
662 proc->formal = new_arglist;
663 }
664 }
665
666
667 /* Flag the arguments that are not present in all entries. */
668
669 static void
670 check_argument_lists (gfc_symbol *proc, gfc_formal_arglist *new_args)
671 {
672 gfc_formal_arglist *f, *head;
673 head = new_args;
674
675 for (f = proc->formal; f; f = f->next)
676 {
677 if (f->sym == NULL)
678 continue;
679
680 for (new_args = head; new_args; new_args = new_args->next)
681 {
682 if (new_args->sym == f->sym)
683 break;
684 }
685
686 if (new_args)
687 continue;
688
689 f->sym->attr.not_always_present = 1;
690 }
691 }
692
693
694 /* Resolve alternate entry points. If a symbol has multiple entry points we
695 create a new master symbol for the main routine, and turn the existing
696 symbol into an entry point. */
697
698 static void
699 resolve_entries (gfc_namespace *ns)
700 {
701 gfc_namespace *old_ns;
702 gfc_code *c;
703 gfc_symbol *proc;
704 gfc_entry_list *el;
705 char name[GFC_MAX_SYMBOL_LEN + 1];
706 static int master_count = 0;
707
708 if (ns->proc_name == NULL)
709 return;
710
711 /* No need to do anything if this procedure doesn't have alternate entry
712 points. */
713 if (!ns->entries)
714 return;
715
716 /* We may already have resolved alternate entry points. */
717 if (ns->proc_name->attr.entry_master)
718 return;
719
720 /* If this isn't a procedure something has gone horribly wrong. */
721 gcc_assert (ns->proc_name->attr.flavor == FL_PROCEDURE);
722
723 /* Remember the current namespace. */
724 old_ns = gfc_current_ns;
725
726 gfc_current_ns = ns;
727
728 /* Add the main entry point to the list of entry points. */
729 el = gfc_get_entry_list ();
730 el->sym = ns->proc_name;
731 el->id = 0;
732 el->next = ns->entries;
733 ns->entries = el;
734 ns->proc_name->attr.entry = 1;
735
736 /* If it is a module function, it needs to be in the right namespace
737 so that gfc_get_fake_result_decl can gather up the results. The
738 need for this arose in get_proc_name, where these beasts were
739 left in their own namespace, to keep prior references linked to
740 the entry declaration.*/
741 if (ns->proc_name->attr.function
742 && ns->parent && ns->parent->proc_name->attr.flavor == FL_MODULE)
743 el->sym->ns = ns;
744
745 /* Do the same for entries where the master is not a module
746 procedure. These are retained in the module namespace because
747 of the module procedure declaration. */
748 for (el = el->next; el; el = el->next)
749 if (el->sym->ns->proc_name->attr.flavor == FL_MODULE
750 && el->sym->attr.mod_proc)
751 el->sym->ns = ns;
752 el = ns->entries;
753
754 /* Add an entry statement for it. */
755 c = gfc_get_code (EXEC_ENTRY);
756 c->ext.entry = el;
757 c->next = ns->code;
758 ns->code = c;
759
760 /* Create a new symbol for the master function. */
761 /* Give the internal function a unique name (within this file).
762 Also include the function name so the user has some hope of figuring
763 out what is going on. */
764 snprintf (name, GFC_MAX_SYMBOL_LEN, "master.%d.%s",
765 master_count++, ns->proc_name->name);
766 gfc_get_ha_symbol (name, &proc);
767 gcc_assert (proc != NULL);
768
769 gfc_add_procedure (&proc->attr, PROC_INTERNAL, proc->name, NULL);
770 if (ns->proc_name->attr.subroutine)
771 gfc_add_subroutine (&proc->attr, proc->name, NULL);
772 else
773 {
774 gfc_symbol *sym;
775 gfc_typespec *ts, *fts;
776 gfc_array_spec *as, *fas;
777 gfc_add_function (&proc->attr, proc->name, NULL);
778 proc->result = proc;
779 fas = ns->entries->sym->as;
780 fas = fas ? fas : ns->entries->sym->result->as;
781 fts = &ns->entries->sym->result->ts;
782 if (fts->type == BT_UNKNOWN)
783 fts = gfc_get_default_type (ns->entries->sym->result->name, NULL);
784 for (el = ns->entries->next; el; el = el->next)
785 {
786 ts = &el->sym->result->ts;
787 as = el->sym->as;
788 as = as ? as : el->sym->result->as;
789 if (ts->type == BT_UNKNOWN)
790 ts = gfc_get_default_type (el->sym->result->name, NULL);
791
792 if (! gfc_compare_types (ts, fts)
793 || (el->sym->result->attr.dimension
794 != ns->entries->sym->result->attr.dimension)
795 || (el->sym->result->attr.pointer
796 != ns->entries->sym->result->attr.pointer))
797 break;
798 else if (as && fas && ns->entries->sym->result != el->sym->result
799 && gfc_compare_array_spec (as, fas) == 0)
800 gfc_error ("Function %s at %L has entries with mismatched "
801 "array specifications", ns->entries->sym->name,
802 &ns->entries->sym->declared_at);
803 /* The characteristics need to match and thus both need to have
804 the same string length, i.e. both len=*, or both len=4.
805 Having both len=<variable> is also possible, but difficult to
806 check at compile time. */
807 else if (ts->type == BT_CHARACTER && ts->u.cl && fts->u.cl
808 && (((ts->u.cl->length && !fts->u.cl->length)
809 ||(!ts->u.cl->length && fts->u.cl->length))
810 || (ts->u.cl->length
811 && ts->u.cl->length->expr_type
812 != fts->u.cl->length->expr_type)
813 || (ts->u.cl->length
814 && ts->u.cl->length->expr_type == EXPR_CONSTANT
815 && mpz_cmp (ts->u.cl->length->value.integer,
816 fts->u.cl->length->value.integer) != 0)))
817 gfc_notify_std (GFC_STD_GNU, "Function %s at %L with "
818 "entries returning variables of different "
819 "string lengths", ns->entries->sym->name,
820 &ns->entries->sym->declared_at);
821 }
822
823 if (el == NULL)
824 {
825 sym = ns->entries->sym->result;
826 /* All result types the same. */
827 proc->ts = *fts;
828 if (sym->attr.dimension)
829 gfc_set_array_spec (proc, gfc_copy_array_spec (sym->as), NULL);
830 if (sym->attr.pointer)
831 gfc_add_pointer (&proc->attr, NULL);
832 }
833 else
834 {
835 /* Otherwise the result will be passed through a union by
836 reference. */
837 proc->attr.mixed_entry_master = 1;
838 for (el = ns->entries; el; el = el->next)
839 {
840 sym = el->sym->result;
841 if (sym->attr.dimension)
842 {
843 if (el == ns->entries)
844 gfc_error ("FUNCTION result %s cannot be an array in "
845 "FUNCTION %s at %L", sym->name,
846 ns->entries->sym->name, &sym->declared_at);
847 else
848 gfc_error ("ENTRY result %s cannot be an array in "
849 "FUNCTION %s at %L", sym->name,
850 ns->entries->sym->name, &sym->declared_at);
851 }
852 else if (sym->attr.pointer)
853 {
854 if (el == ns->entries)
855 gfc_error ("FUNCTION result %s cannot be a POINTER in "
856 "FUNCTION %s at %L", sym->name,
857 ns->entries->sym->name, &sym->declared_at);
858 else
859 gfc_error ("ENTRY result %s cannot be a POINTER in "
860 "FUNCTION %s at %L", sym->name,
861 ns->entries->sym->name, &sym->declared_at);
862 }
863 else
864 {
865 ts = &sym->ts;
866 if (ts->type == BT_UNKNOWN)
867 ts = gfc_get_default_type (sym->name, NULL);
868 switch (ts->type)
869 {
870 case BT_INTEGER:
871 if (ts->kind == gfc_default_integer_kind)
872 sym = NULL;
873 break;
874 case BT_REAL:
875 if (ts->kind == gfc_default_real_kind
876 || ts->kind == gfc_default_double_kind)
877 sym = NULL;
878 break;
879 case BT_COMPLEX:
880 if (ts->kind == gfc_default_complex_kind)
881 sym = NULL;
882 break;
883 case BT_LOGICAL:
884 if (ts->kind == gfc_default_logical_kind)
885 sym = NULL;
886 break;
887 case BT_UNKNOWN:
888 /* We will issue error elsewhere. */
889 sym = NULL;
890 break;
891 default:
892 break;
893 }
894 if (sym)
895 {
896 if (el == ns->entries)
897 gfc_error ("FUNCTION result %s cannot be of type %s "
898 "in FUNCTION %s at %L", sym->name,
899 gfc_typename (ts), ns->entries->sym->name,
900 &sym->declared_at);
901 else
902 gfc_error ("ENTRY result %s cannot be of type %s "
903 "in FUNCTION %s at %L", sym->name,
904 gfc_typename (ts), ns->entries->sym->name,
905 &sym->declared_at);
906 }
907 }
908 }
909 }
910 }
911 proc->attr.access = ACCESS_PRIVATE;
912 proc->attr.entry_master = 1;
913
914 /* Merge all the entry point arguments. */
915 for (el = ns->entries; el; el = el->next)
916 merge_argument_lists (proc, el->sym->formal);
917
918 /* Check the master formal arguments for any that are not
919 present in all entry points. */
920 for (el = ns->entries; el; el = el->next)
921 check_argument_lists (proc, el->sym->formal);
922
923 /* Use the master function for the function body. */
924 ns->proc_name = proc;
925
926 /* Finalize the new symbols. */
927 gfc_commit_symbols ();
928
929 /* Restore the original namespace. */
930 gfc_current_ns = old_ns;
931 }
932
933
934 /* Resolve common variables. */
935 static void
936 resolve_common_vars (gfc_common_head *common_block, bool named_common)
937 {
938 gfc_symbol *csym = common_block->head;
939
940 for (; csym; csym = csym->common_next)
941 {
942 /* gfc_add_in_common may have been called before, but the reported errors
943 have been ignored to continue parsing.
944 We do the checks again here. */
945 if (!csym->attr.use_assoc)
946 {
947 gfc_add_in_common (&csym->attr, csym->name, &common_block->where);
948 gfc_notify_std (GFC_STD_F2018_OBS, "COMMON block at %L",
949 &common_block->where);
950 }
951
952 if (csym->value || csym->attr.data)
953 {
954 if (!csym->ns->is_block_data)
955 gfc_notify_std (GFC_STD_GNU, "Variable %qs at %L is in COMMON "
956 "but only in BLOCK DATA initialization is "
957 "allowed", csym->name, &csym->declared_at);
958 else if (!named_common)
959 gfc_notify_std (GFC_STD_GNU, "Initialized variable %qs at %L is "
960 "in a blank COMMON but initialization is only "
961 "allowed in named common blocks", csym->name,
962 &csym->declared_at);
963 }
964
965 if (UNLIMITED_POLY (csym))
966 gfc_error_now ("%qs in cannot appear in COMMON at %L "
967 "[F2008:C5100]", csym->name, &csym->declared_at);
968
969 if (csym->ts.type != BT_DERIVED)
970 continue;
971
972 if (!(csym->ts.u.derived->attr.sequence
973 || csym->ts.u.derived->attr.is_bind_c))
974 gfc_error_now ("Derived type variable %qs in COMMON at %L "
975 "has neither the SEQUENCE nor the BIND(C) "
976 "attribute", csym->name, &csym->declared_at);
977 if (csym->ts.u.derived->attr.alloc_comp)
978 gfc_error_now ("Derived type variable %qs in COMMON at %L "
979 "has an ultimate component that is "
980 "allocatable", csym->name, &csym->declared_at);
981 if (gfc_has_default_initializer (csym->ts.u.derived))
982 gfc_error_now ("Derived type variable %qs in COMMON at %L "
983 "may not have default initializer", csym->name,
984 &csym->declared_at);
985
986 if (csym->attr.flavor == FL_UNKNOWN && !csym->attr.proc_pointer)
987 gfc_add_flavor (&csym->attr, FL_VARIABLE, csym->name, &csym->declared_at);
988 }
989 }
990
991 /* Resolve common blocks. */
992 static void
993 resolve_common_blocks (gfc_symtree *common_root)
994 {
995 gfc_symbol *sym;
996 gfc_gsymbol * gsym;
997
998 if (common_root == NULL)
999 return;
1000
1001 if (common_root->left)
1002 resolve_common_blocks (common_root->left);
1003 if (common_root->right)
1004 resolve_common_blocks (common_root->right);
1005
1006 resolve_common_vars (common_root->n.common, true);
1007
1008 /* The common name is a global name - in Fortran 2003 also if it has a
1009 C binding name, since Fortran 2008 only the C binding name is a global
1010 identifier. */
1011 if (!common_root->n.common->binding_label
1012 || gfc_notification_std (GFC_STD_F2008))
1013 {
1014 gsym = gfc_find_gsymbol (gfc_gsym_root,
1015 common_root->n.common->name);
1016
1017 if (gsym && gfc_notification_std (GFC_STD_F2008)
1018 && gsym->type == GSYM_COMMON
1019 && ((common_root->n.common->binding_label
1020 && (!gsym->binding_label
1021 || strcmp (common_root->n.common->binding_label,
1022 gsym->binding_label) != 0))
1023 || (!common_root->n.common->binding_label
1024 && gsym->binding_label)))
1025 {
1026 gfc_error ("In Fortran 2003 COMMON %qs block at %L is a global "
1027 "identifier and must thus have the same binding name "
1028 "as the same-named COMMON block at %L: %s vs %s",
1029 common_root->n.common->name, &common_root->n.common->where,
1030 &gsym->where,
1031 common_root->n.common->binding_label
1032 ? common_root->n.common->binding_label : "(blank)",
1033 gsym->binding_label ? gsym->binding_label : "(blank)");
1034 return;
1035 }
1036
1037 if (gsym && gsym->type != GSYM_COMMON
1038 && !common_root->n.common->binding_label)
1039 {
1040 gfc_error ("COMMON block %qs at %L uses the same global identifier "
1041 "as entity at %L",
1042 common_root->n.common->name, &common_root->n.common->where,
1043 &gsym->where);
1044 return;
1045 }
1046 if (gsym && gsym->type != GSYM_COMMON)
1047 {
1048 gfc_error ("Fortran 2008: COMMON block %qs with binding label at "
1049 "%L sharing the identifier with global non-COMMON-block "
1050 "entity at %L", common_root->n.common->name,
1051 &common_root->n.common->where, &gsym->where);
1052 return;
1053 }
1054 if (!gsym)
1055 {
1056 gsym = gfc_get_gsymbol (common_root->n.common->name, false);
1057 gsym->type = GSYM_COMMON;
1058 gsym->where = common_root->n.common->where;
1059 gsym->defined = 1;
1060 }
1061 gsym->used = 1;
1062 }
1063
1064 if (common_root->n.common->binding_label)
1065 {
1066 gsym = gfc_find_gsymbol (gfc_gsym_root,
1067 common_root->n.common->binding_label);
1068 if (gsym && gsym->type != GSYM_COMMON)
1069 {
1070 gfc_error ("COMMON block at %L with binding label %qs uses the same "
1071 "global identifier as entity at %L",
1072 &common_root->n.common->where,
1073 common_root->n.common->binding_label, &gsym->where);
1074 return;
1075 }
1076 if (!gsym)
1077 {
1078 gsym = gfc_get_gsymbol (common_root->n.common->binding_label, true);
1079 gsym->type = GSYM_COMMON;
1080 gsym->where = common_root->n.common->where;
1081 gsym->defined = 1;
1082 }
1083 gsym->used = 1;
1084 }
1085
1086 gfc_find_symbol (common_root->name, gfc_current_ns, 0, &sym);
1087 if (sym == NULL)
1088 return;
1089
1090 if (sym->attr.flavor == FL_PARAMETER)
1091 gfc_error ("COMMON block %qs at %L is used as PARAMETER at %L",
1092 sym->name, &common_root->n.common->where, &sym->declared_at);
1093
1094 if (sym->attr.external)
1095 gfc_error ("COMMON block %qs at %L cannot have the EXTERNAL attribute",
1096 sym->name, &common_root->n.common->where);
1097
1098 if (sym->attr.intrinsic)
1099 gfc_error ("COMMON block %qs at %L is also an intrinsic procedure",
1100 sym->name, &common_root->n.common->where);
1101 else if (sym->attr.result
1102 || gfc_is_function_return_value (sym, gfc_current_ns))
1103 gfc_notify_std (GFC_STD_F2003, "COMMON block %qs at %L "
1104 "that is also a function result", sym->name,
1105 &common_root->n.common->where);
1106 else if (sym->attr.flavor == FL_PROCEDURE && sym->attr.proc != PROC_INTERNAL
1107 && sym->attr.proc != PROC_ST_FUNCTION)
1108 gfc_notify_std (GFC_STD_F2003, "COMMON block %qs at %L "
1109 "that is also a global procedure", sym->name,
1110 &common_root->n.common->where);
1111 }
1112
1113
1114 /* Resolve contained function types. Because contained functions can call one
1115 another, they have to be worked out before any of the contained procedures
1116 can be resolved.
1117
1118 The good news is that if a function doesn't already have a type, the only
1119 way it can get one is through an IMPLICIT type or a RESULT variable, because
1120 by definition contained functions are contained namespace they're contained
1121 in, not in a sibling or parent namespace. */
1122
1123 static void
1124 resolve_contained_functions (gfc_namespace *ns)
1125 {
1126 gfc_namespace *child;
1127 gfc_entry_list *el;
1128
1129 resolve_formal_arglists (ns);
1130
1131 for (child = ns->contained; child; child = child->sibling)
1132 {
1133 /* Resolve alternate entry points first. */
1134 resolve_entries (child);
1135
1136 /* Then check function return types. */
1137 resolve_contained_fntype (child->proc_name, child);
1138 for (el = child->entries; el; el = el->next)
1139 resolve_contained_fntype (el->sym, child);
1140 }
1141 }
1142
1143
1144
1145 /* A Parameterized Derived Type constructor must contain values for
1146 the PDT KIND parameters or they must have a default initializer.
1147 Go through the constructor picking out the KIND expressions,
1148 storing them in 'param_list' and then call gfc_get_pdt_instance
1149 to obtain the PDT instance. */
1150
1151 static gfc_actual_arglist *param_list, *param_tail, *param;
1152
1153 static bool
1154 get_pdt_spec_expr (gfc_component *c, gfc_expr *expr)
1155 {
1156 param = gfc_get_actual_arglist ();
1157 if (!param_list)
1158 param_list = param_tail = param;
1159 else
1160 {
1161 param_tail->next = param;
1162 param_tail = param_tail->next;
1163 }
1164
1165 param_tail->name = c->name;
1166 if (expr)
1167 param_tail->expr = gfc_copy_expr (expr);
1168 else if (c->initializer)
1169 param_tail->expr = gfc_copy_expr (c->initializer);
1170 else
1171 {
1172 param_tail->spec_type = SPEC_ASSUMED;
1173 if (c->attr.pdt_kind)
1174 {
1175 gfc_error ("The KIND parameter %qs in the PDT constructor "
1176 "at %C has no value", param->name);
1177 return false;
1178 }
1179 }
1180
1181 return true;
1182 }
1183
1184 static bool
1185 get_pdt_constructor (gfc_expr *expr, gfc_constructor **constr,
1186 gfc_symbol *derived)
1187 {
1188 gfc_constructor *cons = NULL;
1189 gfc_component *comp;
1190 bool t = true;
1191
1192 if (expr && expr->expr_type == EXPR_STRUCTURE)
1193 cons = gfc_constructor_first (expr->value.constructor);
1194 else if (constr)
1195 cons = *constr;
1196 gcc_assert (cons);
1197
1198 comp = derived->components;
1199
1200 for (; comp && cons; comp = comp->next, cons = gfc_constructor_next (cons))
1201 {
1202 if (cons->expr
1203 && cons->expr->expr_type == EXPR_STRUCTURE
1204 && comp->ts.type == BT_DERIVED)
1205 {
1206 t = get_pdt_constructor (cons->expr, NULL, comp->ts.u.derived);
1207 if (!t)
1208 return t;
1209 }
1210 else if (comp->ts.type == BT_DERIVED)
1211 {
1212 t = get_pdt_constructor (NULL, &cons, comp->ts.u.derived);
1213 if (!t)
1214 return t;
1215 }
1216 else if ((comp->attr.pdt_kind || comp->attr.pdt_len)
1217 && derived->attr.pdt_template)
1218 {
1219 t = get_pdt_spec_expr (comp, cons->expr);
1220 if (!t)
1221 return t;
1222 }
1223 }
1224 return t;
1225 }
1226
1227
1228 static bool resolve_fl_derived0 (gfc_symbol *sym);
1229 static bool resolve_fl_struct (gfc_symbol *sym);
1230
1231
1232 /* Resolve all of the elements of a structure constructor and make sure that
1233 the types are correct. The 'init' flag indicates that the given
1234 constructor is an initializer. */
1235
1236 static bool
1237 resolve_structure_cons (gfc_expr *expr, int init)
1238 {
1239 gfc_constructor *cons;
1240 gfc_component *comp;
1241 bool t;
1242 symbol_attribute a;
1243
1244 t = true;
1245
1246 if (expr->ts.type == BT_DERIVED || expr->ts.type == BT_UNION)
1247 {
1248 if (expr->ts.u.derived->attr.flavor == FL_DERIVED)
1249 resolve_fl_derived0 (expr->ts.u.derived);
1250 else
1251 resolve_fl_struct (expr->ts.u.derived);
1252
1253 /* If this is a Parameterized Derived Type template, find the
1254 instance corresponding to the PDT kind parameters. */
1255 if (expr->ts.u.derived->attr.pdt_template)
1256 {
1257 param_list = NULL;
1258 t = get_pdt_constructor (expr, NULL, expr->ts.u.derived);
1259 if (!t)
1260 return t;
1261 gfc_get_pdt_instance (param_list, &expr->ts.u.derived, NULL);
1262
1263 expr->param_list = gfc_copy_actual_arglist (param_list);
1264
1265 if (param_list)
1266 gfc_free_actual_arglist (param_list);
1267
1268 if (!expr->ts.u.derived->attr.pdt_type)
1269 return false;
1270 }
1271 }
1272
1273 cons = gfc_constructor_first (expr->value.constructor);
1274
1275 /* A constructor may have references if it is the result of substituting a
1276 parameter variable. In this case we just pull out the component we
1277 want. */
1278 if (expr->ref)
1279 comp = expr->ref->u.c.sym->components;
1280 else
1281 comp = expr->ts.u.derived->components;
1282
1283 for (; comp && cons; comp = comp->next, cons = gfc_constructor_next (cons))
1284 {
1285 int rank;
1286
1287 if (!cons->expr)
1288 continue;
1289
1290 /* Unions use an EXPR_NULL contrived expression to tell the translation
1291 phase to generate an initializer of the appropriate length.
1292 Ignore it here. */
1293 if (cons->expr->ts.type == BT_UNION && cons->expr->expr_type == EXPR_NULL)
1294 continue;
1295
1296 if (!gfc_resolve_expr (cons->expr))
1297 {
1298 t = false;
1299 continue;
1300 }
1301
1302 rank = comp->as ? comp->as->rank : 0;
1303 if (comp->ts.type == BT_CLASS
1304 && !comp->ts.u.derived->attr.unlimited_polymorphic
1305 && CLASS_DATA (comp)->as)
1306 rank = CLASS_DATA (comp)->as->rank;
1307
1308 if (cons->expr->expr_type != EXPR_NULL && rank != cons->expr->rank
1309 && (comp->attr.allocatable || cons->expr->rank))
1310 {
1311 gfc_error ("The rank of the element in the structure "
1312 "constructor at %L does not match that of the "
1313 "component (%d/%d)", &cons->expr->where,
1314 cons->expr->rank, rank);
1315 t = false;
1316 }
1317
1318 /* If we don't have the right type, try to convert it. */
1319
1320 if (!comp->attr.proc_pointer &&
1321 !gfc_compare_types (&cons->expr->ts, &comp->ts))
1322 {
1323 if (strcmp (comp->name, "_extends") == 0)
1324 {
1325 /* Can afford to be brutal with the _extends initializer.
1326 The derived type can get lost because it is PRIVATE
1327 but it is not usage constrained by the standard. */
1328 cons->expr->ts = comp->ts;
1329 }
1330 else if (comp->attr.pointer && cons->expr->ts.type != BT_UNKNOWN)
1331 {
1332 gfc_error ("The element in the structure constructor at %L, "
1333 "for pointer component %qs, is %s but should be %s",
1334 &cons->expr->where, comp->name,
1335 gfc_basic_typename (cons->expr->ts.type),
1336 gfc_basic_typename (comp->ts.type));
1337 t = false;
1338 }
1339 else
1340 {
1341 bool t2 = gfc_convert_type (cons->expr, &comp->ts, 1);
1342 if (t)
1343 t = t2;
1344 }
1345 }
1346
1347 /* For strings, the length of the constructor should be the same as
1348 the one of the structure, ensure this if the lengths are known at
1349 compile time and when we are dealing with PARAMETER or structure
1350 constructors. */
1351 if (cons->expr->ts.type == BT_CHARACTER && comp->ts.u.cl
1352 && comp->ts.u.cl->length
1353 && comp->ts.u.cl->length->expr_type == EXPR_CONSTANT
1354 && cons->expr->ts.u.cl && cons->expr->ts.u.cl->length
1355 && cons->expr->ts.u.cl->length->expr_type == EXPR_CONSTANT
1356 && cons->expr->rank != 0
1357 && mpz_cmp (cons->expr->ts.u.cl->length->value.integer,
1358 comp->ts.u.cl->length->value.integer) != 0)
1359 {
1360 if (cons->expr->expr_type == EXPR_VARIABLE
1361 && cons->expr->symtree->n.sym->attr.flavor == FL_PARAMETER)
1362 {
1363 /* Wrap the parameter in an array constructor (EXPR_ARRAY)
1364 to make use of the gfc_resolve_character_array_constructor
1365 machinery. The expression is later simplified away to
1366 an array of string literals. */
1367 gfc_expr *para = cons->expr;
1368 cons->expr = gfc_get_expr ();
1369 cons->expr->ts = para->ts;
1370 cons->expr->where = para->where;
1371 cons->expr->expr_type = EXPR_ARRAY;
1372 cons->expr->rank = para->rank;
1373 cons->expr->shape = gfc_copy_shape (para->shape, para->rank);
1374 gfc_constructor_append_expr (&cons->expr->value.constructor,
1375 para, &cons->expr->where);
1376 }
1377
1378 if (cons->expr->expr_type == EXPR_ARRAY)
1379 {
1380 /* Rely on the cleanup of the namespace to deal correctly with
1381 the old charlen. (There was a block here that attempted to
1382 remove the charlen but broke the chain in so doing.) */
1383 cons->expr->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
1384 cons->expr->ts.u.cl->length_from_typespec = true;
1385 cons->expr->ts.u.cl->length = gfc_copy_expr (comp->ts.u.cl->length);
1386 gfc_resolve_character_array_constructor (cons->expr);
1387 }
1388 }
1389
1390 if (cons->expr->expr_type == EXPR_NULL
1391 && !(comp->attr.pointer || comp->attr.allocatable
1392 || comp->attr.proc_pointer || comp->ts.f90_type == BT_VOID
1393 || (comp->ts.type == BT_CLASS
1394 && (CLASS_DATA (comp)->attr.class_pointer
1395 || CLASS_DATA (comp)->attr.allocatable))))
1396 {
1397 t = false;
1398 gfc_error ("The NULL in the structure constructor at %L is "
1399 "being applied to component %qs, which is neither "
1400 "a POINTER nor ALLOCATABLE", &cons->expr->where,
1401 comp->name);
1402 }
1403
1404 if (comp->attr.proc_pointer && comp->ts.interface)
1405 {
1406 /* Check procedure pointer interface. */
1407 gfc_symbol *s2 = NULL;
1408 gfc_component *c2;
1409 const char *name;
1410 char err[200];
1411
1412 c2 = gfc_get_proc_ptr_comp (cons->expr);
1413 if (c2)
1414 {
1415 s2 = c2->ts.interface;
1416 name = c2->name;
1417 }
1418 else if (cons->expr->expr_type == EXPR_FUNCTION)
1419 {
1420 s2 = cons->expr->symtree->n.sym->result;
1421 name = cons->expr->symtree->n.sym->result->name;
1422 }
1423 else if (cons->expr->expr_type != EXPR_NULL)
1424 {
1425 s2 = cons->expr->symtree->n.sym;
1426 name = cons->expr->symtree->n.sym->name;
1427 }
1428
1429 if (s2 && !gfc_compare_interfaces (comp->ts.interface, s2, name, 0, 1,
1430 err, sizeof (err), NULL, NULL))
1431 {
1432 gfc_error_opt (0, "Interface mismatch for procedure-pointer "
1433 "component %qs in structure constructor at %L:"
1434 " %s", comp->name, &cons->expr->where, err);
1435 return false;
1436 }
1437 }
1438
1439 if (!comp->attr.pointer || comp->attr.proc_pointer
1440 || cons->expr->expr_type == EXPR_NULL)
1441 continue;
1442
1443 a = gfc_expr_attr (cons->expr);
1444
1445 if (!a.pointer && !a.target)
1446 {
1447 t = false;
1448 gfc_error ("The element in the structure constructor at %L, "
1449 "for pointer component %qs should be a POINTER or "
1450 "a TARGET", &cons->expr->where, comp->name);
1451 }
1452
1453 if (init)
1454 {
1455 /* F08:C461. Additional checks for pointer initialization. */
1456 if (a.allocatable)
1457 {
1458 t = false;
1459 gfc_error ("Pointer initialization target at %L "
1460 "must not be ALLOCATABLE", &cons->expr->where);
1461 }
1462 if (!a.save)
1463 {
1464 t = false;
1465 gfc_error ("Pointer initialization target at %L "
1466 "must have the SAVE attribute", &cons->expr->where);
1467 }
1468 }
1469
1470 /* F2003, C1272 (3). */
1471 bool impure = cons->expr->expr_type == EXPR_VARIABLE
1472 && (gfc_impure_variable (cons->expr->symtree->n.sym)
1473 || gfc_is_coindexed (cons->expr));
1474 if (impure && gfc_pure (NULL))
1475 {
1476 t = false;
1477 gfc_error ("Invalid expression in the structure constructor for "
1478 "pointer component %qs at %L in PURE procedure",
1479 comp->name, &cons->expr->where);
1480 }
1481
1482 if (impure)
1483 gfc_unset_implicit_pure (NULL);
1484 }
1485
1486 return t;
1487 }
1488
1489
1490 /****************** Expression name resolution ******************/
1491
1492 /* Returns 0 if a symbol was not declared with a type or
1493 attribute declaration statement, nonzero otherwise. */
1494
1495 static int
1496 was_declared (gfc_symbol *sym)
1497 {
1498 symbol_attribute a;
1499
1500 a = sym->attr;
1501
1502 if (!a.implicit_type && sym->ts.type != BT_UNKNOWN)
1503 return 1;
1504
1505 if (a.allocatable || a.dimension || a.dummy || a.external || a.intrinsic
1506 || a.optional || a.pointer || a.save || a.target || a.volatile_
1507 || a.value || a.access != ACCESS_UNKNOWN || a.intent != INTENT_UNKNOWN
1508 || a.asynchronous || a.codimension)
1509 return 1;
1510
1511 return 0;
1512 }
1513
1514
1515 /* Determine if a symbol is generic or not. */
1516
1517 static int
1518 generic_sym (gfc_symbol *sym)
1519 {
1520 gfc_symbol *s;
1521
1522 if (sym->attr.generic ||
1523 (sym->attr.intrinsic && gfc_generic_intrinsic (sym->name)))
1524 return 1;
1525
1526 if (was_declared (sym) || sym->ns->parent == NULL)
1527 return 0;
1528
1529 gfc_find_symbol (sym->name, sym->ns->parent, 1, &s);
1530
1531 if (s != NULL)
1532 {
1533 if (s == sym)
1534 return 0;
1535 else
1536 return generic_sym (s);
1537 }
1538
1539 return 0;
1540 }
1541
1542
1543 /* Determine if a symbol is specific or not. */
1544
1545 static int
1546 specific_sym (gfc_symbol *sym)
1547 {
1548 gfc_symbol *s;
1549
1550 if (sym->attr.if_source == IFSRC_IFBODY
1551 || sym->attr.proc == PROC_MODULE
1552 || sym->attr.proc == PROC_INTERNAL
1553 || sym->attr.proc == PROC_ST_FUNCTION
1554 || (sym->attr.intrinsic && gfc_specific_intrinsic (sym->name))
1555 || sym->attr.external)
1556 return 1;
1557
1558 if (was_declared (sym) || sym->ns->parent == NULL)
1559 return 0;
1560
1561 gfc_find_symbol (sym->name, sym->ns->parent, 1, &s);
1562
1563 return (s == NULL) ? 0 : specific_sym (s);
1564 }
1565
1566
1567 /* Figure out if the procedure is specific, generic or unknown. */
1568
1569 enum proc_type
1570 { PTYPE_GENERIC = 1, PTYPE_SPECIFIC, PTYPE_UNKNOWN };
1571
1572 static proc_type
1573 procedure_kind (gfc_symbol *sym)
1574 {
1575 if (generic_sym (sym))
1576 return PTYPE_GENERIC;
1577
1578 if (specific_sym (sym))
1579 return PTYPE_SPECIFIC;
1580
1581 return PTYPE_UNKNOWN;
1582 }
1583
1584 /* Check references to assumed size arrays. The flag need_full_assumed_size
1585 is nonzero when matching actual arguments. */
1586
1587 static int need_full_assumed_size = 0;
1588
1589 static bool
1590 check_assumed_size_reference (gfc_symbol *sym, gfc_expr *e)
1591 {
1592 if (need_full_assumed_size || !(sym->as && sym->as->type == AS_ASSUMED_SIZE))
1593 return false;
1594
1595 /* FIXME: The comparison "e->ref->u.ar.type == AR_FULL" is wrong.
1596 What should it be? */
1597 if (e->ref && (e->ref->u.ar.end[e->ref->u.ar.as->rank - 1] == NULL)
1598 && (e->ref->u.ar.as->type == AS_ASSUMED_SIZE)
1599 && (e->ref->u.ar.type == AR_FULL))
1600 {
1601 gfc_error ("The upper bound in the last dimension must "
1602 "appear in the reference to the assumed size "
1603 "array %qs at %L", sym->name, &e->where);
1604 return true;
1605 }
1606 return false;
1607 }
1608
1609
1610 /* Look for bad assumed size array references in argument expressions
1611 of elemental and array valued intrinsic procedures. Since this is
1612 called from procedure resolution functions, it only recurses at
1613 operators. */
1614
1615 static bool
1616 resolve_assumed_size_actual (gfc_expr *e)
1617 {
1618 if (e == NULL)
1619 return false;
1620
1621 switch (e->expr_type)
1622 {
1623 case EXPR_VARIABLE:
1624 if (e->symtree && check_assumed_size_reference (e->symtree->n.sym, e))
1625 return true;
1626 break;
1627
1628 case EXPR_OP:
1629 if (resolve_assumed_size_actual (e->value.op.op1)
1630 || resolve_assumed_size_actual (e->value.op.op2))
1631 return true;
1632 break;
1633
1634 default:
1635 break;
1636 }
1637 return false;
1638 }
1639
1640
1641 /* Check a generic procedure, passed as an actual argument, to see if
1642 there is a matching specific name. If none, it is an error, and if
1643 more than one, the reference is ambiguous. */
1644 static int
1645 count_specific_procs (gfc_expr *e)
1646 {
1647 int n;
1648 gfc_interface *p;
1649 gfc_symbol *sym;
1650
1651 n = 0;
1652 sym = e->symtree->n.sym;
1653
1654 for (p = sym->generic; p; p = p->next)
1655 if (strcmp (sym->name, p->sym->name) == 0)
1656 {
1657 e->symtree = gfc_find_symtree (p->sym->ns->sym_root,
1658 sym->name);
1659 n++;
1660 }
1661
1662 if (n > 1)
1663 gfc_error ("%qs at %L is ambiguous", e->symtree->n.sym->name,
1664 &e->where);
1665
1666 if (n == 0)
1667 gfc_error ("GENERIC procedure %qs is not allowed as an actual "
1668 "argument at %L", sym->name, &e->where);
1669
1670 return n;
1671 }
1672
1673
1674 /* See if a call to sym could possibly be a not allowed RECURSION because of
1675 a missing RECURSIVE declaration. This means that either sym is the current
1676 context itself, or sym is the parent of a contained procedure calling its
1677 non-RECURSIVE containing procedure.
1678 This also works if sym is an ENTRY. */
1679
1680 static bool
1681 is_illegal_recursion (gfc_symbol* sym, gfc_namespace* context)
1682 {
1683 gfc_symbol* proc_sym;
1684 gfc_symbol* context_proc;
1685 gfc_namespace* real_context;
1686
1687 if (sym->attr.flavor == FL_PROGRAM
1688 || gfc_fl_struct (sym->attr.flavor))
1689 return false;
1690
1691 /* If we've got an ENTRY, find real procedure. */
1692 if (sym->attr.entry && sym->ns->entries)
1693 proc_sym = sym->ns->entries->sym;
1694 else
1695 proc_sym = sym;
1696
1697 /* If sym is RECURSIVE, all is well of course. */
1698 if (proc_sym->attr.recursive || flag_recursive)
1699 return false;
1700
1701 /* Find the context procedure's "real" symbol if it has entries.
1702 We look for a procedure symbol, so recurse on the parents if we don't
1703 find one (like in case of a BLOCK construct). */
1704 for (real_context = context; ; real_context = real_context->parent)
1705 {
1706 /* We should find something, eventually! */
1707 gcc_assert (real_context);
1708
1709 context_proc = (real_context->entries ? real_context->entries->sym
1710 : real_context->proc_name);
1711
1712 /* In some special cases, there may not be a proc_name, like for this
1713 invalid code:
1714 real(bad_kind()) function foo () ...
1715 when checking the call to bad_kind ().
1716 In these cases, we simply return here and assume that the
1717 call is ok. */
1718 if (!context_proc)
1719 return false;
1720
1721 if (context_proc->attr.flavor != FL_LABEL)
1722 break;
1723 }
1724
1725 /* A call from sym's body to itself is recursion, of course. */
1726 if (context_proc == proc_sym)
1727 return true;
1728
1729 /* The same is true if context is a contained procedure and sym the
1730 containing one. */
1731 if (context_proc->attr.contained)
1732 {
1733 gfc_symbol* parent_proc;
1734
1735 gcc_assert (context->parent);
1736 parent_proc = (context->parent->entries ? context->parent->entries->sym
1737 : context->parent->proc_name);
1738
1739 if (parent_proc == proc_sym)
1740 return true;
1741 }
1742
1743 return false;
1744 }
1745
1746
1747 /* Resolve an intrinsic procedure: Set its function/subroutine attribute,
1748 its typespec and formal argument list. */
1749
1750 bool
1751 gfc_resolve_intrinsic (gfc_symbol *sym, locus *loc)
1752 {
1753 gfc_intrinsic_sym* isym = NULL;
1754 const char* symstd;
1755
1756 if (sym->formal)
1757 return true;
1758
1759 /* Already resolved. */
1760 if (sym->from_intmod && sym->ts.type != BT_UNKNOWN)
1761 return true;
1762
1763 /* We already know this one is an intrinsic, so we don't call
1764 gfc_is_intrinsic for full checking but rather use gfc_find_function and
1765 gfc_find_subroutine directly to check whether it is a function or
1766 subroutine. */
1767
1768 if (sym->intmod_sym_id && sym->attr.subroutine)
1769 {
1770 gfc_isym_id id = gfc_isym_id_by_intmod_sym (sym);
1771 isym = gfc_intrinsic_subroutine_by_id (id);
1772 }
1773 else if (sym->intmod_sym_id)
1774 {
1775 gfc_isym_id id = gfc_isym_id_by_intmod_sym (sym);
1776 isym = gfc_intrinsic_function_by_id (id);
1777 }
1778 else if (!sym->attr.subroutine)
1779 isym = gfc_find_function (sym->name);
1780
1781 if (isym && !sym->attr.subroutine)
1782 {
1783 if (sym->ts.type != BT_UNKNOWN && warn_surprising
1784 && !sym->attr.implicit_type)
1785 gfc_warning (OPT_Wsurprising,
1786 "Type specified for intrinsic function %qs at %L is"
1787 " ignored", sym->name, &sym->declared_at);
1788
1789 if (!sym->attr.function &&
1790 !gfc_add_function(&sym->attr, sym->name, loc))
1791 return false;
1792
1793 sym->ts = isym->ts;
1794 }
1795 else if (isym || (isym = gfc_find_subroutine (sym->name)))
1796 {
1797 if (sym->ts.type != BT_UNKNOWN && !sym->attr.implicit_type)
1798 {
1799 gfc_error ("Intrinsic subroutine %qs at %L shall not have a type"
1800 " specifier", sym->name, &sym->declared_at);
1801 return false;
1802 }
1803
1804 if (!sym->attr.subroutine &&
1805 !gfc_add_subroutine(&sym->attr, sym->name, loc))
1806 return false;
1807 }
1808 else
1809 {
1810 gfc_error ("%qs declared INTRINSIC at %L does not exist", sym->name,
1811 &sym->declared_at);
1812 return false;
1813 }
1814
1815 gfc_copy_formal_args_intr (sym, isym, NULL);
1816
1817 sym->attr.pure = isym->pure;
1818 sym->attr.elemental = isym->elemental;
1819
1820 /* Check it is actually available in the standard settings. */
1821 if (!gfc_check_intrinsic_standard (isym, &symstd, false, sym->declared_at))
1822 {
1823 gfc_error ("The intrinsic %qs declared INTRINSIC at %L is not "
1824 "available in the current standard settings but %s. Use "
1825 "an appropriate %<-std=*%> option or enable "
1826 "%<-fall-intrinsics%> in order to use it.",
1827 sym->name, &sym->declared_at, symstd);
1828 return false;
1829 }
1830
1831 return true;
1832 }
1833
1834
1835 /* Resolve a procedure expression, like passing it to a called procedure or as
1836 RHS for a procedure pointer assignment. */
1837
1838 static bool
1839 resolve_procedure_expression (gfc_expr* expr)
1840 {
1841 gfc_symbol* sym;
1842
1843 if (expr->expr_type != EXPR_VARIABLE)
1844 return true;
1845 gcc_assert (expr->symtree);
1846
1847 sym = expr->symtree->n.sym;
1848
1849 if (sym->attr.intrinsic)
1850 gfc_resolve_intrinsic (sym, &expr->where);
1851
1852 if (sym->attr.flavor != FL_PROCEDURE
1853 || (sym->attr.function && sym->result == sym))
1854 return true;
1855
1856 /* A non-RECURSIVE procedure that is used as procedure expression within its
1857 own body is in danger of being called recursively. */
1858 if (is_illegal_recursion (sym, gfc_current_ns))
1859 gfc_warning (0, "Non-RECURSIVE procedure %qs at %L is possibly calling"
1860 " itself recursively. Declare it RECURSIVE or use"
1861 " %<-frecursive%>", sym->name, &expr->where);
1862
1863 return true;
1864 }
1865
1866
1867 /* Check that name is not a derived type. */
1868
1869 static bool
1870 is_dt_name (const char *name)
1871 {
1872 gfc_symbol *dt_list, *dt_first;
1873
1874 dt_list = dt_first = gfc_derived_types;
1875 for (; dt_list; dt_list = dt_list->dt_next)
1876 {
1877 if (strcmp(dt_list->name, name) == 0)
1878 return true;
1879 if (dt_first == dt_list->dt_next)
1880 break;
1881 }
1882 return false;
1883 }
1884
1885
1886 /* Resolve an actual argument list. Most of the time, this is just
1887 resolving the expressions in the list.
1888 The exception is that we sometimes have to decide whether arguments
1889 that look like procedure arguments are really simple variable
1890 references. */
1891
1892 static bool
1893 resolve_actual_arglist (gfc_actual_arglist *arg, procedure_type ptype,
1894 bool no_formal_args)
1895 {
1896 gfc_symbol *sym;
1897 gfc_symtree *parent_st;
1898 gfc_expr *e;
1899 gfc_component *comp;
1900 int save_need_full_assumed_size;
1901 bool return_value = false;
1902 bool actual_arg_sav = actual_arg, first_actual_arg_sav = first_actual_arg;
1903
1904 actual_arg = true;
1905 first_actual_arg = true;
1906
1907 for (; arg; arg = arg->next)
1908 {
1909 e = arg->expr;
1910 if (e == NULL)
1911 {
1912 /* Check the label is a valid branching target. */
1913 if (arg->label)
1914 {
1915 if (arg->label->defined == ST_LABEL_UNKNOWN)
1916 {
1917 gfc_error ("Label %d referenced at %L is never defined",
1918 arg->label->value, &arg->label->where);
1919 goto cleanup;
1920 }
1921 }
1922 first_actual_arg = false;
1923 continue;
1924 }
1925
1926 if (e->expr_type == EXPR_VARIABLE
1927 && e->symtree->n.sym->attr.generic
1928 && no_formal_args
1929 && count_specific_procs (e) != 1)
1930 goto cleanup;
1931
1932 if (e->ts.type != BT_PROCEDURE)
1933 {
1934 save_need_full_assumed_size = need_full_assumed_size;
1935 if (e->expr_type != EXPR_VARIABLE)
1936 need_full_assumed_size = 0;
1937 if (!gfc_resolve_expr (e))
1938 goto cleanup;
1939 need_full_assumed_size = save_need_full_assumed_size;
1940 goto argument_list;
1941 }
1942
1943 /* See if the expression node should really be a variable reference. */
1944
1945 sym = e->symtree->n.sym;
1946
1947 if (sym->attr.flavor == FL_PROCEDURE && is_dt_name (sym->name))
1948 {
1949 gfc_error ("Derived type %qs is used as an actual "
1950 "argument at %L", sym->name, &e->where);
1951 goto cleanup;
1952 }
1953
1954 if (sym->attr.flavor == FL_PROCEDURE
1955 || sym->attr.intrinsic
1956 || sym->attr.external)
1957 {
1958 int actual_ok;
1959
1960 /* If a procedure is not already determined to be something else
1961 check if it is intrinsic. */
1962 if (gfc_is_intrinsic (sym, sym->attr.subroutine, e->where))
1963 sym->attr.intrinsic = 1;
1964
1965 if (sym->attr.proc == PROC_ST_FUNCTION)
1966 {
1967 gfc_error ("Statement function %qs at %L is not allowed as an "
1968 "actual argument", sym->name, &e->where);
1969 }
1970
1971 actual_ok = gfc_intrinsic_actual_ok (sym->name,
1972 sym->attr.subroutine);
1973 if (sym->attr.intrinsic && actual_ok == 0)
1974 {
1975 gfc_error ("Intrinsic %qs at %L is not allowed as an "
1976 "actual argument", sym->name, &e->where);
1977 }
1978
1979 if (sym->attr.contained && !sym->attr.use_assoc
1980 && sym->ns->proc_name->attr.flavor != FL_MODULE)
1981 {
1982 if (!gfc_notify_std (GFC_STD_F2008, "Internal procedure %qs is"
1983 " used as actual argument at %L",
1984 sym->name, &e->where))
1985 goto cleanup;
1986 }
1987
1988 if (sym->attr.elemental && !sym->attr.intrinsic)
1989 {
1990 gfc_error ("ELEMENTAL non-INTRINSIC procedure %qs is not "
1991 "allowed as an actual argument at %L", sym->name,
1992 &e->where);
1993 }
1994
1995 /* Check if a generic interface has a specific procedure
1996 with the same name before emitting an error. */
1997 if (sym->attr.generic && count_specific_procs (e) != 1)
1998 goto cleanup;
1999
2000 /* Just in case a specific was found for the expression. */
2001 sym = e->symtree->n.sym;
2002
2003 /* If the symbol is the function that names the current (or
2004 parent) scope, then we really have a variable reference. */
2005
2006 if (gfc_is_function_return_value (sym, sym->ns))
2007 goto got_variable;
2008
2009 /* If all else fails, see if we have a specific intrinsic. */
2010 if (sym->ts.type == BT_UNKNOWN && sym->attr.intrinsic)
2011 {
2012 gfc_intrinsic_sym *isym;
2013
2014 isym = gfc_find_function (sym->name);
2015 if (isym == NULL || !isym->specific)
2016 {
2017 gfc_error ("Unable to find a specific INTRINSIC procedure "
2018 "for the reference %qs at %L", sym->name,
2019 &e->where);
2020 goto cleanup;
2021 }
2022 sym->ts = isym->ts;
2023 sym->attr.intrinsic = 1;
2024 sym->attr.function = 1;
2025 }
2026
2027 if (!gfc_resolve_expr (e))
2028 goto cleanup;
2029 goto argument_list;
2030 }
2031
2032 /* See if the name is a module procedure in a parent unit. */
2033
2034 if (was_declared (sym) || sym->ns->parent == NULL)
2035 goto got_variable;
2036
2037 if (gfc_find_sym_tree (sym->name, sym->ns->parent, 1, &parent_st))
2038 {
2039 gfc_error ("Symbol %qs at %L is ambiguous", sym->name, &e->where);
2040 goto cleanup;
2041 }
2042
2043 if (parent_st == NULL)
2044 goto got_variable;
2045
2046 sym = parent_st->n.sym;
2047 e->symtree = parent_st; /* Point to the right thing. */
2048
2049 if (sym->attr.flavor == FL_PROCEDURE
2050 || sym->attr.intrinsic
2051 || sym->attr.external)
2052 {
2053 if (!gfc_resolve_expr (e))
2054 goto cleanup;
2055 goto argument_list;
2056 }
2057
2058 got_variable:
2059 e->expr_type = EXPR_VARIABLE;
2060 e->ts = sym->ts;
2061 if ((sym->as != NULL && sym->ts.type != BT_CLASS)
2062 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
2063 && CLASS_DATA (sym)->as))
2064 {
2065 e->rank = sym->ts.type == BT_CLASS
2066 ? CLASS_DATA (sym)->as->rank : sym->as->rank;
2067 e->ref = gfc_get_ref ();
2068 e->ref->type = REF_ARRAY;
2069 e->ref->u.ar.type = AR_FULL;
2070 e->ref->u.ar.as = sym->ts.type == BT_CLASS
2071 ? CLASS_DATA (sym)->as : sym->as;
2072 }
2073
2074 /* Expressions are assigned a default ts.type of BT_PROCEDURE in
2075 primary.c (match_actual_arg). If above code determines that it
2076 is a variable instead, it needs to be resolved as it was not
2077 done at the beginning of this function. */
2078 save_need_full_assumed_size = need_full_assumed_size;
2079 if (e->expr_type != EXPR_VARIABLE)
2080 need_full_assumed_size = 0;
2081 if (!gfc_resolve_expr (e))
2082 goto cleanup;
2083 need_full_assumed_size = save_need_full_assumed_size;
2084
2085 argument_list:
2086 /* Check argument list functions %VAL, %LOC and %REF. There is
2087 nothing to do for %REF. */
2088 if (arg->name && arg->name[0] == '%')
2089 {
2090 if (strcmp ("%VAL", arg->name) == 0)
2091 {
2092 if (e->ts.type == BT_CHARACTER || e->ts.type == BT_DERIVED)
2093 {
2094 gfc_error ("By-value argument at %L is not of numeric "
2095 "type", &e->where);
2096 goto cleanup;
2097 }
2098
2099 if (e->rank)
2100 {
2101 gfc_error ("By-value argument at %L cannot be an array or "
2102 "an array section", &e->where);
2103 goto cleanup;
2104 }
2105
2106 /* Intrinsics are still PROC_UNKNOWN here. However,
2107 since same file external procedures are not resolvable
2108 in gfortran, it is a good deal easier to leave them to
2109 intrinsic.c. */
2110 if (ptype != PROC_UNKNOWN
2111 && ptype != PROC_DUMMY
2112 && ptype != PROC_EXTERNAL
2113 && ptype != PROC_MODULE)
2114 {
2115 gfc_error ("By-value argument at %L is not allowed "
2116 "in this context", &e->where);
2117 goto cleanup;
2118 }
2119 }
2120
2121 /* Statement functions have already been excluded above. */
2122 else if (strcmp ("%LOC", arg->name) == 0
2123 && e->ts.type == BT_PROCEDURE)
2124 {
2125 if (e->symtree->n.sym->attr.proc == PROC_INTERNAL)
2126 {
2127 gfc_error ("Passing internal procedure at %L by location "
2128 "not allowed", &e->where);
2129 goto cleanup;
2130 }
2131 }
2132 }
2133
2134 comp = gfc_get_proc_ptr_comp(e);
2135 if (e->expr_type == EXPR_VARIABLE
2136 && comp && comp->attr.elemental)
2137 {
2138 gfc_error ("ELEMENTAL procedure pointer component %qs is not "
2139 "allowed as an actual argument at %L", comp->name,
2140 &e->where);
2141 }
2142
2143 /* Fortran 2008, C1237. */
2144 if (e->expr_type == EXPR_VARIABLE && gfc_is_coindexed (e)
2145 && gfc_has_ultimate_pointer (e))
2146 {
2147 gfc_error ("Coindexed actual argument at %L with ultimate pointer "
2148 "component", &e->where);
2149 goto cleanup;
2150 }
2151
2152 first_actual_arg = false;
2153 }
2154
2155 return_value = true;
2156
2157 cleanup:
2158 actual_arg = actual_arg_sav;
2159 first_actual_arg = first_actual_arg_sav;
2160
2161 return return_value;
2162 }
2163
2164
2165 /* Do the checks of the actual argument list that are specific to elemental
2166 procedures. If called with c == NULL, we have a function, otherwise if
2167 expr == NULL, we have a subroutine. */
2168
2169 static bool
2170 resolve_elemental_actual (gfc_expr *expr, gfc_code *c)
2171 {
2172 gfc_actual_arglist *arg0;
2173 gfc_actual_arglist *arg;
2174 gfc_symbol *esym = NULL;
2175 gfc_intrinsic_sym *isym = NULL;
2176 gfc_expr *e = NULL;
2177 gfc_intrinsic_arg *iformal = NULL;
2178 gfc_formal_arglist *eformal = NULL;
2179 bool formal_optional = false;
2180 bool set_by_optional = false;
2181 int i;
2182 int rank = 0;
2183
2184 /* Is this an elemental procedure? */
2185 if (expr && expr->value.function.actual != NULL)
2186 {
2187 if (expr->value.function.esym != NULL
2188 && expr->value.function.esym->attr.elemental)
2189 {
2190 arg0 = expr->value.function.actual;
2191 esym = expr->value.function.esym;
2192 }
2193 else if (expr->value.function.isym != NULL
2194 && expr->value.function.isym->elemental)
2195 {
2196 arg0 = expr->value.function.actual;
2197 isym = expr->value.function.isym;
2198 }
2199 else
2200 return true;
2201 }
2202 else if (c && c->ext.actual != NULL)
2203 {
2204 arg0 = c->ext.actual;
2205
2206 if (c->resolved_sym)
2207 esym = c->resolved_sym;
2208 else
2209 esym = c->symtree->n.sym;
2210 gcc_assert (esym);
2211
2212 if (!esym->attr.elemental)
2213 return true;
2214 }
2215 else
2216 return true;
2217
2218 /* The rank of an elemental is the rank of its array argument(s). */
2219 for (arg = arg0; arg; arg = arg->next)
2220 {
2221 if (arg->expr != NULL && arg->expr->rank != 0)
2222 {
2223 rank = arg->expr->rank;
2224 if (arg->expr->expr_type == EXPR_VARIABLE
2225 && arg->expr->symtree->n.sym->attr.optional)
2226 set_by_optional = true;
2227
2228 /* Function specific; set the result rank and shape. */
2229 if (expr)
2230 {
2231 expr->rank = rank;
2232 if (!expr->shape && arg->expr->shape)
2233 {
2234 expr->shape = gfc_get_shape (rank);
2235 for (i = 0; i < rank; i++)
2236 mpz_init_set (expr->shape[i], arg->expr->shape[i]);
2237 }
2238 }
2239 break;
2240 }
2241 }
2242
2243 /* If it is an array, it shall not be supplied as an actual argument
2244 to an elemental procedure unless an array of the same rank is supplied
2245 as an actual argument corresponding to a nonoptional dummy argument of
2246 that elemental procedure(12.4.1.5). */
2247 formal_optional = false;
2248 if (isym)
2249 iformal = isym->formal;
2250 else
2251 eformal = esym->formal;
2252
2253 for (arg = arg0; arg; arg = arg->next)
2254 {
2255 if (eformal)
2256 {
2257 if (eformal->sym && eformal->sym->attr.optional)
2258 formal_optional = true;
2259 eformal = eformal->next;
2260 }
2261 else if (isym && iformal)
2262 {
2263 if (iformal->optional)
2264 formal_optional = true;
2265 iformal = iformal->next;
2266 }
2267 else if (isym)
2268 formal_optional = true;
2269
2270 if (pedantic && arg->expr != NULL
2271 && arg->expr->expr_type == EXPR_VARIABLE
2272 && arg->expr->symtree->n.sym->attr.optional
2273 && formal_optional
2274 && arg->expr->rank
2275 && (set_by_optional || arg->expr->rank != rank)
2276 && !(isym && isym->id == GFC_ISYM_CONVERSION))
2277 {
2278 gfc_warning (OPT_Wpedantic,
2279 "%qs at %L is an array and OPTIONAL; IF IT IS "
2280 "MISSING, it cannot be the actual argument of an "
2281 "ELEMENTAL procedure unless there is a non-optional "
2282 "argument with the same rank (12.4.1.5)",
2283 arg->expr->symtree->n.sym->name, &arg->expr->where);
2284 }
2285 }
2286
2287 for (arg = arg0; arg; arg = arg->next)
2288 {
2289 if (arg->expr == NULL || arg->expr->rank == 0)
2290 continue;
2291
2292 /* Being elemental, the last upper bound of an assumed size array
2293 argument must be present. */
2294 if (resolve_assumed_size_actual (arg->expr))
2295 return false;
2296
2297 /* Elemental procedure's array actual arguments must conform. */
2298 if (e != NULL)
2299 {
2300 if (!gfc_check_conformance (arg->expr, e, "elemental procedure"))
2301 return false;
2302 }
2303 else
2304 e = arg->expr;
2305 }
2306
2307 /* INTENT(OUT) is only allowed for subroutines; if any actual argument
2308 is an array, the intent inout/out variable needs to be also an array. */
2309 if (rank > 0 && esym && expr == NULL)
2310 for (eformal = esym->formal, arg = arg0; arg && eformal;
2311 arg = arg->next, eformal = eformal->next)
2312 if ((eformal->sym->attr.intent == INTENT_OUT
2313 || eformal->sym->attr.intent == INTENT_INOUT)
2314 && arg->expr && arg->expr->rank == 0)
2315 {
2316 gfc_error ("Actual argument at %L for INTENT(%s) dummy %qs of "
2317 "ELEMENTAL subroutine %qs is a scalar, but another "
2318 "actual argument is an array", &arg->expr->where,
2319 (eformal->sym->attr.intent == INTENT_OUT) ? "OUT"
2320 : "INOUT", eformal->sym->name, esym->name);
2321 return false;
2322 }
2323 return true;
2324 }
2325
2326
2327 /* This function does the checking of references to global procedures
2328 as defined in sections 18.1 and 14.1, respectively, of the Fortran
2329 77 and 95 standards. It checks for a gsymbol for the name, making
2330 one if it does not already exist. If it already exists, then the
2331 reference being resolved must correspond to the type of gsymbol.
2332 Otherwise, the new symbol is equipped with the attributes of the
2333 reference. The corresponding code that is called in creating
2334 global entities is parse.c.
2335
2336 In addition, for all but -std=legacy, the gsymbols are used to
2337 check the interfaces of external procedures from the same file.
2338 The namespace of the gsymbol is resolved and then, once this is
2339 done the interface is checked. */
2340
2341
2342 static bool
2343 not_in_recursive (gfc_symbol *sym, gfc_namespace *gsym_ns)
2344 {
2345 if (!gsym_ns->proc_name->attr.recursive)
2346 return true;
2347
2348 if (sym->ns == gsym_ns)
2349 return false;
2350
2351 if (sym->ns->parent && sym->ns->parent == gsym_ns)
2352 return false;
2353
2354 return true;
2355 }
2356
2357 static bool
2358 not_entry_self_reference (gfc_symbol *sym, gfc_namespace *gsym_ns)
2359 {
2360 if (gsym_ns->entries)
2361 {
2362 gfc_entry_list *entry = gsym_ns->entries;
2363
2364 for (; entry; entry = entry->next)
2365 {
2366 if (strcmp (sym->name, entry->sym->name) == 0)
2367 {
2368 if (strcmp (gsym_ns->proc_name->name,
2369 sym->ns->proc_name->name) == 0)
2370 return false;
2371
2372 if (sym->ns->parent
2373 && strcmp (gsym_ns->proc_name->name,
2374 sym->ns->parent->proc_name->name) == 0)
2375 return false;
2376 }
2377 }
2378 }
2379 return true;
2380 }
2381
2382
2383 /* Check for the requirement of an explicit interface. F08:12.4.2.2. */
2384
2385 bool
2386 gfc_explicit_interface_required (gfc_symbol *sym, char *errmsg, int err_len)
2387 {
2388 gfc_formal_arglist *arg = gfc_sym_get_dummy_args (sym);
2389
2390 for ( ; arg; arg = arg->next)
2391 {
2392 if (!arg->sym)
2393 continue;
2394
2395 if (arg->sym->attr.allocatable) /* (2a) */
2396 {
2397 strncpy (errmsg, _("allocatable argument"), err_len);
2398 return true;
2399 }
2400 else if (arg->sym->attr.asynchronous)
2401 {
2402 strncpy (errmsg, _("asynchronous argument"), err_len);
2403 return true;
2404 }
2405 else if (arg->sym->attr.optional)
2406 {
2407 strncpy (errmsg, _("optional argument"), err_len);
2408 return true;
2409 }
2410 else if (arg->sym->attr.pointer)
2411 {
2412 strncpy (errmsg, _("pointer argument"), err_len);
2413 return true;
2414 }
2415 else if (arg->sym->attr.target)
2416 {
2417 strncpy (errmsg, _("target argument"), err_len);
2418 return true;
2419 }
2420 else if (arg->sym->attr.value)
2421 {
2422 strncpy (errmsg, _("value argument"), err_len);
2423 return true;
2424 }
2425 else if (arg->sym->attr.volatile_)
2426 {
2427 strncpy (errmsg, _("volatile argument"), err_len);
2428 return true;
2429 }
2430 else if (arg->sym->as && arg->sym->as->type == AS_ASSUMED_SHAPE) /* (2b) */
2431 {
2432 strncpy (errmsg, _("assumed-shape argument"), err_len);
2433 return true;
2434 }
2435 else if (arg->sym->as && arg->sym->as->type == AS_ASSUMED_RANK) /* TS 29113, 6.2. */
2436 {
2437 strncpy (errmsg, _("assumed-rank argument"), err_len);
2438 return true;
2439 }
2440 else if (arg->sym->attr.codimension) /* (2c) */
2441 {
2442 strncpy (errmsg, _("coarray argument"), err_len);
2443 return true;
2444 }
2445 else if (false) /* (2d) TODO: parametrized derived type */
2446 {
2447 strncpy (errmsg, _("parametrized derived type argument"), err_len);
2448 return true;
2449 }
2450 else if (arg->sym->ts.type == BT_CLASS) /* (2e) */
2451 {
2452 strncpy (errmsg, _("polymorphic argument"), err_len);
2453 return true;
2454 }
2455 else if (arg->sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
2456 {
2457 strncpy (errmsg, _("NO_ARG_CHECK attribute"), err_len);
2458 return true;
2459 }
2460 else if (arg->sym->ts.type == BT_ASSUMED)
2461 {
2462 /* As assumed-type is unlimited polymorphic (cf. above).
2463 See also TS 29113, Note 6.1. */
2464 strncpy (errmsg, _("assumed-type argument"), err_len);
2465 return true;
2466 }
2467 }
2468
2469 if (sym->attr.function)
2470 {
2471 gfc_symbol *res = sym->result ? sym->result : sym;
2472
2473 if (res->attr.dimension) /* (3a) */
2474 {
2475 strncpy (errmsg, _("array result"), err_len);
2476 return true;
2477 }
2478 else if (res->attr.pointer || res->attr.allocatable) /* (3b) */
2479 {
2480 strncpy (errmsg, _("pointer or allocatable result"), err_len);
2481 return true;
2482 }
2483 else if (res->ts.type == BT_CHARACTER && res->ts.u.cl
2484 && res->ts.u.cl->length
2485 && res->ts.u.cl->length->expr_type != EXPR_CONSTANT) /* (3c) */
2486 {
2487 strncpy (errmsg, _("result with non-constant character length"), err_len);
2488 return true;
2489 }
2490 }
2491
2492 if (sym->attr.elemental && !sym->attr.intrinsic) /* (4) */
2493 {
2494 strncpy (errmsg, _("elemental procedure"), err_len);
2495 return true;
2496 }
2497 else if (sym->attr.is_bind_c) /* (5) */
2498 {
2499 strncpy (errmsg, _("bind(c) procedure"), err_len);
2500 return true;
2501 }
2502
2503 return false;
2504 }
2505
2506
2507 static void
2508 resolve_global_procedure (gfc_symbol *sym, locus *where, int sub)
2509 {
2510 gfc_gsymbol * gsym;
2511 gfc_namespace *ns;
2512 enum gfc_symbol_type type;
2513 char reason[200];
2514
2515 type = sub ? GSYM_SUBROUTINE : GSYM_FUNCTION;
2516
2517 gsym = gfc_get_gsymbol (sym->binding_label ? sym->binding_label : sym->name,
2518 sym->binding_label != NULL);
2519
2520 if ((gsym->type != GSYM_UNKNOWN && gsym->type != type))
2521 gfc_global_used (gsym, where);
2522
2523 if ((sym->attr.if_source == IFSRC_UNKNOWN
2524 || sym->attr.if_source == IFSRC_IFBODY)
2525 && gsym->type != GSYM_UNKNOWN
2526 && !gsym->binding_label
2527 && gsym->ns
2528 && gsym->ns->proc_name
2529 && not_in_recursive (sym, gsym->ns)
2530 && not_entry_self_reference (sym, gsym->ns))
2531 {
2532 gfc_symbol *def_sym;
2533 def_sym = gsym->ns->proc_name;
2534
2535 if (gsym->ns->resolved != -1)
2536 {
2537
2538 /* Resolve the gsymbol namespace if needed. */
2539 if (!gsym->ns->resolved)
2540 {
2541 gfc_symbol *old_dt_list;
2542
2543 /* Stash away derived types so that the backend_decls
2544 do not get mixed up. */
2545 old_dt_list = gfc_derived_types;
2546 gfc_derived_types = NULL;
2547
2548 gfc_resolve (gsym->ns);
2549
2550 /* Store the new derived types with the global namespace. */
2551 if (gfc_derived_types)
2552 gsym->ns->derived_types = gfc_derived_types;
2553
2554 /* Restore the derived types of this namespace. */
2555 gfc_derived_types = old_dt_list;
2556 }
2557
2558 /* Make sure that translation for the gsymbol occurs before
2559 the procedure currently being resolved. */
2560 ns = gfc_global_ns_list;
2561 for (; ns && ns != gsym->ns; ns = ns->sibling)
2562 {
2563 if (ns->sibling == gsym->ns)
2564 {
2565 ns->sibling = gsym->ns->sibling;
2566 gsym->ns->sibling = gfc_global_ns_list;
2567 gfc_global_ns_list = gsym->ns;
2568 break;
2569 }
2570 }
2571
2572 /* This can happen if a binding name has been specified. */
2573 if (gsym->binding_label && gsym->sym_name != def_sym->name)
2574 gfc_find_symbol (gsym->sym_name, gsym->ns, 0, &def_sym);
2575
2576 if (def_sym->attr.entry_master || def_sym->attr.entry)
2577 {
2578 gfc_entry_list *entry;
2579 for (entry = gsym->ns->entries; entry; entry = entry->next)
2580 if (strcmp (entry->sym->name, sym->name) == 0)
2581 {
2582 def_sym = entry->sym;
2583 break;
2584 }
2585 }
2586 }
2587
2588 if (sym->attr.function && !gfc_compare_types (&sym->ts, &def_sym->ts))
2589 {
2590 gfc_error ("Return type mismatch of function %qs at %L (%s/%s)",
2591 sym->name, &sym->declared_at, gfc_typename (&sym->ts),
2592 gfc_typename (&def_sym->ts));
2593 goto done;
2594 }
2595
2596 if (sym->attr.if_source == IFSRC_UNKNOWN
2597 && gfc_explicit_interface_required (def_sym, reason, sizeof(reason)))
2598 {
2599 gfc_error ("Explicit interface required for %qs at %L: %s",
2600 sym->name, &sym->declared_at, reason);
2601 goto done;
2602 }
2603
2604 if (!pedantic && (gfc_option.allow_std & GFC_STD_GNU))
2605 /* Turn erros into warnings with -std=gnu and -std=legacy. */
2606 gfc_errors_to_warnings (true);
2607
2608 if (!gfc_compare_interfaces (sym, def_sym, sym->name, 0, 1,
2609 reason, sizeof(reason), NULL, NULL))
2610 {
2611 gfc_error_opt (0, "Interface mismatch in global procedure %qs at %L:"
2612 " %s", sym->name, &sym->declared_at, reason);
2613 goto done;
2614 }
2615 }
2616
2617 done:
2618 gfc_errors_to_warnings (false);
2619
2620 if (gsym->type == GSYM_UNKNOWN)
2621 {
2622 gsym->type = type;
2623 gsym->where = *where;
2624 }
2625
2626 gsym->used = 1;
2627 }
2628
2629
2630 /************* Function resolution *************/
2631
2632 /* Resolve a function call known to be generic.
2633 Section 14.1.2.4.1. */
2634
2635 static match
2636 resolve_generic_f0 (gfc_expr *expr, gfc_symbol *sym)
2637 {
2638 gfc_symbol *s;
2639
2640 if (sym->attr.generic)
2641 {
2642 s = gfc_search_interface (sym->generic, 0, &expr->value.function.actual);
2643 if (s != NULL)
2644 {
2645 expr->value.function.name = s->name;
2646 expr->value.function.esym = s;
2647
2648 if (s->ts.type != BT_UNKNOWN)
2649 expr->ts = s->ts;
2650 else if (s->result != NULL && s->result->ts.type != BT_UNKNOWN)
2651 expr->ts = s->result->ts;
2652
2653 if (s->as != NULL)
2654 expr->rank = s->as->rank;
2655 else if (s->result != NULL && s->result->as != NULL)
2656 expr->rank = s->result->as->rank;
2657
2658 gfc_set_sym_referenced (expr->value.function.esym);
2659
2660 return MATCH_YES;
2661 }
2662
2663 /* TODO: Need to search for elemental references in generic
2664 interface. */
2665 }
2666
2667 if (sym->attr.intrinsic)
2668 return gfc_intrinsic_func_interface (expr, 0);
2669
2670 return MATCH_NO;
2671 }
2672
2673
2674 static bool
2675 resolve_generic_f (gfc_expr *expr)
2676 {
2677 gfc_symbol *sym;
2678 match m;
2679 gfc_interface *intr = NULL;
2680
2681 sym = expr->symtree->n.sym;
2682
2683 for (;;)
2684 {
2685 m = resolve_generic_f0 (expr, sym);
2686 if (m == MATCH_YES)
2687 return true;
2688 else if (m == MATCH_ERROR)
2689 return false;
2690
2691 generic:
2692 if (!intr)
2693 for (intr = sym->generic; intr; intr = intr->next)
2694 if (gfc_fl_struct (intr->sym->attr.flavor))
2695 break;
2696
2697 if (sym->ns->parent == NULL)
2698 break;
2699 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
2700
2701 if (sym == NULL)
2702 break;
2703 if (!generic_sym (sym))
2704 goto generic;
2705 }
2706
2707 /* Last ditch attempt. See if the reference is to an intrinsic
2708 that possesses a matching interface. 14.1.2.4 */
2709 if (sym && !intr && !gfc_is_intrinsic (sym, 0, expr->where))
2710 {
2711 if (gfc_init_expr_flag)
2712 gfc_error ("Function %qs in initialization expression at %L "
2713 "must be an intrinsic function",
2714 expr->symtree->n.sym->name, &expr->where);
2715 else
2716 gfc_error ("There is no specific function for the generic %qs "
2717 "at %L", expr->symtree->n.sym->name, &expr->where);
2718 return false;
2719 }
2720
2721 if (intr)
2722 {
2723 if (!gfc_convert_to_structure_constructor (expr, intr->sym, NULL,
2724 NULL, false))
2725 return false;
2726 if (!gfc_use_derived (expr->ts.u.derived))
2727 return false;
2728 return resolve_structure_cons (expr, 0);
2729 }
2730
2731 m = gfc_intrinsic_func_interface (expr, 0);
2732 if (m == MATCH_YES)
2733 return true;
2734
2735 if (m == MATCH_NO)
2736 gfc_error ("Generic function %qs at %L is not consistent with a "
2737 "specific intrinsic interface", expr->symtree->n.sym->name,
2738 &expr->where);
2739
2740 return false;
2741 }
2742
2743
2744 /* Resolve a function call known to be specific. */
2745
2746 static match
2747 resolve_specific_f0 (gfc_symbol *sym, gfc_expr *expr)
2748 {
2749 match m;
2750
2751 if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
2752 {
2753 if (sym->attr.dummy)
2754 {
2755 sym->attr.proc = PROC_DUMMY;
2756 goto found;
2757 }
2758
2759 sym->attr.proc = PROC_EXTERNAL;
2760 goto found;
2761 }
2762
2763 if (sym->attr.proc == PROC_MODULE
2764 || sym->attr.proc == PROC_ST_FUNCTION
2765 || sym->attr.proc == PROC_INTERNAL)
2766 goto found;
2767
2768 if (sym->attr.intrinsic)
2769 {
2770 m = gfc_intrinsic_func_interface (expr, 1);
2771 if (m == MATCH_YES)
2772 return MATCH_YES;
2773 if (m == MATCH_NO)
2774 gfc_error ("Function %qs at %L is INTRINSIC but is not compatible "
2775 "with an intrinsic", sym->name, &expr->where);
2776
2777 return MATCH_ERROR;
2778 }
2779
2780 return MATCH_NO;
2781
2782 found:
2783 gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
2784
2785 if (sym->result)
2786 expr->ts = sym->result->ts;
2787 else
2788 expr->ts = sym->ts;
2789 expr->value.function.name = sym->name;
2790 expr->value.function.esym = sym;
2791 /* Prevent crash when sym->ts.u.derived->components is not set due to previous
2792 error(s). */
2793 if (sym->ts.type == BT_CLASS && !CLASS_DATA (sym))
2794 return MATCH_ERROR;
2795 if (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as)
2796 expr->rank = CLASS_DATA (sym)->as->rank;
2797 else if (sym->as != NULL)
2798 expr->rank = sym->as->rank;
2799
2800 return MATCH_YES;
2801 }
2802
2803
2804 static bool
2805 resolve_specific_f (gfc_expr *expr)
2806 {
2807 gfc_symbol *sym;
2808 match m;
2809
2810 sym = expr->symtree->n.sym;
2811
2812 for (;;)
2813 {
2814 m = resolve_specific_f0 (sym, expr);
2815 if (m == MATCH_YES)
2816 return true;
2817 if (m == MATCH_ERROR)
2818 return false;
2819
2820 if (sym->ns->parent == NULL)
2821 break;
2822
2823 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
2824
2825 if (sym == NULL)
2826 break;
2827 }
2828
2829 gfc_error ("Unable to resolve the specific function %qs at %L",
2830 expr->symtree->n.sym->name, &expr->where);
2831
2832 return true;
2833 }
2834
2835 /* Recursively append candidate SYM to CANDIDATES. Store the number of
2836 candidates in CANDIDATES_LEN. */
2837
2838 static void
2839 lookup_function_fuzzy_find_candidates (gfc_symtree *sym,
2840 char **&candidates,
2841 size_t &candidates_len)
2842 {
2843 gfc_symtree *p;
2844
2845 if (sym == NULL)
2846 return;
2847 if ((sym->n.sym->ts.type != BT_UNKNOWN || sym->n.sym->attr.external)
2848 && sym->n.sym->attr.flavor == FL_PROCEDURE)
2849 vec_push (candidates, candidates_len, sym->name);
2850
2851 p = sym->left;
2852 if (p)
2853 lookup_function_fuzzy_find_candidates (p, candidates, candidates_len);
2854
2855 p = sym->right;
2856 if (p)
2857 lookup_function_fuzzy_find_candidates (p, candidates, candidates_len);
2858 }
2859
2860
2861 /* Lookup function FN fuzzily, taking names in SYMROOT into account. */
2862
2863 const char*
2864 gfc_lookup_function_fuzzy (const char *fn, gfc_symtree *symroot)
2865 {
2866 char **candidates = NULL;
2867 size_t candidates_len = 0;
2868 lookup_function_fuzzy_find_candidates (symroot, candidates, candidates_len);
2869 return gfc_closest_fuzzy_match (fn, candidates);
2870 }
2871
2872
2873 /* Resolve a procedure call not known to be generic nor specific. */
2874
2875 static bool
2876 resolve_unknown_f (gfc_expr *expr)
2877 {
2878 gfc_symbol *sym;
2879 gfc_typespec *ts;
2880
2881 sym = expr->symtree->n.sym;
2882
2883 if (sym->attr.dummy)
2884 {
2885 sym->attr.proc = PROC_DUMMY;
2886 expr->value.function.name = sym->name;
2887 goto set_type;
2888 }
2889
2890 /* See if we have an intrinsic function reference. */
2891
2892 if (gfc_is_intrinsic (sym, 0, expr->where))
2893 {
2894 if (gfc_intrinsic_func_interface (expr, 1) == MATCH_YES)
2895 return true;
2896 return false;
2897 }
2898
2899 /* The reference is to an external name. */
2900
2901 sym->attr.proc = PROC_EXTERNAL;
2902 expr->value.function.name = sym->name;
2903 expr->value.function.esym = expr->symtree->n.sym;
2904
2905 if (sym->as != NULL)
2906 expr->rank = sym->as->rank;
2907
2908 /* Type of the expression is either the type of the symbol or the
2909 default type of the symbol. */
2910
2911 set_type:
2912 gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
2913
2914 if (sym->ts.type != BT_UNKNOWN)
2915 expr->ts = sym->ts;
2916 else
2917 {
2918 ts = gfc_get_default_type (sym->name, sym->ns);
2919
2920 if (ts->type == BT_UNKNOWN)
2921 {
2922 const char *guessed
2923 = gfc_lookup_function_fuzzy (sym->name, sym->ns->sym_root);
2924 if (guessed)
2925 gfc_error ("Function %qs at %L has no IMPLICIT type"
2926 "; did you mean %qs?",
2927 sym->name, &expr->where, guessed);
2928 else
2929 gfc_error ("Function %qs at %L has no IMPLICIT type",
2930 sym->name, &expr->where);
2931 return false;
2932 }
2933 else
2934 expr->ts = *ts;
2935 }
2936
2937 return true;
2938 }
2939
2940
2941 /* Return true, if the symbol is an external procedure. */
2942 static bool
2943 is_external_proc (gfc_symbol *sym)
2944 {
2945 if (!sym->attr.dummy && !sym->attr.contained
2946 && !gfc_is_intrinsic (sym, sym->attr.subroutine, sym->declared_at)
2947 && sym->attr.proc != PROC_ST_FUNCTION
2948 && !sym->attr.proc_pointer
2949 && !sym->attr.use_assoc
2950 && sym->name)
2951 return true;
2952
2953 return false;
2954 }
2955
2956
2957 /* Figure out if a function reference is pure or not. Also set the name
2958 of the function for a potential error message. Return nonzero if the
2959 function is PURE, zero if not. */
2960 static int
2961 pure_stmt_function (gfc_expr *, gfc_symbol *);
2962
2963 int
2964 gfc_pure_function (gfc_expr *e, const char **name)
2965 {
2966 int pure;
2967 gfc_component *comp;
2968
2969 *name = NULL;
2970
2971 if (e->symtree != NULL
2972 && e->symtree->n.sym != NULL
2973 && e->symtree->n.sym->attr.proc == PROC_ST_FUNCTION)
2974 return pure_stmt_function (e, e->symtree->n.sym);
2975
2976 comp = gfc_get_proc_ptr_comp (e);
2977 if (comp)
2978 {
2979 pure = gfc_pure (comp->ts.interface);
2980 *name = comp->name;
2981 }
2982 else if (e->value.function.esym)
2983 {
2984 pure = gfc_pure (e->value.function.esym);
2985 *name = e->value.function.esym->name;
2986 }
2987 else if (e->value.function.isym)
2988 {
2989 pure = e->value.function.isym->pure
2990 || e->value.function.isym->elemental;
2991 *name = e->value.function.isym->name;
2992 }
2993 else
2994 {
2995 /* Implicit functions are not pure. */
2996 pure = 0;
2997 *name = e->value.function.name;
2998 }
2999
3000 return pure;
3001 }
3002
3003
3004 /* Check if the expression is a reference to an implicitly pure function. */
3005
3006 int
3007 gfc_implicit_pure_function (gfc_expr *e)
3008 {
3009 gfc_component *comp = gfc_get_proc_ptr_comp (e);
3010 if (comp)
3011 return gfc_implicit_pure (comp->ts.interface);
3012 else if (e->value.function.esym)
3013 return gfc_implicit_pure (e->value.function.esym);
3014 else
3015 return 0;
3016 }
3017
3018
3019 static bool
3020 impure_stmt_fcn (gfc_expr *e, gfc_symbol *sym,
3021 int *f ATTRIBUTE_UNUSED)
3022 {
3023 const char *name;
3024
3025 /* Don't bother recursing into other statement functions
3026 since they will be checked individually for purity. */
3027 if (e->expr_type != EXPR_FUNCTION
3028 || !e->symtree
3029 || e->symtree->n.sym == sym
3030 || e->symtree->n.sym->attr.proc == PROC_ST_FUNCTION)
3031 return false;
3032
3033 return gfc_pure_function (e, &name) ? false : true;
3034 }
3035
3036
3037 static int
3038 pure_stmt_function (gfc_expr *e, gfc_symbol *sym)
3039 {
3040 return gfc_traverse_expr (e, sym, impure_stmt_fcn, 0) ? 0 : 1;
3041 }
3042
3043
3044 /* Check if an impure function is allowed in the current context. */
3045
3046 static bool check_pure_function (gfc_expr *e)
3047 {
3048 const char *name = NULL;
3049 if (!gfc_pure_function (e, &name) && name)
3050 {
3051 if (forall_flag)
3052 {
3053 gfc_error ("Reference to impure function %qs at %L inside a "
3054 "FORALL %s", name, &e->where,
3055 forall_flag == 2 ? "mask" : "block");
3056 return false;
3057 }
3058 else if (gfc_do_concurrent_flag)
3059 {
3060 gfc_error ("Reference to impure function %qs at %L inside a "
3061 "DO CONCURRENT %s", name, &e->where,
3062 gfc_do_concurrent_flag == 2 ? "mask" : "block");
3063 return false;
3064 }
3065 else if (gfc_pure (NULL))
3066 {
3067 gfc_error ("Reference to impure function %qs at %L "
3068 "within a PURE procedure", name, &e->where);
3069 return false;
3070 }
3071 if (!gfc_implicit_pure_function (e))
3072 gfc_unset_implicit_pure (NULL);
3073 }
3074 return true;
3075 }
3076
3077
3078 /* Update current procedure's array_outer_dependency flag, considering
3079 a call to procedure SYM. */
3080
3081 static void
3082 update_current_proc_array_outer_dependency (gfc_symbol *sym)
3083 {
3084 /* Check to see if this is a sibling function that has not yet
3085 been resolved. */
3086 gfc_namespace *sibling = gfc_current_ns->sibling;
3087 for (; sibling; sibling = sibling->sibling)
3088 {
3089 if (sibling->proc_name == sym)
3090 {
3091 gfc_resolve (sibling);
3092 break;
3093 }
3094 }
3095
3096 /* If SYM has references to outer arrays, so has the procedure calling
3097 SYM. If SYM is a procedure pointer, we can assume the worst. */
3098 if ((sym->attr.array_outer_dependency || sym->attr.proc_pointer)
3099 && gfc_current_ns->proc_name)
3100 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
3101 }
3102
3103
3104 /* Resolve a function call, which means resolving the arguments, then figuring
3105 out which entity the name refers to. */
3106
3107 static bool
3108 resolve_function (gfc_expr *expr)
3109 {
3110 gfc_actual_arglist *arg;
3111 gfc_symbol *sym;
3112 bool t;
3113 int temp;
3114 procedure_type p = PROC_INTRINSIC;
3115 bool no_formal_args;
3116
3117 sym = NULL;
3118 if (expr->symtree)
3119 sym = expr->symtree->n.sym;
3120
3121 /* If this is a procedure pointer component, it has already been resolved. */
3122 if (gfc_is_proc_ptr_comp (expr))
3123 return true;
3124
3125 /* Avoid re-resolving the arguments of caf_get, which can lead to inserting
3126 another caf_get. */
3127 if (sym && sym->attr.intrinsic
3128 && (sym->intmod_sym_id == GFC_ISYM_CAF_GET
3129 || sym->intmod_sym_id == GFC_ISYM_CAF_SEND))
3130 return true;
3131
3132 if (sym && sym->attr.intrinsic
3133 && !gfc_resolve_intrinsic (sym, &expr->where))
3134 return false;
3135
3136 if (sym && (sym->attr.flavor == FL_VARIABLE || sym->attr.subroutine))
3137 {
3138 gfc_error ("%qs at %L is not a function", sym->name, &expr->where);
3139 return false;
3140 }
3141
3142 /* If this is a deferred TBP with an abstract interface (which may
3143 of course be referenced), expr->value.function.esym will be set. */
3144 if (sym && sym->attr.abstract && !expr->value.function.esym)
3145 {
3146 gfc_error ("ABSTRACT INTERFACE %qs must not be referenced at %L",
3147 sym->name, &expr->where);
3148 return false;
3149 }
3150
3151 /* If this is a deferred TBP with an abstract interface, its result
3152 cannot be an assumed length character (F2003: C418). */
3153 if (sym && sym->attr.abstract && sym->attr.function
3154 && sym->result->ts.u.cl
3155 && sym->result->ts.u.cl->length == NULL
3156 && !sym->result->ts.deferred)
3157 {
3158 gfc_error ("ABSTRACT INTERFACE %qs at %L must not have an assumed "
3159 "character length result (F2008: C418)", sym->name,
3160 &sym->declared_at);
3161 return false;
3162 }
3163
3164 /* Switch off assumed size checking and do this again for certain kinds
3165 of procedure, once the procedure itself is resolved. */
3166 need_full_assumed_size++;
3167
3168 if (expr->symtree && expr->symtree->n.sym)
3169 p = expr->symtree->n.sym->attr.proc;
3170
3171 if (expr->value.function.isym && expr->value.function.isym->inquiry)
3172 inquiry_argument = true;
3173 no_formal_args = sym && is_external_proc (sym)
3174 && gfc_sym_get_dummy_args (sym) == NULL;
3175
3176 if (!resolve_actual_arglist (expr->value.function.actual,
3177 p, no_formal_args))
3178 {
3179 inquiry_argument = false;
3180 return false;
3181 }
3182
3183 inquiry_argument = false;
3184
3185 /* Resume assumed_size checking. */
3186 need_full_assumed_size--;
3187
3188 /* If the procedure is external, check for usage. */
3189 if (sym && is_external_proc (sym))
3190 resolve_global_procedure (sym, &expr->where, 0);
3191
3192 if (sym && sym->ts.type == BT_CHARACTER
3193 && sym->ts.u.cl
3194 && sym->ts.u.cl->length == NULL
3195 && !sym->attr.dummy
3196 && !sym->ts.deferred
3197 && expr->value.function.esym == NULL
3198 && !sym->attr.contained)
3199 {
3200 /* Internal procedures are taken care of in resolve_contained_fntype. */
3201 gfc_error ("Function %qs is declared CHARACTER(*) and cannot "
3202 "be used at %L since it is not a dummy argument",
3203 sym->name, &expr->where);
3204 return false;
3205 }
3206
3207 /* See if function is already resolved. */
3208
3209 if (expr->value.function.name != NULL
3210 || expr->value.function.isym != NULL)
3211 {
3212 if (expr->ts.type == BT_UNKNOWN)
3213 expr->ts = sym->ts;
3214 t = true;
3215 }
3216 else
3217 {
3218 /* Apply the rules of section 14.1.2. */
3219
3220 switch (procedure_kind (sym))
3221 {
3222 case PTYPE_GENERIC:
3223 t = resolve_generic_f (expr);
3224 break;
3225
3226 case PTYPE_SPECIFIC:
3227 t = resolve_specific_f (expr);
3228 break;
3229
3230 case PTYPE_UNKNOWN:
3231 t = resolve_unknown_f (expr);
3232 break;
3233
3234 default:
3235 gfc_internal_error ("resolve_function(): bad function type");
3236 }
3237 }
3238
3239 /* If the expression is still a function (it might have simplified),
3240 then we check to see if we are calling an elemental function. */
3241
3242 if (expr->expr_type != EXPR_FUNCTION)
3243 return t;
3244
3245 /* Walk the argument list looking for invalid BOZ. */
3246 for (arg = expr->value.function.actual; arg; arg = arg->next)
3247 if (arg->expr && arg->expr->ts.type == BT_BOZ)
3248 {
3249 gfc_error ("A BOZ literal constant at %L cannot appear as an "
3250 "actual argument in a function reference",
3251 &arg->expr->where);
3252 return false;
3253 }
3254
3255 temp = need_full_assumed_size;
3256 need_full_assumed_size = 0;
3257
3258 if (!resolve_elemental_actual (expr, NULL))
3259 return false;
3260
3261 if (omp_workshare_flag
3262 && expr->value.function.esym
3263 && ! gfc_elemental (expr->value.function.esym))
3264 {
3265 gfc_error ("User defined non-ELEMENTAL function %qs at %L not allowed "
3266 "in WORKSHARE construct", expr->value.function.esym->name,
3267 &expr->where);
3268 t = false;
3269 }
3270
3271 #define GENERIC_ID expr->value.function.isym->id
3272 else if (expr->value.function.actual != NULL
3273 && expr->value.function.isym != NULL
3274 && GENERIC_ID != GFC_ISYM_LBOUND
3275 && GENERIC_ID != GFC_ISYM_LCOBOUND
3276 && GENERIC_ID != GFC_ISYM_UCOBOUND
3277 && GENERIC_ID != GFC_ISYM_LEN
3278 && GENERIC_ID != GFC_ISYM_LOC
3279 && GENERIC_ID != GFC_ISYM_C_LOC
3280 && GENERIC_ID != GFC_ISYM_PRESENT)
3281 {
3282 /* Array intrinsics must also have the last upper bound of an
3283 assumed size array argument. UBOUND and SIZE have to be
3284 excluded from the check if the second argument is anything
3285 than a constant. */
3286
3287 for (arg = expr->value.function.actual; arg; arg = arg->next)
3288 {
3289 if ((GENERIC_ID == GFC_ISYM_UBOUND || GENERIC_ID == GFC_ISYM_SIZE)
3290 && arg == expr->value.function.actual
3291 && arg->next != NULL && arg->next->expr)
3292 {
3293 if (arg->next->expr->expr_type != EXPR_CONSTANT)
3294 break;
3295
3296 if (arg->next->name && strcmp (arg->next->name, "kind") == 0)
3297 break;
3298
3299 if ((int)mpz_get_si (arg->next->expr->value.integer)
3300 < arg->expr->rank)
3301 break;
3302 }
3303
3304 if (arg->expr != NULL
3305 && arg->expr->rank > 0
3306 && resolve_assumed_size_actual (arg->expr))
3307 return false;
3308 }
3309 }
3310 #undef GENERIC_ID
3311
3312 need_full_assumed_size = temp;
3313
3314 if (!check_pure_function(expr))
3315 t = false;
3316
3317 /* Functions without the RECURSIVE attribution are not allowed to
3318 * call themselves. */
3319 if (expr->value.function.esym && !expr->value.function.esym->attr.recursive)
3320 {
3321 gfc_symbol *esym;
3322 esym = expr->value.function.esym;
3323
3324 if (is_illegal_recursion (esym, gfc_current_ns))
3325 {
3326 if (esym->attr.entry && esym->ns->entries)
3327 gfc_error ("ENTRY %qs at %L cannot be called recursively, as"
3328 " function %qs is not RECURSIVE",
3329 esym->name, &expr->where, esym->ns->entries->sym->name);
3330 else
3331 gfc_error ("Function %qs at %L cannot be called recursively, as it"
3332 " is not RECURSIVE", esym->name, &expr->where);
3333
3334 t = false;
3335 }
3336 }
3337
3338 /* Character lengths of use associated functions may contains references to
3339 symbols not referenced from the current program unit otherwise. Make sure
3340 those symbols are marked as referenced. */
3341
3342 if (expr->ts.type == BT_CHARACTER && expr->value.function.esym
3343 && expr->value.function.esym->attr.use_assoc)
3344 {
3345 gfc_expr_set_symbols_referenced (expr->ts.u.cl->length);
3346 }
3347
3348 /* Make sure that the expression has a typespec that works. */
3349 if (expr->ts.type == BT_UNKNOWN)
3350 {
3351 if (expr->symtree->n.sym->result
3352 && expr->symtree->n.sym->result->ts.type != BT_UNKNOWN
3353 && !expr->symtree->n.sym->result->attr.proc_pointer)
3354 expr->ts = expr->symtree->n.sym->result->ts;
3355 }
3356
3357 if (!expr->ref && !expr->value.function.isym)
3358 {
3359 if (expr->value.function.esym)
3360 update_current_proc_array_outer_dependency (expr->value.function.esym);
3361 else
3362 update_current_proc_array_outer_dependency (sym);
3363 }
3364 else if (expr->ref)
3365 /* typebound procedure: Assume the worst. */
3366 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
3367
3368 return t;
3369 }
3370
3371
3372 /************* Subroutine resolution *************/
3373
3374 static bool
3375 pure_subroutine (gfc_symbol *sym, const char *name, locus *loc)
3376 {
3377 if (gfc_pure (sym))
3378 return true;
3379
3380 if (forall_flag)
3381 {
3382 gfc_error ("Subroutine call to %qs in FORALL block at %L is not PURE",
3383 name, loc);
3384 return false;
3385 }
3386 else if (gfc_do_concurrent_flag)
3387 {
3388 gfc_error ("Subroutine call to %qs in DO CONCURRENT block at %L is not "
3389 "PURE", name, loc);
3390 return false;
3391 }
3392 else if (gfc_pure (NULL))
3393 {
3394 gfc_error ("Subroutine call to %qs at %L is not PURE", name, loc);
3395 return false;
3396 }
3397
3398 gfc_unset_implicit_pure (NULL);
3399 return true;
3400 }
3401
3402
3403 static match
3404 resolve_generic_s0 (gfc_code *c, gfc_symbol *sym)
3405 {
3406 gfc_symbol *s;
3407
3408 if (sym->attr.generic)
3409 {
3410 s = gfc_search_interface (sym->generic, 1, &c->ext.actual);
3411 if (s != NULL)
3412 {
3413 c->resolved_sym = s;
3414 if (!pure_subroutine (s, s->name, &c->loc))
3415 return MATCH_ERROR;
3416 return MATCH_YES;
3417 }
3418
3419 /* TODO: Need to search for elemental references in generic interface. */
3420 }
3421
3422 if (sym->attr.intrinsic)
3423 return gfc_intrinsic_sub_interface (c, 0);
3424
3425 return MATCH_NO;
3426 }
3427
3428
3429 static bool
3430 resolve_generic_s (gfc_code *c)
3431 {
3432 gfc_symbol *sym;
3433 match m;
3434
3435 sym = c->symtree->n.sym;
3436
3437 for (;;)
3438 {
3439 m = resolve_generic_s0 (c, sym);
3440 if (m == MATCH_YES)
3441 return true;
3442 else if (m == MATCH_ERROR)
3443 return false;
3444
3445 generic:
3446 if (sym->ns->parent == NULL)
3447 break;
3448 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
3449
3450 if (sym == NULL)
3451 break;
3452 if (!generic_sym (sym))
3453 goto generic;
3454 }
3455
3456 /* Last ditch attempt. See if the reference is to an intrinsic
3457 that possesses a matching interface. 14.1.2.4 */
3458 sym = c->symtree->n.sym;
3459
3460 if (!gfc_is_intrinsic (sym, 1, c->loc))
3461 {
3462 gfc_error ("There is no specific subroutine for the generic %qs at %L",
3463 sym->name, &c->loc);
3464 return false;
3465 }
3466
3467 m = gfc_intrinsic_sub_interface (c, 0);
3468 if (m == MATCH_YES)
3469 return true;
3470 if (m == MATCH_NO)
3471 gfc_error ("Generic subroutine %qs at %L is not consistent with an "
3472 "intrinsic subroutine interface", sym->name, &c->loc);
3473
3474 return false;
3475 }
3476
3477
3478 /* Resolve a subroutine call known to be specific. */
3479
3480 static match
3481 resolve_specific_s0 (gfc_code *c, gfc_symbol *sym)
3482 {
3483 match m;
3484
3485 if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
3486 {
3487 if (sym->attr.dummy)
3488 {
3489 sym->attr.proc = PROC_DUMMY;
3490 goto found;
3491 }
3492
3493 sym->attr.proc = PROC_EXTERNAL;
3494 goto found;
3495 }
3496
3497 if (sym->attr.proc == PROC_MODULE || sym->attr.proc == PROC_INTERNAL)
3498 goto found;
3499
3500 if (sym->attr.intrinsic)
3501 {
3502 m = gfc_intrinsic_sub_interface (c, 1);
3503 if (m == MATCH_YES)
3504 return MATCH_YES;
3505 if (m == MATCH_NO)
3506 gfc_error ("Subroutine %qs at %L is INTRINSIC but is not compatible "
3507 "with an intrinsic", sym->name, &c->loc);
3508
3509 return MATCH_ERROR;
3510 }
3511
3512 return MATCH_NO;
3513
3514 found:
3515 gfc_procedure_use (sym, &c->ext.actual, &c->loc);
3516
3517 c->resolved_sym = sym;
3518 if (!pure_subroutine (sym, sym->name, &c->loc))
3519 return MATCH_ERROR;
3520
3521 return MATCH_YES;
3522 }
3523
3524
3525 static bool
3526 resolve_specific_s (gfc_code *c)
3527 {
3528 gfc_symbol *sym;
3529 match m;
3530
3531 sym = c->symtree->n.sym;
3532
3533 for (;;)
3534 {
3535 m = resolve_specific_s0 (c, sym);
3536 if (m == MATCH_YES)
3537 return true;
3538 if (m == MATCH_ERROR)
3539 return false;
3540
3541 if (sym->ns->parent == NULL)
3542 break;
3543
3544 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
3545
3546 if (sym == NULL)
3547 break;
3548 }
3549
3550 sym = c->symtree->n.sym;
3551 gfc_error ("Unable to resolve the specific subroutine %qs at %L",
3552 sym->name, &c->loc);
3553
3554 return false;
3555 }
3556
3557
3558 /* Resolve a subroutine call not known to be generic nor specific. */
3559
3560 static bool
3561 resolve_unknown_s (gfc_code *c)
3562 {
3563 gfc_symbol *sym;
3564
3565 sym = c->symtree->n.sym;
3566
3567 if (sym->attr.dummy)
3568 {
3569 sym->attr.proc = PROC_DUMMY;
3570 goto found;
3571 }
3572
3573 /* See if we have an intrinsic function reference. */
3574
3575 if (gfc_is_intrinsic (sym, 1, c->loc))
3576 {
3577 if (gfc_intrinsic_sub_interface (c, 1) == MATCH_YES)
3578 return true;
3579 return false;
3580 }
3581
3582 /* The reference is to an external name. */
3583
3584 found:
3585 gfc_procedure_use (sym, &c->ext.actual, &c->loc);
3586
3587 c->resolved_sym = sym;
3588
3589 return pure_subroutine (sym, sym->name, &c->loc);
3590 }
3591
3592
3593 /* Resolve a subroutine call. Although it was tempting to use the same code
3594 for functions, subroutines and functions are stored differently and this
3595 makes things awkward. */
3596
3597 static bool
3598 resolve_call (gfc_code *c)
3599 {
3600 bool t;
3601 procedure_type ptype = PROC_INTRINSIC;
3602 gfc_symbol *csym, *sym;
3603 bool no_formal_args;
3604
3605 csym = c->symtree ? c->symtree->n.sym : NULL;
3606
3607 if (csym && csym->ts.type != BT_UNKNOWN)
3608 {
3609 gfc_error ("%qs at %L has a type, which is not consistent with "
3610 "the CALL at %L", csym->name, &csym->declared_at, &c->loc);
3611 return false;
3612 }
3613
3614 if (csym && gfc_current_ns->parent && csym->ns != gfc_current_ns)
3615 {
3616 gfc_symtree *st;
3617 gfc_find_sym_tree (c->symtree->name, gfc_current_ns, 1, &st);
3618 sym = st ? st->n.sym : NULL;
3619 if (sym && csym != sym
3620 && sym->ns == gfc_current_ns
3621 && sym->attr.flavor == FL_PROCEDURE
3622 && sym->attr.contained)
3623 {
3624 sym->refs++;
3625 if (csym->attr.generic)
3626 c->symtree->n.sym = sym;
3627 else
3628 c->symtree = st;
3629 csym = c->symtree->n.sym;
3630 }
3631 }
3632
3633 /* If this ia a deferred TBP, c->expr1 will be set. */
3634 if (!c->expr1 && csym)
3635 {
3636 if (csym->attr.abstract)
3637 {
3638 gfc_error ("ABSTRACT INTERFACE %qs must not be referenced at %L",
3639 csym->name, &c->loc);
3640 return false;
3641 }
3642
3643 /* Subroutines without the RECURSIVE attribution are not allowed to
3644 call themselves. */
3645 if (is_illegal_recursion (csym, gfc_current_ns))
3646 {
3647 if (csym->attr.entry && csym->ns->entries)
3648 gfc_error ("ENTRY %qs at %L cannot be called recursively, "
3649 "as subroutine %qs is not RECURSIVE",
3650 csym->name, &c->loc, csym->ns->entries->sym->name);
3651 else
3652 gfc_error ("SUBROUTINE %qs at %L cannot be called recursively, "
3653 "as it is not RECURSIVE", csym->name, &c->loc);
3654
3655 t = false;
3656 }
3657 }
3658
3659 /* Switch off assumed size checking and do this again for certain kinds
3660 of procedure, once the procedure itself is resolved. */
3661 need_full_assumed_size++;
3662
3663 if (csym)
3664 ptype = csym->attr.proc;
3665
3666 no_formal_args = csym && is_external_proc (csym)
3667 && gfc_sym_get_dummy_args (csym) == NULL;
3668 if (!resolve_actual_arglist (c->ext.actual, ptype, no_formal_args))
3669 return false;
3670
3671 /* Resume assumed_size checking. */
3672 need_full_assumed_size--;
3673
3674 /* If external, check for usage. */
3675 if (csym && is_external_proc (csym))
3676 resolve_global_procedure (csym, &c->loc, 1);
3677
3678 t = true;
3679 if (c->resolved_sym == NULL)
3680 {
3681 c->resolved_isym = NULL;
3682 switch (procedure_kind (csym))
3683 {
3684 case PTYPE_GENERIC:
3685 t = resolve_generic_s (c);
3686 break;
3687
3688 case PTYPE_SPECIFIC:
3689 t = resolve_specific_s (c);
3690 break;
3691
3692 case PTYPE_UNKNOWN:
3693 t = resolve_unknown_s (c);
3694 break;
3695
3696 default:
3697 gfc_internal_error ("resolve_subroutine(): bad function type");
3698 }
3699 }
3700
3701 /* Some checks of elemental subroutine actual arguments. */
3702 if (!resolve_elemental_actual (NULL, c))
3703 return false;
3704
3705 if (!c->expr1)
3706 update_current_proc_array_outer_dependency (csym);
3707 else
3708 /* Typebound procedure: Assume the worst. */
3709 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
3710
3711 return t;
3712 }
3713
3714
3715 /* Compare the shapes of two arrays that have non-NULL shapes. If both
3716 op1->shape and op2->shape are non-NULL return true if their shapes
3717 match. If both op1->shape and op2->shape are non-NULL return false
3718 if their shapes do not match. If either op1->shape or op2->shape is
3719 NULL, return true. */
3720
3721 static bool
3722 compare_shapes (gfc_expr *op1, gfc_expr *op2)
3723 {
3724 bool t;
3725 int i;
3726
3727 t = true;
3728
3729 if (op1->shape != NULL && op2->shape != NULL)
3730 {
3731 for (i = 0; i < op1->rank; i++)
3732 {
3733 if (mpz_cmp (op1->shape[i], op2->shape[i]) != 0)
3734 {
3735 gfc_error ("Shapes for operands at %L and %L are not conformable",
3736 &op1->where, &op2->where);
3737 t = false;
3738 break;
3739 }
3740 }
3741 }
3742
3743 return t;
3744 }
3745
3746 /* Convert a logical operator to the corresponding bitwise intrinsic call.
3747 For example A .AND. B becomes IAND(A, B). */
3748 static gfc_expr *
3749 logical_to_bitwise (gfc_expr *e)
3750 {
3751 gfc_expr *tmp, *op1, *op2;
3752 gfc_isym_id isym;
3753 gfc_actual_arglist *args = NULL;
3754
3755 gcc_assert (e->expr_type == EXPR_OP);
3756
3757 isym = GFC_ISYM_NONE;
3758 op1 = e->value.op.op1;
3759 op2 = e->value.op.op2;
3760
3761 switch (e->value.op.op)
3762 {
3763 case INTRINSIC_NOT:
3764 isym = GFC_ISYM_NOT;
3765 break;
3766 case INTRINSIC_AND:
3767 isym = GFC_ISYM_IAND;
3768 break;
3769 case INTRINSIC_OR:
3770 isym = GFC_ISYM_IOR;
3771 break;
3772 case INTRINSIC_NEQV:
3773 isym = GFC_ISYM_IEOR;
3774 break;
3775 case INTRINSIC_EQV:
3776 /* "Bitwise eqv" is just the complement of NEQV === IEOR.
3777 Change the old expression to NEQV, which will get replaced by IEOR,
3778 and wrap it in NOT. */
3779 tmp = gfc_copy_expr (e);
3780 tmp->value.op.op = INTRINSIC_NEQV;
3781 tmp = logical_to_bitwise (tmp);
3782 isym = GFC_ISYM_NOT;
3783 op1 = tmp;
3784 op2 = NULL;
3785 break;
3786 default:
3787 gfc_internal_error ("logical_to_bitwise(): Bad intrinsic");
3788 }
3789
3790 /* Inherit the original operation's operands as arguments. */
3791 args = gfc_get_actual_arglist ();
3792 args->expr = op1;
3793 if (op2)
3794 {
3795 args->next = gfc_get_actual_arglist ();
3796 args->next->expr = op2;
3797 }
3798
3799 /* Convert the expression to a function call. */
3800 e->expr_type = EXPR_FUNCTION;
3801 e->value.function.actual = args;
3802 e->value.function.isym = gfc_intrinsic_function_by_id (isym);
3803 e->value.function.name = e->value.function.isym->name;
3804 e->value.function.esym = NULL;
3805
3806 /* Make up a pre-resolved function call symtree if we need to. */
3807 if (!e->symtree || !e->symtree->n.sym)
3808 {
3809 gfc_symbol *sym;
3810 gfc_get_ha_sym_tree (e->value.function.isym->name, &e->symtree);
3811 sym = e->symtree->n.sym;
3812 sym->result = sym;
3813 sym->attr.flavor = FL_PROCEDURE;
3814 sym->attr.function = 1;
3815 sym->attr.elemental = 1;
3816 sym->attr.pure = 1;
3817 sym->attr.referenced = 1;
3818 gfc_intrinsic_symbol (sym);
3819 gfc_commit_symbol (sym);
3820 }
3821
3822 args->name = e->value.function.isym->formal->name;
3823 if (e->value.function.isym->formal->next)
3824 args->next->name = e->value.function.isym->formal->next->name;
3825
3826 return e;
3827 }
3828
3829 /* Recursively append candidate UOP to CANDIDATES. Store the number of
3830 candidates in CANDIDATES_LEN. */
3831 static void
3832 lookup_uop_fuzzy_find_candidates (gfc_symtree *uop,
3833 char **&candidates,
3834 size_t &candidates_len)
3835 {
3836 gfc_symtree *p;
3837
3838 if (uop == NULL)
3839 return;
3840
3841 /* Not sure how to properly filter here. Use all for a start.
3842 n.uop.op is NULL for empty interface operators (is that legal?) disregard
3843 these as i suppose they don't make terribly sense. */
3844
3845 if (uop->n.uop->op != NULL)
3846 vec_push (candidates, candidates_len, uop->name);
3847
3848 p = uop->left;
3849 if (p)
3850 lookup_uop_fuzzy_find_candidates (p, candidates, candidates_len);
3851
3852 p = uop->right;
3853 if (p)
3854 lookup_uop_fuzzy_find_candidates (p, candidates, candidates_len);
3855 }
3856
3857 /* Lookup user-operator OP fuzzily, taking names in UOP into account. */
3858
3859 static const char*
3860 lookup_uop_fuzzy (const char *op, gfc_symtree *uop)
3861 {
3862 char **candidates = NULL;
3863 size_t candidates_len = 0;
3864 lookup_uop_fuzzy_find_candidates (uop, candidates, candidates_len);
3865 return gfc_closest_fuzzy_match (op, candidates);
3866 }
3867
3868
3869 /* Callback finding an impure function as an operand to an .and. or
3870 .or. expression. Remember the last function warned about to
3871 avoid double warnings when recursing. */
3872
3873 static int
3874 impure_function_callback (gfc_expr **e, int *walk_subtrees ATTRIBUTE_UNUSED,
3875 void *data)
3876 {
3877 gfc_expr *f = *e;
3878 const char *name;
3879 static gfc_expr *last = NULL;
3880 bool *found = (bool *) data;
3881
3882 if (f->expr_type == EXPR_FUNCTION)
3883 {
3884 *found = 1;
3885 if (f != last && !gfc_pure_function (f, &name)
3886 && !gfc_implicit_pure_function (f))
3887 {
3888 if (name)
3889 gfc_warning (OPT_Wfunction_elimination,
3890 "Impure function %qs at %L might not be evaluated",
3891 name, &f->where);
3892 else
3893 gfc_warning (OPT_Wfunction_elimination,
3894 "Impure function at %L might not be evaluated",
3895 &f->where);
3896 }
3897 last = f;
3898 }
3899
3900 return 0;
3901 }
3902
3903
3904 /* Resolve an operator expression node. This can involve replacing the
3905 operation with a user defined function call. */
3906
3907 static bool
3908 resolve_operator (gfc_expr *e)
3909 {
3910 gfc_expr *op1, *op2;
3911 char msg[200];
3912 bool dual_locus_error;
3913 bool t = true;
3914
3915 /* Resolve all subnodes-- give them types. */
3916
3917 switch (e->value.op.op)
3918 {
3919 default:
3920 if (!gfc_resolve_expr (e->value.op.op2))
3921 return false;
3922
3923 /* Fall through. */
3924
3925 case INTRINSIC_NOT:
3926 case INTRINSIC_UPLUS:
3927 case INTRINSIC_UMINUS:
3928 case INTRINSIC_PARENTHESES:
3929 if (!gfc_resolve_expr (e->value.op.op1))
3930 return false;
3931 if (e->value.op.op1
3932 && e->value.op.op1->ts.type == BT_BOZ && !e->value.op.op2)
3933 {
3934 gfc_error ("BOZ literal constant at %L cannot be an operand of "
3935 "unary operator %qs", &e->value.op.op1->where,
3936 gfc_op2string (e->value.op.op));
3937 return false;
3938 }
3939 break;
3940 }
3941
3942 /* Typecheck the new node. */
3943
3944 op1 = e->value.op.op1;
3945 op2 = e->value.op.op2;
3946 dual_locus_error = false;
3947
3948 /* op1 and op2 cannot both be BOZ. */
3949 if (op1 && op1->ts.type == BT_BOZ
3950 && op2 && op2->ts.type == BT_BOZ)
3951 {
3952 gfc_error ("Operands at %L and %L cannot appear as operands of "
3953 "binary operator %qs", &op1->where, &op2->where,
3954 gfc_op2string (e->value.op.op));
3955 return false;
3956 }
3957
3958 if ((op1 && op1->expr_type == EXPR_NULL)
3959 || (op2 && op2->expr_type == EXPR_NULL))
3960 {
3961 sprintf (msg, _("Invalid context for NULL() pointer at %%L"));
3962 goto bad_op;
3963 }
3964
3965 switch (e->value.op.op)
3966 {
3967 case INTRINSIC_UPLUS:
3968 case INTRINSIC_UMINUS:
3969 if (op1->ts.type == BT_INTEGER
3970 || op1->ts.type == BT_REAL
3971 || op1->ts.type == BT_COMPLEX)
3972 {
3973 e->ts = op1->ts;
3974 break;
3975 }
3976
3977 sprintf (msg, _("Operand of unary numeric operator %%<%s%%> at %%L is %s"),
3978 gfc_op2string (e->value.op.op), gfc_typename (e));
3979 goto bad_op;
3980
3981 case INTRINSIC_PLUS:
3982 case INTRINSIC_MINUS:
3983 case INTRINSIC_TIMES:
3984 case INTRINSIC_DIVIDE:
3985 case INTRINSIC_POWER:
3986 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
3987 {
3988 gfc_type_convert_binary (e, 1);
3989 break;
3990 }
3991
3992 if (op1->ts.type == BT_DERIVED || op2->ts.type == BT_DERIVED)
3993 sprintf (msg,
3994 _("Unexpected derived-type entities in binary intrinsic "
3995 "numeric operator %%<%s%%> at %%L"),
3996 gfc_op2string (e->value.op.op));
3997 else
3998 sprintf (msg,
3999 _("Operands of binary numeric operator %%<%s%%> at %%L are %s/%s"),
4000 gfc_op2string (e->value.op.op), gfc_typename (op1),
4001 gfc_typename (op2));
4002 goto bad_op;
4003
4004 case INTRINSIC_CONCAT:
4005 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
4006 && op1->ts.kind == op2->ts.kind)
4007 {
4008 e->ts.type = BT_CHARACTER;
4009 e->ts.kind = op1->ts.kind;
4010 break;
4011 }
4012
4013 sprintf (msg,
4014 _("Operands of string concatenation operator at %%L are %s/%s"),
4015 gfc_typename (op1), gfc_typename (op2));
4016 goto bad_op;
4017
4018 case INTRINSIC_AND:
4019 case INTRINSIC_OR:
4020 case INTRINSIC_EQV:
4021 case INTRINSIC_NEQV:
4022 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
4023 {
4024 e->ts.type = BT_LOGICAL;
4025 e->ts.kind = gfc_kind_max (op1, op2);
4026 if (op1->ts.kind < e->ts.kind)
4027 gfc_convert_type (op1, &e->ts, 2);
4028 else if (op2->ts.kind < e->ts.kind)
4029 gfc_convert_type (op2, &e->ts, 2);
4030
4031 if (flag_frontend_optimize &&
4032 (e->value.op.op == INTRINSIC_AND || e->value.op.op == INTRINSIC_OR))
4033 {
4034 /* Warn about short-circuiting
4035 with impure function as second operand. */
4036 bool op2_f = false;
4037 gfc_expr_walker (&op2, impure_function_callback, &op2_f);
4038 }
4039 break;
4040 }
4041
4042 /* Logical ops on integers become bitwise ops with -fdec. */
4043 else if (flag_dec
4044 && (op1->ts.type == BT_INTEGER || op2->ts.type == BT_INTEGER))
4045 {
4046 e->ts.type = BT_INTEGER;
4047 e->ts.kind = gfc_kind_max (op1, op2);
4048 if (op1->ts.type != e->ts.type || op1->ts.kind != e->ts.kind)
4049 gfc_convert_type (op1, &e->ts, 1);
4050 if (op2->ts.type != e->ts.type || op2->ts.kind != e->ts.kind)
4051 gfc_convert_type (op2, &e->ts, 1);
4052 e = logical_to_bitwise (e);
4053 goto simplify_op;
4054 }
4055
4056 sprintf (msg, _("Operands of logical operator %%<%s%%> at %%L are %s/%s"),
4057 gfc_op2string (e->value.op.op), gfc_typename (op1),
4058 gfc_typename (op2));
4059
4060 goto bad_op;
4061
4062 case INTRINSIC_NOT:
4063 /* Logical ops on integers become bitwise ops with -fdec. */
4064 if (flag_dec && op1->ts.type == BT_INTEGER)
4065 {
4066 e->ts.type = BT_INTEGER;
4067 e->ts.kind = op1->ts.kind;
4068 e = logical_to_bitwise (e);
4069 goto simplify_op;
4070 }
4071
4072 if (op1->ts.type == BT_LOGICAL)
4073 {
4074 e->ts.type = BT_LOGICAL;
4075 e->ts.kind = op1->ts.kind;
4076 break;
4077 }
4078
4079 sprintf (msg, _("Operand of .not. operator at %%L is %s"),
4080 gfc_typename (op1));
4081 goto bad_op;
4082
4083 case INTRINSIC_GT:
4084 case INTRINSIC_GT_OS:
4085 case INTRINSIC_GE:
4086 case INTRINSIC_GE_OS:
4087 case INTRINSIC_LT:
4088 case INTRINSIC_LT_OS:
4089 case INTRINSIC_LE:
4090 case INTRINSIC_LE_OS:
4091 if (op1->ts.type == BT_COMPLEX || op2->ts.type == BT_COMPLEX)
4092 {
4093 strcpy (msg, _("COMPLEX quantities cannot be compared at %L"));
4094 goto bad_op;
4095 }
4096
4097 /* Fall through. */
4098
4099 case INTRINSIC_EQ:
4100 case INTRINSIC_EQ_OS:
4101 case INTRINSIC_NE:
4102 case INTRINSIC_NE_OS:
4103 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
4104 && op1->ts.kind == op2->ts.kind)
4105 {
4106 e->ts.type = BT_LOGICAL;
4107 e->ts.kind = gfc_default_logical_kind;
4108 break;
4109 }
4110
4111 /* If op1 is BOZ, then op2 is not!. Try to convert to type of op2. */
4112 if (op1->ts.type == BT_BOZ)
4113 {
4114 if (gfc_invalid_boz ("BOZ literal constant near %L cannot appear as "
4115 "an operand of a relational operator",
4116 &op1->where))
4117 return false;
4118
4119 if (op2->ts.type == BT_INTEGER && !gfc_boz2int (op1, op2->ts.kind))
4120 return false;
4121
4122 if (op2->ts.type == BT_REAL && !gfc_boz2real (op1, op2->ts.kind))
4123 return false;
4124 }
4125
4126 /* If op2 is BOZ, then op1 is not!. Try to convert to type of op2. */
4127 if (op2->ts.type == BT_BOZ)
4128 {
4129 if (gfc_invalid_boz ("BOZ literal constant near %L cannot appear as "
4130 "an operand of a relational operator",
4131 &op2->where))
4132 return false;
4133
4134 if (op1->ts.type == BT_INTEGER && !gfc_boz2int (op2, op1->ts.kind))
4135 return false;
4136
4137 if (op1->ts.type == BT_REAL && !gfc_boz2real (op2, op1->ts.kind))
4138 return false;
4139 }
4140
4141 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
4142 {
4143 gfc_type_convert_binary (e, 1);
4144
4145 e->ts.type = BT_LOGICAL;
4146 e->ts.kind = gfc_default_logical_kind;
4147
4148 if (warn_compare_reals)
4149 {
4150 gfc_intrinsic_op op = e->value.op.op;
4151
4152 /* Type conversion has made sure that the types of op1 and op2
4153 agree, so it is only necessary to check the first one. */
4154 if ((op1->ts.type == BT_REAL || op1->ts.type == BT_COMPLEX)
4155 && (op == INTRINSIC_EQ || op == INTRINSIC_EQ_OS
4156 || op == INTRINSIC_NE || op == INTRINSIC_NE_OS))
4157 {
4158 const char *msg;
4159
4160 if (op == INTRINSIC_EQ || op == INTRINSIC_EQ_OS)
4161 msg = "Equality comparison for %s at %L";
4162 else
4163 msg = "Inequality comparison for %s at %L";
4164
4165 gfc_warning (OPT_Wcompare_reals, msg,
4166 gfc_typename (op1), &op1->where);
4167 }
4168 }
4169
4170 break;
4171 }
4172
4173 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
4174 sprintf (msg,
4175 _("Logicals at %%L must be compared with %s instead of %s"),
4176 (e->value.op.op == INTRINSIC_EQ
4177 || e->value.op.op == INTRINSIC_EQ_OS)
4178 ? ".eqv." : ".neqv.", gfc_op2string (e->value.op.op));
4179 else
4180 sprintf (msg,
4181 _("Operands of comparison operator %%<%s%%> at %%L are %s/%s"),
4182 gfc_op2string (e->value.op.op), gfc_typename (op1),
4183 gfc_typename (op2));
4184
4185 goto bad_op;
4186
4187 case INTRINSIC_USER:
4188 if (e->value.op.uop->op == NULL)
4189 {
4190 const char *name = e->value.op.uop->name;
4191 const char *guessed;
4192 guessed = lookup_uop_fuzzy (name, e->value.op.uop->ns->uop_root);
4193 if (guessed)
4194 sprintf (msg, _("Unknown operator %%<%s%%> at %%L; did you mean '%s'?"),
4195 name, guessed);
4196 else
4197 sprintf (msg, _("Unknown operator %%<%s%%> at %%L"), name);
4198 }
4199 else if (op2 == NULL)
4200 sprintf (msg, _("Operand of user operator %%<%s%%> at %%L is %s"),
4201 e->value.op.uop->name, gfc_typename (op1));
4202 else
4203 {
4204 sprintf (msg, _("Operands of user operator %%<%s%%> at %%L are %s/%s"),
4205 e->value.op.uop->name, gfc_typename (op1),
4206 gfc_typename (op2));
4207 e->value.op.uop->op->sym->attr.referenced = 1;
4208 }
4209
4210 goto bad_op;
4211
4212 case INTRINSIC_PARENTHESES:
4213 e->ts = op1->ts;
4214 if (e->ts.type == BT_CHARACTER)
4215 e->ts.u.cl = op1->ts.u.cl;
4216 break;
4217
4218 default:
4219 gfc_internal_error ("resolve_operator(): Bad intrinsic");
4220 }
4221
4222 /* Deal with arrayness of an operand through an operator. */
4223
4224 switch (e->value.op.op)
4225 {
4226 case INTRINSIC_PLUS:
4227 case INTRINSIC_MINUS:
4228 case INTRINSIC_TIMES:
4229 case INTRINSIC_DIVIDE:
4230 case INTRINSIC_POWER:
4231 case INTRINSIC_CONCAT:
4232 case INTRINSIC_AND:
4233 case INTRINSIC_OR:
4234 case INTRINSIC_EQV:
4235 case INTRINSIC_NEQV:
4236 case INTRINSIC_EQ:
4237 case INTRINSIC_EQ_OS:
4238 case INTRINSIC_NE:
4239 case INTRINSIC_NE_OS:
4240 case INTRINSIC_GT:
4241 case INTRINSIC_GT_OS:
4242 case INTRINSIC_GE:
4243 case INTRINSIC_GE_OS:
4244 case INTRINSIC_LT:
4245 case INTRINSIC_LT_OS:
4246 case INTRINSIC_LE:
4247 case INTRINSIC_LE_OS:
4248
4249 if (op1->rank == 0 && op2->rank == 0)
4250 e->rank = 0;
4251
4252 if (op1->rank == 0 && op2->rank != 0)
4253 {
4254 e->rank = op2->rank;
4255
4256 if (e->shape == NULL)
4257 e->shape = gfc_copy_shape (op2->shape, op2->rank);
4258 }
4259
4260 if (op1->rank != 0 && op2->rank == 0)
4261 {
4262 e->rank = op1->rank;
4263
4264 if (e->shape == NULL)
4265 e->shape = gfc_copy_shape (op1->shape, op1->rank);
4266 }
4267
4268 if (op1->rank != 0 && op2->rank != 0)
4269 {
4270 if (op1->rank == op2->rank)
4271 {
4272 e->rank = op1->rank;
4273 if (e->shape == NULL)
4274 {
4275 t = compare_shapes (op1, op2);
4276 if (!t)
4277 e->shape = NULL;
4278 else
4279 e->shape = gfc_copy_shape (op1->shape, op1->rank);
4280 }
4281 }
4282 else
4283 {
4284 /* Allow higher level expressions to work. */
4285 e->rank = 0;
4286
4287 /* Try user-defined operators, and otherwise throw an error. */
4288 dual_locus_error = true;
4289 sprintf (msg,
4290 _("Inconsistent ranks for operator at %%L and %%L"));
4291 goto bad_op;
4292 }
4293 }
4294
4295 break;
4296
4297 case INTRINSIC_PARENTHESES:
4298 case INTRINSIC_NOT:
4299 case INTRINSIC_UPLUS:
4300 case INTRINSIC_UMINUS:
4301 /* Simply copy arrayness attribute */
4302 e->rank = op1->rank;
4303
4304 if (e->shape == NULL)
4305 e->shape = gfc_copy_shape (op1->shape, op1->rank);
4306
4307 break;
4308
4309 default:
4310 break;
4311 }
4312
4313 simplify_op:
4314
4315 /* Attempt to simplify the expression. */
4316 if (t)
4317 {
4318 t = gfc_simplify_expr (e, 0);
4319 /* Some calls do not succeed in simplification and return false
4320 even though there is no error; e.g. variable references to
4321 PARAMETER arrays. */
4322 if (!gfc_is_constant_expr (e))
4323 t = true;
4324 }
4325 return t;
4326
4327 bad_op:
4328
4329 {
4330 match m = gfc_extend_expr (e);
4331 if (m == MATCH_YES)
4332 return true;
4333 if (m == MATCH_ERROR)
4334 return false;
4335 }
4336
4337 if (dual_locus_error)
4338 gfc_error (msg, &op1->where, &op2->where);
4339 else
4340 gfc_error (msg, &e->where);
4341
4342 return false;
4343 }
4344
4345
4346 /************** Array resolution subroutines **************/
4347
4348 enum compare_result
4349 { CMP_LT, CMP_EQ, CMP_GT, CMP_UNKNOWN };
4350
4351 /* Compare two integer expressions. */
4352
4353 static compare_result
4354 compare_bound (gfc_expr *a, gfc_expr *b)
4355 {
4356 int i;
4357
4358 if (a == NULL || a->expr_type != EXPR_CONSTANT
4359 || b == NULL || b->expr_type != EXPR_CONSTANT)
4360 return CMP_UNKNOWN;
4361
4362 /* If either of the types isn't INTEGER, we must have
4363 raised an error earlier. */
4364
4365 if (a->ts.type != BT_INTEGER || b->ts.type != BT_INTEGER)
4366 return CMP_UNKNOWN;
4367
4368 i = mpz_cmp (a->value.integer, b->value.integer);
4369
4370 if (i < 0)
4371 return CMP_LT;
4372 if (i > 0)
4373 return CMP_GT;
4374 return CMP_EQ;
4375 }
4376
4377
4378 /* Compare an integer expression with an integer. */
4379
4380 static compare_result
4381 compare_bound_int (gfc_expr *a, int b)
4382 {
4383 int i;
4384
4385 if (a == NULL || a->expr_type != EXPR_CONSTANT)
4386 return CMP_UNKNOWN;
4387
4388 if (a->ts.type != BT_INTEGER)
4389 gfc_internal_error ("compare_bound_int(): Bad expression");
4390
4391 i = mpz_cmp_si (a->value.integer, b);
4392
4393 if (i < 0)
4394 return CMP_LT;
4395 if (i > 0)
4396 return CMP_GT;
4397 return CMP_EQ;
4398 }
4399
4400
4401 /* Compare an integer expression with a mpz_t. */
4402
4403 static compare_result
4404 compare_bound_mpz_t (gfc_expr *a, mpz_t b)
4405 {
4406 int i;
4407
4408 if (a == NULL || a->expr_type != EXPR_CONSTANT)
4409 return CMP_UNKNOWN;
4410
4411 if (a->ts.type != BT_INTEGER)
4412 gfc_internal_error ("compare_bound_int(): Bad expression");
4413
4414 i = mpz_cmp (a->value.integer, b);
4415
4416 if (i < 0)
4417 return CMP_LT;
4418 if (i > 0)
4419 return CMP_GT;
4420 return CMP_EQ;
4421 }
4422
4423
4424 /* Compute the last value of a sequence given by a triplet.
4425 Return 0 if it wasn't able to compute the last value, or if the
4426 sequence if empty, and 1 otherwise. */
4427
4428 static int
4429 compute_last_value_for_triplet (gfc_expr *start, gfc_expr *end,
4430 gfc_expr *stride, mpz_t last)
4431 {
4432 mpz_t rem;
4433
4434 if (start == NULL || start->expr_type != EXPR_CONSTANT
4435 || end == NULL || end->expr_type != EXPR_CONSTANT
4436 || (stride != NULL && stride->expr_type != EXPR_CONSTANT))
4437 return 0;
4438
4439 if (start->ts.type != BT_INTEGER || end->ts.type != BT_INTEGER
4440 || (stride != NULL && stride->ts.type != BT_INTEGER))
4441 return 0;
4442
4443 if (stride == NULL || compare_bound_int (stride, 1) == CMP_EQ)
4444 {
4445 if (compare_bound (start, end) == CMP_GT)
4446 return 0;
4447 mpz_set (last, end->value.integer);
4448 return 1;
4449 }
4450
4451 if (compare_bound_int (stride, 0) == CMP_GT)
4452 {
4453 /* Stride is positive */
4454 if (mpz_cmp (start->value.integer, end->value.integer) > 0)
4455 return 0;
4456 }
4457 else
4458 {
4459 /* Stride is negative */
4460 if (mpz_cmp (start->value.integer, end->value.integer) < 0)
4461 return 0;
4462 }
4463
4464 mpz_init (rem);
4465 mpz_sub (rem, end->value.integer, start->value.integer);
4466 mpz_tdiv_r (rem, rem, stride->value.integer);
4467 mpz_sub (last, end->value.integer, rem);
4468 mpz_clear (rem);
4469
4470 return 1;
4471 }
4472
4473
4474 /* Compare a single dimension of an array reference to the array
4475 specification. */
4476
4477 static bool
4478 check_dimension (int i, gfc_array_ref *ar, gfc_array_spec *as)
4479 {
4480 mpz_t last_value;
4481
4482 if (ar->dimen_type[i] == DIMEN_STAR)
4483 {
4484 gcc_assert (ar->stride[i] == NULL);
4485 /* This implies [*] as [*:] and [*:3] are not possible. */
4486 if (ar->start[i] == NULL)
4487 {
4488 gcc_assert (ar->end[i] == NULL);
4489 return true;
4490 }
4491 }
4492
4493 /* Given start, end and stride values, calculate the minimum and
4494 maximum referenced indexes. */
4495
4496 switch (ar->dimen_type[i])
4497 {
4498 case DIMEN_VECTOR:
4499 case DIMEN_THIS_IMAGE:
4500 break;
4501
4502 case DIMEN_STAR:
4503 case DIMEN_ELEMENT:
4504 if (compare_bound (ar->start[i], as->lower[i]) == CMP_LT)
4505 {
4506 if (i < as->rank)
4507 gfc_warning (0, "Array reference at %L is out of bounds "
4508 "(%ld < %ld) in dimension %d", &ar->c_where[i],
4509 mpz_get_si (ar->start[i]->value.integer),
4510 mpz_get_si (as->lower[i]->value.integer), i+1);
4511 else
4512 gfc_warning (0, "Array reference at %L is out of bounds "
4513 "(%ld < %ld) in codimension %d", &ar->c_where[i],
4514 mpz_get_si (ar->start[i]->value.integer),
4515 mpz_get_si (as->lower[i]->value.integer),
4516 i + 1 - as->rank);
4517 return true;
4518 }
4519 if (compare_bound (ar->start[i], as->upper[i]) == CMP_GT)
4520 {
4521 if (i < as->rank)
4522 gfc_warning (0, "Array reference at %L is out of bounds "
4523 "(%ld > %ld) in dimension %d", &ar->c_where[i],
4524 mpz_get_si (ar->start[i]->value.integer),
4525 mpz_get_si (as->upper[i]->value.integer), i+1);
4526 else
4527 gfc_warning (0, "Array reference at %L is out of bounds "
4528 "(%ld > %ld) in codimension %d", &ar->c_where[i],
4529 mpz_get_si (ar->start[i]->value.integer),
4530 mpz_get_si (as->upper[i]->value.integer),
4531 i + 1 - as->rank);
4532 return true;
4533 }
4534
4535 break;
4536
4537 case DIMEN_RANGE:
4538 {
4539 #define AR_START (ar->start[i] ? ar->start[i] : as->lower[i])
4540 #define AR_END (ar->end[i] ? ar->end[i] : as->upper[i])
4541
4542 compare_result comp_start_end = compare_bound (AR_START, AR_END);
4543
4544 /* Check for zero stride, which is not allowed. */
4545 if (compare_bound_int (ar->stride[i], 0) == CMP_EQ)
4546 {
4547 gfc_error ("Illegal stride of zero at %L", &ar->c_where[i]);
4548 return false;
4549 }
4550
4551 /* if start == len || (stride > 0 && start < len)
4552 || (stride < 0 && start > len),
4553 then the array section contains at least one element. In this
4554 case, there is an out-of-bounds access if
4555 (start < lower || start > upper). */
4556 if (compare_bound (AR_START, AR_END) == CMP_EQ
4557 || ((compare_bound_int (ar->stride[i], 0) == CMP_GT
4558 || ar->stride[i] == NULL) && comp_start_end == CMP_LT)
4559 || (compare_bound_int (ar->stride[i], 0) == CMP_LT
4560 && comp_start_end == CMP_GT))
4561 {
4562 if (compare_bound (AR_START, as->lower[i]) == CMP_LT)
4563 {
4564 gfc_warning (0, "Lower array reference at %L is out of bounds "
4565 "(%ld < %ld) in dimension %d", &ar->c_where[i],
4566 mpz_get_si (AR_START->value.integer),
4567 mpz_get_si (as->lower[i]->value.integer), i+1);
4568 return true;
4569 }
4570 if (compare_bound (AR_START, as->upper[i]) == CMP_GT)
4571 {
4572 gfc_warning (0, "Lower array reference at %L is out of bounds "
4573 "(%ld > %ld) in dimension %d", &ar->c_where[i],
4574 mpz_get_si (AR_START->value.integer),
4575 mpz_get_si (as->upper[i]->value.integer), i+1);
4576 return true;
4577 }
4578 }
4579
4580 /* If we can compute the highest index of the array section,
4581 then it also has to be between lower and upper. */
4582 mpz_init (last_value);
4583 if (compute_last_value_for_triplet (AR_START, AR_END, ar->stride[i],
4584 last_value))
4585 {
4586 if (compare_bound_mpz_t (as->lower[i], last_value) == CMP_GT)
4587 {
4588 gfc_warning (0, "Upper array reference at %L is out of bounds "
4589 "(%ld < %ld) in dimension %d", &ar->c_where[i],
4590 mpz_get_si (last_value),
4591 mpz_get_si (as->lower[i]->value.integer), i+1);
4592 mpz_clear (last_value);
4593 return true;
4594 }
4595 if (compare_bound_mpz_t (as->upper[i], last_value) == CMP_LT)
4596 {
4597 gfc_warning (0, "Upper array reference at %L is out of bounds "
4598 "(%ld > %ld) in dimension %d", &ar->c_where[i],
4599 mpz_get_si (last_value),
4600 mpz_get_si (as->upper[i]->value.integer), i+1);
4601 mpz_clear (last_value);
4602 return true;
4603 }
4604 }
4605 mpz_clear (last_value);
4606
4607 #undef AR_START
4608 #undef AR_END
4609 }
4610 break;
4611
4612 default:
4613 gfc_internal_error ("check_dimension(): Bad array reference");
4614 }
4615
4616 return true;
4617 }
4618
4619
4620 /* Compare an array reference with an array specification. */
4621
4622 static bool
4623 compare_spec_to_ref (gfc_array_ref *ar)
4624 {
4625 gfc_array_spec *as;
4626 int i;
4627
4628 as = ar->as;
4629 i = as->rank - 1;
4630 /* TODO: Full array sections are only allowed as actual parameters. */
4631 if (as->type == AS_ASSUMED_SIZE
4632 && (/*ar->type == AR_FULL
4633 ||*/ (ar->type == AR_SECTION
4634 && ar->dimen_type[i] == DIMEN_RANGE && ar->end[i] == NULL)))
4635 {
4636 gfc_error ("Rightmost upper bound of assumed size array section "
4637 "not specified at %L", &ar->where);
4638 return false;
4639 }
4640
4641 if (ar->type == AR_FULL)
4642 return true;
4643
4644 if (as->rank != ar->dimen)
4645 {
4646 gfc_error ("Rank mismatch in array reference at %L (%d/%d)",
4647 &ar->where, ar->dimen, as->rank);
4648 return false;
4649 }
4650
4651 /* ar->codimen == 0 is a local array. */
4652 if (as->corank != ar->codimen && ar->codimen != 0)
4653 {
4654 gfc_error ("Coindex rank mismatch in array reference at %L (%d/%d)",
4655 &ar->where, ar->codimen, as->corank);
4656 return false;
4657 }
4658
4659 for (i = 0; i < as->rank; i++)
4660 if (!check_dimension (i, ar, as))
4661 return false;
4662
4663 /* Local access has no coarray spec. */
4664 if (ar->codimen != 0)
4665 for (i = as->rank; i < as->rank + as->corank; i++)
4666 {
4667 if (ar->dimen_type[i] != DIMEN_ELEMENT && !ar->in_allocate
4668 && ar->dimen_type[i] != DIMEN_THIS_IMAGE)
4669 {
4670 gfc_error ("Coindex of codimension %d must be a scalar at %L",
4671 i + 1 - as->rank, &ar->where);
4672 return false;
4673 }
4674 if (!check_dimension (i, ar, as))
4675 return false;
4676 }
4677
4678 return true;
4679 }
4680
4681
4682 /* Resolve one part of an array index. */
4683
4684 static bool
4685 gfc_resolve_index_1 (gfc_expr *index, int check_scalar,
4686 int force_index_integer_kind)
4687 {
4688 gfc_typespec ts;
4689
4690 if (index == NULL)
4691 return true;
4692
4693 if (!gfc_resolve_expr (index))
4694 return false;
4695
4696 if (check_scalar && index->rank != 0)
4697 {
4698 gfc_error ("Array index at %L must be scalar", &index->where);
4699 return false;
4700 }
4701
4702 if (index->ts.type != BT_INTEGER && index->ts.type != BT_REAL)
4703 {
4704 gfc_error ("Array index at %L must be of INTEGER type, found %s",
4705 &index->where, gfc_basic_typename (index->ts.type));
4706 return false;
4707 }
4708
4709 if (index->ts.type == BT_REAL)
4710 if (!gfc_notify_std (GFC_STD_LEGACY, "REAL array index at %L",
4711 &index->where))
4712 return false;
4713
4714 if ((index->ts.kind != gfc_index_integer_kind
4715 && force_index_integer_kind)
4716 || index->ts.type != BT_INTEGER)
4717 {
4718 gfc_clear_ts (&ts);
4719 ts.type = BT_INTEGER;
4720 ts.kind = gfc_index_integer_kind;
4721
4722 gfc_convert_type_warn (index, &ts, 2, 0);
4723 }
4724
4725 return true;
4726 }
4727
4728 /* Resolve one part of an array index. */
4729
4730 bool
4731 gfc_resolve_index (gfc_expr *index, int check_scalar)
4732 {
4733 return gfc_resolve_index_1 (index, check_scalar, 1);
4734 }
4735
4736 /* Resolve a dim argument to an intrinsic function. */
4737
4738 bool
4739 gfc_resolve_dim_arg (gfc_expr *dim)
4740 {
4741 if (dim == NULL)
4742 return true;
4743
4744 if (!gfc_resolve_expr (dim))
4745 return false;
4746
4747 if (dim->rank != 0)
4748 {
4749 gfc_error ("Argument dim at %L must be scalar", &dim->where);
4750 return false;
4751
4752 }
4753
4754 if (dim->ts.type != BT_INTEGER)
4755 {
4756 gfc_error ("Argument dim at %L must be of INTEGER type", &dim->where);
4757 return false;
4758 }
4759
4760 if (dim->ts.kind != gfc_index_integer_kind)
4761 {
4762 gfc_typespec ts;
4763
4764 gfc_clear_ts (&ts);
4765 ts.type = BT_INTEGER;
4766 ts.kind = gfc_index_integer_kind;
4767
4768 gfc_convert_type_warn (dim, &ts, 2, 0);
4769 }
4770
4771 return true;
4772 }
4773
4774 /* Given an expression that contains array references, update those array
4775 references to point to the right array specifications. While this is
4776 filled in during matching, this information is difficult to save and load
4777 in a module, so we take care of it here.
4778
4779 The idea here is that the original array reference comes from the
4780 base symbol. We traverse the list of reference structures, setting
4781 the stored reference to references. Component references can
4782 provide an additional array specification. */
4783
4784 static void
4785 find_array_spec (gfc_expr *e)
4786 {
4787 gfc_array_spec *as;
4788 gfc_component *c;
4789 gfc_ref *ref;
4790 bool class_as = false;
4791
4792 if (e->symtree->n.sym->ts.type == BT_CLASS)
4793 {
4794 as = CLASS_DATA (e->symtree->n.sym)->as;
4795 class_as = true;
4796 }
4797 else
4798 as = e->symtree->n.sym->as;
4799
4800 for (ref = e->ref; ref; ref = ref->next)
4801 switch (ref->type)
4802 {
4803 case REF_ARRAY:
4804 if (as == NULL)
4805 gfc_internal_error ("find_array_spec(): Missing spec");
4806
4807 ref->u.ar.as = as;
4808 as = NULL;
4809 break;
4810
4811 case REF_COMPONENT:
4812 c = ref->u.c.component;
4813 if (c->attr.dimension)
4814 {
4815 if (as != NULL && !(class_as && as == c->as))
4816 gfc_internal_error ("find_array_spec(): unused as(1)");
4817 as = c->as;
4818 }
4819
4820 break;
4821
4822 case REF_SUBSTRING:
4823 case REF_INQUIRY:
4824 break;
4825 }
4826
4827 if (as != NULL)
4828 gfc_internal_error ("find_array_spec(): unused as(2)");
4829 }
4830
4831
4832 /* Resolve an array reference. */
4833
4834 static bool
4835 resolve_array_ref (gfc_array_ref *ar)
4836 {
4837 int i, check_scalar;
4838 gfc_expr *e;
4839
4840 for (i = 0; i < ar->dimen + ar->codimen; i++)
4841 {
4842 check_scalar = ar->dimen_type[i] == DIMEN_RANGE;
4843
4844 /* Do not force gfc_index_integer_kind for the start. We can
4845 do fine with any integer kind. This avoids temporary arrays
4846 created for indexing with a vector. */
4847 if (!gfc_resolve_index_1 (ar->start[i], check_scalar, 0))
4848 return false;
4849 if (!gfc_resolve_index (ar->end[i], check_scalar))
4850 return false;
4851 if (!gfc_resolve_index (ar->stride[i], check_scalar))
4852 return false;
4853
4854 e = ar->start[i];
4855
4856 if (ar->dimen_type[i] == DIMEN_UNKNOWN)
4857 switch (e->rank)
4858 {
4859 case 0:
4860 ar->dimen_type[i] = DIMEN_ELEMENT;
4861 break;
4862
4863 case 1:
4864 ar->dimen_type[i] = DIMEN_VECTOR;
4865 if (e->expr_type == EXPR_VARIABLE
4866 && e->symtree->n.sym->ts.type == BT_DERIVED)
4867 ar->start[i] = gfc_get_parentheses (e);
4868 break;
4869
4870 default:
4871 gfc_error ("Array index at %L is an array of rank %d",
4872 &ar->c_where[i], e->rank);
4873 return false;
4874 }
4875
4876 /* Fill in the upper bound, which may be lower than the
4877 specified one for something like a(2:10:5), which is
4878 identical to a(2:7:5). Only relevant for strides not equal
4879 to one. Don't try a division by zero. */
4880 if (ar->dimen_type[i] == DIMEN_RANGE
4881 && ar->stride[i] != NULL && ar->stride[i]->expr_type == EXPR_CONSTANT
4882 && mpz_cmp_si (ar->stride[i]->value.integer, 1L) != 0
4883 && mpz_cmp_si (ar->stride[i]->value.integer, 0L) != 0)
4884 {
4885 mpz_t size, end;
4886
4887 if (gfc_ref_dimen_size (ar, i, &size, &end))
4888 {
4889 if (ar->end[i] == NULL)
4890 {
4891 ar->end[i] =
4892 gfc_get_constant_expr (BT_INTEGER, gfc_index_integer_kind,
4893 &ar->where);
4894 mpz_set (ar->end[i]->value.integer, end);
4895 }
4896 else if (ar->end[i]->ts.type == BT_INTEGER
4897 && ar->end[i]->expr_type == EXPR_CONSTANT)
4898 {
4899 mpz_set (ar->end[i]->value.integer, end);
4900 }
4901 else
4902 gcc_unreachable ();
4903
4904 mpz_clear (size);
4905 mpz_clear (end);
4906 }
4907 }
4908 }
4909
4910 if (ar->type == AR_FULL)
4911 {
4912 if (ar->as->rank == 0)
4913 ar->type = AR_ELEMENT;
4914
4915 /* Make sure array is the same as array(:,:), this way
4916 we don't need to special case all the time. */
4917 ar->dimen = ar->as->rank;
4918 for (i = 0; i < ar->dimen; i++)
4919 {
4920 ar->dimen_type[i] = DIMEN_RANGE;
4921
4922 gcc_assert (ar->start[i] == NULL);
4923 gcc_assert (ar->end[i] == NULL);
4924 gcc_assert (ar->stride[i] == NULL);
4925 }
4926 }
4927
4928 /* If the reference type is unknown, figure out what kind it is. */
4929
4930 if (ar->type == AR_UNKNOWN)
4931 {
4932 ar->type = AR_ELEMENT;
4933 for (i = 0; i < ar->dimen; i++)
4934 if (ar->dimen_type[i] == DIMEN_RANGE
4935 || ar->dimen_type[i] == DIMEN_VECTOR)
4936 {
4937 ar->type = AR_SECTION;
4938 break;
4939 }
4940 }
4941
4942 if (!ar->as->cray_pointee && !compare_spec_to_ref (ar))
4943 return false;
4944
4945 if (ar->as->corank && ar->codimen == 0)
4946 {
4947 int n;
4948 ar->codimen = ar->as->corank;
4949 for (n = ar->dimen; n < ar->dimen + ar->codimen; n++)
4950 ar->dimen_type[n] = DIMEN_THIS_IMAGE;
4951 }
4952
4953 return true;
4954 }
4955
4956
4957 static bool
4958 resolve_substring (gfc_ref *ref, bool *equal_length)
4959 {
4960 int k = gfc_validate_kind (BT_INTEGER, gfc_charlen_int_kind, false);
4961
4962 if (ref->u.ss.start != NULL)
4963 {
4964 if (!gfc_resolve_expr (ref->u.ss.start))
4965 return false;
4966
4967 if (ref->u.ss.start->ts.type != BT_INTEGER)
4968 {
4969 gfc_error ("Substring start index at %L must be of type INTEGER",
4970 &ref->u.ss.start->where);
4971 return false;
4972 }
4973
4974 if (ref->u.ss.start->rank != 0)
4975 {
4976 gfc_error ("Substring start index at %L must be scalar",
4977 &ref->u.ss.start->where);
4978 return false;
4979 }
4980
4981 if (compare_bound_int (ref->u.ss.start, 1) == CMP_LT
4982 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
4983 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
4984 {
4985 gfc_error ("Substring start index at %L is less than one",
4986 &ref->u.ss.start->where);
4987 return false;
4988 }
4989 }
4990
4991 if (ref->u.ss.end != NULL)
4992 {
4993 if (!gfc_resolve_expr (ref->u.ss.end))
4994 return false;
4995
4996 if (ref->u.ss.end->ts.type != BT_INTEGER)
4997 {
4998 gfc_error ("Substring end index at %L must be of type INTEGER",
4999 &ref->u.ss.end->where);
5000 return false;
5001 }
5002
5003 if (ref->u.ss.end->rank != 0)
5004 {
5005 gfc_error ("Substring end index at %L must be scalar",
5006 &ref->u.ss.end->where);
5007 return false;
5008 }
5009
5010 if (ref->u.ss.length != NULL
5011 && compare_bound (ref->u.ss.end, ref->u.ss.length->length) == CMP_GT
5012 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
5013 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
5014 {
5015 gfc_error ("Substring end index at %L exceeds the string length",
5016 &ref->u.ss.start->where);
5017 return false;
5018 }
5019
5020 if (compare_bound_mpz_t (ref->u.ss.end,
5021 gfc_integer_kinds[k].huge) == CMP_GT
5022 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
5023 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
5024 {
5025 gfc_error ("Substring end index at %L is too large",
5026 &ref->u.ss.end->where);
5027 return false;
5028 }
5029 /* If the substring has the same length as the original
5030 variable, the reference itself can be deleted. */
5031
5032 if (ref->u.ss.length != NULL
5033 && compare_bound (ref->u.ss.end, ref->u.ss.length->length) == CMP_EQ
5034 && compare_bound_int (ref->u.ss.start, 1) == CMP_EQ)
5035 *equal_length = true;
5036 }
5037
5038 return true;
5039 }
5040
5041
5042 /* This function supplies missing substring charlens. */
5043
5044 void
5045 gfc_resolve_substring_charlen (gfc_expr *e)
5046 {
5047 gfc_ref *char_ref;
5048 gfc_expr *start, *end;
5049 gfc_typespec *ts = NULL;
5050 mpz_t diff;
5051
5052 for (char_ref = e->ref; char_ref; char_ref = char_ref->next)
5053 {
5054 if (char_ref->type == REF_SUBSTRING || char_ref->type == REF_INQUIRY)
5055 break;
5056 if (char_ref->type == REF_COMPONENT)
5057 ts = &char_ref->u.c.component->ts;
5058 }
5059
5060 if (!char_ref || char_ref->type == REF_INQUIRY)
5061 return;
5062
5063 gcc_assert (char_ref->next == NULL);
5064
5065 if (e->ts.u.cl)
5066 {
5067 if (e->ts.u.cl->length)
5068 gfc_free_expr (e->ts.u.cl->length);
5069 else if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.dummy)
5070 return;
5071 }
5072
5073 e->ts.type = BT_CHARACTER;
5074 e->ts.kind = gfc_default_character_kind;
5075
5076 if (!e->ts.u.cl)
5077 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
5078
5079 if (char_ref->u.ss.start)
5080 start = gfc_copy_expr (char_ref->u.ss.start);
5081 else
5082 start = gfc_get_int_expr (gfc_charlen_int_kind, NULL, 1);
5083
5084 if (char_ref->u.ss.end)
5085 end = gfc_copy_expr (char_ref->u.ss.end);
5086 else if (e->expr_type == EXPR_VARIABLE)
5087 {
5088 if (!ts)
5089 ts = &e->symtree->n.sym->ts;
5090 end = gfc_copy_expr (ts->u.cl->length);
5091 }
5092 else
5093 end = NULL;
5094
5095 if (!start || !end)
5096 {
5097 gfc_free_expr (start);
5098 gfc_free_expr (end);
5099 return;
5100 }
5101
5102 /* Length = (end - start + 1).
5103 Check first whether it has a constant length. */
5104 if (gfc_dep_difference (end, start, &diff))
5105 {
5106 gfc_expr *len = gfc_get_constant_expr (BT_INTEGER, gfc_charlen_int_kind,
5107 &e->where);
5108
5109 mpz_add_ui (len->value.integer, diff, 1);
5110 mpz_clear (diff);
5111 e->ts.u.cl->length = len;
5112 /* The check for length < 0 is handled below */
5113 }
5114 else
5115 {
5116 e->ts.u.cl->length = gfc_subtract (end, start);
5117 e->ts.u.cl->length = gfc_add (e->ts.u.cl->length,
5118 gfc_get_int_expr (gfc_charlen_int_kind,
5119 NULL, 1));
5120 }
5121
5122 /* F2008, 6.4.1: Both the starting point and the ending point shall
5123 be within the range 1, 2, ..., n unless the starting point exceeds
5124 the ending point, in which case the substring has length zero. */
5125
5126 if (mpz_cmp_si (e->ts.u.cl->length->value.integer, 0) < 0)
5127 mpz_set_si (e->ts.u.cl->length->value.integer, 0);
5128
5129 e->ts.u.cl->length->ts.type = BT_INTEGER;
5130 e->ts.u.cl->length->ts.kind = gfc_charlen_int_kind;
5131
5132 /* Make sure that the length is simplified. */
5133 gfc_simplify_expr (e->ts.u.cl->length, 1);
5134 gfc_resolve_expr (e->ts.u.cl->length);
5135 }
5136
5137
5138 /* Resolve subtype references. */
5139
5140 static bool
5141 resolve_ref (gfc_expr *expr)
5142 {
5143 int current_part_dimension, n_components, seen_part_dimension;
5144 gfc_ref *ref, **prev;
5145 bool equal_length;
5146
5147 for (ref = expr->ref; ref; ref = ref->next)
5148 if (ref->type == REF_ARRAY && ref->u.ar.as == NULL)
5149 {
5150 find_array_spec (expr);
5151 break;
5152 }
5153
5154 for (prev = &expr->ref; *prev != NULL;
5155 prev = *prev == NULL ? prev : &(*prev)->next)
5156 switch ((*prev)->type)
5157 {
5158 case REF_ARRAY:
5159 if (!resolve_array_ref (&(*prev)->u.ar))
5160 return false;
5161 break;
5162
5163 case REF_COMPONENT:
5164 case REF_INQUIRY:
5165 break;
5166
5167 case REF_SUBSTRING:
5168 equal_length = false;
5169 if (!resolve_substring (*prev, &equal_length))
5170 return false;
5171
5172 if (expr->expr_type != EXPR_SUBSTRING && equal_length)
5173 {
5174 /* Remove the reference and move the charlen, if any. */
5175 ref = *prev;
5176 *prev = ref->next;
5177 ref->next = NULL;
5178 expr->ts.u.cl = ref->u.ss.length;
5179 ref->u.ss.length = NULL;
5180 gfc_free_ref_list (ref);
5181 }
5182 break;
5183 }
5184
5185 /* Check constraints on part references. */
5186
5187 current_part_dimension = 0;
5188 seen_part_dimension = 0;
5189 n_components = 0;
5190
5191 for (ref = expr->ref; ref; ref = ref->next)
5192 {
5193 switch (ref->type)
5194 {
5195 case REF_ARRAY:
5196 switch (ref->u.ar.type)
5197 {
5198 case AR_FULL:
5199 /* Coarray scalar. */
5200 if (ref->u.ar.as->rank == 0)
5201 {
5202 current_part_dimension = 0;
5203 break;
5204 }
5205 /* Fall through. */
5206 case AR_SECTION:
5207 current_part_dimension = 1;
5208 break;
5209
5210 case AR_ELEMENT:
5211 current_part_dimension = 0;
5212 break;
5213
5214 case AR_UNKNOWN:
5215 gfc_internal_error ("resolve_ref(): Bad array reference");
5216 }
5217
5218 break;
5219
5220 case REF_COMPONENT:
5221 if (current_part_dimension || seen_part_dimension)
5222 {
5223 /* F03:C614. */
5224 if (ref->u.c.component->attr.pointer
5225 || ref->u.c.component->attr.proc_pointer
5226 || (ref->u.c.component->ts.type == BT_CLASS
5227 && CLASS_DATA (ref->u.c.component)->attr.pointer))
5228 {
5229 gfc_error ("Component to the right of a part reference "
5230 "with nonzero rank must not have the POINTER "
5231 "attribute at %L", &expr->where);
5232 return false;
5233 }
5234 else if (ref->u.c.component->attr.allocatable
5235 || (ref->u.c.component->ts.type == BT_CLASS
5236 && CLASS_DATA (ref->u.c.component)->attr.allocatable))
5237
5238 {
5239 gfc_error ("Component to the right of a part reference "
5240 "with nonzero rank must not have the ALLOCATABLE "
5241 "attribute at %L", &expr->where);
5242 return false;
5243 }
5244 }
5245
5246 n_components++;
5247 break;
5248
5249 case REF_SUBSTRING:
5250 case REF_INQUIRY:
5251 break;
5252 }
5253
5254 if (((ref->type == REF_COMPONENT && n_components > 1)
5255 || ref->next == NULL)
5256 && current_part_dimension
5257 && seen_part_dimension)
5258 {
5259 gfc_error ("Two or more part references with nonzero rank must "
5260 "not be specified at %L", &expr->where);
5261 return false;
5262 }
5263
5264 if (ref->type == REF_COMPONENT)
5265 {
5266 if (current_part_dimension)
5267 seen_part_dimension = 1;
5268
5269 /* reset to make sure */
5270 current_part_dimension = 0;
5271 }
5272 }
5273
5274 return true;
5275 }
5276
5277
5278 /* Given an expression, determine its shape. This is easier than it sounds.
5279 Leaves the shape array NULL if it is not possible to determine the shape. */
5280
5281 static void
5282 expression_shape (gfc_expr *e)
5283 {
5284 mpz_t array[GFC_MAX_DIMENSIONS];
5285 int i;
5286
5287 if (e->rank <= 0 || e->shape != NULL)
5288 return;
5289
5290 for (i = 0; i < e->rank; i++)
5291 if (!gfc_array_dimen_size (e, i, &array[i]))
5292 goto fail;
5293
5294 e->shape = gfc_get_shape (e->rank);
5295
5296 memcpy (e->shape, array, e->rank * sizeof (mpz_t));
5297
5298 return;
5299
5300 fail:
5301 for (i--; i >= 0; i--)
5302 mpz_clear (array[i]);
5303 }
5304
5305
5306 /* Given a variable expression node, compute the rank of the expression by
5307 examining the base symbol and any reference structures it may have. */
5308
5309 void
5310 expression_rank (gfc_expr *e)
5311 {
5312 gfc_ref *ref;
5313 int i, rank;
5314
5315 /* Just to make sure, because EXPR_COMPCALL's also have an e->ref and that
5316 could lead to serious confusion... */
5317 gcc_assert (e->expr_type != EXPR_COMPCALL);
5318
5319 if (e->ref == NULL)
5320 {
5321 if (e->expr_type == EXPR_ARRAY)
5322 goto done;
5323 /* Constructors can have a rank different from one via RESHAPE(). */
5324
5325 if (e->symtree == NULL)
5326 {
5327 e->rank = 0;
5328 goto done;
5329 }
5330
5331 e->rank = (e->symtree->n.sym->as == NULL)
5332 ? 0 : e->symtree->n.sym->as->rank;
5333 goto done;
5334 }
5335
5336 rank = 0;
5337
5338 for (ref = e->ref; ref; ref = ref->next)
5339 {
5340 if (ref->type == REF_COMPONENT && ref->u.c.component->attr.proc_pointer
5341 && ref->u.c.component->attr.function && !ref->next)
5342 rank = ref->u.c.component->as ? ref->u.c.component->as->rank : 0;
5343
5344 if (ref->type != REF_ARRAY)
5345 continue;
5346
5347 if (ref->u.ar.type == AR_FULL)
5348 {
5349 rank = ref->u.ar.as->rank;
5350 break;
5351 }
5352
5353 if (ref->u.ar.type == AR_SECTION)
5354 {
5355 /* Figure out the rank of the section. */
5356 if (rank != 0)
5357 gfc_internal_error ("expression_rank(): Two array specs");
5358
5359 for (i = 0; i < ref->u.ar.dimen; i++)
5360 if (ref->u.ar.dimen_type[i] == DIMEN_RANGE
5361 || ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
5362 rank++;
5363
5364 break;
5365 }
5366 }
5367
5368 e->rank = rank;
5369
5370 done:
5371 expression_shape (e);
5372 }
5373
5374
5375 static void
5376 add_caf_get_intrinsic (gfc_expr *e)
5377 {
5378 gfc_expr *wrapper, *tmp_expr;
5379 gfc_ref *ref;
5380 int n;
5381
5382 for (ref = e->ref; ref; ref = ref->next)
5383 if (ref->type == REF_ARRAY && ref->u.ar.codimen > 0)
5384 break;
5385 if (ref == NULL)
5386 return;
5387
5388 for (n = ref->u.ar.dimen; n < ref->u.ar.dimen + ref->u.ar.codimen; n++)
5389 if (ref->u.ar.dimen_type[n] != DIMEN_ELEMENT)
5390 return;
5391
5392 tmp_expr = XCNEW (gfc_expr);
5393 *tmp_expr = *e;
5394 wrapper = gfc_build_intrinsic_call (gfc_current_ns, GFC_ISYM_CAF_GET,
5395 "caf_get", tmp_expr->where, 1, tmp_expr);
5396 wrapper->ts = e->ts;
5397 wrapper->rank = e->rank;
5398 if (e->rank)
5399 wrapper->shape = gfc_copy_shape (e->shape, e->rank);
5400 *e = *wrapper;
5401 free (wrapper);
5402 }
5403
5404
5405 static void
5406 remove_caf_get_intrinsic (gfc_expr *e)
5407 {
5408 gcc_assert (e->expr_type == EXPR_FUNCTION && e->value.function.isym
5409 && e->value.function.isym->id == GFC_ISYM_CAF_GET);
5410 gfc_expr *e2 = e->value.function.actual->expr;
5411 e->value.function.actual->expr = NULL;
5412 gfc_free_actual_arglist (e->value.function.actual);
5413 gfc_free_shape (&e->shape, e->rank);
5414 *e = *e2;
5415 free (e2);
5416 }
5417
5418
5419 /* Resolve a variable expression. */
5420
5421 static bool
5422 resolve_variable (gfc_expr *e)
5423 {
5424 gfc_symbol *sym;
5425 bool t;
5426
5427 t = true;
5428
5429 if (e->symtree == NULL)
5430 return false;
5431 sym = e->symtree->n.sym;
5432
5433 /* Use same check as for TYPE(*) below; this check has to be before TYPE(*)
5434 as ts.type is set to BT_ASSUMED in resolve_symbol. */
5435 if (sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
5436 {
5437 if (!actual_arg || inquiry_argument)
5438 {
5439 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may only "
5440 "be used as actual argument", sym->name, &e->where);
5441 return false;
5442 }
5443 }
5444 /* TS 29113, 407b. */
5445 else if (e->ts.type == BT_ASSUMED)
5446 {
5447 if (!actual_arg)
5448 {
5449 gfc_error ("Assumed-type variable %s at %L may only be used "
5450 "as actual argument", sym->name, &e->where);
5451 return false;
5452 }
5453 else if (inquiry_argument && !first_actual_arg)
5454 {
5455 /* FIXME: It doesn't work reliably as inquiry_argument is not set
5456 for all inquiry functions in resolve_function; the reason is
5457 that the function-name resolution happens too late in that
5458 function. */
5459 gfc_error ("Assumed-type variable %s at %L as actual argument to "
5460 "an inquiry function shall be the first argument",
5461 sym->name, &e->where);
5462 return false;
5463 }
5464 }
5465 /* TS 29113, C535b. */
5466 else if (((sym->ts.type == BT_CLASS && sym->attr.class_ok
5467 && CLASS_DATA (sym)->as
5468 && CLASS_DATA (sym)->as->type == AS_ASSUMED_RANK)
5469 || (sym->ts.type != BT_CLASS && sym->as
5470 && sym->as->type == AS_ASSUMED_RANK))
5471 && !sym->attr.select_rank_temporary)
5472 {
5473 if (!actual_arg
5474 && !(cs_base && cs_base->current
5475 && cs_base->current->op == EXEC_SELECT_RANK))
5476 {
5477 gfc_error ("Assumed-rank variable %s at %L may only be used as "
5478 "actual argument", sym->name, &e->where);
5479 return false;
5480 }
5481 else if (inquiry_argument && !first_actual_arg)
5482 {
5483 /* FIXME: It doesn't work reliably as inquiry_argument is not set
5484 for all inquiry functions in resolve_function; the reason is
5485 that the function-name resolution happens too late in that
5486 function. */
5487 gfc_error ("Assumed-rank variable %s at %L as actual argument "
5488 "to an inquiry function shall be the first argument",
5489 sym->name, &e->where);
5490 return false;
5491 }
5492 }
5493
5494 if ((sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK)) && e->ref
5495 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
5496 && e->ref->next == NULL))
5497 {
5498 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall not have "
5499 "a subobject reference", sym->name, &e->ref->u.ar.where);
5500 return false;
5501 }
5502 /* TS 29113, 407b. */
5503 else if (e->ts.type == BT_ASSUMED && e->ref
5504 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
5505 && e->ref->next == NULL))
5506 {
5507 gfc_error ("Assumed-type variable %s at %L shall not have a subobject "
5508 "reference", sym->name, &e->ref->u.ar.where);
5509 return false;
5510 }
5511
5512 /* TS 29113, C535b. */
5513 if (((sym->ts.type == BT_CLASS && sym->attr.class_ok
5514 && CLASS_DATA (sym)->as
5515 && CLASS_DATA (sym)->as->type == AS_ASSUMED_RANK)
5516 || (sym->ts.type != BT_CLASS && sym->as
5517 && sym->as->type == AS_ASSUMED_RANK))
5518 && e->ref
5519 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
5520 && e->ref->next == NULL))
5521 {
5522 gfc_error ("Assumed-rank variable %s at %L shall not have a subobject "
5523 "reference", sym->name, &e->ref->u.ar.where);
5524 return false;
5525 }
5526
5527 /* For variables that are used in an associate (target => object) where
5528 the object's basetype is array valued while the target is scalar,
5529 the ts' type of the component refs is still array valued, which
5530 can't be translated that way. */
5531 if (sym->assoc && e->rank == 0 && e->ref && sym->ts.type == BT_CLASS
5532 && sym->assoc->target && sym->assoc->target->ts.type == BT_CLASS
5533 && CLASS_DATA (sym->assoc->target)->as)
5534 {
5535 gfc_ref *ref = e->ref;
5536 while (ref)
5537 {
5538 switch (ref->type)
5539 {
5540 case REF_COMPONENT:
5541 ref->u.c.sym = sym->ts.u.derived;
5542 /* Stop the loop. */
5543 ref = NULL;
5544 break;
5545 default:
5546 ref = ref->next;
5547 break;
5548 }
5549 }
5550 }
5551
5552 /* If this is an associate-name, it may be parsed with an array reference
5553 in error even though the target is scalar. Fail directly in this case.
5554 TODO Understand why class scalar expressions must be excluded. */
5555 if (sym->assoc && !(sym->ts.type == BT_CLASS && e->rank == 0))
5556 {
5557 if (sym->ts.type == BT_CLASS)
5558 gfc_fix_class_refs (e);
5559 if (!sym->attr.dimension && e->ref && e->ref->type == REF_ARRAY)
5560 return false;
5561 else if (sym->attr.dimension && (!e->ref || e->ref->type != REF_ARRAY))
5562 {
5563 /* This can happen because the parser did not detect that the
5564 associate name is an array and the expression had no array
5565 part_ref. */
5566 gfc_ref *ref = gfc_get_ref ();
5567 ref->type = REF_ARRAY;
5568 ref->u.ar = *gfc_get_array_ref();
5569 ref->u.ar.type = AR_FULL;
5570 if (sym->as)
5571 {
5572 ref->u.ar.as = sym->as;
5573 ref->u.ar.dimen = sym->as->rank;
5574 }
5575 ref->next = e->ref;
5576 e->ref = ref;
5577
5578 }
5579 }
5580
5581 if (sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.generic)
5582 sym->ts.u.derived = gfc_find_dt_in_generic (sym->ts.u.derived);
5583
5584 /* On the other hand, the parser may not have known this is an array;
5585 in this case, we have to add a FULL reference. */
5586 if (sym->assoc && sym->attr.dimension && !e->ref)
5587 {
5588 e->ref = gfc_get_ref ();
5589 e->ref->type = REF_ARRAY;
5590 e->ref->u.ar.type = AR_FULL;
5591 e->ref->u.ar.dimen = 0;
5592 }
5593
5594 /* Like above, but for class types, where the checking whether an array
5595 ref is present is more complicated. Furthermore make sure not to add
5596 the full array ref to _vptr or _len refs. */
5597 if (sym->assoc && sym->ts.type == BT_CLASS
5598 && CLASS_DATA (sym)->attr.dimension
5599 && (e->ts.type != BT_DERIVED || !e->ts.u.derived->attr.vtype))
5600 {
5601 gfc_ref *ref, *newref;
5602
5603 newref = gfc_get_ref ();
5604 newref->type = REF_ARRAY;
5605 newref->u.ar.type = AR_FULL;
5606 newref->u.ar.dimen = 0;
5607 /* Because this is an associate var and the first ref either is a ref to
5608 the _data component or not, no traversal of the ref chain is
5609 needed. The array ref needs to be inserted after the _data ref,
5610 or when that is not present, which may happend for polymorphic
5611 types, then at the first position. */
5612 ref = e->ref;
5613 if (!ref)
5614 e->ref = newref;
5615 else if (ref->type == REF_COMPONENT
5616 && strcmp ("_data", ref->u.c.component->name) == 0)
5617 {
5618 if (!ref->next || ref->next->type != REF_ARRAY)
5619 {
5620 newref->next = ref->next;
5621 ref->next = newref;
5622 }
5623 else
5624 /* Array ref present already. */
5625 gfc_free_ref_list (newref);
5626 }
5627 else if (ref->type == REF_ARRAY)
5628 /* Array ref present already. */
5629 gfc_free_ref_list (newref);
5630 else
5631 {
5632 newref->next = ref;
5633 e->ref = newref;
5634 }
5635 }
5636
5637 if (e->ref && !resolve_ref (e))
5638 return false;
5639
5640 if (sym->attr.flavor == FL_PROCEDURE
5641 && (!sym->attr.function
5642 || (sym->attr.function && sym->result
5643 && sym->result->attr.proc_pointer
5644 && !sym->result->attr.function)))
5645 {
5646 e->ts.type = BT_PROCEDURE;
5647 goto resolve_procedure;
5648 }
5649
5650 if (sym->ts.type != BT_UNKNOWN)
5651 gfc_variable_attr (e, &e->ts);
5652 else if (sym->attr.flavor == FL_PROCEDURE
5653 && sym->attr.function && sym->result
5654 && sym->result->ts.type != BT_UNKNOWN
5655 && sym->result->attr.proc_pointer)
5656 e->ts = sym->result->ts;
5657 else
5658 {
5659 /* Must be a simple variable reference. */
5660 if (!gfc_set_default_type (sym, 1, sym->ns))
5661 return false;
5662 e->ts = sym->ts;
5663 }
5664
5665 if (check_assumed_size_reference (sym, e))
5666 return false;
5667
5668 /* Deal with forward references to entries during gfc_resolve_code, to
5669 satisfy, at least partially, 12.5.2.5. */
5670 if (gfc_current_ns->entries
5671 && current_entry_id == sym->entry_id
5672 && cs_base
5673 && cs_base->current
5674 && cs_base->current->op != EXEC_ENTRY)
5675 {
5676 gfc_entry_list *entry;
5677 gfc_formal_arglist *formal;
5678 int n;
5679 bool seen, saved_specification_expr;
5680
5681 /* If the symbol is a dummy... */
5682 if (sym->attr.dummy && sym->ns == gfc_current_ns)
5683 {
5684 entry = gfc_current_ns->entries;
5685 seen = false;
5686
5687 /* ...test if the symbol is a parameter of previous entries. */
5688 for (; entry && entry->id <= current_entry_id; entry = entry->next)
5689 for (formal = entry->sym->formal; formal; formal = formal->next)
5690 {
5691 if (formal->sym && sym->name == formal->sym->name)
5692 {
5693 seen = true;
5694 break;
5695 }
5696 }
5697
5698 /* If it has not been seen as a dummy, this is an error. */
5699 if (!seen)
5700 {
5701 if (specification_expr)
5702 gfc_error ("Variable %qs, used in a specification expression"
5703 ", is referenced at %L before the ENTRY statement "
5704 "in which it is a parameter",
5705 sym->name, &cs_base->current->loc);
5706 else
5707 gfc_error ("Variable %qs is used at %L before the ENTRY "
5708 "statement in which it is a parameter",
5709 sym->name, &cs_base->current->loc);
5710 t = false;
5711 }
5712 }
5713
5714 /* Now do the same check on the specification expressions. */
5715 saved_specification_expr = specification_expr;
5716 specification_expr = true;
5717 if (sym->ts.type == BT_CHARACTER
5718 && !gfc_resolve_expr (sym->ts.u.cl->length))
5719 t = false;
5720
5721 if (sym->as)
5722 for (n = 0; n < sym->as->rank; n++)
5723 {
5724 if (!gfc_resolve_expr (sym->as->lower[n]))
5725 t = false;
5726 if (!gfc_resolve_expr (sym->as->upper[n]))
5727 t = false;
5728 }
5729 specification_expr = saved_specification_expr;
5730
5731 if (t)
5732 /* Update the symbol's entry level. */
5733 sym->entry_id = current_entry_id + 1;
5734 }
5735
5736 /* If a symbol has been host_associated mark it. This is used latter,
5737 to identify if aliasing is possible via host association. */
5738 if (sym->attr.flavor == FL_VARIABLE
5739 && gfc_current_ns->parent
5740 && (gfc_current_ns->parent == sym->ns
5741 || (gfc_current_ns->parent->parent
5742 && gfc_current_ns->parent->parent == sym->ns)))
5743 sym->attr.host_assoc = 1;
5744
5745 if (gfc_current_ns->proc_name
5746 && sym->attr.dimension
5747 && (sym->ns != gfc_current_ns
5748 || sym->attr.use_assoc
5749 || sym->attr.in_common))
5750 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
5751
5752 resolve_procedure:
5753 if (t && !resolve_procedure_expression (e))
5754 t = false;
5755
5756 /* F2008, C617 and C1229. */
5757 if (!inquiry_argument && (e->ts.type == BT_CLASS || e->ts.type == BT_DERIVED)
5758 && gfc_is_coindexed (e))
5759 {
5760 gfc_ref *ref, *ref2 = NULL;
5761
5762 for (ref = e->ref; ref; ref = ref->next)
5763 {
5764 if (ref->type == REF_COMPONENT)
5765 ref2 = ref;
5766 if (ref->type == REF_ARRAY && ref->u.ar.codimen > 0)
5767 break;
5768 }
5769
5770 for ( ; ref; ref = ref->next)
5771 if (ref->type == REF_COMPONENT)
5772 break;
5773
5774 /* Expression itself is not coindexed object. */
5775 if (ref && e->ts.type == BT_CLASS)
5776 {
5777 gfc_error ("Polymorphic subobject of coindexed object at %L",
5778 &e->where);
5779 t = false;
5780 }
5781
5782 /* Expression itself is coindexed object. */
5783 if (ref == NULL)
5784 {
5785 gfc_component *c;
5786 c = ref2 ? ref2->u.c.component : e->symtree->n.sym->components;
5787 for ( ; c; c = c->next)
5788 if (c->attr.allocatable && c->ts.type == BT_CLASS)
5789 {
5790 gfc_error ("Coindexed object with polymorphic allocatable "
5791 "subcomponent at %L", &e->where);
5792 t = false;
5793 break;
5794 }
5795 }
5796 }
5797
5798 if (t)
5799 expression_rank (e);
5800
5801 if (t && flag_coarray == GFC_FCOARRAY_LIB && gfc_is_coindexed (e))
5802 add_caf_get_intrinsic (e);
5803
5804 /* Simplify cases where access to a parameter array results in a
5805 single constant. Suppress errors since those will have been
5806 issued before, as warnings. */
5807 if (e->rank == 0 && sym->as && sym->attr.flavor == FL_PARAMETER)
5808 {
5809 gfc_push_suppress_errors ();
5810 gfc_simplify_expr (e, 1);
5811 gfc_pop_suppress_errors ();
5812 }
5813
5814 return t;
5815 }
5816
5817
5818 /* Checks to see that the correct symbol has been host associated.
5819 The only situation where this arises is that in which a twice
5820 contained function is parsed after the host association is made.
5821 Therefore, on detecting this, change the symbol in the expression
5822 and convert the array reference into an actual arglist if the old
5823 symbol is a variable. */
5824 static bool
5825 check_host_association (gfc_expr *e)
5826 {
5827 gfc_symbol *sym, *old_sym;
5828 gfc_symtree *st;
5829 int n;
5830 gfc_ref *ref;
5831 gfc_actual_arglist *arg, *tail = NULL;
5832 bool retval = e->expr_type == EXPR_FUNCTION;
5833
5834 /* If the expression is the result of substitution in
5835 interface.c(gfc_extend_expr) because there is no way in
5836 which the host association can be wrong. */
5837 if (e->symtree == NULL
5838 || e->symtree->n.sym == NULL
5839 || e->user_operator)
5840 return retval;
5841
5842 old_sym = e->symtree->n.sym;
5843
5844 if (gfc_current_ns->parent
5845 && old_sym->ns != gfc_current_ns)
5846 {
5847 /* Use the 'USE' name so that renamed module symbols are
5848 correctly handled. */
5849 gfc_find_symbol (e->symtree->name, gfc_current_ns, 1, &sym);
5850
5851 if (sym && old_sym != sym
5852 && sym->ts.type == old_sym->ts.type
5853 && sym->attr.flavor == FL_PROCEDURE
5854 && sym->attr.contained)
5855 {
5856 /* Clear the shape, since it might not be valid. */
5857 gfc_free_shape (&e->shape, e->rank);
5858
5859 /* Give the expression the right symtree! */
5860 gfc_find_sym_tree (e->symtree->name, NULL, 1, &st);
5861 gcc_assert (st != NULL);
5862
5863 if (old_sym->attr.flavor == FL_PROCEDURE
5864 || e->expr_type == EXPR_FUNCTION)
5865 {
5866 /* Original was function so point to the new symbol, since
5867 the actual argument list is already attached to the
5868 expression. */
5869 e->value.function.esym = NULL;
5870 e->symtree = st;
5871 }
5872 else
5873 {
5874 /* Original was variable so convert array references into
5875 an actual arglist. This does not need any checking now
5876 since resolve_function will take care of it. */
5877 e->value.function.actual = NULL;
5878 e->expr_type = EXPR_FUNCTION;
5879 e->symtree = st;
5880
5881 /* Ambiguity will not arise if the array reference is not
5882 the last reference. */
5883 for (ref = e->ref; ref; ref = ref->next)
5884 if (ref->type == REF_ARRAY && ref->next == NULL)
5885 break;
5886
5887 gcc_assert (ref->type == REF_ARRAY);
5888
5889 /* Grab the start expressions from the array ref and
5890 copy them into actual arguments. */
5891 for (n = 0; n < ref->u.ar.dimen; n++)
5892 {
5893 arg = gfc_get_actual_arglist ();
5894 arg->expr = gfc_copy_expr (ref->u.ar.start[n]);
5895 if (e->value.function.actual == NULL)
5896 tail = e->value.function.actual = arg;
5897 else
5898 {
5899 tail->next = arg;
5900 tail = arg;
5901 }
5902 }
5903
5904 /* Dump the reference list and set the rank. */
5905 gfc_free_ref_list (e->ref);
5906 e->ref = NULL;
5907 e->rank = sym->as ? sym->as->rank : 0;
5908 }
5909
5910 gfc_resolve_expr (e);
5911 sym->refs++;
5912 }
5913 }
5914 /* This might have changed! */
5915 return e->expr_type == EXPR_FUNCTION;
5916 }
5917
5918
5919 static void
5920 gfc_resolve_character_operator (gfc_expr *e)
5921 {
5922 gfc_expr *op1 = e->value.op.op1;
5923 gfc_expr *op2 = e->value.op.op2;
5924 gfc_expr *e1 = NULL;
5925 gfc_expr *e2 = NULL;
5926
5927 gcc_assert (e->value.op.op == INTRINSIC_CONCAT);
5928
5929 if (op1->ts.u.cl && op1->ts.u.cl->length)
5930 e1 = gfc_copy_expr (op1->ts.u.cl->length);
5931 else if (op1->expr_type == EXPR_CONSTANT)
5932 e1 = gfc_get_int_expr (gfc_charlen_int_kind, NULL,
5933 op1->value.character.length);
5934
5935 if (op2->ts.u.cl && op2->ts.u.cl->length)
5936 e2 = gfc_copy_expr (op2->ts.u.cl->length);
5937 else if (op2->expr_type == EXPR_CONSTANT)
5938 e2 = gfc_get_int_expr (gfc_charlen_int_kind, NULL,
5939 op2->value.character.length);
5940
5941 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
5942
5943 if (!e1 || !e2)
5944 {
5945 gfc_free_expr (e1);
5946 gfc_free_expr (e2);
5947
5948 return;
5949 }
5950
5951 e->ts.u.cl->length = gfc_add (e1, e2);
5952 e->ts.u.cl->length->ts.type = BT_INTEGER;
5953 e->ts.u.cl->length->ts.kind = gfc_charlen_int_kind;
5954 gfc_simplify_expr (e->ts.u.cl->length, 0);
5955 gfc_resolve_expr (e->ts.u.cl->length);
5956
5957 return;
5958 }
5959
5960
5961 /* Ensure that an character expression has a charlen and, if possible, a
5962 length expression. */
5963
5964 static void
5965 fixup_charlen (gfc_expr *e)
5966 {
5967 /* The cases fall through so that changes in expression type and the need
5968 for multiple fixes are picked up. In all circumstances, a charlen should
5969 be available for the middle end to hang a backend_decl on. */
5970 switch (e->expr_type)
5971 {
5972 case EXPR_OP:
5973 gfc_resolve_character_operator (e);
5974 /* FALLTHRU */
5975
5976 case EXPR_ARRAY:
5977 if (e->expr_type == EXPR_ARRAY)
5978 gfc_resolve_character_array_constructor (e);
5979 /* FALLTHRU */
5980
5981 case EXPR_SUBSTRING:
5982 if (!e->ts.u.cl && e->ref)
5983 gfc_resolve_substring_charlen (e);
5984 /* FALLTHRU */
5985
5986 default:
5987 if (!e->ts.u.cl)
5988 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
5989
5990 break;
5991 }
5992 }
5993
5994
5995 /* Update an actual argument to include the passed-object for type-bound
5996 procedures at the right position. */
5997
5998 static gfc_actual_arglist*
5999 update_arglist_pass (gfc_actual_arglist* lst, gfc_expr* po, unsigned argpos,
6000 const char *name)
6001 {
6002 gcc_assert (argpos > 0);
6003
6004 if (argpos == 1)
6005 {
6006 gfc_actual_arglist* result;
6007
6008 result = gfc_get_actual_arglist ();
6009 result->expr = po;
6010 result->next = lst;
6011 if (name)
6012 result->name = name;
6013
6014 return result;
6015 }
6016
6017 if (lst)
6018 lst->next = update_arglist_pass (lst->next, po, argpos - 1, name);
6019 else
6020 lst = update_arglist_pass (NULL, po, argpos - 1, name);
6021 return lst;
6022 }
6023
6024
6025 /* Extract the passed-object from an EXPR_COMPCALL (a copy of it). */
6026
6027 static gfc_expr*
6028 extract_compcall_passed_object (gfc_expr* e)
6029 {
6030 gfc_expr* po;
6031
6032 if (e->expr_type == EXPR_UNKNOWN)
6033 {
6034 gfc_error ("Error in typebound call at %L",
6035 &e->where);
6036 return NULL;
6037 }
6038
6039 gcc_assert (e->expr_type == EXPR_COMPCALL);
6040
6041 if (e->value.compcall.base_object)
6042 po = gfc_copy_expr (e->value.compcall.base_object);
6043 else
6044 {
6045 po = gfc_get_expr ();
6046 po->expr_type = EXPR_VARIABLE;
6047 po->symtree = e->symtree;
6048 po->ref = gfc_copy_ref (e->ref);
6049 po->where = e->where;
6050 }
6051
6052 if (!gfc_resolve_expr (po))
6053 return NULL;
6054
6055 return po;
6056 }
6057
6058
6059 /* Update the arglist of an EXPR_COMPCALL expression to include the
6060 passed-object. */
6061
6062 static bool
6063 update_compcall_arglist (gfc_expr* e)
6064 {
6065 gfc_expr* po;
6066 gfc_typebound_proc* tbp;
6067
6068 tbp = e->value.compcall.tbp;
6069
6070 if (tbp->error)
6071 return false;
6072
6073 po = extract_compcall_passed_object (e);
6074 if (!po)
6075 return false;
6076
6077 if (tbp->nopass || e->value.compcall.ignore_pass)
6078 {
6079 gfc_free_expr (po);
6080 return true;
6081 }
6082
6083 if (tbp->pass_arg_num <= 0)
6084 return false;
6085
6086 e->value.compcall.actual = update_arglist_pass (e->value.compcall.actual, po,
6087 tbp->pass_arg_num,
6088 tbp->pass_arg);
6089
6090 return true;
6091 }
6092
6093
6094 /* Extract the passed object from a PPC call (a copy of it). */
6095
6096 static gfc_expr*
6097 extract_ppc_passed_object (gfc_expr *e)
6098 {
6099 gfc_expr *po;
6100 gfc_ref **ref;
6101
6102 po = gfc_get_expr ();
6103 po->expr_type = EXPR_VARIABLE;
6104 po->symtree = e->symtree;
6105 po->ref = gfc_copy_ref (e->ref);
6106 po->where = e->where;
6107
6108 /* Remove PPC reference. */
6109 ref = &po->ref;
6110 while ((*ref)->next)
6111 ref = &(*ref)->next;
6112 gfc_free_ref_list (*ref);
6113 *ref = NULL;
6114
6115 if (!gfc_resolve_expr (po))
6116 return NULL;
6117
6118 return po;
6119 }
6120
6121
6122 /* Update the actual arglist of a procedure pointer component to include the
6123 passed-object. */
6124
6125 static bool
6126 update_ppc_arglist (gfc_expr* e)
6127 {
6128 gfc_expr* po;
6129 gfc_component *ppc;
6130 gfc_typebound_proc* tb;
6131
6132 ppc = gfc_get_proc_ptr_comp (e);
6133 if (!ppc)
6134 return false;
6135
6136 tb = ppc->tb;
6137
6138 if (tb->error)
6139 return false;
6140 else if (tb->nopass)
6141 return true;
6142
6143 po = extract_ppc_passed_object (e);
6144 if (!po)
6145 return false;
6146
6147 /* F08:R739. */
6148 if (po->rank != 0)
6149 {
6150 gfc_error ("Passed-object at %L must be scalar", &e->where);
6151 return false;
6152 }
6153
6154 /* F08:C611. */
6155 if (po->ts.type == BT_DERIVED && po->ts.u.derived->attr.abstract)
6156 {
6157 gfc_error ("Base object for procedure-pointer component call at %L is of"
6158 " ABSTRACT type %qs", &e->where, po->ts.u.derived->name);
6159 return false;
6160 }
6161
6162 gcc_assert (tb->pass_arg_num > 0);
6163 e->value.compcall.actual = update_arglist_pass (e->value.compcall.actual, po,
6164 tb->pass_arg_num,
6165 tb->pass_arg);
6166
6167 return true;
6168 }
6169
6170
6171 /* Check that the object a TBP is called on is valid, i.e. it must not be
6172 of ABSTRACT type (as in subobject%abstract_parent%tbp()). */
6173
6174 static bool
6175 check_typebound_baseobject (gfc_expr* e)
6176 {
6177 gfc_expr* base;
6178 bool return_value = false;
6179
6180 base = extract_compcall_passed_object (e);
6181 if (!base)
6182 return false;
6183
6184 if (base->ts.type != BT_DERIVED && base->ts.type != BT_CLASS)
6185 {
6186 gfc_error ("Error in typebound call at %L", &e->where);
6187 goto cleanup;
6188 }
6189
6190 if (base->ts.type == BT_CLASS && !gfc_expr_attr (base).class_ok)
6191 return false;
6192
6193 /* F08:C611. */
6194 if (base->ts.type == BT_DERIVED && base->ts.u.derived->attr.abstract)
6195 {
6196 gfc_error ("Base object for type-bound procedure call at %L is of"
6197 " ABSTRACT type %qs", &e->where, base->ts.u.derived->name);
6198 goto cleanup;
6199 }
6200
6201 /* F08:C1230. If the procedure called is NOPASS,
6202 the base object must be scalar. */
6203 if (e->value.compcall.tbp->nopass && base->rank != 0)
6204 {
6205 gfc_error ("Base object for NOPASS type-bound procedure call at %L must"
6206 " be scalar", &e->where);
6207 goto cleanup;
6208 }
6209
6210 return_value = true;
6211
6212 cleanup:
6213 gfc_free_expr (base);
6214 return return_value;
6215 }
6216
6217
6218 /* Resolve a call to a type-bound procedure, either function or subroutine,
6219 statically from the data in an EXPR_COMPCALL expression. The adapted
6220 arglist and the target-procedure symtree are returned. */
6221
6222 static bool
6223 resolve_typebound_static (gfc_expr* e, gfc_symtree** target,
6224 gfc_actual_arglist** actual)
6225 {
6226 gcc_assert (e->expr_type == EXPR_COMPCALL);
6227 gcc_assert (!e->value.compcall.tbp->is_generic);
6228
6229 /* Update the actual arglist for PASS. */
6230 if (!update_compcall_arglist (e))
6231 return false;
6232
6233 *actual = e->value.compcall.actual;
6234 *target = e->value.compcall.tbp->u.specific;
6235
6236 gfc_free_ref_list (e->ref);
6237 e->ref = NULL;
6238 e->value.compcall.actual = NULL;
6239
6240 /* If we find a deferred typebound procedure, check for derived types
6241 that an overriding typebound procedure has not been missed. */
6242 if (e->value.compcall.name
6243 && !e->value.compcall.tbp->non_overridable
6244 && e->value.compcall.base_object
6245 && e->value.compcall.base_object->ts.type == BT_DERIVED)
6246 {
6247 gfc_symtree *st;
6248 gfc_symbol *derived;
6249
6250 /* Use the derived type of the base_object. */
6251 derived = e->value.compcall.base_object->ts.u.derived;
6252 st = NULL;
6253
6254 /* If necessary, go through the inheritance chain. */
6255 while (!st && derived)
6256 {
6257 /* Look for the typebound procedure 'name'. */
6258 if (derived->f2k_derived && derived->f2k_derived->tb_sym_root)
6259 st = gfc_find_symtree (derived->f2k_derived->tb_sym_root,
6260 e->value.compcall.name);
6261 if (!st)
6262 derived = gfc_get_derived_super_type (derived);
6263 }
6264
6265 /* Now find the specific name in the derived type namespace. */
6266 if (st && st->n.tb && st->n.tb->u.specific)
6267 gfc_find_sym_tree (st->n.tb->u.specific->name,
6268 derived->ns, 1, &st);
6269 if (st)
6270 *target = st;
6271 }
6272 return true;
6273 }
6274
6275
6276 /* Get the ultimate declared type from an expression. In addition,
6277 return the last class/derived type reference and the copy of the
6278 reference list. If check_types is set true, derived types are
6279 identified as well as class references. */
6280 static gfc_symbol*
6281 get_declared_from_expr (gfc_ref **class_ref, gfc_ref **new_ref,
6282 gfc_expr *e, bool check_types)
6283 {
6284 gfc_symbol *declared;
6285 gfc_ref *ref;
6286
6287 declared = NULL;
6288 if (class_ref)
6289 *class_ref = NULL;
6290 if (new_ref)
6291 *new_ref = gfc_copy_ref (e->ref);
6292
6293 for (ref = e->ref; ref; ref = ref->next)
6294 {
6295 if (ref->type != REF_COMPONENT)
6296 continue;
6297
6298 if ((ref->u.c.component->ts.type == BT_CLASS
6299 || (check_types && gfc_bt_struct (ref->u.c.component->ts.type)))
6300 && ref->u.c.component->attr.flavor != FL_PROCEDURE)
6301 {
6302 declared = ref->u.c.component->ts.u.derived;
6303 if (class_ref)
6304 *class_ref = ref;
6305 }
6306 }
6307
6308 if (declared == NULL)
6309 declared = e->symtree->n.sym->ts.u.derived;
6310
6311 return declared;
6312 }
6313
6314
6315 /* Given an EXPR_COMPCALL calling a GENERIC typebound procedure, figure out
6316 which of the specific bindings (if any) matches the arglist and transform
6317 the expression into a call of that binding. */
6318
6319 static bool
6320 resolve_typebound_generic_call (gfc_expr* e, const char **name)
6321 {
6322 gfc_typebound_proc* genproc;
6323 const char* genname;
6324 gfc_symtree *st;
6325 gfc_symbol *derived;
6326
6327 gcc_assert (e->expr_type == EXPR_COMPCALL);
6328 genname = e->value.compcall.name;
6329 genproc = e->value.compcall.tbp;
6330
6331 if (!genproc->is_generic)
6332 return true;
6333
6334 /* Try the bindings on this type and in the inheritance hierarchy. */
6335 for (; genproc; genproc = genproc->overridden)
6336 {
6337 gfc_tbp_generic* g;
6338
6339 gcc_assert (genproc->is_generic);
6340 for (g = genproc->u.generic; g; g = g->next)
6341 {
6342 gfc_symbol* target;
6343 gfc_actual_arglist* args;
6344 bool matches;
6345
6346 gcc_assert (g->specific);
6347
6348 if (g->specific->error)
6349 continue;
6350
6351 target = g->specific->u.specific->n.sym;
6352
6353 /* Get the right arglist by handling PASS/NOPASS. */
6354 args = gfc_copy_actual_arglist (e->value.compcall.actual);
6355 if (!g->specific->nopass)
6356 {
6357 gfc_expr* po;
6358 po = extract_compcall_passed_object (e);
6359 if (!po)
6360 {
6361 gfc_free_actual_arglist (args);
6362 return false;
6363 }
6364
6365 gcc_assert (g->specific->pass_arg_num > 0);
6366 gcc_assert (!g->specific->error);
6367 args = update_arglist_pass (args, po, g->specific->pass_arg_num,
6368 g->specific->pass_arg);
6369 }
6370 resolve_actual_arglist (args, target->attr.proc,
6371 is_external_proc (target)
6372 && gfc_sym_get_dummy_args (target) == NULL);
6373
6374 /* Check if this arglist matches the formal. */
6375 matches = gfc_arglist_matches_symbol (&args, target);
6376
6377 /* Clean up and break out of the loop if we've found it. */
6378 gfc_free_actual_arglist (args);
6379 if (matches)
6380 {
6381 e->value.compcall.tbp = g->specific;
6382 genname = g->specific_st->name;
6383 /* Pass along the name for CLASS methods, where the vtab
6384 procedure pointer component has to be referenced. */
6385 if (name)
6386 *name = genname;
6387 goto success;
6388 }
6389 }
6390 }
6391
6392 /* Nothing matching found! */
6393 gfc_error ("Found no matching specific binding for the call to the GENERIC"
6394 " %qs at %L", genname, &e->where);
6395 return false;
6396
6397 success:
6398 /* Make sure that we have the right specific instance for the name. */
6399 derived = get_declared_from_expr (NULL, NULL, e, true);
6400
6401 st = gfc_find_typebound_proc (derived, NULL, genname, true, &e->where);
6402 if (st)
6403 e->value.compcall.tbp = st->n.tb;
6404
6405 return true;
6406 }
6407
6408
6409 /* Resolve a call to a type-bound subroutine. */
6410
6411 static bool
6412 resolve_typebound_call (gfc_code* c, const char **name, bool *overridable)
6413 {
6414 gfc_actual_arglist* newactual;
6415 gfc_symtree* target;
6416
6417 /* Check that's really a SUBROUTINE. */
6418 if (!c->expr1->value.compcall.tbp->subroutine)
6419 {
6420 if (!c->expr1->value.compcall.tbp->is_generic
6421 && c->expr1->value.compcall.tbp->u.specific
6422 && c->expr1->value.compcall.tbp->u.specific->n.sym
6423 && c->expr1->value.compcall.tbp->u.specific->n.sym->attr.subroutine)
6424 c->expr1->value.compcall.tbp->subroutine = 1;
6425 else
6426 {
6427 gfc_error ("%qs at %L should be a SUBROUTINE",
6428 c->expr1->value.compcall.name, &c->loc);
6429 return false;
6430 }
6431 }
6432
6433 if (!check_typebound_baseobject (c->expr1))
6434 return false;
6435
6436 /* Pass along the name for CLASS methods, where the vtab
6437 procedure pointer component has to be referenced. */
6438 if (name)
6439 *name = c->expr1->value.compcall.name;
6440
6441 if (!resolve_typebound_generic_call (c->expr1, name))
6442 return false;
6443
6444 /* Pass along the NON_OVERRIDABLE attribute of the specific TBP. */
6445 if (overridable)
6446 *overridable = !c->expr1->value.compcall.tbp->non_overridable;
6447
6448 /* Transform into an ordinary EXEC_CALL for now. */
6449
6450 if (!resolve_typebound_static (c->expr1, &target, &newactual))
6451 return false;
6452
6453 c->ext.actual = newactual;
6454 c->symtree = target;
6455 c->op = (c->expr1->value.compcall.assign ? EXEC_ASSIGN_CALL : EXEC_CALL);
6456
6457 gcc_assert (!c->expr1->ref && !c->expr1->value.compcall.actual);
6458
6459 gfc_free_expr (c->expr1);
6460 c->expr1 = gfc_get_expr ();
6461 c->expr1->expr_type = EXPR_FUNCTION;
6462 c->expr1->symtree = target;
6463 c->expr1->where = c->loc;
6464
6465 return resolve_call (c);
6466 }
6467
6468
6469 /* Resolve a component-call expression. */
6470 static bool
6471 resolve_compcall (gfc_expr* e, const char **name)
6472 {
6473 gfc_actual_arglist* newactual;
6474 gfc_symtree* target;
6475
6476 /* Check that's really a FUNCTION. */
6477 if (!e->value.compcall.tbp->function)
6478 {
6479 gfc_error ("%qs at %L should be a FUNCTION",
6480 e->value.compcall.name, &e->where);
6481 return false;
6482 }
6483
6484
6485 /* These must not be assign-calls! */
6486 gcc_assert (!e->value.compcall.assign);
6487
6488 if (!check_typebound_baseobject (e))
6489 return false;
6490
6491 /* Pass along the name for CLASS methods, where the vtab
6492 procedure pointer component has to be referenced. */
6493 if (name)
6494 *name = e->value.compcall.name;
6495
6496 if (!resolve_typebound_generic_call (e, name))
6497 return false;
6498 gcc_assert (!e->value.compcall.tbp->is_generic);
6499
6500 /* Take the rank from the function's symbol. */
6501 if (e->value.compcall.tbp->u.specific->n.sym->as)
6502 e->rank = e->value.compcall.tbp->u.specific->n.sym->as->rank;
6503
6504 /* For now, we simply transform it into an EXPR_FUNCTION call with the same
6505 arglist to the TBP's binding target. */
6506
6507 if (!resolve_typebound_static (e, &target, &newactual))
6508 return false;
6509
6510 e->value.function.actual = newactual;
6511 e->value.function.name = NULL;
6512 e->value.function.esym = target->n.sym;
6513 e->value.function.isym = NULL;
6514 e->symtree = target;
6515 e->ts = target->n.sym->ts;
6516 e->expr_type = EXPR_FUNCTION;
6517
6518 /* Resolution is not necessary if this is a class subroutine; this
6519 function only has to identify the specific proc. Resolution of
6520 the call will be done next in resolve_typebound_call. */
6521 return gfc_resolve_expr (e);
6522 }
6523
6524
6525 static bool resolve_fl_derived (gfc_symbol *sym);
6526
6527
6528 /* Resolve a typebound function, or 'method'. First separate all
6529 the non-CLASS references by calling resolve_compcall directly. */
6530
6531 static bool
6532 resolve_typebound_function (gfc_expr* e)
6533 {
6534 gfc_symbol *declared;
6535 gfc_component *c;
6536 gfc_ref *new_ref;
6537 gfc_ref *class_ref;
6538 gfc_symtree *st;
6539 const char *name;
6540 gfc_typespec ts;
6541 gfc_expr *expr;
6542 bool overridable;
6543
6544 st = e->symtree;
6545
6546 /* Deal with typebound operators for CLASS objects. */
6547 expr = e->value.compcall.base_object;
6548 overridable = !e->value.compcall.tbp->non_overridable;
6549 if (expr && expr->ts.type == BT_CLASS && e->value.compcall.name)
6550 {
6551 /* If the base_object is not a variable, the corresponding actual
6552 argument expression must be stored in e->base_expression so
6553 that the corresponding tree temporary can be used as the base
6554 object in gfc_conv_procedure_call. */
6555 if (expr->expr_type != EXPR_VARIABLE)
6556 {
6557 gfc_actual_arglist *args;
6558
6559 for (args= e->value.function.actual; args; args = args->next)
6560 {
6561 if (expr == args->expr)
6562 expr = args->expr;
6563 }
6564 }
6565
6566 /* Since the typebound operators are generic, we have to ensure
6567 that any delays in resolution are corrected and that the vtab
6568 is present. */
6569 ts = expr->ts;
6570 declared = ts.u.derived;
6571 c = gfc_find_component (declared, "_vptr", true, true, NULL);
6572 if (c->ts.u.derived == NULL)
6573 c->ts.u.derived = gfc_find_derived_vtab (declared);
6574
6575 if (!resolve_compcall (e, &name))
6576 return false;
6577
6578 /* Use the generic name if it is there. */
6579 name = name ? name : e->value.function.esym->name;
6580 e->symtree = expr->symtree;
6581 e->ref = gfc_copy_ref (expr->ref);
6582 get_declared_from_expr (&class_ref, NULL, e, false);
6583
6584 /* Trim away the extraneous references that emerge from nested
6585 use of interface.c (extend_expr). */
6586 if (class_ref && class_ref->next)
6587 {
6588 gfc_free_ref_list (class_ref->next);
6589 class_ref->next = NULL;
6590 }
6591 else if (e->ref && !class_ref && expr->ts.type != BT_CLASS)
6592 {
6593 gfc_free_ref_list (e->ref);
6594 e->ref = NULL;
6595 }
6596
6597 gfc_add_vptr_component (e);
6598 gfc_add_component_ref (e, name);
6599 e->value.function.esym = NULL;
6600 if (expr->expr_type != EXPR_VARIABLE)
6601 e->base_expr = expr;
6602 return true;
6603 }
6604
6605 if (st == NULL)
6606 return resolve_compcall (e, NULL);
6607
6608 if (!resolve_ref (e))
6609 return false;
6610
6611 /* Get the CLASS declared type. */
6612 declared = get_declared_from_expr (&class_ref, &new_ref, e, true);
6613
6614 if (!resolve_fl_derived (declared))
6615 return false;
6616
6617 /* Weed out cases of the ultimate component being a derived type. */
6618 if ((class_ref && gfc_bt_struct (class_ref->u.c.component->ts.type))
6619 || (!class_ref && st->n.sym->ts.type != BT_CLASS))
6620 {
6621 gfc_free_ref_list (new_ref);
6622 return resolve_compcall (e, NULL);
6623 }
6624
6625 c = gfc_find_component (declared, "_data", true, true, NULL);
6626
6627 /* Treat the call as if it is a typebound procedure, in order to roll
6628 out the correct name for the specific function. */
6629 if (!resolve_compcall (e, &name))
6630 {
6631 gfc_free_ref_list (new_ref);
6632 return false;
6633 }
6634 ts = e->ts;
6635
6636 if (overridable)
6637 {
6638 /* Convert the expression to a procedure pointer component call. */
6639 e->value.function.esym = NULL;
6640 e->symtree = st;
6641
6642 if (new_ref)
6643 e->ref = new_ref;
6644
6645 /* '_vptr' points to the vtab, which contains the procedure pointers. */
6646 gfc_add_vptr_component (e);
6647 gfc_add_component_ref (e, name);
6648
6649 /* Recover the typespec for the expression. This is really only
6650 necessary for generic procedures, where the additional call
6651 to gfc_add_component_ref seems to throw the collection of the
6652 correct typespec. */
6653 e->ts = ts;
6654 }
6655 else if (new_ref)
6656 gfc_free_ref_list (new_ref);
6657
6658 return true;
6659 }
6660
6661 /* Resolve a typebound subroutine, or 'method'. First separate all
6662 the non-CLASS references by calling resolve_typebound_call
6663 directly. */
6664
6665 static bool
6666 resolve_typebound_subroutine (gfc_code *code)
6667 {
6668 gfc_symbol *declared;
6669 gfc_component *c;
6670 gfc_ref *new_ref;
6671 gfc_ref *class_ref;
6672 gfc_symtree *st;
6673 const char *name;
6674 gfc_typespec ts;
6675 gfc_expr *expr;
6676 bool overridable;
6677
6678 st = code->expr1->symtree;
6679
6680 /* Deal with typebound operators for CLASS objects. */
6681 expr = code->expr1->value.compcall.base_object;
6682 overridable = !code->expr1->value.compcall.tbp->non_overridable;
6683 if (expr && expr->ts.type == BT_CLASS && code->expr1->value.compcall.name)
6684 {
6685 /* If the base_object is not a variable, the corresponding actual
6686 argument expression must be stored in e->base_expression so
6687 that the corresponding tree temporary can be used as the base
6688 object in gfc_conv_procedure_call. */
6689 if (expr->expr_type != EXPR_VARIABLE)
6690 {
6691 gfc_actual_arglist *args;
6692
6693 args= code->expr1->value.function.actual;
6694 for (; args; args = args->next)
6695 if (expr == args->expr)
6696 expr = args->expr;
6697 }
6698
6699 /* Since the typebound operators are generic, we have to ensure
6700 that any delays in resolution are corrected and that the vtab
6701 is present. */
6702 declared = expr->ts.u.derived;
6703 c = gfc_find_component (declared, "_vptr", true, true, NULL);
6704 if (c->ts.u.derived == NULL)
6705 c->ts.u.derived = gfc_find_derived_vtab (declared);
6706
6707 if (!resolve_typebound_call (code, &name, NULL))
6708 return false;
6709
6710 /* Use the generic name if it is there. */
6711 name = name ? name : code->expr1->value.function.esym->name;
6712 code->expr1->symtree = expr->symtree;
6713 code->expr1->ref = gfc_copy_ref (expr->ref);
6714
6715 /* Trim away the extraneous references that emerge from nested
6716 use of interface.c (extend_expr). */
6717 get_declared_from_expr (&class_ref, NULL, code->expr1, false);
6718 if (class_ref && class_ref->next)
6719 {
6720 gfc_free_ref_list (class_ref->next);
6721 class_ref->next = NULL;
6722 }
6723 else if (code->expr1->ref && !class_ref)
6724 {
6725 gfc_free_ref_list (code->expr1->ref);
6726 code->expr1->ref = NULL;
6727 }
6728
6729 /* Now use the procedure in the vtable. */
6730 gfc_add_vptr_component (code->expr1);
6731 gfc_add_component_ref (code->expr1, name);
6732 code->expr1->value.function.esym = NULL;
6733 if (expr->expr_type != EXPR_VARIABLE)
6734 code->expr1->base_expr = expr;
6735 return true;
6736 }
6737
6738 if (st == NULL)
6739 return resolve_typebound_call (code, NULL, NULL);
6740
6741 if (!resolve_ref (code->expr1))
6742 return false;
6743
6744 /* Get the CLASS declared type. */
6745 get_declared_from_expr (&class_ref, &new_ref, code->expr1, true);
6746
6747 /* Weed out cases of the ultimate component being a derived type. */
6748 if ((class_ref && gfc_bt_struct (class_ref->u.c.component->ts.type))
6749 || (!class_ref && st->n.sym->ts.type != BT_CLASS))
6750 {
6751 gfc_free_ref_list (new_ref);
6752 return resolve_typebound_call (code, NULL, NULL);
6753 }
6754
6755 if (!resolve_typebound_call (code, &name, &overridable))
6756 {
6757 gfc_free_ref_list (new_ref);
6758 return false;
6759 }
6760 ts = code->expr1->ts;
6761
6762 if (overridable)
6763 {
6764 /* Convert the expression to a procedure pointer component call. */
6765 code->expr1->value.function.esym = NULL;
6766 code->expr1->symtree = st;
6767
6768 if (new_ref)
6769 code->expr1->ref = new_ref;
6770
6771 /* '_vptr' points to the vtab, which contains the procedure pointers. */
6772 gfc_add_vptr_component (code->expr1);
6773 gfc_add_component_ref (code->expr1, name);
6774
6775 /* Recover the typespec for the expression. This is really only
6776 necessary for generic procedures, where the additional call
6777 to gfc_add_component_ref seems to throw the collection of the
6778 correct typespec. */
6779 code->expr1->ts = ts;
6780 }
6781 else if (new_ref)
6782 gfc_free_ref_list (new_ref);
6783
6784 return true;
6785 }
6786
6787
6788 /* Resolve a CALL to a Procedure Pointer Component (Subroutine). */
6789
6790 static bool
6791 resolve_ppc_call (gfc_code* c)
6792 {
6793 gfc_component *comp;
6794
6795 comp = gfc_get_proc_ptr_comp (c->expr1);
6796 gcc_assert (comp != NULL);
6797
6798 c->resolved_sym = c->expr1->symtree->n.sym;
6799 c->expr1->expr_type = EXPR_VARIABLE;
6800
6801 if (!comp->attr.subroutine)
6802 gfc_add_subroutine (&comp->attr, comp->name, &c->expr1->where);
6803
6804 if (!resolve_ref (c->expr1))
6805 return false;
6806
6807 if (!update_ppc_arglist (c->expr1))
6808 return false;
6809
6810 c->ext.actual = c->expr1->value.compcall.actual;
6811
6812 if (!resolve_actual_arglist (c->ext.actual, comp->attr.proc,
6813 !(comp->ts.interface
6814 && comp->ts.interface->formal)))
6815 return false;
6816
6817 if (!pure_subroutine (comp->ts.interface, comp->name, &c->expr1->where))
6818 return false;
6819
6820 gfc_ppc_use (comp, &c->expr1->value.compcall.actual, &c->expr1->where);
6821
6822 return true;
6823 }
6824
6825
6826 /* Resolve a Function Call to a Procedure Pointer Component (Function). */
6827
6828 static bool
6829 resolve_expr_ppc (gfc_expr* e)
6830 {
6831 gfc_component *comp;
6832
6833 comp = gfc_get_proc_ptr_comp (e);
6834 gcc_assert (comp != NULL);
6835
6836 /* Convert to EXPR_FUNCTION. */
6837 e->expr_type = EXPR_FUNCTION;
6838 e->value.function.isym = NULL;
6839 e->value.function.actual = e->value.compcall.actual;
6840 e->ts = comp->ts;
6841 if (comp->as != NULL)
6842 e->rank = comp->as->rank;
6843
6844 if (!comp->attr.function)
6845 gfc_add_function (&comp->attr, comp->name, &e->where);
6846
6847 if (!resolve_ref (e))
6848 return false;
6849
6850 if (!resolve_actual_arglist (e->value.function.actual, comp->attr.proc,
6851 !(comp->ts.interface
6852 && comp->ts.interface->formal)))
6853 return false;
6854
6855 if (!update_ppc_arglist (e))
6856 return false;
6857
6858 if (!check_pure_function(e))
6859 return false;
6860
6861 gfc_ppc_use (comp, &e->value.compcall.actual, &e->where);
6862
6863 return true;
6864 }
6865
6866
6867 static bool
6868 gfc_is_expandable_expr (gfc_expr *e)
6869 {
6870 gfc_constructor *con;
6871
6872 if (e->expr_type == EXPR_ARRAY)
6873 {
6874 /* Traverse the constructor looking for variables that are flavor
6875 parameter. Parameters must be expanded since they are fully used at
6876 compile time. */
6877 con = gfc_constructor_first (e->value.constructor);
6878 for (; con; con = gfc_constructor_next (con))
6879 {
6880 if (con->expr->expr_type == EXPR_VARIABLE
6881 && con->expr->symtree
6882 && (con->expr->symtree->n.sym->attr.flavor == FL_PARAMETER
6883 || con->expr->symtree->n.sym->attr.flavor == FL_VARIABLE))
6884 return true;
6885 if (con->expr->expr_type == EXPR_ARRAY
6886 && gfc_is_expandable_expr (con->expr))
6887 return true;
6888 }
6889 }
6890
6891 return false;
6892 }
6893
6894
6895 /* Sometimes variables in specification expressions of the result
6896 of module procedures in submodules wind up not being the 'real'
6897 dummy. Find this, if possible, in the namespace of the first
6898 formal argument. */
6899
6900 static void
6901 fixup_unique_dummy (gfc_expr *e)
6902 {
6903 gfc_symtree *st = NULL;
6904 gfc_symbol *s = NULL;
6905
6906 if (e->symtree->n.sym->ns->proc_name
6907 && e->symtree->n.sym->ns->proc_name->formal)
6908 s = e->symtree->n.sym->ns->proc_name->formal->sym;
6909
6910 if (s != NULL)
6911 st = gfc_find_symtree (s->ns->sym_root, e->symtree->n.sym->name);
6912
6913 if (st != NULL
6914 && st->n.sym != NULL
6915 && st->n.sym->attr.dummy)
6916 e->symtree = st;
6917 }
6918
6919 /* Resolve an expression. That is, make sure that types of operands agree
6920 with their operators, intrinsic operators are converted to function calls
6921 for overloaded types and unresolved function references are resolved. */
6922
6923 bool
6924 gfc_resolve_expr (gfc_expr *e)
6925 {
6926 bool t;
6927 bool inquiry_save, actual_arg_save, first_actual_arg_save;
6928
6929 if (e == NULL || e->do_not_resolve_again)
6930 return true;
6931
6932 /* inquiry_argument only applies to variables. */
6933 inquiry_save = inquiry_argument;
6934 actual_arg_save = actual_arg;
6935 first_actual_arg_save = first_actual_arg;
6936
6937 if (e->expr_type != EXPR_VARIABLE)
6938 {
6939 inquiry_argument = false;
6940 actual_arg = false;
6941 first_actual_arg = false;
6942 }
6943 else if (e->symtree != NULL
6944 && *e->symtree->name == '@'
6945 && e->symtree->n.sym->attr.dummy)
6946 {
6947 /* Deal with submodule specification expressions that are not
6948 found to be referenced in module.c(read_cleanup). */
6949 fixup_unique_dummy (e);
6950 }
6951
6952 switch (e->expr_type)
6953 {
6954 case EXPR_OP:
6955 t = resolve_operator (e);
6956 break;
6957
6958 case EXPR_FUNCTION:
6959 case EXPR_VARIABLE:
6960
6961 if (check_host_association (e))
6962 t = resolve_function (e);
6963 else
6964 t = resolve_variable (e);
6965
6966 if (e->ts.type == BT_CHARACTER && e->ts.u.cl == NULL && e->ref
6967 && e->ref->type != REF_SUBSTRING)
6968 gfc_resolve_substring_charlen (e);
6969
6970 break;
6971
6972 case EXPR_COMPCALL:
6973 t = resolve_typebound_function (e);
6974 break;
6975
6976 case EXPR_SUBSTRING:
6977 t = resolve_ref (e);
6978 break;
6979
6980 case EXPR_CONSTANT:
6981 case EXPR_NULL:
6982 t = true;
6983 break;
6984
6985 case EXPR_PPC:
6986 t = resolve_expr_ppc (e);
6987 break;
6988
6989 case EXPR_ARRAY:
6990 t = false;
6991 if (!resolve_ref (e))
6992 break;
6993
6994 t = gfc_resolve_array_constructor (e);
6995 /* Also try to expand a constructor. */
6996 if (t)
6997 {
6998 expression_rank (e);
6999 if (gfc_is_constant_expr (e) || gfc_is_expandable_expr (e))
7000 gfc_expand_constructor (e, false);
7001 }
7002
7003 /* This provides the opportunity for the length of constructors with
7004 character valued function elements to propagate the string length
7005 to the expression. */
7006 if (t && e->ts.type == BT_CHARACTER)
7007 {
7008 /* For efficiency, we call gfc_expand_constructor for BT_CHARACTER
7009 here rather then add a duplicate test for it above. */
7010 gfc_expand_constructor (e, false);
7011 t = gfc_resolve_character_array_constructor (e);
7012 }
7013
7014 break;
7015
7016 case EXPR_STRUCTURE:
7017 t = resolve_ref (e);
7018 if (!t)
7019 break;
7020
7021 t = resolve_structure_cons (e, 0);
7022 if (!t)
7023 break;
7024
7025 t = gfc_simplify_expr (e, 0);
7026 break;
7027
7028 default:
7029 gfc_internal_error ("gfc_resolve_expr(): Bad expression type");
7030 }
7031
7032 if (e->ts.type == BT_CHARACTER && t && !e->ts.u.cl)
7033 fixup_charlen (e);
7034
7035 inquiry_argument = inquiry_save;
7036 actual_arg = actual_arg_save;
7037 first_actual_arg = first_actual_arg_save;
7038
7039 /* For some reason, resolving these expressions a second time mangles
7040 the typespec of the expression itself. */
7041 if (t && e->expr_type == EXPR_VARIABLE
7042 && e->symtree->n.sym->attr.select_rank_temporary
7043 && UNLIMITED_POLY (e->symtree->n.sym))
7044 e->do_not_resolve_again = 1;
7045
7046 return t;
7047 }
7048
7049
7050 /* Resolve an expression from an iterator. They must be scalar and have
7051 INTEGER or (optionally) REAL type. */
7052
7053 static bool
7054 gfc_resolve_iterator_expr (gfc_expr *expr, bool real_ok,
7055 const char *name_msgid)
7056 {
7057 if (!gfc_resolve_expr (expr))
7058 return false;
7059
7060 if (expr->rank != 0)
7061 {
7062 gfc_error ("%s at %L must be a scalar", _(name_msgid), &expr->where);
7063 return false;
7064 }
7065
7066 if (expr->ts.type != BT_INTEGER)
7067 {
7068 if (expr->ts.type == BT_REAL)
7069 {
7070 if (real_ok)
7071 return gfc_notify_std (GFC_STD_F95_DEL,
7072 "%s at %L must be integer",
7073 _(name_msgid), &expr->where);
7074 else
7075 {
7076 gfc_error ("%s at %L must be INTEGER", _(name_msgid),
7077 &expr->where);
7078 return false;
7079 }
7080 }
7081 else
7082 {
7083 gfc_error ("%s at %L must be INTEGER", _(name_msgid), &expr->where);
7084 return false;
7085 }
7086 }
7087 return true;
7088 }
7089
7090
7091 /* Resolve the expressions in an iterator structure. If REAL_OK is
7092 false allow only INTEGER type iterators, otherwise allow REAL types.
7093 Set own_scope to true for ac-implied-do and data-implied-do as those
7094 have a separate scope such that, e.g., a INTENT(IN) doesn't apply. */
7095
7096 bool
7097 gfc_resolve_iterator (gfc_iterator *iter, bool real_ok, bool own_scope)
7098 {
7099 if (!gfc_resolve_iterator_expr (iter->var, real_ok, "Loop variable"))
7100 return false;
7101
7102 if (!gfc_check_vardef_context (iter->var, false, false, own_scope,
7103 _("iterator variable")))
7104 return false;
7105
7106 if (!gfc_resolve_iterator_expr (iter->start, real_ok,
7107 "Start expression in DO loop"))
7108 return false;
7109
7110 if (!gfc_resolve_iterator_expr (iter->end, real_ok,
7111 "End expression in DO loop"))
7112 return false;
7113
7114 if (!gfc_resolve_iterator_expr (iter->step, real_ok,
7115 "Step expression in DO loop"))
7116 return false;
7117
7118 /* Convert start, end, and step to the same type as var. */
7119 if (iter->start->ts.kind != iter->var->ts.kind
7120 || iter->start->ts.type != iter->var->ts.type)
7121 gfc_convert_type (iter->start, &iter->var->ts, 1);
7122
7123 if (iter->end->ts.kind != iter->var->ts.kind
7124 || iter->end->ts.type != iter->var->ts.type)
7125 gfc_convert_type (iter->end, &iter->var->ts, 1);
7126
7127 if (iter->step->ts.kind != iter->var->ts.kind
7128 || iter->step->ts.type != iter->var->ts.type)
7129 gfc_convert_type (iter->step, &iter->var->ts, 1);
7130
7131 if (iter->step->expr_type == EXPR_CONSTANT)
7132 {
7133 if ((iter->step->ts.type == BT_INTEGER
7134 && mpz_cmp_ui (iter->step->value.integer, 0) == 0)
7135 || (iter->step->ts.type == BT_REAL
7136 && mpfr_sgn (iter->step->value.real) == 0))
7137 {
7138 gfc_error ("Step expression in DO loop at %L cannot be zero",
7139 &iter->step->where);
7140 return false;
7141 }
7142 }
7143
7144 if (iter->start->expr_type == EXPR_CONSTANT
7145 && iter->end->expr_type == EXPR_CONSTANT
7146 && iter->step->expr_type == EXPR_CONSTANT)
7147 {
7148 int sgn, cmp;
7149 if (iter->start->ts.type == BT_INTEGER)
7150 {
7151 sgn = mpz_cmp_ui (iter->step->value.integer, 0);
7152 cmp = mpz_cmp (iter->end->value.integer, iter->start->value.integer);
7153 }
7154 else
7155 {
7156 sgn = mpfr_sgn (iter->step->value.real);
7157 cmp = mpfr_cmp (iter->end->value.real, iter->start->value.real);
7158 }
7159 if (warn_zerotrip && ((sgn > 0 && cmp < 0) || (sgn < 0 && cmp > 0)))
7160 gfc_warning (OPT_Wzerotrip,
7161 "DO loop at %L will be executed zero times",
7162 &iter->step->where);
7163 }
7164
7165 if (iter->end->expr_type == EXPR_CONSTANT
7166 && iter->end->ts.type == BT_INTEGER
7167 && iter->step->expr_type == EXPR_CONSTANT
7168 && iter->step->ts.type == BT_INTEGER
7169 && (mpz_cmp_si (iter->step->value.integer, -1L) == 0
7170 || mpz_cmp_si (iter->step->value.integer, 1L) == 0))
7171 {
7172 bool is_step_positive = mpz_cmp_ui (iter->step->value.integer, 1) == 0;
7173 int k = gfc_validate_kind (BT_INTEGER, iter->end->ts.kind, false);
7174
7175 if (is_step_positive
7176 && mpz_cmp (iter->end->value.integer, gfc_integer_kinds[k].huge) == 0)
7177 gfc_warning (OPT_Wundefined_do_loop,
7178 "DO loop at %L is undefined as it overflows",
7179 &iter->step->where);
7180 else if (!is_step_positive
7181 && mpz_cmp (iter->end->value.integer,
7182 gfc_integer_kinds[k].min_int) == 0)
7183 gfc_warning (OPT_Wundefined_do_loop,
7184 "DO loop at %L is undefined as it underflows",
7185 &iter->step->where);
7186 }
7187
7188 return true;
7189 }
7190
7191
7192 /* Traversal function for find_forall_index. f == 2 signals that
7193 that variable itself is not to be checked - only the references. */
7194
7195 static bool
7196 forall_index (gfc_expr *expr, gfc_symbol *sym, int *f)
7197 {
7198 if (expr->expr_type != EXPR_VARIABLE)
7199 return false;
7200
7201 /* A scalar assignment */
7202 if (!expr->ref || *f == 1)
7203 {
7204 if (expr->symtree->n.sym == sym)
7205 return true;
7206 else
7207 return false;
7208 }
7209
7210 if (*f == 2)
7211 *f = 1;
7212 return false;
7213 }
7214
7215
7216 /* Check whether the FORALL index appears in the expression or not.
7217 Returns true if SYM is found in EXPR. */
7218
7219 bool
7220 find_forall_index (gfc_expr *expr, gfc_symbol *sym, int f)
7221 {
7222 if (gfc_traverse_expr (expr, sym, forall_index, f))
7223 return true;
7224 else
7225 return false;
7226 }
7227
7228
7229 /* Resolve a list of FORALL iterators. The FORALL index-name is constrained
7230 to be a scalar INTEGER variable. The subscripts and stride are scalar
7231 INTEGERs, and if stride is a constant it must be nonzero.
7232 Furthermore "A subscript or stride in a forall-triplet-spec shall
7233 not contain a reference to any index-name in the
7234 forall-triplet-spec-list in which it appears." (7.5.4.1) */
7235
7236 static void
7237 resolve_forall_iterators (gfc_forall_iterator *it)
7238 {
7239 gfc_forall_iterator *iter, *iter2;
7240
7241 for (iter = it; iter; iter = iter->next)
7242 {
7243 if (gfc_resolve_expr (iter->var)
7244 && (iter->var->ts.type != BT_INTEGER || iter->var->rank != 0))
7245 gfc_error ("FORALL index-name at %L must be a scalar INTEGER",
7246 &iter->var->where);
7247
7248 if (gfc_resolve_expr (iter->start)
7249 && (iter->start->ts.type != BT_INTEGER || iter->start->rank != 0))
7250 gfc_error ("FORALL start expression at %L must be a scalar INTEGER",
7251 &iter->start->where);
7252 if (iter->var->ts.kind != iter->start->ts.kind)
7253 gfc_convert_type (iter->start, &iter->var->ts, 1);
7254
7255 if (gfc_resolve_expr (iter->end)
7256 && (iter->end->ts.type != BT_INTEGER || iter->end->rank != 0))
7257 gfc_error ("FORALL end expression at %L must be a scalar INTEGER",
7258 &iter->end->where);
7259 if (iter->var->ts.kind != iter->end->ts.kind)
7260 gfc_convert_type (iter->end, &iter->var->ts, 1);
7261
7262 if (gfc_resolve_expr (iter->stride))
7263 {
7264 if (iter->stride->ts.type != BT_INTEGER || iter->stride->rank != 0)
7265 gfc_error ("FORALL stride expression at %L must be a scalar %s",
7266 &iter->stride->where, "INTEGER");
7267
7268 if (iter->stride->expr_type == EXPR_CONSTANT
7269 && mpz_cmp_ui (iter->stride->value.integer, 0) == 0)
7270 gfc_error ("FORALL stride expression at %L cannot be zero",
7271 &iter->stride->where);
7272 }
7273 if (iter->var->ts.kind != iter->stride->ts.kind)
7274 gfc_convert_type (iter->stride, &iter->var->ts, 1);
7275 }
7276
7277 for (iter = it; iter; iter = iter->next)
7278 for (iter2 = iter; iter2; iter2 = iter2->next)
7279 {
7280 if (find_forall_index (iter2->start, iter->var->symtree->n.sym, 0)
7281 || find_forall_index (iter2->end, iter->var->symtree->n.sym, 0)
7282 || find_forall_index (iter2->stride, iter->var->symtree->n.sym, 0))
7283 gfc_error ("FORALL index %qs may not appear in triplet "
7284 "specification at %L", iter->var->symtree->name,
7285 &iter2->start->where);
7286 }
7287 }
7288
7289
7290 /* Given a pointer to a symbol that is a derived type, see if it's
7291 inaccessible, i.e. if it's defined in another module and the components are
7292 PRIVATE. The search is recursive if necessary. Returns zero if no
7293 inaccessible components are found, nonzero otherwise. */
7294
7295 static int
7296 derived_inaccessible (gfc_symbol *sym)
7297 {
7298 gfc_component *c;
7299
7300 if (sym->attr.use_assoc && sym->attr.private_comp)
7301 return 1;
7302
7303 for (c = sym->components; c; c = c->next)
7304 {
7305 /* Prevent an infinite loop through this function. */
7306 if (c->ts.type == BT_DERIVED && c->attr.pointer
7307 && sym == c->ts.u.derived)
7308 continue;
7309
7310 if (c->ts.type == BT_DERIVED && derived_inaccessible (c->ts.u.derived))
7311 return 1;
7312 }
7313
7314 return 0;
7315 }
7316
7317
7318 /* Resolve the argument of a deallocate expression. The expression must be
7319 a pointer or a full array. */
7320
7321 static bool
7322 resolve_deallocate_expr (gfc_expr *e)
7323 {
7324 symbol_attribute attr;
7325 int allocatable, pointer;
7326 gfc_ref *ref;
7327 gfc_symbol *sym;
7328 gfc_component *c;
7329 bool unlimited;
7330
7331 if (!gfc_resolve_expr (e))
7332 return false;
7333
7334 if (e->expr_type != EXPR_VARIABLE)
7335 goto bad;
7336
7337 sym = e->symtree->n.sym;
7338 unlimited = UNLIMITED_POLY(sym);
7339
7340 if (sym->ts.type == BT_CLASS)
7341 {
7342 allocatable = CLASS_DATA (sym)->attr.allocatable;
7343 pointer = CLASS_DATA (sym)->attr.class_pointer;
7344 }
7345 else
7346 {
7347 allocatable = sym->attr.allocatable;
7348 pointer = sym->attr.pointer;
7349 }
7350 for (ref = e->ref; ref; ref = ref->next)
7351 {
7352 switch (ref->type)
7353 {
7354 case REF_ARRAY:
7355 if (ref->u.ar.type != AR_FULL
7356 && !(ref->u.ar.type == AR_ELEMENT && ref->u.ar.as->rank == 0
7357 && ref->u.ar.codimen && gfc_ref_this_image (ref)))
7358 allocatable = 0;
7359 break;
7360
7361 case REF_COMPONENT:
7362 c = ref->u.c.component;
7363 if (c->ts.type == BT_CLASS)
7364 {
7365 allocatable = CLASS_DATA (c)->attr.allocatable;
7366 pointer = CLASS_DATA (c)->attr.class_pointer;
7367 }
7368 else
7369 {
7370 allocatable = c->attr.allocatable;
7371 pointer = c->attr.pointer;
7372 }
7373 break;
7374
7375 case REF_SUBSTRING:
7376 case REF_INQUIRY:
7377 allocatable = 0;
7378 break;
7379 }
7380 }
7381
7382 attr = gfc_expr_attr (e);
7383
7384 if (allocatable == 0 && attr.pointer == 0 && !unlimited)
7385 {
7386 bad:
7387 gfc_error ("Allocate-object at %L must be ALLOCATABLE or a POINTER",
7388 &e->where);
7389 return false;
7390 }
7391
7392 /* F2008, C644. */
7393 if (gfc_is_coindexed (e))
7394 {
7395 gfc_error ("Coindexed allocatable object at %L", &e->where);
7396 return false;
7397 }
7398
7399 if (pointer
7400 && !gfc_check_vardef_context (e, true, true, false,
7401 _("DEALLOCATE object")))
7402 return false;
7403 if (!gfc_check_vardef_context (e, false, true, false,
7404 _("DEALLOCATE object")))
7405 return false;
7406
7407 return true;
7408 }
7409
7410
7411 /* Returns true if the expression e contains a reference to the symbol sym. */
7412 static bool
7413 sym_in_expr (gfc_expr *e, gfc_symbol *sym, int *f ATTRIBUTE_UNUSED)
7414 {
7415 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym == sym)
7416 return true;
7417
7418 return false;
7419 }
7420
7421 bool
7422 gfc_find_sym_in_expr (gfc_symbol *sym, gfc_expr *e)
7423 {
7424 return gfc_traverse_expr (e, sym, sym_in_expr, 0);
7425 }
7426
7427
7428 /* Given the expression node e for an allocatable/pointer of derived type to be
7429 allocated, get the expression node to be initialized afterwards (needed for
7430 derived types with default initializers, and derived types with allocatable
7431 components that need nullification.) */
7432
7433 gfc_expr *
7434 gfc_expr_to_initialize (gfc_expr *e)
7435 {
7436 gfc_expr *result;
7437 gfc_ref *ref;
7438 int i;
7439
7440 result = gfc_copy_expr (e);
7441
7442 /* Change the last array reference from AR_ELEMENT to AR_FULL. */
7443 for (ref = result->ref; ref; ref = ref->next)
7444 if (ref->type == REF_ARRAY && ref->next == NULL)
7445 {
7446 if (ref->u.ar.dimen == 0
7447 && ref->u.ar.as && ref->u.ar.as->corank)
7448 return result;
7449
7450 ref->u.ar.type = AR_FULL;
7451
7452 for (i = 0; i < ref->u.ar.dimen; i++)
7453 ref->u.ar.start[i] = ref->u.ar.end[i] = ref->u.ar.stride[i] = NULL;
7454
7455 break;
7456 }
7457
7458 gfc_free_shape (&result->shape, result->rank);
7459
7460 /* Recalculate rank, shape, etc. */
7461 gfc_resolve_expr (result);
7462 return result;
7463 }
7464
7465
7466 /* If the last ref of an expression is an array ref, return a copy of the
7467 expression with that one removed. Otherwise, a copy of the original
7468 expression. This is used for allocate-expressions and pointer assignment
7469 LHS, where there may be an array specification that needs to be stripped
7470 off when using gfc_check_vardef_context. */
7471
7472 static gfc_expr*
7473 remove_last_array_ref (gfc_expr* e)
7474 {
7475 gfc_expr* e2;
7476 gfc_ref** r;
7477
7478 e2 = gfc_copy_expr (e);
7479 for (r = &e2->ref; *r; r = &(*r)->next)
7480 if ((*r)->type == REF_ARRAY && !(*r)->next)
7481 {
7482 gfc_free_ref_list (*r);
7483 *r = NULL;
7484 break;
7485 }
7486
7487 return e2;
7488 }
7489
7490
7491 /* Used in resolve_allocate_expr to check that a allocation-object and
7492 a source-expr are conformable. This does not catch all possible
7493 cases; in particular a runtime checking is needed. */
7494
7495 static bool
7496 conformable_arrays (gfc_expr *e1, gfc_expr *e2)
7497 {
7498 gfc_ref *tail;
7499 for (tail = e2->ref; tail && tail->next; tail = tail->next);
7500
7501 /* First compare rank. */
7502 if ((tail && (!tail->u.ar.as || e1->rank != tail->u.ar.as->rank))
7503 || (!tail && e1->rank != e2->rank))
7504 {
7505 gfc_error ("Source-expr at %L must be scalar or have the "
7506 "same rank as the allocate-object at %L",
7507 &e1->where, &e2->where);
7508 return false;
7509 }
7510
7511 if (e1->shape)
7512 {
7513 int i;
7514 mpz_t s;
7515
7516 mpz_init (s);
7517
7518 for (i = 0; i < e1->rank; i++)
7519 {
7520 if (tail->u.ar.start[i] == NULL)
7521 break;
7522
7523 if (tail->u.ar.end[i])
7524 {
7525 mpz_set (s, tail->u.ar.end[i]->value.integer);
7526 mpz_sub (s, s, tail->u.ar.start[i]->value.integer);
7527 mpz_add_ui (s, s, 1);
7528 }
7529 else
7530 {
7531 mpz_set (s, tail->u.ar.start[i]->value.integer);
7532 }
7533
7534 if (mpz_cmp (e1->shape[i], s) != 0)
7535 {
7536 gfc_error ("Source-expr at %L and allocate-object at %L must "
7537 "have the same shape", &e1->where, &e2->where);
7538 mpz_clear (s);
7539 return false;
7540 }
7541 }
7542
7543 mpz_clear (s);
7544 }
7545
7546 return true;
7547 }
7548
7549
7550 /* Resolve the expression in an ALLOCATE statement, doing the additional
7551 checks to see whether the expression is OK or not. The expression must
7552 have a trailing array reference that gives the size of the array. */
7553
7554 static bool
7555 resolve_allocate_expr (gfc_expr *e, gfc_code *code, bool *array_alloc_wo_spec)
7556 {
7557 int i, pointer, allocatable, dimension, is_abstract;
7558 int codimension;
7559 bool coindexed;
7560 bool unlimited;
7561 symbol_attribute attr;
7562 gfc_ref *ref, *ref2;
7563 gfc_expr *e2;
7564 gfc_array_ref *ar;
7565 gfc_symbol *sym = NULL;
7566 gfc_alloc *a;
7567 gfc_component *c;
7568 bool t;
7569
7570 /* Mark the utmost array component as being in allocate to allow DIMEN_STAR
7571 checking of coarrays. */
7572 for (ref = e->ref; ref; ref = ref->next)
7573 if (ref->next == NULL)
7574 break;
7575
7576 if (ref && ref->type == REF_ARRAY)
7577 ref->u.ar.in_allocate = true;
7578
7579 if (!gfc_resolve_expr (e))
7580 goto failure;
7581
7582 /* Make sure the expression is allocatable or a pointer. If it is
7583 pointer, the next-to-last reference must be a pointer. */
7584
7585 ref2 = NULL;
7586 if (e->symtree)
7587 sym = e->symtree->n.sym;
7588
7589 /* Check whether ultimate component is abstract and CLASS. */
7590 is_abstract = 0;
7591
7592 /* Is the allocate-object unlimited polymorphic? */
7593 unlimited = UNLIMITED_POLY(e);
7594
7595 if (e->expr_type != EXPR_VARIABLE)
7596 {
7597 allocatable = 0;
7598 attr = gfc_expr_attr (e);
7599 pointer = attr.pointer;
7600 dimension = attr.dimension;
7601 codimension = attr.codimension;
7602 }
7603 else
7604 {
7605 if (sym->ts.type == BT_CLASS && CLASS_DATA (sym))
7606 {
7607 allocatable = CLASS_DATA (sym)->attr.allocatable;
7608 pointer = CLASS_DATA (sym)->attr.class_pointer;
7609 dimension = CLASS_DATA (sym)->attr.dimension;
7610 codimension = CLASS_DATA (sym)->attr.codimension;
7611 is_abstract = CLASS_DATA (sym)->attr.abstract;
7612 }
7613 else
7614 {
7615 allocatable = sym->attr.allocatable;
7616 pointer = sym->attr.pointer;
7617 dimension = sym->attr.dimension;
7618 codimension = sym->attr.codimension;
7619 }
7620
7621 coindexed = false;
7622
7623 for (ref = e->ref; ref; ref2 = ref, ref = ref->next)
7624 {
7625 switch (ref->type)
7626 {
7627 case REF_ARRAY:
7628 if (ref->u.ar.codimen > 0)
7629 {
7630 int n;
7631 for (n = ref->u.ar.dimen;
7632 n < ref->u.ar.dimen + ref->u.ar.codimen; n++)
7633 if (ref->u.ar.dimen_type[n] != DIMEN_THIS_IMAGE)
7634 {
7635 coindexed = true;
7636 break;
7637 }
7638 }
7639
7640 if (ref->next != NULL)
7641 pointer = 0;
7642 break;
7643
7644 case REF_COMPONENT:
7645 /* F2008, C644. */
7646 if (coindexed)
7647 {
7648 gfc_error ("Coindexed allocatable object at %L",
7649 &e->where);
7650 goto failure;
7651 }
7652
7653 c = ref->u.c.component;
7654 if (c->ts.type == BT_CLASS)
7655 {
7656 allocatable = CLASS_DATA (c)->attr.allocatable;
7657 pointer = CLASS_DATA (c)->attr.class_pointer;
7658 dimension = CLASS_DATA (c)->attr.dimension;
7659 codimension = CLASS_DATA (c)->attr.codimension;
7660 is_abstract = CLASS_DATA (c)->attr.abstract;
7661 }
7662 else
7663 {
7664 allocatable = c->attr.allocatable;
7665 pointer = c->attr.pointer;
7666 dimension = c->attr.dimension;
7667 codimension = c->attr.codimension;
7668 is_abstract = c->attr.abstract;
7669 }
7670 break;
7671
7672 case REF_SUBSTRING:
7673 case REF_INQUIRY:
7674 allocatable = 0;
7675 pointer = 0;
7676 break;
7677 }
7678 }
7679 }
7680
7681 /* Check for F08:C628. */
7682 if (allocatable == 0 && pointer == 0 && !unlimited)
7683 {
7684 gfc_error ("Allocate-object at %L must be ALLOCATABLE or a POINTER",
7685 &e->where);
7686 goto failure;
7687 }
7688
7689 /* Some checks for the SOURCE tag. */
7690 if (code->expr3)
7691 {
7692 /* Check F03:C631. */
7693 if (!gfc_type_compatible (&e->ts, &code->expr3->ts))
7694 {
7695 gfc_error ("Type of entity at %L is type incompatible with "
7696 "source-expr at %L", &e->where, &code->expr3->where);
7697 goto failure;
7698 }
7699
7700 /* Check F03:C632 and restriction following Note 6.18. */
7701 if (code->expr3->rank > 0 && !conformable_arrays (code->expr3, e))
7702 goto failure;
7703
7704 /* Check F03:C633. */
7705 if (code->expr3->ts.kind != e->ts.kind && !unlimited)
7706 {
7707 gfc_error ("The allocate-object at %L and the source-expr at %L "
7708 "shall have the same kind type parameter",
7709 &e->where, &code->expr3->where);
7710 goto failure;
7711 }
7712
7713 /* Check F2008, C642. */
7714 if (code->expr3->ts.type == BT_DERIVED
7715 && ((codimension && gfc_expr_attr (code->expr3).lock_comp)
7716 || (code->expr3->ts.u.derived->from_intmod
7717 == INTMOD_ISO_FORTRAN_ENV
7718 && code->expr3->ts.u.derived->intmod_sym_id
7719 == ISOFORTRAN_LOCK_TYPE)))
7720 {
7721 gfc_error ("The source-expr at %L shall neither be of type "
7722 "LOCK_TYPE nor have a LOCK_TYPE component if "
7723 "allocate-object at %L is a coarray",
7724 &code->expr3->where, &e->where);
7725 goto failure;
7726 }
7727
7728 /* Check TS18508, C702/C703. */
7729 if (code->expr3->ts.type == BT_DERIVED
7730 && ((codimension && gfc_expr_attr (code->expr3).event_comp)
7731 || (code->expr3->ts.u.derived->from_intmod
7732 == INTMOD_ISO_FORTRAN_ENV
7733 && code->expr3->ts.u.derived->intmod_sym_id
7734 == ISOFORTRAN_EVENT_TYPE)))
7735 {
7736 gfc_error ("The source-expr at %L shall neither be of type "
7737 "EVENT_TYPE nor have a EVENT_TYPE component if "
7738 "allocate-object at %L is a coarray",
7739 &code->expr3->where, &e->where);
7740 goto failure;
7741 }
7742 }
7743
7744 /* Check F08:C629. */
7745 if (is_abstract && code->ext.alloc.ts.type == BT_UNKNOWN
7746 && !code->expr3)
7747 {
7748 gcc_assert (e->ts.type == BT_CLASS);
7749 gfc_error ("Allocating %s of ABSTRACT base type at %L requires a "
7750 "type-spec or source-expr", sym->name, &e->where);
7751 goto failure;
7752 }
7753
7754 /* Check F08:C632. */
7755 if (code->ext.alloc.ts.type == BT_CHARACTER && !e->ts.deferred
7756 && !UNLIMITED_POLY (e))
7757 {
7758 int cmp;
7759
7760 if (!e->ts.u.cl->length)
7761 goto failure;
7762
7763 cmp = gfc_dep_compare_expr (e->ts.u.cl->length,
7764 code->ext.alloc.ts.u.cl->length);
7765 if (cmp == 1 || cmp == -1 || cmp == -3)
7766 {
7767 gfc_error ("Allocating %s at %L with type-spec requires the same "
7768 "character-length parameter as in the declaration",
7769 sym->name, &e->where);
7770 goto failure;
7771 }
7772 }
7773
7774 /* In the variable definition context checks, gfc_expr_attr is used
7775 on the expression. This is fooled by the array specification
7776 present in e, thus we have to eliminate that one temporarily. */
7777 e2 = remove_last_array_ref (e);
7778 t = true;
7779 if (t && pointer)
7780 t = gfc_check_vardef_context (e2, true, true, false,
7781 _("ALLOCATE object"));
7782 if (t)
7783 t = gfc_check_vardef_context (e2, false, true, false,
7784 _("ALLOCATE object"));
7785 gfc_free_expr (e2);
7786 if (!t)
7787 goto failure;
7788
7789 if (e->ts.type == BT_CLASS && CLASS_DATA (e)->attr.dimension
7790 && !code->expr3 && code->ext.alloc.ts.type == BT_DERIVED)
7791 {
7792 /* For class arrays, the initialization with SOURCE is done
7793 using _copy and trans_call. It is convenient to exploit that
7794 when the allocated type is different from the declared type but
7795 no SOURCE exists by setting expr3. */
7796 code->expr3 = gfc_default_initializer (&code->ext.alloc.ts);
7797 }
7798 else if (flag_coarray != GFC_FCOARRAY_LIB && e->ts.type == BT_DERIVED
7799 && e->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
7800 && e->ts.u.derived->intmod_sym_id == ISOFORTRAN_EVENT_TYPE)
7801 {
7802 /* We have to zero initialize the integer variable. */
7803 code->expr3 = gfc_get_int_expr (gfc_default_integer_kind, &e->where, 0);
7804 }
7805
7806 if (e->ts.type == BT_CLASS && !unlimited && !UNLIMITED_POLY (code->expr3))
7807 {
7808 /* Make sure the vtab symbol is present when
7809 the module variables are generated. */
7810 gfc_typespec ts = e->ts;
7811 if (code->expr3)
7812 ts = code->expr3->ts;
7813 else if (code->ext.alloc.ts.type == BT_DERIVED)
7814 ts = code->ext.alloc.ts;
7815
7816 /* Finding the vtab also publishes the type's symbol. Therefore this
7817 statement is necessary. */
7818 gfc_find_derived_vtab (ts.u.derived);
7819 }
7820 else if (unlimited && !UNLIMITED_POLY (code->expr3))
7821 {
7822 /* Again, make sure the vtab symbol is present when
7823 the module variables are generated. */
7824 gfc_typespec *ts = NULL;
7825 if (code->expr3)
7826 ts = &code->expr3->ts;
7827 else
7828 ts = &code->ext.alloc.ts;
7829
7830 gcc_assert (ts);
7831
7832 /* Finding the vtab also publishes the type's symbol. Therefore this
7833 statement is necessary. */
7834 gfc_find_vtab (ts);
7835 }
7836
7837 if (dimension == 0 && codimension == 0)
7838 goto success;
7839
7840 /* Make sure the last reference node is an array specification. */
7841
7842 if (!ref2 || ref2->type != REF_ARRAY || ref2->u.ar.type == AR_FULL
7843 || (dimension && ref2->u.ar.dimen == 0))
7844 {
7845 /* F08:C633. */
7846 if (code->expr3)
7847 {
7848 if (!gfc_notify_std (GFC_STD_F2008, "Array specification required "
7849 "in ALLOCATE statement at %L", &e->where))
7850 goto failure;
7851 if (code->expr3->rank != 0)
7852 *array_alloc_wo_spec = true;
7853 else
7854 {
7855 gfc_error ("Array specification or array-valued SOURCE= "
7856 "expression required in ALLOCATE statement at %L",
7857 &e->where);
7858 goto failure;
7859 }
7860 }
7861 else
7862 {
7863 gfc_error ("Array specification required in ALLOCATE statement "
7864 "at %L", &e->where);
7865 goto failure;
7866 }
7867 }
7868
7869 /* Make sure that the array section reference makes sense in the
7870 context of an ALLOCATE specification. */
7871
7872 ar = &ref2->u.ar;
7873
7874 if (codimension)
7875 for (i = ar->dimen; i < ar->dimen + ar->codimen; i++)
7876 {
7877 switch (ar->dimen_type[i])
7878 {
7879 case DIMEN_THIS_IMAGE:
7880 gfc_error ("Coarray specification required in ALLOCATE statement "
7881 "at %L", &e->where);
7882 goto failure;
7883
7884 case DIMEN_RANGE:
7885 if (ar->start[i] == 0 || ar->end[i] == 0)
7886 {
7887 /* If ar->stride[i] is NULL, we issued a previous error. */
7888 if (ar->stride[i] == NULL)
7889 gfc_error ("Bad array specification in ALLOCATE statement "
7890 "at %L", &e->where);
7891 goto failure;
7892 }
7893 else if (gfc_dep_compare_expr (ar->start[i], ar->end[i]) == 1)
7894 {
7895 gfc_error ("Upper cobound is less than lower cobound at %L",
7896 &ar->start[i]->where);
7897 goto failure;
7898 }
7899 break;
7900
7901 case DIMEN_ELEMENT:
7902 if (ar->start[i]->expr_type == EXPR_CONSTANT)
7903 {
7904 gcc_assert (ar->start[i]->ts.type == BT_INTEGER);
7905 if (mpz_cmp_si (ar->start[i]->value.integer, 1) < 0)
7906 {
7907 gfc_error ("Upper cobound is less than lower cobound "
7908 "of 1 at %L", &ar->start[i]->where);
7909 goto failure;
7910 }
7911 }
7912 break;
7913
7914 case DIMEN_STAR:
7915 break;
7916
7917 default:
7918 gfc_error ("Bad array specification in ALLOCATE statement at %L",
7919 &e->where);
7920 goto failure;
7921
7922 }
7923 }
7924 for (i = 0; i < ar->dimen; i++)
7925 {
7926 if (ar->type == AR_ELEMENT || ar->type == AR_FULL)
7927 goto check_symbols;
7928
7929 switch (ar->dimen_type[i])
7930 {
7931 case DIMEN_ELEMENT:
7932 break;
7933
7934 case DIMEN_RANGE:
7935 if (ar->start[i] != NULL
7936 && ar->end[i] != NULL
7937 && ar->stride[i] == NULL)
7938 break;
7939
7940 /* Fall through. */
7941
7942 case DIMEN_UNKNOWN:
7943 case DIMEN_VECTOR:
7944 case DIMEN_STAR:
7945 case DIMEN_THIS_IMAGE:
7946 gfc_error ("Bad array specification in ALLOCATE statement at %L",
7947 &e->where);
7948 goto failure;
7949 }
7950
7951 check_symbols:
7952 for (a = code->ext.alloc.list; a; a = a->next)
7953 {
7954 sym = a->expr->symtree->n.sym;
7955
7956 /* TODO - check derived type components. */
7957 if (gfc_bt_struct (sym->ts.type) || sym->ts.type == BT_CLASS)
7958 continue;
7959
7960 if ((ar->start[i] != NULL
7961 && gfc_find_sym_in_expr (sym, ar->start[i]))
7962 || (ar->end[i] != NULL
7963 && gfc_find_sym_in_expr (sym, ar->end[i])))
7964 {
7965 gfc_error ("%qs must not appear in the array specification at "
7966 "%L in the same ALLOCATE statement where it is "
7967 "itself allocated", sym->name, &ar->where);
7968 goto failure;
7969 }
7970 }
7971 }
7972
7973 for (i = ar->dimen; i < ar->codimen + ar->dimen; i++)
7974 {
7975 if (ar->dimen_type[i] == DIMEN_ELEMENT
7976 || ar->dimen_type[i] == DIMEN_RANGE)
7977 {
7978 if (i == (ar->dimen + ar->codimen - 1))
7979 {
7980 gfc_error ("Expected '*' in coindex specification in ALLOCATE "
7981 "statement at %L", &e->where);
7982 goto failure;
7983 }
7984 continue;
7985 }
7986
7987 if (ar->dimen_type[i] == DIMEN_STAR && i == (ar->dimen + ar->codimen - 1)
7988 && ar->stride[i] == NULL)
7989 break;
7990
7991 gfc_error ("Bad coarray specification in ALLOCATE statement at %L",
7992 &e->where);
7993 goto failure;
7994 }
7995
7996 success:
7997 return true;
7998
7999 failure:
8000 return false;
8001 }
8002
8003
8004 static void
8005 resolve_allocate_deallocate (gfc_code *code, const char *fcn)
8006 {
8007 gfc_expr *stat, *errmsg, *pe, *qe;
8008 gfc_alloc *a, *p, *q;
8009
8010 stat = code->expr1;
8011 errmsg = code->expr2;
8012
8013 /* Check the stat variable. */
8014 if (stat)
8015 {
8016 gfc_check_vardef_context (stat, false, false, false,
8017 _("STAT variable"));
8018
8019 if ((stat->ts.type != BT_INTEGER
8020 && !(stat->ref && (stat->ref->type == REF_ARRAY
8021 || stat->ref->type == REF_COMPONENT)))
8022 || stat->rank > 0)
8023 gfc_error ("Stat-variable at %L must be a scalar INTEGER "
8024 "variable", &stat->where);
8025
8026 for (p = code->ext.alloc.list; p; p = p->next)
8027 if (p->expr->symtree->n.sym->name == stat->symtree->n.sym->name)
8028 {
8029 gfc_ref *ref1, *ref2;
8030 bool found = true;
8031
8032 for (ref1 = p->expr->ref, ref2 = stat->ref; ref1 && ref2;
8033 ref1 = ref1->next, ref2 = ref2->next)
8034 {
8035 if (ref1->type != REF_COMPONENT || ref2->type != REF_COMPONENT)
8036 continue;
8037 if (ref1->u.c.component->name != ref2->u.c.component->name)
8038 {
8039 found = false;
8040 break;
8041 }
8042 }
8043
8044 if (found)
8045 {
8046 gfc_error ("Stat-variable at %L shall not be %sd within "
8047 "the same %s statement", &stat->where, fcn, fcn);
8048 break;
8049 }
8050 }
8051 }
8052
8053 /* Check the errmsg variable. */
8054 if (errmsg)
8055 {
8056 if (!stat)
8057 gfc_warning (0, "ERRMSG at %L is useless without a STAT tag",
8058 &errmsg->where);
8059
8060 gfc_check_vardef_context (errmsg, false, false, false,
8061 _("ERRMSG variable"));
8062
8063 /* F18:R928 alloc-opt is ERRMSG = errmsg-variable
8064 F18:R930 errmsg-variable is scalar-default-char-variable
8065 F18:R906 default-char-variable is variable
8066 F18:C906 default-char-variable shall be default character. */
8067 if ((errmsg->ts.type != BT_CHARACTER
8068 && !(errmsg->ref
8069 && (errmsg->ref->type == REF_ARRAY
8070 || errmsg->ref->type == REF_COMPONENT)))
8071 || errmsg->rank > 0
8072 || errmsg->ts.kind != gfc_default_character_kind)
8073 gfc_error ("ERRMSG variable at %L shall be a scalar default CHARACTER "
8074 "variable", &errmsg->where);
8075
8076 for (p = code->ext.alloc.list; p; p = p->next)
8077 if (p->expr->symtree->n.sym->name == errmsg->symtree->n.sym->name)
8078 {
8079 gfc_ref *ref1, *ref2;
8080 bool found = true;
8081
8082 for (ref1 = p->expr->ref, ref2 = errmsg->ref; ref1 && ref2;
8083 ref1 = ref1->next, ref2 = ref2->next)
8084 {
8085 if (ref1->type != REF_COMPONENT || ref2->type != REF_COMPONENT)
8086 continue;
8087 if (ref1->u.c.component->name != ref2->u.c.component->name)
8088 {
8089 found = false;
8090 break;
8091 }
8092 }
8093
8094 if (found)
8095 {
8096 gfc_error ("Errmsg-variable at %L shall not be %sd within "
8097 "the same %s statement", &errmsg->where, fcn, fcn);
8098 break;
8099 }
8100 }
8101 }
8102
8103 /* Check that an allocate-object appears only once in the statement. */
8104
8105 for (p = code->ext.alloc.list; p; p = p->next)
8106 {
8107 pe = p->expr;
8108 for (q = p->next; q; q = q->next)
8109 {
8110 qe = q->expr;
8111 if (pe->symtree->n.sym->name == qe->symtree->n.sym->name)
8112 {
8113 /* This is a potential collision. */
8114 gfc_ref *pr = pe->ref;
8115 gfc_ref *qr = qe->ref;
8116
8117 /* Follow the references until
8118 a) They start to differ, in which case there is no error;
8119 you can deallocate a%b and a%c in a single statement
8120 b) Both of them stop, which is an error
8121 c) One of them stops, which is also an error. */
8122 while (1)
8123 {
8124 if (pr == NULL && qr == NULL)
8125 {
8126 gfc_error ("Allocate-object at %L also appears at %L",
8127 &pe->where, &qe->where);
8128 break;
8129 }
8130 else if (pr != NULL && qr == NULL)
8131 {
8132 gfc_error ("Allocate-object at %L is subobject of"
8133 " object at %L", &pe->where, &qe->where);
8134 break;
8135 }
8136 else if (pr == NULL && qr != NULL)
8137 {
8138 gfc_error ("Allocate-object at %L is subobject of"
8139 " object at %L", &qe->where, &pe->where);
8140 break;
8141 }
8142 /* Here, pr != NULL && qr != NULL */
8143 gcc_assert(pr->type == qr->type);
8144 if (pr->type == REF_ARRAY)
8145 {
8146 /* Handle cases like allocate(v(3)%x(3), v(2)%x(3)),
8147 which are legal. */
8148 gcc_assert (qr->type == REF_ARRAY);
8149
8150 if (pr->next && qr->next)
8151 {
8152 int i;
8153 gfc_array_ref *par = &(pr->u.ar);
8154 gfc_array_ref *qar = &(qr->u.ar);
8155
8156 for (i=0; i<par->dimen; i++)
8157 {
8158 if ((par->start[i] != NULL
8159 || qar->start[i] != NULL)
8160 && gfc_dep_compare_expr (par->start[i],
8161 qar->start[i]) != 0)
8162 goto break_label;
8163 }
8164 }
8165 }
8166 else
8167 {
8168 if (pr->u.c.component->name != qr->u.c.component->name)
8169 break;
8170 }
8171
8172 pr = pr->next;
8173 qr = qr->next;
8174 }
8175 break_label:
8176 ;
8177 }
8178 }
8179 }
8180
8181 if (strcmp (fcn, "ALLOCATE") == 0)
8182 {
8183 bool arr_alloc_wo_spec = false;
8184
8185 /* Resolving the expr3 in the loop over all objects to allocate would
8186 execute loop invariant code for each loop item. Therefore do it just
8187 once here. */
8188 if (code->expr3 && code->expr3->mold
8189 && code->expr3->ts.type == BT_DERIVED)
8190 {
8191 /* Default initialization via MOLD (non-polymorphic). */
8192 gfc_expr *rhs = gfc_default_initializer (&code->expr3->ts);
8193 if (rhs != NULL)
8194 {
8195 gfc_resolve_expr (rhs);
8196 gfc_free_expr (code->expr3);
8197 code->expr3 = rhs;
8198 }
8199 }
8200 for (a = code->ext.alloc.list; a; a = a->next)
8201 resolve_allocate_expr (a->expr, code, &arr_alloc_wo_spec);
8202
8203 if (arr_alloc_wo_spec && code->expr3)
8204 {
8205 /* Mark the allocate to have to take the array specification
8206 from the expr3. */
8207 code->ext.alloc.arr_spec_from_expr3 = 1;
8208 }
8209 }
8210 else
8211 {
8212 for (a = code->ext.alloc.list; a; a = a->next)
8213 resolve_deallocate_expr (a->expr);
8214 }
8215 }
8216
8217
8218 /************ SELECT CASE resolution subroutines ************/
8219
8220 /* Callback function for our mergesort variant. Determines interval
8221 overlaps for CASEs. Return <0 if op1 < op2, 0 for overlap, >0 for
8222 op1 > op2. Assumes we're not dealing with the default case.
8223 We have op1 = (:L), (K:L) or (K:) and op2 = (:N), (M:N) or (M:).
8224 There are nine situations to check. */
8225
8226 static int
8227 compare_cases (const gfc_case *op1, const gfc_case *op2)
8228 {
8229 int retval;
8230
8231 if (op1->low == NULL) /* op1 = (:L) */
8232 {
8233 /* op2 = (:N), so overlap. */
8234 retval = 0;
8235 /* op2 = (M:) or (M:N), L < M */
8236 if (op2->low != NULL
8237 && gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
8238 retval = -1;
8239 }
8240 else if (op1->high == NULL) /* op1 = (K:) */
8241 {
8242 /* op2 = (M:), so overlap. */
8243 retval = 0;
8244 /* op2 = (:N) or (M:N), K > N */
8245 if (op2->high != NULL
8246 && gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
8247 retval = 1;
8248 }
8249 else /* op1 = (K:L) */
8250 {
8251 if (op2->low == NULL) /* op2 = (:N), K > N */
8252 retval = (gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
8253 ? 1 : 0;
8254 else if (op2->high == NULL) /* op2 = (M:), L < M */
8255 retval = (gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
8256 ? -1 : 0;
8257 else /* op2 = (M:N) */
8258 {
8259 retval = 0;
8260 /* L < M */
8261 if (gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
8262 retval = -1;
8263 /* K > N */
8264 else if (gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
8265 retval = 1;
8266 }
8267 }
8268
8269 return retval;
8270 }
8271
8272
8273 /* Merge-sort a double linked case list, detecting overlap in the
8274 process. LIST is the head of the double linked case list before it
8275 is sorted. Returns the head of the sorted list if we don't see any
8276 overlap, or NULL otherwise. */
8277
8278 static gfc_case *
8279 check_case_overlap (gfc_case *list)
8280 {
8281 gfc_case *p, *q, *e, *tail;
8282 int insize, nmerges, psize, qsize, cmp, overlap_seen;
8283
8284 /* If the passed list was empty, return immediately. */
8285 if (!list)
8286 return NULL;
8287
8288 overlap_seen = 0;
8289 insize = 1;
8290
8291 /* Loop unconditionally. The only exit from this loop is a return
8292 statement, when we've finished sorting the case list. */
8293 for (;;)
8294 {
8295 p = list;
8296 list = NULL;
8297 tail = NULL;
8298
8299 /* Count the number of merges we do in this pass. */
8300 nmerges = 0;
8301
8302 /* Loop while there exists a merge to be done. */
8303 while (p)
8304 {
8305 int i;
8306
8307 /* Count this merge. */
8308 nmerges++;
8309
8310 /* Cut the list in two pieces by stepping INSIZE places
8311 forward in the list, starting from P. */
8312 psize = 0;
8313 q = p;
8314 for (i = 0; i < insize; i++)
8315 {
8316 psize++;
8317 q = q->right;
8318 if (!q)
8319 break;
8320 }
8321 qsize = insize;
8322
8323 /* Now we have two lists. Merge them! */
8324 while (psize > 0 || (qsize > 0 && q != NULL))
8325 {
8326 /* See from which the next case to merge comes from. */
8327 if (psize == 0)
8328 {
8329 /* P is empty so the next case must come from Q. */
8330 e = q;
8331 q = q->right;
8332 qsize--;
8333 }
8334 else if (qsize == 0 || q == NULL)
8335 {
8336 /* Q is empty. */
8337 e = p;
8338 p = p->right;
8339 psize--;
8340 }
8341 else
8342 {
8343 cmp = compare_cases (p, q);
8344 if (cmp < 0)
8345 {
8346 /* The whole case range for P is less than the
8347 one for Q. */
8348 e = p;
8349 p = p->right;
8350 psize--;
8351 }
8352 else if (cmp > 0)
8353 {
8354 /* The whole case range for Q is greater than
8355 the case range for P. */
8356 e = q;
8357 q = q->right;
8358 qsize--;
8359 }
8360 else
8361 {
8362 /* The cases overlap, or they are the same
8363 element in the list. Either way, we must
8364 issue an error and get the next case from P. */
8365 /* FIXME: Sort P and Q by line number. */
8366 gfc_error ("CASE label at %L overlaps with CASE "
8367 "label at %L", &p->where, &q->where);
8368 overlap_seen = 1;
8369 e = p;
8370 p = p->right;
8371 psize--;
8372 }
8373 }
8374
8375 /* Add the next element to the merged list. */
8376 if (tail)
8377 tail->right = e;
8378 else
8379 list = e;
8380 e->left = tail;
8381 tail = e;
8382 }
8383
8384 /* P has now stepped INSIZE places along, and so has Q. So
8385 they're the same. */
8386 p = q;
8387 }
8388 tail->right = NULL;
8389
8390 /* If we have done only one merge or none at all, we've
8391 finished sorting the cases. */
8392 if (nmerges <= 1)
8393 {
8394 if (!overlap_seen)
8395 return list;
8396 else
8397 return NULL;
8398 }
8399
8400 /* Otherwise repeat, merging lists twice the size. */
8401 insize *= 2;
8402 }
8403 }
8404
8405
8406 /* Check to see if an expression is suitable for use in a CASE statement.
8407 Makes sure that all case expressions are scalar constants of the same
8408 type. Return false if anything is wrong. */
8409
8410 static bool
8411 validate_case_label_expr (gfc_expr *e, gfc_expr *case_expr)
8412 {
8413 if (e == NULL) return true;
8414
8415 if (e->ts.type != case_expr->ts.type)
8416 {
8417 gfc_error ("Expression in CASE statement at %L must be of type %s",
8418 &e->where, gfc_basic_typename (case_expr->ts.type));
8419 return false;
8420 }
8421
8422 /* C805 (R808) For a given case-construct, each case-value shall be of
8423 the same type as case-expr. For character type, length differences
8424 are allowed, but the kind type parameters shall be the same. */
8425
8426 if (case_expr->ts.type == BT_CHARACTER && e->ts.kind != case_expr->ts.kind)
8427 {
8428 gfc_error ("Expression in CASE statement at %L must be of kind %d",
8429 &e->where, case_expr->ts.kind);
8430 return false;
8431 }
8432
8433 /* Convert the case value kind to that of case expression kind,
8434 if needed */
8435
8436 if (e->ts.kind != case_expr->ts.kind)
8437 gfc_convert_type_warn (e, &case_expr->ts, 2, 0);
8438
8439 if (e->rank != 0)
8440 {
8441 gfc_error ("Expression in CASE statement at %L must be scalar",
8442 &e->where);
8443 return false;
8444 }
8445
8446 return true;
8447 }
8448
8449
8450 /* Given a completely parsed select statement, we:
8451
8452 - Validate all expressions and code within the SELECT.
8453 - Make sure that the selection expression is not of the wrong type.
8454 - Make sure that no case ranges overlap.
8455 - Eliminate unreachable cases and unreachable code resulting from
8456 removing case labels.
8457
8458 The standard does allow unreachable cases, e.g. CASE (5:3). But
8459 they are a hassle for code generation, and to prevent that, we just
8460 cut them out here. This is not necessary for overlapping cases
8461 because they are illegal and we never even try to generate code.
8462
8463 We have the additional caveat that a SELECT construct could have
8464 been a computed GOTO in the source code. Fortunately we can fairly
8465 easily work around that here: The case_expr for a "real" SELECT CASE
8466 is in code->expr1, but for a computed GOTO it is in code->expr2. All
8467 we have to do is make sure that the case_expr is a scalar integer
8468 expression. */
8469
8470 static void
8471 resolve_select (gfc_code *code, bool select_type)
8472 {
8473 gfc_code *body;
8474 gfc_expr *case_expr;
8475 gfc_case *cp, *default_case, *tail, *head;
8476 int seen_unreachable;
8477 int seen_logical;
8478 int ncases;
8479 bt type;
8480 bool t;
8481
8482 if (code->expr1 == NULL)
8483 {
8484 /* This was actually a computed GOTO statement. */
8485 case_expr = code->expr2;
8486 if (case_expr->ts.type != BT_INTEGER|| case_expr->rank != 0)
8487 gfc_error ("Selection expression in computed GOTO statement "
8488 "at %L must be a scalar integer expression",
8489 &case_expr->where);
8490
8491 /* Further checking is not necessary because this SELECT was built
8492 by the compiler, so it should always be OK. Just move the
8493 case_expr from expr2 to expr so that we can handle computed
8494 GOTOs as normal SELECTs from here on. */
8495 code->expr1 = code->expr2;
8496 code->expr2 = NULL;
8497 return;
8498 }
8499
8500 case_expr = code->expr1;
8501 type = case_expr->ts.type;
8502
8503 /* F08:C830. */
8504 if (type != BT_LOGICAL && type != BT_INTEGER && type != BT_CHARACTER)
8505 {
8506 gfc_error ("Argument of SELECT statement at %L cannot be %s",
8507 &case_expr->where, gfc_typename (case_expr));
8508
8509 /* Punt. Going on here just produce more garbage error messages. */
8510 return;
8511 }
8512
8513 /* F08:R842. */
8514 if (!select_type && case_expr->rank != 0)
8515 {
8516 gfc_error ("Argument of SELECT statement at %L must be a scalar "
8517 "expression", &case_expr->where);
8518
8519 /* Punt. */
8520 return;
8521 }
8522
8523 /* Raise a warning if an INTEGER case value exceeds the range of
8524 the case-expr. Later, all expressions will be promoted to the
8525 largest kind of all case-labels. */
8526
8527 if (type == BT_INTEGER)
8528 for (body = code->block; body; body = body->block)
8529 for (cp = body->ext.block.case_list; cp; cp = cp->next)
8530 {
8531 if (cp->low
8532 && gfc_check_integer_range (cp->low->value.integer,
8533 case_expr->ts.kind) != ARITH_OK)
8534 gfc_warning (0, "Expression in CASE statement at %L is "
8535 "not in the range of %s", &cp->low->where,
8536 gfc_typename (case_expr));
8537
8538 if (cp->high
8539 && cp->low != cp->high
8540 && gfc_check_integer_range (cp->high->value.integer,
8541 case_expr->ts.kind) != ARITH_OK)
8542 gfc_warning (0, "Expression in CASE statement at %L is "
8543 "not in the range of %s", &cp->high->where,
8544 gfc_typename (case_expr));
8545 }
8546
8547 /* PR 19168 has a long discussion concerning a mismatch of the kinds
8548 of the SELECT CASE expression and its CASE values. Walk the lists
8549 of case values, and if we find a mismatch, promote case_expr to
8550 the appropriate kind. */
8551
8552 if (type == BT_LOGICAL || type == BT_INTEGER)
8553 {
8554 for (body = code->block; body; body = body->block)
8555 {
8556 /* Walk the case label list. */
8557 for (cp = body->ext.block.case_list; cp; cp = cp->next)
8558 {
8559 /* Intercept the DEFAULT case. It does not have a kind. */
8560 if (cp->low == NULL && cp->high == NULL)
8561 continue;
8562
8563 /* Unreachable case ranges are discarded, so ignore. */
8564 if (cp->low != NULL && cp->high != NULL
8565 && cp->low != cp->high
8566 && gfc_compare_expr (cp->low, cp->high, INTRINSIC_GT) > 0)
8567 continue;
8568
8569 if (cp->low != NULL
8570 && case_expr->ts.kind != gfc_kind_max(case_expr, cp->low))
8571 gfc_convert_type_warn (case_expr, &cp->low->ts, 2, 0);
8572
8573 if (cp->high != NULL
8574 && case_expr->ts.kind != gfc_kind_max(case_expr, cp->high))
8575 gfc_convert_type_warn (case_expr, &cp->high->ts, 2, 0);
8576 }
8577 }
8578 }
8579
8580 /* Assume there is no DEFAULT case. */
8581 default_case = NULL;
8582 head = tail = NULL;
8583 ncases = 0;
8584 seen_logical = 0;
8585
8586 for (body = code->block; body; body = body->block)
8587 {
8588 /* Assume the CASE list is OK, and all CASE labels can be matched. */
8589 t = true;
8590 seen_unreachable = 0;
8591
8592 /* Walk the case label list, making sure that all case labels
8593 are legal. */
8594 for (cp = body->ext.block.case_list; cp; cp = cp->next)
8595 {
8596 /* Count the number of cases in the whole construct. */
8597 ncases++;
8598
8599 /* Intercept the DEFAULT case. */
8600 if (cp->low == NULL && cp->high == NULL)
8601 {
8602 if (default_case != NULL)
8603 {
8604 gfc_error ("The DEFAULT CASE at %L cannot be followed "
8605 "by a second DEFAULT CASE at %L",
8606 &default_case->where, &cp->where);
8607 t = false;
8608 break;
8609 }
8610 else
8611 {
8612 default_case = cp;
8613 continue;
8614 }
8615 }
8616
8617 /* Deal with single value cases and case ranges. Errors are
8618 issued from the validation function. */
8619 if (!validate_case_label_expr (cp->low, case_expr)
8620 || !validate_case_label_expr (cp->high, case_expr))
8621 {
8622 t = false;
8623 break;
8624 }
8625
8626 if (type == BT_LOGICAL
8627 && ((cp->low == NULL || cp->high == NULL)
8628 || cp->low != cp->high))
8629 {
8630 gfc_error ("Logical range in CASE statement at %L is not "
8631 "allowed", &cp->low->where);
8632 t = false;
8633 break;
8634 }
8635
8636 if (type == BT_LOGICAL && cp->low->expr_type == EXPR_CONSTANT)
8637 {
8638 int value;
8639 value = cp->low->value.logical == 0 ? 2 : 1;
8640 if (value & seen_logical)
8641 {
8642 gfc_error ("Constant logical value in CASE statement "
8643 "is repeated at %L",
8644 &cp->low->where);
8645 t = false;
8646 break;
8647 }
8648 seen_logical |= value;
8649 }
8650
8651 if (cp->low != NULL && cp->high != NULL
8652 && cp->low != cp->high
8653 && gfc_compare_expr (cp->low, cp->high, INTRINSIC_GT) > 0)
8654 {
8655 if (warn_surprising)
8656 gfc_warning (OPT_Wsurprising,
8657 "Range specification at %L can never be matched",
8658 &cp->where);
8659
8660 cp->unreachable = 1;
8661 seen_unreachable = 1;
8662 }
8663 else
8664 {
8665 /* If the case range can be matched, it can also overlap with
8666 other cases. To make sure it does not, we put it in a
8667 double linked list here. We sort that with a merge sort
8668 later on to detect any overlapping cases. */
8669 if (!head)
8670 {
8671 head = tail = cp;
8672 head->right = head->left = NULL;
8673 }
8674 else
8675 {
8676 tail->right = cp;
8677 tail->right->left = tail;
8678 tail = tail->right;
8679 tail->right = NULL;
8680 }
8681 }
8682 }
8683
8684 /* It there was a failure in the previous case label, give up
8685 for this case label list. Continue with the next block. */
8686 if (!t)
8687 continue;
8688
8689 /* See if any case labels that are unreachable have been seen.
8690 If so, we eliminate them. This is a bit of a kludge because
8691 the case lists for a single case statement (label) is a
8692 single forward linked lists. */
8693 if (seen_unreachable)
8694 {
8695 /* Advance until the first case in the list is reachable. */
8696 while (body->ext.block.case_list != NULL
8697 && body->ext.block.case_list->unreachable)
8698 {
8699 gfc_case *n = body->ext.block.case_list;
8700 body->ext.block.case_list = body->ext.block.case_list->next;
8701 n->next = NULL;
8702 gfc_free_case_list (n);
8703 }
8704
8705 /* Strip all other unreachable cases. */
8706 if (body->ext.block.case_list)
8707 {
8708 for (cp = body->ext.block.case_list; cp && cp->next; cp = cp->next)
8709 {
8710 if (cp->next->unreachable)
8711 {
8712 gfc_case *n = cp->next;
8713 cp->next = cp->next->next;
8714 n->next = NULL;
8715 gfc_free_case_list (n);
8716 }
8717 }
8718 }
8719 }
8720 }
8721
8722 /* See if there were overlapping cases. If the check returns NULL,
8723 there was overlap. In that case we don't do anything. If head
8724 is non-NULL, we prepend the DEFAULT case. The sorted list can
8725 then used during code generation for SELECT CASE constructs with
8726 a case expression of a CHARACTER type. */
8727 if (head)
8728 {
8729 head = check_case_overlap (head);
8730
8731 /* Prepend the default_case if it is there. */
8732 if (head != NULL && default_case)
8733 {
8734 default_case->left = NULL;
8735 default_case->right = head;
8736 head->left = default_case;
8737 }
8738 }
8739
8740 /* Eliminate dead blocks that may be the result if we've seen
8741 unreachable case labels for a block. */
8742 for (body = code; body && body->block; body = body->block)
8743 {
8744 if (body->block->ext.block.case_list == NULL)
8745 {
8746 /* Cut the unreachable block from the code chain. */
8747 gfc_code *c = body->block;
8748 body->block = c->block;
8749
8750 /* Kill the dead block, but not the blocks below it. */
8751 c->block = NULL;
8752 gfc_free_statements (c);
8753 }
8754 }
8755
8756 /* More than two cases is legal but insane for logical selects.
8757 Issue a warning for it. */
8758 if (warn_surprising && type == BT_LOGICAL && ncases > 2)
8759 gfc_warning (OPT_Wsurprising,
8760 "Logical SELECT CASE block at %L has more that two cases",
8761 &code->loc);
8762 }
8763
8764
8765 /* Check if a derived type is extensible. */
8766
8767 bool
8768 gfc_type_is_extensible (gfc_symbol *sym)
8769 {
8770 return !(sym->attr.is_bind_c || sym->attr.sequence
8771 || (sym->attr.is_class
8772 && sym->components->ts.u.derived->attr.unlimited_polymorphic));
8773 }
8774
8775
8776 static void
8777 resolve_types (gfc_namespace *ns);
8778
8779 /* Resolve an associate-name: Resolve target and ensure the type-spec is
8780 correct as well as possibly the array-spec. */
8781
8782 static void
8783 resolve_assoc_var (gfc_symbol* sym, bool resolve_target)
8784 {
8785 gfc_expr* target;
8786
8787 gcc_assert (sym->assoc);
8788 gcc_assert (sym->attr.flavor == FL_VARIABLE);
8789
8790 /* If this is for SELECT TYPE, the target may not yet be set. In that
8791 case, return. Resolution will be called later manually again when
8792 this is done. */
8793 target = sym->assoc->target;
8794 if (!target)
8795 return;
8796 gcc_assert (!sym->assoc->dangling);
8797
8798 if (resolve_target && !gfc_resolve_expr (target))
8799 return;
8800
8801 /* For variable targets, we get some attributes from the target. */
8802 if (target->expr_type == EXPR_VARIABLE)
8803 {
8804 gfc_symbol* tsym;
8805
8806 gcc_assert (target->symtree);
8807 tsym = target->symtree->n.sym;
8808
8809 sym->attr.asynchronous = tsym->attr.asynchronous;
8810 sym->attr.volatile_ = tsym->attr.volatile_;
8811
8812 sym->attr.target = tsym->attr.target
8813 || gfc_expr_attr (target).pointer;
8814 if (is_subref_array (target))
8815 sym->attr.subref_array_pointer = 1;
8816 }
8817
8818 if (target->expr_type == EXPR_NULL)
8819 {
8820 gfc_error ("Selector at %L cannot be NULL()", &target->where);
8821 return;
8822 }
8823 else if (target->ts.type == BT_UNKNOWN)
8824 {
8825 gfc_error ("Selector at %L has no type", &target->where);
8826 return;
8827 }
8828
8829 /* Get type if this was not already set. Note that it can be
8830 some other type than the target in case this is a SELECT TYPE
8831 selector! So we must not update when the type is already there. */
8832 if (sym->ts.type == BT_UNKNOWN)
8833 sym->ts = target->ts;
8834
8835 gcc_assert (sym->ts.type != BT_UNKNOWN);
8836
8837 /* See if this is a valid association-to-variable. */
8838 sym->assoc->variable = (target->expr_type == EXPR_VARIABLE
8839 && !gfc_has_vector_subscript (target));
8840
8841 /* Finally resolve if this is an array or not. */
8842 if (sym->attr.dimension && target->rank == 0)
8843 {
8844 /* primary.c makes the assumption that a reference to an associate
8845 name followed by a left parenthesis is an array reference. */
8846 if (sym->ts.type != BT_CHARACTER)
8847 gfc_error ("Associate-name %qs at %L is used as array",
8848 sym->name, &sym->declared_at);
8849 sym->attr.dimension = 0;
8850 return;
8851 }
8852
8853
8854 /* We cannot deal with class selectors that need temporaries. */
8855 if (target->ts.type == BT_CLASS
8856 && gfc_ref_needs_temporary_p (target->ref))
8857 {
8858 gfc_error ("CLASS selector at %L needs a temporary which is not "
8859 "yet implemented", &target->where);
8860 return;
8861 }
8862
8863 if (target->ts.type == BT_CLASS)
8864 gfc_fix_class_refs (target);
8865
8866 if (target->rank != 0 && !sym->attr.select_rank_temporary)
8867 {
8868 gfc_array_spec *as;
8869 /* The rank may be incorrectly guessed at parsing, therefore make sure
8870 it is corrected now. */
8871 if (sym->ts.type != BT_CLASS && (!sym->as || sym->assoc->rankguessed))
8872 {
8873 if (!sym->as)
8874 sym->as = gfc_get_array_spec ();
8875 as = sym->as;
8876 as->rank = target->rank;
8877 as->type = AS_DEFERRED;
8878 as->corank = gfc_get_corank (target);
8879 sym->attr.dimension = 1;
8880 if (as->corank != 0)
8881 sym->attr.codimension = 1;
8882 }
8883 else if (sym->ts.type == BT_CLASS && (!CLASS_DATA (sym)->as || sym->assoc->rankguessed))
8884 {
8885 if (!CLASS_DATA (sym)->as)
8886 CLASS_DATA (sym)->as = gfc_get_array_spec ();
8887 as = CLASS_DATA (sym)->as;
8888 as->rank = target->rank;
8889 as->type = AS_DEFERRED;
8890 as->corank = gfc_get_corank (target);
8891 CLASS_DATA (sym)->attr.dimension = 1;
8892 if (as->corank != 0)
8893 CLASS_DATA (sym)->attr.codimension = 1;
8894 }
8895 }
8896 else if (!sym->attr.select_rank_temporary)
8897 {
8898 /* target's rank is 0, but the type of the sym is still array valued,
8899 which has to be corrected. */
8900 if (sym->ts.type == BT_CLASS
8901 && CLASS_DATA (sym) && CLASS_DATA (sym)->as)
8902 {
8903 gfc_array_spec *as;
8904 symbol_attribute attr;
8905 /* The associated variable's type is still the array type
8906 correct this now. */
8907 gfc_typespec *ts = &target->ts;
8908 gfc_ref *ref;
8909 gfc_component *c;
8910 for (ref = target->ref; ref != NULL; ref = ref->next)
8911 {
8912 switch (ref->type)
8913 {
8914 case REF_COMPONENT:
8915 ts = &ref->u.c.component->ts;
8916 break;
8917 case REF_ARRAY:
8918 if (ts->type == BT_CLASS)
8919 ts = &ts->u.derived->components->ts;
8920 break;
8921 default:
8922 break;
8923 }
8924 }
8925 /* Create a scalar instance of the current class type. Because the
8926 rank of a class array goes into its name, the type has to be
8927 rebuild. The alternative of (re-)setting just the attributes
8928 and as in the current type, destroys the type also in other
8929 places. */
8930 as = NULL;
8931 sym->ts = *ts;
8932 sym->ts.type = BT_CLASS;
8933 attr = CLASS_DATA (sym)->attr;
8934 attr.class_ok = 0;
8935 attr.associate_var = 1;
8936 attr.dimension = attr.codimension = 0;
8937 attr.class_pointer = 1;
8938 if (!gfc_build_class_symbol (&sym->ts, &attr, &as))
8939 gcc_unreachable ();
8940 /* Make sure the _vptr is set. */
8941 c = gfc_find_component (sym->ts.u.derived, "_vptr", true, true, NULL);
8942 if (c->ts.u.derived == NULL)
8943 c->ts.u.derived = gfc_find_derived_vtab (sym->ts.u.derived);
8944 CLASS_DATA (sym)->attr.pointer = 1;
8945 CLASS_DATA (sym)->attr.class_pointer = 1;
8946 gfc_set_sym_referenced (sym->ts.u.derived);
8947 gfc_commit_symbol (sym->ts.u.derived);
8948 /* _vptr now has the _vtab in it, change it to the _vtype. */
8949 if (c->ts.u.derived->attr.vtab)
8950 c->ts.u.derived = c->ts.u.derived->ts.u.derived;
8951 c->ts.u.derived->ns->types_resolved = 0;
8952 resolve_types (c->ts.u.derived->ns);
8953 }
8954 }
8955
8956 /* Mark this as an associate variable. */
8957 sym->attr.associate_var = 1;
8958
8959 /* Fix up the type-spec for CHARACTER types. */
8960 if (sym->ts.type == BT_CHARACTER && !sym->attr.select_type_temporary)
8961 {
8962 if (!sym->ts.u.cl)
8963 sym->ts.u.cl = target->ts.u.cl;
8964
8965 if (sym->ts.deferred && target->expr_type == EXPR_VARIABLE
8966 && target->symtree->n.sym->attr.dummy
8967 && sym->ts.u.cl == target->ts.u.cl)
8968 {
8969 sym->ts.u.cl = gfc_new_charlen (sym->ns, NULL);
8970 sym->ts.deferred = 1;
8971 }
8972
8973 if (!sym->ts.u.cl->length
8974 && !sym->ts.deferred
8975 && target->expr_type == EXPR_CONSTANT)
8976 {
8977 sym->ts.u.cl->length =
8978 gfc_get_int_expr (gfc_charlen_int_kind, NULL,
8979 target->value.character.length);
8980 }
8981 else if ((!sym->ts.u.cl->length
8982 || sym->ts.u.cl->length->expr_type != EXPR_CONSTANT)
8983 && target->expr_type != EXPR_VARIABLE)
8984 {
8985 sym->ts.u.cl = gfc_new_charlen (sym->ns, NULL);
8986 sym->ts.deferred = 1;
8987
8988 /* This is reset in trans-stmt.c after the assignment
8989 of the target expression to the associate name. */
8990 sym->attr.allocatable = 1;
8991 }
8992 }
8993
8994 /* If the target is a good class object, so is the associate variable. */
8995 if (sym->ts.type == BT_CLASS && gfc_expr_attr (target).class_ok)
8996 sym->attr.class_ok = 1;
8997 }
8998
8999
9000 /* Ensure that SELECT TYPE expressions have the correct rank and a full
9001 array reference, where necessary. The symbols are artificial and so
9002 the dimension attribute and arrayspec can also be set. In addition,
9003 sometimes the expr1 arrives as BT_DERIVED, when the symbol is BT_CLASS.
9004 This is corrected here as well.*/
9005
9006 static void
9007 fixup_array_ref (gfc_expr **expr1, gfc_expr *expr2,
9008 int rank, gfc_ref *ref)
9009 {
9010 gfc_ref *nref = (*expr1)->ref;
9011 gfc_symbol *sym1 = (*expr1)->symtree->n.sym;
9012 gfc_symbol *sym2 = expr2 ? expr2->symtree->n.sym : NULL;
9013 (*expr1)->rank = rank;
9014 if (sym1->ts.type == BT_CLASS)
9015 {
9016 if ((*expr1)->ts.type != BT_CLASS)
9017 (*expr1)->ts = sym1->ts;
9018
9019 CLASS_DATA (sym1)->attr.dimension = 1;
9020 if (CLASS_DATA (sym1)->as == NULL && sym2)
9021 CLASS_DATA (sym1)->as
9022 = gfc_copy_array_spec (CLASS_DATA (sym2)->as);
9023 }
9024 else
9025 {
9026 sym1->attr.dimension = 1;
9027 if (sym1->as == NULL && sym2)
9028 sym1->as = gfc_copy_array_spec (sym2->as);
9029 }
9030
9031 for (; nref; nref = nref->next)
9032 if (nref->next == NULL)
9033 break;
9034
9035 if (ref && nref && nref->type != REF_ARRAY)
9036 nref->next = gfc_copy_ref (ref);
9037 else if (ref && !nref)
9038 (*expr1)->ref = gfc_copy_ref (ref);
9039 }
9040
9041
9042 static gfc_expr *
9043 build_loc_call (gfc_expr *sym_expr)
9044 {
9045 gfc_expr *loc_call;
9046 loc_call = gfc_get_expr ();
9047 loc_call->expr_type = EXPR_FUNCTION;
9048 gfc_get_sym_tree ("_loc", gfc_current_ns, &loc_call->symtree, false);
9049 loc_call->symtree->n.sym->attr.flavor = FL_PROCEDURE;
9050 loc_call->symtree->n.sym->attr.intrinsic = 1;
9051 loc_call->symtree->n.sym->result = loc_call->symtree->n.sym;
9052 gfc_commit_symbol (loc_call->symtree->n.sym);
9053 loc_call->ts.type = BT_INTEGER;
9054 loc_call->ts.kind = gfc_index_integer_kind;
9055 loc_call->value.function.isym = gfc_intrinsic_function_by_id (GFC_ISYM_LOC);
9056 loc_call->value.function.actual = gfc_get_actual_arglist ();
9057 loc_call->value.function.actual->expr = sym_expr;
9058 loc_call->where = sym_expr->where;
9059 return loc_call;
9060 }
9061
9062 /* Resolve a SELECT TYPE statement. */
9063
9064 static void
9065 resolve_select_type (gfc_code *code, gfc_namespace *old_ns)
9066 {
9067 gfc_symbol *selector_type;
9068 gfc_code *body, *new_st, *if_st, *tail;
9069 gfc_code *class_is = NULL, *default_case = NULL;
9070 gfc_case *c;
9071 gfc_symtree *st;
9072 char name[GFC_MAX_SYMBOL_LEN];
9073 gfc_namespace *ns;
9074 int error = 0;
9075 int rank = 0;
9076 gfc_ref* ref = NULL;
9077 gfc_expr *selector_expr = NULL;
9078
9079 ns = code->ext.block.ns;
9080 gfc_resolve (ns);
9081
9082 /* Check for F03:C813. */
9083 if (code->expr1->ts.type != BT_CLASS
9084 && !(code->expr2 && code->expr2->ts.type == BT_CLASS))
9085 {
9086 gfc_error ("Selector shall be polymorphic in SELECT TYPE statement "
9087 "at %L", &code->loc);
9088 return;
9089 }
9090
9091 if (!code->expr1->symtree->n.sym->attr.class_ok)
9092 return;
9093
9094 if (code->expr2)
9095 {
9096 gfc_ref *ref2 = NULL;
9097 for (ref = code->expr2->ref; ref != NULL; ref = ref->next)
9098 if (ref->type == REF_COMPONENT
9099 && ref->u.c.component->ts.type == BT_CLASS)
9100 ref2 = ref;
9101
9102 if (ref2)
9103 {
9104 if (code->expr1->symtree->n.sym->attr.untyped)
9105 code->expr1->symtree->n.sym->ts = ref2->u.c.component->ts;
9106 selector_type = CLASS_DATA (ref2->u.c.component)->ts.u.derived;
9107 }
9108 else
9109 {
9110 if (code->expr1->symtree->n.sym->attr.untyped)
9111 code->expr1->symtree->n.sym->ts = code->expr2->ts;
9112 selector_type = CLASS_DATA (code->expr2)->ts.u.derived;
9113 }
9114
9115 if (code->expr2->rank && CLASS_DATA (code->expr1)->as)
9116 CLASS_DATA (code->expr1)->as->rank = code->expr2->rank;
9117
9118 /* F2008: C803 The selector expression must not be coindexed. */
9119 if (gfc_is_coindexed (code->expr2))
9120 {
9121 gfc_error ("Selector at %L must not be coindexed",
9122 &code->expr2->where);
9123 return;
9124 }
9125
9126 }
9127 else
9128 {
9129 selector_type = CLASS_DATA (code->expr1)->ts.u.derived;
9130
9131 if (gfc_is_coindexed (code->expr1))
9132 {
9133 gfc_error ("Selector at %L must not be coindexed",
9134 &code->expr1->where);
9135 return;
9136 }
9137 }
9138
9139 /* Loop over TYPE IS / CLASS IS cases. */
9140 for (body = code->block; body; body = body->block)
9141 {
9142 c = body->ext.block.case_list;
9143
9144 if (!error)
9145 {
9146 /* Check for repeated cases. */
9147 for (tail = code->block; tail; tail = tail->block)
9148 {
9149 gfc_case *d = tail->ext.block.case_list;
9150 if (tail == body)
9151 break;
9152
9153 if (c->ts.type == d->ts.type
9154 && ((c->ts.type == BT_DERIVED
9155 && c->ts.u.derived && d->ts.u.derived
9156 && !strcmp (c->ts.u.derived->name,
9157 d->ts.u.derived->name))
9158 || c->ts.type == BT_UNKNOWN
9159 || (!(c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9160 && c->ts.kind == d->ts.kind)))
9161 {
9162 gfc_error ("TYPE IS at %L overlaps with TYPE IS at %L",
9163 &c->where, &d->where);
9164 return;
9165 }
9166 }
9167 }
9168
9169 /* Check F03:C815. */
9170 if ((c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9171 && !selector_type->attr.unlimited_polymorphic
9172 && !gfc_type_is_extensible (c->ts.u.derived))
9173 {
9174 gfc_error ("Derived type %qs at %L must be extensible",
9175 c->ts.u.derived->name, &c->where);
9176 error++;
9177 continue;
9178 }
9179
9180 /* Check F03:C816. */
9181 if (c->ts.type != BT_UNKNOWN && !selector_type->attr.unlimited_polymorphic
9182 && ((c->ts.type != BT_DERIVED && c->ts.type != BT_CLASS)
9183 || !gfc_type_is_extension_of (selector_type, c->ts.u.derived)))
9184 {
9185 if (c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9186 gfc_error ("Derived type %qs at %L must be an extension of %qs",
9187 c->ts.u.derived->name, &c->where, selector_type->name);
9188 else
9189 gfc_error ("Unexpected intrinsic type %qs at %L",
9190 gfc_basic_typename (c->ts.type), &c->where);
9191 error++;
9192 continue;
9193 }
9194
9195 /* Check F03:C814. */
9196 if (c->ts.type == BT_CHARACTER
9197 && (c->ts.u.cl->length != NULL || c->ts.deferred))
9198 {
9199 gfc_error ("The type-spec at %L shall specify that each length "
9200 "type parameter is assumed", &c->where);
9201 error++;
9202 continue;
9203 }
9204
9205 /* Intercept the DEFAULT case. */
9206 if (c->ts.type == BT_UNKNOWN)
9207 {
9208 /* Check F03:C818. */
9209 if (default_case)
9210 {
9211 gfc_error ("The DEFAULT CASE at %L cannot be followed "
9212 "by a second DEFAULT CASE at %L",
9213 &default_case->ext.block.case_list->where, &c->where);
9214 error++;
9215 continue;
9216 }
9217
9218 default_case = body;
9219 }
9220 }
9221
9222 if (error > 0)
9223 return;
9224
9225 /* Transform SELECT TYPE statement to BLOCK and associate selector to
9226 target if present. If there are any EXIT statements referring to the
9227 SELECT TYPE construct, this is no problem because the gfc_code
9228 reference stays the same and EXIT is equally possible from the BLOCK
9229 it is changed to. */
9230 code->op = EXEC_BLOCK;
9231 if (code->expr2)
9232 {
9233 gfc_association_list* assoc;
9234
9235 assoc = gfc_get_association_list ();
9236 assoc->st = code->expr1->symtree;
9237 assoc->target = gfc_copy_expr (code->expr2);
9238 assoc->target->where = code->expr2->where;
9239 /* assoc->variable will be set by resolve_assoc_var. */
9240
9241 code->ext.block.assoc = assoc;
9242 code->expr1->symtree->n.sym->assoc = assoc;
9243
9244 resolve_assoc_var (code->expr1->symtree->n.sym, false);
9245 }
9246 else
9247 code->ext.block.assoc = NULL;
9248
9249 /* Ensure that the selector rank and arrayspec are available to
9250 correct expressions in which they might be missing. */
9251 if (code->expr2 && code->expr2->rank)
9252 {
9253 rank = code->expr2->rank;
9254 for (ref = code->expr2->ref; ref; ref = ref->next)
9255 if (ref->next == NULL)
9256 break;
9257 if (ref && ref->type == REF_ARRAY)
9258 ref = gfc_copy_ref (ref);
9259
9260 /* Fixup expr1 if necessary. */
9261 if (rank)
9262 fixup_array_ref (&code->expr1, code->expr2, rank, ref);
9263 }
9264 else if (code->expr1->rank)
9265 {
9266 rank = code->expr1->rank;
9267 for (ref = code->expr1->ref; ref; ref = ref->next)
9268 if (ref->next == NULL)
9269 break;
9270 if (ref && ref->type == REF_ARRAY)
9271 ref = gfc_copy_ref (ref);
9272 }
9273
9274 /* Add EXEC_SELECT to switch on type. */
9275 new_st = gfc_get_code (code->op);
9276 new_st->expr1 = code->expr1;
9277 new_st->expr2 = code->expr2;
9278 new_st->block = code->block;
9279 code->expr1 = code->expr2 = NULL;
9280 code->block = NULL;
9281 if (!ns->code)
9282 ns->code = new_st;
9283 else
9284 ns->code->next = new_st;
9285 code = new_st;
9286 code->op = EXEC_SELECT_TYPE;
9287
9288 /* Use the intrinsic LOC function to generate an integer expression
9289 for the vtable of the selector. Note that the rank of the selector
9290 expression has to be set to zero. */
9291 gfc_add_vptr_component (code->expr1);
9292 code->expr1->rank = 0;
9293 code->expr1 = build_loc_call (code->expr1);
9294 selector_expr = code->expr1->value.function.actual->expr;
9295
9296 /* Loop over TYPE IS / CLASS IS cases. */
9297 for (body = code->block; body; body = body->block)
9298 {
9299 gfc_symbol *vtab;
9300 gfc_expr *e;
9301 c = body->ext.block.case_list;
9302
9303 /* Generate an index integer expression for address of the
9304 TYPE/CLASS vtable and store it in c->low. The hash expression
9305 is stored in c->high and is used to resolve intrinsic cases. */
9306 if (c->ts.type != BT_UNKNOWN)
9307 {
9308 if (c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9309 {
9310 vtab = gfc_find_derived_vtab (c->ts.u.derived);
9311 gcc_assert (vtab);
9312 c->high = gfc_get_int_expr (gfc_integer_4_kind, NULL,
9313 c->ts.u.derived->hash_value);
9314 }
9315 else
9316 {
9317 vtab = gfc_find_vtab (&c->ts);
9318 gcc_assert (vtab && CLASS_DATA (vtab)->initializer);
9319 e = CLASS_DATA (vtab)->initializer;
9320 c->high = gfc_copy_expr (e);
9321 if (c->high->ts.kind != gfc_integer_4_kind)
9322 {
9323 gfc_typespec ts;
9324 ts.kind = gfc_integer_4_kind;
9325 ts.type = BT_INTEGER;
9326 gfc_convert_type_warn (c->high, &ts, 2, 0);
9327 }
9328 }
9329
9330 e = gfc_lval_expr_from_sym (vtab);
9331 c->low = build_loc_call (e);
9332 }
9333 else
9334 continue;
9335
9336 /* Associate temporary to selector. This should only be done
9337 when this case is actually true, so build a new ASSOCIATE
9338 that does precisely this here (instead of using the
9339 'global' one). */
9340
9341 if (c->ts.type == BT_CLASS)
9342 sprintf (name, "__tmp_class_%s", c->ts.u.derived->name);
9343 else if (c->ts.type == BT_DERIVED)
9344 sprintf (name, "__tmp_type_%s", c->ts.u.derived->name);
9345 else if (c->ts.type == BT_CHARACTER)
9346 {
9347 HOST_WIDE_INT charlen = 0;
9348 if (c->ts.u.cl && c->ts.u.cl->length
9349 && c->ts.u.cl->length->expr_type == EXPR_CONSTANT)
9350 charlen = gfc_mpz_get_hwi (c->ts.u.cl->length->value.integer);
9351 snprintf (name, sizeof (name),
9352 "__tmp_%s_" HOST_WIDE_INT_PRINT_DEC "_%d",
9353 gfc_basic_typename (c->ts.type), charlen, c->ts.kind);
9354 }
9355 else
9356 sprintf (name, "__tmp_%s_%d", gfc_basic_typename (c->ts.type),
9357 c->ts.kind);
9358
9359 st = gfc_find_symtree (ns->sym_root, name);
9360 gcc_assert (st->n.sym->assoc);
9361 st->n.sym->assoc->target = gfc_get_variable_expr (selector_expr->symtree);
9362 st->n.sym->assoc->target->where = selector_expr->where;
9363 if (c->ts.type != BT_CLASS && c->ts.type != BT_UNKNOWN)
9364 {
9365 gfc_add_data_component (st->n.sym->assoc->target);
9366 /* Fixup the target expression if necessary. */
9367 if (rank)
9368 fixup_array_ref (&st->n.sym->assoc->target, NULL, rank, ref);
9369 }
9370
9371 new_st = gfc_get_code (EXEC_BLOCK);
9372 new_st->ext.block.ns = gfc_build_block_ns (ns);
9373 new_st->ext.block.ns->code = body->next;
9374 body->next = new_st;
9375
9376 /* Chain in the new list only if it is marked as dangling. Otherwise
9377 there is a CASE label overlap and this is already used. Just ignore,
9378 the error is diagnosed elsewhere. */
9379 if (st->n.sym->assoc->dangling)
9380 {
9381 new_st->ext.block.assoc = st->n.sym->assoc;
9382 st->n.sym->assoc->dangling = 0;
9383 }
9384
9385 resolve_assoc_var (st->n.sym, false);
9386 }
9387
9388 /* Take out CLASS IS cases for separate treatment. */
9389 body = code;
9390 while (body && body->block)
9391 {
9392 if (body->block->ext.block.case_list->ts.type == BT_CLASS)
9393 {
9394 /* Add to class_is list. */
9395 if (class_is == NULL)
9396 {
9397 class_is = body->block;
9398 tail = class_is;
9399 }
9400 else
9401 {
9402 for (tail = class_is; tail->block; tail = tail->block) ;
9403 tail->block = body->block;
9404 tail = tail->block;
9405 }
9406 /* Remove from EXEC_SELECT list. */
9407 body->block = body->block->block;
9408 tail->block = NULL;
9409 }
9410 else
9411 body = body->block;
9412 }
9413
9414 if (class_is)
9415 {
9416 gfc_symbol *vtab;
9417
9418 if (!default_case)
9419 {
9420 /* Add a default case to hold the CLASS IS cases. */
9421 for (tail = code; tail->block; tail = tail->block) ;
9422 tail->block = gfc_get_code (EXEC_SELECT_TYPE);
9423 tail = tail->block;
9424 tail->ext.block.case_list = gfc_get_case ();
9425 tail->ext.block.case_list->ts.type = BT_UNKNOWN;
9426 tail->next = NULL;
9427 default_case = tail;
9428 }
9429
9430 /* More than one CLASS IS block? */
9431 if (class_is->block)
9432 {
9433 gfc_code **c1,*c2;
9434 bool swapped;
9435 /* Sort CLASS IS blocks by extension level. */
9436 do
9437 {
9438 swapped = false;
9439 for (c1 = &class_is; (*c1) && (*c1)->block; c1 = &((*c1)->block))
9440 {
9441 c2 = (*c1)->block;
9442 /* F03:C817 (check for doubles). */
9443 if ((*c1)->ext.block.case_list->ts.u.derived->hash_value
9444 == c2->ext.block.case_list->ts.u.derived->hash_value)
9445 {
9446 gfc_error ("Double CLASS IS block in SELECT TYPE "
9447 "statement at %L",
9448 &c2->ext.block.case_list->where);
9449 return;
9450 }
9451 if ((*c1)->ext.block.case_list->ts.u.derived->attr.extension
9452 < c2->ext.block.case_list->ts.u.derived->attr.extension)
9453 {
9454 /* Swap. */
9455 (*c1)->block = c2->block;
9456 c2->block = *c1;
9457 *c1 = c2;
9458 swapped = true;
9459 }
9460 }
9461 }
9462 while (swapped);
9463 }
9464
9465 /* Generate IF chain. */
9466 if_st = gfc_get_code (EXEC_IF);
9467 new_st = if_st;
9468 for (body = class_is; body; body = body->block)
9469 {
9470 new_st->block = gfc_get_code (EXEC_IF);
9471 new_st = new_st->block;
9472 /* Set up IF condition: Call _gfortran_is_extension_of. */
9473 new_st->expr1 = gfc_get_expr ();
9474 new_st->expr1->expr_type = EXPR_FUNCTION;
9475 new_st->expr1->ts.type = BT_LOGICAL;
9476 new_st->expr1->ts.kind = 4;
9477 new_st->expr1->value.function.name = gfc_get_string (PREFIX ("is_extension_of"));
9478 new_st->expr1->value.function.isym = XCNEW (gfc_intrinsic_sym);
9479 new_st->expr1->value.function.isym->id = GFC_ISYM_EXTENDS_TYPE_OF;
9480 /* Set up arguments. */
9481 new_st->expr1->value.function.actual = gfc_get_actual_arglist ();
9482 new_st->expr1->value.function.actual->expr = gfc_get_variable_expr (selector_expr->symtree);
9483 new_st->expr1->value.function.actual->expr->where = code->loc;
9484 new_st->expr1->where = code->loc;
9485 gfc_add_vptr_component (new_st->expr1->value.function.actual->expr);
9486 vtab = gfc_find_derived_vtab (body->ext.block.case_list->ts.u.derived);
9487 st = gfc_find_symtree (vtab->ns->sym_root, vtab->name);
9488 new_st->expr1->value.function.actual->next = gfc_get_actual_arglist ();
9489 new_st->expr1->value.function.actual->next->expr = gfc_get_variable_expr (st);
9490 new_st->expr1->value.function.actual->next->expr->where = code->loc;
9491 new_st->next = body->next;
9492 }
9493 if (default_case->next)
9494 {
9495 new_st->block = gfc_get_code (EXEC_IF);
9496 new_st = new_st->block;
9497 new_st->next = default_case->next;
9498 }
9499
9500 /* Replace CLASS DEFAULT code by the IF chain. */
9501 default_case->next = if_st;
9502 }
9503
9504 /* Resolve the internal code. This cannot be done earlier because
9505 it requires that the sym->assoc of selectors is set already. */
9506 gfc_current_ns = ns;
9507 gfc_resolve_blocks (code->block, gfc_current_ns);
9508 gfc_current_ns = old_ns;
9509
9510 if (ref)
9511 free (ref);
9512 }
9513
9514
9515 /* Resolve a SELECT RANK statement. */
9516
9517 static void
9518 resolve_select_rank (gfc_code *code, gfc_namespace *old_ns)
9519 {
9520 gfc_namespace *ns;
9521 gfc_code *body, *new_st, *tail;
9522 gfc_case *c;
9523 char tname[GFC_MAX_SYMBOL_LEN];
9524 char name[2 * GFC_MAX_SYMBOL_LEN];
9525 gfc_symtree *st;
9526 gfc_expr *selector_expr = NULL;
9527 int case_value;
9528 HOST_WIDE_INT charlen = 0;
9529
9530 ns = code->ext.block.ns;
9531 gfc_resolve (ns);
9532
9533 code->op = EXEC_BLOCK;
9534 if (code->expr2)
9535 {
9536 gfc_association_list* assoc;
9537
9538 assoc = gfc_get_association_list ();
9539 assoc->st = code->expr1->symtree;
9540 assoc->target = gfc_copy_expr (code->expr2);
9541 assoc->target->where = code->expr2->where;
9542 /* assoc->variable will be set by resolve_assoc_var. */
9543
9544 code->ext.block.assoc = assoc;
9545 code->expr1->symtree->n.sym->assoc = assoc;
9546
9547 resolve_assoc_var (code->expr1->symtree->n.sym, false);
9548 }
9549 else
9550 code->ext.block.assoc = NULL;
9551
9552 /* Loop over RANK cases. Note that returning on the errors causes a
9553 cascade of further errors because the case blocks do not compile
9554 correctly. */
9555 for (body = code->block; body; body = body->block)
9556 {
9557 c = body->ext.block.case_list;
9558 if (c->low)
9559 case_value = (int) mpz_get_si (c->low->value.integer);
9560 else
9561 case_value = -2;
9562
9563 /* Check for repeated cases. */
9564 for (tail = code->block; tail; tail = tail->block)
9565 {
9566 gfc_case *d = tail->ext.block.case_list;
9567 int case_value2;
9568
9569 if (tail == body)
9570 break;
9571
9572 /* Check F2018: C1153. */
9573 if (!c->low && !d->low)
9574 gfc_error ("RANK DEFAULT at %L is repeated at %L",
9575 &c->where, &d->where);
9576
9577 if (!c->low || !d->low)
9578 continue;
9579
9580 /* Check F2018: C1153. */
9581 case_value2 = (int) mpz_get_si (d->low->value.integer);
9582 if ((case_value == case_value2) && case_value == -1)
9583 gfc_error ("RANK (*) at %L is repeated at %L",
9584 &c->where, &d->where);
9585 else if (case_value == case_value2)
9586 gfc_error ("RANK (%i) at %L is repeated at %L",
9587 case_value, &c->where, &d->where);
9588 }
9589
9590 if (!c->low)
9591 continue;
9592
9593 /* Check F2018: C1155. */
9594 if (case_value == -1 && (gfc_expr_attr (code->expr1).allocatable
9595 || gfc_expr_attr (code->expr1).pointer))
9596 gfc_error ("RANK (*) at %L cannot be used with the pointer or "
9597 "allocatable selector at %L", &c->where, &code->expr1->where);
9598
9599 if (case_value == -1 && (gfc_expr_attr (code->expr1).allocatable
9600 || gfc_expr_attr (code->expr1).pointer))
9601 gfc_error ("RANK (*) at %L cannot be used with the pointer or "
9602 "allocatable selector at %L", &c->where, &code->expr1->where);
9603 }
9604
9605 /* Add EXEC_SELECT to switch on rank. */
9606 new_st = gfc_get_code (code->op);
9607 new_st->expr1 = code->expr1;
9608 new_st->expr2 = code->expr2;
9609 new_st->block = code->block;
9610 code->expr1 = code->expr2 = NULL;
9611 code->block = NULL;
9612 if (!ns->code)
9613 ns->code = new_st;
9614 else
9615 ns->code->next = new_st;
9616 code = new_st;
9617 code->op = EXEC_SELECT_RANK;
9618
9619 selector_expr = code->expr1;
9620
9621 /* Loop over SELECT RANK cases. */
9622 for (body = code->block; body; body = body->block)
9623 {
9624 c = body->ext.block.case_list;
9625 int case_value;
9626
9627 /* Pass on the default case. */
9628 if (c->low == NULL)
9629 continue;
9630
9631 /* Associate temporary to selector. This should only be done
9632 when this case is actually true, so build a new ASSOCIATE
9633 that does precisely this here (instead of using the
9634 'global' one). */
9635 if (c->ts.type == BT_CHARACTER && c->ts.u.cl && c->ts.u.cl->length
9636 && c->ts.u.cl->length->expr_type == EXPR_CONSTANT)
9637 charlen = gfc_mpz_get_hwi (c->ts.u.cl->length->value.integer);
9638
9639 if (c->ts.type == BT_CLASS)
9640 sprintf (tname, "class_%s", c->ts.u.derived->name);
9641 else if (c->ts.type == BT_DERIVED)
9642 sprintf (tname, "type_%s", c->ts.u.derived->name);
9643 else if (c->ts.type != BT_CHARACTER)
9644 sprintf (tname, "%s_%d", gfc_basic_typename (c->ts.type), c->ts.kind);
9645 else
9646 sprintf (tname, "%s_" HOST_WIDE_INT_PRINT_DEC "_%d",
9647 gfc_basic_typename (c->ts.type), charlen, c->ts.kind);
9648
9649 case_value = (int) mpz_get_si (c->low->value.integer);
9650 if (case_value >= 0)
9651 sprintf (name, "__tmp_%s_rank_%d", tname, case_value);
9652 else
9653 sprintf (name, "__tmp_%s_rank_m%d", tname, -case_value);
9654
9655 st = gfc_find_symtree (ns->sym_root, name);
9656 gcc_assert (st->n.sym->assoc);
9657
9658 st->n.sym->assoc->target = gfc_get_variable_expr (selector_expr->symtree);
9659 st->n.sym->assoc->target->where = selector_expr->where;
9660
9661 new_st = gfc_get_code (EXEC_BLOCK);
9662 new_st->ext.block.ns = gfc_build_block_ns (ns);
9663 new_st->ext.block.ns->code = body->next;
9664 body->next = new_st;
9665
9666 /* Chain in the new list only if it is marked as dangling. Otherwise
9667 there is a CASE label overlap and this is already used. Just ignore,
9668 the error is diagnosed elsewhere. */
9669 if (st->n.sym->assoc->dangling)
9670 {
9671 new_st->ext.block.assoc = st->n.sym->assoc;
9672 st->n.sym->assoc->dangling = 0;
9673 }
9674
9675 resolve_assoc_var (st->n.sym, false);
9676 }
9677
9678 gfc_current_ns = ns;
9679 gfc_resolve_blocks (code->block, gfc_current_ns);
9680 gfc_current_ns = old_ns;
9681 }
9682
9683
9684 /* Resolve a transfer statement. This is making sure that:
9685 -- a derived type being transferred has only non-pointer components
9686 -- a derived type being transferred doesn't have private components, unless
9687 it's being transferred from the module where the type was defined
9688 -- we're not trying to transfer a whole assumed size array. */
9689
9690 static void
9691 resolve_transfer (gfc_code *code)
9692 {
9693 gfc_symbol *sym, *derived;
9694 gfc_ref *ref;
9695 gfc_expr *exp;
9696 bool write = false;
9697 bool formatted = false;
9698 gfc_dt *dt = code->ext.dt;
9699 gfc_symbol *dtio_sub = NULL;
9700
9701 exp = code->expr1;
9702
9703 while (exp != NULL && exp->expr_type == EXPR_OP
9704 && exp->value.op.op == INTRINSIC_PARENTHESES)
9705 exp = exp->value.op.op1;
9706
9707 if (exp && exp->expr_type == EXPR_NULL
9708 && code->ext.dt)
9709 {
9710 gfc_error ("Invalid context for NULL () intrinsic at %L",
9711 &exp->where);
9712 return;
9713 }
9714
9715 if (exp == NULL || (exp->expr_type != EXPR_VARIABLE
9716 && exp->expr_type != EXPR_FUNCTION
9717 && exp->expr_type != EXPR_STRUCTURE))
9718 return;
9719
9720 /* If we are reading, the variable will be changed. Note that
9721 code->ext.dt may be NULL if the TRANSFER is related to
9722 an INQUIRE statement -- but in this case, we are not reading, either. */
9723 if (dt && dt->dt_io_kind->value.iokind == M_READ
9724 && !gfc_check_vardef_context (exp, false, false, false,
9725 _("item in READ")))
9726 return;
9727
9728 const gfc_typespec *ts = exp->expr_type == EXPR_STRUCTURE
9729 || exp->expr_type == EXPR_FUNCTION
9730 ? &exp->ts : &exp->symtree->n.sym->ts;
9731
9732 /* Go to actual component transferred. */
9733 for (ref = exp->ref; ref; ref = ref->next)
9734 if (ref->type == REF_COMPONENT)
9735 ts = &ref->u.c.component->ts;
9736
9737 if (dt && dt->dt_io_kind->value.iokind != M_INQUIRE
9738 && (ts->type == BT_DERIVED || ts->type == BT_CLASS))
9739 {
9740 derived = ts->u.derived;
9741
9742 /* Determine when to use the formatted DTIO procedure. */
9743 if (dt && (dt->format_expr || dt->format_label))
9744 formatted = true;
9745
9746 write = dt->dt_io_kind->value.iokind == M_WRITE
9747 || dt->dt_io_kind->value.iokind == M_PRINT;
9748 dtio_sub = gfc_find_specific_dtio_proc (derived, write, formatted);
9749
9750 if (dtio_sub != NULL && exp->expr_type == EXPR_VARIABLE)
9751 {
9752 dt->udtio = exp;
9753 sym = exp->symtree->n.sym->ns->proc_name;
9754 /* Check to see if this is a nested DTIO call, with the
9755 dummy as the io-list object. */
9756 if (sym && sym == dtio_sub && sym->formal
9757 && sym->formal->sym == exp->symtree->n.sym
9758 && exp->ref == NULL)
9759 {
9760 if (!sym->attr.recursive)
9761 {
9762 gfc_error ("DTIO %s procedure at %L must be recursive",
9763 sym->name, &sym->declared_at);
9764 return;
9765 }
9766 }
9767 }
9768 }
9769
9770 if (ts->type == BT_CLASS && dtio_sub == NULL)
9771 {
9772 gfc_error ("Data transfer element at %L cannot be polymorphic unless "
9773 "it is processed by a defined input/output procedure",
9774 &code->loc);
9775 return;
9776 }
9777
9778 if (ts->type == BT_DERIVED)
9779 {
9780 /* Check that transferred derived type doesn't contain POINTER
9781 components unless it is processed by a defined input/output
9782 procedure". */
9783 if (ts->u.derived->attr.pointer_comp && dtio_sub == NULL)
9784 {
9785 gfc_error ("Data transfer element at %L cannot have POINTER "
9786 "components unless it is processed by a defined "
9787 "input/output procedure", &code->loc);
9788 return;
9789 }
9790
9791 /* F08:C935. */
9792 if (ts->u.derived->attr.proc_pointer_comp)
9793 {
9794 gfc_error ("Data transfer element at %L cannot have "
9795 "procedure pointer components", &code->loc);
9796 return;
9797 }
9798
9799 if (ts->u.derived->attr.alloc_comp && dtio_sub == NULL)
9800 {
9801 gfc_error ("Data transfer element at %L cannot have ALLOCATABLE "
9802 "components unless it is processed by a defined "
9803 "input/output procedure", &code->loc);
9804 return;
9805 }
9806
9807 /* C_PTR and C_FUNPTR have private components which means they cannot
9808 be printed. However, if -std=gnu and not -pedantic, allow
9809 the component to be printed to help debugging. */
9810 if (ts->u.derived->ts.f90_type == BT_VOID)
9811 {
9812 if (!gfc_notify_std (GFC_STD_GNU, "Data transfer element at %L "
9813 "cannot have PRIVATE components", &code->loc))
9814 return;
9815 }
9816 else if (derived_inaccessible (ts->u.derived) && dtio_sub == NULL)
9817 {
9818 gfc_error ("Data transfer element at %L cannot have "
9819 "PRIVATE components unless it is processed by "
9820 "a defined input/output procedure", &code->loc);
9821 return;
9822 }
9823 }
9824
9825 if (exp->expr_type == EXPR_STRUCTURE)
9826 return;
9827
9828 sym = exp->symtree->n.sym;
9829
9830 if (sym->as != NULL && sym->as->type == AS_ASSUMED_SIZE && exp->ref
9831 && exp->ref->type == REF_ARRAY && exp->ref->u.ar.type == AR_FULL)
9832 {
9833 gfc_error ("Data transfer element at %L cannot be a full reference to "
9834 "an assumed-size array", &code->loc);
9835 return;
9836 }
9837
9838 if (async_io_dt && exp->expr_type == EXPR_VARIABLE)
9839 exp->symtree->n.sym->attr.asynchronous = 1;
9840 }
9841
9842
9843 /*********** Toplevel code resolution subroutines ***********/
9844
9845 /* Find the set of labels that are reachable from this block. We also
9846 record the last statement in each block. */
9847
9848 static void
9849 find_reachable_labels (gfc_code *block)
9850 {
9851 gfc_code *c;
9852
9853 if (!block)
9854 return;
9855
9856 cs_base->reachable_labels = bitmap_alloc (&labels_obstack);
9857
9858 /* Collect labels in this block. We don't keep those corresponding
9859 to END {IF|SELECT}, these are checked in resolve_branch by going
9860 up through the code_stack. */
9861 for (c = block; c; c = c->next)
9862 {
9863 if (c->here && c->op != EXEC_END_NESTED_BLOCK)
9864 bitmap_set_bit (cs_base->reachable_labels, c->here->value);
9865 }
9866
9867 /* Merge with labels from parent block. */
9868 if (cs_base->prev)
9869 {
9870 gcc_assert (cs_base->prev->reachable_labels);
9871 bitmap_ior_into (cs_base->reachable_labels,
9872 cs_base->prev->reachable_labels);
9873 }
9874 }
9875
9876
9877 static void
9878 resolve_lock_unlock_event (gfc_code *code)
9879 {
9880 if (code->expr1->expr_type == EXPR_FUNCTION
9881 && code->expr1->value.function.isym
9882 && code->expr1->value.function.isym->id == GFC_ISYM_CAF_GET)
9883 remove_caf_get_intrinsic (code->expr1);
9884
9885 if ((code->op == EXEC_LOCK || code->op == EXEC_UNLOCK)
9886 && (code->expr1->ts.type != BT_DERIVED
9887 || code->expr1->expr_type != EXPR_VARIABLE
9888 || code->expr1->ts.u.derived->from_intmod != INTMOD_ISO_FORTRAN_ENV
9889 || code->expr1->ts.u.derived->intmod_sym_id != ISOFORTRAN_LOCK_TYPE
9890 || code->expr1->rank != 0
9891 || (!gfc_is_coarray (code->expr1) &&
9892 !gfc_is_coindexed (code->expr1))))
9893 gfc_error ("Lock variable at %L must be a scalar of type LOCK_TYPE",
9894 &code->expr1->where);
9895 else if ((code->op == EXEC_EVENT_POST || code->op == EXEC_EVENT_WAIT)
9896 && (code->expr1->ts.type != BT_DERIVED
9897 || code->expr1->expr_type != EXPR_VARIABLE
9898 || code->expr1->ts.u.derived->from_intmod
9899 != INTMOD_ISO_FORTRAN_ENV
9900 || code->expr1->ts.u.derived->intmod_sym_id
9901 != ISOFORTRAN_EVENT_TYPE
9902 || code->expr1->rank != 0))
9903 gfc_error ("Event variable at %L must be a scalar of type EVENT_TYPE",
9904 &code->expr1->where);
9905 else if (code->op == EXEC_EVENT_POST && !gfc_is_coarray (code->expr1)
9906 && !gfc_is_coindexed (code->expr1))
9907 gfc_error ("Event variable argument at %L must be a coarray or coindexed",
9908 &code->expr1->where);
9909 else if (code->op == EXEC_EVENT_WAIT && !gfc_is_coarray (code->expr1))
9910 gfc_error ("Event variable argument at %L must be a coarray but not "
9911 "coindexed", &code->expr1->where);
9912
9913 /* Check STAT. */
9914 if (code->expr2
9915 && (code->expr2->ts.type != BT_INTEGER || code->expr2->rank != 0
9916 || code->expr2->expr_type != EXPR_VARIABLE))
9917 gfc_error ("STAT= argument at %L must be a scalar INTEGER variable",
9918 &code->expr2->where);
9919
9920 if (code->expr2
9921 && !gfc_check_vardef_context (code->expr2, false, false, false,
9922 _("STAT variable")))
9923 return;
9924
9925 /* Check ERRMSG. */
9926 if (code->expr3
9927 && (code->expr3->ts.type != BT_CHARACTER || code->expr3->rank != 0
9928 || code->expr3->expr_type != EXPR_VARIABLE))
9929 gfc_error ("ERRMSG= argument at %L must be a scalar CHARACTER variable",
9930 &code->expr3->where);
9931
9932 if (code->expr3
9933 && !gfc_check_vardef_context (code->expr3, false, false, false,
9934 _("ERRMSG variable")))
9935 return;
9936
9937 /* Check for LOCK the ACQUIRED_LOCK. */
9938 if (code->op != EXEC_EVENT_WAIT && code->expr4
9939 && (code->expr4->ts.type != BT_LOGICAL || code->expr4->rank != 0
9940 || code->expr4->expr_type != EXPR_VARIABLE))
9941 gfc_error ("ACQUIRED_LOCK= argument at %L must be a scalar LOGICAL "
9942 "variable", &code->expr4->where);
9943
9944 if (code->op != EXEC_EVENT_WAIT && code->expr4
9945 && !gfc_check_vardef_context (code->expr4, false, false, false,
9946 _("ACQUIRED_LOCK variable")))
9947 return;
9948
9949 /* Check for EVENT WAIT the UNTIL_COUNT. */
9950 if (code->op == EXEC_EVENT_WAIT && code->expr4)
9951 {
9952 if (!gfc_resolve_expr (code->expr4) || code->expr4->ts.type != BT_INTEGER
9953 || code->expr4->rank != 0)
9954 gfc_error ("UNTIL_COUNT= argument at %L must be a scalar INTEGER "
9955 "expression", &code->expr4->where);
9956 }
9957 }
9958
9959
9960 static void
9961 resolve_critical (gfc_code *code)
9962 {
9963 gfc_symtree *symtree;
9964 gfc_symbol *lock_type;
9965 char name[GFC_MAX_SYMBOL_LEN];
9966 static int serial = 0;
9967
9968 if (flag_coarray != GFC_FCOARRAY_LIB)
9969 return;
9970
9971 symtree = gfc_find_symtree (gfc_current_ns->sym_root,
9972 GFC_PREFIX ("lock_type"));
9973 if (symtree)
9974 lock_type = symtree->n.sym;
9975 else
9976 {
9977 if (gfc_get_sym_tree (GFC_PREFIX ("lock_type"), gfc_current_ns, &symtree,
9978 false) != 0)
9979 gcc_unreachable ();
9980 lock_type = symtree->n.sym;
9981 lock_type->attr.flavor = FL_DERIVED;
9982 lock_type->attr.zero_comp = 1;
9983 lock_type->from_intmod = INTMOD_ISO_FORTRAN_ENV;
9984 lock_type->intmod_sym_id = ISOFORTRAN_LOCK_TYPE;
9985 }
9986
9987 sprintf(name, GFC_PREFIX ("lock_var") "%d",serial++);
9988 if (gfc_get_sym_tree (name, gfc_current_ns, &symtree, false) != 0)
9989 gcc_unreachable ();
9990
9991 code->resolved_sym = symtree->n.sym;
9992 symtree->n.sym->attr.flavor = FL_VARIABLE;
9993 symtree->n.sym->attr.referenced = 1;
9994 symtree->n.sym->attr.artificial = 1;
9995 symtree->n.sym->attr.codimension = 1;
9996 symtree->n.sym->ts.type = BT_DERIVED;
9997 symtree->n.sym->ts.u.derived = lock_type;
9998 symtree->n.sym->as = gfc_get_array_spec ();
9999 symtree->n.sym->as->corank = 1;
10000 symtree->n.sym->as->type = AS_EXPLICIT;
10001 symtree->n.sym->as->cotype = AS_EXPLICIT;
10002 symtree->n.sym->as->lower[0] = gfc_get_int_expr (gfc_default_integer_kind,
10003 NULL, 1);
10004 gfc_commit_symbols();
10005 }
10006
10007
10008 static void
10009 resolve_sync (gfc_code *code)
10010 {
10011 /* Check imageset. The * case matches expr1 == NULL. */
10012 if (code->expr1)
10013 {
10014 if (code->expr1->ts.type != BT_INTEGER || code->expr1->rank > 1)
10015 gfc_error ("Imageset argument at %L must be a scalar or rank-1 "
10016 "INTEGER expression", &code->expr1->where);
10017 if (code->expr1->expr_type == EXPR_CONSTANT && code->expr1->rank == 0
10018 && mpz_cmp_si (code->expr1->value.integer, 1) < 0)
10019 gfc_error ("Imageset argument at %L must between 1 and num_images()",
10020 &code->expr1->where);
10021 else if (code->expr1->expr_type == EXPR_ARRAY
10022 && gfc_simplify_expr (code->expr1, 0))
10023 {
10024 gfc_constructor *cons;
10025 cons = gfc_constructor_first (code->expr1->value.constructor);
10026 for (; cons; cons = gfc_constructor_next (cons))
10027 if (cons->expr->expr_type == EXPR_CONSTANT
10028 && mpz_cmp_si (cons->expr->value.integer, 1) < 0)
10029 gfc_error ("Imageset argument at %L must between 1 and "
10030 "num_images()", &cons->expr->where);
10031 }
10032 }
10033
10034 /* Check STAT. */
10035 gfc_resolve_expr (code->expr2);
10036 if (code->expr2
10037 && (code->expr2->ts.type != BT_INTEGER || code->expr2->rank != 0
10038 || code->expr2->expr_type != EXPR_VARIABLE))
10039 gfc_error ("STAT= argument at %L must be a scalar INTEGER variable",
10040 &code->expr2->where);
10041
10042 /* Check ERRMSG. */
10043 gfc_resolve_expr (code->expr3);
10044 if (code->expr3
10045 && (code->expr3->ts.type != BT_CHARACTER || code->expr3->rank != 0
10046 || code->expr3->expr_type != EXPR_VARIABLE))
10047 gfc_error ("ERRMSG= argument at %L must be a scalar CHARACTER variable",
10048 &code->expr3->where);
10049 }
10050
10051
10052 /* Given a branch to a label, see if the branch is conforming.
10053 The code node describes where the branch is located. */
10054
10055 static void
10056 resolve_branch (gfc_st_label *label, gfc_code *code)
10057 {
10058 code_stack *stack;
10059
10060 if (label == NULL)
10061 return;
10062
10063 /* Step one: is this a valid branching target? */
10064
10065 if (label->defined == ST_LABEL_UNKNOWN)
10066 {
10067 gfc_error ("Label %d referenced at %L is never defined", label->value,
10068 &code->loc);
10069 return;
10070 }
10071
10072 if (label->defined != ST_LABEL_TARGET && label->defined != ST_LABEL_DO_TARGET)
10073 {
10074 gfc_error ("Statement at %L is not a valid branch target statement "
10075 "for the branch statement at %L", &label->where, &code->loc);
10076 return;
10077 }
10078
10079 /* Step two: make sure this branch is not a branch to itself ;-) */
10080
10081 if (code->here == label)
10082 {
10083 gfc_warning (0,
10084 "Branch at %L may result in an infinite loop", &code->loc);
10085 return;
10086 }
10087
10088 /* Step three: See if the label is in the same block as the
10089 branching statement. The hard work has been done by setting up
10090 the bitmap reachable_labels. */
10091
10092 if (bitmap_bit_p (cs_base->reachable_labels, label->value))
10093 {
10094 /* Check now whether there is a CRITICAL construct; if so, check
10095 whether the label is still visible outside of the CRITICAL block,
10096 which is invalid. */
10097 for (stack = cs_base; stack; stack = stack->prev)
10098 {
10099 if (stack->current->op == EXEC_CRITICAL
10100 && bitmap_bit_p (stack->reachable_labels, label->value))
10101 gfc_error ("GOTO statement at %L leaves CRITICAL construct for "
10102 "label at %L", &code->loc, &label->where);
10103 else if (stack->current->op == EXEC_DO_CONCURRENT
10104 && bitmap_bit_p (stack->reachable_labels, label->value))
10105 gfc_error ("GOTO statement at %L leaves DO CONCURRENT construct "
10106 "for label at %L", &code->loc, &label->where);
10107 }
10108
10109 return;
10110 }
10111
10112 /* Step four: If we haven't found the label in the bitmap, it may
10113 still be the label of the END of the enclosing block, in which
10114 case we find it by going up the code_stack. */
10115
10116 for (stack = cs_base; stack; stack = stack->prev)
10117 {
10118 if (stack->current->next && stack->current->next->here == label)
10119 break;
10120 if (stack->current->op == EXEC_CRITICAL)
10121 {
10122 /* Note: A label at END CRITICAL does not leave the CRITICAL
10123 construct as END CRITICAL is still part of it. */
10124 gfc_error ("GOTO statement at %L leaves CRITICAL construct for label"
10125 " at %L", &code->loc, &label->where);
10126 return;
10127 }
10128 else if (stack->current->op == EXEC_DO_CONCURRENT)
10129 {
10130 gfc_error ("GOTO statement at %L leaves DO CONCURRENT construct for "
10131 "label at %L", &code->loc, &label->where);
10132 return;
10133 }
10134 }
10135
10136 if (stack)
10137 {
10138 gcc_assert (stack->current->next->op == EXEC_END_NESTED_BLOCK);
10139 return;
10140 }
10141
10142 /* The label is not in an enclosing block, so illegal. This was
10143 allowed in Fortran 66, so we allow it as extension. No
10144 further checks are necessary in this case. */
10145 gfc_notify_std (GFC_STD_LEGACY, "Label at %L is not in the same block "
10146 "as the GOTO statement at %L", &label->where,
10147 &code->loc);
10148 return;
10149 }
10150
10151
10152 /* Check whether EXPR1 has the same shape as EXPR2. */
10153
10154 static bool
10155 resolve_where_shape (gfc_expr *expr1, gfc_expr *expr2)
10156 {
10157 mpz_t shape[GFC_MAX_DIMENSIONS];
10158 mpz_t shape2[GFC_MAX_DIMENSIONS];
10159 bool result = false;
10160 int i;
10161
10162 /* Compare the rank. */
10163 if (expr1->rank != expr2->rank)
10164 return result;
10165
10166 /* Compare the size of each dimension. */
10167 for (i=0; i<expr1->rank; i++)
10168 {
10169 if (!gfc_array_dimen_size (expr1, i, &shape[i]))
10170 goto ignore;
10171
10172 if (!gfc_array_dimen_size (expr2, i, &shape2[i]))
10173 goto ignore;
10174
10175 if (mpz_cmp (shape[i], shape2[i]))
10176 goto over;
10177 }
10178
10179 /* When either of the two expression is an assumed size array, we
10180 ignore the comparison of dimension sizes. */
10181 ignore:
10182 result = true;
10183
10184 over:
10185 gfc_clear_shape (shape, i);
10186 gfc_clear_shape (shape2, i);
10187 return result;
10188 }
10189
10190
10191 /* Check whether a WHERE assignment target or a WHERE mask expression
10192 has the same shape as the outmost WHERE mask expression. */
10193
10194 static void
10195 resolve_where (gfc_code *code, gfc_expr *mask)
10196 {
10197 gfc_code *cblock;
10198 gfc_code *cnext;
10199 gfc_expr *e = NULL;
10200
10201 cblock = code->block;
10202
10203 /* Store the first WHERE mask-expr of the WHERE statement or construct.
10204 In case of nested WHERE, only the outmost one is stored. */
10205 if (mask == NULL) /* outmost WHERE */
10206 e = cblock->expr1;
10207 else /* inner WHERE */
10208 e = mask;
10209
10210 while (cblock)
10211 {
10212 if (cblock->expr1)
10213 {
10214 /* Check if the mask-expr has a consistent shape with the
10215 outmost WHERE mask-expr. */
10216 if (!resolve_where_shape (cblock->expr1, e))
10217 gfc_error ("WHERE mask at %L has inconsistent shape",
10218 &cblock->expr1->where);
10219 }
10220
10221 /* the assignment statement of a WHERE statement, or the first
10222 statement in where-body-construct of a WHERE construct */
10223 cnext = cblock->next;
10224 while (cnext)
10225 {
10226 switch (cnext->op)
10227 {
10228 /* WHERE assignment statement */
10229 case EXEC_ASSIGN:
10230
10231 /* Check shape consistent for WHERE assignment target. */
10232 if (e && !resolve_where_shape (cnext->expr1, e))
10233 gfc_error ("WHERE assignment target at %L has "
10234 "inconsistent shape", &cnext->expr1->where);
10235 break;
10236
10237
10238 case EXEC_ASSIGN_CALL:
10239 resolve_call (cnext);
10240 if (!cnext->resolved_sym->attr.elemental)
10241 gfc_error("Non-ELEMENTAL user-defined assignment in WHERE at %L",
10242 &cnext->ext.actual->expr->where);
10243 break;
10244
10245 /* WHERE or WHERE construct is part of a where-body-construct */
10246 case EXEC_WHERE:
10247 resolve_where (cnext, e);
10248 break;
10249
10250 default:
10251 gfc_error ("Unsupported statement inside WHERE at %L",
10252 &cnext->loc);
10253 }
10254 /* the next statement within the same where-body-construct */
10255 cnext = cnext->next;
10256 }
10257 /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
10258 cblock = cblock->block;
10259 }
10260 }
10261
10262
10263 /* Resolve assignment in FORALL construct.
10264 NVAR is the number of FORALL index variables, and VAR_EXPR records the
10265 FORALL index variables. */
10266
10267 static void
10268 gfc_resolve_assign_in_forall (gfc_code *code, int nvar, gfc_expr **var_expr)
10269 {
10270 int n;
10271
10272 for (n = 0; n < nvar; n++)
10273 {
10274 gfc_symbol *forall_index;
10275
10276 forall_index = var_expr[n]->symtree->n.sym;
10277
10278 /* Check whether the assignment target is one of the FORALL index
10279 variable. */
10280 if ((code->expr1->expr_type == EXPR_VARIABLE)
10281 && (code->expr1->symtree->n.sym == forall_index))
10282 gfc_error ("Assignment to a FORALL index variable at %L",
10283 &code->expr1->where);
10284 else
10285 {
10286 /* If one of the FORALL index variables doesn't appear in the
10287 assignment variable, then there could be a many-to-one
10288 assignment. Emit a warning rather than an error because the
10289 mask could be resolving this problem. */
10290 if (!find_forall_index (code->expr1, forall_index, 0))
10291 gfc_warning (0, "The FORALL with index %qs is not used on the "
10292 "left side of the assignment at %L and so might "
10293 "cause multiple assignment to this object",
10294 var_expr[n]->symtree->name, &code->expr1->where);
10295 }
10296 }
10297 }
10298
10299
10300 /* Resolve WHERE statement in FORALL construct. */
10301
10302 static void
10303 gfc_resolve_where_code_in_forall (gfc_code *code, int nvar,
10304 gfc_expr **var_expr)
10305 {
10306 gfc_code *cblock;
10307 gfc_code *cnext;
10308
10309 cblock = code->block;
10310 while (cblock)
10311 {
10312 /* the assignment statement of a WHERE statement, or the first
10313 statement in where-body-construct of a WHERE construct */
10314 cnext = cblock->next;
10315 while (cnext)
10316 {
10317 switch (cnext->op)
10318 {
10319 /* WHERE assignment statement */
10320 case EXEC_ASSIGN:
10321 gfc_resolve_assign_in_forall (cnext, nvar, var_expr);
10322 break;
10323
10324 /* WHERE operator assignment statement */
10325 case EXEC_ASSIGN_CALL:
10326 resolve_call (cnext);
10327 if (!cnext->resolved_sym->attr.elemental)
10328 gfc_error("Non-ELEMENTAL user-defined assignment in WHERE at %L",
10329 &cnext->ext.actual->expr->where);
10330 break;
10331
10332 /* WHERE or WHERE construct is part of a where-body-construct */
10333 case EXEC_WHERE:
10334 gfc_resolve_where_code_in_forall (cnext, nvar, var_expr);
10335 break;
10336
10337 default:
10338 gfc_error ("Unsupported statement inside WHERE at %L",
10339 &cnext->loc);
10340 }
10341 /* the next statement within the same where-body-construct */
10342 cnext = cnext->next;
10343 }
10344 /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
10345 cblock = cblock->block;
10346 }
10347 }
10348
10349
10350 /* Traverse the FORALL body to check whether the following errors exist:
10351 1. For assignment, check if a many-to-one assignment happens.
10352 2. For WHERE statement, check the WHERE body to see if there is any
10353 many-to-one assignment. */
10354
10355 static void
10356 gfc_resolve_forall_body (gfc_code *code, int nvar, gfc_expr **var_expr)
10357 {
10358 gfc_code *c;
10359
10360 c = code->block->next;
10361 while (c)
10362 {
10363 switch (c->op)
10364 {
10365 case EXEC_ASSIGN:
10366 case EXEC_POINTER_ASSIGN:
10367 gfc_resolve_assign_in_forall (c, nvar, var_expr);
10368 break;
10369
10370 case EXEC_ASSIGN_CALL:
10371 resolve_call (c);
10372 break;
10373
10374 /* Because the gfc_resolve_blocks() will handle the nested FORALL,
10375 there is no need to handle it here. */
10376 case EXEC_FORALL:
10377 break;
10378 case EXEC_WHERE:
10379 gfc_resolve_where_code_in_forall(c, nvar, var_expr);
10380 break;
10381 default:
10382 break;
10383 }
10384 /* The next statement in the FORALL body. */
10385 c = c->next;
10386 }
10387 }
10388
10389
10390 /* Counts the number of iterators needed inside a forall construct, including
10391 nested forall constructs. This is used to allocate the needed memory
10392 in gfc_resolve_forall. */
10393
10394 static int
10395 gfc_count_forall_iterators (gfc_code *code)
10396 {
10397 int max_iters, sub_iters, current_iters;
10398 gfc_forall_iterator *fa;
10399
10400 gcc_assert(code->op == EXEC_FORALL);
10401 max_iters = 0;
10402 current_iters = 0;
10403
10404 for (fa = code->ext.forall_iterator; fa; fa = fa->next)
10405 current_iters ++;
10406
10407 code = code->block->next;
10408
10409 while (code)
10410 {
10411 if (code->op == EXEC_FORALL)
10412 {
10413 sub_iters = gfc_count_forall_iterators (code);
10414 if (sub_iters > max_iters)
10415 max_iters = sub_iters;
10416 }
10417 code = code->next;
10418 }
10419
10420 return current_iters + max_iters;
10421 }
10422
10423
10424 /* Given a FORALL construct, first resolve the FORALL iterator, then call
10425 gfc_resolve_forall_body to resolve the FORALL body. */
10426
10427 static void
10428 gfc_resolve_forall (gfc_code *code, gfc_namespace *ns, int forall_save)
10429 {
10430 static gfc_expr **var_expr;
10431 static int total_var = 0;
10432 static int nvar = 0;
10433 int i, old_nvar, tmp;
10434 gfc_forall_iterator *fa;
10435
10436 old_nvar = nvar;
10437
10438 if (!gfc_notify_std (GFC_STD_F2018_OBS, "FORALL construct at %L", &code->loc))
10439 return;
10440
10441 /* Start to resolve a FORALL construct */
10442 if (forall_save == 0)
10443 {
10444 /* Count the total number of FORALL indices in the nested FORALL
10445 construct in order to allocate the VAR_EXPR with proper size. */
10446 total_var = gfc_count_forall_iterators (code);
10447
10448 /* Allocate VAR_EXPR with NUMBER_OF_FORALL_INDEX elements. */
10449 var_expr = XCNEWVEC (gfc_expr *, total_var);
10450 }
10451
10452 /* The information about FORALL iterator, including FORALL indices start, end
10453 and stride. An outer FORALL indice cannot appear in start, end or stride. */
10454 for (fa = code->ext.forall_iterator; fa; fa = fa->next)
10455 {
10456 /* Fortran 20008: C738 (R753). */
10457 if (fa->var->ref && fa->var->ref->type == REF_ARRAY)
10458 {
10459 gfc_error ("FORALL index-name at %L must be a scalar variable "
10460 "of type integer", &fa->var->where);
10461 continue;
10462 }
10463
10464 /* Check if any outer FORALL index name is the same as the current
10465 one. */
10466 for (i = 0; i < nvar; i++)
10467 {
10468 if (fa->var->symtree->n.sym == var_expr[i]->symtree->n.sym)
10469 gfc_error ("An outer FORALL construct already has an index "
10470 "with this name %L", &fa->var->where);
10471 }
10472
10473 /* Record the current FORALL index. */
10474 var_expr[nvar] = gfc_copy_expr (fa->var);
10475
10476 nvar++;
10477
10478 /* No memory leak. */
10479 gcc_assert (nvar <= total_var);
10480 }
10481
10482 /* Resolve the FORALL body. */
10483 gfc_resolve_forall_body (code, nvar, var_expr);
10484
10485 /* May call gfc_resolve_forall to resolve the inner FORALL loop. */
10486 gfc_resolve_blocks (code->block, ns);
10487
10488 tmp = nvar;
10489 nvar = old_nvar;
10490 /* Free only the VAR_EXPRs allocated in this frame. */
10491 for (i = nvar; i < tmp; i++)
10492 gfc_free_expr (var_expr[i]);
10493
10494 if (nvar == 0)
10495 {
10496 /* We are in the outermost FORALL construct. */
10497 gcc_assert (forall_save == 0);
10498
10499 /* VAR_EXPR is not needed any more. */
10500 free (var_expr);
10501 total_var = 0;
10502 }
10503 }
10504
10505
10506 /* Resolve a BLOCK construct statement. */
10507
10508 static void
10509 resolve_block_construct (gfc_code* code)
10510 {
10511 /* Resolve the BLOCK's namespace. */
10512 gfc_resolve (code->ext.block.ns);
10513
10514 /* For an ASSOCIATE block, the associations (and their targets) are already
10515 resolved during resolve_symbol. */
10516 }
10517
10518
10519 /* Resolve lists of blocks found in IF, SELECT CASE, WHERE, FORALL, GOTO and
10520 DO code nodes. */
10521
10522 void
10523 gfc_resolve_blocks (gfc_code *b, gfc_namespace *ns)
10524 {
10525 bool t;
10526
10527 for (; b; b = b->block)
10528 {
10529 t = gfc_resolve_expr (b->expr1);
10530 if (!gfc_resolve_expr (b->expr2))
10531 t = false;
10532
10533 switch (b->op)
10534 {
10535 case EXEC_IF:
10536 if (t && b->expr1 != NULL
10537 && (b->expr1->ts.type != BT_LOGICAL || b->expr1->rank != 0))
10538 gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
10539 &b->expr1->where);
10540 break;
10541
10542 case EXEC_WHERE:
10543 if (t
10544 && b->expr1 != NULL
10545 && (b->expr1->ts.type != BT_LOGICAL || b->expr1->rank == 0))
10546 gfc_error ("WHERE/ELSEWHERE clause at %L requires a LOGICAL array",
10547 &b->expr1->where);
10548 break;
10549
10550 case EXEC_GOTO:
10551 resolve_branch (b->label1, b);
10552 break;
10553
10554 case EXEC_BLOCK:
10555 resolve_block_construct (b);
10556 break;
10557
10558 case EXEC_SELECT:
10559 case EXEC_SELECT_TYPE:
10560 case EXEC_SELECT_RANK:
10561 case EXEC_FORALL:
10562 case EXEC_DO:
10563 case EXEC_DO_WHILE:
10564 case EXEC_DO_CONCURRENT:
10565 case EXEC_CRITICAL:
10566 case EXEC_READ:
10567 case EXEC_WRITE:
10568 case EXEC_IOLENGTH:
10569 case EXEC_WAIT:
10570 break;
10571
10572 case EXEC_OMP_ATOMIC:
10573 case EXEC_OACC_ATOMIC:
10574 {
10575 gfc_omp_atomic_op aop
10576 = (gfc_omp_atomic_op) (b->ext.omp_atomic & GFC_OMP_ATOMIC_MASK);
10577
10578 /* Verify this before calling gfc_resolve_code, which might
10579 change it. */
10580 gcc_assert (b->next && b->next->op == EXEC_ASSIGN);
10581 gcc_assert (((aop != GFC_OMP_ATOMIC_CAPTURE)
10582 && b->next->next == NULL)
10583 || ((aop == GFC_OMP_ATOMIC_CAPTURE)
10584 && b->next->next != NULL
10585 && b->next->next->op == EXEC_ASSIGN
10586 && b->next->next->next == NULL));
10587 }
10588 break;
10589
10590 case EXEC_OACC_PARALLEL_LOOP:
10591 case EXEC_OACC_PARALLEL:
10592 case EXEC_OACC_KERNELS_LOOP:
10593 case EXEC_OACC_KERNELS:
10594 case EXEC_OACC_DATA:
10595 case EXEC_OACC_HOST_DATA:
10596 case EXEC_OACC_LOOP:
10597 case EXEC_OACC_UPDATE:
10598 case EXEC_OACC_WAIT:
10599 case EXEC_OACC_CACHE:
10600 case EXEC_OACC_ENTER_DATA:
10601 case EXEC_OACC_EXIT_DATA:
10602 case EXEC_OACC_ROUTINE:
10603 case EXEC_OMP_CRITICAL:
10604 case EXEC_OMP_DISTRIBUTE:
10605 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
10606 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
10607 case EXEC_OMP_DISTRIBUTE_SIMD:
10608 case EXEC_OMP_DO:
10609 case EXEC_OMP_DO_SIMD:
10610 case EXEC_OMP_MASTER:
10611 case EXEC_OMP_ORDERED:
10612 case EXEC_OMP_PARALLEL:
10613 case EXEC_OMP_PARALLEL_DO:
10614 case EXEC_OMP_PARALLEL_DO_SIMD:
10615 case EXEC_OMP_PARALLEL_SECTIONS:
10616 case EXEC_OMP_PARALLEL_WORKSHARE:
10617 case EXEC_OMP_SECTIONS:
10618 case EXEC_OMP_SIMD:
10619 case EXEC_OMP_SINGLE:
10620 case EXEC_OMP_TARGET:
10621 case EXEC_OMP_TARGET_DATA:
10622 case EXEC_OMP_TARGET_ENTER_DATA:
10623 case EXEC_OMP_TARGET_EXIT_DATA:
10624 case EXEC_OMP_TARGET_PARALLEL:
10625 case EXEC_OMP_TARGET_PARALLEL_DO:
10626 case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
10627 case EXEC_OMP_TARGET_SIMD:
10628 case EXEC_OMP_TARGET_TEAMS:
10629 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
10630 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
10631 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
10632 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
10633 case EXEC_OMP_TARGET_UPDATE:
10634 case EXEC_OMP_TASK:
10635 case EXEC_OMP_TASKGROUP:
10636 case EXEC_OMP_TASKLOOP:
10637 case EXEC_OMP_TASKLOOP_SIMD:
10638 case EXEC_OMP_TASKWAIT:
10639 case EXEC_OMP_TASKYIELD:
10640 case EXEC_OMP_TEAMS:
10641 case EXEC_OMP_TEAMS_DISTRIBUTE:
10642 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
10643 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
10644 case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
10645 case EXEC_OMP_WORKSHARE:
10646 break;
10647
10648 default:
10649 gfc_internal_error ("gfc_resolve_blocks(): Bad block type");
10650 }
10651
10652 gfc_resolve_code (b->next, ns);
10653 }
10654 }
10655
10656
10657 /* Does everything to resolve an ordinary assignment. Returns true
10658 if this is an interface assignment. */
10659 static bool
10660 resolve_ordinary_assign (gfc_code *code, gfc_namespace *ns)
10661 {
10662 bool rval = false;
10663 gfc_expr *lhs;
10664 gfc_expr *rhs;
10665 int n;
10666 gfc_ref *ref;
10667 symbol_attribute attr;
10668
10669 if (gfc_extend_assign (code, ns))
10670 {
10671 gfc_expr** rhsptr;
10672
10673 if (code->op == EXEC_ASSIGN_CALL)
10674 {
10675 lhs = code->ext.actual->expr;
10676 rhsptr = &code->ext.actual->next->expr;
10677 }
10678 else
10679 {
10680 gfc_actual_arglist* args;
10681 gfc_typebound_proc* tbp;
10682
10683 gcc_assert (code->op == EXEC_COMPCALL);
10684
10685 args = code->expr1->value.compcall.actual;
10686 lhs = args->expr;
10687 rhsptr = &args->next->expr;
10688
10689 tbp = code->expr1->value.compcall.tbp;
10690 gcc_assert (!tbp->is_generic);
10691 }
10692
10693 /* Make a temporary rhs when there is a default initializer
10694 and rhs is the same symbol as the lhs. */
10695 if ((*rhsptr)->expr_type == EXPR_VARIABLE
10696 && (*rhsptr)->symtree->n.sym->ts.type == BT_DERIVED
10697 && gfc_has_default_initializer ((*rhsptr)->symtree->n.sym->ts.u.derived)
10698 && (lhs->symtree->n.sym == (*rhsptr)->symtree->n.sym))
10699 *rhsptr = gfc_get_parentheses (*rhsptr);
10700
10701 return true;
10702 }
10703
10704 lhs = code->expr1;
10705 rhs = code->expr2;
10706
10707 /* Handle the case of a BOZ literal on the RHS. */
10708 if (rhs->ts.type == BT_BOZ)
10709 {
10710 if (gfc_invalid_boz ("BOZ literal constant at %L is neither a DATA "
10711 "statement value nor an actual argument of "
10712 "INT/REAL/DBLE/CMPLX intrinsic subprogram",
10713 &rhs->where))
10714 return false;
10715
10716 switch (lhs->ts.type)
10717 {
10718 case BT_INTEGER:
10719 if (!gfc_boz2int (rhs, lhs->ts.kind))
10720 return false;
10721 break;
10722 case BT_REAL:
10723 if (!gfc_boz2real (rhs, lhs->ts.kind))
10724 return false;
10725 break;
10726 default:
10727 gfc_error ("Invalid use of BOZ literal constant at %L", &rhs->where);
10728 return false;
10729 }
10730 }
10731
10732 if (lhs->ts.type == BT_CHARACTER && warn_character_truncation)
10733 {
10734 HOST_WIDE_INT llen = 0, rlen = 0;
10735 if (lhs->ts.u.cl != NULL
10736 && lhs->ts.u.cl->length != NULL
10737 && lhs->ts.u.cl->length->expr_type == EXPR_CONSTANT)
10738 llen = gfc_mpz_get_hwi (lhs->ts.u.cl->length->value.integer);
10739
10740 if (rhs->expr_type == EXPR_CONSTANT)
10741 rlen = rhs->value.character.length;
10742
10743 else if (rhs->ts.u.cl != NULL
10744 && rhs->ts.u.cl->length != NULL
10745 && rhs->ts.u.cl->length->expr_type == EXPR_CONSTANT)
10746 rlen = gfc_mpz_get_hwi (rhs->ts.u.cl->length->value.integer);
10747
10748 if (rlen && llen && rlen > llen)
10749 gfc_warning_now (OPT_Wcharacter_truncation,
10750 "CHARACTER expression will be truncated "
10751 "in assignment (%ld/%ld) at %L",
10752 (long) llen, (long) rlen, &code->loc);
10753 }
10754
10755 /* Ensure that a vector index expression for the lvalue is evaluated
10756 to a temporary if the lvalue symbol is referenced in it. */
10757 if (lhs->rank)
10758 {
10759 for (ref = lhs->ref; ref; ref= ref->next)
10760 if (ref->type == REF_ARRAY)
10761 {
10762 for (n = 0; n < ref->u.ar.dimen; n++)
10763 if (ref->u.ar.dimen_type[n] == DIMEN_VECTOR
10764 && gfc_find_sym_in_expr (lhs->symtree->n.sym,
10765 ref->u.ar.start[n]))
10766 ref->u.ar.start[n]
10767 = gfc_get_parentheses (ref->u.ar.start[n]);
10768 }
10769 }
10770
10771 if (gfc_pure (NULL))
10772 {
10773 if (lhs->ts.type == BT_DERIVED
10774 && lhs->expr_type == EXPR_VARIABLE
10775 && lhs->ts.u.derived->attr.pointer_comp
10776 && rhs->expr_type == EXPR_VARIABLE
10777 && (gfc_impure_variable (rhs->symtree->n.sym)
10778 || gfc_is_coindexed (rhs)))
10779 {
10780 /* F2008, C1283. */
10781 if (gfc_is_coindexed (rhs))
10782 gfc_error ("Coindexed expression at %L is assigned to "
10783 "a derived type variable with a POINTER "
10784 "component in a PURE procedure",
10785 &rhs->where);
10786 else
10787 gfc_error ("The impure variable at %L is assigned to "
10788 "a derived type variable with a POINTER "
10789 "component in a PURE procedure (12.6)",
10790 &rhs->where);
10791 return rval;
10792 }
10793
10794 /* Fortran 2008, C1283. */
10795 if (gfc_is_coindexed (lhs))
10796 {
10797 gfc_error ("Assignment to coindexed variable at %L in a PURE "
10798 "procedure", &rhs->where);
10799 return rval;
10800 }
10801 }
10802
10803 if (gfc_implicit_pure (NULL))
10804 {
10805 if (lhs->expr_type == EXPR_VARIABLE
10806 && lhs->symtree->n.sym != gfc_current_ns->proc_name
10807 && lhs->symtree->n.sym->ns != gfc_current_ns)
10808 gfc_unset_implicit_pure (NULL);
10809
10810 if (lhs->ts.type == BT_DERIVED
10811 && lhs->expr_type == EXPR_VARIABLE
10812 && lhs->ts.u.derived->attr.pointer_comp
10813 && rhs->expr_type == EXPR_VARIABLE
10814 && (gfc_impure_variable (rhs->symtree->n.sym)
10815 || gfc_is_coindexed (rhs)))
10816 gfc_unset_implicit_pure (NULL);
10817
10818 /* Fortran 2008, C1283. */
10819 if (gfc_is_coindexed (lhs))
10820 gfc_unset_implicit_pure (NULL);
10821 }
10822
10823 /* F2008, 7.2.1.2. */
10824 attr = gfc_expr_attr (lhs);
10825 if (lhs->ts.type == BT_CLASS && attr.allocatable)
10826 {
10827 if (attr.codimension)
10828 {
10829 gfc_error ("Assignment to polymorphic coarray at %L is not "
10830 "permitted", &lhs->where);
10831 return false;
10832 }
10833 if (!gfc_notify_std (GFC_STD_F2008, "Assignment to an allocatable "
10834 "polymorphic variable at %L", &lhs->where))
10835 return false;
10836 if (!flag_realloc_lhs)
10837 {
10838 gfc_error ("Assignment to an allocatable polymorphic variable at %L "
10839 "requires %<-frealloc-lhs%>", &lhs->where);
10840 return false;
10841 }
10842 }
10843 else if (lhs->ts.type == BT_CLASS)
10844 {
10845 gfc_error ("Nonallocatable variable must not be polymorphic in intrinsic "
10846 "assignment at %L - check that there is a matching specific "
10847 "subroutine for '=' operator", &lhs->where);
10848 return false;
10849 }
10850
10851 bool lhs_coindexed = gfc_is_coindexed (lhs);
10852
10853 /* F2008, Section 7.2.1.2. */
10854 if (lhs_coindexed && gfc_has_ultimate_allocatable (lhs))
10855 {
10856 gfc_error ("Coindexed variable must not have an allocatable ultimate "
10857 "component in assignment at %L", &lhs->where);
10858 return false;
10859 }
10860
10861 /* Assign the 'data' of a class object to a derived type. */
10862 if (lhs->ts.type == BT_DERIVED
10863 && rhs->ts.type == BT_CLASS
10864 && rhs->expr_type != EXPR_ARRAY)
10865 gfc_add_data_component (rhs);
10866
10867 /* Make sure there is a vtable and, in particular, a _copy for the
10868 rhs type. */
10869 if (UNLIMITED_POLY (lhs) && lhs->rank && rhs->ts.type != BT_CLASS)
10870 gfc_find_vtab (&rhs->ts);
10871
10872 bool caf_convert_to_send = flag_coarray == GFC_FCOARRAY_LIB
10873 && (lhs_coindexed
10874 || (code->expr2->expr_type == EXPR_FUNCTION
10875 && code->expr2->value.function.isym
10876 && code->expr2->value.function.isym->id == GFC_ISYM_CAF_GET
10877 && (code->expr1->rank == 0 || code->expr2->rank != 0)
10878 && !gfc_expr_attr (rhs).allocatable
10879 && !gfc_has_vector_subscript (rhs)));
10880
10881 gfc_check_assign (lhs, rhs, 1, !caf_convert_to_send);
10882
10883 /* Insert a GFC_ISYM_CAF_SEND intrinsic, when the LHS is a coindexed variable.
10884 Additionally, insert this code when the RHS is a CAF as we then use the
10885 GFC_ISYM_CAF_SEND intrinsic just to avoid a temporary; but do not do so if
10886 the LHS is (re)allocatable or has a vector subscript. If the LHS is a
10887 noncoindexed array and the RHS is a coindexed scalar, use the normal code
10888 path. */
10889 if (caf_convert_to_send)
10890 {
10891 if (code->expr2->expr_type == EXPR_FUNCTION
10892 && code->expr2->value.function.isym
10893 && code->expr2->value.function.isym->id == GFC_ISYM_CAF_GET)
10894 remove_caf_get_intrinsic (code->expr2);
10895 code->op = EXEC_CALL;
10896 gfc_get_sym_tree (GFC_PREFIX ("caf_send"), ns, &code->symtree, true);
10897 code->resolved_sym = code->symtree->n.sym;
10898 code->resolved_sym->attr.flavor = FL_PROCEDURE;
10899 code->resolved_sym->attr.intrinsic = 1;
10900 code->resolved_sym->attr.subroutine = 1;
10901 code->resolved_isym = gfc_intrinsic_subroutine_by_id (GFC_ISYM_CAF_SEND);
10902 gfc_commit_symbol (code->resolved_sym);
10903 code->ext.actual = gfc_get_actual_arglist ();
10904 code->ext.actual->expr = lhs;
10905 code->ext.actual->next = gfc_get_actual_arglist ();
10906 code->ext.actual->next->expr = rhs;
10907 code->expr1 = NULL;
10908 code->expr2 = NULL;
10909 }
10910
10911 return false;
10912 }
10913
10914
10915 /* Add a component reference onto an expression. */
10916
10917 static void
10918 add_comp_ref (gfc_expr *e, gfc_component *c)
10919 {
10920 gfc_ref **ref;
10921 ref = &(e->ref);
10922 while (*ref)
10923 ref = &((*ref)->next);
10924 *ref = gfc_get_ref ();
10925 (*ref)->type = REF_COMPONENT;
10926 (*ref)->u.c.sym = e->ts.u.derived;
10927 (*ref)->u.c.component = c;
10928 e->ts = c->ts;
10929
10930 /* Add a full array ref, as necessary. */
10931 if (c->as)
10932 {
10933 gfc_add_full_array_ref (e, c->as);
10934 e->rank = c->as->rank;
10935 }
10936 }
10937
10938
10939 /* Build an assignment. Keep the argument 'op' for future use, so that
10940 pointer assignments can be made. */
10941
10942 static gfc_code *
10943 build_assignment (gfc_exec_op op, gfc_expr *expr1, gfc_expr *expr2,
10944 gfc_component *comp1, gfc_component *comp2, locus loc)
10945 {
10946 gfc_code *this_code;
10947
10948 this_code = gfc_get_code (op);
10949 this_code->next = NULL;
10950 this_code->expr1 = gfc_copy_expr (expr1);
10951 this_code->expr2 = gfc_copy_expr (expr2);
10952 this_code->loc = loc;
10953 if (comp1 && comp2)
10954 {
10955 add_comp_ref (this_code->expr1, comp1);
10956 add_comp_ref (this_code->expr2, comp2);
10957 }
10958
10959 return this_code;
10960 }
10961
10962
10963 /* Makes a temporary variable expression based on the characteristics of
10964 a given variable expression. */
10965
10966 static gfc_expr*
10967 get_temp_from_expr (gfc_expr *e, gfc_namespace *ns)
10968 {
10969 static int serial = 0;
10970 char name[GFC_MAX_SYMBOL_LEN];
10971 gfc_symtree *tmp;
10972 gfc_array_spec *as;
10973 gfc_array_ref *aref;
10974 gfc_ref *ref;
10975
10976 sprintf (name, GFC_PREFIX("DA%d"), serial++);
10977 gfc_get_sym_tree (name, ns, &tmp, false);
10978 gfc_add_type (tmp->n.sym, &e->ts, NULL);
10979
10980 if (e->expr_type == EXPR_CONSTANT && e->ts.type == BT_CHARACTER)
10981 tmp->n.sym->ts.u.cl->length = gfc_get_int_expr (gfc_charlen_int_kind,
10982 NULL,
10983 e->value.character.length);
10984
10985 as = NULL;
10986 ref = NULL;
10987 aref = NULL;
10988
10989 /* Obtain the arrayspec for the temporary. */
10990 if (e->rank && e->expr_type != EXPR_ARRAY
10991 && e->expr_type != EXPR_FUNCTION
10992 && e->expr_type != EXPR_OP)
10993 {
10994 aref = gfc_find_array_ref (e);
10995 if (e->expr_type == EXPR_VARIABLE
10996 && e->symtree->n.sym->as == aref->as)
10997 as = aref->as;
10998 else
10999 {
11000 for (ref = e->ref; ref; ref = ref->next)
11001 if (ref->type == REF_COMPONENT
11002 && ref->u.c.component->as == aref->as)
11003 {
11004 as = aref->as;
11005 break;
11006 }
11007 }
11008 }
11009
11010 /* Add the attributes and the arrayspec to the temporary. */
11011 tmp->n.sym->attr = gfc_expr_attr (e);
11012 tmp->n.sym->attr.function = 0;
11013 tmp->n.sym->attr.result = 0;
11014 tmp->n.sym->attr.flavor = FL_VARIABLE;
11015 tmp->n.sym->attr.dummy = 0;
11016 tmp->n.sym->attr.intent = INTENT_UNKNOWN;
11017
11018 if (as)
11019 {
11020 tmp->n.sym->as = gfc_copy_array_spec (as);
11021 if (!ref)
11022 ref = e->ref;
11023 if (as->type == AS_DEFERRED)
11024 tmp->n.sym->attr.allocatable = 1;
11025 }
11026 else if (e->rank && (e->expr_type == EXPR_ARRAY
11027 || e->expr_type == EXPR_FUNCTION
11028 || e->expr_type == EXPR_OP))
11029 {
11030 tmp->n.sym->as = gfc_get_array_spec ();
11031 tmp->n.sym->as->type = AS_DEFERRED;
11032 tmp->n.sym->as->rank = e->rank;
11033 tmp->n.sym->attr.allocatable = 1;
11034 tmp->n.sym->attr.dimension = 1;
11035 }
11036 else
11037 tmp->n.sym->attr.dimension = 0;
11038
11039 gfc_set_sym_referenced (tmp->n.sym);
11040 gfc_commit_symbol (tmp->n.sym);
11041 e = gfc_lval_expr_from_sym (tmp->n.sym);
11042
11043 /* Should the lhs be a section, use its array ref for the
11044 temporary expression. */
11045 if (aref && aref->type != AR_FULL)
11046 {
11047 gfc_free_ref_list (e->ref);
11048 e->ref = gfc_copy_ref (ref);
11049 }
11050 return e;
11051 }
11052
11053
11054 /* Add one line of code to the code chain, making sure that 'head' and
11055 'tail' are appropriately updated. */
11056
11057 static void
11058 add_code_to_chain (gfc_code **this_code, gfc_code **head, gfc_code **tail)
11059 {
11060 gcc_assert (this_code);
11061 if (*head == NULL)
11062 *head = *tail = *this_code;
11063 else
11064 *tail = gfc_append_code (*tail, *this_code);
11065 *this_code = NULL;
11066 }
11067
11068
11069 /* Counts the potential number of part array references that would
11070 result from resolution of typebound defined assignments. */
11071
11072 static int
11073 nonscalar_typebound_assign (gfc_symbol *derived, int depth)
11074 {
11075 gfc_component *c;
11076 int c_depth = 0, t_depth;
11077
11078 for (c= derived->components; c; c = c->next)
11079 {
11080 if ((!gfc_bt_struct (c->ts.type)
11081 || c->attr.pointer
11082 || c->attr.allocatable
11083 || c->attr.proc_pointer_comp
11084 || c->attr.class_pointer
11085 || c->attr.proc_pointer)
11086 && !c->attr.defined_assign_comp)
11087 continue;
11088
11089 if (c->as && c_depth == 0)
11090 c_depth = 1;
11091
11092 if (c->ts.u.derived->attr.defined_assign_comp)
11093 t_depth = nonscalar_typebound_assign (c->ts.u.derived,
11094 c->as ? 1 : 0);
11095 else
11096 t_depth = 0;
11097
11098 c_depth = t_depth > c_depth ? t_depth : c_depth;
11099 }
11100 return depth + c_depth;
11101 }
11102
11103
11104 /* Implement 7.2.1.3 of the F08 standard:
11105 "An intrinsic assignment where the variable is of derived type is
11106 performed as if each component of the variable were assigned from the
11107 corresponding component of expr using pointer assignment (7.2.2) for
11108 each pointer component, defined assignment for each nonpointer
11109 nonallocatable component of a type that has a type-bound defined
11110 assignment consistent with the component, intrinsic assignment for
11111 each other nonpointer nonallocatable component, ..."
11112
11113 The pointer assignments are taken care of by the intrinsic
11114 assignment of the structure itself. This function recursively adds
11115 defined assignments where required. The recursion is accomplished
11116 by calling gfc_resolve_code.
11117
11118 When the lhs in a defined assignment has intent INOUT, we need a
11119 temporary for the lhs. In pseudo-code:
11120
11121 ! Only call function lhs once.
11122 if (lhs is not a constant or an variable)
11123 temp_x = expr2
11124 expr2 => temp_x
11125 ! Do the intrinsic assignment
11126 expr1 = expr2
11127 ! Now do the defined assignments
11128 do over components with typebound defined assignment [%cmp]
11129 #if one component's assignment procedure is INOUT
11130 t1 = expr1
11131 #if expr2 non-variable
11132 temp_x = expr2
11133 expr2 => temp_x
11134 # endif
11135 expr1 = expr2
11136 # for each cmp
11137 t1%cmp {defined=} expr2%cmp
11138 expr1%cmp = t1%cmp
11139 #else
11140 expr1 = expr2
11141
11142 # for each cmp
11143 expr1%cmp {defined=} expr2%cmp
11144 #endif
11145 */
11146
11147 /* The temporary assignments have to be put on top of the additional
11148 code to avoid the result being changed by the intrinsic assignment.
11149 */
11150 static int component_assignment_level = 0;
11151 static gfc_code *tmp_head = NULL, *tmp_tail = NULL;
11152
11153 static void
11154 generate_component_assignments (gfc_code **code, gfc_namespace *ns)
11155 {
11156 gfc_component *comp1, *comp2;
11157 gfc_code *this_code = NULL, *head = NULL, *tail = NULL;
11158 gfc_expr *t1;
11159 int error_count, depth;
11160
11161 gfc_get_errors (NULL, &error_count);
11162
11163 /* Filter out continuing processing after an error. */
11164 if (error_count
11165 || (*code)->expr1->ts.type != BT_DERIVED
11166 || (*code)->expr2->ts.type != BT_DERIVED)
11167 return;
11168
11169 /* TODO: Handle more than one part array reference in assignments. */
11170 depth = nonscalar_typebound_assign ((*code)->expr1->ts.u.derived,
11171 (*code)->expr1->rank ? 1 : 0);
11172 if (depth > 1)
11173 {
11174 gfc_warning (0, "TODO: type-bound defined assignment(s) at %L not "
11175 "done because multiple part array references would "
11176 "occur in intermediate expressions.", &(*code)->loc);
11177 return;
11178 }
11179
11180 component_assignment_level++;
11181
11182 /* Create a temporary so that functions get called only once. */
11183 if ((*code)->expr2->expr_type != EXPR_VARIABLE
11184 && (*code)->expr2->expr_type != EXPR_CONSTANT)
11185 {
11186 gfc_expr *tmp_expr;
11187
11188 /* Assign the rhs to the temporary. */
11189 tmp_expr = get_temp_from_expr ((*code)->expr1, ns);
11190 this_code = build_assignment (EXEC_ASSIGN,
11191 tmp_expr, (*code)->expr2,
11192 NULL, NULL, (*code)->loc);
11193 /* Add the code and substitute the rhs expression. */
11194 add_code_to_chain (&this_code, &tmp_head, &tmp_tail);
11195 gfc_free_expr ((*code)->expr2);
11196 (*code)->expr2 = tmp_expr;
11197 }
11198
11199 /* Do the intrinsic assignment. This is not needed if the lhs is one
11200 of the temporaries generated here, since the intrinsic assignment
11201 to the final result already does this. */
11202 if ((*code)->expr1->symtree->n.sym->name[2] != '@')
11203 {
11204 this_code = build_assignment (EXEC_ASSIGN,
11205 (*code)->expr1, (*code)->expr2,
11206 NULL, NULL, (*code)->loc);
11207 add_code_to_chain (&this_code, &head, &tail);
11208 }
11209
11210 comp1 = (*code)->expr1->ts.u.derived->components;
11211 comp2 = (*code)->expr2->ts.u.derived->components;
11212
11213 t1 = NULL;
11214 for (; comp1; comp1 = comp1->next, comp2 = comp2->next)
11215 {
11216 bool inout = false;
11217
11218 /* The intrinsic assignment does the right thing for pointers
11219 of all kinds and allocatable components. */
11220 if (!gfc_bt_struct (comp1->ts.type)
11221 || comp1->attr.pointer
11222 || comp1->attr.allocatable
11223 || comp1->attr.proc_pointer_comp
11224 || comp1->attr.class_pointer
11225 || comp1->attr.proc_pointer)
11226 continue;
11227
11228 /* Make an assigment for this component. */
11229 this_code = build_assignment (EXEC_ASSIGN,
11230 (*code)->expr1, (*code)->expr2,
11231 comp1, comp2, (*code)->loc);
11232
11233 /* Convert the assignment if there is a defined assignment for
11234 this type. Otherwise, using the call from gfc_resolve_code,
11235 recurse into its components. */
11236 gfc_resolve_code (this_code, ns);
11237
11238 if (this_code->op == EXEC_ASSIGN_CALL)
11239 {
11240 gfc_formal_arglist *dummy_args;
11241 gfc_symbol *rsym;
11242 /* Check that there is a typebound defined assignment. If not,
11243 then this must be a module defined assignment. We cannot
11244 use the defined_assign_comp attribute here because it must
11245 be this derived type that has the defined assignment and not
11246 a parent type. */
11247 if (!(comp1->ts.u.derived->f2k_derived
11248 && comp1->ts.u.derived->f2k_derived
11249 ->tb_op[INTRINSIC_ASSIGN]))
11250 {
11251 gfc_free_statements (this_code);
11252 this_code = NULL;
11253 continue;
11254 }
11255
11256 /* If the first argument of the subroutine has intent INOUT
11257 a temporary must be generated and used instead. */
11258 rsym = this_code->resolved_sym;
11259 dummy_args = gfc_sym_get_dummy_args (rsym);
11260 if (dummy_args
11261 && dummy_args->sym->attr.intent == INTENT_INOUT)
11262 {
11263 gfc_code *temp_code;
11264 inout = true;
11265
11266 /* Build the temporary required for the assignment and put
11267 it at the head of the generated code. */
11268 if (!t1)
11269 {
11270 t1 = get_temp_from_expr ((*code)->expr1, ns);
11271 temp_code = build_assignment (EXEC_ASSIGN,
11272 t1, (*code)->expr1,
11273 NULL, NULL, (*code)->loc);
11274
11275 /* For allocatable LHS, check whether it is allocated. Note
11276 that allocatable components with defined assignment are
11277 not yet support. See PR 57696. */
11278 if ((*code)->expr1->symtree->n.sym->attr.allocatable)
11279 {
11280 gfc_code *block;
11281 gfc_expr *e =
11282 gfc_lval_expr_from_sym ((*code)->expr1->symtree->n.sym);
11283 block = gfc_get_code (EXEC_IF);
11284 block->block = gfc_get_code (EXEC_IF);
11285 block->block->expr1
11286 = gfc_build_intrinsic_call (ns,
11287 GFC_ISYM_ALLOCATED, "allocated",
11288 (*code)->loc, 1, e);
11289 block->block->next = temp_code;
11290 temp_code = block;
11291 }
11292 add_code_to_chain (&temp_code, &tmp_head, &tmp_tail);
11293 }
11294
11295 /* Replace the first actual arg with the component of the
11296 temporary. */
11297 gfc_free_expr (this_code->ext.actual->expr);
11298 this_code->ext.actual->expr = gfc_copy_expr (t1);
11299 add_comp_ref (this_code->ext.actual->expr, comp1);
11300
11301 /* If the LHS variable is allocatable and wasn't allocated and
11302 the temporary is allocatable, pointer assign the address of
11303 the freshly allocated LHS to the temporary. */
11304 if ((*code)->expr1->symtree->n.sym->attr.allocatable
11305 && gfc_expr_attr ((*code)->expr1).allocatable)
11306 {
11307 gfc_code *block;
11308 gfc_expr *cond;
11309
11310 cond = gfc_get_expr ();
11311 cond->ts.type = BT_LOGICAL;
11312 cond->ts.kind = gfc_default_logical_kind;
11313 cond->expr_type = EXPR_OP;
11314 cond->where = (*code)->loc;
11315 cond->value.op.op = INTRINSIC_NOT;
11316 cond->value.op.op1 = gfc_build_intrinsic_call (ns,
11317 GFC_ISYM_ALLOCATED, "allocated",
11318 (*code)->loc, 1, gfc_copy_expr (t1));
11319 block = gfc_get_code (EXEC_IF);
11320 block->block = gfc_get_code (EXEC_IF);
11321 block->block->expr1 = cond;
11322 block->block->next = build_assignment (EXEC_POINTER_ASSIGN,
11323 t1, (*code)->expr1,
11324 NULL, NULL, (*code)->loc);
11325 add_code_to_chain (&block, &head, &tail);
11326 }
11327 }
11328 }
11329 else if (this_code->op == EXEC_ASSIGN && !this_code->next)
11330 {
11331 /* Don't add intrinsic assignments since they are already
11332 effected by the intrinsic assignment of the structure. */
11333 gfc_free_statements (this_code);
11334 this_code = NULL;
11335 continue;
11336 }
11337
11338 add_code_to_chain (&this_code, &head, &tail);
11339
11340 if (t1 && inout)
11341 {
11342 /* Transfer the value to the final result. */
11343 this_code = build_assignment (EXEC_ASSIGN,
11344 (*code)->expr1, t1,
11345 comp1, comp2, (*code)->loc);
11346 add_code_to_chain (&this_code, &head, &tail);
11347 }
11348 }
11349
11350 /* Put the temporary assignments at the top of the generated code. */
11351 if (tmp_head && component_assignment_level == 1)
11352 {
11353 gfc_append_code (tmp_head, head);
11354 head = tmp_head;
11355 tmp_head = tmp_tail = NULL;
11356 }
11357
11358 // If we did a pointer assignment - thus, we need to ensure that the LHS is
11359 // not accidentally deallocated. Hence, nullify t1.
11360 if (t1 && (*code)->expr1->symtree->n.sym->attr.allocatable
11361 && gfc_expr_attr ((*code)->expr1).allocatable)
11362 {
11363 gfc_code *block;
11364 gfc_expr *cond;
11365 gfc_expr *e;
11366
11367 e = gfc_lval_expr_from_sym ((*code)->expr1->symtree->n.sym);
11368 cond = gfc_build_intrinsic_call (ns, GFC_ISYM_ASSOCIATED, "associated",
11369 (*code)->loc, 2, gfc_copy_expr (t1), e);
11370 block = gfc_get_code (EXEC_IF);
11371 block->block = gfc_get_code (EXEC_IF);
11372 block->block->expr1 = cond;
11373 block->block->next = build_assignment (EXEC_POINTER_ASSIGN,
11374 t1, gfc_get_null_expr (&(*code)->loc),
11375 NULL, NULL, (*code)->loc);
11376 gfc_append_code (tail, block);
11377 tail = block;
11378 }
11379
11380 /* Now attach the remaining code chain to the input code. Step on
11381 to the end of the new code since resolution is complete. */
11382 gcc_assert ((*code)->op == EXEC_ASSIGN);
11383 tail->next = (*code)->next;
11384 /* Overwrite 'code' because this would place the intrinsic assignment
11385 before the temporary for the lhs is created. */
11386 gfc_free_expr ((*code)->expr1);
11387 gfc_free_expr ((*code)->expr2);
11388 **code = *head;
11389 if (head != tail)
11390 free (head);
11391 *code = tail;
11392
11393 component_assignment_level--;
11394 }
11395
11396
11397 /* F2008: Pointer function assignments are of the form:
11398 ptr_fcn (args) = expr
11399 This function breaks these assignments into two statements:
11400 temporary_pointer => ptr_fcn(args)
11401 temporary_pointer = expr */
11402
11403 static bool
11404 resolve_ptr_fcn_assign (gfc_code **code, gfc_namespace *ns)
11405 {
11406 gfc_expr *tmp_ptr_expr;
11407 gfc_code *this_code;
11408 gfc_component *comp;
11409 gfc_symbol *s;
11410
11411 if ((*code)->expr1->expr_type != EXPR_FUNCTION)
11412 return false;
11413
11414 /* Even if standard does not support this feature, continue to build
11415 the two statements to avoid upsetting frontend_passes.c. */
11416 gfc_notify_std (GFC_STD_F2008, "Pointer procedure assignment at "
11417 "%L", &(*code)->loc);
11418
11419 comp = gfc_get_proc_ptr_comp ((*code)->expr1);
11420
11421 if (comp)
11422 s = comp->ts.interface;
11423 else
11424 s = (*code)->expr1->symtree->n.sym;
11425
11426 if (s == NULL || !s->result->attr.pointer)
11427 {
11428 gfc_error ("The function result on the lhs of the assignment at "
11429 "%L must have the pointer attribute.",
11430 &(*code)->expr1->where);
11431 (*code)->op = EXEC_NOP;
11432 return false;
11433 }
11434
11435 tmp_ptr_expr = get_temp_from_expr ((*code)->expr2, ns);
11436
11437 /* get_temp_from_expression is set up for ordinary assignments. To that
11438 end, where array bounds are not known, arrays are made allocatable.
11439 Change the temporary to a pointer here. */
11440 tmp_ptr_expr->symtree->n.sym->attr.pointer = 1;
11441 tmp_ptr_expr->symtree->n.sym->attr.allocatable = 0;
11442 tmp_ptr_expr->where = (*code)->loc;
11443
11444 this_code = build_assignment (EXEC_ASSIGN,
11445 tmp_ptr_expr, (*code)->expr2,
11446 NULL, NULL, (*code)->loc);
11447 this_code->next = (*code)->next;
11448 (*code)->next = this_code;
11449 (*code)->op = EXEC_POINTER_ASSIGN;
11450 (*code)->expr2 = (*code)->expr1;
11451 (*code)->expr1 = tmp_ptr_expr;
11452
11453 return true;
11454 }
11455
11456
11457 /* Deferred character length assignments from an operator expression
11458 require a temporary because the character length of the lhs can
11459 change in the course of the assignment. */
11460
11461 static bool
11462 deferred_op_assign (gfc_code **code, gfc_namespace *ns)
11463 {
11464 gfc_expr *tmp_expr;
11465 gfc_code *this_code;
11466
11467 if (!((*code)->expr1->ts.type == BT_CHARACTER
11468 && (*code)->expr1->ts.deferred && (*code)->expr1->rank
11469 && (*code)->expr2->expr_type == EXPR_OP))
11470 return false;
11471
11472 if (!gfc_check_dependency ((*code)->expr1, (*code)->expr2, 1))
11473 return false;
11474
11475 if (gfc_expr_attr ((*code)->expr1).pointer)
11476 return false;
11477
11478 tmp_expr = get_temp_from_expr ((*code)->expr1, ns);
11479 tmp_expr->where = (*code)->loc;
11480
11481 /* A new charlen is required to ensure that the variable string
11482 length is different to that of the original lhs. */
11483 tmp_expr->ts.u.cl = gfc_get_charlen();
11484 tmp_expr->symtree->n.sym->ts.u.cl = tmp_expr->ts.u.cl;
11485 tmp_expr->ts.u.cl->next = (*code)->expr2->ts.u.cl->next;
11486 (*code)->expr2->ts.u.cl->next = tmp_expr->ts.u.cl;
11487
11488 tmp_expr->symtree->n.sym->ts.deferred = 1;
11489
11490 this_code = build_assignment (EXEC_ASSIGN,
11491 (*code)->expr1,
11492 gfc_copy_expr (tmp_expr),
11493 NULL, NULL, (*code)->loc);
11494
11495 (*code)->expr1 = tmp_expr;
11496
11497 this_code->next = (*code)->next;
11498 (*code)->next = this_code;
11499
11500 return true;
11501 }
11502
11503
11504 /* Given a block of code, recursively resolve everything pointed to by this
11505 code block. */
11506
11507 void
11508 gfc_resolve_code (gfc_code *code, gfc_namespace *ns)
11509 {
11510 int omp_workshare_save;
11511 int forall_save, do_concurrent_save;
11512 code_stack frame;
11513 bool t;
11514
11515 frame.prev = cs_base;
11516 frame.head = code;
11517 cs_base = &frame;
11518
11519 find_reachable_labels (code);
11520
11521 for (; code; code = code->next)
11522 {
11523 frame.current = code;
11524 forall_save = forall_flag;
11525 do_concurrent_save = gfc_do_concurrent_flag;
11526
11527 if (code->op == EXEC_FORALL)
11528 {
11529 forall_flag = 1;
11530 gfc_resolve_forall (code, ns, forall_save);
11531 forall_flag = 2;
11532 }
11533 else if (code->block)
11534 {
11535 omp_workshare_save = -1;
11536 switch (code->op)
11537 {
11538 case EXEC_OACC_PARALLEL_LOOP:
11539 case EXEC_OACC_PARALLEL:
11540 case EXEC_OACC_KERNELS_LOOP:
11541 case EXEC_OACC_KERNELS:
11542 case EXEC_OACC_DATA:
11543 case EXEC_OACC_HOST_DATA:
11544 case EXEC_OACC_LOOP:
11545 gfc_resolve_oacc_blocks (code, ns);
11546 break;
11547 case EXEC_OMP_PARALLEL_WORKSHARE:
11548 omp_workshare_save = omp_workshare_flag;
11549 omp_workshare_flag = 1;
11550 gfc_resolve_omp_parallel_blocks (code, ns);
11551 break;
11552 case EXEC_OMP_PARALLEL:
11553 case EXEC_OMP_PARALLEL_DO:
11554 case EXEC_OMP_PARALLEL_DO_SIMD:
11555 case EXEC_OMP_PARALLEL_SECTIONS:
11556 case EXEC_OMP_TARGET_PARALLEL:
11557 case EXEC_OMP_TARGET_PARALLEL_DO:
11558 case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
11559 case EXEC_OMP_TARGET_TEAMS:
11560 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
11561 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
11562 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
11563 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
11564 case EXEC_OMP_TASK:
11565 case EXEC_OMP_TASKLOOP:
11566 case EXEC_OMP_TASKLOOP_SIMD:
11567 case EXEC_OMP_TEAMS:
11568 case EXEC_OMP_TEAMS_DISTRIBUTE:
11569 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
11570 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
11571 case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
11572 omp_workshare_save = omp_workshare_flag;
11573 omp_workshare_flag = 0;
11574 gfc_resolve_omp_parallel_blocks (code, ns);
11575 break;
11576 case EXEC_OMP_DISTRIBUTE:
11577 case EXEC_OMP_DISTRIBUTE_SIMD:
11578 case EXEC_OMP_DO:
11579 case EXEC_OMP_DO_SIMD:
11580 case EXEC_OMP_SIMD:
11581 case EXEC_OMP_TARGET_SIMD:
11582 gfc_resolve_omp_do_blocks (code, ns);
11583 break;
11584 case EXEC_SELECT_TYPE:
11585 /* Blocks are handled in resolve_select_type because we have
11586 to transform the SELECT TYPE into ASSOCIATE first. */
11587 break;
11588 case EXEC_DO_CONCURRENT:
11589 gfc_do_concurrent_flag = 1;
11590 gfc_resolve_blocks (code->block, ns);
11591 gfc_do_concurrent_flag = 2;
11592 break;
11593 case EXEC_OMP_WORKSHARE:
11594 omp_workshare_save = omp_workshare_flag;
11595 omp_workshare_flag = 1;
11596 /* FALL THROUGH */
11597 default:
11598 gfc_resolve_blocks (code->block, ns);
11599 break;
11600 }
11601
11602 if (omp_workshare_save != -1)
11603 omp_workshare_flag = omp_workshare_save;
11604 }
11605 start:
11606 t = true;
11607 if (code->op != EXEC_COMPCALL && code->op != EXEC_CALL_PPC)
11608 t = gfc_resolve_expr (code->expr1);
11609 forall_flag = forall_save;
11610 gfc_do_concurrent_flag = do_concurrent_save;
11611
11612 if (!gfc_resolve_expr (code->expr2))
11613 t = false;
11614
11615 if (code->op == EXEC_ALLOCATE
11616 && !gfc_resolve_expr (code->expr3))
11617 t = false;
11618
11619 switch (code->op)
11620 {
11621 case EXEC_NOP:
11622 case EXEC_END_BLOCK:
11623 case EXEC_END_NESTED_BLOCK:
11624 case EXEC_CYCLE:
11625 case EXEC_PAUSE:
11626 case EXEC_STOP:
11627 case EXEC_ERROR_STOP:
11628 case EXEC_EXIT:
11629 case EXEC_CONTINUE:
11630 case EXEC_DT_END:
11631 case EXEC_ASSIGN_CALL:
11632 break;
11633
11634 case EXEC_CRITICAL:
11635 resolve_critical (code);
11636 break;
11637
11638 case EXEC_SYNC_ALL:
11639 case EXEC_SYNC_IMAGES:
11640 case EXEC_SYNC_MEMORY:
11641 resolve_sync (code);
11642 break;
11643
11644 case EXEC_LOCK:
11645 case EXEC_UNLOCK:
11646 case EXEC_EVENT_POST:
11647 case EXEC_EVENT_WAIT:
11648 resolve_lock_unlock_event (code);
11649 break;
11650
11651 case EXEC_FAIL_IMAGE:
11652 case EXEC_FORM_TEAM:
11653 case EXEC_CHANGE_TEAM:
11654 case EXEC_END_TEAM:
11655 case EXEC_SYNC_TEAM:
11656 break;
11657
11658 case EXEC_ENTRY:
11659 /* Keep track of which entry we are up to. */
11660 current_entry_id = code->ext.entry->id;
11661 break;
11662
11663 case EXEC_WHERE:
11664 resolve_where (code, NULL);
11665 break;
11666
11667 case EXEC_GOTO:
11668 if (code->expr1 != NULL)
11669 {
11670 if (code->expr1->ts.type != BT_INTEGER)
11671 gfc_error ("ASSIGNED GOTO statement at %L requires an "
11672 "INTEGER variable", &code->expr1->where);
11673 else if (code->expr1->symtree->n.sym->attr.assign != 1)
11674 gfc_error ("Variable %qs has not been assigned a target "
11675 "label at %L", code->expr1->symtree->n.sym->name,
11676 &code->expr1->where);
11677 }
11678 else
11679 resolve_branch (code->label1, code);
11680 break;
11681
11682 case EXEC_RETURN:
11683 if (code->expr1 != NULL
11684 && (code->expr1->ts.type != BT_INTEGER || code->expr1->rank))
11685 gfc_error ("Alternate RETURN statement at %L requires a SCALAR-"
11686 "INTEGER return specifier", &code->expr1->where);
11687 break;
11688
11689 case EXEC_INIT_ASSIGN:
11690 case EXEC_END_PROCEDURE:
11691 break;
11692
11693 case EXEC_ASSIGN:
11694 if (!t)
11695 break;
11696
11697 /* Remove a GFC_ISYM_CAF_GET inserted for a coindexed variable on
11698 the LHS. */
11699 if (code->expr1->expr_type == EXPR_FUNCTION
11700 && code->expr1->value.function.isym
11701 && code->expr1->value.function.isym->id == GFC_ISYM_CAF_GET)
11702 remove_caf_get_intrinsic (code->expr1);
11703
11704 /* If this is a pointer function in an lvalue variable context,
11705 the new code will have to be resolved afresh. This is also the
11706 case with an error, where the code is transformed into NOP to
11707 prevent ICEs downstream. */
11708 if (resolve_ptr_fcn_assign (&code, ns)
11709 || code->op == EXEC_NOP)
11710 goto start;
11711
11712 if (!gfc_check_vardef_context (code->expr1, false, false, false,
11713 _("assignment")))
11714 break;
11715
11716 if (resolve_ordinary_assign (code, ns))
11717 {
11718 if (code->op == EXEC_COMPCALL)
11719 goto compcall;
11720 else
11721 goto call;
11722 }
11723
11724 /* Check for dependencies in deferred character length array
11725 assignments and generate a temporary, if necessary. */
11726 if (code->op == EXEC_ASSIGN && deferred_op_assign (&code, ns))
11727 break;
11728
11729 /* F03 7.4.1.3 for non-allocatable, non-pointer components. */
11730 if (code->op != EXEC_CALL && code->expr1->ts.type == BT_DERIVED
11731 && code->expr1->ts.u.derived
11732 && code->expr1->ts.u.derived->attr.defined_assign_comp)
11733 generate_component_assignments (&code, ns);
11734
11735 break;
11736
11737 case EXEC_LABEL_ASSIGN:
11738 if (code->label1->defined == ST_LABEL_UNKNOWN)
11739 gfc_error ("Label %d referenced at %L is never defined",
11740 code->label1->value, &code->label1->where);
11741 if (t
11742 && (code->expr1->expr_type != EXPR_VARIABLE
11743 || code->expr1->symtree->n.sym->ts.type != BT_INTEGER
11744 || code->expr1->symtree->n.sym->ts.kind
11745 != gfc_default_integer_kind
11746 || code->expr1->symtree->n.sym->as != NULL))
11747 gfc_error ("ASSIGN statement at %L requires a scalar "
11748 "default INTEGER variable", &code->expr1->where);
11749 break;
11750
11751 case EXEC_POINTER_ASSIGN:
11752 {
11753 gfc_expr* e;
11754
11755 if (!t)
11756 break;
11757
11758 /* This is both a variable definition and pointer assignment
11759 context, so check both of them. For rank remapping, a final
11760 array ref may be present on the LHS and fool gfc_expr_attr
11761 used in gfc_check_vardef_context. Remove it. */
11762 e = remove_last_array_ref (code->expr1);
11763 t = gfc_check_vardef_context (e, true, false, false,
11764 _("pointer assignment"));
11765 if (t)
11766 t = gfc_check_vardef_context (e, false, false, false,
11767 _("pointer assignment"));
11768 gfc_free_expr (e);
11769
11770 t = gfc_check_pointer_assign (code->expr1, code->expr2, !t) && t;
11771
11772 if (!t)
11773 break;
11774
11775 /* Assigning a class object always is a regular assign. */
11776 if (code->expr2->ts.type == BT_CLASS
11777 && code->expr1->ts.type == BT_CLASS
11778 && !CLASS_DATA (code->expr2)->attr.dimension
11779 && !(gfc_expr_attr (code->expr1).proc_pointer
11780 && code->expr2->expr_type == EXPR_VARIABLE
11781 && code->expr2->symtree->n.sym->attr.flavor
11782 == FL_PROCEDURE))
11783 code->op = EXEC_ASSIGN;
11784 break;
11785 }
11786
11787 case EXEC_ARITHMETIC_IF:
11788 {
11789 gfc_expr *e = code->expr1;
11790
11791 gfc_resolve_expr (e);
11792 if (e->expr_type == EXPR_NULL)
11793 gfc_error ("Invalid NULL at %L", &e->where);
11794
11795 if (t && (e->rank > 0
11796 || !(e->ts.type == BT_REAL || e->ts.type == BT_INTEGER)))
11797 gfc_error ("Arithmetic IF statement at %L requires a scalar "
11798 "REAL or INTEGER expression", &e->where);
11799
11800 resolve_branch (code->label1, code);
11801 resolve_branch (code->label2, code);
11802 resolve_branch (code->label3, code);
11803 }
11804 break;
11805
11806 case EXEC_IF:
11807 if (t && code->expr1 != NULL
11808 && (code->expr1->ts.type != BT_LOGICAL
11809 || code->expr1->rank != 0))
11810 gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
11811 &code->expr1->where);
11812 break;
11813
11814 case EXEC_CALL:
11815 call:
11816 resolve_call (code);
11817 break;
11818
11819 case EXEC_COMPCALL:
11820 compcall:
11821 resolve_typebound_subroutine (code);
11822 break;
11823
11824 case EXEC_CALL_PPC:
11825 resolve_ppc_call (code);
11826 break;
11827
11828 case EXEC_SELECT:
11829 /* Select is complicated. Also, a SELECT construct could be
11830 a transformed computed GOTO. */
11831 resolve_select (code, false);
11832 break;
11833
11834 case EXEC_SELECT_TYPE:
11835 resolve_select_type (code, ns);
11836 break;
11837
11838 case EXEC_SELECT_RANK:
11839 resolve_select_rank (code, ns);
11840 break;
11841
11842 case EXEC_BLOCK:
11843 resolve_block_construct (code);
11844 break;
11845
11846 case EXEC_DO:
11847 if (code->ext.iterator != NULL)
11848 {
11849 gfc_iterator *iter = code->ext.iterator;
11850 if (gfc_resolve_iterator (iter, true, false))
11851 gfc_resolve_do_iterator (code, iter->var->symtree->n.sym,
11852 true);
11853 }
11854 break;
11855
11856 case EXEC_DO_WHILE:
11857 if (code->expr1 == NULL)
11858 gfc_internal_error ("gfc_resolve_code(): No expression on "
11859 "DO WHILE");
11860 if (t
11861 && (code->expr1->rank != 0
11862 || code->expr1->ts.type != BT_LOGICAL))
11863 gfc_error ("Exit condition of DO WHILE loop at %L must be "
11864 "a scalar LOGICAL expression", &code->expr1->where);
11865 break;
11866
11867 case EXEC_ALLOCATE:
11868 if (t)
11869 resolve_allocate_deallocate (code, "ALLOCATE");
11870
11871 break;
11872
11873 case EXEC_DEALLOCATE:
11874 if (t)
11875 resolve_allocate_deallocate (code, "DEALLOCATE");
11876
11877 break;
11878
11879 case EXEC_OPEN:
11880 if (!gfc_resolve_open (code->ext.open))
11881 break;
11882
11883 resolve_branch (code->ext.open->err, code);
11884 break;
11885
11886 case EXEC_CLOSE:
11887 if (!gfc_resolve_close (code->ext.close))
11888 break;
11889
11890 resolve_branch (code->ext.close->err, code);
11891 break;
11892
11893 case EXEC_BACKSPACE:
11894 case EXEC_ENDFILE:
11895 case EXEC_REWIND:
11896 case EXEC_FLUSH:
11897 if (!gfc_resolve_filepos (code->ext.filepos, &code->loc))
11898 break;
11899
11900 resolve_branch (code->ext.filepos->err, code);
11901 break;
11902
11903 case EXEC_INQUIRE:
11904 if (!gfc_resolve_inquire (code->ext.inquire))
11905 break;
11906
11907 resolve_branch (code->ext.inquire->err, code);
11908 break;
11909
11910 case EXEC_IOLENGTH:
11911 gcc_assert (code->ext.inquire != NULL);
11912 if (!gfc_resolve_inquire (code->ext.inquire))
11913 break;
11914
11915 resolve_branch (code->ext.inquire->err, code);
11916 break;
11917
11918 case EXEC_WAIT:
11919 if (!gfc_resolve_wait (code->ext.wait))
11920 break;
11921
11922 resolve_branch (code->ext.wait->err, code);
11923 resolve_branch (code->ext.wait->end, code);
11924 resolve_branch (code->ext.wait->eor, code);
11925 break;
11926
11927 case EXEC_READ:
11928 case EXEC_WRITE:
11929 if (!gfc_resolve_dt (code->ext.dt, &code->loc))
11930 break;
11931
11932 resolve_branch (code->ext.dt->err, code);
11933 resolve_branch (code->ext.dt->end, code);
11934 resolve_branch (code->ext.dt->eor, code);
11935 break;
11936
11937 case EXEC_TRANSFER:
11938 resolve_transfer (code);
11939 break;
11940
11941 case EXEC_DO_CONCURRENT:
11942 case EXEC_FORALL:
11943 resolve_forall_iterators (code->ext.forall_iterator);
11944
11945 if (code->expr1 != NULL
11946 && (code->expr1->ts.type != BT_LOGICAL || code->expr1->rank))
11947 gfc_error ("FORALL mask clause at %L requires a scalar LOGICAL "
11948 "expression", &code->expr1->where);
11949 break;
11950
11951 case EXEC_OACC_PARALLEL_LOOP:
11952 case EXEC_OACC_PARALLEL:
11953 case EXEC_OACC_KERNELS_LOOP:
11954 case EXEC_OACC_KERNELS:
11955 case EXEC_OACC_DATA:
11956 case EXEC_OACC_HOST_DATA:
11957 case EXEC_OACC_LOOP:
11958 case EXEC_OACC_UPDATE:
11959 case EXEC_OACC_WAIT:
11960 case EXEC_OACC_CACHE:
11961 case EXEC_OACC_ENTER_DATA:
11962 case EXEC_OACC_EXIT_DATA:
11963 case EXEC_OACC_ATOMIC:
11964 case EXEC_OACC_DECLARE:
11965 gfc_resolve_oacc_directive (code, ns);
11966 break;
11967
11968 case EXEC_OMP_ATOMIC:
11969 case EXEC_OMP_BARRIER:
11970 case EXEC_OMP_CANCEL:
11971 case EXEC_OMP_CANCELLATION_POINT:
11972 case EXEC_OMP_CRITICAL:
11973 case EXEC_OMP_FLUSH:
11974 case EXEC_OMP_DISTRIBUTE:
11975 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
11976 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
11977 case EXEC_OMP_DISTRIBUTE_SIMD:
11978 case EXEC_OMP_DO:
11979 case EXEC_OMP_DO_SIMD:
11980 case EXEC_OMP_MASTER:
11981 case EXEC_OMP_ORDERED:
11982 case EXEC_OMP_SECTIONS:
11983 case EXEC_OMP_SIMD:
11984 case EXEC_OMP_SINGLE:
11985 case EXEC_OMP_TARGET:
11986 case EXEC_OMP_TARGET_DATA:
11987 case EXEC_OMP_TARGET_ENTER_DATA:
11988 case EXEC_OMP_TARGET_EXIT_DATA:
11989 case EXEC_OMP_TARGET_PARALLEL:
11990 case EXEC_OMP_TARGET_PARALLEL_DO:
11991 case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
11992 case EXEC_OMP_TARGET_SIMD:
11993 case EXEC_OMP_TARGET_TEAMS:
11994 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
11995 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
11996 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
11997 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
11998 case EXEC_OMP_TARGET_UPDATE:
11999 case EXEC_OMP_TASK:
12000 case EXEC_OMP_TASKGROUP:
12001 case EXEC_OMP_TASKLOOP:
12002 case EXEC_OMP_TASKLOOP_SIMD:
12003 case EXEC_OMP_TASKWAIT:
12004 case EXEC_OMP_TASKYIELD:
12005 case EXEC_OMP_TEAMS:
12006 case EXEC_OMP_TEAMS_DISTRIBUTE:
12007 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
12008 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
12009 case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
12010 case EXEC_OMP_WORKSHARE:
12011 gfc_resolve_omp_directive (code, ns);
12012 break;
12013
12014 case EXEC_OMP_PARALLEL:
12015 case EXEC_OMP_PARALLEL_DO:
12016 case EXEC_OMP_PARALLEL_DO_SIMD:
12017 case EXEC_OMP_PARALLEL_SECTIONS:
12018 case EXEC_OMP_PARALLEL_WORKSHARE:
12019 omp_workshare_save = omp_workshare_flag;
12020 omp_workshare_flag = 0;
12021 gfc_resolve_omp_directive (code, ns);
12022 omp_workshare_flag = omp_workshare_save;
12023 break;
12024
12025 default:
12026 gfc_internal_error ("gfc_resolve_code(): Bad statement code");
12027 }
12028 }
12029
12030 cs_base = frame.prev;
12031 }
12032
12033
12034 /* Resolve initial values and make sure they are compatible with
12035 the variable. */
12036
12037 static void
12038 resolve_values (gfc_symbol *sym)
12039 {
12040 bool t;
12041
12042 if (sym->value == NULL)
12043 return;
12044
12045 if (sym->value->expr_type == EXPR_STRUCTURE)
12046 t= resolve_structure_cons (sym->value, 1);
12047 else
12048 t = gfc_resolve_expr (sym->value);
12049
12050 if (!t)
12051 return;
12052
12053 gfc_check_assign_symbol (sym, NULL, sym->value);
12054 }
12055
12056
12057 /* Verify any BIND(C) derived types in the namespace so we can report errors
12058 for them once, rather than for each variable declared of that type. */
12059
12060 static void
12061 resolve_bind_c_derived_types (gfc_symbol *derived_sym)
12062 {
12063 if (derived_sym != NULL && derived_sym->attr.flavor == FL_DERIVED
12064 && derived_sym->attr.is_bind_c == 1)
12065 verify_bind_c_derived_type (derived_sym);
12066
12067 return;
12068 }
12069
12070
12071 /* Check the interfaces of DTIO procedures associated with derived
12072 type 'sym'. These procedures can either have typebound bindings or
12073 can appear in DTIO generic interfaces. */
12074
12075 static void
12076 gfc_verify_DTIO_procedures (gfc_symbol *sym)
12077 {
12078 if (!sym || sym->attr.flavor != FL_DERIVED)
12079 return;
12080
12081 gfc_check_dtio_interfaces (sym);
12082
12083 return;
12084 }
12085
12086 /* Verify that any binding labels used in a given namespace do not collide
12087 with the names or binding labels of any global symbols. Multiple INTERFACE
12088 for the same procedure are permitted. */
12089
12090 static void
12091 gfc_verify_binding_labels (gfc_symbol *sym)
12092 {
12093 gfc_gsymbol *gsym;
12094 const char *module;
12095
12096 if (!sym || !sym->attr.is_bind_c || sym->attr.is_iso_c
12097 || sym->attr.flavor == FL_DERIVED || !sym->binding_label)
12098 return;
12099
12100 gsym = gfc_find_case_gsymbol (gfc_gsym_root, sym->binding_label);
12101
12102 if (sym->module)
12103 module = sym->module;
12104 else if (sym->ns && sym->ns->proc_name
12105 && sym->ns->proc_name->attr.flavor == FL_MODULE)
12106 module = sym->ns->proc_name->name;
12107 else if (sym->ns && sym->ns->parent
12108 && sym->ns && sym->ns->parent->proc_name
12109 && sym->ns->parent->proc_name->attr.flavor == FL_MODULE)
12110 module = sym->ns->parent->proc_name->name;
12111 else
12112 module = NULL;
12113
12114 if (!gsym
12115 || (!gsym->defined
12116 && (gsym->type == GSYM_FUNCTION || gsym->type == GSYM_SUBROUTINE)))
12117 {
12118 if (!gsym)
12119 gsym = gfc_get_gsymbol (sym->binding_label, true);
12120 gsym->where = sym->declared_at;
12121 gsym->sym_name = sym->name;
12122 gsym->binding_label = sym->binding_label;
12123 gsym->ns = sym->ns;
12124 gsym->mod_name = module;
12125 if (sym->attr.function)
12126 gsym->type = GSYM_FUNCTION;
12127 else if (sym->attr.subroutine)
12128 gsym->type = GSYM_SUBROUTINE;
12129 /* Mark as variable/procedure as defined, unless its an INTERFACE. */
12130 gsym->defined = sym->attr.if_source != IFSRC_IFBODY;
12131 return;
12132 }
12133
12134 if (sym->attr.flavor == FL_VARIABLE && gsym->type != GSYM_UNKNOWN)
12135 {
12136 gfc_error ("Variable %qs with binding label %qs at %L uses the same global "
12137 "identifier as entity at %L", sym->name,
12138 sym->binding_label, &sym->declared_at, &gsym->where);
12139 /* Clear the binding label to prevent checking multiple times. */
12140 sym->binding_label = NULL;
12141 return;
12142 }
12143
12144 if (sym->attr.flavor == FL_VARIABLE && module
12145 && (strcmp (module, gsym->mod_name) != 0
12146 || strcmp (sym->name, gsym->sym_name) != 0))
12147 {
12148 /* This can only happen if the variable is defined in a module - if it
12149 isn't the same module, reject it. */
12150 gfc_error ("Variable %qs from module %qs with binding label %qs at %L "
12151 "uses the same global identifier as entity at %L from module %qs",
12152 sym->name, module, sym->binding_label,
12153 &sym->declared_at, &gsym->where, gsym->mod_name);
12154 sym->binding_label = NULL;
12155 return;
12156 }
12157
12158 if ((sym->attr.function || sym->attr.subroutine)
12159 && ((gsym->type != GSYM_SUBROUTINE && gsym->type != GSYM_FUNCTION)
12160 || (gsym->defined && sym->attr.if_source != IFSRC_IFBODY))
12161 && (sym != gsym->ns->proc_name && sym->attr.entry == 0)
12162 && (module != gsym->mod_name
12163 || strcmp (gsym->sym_name, sym->name) != 0
12164 || (module && strcmp (module, gsym->mod_name) != 0)))
12165 {
12166 /* Print an error if the procedure is defined multiple times; we have to
12167 exclude references to the same procedure via module association or
12168 multiple checks for the same procedure. */
12169 gfc_error ("Procedure %qs with binding label %qs at %L uses the same "
12170 "global identifier as entity at %L", sym->name,
12171 sym->binding_label, &sym->declared_at, &gsym->where);
12172 sym->binding_label = NULL;
12173 }
12174 }
12175
12176
12177 /* Resolve an index expression. */
12178
12179 static bool
12180 resolve_index_expr (gfc_expr *e)
12181 {
12182 if (!gfc_resolve_expr (e))
12183 return false;
12184
12185 if (!gfc_simplify_expr (e, 0))
12186 return false;
12187
12188 if (!gfc_specification_expr (e))
12189 return false;
12190
12191 return true;
12192 }
12193
12194
12195 /* Resolve a charlen structure. */
12196
12197 static bool
12198 resolve_charlen (gfc_charlen *cl)
12199 {
12200 int k;
12201 bool saved_specification_expr;
12202
12203 if (cl->resolved)
12204 return true;
12205
12206 cl->resolved = 1;
12207 saved_specification_expr = specification_expr;
12208 specification_expr = true;
12209
12210 if (cl->length_from_typespec)
12211 {
12212 if (!gfc_resolve_expr (cl->length))
12213 {
12214 specification_expr = saved_specification_expr;
12215 return false;
12216 }
12217
12218 if (!gfc_simplify_expr (cl->length, 0))
12219 {
12220 specification_expr = saved_specification_expr;
12221 return false;
12222 }
12223
12224 /* cl->length has been resolved. It should have an integer type. */
12225 if (cl->length->ts.type != BT_INTEGER)
12226 {
12227 gfc_error ("Scalar INTEGER expression expected at %L",
12228 &cl->length->where);
12229 return false;
12230 }
12231 }
12232 else
12233 {
12234 if (!resolve_index_expr (cl->length))
12235 {
12236 specification_expr = saved_specification_expr;
12237 return false;
12238 }
12239 }
12240
12241 /* F2008, 4.4.3.2: If the character length parameter value evaluates to
12242 a negative value, the length of character entities declared is zero. */
12243 if (cl->length && cl->length->expr_type == EXPR_CONSTANT
12244 && mpz_sgn (cl->length->value.integer) < 0)
12245 gfc_replace_expr (cl->length,
12246 gfc_get_int_expr (gfc_charlen_int_kind, NULL, 0));
12247
12248 /* Check that the character length is not too large. */
12249 k = gfc_validate_kind (BT_INTEGER, gfc_charlen_int_kind, false);
12250 if (cl->length && cl->length->expr_type == EXPR_CONSTANT
12251 && cl->length->ts.type == BT_INTEGER
12252 && mpz_cmp (cl->length->value.integer, gfc_integer_kinds[k].huge) > 0)
12253 {
12254 gfc_error ("String length at %L is too large", &cl->length->where);
12255 specification_expr = saved_specification_expr;
12256 return false;
12257 }
12258
12259 specification_expr = saved_specification_expr;
12260 return true;
12261 }
12262
12263
12264 /* Test for non-constant shape arrays. */
12265
12266 static bool
12267 is_non_constant_shape_array (gfc_symbol *sym)
12268 {
12269 gfc_expr *e;
12270 int i;
12271 bool not_constant;
12272
12273 not_constant = false;
12274 if (sym->as != NULL)
12275 {
12276 /* Unfortunately, !gfc_is_compile_time_shape hits a legal case that
12277 has not been simplified; parameter array references. Do the
12278 simplification now. */
12279 for (i = 0; i < sym->as->rank + sym->as->corank; i++)
12280 {
12281 e = sym->as->lower[i];
12282 if (e && (!resolve_index_expr(e)
12283 || !gfc_is_constant_expr (e)))
12284 not_constant = true;
12285 e = sym->as->upper[i];
12286 if (e && (!resolve_index_expr(e)
12287 || !gfc_is_constant_expr (e)))
12288 not_constant = true;
12289 }
12290 }
12291 return not_constant;
12292 }
12293
12294 /* Given a symbol and an initialization expression, add code to initialize
12295 the symbol to the function entry. */
12296 static void
12297 build_init_assign (gfc_symbol *sym, gfc_expr *init)
12298 {
12299 gfc_expr *lval;
12300 gfc_code *init_st;
12301 gfc_namespace *ns = sym->ns;
12302
12303 /* Search for the function namespace if this is a contained
12304 function without an explicit result. */
12305 if (sym->attr.function && sym == sym->result
12306 && sym->name != sym->ns->proc_name->name)
12307 {
12308 ns = ns->contained;
12309 for (;ns; ns = ns->sibling)
12310 if (strcmp (ns->proc_name->name, sym->name) == 0)
12311 break;
12312 }
12313
12314 if (ns == NULL)
12315 {
12316 gfc_free_expr (init);
12317 return;
12318 }
12319
12320 /* Build an l-value expression for the result. */
12321 lval = gfc_lval_expr_from_sym (sym);
12322
12323 /* Add the code at scope entry. */
12324 init_st = gfc_get_code (EXEC_INIT_ASSIGN);
12325 init_st->next = ns->code;
12326 ns->code = init_st;
12327
12328 /* Assign the default initializer to the l-value. */
12329 init_st->loc = sym->declared_at;
12330 init_st->expr1 = lval;
12331 init_st->expr2 = init;
12332 }
12333
12334
12335 /* Whether or not we can generate a default initializer for a symbol. */
12336
12337 static bool
12338 can_generate_init (gfc_symbol *sym)
12339 {
12340 symbol_attribute *a;
12341 if (!sym)
12342 return false;
12343 a = &sym->attr;
12344
12345 /* These symbols should never have a default initialization. */
12346 return !(
12347 a->allocatable
12348 || a->external
12349 || a->pointer
12350 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
12351 && (CLASS_DATA (sym)->attr.class_pointer
12352 || CLASS_DATA (sym)->attr.proc_pointer))
12353 || a->in_equivalence
12354 || a->in_common
12355 || a->data
12356 || sym->module
12357 || a->cray_pointee
12358 || a->cray_pointer
12359 || sym->assoc
12360 || (!a->referenced && !a->result)
12361 || (a->dummy && a->intent != INTENT_OUT)
12362 || (a->function && sym != sym->result)
12363 );
12364 }
12365
12366
12367 /* Assign the default initializer to a derived type variable or result. */
12368
12369 static void
12370 apply_default_init (gfc_symbol *sym)
12371 {
12372 gfc_expr *init = NULL;
12373
12374 if (sym->attr.flavor != FL_VARIABLE && !sym->attr.function)
12375 return;
12376
12377 if (sym->ts.type == BT_DERIVED && sym->ts.u.derived)
12378 init = gfc_generate_initializer (&sym->ts, can_generate_init (sym));
12379
12380 if (init == NULL && sym->ts.type != BT_CLASS)
12381 return;
12382
12383 build_init_assign (sym, init);
12384 sym->attr.referenced = 1;
12385 }
12386
12387
12388 /* Build an initializer for a local. Returns null if the symbol should not have
12389 a default initialization. */
12390
12391 static gfc_expr *
12392 build_default_init_expr (gfc_symbol *sym)
12393 {
12394 /* These symbols should never have a default initialization. */
12395 if (sym->attr.allocatable
12396 || sym->attr.external
12397 || sym->attr.dummy
12398 || sym->attr.pointer
12399 || sym->attr.in_equivalence
12400 || sym->attr.in_common
12401 || sym->attr.data
12402 || sym->module
12403 || sym->attr.cray_pointee
12404 || sym->attr.cray_pointer
12405 || sym->assoc)
12406 return NULL;
12407
12408 /* Get the appropriate init expression. */
12409 return gfc_build_default_init_expr (&sym->ts, &sym->declared_at);
12410 }
12411
12412 /* Add an initialization expression to a local variable. */
12413 static void
12414 apply_default_init_local (gfc_symbol *sym)
12415 {
12416 gfc_expr *init = NULL;
12417
12418 /* The symbol should be a variable or a function return value. */
12419 if ((sym->attr.flavor != FL_VARIABLE && !sym->attr.function)
12420 || (sym->attr.function && sym->result != sym))
12421 return;
12422
12423 /* Try to build the initializer expression. If we can't initialize
12424 this symbol, then init will be NULL. */
12425 init = build_default_init_expr (sym);
12426 if (init == NULL)
12427 return;
12428
12429 /* For saved variables, we don't want to add an initializer at function
12430 entry, so we just add a static initializer. Note that automatic variables
12431 are stack allocated even with -fno-automatic; we have also to exclude
12432 result variable, which are also nonstatic. */
12433 if (!sym->attr.automatic
12434 && (sym->attr.save || sym->ns->save_all
12435 || (flag_max_stack_var_size == 0 && !sym->attr.result
12436 && (sym->ns->proc_name && !sym->ns->proc_name->attr.recursive)
12437 && (!sym->attr.dimension || !is_non_constant_shape_array (sym)))))
12438 {
12439 /* Don't clobber an existing initializer! */
12440 gcc_assert (sym->value == NULL);
12441 sym->value = init;
12442 return;
12443 }
12444
12445 build_init_assign (sym, init);
12446 }
12447
12448
12449 /* Resolution of common features of flavors variable and procedure. */
12450
12451 static bool
12452 resolve_fl_var_and_proc (gfc_symbol *sym, int mp_flag)
12453 {
12454 gfc_array_spec *as;
12455
12456 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
12457 as = CLASS_DATA (sym)->as;
12458 else
12459 as = sym->as;
12460
12461 /* Constraints on deferred shape variable. */
12462 if (as == NULL || as->type != AS_DEFERRED)
12463 {
12464 bool pointer, allocatable, dimension;
12465
12466 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
12467 {
12468 pointer = CLASS_DATA (sym)->attr.class_pointer;
12469 allocatable = CLASS_DATA (sym)->attr.allocatable;
12470 dimension = CLASS_DATA (sym)->attr.dimension;
12471 }
12472 else
12473 {
12474 pointer = sym->attr.pointer && !sym->attr.select_type_temporary;
12475 allocatable = sym->attr.allocatable;
12476 dimension = sym->attr.dimension;
12477 }
12478
12479 if (allocatable)
12480 {
12481 if (dimension && as->type != AS_ASSUMED_RANK)
12482 {
12483 gfc_error ("Allocatable array %qs at %L must have a deferred "
12484 "shape or assumed rank", sym->name, &sym->declared_at);
12485 return false;
12486 }
12487 else if (!gfc_notify_std (GFC_STD_F2003, "Scalar object "
12488 "%qs at %L may not be ALLOCATABLE",
12489 sym->name, &sym->declared_at))
12490 return false;
12491 }
12492
12493 if (pointer && dimension && as->type != AS_ASSUMED_RANK)
12494 {
12495 gfc_error ("Array pointer %qs at %L must have a deferred shape or "
12496 "assumed rank", sym->name, &sym->declared_at);
12497 return false;
12498 }
12499 }
12500 else
12501 {
12502 if (!mp_flag && !sym->attr.allocatable && !sym->attr.pointer
12503 && sym->ts.type != BT_CLASS && !sym->assoc)
12504 {
12505 gfc_error ("Array %qs at %L cannot have a deferred shape",
12506 sym->name, &sym->declared_at);
12507 return false;
12508 }
12509 }
12510
12511 /* Constraints on polymorphic variables. */
12512 if (sym->ts.type == BT_CLASS && !(sym->result && sym->result != sym))
12513 {
12514 /* F03:C502. */
12515 if (sym->attr.class_ok
12516 && !sym->attr.select_type_temporary
12517 && !UNLIMITED_POLY (sym)
12518 && !gfc_type_is_extensible (CLASS_DATA (sym)->ts.u.derived))
12519 {
12520 gfc_error ("Type %qs of CLASS variable %qs at %L is not extensible",
12521 CLASS_DATA (sym)->ts.u.derived->name, sym->name,
12522 &sym->declared_at);
12523 return false;
12524 }
12525
12526 /* F03:C509. */
12527 /* Assume that use associated symbols were checked in the module ns.
12528 Class-variables that are associate-names are also something special
12529 and excepted from the test. */
12530 if (!sym->attr.class_ok && !sym->attr.use_assoc && !sym->assoc)
12531 {
12532 gfc_error ("CLASS variable %qs at %L must be dummy, allocatable "
12533 "or pointer", sym->name, &sym->declared_at);
12534 return false;
12535 }
12536 }
12537
12538 return true;
12539 }
12540
12541
12542 /* Additional checks for symbols with flavor variable and derived
12543 type. To be called from resolve_fl_variable. */
12544
12545 static bool
12546 resolve_fl_variable_derived (gfc_symbol *sym, int no_init_flag)
12547 {
12548 gcc_assert (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS);
12549
12550 /* Check to see if a derived type is blocked from being host
12551 associated by the presence of another class I symbol in the same
12552 namespace. 14.6.1.3 of the standard and the discussion on
12553 comp.lang.fortran. */
12554 if (sym->ns != sym->ts.u.derived->ns
12555 && !sym->ts.u.derived->attr.use_assoc
12556 && sym->ns->proc_name->attr.if_source != IFSRC_IFBODY)
12557 {
12558 gfc_symbol *s;
12559 gfc_find_symbol (sym->ts.u.derived->name, sym->ns, 0, &s);
12560 if (s && s->attr.generic)
12561 s = gfc_find_dt_in_generic (s);
12562 if (s && !gfc_fl_struct (s->attr.flavor))
12563 {
12564 gfc_error ("The type %qs cannot be host associated at %L "
12565 "because it is blocked by an incompatible object "
12566 "of the same name declared at %L",
12567 sym->ts.u.derived->name, &sym->declared_at,
12568 &s->declared_at);
12569 return false;
12570 }
12571 }
12572
12573 /* 4th constraint in section 11.3: "If an object of a type for which
12574 component-initialization is specified (R429) appears in the
12575 specification-part of a module and does not have the ALLOCATABLE
12576 or POINTER attribute, the object shall have the SAVE attribute."
12577
12578 The check for initializers is performed with
12579 gfc_has_default_initializer because gfc_default_initializer generates
12580 a hidden default for allocatable components. */
12581 if (!(sym->value || no_init_flag) && sym->ns->proc_name
12582 && sym->ns->proc_name->attr.flavor == FL_MODULE
12583 && !(sym->ns->save_all && !sym->attr.automatic) && !sym->attr.save
12584 && !sym->attr.pointer && !sym->attr.allocatable
12585 && gfc_has_default_initializer (sym->ts.u.derived)
12586 && !gfc_notify_std (GFC_STD_F2008, "Implied SAVE for module variable "
12587 "%qs at %L, needed due to the default "
12588 "initialization", sym->name, &sym->declared_at))
12589 return false;
12590
12591 /* Assign default initializer. */
12592 if (!(sym->value || sym->attr.pointer || sym->attr.allocatable)
12593 && (!no_init_flag || sym->attr.intent == INTENT_OUT))
12594 sym->value = gfc_generate_initializer (&sym->ts, can_generate_init (sym));
12595
12596 return true;
12597 }
12598
12599
12600 /* F2008, C402 (R401): A colon shall not be used as a type-param-value
12601 except in the declaration of an entity or component that has the POINTER
12602 or ALLOCATABLE attribute. */
12603
12604 static bool
12605 deferred_requirements (gfc_symbol *sym)
12606 {
12607 if (sym->ts.deferred
12608 && !(sym->attr.pointer
12609 || sym->attr.allocatable
12610 || sym->attr.associate_var
12611 || sym->attr.omp_udr_artificial_var))
12612 {
12613 /* If a function has a result variable, only check the variable. */
12614 if (sym->result && sym->name != sym->result->name)
12615 return true;
12616
12617 gfc_error ("Entity %qs at %L has a deferred type parameter and "
12618 "requires either the POINTER or ALLOCATABLE attribute",
12619 sym->name, &sym->declared_at);
12620 return false;
12621 }
12622 return true;
12623 }
12624
12625
12626 /* Resolve symbols with flavor variable. */
12627
12628 static bool
12629 resolve_fl_variable (gfc_symbol *sym, int mp_flag)
12630 {
12631 const char *auto_save_msg = "Automatic object %qs at %L cannot have the "
12632 "SAVE attribute";
12633
12634 if (!resolve_fl_var_and_proc (sym, mp_flag))
12635 return false;
12636
12637 /* Set this flag to check that variables are parameters of all entries.
12638 This check is effected by the call to gfc_resolve_expr through
12639 is_non_constant_shape_array. */
12640 bool saved_specification_expr = specification_expr;
12641 specification_expr = true;
12642
12643 if (sym->ns->proc_name
12644 && (sym->ns->proc_name->attr.flavor == FL_MODULE
12645 || sym->ns->proc_name->attr.is_main_program)
12646 && !sym->attr.use_assoc
12647 && !sym->attr.allocatable
12648 && !sym->attr.pointer
12649 && is_non_constant_shape_array (sym))
12650 {
12651 /* F08:C541. The shape of an array defined in a main program or module
12652 * needs to be constant. */
12653 gfc_error ("The module or main program array %qs at %L must "
12654 "have constant shape", sym->name, &sym->declared_at);
12655 specification_expr = saved_specification_expr;
12656 return false;
12657 }
12658
12659 /* Constraints on deferred type parameter. */
12660 if (!deferred_requirements (sym))
12661 return false;
12662
12663 if (sym->ts.type == BT_CHARACTER && !sym->attr.associate_var)
12664 {
12665 /* Make sure that character string variables with assumed length are
12666 dummy arguments. */
12667 gfc_expr *e = NULL;
12668
12669 if (sym->ts.u.cl)
12670 e = sym->ts.u.cl->length;
12671 else
12672 return false;
12673
12674 if (e == NULL && !sym->attr.dummy && !sym->attr.result
12675 && !sym->ts.deferred && !sym->attr.select_type_temporary
12676 && !sym->attr.omp_udr_artificial_var)
12677 {
12678 gfc_error ("Entity with assumed character length at %L must be a "
12679 "dummy argument or a PARAMETER", &sym->declared_at);
12680 specification_expr = saved_specification_expr;
12681 return false;
12682 }
12683
12684 if (e && sym->attr.save == SAVE_EXPLICIT && !gfc_is_constant_expr (e))
12685 {
12686 gfc_error (auto_save_msg, sym->name, &sym->declared_at);
12687 specification_expr = saved_specification_expr;
12688 return false;
12689 }
12690
12691 if (!gfc_is_constant_expr (e)
12692 && !(e->expr_type == EXPR_VARIABLE
12693 && e->symtree->n.sym->attr.flavor == FL_PARAMETER))
12694 {
12695 if (!sym->attr.use_assoc && sym->ns->proc_name
12696 && (sym->ns->proc_name->attr.flavor == FL_MODULE
12697 || sym->ns->proc_name->attr.is_main_program))
12698 {
12699 gfc_error ("%qs at %L must have constant character length "
12700 "in this context", sym->name, &sym->declared_at);
12701 specification_expr = saved_specification_expr;
12702 return false;
12703 }
12704 if (sym->attr.in_common)
12705 {
12706 gfc_error ("COMMON variable %qs at %L must have constant "
12707 "character length", sym->name, &sym->declared_at);
12708 specification_expr = saved_specification_expr;
12709 return false;
12710 }
12711 }
12712 }
12713
12714 if (sym->value == NULL && sym->attr.referenced)
12715 apply_default_init_local (sym); /* Try to apply a default initialization. */
12716
12717 /* Determine if the symbol may not have an initializer. */
12718 int no_init_flag = 0, automatic_flag = 0;
12719 if (sym->attr.allocatable || sym->attr.external || sym->attr.dummy
12720 || sym->attr.intrinsic || sym->attr.result)
12721 no_init_flag = 1;
12722 else if ((sym->attr.dimension || sym->attr.codimension) && !sym->attr.pointer
12723 && is_non_constant_shape_array (sym))
12724 {
12725 no_init_flag = automatic_flag = 1;
12726
12727 /* Also, they must not have the SAVE attribute.
12728 SAVE_IMPLICIT is checked below. */
12729 if (sym->as && sym->attr.codimension)
12730 {
12731 int corank = sym->as->corank;
12732 sym->as->corank = 0;
12733 no_init_flag = automatic_flag = is_non_constant_shape_array (sym);
12734 sym->as->corank = corank;
12735 }
12736 if (automatic_flag && sym->attr.save == SAVE_EXPLICIT)
12737 {
12738 gfc_error (auto_save_msg, sym->name, &sym->declared_at);
12739 specification_expr = saved_specification_expr;
12740 return false;
12741 }
12742 }
12743
12744 /* Ensure that any initializer is simplified. */
12745 if (sym->value)
12746 gfc_simplify_expr (sym->value, 1);
12747
12748 /* Reject illegal initializers. */
12749 if (!sym->mark && sym->value)
12750 {
12751 if (sym->attr.allocatable || (sym->ts.type == BT_CLASS
12752 && CLASS_DATA (sym)->attr.allocatable))
12753 gfc_error ("Allocatable %qs at %L cannot have an initializer",
12754 sym->name, &sym->declared_at);
12755 else if (sym->attr.external)
12756 gfc_error ("External %qs at %L cannot have an initializer",
12757 sym->name, &sym->declared_at);
12758 else if (sym->attr.dummy
12759 && !(sym->ts.type == BT_DERIVED && sym->attr.intent == INTENT_OUT))
12760 gfc_error ("Dummy %qs at %L cannot have an initializer",
12761 sym->name, &sym->declared_at);
12762 else if (sym->attr.intrinsic)
12763 gfc_error ("Intrinsic %qs at %L cannot have an initializer",
12764 sym->name, &sym->declared_at);
12765 else if (sym->attr.result)
12766 gfc_error ("Function result %qs at %L cannot have an initializer",
12767 sym->name, &sym->declared_at);
12768 else if (automatic_flag)
12769 gfc_error ("Automatic array %qs at %L cannot have an initializer",
12770 sym->name, &sym->declared_at);
12771 else
12772 goto no_init_error;
12773 specification_expr = saved_specification_expr;
12774 return false;
12775 }
12776
12777 no_init_error:
12778 if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS)
12779 {
12780 bool res = resolve_fl_variable_derived (sym, no_init_flag);
12781 specification_expr = saved_specification_expr;
12782 return res;
12783 }
12784
12785 specification_expr = saved_specification_expr;
12786 return true;
12787 }
12788
12789
12790 /* Compare the dummy characteristics of a module procedure interface
12791 declaration with the corresponding declaration in a submodule. */
12792 static gfc_formal_arglist *new_formal;
12793 static char errmsg[200];
12794
12795 static void
12796 compare_fsyms (gfc_symbol *sym)
12797 {
12798 gfc_symbol *fsym;
12799
12800 if (sym == NULL || new_formal == NULL)
12801 return;
12802
12803 fsym = new_formal->sym;
12804
12805 if (sym == fsym)
12806 return;
12807
12808 if (strcmp (sym->name, fsym->name) == 0)
12809 {
12810 if (!gfc_check_dummy_characteristics (fsym, sym, true, errmsg, 200))
12811 gfc_error ("%s at %L", errmsg, &fsym->declared_at);
12812 }
12813 }
12814
12815
12816 /* Resolve a procedure. */
12817
12818 static bool
12819 resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
12820 {
12821 gfc_formal_arglist *arg;
12822
12823 if (sym->attr.function
12824 && !resolve_fl_var_and_proc (sym, mp_flag))
12825 return false;
12826
12827 /* Constraints on deferred type parameter. */
12828 if (!deferred_requirements (sym))
12829 return false;
12830
12831 if (sym->ts.type == BT_CHARACTER)
12832 {
12833 gfc_charlen *cl = sym->ts.u.cl;
12834
12835 if (cl && cl->length && gfc_is_constant_expr (cl->length)
12836 && !resolve_charlen (cl))
12837 return false;
12838
12839 if ((!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
12840 && sym->attr.proc == PROC_ST_FUNCTION)
12841 {
12842 gfc_error ("Character-valued statement function %qs at %L must "
12843 "have constant length", sym->name, &sym->declared_at);
12844 return false;
12845 }
12846 }
12847
12848 /* Ensure that derived type for are not of a private type. Internal
12849 module procedures are excluded by 2.2.3.3 - i.e., they are not
12850 externally accessible and can access all the objects accessible in
12851 the host. */
12852 if (!(sym->ns->parent && sym->ns->parent->proc_name
12853 && sym->ns->parent->proc_name->attr.flavor == FL_MODULE)
12854 && gfc_check_symbol_access (sym))
12855 {
12856 gfc_interface *iface;
12857
12858 for (arg = gfc_sym_get_dummy_args (sym); arg; arg = arg->next)
12859 {
12860 if (arg->sym
12861 && arg->sym->ts.type == BT_DERIVED
12862 && !arg->sym->ts.u.derived->attr.use_assoc
12863 && !gfc_check_symbol_access (arg->sym->ts.u.derived)
12864 && !gfc_notify_std (GFC_STD_F2003, "%qs is of a PRIVATE type "
12865 "and cannot be a dummy argument"
12866 " of %qs, which is PUBLIC at %L",
12867 arg->sym->name, sym->name,
12868 &sym->declared_at))
12869 {
12870 /* Stop this message from recurring. */
12871 arg->sym->ts.u.derived->attr.access = ACCESS_PUBLIC;
12872 return false;
12873 }
12874 }
12875
12876 /* PUBLIC interfaces may expose PRIVATE procedures that take types
12877 PRIVATE to the containing module. */
12878 for (iface = sym->generic; iface; iface = iface->next)
12879 {
12880 for (arg = gfc_sym_get_dummy_args (iface->sym); arg; arg = arg->next)
12881 {
12882 if (arg->sym
12883 && arg->sym->ts.type == BT_DERIVED
12884 && !arg->sym->ts.u.derived->attr.use_assoc
12885 && !gfc_check_symbol_access (arg->sym->ts.u.derived)
12886 && !gfc_notify_std (GFC_STD_F2003, "Procedure %qs in "
12887 "PUBLIC interface %qs at %L "
12888 "takes dummy arguments of %qs which "
12889 "is PRIVATE", iface->sym->name,
12890 sym->name, &iface->sym->declared_at,
12891 gfc_typename(&arg->sym->ts)))
12892 {
12893 /* Stop this message from recurring. */
12894 arg->sym->ts.u.derived->attr.access = ACCESS_PUBLIC;
12895 return false;
12896 }
12897 }
12898 }
12899 }
12900
12901 if (sym->attr.function && sym->value && sym->attr.proc != PROC_ST_FUNCTION
12902 && !sym->attr.proc_pointer)
12903 {
12904 gfc_error ("Function %qs at %L cannot have an initializer",
12905 sym->name, &sym->declared_at);
12906
12907 /* Make sure no second error is issued for this. */
12908 sym->value->error = 1;
12909 return false;
12910 }
12911
12912 /* An external symbol may not have an initializer because it is taken to be
12913 a procedure. Exception: Procedure Pointers. */
12914 if (sym->attr.external && sym->value && !sym->attr.proc_pointer)
12915 {
12916 gfc_error ("External object %qs at %L may not have an initializer",
12917 sym->name, &sym->declared_at);
12918 return false;
12919 }
12920
12921 /* An elemental function is required to return a scalar 12.7.1 */
12922 if (sym->attr.elemental && sym->attr.function
12923 && (sym->as || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as)))
12924 {
12925 gfc_error ("ELEMENTAL function %qs at %L must have a scalar "
12926 "result", sym->name, &sym->declared_at);
12927 /* Reset so that the error only occurs once. */
12928 sym->attr.elemental = 0;
12929 return false;
12930 }
12931
12932 if (sym->attr.proc == PROC_ST_FUNCTION
12933 && (sym->attr.allocatable || sym->attr.pointer))
12934 {
12935 gfc_error ("Statement function %qs at %L may not have pointer or "
12936 "allocatable attribute", sym->name, &sym->declared_at);
12937 return false;
12938 }
12939
12940 /* 5.1.1.5 of the Standard: A function name declared with an asterisk
12941 char-len-param shall not be array-valued, pointer-valued, recursive
12942 or pure. ....snip... A character value of * may only be used in the
12943 following ways: (i) Dummy arg of procedure - dummy associates with
12944 actual length; (ii) To declare a named constant; or (iii) External
12945 function - but length must be declared in calling scoping unit. */
12946 if (sym->attr.function
12947 && sym->ts.type == BT_CHARACTER && !sym->ts.deferred
12948 && sym->ts.u.cl && sym->ts.u.cl->length == NULL)
12949 {
12950 if ((sym->as && sym->as->rank) || (sym->attr.pointer)
12951 || (sym->attr.recursive) || (sym->attr.pure))
12952 {
12953 if (sym->as && sym->as->rank)
12954 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
12955 "array-valued", sym->name, &sym->declared_at);
12956
12957 if (sym->attr.pointer)
12958 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
12959 "pointer-valued", sym->name, &sym->declared_at);
12960
12961 if (sym->attr.pure)
12962 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
12963 "pure", sym->name, &sym->declared_at);
12964
12965 if (sym->attr.recursive)
12966 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
12967 "recursive", sym->name, &sym->declared_at);
12968
12969 return false;
12970 }
12971
12972 /* Appendix B.2 of the standard. Contained functions give an
12973 error anyway. Deferred character length is an F2003 feature.
12974 Don't warn on intrinsic conversion functions, which start
12975 with two underscores. */
12976 if (!sym->attr.contained && !sym->ts.deferred
12977 && (sym->name[0] != '_' || sym->name[1] != '_'))
12978 gfc_notify_std (GFC_STD_F95_OBS,
12979 "CHARACTER(*) function %qs at %L",
12980 sym->name, &sym->declared_at);
12981 }
12982
12983 /* F2008, C1218. */
12984 if (sym->attr.elemental)
12985 {
12986 if (sym->attr.proc_pointer)
12987 {
12988 gfc_error ("Procedure pointer %qs at %L shall not be elemental",
12989 sym->name, &sym->declared_at);
12990 return false;
12991 }
12992 if (sym->attr.dummy)
12993 {
12994 gfc_error ("Dummy procedure %qs at %L shall not be elemental",
12995 sym->name, &sym->declared_at);
12996 return false;
12997 }
12998 }
12999
13000 /* F2018, C15100: "The result of an elemental function shall be scalar,
13001 and shall not have the POINTER or ALLOCATABLE attribute." The scalar
13002 pointer is tested and caught elsewhere. */
13003 if (sym->attr.elemental && sym->result
13004 && (sym->result->attr.allocatable || sym->result->attr.pointer))
13005 {
13006 gfc_error ("Function result variable %qs at %L of elemental "
13007 "function %qs shall not have an ALLOCATABLE or POINTER "
13008 "attribute", sym->result->name,
13009 &sym->result->declared_at, sym->name);
13010 return false;
13011 }
13012
13013 if (sym->attr.is_bind_c && sym->attr.is_c_interop != 1)
13014 {
13015 gfc_formal_arglist *curr_arg;
13016 int has_non_interop_arg = 0;
13017
13018 if (!verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common,
13019 sym->common_block))
13020 {
13021 /* Clear these to prevent looking at them again if there was an
13022 error. */
13023 sym->attr.is_bind_c = 0;
13024 sym->attr.is_c_interop = 0;
13025 sym->ts.is_c_interop = 0;
13026 }
13027 else
13028 {
13029 /* So far, no errors have been found. */
13030 sym->attr.is_c_interop = 1;
13031 sym->ts.is_c_interop = 1;
13032 }
13033
13034 curr_arg = gfc_sym_get_dummy_args (sym);
13035 while (curr_arg != NULL)
13036 {
13037 /* Skip implicitly typed dummy args here. */
13038 if (curr_arg->sym && curr_arg->sym->attr.implicit_type == 0)
13039 if (!gfc_verify_c_interop_param (curr_arg->sym))
13040 /* If something is found to fail, record the fact so we
13041 can mark the symbol for the procedure as not being
13042 BIND(C) to try and prevent multiple errors being
13043 reported. */
13044 has_non_interop_arg = 1;
13045
13046 curr_arg = curr_arg->next;
13047 }
13048
13049 /* See if any of the arguments were not interoperable and if so, clear
13050 the procedure symbol to prevent duplicate error messages. */
13051 if (has_non_interop_arg != 0)
13052 {
13053 sym->attr.is_c_interop = 0;
13054 sym->ts.is_c_interop = 0;
13055 sym->attr.is_bind_c = 0;
13056 }
13057 }
13058
13059 if (!sym->attr.proc_pointer)
13060 {
13061 if (sym->attr.save == SAVE_EXPLICIT)
13062 {
13063 gfc_error ("PROCEDURE attribute conflicts with SAVE attribute "
13064 "in %qs at %L", sym->name, &sym->declared_at);
13065 return false;
13066 }
13067 if (sym->attr.intent)
13068 {
13069 gfc_error ("PROCEDURE attribute conflicts with INTENT attribute "
13070 "in %qs at %L", sym->name, &sym->declared_at);
13071 return false;
13072 }
13073 if (sym->attr.subroutine && sym->attr.result)
13074 {
13075 gfc_error ("PROCEDURE attribute conflicts with RESULT attribute "
13076 "in %qs at %L", sym->name, &sym->declared_at);
13077 return false;
13078 }
13079 if (sym->attr.external && sym->attr.function && !sym->attr.module_procedure
13080 && ((sym->attr.if_source == IFSRC_DECL && !sym->attr.procedure)
13081 || sym->attr.contained))
13082 {
13083 gfc_error ("EXTERNAL attribute conflicts with FUNCTION attribute "
13084 "in %qs at %L", sym->name, &sym->declared_at);
13085 return false;
13086 }
13087 if (strcmp ("ppr@", sym->name) == 0)
13088 {
13089 gfc_error ("Procedure pointer result %qs at %L "
13090 "is missing the pointer attribute",
13091 sym->ns->proc_name->name, &sym->declared_at);
13092 return false;
13093 }
13094 }
13095
13096 /* Assume that a procedure whose body is not known has references
13097 to external arrays. */
13098 if (sym->attr.if_source != IFSRC_DECL)
13099 sym->attr.array_outer_dependency = 1;
13100
13101 /* Compare the characteristics of a module procedure with the
13102 interface declaration. Ideally this would be done with
13103 gfc_compare_interfaces but, at present, the formal interface
13104 cannot be copied to the ts.interface. */
13105 if (sym->attr.module_procedure
13106 && sym->attr.if_source == IFSRC_DECL)
13107 {
13108 gfc_symbol *iface;
13109 char name[2*GFC_MAX_SYMBOL_LEN + 1];
13110 char *module_name;
13111 char *submodule_name;
13112 strcpy (name, sym->ns->proc_name->name);
13113 module_name = strtok (name, ".");
13114 submodule_name = strtok (NULL, ".");
13115
13116 iface = sym->tlink;
13117 sym->tlink = NULL;
13118
13119 /* Make sure that the result uses the correct charlen for deferred
13120 length results. */
13121 if (iface && sym->result
13122 && iface->ts.type == BT_CHARACTER
13123 && iface->ts.deferred)
13124 sym->result->ts.u.cl = iface->ts.u.cl;
13125
13126 if (iface == NULL)
13127 goto check_formal;
13128
13129 /* Check the procedure characteristics. */
13130 if (sym->attr.elemental != iface->attr.elemental)
13131 {
13132 gfc_error ("Mismatch in ELEMENTAL attribute between MODULE "
13133 "PROCEDURE at %L and its interface in %s",
13134 &sym->declared_at, module_name);
13135 return false;
13136 }
13137
13138 if (sym->attr.pure != iface->attr.pure)
13139 {
13140 gfc_error ("Mismatch in PURE attribute between MODULE "
13141 "PROCEDURE at %L and its interface in %s",
13142 &sym->declared_at, module_name);
13143 return false;
13144 }
13145
13146 if (sym->attr.recursive != iface->attr.recursive)
13147 {
13148 gfc_error ("Mismatch in RECURSIVE attribute between MODULE "
13149 "PROCEDURE at %L and its interface in %s",
13150 &sym->declared_at, module_name);
13151 return false;
13152 }
13153
13154 /* Check the result characteristics. */
13155 if (!gfc_check_result_characteristics (sym, iface, errmsg, 200))
13156 {
13157 gfc_error ("%s between the MODULE PROCEDURE declaration "
13158 "in MODULE %qs and the declaration at %L in "
13159 "(SUB)MODULE %qs",
13160 errmsg, module_name, &sym->declared_at,
13161 submodule_name ? submodule_name : module_name);
13162 return false;
13163 }
13164
13165 check_formal:
13166 /* Check the characteristics of the formal arguments. */
13167 if (sym->formal && sym->formal_ns)
13168 {
13169 for (arg = sym->formal; arg && arg->sym; arg = arg->next)
13170 {
13171 new_formal = arg;
13172 gfc_traverse_ns (sym->formal_ns, compare_fsyms);
13173 }
13174 }
13175 }
13176 return true;
13177 }
13178
13179
13180 /* Resolve a list of finalizer procedures. That is, after they have hopefully
13181 been defined and we now know their defined arguments, check that they fulfill
13182 the requirements of the standard for procedures used as finalizers. */
13183
13184 static bool
13185 gfc_resolve_finalizers (gfc_symbol* derived, bool *finalizable)
13186 {
13187 gfc_finalizer* list;
13188 gfc_finalizer** prev_link; /* For removing wrong entries from the list. */
13189 bool result = true;
13190 bool seen_scalar = false;
13191 gfc_symbol *vtab;
13192 gfc_component *c;
13193 gfc_symbol *parent = gfc_get_derived_super_type (derived);
13194
13195 if (parent)
13196 gfc_resolve_finalizers (parent, finalizable);
13197
13198 /* Ensure that derived-type components have a their finalizers resolved. */
13199 bool has_final = derived->f2k_derived && derived->f2k_derived->finalizers;
13200 for (c = derived->components; c; c = c->next)
13201 if (c->ts.type == BT_DERIVED
13202 && !c->attr.pointer && !c->attr.proc_pointer && !c->attr.allocatable)
13203 {
13204 bool has_final2 = false;
13205 if (!gfc_resolve_finalizers (c->ts.u.derived, &has_final2))
13206 return false; /* Error. */
13207 has_final = has_final || has_final2;
13208 }
13209 /* Return early if not finalizable. */
13210 if (!has_final)
13211 {
13212 if (finalizable)
13213 *finalizable = false;
13214 return true;
13215 }
13216
13217 /* Walk over the list of finalizer-procedures, check them, and if any one
13218 does not fit in with the standard's definition, print an error and remove
13219 it from the list. */
13220 prev_link = &derived->f2k_derived->finalizers;
13221 for (list = derived->f2k_derived->finalizers; list; list = *prev_link)
13222 {
13223 gfc_formal_arglist *dummy_args;
13224 gfc_symbol* arg;
13225 gfc_finalizer* i;
13226 int my_rank;
13227
13228 /* Skip this finalizer if we already resolved it. */
13229 if (list->proc_tree)
13230 {
13231 if (list->proc_tree->n.sym->formal->sym->as == NULL
13232 || list->proc_tree->n.sym->formal->sym->as->rank == 0)
13233 seen_scalar = true;
13234 prev_link = &(list->next);
13235 continue;
13236 }
13237
13238 /* Check this exists and is a SUBROUTINE. */
13239 if (!list->proc_sym->attr.subroutine)
13240 {
13241 gfc_error ("FINAL procedure %qs at %L is not a SUBROUTINE",
13242 list->proc_sym->name, &list->where);
13243 goto error;
13244 }
13245
13246 /* We should have exactly one argument. */
13247 dummy_args = gfc_sym_get_dummy_args (list->proc_sym);
13248 if (!dummy_args || dummy_args->next)
13249 {
13250 gfc_error ("FINAL procedure at %L must have exactly one argument",
13251 &list->where);
13252 goto error;
13253 }
13254 arg = dummy_args->sym;
13255
13256 /* This argument must be of our type. */
13257 if (arg->ts.type != BT_DERIVED || arg->ts.u.derived != derived)
13258 {
13259 gfc_error ("Argument of FINAL procedure at %L must be of type %qs",
13260 &arg->declared_at, derived->name);
13261 goto error;
13262 }
13263
13264 /* It must neither be a pointer nor allocatable nor optional. */
13265 if (arg->attr.pointer)
13266 {
13267 gfc_error ("Argument of FINAL procedure at %L must not be a POINTER",
13268 &arg->declared_at);
13269 goto error;
13270 }
13271 if (arg->attr.allocatable)
13272 {
13273 gfc_error ("Argument of FINAL procedure at %L must not be"
13274 " ALLOCATABLE", &arg->declared_at);
13275 goto error;
13276 }
13277 if (arg->attr.optional)
13278 {
13279 gfc_error ("Argument of FINAL procedure at %L must not be OPTIONAL",
13280 &arg->declared_at);
13281 goto error;
13282 }
13283
13284 /* It must not be INTENT(OUT). */
13285 if (arg->attr.intent == INTENT_OUT)
13286 {
13287 gfc_error ("Argument of FINAL procedure at %L must not be"
13288 " INTENT(OUT)", &arg->declared_at);
13289 goto error;
13290 }
13291
13292 /* Warn if the procedure is non-scalar and not assumed shape. */
13293 if (warn_surprising && arg->as && arg->as->rank != 0
13294 && arg->as->type != AS_ASSUMED_SHAPE)
13295 gfc_warning (OPT_Wsurprising,
13296 "Non-scalar FINAL procedure at %L should have assumed"
13297 " shape argument", &arg->declared_at);
13298
13299 /* Check that it does not match in kind and rank with a FINAL procedure
13300 defined earlier. To really loop over the *earlier* declarations,
13301 we need to walk the tail of the list as new ones were pushed at the
13302 front. */
13303 /* TODO: Handle kind parameters once they are implemented. */
13304 my_rank = (arg->as ? arg->as->rank : 0);
13305 for (i = list->next; i; i = i->next)
13306 {
13307 gfc_formal_arglist *dummy_args;
13308
13309 /* Argument list might be empty; that is an error signalled earlier,
13310 but we nevertheless continued resolving. */
13311 dummy_args = gfc_sym_get_dummy_args (i->proc_sym);
13312 if (dummy_args)
13313 {
13314 gfc_symbol* i_arg = dummy_args->sym;
13315 const int i_rank = (i_arg->as ? i_arg->as->rank : 0);
13316 if (i_rank == my_rank)
13317 {
13318 gfc_error ("FINAL procedure %qs declared at %L has the same"
13319 " rank (%d) as %qs",
13320 list->proc_sym->name, &list->where, my_rank,
13321 i->proc_sym->name);
13322 goto error;
13323 }
13324 }
13325 }
13326
13327 /* Is this the/a scalar finalizer procedure? */
13328 if (my_rank == 0)
13329 seen_scalar = true;
13330
13331 /* Find the symtree for this procedure. */
13332 gcc_assert (!list->proc_tree);
13333 list->proc_tree = gfc_find_sym_in_symtree (list->proc_sym);
13334
13335 prev_link = &list->next;
13336 continue;
13337
13338 /* Remove wrong nodes immediately from the list so we don't risk any
13339 troubles in the future when they might fail later expectations. */
13340 error:
13341 i = list;
13342 *prev_link = list->next;
13343 gfc_free_finalizer (i);
13344 result = false;
13345 }
13346
13347 if (result == false)
13348 return false;
13349
13350 /* Warn if we haven't seen a scalar finalizer procedure (but we know there
13351 were nodes in the list, must have been for arrays. It is surely a good
13352 idea to have a scalar version there if there's something to finalize. */
13353 if (warn_surprising && derived->f2k_derived->finalizers && !seen_scalar)
13354 gfc_warning (OPT_Wsurprising,
13355 "Only array FINAL procedures declared for derived type %qs"
13356 " defined at %L, suggest also scalar one",
13357 derived->name, &derived->declared_at);
13358
13359 vtab = gfc_find_derived_vtab (derived);
13360 c = vtab->ts.u.derived->components->next->next->next->next->next;
13361 gfc_set_sym_referenced (c->initializer->symtree->n.sym);
13362
13363 if (finalizable)
13364 *finalizable = true;
13365
13366 return true;
13367 }
13368
13369
13370 /* Check if two GENERIC targets are ambiguous and emit an error is they are. */
13371
13372 static bool
13373 check_generic_tbp_ambiguity (gfc_tbp_generic* t1, gfc_tbp_generic* t2,
13374 const char* generic_name, locus where)
13375 {
13376 gfc_symbol *sym1, *sym2;
13377 const char *pass1, *pass2;
13378 gfc_formal_arglist *dummy_args;
13379
13380 gcc_assert (t1->specific && t2->specific);
13381 gcc_assert (!t1->specific->is_generic);
13382 gcc_assert (!t2->specific->is_generic);
13383 gcc_assert (t1->is_operator == t2->is_operator);
13384
13385 sym1 = t1->specific->u.specific->n.sym;
13386 sym2 = t2->specific->u.specific->n.sym;
13387
13388 if (sym1 == sym2)
13389 return true;
13390
13391 /* Both must be SUBROUTINEs or both must be FUNCTIONs. */
13392 if (sym1->attr.subroutine != sym2->attr.subroutine
13393 || sym1->attr.function != sym2->attr.function)
13394 {
13395 gfc_error ("%qs and %qs cannot be mixed FUNCTION/SUBROUTINE for"
13396 " GENERIC %qs at %L",
13397 sym1->name, sym2->name, generic_name, &where);
13398 return false;
13399 }
13400
13401 /* Determine PASS arguments. */
13402 if (t1->specific->nopass)
13403 pass1 = NULL;
13404 else if (t1->specific->pass_arg)
13405 pass1 = t1->specific->pass_arg;
13406 else
13407 {
13408 dummy_args = gfc_sym_get_dummy_args (t1->specific->u.specific->n.sym);
13409 if (dummy_args)
13410 pass1 = dummy_args->sym->name;
13411 else
13412 pass1 = NULL;
13413 }
13414 if (t2->specific->nopass)
13415 pass2 = NULL;
13416 else if (t2->specific->pass_arg)
13417 pass2 = t2->specific->pass_arg;
13418 else
13419 {
13420 dummy_args = gfc_sym_get_dummy_args (t2->specific->u.specific->n.sym);
13421 if (dummy_args)
13422 pass2 = dummy_args->sym->name;
13423 else
13424 pass2 = NULL;
13425 }
13426
13427 /* Compare the interfaces. */
13428 if (gfc_compare_interfaces (sym1, sym2, sym2->name, !t1->is_operator, 0,
13429 NULL, 0, pass1, pass2))
13430 {
13431 gfc_error ("%qs and %qs for GENERIC %qs at %L are ambiguous",
13432 sym1->name, sym2->name, generic_name, &where);
13433 return false;
13434 }
13435
13436 return true;
13437 }
13438
13439
13440 /* Worker function for resolving a generic procedure binding; this is used to
13441 resolve GENERIC as well as user and intrinsic OPERATOR typebound procedures.
13442
13443 The difference between those cases is finding possible inherited bindings
13444 that are overridden, as one has to look for them in tb_sym_root,
13445 tb_uop_root or tb_op, respectively. Thus the caller must already find
13446 the super-type and set p->overridden correctly. */
13447
13448 static bool
13449 resolve_tb_generic_targets (gfc_symbol* super_type,
13450 gfc_typebound_proc* p, const char* name)
13451 {
13452 gfc_tbp_generic* target;
13453 gfc_symtree* first_target;
13454 gfc_symtree* inherited;
13455
13456 gcc_assert (p && p->is_generic);
13457
13458 /* Try to find the specific bindings for the symtrees in our target-list. */
13459 gcc_assert (p->u.generic);
13460 for (target = p->u.generic; target; target = target->next)
13461 if (!target->specific)
13462 {
13463 gfc_typebound_proc* overridden_tbp;
13464 gfc_tbp_generic* g;
13465 const char* target_name;
13466
13467 target_name = target->specific_st->name;
13468
13469 /* Defined for this type directly. */
13470 if (target->specific_st->n.tb && !target->specific_st->n.tb->error)
13471 {
13472 target->specific = target->specific_st->n.tb;
13473 goto specific_found;
13474 }
13475
13476 /* Look for an inherited specific binding. */
13477 if (super_type)
13478 {
13479 inherited = gfc_find_typebound_proc (super_type, NULL, target_name,
13480 true, NULL);
13481
13482 if (inherited)
13483 {
13484 gcc_assert (inherited->n.tb);
13485 target->specific = inherited->n.tb;
13486 goto specific_found;
13487 }
13488 }
13489
13490 gfc_error ("Undefined specific binding %qs as target of GENERIC %qs"
13491 " at %L", target_name, name, &p->where);
13492 return false;
13493
13494 /* Once we've found the specific binding, check it is not ambiguous with
13495 other specifics already found or inherited for the same GENERIC. */
13496 specific_found:
13497 gcc_assert (target->specific);
13498
13499 /* This must really be a specific binding! */
13500 if (target->specific->is_generic)
13501 {
13502 gfc_error ("GENERIC %qs at %L must target a specific binding,"
13503 " %qs is GENERIC, too", name, &p->where, target_name);
13504 return false;
13505 }
13506
13507 /* Check those already resolved on this type directly. */
13508 for (g = p->u.generic; g; g = g->next)
13509 if (g != target && g->specific
13510 && !check_generic_tbp_ambiguity (target, g, name, p->where))
13511 return false;
13512
13513 /* Check for ambiguity with inherited specific targets. */
13514 for (overridden_tbp = p->overridden; overridden_tbp;
13515 overridden_tbp = overridden_tbp->overridden)
13516 if (overridden_tbp->is_generic)
13517 {
13518 for (g = overridden_tbp->u.generic; g; g = g->next)
13519 {
13520 gcc_assert (g->specific);
13521 if (!check_generic_tbp_ambiguity (target, g, name, p->where))
13522 return false;
13523 }
13524 }
13525 }
13526
13527 /* If we attempt to "overwrite" a specific binding, this is an error. */
13528 if (p->overridden && !p->overridden->is_generic)
13529 {
13530 gfc_error ("GENERIC %qs at %L cannot overwrite specific binding with"
13531 " the same name", name, &p->where);
13532 return false;
13533 }
13534
13535 /* Take the SUBROUTINE/FUNCTION attributes of the first specific target, as
13536 all must have the same attributes here. */
13537 first_target = p->u.generic->specific->u.specific;
13538 gcc_assert (first_target);
13539 p->subroutine = first_target->n.sym->attr.subroutine;
13540 p->function = first_target->n.sym->attr.function;
13541
13542 return true;
13543 }
13544
13545
13546 /* Resolve a GENERIC procedure binding for a derived type. */
13547
13548 static bool
13549 resolve_typebound_generic (gfc_symbol* derived, gfc_symtree* st)
13550 {
13551 gfc_symbol* super_type;
13552
13553 /* Find the overridden binding if any. */
13554 st->n.tb->overridden = NULL;
13555 super_type = gfc_get_derived_super_type (derived);
13556 if (super_type)
13557 {
13558 gfc_symtree* overridden;
13559 overridden = gfc_find_typebound_proc (super_type, NULL, st->name,
13560 true, NULL);
13561
13562 if (overridden && overridden->n.tb)
13563 st->n.tb->overridden = overridden->n.tb;
13564 }
13565
13566 /* Resolve using worker function. */
13567 return resolve_tb_generic_targets (super_type, st->n.tb, st->name);
13568 }
13569
13570
13571 /* Retrieve the target-procedure of an operator binding and do some checks in
13572 common for intrinsic and user-defined type-bound operators. */
13573
13574 static gfc_symbol*
13575 get_checked_tb_operator_target (gfc_tbp_generic* target, locus where)
13576 {
13577 gfc_symbol* target_proc;
13578
13579 gcc_assert (target->specific && !target->specific->is_generic);
13580 target_proc = target->specific->u.specific->n.sym;
13581 gcc_assert (target_proc);
13582
13583 /* F08:C468. All operator bindings must have a passed-object dummy argument. */
13584 if (target->specific->nopass)
13585 {
13586 gfc_error ("Type-bound operator at %L cannot be NOPASS", &where);
13587 return NULL;
13588 }
13589
13590 return target_proc;
13591 }
13592
13593
13594 /* Resolve a type-bound intrinsic operator. */
13595
13596 static bool
13597 resolve_typebound_intrinsic_op (gfc_symbol* derived, gfc_intrinsic_op op,
13598 gfc_typebound_proc* p)
13599 {
13600 gfc_symbol* super_type;
13601 gfc_tbp_generic* target;
13602
13603 /* If there's already an error here, do nothing (but don't fail again). */
13604 if (p->error)
13605 return true;
13606
13607 /* Operators should always be GENERIC bindings. */
13608 gcc_assert (p->is_generic);
13609
13610 /* Look for an overridden binding. */
13611 super_type = gfc_get_derived_super_type (derived);
13612 if (super_type && super_type->f2k_derived)
13613 p->overridden = gfc_find_typebound_intrinsic_op (super_type, NULL,
13614 op, true, NULL);
13615 else
13616 p->overridden = NULL;
13617
13618 /* Resolve general GENERIC properties using worker function. */
13619 if (!resolve_tb_generic_targets (super_type, p, gfc_op2string(op)))
13620 goto error;
13621
13622 /* Check the targets to be procedures of correct interface. */
13623 for (target = p->u.generic; target; target = target->next)
13624 {
13625 gfc_symbol* target_proc;
13626
13627 target_proc = get_checked_tb_operator_target (target, p->where);
13628 if (!target_proc)
13629 goto error;
13630
13631 if (!gfc_check_operator_interface (target_proc, op, p->where))
13632 goto error;
13633
13634 /* Add target to non-typebound operator list. */
13635 if (!target->specific->deferred && !derived->attr.use_assoc
13636 && p->access != ACCESS_PRIVATE && derived->ns == gfc_current_ns)
13637 {
13638 gfc_interface *head, *intr;
13639
13640 /* Preempt 'gfc_check_new_interface' for submodules, where the
13641 mechanism for handling module procedures winds up resolving
13642 operator interfaces twice and would otherwise cause an error. */
13643 for (intr = derived->ns->op[op]; intr; intr = intr->next)
13644 if (intr->sym == target_proc
13645 && target_proc->attr.used_in_submodule)
13646 return true;
13647
13648 if (!gfc_check_new_interface (derived->ns->op[op],
13649 target_proc, p->where))
13650 return false;
13651 head = derived->ns->op[op];
13652 intr = gfc_get_interface ();
13653 intr->sym = target_proc;
13654 intr->where = p->where;
13655 intr->next = head;
13656 derived->ns->op[op] = intr;
13657 }
13658 }
13659
13660 return true;
13661
13662 error:
13663 p->error = 1;
13664 return false;
13665 }
13666
13667
13668 /* Resolve a type-bound user operator (tree-walker callback). */
13669
13670 static gfc_symbol* resolve_bindings_derived;
13671 static bool resolve_bindings_result;
13672
13673 static bool check_uop_procedure (gfc_symbol* sym, locus where);
13674
13675 static void
13676 resolve_typebound_user_op (gfc_symtree* stree)
13677 {
13678 gfc_symbol* super_type;
13679 gfc_tbp_generic* target;
13680
13681 gcc_assert (stree && stree->n.tb);
13682
13683 if (stree->n.tb->error)
13684 return;
13685
13686 /* Operators should always be GENERIC bindings. */
13687 gcc_assert (stree->n.tb->is_generic);
13688
13689 /* Find overridden procedure, if any. */
13690 super_type = gfc_get_derived_super_type (resolve_bindings_derived);
13691 if (super_type && super_type->f2k_derived)
13692 {
13693 gfc_symtree* overridden;
13694 overridden = gfc_find_typebound_user_op (super_type, NULL,
13695 stree->name, true, NULL);
13696
13697 if (overridden && overridden->n.tb)
13698 stree->n.tb->overridden = overridden->n.tb;
13699 }
13700 else
13701 stree->n.tb->overridden = NULL;
13702
13703 /* Resolve basically using worker function. */
13704 if (!resolve_tb_generic_targets (super_type, stree->n.tb, stree->name))
13705 goto error;
13706
13707 /* Check the targets to be functions of correct interface. */
13708 for (target = stree->n.tb->u.generic; target; target = target->next)
13709 {
13710 gfc_symbol* target_proc;
13711
13712 target_proc = get_checked_tb_operator_target (target, stree->n.tb->where);
13713 if (!target_proc)
13714 goto error;
13715
13716 if (!check_uop_procedure (target_proc, stree->n.tb->where))
13717 goto error;
13718 }
13719
13720 return;
13721
13722 error:
13723 resolve_bindings_result = false;
13724 stree->n.tb->error = 1;
13725 }
13726
13727
13728 /* Resolve the type-bound procedures for a derived type. */
13729
13730 static void
13731 resolve_typebound_procedure (gfc_symtree* stree)
13732 {
13733 gfc_symbol* proc;
13734 locus where;
13735 gfc_symbol* me_arg;
13736 gfc_symbol* super_type;
13737 gfc_component* comp;
13738
13739 gcc_assert (stree);
13740
13741 /* Undefined specific symbol from GENERIC target definition. */
13742 if (!stree->n.tb)
13743 return;
13744
13745 if (stree->n.tb->error)
13746 return;
13747
13748 /* If this is a GENERIC binding, use that routine. */
13749 if (stree->n.tb->is_generic)
13750 {
13751 if (!resolve_typebound_generic (resolve_bindings_derived, stree))
13752 goto error;
13753 return;
13754 }
13755
13756 /* Get the target-procedure to check it. */
13757 gcc_assert (!stree->n.tb->is_generic);
13758 gcc_assert (stree->n.tb->u.specific);
13759 proc = stree->n.tb->u.specific->n.sym;
13760 where = stree->n.tb->where;
13761
13762 /* Default access should already be resolved from the parser. */
13763 gcc_assert (stree->n.tb->access != ACCESS_UNKNOWN);
13764
13765 if (stree->n.tb->deferred)
13766 {
13767 if (!check_proc_interface (proc, &where))
13768 goto error;
13769 }
13770 else
13771 {
13772 /* If proc has not been resolved at this point, proc->name may
13773 actually be a USE associated entity. See PR fortran/89647. */
13774 if (!proc->resolved
13775 && proc->attr.function == 0 && proc->attr.subroutine == 0)
13776 {
13777 gfc_symbol *tmp;
13778 gfc_find_symbol (proc->name, gfc_current_ns->parent, 1, &tmp);
13779 if (tmp && tmp->attr.use_assoc)
13780 {
13781 proc->module = tmp->module;
13782 proc->attr.proc = tmp->attr.proc;
13783 proc->attr.function = tmp->attr.function;
13784 proc->attr.subroutine = tmp->attr.subroutine;
13785 proc->attr.use_assoc = tmp->attr.use_assoc;
13786 proc->ts = tmp->ts;
13787 proc->result = tmp->result;
13788 }
13789 }
13790
13791 /* Check for F08:C465. */
13792 if ((!proc->attr.subroutine && !proc->attr.function)
13793 || (proc->attr.proc != PROC_MODULE
13794 && proc->attr.if_source != IFSRC_IFBODY)
13795 || proc->attr.abstract)
13796 {
13797 gfc_error ("%qs must be a module procedure or an external "
13798 "procedure with an explicit interface at %L",
13799 proc->name, &where);
13800 goto error;
13801 }
13802 }
13803
13804 stree->n.tb->subroutine = proc->attr.subroutine;
13805 stree->n.tb->function = proc->attr.function;
13806
13807 /* Find the super-type of the current derived type. We could do this once and
13808 store in a global if speed is needed, but as long as not I believe this is
13809 more readable and clearer. */
13810 super_type = gfc_get_derived_super_type (resolve_bindings_derived);
13811
13812 /* If PASS, resolve and check arguments if not already resolved / loaded
13813 from a .mod file. */
13814 if (!stree->n.tb->nopass && stree->n.tb->pass_arg_num == 0)
13815 {
13816 gfc_formal_arglist *dummy_args;
13817
13818 dummy_args = gfc_sym_get_dummy_args (proc);
13819 if (stree->n.tb->pass_arg)
13820 {
13821 gfc_formal_arglist *i;
13822
13823 /* If an explicit passing argument name is given, walk the arg-list
13824 and look for it. */
13825
13826 me_arg = NULL;
13827 stree->n.tb->pass_arg_num = 1;
13828 for (i = dummy_args; i; i = i->next)
13829 {
13830 if (!strcmp (i->sym->name, stree->n.tb->pass_arg))
13831 {
13832 me_arg = i->sym;
13833 break;
13834 }
13835 ++stree->n.tb->pass_arg_num;
13836 }
13837
13838 if (!me_arg)
13839 {
13840 gfc_error ("Procedure %qs with PASS(%s) at %L has no"
13841 " argument %qs",
13842 proc->name, stree->n.tb->pass_arg, &where,
13843 stree->n.tb->pass_arg);
13844 goto error;
13845 }
13846 }
13847 else
13848 {
13849 /* Otherwise, take the first one; there should in fact be at least
13850 one. */
13851 stree->n.tb->pass_arg_num = 1;
13852 if (!dummy_args)
13853 {
13854 gfc_error ("Procedure %qs with PASS at %L must have at"
13855 " least one argument", proc->name, &where);
13856 goto error;
13857 }
13858 me_arg = dummy_args->sym;
13859 }
13860
13861 /* Now check that the argument-type matches and the passed-object
13862 dummy argument is generally fine. */
13863
13864 gcc_assert (me_arg);
13865
13866 if (me_arg->ts.type != BT_CLASS)
13867 {
13868 gfc_error ("Non-polymorphic passed-object dummy argument of %qs"
13869 " at %L", proc->name, &where);
13870 goto error;
13871 }
13872
13873 if (CLASS_DATA (me_arg)->ts.u.derived
13874 != resolve_bindings_derived)
13875 {
13876 gfc_error ("Argument %qs of %qs with PASS(%s) at %L must be of"
13877 " the derived-type %qs", me_arg->name, proc->name,
13878 me_arg->name, &where, resolve_bindings_derived->name);
13879 goto error;
13880 }
13881
13882 gcc_assert (me_arg->ts.type == BT_CLASS);
13883 if (CLASS_DATA (me_arg)->as && CLASS_DATA (me_arg)->as->rank != 0)
13884 {
13885 gfc_error ("Passed-object dummy argument of %qs at %L must be"
13886 " scalar", proc->name, &where);
13887 goto error;
13888 }
13889 if (CLASS_DATA (me_arg)->attr.allocatable)
13890 {
13891 gfc_error ("Passed-object dummy argument of %qs at %L must not"
13892 " be ALLOCATABLE", proc->name, &where);
13893 goto error;
13894 }
13895 if (CLASS_DATA (me_arg)->attr.class_pointer)
13896 {
13897 gfc_error ("Passed-object dummy argument of %qs at %L must not"
13898 " be POINTER", proc->name, &where);
13899 goto error;
13900 }
13901 }
13902
13903 /* If we are extending some type, check that we don't override a procedure
13904 flagged NON_OVERRIDABLE. */
13905 stree->n.tb->overridden = NULL;
13906 if (super_type)
13907 {
13908 gfc_symtree* overridden;
13909 overridden = gfc_find_typebound_proc (super_type, NULL,
13910 stree->name, true, NULL);
13911
13912 if (overridden)
13913 {
13914 if (overridden->n.tb)
13915 stree->n.tb->overridden = overridden->n.tb;
13916
13917 if (!gfc_check_typebound_override (stree, overridden))
13918 goto error;
13919 }
13920 }
13921
13922 /* See if there's a name collision with a component directly in this type. */
13923 for (comp = resolve_bindings_derived->components; comp; comp = comp->next)
13924 if (!strcmp (comp->name, stree->name))
13925 {
13926 gfc_error ("Procedure %qs at %L has the same name as a component of"
13927 " %qs",
13928 stree->name, &where, resolve_bindings_derived->name);
13929 goto error;
13930 }
13931
13932 /* Try to find a name collision with an inherited component. */
13933 if (super_type && gfc_find_component (super_type, stree->name, true, true,
13934 NULL))
13935 {
13936 gfc_error ("Procedure %qs at %L has the same name as an inherited"
13937 " component of %qs",
13938 stree->name, &where, resolve_bindings_derived->name);
13939 goto error;
13940 }
13941
13942 stree->n.tb->error = 0;
13943 return;
13944
13945 error:
13946 resolve_bindings_result = false;
13947 stree->n.tb->error = 1;
13948 }
13949
13950
13951 static bool
13952 resolve_typebound_procedures (gfc_symbol* derived)
13953 {
13954 int op;
13955 gfc_symbol* super_type;
13956
13957 if (!derived->f2k_derived || !derived->f2k_derived->tb_sym_root)
13958 return true;
13959
13960 super_type = gfc_get_derived_super_type (derived);
13961 if (super_type)
13962 resolve_symbol (super_type);
13963
13964 resolve_bindings_derived = derived;
13965 resolve_bindings_result = true;
13966
13967 if (derived->f2k_derived->tb_sym_root)
13968 gfc_traverse_symtree (derived->f2k_derived->tb_sym_root,
13969 &resolve_typebound_procedure);
13970
13971 if (derived->f2k_derived->tb_uop_root)
13972 gfc_traverse_symtree (derived->f2k_derived->tb_uop_root,
13973 &resolve_typebound_user_op);
13974
13975 for (op = 0; op != GFC_INTRINSIC_OPS; ++op)
13976 {
13977 gfc_typebound_proc* p = derived->f2k_derived->tb_op[op];
13978 if (p && !resolve_typebound_intrinsic_op (derived,
13979 (gfc_intrinsic_op)op, p))
13980 resolve_bindings_result = false;
13981 }
13982
13983 return resolve_bindings_result;
13984 }
13985
13986
13987 /* Add a derived type to the dt_list. The dt_list is used in trans-types.c
13988 to give all identical derived types the same backend_decl. */
13989 static void
13990 add_dt_to_dt_list (gfc_symbol *derived)
13991 {
13992 if (!derived->dt_next)
13993 {
13994 if (gfc_derived_types)
13995 {
13996 derived->dt_next = gfc_derived_types->dt_next;
13997 gfc_derived_types->dt_next = derived;
13998 }
13999 else
14000 {
14001 derived->dt_next = derived;
14002 }
14003 gfc_derived_types = derived;
14004 }
14005 }
14006
14007
14008 /* Ensure that a derived-type is really not abstract, meaning that every
14009 inherited DEFERRED binding is overridden by a non-DEFERRED one. */
14010
14011 static bool
14012 ensure_not_abstract_walker (gfc_symbol* sub, gfc_symtree* st)
14013 {
14014 if (!st)
14015 return true;
14016
14017 if (!ensure_not_abstract_walker (sub, st->left))
14018 return false;
14019 if (!ensure_not_abstract_walker (sub, st->right))
14020 return false;
14021
14022 if (st->n.tb && st->n.tb->deferred)
14023 {
14024 gfc_symtree* overriding;
14025 overriding = gfc_find_typebound_proc (sub, NULL, st->name, true, NULL);
14026 if (!overriding)
14027 return false;
14028 gcc_assert (overriding->n.tb);
14029 if (overriding->n.tb->deferred)
14030 {
14031 gfc_error ("Derived-type %qs declared at %L must be ABSTRACT because"
14032 " %qs is DEFERRED and not overridden",
14033 sub->name, &sub->declared_at, st->name);
14034 return false;
14035 }
14036 }
14037
14038 return true;
14039 }
14040
14041 static bool
14042 ensure_not_abstract (gfc_symbol* sub, gfc_symbol* ancestor)
14043 {
14044 /* The algorithm used here is to recursively travel up the ancestry of sub
14045 and for each ancestor-type, check all bindings. If any of them is
14046 DEFERRED, look it up starting from sub and see if the found (overriding)
14047 binding is not DEFERRED.
14048 This is not the most efficient way to do this, but it should be ok and is
14049 clearer than something sophisticated. */
14050
14051 gcc_assert (ancestor && !sub->attr.abstract);
14052
14053 if (!ancestor->attr.abstract)
14054 return true;
14055
14056 /* Walk bindings of this ancestor. */
14057 if (ancestor->f2k_derived)
14058 {
14059 bool t;
14060 t = ensure_not_abstract_walker (sub, ancestor->f2k_derived->tb_sym_root);
14061 if (!t)
14062 return false;
14063 }
14064
14065 /* Find next ancestor type and recurse on it. */
14066 ancestor = gfc_get_derived_super_type (ancestor);
14067 if (ancestor)
14068 return ensure_not_abstract (sub, ancestor);
14069
14070 return true;
14071 }
14072
14073
14074 /* This check for typebound defined assignments is done recursively
14075 since the order in which derived types are resolved is not always in
14076 order of the declarations. */
14077
14078 static void
14079 check_defined_assignments (gfc_symbol *derived)
14080 {
14081 gfc_component *c;
14082
14083 for (c = derived->components; c; c = c->next)
14084 {
14085 if (!gfc_bt_struct (c->ts.type)
14086 || c->attr.pointer
14087 || c->attr.allocatable
14088 || c->attr.proc_pointer_comp
14089 || c->attr.class_pointer
14090 || c->attr.proc_pointer)
14091 continue;
14092
14093 if (c->ts.u.derived->attr.defined_assign_comp
14094 || (c->ts.u.derived->f2k_derived
14095 && c->ts.u.derived->f2k_derived->tb_op[INTRINSIC_ASSIGN]))
14096 {
14097 derived->attr.defined_assign_comp = 1;
14098 return;
14099 }
14100
14101 check_defined_assignments (c->ts.u.derived);
14102 if (c->ts.u.derived->attr.defined_assign_comp)
14103 {
14104 derived->attr.defined_assign_comp = 1;
14105 return;
14106 }
14107 }
14108 }
14109
14110
14111 /* Resolve a single component of a derived type or structure. */
14112
14113 static bool
14114 resolve_component (gfc_component *c, gfc_symbol *sym)
14115 {
14116 gfc_symbol *super_type;
14117 symbol_attribute *attr;
14118
14119 if (c->attr.artificial)
14120 return true;
14121
14122 /* Do not allow vtype components to be resolved in nameless namespaces
14123 such as block data because the procedure pointers will cause ICEs
14124 and vtables are not needed in these contexts. */
14125 if (sym->attr.vtype && sym->attr.use_assoc
14126 && sym->ns->proc_name == NULL)
14127 return true;
14128
14129 /* F2008, C442. */
14130 if ((!sym->attr.is_class || c != sym->components)
14131 && c->attr.codimension
14132 && (!c->attr.allocatable || (c->as && c->as->type != AS_DEFERRED)))
14133 {
14134 gfc_error ("Coarray component %qs at %L must be allocatable with "
14135 "deferred shape", c->name, &c->loc);
14136 return false;
14137 }
14138
14139 /* F2008, C443. */
14140 if (c->attr.codimension && c->ts.type == BT_DERIVED
14141 && c->ts.u.derived->ts.is_iso_c)
14142 {
14143 gfc_error ("Component %qs at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) "
14144 "shall not be a coarray", c->name, &c->loc);
14145 return false;
14146 }
14147
14148 /* F2008, C444. */
14149 if (gfc_bt_struct (c->ts.type) && c->ts.u.derived->attr.coarray_comp
14150 && (c->attr.codimension || c->attr.pointer || c->attr.dimension
14151 || c->attr.allocatable))
14152 {
14153 gfc_error ("Component %qs at %L with coarray component "
14154 "shall be a nonpointer, nonallocatable scalar",
14155 c->name, &c->loc);
14156 return false;
14157 }
14158
14159 /* F2008, C448. */
14160 if (c->ts.type == BT_CLASS)
14161 {
14162 if (CLASS_DATA (c))
14163 {
14164 attr = &(CLASS_DATA (c)->attr);
14165
14166 /* Fix up contiguous attribute. */
14167 if (c->attr.contiguous)
14168 attr->contiguous = 1;
14169 }
14170 else
14171 attr = NULL;
14172 }
14173 else
14174 attr = &c->attr;
14175
14176 if (attr && attr->contiguous && (!attr->dimension || !attr->pointer))
14177 {
14178 gfc_error ("Component %qs at %L has the CONTIGUOUS attribute but "
14179 "is not an array pointer", c->name, &c->loc);
14180 return false;
14181 }
14182
14183 /* F2003, 15.2.1 - length has to be one. */
14184 if (sym->attr.is_bind_c && c->ts.type == BT_CHARACTER
14185 && (c->ts.u.cl == NULL || c->ts.u.cl->length == NULL
14186 || !gfc_is_constant_expr (c->ts.u.cl->length)
14187 || mpz_cmp_si (c->ts.u.cl->length->value.integer, 1) != 0))
14188 {
14189 gfc_error ("Component %qs of BIND(C) type at %L must have length one",
14190 c->name, &c->loc);
14191 return false;
14192 }
14193
14194 if (c->attr.proc_pointer && c->ts.interface)
14195 {
14196 gfc_symbol *ifc = c->ts.interface;
14197
14198 if (!sym->attr.vtype && !check_proc_interface (ifc, &c->loc))
14199 {
14200 c->tb->error = 1;
14201 return false;
14202 }
14203
14204 if (ifc->attr.if_source || ifc->attr.intrinsic)
14205 {
14206 /* Resolve interface and copy attributes. */
14207 if (ifc->formal && !ifc->formal_ns)
14208 resolve_symbol (ifc);
14209 if (ifc->attr.intrinsic)
14210 gfc_resolve_intrinsic (ifc, &ifc->declared_at);
14211
14212 if (ifc->result)
14213 {
14214 c->ts = ifc->result->ts;
14215 c->attr.allocatable = ifc->result->attr.allocatable;
14216 c->attr.pointer = ifc->result->attr.pointer;
14217 c->attr.dimension = ifc->result->attr.dimension;
14218 c->as = gfc_copy_array_spec (ifc->result->as);
14219 c->attr.class_ok = ifc->result->attr.class_ok;
14220 }
14221 else
14222 {
14223 c->ts = ifc->ts;
14224 c->attr.allocatable = ifc->attr.allocatable;
14225 c->attr.pointer = ifc->attr.pointer;
14226 c->attr.dimension = ifc->attr.dimension;
14227 c->as = gfc_copy_array_spec (ifc->as);
14228 c->attr.class_ok = ifc->attr.class_ok;
14229 }
14230 c->ts.interface = ifc;
14231 c->attr.function = ifc->attr.function;
14232 c->attr.subroutine = ifc->attr.subroutine;
14233
14234 c->attr.pure = ifc->attr.pure;
14235 c->attr.elemental = ifc->attr.elemental;
14236 c->attr.recursive = ifc->attr.recursive;
14237 c->attr.always_explicit = ifc->attr.always_explicit;
14238 c->attr.ext_attr |= ifc->attr.ext_attr;
14239 /* Copy char length. */
14240 if (ifc->ts.type == BT_CHARACTER && ifc->ts.u.cl)
14241 {
14242 gfc_charlen *cl = gfc_new_charlen (sym->ns, ifc->ts.u.cl);
14243 if (cl->length && !cl->resolved
14244 && !gfc_resolve_expr (cl->length))
14245 {
14246 c->tb->error = 1;
14247 return false;
14248 }
14249 c->ts.u.cl = cl;
14250 }
14251 }
14252 }
14253 else if (c->attr.proc_pointer && c->ts.type == BT_UNKNOWN)
14254 {
14255 /* Since PPCs are not implicitly typed, a PPC without an explicit
14256 interface must be a subroutine. */
14257 gfc_add_subroutine (&c->attr, c->name, &c->loc);
14258 }
14259
14260 /* Procedure pointer components: Check PASS arg. */
14261 if (c->attr.proc_pointer && !c->tb->nopass && c->tb->pass_arg_num == 0
14262 && !sym->attr.vtype)
14263 {
14264 gfc_symbol* me_arg;
14265
14266 if (c->tb->pass_arg)
14267 {
14268 gfc_formal_arglist* i;
14269
14270 /* If an explicit passing argument name is given, walk the arg-list
14271 and look for it. */
14272
14273 me_arg = NULL;
14274 c->tb->pass_arg_num = 1;
14275 for (i = c->ts.interface->formal; i; i = i->next)
14276 {
14277 if (!strcmp (i->sym->name, c->tb->pass_arg))
14278 {
14279 me_arg = i->sym;
14280 break;
14281 }
14282 c->tb->pass_arg_num++;
14283 }
14284
14285 if (!me_arg)
14286 {
14287 gfc_error ("Procedure pointer component %qs with PASS(%s) "
14288 "at %L has no argument %qs", c->name,
14289 c->tb->pass_arg, &c->loc, c->tb->pass_arg);
14290 c->tb->error = 1;
14291 return false;
14292 }
14293 }
14294 else
14295 {
14296 /* Otherwise, take the first one; there should in fact be at least
14297 one. */
14298 c->tb->pass_arg_num = 1;
14299 if (!c->ts.interface->formal)
14300 {
14301 gfc_error ("Procedure pointer component %qs with PASS at %L "
14302 "must have at least one argument",
14303 c->name, &c->loc);
14304 c->tb->error = 1;
14305 return false;
14306 }
14307 me_arg = c->ts.interface->formal->sym;
14308 }
14309
14310 /* Now check that the argument-type matches. */
14311 gcc_assert (me_arg);
14312 if ((me_arg->ts.type != BT_DERIVED && me_arg->ts.type != BT_CLASS)
14313 || (me_arg->ts.type == BT_DERIVED && me_arg->ts.u.derived != sym)
14314 || (me_arg->ts.type == BT_CLASS
14315 && CLASS_DATA (me_arg)->ts.u.derived != sym))
14316 {
14317 gfc_error ("Argument %qs of %qs with PASS(%s) at %L must be of"
14318 " the derived type %qs", me_arg->name, c->name,
14319 me_arg->name, &c->loc, sym->name);
14320 c->tb->error = 1;
14321 return false;
14322 }
14323
14324 /* Check for F03:C453. */
14325 if (CLASS_DATA (me_arg)->attr.dimension)
14326 {
14327 gfc_error ("Argument %qs of %qs with PASS(%s) at %L "
14328 "must be scalar", me_arg->name, c->name, me_arg->name,
14329 &c->loc);
14330 c->tb->error = 1;
14331 return false;
14332 }
14333
14334 if (CLASS_DATA (me_arg)->attr.class_pointer)
14335 {
14336 gfc_error ("Argument %qs of %qs with PASS(%s) at %L "
14337 "may not have the POINTER attribute", me_arg->name,
14338 c->name, me_arg->name, &c->loc);
14339 c->tb->error = 1;
14340 return false;
14341 }
14342
14343 if (CLASS_DATA (me_arg)->attr.allocatable)
14344 {
14345 gfc_error ("Argument %qs of %qs with PASS(%s) at %L "
14346 "may not be ALLOCATABLE", me_arg->name, c->name,
14347 me_arg->name, &c->loc);
14348 c->tb->error = 1;
14349 return false;
14350 }
14351
14352 if (gfc_type_is_extensible (sym) && me_arg->ts.type != BT_CLASS)
14353 {
14354 gfc_error ("Non-polymorphic passed-object dummy argument of %qs"
14355 " at %L", c->name, &c->loc);
14356 return false;
14357 }
14358
14359 }
14360
14361 /* Check type-spec if this is not the parent-type component. */
14362 if (((sym->attr.is_class
14363 && (!sym->components->ts.u.derived->attr.extension
14364 || c != sym->components->ts.u.derived->components))
14365 || (!sym->attr.is_class
14366 && (!sym->attr.extension || c != sym->components)))
14367 && !sym->attr.vtype
14368 && !resolve_typespec_used (&c->ts, &c->loc, c->name))
14369 return false;
14370
14371 super_type = gfc_get_derived_super_type (sym);
14372
14373 /* If this type is an extension, set the accessibility of the parent
14374 component. */
14375 if (super_type
14376 && ((sym->attr.is_class
14377 && c == sym->components->ts.u.derived->components)
14378 || (!sym->attr.is_class && c == sym->components))
14379 && strcmp (super_type->name, c->name) == 0)
14380 c->attr.access = super_type->attr.access;
14381
14382 /* If this type is an extension, see if this component has the same name
14383 as an inherited type-bound procedure. */
14384 if (super_type && !sym->attr.is_class
14385 && gfc_find_typebound_proc (super_type, NULL, c->name, true, NULL))
14386 {
14387 gfc_error ("Component %qs of %qs at %L has the same name as an"
14388 " inherited type-bound procedure",
14389 c->name, sym->name, &c->loc);
14390 return false;
14391 }
14392
14393 if (c->ts.type == BT_CHARACTER && !c->attr.proc_pointer
14394 && !c->ts.deferred)
14395 {
14396 if (c->ts.u.cl->length == NULL
14397 || (!resolve_charlen(c->ts.u.cl))
14398 || !gfc_is_constant_expr (c->ts.u.cl->length))
14399 {
14400 gfc_error ("Character length of component %qs needs to "
14401 "be a constant specification expression at %L",
14402 c->name,
14403 c->ts.u.cl->length ? &c->ts.u.cl->length->where : &c->loc);
14404 return false;
14405 }
14406 }
14407
14408 if (c->ts.type == BT_CHARACTER && c->ts.deferred
14409 && !c->attr.pointer && !c->attr.allocatable)
14410 {
14411 gfc_error ("Character component %qs of %qs at %L with deferred "
14412 "length must be a POINTER or ALLOCATABLE",
14413 c->name, sym->name, &c->loc);
14414 return false;
14415 }
14416
14417 /* Add the hidden deferred length field. */
14418 if (c->ts.type == BT_CHARACTER
14419 && (c->ts.deferred || c->attr.pdt_string)
14420 && !c->attr.function
14421 && !sym->attr.is_class)
14422 {
14423 char name[GFC_MAX_SYMBOL_LEN+9];
14424 gfc_component *strlen;
14425 sprintf (name, "_%s_length", c->name);
14426 strlen = gfc_find_component (sym, name, true, true, NULL);
14427 if (strlen == NULL)
14428 {
14429 if (!gfc_add_component (sym, name, &strlen))
14430 return false;
14431 strlen->ts.type = BT_INTEGER;
14432 strlen->ts.kind = gfc_charlen_int_kind;
14433 strlen->attr.access = ACCESS_PRIVATE;
14434 strlen->attr.artificial = 1;
14435 }
14436 }
14437
14438 if (c->ts.type == BT_DERIVED
14439 && sym->component_access != ACCESS_PRIVATE
14440 && gfc_check_symbol_access (sym)
14441 && !is_sym_host_assoc (c->ts.u.derived, sym->ns)
14442 && !c->ts.u.derived->attr.use_assoc
14443 && !gfc_check_symbol_access (c->ts.u.derived)
14444 && !gfc_notify_std (GFC_STD_F2003, "the component %qs is a "
14445 "PRIVATE type and cannot be a component of "
14446 "%qs, which is PUBLIC at %L", c->name,
14447 sym->name, &sym->declared_at))
14448 return false;
14449
14450 if ((sym->attr.sequence || sym->attr.is_bind_c) && c->ts.type == BT_CLASS)
14451 {
14452 gfc_error ("Polymorphic component %s at %L in SEQUENCE or BIND(C) "
14453 "type %s", c->name, &c->loc, sym->name);
14454 return false;
14455 }
14456
14457 if (sym->attr.sequence)
14458 {
14459 if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.sequence == 0)
14460 {
14461 gfc_error ("Component %s of SEQUENCE type declared at %L does "
14462 "not have the SEQUENCE attribute",
14463 c->ts.u.derived->name, &sym->declared_at);
14464 return false;
14465 }
14466 }
14467
14468 if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.generic)
14469 c->ts.u.derived = gfc_find_dt_in_generic (c->ts.u.derived);
14470 else if (c->ts.type == BT_CLASS && c->attr.class_ok
14471 && CLASS_DATA (c)->ts.u.derived->attr.generic)
14472 CLASS_DATA (c)->ts.u.derived
14473 = gfc_find_dt_in_generic (CLASS_DATA (c)->ts.u.derived);
14474
14475 /* If an allocatable component derived type is of the same type as
14476 the enclosing derived type, we need a vtable generating so that
14477 the __deallocate procedure is created. */
14478 if ((c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
14479 && c->ts.u.derived == sym && c->attr.allocatable == 1)
14480 gfc_find_vtab (&c->ts);
14481
14482 /* Ensure that all the derived type components are put on the
14483 derived type list; even in formal namespaces, where derived type
14484 pointer components might not have been declared. */
14485 if (c->ts.type == BT_DERIVED
14486 && c->ts.u.derived
14487 && c->ts.u.derived->components
14488 && c->attr.pointer
14489 && sym != c->ts.u.derived)
14490 add_dt_to_dt_list (c->ts.u.derived);
14491
14492 if (!gfc_resolve_array_spec (c->as,
14493 !(c->attr.pointer || c->attr.proc_pointer
14494 || c->attr.allocatable)))
14495 return false;
14496
14497 if (c->initializer && !sym->attr.vtype
14498 && !c->attr.pdt_kind && !c->attr.pdt_len
14499 && !gfc_check_assign_symbol (sym, c, c->initializer))
14500 return false;
14501
14502 return true;
14503 }
14504
14505
14506 /* Be nice about the locus for a structure expression - show the locus of the
14507 first non-null sub-expression if we can. */
14508
14509 static locus *
14510 cons_where (gfc_expr *struct_expr)
14511 {
14512 gfc_constructor *cons;
14513
14514 gcc_assert (struct_expr && struct_expr->expr_type == EXPR_STRUCTURE);
14515
14516 cons = gfc_constructor_first (struct_expr->value.constructor);
14517 for (; cons; cons = gfc_constructor_next (cons))
14518 {
14519 if (cons->expr && cons->expr->expr_type != EXPR_NULL)
14520 return &cons->expr->where;
14521 }
14522
14523 return &struct_expr->where;
14524 }
14525
14526 /* Resolve the components of a structure type. Much less work than derived
14527 types. */
14528
14529 static bool
14530 resolve_fl_struct (gfc_symbol *sym)
14531 {
14532 gfc_component *c;
14533 gfc_expr *init = NULL;
14534 bool success;
14535
14536 /* Make sure UNIONs do not have overlapping initializers. */
14537 if (sym->attr.flavor == FL_UNION)
14538 {
14539 for (c = sym->components; c; c = c->next)
14540 {
14541 if (init && c->initializer)
14542 {
14543 gfc_error ("Conflicting initializers in union at %L and %L",
14544 cons_where (init), cons_where (c->initializer));
14545 gfc_free_expr (c->initializer);
14546 c->initializer = NULL;
14547 }
14548 if (init == NULL)
14549 init = c->initializer;
14550 }
14551 }
14552
14553 success = true;
14554 for (c = sym->components; c; c = c->next)
14555 if (!resolve_component (c, sym))
14556 success = false;
14557
14558 if (!success)
14559 return false;
14560
14561 if (sym->components)
14562 add_dt_to_dt_list (sym);
14563
14564 return true;
14565 }
14566
14567
14568 /* Resolve the components of a derived type. This does not have to wait until
14569 resolution stage, but can be done as soon as the dt declaration has been
14570 parsed. */
14571
14572 static bool
14573 resolve_fl_derived0 (gfc_symbol *sym)
14574 {
14575 gfc_symbol* super_type;
14576 gfc_component *c;
14577 gfc_formal_arglist *f;
14578 bool success;
14579
14580 if (sym->attr.unlimited_polymorphic)
14581 return true;
14582
14583 super_type = gfc_get_derived_super_type (sym);
14584
14585 /* F2008, C432. */
14586 if (super_type && sym->attr.coarray_comp && !super_type->attr.coarray_comp)
14587 {
14588 gfc_error ("As extending type %qs at %L has a coarray component, "
14589 "parent type %qs shall also have one", sym->name,
14590 &sym->declared_at, super_type->name);
14591 return false;
14592 }
14593
14594 /* Ensure the extended type gets resolved before we do. */
14595 if (super_type && !resolve_fl_derived0 (super_type))
14596 return false;
14597
14598 /* An ABSTRACT type must be extensible. */
14599 if (sym->attr.abstract && !gfc_type_is_extensible (sym))
14600 {
14601 gfc_error ("Non-extensible derived-type %qs at %L must not be ABSTRACT",
14602 sym->name, &sym->declared_at);
14603 return false;
14604 }
14605
14606 c = (sym->attr.is_class) ? sym->components->ts.u.derived->components
14607 : sym->components;
14608
14609 success = true;
14610 for ( ; c != NULL; c = c->next)
14611 if (!resolve_component (c, sym))
14612 success = false;
14613
14614 if (!success)
14615 return false;
14616
14617 /* Now add the caf token field, where needed. */
14618 if (flag_coarray != GFC_FCOARRAY_NONE
14619 && !sym->attr.is_class && !sym->attr.vtype)
14620 {
14621 for (c = sym->components; c; c = c->next)
14622 if (!c->attr.dimension && !c->attr.codimension
14623 && (c->attr.allocatable || c->attr.pointer))
14624 {
14625 char name[GFC_MAX_SYMBOL_LEN+9];
14626 gfc_component *token;
14627 sprintf (name, "_caf_%s", c->name);
14628 token = gfc_find_component (sym, name, true, true, NULL);
14629 if (token == NULL)
14630 {
14631 if (!gfc_add_component (sym, name, &token))
14632 return false;
14633 token->ts.type = BT_VOID;
14634 token->ts.kind = gfc_default_integer_kind;
14635 token->attr.access = ACCESS_PRIVATE;
14636 token->attr.artificial = 1;
14637 token->attr.caf_token = 1;
14638 }
14639 }
14640 }
14641
14642 check_defined_assignments (sym);
14643
14644 if (!sym->attr.defined_assign_comp && super_type)
14645 sym->attr.defined_assign_comp
14646 = super_type->attr.defined_assign_comp;
14647
14648 /* If this is a non-ABSTRACT type extending an ABSTRACT one, ensure that
14649 all DEFERRED bindings are overridden. */
14650 if (super_type && super_type->attr.abstract && !sym->attr.abstract
14651 && !sym->attr.is_class
14652 && !ensure_not_abstract (sym, super_type))
14653 return false;
14654
14655 /* Check that there is a component for every PDT parameter. */
14656 if (sym->attr.pdt_template)
14657 {
14658 for (f = sym->formal; f; f = f->next)
14659 {
14660 if (!f->sym)
14661 continue;
14662 c = gfc_find_component (sym, f->sym->name, true, true, NULL);
14663 if (c == NULL)
14664 {
14665 gfc_error ("Parameterized type %qs does not have a component "
14666 "corresponding to parameter %qs at %L", sym->name,
14667 f->sym->name, &sym->declared_at);
14668 break;
14669 }
14670 }
14671 }
14672
14673 /* Add derived type to the derived type list. */
14674 add_dt_to_dt_list (sym);
14675
14676 return true;
14677 }
14678
14679
14680 /* The following procedure does the full resolution of a derived type,
14681 including resolution of all type-bound procedures (if present). In contrast
14682 to 'resolve_fl_derived0' this can only be done after the module has been
14683 parsed completely. */
14684
14685 static bool
14686 resolve_fl_derived (gfc_symbol *sym)
14687 {
14688 gfc_symbol *gen_dt = NULL;
14689
14690 if (sym->attr.unlimited_polymorphic)
14691 return true;
14692
14693 if (!sym->attr.is_class)
14694 gfc_find_symbol (sym->name, sym->ns, 0, &gen_dt);
14695 if (gen_dt && gen_dt->generic && gen_dt->generic->next
14696 && (!gen_dt->generic->sym->attr.use_assoc
14697 || gen_dt->generic->sym->module != gen_dt->generic->next->sym->module)
14698 && !gfc_notify_std (GFC_STD_F2003, "Generic name %qs of function "
14699 "%qs at %L being the same name as derived "
14700 "type at %L", sym->name,
14701 gen_dt->generic->sym == sym
14702 ? gen_dt->generic->next->sym->name
14703 : gen_dt->generic->sym->name,
14704 gen_dt->generic->sym == sym
14705 ? &gen_dt->generic->next->sym->declared_at
14706 : &gen_dt->generic->sym->declared_at,
14707 &sym->declared_at))
14708 return false;
14709
14710 if (sym->components == NULL && !sym->attr.zero_comp && !sym->attr.use_assoc)
14711 {
14712 gfc_error ("Derived type %qs at %L has not been declared",
14713 sym->name, &sym->declared_at);
14714 return false;
14715 }
14716
14717 /* Resolve the finalizer procedures. */
14718 if (!gfc_resolve_finalizers (sym, NULL))
14719 return false;
14720
14721 if (sym->attr.is_class && sym->ts.u.derived == NULL)
14722 {
14723 /* Fix up incomplete CLASS symbols. */
14724 gfc_component *data = gfc_find_component (sym, "_data", true, true, NULL);
14725 gfc_component *vptr = gfc_find_component (sym, "_vptr", true, true, NULL);
14726
14727 /* Nothing more to do for unlimited polymorphic entities. */
14728 if (data->ts.u.derived->attr.unlimited_polymorphic)
14729 return true;
14730 else if (vptr->ts.u.derived == NULL)
14731 {
14732 gfc_symbol *vtab = gfc_find_derived_vtab (data->ts.u.derived);
14733 gcc_assert (vtab);
14734 vptr->ts.u.derived = vtab->ts.u.derived;
14735 if (!resolve_fl_derived0 (vptr->ts.u.derived))
14736 return false;
14737 }
14738 }
14739
14740 if (!resolve_fl_derived0 (sym))
14741 return false;
14742
14743 /* Resolve the type-bound procedures. */
14744 if (!resolve_typebound_procedures (sym))
14745 return false;
14746
14747 /* Generate module vtables subject to their accessibility and their not
14748 being vtables or pdt templates. If this is not done class declarations
14749 in external procedures wind up with their own version and so SELECT TYPE
14750 fails because the vptrs do not have the same address. */
14751 if (gfc_option.allow_std & GFC_STD_F2003
14752 && sym->ns->proc_name
14753 && sym->ns->proc_name->attr.flavor == FL_MODULE
14754 && sym->attr.access != ACCESS_PRIVATE
14755 && !(sym->attr.use_assoc || sym->attr.vtype || sym->attr.pdt_template))
14756 {
14757 gfc_symbol *vtab = gfc_find_derived_vtab (sym);
14758 gfc_set_sym_referenced (vtab);
14759 }
14760
14761 return true;
14762 }
14763
14764
14765 static bool
14766 resolve_fl_namelist (gfc_symbol *sym)
14767 {
14768 gfc_namelist *nl;
14769 gfc_symbol *nlsym;
14770
14771 for (nl = sym->namelist; nl; nl = nl->next)
14772 {
14773 /* Check again, the check in match only works if NAMELIST comes
14774 after the decl. */
14775 if (nl->sym->as && nl->sym->as->type == AS_ASSUMED_SIZE)
14776 {
14777 gfc_error ("Assumed size array %qs in namelist %qs at %L is not "
14778 "allowed", nl->sym->name, sym->name, &sym->declared_at);
14779 return false;
14780 }
14781
14782 if (nl->sym->as && nl->sym->as->type == AS_ASSUMED_SHAPE
14783 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST array object %qs "
14784 "with assumed shape in namelist %qs at %L",
14785 nl->sym->name, sym->name, &sym->declared_at))
14786 return false;
14787
14788 if (is_non_constant_shape_array (nl->sym)
14789 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST array object %qs "
14790 "with nonconstant shape in namelist %qs at %L",
14791 nl->sym->name, sym->name, &sym->declared_at))
14792 return false;
14793
14794 if (nl->sym->ts.type == BT_CHARACTER
14795 && (nl->sym->ts.u.cl->length == NULL
14796 || !gfc_is_constant_expr (nl->sym->ts.u.cl->length))
14797 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST object %qs with "
14798 "nonconstant character length in "
14799 "namelist %qs at %L", nl->sym->name,
14800 sym->name, &sym->declared_at))
14801 return false;
14802
14803 }
14804
14805 /* Reject PRIVATE objects in a PUBLIC namelist. */
14806 if (gfc_check_symbol_access (sym))
14807 {
14808 for (nl = sym->namelist; nl; nl = nl->next)
14809 {
14810 if (!nl->sym->attr.use_assoc
14811 && !is_sym_host_assoc (nl->sym, sym->ns)
14812 && !gfc_check_symbol_access (nl->sym))
14813 {
14814 gfc_error ("NAMELIST object %qs was declared PRIVATE and "
14815 "cannot be member of PUBLIC namelist %qs at %L",
14816 nl->sym->name, sym->name, &sym->declared_at);
14817 return false;
14818 }
14819
14820 if (nl->sym->ts.type == BT_DERIVED
14821 && (nl->sym->ts.u.derived->attr.alloc_comp
14822 || nl->sym->ts.u.derived->attr.pointer_comp))
14823 {
14824 if (!gfc_notify_std (GFC_STD_F2003, "NAMELIST object %qs in "
14825 "namelist %qs at %L with ALLOCATABLE "
14826 "or POINTER components", nl->sym->name,
14827 sym->name, &sym->declared_at))
14828 return false;
14829 return true;
14830 }
14831
14832 /* Types with private components that came here by USE-association. */
14833 if (nl->sym->ts.type == BT_DERIVED
14834 && derived_inaccessible (nl->sym->ts.u.derived))
14835 {
14836 gfc_error ("NAMELIST object %qs has use-associated PRIVATE "
14837 "components and cannot be member of namelist %qs at %L",
14838 nl->sym->name, sym->name, &sym->declared_at);
14839 return false;
14840 }
14841
14842 /* Types with private components that are defined in the same module. */
14843 if (nl->sym->ts.type == BT_DERIVED
14844 && !is_sym_host_assoc (nl->sym->ts.u.derived, sym->ns)
14845 && nl->sym->ts.u.derived->attr.private_comp)
14846 {
14847 gfc_error ("NAMELIST object %qs has PRIVATE components and "
14848 "cannot be a member of PUBLIC namelist %qs at %L",
14849 nl->sym->name, sym->name, &sym->declared_at);
14850 return false;
14851 }
14852 }
14853 }
14854
14855
14856 /* 14.1.2 A module or internal procedure represent local entities
14857 of the same type as a namelist member and so are not allowed. */
14858 for (nl = sym->namelist; nl; nl = nl->next)
14859 {
14860 if (nl->sym->ts.kind != 0 && nl->sym->attr.flavor == FL_VARIABLE)
14861 continue;
14862
14863 if (nl->sym->attr.function && nl->sym == nl->sym->result)
14864 if ((nl->sym == sym->ns->proc_name)
14865 ||
14866 (sym->ns->parent && nl->sym == sym->ns->parent->proc_name))
14867 continue;
14868
14869 nlsym = NULL;
14870 if (nl->sym->name)
14871 gfc_find_symbol (nl->sym->name, sym->ns, 1, &nlsym);
14872 if (nlsym && nlsym->attr.flavor == FL_PROCEDURE)
14873 {
14874 gfc_error ("PROCEDURE attribute conflicts with NAMELIST "
14875 "attribute in %qs at %L", nlsym->name,
14876 &sym->declared_at);
14877 return false;
14878 }
14879 }
14880
14881 if (async_io_dt)
14882 {
14883 for (nl = sym->namelist; nl; nl = nl->next)
14884 nl->sym->attr.asynchronous = 1;
14885 }
14886 return true;
14887 }
14888
14889
14890 static bool
14891 resolve_fl_parameter (gfc_symbol *sym)
14892 {
14893 /* A parameter array's shape needs to be constant. */
14894 if (sym->as != NULL
14895 && (sym->as->type == AS_DEFERRED
14896 || is_non_constant_shape_array (sym)))
14897 {
14898 gfc_error ("Parameter array %qs at %L cannot be automatic "
14899 "or of deferred shape", sym->name, &sym->declared_at);
14900 return false;
14901 }
14902
14903 /* Constraints on deferred type parameter. */
14904 if (!deferred_requirements (sym))
14905 return false;
14906
14907 /* Make sure a parameter that has been implicitly typed still
14908 matches the implicit type, since PARAMETER statements can precede
14909 IMPLICIT statements. */
14910 if (sym->attr.implicit_type
14911 && !gfc_compare_types (&sym->ts, gfc_get_default_type (sym->name,
14912 sym->ns)))
14913 {
14914 gfc_error ("Implicitly typed PARAMETER %qs at %L doesn't match a "
14915 "later IMPLICIT type", sym->name, &sym->declared_at);
14916 return false;
14917 }
14918
14919 /* Make sure the types of derived parameters are consistent. This
14920 type checking is deferred until resolution because the type may
14921 refer to a derived type from the host. */
14922 if (sym->ts.type == BT_DERIVED
14923 && !gfc_compare_types (&sym->ts, &sym->value->ts))
14924 {
14925 gfc_error ("Incompatible derived type in PARAMETER at %L",
14926 &sym->value->where);
14927 return false;
14928 }
14929
14930 /* F03:C509,C514. */
14931 if (sym->ts.type == BT_CLASS)
14932 {
14933 gfc_error ("CLASS variable %qs at %L cannot have the PARAMETER attribute",
14934 sym->name, &sym->declared_at);
14935 return false;
14936 }
14937
14938 return true;
14939 }
14940
14941
14942 /* Called by resolve_symbol to check PDTs. */
14943
14944 static void
14945 resolve_pdt (gfc_symbol* sym)
14946 {
14947 gfc_symbol *derived = NULL;
14948 gfc_actual_arglist *param;
14949 gfc_component *c;
14950 bool const_len_exprs = true;
14951 bool assumed_len_exprs = false;
14952 symbol_attribute *attr;
14953
14954 if (sym->ts.type == BT_DERIVED)
14955 {
14956 derived = sym->ts.u.derived;
14957 attr = &(sym->attr);
14958 }
14959 else if (sym->ts.type == BT_CLASS)
14960 {
14961 derived = CLASS_DATA (sym)->ts.u.derived;
14962 attr = &(CLASS_DATA (sym)->attr);
14963 }
14964 else
14965 gcc_unreachable ();
14966
14967 gcc_assert (derived->attr.pdt_type);
14968
14969 for (param = sym->param_list; param; param = param->next)
14970 {
14971 c = gfc_find_component (derived, param->name, false, true, NULL);
14972 gcc_assert (c);
14973 if (c->attr.pdt_kind)
14974 continue;
14975
14976 if (param->expr && !gfc_is_constant_expr (param->expr)
14977 && c->attr.pdt_len)
14978 const_len_exprs = false;
14979 else if (param->spec_type == SPEC_ASSUMED)
14980 assumed_len_exprs = true;
14981
14982 if (param->spec_type == SPEC_DEFERRED
14983 && !attr->allocatable && !attr->pointer)
14984 gfc_error ("The object %qs at %L has a deferred LEN "
14985 "parameter %qs and is neither allocatable "
14986 "nor a pointer", sym->name, &sym->declared_at,
14987 param->name);
14988
14989 }
14990
14991 if (!const_len_exprs
14992 && (sym->ns->proc_name->attr.is_main_program
14993 || sym->ns->proc_name->attr.flavor == FL_MODULE
14994 || sym->attr.save != SAVE_NONE))
14995 gfc_error ("The AUTOMATIC object %qs at %L must not have the "
14996 "SAVE attribute or be a variable declared in the "
14997 "main program, a module or a submodule(F08/C513)",
14998 sym->name, &sym->declared_at);
14999
15000 if (assumed_len_exprs && !(sym->attr.dummy
15001 || sym->attr.select_type_temporary || sym->attr.associate_var))
15002 gfc_error ("The object %qs at %L with ASSUMED type parameters "
15003 "must be a dummy or a SELECT TYPE selector(F08/4.2)",
15004 sym->name, &sym->declared_at);
15005 }
15006
15007
15008 /* Do anything necessary to resolve a symbol. Right now, we just
15009 assume that an otherwise unknown symbol is a variable. This sort
15010 of thing commonly happens for symbols in module. */
15011
15012 static void
15013 resolve_symbol (gfc_symbol *sym)
15014 {
15015 int check_constant, mp_flag;
15016 gfc_symtree *symtree;
15017 gfc_symtree *this_symtree;
15018 gfc_namespace *ns;
15019 gfc_component *c;
15020 symbol_attribute class_attr;
15021 gfc_array_spec *as;
15022 bool saved_specification_expr;
15023
15024 if (sym->resolved)
15025 return;
15026 sym->resolved = 1;
15027
15028 /* No symbol will ever have union type; only components can be unions.
15029 Union type declaration symbols have type BT_UNKNOWN but flavor FL_UNION
15030 (just like derived type declaration symbols have flavor FL_DERIVED). */
15031 gcc_assert (sym->ts.type != BT_UNION);
15032
15033 /* Coarrayed polymorphic objects with allocatable or pointer components are
15034 yet unsupported for -fcoarray=lib. */
15035 if (flag_coarray == GFC_FCOARRAY_LIB && sym->ts.type == BT_CLASS
15036 && sym->ts.u.derived && CLASS_DATA (sym)
15037 && CLASS_DATA (sym)->attr.codimension
15038 && (CLASS_DATA (sym)->ts.u.derived->attr.alloc_comp
15039 || CLASS_DATA (sym)->ts.u.derived->attr.pointer_comp))
15040 {
15041 gfc_error ("Sorry, allocatable/pointer components in polymorphic (CLASS) "
15042 "type coarrays at %L are unsupported", &sym->declared_at);
15043 return;
15044 }
15045
15046 if (sym->attr.artificial)
15047 return;
15048
15049 if (sym->attr.unlimited_polymorphic)
15050 return;
15051
15052 if (sym->attr.flavor == FL_UNKNOWN
15053 || (sym->attr.flavor == FL_PROCEDURE && !sym->attr.intrinsic
15054 && !sym->attr.generic && !sym->attr.external
15055 && sym->attr.if_source == IFSRC_UNKNOWN
15056 && sym->ts.type == BT_UNKNOWN))
15057 {
15058
15059 /* If we find that a flavorless symbol is an interface in one of the
15060 parent namespaces, find its symtree in this namespace, free the
15061 symbol and set the symtree to point to the interface symbol. */
15062 for (ns = gfc_current_ns->parent; ns; ns = ns->parent)
15063 {
15064 symtree = gfc_find_symtree (ns->sym_root, sym->name);
15065 if (symtree && (symtree->n.sym->generic ||
15066 (symtree->n.sym->attr.flavor == FL_PROCEDURE
15067 && sym->ns->construct_entities)))
15068 {
15069 this_symtree = gfc_find_symtree (gfc_current_ns->sym_root,
15070 sym->name);
15071 if (this_symtree->n.sym == sym)
15072 {
15073 symtree->n.sym->refs++;
15074 gfc_release_symbol (sym);
15075 this_symtree->n.sym = symtree->n.sym;
15076 return;
15077 }
15078 }
15079 }
15080
15081 /* Otherwise give it a flavor according to such attributes as
15082 it has. */
15083 if (sym->attr.flavor == FL_UNKNOWN && sym->attr.external == 0
15084 && sym->attr.intrinsic == 0)
15085 sym->attr.flavor = FL_VARIABLE;
15086 else if (sym->attr.flavor == FL_UNKNOWN)
15087 {
15088 sym->attr.flavor = FL_PROCEDURE;
15089 if (sym->attr.dimension)
15090 sym->attr.function = 1;
15091 }
15092 }
15093
15094 if (sym->attr.external && sym->ts.type != BT_UNKNOWN && !sym->attr.function)
15095 gfc_add_function (&sym->attr, sym->name, &sym->declared_at);
15096
15097 if (sym->attr.procedure && sym->attr.if_source != IFSRC_DECL
15098 && !resolve_procedure_interface (sym))
15099 return;
15100
15101 if (sym->attr.is_protected && !sym->attr.proc_pointer
15102 && (sym->attr.procedure || sym->attr.external))
15103 {
15104 if (sym->attr.external)
15105 gfc_error ("PROTECTED attribute conflicts with EXTERNAL attribute "
15106 "at %L", &sym->declared_at);
15107 else
15108 gfc_error ("PROCEDURE attribute conflicts with PROTECTED attribute "
15109 "at %L", &sym->declared_at);
15110
15111 return;
15112 }
15113
15114 if (sym->attr.flavor == FL_DERIVED && !resolve_fl_derived (sym))
15115 return;
15116
15117 else if ((sym->attr.flavor == FL_STRUCT || sym->attr.flavor == FL_UNION)
15118 && !resolve_fl_struct (sym))
15119 return;
15120
15121 /* Symbols that are module procedures with results (functions) have
15122 the types and array specification copied for type checking in
15123 procedures that call them, as well as for saving to a module
15124 file. These symbols can't stand the scrutiny that their results
15125 can. */
15126 mp_flag = (sym->result != NULL && sym->result != sym);
15127
15128 /* Make sure that the intrinsic is consistent with its internal
15129 representation. This needs to be done before assigning a default
15130 type to avoid spurious warnings. */
15131 if (sym->attr.flavor != FL_MODULE && sym->attr.intrinsic
15132 && !gfc_resolve_intrinsic (sym, &sym->declared_at))
15133 return;
15134
15135 /* Resolve associate names. */
15136 if (sym->assoc)
15137 resolve_assoc_var (sym, true);
15138
15139 /* Assign default type to symbols that need one and don't have one. */
15140 if (sym->ts.type == BT_UNKNOWN)
15141 {
15142 if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER)
15143 {
15144 gfc_set_default_type (sym, 1, NULL);
15145 }
15146
15147 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.external
15148 && !sym->attr.function && !sym->attr.subroutine
15149 && gfc_get_default_type (sym->name, sym->ns)->type == BT_UNKNOWN)
15150 gfc_add_subroutine (&sym->attr, sym->name, &sym->declared_at);
15151
15152 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.function)
15153 {
15154 /* The specific case of an external procedure should emit an error
15155 in the case that there is no implicit type. */
15156 if (!mp_flag)
15157 {
15158 if (!sym->attr.mixed_entry_master)
15159 gfc_set_default_type (sym, sym->attr.external, NULL);
15160 }
15161 else
15162 {
15163 /* Result may be in another namespace. */
15164 resolve_symbol (sym->result);
15165
15166 if (!sym->result->attr.proc_pointer)
15167 {
15168 sym->ts = sym->result->ts;
15169 sym->as = gfc_copy_array_spec (sym->result->as);
15170 sym->attr.dimension = sym->result->attr.dimension;
15171 sym->attr.pointer = sym->result->attr.pointer;
15172 sym->attr.allocatable = sym->result->attr.allocatable;
15173 sym->attr.contiguous = sym->result->attr.contiguous;
15174 }
15175 }
15176 }
15177 }
15178 else if (mp_flag && sym->attr.flavor == FL_PROCEDURE && sym->attr.function)
15179 {
15180 bool saved_specification_expr = specification_expr;
15181 specification_expr = true;
15182 gfc_resolve_array_spec (sym->result->as, false);
15183 specification_expr = saved_specification_expr;
15184 }
15185
15186 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
15187 {
15188 as = CLASS_DATA (sym)->as;
15189 class_attr = CLASS_DATA (sym)->attr;
15190 class_attr.pointer = class_attr.class_pointer;
15191 }
15192 else
15193 {
15194 class_attr = sym->attr;
15195 as = sym->as;
15196 }
15197
15198 /* F2008, C530. */
15199 if (sym->attr.contiguous
15200 && (!class_attr.dimension
15201 || (as->type != AS_ASSUMED_SHAPE && as->type != AS_ASSUMED_RANK
15202 && !class_attr.pointer)))
15203 {
15204 gfc_error ("%qs at %L has the CONTIGUOUS attribute but is not an "
15205 "array pointer or an assumed-shape or assumed-rank array",
15206 sym->name, &sym->declared_at);
15207 return;
15208 }
15209
15210 /* Assumed size arrays and assumed shape arrays must be dummy
15211 arguments. Array-spec's of implied-shape should have been resolved to
15212 AS_EXPLICIT already. */
15213
15214 if (as)
15215 {
15216 /* If AS_IMPLIED_SHAPE makes it to here, it must be a bad
15217 specification expression. */
15218 if (as->type == AS_IMPLIED_SHAPE)
15219 {
15220 int i;
15221 for (i=0; i<as->rank; i++)
15222 {
15223 if (as->lower[i] != NULL && as->upper[i] == NULL)
15224 {
15225 gfc_error ("Bad specification for assumed size array at %L",
15226 &as->lower[i]->where);
15227 return;
15228 }
15229 }
15230 gcc_unreachable();
15231 }
15232
15233 if (((as->type == AS_ASSUMED_SIZE && !as->cp_was_assumed)
15234 || as->type == AS_ASSUMED_SHAPE)
15235 && !sym->attr.dummy && !sym->attr.select_type_temporary)
15236 {
15237 if (as->type == AS_ASSUMED_SIZE)
15238 gfc_error ("Assumed size array at %L must be a dummy argument",
15239 &sym->declared_at);
15240 else
15241 gfc_error ("Assumed shape array at %L must be a dummy argument",
15242 &sym->declared_at);
15243 return;
15244 }
15245 /* TS 29113, C535a. */
15246 if (as->type == AS_ASSUMED_RANK && !sym->attr.dummy
15247 && !sym->attr.select_type_temporary
15248 && !(cs_base && cs_base->current
15249 && cs_base->current->op == EXEC_SELECT_RANK))
15250 {
15251 gfc_error ("Assumed-rank array at %L must be a dummy argument",
15252 &sym->declared_at);
15253 return;
15254 }
15255 if (as->type == AS_ASSUMED_RANK
15256 && (sym->attr.codimension || sym->attr.value))
15257 {
15258 gfc_error ("Assumed-rank array at %L may not have the VALUE or "
15259 "CODIMENSION attribute", &sym->declared_at);
15260 return;
15261 }
15262 }
15263
15264 /* Make sure symbols with known intent or optional are really dummy
15265 variable. Because of ENTRY statement, this has to be deferred
15266 until resolution time. */
15267
15268 if (!sym->attr.dummy
15269 && (sym->attr.optional || sym->attr.intent != INTENT_UNKNOWN))
15270 {
15271 gfc_error ("Symbol at %L is not a DUMMY variable", &sym->declared_at);
15272 return;
15273 }
15274
15275 if (sym->attr.value && !sym->attr.dummy)
15276 {
15277 gfc_error ("%qs at %L cannot have the VALUE attribute because "
15278 "it is not a dummy argument", sym->name, &sym->declared_at);
15279 return;
15280 }
15281
15282 if (sym->attr.value && sym->ts.type == BT_CHARACTER)
15283 {
15284 gfc_charlen *cl = sym->ts.u.cl;
15285 if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
15286 {
15287 gfc_error ("Character dummy variable %qs at %L with VALUE "
15288 "attribute must have constant length",
15289 sym->name, &sym->declared_at);
15290 return;
15291 }
15292
15293 if (sym->ts.is_c_interop
15294 && mpz_cmp_si (cl->length->value.integer, 1) != 0)
15295 {
15296 gfc_error ("C interoperable character dummy variable %qs at %L "
15297 "with VALUE attribute must have length one",
15298 sym->name, &sym->declared_at);
15299 return;
15300 }
15301 }
15302
15303 if (sym->ts.type == BT_DERIVED && !sym->attr.is_iso_c
15304 && sym->ts.u.derived->attr.generic)
15305 {
15306 sym->ts.u.derived = gfc_find_dt_in_generic (sym->ts.u.derived);
15307 if (!sym->ts.u.derived)
15308 {
15309 gfc_error ("The derived type %qs at %L is of type %qs, "
15310 "which has not been defined", sym->name,
15311 &sym->declared_at, sym->ts.u.derived->name);
15312 sym->ts.type = BT_UNKNOWN;
15313 return;
15314 }
15315 }
15316
15317 /* Use the same constraints as TYPE(*), except for the type check
15318 and that only scalars and assumed-size arrays are permitted. */
15319 if (sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
15320 {
15321 if (!sym->attr.dummy)
15322 {
15323 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall be "
15324 "a dummy argument", sym->name, &sym->declared_at);
15325 return;
15326 }
15327
15328 if (sym->ts.type != BT_ASSUMED && sym->ts.type != BT_INTEGER
15329 && sym->ts.type != BT_REAL && sym->ts.type != BT_LOGICAL
15330 && sym->ts.type != BT_COMPLEX)
15331 {
15332 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall be "
15333 "of type TYPE(*) or of an numeric intrinsic type",
15334 sym->name, &sym->declared_at);
15335 return;
15336 }
15337
15338 if (sym->attr.allocatable || sym->attr.codimension
15339 || sym->attr.pointer || sym->attr.value)
15340 {
15341 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may not "
15342 "have the ALLOCATABLE, CODIMENSION, POINTER or VALUE "
15343 "attribute", sym->name, &sym->declared_at);
15344 return;
15345 }
15346
15347 if (sym->attr.intent == INTENT_OUT)
15348 {
15349 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may not "
15350 "have the INTENT(OUT) attribute",
15351 sym->name, &sym->declared_at);
15352 return;
15353 }
15354 if (sym->attr.dimension && sym->as->type != AS_ASSUMED_SIZE)
15355 {
15356 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall "
15357 "either be a scalar or an assumed-size array",
15358 sym->name, &sym->declared_at);
15359 return;
15360 }
15361
15362 /* Set the type to TYPE(*) and add a dimension(*) to ensure
15363 NO_ARG_CHECK is correctly handled in trans*.c, e.g. with
15364 packing. */
15365 sym->ts.type = BT_ASSUMED;
15366 sym->as = gfc_get_array_spec ();
15367 sym->as->type = AS_ASSUMED_SIZE;
15368 sym->as->rank = 1;
15369 sym->as->lower[0] = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
15370 }
15371 else if (sym->ts.type == BT_ASSUMED)
15372 {
15373 /* TS 29113, C407a. */
15374 if (!sym->attr.dummy)
15375 {
15376 gfc_error ("Assumed type of variable %s at %L is only permitted "
15377 "for dummy variables", sym->name, &sym->declared_at);
15378 return;
15379 }
15380 if (sym->attr.allocatable || sym->attr.codimension
15381 || sym->attr.pointer || sym->attr.value)
15382 {
15383 gfc_error ("Assumed-type variable %s at %L may not have the "
15384 "ALLOCATABLE, CODIMENSION, POINTER or VALUE attribute",
15385 sym->name, &sym->declared_at);
15386 return;
15387 }
15388 if (sym->attr.intent == INTENT_OUT)
15389 {
15390 gfc_error ("Assumed-type variable %s at %L may not have the "
15391 "INTENT(OUT) attribute",
15392 sym->name, &sym->declared_at);
15393 return;
15394 }
15395 if (sym->attr.dimension && sym->as->type == AS_EXPLICIT)
15396 {
15397 gfc_error ("Assumed-type variable %s at %L shall not be an "
15398 "explicit-shape array", sym->name, &sym->declared_at);
15399 return;
15400 }
15401 }
15402
15403 /* If the symbol is marked as bind(c), that it is declared at module level
15404 scope and verify its type and kind. Do not do the latter for symbols
15405 that are implicitly typed because that is handled in
15406 gfc_set_default_type. Handle dummy arguments and procedure definitions
15407 separately. Also, anything that is use associated is not handled here
15408 but instead is handled in the module it is declared in. Finally, derived
15409 type definitions are allowed to be BIND(C) since that only implies that
15410 they're interoperable, and they are checked fully for interoperability
15411 when a variable is declared of that type. */
15412 if (sym->attr.is_bind_c && sym->attr.use_assoc == 0
15413 && sym->attr.dummy == 0 && sym->attr.flavor != FL_PROCEDURE
15414 && sym->attr.flavor != FL_DERIVED)
15415 {
15416 bool t = true;
15417
15418 /* First, make sure the variable is declared at the
15419 module-level scope (J3/04-007, Section 15.3). */
15420 if (sym->ns->proc_name->attr.flavor != FL_MODULE &&
15421 sym->attr.in_common == 0)
15422 {
15423 gfc_error ("Variable %qs at %L cannot be BIND(C) because it "
15424 "is neither a COMMON block nor declared at the "
15425 "module level scope", sym->name, &(sym->declared_at));
15426 t = false;
15427 }
15428 else if (sym->ts.type == BT_CHARACTER
15429 && (sym->ts.u.cl == NULL || sym->ts.u.cl->length == NULL
15430 || !gfc_is_constant_expr (sym->ts.u.cl->length)
15431 || mpz_cmp_si (sym->ts.u.cl->length->value.integer, 1) != 0))
15432 {
15433 gfc_error ("BIND(C) Variable %qs at %L must have length one",
15434 sym->name, &sym->declared_at);
15435 t = false;
15436 }
15437 else if (sym->common_head != NULL && sym->attr.implicit_type == 0)
15438 {
15439 t = verify_com_block_vars_c_interop (sym->common_head);
15440 }
15441 else if (sym->attr.implicit_type == 0)
15442 {
15443 /* If type() declaration, we need to verify that the components
15444 of the given type are all C interoperable, etc. */
15445 if (sym->ts.type == BT_DERIVED &&
15446 sym->ts.u.derived->attr.is_c_interop != 1)
15447 {
15448 /* Make sure the user marked the derived type as BIND(C). If
15449 not, call the verify routine. This could print an error
15450 for the derived type more than once if multiple variables
15451 of that type are declared. */
15452 if (sym->ts.u.derived->attr.is_bind_c != 1)
15453 verify_bind_c_derived_type (sym->ts.u.derived);
15454 t = false;
15455 }
15456
15457 /* Verify the variable itself as C interoperable if it
15458 is BIND(C). It is not possible for this to succeed if
15459 the verify_bind_c_derived_type failed, so don't have to handle
15460 any error returned by verify_bind_c_derived_type. */
15461 t = verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common,
15462 sym->common_block);
15463 }
15464
15465 if (!t)
15466 {
15467 /* clear the is_bind_c flag to prevent reporting errors more than
15468 once if something failed. */
15469 sym->attr.is_bind_c = 0;
15470 return;
15471 }
15472 }
15473
15474 /* If a derived type symbol has reached this point, without its
15475 type being declared, we have an error. Notice that most
15476 conditions that produce undefined derived types have already
15477 been dealt with. However, the likes of:
15478 implicit type(t) (t) ..... call foo (t) will get us here if
15479 the type is not declared in the scope of the implicit
15480 statement. Change the type to BT_UNKNOWN, both because it is so
15481 and to prevent an ICE. */
15482 if (sym->ts.type == BT_DERIVED && !sym->attr.is_iso_c
15483 && sym->ts.u.derived->components == NULL
15484 && !sym->ts.u.derived->attr.zero_comp)
15485 {
15486 gfc_error ("The derived type %qs at %L is of type %qs, "
15487 "which has not been defined", sym->name,
15488 &sym->declared_at, sym->ts.u.derived->name);
15489 sym->ts.type = BT_UNKNOWN;
15490 return;
15491 }
15492
15493 /* Make sure that the derived type has been resolved and that the
15494 derived type is visible in the symbol's namespace, if it is a
15495 module function and is not PRIVATE. */
15496 if (sym->ts.type == BT_DERIVED
15497 && sym->ts.u.derived->attr.use_assoc
15498 && sym->ns->proc_name
15499 && sym->ns->proc_name->attr.flavor == FL_MODULE
15500 && !resolve_fl_derived (sym->ts.u.derived))
15501 return;
15502
15503 /* Unless the derived-type declaration is use associated, Fortran 95
15504 does not allow public entries of private derived types.
15505 See 4.4.1 (F95) and 4.5.1.1 (F2003); and related interpretation
15506 161 in 95-006r3. */
15507 if (sym->ts.type == BT_DERIVED
15508 && sym->ns->proc_name && sym->ns->proc_name->attr.flavor == FL_MODULE
15509 && !sym->ts.u.derived->attr.use_assoc
15510 && gfc_check_symbol_access (sym)
15511 && !gfc_check_symbol_access (sym->ts.u.derived)
15512 && !gfc_notify_std (GFC_STD_F2003, "PUBLIC %s %qs at %L of PRIVATE "
15513 "derived type %qs",
15514 (sym->attr.flavor == FL_PARAMETER)
15515 ? "parameter" : "variable",
15516 sym->name, &sym->declared_at,
15517 sym->ts.u.derived->name))
15518 return;
15519
15520 /* F2008, C1302. */
15521 if (sym->ts.type == BT_DERIVED
15522 && ((sym->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
15523 && sym->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)
15524 || sym->ts.u.derived->attr.lock_comp)
15525 && !sym->attr.codimension && !sym->ts.u.derived->attr.coarray_comp)
15526 {
15527 gfc_error ("Variable %s at %L of type LOCK_TYPE or with subcomponent of "
15528 "type LOCK_TYPE must be a coarray", sym->name,
15529 &sym->declared_at);
15530 return;
15531 }
15532
15533 /* TS18508, C702/C703. */
15534 if (sym->ts.type == BT_DERIVED
15535 && ((sym->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
15536 && sym->ts.u.derived->intmod_sym_id == ISOFORTRAN_EVENT_TYPE)
15537 || sym->ts.u.derived->attr.event_comp)
15538 && !sym->attr.codimension && !sym->ts.u.derived->attr.coarray_comp)
15539 {
15540 gfc_error ("Variable %s at %L of type EVENT_TYPE or with subcomponent of "
15541 "type EVENT_TYPE must be a coarray", sym->name,
15542 &sym->declared_at);
15543 return;
15544 }
15545
15546 /* An assumed-size array with INTENT(OUT) shall not be of a type for which
15547 default initialization is defined (5.1.2.4.4). */
15548 if (sym->ts.type == BT_DERIVED
15549 && sym->attr.dummy
15550 && sym->attr.intent == INTENT_OUT
15551 && sym->as
15552 && sym->as->type == AS_ASSUMED_SIZE)
15553 {
15554 for (c = sym->ts.u.derived->components; c; c = c->next)
15555 {
15556 if (c->initializer)
15557 {
15558 gfc_error ("The INTENT(OUT) dummy argument %qs at %L is "
15559 "ASSUMED SIZE and so cannot have a default initializer",
15560 sym->name, &sym->declared_at);
15561 return;
15562 }
15563 }
15564 }
15565
15566 /* F2008, C542. */
15567 if (sym->ts.type == BT_DERIVED && sym->attr.dummy
15568 && sym->attr.intent == INTENT_OUT && sym->attr.lock_comp)
15569 {
15570 gfc_error ("Dummy argument %qs at %L of LOCK_TYPE shall not be "
15571 "INTENT(OUT)", sym->name, &sym->declared_at);
15572 return;
15573 }
15574
15575 /* TS18508. */
15576 if (sym->ts.type == BT_DERIVED && sym->attr.dummy
15577 && sym->attr.intent == INTENT_OUT && sym->attr.event_comp)
15578 {
15579 gfc_error ("Dummy argument %qs at %L of EVENT_TYPE shall not be "
15580 "INTENT(OUT)", sym->name, &sym->declared_at);
15581 return;
15582 }
15583
15584 /* F2008, C525. */
15585 if ((((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
15586 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
15587 && CLASS_DATA (sym)->attr.coarray_comp))
15588 || class_attr.codimension)
15589 && (sym->attr.result || sym->result == sym))
15590 {
15591 gfc_error ("Function result %qs at %L shall not be a coarray or have "
15592 "a coarray component", sym->name, &sym->declared_at);
15593 return;
15594 }
15595
15596 /* F2008, C524. */
15597 if (sym->attr.codimension && sym->ts.type == BT_DERIVED
15598 && sym->ts.u.derived->ts.is_iso_c)
15599 {
15600 gfc_error ("Variable %qs at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) "
15601 "shall not be a coarray", sym->name, &sym->declared_at);
15602 return;
15603 }
15604
15605 /* F2008, C525. */
15606 if (((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
15607 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
15608 && CLASS_DATA (sym)->attr.coarray_comp))
15609 && (class_attr.codimension || class_attr.pointer || class_attr.dimension
15610 || class_attr.allocatable))
15611 {
15612 gfc_error ("Variable %qs at %L with coarray component shall be a "
15613 "nonpointer, nonallocatable scalar, which is not a coarray",
15614 sym->name, &sym->declared_at);
15615 return;
15616 }
15617
15618 /* F2008, C526. The function-result case was handled above. */
15619 if (class_attr.codimension
15620 && !(class_attr.allocatable || sym->attr.dummy || sym->attr.save
15621 || sym->attr.select_type_temporary
15622 || sym->attr.associate_var
15623 || (sym->ns->save_all && !sym->attr.automatic)
15624 || sym->ns->proc_name->attr.flavor == FL_MODULE
15625 || sym->ns->proc_name->attr.is_main_program
15626 || sym->attr.function || sym->attr.result || sym->attr.use_assoc))
15627 {
15628 gfc_error ("Variable %qs at %L is a coarray and is not ALLOCATABLE, SAVE "
15629 "nor a dummy argument", sym->name, &sym->declared_at);
15630 return;
15631 }
15632 /* F2008, C528. */
15633 else if (class_attr.codimension && !sym->attr.select_type_temporary
15634 && !class_attr.allocatable && as && as->cotype == AS_DEFERRED)
15635 {
15636 gfc_error ("Coarray variable %qs at %L shall not have codimensions with "
15637 "deferred shape", sym->name, &sym->declared_at);
15638 return;
15639 }
15640 else if (class_attr.codimension && class_attr.allocatable && as
15641 && (as->cotype != AS_DEFERRED || as->type != AS_DEFERRED))
15642 {
15643 gfc_error ("Allocatable coarray variable %qs at %L must have "
15644 "deferred shape", sym->name, &sym->declared_at);
15645 return;
15646 }
15647
15648 /* F2008, C541. */
15649 if ((((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
15650 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
15651 && CLASS_DATA (sym)->attr.coarray_comp))
15652 || (class_attr.codimension && class_attr.allocatable))
15653 && sym->attr.dummy && sym->attr.intent == INTENT_OUT)
15654 {
15655 gfc_error ("Variable %qs at %L is INTENT(OUT) and can thus not be an "
15656 "allocatable coarray or have coarray components",
15657 sym->name, &sym->declared_at);
15658 return;
15659 }
15660
15661 if (class_attr.codimension && sym->attr.dummy
15662 && sym->ns->proc_name && sym->ns->proc_name->attr.is_bind_c)
15663 {
15664 gfc_error ("Coarray dummy variable %qs at %L not allowed in BIND(C) "
15665 "procedure %qs", sym->name, &sym->declared_at,
15666 sym->ns->proc_name->name);
15667 return;
15668 }
15669
15670 if (sym->ts.type == BT_LOGICAL
15671 && ((sym->attr.function && sym->attr.is_bind_c && sym->result == sym)
15672 || ((sym->attr.dummy || sym->attr.result) && sym->ns->proc_name
15673 && sym->ns->proc_name->attr.is_bind_c)))
15674 {
15675 int i;
15676 for (i = 0; gfc_logical_kinds[i].kind; i++)
15677 if (gfc_logical_kinds[i].kind == sym->ts.kind)
15678 break;
15679 if (!gfc_logical_kinds[i].c_bool && sym->attr.dummy
15680 && !gfc_notify_std (GFC_STD_GNU, "LOGICAL dummy argument %qs at "
15681 "%L with non-C_Bool kind in BIND(C) procedure "
15682 "%qs", sym->name, &sym->declared_at,
15683 sym->ns->proc_name->name))
15684 return;
15685 else if (!gfc_logical_kinds[i].c_bool
15686 && !gfc_notify_std (GFC_STD_GNU, "LOGICAL result variable "
15687 "%qs at %L with non-C_Bool kind in "
15688 "BIND(C) procedure %qs", sym->name,
15689 &sym->declared_at,
15690 sym->attr.function ? sym->name
15691 : sym->ns->proc_name->name))
15692 return;
15693 }
15694
15695 switch (sym->attr.flavor)
15696 {
15697 case FL_VARIABLE:
15698 if (!resolve_fl_variable (sym, mp_flag))
15699 return;
15700 break;
15701
15702 case FL_PROCEDURE:
15703 if (sym->formal && !sym->formal_ns)
15704 {
15705 /* Check that none of the arguments are a namelist. */
15706 gfc_formal_arglist *formal = sym->formal;
15707
15708 for (; formal; formal = formal->next)
15709 if (formal->sym && formal->sym->attr.flavor == FL_NAMELIST)
15710 {
15711 gfc_error ("Namelist %qs cannot be an argument to "
15712 "subroutine or function at %L",
15713 formal->sym->name, &sym->declared_at);
15714 return;
15715 }
15716 }
15717
15718 if (!resolve_fl_procedure (sym, mp_flag))
15719 return;
15720 break;
15721
15722 case FL_NAMELIST:
15723 if (!resolve_fl_namelist (sym))
15724 return;
15725 break;
15726
15727 case FL_PARAMETER:
15728 if (!resolve_fl_parameter (sym))
15729 return;
15730 break;
15731
15732 default:
15733 break;
15734 }
15735
15736 /* Resolve array specifier. Check as well some constraints
15737 on COMMON blocks. */
15738
15739 check_constant = sym->attr.in_common && !sym->attr.pointer;
15740
15741 /* Set the formal_arg_flag so that check_conflict will not throw
15742 an error for host associated variables in the specification
15743 expression for an array_valued function. */
15744 if ((sym->attr.function || sym->attr.result) && sym->as)
15745 formal_arg_flag = true;
15746
15747 saved_specification_expr = specification_expr;
15748 specification_expr = true;
15749 gfc_resolve_array_spec (sym->as, check_constant);
15750 specification_expr = saved_specification_expr;
15751
15752 formal_arg_flag = false;
15753
15754 /* Resolve formal namespaces. */
15755 if (sym->formal_ns && sym->formal_ns != gfc_current_ns
15756 && !sym->attr.contained && !sym->attr.intrinsic)
15757 gfc_resolve (sym->formal_ns);
15758
15759 /* Make sure the formal namespace is present. */
15760 if (sym->formal && !sym->formal_ns)
15761 {
15762 gfc_formal_arglist *formal = sym->formal;
15763 while (formal && !formal->sym)
15764 formal = formal->next;
15765
15766 if (formal)
15767 {
15768 sym->formal_ns = formal->sym->ns;
15769 if (sym->ns != formal->sym->ns)
15770 sym->formal_ns->refs++;
15771 }
15772 }
15773
15774 /* Check threadprivate restrictions. */
15775 if (sym->attr.threadprivate && !sym->attr.save
15776 && !(sym->ns->save_all && !sym->attr.automatic)
15777 && (!sym->attr.in_common
15778 && sym->module == NULL
15779 && (sym->ns->proc_name == NULL
15780 || sym->ns->proc_name->attr.flavor != FL_MODULE)))
15781 gfc_error ("Threadprivate at %L isn't SAVEd", &sym->declared_at);
15782
15783 /* Check omp declare target restrictions. */
15784 if (sym->attr.omp_declare_target
15785 && sym->attr.flavor == FL_VARIABLE
15786 && !sym->attr.save
15787 && !(sym->ns->save_all && !sym->attr.automatic)
15788 && (!sym->attr.in_common
15789 && sym->module == NULL
15790 && (sym->ns->proc_name == NULL
15791 || sym->ns->proc_name->attr.flavor != FL_MODULE)))
15792 gfc_error ("!$OMP DECLARE TARGET variable %qs at %L isn't SAVEd",
15793 sym->name, &sym->declared_at);
15794
15795 /* If we have come this far we can apply default-initializers, as
15796 described in 14.7.5, to those variables that have not already
15797 been assigned one. */
15798 if (sym->ts.type == BT_DERIVED
15799 && !sym->value
15800 && !sym->attr.allocatable
15801 && !sym->attr.alloc_comp)
15802 {
15803 symbol_attribute *a = &sym->attr;
15804
15805 if ((!a->save && !a->dummy && !a->pointer
15806 && !a->in_common && !a->use_assoc
15807 && a->referenced
15808 && !((a->function || a->result)
15809 && (!a->dimension
15810 || sym->ts.u.derived->attr.alloc_comp
15811 || sym->ts.u.derived->attr.pointer_comp))
15812 && !(a->function && sym != sym->result))
15813 || (a->dummy && a->intent == INTENT_OUT && !a->pointer))
15814 apply_default_init (sym);
15815 else if (a->function && sym->result && a->access != ACCESS_PRIVATE
15816 && (sym->ts.u.derived->attr.alloc_comp
15817 || sym->ts.u.derived->attr.pointer_comp))
15818 /* Mark the result symbol to be referenced, when it has allocatable
15819 components. */
15820 sym->result->attr.referenced = 1;
15821 }
15822
15823 if (sym->ts.type == BT_CLASS && sym->ns == gfc_current_ns
15824 && sym->attr.dummy && sym->attr.intent == INTENT_OUT
15825 && !CLASS_DATA (sym)->attr.class_pointer
15826 && !CLASS_DATA (sym)->attr.allocatable)
15827 apply_default_init (sym);
15828
15829 /* If this symbol has a type-spec, check it. */
15830 if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER
15831 || (sym->attr.flavor == FL_PROCEDURE && sym->attr.function))
15832 if (!resolve_typespec_used (&sym->ts, &sym->declared_at, sym->name))
15833 return;
15834
15835 if (sym->param_list)
15836 resolve_pdt (sym);
15837 }
15838
15839
15840 /************* Resolve DATA statements *************/
15841
15842 static struct
15843 {
15844 gfc_data_value *vnode;
15845 mpz_t left;
15846 }
15847 values;
15848
15849
15850 /* Advance the values structure to point to the next value in the data list. */
15851
15852 static bool
15853 next_data_value (void)
15854 {
15855 while (mpz_cmp_ui (values.left, 0) == 0)
15856 {
15857
15858 if (values.vnode->next == NULL)
15859 return false;
15860
15861 values.vnode = values.vnode->next;
15862 mpz_set (values.left, values.vnode->repeat);
15863 }
15864
15865 return true;
15866 }
15867
15868
15869 static bool
15870 check_data_variable (gfc_data_variable *var, locus *where)
15871 {
15872 gfc_expr *e;
15873 mpz_t size;
15874 mpz_t offset;
15875 bool t;
15876 ar_type mark = AR_UNKNOWN;
15877 int i;
15878 mpz_t section_index[GFC_MAX_DIMENSIONS];
15879 gfc_ref *ref;
15880 gfc_array_ref *ar;
15881 gfc_symbol *sym;
15882 int has_pointer;
15883
15884 if (!gfc_resolve_expr (var->expr))
15885 return false;
15886
15887 ar = NULL;
15888 mpz_init_set_si (offset, 0);
15889 e = var->expr;
15890
15891 if (e->expr_type == EXPR_FUNCTION && e->value.function.isym
15892 && e->value.function.isym->id == GFC_ISYM_CAF_GET)
15893 e = e->value.function.actual->expr;
15894
15895 if (e->expr_type != EXPR_VARIABLE)
15896 {
15897 gfc_error ("Expecting definable entity near %L", where);
15898 return false;
15899 }
15900
15901 sym = e->symtree->n.sym;
15902
15903 if (sym->ns->is_block_data && !sym->attr.in_common)
15904 {
15905 gfc_error ("BLOCK DATA element %qs at %L must be in COMMON",
15906 sym->name, &sym->declared_at);
15907 return false;
15908 }
15909
15910 if (e->ref == NULL && sym->as)
15911 {
15912 gfc_error ("DATA array %qs at %L must be specified in a previous"
15913 " declaration", sym->name, where);
15914 return false;
15915 }
15916
15917 if (gfc_is_coindexed (e))
15918 {
15919 gfc_error ("DATA element %qs at %L cannot have a coindex", sym->name,
15920 where);
15921 return false;
15922 }
15923
15924 has_pointer = sym->attr.pointer;
15925
15926 for (ref = e->ref; ref; ref = ref->next)
15927 {
15928 if (ref->type == REF_COMPONENT && ref->u.c.component->attr.pointer)
15929 has_pointer = 1;
15930
15931 if (has_pointer)
15932 {
15933 if (ref->type == REF_ARRAY && ref->u.ar.type != AR_FULL)
15934 {
15935 gfc_error ("DATA element %qs at %L is a pointer and so must "
15936 "be a full array", sym->name, where);
15937 return false;
15938 }
15939
15940 if (values.vnode->expr->expr_type == EXPR_CONSTANT)
15941 {
15942 gfc_error ("DATA object near %L has the pointer attribute "
15943 "and the corresponding DATA value is not a valid "
15944 "initial-data-target", where);
15945 return false;
15946 }
15947 }
15948 }
15949
15950 if (e->rank == 0 || has_pointer)
15951 {
15952 mpz_init_set_ui (size, 1);
15953 ref = NULL;
15954 }
15955 else
15956 {
15957 ref = e->ref;
15958
15959 /* Find the array section reference. */
15960 for (ref = e->ref; ref; ref = ref->next)
15961 {
15962 if (ref->type != REF_ARRAY)
15963 continue;
15964 if (ref->u.ar.type == AR_ELEMENT)
15965 continue;
15966 break;
15967 }
15968 gcc_assert (ref);
15969
15970 /* Set marks according to the reference pattern. */
15971 switch (ref->u.ar.type)
15972 {
15973 case AR_FULL:
15974 mark = AR_FULL;
15975 break;
15976
15977 case AR_SECTION:
15978 ar = &ref->u.ar;
15979 /* Get the start position of array section. */
15980 gfc_get_section_index (ar, section_index, &offset);
15981 mark = AR_SECTION;
15982 break;
15983
15984 default:
15985 gcc_unreachable ();
15986 }
15987
15988 if (!gfc_array_size (e, &size))
15989 {
15990 gfc_error ("Nonconstant array section at %L in DATA statement",
15991 where);
15992 mpz_clear (offset);
15993 return false;
15994 }
15995 }
15996
15997 t = true;
15998
15999 while (mpz_cmp_ui (size, 0) > 0)
16000 {
16001 if (!next_data_value ())
16002 {
16003 gfc_error ("DATA statement at %L has more variables than values",
16004 where);
16005 t = false;
16006 break;
16007 }
16008
16009 t = gfc_check_assign (var->expr, values.vnode->expr, 0);
16010 if (!t)
16011 break;
16012
16013 /* If we have more than one element left in the repeat count,
16014 and we have more than one element left in the target variable,
16015 then create a range assignment. */
16016 /* FIXME: Only done for full arrays for now, since array sections
16017 seem tricky. */
16018 if (mark == AR_FULL && ref && ref->next == NULL
16019 && mpz_cmp_ui (values.left, 1) > 0 && mpz_cmp_ui (size, 1) > 0)
16020 {
16021 mpz_t range;
16022
16023 if (mpz_cmp (size, values.left) >= 0)
16024 {
16025 mpz_init_set (range, values.left);
16026 mpz_sub (size, size, values.left);
16027 mpz_set_ui (values.left, 0);
16028 }
16029 else
16030 {
16031 mpz_init_set (range, size);
16032 mpz_sub (values.left, values.left, size);
16033 mpz_set_ui (size, 0);
16034 }
16035
16036 t = gfc_assign_data_value (var->expr, values.vnode->expr,
16037 offset, &range);
16038
16039 mpz_add (offset, offset, range);
16040 mpz_clear (range);
16041
16042 if (!t)
16043 break;
16044 }
16045
16046 /* Assign initial value to symbol. */
16047 else
16048 {
16049 mpz_sub_ui (values.left, values.left, 1);
16050 mpz_sub_ui (size, size, 1);
16051
16052 t = gfc_assign_data_value (var->expr, values.vnode->expr,
16053 offset, NULL);
16054 if (!t)
16055 break;
16056
16057 if (mark == AR_FULL)
16058 mpz_add_ui (offset, offset, 1);
16059
16060 /* Modify the array section indexes and recalculate the offset
16061 for next element. */
16062 else if (mark == AR_SECTION)
16063 gfc_advance_section (section_index, ar, &offset);
16064 }
16065 }
16066
16067 if (mark == AR_SECTION)
16068 {
16069 for (i = 0; i < ar->dimen; i++)
16070 mpz_clear (section_index[i]);
16071 }
16072
16073 mpz_clear (size);
16074 mpz_clear (offset);
16075
16076 return t;
16077 }
16078
16079
16080 static bool traverse_data_var (gfc_data_variable *, locus *);
16081
16082 /* Iterate over a list of elements in a DATA statement. */
16083
16084 static bool
16085 traverse_data_list (gfc_data_variable *var, locus *where)
16086 {
16087 mpz_t trip;
16088 iterator_stack frame;
16089 gfc_expr *e, *start, *end, *step;
16090 bool retval = true;
16091
16092 mpz_init (frame.value);
16093 mpz_init (trip);
16094
16095 start = gfc_copy_expr (var->iter.start);
16096 end = gfc_copy_expr (var->iter.end);
16097 step = gfc_copy_expr (var->iter.step);
16098
16099 if (!gfc_simplify_expr (start, 1)
16100 || start->expr_type != EXPR_CONSTANT)
16101 {
16102 gfc_error ("start of implied-do loop at %L could not be "
16103 "simplified to a constant value", &start->where);
16104 retval = false;
16105 goto cleanup;
16106 }
16107 if (!gfc_simplify_expr (end, 1)
16108 || end->expr_type != EXPR_CONSTANT)
16109 {
16110 gfc_error ("end of implied-do loop at %L could not be "
16111 "simplified to a constant value", &start->where);
16112 retval = false;
16113 goto cleanup;
16114 }
16115 if (!gfc_simplify_expr (step, 1)
16116 || step->expr_type != EXPR_CONSTANT)
16117 {
16118 gfc_error ("step of implied-do loop at %L could not be "
16119 "simplified to a constant value", &start->where);
16120 retval = false;
16121 goto cleanup;
16122 }
16123
16124 mpz_set (trip, end->value.integer);
16125 mpz_sub (trip, trip, start->value.integer);
16126 mpz_add (trip, trip, step->value.integer);
16127
16128 mpz_div (trip, trip, step->value.integer);
16129
16130 mpz_set (frame.value, start->value.integer);
16131
16132 frame.prev = iter_stack;
16133 frame.variable = var->iter.var->symtree;
16134 iter_stack = &frame;
16135
16136 while (mpz_cmp_ui (trip, 0) > 0)
16137 {
16138 if (!traverse_data_var (var->list, where))
16139 {
16140 retval = false;
16141 goto cleanup;
16142 }
16143
16144 e = gfc_copy_expr (var->expr);
16145 if (!gfc_simplify_expr (e, 1))
16146 {
16147 gfc_free_expr (e);
16148 retval = false;
16149 goto cleanup;
16150 }
16151
16152 mpz_add (frame.value, frame.value, step->value.integer);
16153
16154 mpz_sub_ui (trip, trip, 1);
16155 }
16156
16157 cleanup:
16158 mpz_clear (frame.value);
16159 mpz_clear (trip);
16160
16161 gfc_free_expr (start);
16162 gfc_free_expr (end);
16163 gfc_free_expr (step);
16164
16165 iter_stack = frame.prev;
16166 return retval;
16167 }
16168
16169
16170 /* Type resolve variables in the variable list of a DATA statement. */
16171
16172 static bool
16173 traverse_data_var (gfc_data_variable *var, locus *where)
16174 {
16175 bool t;
16176
16177 for (; var; var = var->next)
16178 {
16179 if (var->expr == NULL)
16180 t = traverse_data_list (var, where);
16181 else
16182 t = check_data_variable (var, where);
16183
16184 if (!t)
16185 return false;
16186 }
16187
16188 return true;
16189 }
16190
16191
16192 /* Resolve the expressions and iterators associated with a data statement.
16193 This is separate from the assignment checking because data lists should
16194 only be resolved once. */
16195
16196 static bool
16197 resolve_data_variables (gfc_data_variable *d)
16198 {
16199 for (; d; d = d->next)
16200 {
16201 if (d->list == NULL)
16202 {
16203 if (!gfc_resolve_expr (d->expr))
16204 return false;
16205 }
16206 else
16207 {
16208 if (!gfc_resolve_iterator (&d->iter, false, true))
16209 return false;
16210
16211 if (!resolve_data_variables (d->list))
16212 return false;
16213 }
16214 }
16215
16216 return true;
16217 }
16218
16219
16220 /* Resolve a single DATA statement. We implement this by storing a pointer to
16221 the value list into static variables, and then recursively traversing the
16222 variables list, expanding iterators and such. */
16223
16224 static void
16225 resolve_data (gfc_data *d)
16226 {
16227
16228 if (!resolve_data_variables (d->var))
16229 return;
16230
16231 values.vnode = d->value;
16232 if (d->value == NULL)
16233 mpz_set_ui (values.left, 0);
16234 else
16235 mpz_set (values.left, d->value->repeat);
16236
16237 if (!traverse_data_var (d->var, &d->where))
16238 return;
16239
16240 /* At this point, we better not have any values left. */
16241
16242 if (next_data_value ())
16243 gfc_error ("DATA statement at %L has more values than variables",
16244 &d->where);
16245 }
16246
16247
16248 /* 12.6 Constraint: In a pure subprogram any variable which is in common or
16249 accessed by host or use association, is a dummy argument to a pure function,
16250 is a dummy argument with INTENT (IN) to a pure subroutine, or an object that
16251 is storage associated with any such variable, shall not be used in the
16252 following contexts: (clients of this function). */
16253
16254 /* Determines if a variable is not 'pure', i.e., not assignable within a pure
16255 procedure. Returns zero if assignment is OK, nonzero if there is a
16256 problem. */
16257 int
16258 gfc_impure_variable (gfc_symbol *sym)
16259 {
16260 gfc_symbol *proc;
16261 gfc_namespace *ns;
16262
16263 if (sym->attr.use_assoc || sym->attr.in_common)
16264 return 1;
16265
16266 /* Check if the symbol's ns is inside the pure procedure. */
16267 for (ns = gfc_current_ns; ns; ns = ns->parent)
16268 {
16269 if (ns == sym->ns)
16270 break;
16271 if (ns->proc_name->attr.flavor == FL_PROCEDURE && !sym->attr.function)
16272 return 1;
16273 }
16274
16275 proc = sym->ns->proc_name;
16276 if (sym->attr.dummy
16277 && ((proc->attr.subroutine && sym->attr.intent == INTENT_IN)
16278 || proc->attr.function))
16279 return 1;
16280
16281 /* TODO: Sort out what can be storage associated, if anything, and include
16282 it here. In principle equivalences should be scanned but it does not
16283 seem to be possible to storage associate an impure variable this way. */
16284 return 0;
16285 }
16286
16287
16288 /* Test whether a symbol is pure or not. For a NULL pointer, checks if the
16289 current namespace is inside a pure procedure. */
16290
16291 int
16292 gfc_pure (gfc_symbol *sym)
16293 {
16294 symbol_attribute attr;
16295 gfc_namespace *ns;
16296
16297 if (sym == NULL)
16298 {
16299 /* Check if the current namespace or one of its parents
16300 belongs to a pure procedure. */
16301 for (ns = gfc_current_ns; ns; ns = ns->parent)
16302 {
16303 sym = ns->proc_name;
16304 if (sym == NULL)
16305 return 0;
16306 attr = sym->attr;
16307 if (attr.flavor == FL_PROCEDURE && attr.pure)
16308 return 1;
16309 }
16310 return 0;
16311 }
16312
16313 attr = sym->attr;
16314
16315 return attr.flavor == FL_PROCEDURE && attr.pure;
16316 }
16317
16318
16319 /* Test whether a symbol is implicitly pure or not. For a NULL pointer,
16320 checks if the current namespace is implicitly pure. Note that this
16321 function returns false for a PURE procedure. */
16322
16323 int
16324 gfc_implicit_pure (gfc_symbol *sym)
16325 {
16326 gfc_namespace *ns;
16327
16328 if (sym == NULL)
16329 {
16330 /* Check if the current procedure is implicit_pure. Walk up
16331 the procedure list until we find a procedure. */
16332 for (ns = gfc_current_ns; ns; ns = ns->parent)
16333 {
16334 sym = ns->proc_name;
16335 if (sym == NULL)
16336 return 0;
16337
16338 if (sym->attr.flavor == FL_PROCEDURE)
16339 break;
16340 }
16341 }
16342
16343 return sym->attr.flavor == FL_PROCEDURE && sym->attr.implicit_pure
16344 && !sym->attr.pure;
16345 }
16346
16347
16348 void
16349 gfc_unset_implicit_pure (gfc_symbol *sym)
16350 {
16351 gfc_namespace *ns;
16352
16353 if (sym == NULL)
16354 {
16355 /* Check if the current procedure is implicit_pure. Walk up
16356 the procedure list until we find a procedure. */
16357 for (ns = gfc_current_ns; ns; ns = ns->parent)
16358 {
16359 sym = ns->proc_name;
16360 if (sym == NULL)
16361 return;
16362
16363 if (sym->attr.flavor == FL_PROCEDURE)
16364 break;
16365 }
16366 }
16367
16368 if (sym->attr.flavor == FL_PROCEDURE)
16369 sym->attr.implicit_pure = 0;
16370 else
16371 sym->attr.pure = 0;
16372 }
16373
16374
16375 /* Test whether the current procedure is elemental or not. */
16376
16377 int
16378 gfc_elemental (gfc_symbol *sym)
16379 {
16380 symbol_attribute attr;
16381
16382 if (sym == NULL)
16383 sym = gfc_current_ns->proc_name;
16384 if (sym == NULL)
16385 return 0;
16386 attr = sym->attr;
16387
16388 return attr.flavor == FL_PROCEDURE && attr.elemental;
16389 }
16390
16391
16392 /* Warn about unused labels. */
16393
16394 static void
16395 warn_unused_fortran_label (gfc_st_label *label)
16396 {
16397 if (label == NULL)
16398 return;
16399
16400 warn_unused_fortran_label (label->left);
16401
16402 if (label->defined == ST_LABEL_UNKNOWN)
16403 return;
16404
16405 switch (label->referenced)
16406 {
16407 case ST_LABEL_UNKNOWN:
16408 gfc_warning (OPT_Wunused_label, "Label %d at %L defined but not used",
16409 label->value, &label->where);
16410 break;
16411
16412 case ST_LABEL_BAD_TARGET:
16413 gfc_warning (OPT_Wunused_label,
16414 "Label %d at %L defined but cannot be used",
16415 label->value, &label->where);
16416 break;
16417
16418 default:
16419 break;
16420 }
16421
16422 warn_unused_fortran_label (label->right);
16423 }
16424
16425
16426 /* Returns the sequence type of a symbol or sequence. */
16427
16428 static seq_type
16429 sequence_type (gfc_typespec ts)
16430 {
16431 seq_type result;
16432 gfc_component *c;
16433
16434 switch (ts.type)
16435 {
16436 case BT_DERIVED:
16437
16438 if (ts.u.derived->components == NULL)
16439 return SEQ_NONDEFAULT;
16440
16441 result = sequence_type (ts.u.derived->components->ts);
16442 for (c = ts.u.derived->components->next; c; c = c->next)
16443 if (sequence_type (c->ts) != result)
16444 return SEQ_MIXED;
16445
16446 return result;
16447
16448 case BT_CHARACTER:
16449 if (ts.kind != gfc_default_character_kind)
16450 return SEQ_NONDEFAULT;
16451
16452 return SEQ_CHARACTER;
16453
16454 case BT_INTEGER:
16455 if (ts.kind != gfc_default_integer_kind)
16456 return SEQ_NONDEFAULT;
16457
16458 return SEQ_NUMERIC;
16459
16460 case BT_REAL:
16461 if (!(ts.kind == gfc_default_real_kind
16462 || ts.kind == gfc_default_double_kind))
16463 return SEQ_NONDEFAULT;
16464
16465 return SEQ_NUMERIC;
16466
16467 case BT_COMPLEX:
16468 if (ts.kind != gfc_default_complex_kind)
16469 return SEQ_NONDEFAULT;
16470
16471 return SEQ_NUMERIC;
16472
16473 case BT_LOGICAL:
16474 if (ts.kind != gfc_default_logical_kind)
16475 return SEQ_NONDEFAULT;
16476
16477 return SEQ_NUMERIC;
16478
16479 default:
16480 return SEQ_NONDEFAULT;
16481 }
16482 }
16483
16484
16485 /* Resolve derived type EQUIVALENCE object. */
16486
16487 static bool
16488 resolve_equivalence_derived (gfc_symbol *derived, gfc_symbol *sym, gfc_expr *e)
16489 {
16490 gfc_component *c = derived->components;
16491
16492 if (!derived)
16493 return true;
16494
16495 /* Shall not be an object of nonsequence derived type. */
16496 if (!derived->attr.sequence)
16497 {
16498 gfc_error ("Derived type variable %qs at %L must have SEQUENCE "
16499 "attribute to be an EQUIVALENCE object", sym->name,
16500 &e->where);
16501 return false;
16502 }
16503
16504 /* Shall not have allocatable components. */
16505 if (derived->attr.alloc_comp)
16506 {
16507 gfc_error ("Derived type variable %qs at %L cannot have ALLOCATABLE "
16508 "components to be an EQUIVALENCE object",sym->name,
16509 &e->where);
16510 return false;
16511 }
16512
16513 if (sym->attr.in_common && gfc_has_default_initializer (sym->ts.u.derived))
16514 {
16515 gfc_error ("Derived type variable %qs at %L with default "
16516 "initialization cannot be in EQUIVALENCE with a variable "
16517 "in COMMON", sym->name, &e->where);
16518 return false;
16519 }
16520
16521 for (; c ; c = c->next)
16522 {
16523 if (gfc_bt_struct (c->ts.type)
16524 && (!resolve_equivalence_derived(c->ts.u.derived, sym, e)))
16525 return false;
16526
16527 /* Shall not be an object of sequence derived type containing a pointer
16528 in the structure. */
16529 if (c->attr.pointer)
16530 {
16531 gfc_error ("Derived type variable %qs at %L with pointer "
16532 "component(s) cannot be an EQUIVALENCE object",
16533 sym->name, &e->where);
16534 return false;
16535 }
16536 }
16537 return true;
16538 }
16539
16540
16541 /* Resolve equivalence object.
16542 An EQUIVALENCE object shall not be a dummy argument, a pointer, a target,
16543 an allocatable array, an object of nonsequence derived type, an object of
16544 sequence derived type containing a pointer at any level of component
16545 selection, an automatic object, a function name, an entry name, a result
16546 name, a named constant, a structure component, or a subobject of any of
16547 the preceding objects. A substring shall not have length zero. A
16548 derived type shall not have components with default initialization nor
16549 shall two objects of an equivalence group be initialized.
16550 Either all or none of the objects shall have an protected attribute.
16551 The simple constraints are done in symbol.c(check_conflict) and the rest
16552 are implemented here. */
16553
16554 static void
16555 resolve_equivalence (gfc_equiv *eq)
16556 {
16557 gfc_symbol *sym;
16558 gfc_symbol *first_sym;
16559 gfc_expr *e;
16560 gfc_ref *r;
16561 locus *last_where = NULL;
16562 seq_type eq_type, last_eq_type;
16563 gfc_typespec *last_ts;
16564 int object, cnt_protected;
16565 const char *msg;
16566
16567 last_ts = &eq->expr->symtree->n.sym->ts;
16568
16569 first_sym = eq->expr->symtree->n.sym;
16570
16571 cnt_protected = 0;
16572
16573 for (object = 1; eq; eq = eq->eq, object++)
16574 {
16575 e = eq->expr;
16576
16577 e->ts = e->symtree->n.sym->ts;
16578 /* match_varspec might not know yet if it is seeing
16579 array reference or substring reference, as it doesn't
16580 know the types. */
16581 if (e->ref && e->ref->type == REF_ARRAY)
16582 {
16583 gfc_ref *ref = e->ref;
16584 sym = e->symtree->n.sym;
16585
16586 if (sym->attr.dimension)
16587 {
16588 ref->u.ar.as = sym->as;
16589 ref = ref->next;
16590 }
16591
16592 /* For substrings, convert REF_ARRAY into REF_SUBSTRING. */
16593 if (e->ts.type == BT_CHARACTER
16594 && ref
16595 && ref->type == REF_ARRAY
16596 && ref->u.ar.dimen == 1
16597 && ref->u.ar.dimen_type[0] == DIMEN_RANGE
16598 && ref->u.ar.stride[0] == NULL)
16599 {
16600 gfc_expr *start = ref->u.ar.start[0];
16601 gfc_expr *end = ref->u.ar.end[0];
16602 void *mem = NULL;
16603
16604 /* Optimize away the (:) reference. */
16605 if (start == NULL && end == NULL)
16606 {
16607 if (e->ref == ref)
16608 e->ref = ref->next;
16609 else
16610 e->ref->next = ref->next;
16611 mem = ref;
16612 }
16613 else
16614 {
16615 ref->type = REF_SUBSTRING;
16616 if (start == NULL)
16617 start = gfc_get_int_expr (gfc_charlen_int_kind,
16618 NULL, 1);
16619 ref->u.ss.start = start;
16620 if (end == NULL && e->ts.u.cl)
16621 end = gfc_copy_expr (e->ts.u.cl->length);
16622 ref->u.ss.end = end;
16623 ref->u.ss.length = e->ts.u.cl;
16624 e->ts.u.cl = NULL;
16625 }
16626 ref = ref->next;
16627 free (mem);
16628 }
16629
16630 /* Any further ref is an error. */
16631 if (ref)
16632 {
16633 gcc_assert (ref->type == REF_ARRAY);
16634 gfc_error ("Syntax error in EQUIVALENCE statement at %L",
16635 &ref->u.ar.where);
16636 continue;
16637 }
16638 }
16639
16640 if (!gfc_resolve_expr (e))
16641 continue;
16642
16643 sym = e->symtree->n.sym;
16644
16645 if (sym->attr.is_protected)
16646 cnt_protected++;
16647 if (cnt_protected > 0 && cnt_protected != object)
16648 {
16649 gfc_error ("Either all or none of the objects in the "
16650 "EQUIVALENCE set at %L shall have the "
16651 "PROTECTED attribute",
16652 &e->where);
16653 break;
16654 }
16655
16656 /* Shall not equivalence common block variables in a PURE procedure. */
16657 if (sym->ns->proc_name
16658 && sym->ns->proc_name->attr.pure
16659 && sym->attr.in_common)
16660 {
16661 /* Need to check for symbols that may have entered the pure
16662 procedure via a USE statement. */
16663 bool saw_sym = false;
16664 if (sym->ns->use_stmts)
16665 {
16666 gfc_use_rename *r;
16667 for (r = sym->ns->use_stmts->rename; r; r = r->next)
16668 if (strcmp(r->use_name, sym->name) == 0) saw_sym = true;
16669 }
16670 else
16671 saw_sym = true;
16672
16673 if (saw_sym)
16674 gfc_error ("COMMON block member %qs at %L cannot be an "
16675 "EQUIVALENCE object in the pure procedure %qs",
16676 sym->name, &e->where, sym->ns->proc_name->name);
16677 break;
16678 }
16679
16680 /* Shall not be a named constant. */
16681 if (e->expr_type == EXPR_CONSTANT)
16682 {
16683 gfc_error ("Named constant %qs at %L cannot be an EQUIVALENCE "
16684 "object", sym->name, &e->where);
16685 continue;
16686 }
16687
16688 if (e->ts.type == BT_DERIVED
16689 && !resolve_equivalence_derived (e->ts.u.derived, sym, e))
16690 continue;
16691
16692 /* Check that the types correspond correctly:
16693 Note 5.28:
16694 A numeric sequence structure may be equivalenced to another sequence
16695 structure, an object of default integer type, default real type, double
16696 precision real type, default logical type such that components of the
16697 structure ultimately only become associated to objects of the same
16698 kind. A character sequence structure may be equivalenced to an object
16699 of default character kind or another character sequence structure.
16700 Other objects may be equivalenced only to objects of the same type and
16701 kind parameters. */
16702
16703 /* Identical types are unconditionally OK. */
16704 if (object == 1 || gfc_compare_types (last_ts, &sym->ts))
16705 goto identical_types;
16706
16707 last_eq_type = sequence_type (*last_ts);
16708 eq_type = sequence_type (sym->ts);
16709
16710 /* Since the pair of objects is not of the same type, mixed or
16711 non-default sequences can be rejected. */
16712
16713 msg = "Sequence %s with mixed components in EQUIVALENCE "
16714 "statement at %L with different type objects";
16715 if ((object ==2
16716 && last_eq_type == SEQ_MIXED
16717 && !gfc_notify_std (GFC_STD_GNU, msg, first_sym->name, last_where))
16718 || (eq_type == SEQ_MIXED
16719 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where)))
16720 continue;
16721
16722 msg = "Non-default type object or sequence %s in EQUIVALENCE "
16723 "statement at %L with objects of different type";
16724 if ((object ==2
16725 && last_eq_type == SEQ_NONDEFAULT
16726 && !gfc_notify_std (GFC_STD_GNU, msg, first_sym->name, last_where))
16727 || (eq_type == SEQ_NONDEFAULT
16728 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where)))
16729 continue;
16730
16731 msg ="Non-CHARACTER object %qs in default CHARACTER "
16732 "EQUIVALENCE statement at %L";
16733 if (last_eq_type == SEQ_CHARACTER
16734 && eq_type != SEQ_CHARACTER
16735 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where))
16736 continue;
16737
16738 msg ="Non-NUMERIC object %qs in default NUMERIC "
16739 "EQUIVALENCE statement at %L";
16740 if (last_eq_type == SEQ_NUMERIC
16741 && eq_type != SEQ_NUMERIC
16742 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where))
16743 continue;
16744
16745 identical_types:
16746 last_ts =&sym->ts;
16747 last_where = &e->where;
16748
16749 if (!e->ref)
16750 continue;
16751
16752 /* Shall not be an automatic array. */
16753 if (e->ref->type == REF_ARRAY
16754 && !gfc_resolve_array_spec (e->ref->u.ar.as, 1))
16755 {
16756 gfc_error ("Array %qs at %L with non-constant bounds cannot be "
16757 "an EQUIVALENCE object", sym->name, &e->where);
16758 continue;
16759 }
16760
16761 r = e->ref;
16762 while (r)
16763 {
16764 /* Shall not be a structure component. */
16765 if (r->type == REF_COMPONENT)
16766 {
16767 gfc_error ("Structure component %qs at %L cannot be an "
16768 "EQUIVALENCE object",
16769 r->u.c.component->name, &e->where);
16770 break;
16771 }
16772
16773 /* A substring shall not have length zero. */
16774 if (r->type == REF_SUBSTRING)
16775 {
16776 if (compare_bound (r->u.ss.start, r->u.ss.end) == CMP_GT)
16777 {
16778 gfc_error ("Substring at %L has length zero",
16779 &r->u.ss.start->where);
16780 break;
16781 }
16782 }
16783 r = r->next;
16784 }
16785 }
16786 }
16787
16788
16789 /* Function called by resolve_fntype to flag other symbol used in the
16790 length type parameter specification of function resuls. */
16791
16792 static bool
16793 flag_fn_result_spec (gfc_expr *expr,
16794 gfc_symbol *sym,
16795 int *f ATTRIBUTE_UNUSED)
16796 {
16797 gfc_namespace *ns;
16798 gfc_symbol *s;
16799
16800 if (expr->expr_type == EXPR_VARIABLE)
16801 {
16802 s = expr->symtree->n.sym;
16803 for (ns = s->ns; ns; ns = ns->parent)
16804 if (!ns->parent)
16805 break;
16806
16807 if (sym == s)
16808 {
16809 gfc_error ("Self reference in character length expression "
16810 "for %qs at %L", sym->name, &expr->where);
16811 return true;
16812 }
16813
16814 if (!s->fn_result_spec
16815 && s->attr.flavor == FL_PARAMETER)
16816 {
16817 /* Function contained in a module.... */
16818 if (ns->proc_name && ns->proc_name->attr.flavor == FL_MODULE)
16819 {
16820 gfc_symtree *st;
16821 s->fn_result_spec = 1;
16822 /* Make sure that this symbol is translated as a module
16823 variable. */
16824 st = gfc_get_unique_symtree (ns);
16825 st->n.sym = s;
16826 s->refs++;
16827 }
16828 /* ... which is use associated and called. */
16829 else if (s->attr.use_assoc || s->attr.used_in_submodule
16830 ||
16831 /* External function matched with an interface. */
16832 (s->ns->proc_name
16833 && ((s->ns == ns
16834 && s->ns->proc_name->attr.if_source == IFSRC_DECL)
16835 || s->ns->proc_name->attr.if_source == IFSRC_IFBODY)
16836 && s->ns->proc_name->attr.function))
16837 s->fn_result_spec = 1;
16838 }
16839 }
16840 return false;
16841 }
16842
16843
16844 /* Resolve function and ENTRY types, issue diagnostics if needed. */
16845
16846 static void
16847 resolve_fntype (gfc_namespace *ns)
16848 {
16849 gfc_entry_list *el;
16850 gfc_symbol *sym;
16851
16852 if (ns->proc_name == NULL || !ns->proc_name->attr.function)
16853 return;
16854
16855 /* If there are any entries, ns->proc_name is the entry master
16856 synthetic symbol and ns->entries->sym actual FUNCTION symbol. */
16857 if (ns->entries)
16858 sym = ns->entries->sym;
16859 else
16860 sym = ns->proc_name;
16861 if (sym->result == sym
16862 && sym->ts.type == BT_UNKNOWN
16863 && !gfc_set_default_type (sym, 0, NULL)
16864 && !sym->attr.untyped)
16865 {
16866 gfc_error ("Function %qs at %L has no IMPLICIT type",
16867 sym->name, &sym->declared_at);
16868 sym->attr.untyped = 1;
16869 }
16870
16871 if (sym->ts.type == BT_DERIVED && !sym->ts.u.derived->attr.use_assoc
16872 && !sym->attr.contained
16873 && !gfc_check_symbol_access (sym->ts.u.derived)
16874 && gfc_check_symbol_access (sym))
16875 {
16876 gfc_notify_std (GFC_STD_F2003, "PUBLIC function %qs at "
16877 "%L of PRIVATE type %qs", sym->name,
16878 &sym->declared_at, sym->ts.u.derived->name);
16879 }
16880
16881 if (ns->entries)
16882 for (el = ns->entries->next; el; el = el->next)
16883 {
16884 if (el->sym->result == el->sym
16885 && el->sym->ts.type == BT_UNKNOWN
16886 && !gfc_set_default_type (el->sym, 0, NULL)
16887 && !el->sym->attr.untyped)
16888 {
16889 gfc_error ("ENTRY %qs at %L has no IMPLICIT type",
16890 el->sym->name, &el->sym->declared_at);
16891 el->sym->attr.untyped = 1;
16892 }
16893 }
16894
16895 if (sym->ts.type == BT_CHARACTER)
16896 gfc_traverse_expr (sym->ts.u.cl->length, sym, flag_fn_result_spec, 0);
16897 }
16898
16899
16900 /* 12.3.2.1.1 Defined operators. */
16901
16902 static bool
16903 check_uop_procedure (gfc_symbol *sym, locus where)
16904 {
16905 gfc_formal_arglist *formal;
16906
16907 if (!sym->attr.function)
16908 {
16909 gfc_error ("User operator procedure %qs at %L must be a FUNCTION",
16910 sym->name, &where);
16911 return false;
16912 }
16913
16914 if (sym->ts.type == BT_CHARACTER
16915 && !((sym->ts.u.cl && sym->ts.u.cl->length) || sym->ts.deferred)
16916 && !(sym->result && ((sym->result->ts.u.cl
16917 && sym->result->ts.u.cl->length) || sym->result->ts.deferred)))
16918 {
16919 gfc_error ("User operator procedure %qs at %L cannot be assumed "
16920 "character length", sym->name, &where);
16921 return false;
16922 }
16923
16924 formal = gfc_sym_get_dummy_args (sym);
16925 if (!formal || !formal->sym)
16926 {
16927 gfc_error ("User operator procedure %qs at %L must have at least "
16928 "one argument", sym->name, &where);
16929 return false;
16930 }
16931
16932 if (formal->sym->attr.intent != INTENT_IN)
16933 {
16934 gfc_error ("First argument of operator interface at %L must be "
16935 "INTENT(IN)", &where);
16936 return false;
16937 }
16938
16939 if (formal->sym->attr.optional)
16940 {
16941 gfc_error ("First argument of operator interface at %L cannot be "
16942 "optional", &where);
16943 return false;
16944 }
16945
16946 formal = formal->next;
16947 if (!formal || !formal->sym)
16948 return true;
16949
16950 if (formal->sym->attr.intent != INTENT_IN)
16951 {
16952 gfc_error ("Second argument of operator interface at %L must be "
16953 "INTENT(IN)", &where);
16954 return false;
16955 }
16956
16957 if (formal->sym->attr.optional)
16958 {
16959 gfc_error ("Second argument of operator interface at %L cannot be "
16960 "optional", &where);
16961 return false;
16962 }
16963
16964 if (formal->next)
16965 {
16966 gfc_error ("Operator interface at %L must have, at most, two "
16967 "arguments", &where);
16968 return false;
16969 }
16970
16971 return true;
16972 }
16973
16974 static void
16975 gfc_resolve_uops (gfc_symtree *symtree)
16976 {
16977 gfc_interface *itr;
16978
16979 if (symtree == NULL)
16980 return;
16981
16982 gfc_resolve_uops (symtree->left);
16983 gfc_resolve_uops (symtree->right);
16984
16985 for (itr = symtree->n.uop->op; itr; itr = itr->next)
16986 check_uop_procedure (itr->sym, itr->sym->declared_at);
16987 }
16988
16989
16990 /* Examine all of the expressions associated with a program unit,
16991 assign types to all intermediate expressions, make sure that all
16992 assignments are to compatible types and figure out which names
16993 refer to which functions or subroutines. It doesn't check code
16994 block, which is handled by gfc_resolve_code. */
16995
16996 static void
16997 resolve_types (gfc_namespace *ns)
16998 {
16999 gfc_namespace *n;
17000 gfc_charlen *cl;
17001 gfc_data *d;
17002 gfc_equiv *eq;
17003 gfc_namespace* old_ns = gfc_current_ns;
17004
17005 if (ns->types_resolved)
17006 return;
17007
17008 /* Check that all IMPLICIT types are ok. */
17009 if (!ns->seen_implicit_none)
17010 {
17011 unsigned letter;
17012 for (letter = 0; letter != GFC_LETTERS; ++letter)
17013 if (ns->set_flag[letter]
17014 && !resolve_typespec_used (&ns->default_type[letter],
17015 &ns->implicit_loc[letter], NULL))
17016 return;
17017 }
17018
17019 gfc_current_ns = ns;
17020
17021 resolve_entries (ns);
17022
17023 resolve_common_vars (&ns->blank_common, false);
17024 resolve_common_blocks (ns->common_root);
17025
17026 resolve_contained_functions (ns);
17027
17028 if (ns->proc_name && ns->proc_name->attr.flavor == FL_PROCEDURE
17029 && ns->proc_name->attr.if_source == IFSRC_IFBODY)
17030 resolve_formal_arglist (ns->proc_name);
17031
17032 gfc_traverse_ns (ns, resolve_bind_c_derived_types);
17033
17034 for (cl = ns->cl_list; cl; cl = cl->next)
17035 resolve_charlen (cl);
17036
17037 gfc_traverse_ns (ns, resolve_symbol);
17038
17039 resolve_fntype (ns);
17040
17041 for (n = ns->contained; n; n = n->sibling)
17042 {
17043 if (gfc_pure (ns->proc_name) && !gfc_pure (n->proc_name))
17044 gfc_error ("Contained procedure %qs at %L of a PURE procedure must "
17045 "also be PURE", n->proc_name->name,
17046 &n->proc_name->declared_at);
17047
17048 resolve_types (n);
17049 }
17050
17051 forall_flag = 0;
17052 gfc_do_concurrent_flag = 0;
17053 gfc_check_interfaces (ns);
17054
17055 gfc_traverse_ns (ns, resolve_values);
17056
17057 if (ns->save_all || !flag_automatic)
17058 gfc_save_all (ns);
17059
17060 iter_stack = NULL;
17061 for (d = ns->data; d; d = d->next)
17062 resolve_data (d);
17063
17064 iter_stack = NULL;
17065 gfc_traverse_ns (ns, gfc_formalize_init_value);
17066
17067 gfc_traverse_ns (ns, gfc_verify_binding_labels);
17068
17069 for (eq = ns->equiv; eq; eq = eq->next)
17070 resolve_equivalence (eq);
17071
17072 /* Warn about unused labels. */
17073 if (warn_unused_label)
17074 warn_unused_fortran_label (ns->st_labels);
17075
17076 gfc_resolve_uops (ns->uop_root);
17077
17078 gfc_traverse_ns (ns, gfc_verify_DTIO_procedures);
17079
17080 gfc_resolve_omp_declare_simd (ns);
17081
17082 gfc_resolve_omp_udrs (ns->omp_udr_root);
17083
17084 ns->types_resolved = 1;
17085
17086 gfc_current_ns = old_ns;
17087 }
17088
17089
17090 /* Call gfc_resolve_code recursively. */
17091
17092 static void
17093 resolve_codes (gfc_namespace *ns)
17094 {
17095 gfc_namespace *n;
17096 bitmap_obstack old_obstack;
17097
17098 if (ns->resolved == 1)
17099 return;
17100
17101 for (n = ns->contained; n; n = n->sibling)
17102 resolve_codes (n);
17103
17104 gfc_current_ns = ns;
17105
17106 /* Don't clear 'cs_base' if this is the namespace of a BLOCK construct. */
17107 if (!(ns->proc_name && ns->proc_name->attr.flavor == FL_LABEL))
17108 cs_base = NULL;
17109
17110 /* Set to an out of range value. */
17111 current_entry_id = -1;
17112
17113 old_obstack = labels_obstack;
17114 bitmap_obstack_initialize (&labels_obstack);
17115
17116 gfc_resolve_oacc_declare (ns);
17117 gfc_resolve_oacc_routines (ns);
17118 gfc_resolve_omp_local_vars (ns);
17119 gfc_resolve_code (ns->code, ns);
17120
17121 bitmap_obstack_release (&labels_obstack);
17122 labels_obstack = old_obstack;
17123 }
17124
17125
17126 /* This function is called after a complete program unit has been compiled.
17127 Its purpose is to examine all of the expressions associated with a program
17128 unit, assign types to all intermediate expressions, make sure that all
17129 assignments are to compatible types and figure out which names refer to
17130 which functions or subroutines. */
17131
17132 void
17133 gfc_resolve (gfc_namespace *ns)
17134 {
17135 gfc_namespace *old_ns;
17136 code_stack *old_cs_base;
17137 struct gfc_omp_saved_state old_omp_state;
17138
17139 if (ns->resolved)
17140 return;
17141
17142 ns->resolved = -1;
17143 old_ns = gfc_current_ns;
17144 old_cs_base = cs_base;
17145
17146 /* As gfc_resolve can be called during resolution of an OpenMP construct
17147 body, we should clear any state associated to it, so that say NS's
17148 DO loops are not interpreted as OpenMP loops. */
17149 if (!ns->construct_entities)
17150 gfc_omp_save_and_clear_state (&old_omp_state);
17151
17152 resolve_types (ns);
17153 component_assignment_level = 0;
17154 resolve_codes (ns);
17155
17156 gfc_current_ns = old_ns;
17157 cs_base = old_cs_base;
17158 ns->resolved = 1;
17159
17160 gfc_run_passes (ns);
17161
17162 if (!ns->construct_entities)
17163 gfc_omp_restore_state (&old_omp_state);
17164 }