]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/fortran/resolve.c
re PR fortran/89647 (Host associated procedure unable to be used as binding target)
[thirdparty/gcc.git] / gcc / fortran / resolve.c
1 /* Perform type resolution on the various structures.
2 Copyright (C) 2001-2019 Free Software Foundation, Inc.
3 Contributed by Andy Vaught
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
20
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "options.h"
25 #include "bitmap.h"
26 #include "gfortran.h"
27 #include "arith.h" /* For gfc_compare_expr(). */
28 #include "dependency.h"
29 #include "data.h"
30 #include "target-memory.h" /* for gfc_simplify_transfer */
31 #include "constructor.h"
32
33 /* Types used in equivalence statements. */
34
35 enum seq_type
36 {
37 SEQ_NONDEFAULT, SEQ_NUMERIC, SEQ_CHARACTER, SEQ_MIXED
38 };
39
40 /* Stack to keep track of the nesting of blocks as we move through the
41 code. See resolve_branch() and gfc_resolve_code(). */
42
43 typedef struct code_stack
44 {
45 struct gfc_code *head, *current;
46 struct code_stack *prev;
47
48 /* This bitmap keeps track of the targets valid for a branch from
49 inside this block except for END {IF|SELECT}s of enclosing
50 blocks. */
51 bitmap reachable_labels;
52 }
53 code_stack;
54
55 static code_stack *cs_base = NULL;
56
57
58 /* Nonzero if we're inside a FORALL or DO CONCURRENT block. */
59
60 static int forall_flag;
61 int gfc_do_concurrent_flag;
62
63 /* True when we are resolving an expression that is an actual argument to
64 a procedure. */
65 static bool actual_arg = false;
66 /* True when we are resolving an expression that is the first actual argument
67 to a procedure. */
68 static bool first_actual_arg = false;
69
70
71 /* Nonzero if we're inside a OpenMP WORKSHARE or PARALLEL WORKSHARE block. */
72
73 static int omp_workshare_flag;
74
75 /* True if we are processing a formal arglist. The corresponding function
76 resets the flag each time that it is read. */
77 static bool formal_arg_flag = false;
78
79 /* True if we are resolving a specification expression. */
80 static bool specification_expr = false;
81
82 /* The id of the last entry seen. */
83 static int current_entry_id;
84
85 /* We use bitmaps to determine if a branch target is valid. */
86 static bitmap_obstack labels_obstack;
87
88 /* True when simplifying a EXPR_VARIABLE argument to an inquiry function. */
89 static bool inquiry_argument = false;
90
91
92 bool
93 gfc_is_formal_arg (void)
94 {
95 return formal_arg_flag;
96 }
97
98 /* Is the symbol host associated? */
99 static bool
100 is_sym_host_assoc (gfc_symbol *sym, gfc_namespace *ns)
101 {
102 for (ns = ns->parent; ns; ns = ns->parent)
103 {
104 if (sym->ns == ns)
105 return true;
106 }
107
108 return false;
109 }
110
111 /* Ensure a typespec used is valid; for instance, TYPE(t) is invalid if t is
112 an ABSTRACT derived-type. If where is not NULL, an error message with that
113 locus is printed, optionally using name. */
114
115 static bool
116 resolve_typespec_used (gfc_typespec* ts, locus* where, const char* name)
117 {
118 if (ts->type == BT_DERIVED && ts->u.derived->attr.abstract)
119 {
120 if (where)
121 {
122 if (name)
123 gfc_error ("%qs at %L is of the ABSTRACT type %qs",
124 name, where, ts->u.derived->name);
125 else
126 gfc_error ("ABSTRACT type %qs used at %L",
127 ts->u.derived->name, where);
128 }
129
130 return false;
131 }
132
133 return true;
134 }
135
136
137 static bool
138 check_proc_interface (gfc_symbol *ifc, locus *where)
139 {
140 /* Several checks for F08:C1216. */
141 if (ifc->attr.procedure)
142 {
143 gfc_error ("Interface %qs at %L is declared "
144 "in a later PROCEDURE statement", ifc->name, where);
145 return false;
146 }
147 if (ifc->generic)
148 {
149 /* For generic interfaces, check if there is
150 a specific procedure with the same name. */
151 gfc_interface *gen = ifc->generic;
152 while (gen && strcmp (gen->sym->name, ifc->name) != 0)
153 gen = gen->next;
154 if (!gen)
155 {
156 gfc_error ("Interface %qs at %L may not be generic",
157 ifc->name, where);
158 return false;
159 }
160 }
161 if (ifc->attr.proc == PROC_ST_FUNCTION)
162 {
163 gfc_error ("Interface %qs at %L may not be a statement function",
164 ifc->name, where);
165 return false;
166 }
167 if (gfc_is_intrinsic (ifc, 0, ifc->declared_at)
168 || gfc_is_intrinsic (ifc, 1, ifc->declared_at))
169 ifc->attr.intrinsic = 1;
170 if (ifc->attr.intrinsic && !gfc_intrinsic_actual_ok (ifc->name, 0))
171 {
172 gfc_error ("Intrinsic procedure %qs not allowed in "
173 "PROCEDURE statement at %L", ifc->name, where);
174 return false;
175 }
176 if (!ifc->attr.if_source && !ifc->attr.intrinsic && ifc->name[0] != '\0')
177 {
178 gfc_error ("Interface %qs at %L must be explicit", ifc->name, where);
179 return false;
180 }
181 return true;
182 }
183
184
185 static void resolve_symbol (gfc_symbol *sym);
186
187
188 /* Resolve the interface for a PROCEDURE declaration or procedure pointer. */
189
190 static bool
191 resolve_procedure_interface (gfc_symbol *sym)
192 {
193 gfc_symbol *ifc = sym->ts.interface;
194
195 if (!ifc)
196 return true;
197
198 if (ifc == sym)
199 {
200 gfc_error ("PROCEDURE %qs at %L may not be used as its own interface",
201 sym->name, &sym->declared_at);
202 return false;
203 }
204 if (!check_proc_interface (ifc, &sym->declared_at))
205 return false;
206
207 if (ifc->attr.if_source || ifc->attr.intrinsic)
208 {
209 /* Resolve interface and copy attributes. */
210 resolve_symbol (ifc);
211 if (ifc->attr.intrinsic)
212 gfc_resolve_intrinsic (ifc, &ifc->declared_at);
213
214 if (ifc->result)
215 {
216 sym->ts = ifc->result->ts;
217 sym->attr.allocatable = ifc->result->attr.allocatable;
218 sym->attr.pointer = ifc->result->attr.pointer;
219 sym->attr.dimension = ifc->result->attr.dimension;
220 sym->attr.class_ok = ifc->result->attr.class_ok;
221 sym->as = gfc_copy_array_spec (ifc->result->as);
222 sym->result = sym;
223 }
224 else
225 {
226 sym->ts = ifc->ts;
227 sym->attr.allocatable = ifc->attr.allocatable;
228 sym->attr.pointer = ifc->attr.pointer;
229 sym->attr.dimension = ifc->attr.dimension;
230 sym->attr.class_ok = ifc->attr.class_ok;
231 sym->as = gfc_copy_array_spec (ifc->as);
232 }
233 sym->ts.interface = ifc;
234 sym->attr.function = ifc->attr.function;
235 sym->attr.subroutine = ifc->attr.subroutine;
236
237 sym->attr.pure = ifc->attr.pure;
238 sym->attr.elemental = ifc->attr.elemental;
239 sym->attr.contiguous = ifc->attr.contiguous;
240 sym->attr.recursive = ifc->attr.recursive;
241 sym->attr.always_explicit = ifc->attr.always_explicit;
242 sym->attr.ext_attr |= ifc->attr.ext_attr;
243 sym->attr.is_bind_c = ifc->attr.is_bind_c;
244 /* Copy char length. */
245 if (ifc->ts.type == BT_CHARACTER && ifc->ts.u.cl)
246 {
247 sym->ts.u.cl = gfc_new_charlen (sym->ns, ifc->ts.u.cl);
248 if (sym->ts.u.cl->length && !sym->ts.u.cl->resolved
249 && !gfc_resolve_expr (sym->ts.u.cl->length))
250 return false;
251 }
252 }
253
254 return true;
255 }
256
257
258 /* Resolve types of formal argument lists. These have to be done early so that
259 the formal argument lists of module procedures can be copied to the
260 containing module before the individual procedures are resolved
261 individually. We also resolve argument lists of procedures in interface
262 blocks because they are self-contained scoping units.
263
264 Since a dummy argument cannot be a non-dummy procedure, the only
265 resort left for untyped names are the IMPLICIT types. */
266
267 static void
268 resolve_formal_arglist (gfc_symbol *proc)
269 {
270 gfc_formal_arglist *f;
271 gfc_symbol *sym;
272 bool saved_specification_expr;
273 int i;
274
275 if (proc->result != NULL)
276 sym = proc->result;
277 else
278 sym = proc;
279
280 if (gfc_elemental (proc)
281 || sym->attr.pointer || sym->attr.allocatable
282 || (sym->as && sym->as->rank != 0))
283 {
284 proc->attr.always_explicit = 1;
285 sym->attr.always_explicit = 1;
286 }
287
288 formal_arg_flag = true;
289
290 for (f = proc->formal; f; f = f->next)
291 {
292 gfc_array_spec *as;
293
294 sym = f->sym;
295
296 if (sym == NULL)
297 {
298 /* Alternate return placeholder. */
299 if (gfc_elemental (proc))
300 gfc_error ("Alternate return specifier in elemental subroutine "
301 "%qs at %L is not allowed", proc->name,
302 &proc->declared_at);
303 if (proc->attr.function)
304 gfc_error ("Alternate return specifier in function "
305 "%qs at %L is not allowed", proc->name,
306 &proc->declared_at);
307 continue;
308 }
309 else if (sym->attr.procedure && sym->attr.if_source != IFSRC_DECL
310 && !resolve_procedure_interface (sym))
311 return;
312
313 if (strcmp (proc->name, sym->name) == 0)
314 {
315 gfc_error ("Self-referential argument "
316 "%qs at %L is not allowed", sym->name,
317 &proc->declared_at);
318 return;
319 }
320
321 if (sym->attr.if_source != IFSRC_UNKNOWN)
322 resolve_formal_arglist (sym);
323
324 if (sym->attr.subroutine || sym->attr.external)
325 {
326 if (sym->attr.flavor == FL_UNKNOWN)
327 gfc_add_flavor (&sym->attr, FL_PROCEDURE, sym->name, &sym->declared_at);
328 }
329 else
330 {
331 if (sym->ts.type == BT_UNKNOWN && !proc->attr.intrinsic
332 && (!sym->attr.function || sym->result == sym))
333 gfc_set_default_type (sym, 1, sym->ns);
334 }
335
336 as = sym->ts.type == BT_CLASS && sym->attr.class_ok
337 ? CLASS_DATA (sym)->as : sym->as;
338
339 saved_specification_expr = specification_expr;
340 specification_expr = true;
341 gfc_resolve_array_spec (as, 0);
342 specification_expr = saved_specification_expr;
343
344 /* We can't tell if an array with dimension (:) is assumed or deferred
345 shape until we know if it has the pointer or allocatable attributes.
346 */
347 if (as && as->rank > 0 && as->type == AS_DEFERRED
348 && ((sym->ts.type != BT_CLASS
349 && !(sym->attr.pointer || sym->attr.allocatable))
350 || (sym->ts.type == BT_CLASS
351 && !(CLASS_DATA (sym)->attr.class_pointer
352 || CLASS_DATA (sym)->attr.allocatable)))
353 && sym->attr.flavor != FL_PROCEDURE)
354 {
355 as->type = AS_ASSUMED_SHAPE;
356 for (i = 0; i < as->rank; i++)
357 as->lower[i] = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
358 }
359
360 if ((as && as->rank > 0 && as->type == AS_ASSUMED_SHAPE)
361 || (as && as->type == AS_ASSUMED_RANK)
362 || sym->attr.pointer || sym->attr.allocatable || sym->attr.target
363 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
364 && (CLASS_DATA (sym)->attr.class_pointer
365 || CLASS_DATA (sym)->attr.allocatable
366 || CLASS_DATA (sym)->attr.target))
367 || sym->attr.optional)
368 {
369 proc->attr.always_explicit = 1;
370 if (proc->result)
371 proc->result->attr.always_explicit = 1;
372 }
373
374 /* If the flavor is unknown at this point, it has to be a variable.
375 A procedure specification would have already set the type. */
376
377 if (sym->attr.flavor == FL_UNKNOWN)
378 gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, &sym->declared_at);
379
380 if (gfc_pure (proc))
381 {
382 if (sym->attr.flavor == FL_PROCEDURE)
383 {
384 /* F08:C1279. */
385 if (!gfc_pure (sym))
386 {
387 gfc_error ("Dummy procedure %qs of PURE procedure at %L must "
388 "also be PURE", sym->name, &sym->declared_at);
389 continue;
390 }
391 }
392 else if (!sym->attr.pointer)
393 {
394 if (proc->attr.function && sym->attr.intent != INTENT_IN)
395 {
396 if (sym->attr.value)
397 gfc_notify_std (GFC_STD_F2008, "Argument %qs"
398 " of pure function %qs at %L with VALUE "
399 "attribute but without INTENT(IN)",
400 sym->name, proc->name, &sym->declared_at);
401 else
402 gfc_error ("Argument %qs of pure function %qs at %L must "
403 "be INTENT(IN) or VALUE", sym->name, proc->name,
404 &sym->declared_at);
405 }
406
407 if (proc->attr.subroutine && sym->attr.intent == INTENT_UNKNOWN)
408 {
409 if (sym->attr.value)
410 gfc_notify_std (GFC_STD_F2008, "Argument %qs"
411 " of pure subroutine %qs at %L with VALUE "
412 "attribute but without INTENT", sym->name,
413 proc->name, &sym->declared_at);
414 else
415 gfc_error ("Argument %qs of pure subroutine %qs at %L "
416 "must have its INTENT specified or have the "
417 "VALUE attribute", sym->name, proc->name,
418 &sym->declared_at);
419 }
420 }
421
422 /* F08:C1278a. */
423 if (sym->ts.type == BT_CLASS && sym->attr.intent == INTENT_OUT)
424 {
425 gfc_error ("INTENT(OUT) argument %qs of pure procedure %qs at %L"
426 " may not be polymorphic", sym->name, proc->name,
427 &sym->declared_at);
428 continue;
429 }
430 }
431
432 if (proc->attr.implicit_pure)
433 {
434 if (sym->attr.flavor == FL_PROCEDURE)
435 {
436 if (!gfc_pure (sym))
437 proc->attr.implicit_pure = 0;
438 }
439 else if (!sym->attr.pointer)
440 {
441 if (proc->attr.function && sym->attr.intent != INTENT_IN
442 && !sym->value)
443 proc->attr.implicit_pure = 0;
444
445 if (proc->attr.subroutine && sym->attr.intent == INTENT_UNKNOWN
446 && !sym->value)
447 proc->attr.implicit_pure = 0;
448 }
449 }
450
451 if (gfc_elemental (proc))
452 {
453 /* F08:C1289. */
454 if (sym->attr.codimension
455 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
456 && CLASS_DATA (sym)->attr.codimension))
457 {
458 gfc_error ("Coarray dummy argument %qs at %L to elemental "
459 "procedure", sym->name, &sym->declared_at);
460 continue;
461 }
462
463 if (sym->as || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
464 && CLASS_DATA (sym)->as))
465 {
466 gfc_error ("Argument %qs of elemental procedure at %L must "
467 "be scalar", sym->name, &sym->declared_at);
468 continue;
469 }
470
471 if (sym->attr.allocatable
472 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
473 && CLASS_DATA (sym)->attr.allocatable))
474 {
475 gfc_error ("Argument %qs of elemental procedure at %L cannot "
476 "have the ALLOCATABLE attribute", sym->name,
477 &sym->declared_at);
478 continue;
479 }
480
481 if (sym->attr.pointer
482 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
483 && CLASS_DATA (sym)->attr.class_pointer))
484 {
485 gfc_error ("Argument %qs of elemental procedure at %L cannot "
486 "have the POINTER attribute", sym->name,
487 &sym->declared_at);
488 continue;
489 }
490
491 if (sym->attr.flavor == FL_PROCEDURE)
492 {
493 gfc_error ("Dummy procedure %qs not allowed in elemental "
494 "procedure %qs at %L", sym->name, proc->name,
495 &sym->declared_at);
496 continue;
497 }
498
499 /* Fortran 2008 Corrigendum 1, C1290a. */
500 if (sym->attr.intent == INTENT_UNKNOWN && !sym->attr.value)
501 {
502 gfc_error ("Argument %qs of elemental procedure %qs at %L must "
503 "have its INTENT specified or have the VALUE "
504 "attribute", sym->name, proc->name,
505 &sym->declared_at);
506 continue;
507 }
508 }
509
510 /* Each dummy shall be specified to be scalar. */
511 if (proc->attr.proc == PROC_ST_FUNCTION)
512 {
513 if (sym->as != NULL)
514 {
515 /* F03:C1263 (R1238) The function-name and each dummy-arg-name
516 shall be specified, explicitly or implicitly, to be scalar. */
517 gfc_error ("Argument '%s' of statement function '%s' at %L "
518 "must be scalar", sym->name, proc->name,
519 &proc->declared_at);
520 continue;
521 }
522
523 if (sym->ts.type == BT_CHARACTER)
524 {
525 gfc_charlen *cl = sym->ts.u.cl;
526 if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
527 {
528 gfc_error ("Character-valued argument %qs of statement "
529 "function at %L must have constant length",
530 sym->name, &sym->declared_at);
531 continue;
532 }
533 }
534 }
535 }
536 formal_arg_flag = false;
537 }
538
539
540 /* Work function called when searching for symbols that have argument lists
541 associated with them. */
542
543 static void
544 find_arglists (gfc_symbol *sym)
545 {
546 if (sym->attr.if_source == IFSRC_UNKNOWN || sym->ns != gfc_current_ns
547 || gfc_fl_struct (sym->attr.flavor) || sym->attr.intrinsic)
548 return;
549
550 resolve_formal_arglist (sym);
551 }
552
553
554 /* Given a namespace, resolve all formal argument lists within the namespace.
555 */
556
557 static void
558 resolve_formal_arglists (gfc_namespace *ns)
559 {
560 if (ns == NULL)
561 return;
562
563 gfc_traverse_ns (ns, find_arglists);
564 }
565
566
567 static void
568 resolve_contained_fntype (gfc_symbol *sym, gfc_namespace *ns)
569 {
570 bool t;
571
572 if (sym && sym->attr.flavor == FL_PROCEDURE
573 && sym->ns->parent
574 && sym->ns->parent->proc_name
575 && sym->ns->parent->proc_name->attr.flavor == FL_PROCEDURE
576 && !strcmp (sym->name, sym->ns->parent->proc_name->name))
577 gfc_error ("Contained procedure %qs at %L has the same name as its "
578 "encompassing procedure", sym->name, &sym->declared_at);
579
580 /* If this namespace is not a function or an entry master function,
581 ignore it. */
582 if (! sym || !(sym->attr.function || sym->attr.flavor == FL_VARIABLE)
583 || sym->attr.entry_master)
584 return;
585
586 if (!sym->result)
587 return;
588
589 /* Try to find out of what the return type is. */
590 if (sym->result->ts.type == BT_UNKNOWN && sym->result->ts.interface == NULL)
591 {
592 t = gfc_set_default_type (sym->result, 0, ns);
593
594 if (!t && !sym->result->attr.untyped)
595 {
596 if (sym->result == sym)
597 gfc_error ("Contained function %qs at %L has no IMPLICIT type",
598 sym->name, &sym->declared_at);
599 else if (!sym->result->attr.proc_pointer)
600 gfc_error ("Result %qs of contained function %qs at %L has "
601 "no IMPLICIT type", sym->result->name, sym->name,
602 &sym->result->declared_at);
603 sym->result->attr.untyped = 1;
604 }
605 }
606
607 /* Fortran 2008 Draft Standard, page 535, C418, on type-param-value
608 type, lists the only ways a character length value of * can be used:
609 dummy arguments of procedures, named constants, function results and
610 in allocate statements if the allocate_object is an assumed length dummy
611 in external functions. Internal function results and results of module
612 procedures are not on this list, ergo, not permitted. */
613
614 if (sym->result->ts.type == BT_CHARACTER)
615 {
616 gfc_charlen *cl = sym->result->ts.u.cl;
617 if ((!cl || !cl->length) && !sym->result->ts.deferred)
618 {
619 /* See if this is a module-procedure and adapt error message
620 accordingly. */
621 bool module_proc;
622 gcc_assert (ns->parent && ns->parent->proc_name);
623 module_proc = (ns->parent->proc_name->attr.flavor == FL_MODULE);
624
625 gfc_error (module_proc
626 ? G_("Character-valued module procedure %qs at %L"
627 " must not be assumed length")
628 : G_("Character-valued internal function %qs at %L"
629 " must not be assumed length"),
630 sym->name, &sym->declared_at);
631 }
632 }
633 }
634
635
636 /* Add NEW_ARGS to the formal argument list of PROC, taking care not to
637 introduce duplicates. */
638
639 static void
640 merge_argument_lists (gfc_symbol *proc, gfc_formal_arglist *new_args)
641 {
642 gfc_formal_arglist *f, *new_arglist;
643 gfc_symbol *new_sym;
644
645 for (; new_args != NULL; new_args = new_args->next)
646 {
647 new_sym = new_args->sym;
648 /* See if this arg is already in the formal argument list. */
649 for (f = proc->formal; f; f = f->next)
650 {
651 if (new_sym == f->sym)
652 break;
653 }
654
655 if (f)
656 continue;
657
658 /* Add a new argument. Argument order is not important. */
659 new_arglist = gfc_get_formal_arglist ();
660 new_arglist->sym = new_sym;
661 new_arglist->next = proc->formal;
662 proc->formal = new_arglist;
663 }
664 }
665
666
667 /* Flag the arguments that are not present in all entries. */
668
669 static void
670 check_argument_lists (gfc_symbol *proc, gfc_formal_arglist *new_args)
671 {
672 gfc_formal_arglist *f, *head;
673 head = new_args;
674
675 for (f = proc->formal; f; f = f->next)
676 {
677 if (f->sym == NULL)
678 continue;
679
680 for (new_args = head; new_args; new_args = new_args->next)
681 {
682 if (new_args->sym == f->sym)
683 break;
684 }
685
686 if (new_args)
687 continue;
688
689 f->sym->attr.not_always_present = 1;
690 }
691 }
692
693
694 /* Resolve alternate entry points. If a symbol has multiple entry points we
695 create a new master symbol for the main routine, and turn the existing
696 symbol into an entry point. */
697
698 static void
699 resolve_entries (gfc_namespace *ns)
700 {
701 gfc_namespace *old_ns;
702 gfc_code *c;
703 gfc_symbol *proc;
704 gfc_entry_list *el;
705 char name[GFC_MAX_SYMBOL_LEN + 1];
706 static int master_count = 0;
707
708 if (ns->proc_name == NULL)
709 return;
710
711 /* No need to do anything if this procedure doesn't have alternate entry
712 points. */
713 if (!ns->entries)
714 return;
715
716 /* We may already have resolved alternate entry points. */
717 if (ns->proc_name->attr.entry_master)
718 return;
719
720 /* If this isn't a procedure something has gone horribly wrong. */
721 gcc_assert (ns->proc_name->attr.flavor == FL_PROCEDURE);
722
723 /* Remember the current namespace. */
724 old_ns = gfc_current_ns;
725
726 gfc_current_ns = ns;
727
728 /* Add the main entry point to the list of entry points. */
729 el = gfc_get_entry_list ();
730 el->sym = ns->proc_name;
731 el->id = 0;
732 el->next = ns->entries;
733 ns->entries = el;
734 ns->proc_name->attr.entry = 1;
735
736 /* If it is a module function, it needs to be in the right namespace
737 so that gfc_get_fake_result_decl can gather up the results. The
738 need for this arose in get_proc_name, where these beasts were
739 left in their own namespace, to keep prior references linked to
740 the entry declaration.*/
741 if (ns->proc_name->attr.function
742 && ns->parent && ns->parent->proc_name->attr.flavor == FL_MODULE)
743 el->sym->ns = ns;
744
745 /* Do the same for entries where the master is not a module
746 procedure. These are retained in the module namespace because
747 of the module procedure declaration. */
748 for (el = el->next; el; el = el->next)
749 if (el->sym->ns->proc_name->attr.flavor == FL_MODULE
750 && el->sym->attr.mod_proc)
751 el->sym->ns = ns;
752 el = ns->entries;
753
754 /* Add an entry statement for it. */
755 c = gfc_get_code (EXEC_ENTRY);
756 c->ext.entry = el;
757 c->next = ns->code;
758 ns->code = c;
759
760 /* Create a new symbol for the master function. */
761 /* Give the internal function a unique name (within this file).
762 Also include the function name so the user has some hope of figuring
763 out what is going on. */
764 snprintf (name, GFC_MAX_SYMBOL_LEN, "master.%d.%s",
765 master_count++, ns->proc_name->name);
766 gfc_get_ha_symbol (name, &proc);
767 gcc_assert (proc != NULL);
768
769 gfc_add_procedure (&proc->attr, PROC_INTERNAL, proc->name, NULL);
770 if (ns->proc_name->attr.subroutine)
771 gfc_add_subroutine (&proc->attr, proc->name, NULL);
772 else
773 {
774 gfc_symbol *sym;
775 gfc_typespec *ts, *fts;
776 gfc_array_spec *as, *fas;
777 gfc_add_function (&proc->attr, proc->name, NULL);
778 proc->result = proc;
779 fas = ns->entries->sym->as;
780 fas = fas ? fas : ns->entries->sym->result->as;
781 fts = &ns->entries->sym->result->ts;
782 if (fts->type == BT_UNKNOWN)
783 fts = gfc_get_default_type (ns->entries->sym->result->name, NULL);
784 for (el = ns->entries->next; el; el = el->next)
785 {
786 ts = &el->sym->result->ts;
787 as = el->sym->as;
788 as = as ? as : el->sym->result->as;
789 if (ts->type == BT_UNKNOWN)
790 ts = gfc_get_default_type (el->sym->result->name, NULL);
791
792 if (! gfc_compare_types (ts, fts)
793 || (el->sym->result->attr.dimension
794 != ns->entries->sym->result->attr.dimension)
795 || (el->sym->result->attr.pointer
796 != ns->entries->sym->result->attr.pointer))
797 break;
798 else if (as && fas && ns->entries->sym->result != el->sym->result
799 && gfc_compare_array_spec (as, fas) == 0)
800 gfc_error ("Function %s at %L has entries with mismatched "
801 "array specifications", ns->entries->sym->name,
802 &ns->entries->sym->declared_at);
803 /* The characteristics need to match and thus both need to have
804 the same string length, i.e. both len=*, or both len=4.
805 Having both len=<variable> is also possible, but difficult to
806 check at compile time. */
807 else if (ts->type == BT_CHARACTER && ts->u.cl && fts->u.cl
808 && (((ts->u.cl->length && !fts->u.cl->length)
809 ||(!ts->u.cl->length && fts->u.cl->length))
810 || (ts->u.cl->length
811 && ts->u.cl->length->expr_type
812 != fts->u.cl->length->expr_type)
813 || (ts->u.cl->length
814 && ts->u.cl->length->expr_type == EXPR_CONSTANT
815 && mpz_cmp (ts->u.cl->length->value.integer,
816 fts->u.cl->length->value.integer) != 0)))
817 gfc_notify_std (GFC_STD_GNU, "Function %s at %L with "
818 "entries returning variables of different "
819 "string lengths", ns->entries->sym->name,
820 &ns->entries->sym->declared_at);
821 }
822
823 if (el == NULL)
824 {
825 sym = ns->entries->sym->result;
826 /* All result types the same. */
827 proc->ts = *fts;
828 if (sym->attr.dimension)
829 gfc_set_array_spec (proc, gfc_copy_array_spec (sym->as), NULL);
830 if (sym->attr.pointer)
831 gfc_add_pointer (&proc->attr, NULL);
832 }
833 else
834 {
835 /* Otherwise the result will be passed through a union by
836 reference. */
837 proc->attr.mixed_entry_master = 1;
838 for (el = ns->entries; el; el = el->next)
839 {
840 sym = el->sym->result;
841 if (sym->attr.dimension)
842 {
843 if (el == ns->entries)
844 gfc_error ("FUNCTION result %s cannot be an array in "
845 "FUNCTION %s at %L", sym->name,
846 ns->entries->sym->name, &sym->declared_at);
847 else
848 gfc_error ("ENTRY result %s cannot be an array in "
849 "FUNCTION %s at %L", sym->name,
850 ns->entries->sym->name, &sym->declared_at);
851 }
852 else if (sym->attr.pointer)
853 {
854 if (el == ns->entries)
855 gfc_error ("FUNCTION result %s cannot be a POINTER in "
856 "FUNCTION %s at %L", sym->name,
857 ns->entries->sym->name, &sym->declared_at);
858 else
859 gfc_error ("ENTRY result %s cannot be a POINTER in "
860 "FUNCTION %s at %L", sym->name,
861 ns->entries->sym->name, &sym->declared_at);
862 }
863 else
864 {
865 ts = &sym->ts;
866 if (ts->type == BT_UNKNOWN)
867 ts = gfc_get_default_type (sym->name, NULL);
868 switch (ts->type)
869 {
870 case BT_INTEGER:
871 if (ts->kind == gfc_default_integer_kind)
872 sym = NULL;
873 break;
874 case BT_REAL:
875 if (ts->kind == gfc_default_real_kind
876 || ts->kind == gfc_default_double_kind)
877 sym = NULL;
878 break;
879 case BT_COMPLEX:
880 if (ts->kind == gfc_default_complex_kind)
881 sym = NULL;
882 break;
883 case BT_LOGICAL:
884 if (ts->kind == gfc_default_logical_kind)
885 sym = NULL;
886 break;
887 case BT_UNKNOWN:
888 /* We will issue error elsewhere. */
889 sym = NULL;
890 break;
891 default:
892 break;
893 }
894 if (sym)
895 {
896 if (el == ns->entries)
897 gfc_error ("FUNCTION result %s cannot be of type %s "
898 "in FUNCTION %s at %L", sym->name,
899 gfc_typename (ts), ns->entries->sym->name,
900 &sym->declared_at);
901 else
902 gfc_error ("ENTRY result %s cannot be of type %s "
903 "in FUNCTION %s at %L", sym->name,
904 gfc_typename (ts), ns->entries->sym->name,
905 &sym->declared_at);
906 }
907 }
908 }
909 }
910 }
911 proc->attr.access = ACCESS_PRIVATE;
912 proc->attr.entry_master = 1;
913
914 /* Merge all the entry point arguments. */
915 for (el = ns->entries; el; el = el->next)
916 merge_argument_lists (proc, el->sym->formal);
917
918 /* Check the master formal arguments for any that are not
919 present in all entry points. */
920 for (el = ns->entries; el; el = el->next)
921 check_argument_lists (proc, el->sym->formal);
922
923 /* Use the master function for the function body. */
924 ns->proc_name = proc;
925
926 /* Finalize the new symbols. */
927 gfc_commit_symbols ();
928
929 /* Restore the original namespace. */
930 gfc_current_ns = old_ns;
931 }
932
933
934 /* Resolve common variables. */
935 static void
936 resolve_common_vars (gfc_common_head *common_block, bool named_common)
937 {
938 gfc_symbol *csym = common_block->head;
939
940 for (; csym; csym = csym->common_next)
941 {
942 /* gfc_add_in_common may have been called before, but the reported errors
943 have been ignored to continue parsing.
944 We do the checks again here. */
945 if (!csym->attr.use_assoc)
946 {
947 gfc_add_in_common (&csym->attr, csym->name, &common_block->where);
948 gfc_notify_std (GFC_STD_F2018_OBS, "COMMON block at %L",
949 &common_block->where);
950 }
951
952 if (csym->value || csym->attr.data)
953 {
954 if (!csym->ns->is_block_data)
955 gfc_notify_std (GFC_STD_GNU, "Variable %qs at %L is in COMMON "
956 "but only in BLOCK DATA initialization is "
957 "allowed", csym->name, &csym->declared_at);
958 else if (!named_common)
959 gfc_notify_std (GFC_STD_GNU, "Initialized variable %qs at %L is "
960 "in a blank COMMON but initialization is only "
961 "allowed in named common blocks", csym->name,
962 &csym->declared_at);
963 }
964
965 if (UNLIMITED_POLY (csym))
966 gfc_error_now ("%qs in cannot appear in COMMON at %L "
967 "[F2008:C5100]", csym->name, &csym->declared_at);
968
969 if (csym->ts.type != BT_DERIVED)
970 continue;
971
972 if (!(csym->ts.u.derived->attr.sequence
973 || csym->ts.u.derived->attr.is_bind_c))
974 gfc_error_now ("Derived type variable %qs in COMMON at %L "
975 "has neither the SEQUENCE nor the BIND(C) "
976 "attribute", csym->name, &csym->declared_at);
977 if (csym->ts.u.derived->attr.alloc_comp)
978 gfc_error_now ("Derived type variable %qs in COMMON at %L "
979 "has an ultimate component that is "
980 "allocatable", csym->name, &csym->declared_at);
981 if (gfc_has_default_initializer (csym->ts.u.derived))
982 gfc_error_now ("Derived type variable %qs in COMMON at %L "
983 "may not have default initializer", csym->name,
984 &csym->declared_at);
985
986 if (csym->attr.flavor == FL_UNKNOWN && !csym->attr.proc_pointer)
987 gfc_add_flavor (&csym->attr, FL_VARIABLE, csym->name, &csym->declared_at);
988 }
989 }
990
991 /* Resolve common blocks. */
992 static void
993 resolve_common_blocks (gfc_symtree *common_root)
994 {
995 gfc_symbol *sym;
996 gfc_gsymbol * gsym;
997
998 if (common_root == NULL)
999 return;
1000
1001 if (common_root->left)
1002 resolve_common_blocks (common_root->left);
1003 if (common_root->right)
1004 resolve_common_blocks (common_root->right);
1005
1006 resolve_common_vars (common_root->n.common, true);
1007
1008 /* The common name is a global name - in Fortran 2003 also if it has a
1009 C binding name, since Fortran 2008 only the C binding name is a global
1010 identifier. */
1011 if (!common_root->n.common->binding_label
1012 || gfc_notification_std (GFC_STD_F2008))
1013 {
1014 gsym = gfc_find_gsymbol (gfc_gsym_root,
1015 common_root->n.common->name);
1016
1017 if (gsym && gfc_notification_std (GFC_STD_F2008)
1018 && gsym->type == GSYM_COMMON
1019 && ((common_root->n.common->binding_label
1020 && (!gsym->binding_label
1021 || strcmp (common_root->n.common->binding_label,
1022 gsym->binding_label) != 0))
1023 || (!common_root->n.common->binding_label
1024 && gsym->binding_label)))
1025 {
1026 gfc_error ("In Fortran 2003 COMMON %qs block at %L is a global "
1027 "identifier and must thus have the same binding name "
1028 "as the same-named COMMON block at %L: %s vs %s",
1029 common_root->n.common->name, &common_root->n.common->where,
1030 &gsym->where,
1031 common_root->n.common->binding_label
1032 ? common_root->n.common->binding_label : "(blank)",
1033 gsym->binding_label ? gsym->binding_label : "(blank)");
1034 return;
1035 }
1036
1037 if (gsym && gsym->type != GSYM_COMMON
1038 && !common_root->n.common->binding_label)
1039 {
1040 gfc_error ("COMMON block %qs at %L uses the same global identifier "
1041 "as entity at %L",
1042 common_root->n.common->name, &common_root->n.common->where,
1043 &gsym->where);
1044 return;
1045 }
1046 if (gsym && gsym->type != GSYM_COMMON)
1047 {
1048 gfc_error ("Fortran 2008: COMMON block %qs with binding label at "
1049 "%L sharing the identifier with global non-COMMON-block "
1050 "entity at %L", common_root->n.common->name,
1051 &common_root->n.common->where, &gsym->where);
1052 return;
1053 }
1054 if (!gsym)
1055 {
1056 gsym = gfc_get_gsymbol (common_root->n.common->name, false);
1057 gsym->type = GSYM_COMMON;
1058 gsym->where = common_root->n.common->where;
1059 gsym->defined = 1;
1060 }
1061 gsym->used = 1;
1062 }
1063
1064 if (common_root->n.common->binding_label)
1065 {
1066 gsym = gfc_find_gsymbol (gfc_gsym_root,
1067 common_root->n.common->binding_label);
1068 if (gsym && gsym->type != GSYM_COMMON)
1069 {
1070 gfc_error ("COMMON block at %L with binding label %qs uses the same "
1071 "global identifier as entity at %L",
1072 &common_root->n.common->where,
1073 common_root->n.common->binding_label, &gsym->where);
1074 return;
1075 }
1076 if (!gsym)
1077 {
1078 gsym = gfc_get_gsymbol (common_root->n.common->binding_label, true);
1079 gsym->type = GSYM_COMMON;
1080 gsym->where = common_root->n.common->where;
1081 gsym->defined = 1;
1082 }
1083 gsym->used = 1;
1084 }
1085
1086 gfc_find_symbol (common_root->name, gfc_current_ns, 0, &sym);
1087 if (sym == NULL)
1088 return;
1089
1090 if (sym->attr.flavor == FL_PARAMETER)
1091 gfc_error ("COMMON block %qs at %L is used as PARAMETER at %L",
1092 sym->name, &common_root->n.common->where, &sym->declared_at);
1093
1094 if (sym->attr.external)
1095 gfc_error ("COMMON block %qs at %L cannot have the EXTERNAL attribute",
1096 sym->name, &common_root->n.common->where);
1097
1098 if (sym->attr.intrinsic)
1099 gfc_error ("COMMON block %qs at %L is also an intrinsic procedure",
1100 sym->name, &common_root->n.common->where);
1101 else if (sym->attr.result
1102 || gfc_is_function_return_value (sym, gfc_current_ns))
1103 gfc_notify_std (GFC_STD_F2003, "COMMON block %qs at %L "
1104 "that is also a function result", sym->name,
1105 &common_root->n.common->where);
1106 else if (sym->attr.flavor == FL_PROCEDURE && sym->attr.proc != PROC_INTERNAL
1107 && sym->attr.proc != PROC_ST_FUNCTION)
1108 gfc_notify_std (GFC_STD_F2003, "COMMON block %qs at %L "
1109 "that is also a global procedure", sym->name,
1110 &common_root->n.common->where);
1111 }
1112
1113
1114 /* Resolve contained function types. Because contained functions can call one
1115 another, they have to be worked out before any of the contained procedures
1116 can be resolved.
1117
1118 The good news is that if a function doesn't already have a type, the only
1119 way it can get one is through an IMPLICIT type or a RESULT variable, because
1120 by definition contained functions are contained namespace they're contained
1121 in, not in a sibling or parent namespace. */
1122
1123 static void
1124 resolve_contained_functions (gfc_namespace *ns)
1125 {
1126 gfc_namespace *child;
1127 gfc_entry_list *el;
1128
1129 resolve_formal_arglists (ns);
1130
1131 for (child = ns->contained; child; child = child->sibling)
1132 {
1133 /* Resolve alternate entry points first. */
1134 resolve_entries (child);
1135
1136 /* Then check function return types. */
1137 resolve_contained_fntype (child->proc_name, child);
1138 for (el = child->entries; el; el = el->next)
1139 resolve_contained_fntype (el->sym, child);
1140 }
1141 }
1142
1143
1144
1145 /* A Parameterized Derived Type constructor must contain values for
1146 the PDT KIND parameters or they must have a default initializer.
1147 Go through the constructor picking out the KIND expressions,
1148 storing them in 'param_list' and then call gfc_get_pdt_instance
1149 to obtain the PDT instance. */
1150
1151 static gfc_actual_arglist *param_list, *param_tail, *param;
1152
1153 static bool
1154 get_pdt_spec_expr (gfc_component *c, gfc_expr *expr)
1155 {
1156 param = gfc_get_actual_arglist ();
1157 if (!param_list)
1158 param_list = param_tail = param;
1159 else
1160 {
1161 param_tail->next = param;
1162 param_tail = param_tail->next;
1163 }
1164
1165 param_tail->name = c->name;
1166 if (expr)
1167 param_tail->expr = gfc_copy_expr (expr);
1168 else if (c->initializer)
1169 param_tail->expr = gfc_copy_expr (c->initializer);
1170 else
1171 {
1172 param_tail->spec_type = SPEC_ASSUMED;
1173 if (c->attr.pdt_kind)
1174 {
1175 gfc_error ("The KIND parameter %qs in the PDT constructor "
1176 "at %C has no value", param->name);
1177 return false;
1178 }
1179 }
1180
1181 return true;
1182 }
1183
1184 static bool
1185 get_pdt_constructor (gfc_expr *expr, gfc_constructor **constr,
1186 gfc_symbol *derived)
1187 {
1188 gfc_constructor *cons = NULL;
1189 gfc_component *comp;
1190 bool t = true;
1191
1192 if (expr && expr->expr_type == EXPR_STRUCTURE)
1193 cons = gfc_constructor_first (expr->value.constructor);
1194 else if (constr)
1195 cons = *constr;
1196 gcc_assert (cons);
1197
1198 comp = derived->components;
1199
1200 for (; comp && cons; comp = comp->next, cons = gfc_constructor_next (cons))
1201 {
1202 if (cons->expr
1203 && cons->expr->expr_type == EXPR_STRUCTURE
1204 && comp->ts.type == BT_DERIVED)
1205 {
1206 t = get_pdt_constructor (cons->expr, NULL, comp->ts.u.derived);
1207 if (!t)
1208 return t;
1209 }
1210 else if (comp->ts.type == BT_DERIVED)
1211 {
1212 t = get_pdt_constructor (NULL, &cons, comp->ts.u.derived);
1213 if (!t)
1214 return t;
1215 }
1216 else if ((comp->attr.pdt_kind || comp->attr.pdt_len)
1217 && derived->attr.pdt_template)
1218 {
1219 t = get_pdt_spec_expr (comp, cons->expr);
1220 if (!t)
1221 return t;
1222 }
1223 }
1224 return t;
1225 }
1226
1227
1228 static bool resolve_fl_derived0 (gfc_symbol *sym);
1229 static bool resolve_fl_struct (gfc_symbol *sym);
1230
1231
1232 /* Resolve all of the elements of a structure constructor and make sure that
1233 the types are correct. The 'init' flag indicates that the given
1234 constructor is an initializer. */
1235
1236 static bool
1237 resolve_structure_cons (gfc_expr *expr, int init)
1238 {
1239 gfc_constructor *cons;
1240 gfc_component *comp;
1241 bool t;
1242 symbol_attribute a;
1243
1244 t = true;
1245
1246 if (expr->ts.type == BT_DERIVED || expr->ts.type == BT_UNION)
1247 {
1248 if (expr->ts.u.derived->attr.flavor == FL_DERIVED)
1249 resolve_fl_derived0 (expr->ts.u.derived);
1250 else
1251 resolve_fl_struct (expr->ts.u.derived);
1252
1253 /* If this is a Parameterized Derived Type template, find the
1254 instance corresponding to the PDT kind parameters. */
1255 if (expr->ts.u.derived->attr.pdt_template)
1256 {
1257 param_list = NULL;
1258 t = get_pdt_constructor (expr, NULL, expr->ts.u.derived);
1259 if (!t)
1260 return t;
1261 gfc_get_pdt_instance (param_list, &expr->ts.u.derived, NULL);
1262
1263 expr->param_list = gfc_copy_actual_arglist (param_list);
1264
1265 if (param_list)
1266 gfc_free_actual_arglist (param_list);
1267
1268 if (!expr->ts.u.derived->attr.pdt_type)
1269 return false;
1270 }
1271 }
1272
1273 cons = gfc_constructor_first (expr->value.constructor);
1274
1275 /* A constructor may have references if it is the result of substituting a
1276 parameter variable. In this case we just pull out the component we
1277 want. */
1278 if (expr->ref)
1279 comp = expr->ref->u.c.sym->components;
1280 else
1281 comp = expr->ts.u.derived->components;
1282
1283 for (; comp && cons; comp = comp->next, cons = gfc_constructor_next (cons))
1284 {
1285 int rank;
1286
1287 if (!cons->expr)
1288 continue;
1289
1290 /* Unions use an EXPR_NULL contrived expression to tell the translation
1291 phase to generate an initializer of the appropriate length.
1292 Ignore it here. */
1293 if (cons->expr->ts.type == BT_UNION && cons->expr->expr_type == EXPR_NULL)
1294 continue;
1295
1296 if (!gfc_resolve_expr (cons->expr))
1297 {
1298 t = false;
1299 continue;
1300 }
1301
1302 rank = comp->as ? comp->as->rank : 0;
1303 if (comp->ts.type == BT_CLASS
1304 && !comp->ts.u.derived->attr.unlimited_polymorphic
1305 && CLASS_DATA (comp)->as)
1306 rank = CLASS_DATA (comp)->as->rank;
1307
1308 if (cons->expr->expr_type != EXPR_NULL && rank != cons->expr->rank
1309 && (comp->attr.allocatable || cons->expr->rank))
1310 {
1311 gfc_error ("The rank of the element in the structure "
1312 "constructor at %L does not match that of the "
1313 "component (%d/%d)", &cons->expr->where,
1314 cons->expr->rank, rank);
1315 t = false;
1316 }
1317
1318 /* If we don't have the right type, try to convert it. */
1319
1320 if (!comp->attr.proc_pointer &&
1321 !gfc_compare_types (&cons->expr->ts, &comp->ts))
1322 {
1323 if (strcmp (comp->name, "_extends") == 0)
1324 {
1325 /* Can afford to be brutal with the _extends initializer.
1326 The derived type can get lost because it is PRIVATE
1327 but it is not usage constrained by the standard. */
1328 cons->expr->ts = comp->ts;
1329 }
1330 else if (comp->attr.pointer && cons->expr->ts.type != BT_UNKNOWN)
1331 {
1332 gfc_error ("The element in the structure constructor at %L, "
1333 "for pointer component %qs, is %s but should be %s",
1334 &cons->expr->where, comp->name,
1335 gfc_basic_typename (cons->expr->ts.type),
1336 gfc_basic_typename (comp->ts.type));
1337 t = false;
1338 }
1339 else
1340 {
1341 bool t2 = gfc_convert_type (cons->expr, &comp->ts, 1);
1342 if (t)
1343 t = t2;
1344 }
1345 }
1346
1347 /* For strings, the length of the constructor should be the same as
1348 the one of the structure, ensure this if the lengths are known at
1349 compile time and when we are dealing with PARAMETER or structure
1350 constructors. */
1351 if (cons->expr->ts.type == BT_CHARACTER && comp->ts.u.cl
1352 && comp->ts.u.cl->length
1353 && comp->ts.u.cl->length->expr_type == EXPR_CONSTANT
1354 && cons->expr->ts.u.cl && cons->expr->ts.u.cl->length
1355 && cons->expr->ts.u.cl->length->expr_type == EXPR_CONSTANT
1356 && cons->expr->rank != 0
1357 && mpz_cmp (cons->expr->ts.u.cl->length->value.integer,
1358 comp->ts.u.cl->length->value.integer) != 0)
1359 {
1360 if (cons->expr->expr_type == EXPR_VARIABLE
1361 && cons->expr->symtree->n.sym->attr.flavor == FL_PARAMETER)
1362 {
1363 /* Wrap the parameter in an array constructor (EXPR_ARRAY)
1364 to make use of the gfc_resolve_character_array_constructor
1365 machinery. The expression is later simplified away to
1366 an array of string literals. */
1367 gfc_expr *para = cons->expr;
1368 cons->expr = gfc_get_expr ();
1369 cons->expr->ts = para->ts;
1370 cons->expr->where = para->where;
1371 cons->expr->expr_type = EXPR_ARRAY;
1372 cons->expr->rank = para->rank;
1373 cons->expr->shape = gfc_copy_shape (para->shape, para->rank);
1374 gfc_constructor_append_expr (&cons->expr->value.constructor,
1375 para, &cons->expr->where);
1376 }
1377
1378 if (cons->expr->expr_type == EXPR_ARRAY)
1379 {
1380 /* Rely on the cleanup of the namespace to deal correctly with
1381 the old charlen. (There was a block here that attempted to
1382 remove the charlen but broke the chain in so doing.) */
1383 cons->expr->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
1384 cons->expr->ts.u.cl->length_from_typespec = true;
1385 cons->expr->ts.u.cl->length = gfc_copy_expr (comp->ts.u.cl->length);
1386 gfc_resolve_character_array_constructor (cons->expr);
1387 }
1388 }
1389
1390 if (cons->expr->expr_type == EXPR_NULL
1391 && !(comp->attr.pointer || comp->attr.allocatable
1392 || comp->attr.proc_pointer || comp->ts.f90_type == BT_VOID
1393 || (comp->ts.type == BT_CLASS
1394 && (CLASS_DATA (comp)->attr.class_pointer
1395 || CLASS_DATA (comp)->attr.allocatable))))
1396 {
1397 t = false;
1398 gfc_error ("The NULL in the structure constructor at %L is "
1399 "being applied to component %qs, which is neither "
1400 "a POINTER nor ALLOCATABLE", &cons->expr->where,
1401 comp->name);
1402 }
1403
1404 if (comp->attr.proc_pointer && comp->ts.interface)
1405 {
1406 /* Check procedure pointer interface. */
1407 gfc_symbol *s2 = NULL;
1408 gfc_component *c2;
1409 const char *name;
1410 char err[200];
1411
1412 c2 = gfc_get_proc_ptr_comp (cons->expr);
1413 if (c2)
1414 {
1415 s2 = c2->ts.interface;
1416 name = c2->name;
1417 }
1418 else if (cons->expr->expr_type == EXPR_FUNCTION)
1419 {
1420 s2 = cons->expr->symtree->n.sym->result;
1421 name = cons->expr->symtree->n.sym->result->name;
1422 }
1423 else if (cons->expr->expr_type != EXPR_NULL)
1424 {
1425 s2 = cons->expr->symtree->n.sym;
1426 name = cons->expr->symtree->n.sym->name;
1427 }
1428
1429 if (s2 && !gfc_compare_interfaces (comp->ts.interface, s2, name, 0, 1,
1430 err, sizeof (err), NULL, NULL))
1431 {
1432 gfc_error_opt (OPT_Wargument_mismatch,
1433 "Interface mismatch for procedure-pointer "
1434 "component %qs in structure constructor at %L:"
1435 " %s", comp->name, &cons->expr->where, err);
1436 return false;
1437 }
1438 }
1439
1440 if (!comp->attr.pointer || comp->attr.proc_pointer
1441 || cons->expr->expr_type == EXPR_NULL)
1442 continue;
1443
1444 a = gfc_expr_attr (cons->expr);
1445
1446 if (!a.pointer && !a.target)
1447 {
1448 t = false;
1449 gfc_error ("The element in the structure constructor at %L, "
1450 "for pointer component %qs should be a POINTER or "
1451 "a TARGET", &cons->expr->where, comp->name);
1452 }
1453
1454 if (init)
1455 {
1456 /* F08:C461. Additional checks for pointer initialization. */
1457 if (a.allocatable)
1458 {
1459 t = false;
1460 gfc_error ("Pointer initialization target at %L "
1461 "must not be ALLOCATABLE", &cons->expr->where);
1462 }
1463 if (!a.save)
1464 {
1465 t = false;
1466 gfc_error ("Pointer initialization target at %L "
1467 "must have the SAVE attribute", &cons->expr->where);
1468 }
1469 }
1470
1471 /* F2003, C1272 (3). */
1472 bool impure = cons->expr->expr_type == EXPR_VARIABLE
1473 && (gfc_impure_variable (cons->expr->symtree->n.sym)
1474 || gfc_is_coindexed (cons->expr));
1475 if (impure && gfc_pure (NULL))
1476 {
1477 t = false;
1478 gfc_error ("Invalid expression in the structure constructor for "
1479 "pointer component %qs at %L in PURE procedure",
1480 comp->name, &cons->expr->where);
1481 }
1482
1483 if (impure)
1484 gfc_unset_implicit_pure (NULL);
1485 }
1486
1487 return t;
1488 }
1489
1490
1491 /****************** Expression name resolution ******************/
1492
1493 /* Returns 0 if a symbol was not declared with a type or
1494 attribute declaration statement, nonzero otherwise. */
1495
1496 static int
1497 was_declared (gfc_symbol *sym)
1498 {
1499 symbol_attribute a;
1500
1501 a = sym->attr;
1502
1503 if (!a.implicit_type && sym->ts.type != BT_UNKNOWN)
1504 return 1;
1505
1506 if (a.allocatable || a.dimension || a.dummy || a.external || a.intrinsic
1507 || a.optional || a.pointer || a.save || a.target || a.volatile_
1508 || a.value || a.access != ACCESS_UNKNOWN || a.intent != INTENT_UNKNOWN
1509 || a.asynchronous || a.codimension)
1510 return 1;
1511
1512 return 0;
1513 }
1514
1515
1516 /* Determine if a symbol is generic or not. */
1517
1518 static int
1519 generic_sym (gfc_symbol *sym)
1520 {
1521 gfc_symbol *s;
1522
1523 if (sym->attr.generic ||
1524 (sym->attr.intrinsic && gfc_generic_intrinsic (sym->name)))
1525 return 1;
1526
1527 if (was_declared (sym) || sym->ns->parent == NULL)
1528 return 0;
1529
1530 gfc_find_symbol (sym->name, sym->ns->parent, 1, &s);
1531
1532 if (s != NULL)
1533 {
1534 if (s == sym)
1535 return 0;
1536 else
1537 return generic_sym (s);
1538 }
1539
1540 return 0;
1541 }
1542
1543
1544 /* Determine if a symbol is specific or not. */
1545
1546 static int
1547 specific_sym (gfc_symbol *sym)
1548 {
1549 gfc_symbol *s;
1550
1551 if (sym->attr.if_source == IFSRC_IFBODY
1552 || sym->attr.proc == PROC_MODULE
1553 || sym->attr.proc == PROC_INTERNAL
1554 || sym->attr.proc == PROC_ST_FUNCTION
1555 || (sym->attr.intrinsic && gfc_specific_intrinsic (sym->name))
1556 || sym->attr.external)
1557 return 1;
1558
1559 if (was_declared (sym) || sym->ns->parent == NULL)
1560 return 0;
1561
1562 gfc_find_symbol (sym->name, sym->ns->parent, 1, &s);
1563
1564 return (s == NULL) ? 0 : specific_sym (s);
1565 }
1566
1567
1568 /* Figure out if the procedure is specific, generic or unknown. */
1569
1570 enum proc_type
1571 { PTYPE_GENERIC = 1, PTYPE_SPECIFIC, PTYPE_UNKNOWN };
1572
1573 static proc_type
1574 procedure_kind (gfc_symbol *sym)
1575 {
1576 if (generic_sym (sym))
1577 return PTYPE_GENERIC;
1578
1579 if (specific_sym (sym))
1580 return PTYPE_SPECIFIC;
1581
1582 return PTYPE_UNKNOWN;
1583 }
1584
1585 /* Check references to assumed size arrays. The flag need_full_assumed_size
1586 is nonzero when matching actual arguments. */
1587
1588 static int need_full_assumed_size = 0;
1589
1590 static bool
1591 check_assumed_size_reference (gfc_symbol *sym, gfc_expr *e)
1592 {
1593 if (need_full_assumed_size || !(sym->as && sym->as->type == AS_ASSUMED_SIZE))
1594 return false;
1595
1596 /* FIXME: The comparison "e->ref->u.ar.type == AR_FULL" is wrong.
1597 What should it be? */
1598 if (e->ref && (e->ref->u.ar.end[e->ref->u.ar.as->rank - 1] == NULL)
1599 && (e->ref->u.ar.as->type == AS_ASSUMED_SIZE)
1600 && (e->ref->u.ar.type == AR_FULL))
1601 {
1602 gfc_error ("The upper bound in the last dimension must "
1603 "appear in the reference to the assumed size "
1604 "array %qs at %L", sym->name, &e->where);
1605 return true;
1606 }
1607 return false;
1608 }
1609
1610
1611 /* Look for bad assumed size array references in argument expressions
1612 of elemental and array valued intrinsic procedures. Since this is
1613 called from procedure resolution functions, it only recurses at
1614 operators. */
1615
1616 static bool
1617 resolve_assumed_size_actual (gfc_expr *e)
1618 {
1619 if (e == NULL)
1620 return false;
1621
1622 switch (e->expr_type)
1623 {
1624 case EXPR_VARIABLE:
1625 if (e->symtree && check_assumed_size_reference (e->symtree->n.sym, e))
1626 return true;
1627 break;
1628
1629 case EXPR_OP:
1630 if (resolve_assumed_size_actual (e->value.op.op1)
1631 || resolve_assumed_size_actual (e->value.op.op2))
1632 return true;
1633 break;
1634
1635 default:
1636 break;
1637 }
1638 return false;
1639 }
1640
1641
1642 /* Check a generic procedure, passed as an actual argument, to see if
1643 there is a matching specific name. If none, it is an error, and if
1644 more than one, the reference is ambiguous. */
1645 static int
1646 count_specific_procs (gfc_expr *e)
1647 {
1648 int n;
1649 gfc_interface *p;
1650 gfc_symbol *sym;
1651
1652 n = 0;
1653 sym = e->symtree->n.sym;
1654
1655 for (p = sym->generic; p; p = p->next)
1656 if (strcmp (sym->name, p->sym->name) == 0)
1657 {
1658 e->symtree = gfc_find_symtree (p->sym->ns->sym_root,
1659 sym->name);
1660 n++;
1661 }
1662
1663 if (n > 1)
1664 gfc_error ("%qs at %L is ambiguous", e->symtree->n.sym->name,
1665 &e->where);
1666
1667 if (n == 0)
1668 gfc_error ("GENERIC procedure %qs is not allowed as an actual "
1669 "argument at %L", sym->name, &e->where);
1670
1671 return n;
1672 }
1673
1674
1675 /* See if a call to sym could possibly be a not allowed RECURSION because of
1676 a missing RECURSIVE declaration. This means that either sym is the current
1677 context itself, or sym is the parent of a contained procedure calling its
1678 non-RECURSIVE containing procedure.
1679 This also works if sym is an ENTRY. */
1680
1681 static bool
1682 is_illegal_recursion (gfc_symbol* sym, gfc_namespace* context)
1683 {
1684 gfc_symbol* proc_sym;
1685 gfc_symbol* context_proc;
1686 gfc_namespace* real_context;
1687
1688 if (sym->attr.flavor == FL_PROGRAM
1689 || gfc_fl_struct (sym->attr.flavor))
1690 return false;
1691
1692 /* If we've got an ENTRY, find real procedure. */
1693 if (sym->attr.entry && sym->ns->entries)
1694 proc_sym = sym->ns->entries->sym;
1695 else
1696 proc_sym = sym;
1697
1698 /* If sym is RECURSIVE, all is well of course. */
1699 if (proc_sym->attr.recursive || flag_recursive)
1700 return false;
1701
1702 /* Find the context procedure's "real" symbol if it has entries.
1703 We look for a procedure symbol, so recurse on the parents if we don't
1704 find one (like in case of a BLOCK construct). */
1705 for (real_context = context; ; real_context = real_context->parent)
1706 {
1707 /* We should find something, eventually! */
1708 gcc_assert (real_context);
1709
1710 context_proc = (real_context->entries ? real_context->entries->sym
1711 : real_context->proc_name);
1712
1713 /* In some special cases, there may not be a proc_name, like for this
1714 invalid code:
1715 real(bad_kind()) function foo () ...
1716 when checking the call to bad_kind ().
1717 In these cases, we simply return here and assume that the
1718 call is ok. */
1719 if (!context_proc)
1720 return false;
1721
1722 if (context_proc->attr.flavor != FL_LABEL)
1723 break;
1724 }
1725
1726 /* A call from sym's body to itself is recursion, of course. */
1727 if (context_proc == proc_sym)
1728 return true;
1729
1730 /* The same is true if context is a contained procedure and sym the
1731 containing one. */
1732 if (context_proc->attr.contained)
1733 {
1734 gfc_symbol* parent_proc;
1735
1736 gcc_assert (context->parent);
1737 parent_proc = (context->parent->entries ? context->parent->entries->sym
1738 : context->parent->proc_name);
1739
1740 if (parent_proc == proc_sym)
1741 return true;
1742 }
1743
1744 return false;
1745 }
1746
1747
1748 /* Resolve an intrinsic procedure: Set its function/subroutine attribute,
1749 its typespec and formal argument list. */
1750
1751 bool
1752 gfc_resolve_intrinsic (gfc_symbol *sym, locus *loc)
1753 {
1754 gfc_intrinsic_sym* isym = NULL;
1755 const char* symstd;
1756
1757 if (sym->formal)
1758 return true;
1759
1760 /* Already resolved. */
1761 if (sym->from_intmod && sym->ts.type != BT_UNKNOWN)
1762 return true;
1763
1764 /* We already know this one is an intrinsic, so we don't call
1765 gfc_is_intrinsic for full checking but rather use gfc_find_function and
1766 gfc_find_subroutine directly to check whether it is a function or
1767 subroutine. */
1768
1769 if (sym->intmod_sym_id && sym->attr.subroutine)
1770 {
1771 gfc_isym_id id = gfc_isym_id_by_intmod_sym (sym);
1772 isym = gfc_intrinsic_subroutine_by_id (id);
1773 }
1774 else if (sym->intmod_sym_id)
1775 {
1776 gfc_isym_id id = gfc_isym_id_by_intmod_sym (sym);
1777 isym = gfc_intrinsic_function_by_id (id);
1778 }
1779 else if (!sym->attr.subroutine)
1780 isym = gfc_find_function (sym->name);
1781
1782 if (isym && !sym->attr.subroutine)
1783 {
1784 if (sym->ts.type != BT_UNKNOWN && warn_surprising
1785 && !sym->attr.implicit_type)
1786 gfc_warning (OPT_Wsurprising,
1787 "Type specified for intrinsic function %qs at %L is"
1788 " ignored", sym->name, &sym->declared_at);
1789
1790 if (!sym->attr.function &&
1791 !gfc_add_function(&sym->attr, sym->name, loc))
1792 return false;
1793
1794 sym->ts = isym->ts;
1795 }
1796 else if (isym || (isym = gfc_find_subroutine (sym->name)))
1797 {
1798 if (sym->ts.type != BT_UNKNOWN && !sym->attr.implicit_type)
1799 {
1800 gfc_error ("Intrinsic subroutine %qs at %L shall not have a type"
1801 " specifier", sym->name, &sym->declared_at);
1802 return false;
1803 }
1804
1805 if (!sym->attr.subroutine &&
1806 !gfc_add_subroutine(&sym->attr, sym->name, loc))
1807 return false;
1808 }
1809 else
1810 {
1811 gfc_error ("%qs declared INTRINSIC at %L does not exist", sym->name,
1812 &sym->declared_at);
1813 return false;
1814 }
1815
1816 gfc_copy_formal_args_intr (sym, isym, NULL);
1817
1818 sym->attr.pure = isym->pure;
1819 sym->attr.elemental = isym->elemental;
1820
1821 /* Check it is actually available in the standard settings. */
1822 if (!gfc_check_intrinsic_standard (isym, &symstd, false, sym->declared_at))
1823 {
1824 gfc_error ("The intrinsic %qs declared INTRINSIC at %L is not "
1825 "available in the current standard settings but %s. Use "
1826 "an appropriate %<-std=*%> option or enable "
1827 "%<-fall-intrinsics%> in order to use it.",
1828 sym->name, &sym->declared_at, symstd);
1829 return false;
1830 }
1831
1832 return true;
1833 }
1834
1835
1836 /* Resolve a procedure expression, like passing it to a called procedure or as
1837 RHS for a procedure pointer assignment. */
1838
1839 static bool
1840 resolve_procedure_expression (gfc_expr* expr)
1841 {
1842 gfc_symbol* sym;
1843
1844 if (expr->expr_type != EXPR_VARIABLE)
1845 return true;
1846 gcc_assert (expr->symtree);
1847
1848 sym = expr->symtree->n.sym;
1849
1850 if (sym->attr.intrinsic)
1851 gfc_resolve_intrinsic (sym, &expr->where);
1852
1853 if (sym->attr.flavor != FL_PROCEDURE
1854 || (sym->attr.function && sym->result == sym))
1855 return true;
1856
1857 /* A non-RECURSIVE procedure that is used as procedure expression within its
1858 own body is in danger of being called recursively. */
1859 if (is_illegal_recursion (sym, gfc_current_ns))
1860 gfc_warning (0, "Non-RECURSIVE procedure %qs at %L is possibly calling"
1861 " itself recursively. Declare it RECURSIVE or use"
1862 " %<-frecursive%>", sym->name, &expr->where);
1863
1864 return true;
1865 }
1866
1867
1868 /* Check that name is not a derived type. */
1869
1870 static bool
1871 is_dt_name (const char *name)
1872 {
1873 gfc_symbol *dt_list, *dt_first;
1874
1875 dt_list = dt_first = gfc_derived_types;
1876 for (; dt_list; dt_list = dt_list->dt_next)
1877 {
1878 if (strcmp(dt_list->name, name) == 0)
1879 return true;
1880 if (dt_first == dt_list->dt_next)
1881 break;
1882 }
1883 return false;
1884 }
1885
1886
1887 /* Resolve an actual argument list. Most of the time, this is just
1888 resolving the expressions in the list.
1889 The exception is that we sometimes have to decide whether arguments
1890 that look like procedure arguments are really simple variable
1891 references. */
1892
1893 static bool
1894 resolve_actual_arglist (gfc_actual_arglist *arg, procedure_type ptype,
1895 bool no_formal_args)
1896 {
1897 gfc_symbol *sym;
1898 gfc_symtree *parent_st;
1899 gfc_expr *e;
1900 gfc_component *comp;
1901 int save_need_full_assumed_size;
1902 bool return_value = false;
1903 bool actual_arg_sav = actual_arg, first_actual_arg_sav = first_actual_arg;
1904
1905 actual_arg = true;
1906 first_actual_arg = true;
1907
1908 for (; arg; arg = arg->next)
1909 {
1910 e = arg->expr;
1911 if (e == NULL)
1912 {
1913 /* Check the label is a valid branching target. */
1914 if (arg->label)
1915 {
1916 if (arg->label->defined == ST_LABEL_UNKNOWN)
1917 {
1918 gfc_error ("Label %d referenced at %L is never defined",
1919 arg->label->value, &arg->label->where);
1920 goto cleanup;
1921 }
1922 }
1923 first_actual_arg = false;
1924 continue;
1925 }
1926
1927 if (e->expr_type == EXPR_VARIABLE
1928 && e->symtree->n.sym->attr.generic
1929 && no_formal_args
1930 && count_specific_procs (e) != 1)
1931 goto cleanup;
1932
1933 if (e->ts.type != BT_PROCEDURE)
1934 {
1935 save_need_full_assumed_size = need_full_assumed_size;
1936 if (e->expr_type != EXPR_VARIABLE)
1937 need_full_assumed_size = 0;
1938 if (!gfc_resolve_expr (e))
1939 goto cleanup;
1940 need_full_assumed_size = save_need_full_assumed_size;
1941 goto argument_list;
1942 }
1943
1944 /* See if the expression node should really be a variable reference. */
1945
1946 sym = e->symtree->n.sym;
1947
1948 if (sym->attr.flavor == FL_PROCEDURE && is_dt_name (sym->name))
1949 {
1950 gfc_error ("Derived type %qs is used as an actual "
1951 "argument at %L", sym->name, &e->where);
1952 goto cleanup;
1953 }
1954
1955 if (sym->attr.flavor == FL_PROCEDURE
1956 || sym->attr.intrinsic
1957 || sym->attr.external)
1958 {
1959 int actual_ok;
1960
1961 /* If a procedure is not already determined to be something else
1962 check if it is intrinsic. */
1963 if (gfc_is_intrinsic (sym, sym->attr.subroutine, e->where))
1964 sym->attr.intrinsic = 1;
1965
1966 if (sym->attr.proc == PROC_ST_FUNCTION)
1967 {
1968 gfc_error ("Statement function %qs at %L is not allowed as an "
1969 "actual argument", sym->name, &e->where);
1970 }
1971
1972 actual_ok = gfc_intrinsic_actual_ok (sym->name,
1973 sym->attr.subroutine);
1974 if (sym->attr.intrinsic && actual_ok == 0)
1975 {
1976 gfc_error ("Intrinsic %qs at %L is not allowed as an "
1977 "actual argument", sym->name, &e->where);
1978 }
1979
1980 if (sym->attr.contained && !sym->attr.use_assoc
1981 && sym->ns->proc_name->attr.flavor != FL_MODULE)
1982 {
1983 if (!gfc_notify_std (GFC_STD_F2008, "Internal procedure %qs is"
1984 " used as actual argument at %L",
1985 sym->name, &e->where))
1986 goto cleanup;
1987 }
1988
1989 if (sym->attr.elemental && !sym->attr.intrinsic)
1990 {
1991 gfc_error ("ELEMENTAL non-INTRINSIC procedure %qs is not "
1992 "allowed as an actual argument at %L", sym->name,
1993 &e->where);
1994 }
1995
1996 /* Check if a generic interface has a specific procedure
1997 with the same name before emitting an error. */
1998 if (sym->attr.generic && count_specific_procs (e) != 1)
1999 goto cleanup;
2000
2001 /* Just in case a specific was found for the expression. */
2002 sym = e->symtree->n.sym;
2003
2004 /* If the symbol is the function that names the current (or
2005 parent) scope, then we really have a variable reference. */
2006
2007 if (gfc_is_function_return_value (sym, sym->ns))
2008 goto got_variable;
2009
2010 /* If all else fails, see if we have a specific intrinsic. */
2011 if (sym->ts.type == BT_UNKNOWN && sym->attr.intrinsic)
2012 {
2013 gfc_intrinsic_sym *isym;
2014
2015 isym = gfc_find_function (sym->name);
2016 if (isym == NULL || !isym->specific)
2017 {
2018 gfc_error ("Unable to find a specific INTRINSIC procedure "
2019 "for the reference %qs at %L", sym->name,
2020 &e->where);
2021 goto cleanup;
2022 }
2023 sym->ts = isym->ts;
2024 sym->attr.intrinsic = 1;
2025 sym->attr.function = 1;
2026 }
2027
2028 if (!gfc_resolve_expr (e))
2029 goto cleanup;
2030 goto argument_list;
2031 }
2032
2033 /* See if the name is a module procedure in a parent unit. */
2034
2035 if (was_declared (sym) || sym->ns->parent == NULL)
2036 goto got_variable;
2037
2038 if (gfc_find_sym_tree (sym->name, sym->ns->parent, 1, &parent_st))
2039 {
2040 gfc_error ("Symbol %qs at %L is ambiguous", sym->name, &e->where);
2041 goto cleanup;
2042 }
2043
2044 if (parent_st == NULL)
2045 goto got_variable;
2046
2047 sym = parent_st->n.sym;
2048 e->symtree = parent_st; /* Point to the right thing. */
2049
2050 if (sym->attr.flavor == FL_PROCEDURE
2051 || sym->attr.intrinsic
2052 || sym->attr.external)
2053 {
2054 if (!gfc_resolve_expr (e))
2055 goto cleanup;
2056 goto argument_list;
2057 }
2058
2059 got_variable:
2060 e->expr_type = EXPR_VARIABLE;
2061 e->ts = sym->ts;
2062 if ((sym->as != NULL && sym->ts.type != BT_CLASS)
2063 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
2064 && CLASS_DATA (sym)->as))
2065 {
2066 e->rank = sym->ts.type == BT_CLASS
2067 ? CLASS_DATA (sym)->as->rank : sym->as->rank;
2068 e->ref = gfc_get_ref ();
2069 e->ref->type = REF_ARRAY;
2070 e->ref->u.ar.type = AR_FULL;
2071 e->ref->u.ar.as = sym->ts.type == BT_CLASS
2072 ? CLASS_DATA (sym)->as : sym->as;
2073 }
2074
2075 /* Expressions are assigned a default ts.type of BT_PROCEDURE in
2076 primary.c (match_actual_arg). If above code determines that it
2077 is a variable instead, it needs to be resolved as it was not
2078 done at the beginning of this function. */
2079 save_need_full_assumed_size = need_full_assumed_size;
2080 if (e->expr_type != EXPR_VARIABLE)
2081 need_full_assumed_size = 0;
2082 if (!gfc_resolve_expr (e))
2083 goto cleanup;
2084 need_full_assumed_size = save_need_full_assumed_size;
2085
2086 argument_list:
2087 /* Check argument list functions %VAL, %LOC and %REF. There is
2088 nothing to do for %REF. */
2089 if (arg->name && arg->name[0] == '%')
2090 {
2091 if (strcmp ("%VAL", arg->name) == 0)
2092 {
2093 if (e->ts.type == BT_CHARACTER || e->ts.type == BT_DERIVED)
2094 {
2095 gfc_error ("By-value argument at %L is not of numeric "
2096 "type", &e->where);
2097 goto cleanup;
2098 }
2099
2100 if (e->rank)
2101 {
2102 gfc_error ("By-value argument at %L cannot be an array or "
2103 "an array section", &e->where);
2104 goto cleanup;
2105 }
2106
2107 /* Intrinsics are still PROC_UNKNOWN here. However,
2108 since same file external procedures are not resolvable
2109 in gfortran, it is a good deal easier to leave them to
2110 intrinsic.c. */
2111 if (ptype != PROC_UNKNOWN
2112 && ptype != PROC_DUMMY
2113 && ptype != PROC_EXTERNAL
2114 && ptype != PROC_MODULE)
2115 {
2116 gfc_error ("By-value argument at %L is not allowed "
2117 "in this context", &e->where);
2118 goto cleanup;
2119 }
2120 }
2121
2122 /* Statement functions have already been excluded above. */
2123 else if (strcmp ("%LOC", arg->name) == 0
2124 && e->ts.type == BT_PROCEDURE)
2125 {
2126 if (e->symtree->n.sym->attr.proc == PROC_INTERNAL)
2127 {
2128 gfc_error ("Passing internal procedure at %L by location "
2129 "not allowed", &e->where);
2130 goto cleanup;
2131 }
2132 }
2133 }
2134
2135 comp = gfc_get_proc_ptr_comp(e);
2136 if (e->expr_type == EXPR_VARIABLE
2137 && comp && comp->attr.elemental)
2138 {
2139 gfc_error ("ELEMENTAL procedure pointer component %qs is not "
2140 "allowed as an actual argument at %L", comp->name,
2141 &e->where);
2142 }
2143
2144 /* Fortran 2008, C1237. */
2145 if (e->expr_type == EXPR_VARIABLE && gfc_is_coindexed (e)
2146 && gfc_has_ultimate_pointer (e))
2147 {
2148 gfc_error ("Coindexed actual argument at %L with ultimate pointer "
2149 "component", &e->where);
2150 goto cleanup;
2151 }
2152
2153 first_actual_arg = false;
2154 }
2155
2156 return_value = true;
2157
2158 cleanup:
2159 actual_arg = actual_arg_sav;
2160 first_actual_arg = first_actual_arg_sav;
2161
2162 return return_value;
2163 }
2164
2165
2166 /* Do the checks of the actual argument list that are specific to elemental
2167 procedures. If called with c == NULL, we have a function, otherwise if
2168 expr == NULL, we have a subroutine. */
2169
2170 static bool
2171 resolve_elemental_actual (gfc_expr *expr, gfc_code *c)
2172 {
2173 gfc_actual_arglist *arg0;
2174 gfc_actual_arglist *arg;
2175 gfc_symbol *esym = NULL;
2176 gfc_intrinsic_sym *isym = NULL;
2177 gfc_expr *e = NULL;
2178 gfc_intrinsic_arg *iformal = NULL;
2179 gfc_formal_arglist *eformal = NULL;
2180 bool formal_optional = false;
2181 bool set_by_optional = false;
2182 int i;
2183 int rank = 0;
2184
2185 /* Is this an elemental procedure? */
2186 if (expr && expr->value.function.actual != NULL)
2187 {
2188 if (expr->value.function.esym != NULL
2189 && expr->value.function.esym->attr.elemental)
2190 {
2191 arg0 = expr->value.function.actual;
2192 esym = expr->value.function.esym;
2193 }
2194 else if (expr->value.function.isym != NULL
2195 && expr->value.function.isym->elemental)
2196 {
2197 arg0 = expr->value.function.actual;
2198 isym = expr->value.function.isym;
2199 }
2200 else
2201 return true;
2202 }
2203 else if (c && c->ext.actual != NULL)
2204 {
2205 arg0 = c->ext.actual;
2206
2207 if (c->resolved_sym)
2208 esym = c->resolved_sym;
2209 else
2210 esym = c->symtree->n.sym;
2211 gcc_assert (esym);
2212
2213 if (!esym->attr.elemental)
2214 return true;
2215 }
2216 else
2217 return true;
2218
2219 /* The rank of an elemental is the rank of its array argument(s). */
2220 for (arg = arg0; arg; arg = arg->next)
2221 {
2222 if (arg->expr != NULL && arg->expr->rank != 0)
2223 {
2224 rank = arg->expr->rank;
2225 if (arg->expr->expr_type == EXPR_VARIABLE
2226 && arg->expr->symtree->n.sym->attr.optional)
2227 set_by_optional = true;
2228
2229 /* Function specific; set the result rank and shape. */
2230 if (expr)
2231 {
2232 expr->rank = rank;
2233 if (!expr->shape && arg->expr->shape)
2234 {
2235 expr->shape = gfc_get_shape (rank);
2236 for (i = 0; i < rank; i++)
2237 mpz_init_set (expr->shape[i], arg->expr->shape[i]);
2238 }
2239 }
2240 break;
2241 }
2242 }
2243
2244 /* If it is an array, it shall not be supplied as an actual argument
2245 to an elemental procedure unless an array of the same rank is supplied
2246 as an actual argument corresponding to a nonoptional dummy argument of
2247 that elemental procedure(12.4.1.5). */
2248 formal_optional = false;
2249 if (isym)
2250 iformal = isym->formal;
2251 else
2252 eformal = esym->formal;
2253
2254 for (arg = arg0; arg; arg = arg->next)
2255 {
2256 if (eformal)
2257 {
2258 if (eformal->sym && eformal->sym->attr.optional)
2259 formal_optional = true;
2260 eformal = eformal->next;
2261 }
2262 else if (isym && iformal)
2263 {
2264 if (iformal->optional)
2265 formal_optional = true;
2266 iformal = iformal->next;
2267 }
2268 else if (isym)
2269 formal_optional = true;
2270
2271 if (pedantic && arg->expr != NULL
2272 && arg->expr->expr_type == EXPR_VARIABLE
2273 && arg->expr->symtree->n.sym->attr.optional
2274 && formal_optional
2275 && arg->expr->rank
2276 && (set_by_optional || arg->expr->rank != rank)
2277 && !(isym && isym->id == GFC_ISYM_CONVERSION))
2278 {
2279 gfc_warning (OPT_Wpedantic,
2280 "%qs at %L is an array and OPTIONAL; IF IT IS "
2281 "MISSING, it cannot be the actual argument of an "
2282 "ELEMENTAL procedure unless there is a non-optional "
2283 "argument with the same rank (12.4.1.5)",
2284 arg->expr->symtree->n.sym->name, &arg->expr->where);
2285 }
2286 }
2287
2288 for (arg = arg0; arg; arg = arg->next)
2289 {
2290 if (arg->expr == NULL || arg->expr->rank == 0)
2291 continue;
2292
2293 /* Being elemental, the last upper bound of an assumed size array
2294 argument must be present. */
2295 if (resolve_assumed_size_actual (arg->expr))
2296 return false;
2297
2298 /* Elemental procedure's array actual arguments must conform. */
2299 if (e != NULL)
2300 {
2301 if (!gfc_check_conformance (arg->expr, e, "elemental procedure"))
2302 return false;
2303 }
2304 else
2305 e = arg->expr;
2306 }
2307
2308 /* INTENT(OUT) is only allowed for subroutines; if any actual argument
2309 is an array, the intent inout/out variable needs to be also an array. */
2310 if (rank > 0 && esym && expr == NULL)
2311 for (eformal = esym->formal, arg = arg0; arg && eformal;
2312 arg = arg->next, eformal = eformal->next)
2313 if ((eformal->sym->attr.intent == INTENT_OUT
2314 || eformal->sym->attr.intent == INTENT_INOUT)
2315 && arg->expr && arg->expr->rank == 0)
2316 {
2317 gfc_error ("Actual argument at %L for INTENT(%s) dummy %qs of "
2318 "ELEMENTAL subroutine %qs is a scalar, but another "
2319 "actual argument is an array", &arg->expr->where,
2320 (eformal->sym->attr.intent == INTENT_OUT) ? "OUT"
2321 : "INOUT", eformal->sym->name, esym->name);
2322 return false;
2323 }
2324 return true;
2325 }
2326
2327
2328 /* This function does the checking of references to global procedures
2329 as defined in sections 18.1 and 14.1, respectively, of the Fortran
2330 77 and 95 standards. It checks for a gsymbol for the name, making
2331 one if it does not already exist. If it already exists, then the
2332 reference being resolved must correspond to the type of gsymbol.
2333 Otherwise, the new symbol is equipped with the attributes of the
2334 reference. The corresponding code that is called in creating
2335 global entities is parse.c.
2336
2337 In addition, for all but -std=legacy, the gsymbols are used to
2338 check the interfaces of external procedures from the same file.
2339 The namespace of the gsymbol is resolved and then, once this is
2340 done the interface is checked. */
2341
2342
2343 static bool
2344 not_in_recursive (gfc_symbol *sym, gfc_namespace *gsym_ns)
2345 {
2346 if (!gsym_ns->proc_name->attr.recursive)
2347 return true;
2348
2349 if (sym->ns == gsym_ns)
2350 return false;
2351
2352 if (sym->ns->parent && sym->ns->parent == gsym_ns)
2353 return false;
2354
2355 return true;
2356 }
2357
2358 static bool
2359 not_entry_self_reference (gfc_symbol *sym, gfc_namespace *gsym_ns)
2360 {
2361 if (gsym_ns->entries)
2362 {
2363 gfc_entry_list *entry = gsym_ns->entries;
2364
2365 for (; entry; entry = entry->next)
2366 {
2367 if (strcmp (sym->name, entry->sym->name) == 0)
2368 {
2369 if (strcmp (gsym_ns->proc_name->name,
2370 sym->ns->proc_name->name) == 0)
2371 return false;
2372
2373 if (sym->ns->parent
2374 && strcmp (gsym_ns->proc_name->name,
2375 sym->ns->parent->proc_name->name) == 0)
2376 return false;
2377 }
2378 }
2379 }
2380 return true;
2381 }
2382
2383
2384 /* Check for the requirement of an explicit interface. F08:12.4.2.2. */
2385
2386 bool
2387 gfc_explicit_interface_required (gfc_symbol *sym, char *errmsg, int err_len)
2388 {
2389 gfc_formal_arglist *arg = gfc_sym_get_dummy_args (sym);
2390
2391 for ( ; arg; arg = arg->next)
2392 {
2393 if (!arg->sym)
2394 continue;
2395
2396 if (arg->sym->attr.allocatable) /* (2a) */
2397 {
2398 strncpy (errmsg, _("allocatable argument"), err_len);
2399 return true;
2400 }
2401 else if (arg->sym->attr.asynchronous)
2402 {
2403 strncpy (errmsg, _("asynchronous argument"), err_len);
2404 return true;
2405 }
2406 else if (arg->sym->attr.optional)
2407 {
2408 strncpy (errmsg, _("optional argument"), err_len);
2409 return true;
2410 }
2411 else if (arg->sym->attr.pointer)
2412 {
2413 strncpy (errmsg, _("pointer argument"), err_len);
2414 return true;
2415 }
2416 else if (arg->sym->attr.target)
2417 {
2418 strncpy (errmsg, _("target argument"), err_len);
2419 return true;
2420 }
2421 else if (arg->sym->attr.value)
2422 {
2423 strncpy (errmsg, _("value argument"), err_len);
2424 return true;
2425 }
2426 else if (arg->sym->attr.volatile_)
2427 {
2428 strncpy (errmsg, _("volatile argument"), err_len);
2429 return true;
2430 }
2431 else if (arg->sym->as && arg->sym->as->type == AS_ASSUMED_SHAPE) /* (2b) */
2432 {
2433 strncpy (errmsg, _("assumed-shape argument"), err_len);
2434 return true;
2435 }
2436 else if (arg->sym->as && arg->sym->as->type == AS_ASSUMED_RANK) /* TS 29113, 6.2. */
2437 {
2438 strncpy (errmsg, _("assumed-rank argument"), err_len);
2439 return true;
2440 }
2441 else if (arg->sym->attr.codimension) /* (2c) */
2442 {
2443 strncpy (errmsg, _("coarray argument"), err_len);
2444 return true;
2445 }
2446 else if (false) /* (2d) TODO: parametrized derived type */
2447 {
2448 strncpy (errmsg, _("parametrized derived type argument"), err_len);
2449 return true;
2450 }
2451 else if (arg->sym->ts.type == BT_CLASS) /* (2e) */
2452 {
2453 strncpy (errmsg, _("polymorphic argument"), err_len);
2454 return true;
2455 }
2456 else if (arg->sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
2457 {
2458 strncpy (errmsg, _("NO_ARG_CHECK attribute"), err_len);
2459 return true;
2460 }
2461 else if (arg->sym->ts.type == BT_ASSUMED)
2462 {
2463 /* As assumed-type is unlimited polymorphic (cf. above).
2464 See also TS 29113, Note 6.1. */
2465 strncpy (errmsg, _("assumed-type argument"), err_len);
2466 return true;
2467 }
2468 }
2469
2470 if (sym->attr.function)
2471 {
2472 gfc_symbol *res = sym->result ? sym->result : sym;
2473
2474 if (res->attr.dimension) /* (3a) */
2475 {
2476 strncpy (errmsg, _("array result"), err_len);
2477 return true;
2478 }
2479 else if (res->attr.pointer || res->attr.allocatable) /* (3b) */
2480 {
2481 strncpy (errmsg, _("pointer or allocatable result"), err_len);
2482 return true;
2483 }
2484 else if (res->ts.type == BT_CHARACTER && res->ts.u.cl
2485 && res->ts.u.cl->length
2486 && res->ts.u.cl->length->expr_type != EXPR_CONSTANT) /* (3c) */
2487 {
2488 strncpy (errmsg, _("result with non-constant character length"), err_len);
2489 return true;
2490 }
2491 }
2492
2493 if (sym->attr.elemental && !sym->attr.intrinsic) /* (4) */
2494 {
2495 strncpy (errmsg, _("elemental procedure"), err_len);
2496 return true;
2497 }
2498 else if (sym->attr.is_bind_c) /* (5) */
2499 {
2500 strncpy (errmsg, _("bind(c) procedure"), err_len);
2501 return true;
2502 }
2503
2504 return false;
2505 }
2506
2507
2508 static void
2509 resolve_global_procedure (gfc_symbol *sym, locus *where,
2510 gfc_actual_arglist **actual, int sub)
2511 {
2512 gfc_gsymbol * gsym;
2513 gfc_namespace *ns;
2514 enum gfc_symbol_type type;
2515 char reason[200];
2516
2517 type = sub ? GSYM_SUBROUTINE : GSYM_FUNCTION;
2518
2519 gsym = gfc_get_gsymbol (sym->binding_label ? sym->binding_label : sym->name,
2520 sym->binding_label != NULL);
2521
2522 if ((gsym->type != GSYM_UNKNOWN && gsym->type != type))
2523 gfc_global_used (gsym, where);
2524
2525 if ((sym->attr.if_source == IFSRC_UNKNOWN
2526 || sym->attr.if_source == IFSRC_IFBODY)
2527 && gsym->type != GSYM_UNKNOWN
2528 && !gsym->binding_label
2529 && gsym->ns
2530 && gsym->ns->proc_name
2531 && not_in_recursive (sym, gsym->ns)
2532 && not_entry_self_reference (sym, gsym->ns))
2533 {
2534 gfc_symbol *def_sym;
2535 def_sym = gsym->ns->proc_name;
2536
2537 if (gsym->ns->resolved != -1)
2538 {
2539
2540 /* Resolve the gsymbol namespace if needed. */
2541 if (!gsym->ns->resolved)
2542 {
2543 gfc_symbol *old_dt_list;
2544
2545 /* Stash away derived types so that the backend_decls
2546 do not get mixed up. */
2547 old_dt_list = gfc_derived_types;
2548 gfc_derived_types = NULL;
2549
2550 gfc_resolve (gsym->ns);
2551
2552 /* Store the new derived types with the global namespace. */
2553 if (gfc_derived_types)
2554 gsym->ns->derived_types = gfc_derived_types;
2555
2556 /* Restore the derived types of this namespace. */
2557 gfc_derived_types = old_dt_list;
2558 }
2559
2560 /* Make sure that translation for the gsymbol occurs before
2561 the procedure currently being resolved. */
2562 ns = gfc_global_ns_list;
2563 for (; ns && ns != gsym->ns; ns = ns->sibling)
2564 {
2565 if (ns->sibling == gsym->ns)
2566 {
2567 ns->sibling = gsym->ns->sibling;
2568 gsym->ns->sibling = gfc_global_ns_list;
2569 gfc_global_ns_list = gsym->ns;
2570 break;
2571 }
2572 }
2573
2574 /* This can happen if a binding name has been specified. */
2575 if (gsym->binding_label && gsym->sym_name != def_sym->name)
2576 gfc_find_symbol (gsym->sym_name, gsym->ns, 0, &def_sym);
2577
2578 if (def_sym->attr.entry_master || def_sym->attr.entry)
2579 {
2580 gfc_entry_list *entry;
2581 for (entry = gsym->ns->entries; entry; entry = entry->next)
2582 if (strcmp (entry->sym->name, sym->name) == 0)
2583 {
2584 def_sym = entry->sym;
2585 break;
2586 }
2587 }
2588 }
2589
2590 if (sym->attr.function && !gfc_compare_types (&sym->ts, &def_sym->ts))
2591 {
2592 gfc_error ("Return type mismatch of function %qs at %L (%s/%s)",
2593 sym->name, &sym->declared_at, gfc_typename (&sym->ts),
2594 gfc_typename (&def_sym->ts));
2595 goto done;
2596 }
2597
2598 if (sym->attr.if_source == IFSRC_UNKNOWN
2599 && gfc_explicit_interface_required (def_sym, reason, sizeof(reason)))
2600 {
2601 gfc_error ("Explicit interface required for %qs at %L: %s",
2602 sym->name, &sym->declared_at, reason);
2603 goto done;
2604 }
2605
2606 if (!pedantic && (gfc_option.allow_std & GFC_STD_GNU))
2607 /* Turn erros into warnings with -std=gnu and -std=legacy. */
2608 gfc_errors_to_warnings (true);
2609
2610 if (!gfc_compare_interfaces (sym, def_sym, sym->name, 0, 1,
2611 reason, sizeof(reason), NULL, NULL))
2612 {
2613 gfc_error_opt (OPT_Wargument_mismatch,
2614 "Interface mismatch in global procedure %qs at %L:"
2615 " %s", sym->name, &sym->declared_at, reason);
2616 goto done;
2617 }
2618
2619 if (!pedantic
2620 || ((gfc_option.warn_std & GFC_STD_LEGACY)
2621 && !(gfc_option.warn_std & GFC_STD_GNU)))
2622 gfc_errors_to_warnings (true);
2623
2624 if (sym->attr.if_source != IFSRC_IFBODY)
2625 gfc_procedure_use (def_sym, actual, where);
2626 }
2627
2628 done:
2629 gfc_errors_to_warnings (false);
2630
2631 if (gsym->type == GSYM_UNKNOWN)
2632 {
2633 gsym->type = type;
2634 gsym->where = *where;
2635 }
2636
2637 gsym->used = 1;
2638 }
2639
2640
2641 /************* Function resolution *************/
2642
2643 /* Resolve a function call known to be generic.
2644 Section 14.1.2.4.1. */
2645
2646 static match
2647 resolve_generic_f0 (gfc_expr *expr, gfc_symbol *sym)
2648 {
2649 gfc_symbol *s;
2650
2651 if (sym->attr.generic)
2652 {
2653 s = gfc_search_interface (sym->generic, 0, &expr->value.function.actual);
2654 if (s != NULL)
2655 {
2656 expr->value.function.name = s->name;
2657 expr->value.function.esym = s;
2658
2659 if (s->ts.type != BT_UNKNOWN)
2660 expr->ts = s->ts;
2661 else if (s->result != NULL && s->result->ts.type != BT_UNKNOWN)
2662 expr->ts = s->result->ts;
2663
2664 if (s->as != NULL)
2665 expr->rank = s->as->rank;
2666 else if (s->result != NULL && s->result->as != NULL)
2667 expr->rank = s->result->as->rank;
2668
2669 gfc_set_sym_referenced (expr->value.function.esym);
2670
2671 return MATCH_YES;
2672 }
2673
2674 /* TODO: Need to search for elemental references in generic
2675 interface. */
2676 }
2677
2678 if (sym->attr.intrinsic)
2679 return gfc_intrinsic_func_interface (expr, 0);
2680
2681 return MATCH_NO;
2682 }
2683
2684
2685 static bool
2686 resolve_generic_f (gfc_expr *expr)
2687 {
2688 gfc_symbol *sym;
2689 match m;
2690 gfc_interface *intr = NULL;
2691
2692 sym = expr->symtree->n.sym;
2693
2694 for (;;)
2695 {
2696 m = resolve_generic_f0 (expr, sym);
2697 if (m == MATCH_YES)
2698 return true;
2699 else if (m == MATCH_ERROR)
2700 return false;
2701
2702 generic:
2703 if (!intr)
2704 for (intr = sym->generic; intr; intr = intr->next)
2705 if (gfc_fl_struct (intr->sym->attr.flavor))
2706 break;
2707
2708 if (sym->ns->parent == NULL)
2709 break;
2710 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
2711
2712 if (sym == NULL)
2713 break;
2714 if (!generic_sym (sym))
2715 goto generic;
2716 }
2717
2718 /* Last ditch attempt. See if the reference is to an intrinsic
2719 that possesses a matching interface. 14.1.2.4 */
2720 if (sym && !intr && !gfc_is_intrinsic (sym, 0, expr->where))
2721 {
2722 if (gfc_init_expr_flag)
2723 gfc_error ("Function %qs in initialization expression at %L "
2724 "must be an intrinsic function",
2725 expr->symtree->n.sym->name, &expr->where);
2726 else
2727 gfc_error ("There is no specific function for the generic %qs "
2728 "at %L", expr->symtree->n.sym->name, &expr->where);
2729 return false;
2730 }
2731
2732 if (intr)
2733 {
2734 if (!gfc_convert_to_structure_constructor (expr, intr->sym, NULL,
2735 NULL, false))
2736 return false;
2737 if (!gfc_use_derived (expr->ts.u.derived))
2738 return false;
2739 return resolve_structure_cons (expr, 0);
2740 }
2741
2742 m = gfc_intrinsic_func_interface (expr, 0);
2743 if (m == MATCH_YES)
2744 return true;
2745
2746 if (m == MATCH_NO)
2747 gfc_error ("Generic function %qs at %L is not consistent with a "
2748 "specific intrinsic interface", expr->symtree->n.sym->name,
2749 &expr->where);
2750
2751 return false;
2752 }
2753
2754
2755 /* Resolve a function call known to be specific. */
2756
2757 static match
2758 resolve_specific_f0 (gfc_symbol *sym, gfc_expr *expr)
2759 {
2760 match m;
2761
2762 if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
2763 {
2764 if (sym->attr.dummy)
2765 {
2766 sym->attr.proc = PROC_DUMMY;
2767 goto found;
2768 }
2769
2770 sym->attr.proc = PROC_EXTERNAL;
2771 goto found;
2772 }
2773
2774 if (sym->attr.proc == PROC_MODULE
2775 || sym->attr.proc == PROC_ST_FUNCTION
2776 || sym->attr.proc == PROC_INTERNAL)
2777 goto found;
2778
2779 if (sym->attr.intrinsic)
2780 {
2781 m = gfc_intrinsic_func_interface (expr, 1);
2782 if (m == MATCH_YES)
2783 return MATCH_YES;
2784 if (m == MATCH_NO)
2785 gfc_error ("Function %qs at %L is INTRINSIC but is not compatible "
2786 "with an intrinsic", sym->name, &expr->where);
2787
2788 return MATCH_ERROR;
2789 }
2790
2791 return MATCH_NO;
2792
2793 found:
2794 gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
2795
2796 if (sym->result)
2797 expr->ts = sym->result->ts;
2798 else
2799 expr->ts = sym->ts;
2800 expr->value.function.name = sym->name;
2801 expr->value.function.esym = sym;
2802 /* Prevent crash when sym->ts.u.derived->components is not set due to previous
2803 error(s). */
2804 if (sym->ts.type == BT_CLASS && !CLASS_DATA (sym))
2805 return MATCH_ERROR;
2806 if (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as)
2807 expr->rank = CLASS_DATA (sym)->as->rank;
2808 else if (sym->as != NULL)
2809 expr->rank = sym->as->rank;
2810
2811 return MATCH_YES;
2812 }
2813
2814
2815 static bool
2816 resolve_specific_f (gfc_expr *expr)
2817 {
2818 gfc_symbol *sym;
2819 match m;
2820
2821 sym = expr->symtree->n.sym;
2822
2823 for (;;)
2824 {
2825 m = resolve_specific_f0 (sym, expr);
2826 if (m == MATCH_YES)
2827 return true;
2828 if (m == MATCH_ERROR)
2829 return false;
2830
2831 if (sym->ns->parent == NULL)
2832 break;
2833
2834 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
2835
2836 if (sym == NULL)
2837 break;
2838 }
2839
2840 gfc_error ("Unable to resolve the specific function %qs at %L",
2841 expr->symtree->n.sym->name, &expr->where);
2842
2843 return true;
2844 }
2845
2846 /* Recursively append candidate SYM to CANDIDATES. Store the number of
2847 candidates in CANDIDATES_LEN. */
2848
2849 static void
2850 lookup_function_fuzzy_find_candidates (gfc_symtree *sym,
2851 char **&candidates,
2852 size_t &candidates_len)
2853 {
2854 gfc_symtree *p;
2855
2856 if (sym == NULL)
2857 return;
2858 if ((sym->n.sym->ts.type != BT_UNKNOWN || sym->n.sym->attr.external)
2859 && sym->n.sym->attr.flavor == FL_PROCEDURE)
2860 vec_push (candidates, candidates_len, sym->name);
2861
2862 p = sym->left;
2863 if (p)
2864 lookup_function_fuzzy_find_candidates (p, candidates, candidates_len);
2865
2866 p = sym->right;
2867 if (p)
2868 lookup_function_fuzzy_find_candidates (p, candidates, candidates_len);
2869 }
2870
2871
2872 /* Lookup function FN fuzzily, taking names in SYMROOT into account. */
2873
2874 const char*
2875 gfc_lookup_function_fuzzy (const char *fn, gfc_symtree *symroot)
2876 {
2877 char **candidates = NULL;
2878 size_t candidates_len = 0;
2879 lookup_function_fuzzy_find_candidates (symroot, candidates, candidates_len);
2880 return gfc_closest_fuzzy_match (fn, candidates);
2881 }
2882
2883
2884 /* Resolve a procedure call not known to be generic nor specific. */
2885
2886 static bool
2887 resolve_unknown_f (gfc_expr *expr)
2888 {
2889 gfc_symbol *sym;
2890 gfc_typespec *ts;
2891
2892 sym = expr->symtree->n.sym;
2893
2894 if (sym->attr.dummy)
2895 {
2896 sym->attr.proc = PROC_DUMMY;
2897 expr->value.function.name = sym->name;
2898 goto set_type;
2899 }
2900
2901 /* See if we have an intrinsic function reference. */
2902
2903 if (gfc_is_intrinsic (sym, 0, expr->where))
2904 {
2905 if (gfc_intrinsic_func_interface (expr, 1) == MATCH_YES)
2906 return true;
2907 return false;
2908 }
2909
2910 /* The reference is to an external name. */
2911
2912 sym->attr.proc = PROC_EXTERNAL;
2913 expr->value.function.name = sym->name;
2914 expr->value.function.esym = expr->symtree->n.sym;
2915
2916 if (sym->as != NULL)
2917 expr->rank = sym->as->rank;
2918
2919 /* Type of the expression is either the type of the symbol or the
2920 default type of the symbol. */
2921
2922 set_type:
2923 gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
2924
2925 if (sym->ts.type != BT_UNKNOWN)
2926 expr->ts = sym->ts;
2927 else
2928 {
2929 ts = gfc_get_default_type (sym->name, sym->ns);
2930
2931 if (ts->type == BT_UNKNOWN)
2932 {
2933 const char *guessed
2934 = gfc_lookup_function_fuzzy (sym->name, sym->ns->sym_root);
2935 if (guessed)
2936 gfc_error ("Function %qs at %L has no IMPLICIT type"
2937 "; did you mean %qs?",
2938 sym->name, &expr->where, guessed);
2939 else
2940 gfc_error ("Function %qs at %L has no IMPLICIT type",
2941 sym->name, &expr->where);
2942 return false;
2943 }
2944 else
2945 expr->ts = *ts;
2946 }
2947
2948 return true;
2949 }
2950
2951
2952 /* Return true, if the symbol is an external procedure. */
2953 static bool
2954 is_external_proc (gfc_symbol *sym)
2955 {
2956 if (!sym->attr.dummy && !sym->attr.contained
2957 && !gfc_is_intrinsic (sym, sym->attr.subroutine, sym->declared_at)
2958 && sym->attr.proc != PROC_ST_FUNCTION
2959 && !sym->attr.proc_pointer
2960 && !sym->attr.use_assoc
2961 && sym->name)
2962 return true;
2963
2964 return false;
2965 }
2966
2967
2968 /* Figure out if a function reference is pure or not. Also set the name
2969 of the function for a potential error message. Return nonzero if the
2970 function is PURE, zero if not. */
2971 static int
2972 pure_stmt_function (gfc_expr *, gfc_symbol *);
2973
2974 int
2975 gfc_pure_function (gfc_expr *e, const char **name)
2976 {
2977 int pure;
2978 gfc_component *comp;
2979
2980 *name = NULL;
2981
2982 if (e->symtree != NULL
2983 && e->symtree->n.sym != NULL
2984 && e->symtree->n.sym->attr.proc == PROC_ST_FUNCTION)
2985 return pure_stmt_function (e, e->symtree->n.sym);
2986
2987 comp = gfc_get_proc_ptr_comp (e);
2988 if (comp)
2989 {
2990 pure = gfc_pure (comp->ts.interface);
2991 *name = comp->name;
2992 }
2993 else if (e->value.function.esym)
2994 {
2995 pure = gfc_pure (e->value.function.esym);
2996 *name = e->value.function.esym->name;
2997 }
2998 else if (e->value.function.isym)
2999 {
3000 pure = e->value.function.isym->pure
3001 || e->value.function.isym->elemental;
3002 *name = e->value.function.isym->name;
3003 }
3004 else
3005 {
3006 /* Implicit functions are not pure. */
3007 pure = 0;
3008 *name = e->value.function.name;
3009 }
3010
3011 return pure;
3012 }
3013
3014
3015 /* Check if the expression is a reference to an implicitly pure function. */
3016
3017 int
3018 gfc_implicit_pure_function (gfc_expr *e)
3019 {
3020 gfc_component *comp = gfc_get_proc_ptr_comp (e);
3021 if (comp)
3022 return gfc_implicit_pure (comp->ts.interface);
3023 else if (e->value.function.esym)
3024 return gfc_implicit_pure (e->value.function.esym);
3025 else
3026 return 0;
3027 }
3028
3029
3030 static bool
3031 impure_stmt_fcn (gfc_expr *e, gfc_symbol *sym,
3032 int *f ATTRIBUTE_UNUSED)
3033 {
3034 const char *name;
3035
3036 /* Don't bother recursing into other statement functions
3037 since they will be checked individually for purity. */
3038 if (e->expr_type != EXPR_FUNCTION
3039 || !e->symtree
3040 || e->symtree->n.sym == sym
3041 || e->symtree->n.sym->attr.proc == PROC_ST_FUNCTION)
3042 return false;
3043
3044 return gfc_pure_function (e, &name) ? false : true;
3045 }
3046
3047
3048 static int
3049 pure_stmt_function (gfc_expr *e, gfc_symbol *sym)
3050 {
3051 return gfc_traverse_expr (e, sym, impure_stmt_fcn, 0) ? 0 : 1;
3052 }
3053
3054
3055 /* Check if an impure function is allowed in the current context. */
3056
3057 static bool check_pure_function (gfc_expr *e)
3058 {
3059 const char *name = NULL;
3060 if (!gfc_pure_function (e, &name) && name)
3061 {
3062 if (forall_flag)
3063 {
3064 gfc_error ("Reference to impure function %qs at %L inside a "
3065 "FORALL %s", name, &e->where,
3066 forall_flag == 2 ? "mask" : "block");
3067 return false;
3068 }
3069 else if (gfc_do_concurrent_flag)
3070 {
3071 gfc_error ("Reference to impure function %qs at %L inside a "
3072 "DO CONCURRENT %s", name, &e->where,
3073 gfc_do_concurrent_flag == 2 ? "mask" : "block");
3074 return false;
3075 }
3076 else if (gfc_pure (NULL))
3077 {
3078 gfc_error ("Reference to impure function %qs at %L "
3079 "within a PURE procedure", name, &e->where);
3080 return false;
3081 }
3082 if (!gfc_implicit_pure_function (e))
3083 gfc_unset_implicit_pure (NULL);
3084 }
3085 return true;
3086 }
3087
3088
3089 /* Update current procedure's array_outer_dependency flag, considering
3090 a call to procedure SYM. */
3091
3092 static void
3093 update_current_proc_array_outer_dependency (gfc_symbol *sym)
3094 {
3095 /* Check to see if this is a sibling function that has not yet
3096 been resolved. */
3097 gfc_namespace *sibling = gfc_current_ns->sibling;
3098 for (; sibling; sibling = sibling->sibling)
3099 {
3100 if (sibling->proc_name == sym)
3101 {
3102 gfc_resolve (sibling);
3103 break;
3104 }
3105 }
3106
3107 /* If SYM has references to outer arrays, so has the procedure calling
3108 SYM. If SYM is a procedure pointer, we can assume the worst. */
3109 if ((sym->attr.array_outer_dependency || sym->attr.proc_pointer)
3110 && gfc_current_ns->proc_name)
3111 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
3112 }
3113
3114
3115 /* Resolve a function call, which means resolving the arguments, then figuring
3116 out which entity the name refers to. */
3117
3118 static bool
3119 resolve_function (gfc_expr *expr)
3120 {
3121 gfc_actual_arglist *arg;
3122 gfc_symbol *sym;
3123 bool t;
3124 int temp;
3125 procedure_type p = PROC_INTRINSIC;
3126 bool no_formal_args;
3127
3128 sym = NULL;
3129 if (expr->symtree)
3130 sym = expr->symtree->n.sym;
3131
3132 /* If this is a procedure pointer component, it has already been resolved. */
3133 if (gfc_is_proc_ptr_comp (expr))
3134 return true;
3135
3136 /* Avoid re-resolving the arguments of caf_get, which can lead to inserting
3137 another caf_get. */
3138 if (sym && sym->attr.intrinsic
3139 && (sym->intmod_sym_id == GFC_ISYM_CAF_GET
3140 || sym->intmod_sym_id == GFC_ISYM_CAF_SEND))
3141 return true;
3142
3143 if (sym && sym->attr.intrinsic
3144 && !gfc_resolve_intrinsic (sym, &expr->where))
3145 return false;
3146
3147 if (sym && (sym->attr.flavor == FL_VARIABLE || sym->attr.subroutine))
3148 {
3149 gfc_error ("%qs at %L is not a function", sym->name, &expr->where);
3150 return false;
3151 }
3152
3153 /* If this is a deferred TBP with an abstract interface (which may
3154 of course be referenced), expr->value.function.esym will be set. */
3155 if (sym && sym->attr.abstract && !expr->value.function.esym)
3156 {
3157 gfc_error ("ABSTRACT INTERFACE %qs must not be referenced at %L",
3158 sym->name, &expr->where);
3159 return false;
3160 }
3161
3162 /* If this is a deferred TBP with an abstract interface, its result
3163 cannot be an assumed length character (F2003: C418). */
3164 if (sym && sym->attr.abstract && sym->attr.function
3165 && sym->result->ts.u.cl
3166 && sym->result->ts.u.cl->length == NULL
3167 && !sym->result->ts.deferred)
3168 {
3169 gfc_error ("ABSTRACT INTERFACE %qs at %L must not have an assumed "
3170 "character length result (F2008: C418)", sym->name,
3171 &sym->declared_at);
3172 return false;
3173 }
3174
3175 /* Switch off assumed size checking and do this again for certain kinds
3176 of procedure, once the procedure itself is resolved. */
3177 need_full_assumed_size++;
3178
3179 if (expr->symtree && expr->symtree->n.sym)
3180 p = expr->symtree->n.sym->attr.proc;
3181
3182 if (expr->value.function.isym && expr->value.function.isym->inquiry)
3183 inquiry_argument = true;
3184 no_formal_args = sym && is_external_proc (sym)
3185 && gfc_sym_get_dummy_args (sym) == NULL;
3186
3187 if (!resolve_actual_arglist (expr->value.function.actual,
3188 p, no_formal_args))
3189 {
3190 inquiry_argument = false;
3191 return false;
3192 }
3193
3194 inquiry_argument = false;
3195
3196 /* Resume assumed_size checking. */
3197 need_full_assumed_size--;
3198
3199 /* If the procedure is external, check for usage. */
3200 if (sym && is_external_proc (sym))
3201 resolve_global_procedure (sym, &expr->where,
3202 &expr->value.function.actual, 0);
3203
3204 if (sym && sym->ts.type == BT_CHARACTER
3205 && sym->ts.u.cl
3206 && sym->ts.u.cl->length == NULL
3207 && !sym->attr.dummy
3208 && !sym->ts.deferred
3209 && expr->value.function.esym == NULL
3210 && !sym->attr.contained)
3211 {
3212 /* Internal procedures are taken care of in resolve_contained_fntype. */
3213 gfc_error ("Function %qs is declared CHARACTER(*) and cannot "
3214 "be used at %L since it is not a dummy argument",
3215 sym->name, &expr->where);
3216 return false;
3217 }
3218
3219 /* See if function is already resolved. */
3220
3221 if (expr->value.function.name != NULL
3222 || expr->value.function.isym != NULL)
3223 {
3224 if (expr->ts.type == BT_UNKNOWN)
3225 expr->ts = sym->ts;
3226 t = true;
3227 }
3228 else
3229 {
3230 /* Apply the rules of section 14.1.2. */
3231
3232 switch (procedure_kind (sym))
3233 {
3234 case PTYPE_GENERIC:
3235 t = resolve_generic_f (expr);
3236 break;
3237
3238 case PTYPE_SPECIFIC:
3239 t = resolve_specific_f (expr);
3240 break;
3241
3242 case PTYPE_UNKNOWN:
3243 t = resolve_unknown_f (expr);
3244 break;
3245
3246 default:
3247 gfc_internal_error ("resolve_function(): bad function type");
3248 }
3249 }
3250
3251 /* If the expression is still a function (it might have simplified),
3252 then we check to see if we are calling an elemental function. */
3253
3254 if (expr->expr_type != EXPR_FUNCTION)
3255 return t;
3256
3257 temp = need_full_assumed_size;
3258 need_full_assumed_size = 0;
3259
3260 if (!resolve_elemental_actual (expr, NULL))
3261 return false;
3262
3263 if (omp_workshare_flag
3264 && expr->value.function.esym
3265 && ! gfc_elemental (expr->value.function.esym))
3266 {
3267 gfc_error ("User defined non-ELEMENTAL function %qs at %L not allowed "
3268 "in WORKSHARE construct", expr->value.function.esym->name,
3269 &expr->where);
3270 t = false;
3271 }
3272
3273 #define GENERIC_ID expr->value.function.isym->id
3274 else if (expr->value.function.actual != NULL
3275 && expr->value.function.isym != NULL
3276 && GENERIC_ID != GFC_ISYM_LBOUND
3277 && GENERIC_ID != GFC_ISYM_LCOBOUND
3278 && GENERIC_ID != GFC_ISYM_UCOBOUND
3279 && GENERIC_ID != GFC_ISYM_LEN
3280 && GENERIC_ID != GFC_ISYM_LOC
3281 && GENERIC_ID != GFC_ISYM_C_LOC
3282 && GENERIC_ID != GFC_ISYM_PRESENT)
3283 {
3284 /* Array intrinsics must also have the last upper bound of an
3285 assumed size array argument. UBOUND and SIZE have to be
3286 excluded from the check if the second argument is anything
3287 than a constant. */
3288
3289 for (arg = expr->value.function.actual; arg; arg = arg->next)
3290 {
3291 if ((GENERIC_ID == GFC_ISYM_UBOUND || GENERIC_ID == GFC_ISYM_SIZE)
3292 && arg == expr->value.function.actual
3293 && arg->next != NULL && arg->next->expr)
3294 {
3295 if (arg->next->expr->expr_type != EXPR_CONSTANT)
3296 break;
3297
3298 if (arg->next->name && strcmp (arg->next->name, "kind") == 0)
3299 break;
3300
3301 if ((int)mpz_get_si (arg->next->expr->value.integer)
3302 < arg->expr->rank)
3303 break;
3304 }
3305
3306 if (arg->expr != NULL
3307 && arg->expr->rank > 0
3308 && resolve_assumed_size_actual (arg->expr))
3309 return false;
3310 }
3311 }
3312 #undef GENERIC_ID
3313
3314 need_full_assumed_size = temp;
3315
3316 if (!check_pure_function(expr))
3317 t = false;
3318
3319 /* Functions without the RECURSIVE attribution are not allowed to
3320 * call themselves. */
3321 if (expr->value.function.esym && !expr->value.function.esym->attr.recursive)
3322 {
3323 gfc_symbol *esym;
3324 esym = expr->value.function.esym;
3325
3326 if (is_illegal_recursion (esym, gfc_current_ns))
3327 {
3328 if (esym->attr.entry && esym->ns->entries)
3329 gfc_error ("ENTRY %qs at %L cannot be called recursively, as"
3330 " function %qs is not RECURSIVE",
3331 esym->name, &expr->where, esym->ns->entries->sym->name);
3332 else
3333 gfc_error ("Function %qs at %L cannot be called recursively, as it"
3334 " is not RECURSIVE", esym->name, &expr->where);
3335
3336 t = false;
3337 }
3338 }
3339
3340 /* Character lengths of use associated functions may contains references to
3341 symbols not referenced from the current program unit otherwise. Make sure
3342 those symbols are marked as referenced. */
3343
3344 if (expr->ts.type == BT_CHARACTER && expr->value.function.esym
3345 && expr->value.function.esym->attr.use_assoc)
3346 {
3347 gfc_expr_set_symbols_referenced (expr->ts.u.cl->length);
3348 }
3349
3350 /* Make sure that the expression has a typespec that works. */
3351 if (expr->ts.type == BT_UNKNOWN)
3352 {
3353 if (expr->symtree->n.sym->result
3354 && expr->symtree->n.sym->result->ts.type != BT_UNKNOWN
3355 && !expr->symtree->n.sym->result->attr.proc_pointer)
3356 expr->ts = expr->symtree->n.sym->result->ts;
3357 }
3358
3359 if (!expr->ref && !expr->value.function.isym)
3360 {
3361 if (expr->value.function.esym)
3362 update_current_proc_array_outer_dependency (expr->value.function.esym);
3363 else
3364 update_current_proc_array_outer_dependency (sym);
3365 }
3366 else if (expr->ref)
3367 /* typebound procedure: Assume the worst. */
3368 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
3369
3370 return t;
3371 }
3372
3373
3374 /************* Subroutine resolution *************/
3375
3376 static bool
3377 pure_subroutine (gfc_symbol *sym, const char *name, locus *loc)
3378 {
3379 if (gfc_pure (sym))
3380 return true;
3381
3382 if (forall_flag)
3383 {
3384 gfc_error ("Subroutine call to %qs in FORALL block at %L is not PURE",
3385 name, loc);
3386 return false;
3387 }
3388 else if (gfc_do_concurrent_flag)
3389 {
3390 gfc_error ("Subroutine call to %qs in DO CONCURRENT block at %L is not "
3391 "PURE", name, loc);
3392 return false;
3393 }
3394 else if (gfc_pure (NULL))
3395 {
3396 gfc_error ("Subroutine call to %qs at %L is not PURE", name, loc);
3397 return false;
3398 }
3399
3400 gfc_unset_implicit_pure (NULL);
3401 return true;
3402 }
3403
3404
3405 static match
3406 resolve_generic_s0 (gfc_code *c, gfc_symbol *sym)
3407 {
3408 gfc_symbol *s;
3409
3410 if (sym->attr.generic)
3411 {
3412 s = gfc_search_interface (sym->generic, 1, &c->ext.actual);
3413 if (s != NULL)
3414 {
3415 c->resolved_sym = s;
3416 if (!pure_subroutine (s, s->name, &c->loc))
3417 return MATCH_ERROR;
3418 return MATCH_YES;
3419 }
3420
3421 /* TODO: Need to search for elemental references in generic interface. */
3422 }
3423
3424 if (sym->attr.intrinsic)
3425 return gfc_intrinsic_sub_interface (c, 0);
3426
3427 return MATCH_NO;
3428 }
3429
3430
3431 static bool
3432 resolve_generic_s (gfc_code *c)
3433 {
3434 gfc_symbol *sym;
3435 match m;
3436
3437 sym = c->symtree->n.sym;
3438
3439 for (;;)
3440 {
3441 m = resolve_generic_s0 (c, sym);
3442 if (m == MATCH_YES)
3443 return true;
3444 else if (m == MATCH_ERROR)
3445 return false;
3446
3447 generic:
3448 if (sym->ns->parent == NULL)
3449 break;
3450 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
3451
3452 if (sym == NULL)
3453 break;
3454 if (!generic_sym (sym))
3455 goto generic;
3456 }
3457
3458 /* Last ditch attempt. See if the reference is to an intrinsic
3459 that possesses a matching interface. 14.1.2.4 */
3460 sym = c->symtree->n.sym;
3461
3462 if (!gfc_is_intrinsic (sym, 1, c->loc))
3463 {
3464 gfc_error ("There is no specific subroutine for the generic %qs at %L",
3465 sym->name, &c->loc);
3466 return false;
3467 }
3468
3469 m = gfc_intrinsic_sub_interface (c, 0);
3470 if (m == MATCH_YES)
3471 return true;
3472 if (m == MATCH_NO)
3473 gfc_error ("Generic subroutine %qs at %L is not consistent with an "
3474 "intrinsic subroutine interface", sym->name, &c->loc);
3475
3476 return false;
3477 }
3478
3479
3480 /* Resolve a subroutine call known to be specific. */
3481
3482 static match
3483 resolve_specific_s0 (gfc_code *c, gfc_symbol *sym)
3484 {
3485 match m;
3486
3487 if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
3488 {
3489 if (sym->attr.dummy)
3490 {
3491 sym->attr.proc = PROC_DUMMY;
3492 goto found;
3493 }
3494
3495 sym->attr.proc = PROC_EXTERNAL;
3496 goto found;
3497 }
3498
3499 if (sym->attr.proc == PROC_MODULE || sym->attr.proc == PROC_INTERNAL)
3500 goto found;
3501
3502 if (sym->attr.intrinsic)
3503 {
3504 m = gfc_intrinsic_sub_interface (c, 1);
3505 if (m == MATCH_YES)
3506 return MATCH_YES;
3507 if (m == MATCH_NO)
3508 gfc_error ("Subroutine %qs at %L is INTRINSIC but is not compatible "
3509 "with an intrinsic", sym->name, &c->loc);
3510
3511 return MATCH_ERROR;
3512 }
3513
3514 return MATCH_NO;
3515
3516 found:
3517 gfc_procedure_use (sym, &c->ext.actual, &c->loc);
3518
3519 c->resolved_sym = sym;
3520 if (!pure_subroutine (sym, sym->name, &c->loc))
3521 return MATCH_ERROR;
3522
3523 return MATCH_YES;
3524 }
3525
3526
3527 static bool
3528 resolve_specific_s (gfc_code *c)
3529 {
3530 gfc_symbol *sym;
3531 match m;
3532
3533 sym = c->symtree->n.sym;
3534
3535 for (;;)
3536 {
3537 m = resolve_specific_s0 (c, sym);
3538 if (m == MATCH_YES)
3539 return true;
3540 if (m == MATCH_ERROR)
3541 return false;
3542
3543 if (sym->ns->parent == NULL)
3544 break;
3545
3546 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
3547
3548 if (sym == NULL)
3549 break;
3550 }
3551
3552 sym = c->symtree->n.sym;
3553 gfc_error ("Unable to resolve the specific subroutine %qs at %L",
3554 sym->name, &c->loc);
3555
3556 return false;
3557 }
3558
3559
3560 /* Resolve a subroutine call not known to be generic nor specific. */
3561
3562 static bool
3563 resolve_unknown_s (gfc_code *c)
3564 {
3565 gfc_symbol *sym;
3566
3567 sym = c->symtree->n.sym;
3568
3569 if (sym->attr.dummy)
3570 {
3571 sym->attr.proc = PROC_DUMMY;
3572 goto found;
3573 }
3574
3575 /* See if we have an intrinsic function reference. */
3576
3577 if (gfc_is_intrinsic (sym, 1, c->loc))
3578 {
3579 if (gfc_intrinsic_sub_interface (c, 1) == MATCH_YES)
3580 return true;
3581 return false;
3582 }
3583
3584 /* The reference is to an external name. */
3585
3586 found:
3587 gfc_procedure_use (sym, &c->ext.actual, &c->loc);
3588
3589 c->resolved_sym = sym;
3590
3591 return pure_subroutine (sym, sym->name, &c->loc);
3592 }
3593
3594
3595 /* Resolve a subroutine call. Although it was tempting to use the same code
3596 for functions, subroutines and functions are stored differently and this
3597 makes things awkward. */
3598
3599 static bool
3600 resolve_call (gfc_code *c)
3601 {
3602 bool t;
3603 procedure_type ptype = PROC_INTRINSIC;
3604 gfc_symbol *csym, *sym;
3605 bool no_formal_args;
3606
3607 csym = c->symtree ? c->symtree->n.sym : NULL;
3608
3609 if (csym && csym->ts.type != BT_UNKNOWN)
3610 {
3611 gfc_error ("%qs at %L has a type, which is not consistent with "
3612 "the CALL at %L", csym->name, &csym->declared_at, &c->loc);
3613 return false;
3614 }
3615
3616 if (csym && gfc_current_ns->parent && csym->ns != gfc_current_ns)
3617 {
3618 gfc_symtree *st;
3619 gfc_find_sym_tree (c->symtree->name, gfc_current_ns, 1, &st);
3620 sym = st ? st->n.sym : NULL;
3621 if (sym && csym != sym
3622 && sym->ns == gfc_current_ns
3623 && sym->attr.flavor == FL_PROCEDURE
3624 && sym->attr.contained)
3625 {
3626 sym->refs++;
3627 if (csym->attr.generic)
3628 c->symtree->n.sym = sym;
3629 else
3630 c->symtree = st;
3631 csym = c->symtree->n.sym;
3632 }
3633 }
3634
3635 /* If this ia a deferred TBP, c->expr1 will be set. */
3636 if (!c->expr1 && csym)
3637 {
3638 if (csym->attr.abstract)
3639 {
3640 gfc_error ("ABSTRACT INTERFACE %qs must not be referenced at %L",
3641 csym->name, &c->loc);
3642 return false;
3643 }
3644
3645 /* Subroutines without the RECURSIVE attribution are not allowed to
3646 call themselves. */
3647 if (is_illegal_recursion (csym, gfc_current_ns))
3648 {
3649 if (csym->attr.entry && csym->ns->entries)
3650 gfc_error ("ENTRY %qs at %L cannot be called recursively, "
3651 "as subroutine %qs is not RECURSIVE",
3652 csym->name, &c->loc, csym->ns->entries->sym->name);
3653 else
3654 gfc_error ("SUBROUTINE %qs at %L cannot be called recursively, "
3655 "as it is not RECURSIVE", csym->name, &c->loc);
3656
3657 t = false;
3658 }
3659 }
3660
3661 /* Switch off assumed size checking and do this again for certain kinds
3662 of procedure, once the procedure itself is resolved. */
3663 need_full_assumed_size++;
3664
3665 if (csym)
3666 ptype = csym->attr.proc;
3667
3668 no_formal_args = csym && is_external_proc (csym)
3669 && gfc_sym_get_dummy_args (csym) == NULL;
3670 if (!resolve_actual_arglist (c->ext.actual, ptype, no_formal_args))
3671 return false;
3672
3673 /* Resume assumed_size checking. */
3674 need_full_assumed_size--;
3675
3676 /* If external, check for usage. */
3677 if (csym && is_external_proc (csym))
3678 resolve_global_procedure (csym, &c->loc, &c->ext.actual, 1);
3679
3680 t = true;
3681 if (c->resolved_sym == NULL)
3682 {
3683 c->resolved_isym = NULL;
3684 switch (procedure_kind (csym))
3685 {
3686 case PTYPE_GENERIC:
3687 t = resolve_generic_s (c);
3688 break;
3689
3690 case PTYPE_SPECIFIC:
3691 t = resolve_specific_s (c);
3692 break;
3693
3694 case PTYPE_UNKNOWN:
3695 t = resolve_unknown_s (c);
3696 break;
3697
3698 default:
3699 gfc_internal_error ("resolve_subroutine(): bad function type");
3700 }
3701 }
3702
3703 /* Some checks of elemental subroutine actual arguments. */
3704 if (!resolve_elemental_actual (NULL, c))
3705 return false;
3706
3707 if (!c->expr1)
3708 update_current_proc_array_outer_dependency (csym);
3709 else
3710 /* Typebound procedure: Assume the worst. */
3711 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
3712
3713 return t;
3714 }
3715
3716
3717 /* Compare the shapes of two arrays that have non-NULL shapes. If both
3718 op1->shape and op2->shape are non-NULL return true if their shapes
3719 match. If both op1->shape and op2->shape are non-NULL return false
3720 if their shapes do not match. If either op1->shape or op2->shape is
3721 NULL, return true. */
3722
3723 static bool
3724 compare_shapes (gfc_expr *op1, gfc_expr *op2)
3725 {
3726 bool t;
3727 int i;
3728
3729 t = true;
3730
3731 if (op1->shape != NULL && op2->shape != NULL)
3732 {
3733 for (i = 0; i < op1->rank; i++)
3734 {
3735 if (mpz_cmp (op1->shape[i], op2->shape[i]) != 0)
3736 {
3737 gfc_error ("Shapes for operands at %L and %L are not conformable",
3738 &op1->where, &op2->where);
3739 t = false;
3740 break;
3741 }
3742 }
3743 }
3744
3745 return t;
3746 }
3747
3748 /* Convert a logical operator to the corresponding bitwise intrinsic call.
3749 For example A .AND. B becomes IAND(A, B). */
3750 static gfc_expr *
3751 logical_to_bitwise (gfc_expr *e)
3752 {
3753 gfc_expr *tmp, *op1, *op2;
3754 gfc_isym_id isym;
3755 gfc_actual_arglist *args = NULL;
3756
3757 gcc_assert (e->expr_type == EXPR_OP);
3758
3759 isym = GFC_ISYM_NONE;
3760 op1 = e->value.op.op1;
3761 op2 = e->value.op.op2;
3762
3763 switch (e->value.op.op)
3764 {
3765 case INTRINSIC_NOT:
3766 isym = GFC_ISYM_NOT;
3767 break;
3768 case INTRINSIC_AND:
3769 isym = GFC_ISYM_IAND;
3770 break;
3771 case INTRINSIC_OR:
3772 isym = GFC_ISYM_IOR;
3773 break;
3774 case INTRINSIC_NEQV:
3775 isym = GFC_ISYM_IEOR;
3776 break;
3777 case INTRINSIC_EQV:
3778 /* "Bitwise eqv" is just the complement of NEQV === IEOR.
3779 Change the old expression to NEQV, which will get replaced by IEOR,
3780 and wrap it in NOT. */
3781 tmp = gfc_copy_expr (e);
3782 tmp->value.op.op = INTRINSIC_NEQV;
3783 tmp = logical_to_bitwise (tmp);
3784 isym = GFC_ISYM_NOT;
3785 op1 = tmp;
3786 op2 = NULL;
3787 break;
3788 default:
3789 gfc_internal_error ("logical_to_bitwise(): Bad intrinsic");
3790 }
3791
3792 /* Inherit the original operation's operands as arguments. */
3793 args = gfc_get_actual_arglist ();
3794 args->expr = op1;
3795 if (op2)
3796 {
3797 args->next = gfc_get_actual_arglist ();
3798 args->next->expr = op2;
3799 }
3800
3801 /* Convert the expression to a function call. */
3802 e->expr_type = EXPR_FUNCTION;
3803 e->value.function.actual = args;
3804 e->value.function.isym = gfc_intrinsic_function_by_id (isym);
3805 e->value.function.name = e->value.function.isym->name;
3806 e->value.function.esym = NULL;
3807
3808 /* Make up a pre-resolved function call symtree if we need to. */
3809 if (!e->symtree || !e->symtree->n.sym)
3810 {
3811 gfc_symbol *sym;
3812 gfc_get_ha_sym_tree (e->value.function.isym->name, &e->symtree);
3813 sym = e->symtree->n.sym;
3814 sym->result = sym;
3815 sym->attr.flavor = FL_PROCEDURE;
3816 sym->attr.function = 1;
3817 sym->attr.elemental = 1;
3818 sym->attr.pure = 1;
3819 sym->attr.referenced = 1;
3820 gfc_intrinsic_symbol (sym);
3821 gfc_commit_symbol (sym);
3822 }
3823
3824 args->name = e->value.function.isym->formal->name;
3825 if (e->value.function.isym->formal->next)
3826 args->next->name = e->value.function.isym->formal->next->name;
3827
3828 return e;
3829 }
3830
3831 /* Recursively append candidate UOP to CANDIDATES. Store the number of
3832 candidates in CANDIDATES_LEN. */
3833 static void
3834 lookup_uop_fuzzy_find_candidates (gfc_symtree *uop,
3835 char **&candidates,
3836 size_t &candidates_len)
3837 {
3838 gfc_symtree *p;
3839
3840 if (uop == NULL)
3841 return;
3842
3843 /* Not sure how to properly filter here. Use all for a start.
3844 n.uop.op is NULL for empty interface operators (is that legal?) disregard
3845 these as i suppose they don't make terribly sense. */
3846
3847 if (uop->n.uop->op != NULL)
3848 vec_push (candidates, candidates_len, uop->name);
3849
3850 p = uop->left;
3851 if (p)
3852 lookup_uop_fuzzy_find_candidates (p, candidates, candidates_len);
3853
3854 p = uop->right;
3855 if (p)
3856 lookup_uop_fuzzy_find_candidates (p, candidates, candidates_len);
3857 }
3858
3859 /* Lookup user-operator OP fuzzily, taking names in UOP into account. */
3860
3861 static const char*
3862 lookup_uop_fuzzy (const char *op, gfc_symtree *uop)
3863 {
3864 char **candidates = NULL;
3865 size_t candidates_len = 0;
3866 lookup_uop_fuzzy_find_candidates (uop, candidates, candidates_len);
3867 return gfc_closest_fuzzy_match (op, candidates);
3868 }
3869
3870
3871 /* Callback finding an impure function as an operand to an .and. or
3872 .or. expression. Remember the last function warned about to
3873 avoid double warnings when recursing. */
3874
3875 static int
3876 impure_function_callback (gfc_expr **e, int *walk_subtrees ATTRIBUTE_UNUSED,
3877 void *data)
3878 {
3879 gfc_expr *f = *e;
3880 const char *name;
3881 static gfc_expr *last = NULL;
3882 bool *found = (bool *) data;
3883
3884 if (f->expr_type == EXPR_FUNCTION)
3885 {
3886 *found = 1;
3887 if (f != last && !gfc_pure_function (f, &name)
3888 && !gfc_implicit_pure_function (f))
3889 {
3890 if (name)
3891 gfc_warning (OPT_Wfunction_elimination,
3892 "Impure function %qs at %L might not be evaluated",
3893 name, &f->where);
3894 else
3895 gfc_warning (OPT_Wfunction_elimination,
3896 "Impure function at %L might not be evaluated",
3897 &f->where);
3898 }
3899 last = f;
3900 }
3901
3902 return 0;
3903 }
3904
3905
3906 /* Resolve an operator expression node. This can involve replacing the
3907 operation with a user defined function call. */
3908
3909 static bool
3910 resolve_operator (gfc_expr *e)
3911 {
3912 gfc_expr *op1, *op2;
3913 char msg[200];
3914 bool dual_locus_error;
3915 bool t = true;
3916
3917 /* Resolve all subnodes-- give them types. */
3918
3919 switch (e->value.op.op)
3920 {
3921 default:
3922 if (!gfc_resolve_expr (e->value.op.op2))
3923 return false;
3924
3925 /* Fall through. */
3926
3927 case INTRINSIC_NOT:
3928 case INTRINSIC_UPLUS:
3929 case INTRINSIC_UMINUS:
3930 case INTRINSIC_PARENTHESES:
3931 if (!gfc_resolve_expr (e->value.op.op1))
3932 return false;
3933 if (e->value.op.op1
3934 && e->value.op.op1->ts.type == BT_BOZ && !e->value.op.op2)
3935 {
3936 gfc_error ("BOZ literal constant at %L cannot be an operand of "
3937 "unary operator %qs", &e->value.op.op1->where,
3938 gfc_op2string (e->value.op.op));
3939 return false;
3940 }
3941 break;
3942 }
3943
3944 /* Typecheck the new node. */
3945
3946 op1 = e->value.op.op1;
3947 op2 = e->value.op.op2;
3948 dual_locus_error = false;
3949
3950 /* op1 and op2 cannot both be BOZ. */
3951 if (op1 && op1->ts.type == BT_BOZ
3952 && op2 && op2->ts.type == BT_BOZ)
3953 {
3954 gfc_error ("Operands at %L and %L cannot appear as operands of "
3955 "binary operator %qs", &op1->where, &op2->where,
3956 gfc_op2string (e->value.op.op));
3957 return false;
3958 }
3959
3960 if ((op1 && op1->expr_type == EXPR_NULL)
3961 || (op2 && op2->expr_type == EXPR_NULL))
3962 {
3963 sprintf (msg, _("Invalid context for NULL() pointer at %%L"));
3964 goto bad_op;
3965 }
3966
3967 switch (e->value.op.op)
3968 {
3969 case INTRINSIC_UPLUS:
3970 case INTRINSIC_UMINUS:
3971 if (op1->ts.type == BT_INTEGER
3972 || op1->ts.type == BT_REAL
3973 || op1->ts.type == BT_COMPLEX)
3974 {
3975 e->ts = op1->ts;
3976 break;
3977 }
3978
3979 sprintf (msg, _("Operand of unary numeric operator %%<%s%%> at %%L is %s"),
3980 gfc_op2string (e->value.op.op), gfc_typename (&e->ts));
3981 goto bad_op;
3982
3983 case INTRINSIC_PLUS:
3984 case INTRINSIC_MINUS:
3985 case INTRINSIC_TIMES:
3986 case INTRINSIC_DIVIDE:
3987 case INTRINSIC_POWER:
3988 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
3989 {
3990 gfc_type_convert_binary (e, 1);
3991 break;
3992 }
3993
3994 if (op1->ts.type == BT_DERIVED || op2->ts.type == BT_DERIVED)
3995 sprintf (msg,
3996 _("Unexpected derived-type entities in binary intrinsic "
3997 "numeric operator %%<%s%%> at %%L"),
3998 gfc_op2string (e->value.op.op));
3999 else
4000 sprintf (msg,
4001 _("Operands of binary numeric operator %%<%s%%> at %%L are %s/%s"),
4002 gfc_op2string (e->value.op.op), gfc_typename (&op1->ts),
4003 gfc_typename (&op2->ts));
4004 goto bad_op;
4005
4006 case INTRINSIC_CONCAT:
4007 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
4008 && op1->ts.kind == op2->ts.kind)
4009 {
4010 e->ts.type = BT_CHARACTER;
4011 e->ts.kind = op1->ts.kind;
4012 break;
4013 }
4014
4015 sprintf (msg,
4016 _("Operands of string concatenation operator at %%L are %s/%s"),
4017 gfc_typename (&op1->ts), gfc_typename (&op2->ts));
4018 goto bad_op;
4019
4020 case INTRINSIC_AND:
4021 case INTRINSIC_OR:
4022 case INTRINSIC_EQV:
4023 case INTRINSIC_NEQV:
4024 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
4025 {
4026 e->ts.type = BT_LOGICAL;
4027 e->ts.kind = gfc_kind_max (op1, op2);
4028 if (op1->ts.kind < e->ts.kind)
4029 gfc_convert_type (op1, &e->ts, 2);
4030 else if (op2->ts.kind < e->ts.kind)
4031 gfc_convert_type (op2, &e->ts, 2);
4032
4033 if (flag_frontend_optimize &&
4034 (e->value.op.op == INTRINSIC_AND || e->value.op.op == INTRINSIC_OR))
4035 {
4036 /* Warn about short-circuiting
4037 with impure function as second operand. */
4038 bool op2_f = false;
4039 gfc_expr_walker (&op2, impure_function_callback, &op2_f);
4040 }
4041 break;
4042 }
4043
4044 /* Logical ops on integers become bitwise ops with -fdec. */
4045 else if (flag_dec
4046 && (op1->ts.type == BT_INTEGER || op2->ts.type == BT_INTEGER))
4047 {
4048 e->ts.type = BT_INTEGER;
4049 e->ts.kind = gfc_kind_max (op1, op2);
4050 if (op1->ts.type != e->ts.type || op1->ts.kind != e->ts.kind)
4051 gfc_convert_type (op1, &e->ts, 1);
4052 if (op2->ts.type != e->ts.type || op2->ts.kind != e->ts.kind)
4053 gfc_convert_type (op2, &e->ts, 1);
4054 e = logical_to_bitwise (e);
4055 goto simplify_op;
4056 }
4057
4058 sprintf (msg, _("Operands of logical operator %%<%s%%> at %%L are %s/%s"),
4059 gfc_op2string (e->value.op.op), gfc_typename (&op1->ts),
4060 gfc_typename (&op2->ts));
4061
4062 goto bad_op;
4063
4064 case INTRINSIC_NOT:
4065 /* Logical ops on integers become bitwise ops with -fdec. */
4066 if (flag_dec && op1->ts.type == BT_INTEGER)
4067 {
4068 e->ts.type = BT_INTEGER;
4069 e->ts.kind = op1->ts.kind;
4070 e = logical_to_bitwise (e);
4071 goto simplify_op;
4072 }
4073
4074 if (op1->ts.type == BT_LOGICAL)
4075 {
4076 e->ts.type = BT_LOGICAL;
4077 e->ts.kind = op1->ts.kind;
4078 break;
4079 }
4080
4081 sprintf (msg, _("Operand of .not. operator at %%L is %s"),
4082 gfc_typename (&op1->ts));
4083 goto bad_op;
4084
4085 case INTRINSIC_GT:
4086 case INTRINSIC_GT_OS:
4087 case INTRINSIC_GE:
4088 case INTRINSIC_GE_OS:
4089 case INTRINSIC_LT:
4090 case INTRINSIC_LT_OS:
4091 case INTRINSIC_LE:
4092 case INTRINSIC_LE_OS:
4093 if (op1->ts.type == BT_COMPLEX || op2->ts.type == BT_COMPLEX)
4094 {
4095 strcpy (msg, _("COMPLEX quantities cannot be compared at %L"));
4096 goto bad_op;
4097 }
4098
4099 /* Fall through. */
4100
4101 case INTRINSIC_EQ:
4102 case INTRINSIC_EQ_OS:
4103 case INTRINSIC_NE:
4104 case INTRINSIC_NE_OS:
4105 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
4106 && op1->ts.kind == op2->ts.kind)
4107 {
4108 e->ts.type = BT_LOGICAL;
4109 e->ts.kind = gfc_default_logical_kind;
4110 break;
4111 }
4112
4113 /* If op1 is BOZ, then op2 is not!. Try to convert to type of op2. */
4114 if (op1->ts.type == BT_BOZ)
4115 {
4116 if (gfc_invalid_boz ("BOZ literal constant near %L cannot appear as "
4117 "an operand of a relational operator",
4118 &op1->where))
4119 return false;
4120
4121 if (op2->ts.type == BT_INTEGER && !gfc_boz2int (op1, op2->ts.kind))
4122 return false;
4123
4124 if (op2->ts.type == BT_REAL && !gfc_boz2real (op1, op2->ts.kind))
4125 return false;
4126 }
4127
4128 /* If op2 is BOZ, then op1 is not!. Try to convert to type of op2. */
4129 if (op2->ts.type == BT_BOZ)
4130 {
4131 if (gfc_invalid_boz ("BOZ literal constant near %L cannot appear as "
4132 "an operand of a relational operator",
4133 &op2->where))
4134 return false;
4135
4136 if (op1->ts.type == BT_INTEGER && !gfc_boz2int (op2, op1->ts.kind))
4137 return false;
4138
4139 if (op1->ts.type == BT_REAL && !gfc_boz2real (op2, op1->ts.kind))
4140 return false;
4141 }
4142
4143 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
4144 {
4145 gfc_type_convert_binary (e, 1);
4146
4147 e->ts.type = BT_LOGICAL;
4148 e->ts.kind = gfc_default_logical_kind;
4149
4150 if (warn_compare_reals)
4151 {
4152 gfc_intrinsic_op op = e->value.op.op;
4153
4154 /* Type conversion has made sure that the types of op1 and op2
4155 agree, so it is only necessary to check the first one. */
4156 if ((op1->ts.type == BT_REAL || op1->ts.type == BT_COMPLEX)
4157 && (op == INTRINSIC_EQ || op == INTRINSIC_EQ_OS
4158 || op == INTRINSIC_NE || op == INTRINSIC_NE_OS))
4159 {
4160 const char *msg;
4161
4162 if (op == INTRINSIC_EQ || op == INTRINSIC_EQ_OS)
4163 msg = "Equality comparison for %s at %L";
4164 else
4165 msg = "Inequality comparison for %s at %L";
4166
4167 gfc_warning (OPT_Wcompare_reals, msg,
4168 gfc_typename (&op1->ts), &op1->where);
4169 }
4170 }
4171
4172 break;
4173 }
4174
4175 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
4176 sprintf (msg,
4177 _("Logicals at %%L must be compared with %s instead of %s"),
4178 (e->value.op.op == INTRINSIC_EQ
4179 || e->value.op.op == INTRINSIC_EQ_OS)
4180 ? ".eqv." : ".neqv.", gfc_op2string (e->value.op.op));
4181 else
4182 sprintf (msg,
4183 _("Operands of comparison operator %%<%s%%> at %%L are %s/%s"),
4184 gfc_op2string (e->value.op.op), gfc_typename (&op1->ts),
4185 gfc_typename (&op2->ts));
4186
4187 goto bad_op;
4188
4189 case INTRINSIC_USER:
4190 if (e->value.op.uop->op == NULL)
4191 {
4192 const char *name = e->value.op.uop->name;
4193 const char *guessed;
4194 guessed = lookup_uop_fuzzy (name, e->value.op.uop->ns->uop_root);
4195 if (guessed)
4196 sprintf (msg, _("Unknown operator %%<%s%%> at %%L; did you mean '%s'?"),
4197 name, guessed);
4198 else
4199 sprintf (msg, _("Unknown operator %%<%s%%> at %%L"), name);
4200 }
4201 else if (op2 == NULL)
4202 sprintf (msg, _("Operand of user operator %%<%s%%> at %%L is %s"),
4203 e->value.op.uop->name, gfc_typename (&op1->ts));
4204 else
4205 {
4206 sprintf (msg, _("Operands of user operator %%<%s%%> at %%L are %s/%s"),
4207 e->value.op.uop->name, gfc_typename (&op1->ts),
4208 gfc_typename (&op2->ts));
4209 e->value.op.uop->op->sym->attr.referenced = 1;
4210 }
4211
4212 goto bad_op;
4213
4214 case INTRINSIC_PARENTHESES:
4215 e->ts = op1->ts;
4216 if (e->ts.type == BT_CHARACTER)
4217 e->ts.u.cl = op1->ts.u.cl;
4218 break;
4219
4220 default:
4221 gfc_internal_error ("resolve_operator(): Bad intrinsic");
4222 }
4223
4224 /* Deal with arrayness of an operand through an operator. */
4225
4226 switch (e->value.op.op)
4227 {
4228 case INTRINSIC_PLUS:
4229 case INTRINSIC_MINUS:
4230 case INTRINSIC_TIMES:
4231 case INTRINSIC_DIVIDE:
4232 case INTRINSIC_POWER:
4233 case INTRINSIC_CONCAT:
4234 case INTRINSIC_AND:
4235 case INTRINSIC_OR:
4236 case INTRINSIC_EQV:
4237 case INTRINSIC_NEQV:
4238 case INTRINSIC_EQ:
4239 case INTRINSIC_EQ_OS:
4240 case INTRINSIC_NE:
4241 case INTRINSIC_NE_OS:
4242 case INTRINSIC_GT:
4243 case INTRINSIC_GT_OS:
4244 case INTRINSIC_GE:
4245 case INTRINSIC_GE_OS:
4246 case INTRINSIC_LT:
4247 case INTRINSIC_LT_OS:
4248 case INTRINSIC_LE:
4249 case INTRINSIC_LE_OS:
4250
4251 if (op1->rank == 0 && op2->rank == 0)
4252 e->rank = 0;
4253
4254 if (op1->rank == 0 && op2->rank != 0)
4255 {
4256 e->rank = op2->rank;
4257
4258 if (e->shape == NULL)
4259 e->shape = gfc_copy_shape (op2->shape, op2->rank);
4260 }
4261
4262 if (op1->rank != 0 && op2->rank == 0)
4263 {
4264 e->rank = op1->rank;
4265
4266 if (e->shape == NULL)
4267 e->shape = gfc_copy_shape (op1->shape, op1->rank);
4268 }
4269
4270 if (op1->rank != 0 && op2->rank != 0)
4271 {
4272 if (op1->rank == op2->rank)
4273 {
4274 e->rank = op1->rank;
4275 if (e->shape == NULL)
4276 {
4277 t = compare_shapes (op1, op2);
4278 if (!t)
4279 e->shape = NULL;
4280 else
4281 e->shape = gfc_copy_shape (op1->shape, op1->rank);
4282 }
4283 }
4284 else
4285 {
4286 /* Allow higher level expressions to work. */
4287 e->rank = 0;
4288
4289 /* Try user-defined operators, and otherwise throw an error. */
4290 dual_locus_error = true;
4291 sprintf (msg,
4292 _("Inconsistent ranks for operator at %%L and %%L"));
4293 goto bad_op;
4294 }
4295 }
4296
4297 break;
4298
4299 case INTRINSIC_PARENTHESES:
4300 case INTRINSIC_NOT:
4301 case INTRINSIC_UPLUS:
4302 case INTRINSIC_UMINUS:
4303 /* Simply copy arrayness attribute */
4304 e->rank = op1->rank;
4305
4306 if (e->shape == NULL)
4307 e->shape = gfc_copy_shape (op1->shape, op1->rank);
4308
4309 break;
4310
4311 default:
4312 break;
4313 }
4314
4315 simplify_op:
4316
4317 /* Attempt to simplify the expression. */
4318 if (t)
4319 {
4320 t = gfc_simplify_expr (e, 0);
4321 /* Some calls do not succeed in simplification and return false
4322 even though there is no error; e.g. variable references to
4323 PARAMETER arrays. */
4324 if (!gfc_is_constant_expr (e))
4325 t = true;
4326 }
4327 return t;
4328
4329 bad_op:
4330
4331 {
4332 match m = gfc_extend_expr (e);
4333 if (m == MATCH_YES)
4334 return true;
4335 if (m == MATCH_ERROR)
4336 return false;
4337 }
4338
4339 if (dual_locus_error)
4340 gfc_error (msg, &op1->where, &op2->where);
4341 else
4342 gfc_error (msg, &e->where);
4343
4344 return false;
4345 }
4346
4347
4348 /************** Array resolution subroutines **************/
4349
4350 enum compare_result
4351 { CMP_LT, CMP_EQ, CMP_GT, CMP_UNKNOWN };
4352
4353 /* Compare two integer expressions. */
4354
4355 static compare_result
4356 compare_bound (gfc_expr *a, gfc_expr *b)
4357 {
4358 int i;
4359
4360 if (a == NULL || a->expr_type != EXPR_CONSTANT
4361 || b == NULL || b->expr_type != EXPR_CONSTANT)
4362 return CMP_UNKNOWN;
4363
4364 /* If either of the types isn't INTEGER, we must have
4365 raised an error earlier. */
4366
4367 if (a->ts.type != BT_INTEGER || b->ts.type != BT_INTEGER)
4368 return CMP_UNKNOWN;
4369
4370 i = mpz_cmp (a->value.integer, b->value.integer);
4371
4372 if (i < 0)
4373 return CMP_LT;
4374 if (i > 0)
4375 return CMP_GT;
4376 return CMP_EQ;
4377 }
4378
4379
4380 /* Compare an integer expression with an integer. */
4381
4382 static compare_result
4383 compare_bound_int (gfc_expr *a, int b)
4384 {
4385 int i;
4386
4387 if (a == NULL || a->expr_type != EXPR_CONSTANT)
4388 return CMP_UNKNOWN;
4389
4390 if (a->ts.type != BT_INTEGER)
4391 gfc_internal_error ("compare_bound_int(): Bad expression");
4392
4393 i = mpz_cmp_si (a->value.integer, b);
4394
4395 if (i < 0)
4396 return CMP_LT;
4397 if (i > 0)
4398 return CMP_GT;
4399 return CMP_EQ;
4400 }
4401
4402
4403 /* Compare an integer expression with a mpz_t. */
4404
4405 static compare_result
4406 compare_bound_mpz_t (gfc_expr *a, mpz_t b)
4407 {
4408 int i;
4409
4410 if (a == NULL || a->expr_type != EXPR_CONSTANT)
4411 return CMP_UNKNOWN;
4412
4413 if (a->ts.type != BT_INTEGER)
4414 gfc_internal_error ("compare_bound_int(): Bad expression");
4415
4416 i = mpz_cmp (a->value.integer, b);
4417
4418 if (i < 0)
4419 return CMP_LT;
4420 if (i > 0)
4421 return CMP_GT;
4422 return CMP_EQ;
4423 }
4424
4425
4426 /* Compute the last value of a sequence given by a triplet.
4427 Return 0 if it wasn't able to compute the last value, or if the
4428 sequence if empty, and 1 otherwise. */
4429
4430 static int
4431 compute_last_value_for_triplet (gfc_expr *start, gfc_expr *end,
4432 gfc_expr *stride, mpz_t last)
4433 {
4434 mpz_t rem;
4435
4436 if (start == NULL || start->expr_type != EXPR_CONSTANT
4437 || end == NULL || end->expr_type != EXPR_CONSTANT
4438 || (stride != NULL && stride->expr_type != EXPR_CONSTANT))
4439 return 0;
4440
4441 if (start->ts.type != BT_INTEGER || end->ts.type != BT_INTEGER
4442 || (stride != NULL && stride->ts.type != BT_INTEGER))
4443 return 0;
4444
4445 if (stride == NULL || compare_bound_int (stride, 1) == CMP_EQ)
4446 {
4447 if (compare_bound (start, end) == CMP_GT)
4448 return 0;
4449 mpz_set (last, end->value.integer);
4450 return 1;
4451 }
4452
4453 if (compare_bound_int (stride, 0) == CMP_GT)
4454 {
4455 /* Stride is positive */
4456 if (mpz_cmp (start->value.integer, end->value.integer) > 0)
4457 return 0;
4458 }
4459 else
4460 {
4461 /* Stride is negative */
4462 if (mpz_cmp (start->value.integer, end->value.integer) < 0)
4463 return 0;
4464 }
4465
4466 mpz_init (rem);
4467 mpz_sub (rem, end->value.integer, start->value.integer);
4468 mpz_tdiv_r (rem, rem, stride->value.integer);
4469 mpz_sub (last, end->value.integer, rem);
4470 mpz_clear (rem);
4471
4472 return 1;
4473 }
4474
4475
4476 /* Compare a single dimension of an array reference to the array
4477 specification. */
4478
4479 static bool
4480 check_dimension (int i, gfc_array_ref *ar, gfc_array_spec *as)
4481 {
4482 mpz_t last_value;
4483
4484 if (ar->dimen_type[i] == DIMEN_STAR)
4485 {
4486 gcc_assert (ar->stride[i] == NULL);
4487 /* This implies [*] as [*:] and [*:3] are not possible. */
4488 if (ar->start[i] == NULL)
4489 {
4490 gcc_assert (ar->end[i] == NULL);
4491 return true;
4492 }
4493 }
4494
4495 /* Given start, end and stride values, calculate the minimum and
4496 maximum referenced indexes. */
4497
4498 switch (ar->dimen_type[i])
4499 {
4500 case DIMEN_VECTOR:
4501 case DIMEN_THIS_IMAGE:
4502 break;
4503
4504 case DIMEN_STAR:
4505 case DIMEN_ELEMENT:
4506 if (compare_bound (ar->start[i], as->lower[i]) == CMP_LT)
4507 {
4508 if (i < as->rank)
4509 gfc_warning (0, "Array reference at %L is out of bounds "
4510 "(%ld < %ld) in dimension %d", &ar->c_where[i],
4511 mpz_get_si (ar->start[i]->value.integer),
4512 mpz_get_si (as->lower[i]->value.integer), i+1);
4513 else
4514 gfc_warning (0, "Array reference at %L is out of bounds "
4515 "(%ld < %ld) in codimension %d", &ar->c_where[i],
4516 mpz_get_si (ar->start[i]->value.integer),
4517 mpz_get_si (as->lower[i]->value.integer),
4518 i + 1 - as->rank);
4519 return true;
4520 }
4521 if (compare_bound (ar->start[i], as->upper[i]) == CMP_GT)
4522 {
4523 if (i < as->rank)
4524 gfc_warning (0, "Array reference at %L is out of bounds "
4525 "(%ld > %ld) in dimension %d", &ar->c_where[i],
4526 mpz_get_si (ar->start[i]->value.integer),
4527 mpz_get_si (as->upper[i]->value.integer), i+1);
4528 else
4529 gfc_warning (0, "Array reference at %L is out of bounds "
4530 "(%ld > %ld) in codimension %d", &ar->c_where[i],
4531 mpz_get_si (ar->start[i]->value.integer),
4532 mpz_get_si (as->upper[i]->value.integer),
4533 i + 1 - as->rank);
4534 return true;
4535 }
4536
4537 break;
4538
4539 case DIMEN_RANGE:
4540 {
4541 #define AR_START (ar->start[i] ? ar->start[i] : as->lower[i])
4542 #define AR_END (ar->end[i] ? ar->end[i] : as->upper[i])
4543
4544 compare_result comp_start_end = compare_bound (AR_START, AR_END);
4545
4546 /* Check for zero stride, which is not allowed. */
4547 if (compare_bound_int (ar->stride[i], 0) == CMP_EQ)
4548 {
4549 gfc_error ("Illegal stride of zero at %L", &ar->c_where[i]);
4550 return false;
4551 }
4552
4553 /* if start == len || (stride > 0 && start < len)
4554 || (stride < 0 && start > len),
4555 then the array section contains at least one element. In this
4556 case, there is an out-of-bounds access if
4557 (start < lower || start > upper). */
4558 if (compare_bound (AR_START, AR_END) == CMP_EQ
4559 || ((compare_bound_int (ar->stride[i], 0) == CMP_GT
4560 || ar->stride[i] == NULL) && comp_start_end == CMP_LT)
4561 || (compare_bound_int (ar->stride[i], 0) == CMP_LT
4562 && comp_start_end == CMP_GT))
4563 {
4564 if (compare_bound (AR_START, as->lower[i]) == CMP_LT)
4565 {
4566 gfc_warning (0, "Lower array reference at %L is out of bounds "
4567 "(%ld < %ld) in dimension %d", &ar->c_where[i],
4568 mpz_get_si (AR_START->value.integer),
4569 mpz_get_si (as->lower[i]->value.integer), i+1);
4570 return true;
4571 }
4572 if (compare_bound (AR_START, as->upper[i]) == CMP_GT)
4573 {
4574 gfc_warning (0, "Lower array reference at %L is out of bounds "
4575 "(%ld > %ld) in dimension %d", &ar->c_where[i],
4576 mpz_get_si (AR_START->value.integer),
4577 mpz_get_si (as->upper[i]->value.integer), i+1);
4578 return true;
4579 }
4580 }
4581
4582 /* If we can compute the highest index of the array section,
4583 then it also has to be between lower and upper. */
4584 mpz_init (last_value);
4585 if (compute_last_value_for_triplet (AR_START, AR_END, ar->stride[i],
4586 last_value))
4587 {
4588 if (compare_bound_mpz_t (as->lower[i], last_value) == CMP_GT)
4589 {
4590 gfc_warning (0, "Upper array reference at %L is out of bounds "
4591 "(%ld < %ld) in dimension %d", &ar->c_where[i],
4592 mpz_get_si (last_value),
4593 mpz_get_si (as->lower[i]->value.integer), i+1);
4594 mpz_clear (last_value);
4595 return true;
4596 }
4597 if (compare_bound_mpz_t (as->upper[i], last_value) == CMP_LT)
4598 {
4599 gfc_warning (0, "Upper array reference at %L is out of bounds "
4600 "(%ld > %ld) in dimension %d", &ar->c_where[i],
4601 mpz_get_si (last_value),
4602 mpz_get_si (as->upper[i]->value.integer), i+1);
4603 mpz_clear (last_value);
4604 return true;
4605 }
4606 }
4607 mpz_clear (last_value);
4608
4609 #undef AR_START
4610 #undef AR_END
4611 }
4612 break;
4613
4614 default:
4615 gfc_internal_error ("check_dimension(): Bad array reference");
4616 }
4617
4618 return true;
4619 }
4620
4621
4622 /* Compare an array reference with an array specification. */
4623
4624 static bool
4625 compare_spec_to_ref (gfc_array_ref *ar)
4626 {
4627 gfc_array_spec *as;
4628 int i;
4629
4630 as = ar->as;
4631 i = as->rank - 1;
4632 /* TODO: Full array sections are only allowed as actual parameters. */
4633 if (as->type == AS_ASSUMED_SIZE
4634 && (/*ar->type == AR_FULL
4635 ||*/ (ar->type == AR_SECTION
4636 && ar->dimen_type[i] == DIMEN_RANGE && ar->end[i] == NULL)))
4637 {
4638 gfc_error ("Rightmost upper bound of assumed size array section "
4639 "not specified at %L", &ar->where);
4640 return false;
4641 }
4642
4643 if (ar->type == AR_FULL)
4644 return true;
4645
4646 if (as->rank != ar->dimen)
4647 {
4648 gfc_error ("Rank mismatch in array reference at %L (%d/%d)",
4649 &ar->where, ar->dimen, as->rank);
4650 return false;
4651 }
4652
4653 /* ar->codimen == 0 is a local array. */
4654 if (as->corank != ar->codimen && ar->codimen != 0)
4655 {
4656 gfc_error ("Coindex rank mismatch in array reference at %L (%d/%d)",
4657 &ar->where, ar->codimen, as->corank);
4658 return false;
4659 }
4660
4661 for (i = 0; i < as->rank; i++)
4662 if (!check_dimension (i, ar, as))
4663 return false;
4664
4665 /* Local access has no coarray spec. */
4666 if (ar->codimen != 0)
4667 for (i = as->rank; i < as->rank + as->corank; i++)
4668 {
4669 if (ar->dimen_type[i] != DIMEN_ELEMENT && !ar->in_allocate
4670 && ar->dimen_type[i] != DIMEN_THIS_IMAGE)
4671 {
4672 gfc_error ("Coindex of codimension %d must be a scalar at %L",
4673 i + 1 - as->rank, &ar->where);
4674 return false;
4675 }
4676 if (!check_dimension (i, ar, as))
4677 return false;
4678 }
4679
4680 return true;
4681 }
4682
4683
4684 /* Resolve one part of an array index. */
4685
4686 static bool
4687 gfc_resolve_index_1 (gfc_expr *index, int check_scalar,
4688 int force_index_integer_kind)
4689 {
4690 gfc_typespec ts;
4691
4692 if (index == NULL)
4693 return true;
4694
4695 if (!gfc_resolve_expr (index))
4696 return false;
4697
4698 if (check_scalar && index->rank != 0)
4699 {
4700 gfc_error ("Array index at %L must be scalar", &index->where);
4701 return false;
4702 }
4703
4704 if (index->ts.type != BT_INTEGER && index->ts.type != BT_REAL)
4705 {
4706 gfc_error ("Array index at %L must be of INTEGER type, found %s",
4707 &index->where, gfc_basic_typename (index->ts.type));
4708 return false;
4709 }
4710
4711 if (index->ts.type == BT_REAL)
4712 if (!gfc_notify_std (GFC_STD_LEGACY, "REAL array index at %L",
4713 &index->where))
4714 return false;
4715
4716 if ((index->ts.kind != gfc_index_integer_kind
4717 && force_index_integer_kind)
4718 || index->ts.type != BT_INTEGER)
4719 {
4720 gfc_clear_ts (&ts);
4721 ts.type = BT_INTEGER;
4722 ts.kind = gfc_index_integer_kind;
4723
4724 gfc_convert_type_warn (index, &ts, 2, 0);
4725 }
4726
4727 return true;
4728 }
4729
4730 /* Resolve one part of an array index. */
4731
4732 bool
4733 gfc_resolve_index (gfc_expr *index, int check_scalar)
4734 {
4735 return gfc_resolve_index_1 (index, check_scalar, 1);
4736 }
4737
4738 /* Resolve a dim argument to an intrinsic function. */
4739
4740 bool
4741 gfc_resolve_dim_arg (gfc_expr *dim)
4742 {
4743 if (dim == NULL)
4744 return true;
4745
4746 if (!gfc_resolve_expr (dim))
4747 return false;
4748
4749 if (dim->rank != 0)
4750 {
4751 gfc_error ("Argument dim at %L must be scalar", &dim->where);
4752 return false;
4753
4754 }
4755
4756 if (dim->ts.type != BT_INTEGER)
4757 {
4758 gfc_error ("Argument dim at %L must be of INTEGER type", &dim->where);
4759 return false;
4760 }
4761
4762 if (dim->ts.kind != gfc_index_integer_kind)
4763 {
4764 gfc_typespec ts;
4765
4766 gfc_clear_ts (&ts);
4767 ts.type = BT_INTEGER;
4768 ts.kind = gfc_index_integer_kind;
4769
4770 gfc_convert_type_warn (dim, &ts, 2, 0);
4771 }
4772
4773 return true;
4774 }
4775
4776 /* Given an expression that contains array references, update those array
4777 references to point to the right array specifications. While this is
4778 filled in during matching, this information is difficult to save and load
4779 in a module, so we take care of it here.
4780
4781 The idea here is that the original array reference comes from the
4782 base symbol. We traverse the list of reference structures, setting
4783 the stored reference to references. Component references can
4784 provide an additional array specification. */
4785
4786 static void
4787 find_array_spec (gfc_expr *e)
4788 {
4789 gfc_array_spec *as;
4790 gfc_component *c;
4791 gfc_ref *ref;
4792 bool class_as = false;
4793
4794 if (e->symtree->n.sym->ts.type == BT_CLASS)
4795 {
4796 as = CLASS_DATA (e->symtree->n.sym)->as;
4797 class_as = true;
4798 }
4799 else
4800 as = e->symtree->n.sym->as;
4801
4802 for (ref = e->ref; ref; ref = ref->next)
4803 switch (ref->type)
4804 {
4805 case REF_ARRAY:
4806 if (as == NULL)
4807 gfc_internal_error ("find_array_spec(): Missing spec");
4808
4809 ref->u.ar.as = as;
4810 as = NULL;
4811 break;
4812
4813 case REF_COMPONENT:
4814 c = ref->u.c.component;
4815 if (c->attr.dimension)
4816 {
4817 if (as != NULL && !(class_as && as == c->as))
4818 gfc_internal_error ("find_array_spec(): unused as(1)");
4819 as = c->as;
4820 }
4821
4822 break;
4823
4824 case REF_SUBSTRING:
4825 case REF_INQUIRY:
4826 break;
4827 }
4828
4829 if (as != NULL)
4830 gfc_internal_error ("find_array_spec(): unused as(2)");
4831 }
4832
4833
4834 /* Resolve an array reference. */
4835
4836 static bool
4837 resolve_array_ref (gfc_array_ref *ar)
4838 {
4839 int i, check_scalar;
4840 gfc_expr *e;
4841
4842 for (i = 0; i < ar->dimen + ar->codimen; i++)
4843 {
4844 check_scalar = ar->dimen_type[i] == DIMEN_RANGE;
4845
4846 /* Do not force gfc_index_integer_kind for the start. We can
4847 do fine with any integer kind. This avoids temporary arrays
4848 created for indexing with a vector. */
4849 if (!gfc_resolve_index_1 (ar->start[i], check_scalar, 0))
4850 return false;
4851 if (!gfc_resolve_index (ar->end[i], check_scalar))
4852 return false;
4853 if (!gfc_resolve_index (ar->stride[i], check_scalar))
4854 return false;
4855
4856 e = ar->start[i];
4857
4858 if (ar->dimen_type[i] == DIMEN_UNKNOWN)
4859 switch (e->rank)
4860 {
4861 case 0:
4862 ar->dimen_type[i] = DIMEN_ELEMENT;
4863 break;
4864
4865 case 1:
4866 ar->dimen_type[i] = DIMEN_VECTOR;
4867 if (e->expr_type == EXPR_VARIABLE
4868 && e->symtree->n.sym->ts.type == BT_DERIVED)
4869 ar->start[i] = gfc_get_parentheses (e);
4870 break;
4871
4872 default:
4873 gfc_error ("Array index at %L is an array of rank %d",
4874 &ar->c_where[i], e->rank);
4875 return false;
4876 }
4877
4878 /* Fill in the upper bound, which may be lower than the
4879 specified one for something like a(2:10:5), which is
4880 identical to a(2:7:5). Only relevant for strides not equal
4881 to one. Don't try a division by zero. */
4882 if (ar->dimen_type[i] == DIMEN_RANGE
4883 && ar->stride[i] != NULL && ar->stride[i]->expr_type == EXPR_CONSTANT
4884 && mpz_cmp_si (ar->stride[i]->value.integer, 1L) != 0
4885 && mpz_cmp_si (ar->stride[i]->value.integer, 0L) != 0)
4886 {
4887 mpz_t size, end;
4888
4889 if (gfc_ref_dimen_size (ar, i, &size, &end))
4890 {
4891 if (ar->end[i] == NULL)
4892 {
4893 ar->end[i] =
4894 gfc_get_constant_expr (BT_INTEGER, gfc_index_integer_kind,
4895 &ar->where);
4896 mpz_set (ar->end[i]->value.integer, end);
4897 }
4898 else if (ar->end[i]->ts.type == BT_INTEGER
4899 && ar->end[i]->expr_type == EXPR_CONSTANT)
4900 {
4901 mpz_set (ar->end[i]->value.integer, end);
4902 }
4903 else
4904 gcc_unreachable ();
4905
4906 mpz_clear (size);
4907 mpz_clear (end);
4908 }
4909 }
4910 }
4911
4912 if (ar->type == AR_FULL)
4913 {
4914 if (ar->as->rank == 0)
4915 ar->type = AR_ELEMENT;
4916
4917 /* Make sure array is the same as array(:,:), this way
4918 we don't need to special case all the time. */
4919 ar->dimen = ar->as->rank;
4920 for (i = 0; i < ar->dimen; i++)
4921 {
4922 ar->dimen_type[i] = DIMEN_RANGE;
4923
4924 gcc_assert (ar->start[i] == NULL);
4925 gcc_assert (ar->end[i] == NULL);
4926 gcc_assert (ar->stride[i] == NULL);
4927 }
4928 }
4929
4930 /* If the reference type is unknown, figure out what kind it is. */
4931
4932 if (ar->type == AR_UNKNOWN)
4933 {
4934 ar->type = AR_ELEMENT;
4935 for (i = 0; i < ar->dimen; i++)
4936 if (ar->dimen_type[i] == DIMEN_RANGE
4937 || ar->dimen_type[i] == DIMEN_VECTOR)
4938 {
4939 ar->type = AR_SECTION;
4940 break;
4941 }
4942 }
4943
4944 if (!ar->as->cray_pointee && !compare_spec_to_ref (ar))
4945 return false;
4946
4947 if (ar->as->corank && ar->codimen == 0)
4948 {
4949 int n;
4950 ar->codimen = ar->as->corank;
4951 for (n = ar->dimen; n < ar->dimen + ar->codimen; n++)
4952 ar->dimen_type[n] = DIMEN_THIS_IMAGE;
4953 }
4954
4955 return true;
4956 }
4957
4958
4959 static bool
4960 resolve_substring (gfc_ref *ref, bool *equal_length)
4961 {
4962 int k = gfc_validate_kind (BT_INTEGER, gfc_charlen_int_kind, false);
4963
4964 if (ref->u.ss.start != NULL)
4965 {
4966 if (!gfc_resolve_expr (ref->u.ss.start))
4967 return false;
4968
4969 if (ref->u.ss.start->ts.type != BT_INTEGER)
4970 {
4971 gfc_error ("Substring start index at %L must be of type INTEGER",
4972 &ref->u.ss.start->where);
4973 return false;
4974 }
4975
4976 if (ref->u.ss.start->rank != 0)
4977 {
4978 gfc_error ("Substring start index at %L must be scalar",
4979 &ref->u.ss.start->where);
4980 return false;
4981 }
4982
4983 if (compare_bound_int (ref->u.ss.start, 1) == CMP_LT
4984 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
4985 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
4986 {
4987 gfc_error ("Substring start index at %L is less than one",
4988 &ref->u.ss.start->where);
4989 return false;
4990 }
4991 }
4992
4993 if (ref->u.ss.end != NULL)
4994 {
4995 if (!gfc_resolve_expr (ref->u.ss.end))
4996 return false;
4997
4998 if (ref->u.ss.end->ts.type != BT_INTEGER)
4999 {
5000 gfc_error ("Substring end index at %L must be of type INTEGER",
5001 &ref->u.ss.end->where);
5002 return false;
5003 }
5004
5005 if (ref->u.ss.end->rank != 0)
5006 {
5007 gfc_error ("Substring end index at %L must be scalar",
5008 &ref->u.ss.end->where);
5009 return false;
5010 }
5011
5012 if (ref->u.ss.length != NULL
5013 && compare_bound (ref->u.ss.end, ref->u.ss.length->length) == CMP_GT
5014 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
5015 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
5016 {
5017 gfc_error ("Substring end index at %L exceeds the string length",
5018 &ref->u.ss.start->where);
5019 return false;
5020 }
5021
5022 if (compare_bound_mpz_t (ref->u.ss.end,
5023 gfc_integer_kinds[k].huge) == CMP_GT
5024 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
5025 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
5026 {
5027 gfc_error ("Substring end index at %L is too large",
5028 &ref->u.ss.end->where);
5029 return false;
5030 }
5031 /* If the substring has the same length as the original
5032 variable, the reference itself can be deleted. */
5033
5034 if (ref->u.ss.length != NULL
5035 && compare_bound (ref->u.ss.end, ref->u.ss.length->length) == CMP_EQ
5036 && compare_bound_int (ref->u.ss.start, 1) == CMP_EQ)
5037 *equal_length = true;
5038 }
5039
5040 return true;
5041 }
5042
5043
5044 /* This function supplies missing substring charlens. */
5045
5046 void
5047 gfc_resolve_substring_charlen (gfc_expr *e)
5048 {
5049 gfc_ref *char_ref;
5050 gfc_expr *start, *end;
5051 gfc_typespec *ts = NULL;
5052 mpz_t diff;
5053
5054 for (char_ref = e->ref; char_ref; char_ref = char_ref->next)
5055 {
5056 if (char_ref->type == REF_SUBSTRING || char_ref->type == REF_INQUIRY)
5057 break;
5058 if (char_ref->type == REF_COMPONENT)
5059 ts = &char_ref->u.c.component->ts;
5060 }
5061
5062 if (!char_ref || char_ref->type == REF_INQUIRY)
5063 return;
5064
5065 gcc_assert (char_ref->next == NULL);
5066
5067 if (e->ts.u.cl)
5068 {
5069 if (e->ts.u.cl->length)
5070 gfc_free_expr (e->ts.u.cl->length);
5071 else if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.dummy)
5072 return;
5073 }
5074
5075 e->ts.type = BT_CHARACTER;
5076 e->ts.kind = gfc_default_character_kind;
5077
5078 if (!e->ts.u.cl)
5079 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
5080
5081 if (char_ref->u.ss.start)
5082 start = gfc_copy_expr (char_ref->u.ss.start);
5083 else
5084 start = gfc_get_int_expr (gfc_charlen_int_kind, NULL, 1);
5085
5086 if (char_ref->u.ss.end)
5087 end = gfc_copy_expr (char_ref->u.ss.end);
5088 else if (e->expr_type == EXPR_VARIABLE)
5089 {
5090 if (!ts)
5091 ts = &e->symtree->n.sym->ts;
5092 end = gfc_copy_expr (ts->u.cl->length);
5093 }
5094 else
5095 end = NULL;
5096
5097 if (!start || !end)
5098 {
5099 gfc_free_expr (start);
5100 gfc_free_expr (end);
5101 return;
5102 }
5103
5104 /* Length = (end - start + 1).
5105 Check first whether it has a constant length. */
5106 if (gfc_dep_difference (end, start, &diff))
5107 {
5108 gfc_expr *len = gfc_get_constant_expr (BT_INTEGER, gfc_charlen_int_kind,
5109 &e->where);
5110
5111 mpz_add_ui (len->value.integer, diff, 1);
5112 mpz_clear (diff);
5113 e->ts.u.cl->length = len;
5114 /* The check for length < 0 is handled below */
5115 }
5116 else
5117 {
5118 e->ts.u.cl->length = gfc_subtract (end, start);
5119 e->ts.u.cl->length = gfc_add (e->ts.u.cl->length,
5120 gfc_get_int_expr (gfc_charlen_int_kind,
5121 NULL, 1));
5122 }
5123
5124 /* F2008, 6.4.1: Both the starting point and the ending point shall
5125 be within the range 1, 2, ..., n unless the starting point exceeds
5126 the ending point, in which case the substring has length zero. */
5127
5128 if (mpz_cmp_si (e->ts.u.cl->length->value.integer, 0) < 0)
5129 mpz_set_si (e->ts.u.cl->length->value.integer, 0);
5130
5131 e->ts.u.cl->length->ts.type = BT_INTEGER;
5132 e->ts.u.cl->length->ts.kind = gfc_charlen_int_kind;
5133
5134 /* Make sure that the length is simplified. */
5135 gfc_simplify_expr (e->ts.u.cl->length, 1);
5136 gfc_resolve_expr (e->ts.u.cl->length);
5137 }
5138
5139
5140 /* Resolve subtype references. */
5141
5142 static bool
5143 resolve_ref (gfc_expr *expr)
5144 {
5145 int current_part_dimension, n_components, seen_part_dimension;
5146 gfc_ref *ref, **prev;
5147 bool equal_length;
5148
5149 for (ref = expr->ref; ref; ref = ref->next)
5150 if (ref->type == REF_ARRAY && ref->u.ar.as == NULL)
5151 {
5152 find_array_spec (expr);
5153 break;
5154 }
5155
5156 for (prev = &expr->ref; *prev != NULL;
5157 prev = *prev == NULL ? prev : &(*prev)->next)
5158 switch ((*prev)->type)
5159 {
5160 case REF_ARRAY:
5161 if (!resolve_array_ref (&(*prev)->u.ar))
5162 return false;
5163 break;
5164
5165 case REF_COMPONENT:
5166 case REF_INQUIRY:
5167 break;
5168
5169 case REF_SUBSTRING:
5170 equal_length = false;
5171 if (!resolve_substring (*prev, &equal_length))
5172 return false;
5173
5174 if (expr->expr_type != EXPR_SUBSTRING && equal_length)
5175 {
5176 /* Remove the reference and move the charlen, if any. */
5177 ref = *prev;
5178 *prev = ref->next;
5179 ref->next = NULL;
5180 expr->ts.u.cl = ref->u.ss.length;
5181 ref->u.ss.length = NULL;
5182 gfc_free_ref_list (ref);
5183 }
5184 break;
5185 }
5186
5187 /* Check constraints on part references. */
5188
5189 current_part_dimension = 0;
5190 seen_part_dimension = 0;
5191 n_components = 0;
5192
5193 for (ref = expr->ref; ref; ref = ref->next)
5194 {
5195 switch (ref->type)
5196 {
5197 case REF_ARRAY:
5198 switch (ref->u.ar.type)
5199 {
5200 case AR_FULL:
5201 /* Coarray scalar. */
5202 if (ref->u.ar.as->rank == 0)
5203 {
5204 current_part_dimension = 0;
5205 break;
5206 }
5207 /* Fall through. */
5208 case AR_SECTION:
5209 current_part_dimension = 1;
5210 break;
5211
5212 case AR_ELEMENT:
5213 current_part_dimension = 0;
5214 break;
5215
5216 case AR_UNKNOWN:
5217 gfc_internal_error ("resolve_ref(): Bad array reference");
5218 }
5219
5220 break;
5221
5222 case REF_COMPONENT:
5223 if (current_part_dimension || seen_part_dimension)
5224 {
5225 /* F03:C614. */
5226 if (ref->u.c.component->attr.pointer
5227 || ref->u.c.component->attr.proc_pointer
5228 || (ref->u.c.component->ts.type == BT_CLASS
5229 && CLASS_DATA (ref->u.c.component)->attr.pointer))
5230 {
5231 gfc_error ("Component to the right of a part reference "
5232 "with nonzero rank must not have the POINTER "
5233 "attribute at %L", &expr->where);
5234 return false;
5235 }
5236 else if (ref->u.c.component->attr.allocatable
5237 || (ref->u.c.component->ts.type == BT_CLASS
5238 && CLASS_DATA (ref->u.c.component)->attr.allocatable))
5239
5240 {
5241 gfc_error ("Component to the right of a part reference "
5242 "with nonzero rank must not have the ALLOCATABLE "
5243 "attribute at %L", &expr->where);
5244 return false;
5245 }
5246 }
5247
5248 n_components++;
5249 break;
5250
5251 case REF_SUBSTRING:
5252 case REF_INQUIRY:
5253 break;
5254 }
5255
5256 if (((ref->type == REF_COMPONENT && n_components > 1)
5257 || ref->next == NULL)
5258 && current_part_dimension
5259 && seen_part_dimension)
5260 {
5261 gfc_error ("Two or more part references with nonzero rank must "
5262 "not be specified at %L", &expr->where);
5263 return false;
5264 }
5265
5266 if (ref->type == REF_COMPONENT)
5267 {
5268 if (current_part_dimension)
5269 seen_part_dimension = 1;
5270
5271 /* reset to make sure */
5272 current_part_dimension = 0;
5273 }
5274 }
5275
5276 return true;
5277 }
5278
5279
5280 /* Given an expression, determine its shape. This is easier than it sounds.
5281 Leaves the shape array NULL if it is not possible to determine the shape. */
5282
5283 static void
5284 expression_shape (gfc_expr *e)
5285 {
5286 mpz_t array[GFC_MAX_DIMENSIONS];
5287 int i;
5288
5289 if (e->rank <= 0 || e->shape != NULL)
5290 return;
5291
5292 for (i = 0; i < e->rank; i++)
5293 if (!gfc_array_dimen_size (e, i, &array[i]))
5294 goto fail;
5295
5296 e->shape = gfc_get_shape (e->rank);
5297
5298 memcpy (e->shape, array, e->rank * sizeof (mpz_t));
5299
5300 return;
5301
5302 fail:
5303 for (i--; i >= 0; i--)
5304 mpz_clear (array[i]);
5305 }
5306
5307
5308 /* Given a variable expression node, compute the rank of the expression by
5309 examining the base symbol and any reference structures it may have. */
5310
5311 void
5312 expression_rank (gfc_expr *e)
5313 {
5314 gfc_ref *ref;
5315 int i, rank;
5316
5317 /* Just to make sure, because EXPR_COMPCALL's also have an e->ref and that
5318 could lead to serious confusion... */
5319 gcc_assert (e->expr_type != EXPR_COMPCALL);
5320
5321 if (e->ref == NULL)
5322 {
5323 if (e->expr_type == EXPR_ARRAY)
5324 goto done;
5325 /* Constructors can have a rank different from one via RESHAPE(). */
5326
5327 if (e->symtree == NULL)
5328 {
5329 e->rank = 0;
5330 goto done;
5331 }
5332
5333 e->rank = (e->symtree->n.sym->as == NULL)
5334 ? 0 : e->symtree->n.sym->as->rank;
5335 goto done;
5336 }
5337
5338 rank = 0;
5339
5340 for (ref = e->ref; ref; ref = ref->next)
5341 {
5342 if (ref->type == REF_COMPONENT && ref->u.c.component->attr.proc_pointer
5343 && ref->u.c.component->attr.function && !ref->next)
5344 rank = ref->u.c.component->as ? ref->u.c.component->as->rank : 0;
5345
5346 if (ref->type != REF_ARRAY)
5347 continue;
5348
5349 if (ref->u.ar.type == AR_FULL)
5350 {
5351 rank = ref->u.ar.as->rank;
5352 break;
5353 }
5354
5355 if (ref->u.ar.type == AR_SECTION)
5356 {
5357 /* Figure out the rank of the section. */
5358 if (rank != 0)
5359 gfc_internal_error ("expression_rank(): Two array specs");
5360
5361 for (i = 0; i < ref->u.ar.dimen; i++)
5362 if (ref->u.ar.dimen_type[i] == DIMEN_RANGE
5363 || ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
5364 rank++;
5365
5366 break;
5367 }
5368 }
5369
5370 e->rank = rank;
5371
5372 done:
5373 expression_shape (e);
5374 }
5375
5376
5377 static void
5378 add_caf_get_intrinsic (gfc_expr *e)
5379 {
5380 gfc_expr *wrapper, *tmp_expr;
5381 gfc_ref *ref;
5382 int n;
5383
5384 for (ref = e->ref; ref; ref = ref->next)
5385 if (ref->type == REF_ARRAY && ref->u.ar.codimen > 0)
5386 break;
5387 if (ref == NULL)
5388 return;
5389
5390 for (n = ref->u.ar.dimen; n < ref->u.ar.dimen + ref->u.ar.codimen; n++)
5391 if (ref->u.ar.dimen_type[n] != DIMEN_ELEMENT)
5392 return;
5393
5394 tmp_expr = XCNEW (gfc_expr);
5395 *tmp_expr = *e;
5396 wrapper = gfc_build_intrinsic_call (gfc_current_ns, GFC_ISYM_CAF_GET,
5397 "caf_get", tmp_expr->where, 1, tmp_expr);
5398 wrapper->ts = e->ts;
5399 wrapper->rank = e->rank;
5400 if (e->rank)
5401 wrapper->shape = gfc_copy_shape (e->shape, e->rank);
5402 *e = *wrapper;
5403 free (wrapper);
5404 }
5405
5406
5407 static void
5408 remove_caf_get_intrinsic (gfc_expr *e)
5409 {
5410 gcc_assert (e->expr_type == EXPR_FUNCTION && e->value.function.isym
5411 && e->value.function.isym->id == GFC_ISYM_CAF_GET);
5412 gfc_expr *e2 = e->value.function.actual->expr;
5413 e->value.function.actual->expr = NULL;
5414 gfc_free_actual_arglist (e->value.function.actual);
5415 gfc_free_shape (&e->shape, e->rank);
5416 *e = *e2;
5417 free (e2);
5418 }
5419
5420
5421 /* Resolve a variable expression. */
5422
5423 static bool
5424 resolve_variable (gfc_expr *e)
5425 {
5426 gfc_symbol *sym;
5427 bool t;
5428
5429 t = true;
5430
5431 if (e->symtree == NULL)
5432 return false;
5433 sym = e->symtree->n.sym;
5434
5435 /* Use same check as for TYPE(*) below; this check has to be before TYPE(*)
5436 as ts.type is set to BT_ASSUMED in resolve_symbol. */
5437 if (sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
5438 {
5439 if (!actual_arg || inquiry_argument)
5440 {
5441 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may only "
5442 "be used as actual argument", sym->name, &e->where);
5443 return false;
5444 }
5445 }
5446 /* TS 29113, 407b. */
5447 else if (e->ts.type == BT_ASSUMED)
5448 {
5449 if (!actual_arg)
5450 {
5451 gfc_error ("Assumed-type variable %s at %L may only be used "
5452 "as actual argument", sym->name, &e->where);
5453 return false;
5454 }
5455 else if (inquiry_argument && !first_actual_arg)
5456 {
5457 /* FIXME: It doesn't work reliably as inquiry_argument is not set
5458 for all inquiry functions in resolve_function; the reason is
5459 that the function-name resolution happens too late in that
5460 function. */
5461 gfc_error ("Assumed-type variable %s at %L as actual argument to "
5462 "an inquiry function shall be the first argument",
5463 sym->name, &e->where);
5464 return false;
5465 }
5466 }
5467 /* TS 29113, C535b. */
5468 else if ((sym->ts.type == BT_CLASS && sym->attr.class_ok
5469 && CLASS_DATA (sym)->as
5470 && CLASS_DATA (sym)->as->type == AS_ASSUMED_RANK)
5471 || (sym->ts.type != BT_CLASS && sym->as
5472 && sym->as->type == AS_ASSUMED_RANK))
5473 {
5474 if (!actual_arg)
5475 {
5476 gfc_error ("Assumed-rank variable %s at %L may only be used as "
5477 "actual argument", sym->name, &e->where);
5478 return false;
5479 }
5480 else if (inquiry_argument && !first_actual_arg)
5481 {
5482 /* FIXME: It doesn't work reliably as inquiry_argument is not set
5483 for all inquiry functions in resolve_function; the reason is
5484 that the function-name resolution happens too late in that
5485 function. */
5486 gfc_error ("Assumed-rank variable %s at %L as actual argument "
5487 "to an inquiry function shall be the first argument",
5488 sym->name, &e->where);
5489 return false;
5490 }
5491 }
5492
5493 if ((sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK)) && e->ref
5494 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
5495 && e->ref->next == NULL))
5496 {
5497 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall not have "
5498 "a subobject reference", sym->name, &e->ref->u.ar.where);
5499 return false;
5500 }
5501 /* TS 29113, 407b. */
5502 else if (e->ts.type == BT_ASSUMED && e->ref
5503 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
5504 && e->ref->next == NULL))
5505 {
5506 gfc_error ("Assumed-type variable %s at %L shall not have a subobject "
5507 "reference", sym->name, &e->ref->u.ar.where);
5508 return false;
5509 }
5510
5511 /* TS 29113, C535b. */
5512 if (((sym->ts.type == BT_CLASS && sym->attr.class_ok
5513 && CLASS_DATA (sym)->as
5514 && CLASS_DATA (sym)->as->type == AS_ASSUMED_RANK)
5515 || (sym->ts.type != BT_CLASS && sym->as
5516 && sym->as->type == AS_ASSUMED_RANK))
5517 && e->ref
5518 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
5519 && e->ref->next == NULL))
5520 {
5521 gfc_error ("Assumed-rank variable %s at %L shall not have a subobject "
5522 "reference", sym->name, &e->ref->u.ar.where);
5523 return false;
5524 }
5525
5526 /* For variables that are used in an associate (target => object) where
5527 the object's basetype is array valued while the target is scalar,
5528 the ts' type of the component refs is still array valued, which
5529 can't be translated that way. */
5530 if (sym->assoc && e->rank == 0 && e->ref && sym->ts.type == BT_CLASS
5531 && sym->assoc->target && sym->assoc->target->ts.type == BT_CLASS
5532 && CLASS_DATA (sym->assoc->target)->as)
5533 {
5534 gfc_ref *ref = e->ref;
5535 while (ref)
5536 {
5537 switch (ref->type)
5538 {
5539 case REF_COMPONENT:
5540 ref->u.c.sym = sym->ts.u.derived;
5541 /* Stop the loop. */
5542 ref = NULL;
5543 break;
5544 default:
5545 ref = ref->next;
5546 break;
5547 }
5548 }
5549 }
5550
5551 /* If this is an associate-name, it may be parsed with an array reference
5552 in error even though the target is scalar. Fail directly in this case.
5553 TODO Understand why class scalar expressions must be excluded. */
5554 if (sym->assoc && !(sym->ts.type == BT_CLASS && e->rank == 0))
5555 {
5556 if (sym->ts.type == BT_CLASS)
5557 gfc_fix_class_refs (e);
5558 if (!sym->attr.dimension && e->ref && e->ref->type == REF_ARRAY)
5559 return false;
5560 else if (sym->attr.dimension && (!e->ref || e->ref->type != REF_ARRAY))
5561 {
5562 /* This can happen because the parser did not detect that the
5563 associate name is an array and the expression had no array
5564 part_ref. */
5565 gfc_ref *ref = gfc_get_ref ();
5566 ref->type = REF_ARRAY;
5567 ref->u.ar = *gfc_get_array_ref();
5568 ref->u.ar.type = AR_FULL;
5569 if (sym->as)
5570 {
5571 ref->u.ar.as = sym->as;
5572 ref->u.ar.dimen = sym->as->rank;
5573 }
5574 ref->next = e->ref;
5575 e->ref = ref;
5576
5577 }
5578 }
5579
5580 if (sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.generic)
5581 sym->ts.u.derived = gfc_find_dt_in_generic (sym->ts.u.derived);
5582
5583 /* On the other hand, the parser may not have known this is an array;
5584 in this case, we have to add a FULL reference. */
5585 if (sym->assoc && sym->attr.dimension && !e->ref)
5586 {
5587 e->ref = gfc_get_ref ();
5588 e->ref->type = REF_ARRAY;
5589 e->ref->u.ar.type = AR_FULL;
5590 e->ref->u.ar.dimen = 0;
5591 }
5592
5593 /* Like above, but for class types, where the checking whether an array
5594 ref is present is more complicated. Furthermore make sure not to add
5595 the full array ref to _vptr or _len refs. */
5596 if (sym->assoc && sym->ts.type == BT_CLASS
5597 && CLASS_DATA (sym)->attr.dimension
5598 && (e->ts.type != BT_DERIVED || !e->ts.u.derived->attr.vtype))
5599 {
5600 gfc_ref *ref, *newref;
5601
5602 newref = gfc_get_ref ();
5603 newref->type = REF_ARRAY;
5604 newref->u.ar.type = AR_FULL;
5605 newref->u.ar.dimen = 0;
5606 /* Because this is an associate var and the first ref either is a ref to
5607 the _data component or not, no traversal of the ref chain is
5608 needed. The array ref needs to be inserted after the _data ref,
5609 or when that is not present, which may happend for polymorphic
5610 types, then at the first position. */
5611 ref = e->ref;
5612 if (!ref)
5613 e->ref = newref;
5614 else if (ref->type == REF_COMPONENT
5615 && strcmp ("_data", ref->u.c.component->name) == 0)
5616 {
5617 if (!ref->next || ref->next->type != REF_ARRAY)
5618 {
5619 newref->next = ref->next;
5620 ref->next = newref;
5621 }
5622 else
5623 /* Array ref present already. */
5624 gfc_free_ref_list (newref);
5625 }
5626 else if (ref->type == REF_ARRAY)
5627 /* Array ref present already. */
5628 gfc_free_ref_list (newref);
5629 else
5630 {
5631 newref->next = ref;
5632 e->ref = newref;
5633 }
5634 }
5635
5636 if (e->ref && !resolve_ref (e))
5637 return false;
5638
5639 if (sym->attr.flavor == FL_PROCEDURE
5640 && (!sym->attr.function
5641 || (sym->attr.function && sym->result
5642 && sym->result->attr.proc_pointer
5643 && !sym->result->attr.function)))
5644 {
5645 e->ts.type = BT_PROCEDURE;
5646 goto resolve_procedure;
5647 }
5648
5649 if (sym->ts.type != BT_UNKNOWN)
5650 gfc_variable_attr (e, &e->ts);
5651 else if (sym->attr.flavor == FL_PROCEDURE
5652 && sym->attr.function && sym->result
5653 && sym->result->ts.type != BT_UNKNOWN
5654 && sym->result->attr.proc_pointer)
5655 e->ts = sym->result->ts;
5656 else
5657 {
5658 /* Must be a simple variable reference. */
5659 if (!gfc_set_default_type (sym, 1, sym->ns))
5660 return false;
5661 e->ts = sym->ts;
5662 }
5663
5664 if (check_assumed_size_reference (sym, e))
5665 return false;
5666
5667 /* Deal with forward references to entries during gfc_resolve_code, to
5668 satisfy, at least partially, 12.5.2.5. */
5669 if (gfc_current_ns->entries
5670 && current_entry_id == sym->entry_id
5671 && cs_base
5672 && cs_base->current
5673 && cs_base->current->op != EXEC_ENTRY)
5674 {
5675 gfc_entry_list *entry;
5676 gfc_formal_arglist *formal;
5677 int n;
5678 bool seen, saved_specification_expr;
5679
5680 /* If the symbol is a dummy... */
5681 if (sym->attr.dummy && sym->ns == gfc_current_ns)
5682 {
5683 entry = gfc_current_ns->entries;
5684 seen = false;
5685
5686 /* ...test if the symbol is a parameter of previous entries. */
5687 for (; entry && entry->id <= current_entry_id; entry = entry->next)
5688 for (formal = entry->sym->formal; formal; formal = formal->next)
5689 {
5690 if (formal->sym && sym->name == formal->sym->name)
5691 {
5692 seen = true;
5693 break;
5694 }
5695 }
5696
5697 /* If it has not been seen as a dummy, this is an error. */
5698 if (!seen)
5699 {
5700 if (specification_expr)
5701 gfc_error ("Variable %qs, used in a specification expression"
5702 ", is referenced at %L before the ENTRY statement "
5703 "in which it is a parameter",
5704 sym->name, &cs_base->current->loc);
5705 else
5706 gfc_error ("Variable %qs is used at %L before the ENTRY "
5707 "statement in which it is a parameter",
5708 sym->name, &cs_base->current->loc);
5709 t = false;
5710 }
5711 }
5712
5713 /* Now do the same check on the specification expressions. */
5714 saved_specification_expr = specification_expr;
5715 specification_expr = true;
5716 if (sym->ts.type == BT_CHARACTER
5717 && !gfc_resolve_expr (sym->ts.u.cl->length))
5718 t = false;
5719
5720 if (sym->as)
5721 for (n = 0; n < sym->as->rank; n++)
5722 {
5723 if (!gfc_resolve_expr (sym->as->lower[n]))
5724 t = false;
5725 if (!gfc_resolve_expr (sym->as->upper[n]))
5726 t = false;
5727 }
5728 specification_expr = saved_specification_expr;
5729
5730 if (t)
5731 /* Update the symbol's entry level. */
5732 sym->entry_id = current_entry_id + 1;
5733 }
5734
5735 /* If a symbol has been host_associated mark it. This is used latter,
5736 to identify if aliasing is possible via host association. */
5737 if (sym->attr.flavor == FL_VARIABLE
5738 && gfc_current_ns->parent
5739 && (gfc_current_ns->parent == sym->ns
5740 || (gfc_current_ns->parent->parent
5741 && gfc_current_ns->parent->parent == sym->ns)))
5742 sym->attr.host_assoc = 1;
5743
5744 if (gfc_current_ns->proc_name
5745 && sym->attr.dimension
5746 && (sym->ns != gfc_current_ns
5747 || sym->attr.use_assoc
5748 || sym->attr.in_common))
5749 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
5750
5751 resolve_procedure:
5752 if (t && !resolve_procedure_expression (e))
5753 t = false;
5754
5755 /* F2008, C617 and C1229. */
5756 if (!inquiry_argument && (e->ts.type == BT_CLASS || e->ts.type == BT_DERIVED)
5757 && gfc_is_coindexed (e))
5758 {
5759 gfc_ref *ref, *ref2 = NULL;
5760
5761 for (ref = e->ref; ref; ref = ref->next)
5762 {
5763 if (ref->type == REF_COMPONENT)
5764 ref2 = ref;
5765 if (ref->type == REF_ARRAY && ref->u.ar.codimen > 0)
5766 break;
5767 }
5768
5769 for ( ; ref; ref = ref->next)
5770 if (ref->type == REF_COMPONENT)
5771 break;
5772
5773 /* Expression itself is not coindexed object. */
5774 if (ref && e->ts.type == BT_CLASS)
5775 {
5776 gfc_error ("Polymorphic subobject of coindexed object at %L",
5777 &e->where);
5778 t = false;
5779 }
5780
5781 /* Expression itself is coindexed object. */
5782 if (ref == NULL)
5783 {
5784 gfc_component *c;
5785 c = ref2 ? ref2->u.c.component : e->symtree->n.sym->components;
5786 for ( ; c; c = c->next)
5787 if (c->attr.allocatable && c->ts.type == BT_CLASS)
5788 {
5789 gfc_error ("Coindexed object with polymorphic allocatable "
5790 "subcomponent at %L", &e->where);
5791 t = false;
5792 break;
5793 }
5794 }
5795 }
5796
5797 if (t)
5798 expression_rank (e);
5799
5800 if (t && flag_coarray == GFC_FCOARRAY_LIB && gfc_is_coindexed (e))
5801 add_caf_get_intrinsic (e);
5802
5803 /* Simplify cases where access to a parameter array results in a
5804 single constant. Suppress errors since those will have been
5805 issued before, as warnings. */
5806 if (e->rank == 0 && sym->as && sym->attr.flavor == FL_PARAMETER)
5807 {
5808 gfc_push_suppress_errors ();
5809 gfc_simplify_expr (e, 1);
5810 gfc_pop_suppress_errors ();
5811 }
5812
5813 return t;
5814 }
5815
5816
5817 /* Checks to see that the correct symbol has been host associated.
5818 The only situation where this arises is that in which a twice
5819 contained function is parsed after the host association is made.
5820 Therefore, on detecting this, change the symbol in the expression
5821 and convert the array reference into an actual arglist if the old
5822 symbol is a variable. */
5823 static bool
5824 check_host_association (gfc_expr *e)
5825 {
5826 gfc_symbol *sym, *old_sym;
5827 gfc_symtree *st;
5828 int n;
5829 gfc_ref *ref;
5830 gfc_actual_arglist *arg, *tail = NULL;
5831 bool retval = e->expr_type == EXPR_FUNCTION;
5832
5833 /* If the expression is the result of substitution in
5834 interface.c(gfc_extend_expr) because there is no way in
5835 which the host association can be wrong. */
5836 if (e->symtree == NULL
5837 || e->symtree->n.sym == NULL
5838 || e->user_operator)
5839 return retval;
5840
5841 old_sym = e->symtree->n.sym;
5842
5843 if (gfc_current_ns->parent
5844 && old_sym->ns != gfc_current_ns)
5845 {
5846 /* Use the 'USE' name so that renamed module symbols are
5847 correctly handled. */
5848 gfc_find_symbol (e->symtree->name, gfc_current_ns, 1, &sym);
5849
5850 if (sym && old_sym != sym
5851 && sym->ts.type == old_sym->ts.type
5852 && sym->attr.flavor == FL_PROCEDURE
5853 && sym->attr.contained)
5854 {
5855 /* Clear the shape, since it might not be valid. */
5856 gfc_free_shape (&e->shape, e->rank);
5857
5858 /* Give the expression the right symtree! */
5859 gfc_find_sym_tree (e->symtree->name, NULL, 1, &st);
5860 gcc_assert (st != NULL);
5861
5862 if (old_sym->attr.flavor == FL_PROCEDURE
5863 || e->expr_type == EXPR_FUNCTION)
5864 {
5865 /* Original was function so point to the new symbol, since
5866 the actual argument list is already attached to the
5867 expression. */
5868 e->value.function.esym = NULL;
5869 e->symtree = st;
5870 }
5871 else
5872 {
5873 /* Original was variable so convert array references into
5874 an actual arglist. This does not need any checking now
5875 since resolve_function will take care of it. */
5876 e->value.function.actual = NULL;
5877 e->expr_type = EXPR_FUNCTION;
5878 e->symtree = st;
5879
5880 /* Ambiguity will not arise if the array reference is not
5881 the last reference. */
5882 for (ref = e->ref; ref; ref = ref->next)
5883 if (ref->type == REF_ARRAY && ref->next == NULL)
5884 break;
5885
5886 gcc_assert (ref->type == REF_ARRAY);
5887
5888 /* Grab the start expressions from the array ref and
5889 copy them into actual arguments. */
5890 for (n = 0; n < ref->u.ar.dimen; n++)
5891 {
5892 arg = gfc_get_actual_arglist ();
5893 arg->expr = gfc_copy_expr (ref->u.ar.start[n]);
5894 if (e->value.function.actual == NULL)
5895 tail = e->value.function.actual = arg;
5896 else
5897 {
5898 tail->next = arg;
5899 tail = arg;
5900 }
5901 }
5902
5903 /* Dump the reference list and set the rank. */
5904 gfc_free_ref_list (e->ref);
5905 e->ref = NULL;
5906 e->rank = sym->as ? sym->as->rank : 0;
5907 }
5908
5909 gfc_resolve_expr (e);
5910 sym->refs++;
5911 }
5912 }
5913 /* This might have changed! */
5914 return e->expr_type == EXPR_FUNCTION;
5915 }
5916
5917
5918 static void
5919 gfc_resolve_character_operator (gfc_expr *e)
5920 {
5921 gfc_expr *op1 = e->value.op.op1;
5922 gfc_expr *op2 = e->value.op.op2;
5923 gfc_expr *e1 = NULL;
5924 gfc_expr *e2 = NULL;
5925
5926 gcc_assert (e->value.op.op == INTRINSIC_CONCAT);
5927
5928 if (op1->ts.u.cl && op1->ts.u.cl->length)
5929 e1 = gfc_copy_expr (op1->ts.u.cl->length);
5930 else if (op1->expr_type == EXPR_CONSTANT)
5931 e1 = gfc_get_int_expr (gfc_charlen_int_kind, NULL,
5932 op1->value.character.length);
5933
5934 if (op2->ts.u.cl && op2->ts.u.cl->length)
5935 e2 = gfc_copy_expr (op2->ts.u.cl->length);
5936 else if (op2->expr_type == EXPR_CONSTANT)
5937 e2 = gfc_get_int_expr (gfc_charlen_int_kind, NULL,
5938 op2->value.character.length);
5939
5940 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
5941
5942 if (!e1 || !e2)
5943 {
5944 gfc_free_expr (e1);
5945 gfc_free_expr (e2);
5946
5947 return;
5948 }
5949
5950 e->ts.u.cl->length = gfc_add (e1, e2);
5951 e->ts.u.cl->length->ts.type = BT_INTEGER;
5952 e->ts.u.cl->length->ts.kind = gfc_charlen_int_kind;
5953 gfc_simplify_expr (e->ts.u.cl->length, 0);
5954 gfc_resolve_expr (e->ts.u.cl->length);
5955
5956 return;
5957 }
5958
5959
5960 /* Ensure that an character expression has a charlen and, if possible, a
5961 length expression. */
5962
5963 static void
5964 fixup_charlen (gfc_expr *e)
5965 {
5966 /* The cases fall through so that changes in expression type and the need
5967 for multiple fixes are picked up. In all circumstances, a charlen should
5968 be available for the middle end to hang a backend_decl on. */
5969 switch (e->expr_type)
5970 {
5971 case EXPR_OP:
5972 gfc_resolve_character_operator (e);
5973 /* FALLTHRU */
5974
5975 case EXPR_ARRAY:
5976 if (e->expr_type == EXPR_ARRAY)
5977 gfc_resolve_character_array_constructor (e);
5978 /* FALLTHRU */
5979
5980 case EXPR_SUBSTRING:
5981 if (!e->ts.u.cl && e->ref)
5982 gfc_resolve_substring_charlen (e);
5983 /* FALLTHRU */
5984
5985 default:
5986 if (!e->ts.u.cl)
5987 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
5988
5989 break;
5990 }
5991 }
5992
5993
5994 /* Update an actual argument to include the passed-object for type-bound
5995 procedures at the right position. */
5996
5997 static gfc_actual_arglist*
5998 update_arglist_pass (gfc_actual_arglist* lst, gfc_expr* po, unsigned argpos,
5999 const char *name)
6000 {
6001 gcc_assert (argpos > 0);
6002
6003 if (argpos == 1)
6004 {
6005 gfc_actual_arglist* result;
6006
6007 result = gfc_get_actual_arglist ();
6008 result->expr = po;
6009 result->next = lst;
6010 if (name)
6011 result->name = name;
6012
6013 return result;
6014 }
6015
6016 if (lst)
6017 lst->next = update_arglist_pass (lst->next, po, argpos - 1, name);
6018 else
6019 lst = update_arglist_pass (NULL, po, argpos - 1, name);
6020 return lst;
6021 }
6022
6023
6024 /* Extract the passed-object from an EXPR_COMPCALL (a copy of it). */
6025
6026 static gfc_expr*
6027 extract_compcall_passed_object (gfc_expr* e)
6028 {
6029 gfc_expr* po;
6030
6031 if (e->expr_type == EXPR_UNKNOWN)
6032 {
6033 gfc_error ("Error in typebound call at %L",
6034 &e->where);
6035 return NULL;
6036 }
6037
6038 gcc_assert (e->expr_type == EXPR_COMPCALL);
6039
6040 if (e->value.compcall.base_object)
6041 po = gfc_copy_expr (e->value.compcall.base_object);
6042 else
6043 {
6044 po = gfc_get_expr ();
6045 po->expr_type = EXPR_VARIABLE;
6046 po->symtree = e->symtree;
6047 po->ref = gfc_copy_ref (e->ref);
6048 po->where = e->where;
6049 }
6050
6051 if (!gfc_resolve_expr (po))
6052 return NULL;
6053
6054 return po;
6055 }
6056
6057
6058 /* Update the arglist of an EXPR_COMPCALL expression to include the
6059 passed-object. */
6060
6061 static bool
6062 update_compcall_arglist (gfc_expr* e)
6063 {
6064 gfc_expr* po;
6065 gfc_typebound_proc* tbp;
6066
6067 tbp = e->value.compcall.tbp;
6068
6069 if (tbp->error)
6070 return false;
6071
6072 po = extract_compcall_passed_object (e);
6073 if (!po)
6074 return false;
6075
6076 if (tbp->nopass || e->value.compcall.ignore_pass)
6077 {
6078 gfc_free_expr (po);
6079 return true;
6080 }
6081
6082 if (tbp->pass_arg_num <= 0)
6083 return false;
6084
6085 e->value.compcall.actual = update_arglist_pass (e->value.compcall.actual, po,
6086 tbp->pass_arg_num,
6087 tbp->pass_arg);
6088
6089 return true;
6090 }
6091
6092
6093 /* Extract the passed object from a PPC call (a copy of it). */
6094
6095 static gfc_expr*
6096 extract_ppc_passed_object (gfc_expr *e)
6097 {
6098 gfc_expr *po;
6099 gfc_ref **ref;
6100
6101 po = gfc_get_expr ();
6102 po->expr_type = EXPR_VARIABLE;
6103 po->symtree = e->symtree;
6104 po->ref = gfc_copy_ref (e->ref);
6105 po->where = e->where;
6106
6107 /* Remove PPC reference. */
6108 ref = &po->ref;
6109 while ((*ref)->next)
6110 ref = &(*ref)->next;
6111 gfc_free_ref_list (*ref);
6112 *ref = NULL;
6113
6114 if (!gfc_resolve_expr (po))
6115 return NULL;
6116
6117 return po;
6118 }
6119
6120
6121 /* Update the actual arglist of a procedure pointer component to include the
6122 passed-object. */
6123
6124 static bool
6125 update_ppc_arglist (gfc_expr* e)
6126 {
6127 gfc_expr* po;
6128 gfc_component *ppc;
6129 gfc_typebound_proc* tb;
6130
6131 ppc = gfc_get_proc_ptr_comp (e);
6132 if (!ppc)
6133 return false;
6134
6135 tb = ppc->tb;
6136
6137 if (tb->error)
6138 return false;
6139 else if (tb->nopass)
6140 return true;
6141
6142 po = extract_ppc_passed_object (e);
6143 if (!po)
6144 return false;
6145
6146 /* F08:R739. */
6147 if (po->rank != 0)
6148 {
6149 gfc_error ("Passed-object at %L must be scalar", &e->where);
6150 return false;
6151 }
6152
6153 /* F08:C611. */
6154 if (po->ts.type == BT_DERIVED && po->ts.u.derived->attr.abstract)
6155 {
6156 gfc_error ("Base object for procedure-pointer component call at %L is of"
6157 " ABSTRACT type %qs", &e->where, po->ts.u.derived->name);
6158 return false;
6159 }
6160
6161 gcc_assert (tb->pass_arg_num > 0);
6162 e->value.compcall.actual = update_arglist_pass (e->value.compcall.actual, po,
6163 tb->pass_arg_num,
6164 tb->pass_arg);
6165
6166 return true;
6167 }
6168
6169
6170 /* Check that the object a TBP is called on is valid, i.e. it must not be
6171 of ABSTRACT type (as in subobject%abstract_parent%tbp()). */
6172
6173 static bool
6174 check_typebound_baseobject (gfc_expr* e)
6175 {
6176 gfc_expr* base;
6177 bool return_value = false;
6178
6179 base = extract_compcall_passed_object (e);
6180 if (!base)
6181 return false;
6182
6183 if (base->ts.type != BT_DERIVED && base->ts.type != BT_CLASS)
6184 {
6185 gfc_error ("Error in typebound call at %L", &e->where);
6186 goto cleanup;
6187 }
6188
6189 if (base->ts.type == BT_CLASS && !gfc_expr_attr (base).class_ok)
6190 return false;
6191
6192 /* F08:C611. */
6193 if (base->ts.type == BT_DERIVED && base->ts.u.derived->attr.abstract)
6194 {
6195 gfc_error ("Base object for type-bound procedure call at %L is of"
6196 " ABSTRACT type %qs", &e->where, base->ts.u.derived->name);
6197 goto cleanup;
6198 }
6199
6200 /* F08:C1230. If the procedure called is NOPASS,
6201 the base object must be scalar. */
6202 if (e->value.compcall.tbp->nopass && base->rank != 0)
6203 {
6204 gfc_error ("Base object for NOPASS type-bound procedure call at %L must"
6205 " be scalar", &e->where);
6206 goto cleanup;
6207 }
6208
6209 return_value = true;
6210
6211 cleanup:
6212 gfc_free_expr (base);
6213 return return_value;
6214 }
6215
6216
6217 /* Resolve a call to a type-bound procedure, either function or subroutine,
6218 statically from the data in an EXPR_COMPCALL expression. The adapted
6219 arglist and the target-procedure symtree are returned. */
6220
6221 static bool
6222 resolve_typebound_static (gfc_expr* e, gfc_symtree** target,
6223 gfc_actual_arglist** actual)
6224 {
6225 gcc_assert (e->expr_type == EXPR_COMPCALL);
6226 gcc_assert (!e->value.compcall.tbp->is_generic);
6227
6228 /* Update the actual arglist for PASS. */
6229 if (!update_compcall_arglist (e))
6230 return false;
6231
6232 *actual = e->value.compcall.actual;
6233 *target = e->value.compcall.tbp->u.specific;
6234
6235 gfc_free_ref_list (e->ref);
6236 e->ref = NULL;
6237 e->value.compcall.actual = NULL;
6238
6239 /* If we find a deferred typebound procedure, check for derived types
6240 that an overriding typebound procedure has not been missed. */
6241 if (e->value.compcall.name
6242 && !e->value.compcall.tbp->non_overridable
6243 && e->value.compcall.base_object
6244 && e->value.compcall.base_object->ts.type == BT_DERIVED)
6245 {
6246 gfc_symtree *st;
6247 gfc_symbol *derived;
6248
6249 /* Use the derived type of the base_object. */
6250 derived = e->value.compcall.base_object->ts.u.derived;
6251 st = NULL;
6252
6253 /* If necessary, go through the inheritance chain. */
6254 while (!st && derived)
6255 {
6256 /* Look for the typebound procedure 'name'. */
6257 if (derived->f2k_derived && derived->f2k_derived->tb_sym_root)
6258 st = gfc_find_symtree (derived->f2k_derived->tb_sym_root,
6259 e->value.compcall.name);
6260 if (!st)
6261 derived = gfc_get_derived_super_type (derived);
6262 }
6263
6264 /* Now find the specific name in the derived type namespace. */
6265 if (st && st->n.tb && st->n.tb->u.specific)
6266 gfc_find_sym_tree (st->n.tb->u.specific->name,
6267 derived->ns, 1, &st);
6268 if (st)
6269 *target = st;
6270 }
6271 return true;
6272 }
6273
6274
6275 /* Get the ultimate declared type from an expression. In addition,
6276 return the last class/derived type reference and the copy of the
6277 reference list. If check_types is set true, derived types are
6278 identified as well as class references. */
6279 static gfc_symbol*
6280 get_declared_from_expr (gfc_ref **class_ref, gfc_ref **new_ref,
6281 gfc_expr *e, bool check_types)
6282 {
6283 gfc_symbol *declared;
6284 gfc_ref *ref;
6285
6286 declared = NULL;
6287 if (class_ref)
6288 *class_ref = NULL;
6289 if (new_ref)
6290 *new_ref = gfc_copy_ref (e->ref);
6291
6292 for (ref = e->ref; ref; ref = ref->next)
6293 {
6294 if (ref->type != REF_COMPONENT)
6295 continue;
6296
6297 if ((ref->u.c.component->ts.type == BT_CLASS
6298 || (check_types && gfc_bt_struct (ref->u.c.component->ts.type)))
6299 && ref->u.c.component->attr.flavor != FL_PROCEDURE)
6300 {
6301 declared = ref->u.c.component->ts.u.derived;
6302 if (class_ref)
6303 *class_ref = ref;
6304 }
6305 }
6306
6307 if (declared == NULL)
6308 declared = e->symtree->n.sym->ts.u.derived;
6309
6310 return declared;
6311 }
6312
6313
6314 /* Given an EXPR_COMPCALL calling a GENERIC typebound procedure, figure out
6315 which of the specific bindings (if any) matches the arglist and transform
6316 the expression into a call of that binding. */
6317
6318 static bool
6319 resolve_typebound_generic_call (gfc_expr* e, const char **name)
6320 {
6321 gfc_typebound_proc* genproc;
6322 const char* genname;
6323 gfc_symtree *st;
6324 gfc_symbol *derived;
6325
6326 gcc_assert (e->expr_type == EXPR_COMPCALL);
6327 genname = e->value.compcall.name;
6328 genproc = e->value.compcall.tbp;
6329
6330 if (!genproc->is_generic)
6331 return true;
6332
6333 /* Try the bindings on this type and in the inheritance hierarchy. */
6334 for (; genproc; genproc = genproc->overridden)
6335 {
6336 gfc_tbp_generic* g;
6337
6338 gcc_assert (genproc->is_generic);
6339 for (g = genproc->u.generic; g; g = g->next)
6340 {
6341 gfc_symbol* target;
6342 gfc_actual_arglist* args;
6343 bool matches;
6344
6345 gcc_assert (g->specific);
6346
6347 if (g->specific->error)
6348 continue;
6349
6350 target = g->specific->u.specific->n.sym;
6351
6352 /* Get the right arglist by handling PASS/NOPASS. */
6353 args = gfc_copy_actual_arglist (e->value.compcall.actual);
6354 if (!g->specific->nopass)
6355 {
6356 gfc_expr* po;
6357 po = extract_compcall_passed_object (e);
6358 if (!po)
6359 {
6360 gfc_free_actual_arglist (args);
6361 return false;
6362 }
6363
6364 gcc_assert (g->specific->pass_arg_num > 0);
6365 gcc_assert (!g->specific->error);
6366 args = update_arglist_pass (args, po, g->specific->pass_arg_num,
6367 g->specific->pass_arg);
6368 }
6369 resolve_actual_arglist (args, target->attr.proc,
6370 is_external_proc (target)
6371 && gfc_sym_get_dummy_args (target) == NULL);
6372
6373 /* Check if this arglist matches the formal. */
6374 matches = gfc_arglist_matches_symbol (&args, target);
6375
6376 /* Clean up and break out of the loop if we've found it. */
6377 gfc_free_actual_arglist (args);
6378 if (matches)
6379 {
6380 e->value.compcall.tbp = g->specific;
6381 genname = g->specific_st->name;
6382 /* Pass along the name for CLASS methods, where the vtab
6383 procedure pointer component has to be referenced. */
6384 if (name)
6385 *name = genname;
6386 goto success;
6387 }
6388 }
6389 }
6390
6391 /* Nothing matching found! */
6392 gfc_error ("Found no matching specific binding for the call to the GENERIC"
6393 " %qs at %L", genname, &e->where);
6394 return false;
6395
6396 success:
6397 /* Make sure that we have the right specific instance for the name. */
6398 derived = get_declared_from_expr (NULL, NULL, e, true);
6399
6400 st = gfc_find_typebound_proc (derived, NULL, genname, true, &e->where);
6401 if (st)
6402 e->value.compcall.tbp = st->n.tb;
6403
6404 return true;
6405 }
6406
6407
6408 /* Resolve a call to a type-bound subroutine. */
6409
6410 static bool
6411 resolve_typebound_call (gfc_code* c, const char **name, bool *overridable)
6412 {
6413 gfc_actual_arglist* newactual;
6414 gfc_symtree* target;
6415
6416 /* Check that's really a SUBROUTINE. */
6417 if (!c->expr1->value.compcall.tbp->subroutine)
6418 {
6419 if (!c->expr1->value.compcall.tbp->is_generic
6420 && c->expr1->value.compcall.tbp->u.specific
6421 && c->expr1->value.compcall.tbp->u.specific->n.sym
6422 && c->expr1->value.compcall.tbp->u.specific->n.sym->attr.subroutine)
6423 c->expr1->value.compcall.tbp->subroutine = 1;
6424 else
6425 {
6426 gfc_error ("%qs at %L should be a SUBROUTINE",
6427 c->expr1->value.compcall.name, &c->loc);
6428 return false;
6429 }
6430 }
6431
6432 if (!check_typebound_baseobject (c->expr1))
6433 return false;
6434
6435 /* Pass along the name for CLASS methods, where the vtab
6436 procedure pointer component has to be referenced. */
6437 if (name)
6438 *name = c->expr1->value.compcall.name;
6439
6440 if (!resolve_typebound_generic_call (c->expr1, name))
6441 return false;
6442
6443 /* Pass along the NON_OVERRIDABLE attribute of the specific TBP. */
6444 if (overridable)
6445 *overridable = !c->expr1->value.compcall.tbp->non_overridable;
6446
6447 /* Transform into an ordinary EXEC_CALL for now. */
6448
6449 if (!resolve_typebound_static (c->expr1, &target, &newactual))
6450 return false;
6451
6452 c->ext.actual = newactual;
6453 c->symtree = target;
6454 c->op = (c->expr1->value.compcall.assign ? EXEC_ASSIGN_CALL : EXEC_CALL);
6455
6456 gcc_assert (!c->expr1->ref && !c->expr1->value.compcall.actual);
6457
6458 gfc_free_expr (c->expr1);
6459 c->expr1 = gfc_get_expr ();
6460 c->expr1->expr_type = EXPR_FUNCTION;
6461 c->expr1->symtree = target;
6462 c->expr1->where = c->loc;
6463
6464 return resolve_call (c);
6465 }
6466
6467
6468 /* Resolve a component-call expression. */
6469 static bool
6470 resolve_compcall (gfc_expr* e, const char **name)
6471 {
6472 gfc_actual_arglist* newactual;
6473 gfc_symtree* target;
6474
6475 /* Check that's really a FUNCTION. */
6476 if (!e->value.compcall.tbp->function)
6477 {
6478 gfc_error ("%qs at %L should be a FUNCTION",
6479 e->value.compcall.name, &e->where);
6480 return false;
6481 }
6482
6483
6484 /* These must not be assign-calls! */
6485 gcc_assert (!e->value.compcall.assign);
6486
6487 if (!check_typebound_baseobject (e))
6488 return false;
6489
6490 /* Pass along the name for CLASS methods, where the vtab
6491 procedure pointer component has to be referenced. */
6492 if (name)
6493 *name = e->value.compcall.name;
6494
6495 if (!resolve_typebound_generic_call (e, name))
6496 return false;
6497 gcc_assert (!e->value.compcall.tbp->is_generic);
6498
6499 /* Take the rank from the function's symbol. */
6500 if (e->value.compcall.tbp->u.specific->n.sym->as)
6501 e->rank = e->value.compcall.tbp->u.specific->n.sym->as->rank;
6502
6503 /* For now, we simply transform it into an EXPR_FUNCTION call with the same
6504 arglist to the TBP's binding target. */
6505
6506 if (!resolve_typebound_static (e, &target, &newactual))
6507 return false;
6508
6509 e->value.function.actual = newactual;
6510 e->value.function.name = NULL;
6511 e->value.function.esym = target->n.sym;
6512 e->value.function.isym = NULL;
6513 e->symtree = target;
6514 e->ts = target->n.sym->ts;
6515 e->expr_type = EXPR_FUNCTION;
6516
6517 /* Resolution is not necessary if this is a class subroutine; this
6518 function only has to identify the specific proc. Resolution of
6519 the call will be done next in resolve_typebound_call. */
6520 return gfc_resolve_expr (e);
6521 }
6522
6523
6524 static bool resolve_fl_derived (gfc_symbol *sym);
6525
6526
6527 /* Resolve a typebound function, or 'method'. First separate all
6528 the non-CLASS references by calling resolve_compcall directly. */
6529
6530 static bool
6531 resolve_typebound_function (gfc_expr* e)
6532 {
6533 gfc_symbol *declared;
6534 gfc_component *c;
6535 gfc_ref *new_ref;
6536 gfc_ref *class_ref;
6537 gfc_symtree *st;
6538 const char *name;
6539 gfc_typespec ts;
6540 gfc_expr *expr;
6541 bool overridable;
6542
6543 st = e->symtree;
6544
6545 /* Deal with typebound operators for CLASS objects. */
6546 expr = e->value.compcall.base_object;
6547 overridable = !e->value.compcall.tbp->non_overridable;
6548 if (expr && expr->ts.type == BT_CLASS && e->value.compcall.name)
6549 {
6550 /* If the base_object is not a variable, the corresponding actual
6551 argument expression must be stored in e->base_expression so
6552 that the corresponding tree temporary can be used as the base
6553 object in gfc_conv_procedure_call. */
6554 if (expr->expr_type != EXPR_VARIABLE)
6555 {
6556 gfc_actual_arglist *args;
6557
6558 for (args= e->value.function.actual; args; args = args->next)
6559 {
6560 if (expr == args->expr)
6561 expr = args->expr;
6562 }
6563 }
6564
6565 /* Since the typebound operators are generic, we have to ensure
6566 that any delays in resolution are corrected and that the vtab
6567 is present. */
6568 ts = expr->ts;
6569 declared = ts.u.derived;
6570 c = gfc_find_component (declared, "_vptr", true, true, NULL);
6571 if (c->ts.u.derived == NULL)
6572 c->ts.u.derived = gfc_find_derived_vtab (declared);
6573
6574 if (!resolve_compcall (e, &name))
6575 return false;
6576
6577 /* Use the generic name if it is there. */
6578 name = name ? name : e->value.function.esym->name;
6579 e->symtree = expr->symtree;
6580 e->ref = gfc_copy_ref (expr->ref);
6581 get_declared_from_expr (&class_ref, NULL, e, false);
6582
6583 /* Trim away the extraneous references that emerge from nested
6584 use of interface.c (extend_expr). */
6585 if (class_ref && class_ref->next)
6586 {
6587 gfc_free_ref_list (class_ref->next);
6588 class_ref->next = NULL;
6589 }
6590 else if (e->ref && !class_ref && expr->ts.type != BT_CLASS)
6591 {
6592 gfc_free_ref_list (e->ref);
6593 e->ref = NULL;
6594 }
6595
6596 gfc_add_vptr_component (e);
6597 gfc_add_component_ref (e, name);
6598 e->value.function.esym = NULL;
6599 if (expr->expr_type != EXPR_VARIABLE)
6600 e->base_expr = expr;
6601 return true;
6602 }
6603
6604 if (st == NULL)
6605 return resolve_compcall (e, NULL);
6606
6607 if (!resolve_ref (e))
6608 return false;
6609
6610 /* Get the CLASS declared type. */
6611 declared = get_declared_from_expr (&class_ref, &new_ref, e, true);
6612
6613 if (!resolve_fl_derived (declared))
6614 return false;
6615
6616 /* Weed out cases of the ultimate component being a derived type. */
6617 if ((class_ref && gfc_bt_struct (class_ref->u.c.component->ts.type))
6618 || (!class_ref && st->n.sym->ts.type != BT_CLASS))
6619 {
6620 gfc_free_ref_list (new_ref);
6621 return resolve_compcall (e, NULL);
6622 }
6623
6624 c = gfc_find_component (declared, "_data", true, true, NULL);
6625
6626 /* Treat the call as if it is a typebound procedure, in order to roll
6627 out the correct name for the specific function. */
6628 if (!resolve_compcall (e, &name))
6629 {
6630 gfc_free_ref_list (new_ref);
6631 return false;
6632 }
6633 ts = e->ts;
6634
6635 if (overridable)
6636 {
6637 /* Convert the expression to a procedure pointer component call. */
6638 e->value.function.esym = NULL;
6639 e->symtree = st;
6640
6641 if (new_ref)
6642 e->ref = new_ref;
6643
6644 /* '_vptr' points to the vtab, which contains the procedure pointers. */
6645 gfc_add_vptr_component (e);
6646 gfc_add_component_ref (e, name);
6647
6648 /* Recover the typespec for the expression. This is really only
6649 necessary for generic procedures, where the additional call
6650 to gfc_add_component_ref seems to throw the collection of the
6651 correct typespec. */
6652 e->ts = ts;
6653 }
6654 else if (new_ref)
6655 gfc_free_ref_list (new_ref);
6656
6657 return true;
6658 }
6659
6660 /* Resolve a typebound subroutine, or 'method'. First separate all
6661 the non-CLASS references by calling resolve_typebound_call
6662 directly. */
6663
6664 static bool
6665 resolve_typebound_subroutine (gfc_code *code)
6666 {
6667 gfc_symbol *declared;
6668 gfc_component *c;
6669 gfc_ref *new_ref;
6670 gfc_ref *class_ref;
6671 gfc_symtree *st;
6672 const char *name;
6673 gfc_typespec ts;
6674 gfc_expr *expr;
6675 bool overridable;
6676
6677 st = code->expr1->symtree;
6678
6679 /* Deal with typebound operators for CLASS objects. */
6680 expr = code->expr1->value.compcall.base_object;
6681 overridable = !code->expr1->value.compcall.tbp->non_overridable;
6682 if (expr && expr->ts.type == BT_CLASS && code->expr1->value.compcall.name)
6683 {
6684 /* If the base_object is not a variable, the corresponding actual
6685 argument expression must be stored in e->base_expression so
6686 that the corresponding tree temporary can be used as the base
6687 object in gfc_conv_procedure_call. */
6688 if (expr->expr_type != EXPR_VARIABLE)
6689 {
6690 gfc_actual_arglist *args;
6691
6692 args= code->expr1->value.function.actual;
6693 for (; args; args = args->next)
6694 if (expr == args->expr)
6695 expr = args->expr;
6696 }
6697
6698 /* Since the typebound operators are generic, we have to ensure
6699 that any delays in resolution are corrected and that the vtab
6700 is present. */
6701 declared = expr->ts.u.derived;
6702 c = gfc_find_component (declared, "_vptr", true, true, NULL);
6703 if (c->ts.u.derived == NULL)
6704 c->ts.u.derived = gfc_find_derived_vtab (declared);
6705
6706 if (!resolve_typebound_call (code, &name, NULL))
6707 return false;
6708
6709 /* Use the generic name if it is there. */
6710 name = name ? name : code->expr1->value.function.esym->name;
6711 code->expr1->symtree = expr->symtree;
6712 code->expr1->ref = gfc_copy_ref (expr->ref);
6713
6714 /* Trim away the extraneous references that emerge from nested
6715 use of interface.c (extend_expr). */
6716 get_declared_from_expr (&class_ref, NULL, code->expr1, false);
6717 if (class_ref && class_ref->next)
6718 {
6719 gfc_free_ref_list (class_ref->next);
6720 class_ref->next = NULL;
6721 }
6722 else if (code->expr1->ref && !class_ref)
6723 {
6724 gfc_free_ref_list (code->expr1->ref);
6725 code->expr1->ref = NULL;
6726 }
6727
6728 /* Now use the procedure in the vtable. */
6729 gfc_add_vptr_component (code->expr1);
6730 gfc_add_component_ref (code->expr1, name);
6731 code->expr1->value.function.esym = NULL;
6732 if (expr->expr_type != EXPR_VARIABLE)
6733 code->expr1->base_expr = expr;
6734 return true;
6735 }
6736
6737 if (st == NULL)
6738 return resolve_typebound_call (code, NULL, NULL);
6739
6740 if (!resolve_ref (code->expr1))
6741 return false;
6742
6743 /* Get the CLASS declared type. */
6744 get_declared_from_expr (&class_ref, &new_ref, code->expr1, true);
6745
6746 /* Weed out cases of the ultimate component being a derived type. */
6747 if ((class_ref && gfc_bt_struct (class_ref->u.c.component->ts.type))
6748 || (!class_ref && st->n.sym->ts.type != BT_CLASS))
6749 {
6750 gfc_free_ref_list (new_ref);
6751 return resolve_typebound_call (code, NULL, NULL);
6752 }
6753
6754 if (!resolve_typebound_call (code, &name, &overridable))
6755 {
6756 gfc_free_ref_list (new_ref);
6757 return false;
6758 }
6759 ts = code->expr1->ts;
6760
6761 if (overridable)
6762 {
6763 /* Convert the expression to a procedure pointer component call. */
6764 code->expr1->value.function.esym = NULL;
6765 code->expr1->symtree = st;
6766
6767 if (new_ref)
6768 code->expr1->ref = new_ref;
6769
6770 /* '_vptr' points to the vtab, which contains the procedure pointers. */
6771 gfc_add_vptr_component (code->expr1);
6772 gfc_add_component_ref (code->expr1, name);
6773
6774 /* Recover the typespec for the expression. This is really only
6775 necessary for generic procedures, where the additional call
6776 to gfc_add_component_ref seems to throw the collection of the
6777 correct typespec. */
6778 code->expr1->ts = ts;
6779 }
6780 else if (new_ref)
6781 gfc_free_ref_list (new_ref);
6782
6783 return true;
6784 }
6785
6786
6787 /* Resolve a CALL to a Procedure Pointer Component (Subroutine). */
6788
6789 static bool
6790 resolve_ppc_call (gfc_code* c)
6791 {
6792 gfc_component *comp;
6793
6794 comp = gfc_get_proc_ptr_comp (c->expr1);
6795 gcc_assert (comp != NULL);
6796
6797 c->resolved_sym = c->expr1->symtree->n.sym;
6798 c->expr1->expr_type = EXPR_VARIABLE;
6799
6800 if (!comp->attr.subroutine)
6801 gfc_add_subroutine (&comp->attr, comp->name, &c->expr1->where);
6802
6803 if (!resolve_ref (c->expr1))
6804 return false;
6805
6806 if (!update_ppc_arglist (c->expr1))
6807 return false;
6808
6809 c->ext.actual = c->expr1->value.compcall.actual;
6810
6811 if (!resolve_actual_arglist (c->ext.actual, comp->attr.proc,
6812 !(comp->ts.interface
6813 && comp->ts.interface->formal)))
6814 return false;
6815
6816 if (!pure_subroutine (comp->ts.interface, comp->name, &c->expr1->where))
6817 return false;
6818
6819 gfc_ppc_use (comp, &c->expr1->value.compcall.actual, &c->expr1->where);
6820
6821 return true;
6822 }
6823
6824
6825 /* Resolve a Function Call to a Procedure Pointer Component (Function). */
6826
6827 static bool
6828 resolve_expr_ppc (gfc_expr* e)
6829 {
6830 gfc_component *comp;
6831
6832 comp = gfc_get_proc_ptr_comp (e);
6833 gcc_assert (comp != NULL);
6834
6835 /* Convert to EXPR_FUNCTION. */
6836 e->expr_type = EXPR_FUNCTION;
6837 e->value.function.isym = NULL;
6838 e->value.function.actual = e->value.compcall.actual;
6839 e->ts = comp->ts;
6840 if (comp->as != NULL)
6841 e->rank = comp->as->rank;
6842
6843 if (!comp->attr.function)
6844 gfc_add_function (&comp->attr, comp->name, &e->where);
6845
6846 if (!resolve_ref (e))
6847 return false;
6848
6849 if (!resolve_actual_arglist (e->value.function.actual, comp->attr.proc,
6850 !(comp->ts.interface
6851 && comp->ts.interface->formal)))
6852 return false;
6853
6854 if (!update_ppc_arglist (e))
6855 return false;
6856
6857 if (!check_pure_function(e))
6858 return false;
6859
6860 gfc_ppc_use (comp, &e->value.compcall.actual, &e->where);
6861
6862 return true;
6863 }
6864
6865
6866 static bool
6867 gfc_is_expandable_expr (gfc_expr *e)
6868 {
6869 gfc_constructor *con;
6870
6871 if (e->expr_type == EXPR_ARRAY)
6872 {
6873 /* Traverse the constructor looking for variables that are flavor
6874 parameter. Parameters must be expanded since they are fully used at
6875 compile time. */
6876 con = gfc_constructor_first (e->value.constructor);
6877 for (; con; con = gfc_constructor_next (con))
6878 {
6879 if (con->expr->expr_type == EXPR_VARIABLE
6880 && con->expr->symtree
6881 && (con->expr->symtree->n.sym->attr.flavor == FL_PARAMETER
6882 || con->expr->symtree->n.sym->attr.flavor == FL_VARIABLE))
6883 return true;
6884 if (con->expr->expr_type == EXPR_ARRAY
6885 && gfc_is_expandable_expr (con->expr))
6886 return true;
6887 }
6888 }
6889
6890 return false;
6891 }
6892
6893
6894 /* Sometimes variables in specification expressions of the result
6895 of module procedures in submodules wind up not being the 'real'
6896 dummy. Find this, if possible, in the namespace of the first
6897 formal argument. */
6898
6899 static void
6900 fixup_unique_dummy (gfc_expr *e)
6901 {
6902 gfc_symtree *st = NULL;
6903 gfc_symbol *s = NULL;
6904
6905 if (e->symtree->n.sym->ns->proc_name
6906 && e->symtree->n.sym->ns->proc_name->formal)
6907 s = e->symtree->n.sym->ns->proc_name->formal->sym;
6908
6909 if (s != NULL)
6910 st = gfc_find_symtree (s->ns->sym_root, e->symtree->n.sym->name);
6911
6912 if (st != NULL
6913 && st->n.sym != NULL
6914 && st->n.sym->attr.dummy)
6915 e->symtree = st;
6916 }
6917
6918 /* Resolve an expression. That is, make sure that types of operands agree
6919 with their operators, intrinsic operators are converted to function calls
6920 for overloaded types and unresolved function references are resolved. */
6921
6922 bool
6923 gfc_resolve_expr (gfc_expr *e)
6924 {
6925 bool t;
6926 bool inquiry_save, actual_arg_save, first_actual_arg_save;
6927
6928 if (e == NULL)
6929 return true;
6930
6931 /* inquiry_argument only applies to variables. */
6932 inquiry_save = inquiry_argument;
6933 actual_arg_save = actual_arg;
6934 first_actual_arg_save = first_actual_arg;
6935
6936 if (e->expr_type != EXPR_VARIABLE)
6937 {
6938 inquiry_argument = false;
6939 actual_arg = false;
6940 first_actual_arg = false;
6941 }
6942 else if (e->symtree != NULL
6943 && *e->symtree->name == '@'
6944 && e->symtree->n.sym->attr.dummy)
6945 {
6946 /* Deal with submodule specification expressions that are not
6947 found to be referenced in module.c(read_cleanup). */
6948 fixup_unique_dummy (e);
6949 }
6950
6951 switch (e->expr_type)
6952 {
6953 case EXPR_OP:
6954 t = resolve_operator (e);
6955 break;
6956
6957 case EXPR_FUNCTION:
6958 case EXPR_VARIABLE:
6959
6960 if (check_host_association (e))
6961 t = resolve_function (e);
6962 else
6963 t = resolve_variable (e);
6964
6965 if (e->ts.type == BT_CHARACTER && e->ts.u.cl == NULL && e->ref
6966 && e->ref->type != REF_SUBSTRING)
6967 gfc_resolve_substring_charlen (e);
6968
6969 break;
6970
6971 case EXPR_COMPCALL:
6972 t = resolve_typebound_function (e);
6973 break;
6974
6975 case EXPR_SUBSTRING:
6976 t = resolve_ref (e);
6977 break;
6978
6979 case EXPR_CONSTANT:
6980 case EXPR_NULL:
6981 t = true;
6982 break;
6983
6984 case EXPR_PPC:
6985 t = resolve_expr_ppc (e);
6986 break;
6987
6988 case EXPR_ARRAY:
6989 t = false;
6990 if (!resolve_ref (e))
6991 break;
6992
6993 t = gfc_resolve_array_constructor (e);
6994 /* Also try to expand a constructor. */
6995 if (t)
6996 {
6997 expression_rank (e);
6998 if (gfc_is_constant_expr (e) || gfc_is_expandable_expr (e))
6999 gfc_expand_constructor (e, false);
7000 }
7001
7002 /* This provides the opportunity for the length of constructors with
7003 character valued function elements to propagate the string length
7004 to the expression. */
7005 if (t && e->ts.type == BT_CHARACTER)
7006 {
7007 /* For efficiency, we call gfc_expand_constructor for BT_CHARACTER
7008 here rather then add a duplicate test for it above. */
7009 gfc_expand_constructor (e, false);
7010 t = gfc_resolve_character_array_constructor (e);
7011 }
7012
7013 break;
7014
7015 case EXPR_STRUCTURE:
7016 t = resolve_ref (e);
7017 if (!t)
7018 break;
7019
7020 t = resolve_structure_cons (e, 0);
7021 if (!t)
7022 break;
7023
7024 t = gfc_simplify_expr (e, 0);
7025 break;
7026
7027 default:
7028 gfc_internal_error ("gfc_resolve_expr(): Bad expression type");
7029 }
7030
7031 if (e->ts.type == BT_CHARACTER && t && !e->ts.u.cl)
7032 fixup_charlen (e);
7033
7034 inquiry_argument = inquiry_save;
7035 actual_arg = actual_arg_save;
7036 first_actual_arg = first_actual_arg_save;
7037
7038 return t;
7039 }
7040
7041
7042 /* Resolve an expression from an iterator. They must be scalar and have
7043 INTEGER or (optionally) REAL type. */
7044
7045 static bool
7046 gfc_resolve_iterator_expr (gfc_expr *expr, bool real_ok,
7047 const char *name_msgid)
7048 {
7049 if (!gfc_resolve_expr (expr))
7050 return false;
7051
7052 if (expr->rank != 0)
7053 {
7054 gfc_error ("%s at %L must be a scalar", _(name_msgid), &expr->where);
7055 return false;
7056 }
7057
7058 if (expr->ts.type != BT_INTEGER)
7059 {
7060 if (expr->ts.type == BT_REAL)
7061 {
7062 if (real_ok)
7063 return gfc_notify_std (GFC_STD_F95_DEL,
7064 "%s at %L must be integer",
7065 _(name_msgid), &expr->where);
7066 else
7067 {
7068 gfc_error ("%s at %L must be INTEGER", _(name_msgid),
7069 &expr->where);
7070 return false;
7071 }
7072 }
7073 else
7074 {
7075 gfc_error ("%s at %L must be INTEGER", _(name_msgid), &expr->where);
7076 return false;
7077 }
7078 }
7079 return true;
7080 }
7081
7082
7083 /* Resolve the expressions in an iterator structure. If REAL_OK is
7084 false allow only INTEGER type iterators, otherwise allow REAL types.
7085 Set own_scope to true for ac-implied-do and data-implied-do as those
7086 have a separate scope such that, e.g., a INTENT(IN) doesn't apply. */
7087
7088 bool
7089 gfc_resolve_iterator (gfc_iterator *iter, bool real_ok, bool own_scope)
7090 {
7091 if (!gfc_resolve_iterator_expr (iter->var, real_ok, "Loop variable"))
7092 return false;
7093
7094 if (!gfc_check_vardef_context (iter->var, false, false, own_scope,
7095 _("iterator variable")))
7096 return false;
7097
7098 if (!gfc_resolve_iterator_expr (iter->start, real_ok,
7099 "Start expression in DO loop"))
7100 return false;
7101
7102 if (!gfc_resolve_iterator_expr (iter->end, real_ok,
7103 "End expression in DO loop"))
7104 return false;
7105
7106 if (!gfc_resolve_iterator_expr (iter->step, real_ok,
7107 "Step expression in DO loop"))
7108 return false;
7109
7110 if (iter->step->expr_type == EXPR_CONSTANT)
7111 {
7112 if ((iter->step->ts.type == BT_INTEGER
7113 && mpz_cmp_ui (iter->step->value.integer, 0) == 0)
7114 || (iter->step->ts.type == BT_REAL
7115 && mpfr_sgn (iter->step->value.real) == 0))
7116 {
7117 gfc_error ("Step expression in DO loop at %L cannot be zero",
7118 &iter->step->where);
7119 return false;
7120 }
7121 }
7122
7123 /* Convert start, end, and step to the same type as var. */
7124 if (iter->start->ts.kind != iter->var->ts.kind
7125 || iter->start->ts.type != iter->var->ts.type)
7126 gfc_convert_type (iter->start, &iter->var->ts, 1);
7127
7128 if (iter->end->ts.kind != iter->var->ts.kind
7129 || iter->end->ts.type != iter->var->ts.type)
7130 gfc_convert_type (iter->end, &iter->var->ts, 1);
7131
7132 if (iter->step->ts.kind != iter->var->ts.kind
7133 || iter->step->ts.type != iter->var->ts.type)
7134 gfc_convert_type (iter->step, &iter->var->ts, 1);
7135
7136 if (iter->start->expr_type == EXPR_CONSTANT
7137 && iter->end->expr_type == EXPR_CONSTANT
7138 && iter->step->expr_type == EXPR_CONSTANT)
7139 {
7140 int sgn, cmp;
7141 if (iter->start->ts.type == BT_INTEGER)
7142 {
7143 sgn = mpz_cmp_ui (iter->step->value.integer, 0);
7144 cmp = mpz_cmp (iter->end->value.integer, iter->start->value.integer);
7145 }
7146 else
7147 {
7148 sgn = mpfr_sgn (iter->step->value.real);
7149 cmp = mpfr_cmp (iter->end->value.real, iter->start->value.real);
7150 }
7151 if (warn_zerotrip && ((sgn > 0 && cmp < 0) || (sgn < 0 && cmp > 0)))
7152 gfc_warning (OPT_Wzerotrip,
7153 "DO loop at %L will be executed zero times",
7154 &iter->step->where);
7155 }
7156
7157 if (iter->end->expr_type == EXPR_CONSTANT
7158 && iter->end->ts.type == BT_INTEGER
7159 && iter->step->expr_type == EXPR_CONSTANT
7160 && iter->step->ts.type == BT_INTEGER
7161 && (mpz_cmp_si (iter->step->value.integer, -1L) == 0
7162 || mpz_cmp_si (iter->step->value.integer, 1L) == 0))
7163 {
7164 bool is_step_positive = mpz_cmp_ui (iter->step->value.integer, 1) == 0;
7165 int k = gfc_validate_kind (BT_INTEGER, iter->end->ts.kind, false);
7166
7167 if (is_step_positive
7168 && mpz_cmp (iter->end->value.integer, gfc_integer_kinds[k].huge) == 0)
7169 gfc_warning (OPT_Wundefined_do_loop,
7170 "DO loop at %L is undefined as it overflows",
7171 &iter->step->where);
7172 else if (!is_step_positive
7173 && mpz_cmp (iter->end->value.integer,
7174 gfc_integer_kinds[k].min_int) == 0)
7175 gfc_warning (OPT_Wundefined_do_loop,
7176 "DO loop at %L is undefined as it underflows",
7177 &iter->step->where);
7178 }
7179
7180 return true;
7181 }
7182
7183
7184 /* Traversal function for find_forall_index. f == 2 signals that
7185 that variable itself is not to be checked - only the references. */
7186
7187 static bool
7188 forall_index (gfc_expr *expr, gfc_symbol *sym, int *f)
7189 {
7190 if (expr->expr_type != EXPR_VARIABLE)
7191 return false;
7192
7193 /* A scalar assignment */
7194 if (!expr->ref || *f == 1)
7195 {
7196 if (expr->symtree->n.sym == sym)
7197 return true;
7198 else
7199 return false;
7200 }
7201
7202 if (*f == 2)
7203 *f = 1;
7204 return false;
7205 }
7206
7207
7208 /* Check whether the FORALL index appears in the expression or not.
7209 Returns true if SYM is found in EXPR. */
7210
7211 bool
7212 find_forall_index (gfc_expr *expr, gfc_symbol *sym, int f)
7213 {
7214 if (gfc_traverse_expr (expr, sym, forall_index, f))
7215 return true;
7216 else
7217 return false;
7218 }
7219
7220
7221 /* Resolve a list of FORALL iterators. The FORALL index-name is constrained
7222 to be a scalar INTEGER variable. The subscripts and stride are scalar
7223 INTEGERs, and if stride is a constant it must be nonzero.
7224 Furthermore "A subscript or stride in a forall-triplet-spec shall
7225 not contain a reference to any index-name in the
7226 forall-triplet-spec-list in which it appears." (7.5.4.1) */
7227
7228 static void
7229 resolve_forall_iterators (gfc_forall_iterator *it)
7230 {
7231 gfc_forall_iterator *iter, *iter2;
7232
7233 for (iter = it; iter; iter = iter->next)
7234 {
7235 if (gfc_resolve_expr (iter->var)
7236 && (iter->var->ts.type != BT_INTEGER || iter->var->rank != 0))
7237 gfc_error ("FORALL index-name at %L must be a scalar INTEGER",
7238 &iter->var->where);
7239
7240 if (gfc_resolve_expr (iter->start)
7241 && (iter->start->ts.type != BT_INTEGER || iter->start->rank != 0))
7242 gfc_error ("FORALL start expression at %L must be a scalar INTEGER",
7243 &iter->start->where);
7244 if (iter->var->ts.kind != iter->start->ts.kind)
7245 gfc_convert_type (iter->start, &iter->var->ts, 1);
7246
7247 if (gfc_resolve_expr (iter->end)
7248 && (iter->end->ts.type != BT_INTEGER || iter->end->rank != 0))
7249 gfc_error ("FORALL end expression at %L must be a scalar INTEGER",
7250 &iter->end->where);
7251 if (iter->var->ts.kind != iter->end->ts.kind)
7252 gfc_convert_type (iter->end, &iter->var->ts, 1);
7253
7254 if (gfc_resolve_expr (iter->stride))
7255 {
7256 if (iter->stride->ts.type != BT_INTEGER || iter->stride->rank != 0)
7257 gfc_error ("FORALL stride expression at %L must be a scalar %s",
7258 &iter->stride->where, "INTEGER");
7259
7260 if (iter->stride->expr_type == EXPR_CONSTANT
7261 && mpz_cmp_ui (iter->stride->value.integer, 0) == 0)
7262 gfc_error ("FORALL stride expression at %L cannot be zero",
7263 &iter->stride->where);
7264 }
7265 if (iter->var->ts.kind != iter->stride->ts.kind)
7266 gfc_convert_type (iter->stride, &iter->var->ts, 1);
7267 }
7268
7269 for (iter = it; iter; iter = iter->next)
7270 for (iter2 = iter; iter2; iter2 = iter2->next)
7271 {
7272 if (find_forall_index (iter2->start, iter->var->symtree->n.sym, 0)
7273 || find_forall_index (iter2->end, iter->var->symtree->n.sym, 0)
7274 || find_forall_index (iter2->stride, iter->var->symtree->n.sym, 0))
7275 gfc_error ("FORALL index %qs may not appear in triplet "
7276 "specification at %L", iter->var->symtree->name,
7277 &iter2->start->where);
7278 }
7279 }
7280
7281
7282 /* Given a pointer to a symbol that is a derived type, see if it's
7283 inaccessible, i.e. if it's defined in another module and the components are
7284 PRIVATE. The search is recursive if necessary. Returns zero if no
7285 inaccessible components are found, nonzero otherwise. */
7286
7287 static int
7288 derived_inaccessible (gfc_symbol *sym)
7289 {
7290 gfc_component *c;
7291
7292 if (sym->attr.use_assoc && sym->attr.private_comp)
7293 return 1;
7294
7295 for (c = sym->components; c; c = c->next)
7296 {
7297 /* Prevent an infinite loop through this function. */
7298 if (c->ts.type == BT_DERIVED && c->attr.pointer
7299 && sym == c->ts.u.derived)
7300 continue;
7301
7302 if (c->ts.type == BT_DERIVED && derived_inaccessible (c->ts.u.derived))
7303 return 1;
7304 }
7305
7306 return 0;
7307 }
7308
7309
7310 /* Resolve the argument of a deallocate expression. The expression must be
7311 a pointer or a full array. */
7312
7313 static bool
7314 resolve_deallocate_expr (gfc_expr *e)
7315 {
7316 symbol_attribute attr;
7317 int allocatable, pointer;
7318 gfc_ref *ref;
7319 gfc_symbol *sym;
7320 gfc_component *c;
7321 bool unlimited;
7322
7323 if (!gfc_resolve_expr (e))
7324 return false;
7325
7326 if (e->expr_type != EXPR_VARIABLE)
7327 goto bad;
7328
7329 sym = e->symtree->n.sym;
7330 unlimited = UNLIMITED_POLY(sym);
7331
7332 if (sym->ts.type == BT_CLASS)
7333 {
7334 allocatable = CLASS_DATA (sym)->attr.allocatable;
7335 pointer = CLASS_DATA (sym)->attr.class_pointer;
7336 }
7337 else
7338 {
7339 allocatable = sym->attr.allocatable;
7340 pointer = sym->attr.pointer;
7341 }
7342 for (ref = e->ref; ref; ref = ref->next)
7343 {
7344 switch (ref->type)
7345 {
7346 case REF_ARRAY:
7347 if (ref->u.ar.type != AR_FULL
7348 && !(ref->u.ar.type == AR_ELEMENT && ref->u.ar.as->rank == 0
7349 && ref->u.ar.codimen && gfc_ref_this_image (ref)))
7350 allocatable = 0;
7351 break;
7352
7353 case REF_COMPONENT:
7354 c = ref->u.c.component;
7355 if (c->ts.type == BT_CLASS)
7356 {
7357 allocatable = CLASS_DATA (c)->attr.allocatable;
7358 pointer = CLASS_DATA (c)->attr.class_pointer;
7359 }
7360 else
7361 {
7362 allocatable = c->attr.allocatable;
7363 pointer = c->attr.pointer;
7364 }
7365 break;
7366
7367 case REF_SUBSTRING:
7368 case REF_INQUIRY:
7369 allocatable = 0;
7370 break;
7371 }
7372 }
7373
7374 attr = gfc_expr_attr (e);
7375
7376 if (allocatable == 0 && attr.pointer == 0 && !unlimited)
7377 {
7378 bad:
7379 gfc_error ("Allocate-object at %L must be ALLOCATABLE or a POINTER",
7380 &e->where);
7381 return false;
7382 }
7383
7384 /* F2008, C644. */
7385 if (gfc_is_coindexed (e))
7386 {
7387 gfc_error ("Coindexed allocatable object at %L", &e->where);
7388 return false;
7389 }
7390
7391 if (pointer
7392 && !gfc_check_vardef_context (e, true, true, false,
7393 _("DEALLOCATE object")))
7394 return false;
7395 if (!gfc_check_vardef_context (e, false, true, false,
7396 _("DEALLOCATE object")))
7397 return false;
7398
7399 return true;
7400 }
7401
7402
7403 /* Returns true if the expression e contains a reference to the symbol sym. */
7404 static bool
7405 sym_in_expr (gfc_expr *e, gfc_symbol *sym, int *f ATTRIBUTE_UNUSED)
7406 {
7407 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym == sym)
7408 return true;
7409
7410 return false;
7411 }
7412
7413 bool
7414 gfc_find_sym_in_expr (gfc_symbol *sym, gfc_expr *e)
7415 {
7416 return gfc_traverse_expr (e, sym, sym_in_expr, 0);
7417 }
7418
7419
7420 /* Given the expression node e for an allocatable/pointer of derived type to be
7421 allocated, get the expression node to be initialized afterwards (needed for
7422 derived types with default initializers, and derived types with allocatable
7423 components that need nullification.) */
7424
7425 gfc_expr *
7426 gfc_expr_to_initialize (gfc_expr *e)
7427 {
7428 gfc_expr *result;
7429 gfc_ref *ref;
7430 int i;
7431
7432 result = gfc_copy_expr (e);
7433
7434 /* Change the last array reference from AR_ELEMENT to AR_FULL. */
7435 for (ref = result->ref; ref; ref = ref->next)
7436 if (ref->type == REF_ARRAY && ref->next == NULL)
7437 {
7438 ref->u.ar.type = AR_FULL;
7439
7440 for (i = 0; i < ref->u.ar.dimen; i++)
7441 ref->u.ar.start[i] = ref->u.ar.end[i] = ref->u.ar.stride[i] = NULL;
7442
7443 break;
7444 }
7445
7446 gfc_free_shape (&result->shape, result->rank);
7447
7448 /* Recalculate rank, shape, etc. */
7449 gfc_resolve_expr (result);
7450 return result;
7451 }
7452
7453
7454 /* If the last ref of an expression is an array ref, return a copy of the
7455 expression with that one removed. Otherwise, a copy of the original
7456 expression. This is used for allocate-expressions and pointer assignment
7457 LHS, where there may be an array specification that needs to be stripped
7458 off when using gfc_check_vardef_context. */
7459
7460 static gfc_expr*
7461 remove_last_array_ref (gfc_expr* e)
7462 {
7463 gfc_expr* e2;
7464 gfc_ref** r;
7465
7466 e2 = gfc_copy_expr (e);
7467 for (r = &e2->ref; *r; r = &(*r)->next)
7468 if ((*r)->type == REF_ARRAY && !(*r)->next)
7469 {
7470 gfc_free_ref_list (*r);
7471 *r = NULL;
7472 break;
7473 }
7474
7475 return e2;
7476 }
7477
7478
7479 /* Used in resolve_allocate_expr to check that a allocation-object and
7480 a source-expr are conformable. This does not catch all possible
7481 cases; in particular a runtime checking is needed. */
7482
7483 static bool
7484 conformable_arrays (gfc_expr *e1, gfc_expr *e2)
7485 {
7486 gfc_ref *tail;
7487 for (tail = e2->ref; tail && tail->next; tail = tail->next);
7488
7489 /* First compare rank. */
7490 if ((tail && e1->rank != tail->u.ar.as->rank)
7491 || (!tail && e1->rank != e2->rank))
7492 {
7493 gfc_error ("Source-expr at %L must be scalar or have the "
7494 "same rank as the allocate-object at %L",
7495 &e1->where, &e2->where);
7496 return false;
7497 }
7498
7499 if (e1->shape)
7500 {
7501 int i;
7502 mpz_t s;
7503
7504 mpz_init (s);
7505
7506 for (i = 0; i < e1->rank; i++)
7507 {
7508 if (tail->u.ar.start[i] == NULL)
7509 break;
7510
7511 if (tail->u.ar.end[i])
7512 {
7513 mpz_set (s, tail->u.ar.end[i]->value.integer);
7514 mpz_sub (s, s, tail->u.ar.start[i]->value.integer);
7515 mpz_add_ui (s, s, 1);
7516 }
7517 else
7518 {
7519 mpz_set (s, tail->u.ar.start[i]->value.integer);
7520 }
7521
7522 if (mpz_cmp (e1->shape[i], s) != 0)
7523 {
7524 gfc_error ("Source-expr at %L and allocate-object at %L must "
7525 "have the same shape", &e1->where, &e2->where);
7526 mpz_clear (s);
7527 return false;
7528 }
7529 }
7530
7531 mpz_clear (s);
7532 }
7533
7534 return true;
7535 }
7536
7537
7538 /* Resolve the expression in an ALLOCATE statement, doing the additional
7539 checks to see whether the expression is OK or not. The expression must
7540 have a trailing array reference that gives the size of the array. */
7541
7542 static bool
7543 resolve_allocate_expr (gfc_expr *e, gfc_code *code, bool *array_alloc_wo_spec)
7544 {
7545 int i, pointer, allocatable, dimension, is_abstract;
7546 int codimension;
7547 bool coindexed;
7548 bool unlimited;
7549 symbol_attribute attr;
7550 gfc_ref *ref, *ref2;
7551 gfc_expr *e2;
7552 gfc_array_ref *ar;
7553 gfc_symbol *sym = NULL;
7554 gfc_alloc *a;
7555 gfc_component *c;
7556 bool t;
7557
7558 /* Mark the utmost array component as being in allocate to allow DIMEN_STAR
7559 checking of coarrays. */
7560 for (ref = e->ref; ref; ref = ref->next)
7561 if (ref->next == NULL)
7562 break;
7563
7564 if (ref && ref->type == REF_ARRAY)
7565 ref->u.ar.in_allocate = true;
7566
7567 if (!gfc_resolve_expr (e))
7568 goto failure;
7569
7570 /* Make sure the expression is allocatable or a pointer. If it is
7571 pointer, the next-to-last reference must be a pointer. */
7572
7573 ref2 = NULL;
7574 if (e->symtree)
7575 sym = e->symtree->n.sym;
7576
7577 /* Check whether ultimate component is abstract and CLASS. */
7578 is_abstract = 0;
7579
7580 /* Is the allocate-object unlimited polymorphic? */
7581 unlimited = UNLIMITED_POLY(e);
7582
7583 if (e->expr_type != EXPR_VARIABLE)
7584 {
7585 allocatable = 0;
7586 attr = gfc_expr_attr (e);
7587 pointer = attr.pointer;
7588 dimension = attr.dimension;
7589 codimension = attr.codimension;
7590 }
7591 else
7592 {
7593 if (sym->ts.type == BT_CLASS && CLASS_DATA (sym))
7594 {
7595 allocatable = CLASS_DATA (sym)->attr.allocatable;
7596 pointer = CLASS_DATA (sym)->attr.class_pointer;
7597 dimension = CLASS_DATA (sym)->attr.dimension;
7598 codimension = CLASS_DATA (sym)->attr.codimension;
7599 is_abstract = CLASS_DATA (sym)->attr.abstract;
7600 }
7601 else
7602 {
7603 allocatable = sym->attr.allocatable;
7604 pointer = sym->attr.pointer;
7605 dimension = sym->attr.dimension;
7606 codimension = sym->attr.codimension;
7607 }
7608
7609 coindexed = false;
7610
7611 for (ref = e->ref; ref; ref2 = ref, ref = ref->next)
7612 {
7613 switch (ref->type)
7614 {
7615 case REF_ARRAY:
7616 if (ref->u.ar.codimen > 0)
7617 {
7618 int n;
7619 for (n = ref->u.ar.dimen;
7620 n < ref->u.ar.dimen + ref->u.ar.codimen; n++)
7621 if (ref->u.ar.dimen_type[n] != DIMEN_THIS_IMAGE)
7622 {
7623 coindexed = true;
7624 break;
7625 }
7626 }
7627
7628 if (ref->next != NULL)
7629 pointer = 0;
7630 break;
7631
7632 case REF_COMPONENT:
7633 /* F2008, C644. */
7634 if (coindexed)
7635 {
7636 gfc_error ("Coindexed allocatable object at %L",
7637 &e->where);
7638 goto failure;
7639 }
7640
7641 c = ref->u.c.component;
7642 if (c->ts.type == BT_CLASS)
7643 {
7644 allocatable = CLASS_DATA (c)->attr.allocatable;
7645 pointer = CLASS_DATA (c)->attr.class_pointer;
7646 dimension = CLASS_DATA (c)->attr.dimension;
7647 codimension = CLASS_DATA (c)->attr.codimension;
7648 is_abstract = CLASS_DATA (c)->attr.abstract;
7649 }
7650 else
7651 {
7652 allocatable = c->attr.allocatable;
7653 pointer = c->attr.pointer;
7654 dimension = c->attr.dimension;
7655 codimension = c->attr.codimension;
7656 is_abstract = c->attr.abstract;
7657 }
7658 break;
7659
7660 case REF_SUBSTRING:
7661 case REF_INQUIRY:
7662 allocatable = 0;
7663 pointer = 0;
7664 break;
7665 }
7666 }
7667 }
7668
7669 /* Check for F08:C628. */
7670 if (allocatable == 0 && pointer == 0 && !unlimited)
7671 {
7672 gfc_error ("Allocate-object at %L must be ALLOCATABLE or a POINTER",
7673 &e->where);
7674 goto failure;
7675 }
7676
7677 /* Some checks for the SOURCE tag. */
7678 if (code->expr3)
7679 {
7680 /* Check F03:C631. */
7681 if (!gfc_type_compatible (&e->ts, &code->expr3->ts))
7682 {
7683 gfc_error ("Type of entity at %L is type incompatible with "
7684 "source-expr at %L", &e->where, &code->expr3->where);
7685 goto failure;
7686 }
7687
7688 /* Check F03:C632 and restriction following Note 6.18. */
7689 if (code->expr3->rank > 0 && !conformable_arrays (code->expr3, e))
7690 goto failure;
7691
7692 /* Check F03:C633. */
7693 if (code->expr3->ts.kind != e->ts.kind && !unlimited)
7694 {
7695 gfc_error ("The allocate-object at %L and the source-expr at %L "
7696 "shall have the same kind type parameter",
7697 &e->where, &code->expr3->where);
7698 goto failure;
7699 }
7700
7701 /* Check F2008, C642. */
7702 if (code->expr3->ts.type == BT_DERIVED
7703 && ((codimension && gfc_expr_attr (code->expr3).lock_comp)
7704 || (code->expr3->ts.u.derived->from_intmod
7705 == INTMOD_ISO_FORTRAN_ENV
7706 && code->expr3->ts.u.derived->intmod_sym_id
7707 == ISOFORTRAN_LOCK_TYPE)))
7708 {
7709 gfc_error ("The source-expr at %L shall neither be of type "
7710 "LOCK_TYPE nor have a LOCK_TYPE component if "
7711 "allocate-object at %L is a coarray",
7712 &code->expr3->where, &e->where);
7713 goto failure;
7714 }
7715
7716 /* Check TS18508, C702/C703. */
7717 if (code->expr3->ts.type == BT_DERIVED
7718 && ((codimension && gfc_expr_attr (code->expr3).event_comp)
7719 || (code->expr3->ts.u.derived->from_intmod
7720 == INTMOD_ISO_FORTRAN_ENV
7721 && code->expr3->ts.u.derived->intmod_sym_id
7722 == ISOFORTRAN_EVENT_TYPE)))
7723 {
7724 gfc_error ("The source-expr at %L shall neither be of type "
7725 "EVENT_TYPE nor have a EVENT_TYPE component if "
7726 "allocate-object at %L is a coarray",
7727 &code->expr3->where, &e->where);
7728 goto failure;
7729 }
7730 }
7731
7732 /* Check F08:C629. */
7733 if (is_abstract && code->ext.alloc.ts.type == BT_UNKNOWN
7734 && !code->expr3)
7735 {
7736 gcc_assert (e->ts.type == BT_CLASS);
7737 gfc_error ("Allocating %s of ABSTRACT base type at %L requires a "
7738 "type-spec or source-expr", sym->name, &e->where);
7739 goto failure;
7740 }
7741
7742 /* Check F08:C632. */
7743 if (code->ext.alloc.ts.type == BT_CHARACTER && !e->ts.deferred
7744 && !UNLIMITED_POLY (e))
7745 {
7746 int cmp;
7747
7748 if (!e->ts.u.cl->length)
7749 goto failure;
7750
7751 cmp = gfc_dep_compare_expr (e->ts.u.cl->length,
7752 code->ext.alloc.ts.u.cl->length);
7753 if (cmp == 1 || cmp == -1 || cmp == -3)
7754 {
7755 gfc_error ("Allocating %s at %L with type-spec requires the same "
7756 "character-length parameter as in the declaration",
7757 sym->name, &e->where);
7758 goto failure;
7759 }
7760 }
7761
7762 /* In the variable definition context checks, gfc_expr_attr is used
7763 on the expression. This is fooled by the array specification
7764 present in e, thus we have to eliminate that one temporarily. */
7765 e2 = remove_last_array_ref (e);
7766 t = true;
7767 if (t && pointer)
7768 t = gfc_check_vardef_context (e2, true, true, false,
7769 _("ALLOCATE object"));
7770 if (t)
7771 t = gfc_check_vardef_context (e2, false, true, false,
7772 _("ALLOCATE object"));
7773 gfc_free_expr (e2);
7774 if (!t)
7775 goto failure;
7776
7777 if (e->ts.type == BT_CLASS && CLASS_DATA (e)->attr.dimension
7778 && !code->expr3 && code->ext.alloc.ts.type == BT_DERIVED)
7779 {
7780 /* For class arrays, the initialization with SOURCE is done
7781 using _copy and trans_call. It is convenient to exploit that
7782 when the allocated type is different from the declared type but
7783 no SOURCE exists by setting expr3. */
7784 code->expr3 = gfc_default_initializer (&code->ext.alloc.ts);
7785 }
7786 else if (flag_coarray != GFC_FCOARRAY_LIB && e->ts.type == BT_DERIVED
7787 && e->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
7788 && e->ts.u.derived->intmod_sym_id == ISOFORTRAN_EVENT_TYPE)
7789 {
7790 /* We have to zero initialize the integer variable. */
7791 code->expr3 = gfc_get_int_expr (gfc_default_integer_kind, &e->where, 0);
7792 }
7793
7794 if (e->ts.type == BT_CLASS && !unlimited && !UNLIMITED_POLY (code->expr3))
7795 {
7796 /* Make sure the vtab symbol is present when
7797 the module variables are generated. */
7798 gfc_typespec ts = e->ts;
7799 if (code->expr3)
7800 ts = code->expr3->ts;
7801 else if (code->ext.alloc.ts.type == BT_DERIVED)
7802 ts = code->ext.alloc.ts;
7803
7804 /* Finding the vtab also publishes the type's symbol. Therefore this
7805 statement is necessary. */
7806 gfc_find_derived_vtab (ts.u.derived);
7807 }
7808 else if (unlimited && !UNLIMITED_POLY (code->expr3))
7809 {
7810 /* Again, make sure the vtab symbol is present when
7811 the module variables are generated. */
7812 gfc_typespec *ts = NULL;
7813 if (code->expr3)
7814 ts = &code->expr3->ts;
7815 else
7816 ts = &code->ext.alloc.ts;
7817
7818 gcc_assert (ts);
7819
7820 /* Finding the vtab also publishes the type's symbol. Therefore this
7821 statement is necessary. */
7822 gfc_find_vtab (ts);
7823 }
7824
7825 if (dimension == 0 && codimension == 0)
7826 goto success;
7827
7828 /* Make sure the last reference node is an array specification. */
7829
7830 if (!ref2 || ref2->type != REF_ARRAY || ref2->u.ar.type == AR_FULL
7831 || (dimension && ref2->u.ar.dimen == 0))
7832 {
7833 /* F08:C633. */
7834 if (code->expr3)
7835 {
7836 if (!gfc_notify_std (GFC_STD_F2008, "Array specification required "
7837 "in ALLOCATE statement at %L", &e->where))
7838 goto failure;
7839 if (code->expr3->rank != 0)
7840 *array_alloc_wo_spec = true;
7841 else
7842 {
7843 gfc_error ("Array specification or array-valued SOURCE= "
7844 "expression required in ALLOCATE statement at %L",
7845 &e->where);
7846 goto failure;
7847 }
7848 }
7849 else
7850 {
7851 gfc_error ("Array specification required in ALLOCATE statement "
7852 "at %L", &e->where);
7853 goto failure;
7854 }
7855 }
7856
7857 /* Make sure that the array section reference makes sense in the
7858 context of an ALLOCATE specification. */
7859
7860 ar = &ref2->u.ar;
7861
7862 if (codimension)
7863 for (i = ar->dimen; i < ar->dimen + ar->codimen; i++)
7864 {
7865 switch (ar->dimen_type[i])
7866 {
7867 case DIMEN_THIS_IMAGE:
7868 gfc_error ("Coarray specification required in ALLOCATE statement "
7869 "at %L", &e->where);
7870 goto failure;
7871
7872 case DIMEN_RANGE:
7873 if (ar->start[i] == 0 || ar->end[i] == 0)
7874 {
7875 /* If ar->stride[i] is NULL, we issued a previous error. */
7876 if (ar->stride[i] == NULL)
7877 gfc_error ("Bad array specification in ALLOCATE statement "
7878 "at %L", &e->where);
7879 goto failure;
7880 }
7881 else if (gfc_dep_compare_expr (ar->start[i], ar->end[i]) == 1)
7882 {
7883 gfc_error ("Upper cobound is less than lower cobound at %L",
7884 &ar->start[i]->where);
7885 goto failure;
7886 }
7887 break;
7888
7889 case DIMEN_ELEMENT:
7890 if (ar->start[i]->expr_type == EXPR_CONSTANT)
7891 {
7892 gcc_assert (ar->start[i]->ts.type == BT_INTEGER);
7893 if (mpz_cmp_si (ar->start[i]->value.integer, 1) < 0)
7894 {
7895 gfc_error ("Upper cobound is less than lower cobound "
7896 "of 1 at %L", &ar->start[i]->where);
7897 goto failure;
7898 }
7899 }
7900 break;
7901
7902 case DIMEN_STAR:
7903 break;
7904
7905 default:
7906 gfc_error ("Bad array specification in ALLOCATE statement at %L",
7907 &e->where);
7908 goto failure;
7909
7910 }
7911 }
7912 for (i = 0; i < ar->dimen; i++)
7913 {
7914 if (ar->type == AR_ELEMENT || ar->type == AR_FULL)
7915 goto check_symbols;
7916
7917 switch (ar->dimen_type[i])
7918 {
7919 case DIMEN_ELEMENT:
7920 break;
7921
7922 case DIMEN_RANGE:
7923 if (ar->start[i] != NULL
7924 && ar->end[i] != NULL
7925 && ar->stride[i] == NULL)
7926 break;
7927
7928 /* Fall through. */
7929
7930 case DIMEN_UNKNOWN:
7931 case DIMEN_VECTOR:
7932 case DIMEN_STAR:
7933 case DIMEN_THIS_IMAGE:
7934 gfc_error ("Bad array specification in ALLOCATE statement at %L",
7935 &e->where);
7936 goto failure;
7937 }
7938
7939 check_symbols:
7940 for (a = code->ext.alloc.list; a; a = a->next)
7941 {
7942 sym = a->expr->symtree->n.sym;
7943
7944 /* TODO - check derived type components. */
7945 if (gfc_bt_struct (sym->ts.type) || sym->ts.type == BT_CLASS)
7946 continue;
7947
7948 if ((ar->start[i] != NULL
7949 && gfc_find_sym_in_expr (sym, ar->start[i]))
7950 || (ar->end[i] != NULL
7951 && gfc_find_sym_in_expr (sym, ar->end[i])))
7952 {
7953 gfc_error ("%qs must not appear in the array specification at "
7954 "%L in the same ALLOCATE statement where it is "
7955 "itself allocated", sym->name, &ar->where);
7956 goto failure;
7957 }
7958 }
7959 }
7960
7961 for (i = ar->dimen; i < ar->codimen + ar->dimen; i++)
7962 {
7963 if (ar->dimen_type[i] == DIMEN_ELEMENT
7964 || ar->dimen_type[i] == DIMEN_RANGE)
7965 {
7966 if (i == (ar->dimen + ar->codimen - 1))
7967 {
7968 gfc_error ("Expected '*' in coindex specification in ALLOCATE "
7969 "statement at %L", &e->where);
7970 goto failure;
7971 }
7972 continue;
7973 }
7974
7975 if (ar->dimen_type[i] == DIMEN_STAR && i == (ar->dimen + ar->codimen - 1)
7976 && ar->stride[i] == NULL)
7977 break;
7978
7979 gfc_error ("Bad coarray specification in ALLOCATE statement at %L",
7980 &e->where);
7981 goto failure;
7982 }
7983
7984 success:
7985 return true;
7986
7987 failure:
7988 return false;
7989 }
7990
7991
7992 static void
7993 resolve_allocate_deallocate (gfc_code *code, const char *fcn)
7994 {
7995 gfc_expr *stat, *errmsg, *pe, *qe;
7996 gfc_alloc *a, *p, *q;
7997
7998 stat = code->expr1;
7999 errmsg = code->expr2;
8000
8001 /* Check the stat variable. */
8002 if (stat)
8003 {
8004 gfc_check_vardef_context (stat, false, false, false,
8005 _("STAT variable"));
8006
8007 if ((stat->ts.type != BT_INTEGER
8008 && !(stat->ref && (stat->ref->type == REF_ARRAY
8009 || stat->ref->type == REF_COMPONENT)))
8010 || stat->rank > 0)
8011 gfc_error ("Stat-variable at %L must be a scalar INTEGER "
8012 "variable", &stat->where);
8013
8014 for (p = code->ext.alloc.list; p; p = p->next)
8015 if (p->expr->symtree->n.sym->name == stat->symtree->n.sym->name)
8016 {
8017 gfc_ref *ref1, *ref2;
8018 bool found = true;
8019
8020 for (ref1 = p->expr->ref, ref2 = stat->ref; ref1 && ref2;
8021 ref1 = ref1->next, ref2 = ref2->next)
8022 {
8023 if (ref1->type != REF_COMPONENT || ref2->type != REF_COMPONENT)
8024 continue;
8025 if (ref1->u.c.component->name != ref2->u.c.component->name)
8026 {
8027 found = false;
8028 break;
8029 }
8030 }
8031
8032 if (found)
8033 {
8034 gfc_error ("Stat-variable at %L shall not be %sd within "
8035 "the same %s statement", &stat->where, fcn, fcn);
8036 break;
8037 }
8038 }
8039 }
8040
8041 /* Check the errmsg variable. */
8042 if (errmsg)
8043 {
8044 if (!stat)
8045 gfc_warning (0, "ERRMSG at %L is useless without a STAT tag",
8046 &errmsg->where);
8047
8048 gfc_check_vardef_context (errmsg, false, false, false,
8049 _("ERRMSG variable"));
8050
8051 /* F18:R928 alloc-opt is ERRMSG = errmsg-variable
8052 F18:R930 errmsg-variable is scalar-default-char-variable
8053 F18:R906 default-char-variable is variable
8054 F18:C906 default-char-variable shall be default character. */
8055 if ((errmsg->ts.type != BT_CHARACTER
8056 && !(errmsg->ref
8057 && (errmsg->ref->type == REF_ARRAY
8058 || errmsg->ref->type == REF_COMPONENT)))
8059 || errmsg->rank > 0
8060 || errmsg->ts.kind != gfc_default_character_kind)
8061 gfc_error ("ERRMSG variable at %L shall be a scalar default CHARACTER "
8062 "variable", &errmsg->where);
8063
8064 for (p = code->ext.alloc.list; p; p = p->next)
8065 if (p->expr->symtree->n.sym->name == errmsg->symtree->n.sym->name)
8066 {
8067 gfc_ref *ref1, *ref2;
8068 bool found = true;
8069
8070 for (ref1 = p->expr->ref, ref2 = errmsg->ref; ref1 && ref2;
8071 ref1 = ref1->next, ref2 = ref2->next)
8072 {
8073 if (ref1->type != REF_COMPONENT || ref2->type != REF_COMPONENT)
8074 continue;
8075 if (ref1->u.c.component->name != ref2->u.c.component->name)
8076 {
8077 found = false;
8078 break;
8079 }
8080 }
8081
8082 if (found)
8083 {
8084 gfc_error ("Errmsg-variable at %L shall not be %sd within "
8085 "the same %s statement", &errmsg->where, fcn, fcn);
8086 break;
8087 }
8088 }
8089 }
8090
8091 /* Check that an allocate-object appears only once in the statement. */
8092
8093 for (p = code->ext.alloc.list; p; p = p->next)
8094 {
8095 pe = p->expr;
8096 for (q = p->next; q; q = q->next)
8097 {
8098 qe = q->expr;
8099 if (pe->symtree->n.sym->name == qe->symtree->n.sym->name)
8100 {
8101 /* This is a potential collision. */
8102 gfc_ref *pr = pe->ref;
8103 gfc_ref *qr = qe->ref;
8104
8105 /* Follow the references until
8106 a) They start to differ, in which case there is no error;
8107 you can deallocate a%b and a%c in a single statement
8108 b) Both of them stop, which is an error
8109 c) One of them stops, which is also an error. */
8110 while (1)
8111 {
8112 if (pr == NULL && qr == NULL)
8113 {
8114 gfc_error ("Allocate-object at %L also appears at %L",
8115 &pe->where, &qe->where);
8116 break;
8117 }
8118 else if (pr != NULL && qr == NULL)
8119 {
8120 gfc_error ("Allocate-object at %L is subobject of"
8121 " object at %L", &pe->where, &qe->where);
8122 break;
8123 }
8124 else if (pr == NULL && qr != NULL)
8125 {
8126 gfc_error ("Allocate-object at %L is subobject of"
8127 " object at %L", &qe->where, &pe->where);
8128 break;
8129 }
8130 /* Here, pr != NULL && qr != NULL */
8131 gcc_assert(pr->type == qr->type);
8132 if (pr->type == REF_ARRAY)
8133 {
8134 /* Handle cases like allocate(v(3)%x(3), v(2)%x(3)),
8135 which are legal. */
8136 gcc_assert (qr->type == REF_ARRAY);
8137
8138 if (pr->next && qr->next)
8139 {
8140 int i;
8141 gfc_array_ref *par = &(pr->u.ar);
8142 gfc_array_ref *qar = &(qr->u.ar);
8143
8144 for (i=0; i<par->dimen; i++)
8145 {
8146 if ((par->start[i] != NULL
8147 || qar->start[i] != NULL)
8148 && gfc_dep_compare_expr (par->start[i],
8149 qar->start[i]) != 0)
8150 goto break_label;
8151 }
8152 }
8153 }
8154 else
8155 {
8156 if (pr->u.c.component->name != qr->u.c.component->name)
8157 break;
8158 }
8159
8160 pr = pr->next;
8161 qr = qr->next;
8162 }
8163 break_label:
8164 ;
8165 }
8166 }
8167 }
8168
8169 if (strcmp (fcn, "ALLOCATE") == 0)
8170 {
8171 bool arr_alloc_wo_spec = false;
8172
8173 /* Resolving the expr3 in the loop over all objects to allocate would
8174 execute loop invariant code for each loop item. Therefore do it just
8175 once here. */
8176 if (code->expr3 && code->expr3->mold
8177 && code->expr3->ts.type == BT_DERIVED)
8178 {
8179 /* Default initialization via MOLD (non-polymorphic). */
8180 gfc_expr *rhs = gfc_default_initializer (&code->expr3->ts);
8181 if (rhs != NULL)
8182 {
8183 gfc_resolve_expr (rhs);
8184 gfc_free_expr (code->expr3);
8185 code->expr3 = rhs;
8186 }
8187 }
8188 for (a = code->ext.alloc.list; a; a = a->next)
8189 resolve_allocate_expr (a->expr, code, &arr_alloc_wo_spec);
8190
8191 if (arr_alloc_wo_spec && code->expr3)
8192 {
8193 /* Mark the allocate to have to take the array specification
8194 from the expr3. */
8195 code->ext.alloc.arr_spec_from_expr3 = 1;
8196 }
8197 }
8198 else
8199 {
8200 for (a = code->ext.alloc.list; a; a = a->next)
8201 resolve_deallocate_expr (a->expr);
8202 }
8203 }
8204
8205
8206 /************ SELECT CASE resolution subroutines ************/
8207
8208 /* Callback function for our mergesort variant. Determines interval
8209 overlaps for CASEs. Return <0 if op1 < op2, 0 for overlap, >0 for
8210 op1 > op2. Assumes we're not dealing with the default case.
8211 We have op1 = (:L), (K:L) or (K:) and op2 = (:N), (M:N) or (M:).
8212 There are nine situations to check. */
8213
8214 static int
8215 compare_cases (const gfc_case *op1, const gfc_case *op2)
8216 {
8217 int retval;
8218
8219 if (op1->low == NULL) /* op1 = (:L) */
8220 {
8221 /* op2 = (:N), so overlap. */
8222 retval = 0;
8223 /* op2 = (M:) or (M:N), L < M */
8224 if (op2->low != NULL
8225 && gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
8226 retval = -1;
8227 }
8228 else if (op1->high == NULL) /* op1 = (K:) */
8229 {
8230 /* op2 = (M:), so overlap. */
8231 retval = 0;
8232 /* op2 = (:N) or (M:N), K > N */
8233 if (op2->high != NULL
8234 && gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
8235 retval = 1;
8236 }
8237 else /* op1 = (K:L) */
8238 {
8239 if (op2->low == NULL) /* op2 = (:N), K > N */
8240 retval = (gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
8241 ? 1 : 0;
8242 else if (op2->high == NULL) /* op2 = (M:), L < M */
8243 retval = (gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
8244 ? -1 : 0;
8245 else /* op2 = (M:N) */
8246 {
8247 retval = 0;
8248 /* L < M */
8249 if (gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
8250 retval = -1;
8251 /* K > N */
8252 else if (gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
8253 retval = 1;
8254 }
8255 }
8256
8257 return retval;
8258 }
8259
8260
8261 /* Merge-sort a double linked case list, detecting overlap in the
8262 process. LIST is the head of the double linked case list before it
8263 is sorted. Returns the head of the sorted list if we don't see any
8264 overlap, or NULL otherwise. */
8265
8266 static gfc_case *
8267 check_case_overlap (gfc_case *list)
8268 {
8269 gfc_case *p, *q, *e, *tail;
8270 int insize, nmerges, psize, qsize, cmp, overlap_seen;
8271
8272 /* If the passed list was empty, return immediately. */
8273 if (!list)
8274 return NULL;
8275
8276 overlap_seen = 0;
8277 insize = 1;
8278
8279 /* Loop unconditionally. The only exit from this loop is a return
8280 statement, when we've finished sorting the case list. */
8281 for (;;)
8282 {
8283 p = list;
8284 list = NULL;
8285 tail = NULL;
8286
8287 /* Count the number of merges we do in this pass. */
8288 nmerges = 0;
8289
8290 /* Loop while there exists a merge to be done. */
8291 while (p)
8292 {
8293 int i;
8294
8295 /* Count this merge. */
8296 nmerges++;
8297
8298 /* Cut the list in two pieces by stepping INSIZE places
8299 forward in the list, starting from P. */
8300 psize = 0;
8301 q = p;
8302 for (i = 0; i < insize; i++)
8303 {
8304 psize++;
8305 q = q->right;
8306 if (!q)
8307 break;
8308 }
8309 qsize = insize;
8310
8311 /* Now we have two lists. Merge them! */
8312 while (psize > 0 || (qsize > 0 && q != NULL))
8313 {
8314 /* See from which the next case to merge comes from. */
8315 if (psize == 0)
8316 {
8317 /* P is empty so the next case must come from Q. */
8318 e = q;
8319 q = q->right;
8320 qsize--;
8321 }
8322 else if (qsize == 0 || q == NULL)
8323 {
8324 /* Q is empty. */
8325 e = p;
8326 p = p->right;
8327 psize--;
8328 }
8329 else
8330 {
8331 cmp = compare_cases (p, q);
8332 if (cmp < 0)
8333 {
8334 /* The whole case range for P is less than the
8335 one for Q. */
8336 e = p;
8337 p = p->right;
8338 psize--;
8339 }
8340 else if (cmp > 0)
8341 {
8342 /* The whole case range for Q is greater than
8343 the case range for P. */
8344 e = q;
8345 q = q->right;
8346 qsize--;
8347 }
8348 else
8349 {
8350 /* The cases overlap, or they are the same
8351 element in the list. Either way, we must
8352 issue an error and get the next case from P. */
8353 /* FIXME: Sort P and Q by line number. */
8354 gfc_error ("CASE label at %L overlaps with CASE "
8355 "label at %L", &p->where, &q->where);
8356 overlap_seen = 1;
8357 e = p;
8358 p = p->right;
8359 psize--;
8360 }
8361 }
8362
8363 /* Add the next element to the merged list. */
8364 if (tail)
8365 tail->right = e;
8366 else
8367 list = e;
8368 e->left = tail;
8369 tail = e;
8370 }
8371
8372 /* P has now stepped INSIZE places along, and so has Q. So
8373 they're the same. */
8374 p = q;
8375 }
8376 tail->right = NULL;
8377
8378 /* If we have done only one merge or none at all, we've
8379 finished sorting the cases. */
8380 if (nmerges <= 1)
8381 {
8382 if (!overlap_seen)
8383 return list;
8384 else
8385 return NULL;
8386 }
8387
8388 /* Otherwise repeat, merging lists twice the size. */
8389 insize *= 2;
8390 }
8391 }
8392
8393
8394 /* Check to see if an expression is suitable for use in a CASE statement.
8395 Makes sure that all case expressions are scalar constants of the same
8396 type. Return false if anything is wrong. */
8397
8398 static bool
8399 validate_case_label_expr (gfc_expr *e, gfc_expr *case_expr)
8400 {
8401 if (e == NULL) return true;
8402
8403 if (e->ts.type != case_expr->ts.type)
8404 {
8405 gfc_error ("Expression in CASE statement at %L must be of type %s",
8406 &e->where, gfc_basic_typename (case_expr->ts.type));
8407 return false;
8408 }
8409
8410 /* C805 (R808) For a given case-construct, each case-value shall be of
8411 the same type as case-expr. For character type, length differences
8412 are allowed, but the kind type parameters shall be the same. */
8413
8414 if (case_expr->ts.type == BT_CHARACTER && e->ts.kind != case_expr->ts.kind)
8415 {
8416 gfc_error ("Expression in CASE statement at %L must be of kind %d",
8417 &e->where, case_expr->ts.kind);
8418 return false;
8419 }
8420
8421 /* Convert the case value kind to that of case expression kind,
8422 if needed */
8423
8424 if (e->ts.kind != case_expr->ts.kind)
8425 gfc_convert_type_warn (e, &case_expr->ts, 2, 0);
8426
8427 if (e->rank != 0)
8428 {
8429 gfc_error ("Expression in CASE statement at %L must be scalar",
8430 &e->where);
8431 return false;
8432 }
8433
8434 return true;
8435 }
8436
8437
8438 /* Given a completely parsed select statement, we:
8439
8440 - Validate all expressions and code within the SELECT.
8441 - Make sure that the selection expression is not of the wrong type.
8442 - Make sure that no case ranges overlap.
8443 - Eliminate unreachable cases and unreachable code resulting from
8444 removing case labels.
8445
8446 The standard does allow unreachable cases, e.g. CASE (5:3). But
8447 they are a hassle for code generation, and to prevent that, we just
8448 cut them out here. This is not necessary for overlapping cases
8449 because they are illegal and we never even try to generate code.
8450
8451 We have the additional caveat that a SELECT construct could have
8452 been a computed GOTO in the source code. Fortunately we can fairly
8453 easily work around that here: The case_expr for a "real" SELECT CASE
8454 is in code->expr1, but for a computed GOTO it is in code->expr2. All
8455 we have to do is make sure that the case_expr is a scalar integer
8456 expression. */
8457
8458 static void
8459 resolve_select (gfc_code *code, bool select_type)
8460 {
8461 gfc_code *body;
8462 gfc_expr *case_expr;
8463 gfc_case *cp, *default_case, *tail, *head;
8464 int seen_unreachable;
8465 int seen_logical;
8466 int ncases;
8467 bt type;
8468 bool t;
8469
8470 if (code->expr1 == NULL)
8471 {
8472 /* This was actually a computed GOTO statement. */
8473 case_expr = code->expr2;
8474 if (case_expr->ts.type != BT_INTEGER|| case_expr->rank != 0)
8475 gfc_error ("Selection expression in computed GOTO statement "
8476 "at %L must be a scalar integer expression",
8477 &case_expr->where);
8478
8479 /* Further checking is not necessary because this SELECT was built
8480 by the compiler, so it should always be OK. Just move the
8481 case_expr from expr2 to expr so that we can handle computed
8482 GOTOs as normal SELECTs from here on. */
8483 code->expr1 = code->expr2;
8484 code->expr2 = NULL;
8485 return;
8486 }
8487
8488 case_expr = code->expr1;
8489 type = case_expr->ts.type;
8490
8491 /* F08:C830. */
8492 if (type != BT_LOGICAL && type != BT_INTEGER && type != BT_CHARACTER)
8493 {
8494 gfc_error ("Argument of SELECT statement at %L cannot be %s",
8495 &case_expr->where, gfc_typename (&case_expr->ts));
8496
8497 /* Punt. Going on here just produce more garbage error messages. */
8498 return;
8499 }
8500
8501 /* F08:R842. */
8502 if (!select_type && case_expr->rank != 0)
8503 {
8504 gfc_error ("Argument of SELECT statement at %L must be a scalar "
8505 "expression", &case_expr->where);
8506
8507 /* Punt. */
8508 return;
8509 }
8510
8511 /* Raise a warning if an INTEGER case value exceeds the range of
8512 the case-expr. Later, all expressions will be promoted to the
8513 largest kind of all case-labels. */
8514
8515 if (type == BT_INTEGER)
8516 for (body = code->block; body; body = body->block)
8517 for (cp = body->ext.block.case_list; cp; cp = cp->next)
8518 {
8519 if (cp->low
8520 && gfc_check_integer_range (cp->low->value.integer,
8521 case_expr->ts.kind) != ARITH_OK)
8522 gfc_warning (0, "Expression in CASE statement at %L is "
8523 "not in the range of %s", &cp->low->where,
8524 gfc_typename (&case_expr->ts));
8525
8526 if (cp->high
8527 && cp->low != cp->high
8528 && gfc_check_integer_range (cp->high->value.integer,
8529 case_expr->ts.kind) != ARITH_OK)
8530 gfc_warning (0, "Expression in CASE statement at %L is "
8531 "not in the range of %s", &cp->high->where,
8532 gfc_typename (&case_expr->ts));
8533 }
8534
8535 /* PR 19168 has a long discussion concerning a mismatch of the kinds
8536 of the SELECT CASE expression and its CASE values. Walk the lists
8537 of case values, and if we find a mismatch, promote case_expr to
8538 the appropriate kind. */
8539
8540 if (type == BT_LOGICAL || type == BT_INTEGER)
8541 {
8542 for (body = code->block; body; body = body->block)
8543 {
8544 /* Walk the case label list. */
8545 for (cp = body->ext.block.case_list; cp; cp = cp->next)
8546 {
8547 /* Intercept the DEFAULT case. It does not have a kind. */
8548 if (cp->low == NULL && cp->high == NULL)
8549 continue;
8550
8551 /* Unreachable case ranges are discarded, so ignore. */
8552 if (cp->low != NULL && cp->high != NULL
8553 && cp->low != cp->high
8554 && gfc_compare_expr (cp->low, cp->high, INTRINSIC_GT) > 0)
8555 continue;
8556
8557 if (cp->low != NULL
8558 && case_expr->ts.kind != gfc_kind_max(case_expr, cp->low))
8559 gfc_convert_type_warn (case_expr, &cp->low->ts, 2, 0);
8560
8561 if (cp->high != NULL
8562 && case_expr->ts.kind != gfc_kind_max(case_expr, cp->high))
8563 gfc_convert_type_warn (case_expr, &cp->high->ts, 2, 0);
8564 }
8565 }
8566 }
8567
8568 /* Assume there is no DEFAULT case. */
8569 default_case = NULL;
8570 head = tail = NULL;
8571 ncases = 0;
8572 seen_logical = 0;
8573
8574 for (body = code->block; body; body = body->block)
8575 {
8576 /* Assume the CASE list is OK, and all CASE labels can be matched. */
8577 t = true;
8578 seen_unreachable = 0;
8579
8580 /* Walk the case label list, making sure that all case labels
8581 are legal. */
8582 for (cp = body->ext.block.case_list; cp; cp = cp->next)
8583 {
8584 /* Count the number of cases in the whole construct. */
8585 ncases++;
8586
8587 /* Intercept the DEFAULT case. */
8588 if (cp->low == NULL && cp->high == NULL)
8589 {
8590 if (default_case != NULL)
8591 {
8592 gfc_error ("The DEFAULT CASE at %L cannot be followed "
8593 "by a second DEFAULT CASE at %L",
8594 &default_case->where, &cp->where);
8595 t = false;
8596 break;
8597 }
8598 else
8599 {
8600 default_case = cp;
8601 continue;
8602 }
8603 }
8604
8605 /* Deal with single value cases and case ranges. Errors are
8606 issued from the validation function. */
8607 if (!validate_case_label_expr (cp->low, case_expr)
8608 || !validate_case_label_expr (cp->high, case_expr))
8609 {
8610 t = false;
8611 break;
8612 }
8613
8614 if (type == BT_LOGICAL
8615 && ((cp->low == NULL || cp->high == NULL)
8616 || cp->low != cp->high))
8617 {
8618 gfc_error ("Logical range in CASE statement at %L is not "
8619 "allowed", &cp->low->where);
8620 t = false;
8621 break;
8622 }
8623
8624 if (type == BT_LOGICAL && cp->low->expr_type == EXPR_CONSTANT)
8625 {
8626 int value;
8627 value = cp->low->value.logical == 0 ? 2 : 1;
8628 if (value & seen_logical)
8629 {
8630 gfc_error ("Constant logical value in CASE statement "
8631 "is repeated at %L",
8632 &cp->low->where);
8633 t = false;
8634 break;
8635 }
8636 seen_logical |= value;
8637 }
8638
8639 if (cp->low != NULL && cp->high != NULL
8640 && cp->low != cp->high
8641 && gfc_compare_expr (cp->low, cp->high, INTRINSIC_GT) > 0)
8642 {
8643 if (warn_surprising)
8644 gfc_warning (OPT_Wsurprising,
8645 "Range specification at %L can never be matched",
8646 &cp->where);
8647
8648 cp->unreachable = 1;
8649 seen_unreachable = 1;
8650 }
8651 else
8652 {
8653 /* If the case range can be matched, it can also overlap with
8654 other cases. To make sure it does not, we put it in a
8655 double linked list here. We sort that with a merge sort
8656 later on to detect any overlapping cases. */
8657 if (!head)
8658 {
8659 head = tail = cp;
8660 head->right = head->left = NULL;
8661 }
8662 else
8663 {
8664 tail->right = cp;
8665 tail->right->left = tail;
8666 tail = tail->right;
8667 tail->right = NULL;
8668 }
8669 }
8670 }
8671
8672 /* It there was a failure in the previous case label, give up
8673 for this case label list. Continue with the next block. */
8674 if (!t)
8675 continue;
8676
8677 /* See if any case labels that are unreachable have been seen.
8678 If so, we eliminate them. This is a bit of a kludge because
8679 the case lists for a single case statement (label) is a
8680 single forward linked lists. */
8681 if (seen_unreachable)
8682 {
8683 /* Advance until the first case in the list is reachable. */
8684 while (body->ext.block.case_list != NULL
8685 && body->ext.block.case_list->unreachable)
8686 {
8687 gfc_case *n = body->ext.block.case_list;
8688 body->ext.block.case_list = body->ext.block.case_list->next;
8689 n->next = NULL;
8690 gfc_free_case_list (n);
8691 }
8692
8693 /* Strip all other unreachable cases. */
8694 if (body->ext.block.case_list)
8695 {
8696 for (cp = body->ext.block.case_list; cp && cp->next; cp = cp->next)
8697 {
8698 if (cp->next->unreachable)
8699 {
8700 gfc_case *n = cp->next;
8701 cp->next = cp->next->next;
8702 n->next = NULL;
8703 gfc_free_case_list (n);
8704 }
8705 }
8706 }
8707 }
8708 }
8709
8710 /* See if there were overlapping cases. If the check returns NULL,
8711 there was overlap. In that case we don't do anything. If head
8712 is non-NULL, we prepend the DEFAULT case. The sorted list can
8713 then used during code generation for SELECT CASE constructs with
8714 a case expression of a CHARACTER type. */
8715 if (head)
8716 {
8717 head = check_case_overlap (head);
8718
8719 /* Prepend the default_case if it is there. */
8720 if (head != NULL && default_case)
8721 {
8722 default_case->left = NULL;
8723 default_case->right = head;
8724 head->left = default_case;
8725 }
8726 }
8727
8728 /* Eliminate dead blocks that may be the result if we've seen
8729 unreachable case labels for a block. */
8730 for (body = code; body && body->block; body = body->block)
8731 {
8732 if (body->block->ext.block.case_list == NULL)
8733 {
8734 /* Cut the unreachable block from the code chain. */
8735 gfc_code *c = body->block;
8736 body->block = c->block;
8737
8738 /* Kill the dead block, but not the blocks below it. */
8739 c->block = NULL;
8740 gfc_free_statements (c);
8741 }
8742 }
8743
8744 /* More than two cases is legal but insane for logical selects.
8745 Issue a warning for it. */
8746 if (warn_surprising && type == BT_LOGICAL && ncases > 2)
8747 gfc_warning (OPT_Wsurprising,
8748 "Logical SELECT CASE block at %L has more that two cases",
8749 &code->loc);
8750 }
8751
8752
8753 /* Check if a derived type is extensible. */
8754
8755 bool
8756 gfc_type_is_extensible (gfc_symbol *sym)
8757 {
8758 return !(sym->attr.is_bind_c || sym->attr.sequence
8759 || (sym->attr.is_class
8760 && sym->components->ts.u.derived->attr.unlimited_polymorphic));
8761 }
8762
8763
8764 static void
8765 resolve_types (gfc_namespace *ns);
8766
8767 /* Resolve an associate-name: Resolve target and ensure the type-spec is
8768 correct as well as possibly the array-spec. */
8769
8770 static void
8771 resolve_assoc_var (gfc_symbol* sym, bool resolve_target)
8772 {
8773 gfc_expr* target;
8774
8775 gcc_assert (sym->assoc);
8776 gcc_assert (sym->attr.flavor == FL_VARIABLE);
8777
8778 /* If this is for SELECT TYPE, the target may not yet be set. In that
8779 case, return. Resolution will be called later manually again when
8780 this is done. */
8781 target = sym->assoc->target;
8782 if (!target)
8783 return;
8784 gcc_assert (!sym->assoc->dangling);
8785
8786 if (resolve_target && !gfc_resolve_expr (target))
8787 return;
8788
8789 /* For variable targets, we get some attributes from the target. */
8790 if (target->expr_type == EXPR_VARIABLE)
8791 {
8792 gfc_symbol* tsym;
8793
8794 gcc_assert (target->symtree);
8795 tsym = target->symtree->n.sym;
8796
8797 sym->attr.asynchronous = tsym->attr.asynchronous;
8798 sym->attr.volatile_ = tsym->attr.volatile_;
8799
8800 sym->attr.target = tsym->attr.target
8801 || gfc_expr_attr (target).pointer;
8802 if (is_subref_array (target))
8803 sym->attr.subref_array_pointer = 1;
8804 }
8805
8806 if (target->expr_type == EXPR_NULL)
8807 {
8808 gfc_error ("Selector at %L cannot be NULL()", &target->where);
8809 return;
8810 }
8811 else if (target->ts.type == BT_UNKNOWN)
8812 {
8813 gfc_error ("Selector at %L has no type", &target->where);
8814 return;
8815 }
8816
8817 /* Get type if this was not already set. Note that it can be
8818 some other type than the target in case this is a SELECT TYPE
8819 selector! So we must not update when the type is already there. */
8820 if (sym->ts.type == BT_UNKNOWN)
8821 sym->ts = target->ts;
8822
8823 gcc_assert (sym->ts.type != BT_UNKNOWN);
8824
8825 /* See if this is a valid association-to-variable. */
8826 sym->assoc->variable = (target->expr_type == EXPR_VARIABLE
8827 && !gfc_has_vector_subscript (target));
8828
8829 /* Finally resolve if this is an array or not. */
8830 if (sym->attr.dimension && target->rank == 0)
8831 {
8832 /* primary.c makes the assumption that a reference to an associate
8833 name followed by a left parenthesis is an array reference. */
8834 if (sym->ts.type != BT_CHARACTER)
8835 gfc_error ("Associate-name %qs at %L is used as array",
8836 sym->name, &sym->declared_at);
8837 sym->attr.dimension = 0;
8838 return;
8839 }
8840
8841
8842 /* We cannot deal with class selectors that need temporaries. */
8843 if (target->ts.type == BT_CLASS
8844 && gfc_ref_needs_temporary_p (target->ref))
8845 {
8846 gfc_error ("CLASS selector at %L needs a temporary which is not "
8847 "yet implemented", &target->where);
8848 return;
8849 }
8850
8851 if (target->ts.type == BT_CLASS)
8852 gfc_fix_class_refs (target);
8853
8854 if (target->rank != 0)
8855 {
8856 gfc_array_spec *as;
8857 /* The rank may be incorrectly guessed at parsing, therefore make sure
8858 it is corrected now. */
8859 if (sym->ts.type != BT_CLASS && (!sym->as || sym->assoc->rankguessed))
8860 {
8861 if (!sym->as)
8862 sym->as = gfc_get_array_spec ();
8863 as = sym->as;
8864 as->rank = target->rank;
8865 as->type = AS_DEFERRED;
8866 as->corank = gfc_get_corank (target);
8867 sym->attr.dimension = 1;
8868 if (as->corank != 0)
8869 sym->attr.codimension = 1;
8870 }
8871 else if (sym->ts.type == BT_CLASS && (!CLASS_DATA (sym)->as || sym->assoc->rankguessed))
8872 {
8873 if (!CLASS_DATA (sym)->as)
8874 CLASS_DATA (sym)->as = gfc_get_array_spec ();
8875 as = CLASS_DATA (sym)->as;
8876 as->rank = target->rank;
8877 as->type = AS_DEFERRED;
8878 as->corank = gfc_get_corank (target);
8879 CLASS_DATA (sym)->attr.dimension = 1;
8880 if (as->corank != 0)
8881 CLASS_DATA (sym)->attr.codimension = 1;
8882 }
8883 }
8884 else
8885 {
8886 /* target's rank is 0, but the type of the sym is still array valued,
8887 which has to be corrected. */
8888 if (sym->ts.type == BT_CLASS
8889 && CLASS_DATA (sym) && CLASS_DATA (sym)->as)
8890 {
8891 gfc_array_spec *as;
8892 symbol_attribute attr;
8893 /* The associated variable's type is still the array type
8894 correct this now. */
8895 gfc_typespec *ts = &target->ts;
8896 gfc_ref *ref;
8897 gfc_component *c;
8898 for (ref = target->ref; ref != NULL; ref = ref->next)
8899 {
8900 switch (ref->type)
8901 {
8902 case REF_COMPONENT:
8903 ts = &ref->u.c.component->ts;
8904 break;
8905 case REF_ARRAY:
8906 if (ts->type == BT_CLASS)
8907 ts = &ts->u.derived->components->ts;
8908 break;
8909 default:
8910 break;
8911 }
8912 }
8913 /* Create a scalar instance of the current class type. Because the
8914 rank of a class array goes into its name, the type has to be
8915 rebuild. The alternative of (re-)setting just the attributes
8916 and as in the current type, destroys the type also in other
8917 places. */
8918 as = NULL;
8919 sym->ts = *ts;
8920 sym->ts.type = BT_CLASS;
8921 attr = CLASS_DATA (sym)->attr;
8922 attr.class_ok = 0;
8923 attr.associate_var = 1;
8924 attr.dimension = attr.codimension = 0;
8925 attr.class_pointer = 1;
8926 if (!gfc_build_class_symbol (&sym->ts, &attr, &as))
8927 gcc_unreachable ();
8928 /* Make sure the _vptr is set. */
8929 c = gfc_find_component (sym->ts.u.derived, "_vptr", true, true, NULL);
8930 if (c->ts.u.derived == NULL)
8931 c->ts.u.derived = gfc_find_derived_vtab (sym->ts.u.derived);
8932 CLASS_DATA (sym)->attr.pointer = 1;
8933 CLASS_DATA (sym)->attr.class_pointer = 1;
8934 gfc_set_sym_referenced (sym->ts.u.derived);
8935 gfc_commit_symbol (sym->ts.u.derived);
8936 /* _vptr now has the _vtab in it, change it to the _vtype. */
8937 if (c->ts.u.derived->attr.vtab)
8938 c->ts.u.derived = c->ts.u.derived->ts.u.derived;
8939 c->ts.u.derived->ns->types_resolved = 0;
8940 resolve_types (c->ts.u.derived->ns);
8941 }
8942 }
8943
8944 /* Mark this as an associate variable. */
8945 sym->attr.associate_var = 1;
8946
8947 /* Fix up the type-spec for CHARACTER types. */
8948 if (sym->ts.type == BT_CHARACTER && !sym->attr.select_type_temporary)
8949 {
8950 if (!sym->ts.u.cl)
8951 sym->ts.u.cl = target->ts.u.cl;
8952
8953 if (sym->ts.deferred && target->expr_type == EXPR_VARIABLE
8954 && target->symtree->n.sym->attr.dummy
8955 && sym->ts.u.cl == target->ts.u.cl)
8956 {
8957 sym->ts.u.cl = gfc_new_charlen (sym->ns, NULL);
8958 sym->ts.deferred = 1;
8959 }
8960
8961 if (!sym->ts.u.cl->length
8962 && !sym->ts.deferred
8963 && target->expr_type == EXPR_CONSTANT)
8964 {
8965 sym->ts.u.cl->length =
8966 gfc_get_int_expr (gfc_charlen_int_kind, NULL,
8967 target->value.character.length);
8968 }
8969 else if ((!sym->ts.u.cl->length
8970 || sym->ts.u.cl->length->expr_type != EXPR_CONSTANT)
8971 && target->expr_type != EXPR_VARIABLE)
8972 {
8973 sym->ts.u.cl = gfc_new_charlen (sym->ns, NULL);
8974 sym->ts.deferred = 1;
8975
8976 /* This is reset in trans-stmt.c after the assignment
8977 of the target expression to the associate name. */
8978 sym->attr.allocatable = 1;
8979 }
8980 }
8981
8982 /* If the target is a good class object, so is the associate variable. */
8983 if (sym->ts.type == BT_CLASS && gfc_expr_attr (target).class_ok)
8984 sym->attr.class_ok = 1;
8985 }
8986
8987
8988 /* Ensure that SELECT TYPE expressions have the correct rank and a full
8989 array reference, where necessary. The symbols are artificial and so
8990 the dimension attribute and arrayspec can also be set. In addition,
8991 sometimes the expr1 arrives as BT_DERIVED, when the symbol is BT_CLASS.
8992 This is corrected here as well.*/
8993
8994 static void
8995 fixup_array_ref (gfc_expr **expr1, gfc_expr *expr2,
8996 int rank, gfc_ref *ref)
8997 {
8998 gfc_ref *nref = (*expr1)->ref;
8999 gfc_symbol *sym1 = (*expr1)->symtree->n.sym;
9000 gfc_symbol *sym2 = expr2 ? expr2->symtree->n.sym : NULL;
9001 (*expr1)->rank = rank;
9002 if (sym1->ts.type == BT_CLASS)
9003 {
9004 if ((*expr1)->ts.type != BT_CLASS)
9005 (*expr1)->ts = sym1->ts;
9006
9007 CLASS_DATA (sym1)->attr.dimension = 1;
9008 if (CLASS_DATA (sym1)->as == NULL && sym2)
9009 CLASS_DATA (sym1)->as
9010 = gfc_copy_array_spec (CLASS_DATA (sym2)->as);
9011 }
9012 else
9013 {
9014 sym1->attr.dimension = 1;
9015 if (sym1->as == NULL && sym2)
9016 sym1->as = gfc_copy_array_spec (sym2->as);
9017 }
9018
9019 for (; nref; nref = nref->next)
9020 if (nref->next == NULL)
9021 break;
9022
9023 if (ref && nref && nref->type != REF_ARRAY)
9024 nref->next = gfc_copy_ref (ref);
9025 else if (ref && !nref)
9026 (*expr1)->ref = gfc_copy_ref (ref);
9027 }
9028
9029
9030 static gfc_expr *
9031 build_loc_call (gfc_expr *sym_expr)
9032 {
9033 gfc_expr *loc_call;
9034 loc_call = gfc_get_expr ();
9035 loc_call->expr_type = EXPR_FUNCTION;
9036 gfc_get_sym_tree ("_loc", gfc_current_ns, &loc_call->symtree, false);
9037 loc_call->symtree->n.sym->attr.flavor = FL_PROCEDURE;
9038 loc_call->symtree->n.sym->attr.intrinsic = 1;
9039 loc_call->symtree->n.sym->result = loc_call->symtree->n.sym;
9040 gfc_commit_symbol (loc_call->symtree->n.sym);
9041 loc_call->ts.type = BT_INTEGER;
9042 loc_call->ts.kind = gfc_index_integer_kind;
9043 loc_call->value.function.isym = gfc_intrinsic_function_by_id (GFC_ISYM_LOC);
9044 loc_call->value.function.actual = gfc_get_actual_arglist ();
9045 loc_call->value.function.actual->expr = sym_expr;
9046 loc_call->where = sym_expr->where;
9047 return loc_call;
9048 }
9049
9050 /* Resolve a SELECT TYPE statement. */
9051
9052 static void
9053 resolve_select_type (gfc_code *code, gfc_namespace *old_ns)
9054 {
9055 gfc_symbol *selector_type;
9056 gfc_code *body, *new_st, *if_st, *tail;
9057 gfc_code *class_is = NULL, *default_case = NULL;
9058 gfc_case *c;
9059 gfc_symtree *st;
9060 char name[GFC_MAX_SYMBOL_LEN];
9061 gfc_namespace *ns;
9062 int error = 0;
9063 int rank = 0;
9064 gfc_ref* ref = NULL;
9065 gfc_expr *selector_expr = NULL;
9066
9067 ns = code->ext.block.ns;
9068 gfc_resolve (ns);
9069
9070 /* Check for F03:C813. */
9071 if (code->expr1->ts.type != BT_CLASS
9072 && !(code->expr2 && code->expr2->ts.type == BT_CLASS))
9073 {
9074 gfc_error ("Selector shall be polymorphic in SELECT TYPE statement "
9075 "at %L", &code->loc);
9076 return;
9077 }
9078
9079 if (!code->expr1->symtree->n.sym->attr.class_ok)
9080 return;
9081
9082 if (code->expr2)
9083 {
9084 gfc_ref *ref2 = NULL;
9085 for (ref = code->expr2->ref; ref != NULL; ref = ref->next)
9086 if (ref->type == REF_COMPONENT
9087 && ref->u.c.component->ts.type == BT_CLASS)
9088 ref2 = ref;
9089
9090 if (ref2)
9091 {
9092 if (code->expr1->symtree->n.sym->attr.untyped)
9093 code->expr1->symtree->n.sym->ts = ref2->u.c.component->ts;
9094 selector_type = CLASS_DATA (ref2->u.c.component)->ts.u.derived;
9095 }
9096 else
9097 {
9098 if (code->expr1->symtree->n.sym->attr.untyped)
9099 code->expr1->symtree->n.sym->ts = code->expr2->ts;
9100 selector_type = CLASS_DATA (code->expr2)->ts.u.derived;
9101 }
9102
9103 if (code->expr2->rank && CLASS_DATA (code->expr1)->as)
9104 CLASS_DATA (code->expr1)->as->rank = code->expr2->rank;
9105
9106 /* F2008: C803 The selector expression must not be coindexed. */
9107 if (gfc_is_coindexed (code->expr2))
9108 {
9109 gfc_error ("Selector at %L must not be coindexed",
9110 &code->expr2->where);
9111 return;
9112 }
9113
9114 }
9115 else
9116 {
9117 selector_type = CLASS_DATA (code->expr1)->ts.u.derived;
9118
9119 if (gfc_is_coindexed (code->expr1))
9120 {
9121 gfc_error ("Selector at %L must not be coindexed",
9122 &code->expr1->where);
9123 return;
9124 }
9125 }
9126
9127 /* Loop over TYPE IS / CLASS IS cases. */
9128 for (body = code->block; body; body = body->block)
9129 {
9130 c = body->ext.block.case_list;
9131
9132 if (!error)
9133 {
9134 /* Check for repeated cases. */
9135 for (tail = code->block; tail; tail = tail->block)
9136 {
9137 gfc_case *d = tail->ext.block.case_list;
9138 if (tail == body)
9139 break;
9140
9141 if (c->ts.type == d->ts.type
9142 && ((c->ts.type == BT_DERIVED
9143 && c->ts.u.derived && d->ts.u.derived
9144 && !strcmp (c->ts.u.derived->name,
9145 d->ts.u.derived->name))
9146 || c->ts.type == BT_UNKNOWN
9147 || (!(c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9148 && c->ts.kind == d->ts.kind)))
9149 {
9150 gfc_error ("TYPE IS at %L overlaps with TYPE IS at %L",
9151 &c->where, &d->where);
9152 return;
9153 }
9154 }
9155 }
9156
9157 /* Check F03:C815. */
9158 if ((c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9159 && !selector_type->attr.unlimited_polymorphic
9160 && !gfc_type_is_extensible (c->ts.u.derived))
9161 {
9162 gfc_error ("Derived type %qs at %L must be extensible",
9163 c->ts.u.derived->name, &c->where);
9164 error++;
9165 continue;
9166 }
9167
9168 /* Check F03:C816. */
9169 if (c->ts.type != BT_UNKNOWN && !selector_type->attr.unlimited_polymorphic
9170 && ((c->ts.type != BT_DERIVED && c->ts.type != BT_CLASS)
9171 || !gfc_type_is_extension_of (selector_type, c->ts.u.derived)))
9172 {
9173 if (c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9174 gfc_error ("Derived type %qs at %L must be an extension of %qs",
9175 c->ts.u.derived->name, &c->where, selector_type->name);
9176 else
9177 gfc_error ("Unexpected intrinsic type %qs at %L",
9178 gfc_basic_typename (c->ts.type), &c->where);
9179 error++;
9180 continue;
9181 }
9182
9183 /* Check F03:C814. */
9184 if (c->ts.type == BT_CHARACTER
9185 && (c->ts.u.cl->length != NULL || c->ts.deferred))
9186 {
9187 gfc_error ("The type-spec at %L shall specify that each length "
9188 "type parameter is assumed", &c->where);
9189 error++;
9190 continue;
9191 }
9192
9193 /* Intercept the DEFAULT case. */
9194 if (c->ts.type == BT_UNKNOWN)
9195 {
9196 /* Check F03:C818. */
9197 if (default_case)
9198 {
9199 gfc_error ("The DEFAULT CASE at %L cannot be followed "
9200 "by a second DEFAULT CASE at %L",
9201 &default_case->ext.block.case_list->where, &c->where);
9202 error++;
9203 continue;
9204 }
9205
9206 default_case = body;
9207 }
9208 }
9209
9210 if (error > 0)
9211 return;
9212
9213 /* Transform SELECT TYPE statement to BLOCK and associate selector to
9214 target if present. If there are any EXIT statements referring to the
9215 SELECT TYPE construct, this is no problem because the gfc_code
9216 reference stays the same and EXIT is equally possible from the BLOCK
9217 it is changed to. */
9218 code->op = EXEC_BLOCK;
9219 if (code->expr2)
9220 {
9221 gfc_association_list* assoc;
9222
9223 assoc = gfc_get_association_list ();
9224 assoc->st = code->expr1->symtree;
9225 assoc->target = gfc_copy_expr (code->expr2);
9226 assoc->target->where = code->expr2->where;
9227 /* assoc->variable will be set by resolve_assoc_var. */
9228
9229 code->ext.block.assoc = assoc;
9230 code->expr1->symtree->n.sym->assoc = assoc;
9231
9232 resolve_assoc_var (code->expr1->symtree->n.sym, false);
9233 }
9234 else
9235 code->ext.block.assoc = NULL;
9236
9237 /* Ensure that the selector rank and arrayspec are available to
9238 correct expressions in which they might be missing. */
9239 if (code->expr2 && code->expr2->rank)
9240 {
9241 rank = code->expr2->rank;
9242 for (ref = code->expr2->ref; ref; ref = ref->next)
9243 if (ref->next == NULL)
9244 break;
9245 if (ref && ref->type == REF_ARRAY)
9246 ref = gfc_copy_ref (ref);
9247
9248 /* Fixup expr1 if necessary. */
9249 if (rank)
9250 fixup_array_ref (&code->expr1, code->expr2, rank, ref);
9251 }
9252 else if (code->expr1->rank)
9253 {
9254 rank = code->expr1->rank;
9255 for (ref = code->expr1->ref; ref; ref = ref->next)
9256 if (ref->next == NULL)
9257 break;
9258 if (ref && ref->type == REF_ARRAY)
9259 ref = gfc_copy_ref (ref);
9260 }
9261
9262 /* Add EXEC_SELECT to switch on type. */
9263 new_st = gfc_get_code (code->op);
9264 new_st->expr1 = code->expr1;
9265 new_st->expr2 = code->expr2;
9266 new_st->block = code->block;
9267 code->expr1 = code->expr2 = NULL;
9268 code->block = NULL;
9269 if (!ns->code)
9270 ns->code = new_st;
9271 else
9272 ns->code->next = new_st;
9273 code = new_st;
9274 code->op = EXEC_SELECT_TYPE;
9275
9276 /* Use the intrinsic LOC function to generate an integer expression
9277 for the vtable of the selector. Note that the rank of the selector
9278 expression has to be set to zero. */
9279 gfc_add_vptr_component (code->expr1);
9280 code->expr1->rank = 0;
9281 code->expr1 = build_loc_call (code->expr1);
9282 selector_expr = code->expr1->value.function.actual->expr;
9283
9284 /* Loop over TYPE IS / CLASS IS cases. */
9285 for (body = code->block; body; body = body->block)
9286 {
9287 gfc_symbol *vtab;
9288 gfc_expr *e;
9289 c = body->ext.block.case_list;
9290
9291 /* Generate an index integer expression for address of the
9292 TYPE/CLASS vtable and store it in c->low. The hash expression
9293 is stored in c->high and is used to resolve intrinsic cases. */
9294 if (c->ts.type != BT_UNKNOWN)
9295 {
9296 if (c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
9297 {
9298 vtab = gfc_find_derived_vtab (c->ts.u.derived);
9299 gcc_assert (vtab);
9300 c->high = gfc_get_int_expr (gfc_integer_4_kind, NULL,
9301 c->ts.u.derived->hash_value);
9302 }
9303 else
9304 {
9305 vtab = gfc_find_vtab (&c->ts);
9306 gcc_assert (vtab && CLASS_DATA (vtab)->initializer);
9307 e = CLASS_DATA (vtab)->initializer;
9308 c->high = gfc_copy_expr (e);
9309 if (c->high->ts.kind != gfc_integer_4_kind)
9310 {
9311 gfc_typespec ts;
9312 ts.kind = gfc_integer_4_kind;
9313 ts.type = BT_INTEGER;
9314 gfc_convert_type_warn (c->high, &ts, 2, 0);
9315 }
9316 }
9317
9318 e = gfc_lval_expr_from_sym (vtab);
9319 c->low = build_loc_call (e);
9320 }
9321 else
9322 continue;
9323
9324 /* Associate temporary to selector. This should only be done
9325 when this case is actually true, so build a new ASSOCIATE
9326 that does precisely this here (instead of using the
9327 'global' one). */
9328
9329 if (c->ts.type == BT_CLASS)
9330 sprintf (name, "__tmp_class_%s", c->ts.u.derived->name);
9331 else if (c->ts.type == BT_DERIVED)
9332 sprintf (name, "__tmp_type_%s", c->ts.u.derived->name);
9333 else if (c->ts.type == BT_CHARACTER)
9334 {
9335 HOST_WIDE_INT charlen = 0;
9336 if (c->ts.u.cl && c->ts.u.cl->length
9337 && c->ts.u.cl->length->expr_type == EXPR_CONSTANT)
9338 charlen = gfc_mpz_get_hwi (c->ts.u.cl->length->value.integer);
9339 snprintf (name, sizeof (name),
9340 "__tmp_%s_" HOST_WIDE_INT_PRINT_DEC "_%d",
9341 gfc_basic_typename (c->ts.type), charlen, c->ts.kind);
9342 }
9343 else
9344 sprintf (name, "__tmp_%s_%d", gfc_basic_typename (c->ts.type),
9345 c->ts.kind);
9346
9347 st = gfc_find_symtree (ns->sym_root, name);
9348 gcc_assert (st->n.sym->assoc);
9349 st->n.sym->assoc->target = gfc_get_variable_expr (selector_expr->symtree);
9350 st->n.sym->assoc->target->where = selector_expr->where;
9351 if (c->ts.type != BT_CLASS && c->ts.type != BT_UNKNOWN)
9352 {
9353 gfc_add_data_component (st->n.sym->assoc->target);
9354 /* Fixup the target expression if necessary. */
9355 if (rank)
9356 fixup_array_ref (&st->n.sym->assoc->target, NULL, rank, ref);
9357 }
9358
9359 new_st = gfc_get_code (EXEC_BLOCK);
9360 new_st->ext.block.ns = gfc_build_block_ns (ns);
9361 new_st->ext.block.ns->code = body->next;
9362 body->next = new_st;
9363
9364 /* Chain in the new list only if it is marked as dangling. Otherwise
9365 there is a CASE label overlap and this is already used. Just ignore,
9366 the error is diagnosed elsewhere. */
9367 if (st->n.sym->assoc->dangling)
9368 {
9369 new_st->ext.block.assoc = st->n.sym->assoc;
9370 st->n.sym->assoc->dangling = 0;
9371 }
9372
9373 resolve_assoc_var (st->n.sym, false);
9374 }
9375
9376 /* Take out CLASS IS cases for separate treatment. */
9377 body = code;
9378 while (body && body->block)
9379 {
9380 if (body->block->ext.block.case_list->ts.type == BT_CLASS)
9381 {
9382 /* Add to class_is list. */
9383 if (class_is == NULL)
9384 {
9385 class_is = body->block;
9386 tail = class_is;
9387 }
9388 else
9389 {
9390 for (tail = class_is; tail->block; tail = tail->block) ;
9391 tail->block = body->block;
9392 tail = tail->block;
9393 }
9394 /* Remove from EXEC_SELECT list. */
9395 body->block = body->block->block;
9396 tail->block = NULL;
9397 }
9398 else
9399 body = body->block;
9400 }
9401
9402 if (class_is)
9403 {
9404 gfc_symbol *vtab;
9405
9406 if (!default_case)
9407 {
9408 /* Add a default case to hold the CLASS IS cases. */
9409 for (tail = code; tail->block; tail = tail->block) ;
9410 tail->block = gfc_get_code (EXEC_SELECT_TYPE);
9411 tail = tail->block;
9412 tail->ext.block.case_list = gfc_get_case ();
9413 tail->ext.block.case_list->ts.type = BT_UNKNOWN;
9414 tail->next = NULL;
9415 default_case = tail;
9416 }
9417
9418 /* More than one CLASS IS block? */
9419 if (class_is->block)
9420 {
9421 gfc_code **c1,*c2;
9422 bool swapped;
9423 /* Sort CLASS IS blocks by extension level. */
9424 do
9425 {
9426 swapped = false;
9427 for (c1 = &class_is; (*c1) && (*c1)->block; c1 = &((*c1)->block))
9428 {
9429 c2 = (*c1)->block;
9430 /* F03:C817 (check for doubles). */
9431 if ((*c1)->ext.block.case_list->ts.u.derived->hash_value
9432 == c2->ext.block.case_list->ts.u.derived->hash_value)
9433 {
9434 gfc_error ("Double CLASS IS block in SELECT TYPE "
9435 "statement at %L",
9436 &c2->ext.block.case_list->where);
9437 return;
9438 }
9439 if ((*c1)->ext.block.case_list->ts.u.derived->attr.extension
9440 < c2->ext.block.case_list->ts.u.derived->attr.extension)
9441 {
9442 /* Swap. */
9443 (*c1)->block = c2->block;
9444 c2->block = *c1;
9445 *c1 = c2;
9446 swapped = true;
9447 }
9448 }
9449 }
9450 while (swapped);
9451 }
9452
9453 /* Generate IF chain. */
9454 if_st = gfc_get_code (EXEC_IF);
9455 new_st = if_st;
9456 for (body = class_is; body; body = body->block)
9457 {
9458 new_st->block = gfc_get_code (EXEC_IF);
9459 new_st = new_st->block;
9460 /* Set up IF condition: Call _gfortran_is_extension_of. */
9461 new_st->expr1 = gfc_get_expr ();
9462 new_st->expr1->expr_type = EXPR_FUNCTION;
9463 new_st->expr1->ts.type = BT_LOGICAL;
9464 new_st->expr1->ts.kind = 4;
9465 new_st->expr1->value.function.name = gfc_get_string (PREFIX ("is_extension_of"));
9466 new_st->expr1->value.function.isym = XCNEW (gfc_intrinsic_sym);
9467 new_st->expr1->value.function.isym->id = GFC_ISYM_EXTENDS_TYPE_OF;
9468 /* Set up arguments. */
9469 new_st->expr1->value.function.actual = gfc_get_actual_arglist ();
9470 new_st->expr1->value.function.actual->expr = gfc_get_variable_expr (selector_expr->symtree);
9471 new_st->expr1->value.function.actual->expr->where = code->loc;
9472 new_st->expr1->where = code->loc;
9473 gfc_add_vptr_component (new_st->expr1->value.function.actual->expr);
9474 vtab = gfc_find_derived_vtab (body->ext.block.case_list->ts.u.derived);
9475 st = gfc_find_symtree (vtab->ns->sym_root, vtab->name);
9476 new_st->expr1->value.function.actual->next = gfc_get_actual_arglist ();
9477 new_st->expr1->value.function.actual->next->expr = gfc_get_variable_expr (st);
9478 new_st->expr1->value.function.actual->next->expr->where = code->loc;
9479 new_st->next = body->next;
9480 }
9481 if (default_case->next)
9482 {
9483 new_st->block = gfc_get_code (EXEC_IF);
9484 new_st = new_st->block;
9485 new_st->next = default_case->next;
9486 }
9487
9488 /* Replace CLASS DEFAULT code by the IF chain. */
9489 default_case->next = if_st;
9490 }
9491
9492 /* Resolve the internal code. This cannot be done earlier because
9493 it requires that the sym->assoc of selectors is set already. */
9494 gfc_current_ns = ns;
9495 gfc_resolve_blocks (code->block, gfc_current_ns);
9496 gfc_current_ns = old_ns;
9497
9498 if (ref)
9499 free (ref);
9500 }
9501
9502
9503 /* Resolve a transfer statement. This is making sure that:
9504 -- a derived type being transferred has only non-pointer components
9505 -- a derived type being transferred doesn't have private components, unless
9506 it's being transferred from the module where the type was defined
9507 -- we're not trying to transfer a whole assumed size array. */
9508
9509 static void
9510 resolve_transfer (gfc_code *code)
9511 {
9512 gfc_symbol *sym, *derived;
9513 gfc_ref *ref;
9514 gfc_expr *exp;
9515 bool write = false;
9516 bool formatted = false;
9517 gfc_dt *dt = code->ext.dt;
9518 gfc_symbol *dtio_sub = NULL;
9519
9520 exp = code->expr1;
9521
9522 while (exp != NULL && exp->expr_type == EXPR_OP
9523 && exp->value.op.op == INTRINSIC_PARENTHESES)
9524 exp = exp->value.op.op1;
9525
9526 if (exp && exp->expr_type == EXPR_NULL
9527 && code->ext.dt)
9528 {
9529 gfc_error ("Invalid context for NULL () intrinsic at %L",
9530 &exp->where);
9531 return;
9532 }
9533
9534 if (exp == NULL || (exp->expr_type != EXPR_VARIABLE
9535 && exp->expr_type != EXPR_FUNCTION
9536 && exp->expr_type != EXPR_STRUCTURE))
9537 return;
9538
9539 /* If we are reading, the variable will be changed. Note that
9540 code->ext.dt may be NULL if the TRANSFER is related to
9541 an INQUIRE statement -- but in this case, we are not reading, either. */
9542 if (dt && dt->dt_io_kind->value.iokind == M_READ
9543 && !gfc_check_vardef_context (exp, false, false, false,
9544 _("item in READ")))
9545 return;
9546
9547 const gfc_typespec *ts = exp->expr_type == EXPR_STRUCTURE
9548 || exp->expr_type == EXPR_FUNCTION
9549 ? &exp->ts : &exp->symtree->n.sym->ts;
9550
9551 /* Go to actual component transferred. */
9552 for (ref = exp->ref; ref; ref = ref->next)
9553 if (ref->type == REF_COMPONENT)
9554 ts = &ref->u.c.component->ts;
9555
9556 if (dt && dt->dt_io_kind->value.iokind != M_INQUIRE
9557 && (ts->type == BT_DERIVED || ts->type == BT_CLASS))
9558 {
9559 derived = ts->u.derived;
9560
9561 /* Determine when to use the formatted DTIO procedure. */
9562 if (dt && (dt->format_expr || dt->format_label))
9563 formatted = true;
9564
9565 write = dt->dt_io_kind->value.iokind == M_WRITE
9566 || dt->dt_io_kind->value.iokind == M_PRINT;
9567 dtio_sub = gfc_find_specific_dtio_proc (derived, write, formatted);
9568
9569 if (dtio_sub != NULL && exp->expr_type == EXPR_VARIABLE)
9570 {
9571 dt->udtio = exp;
9572 sym = exp->symtree->n.sym->ns->proc_name;
9573 /* Check to see if this is a nested DTIO call, with the
9574 dummy as the io-list object. */
9575 if (sym && sym == dtio_sub && sym->formal
9576 && sym->formal->sym == exp->symtree->n.sym
9577 && exp->ref == NULL)
9578 {
9579 if (!sym->attr.recursive)
9580 {
9581 gfc_error ("DTIO %s procedure at %L must be recursive",
9582 sym->name, &sym->declared_at);
9583 return;
9584 }
9585 }
9586 }
9587 }
9588
9589 if (ts->type == BT_CLASS && dtio_sub == NULL)
9590 {
9591 gfc_error ("Data transfer element at %L cannot be polymorphic unless "
9592 "it is processed by a defined input/output procedure",
9593 &code->loc);
9594 return;
9595 }
9596
9597 if (ts->type == BT_DERIVED)
9598 {
9599 /* Check that transferred derived type doesn't contain POINTER
9600 components unless it is processed by a defined input/output
9601 procedure". */
9602 if (ts->u.derived->attr.pointer_comp && dtio_sub == NULL)
9603 {
9604 gfc_error ("Data transfer element at %L cannot have POINTER "
9605 "components unless it is processed by a defined "
9606 "input/output procedure", &code->loc);
9607 return;
9608 }
9609
9610 /* F08:C935. */
9611 if (ts->u.derived->attr.proc_pointer_comp)
9612 {
9613 gfc_error ("Data transfer element at %L cannot have "
9614 "procedure pointer components", &code->loc);
9615 return;
9616 }
9617
9618 if (ts->u.derived->attr.alloc_comp && dtio_sub == NULL)
9619 {
9620 gfc_error ("Data transfer element at %L cannot have ALLOCATABLE "
9621 "components unless it is processed by a defined "
9622 "input/output procedure", &code->loc);
9623 return;
9624 }
9625
9626 /* C_PTR and C_FUNPTR have private components which means they cannot
9627 be printed. However, if -std=gnu and not -pedantic, allow
9628 the component to be printed to help debugging. */
9629 if (ts->u.derived->ts.f90_type == BT_VOID)
9630 {
9631 if (!gfc_notify_std (GFC_STD_GNU, "Data transfer element at %L "
9632 "cannot have PRIVATE components", &code->loc))
9633 return;
9634 }
9635 else if (derived_inaccessible (ts->u.derived) && dtio_sub == NULL)
9636 {
9637 gfc_error ("Data transfer element at %L cannot have "
9638 "PRIVATE components unless it is processed by "
9639 "a defined input/output procedure", &code->loc);
9640 return;
9641 }
9642 }
9643
9644 if (exp->expr_type == EXPR_STRUCTURE)
9645 return;
9646
9647 sym = exp->symtree->n.sym;
9648
9649 if (sym->as != NULL && sym->as->type == AS_ASSUMED_SIZE && exp->ref
9650 && exp->ref->type == REF_ARRAY && exp->ref->u.ar.type == AR_FULL)
9651 {
9652 gfc_error ("Data transfer element at %L cannot be a full reference to "
9653 "an assumed-size array", &code->loc);
9654 return;
9655 }
9656
9657 if (async_io_dt && exp->expr_type == EXPR_VARIABLE)
9658 exp->symtree->n.sym->attr.asynchronous = 1;
9659 }
9660
9661
9662 /*********** Toplevel code resolution subroutines ***********/
9663
9664 /* Find the set of labels that are reachable from this block. We also
9665 record the last statement in each block. */
9666
9667 static void
9668 find_reachable_labels (gfc_code *block)
9669 {
9670 gfc_code *c;
9671
9672 if (!block)
9673 return;
9674
9675 cs_base->reachable_labels = bitmap_alloc (&labels_obstack);
9676
9677 /* Collect labels in this block. We don't keep those corresponding
9678 to END {IF|SELECT}, these are checked in resolve_branch by going
9679 up through the code_stack. */
9680 for (c = block; c; c = c->next)
9681 {
9682 if (c->here && c->op != EXEC_END_NESTED_BLOCK)
9683 bitmap_set_bit (cs_base->reachable_labels, c->here->value);
9684 }
9685
9686 /* Merge with labels from parent block. */
9687 if (cs_base->prev)
9688 {
9689 gcc_assert (cs_base->prev->reachable_labels);
9690 bitmap_ior_into (cs_base->reachable_labels,
9691 cs_base->prev->reachable_labels);
9692 }
9693 }
9694
9695
9696 static void
9697 resolve_lock_unlock_event (gfc_code *code)
9698 {
9699 if (code->expr1->expr_type == EXPR_FUNCTION
9700 && code->expr1->value.function.isym
9701 && code->expr1->value.function.isym->id == GFC_ISYM_CAF_GET)
9702 remove_caf_get_intrinsic (code->expr1);
9703
9704 if ((code->op == EXEC_LOCK || code->op == EXEC_UNLOCK)
9705 && (code->expr1->ts.type != BT_DERIVED
9706 || code->expr1->expr_type != EXPR_VARIABLE
9707 || code->expr1->ts.u.derived->from_intmod != INTMOD_ISO_FORTRAN_ENV
9708 || code->expr1->ts.u.derived->intmod_sym_id != ISOFORTRAN_LOCK_TYPE
9709 || code->expr1->rank != 0
9710 || (!gfc_is_coarray (code->expr1) &&
9711 !gfc_is_coindexed (code->expr1))))
9712 gfc_error ("Lock variable at %L must be a scalar of type LOCK_TYPE",
9713 &code->expr1->where);
9714 else if ((code->op == EXEC_EVENT_POST || code->op == EXEC_EVENT_WAIT)
9715 && (code->expr1->ts.type != BT_DERIVED
9716 || code->expr1->expr_type != EXPR_VARIABLE
9717 || code->expr1->ts.u.derived->from_intmod
9718 != INTMOD_ISO_FORTRAN_ENV
9719 || code->expr1->ts.u.derived->intmod_sym_id
9720 != ISOFORTRAN_EVENT_TYPE
9721 || code->expr1->rank != 0))
9722 gfc_error ("Event variable at %L must be a scalar of type EVENT_TYPE",
9723 &code->expr1->where);
9724 else if (code->op == EXEC_EVENT_POST && !gfc_is_coarray (code->expr1)
9725 && !gfc_is_coindexed (code->expr1))
9726 gfc_error ("Event variable argument at %L must be a coarray or coindexed",
9727 &code->expr1->where);
9728 else if (code->op == EXEC_EVENT_WAIT && !gfc_is_coarray (code->expr1))
9729 gfc_error ("Event variable argument at %L must be a coarray but not "
9730 "coindexed", &code->expr1->where);
9731
9732 /* Check STAT. */
9733 if (code->expr2
9734 && (code->expr2->ts.type != BT_INTEGER || code->expr2->rank != 0
9735 || code->expr2->expr_type != EXPR_VARIABLE))
9736 gfc_error ("STAT= argument at %L must be a scalar INTEGER variable",
9737 &code->expr2->where);
9738
9739 if (code->expr2
9740 && !gfc_check_vardef_context (code->expr2, false, false, false,
9741 _("STAT variable")))
9742 return;
9743
9744 /* Check ERRMSG. */
9745 if (code->expr3
9746 && (code->expr3->ts.type != BT_CHARACTER || code->expr3->rank != 0
9747 || code->expr3->expr_type != EXPR_VARIABLE))
9748 gfc_error ("ERRMSG= argument at %L must be a scalar CHARACTER variable",
9749 &code->expr3->where);
9750
9751 if (code->expr3
9752 && !gfc_check_vardef_context (code->expr3, false, false, false,
9753 _("ERRMSG variable")))
9754 return;
9755
9756 /* Check for LOCK the ACQUIRED_LOCK. */
9757 if (code->op != EXEC_EVENT_WAIT && code->expr4
9758 && (code->expr4->ts.type != BT_LOGICAL || code->expr4->rank != 0
9759 || code->expr4->expr_type != EXPR_VARIABLE))
9760 gfc_error ("ACQUIRED_LOCK= argument at %L must be a scalar LOGICAL "
9761 "variable", &code->expr4->where);
9762
9763 if (code->op != EXEC_EVENT_WAIT && code->expr4
9764 && !gfc_check_vardef_context (code->expr4, false, false, false,
9765 _("ACQUIRED_LOCK variable")))
9766 return;
9767
9768 /* Check for EVENT WAIT the UNTIL_COUNT. */
9769 if (code->op == EXEC_EVENT_WAIT && code->expr4)
9770 {
9771 if (!gfc_resolve_expr (code->expr4) || code->expr4->ts.type != BT_INTEGER
9772 || code->expr4->rank != 0)
9773 gfc_error ("UNTIL_COUNT= argument at %L must be a scalar INTEGER "
9774 "expression", &code->expr4->where);
9775 }
9776 }
9777
9778
9779 static void
9780 resolve_critical (gfc_code *code)
9781 {
9782 gfc_symtree *symtree;
9783 gfc_symbol *lock_type;
9784 char name[GFC_MAX_SYMBOL_LEN];
9785 static int serial = 0;
9786
9787 if (flag_coarray != GFC_FCOARRAY_LIB)
9788 return;
9789
9790 symtree = gfc_find_symtree (gfc_current_ns->sym_root,
9791 GFC_PREFIX ("lock_type"));
9792 if (symtree)
9793 lock_type = symtree->n.sym;
9794 else
9795 {
9796 if (gfc_get_sym_tree (GFC_PREFIX ("lock_type"), gfc_current_ns, &symtree,
9797 false) != 0)
9798 gcc_unreachable ();
9799 lock_type = symtree->n.sym;
9800 lock_type->attr.flavor = FL_DERIVED;
9801 lock_type->attr.zero_comp = 1;
9802 lock_type->from_intmod = INTMOD_ISO_FORTRAN_ENV;
9803 lock_type->intmod_sym_id = ISOFORTRAN_LOCK_TYPE;
9804 }
9805
9806 sprintf(name, GFC_PREFIX ("lock_var") "%d",serial++);
9807 if (gfc_get_sym_tree (name, gfc_current_ns, &symtree, false) != 0)
9808 gcc_unreachable ();
9809
9810 code->resolved_sym = symtree->n.sym;
9811 symtree->n.sym->attr.flavor = FL_VARIABLE;
9812 symtree->n.sym->attr.referenced = 1;
9813 symtree->n.sym->attr.artificial = 1;
9814 symtree->n.sym->attr.codimension = 1;
9815 symtree->n.sym->ts.type = BT_DERIVED;
9816 symtree->n.sym->ts.u.derived = lock_type;
9817 symtree->n.sym->as = gfc_get_array_spec ();
9818 symtree->n.sym->as->corank = 1;
9819 symtree->n.sym->as->type = AS_EXPLICIT;
9820 symtree->n.sym->as->cotype = AS_EXPLICIT;
9821 symtree->n.sym->as->lower[0] = gfc_get_int_expr (gfc_default_integer_kind,
9822 NULL, 1);
9823 gfc_commit_symbols();
9824 }
9825
9826
9827 static void
9828 resolve_sync (gfc_code *code)
9829 {
9830 /* Check imageset. The * case matches expr1 == NULL. */
9831 if (code->expr1)
9832 {
9833 if (code->expr1->ts.type != BT_INTEGER || code->expr1->rank > 1)
9834 gfc_error ("Imageset argument at %L must be a scalar or rank-1 "
9835 "INTEGER expression", &code->expr1->where);
9836 if (code->expr1->expr_type == EXPR_CONSTANT && code->expr1->rank == 0
9837 && mpz_cmp_si (code->expr1->value.integer, 1) < 0)
9838 gfc_error ("Imageset argument at %L must between 1 and num_images()",
9839 &code->expr1->where);
9840 else if (code->expr1->expr_type == EXPR_ARRAY
9841 && gfc_simplify_expr (code->expr1, 0))
9842 {
9843 gfc_constructor *cons;
9844 cons = gfc_constructor_first (code->expr1->value.constructor);
9845 for (; cons; cons = gfc_constructor_next (cons))
9846 if (cons->expr->expr_type == EXPR_CONSTANT
9847 && mpz_cmp_si (cons->expr->value.integer, 1) < 0)
9848 gfc_error ("Imageset argument at %L must between 1 and "
9849 "num_images()", &cons->expr->where);
9850 }
9851 }
9852
9853 /* Check STAT. */
9854 gfc_resolve_expr (code->expr2);
9855 if (code->expr2
9856 && (code->expr2->ts.type != BT_INTEGER || code->expr2->rank != 0
9857 || code->expr2->expr_type != EXPR_VARIABLE))
9858 gfc_error ("STAT= argument at %L must be a scalar INTEGER variable",
9859 &code->expr2->where);
9860
9861 /* Check ERRMSG. */
9862 gfc_resolve_expr (code->expr3);
9863 if (code->expr3
9864 && (code->expr3->ts.type != BT_CHARACTER || code->expr3->rank != 0
9865 || code->expr3->expr_type != EXPR_VARIABLE))
9866 gfc_error ("ERRMSG= argument at %L must be a scalar CHARACTER variable",
9867 &code->expr3->where);
9868 }
9869
9870
9871 /* Given a branch to a label, see if the branch is conforming.
9872 The code node describes where the branch is located. */
9873
9874 static void
9875 resolve_branch (gfc_st_label *label, gfc_code *code)
9876 {
9877 code_stack *stack;
9878
9879 if (label == NULL)
9880 return;
9881
9882 /* Step one: is this a valid branching target? */
9883
9884 if (label->defined == ST_LABEL_UNKNOWN)
9885 {
9886 gfc_error ("Label %d referenced at %L is never defined", label->value,
9887 &code->loc);
9888 return;
9889 }
9890
9891 if (label->defined != ST_LABEL_TARGET && label->defined != ST_LABEL_DO_TARGET)
9892 {
9893 gfc_error ("Statement at %L is not a valid branch target statement "
9894 "for the branch statement at %L", &label->where, &code->loc);
9895 return;
9896 }
9897
9898 /* Step two: make sure this branch is not a branch to itself ;-) */
9899
9900 if (code->here == label)
9901 {
9902 gfc_warning (0,
9903 "Branch at %L may result in an infinite loop", &code->loc);
9904 return;
9905 }
9906
9907 /* Step three: See if the label is in the same block as the
9908 branching statement. The hard work has been done by setting up
9909 the bitmap reachable_labels. */
9910
9911 if (bitmap_bit_p (cs_base->reachable_labels, label->value))
9912 {
9913 /* Check now whether there is a CRITICAL construct; if so, check
9914 whether the label is still visible outside of the CRITICAL block,
9915 which is invalid. */
9916 for (stack = cs_base; stack; stack = stack->prev)
9917 {
9918 if (stack->current->op == EXEC_CRITICAL
9919 && bitmap_bit_p (stack->reachable_labels, label->value))
9920 gfc_error ("GOTO statement at %L leaves CRITICAL construct for "
9921 "label at %L", &code->loc, &label->where);
9922 else if (stack->current->op == EXEC_DO_CONCURRENT
9923 && bitmap_bit_p (stack->reachable_labels, label->value))
9924 gfc_error ("GOTO statement at %L leaves DO CONCURRENT construct "
9925 "for label at %L", &code->loc, &label->where);
9926 }
9927
9928 return;
9929 }
9930
9931 /* Step four: If we haven't found the label in the bitmap, it may
9932 still be the label of the END of the enclosing block, in which
9933 case we find it by going up the code_stack. */
9934
9935 for (stack = cs_base; stack; stack = stack->prev)
9936 {
9937 if (stack->current->next && stack->current->next->here == label)
9938 break;
9939 if (stack->current->op == EXEC_CRITICAL)
9940 {
9941 /* Note: A label at END CRITICAL does not leave the CRITICAL
9942 construct as END CRITICAL is still part of it. */
9943 gfc_error ("GOTO statement at %L leaves CRITICAL construct for label"
9944 " at %L", &code->loc, &label->where);
9945 return;
9946 }
9947 else if (stack->current->op == EXEC_DO_CONCURRENT)
9948 {
9949 gfc_error ("GOTO statement at %L leaves DO CONCURRENT construct for "
9950 "label at %L", &code->loc, &label->where);
9951 return;
9952 }
9953 }
9954
9955 if (stack)
9956 {
9957 gcc_assert (stack->current->next->op == EXEC_END_NESTED_BLOCK);
9958 return;
9959 }
9960
9961 /* The label is not in an enclosing block, so illegal. This was
9962 allowed in Fortran 66, so we allow it as extension. No
9963 further checks are necessary in this case. */
9964 gfc_notify_std (GFC_STD_LEGACY, "Label at %L is not in the same block "
9965 "as the GOTO statement at %L", &label->where,
9966 &code->loc);
9967 return;
9968 }
9969
9970
9971 /* Check whether EXPR1 has the same shape as EXPR2. */
9972
9973 static bool
9974 resolve_where_shape (gfc_expr *expr1, gfc_expr *expr2)
9975 {
9976 mpz_t shape[GFC_MAX_DIMENSIONS];
9977 mpz_t shape2[GFC_MAX_DIMENSIONS];
9978 bool result = false;
9979 int i;
9980
9981 /* Compare the rank. */
9982 if (expr1->rank != expr2->rank)
9983 return result;
9984
9985 /* Compare the size of each dimension. */
9986 for (i=0; i<expr1->rank; i++)
9987 {
9988 if (!gfc_array_dimen_size (expr1, i, &shape[i]))
9989 goto ignore;
9990
9991 if (!gfc_array_dimen_size (expr2, i, &shape2[i]))
9992 goto ignore;
9993
9994 if (mpz_cmp (shape[i], shape2[i]))
9995 goto over;
9996 }
9997
9998 /* When either of the two expression is an assumed size array, we
9999 ignore the comparison of dimension sizes. */
10000 ignore:
10001 result = true;
10002
10003 over:
10004 gfc_clear_shape (shape, i);
10005 gfc_clear_shape (shape2, i);
10006 return result;
10007 }
10008
10009
10010 /* Check whether a WHERE assignment target or a WHERE mask expression
10011 has the same shape as the outmost WHERE mask expression. */
10012
10013 static void
10014 resolve_where (gfc_code *code, gfc_expr *mask)
10015 {
10016 gfc_code *cblock;
10017 gfc_code *cnext;
10018 gfc_expr *e = NULL;
10019
10020 cblock = code->block;
10021
10022 /* Store the first WHERE mask-expr of the WHERE statement or construct.
10023 In case of nested WHERE, only the outmost one is stored. */
10024 if (mask == NULL) /* outmost WHERE */
10025 e = cblock->expr1;
10026 else /* inner WHERE */
10027 e = mask;
10028
10029 while (cblock)
10030 {
10031 if (cblock->expr1)
10032 {
10033 /* Check if the mask-expr has a consistent shape with the
10034 outmost WHERE mask-expr. */
10035 if (!resolve_where_shape (cblock->expr1, e))
10036 gfc_error ("WHERE mask at %L has inconsistent shape",
10037 &cblock->expr1->where);
10038 }
10039
10040 /* the assignment statement of a WHERE statement, or the first
10041 statement in where-body-construct of a WHERE construct */
10042 cnext = cblock->next;
10043 while (cnext)
10044 {
10045 switch (cnext->op)
10046 {
10047 /* WHERE assignment statement */
10048 case EXEC_ASSIGN:
10049
10050 /* Check shape consistent for WHERE assignment target. */
10051 if (e && !resolve_where_shape (cnext->expr1, e))
10052 gfc_error ("WHERE assignment target at %L has "
10053 "inconsistent shape", &cnext->expr1->where);
10054 break;
10055
10056
10057 case EXEC_ASSIGN_CALL:
10058 resolve_call (cnext);
10059 if (!cnext->resolved_sym->attr.elemental)
10060 gfc_error("Non-ELEMENTAL user-defined assignment in WHERE at %L",
10061 &cnext->ext.actual->expr->where);
10062 break;
10063
10064 /* WHERE or WHERE construct is part of a where-body-construct */
10065 case EXEC_WHERE:
10066 resolve_where (cnext, e);
10067 break;
10068
10069 default:
10070 gfc_error ("Unsupported statement inside WHERE at %L",
10071 &cnext->loc);
10072 }
10073 /* the next statement within the same where-body-construct */
10074 cnext = cnext->next;
10075 }
10076 /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
10077 cblock = cblock->block;
10078 }
10079 }
10080
10081
10082 /* Resolve assignment in FORALL construct.
10083 NVAR is the number of FORALL index variables, and VAR_EXPR records the
10084 FORALL index variables. */
10085
10086 static void
10087 gfc_resolve_assign_in_forall (gfc_code *code, int nvar, gfc_expr **var_expr)
10088 {
10089 int n;
10090
10091 for (n = 0; n < nvar; n++)
10092 {
10093 gfc_symbol *forall_index;
10094
10095 forall_index = var_expr[n]->symtree->n.sym;
10096
10097 /* Check whether the assignment target is one of the FORALL index
10098 variable. */
10099 if ((code->expr1->expr_type == EXPR_VARIABLE)
10100 && (code->expr1->symtree->n.sym == forall_index))
10101 gfc_error ("Assignment to a FORALL index variable at %L",
10102 &code->expr1->where);
10103 else
10104 {
10105 /* If one of the FORALL index variables doesn't appear in the
10106 assignment variable, then there could be a many-to-one
10107 assignment. Emit a warning rather than an error because the
10108 mask could be resolving this problem. */
10109 if (!find_forall_index (code->expr1, forall_index, 0))
10110 gfc_warning (0, "The FORALL with index %qs is not used on the "
10111 "left side of the assignment at %L and so might "
10112 "cause multiple assignment to this object",
10113 var_expr[n]->symtree->name, &code->expr1->where);
10114 }
10115 }
10116 }
10117
10118
10119 /* Resolve WHERE statement in FORALL construct. */
10120
10121 static void
10122 gfc_resolve_where_code_in_forall (gfc_code *code, int nvar,
10123 gfc_expr **var_expr)
10124 {
10125 gfc_code *cblock;
10126 gfc_code *cnext;
10127
10128 cblock = code->block;
10129 while (cblock)
10130 {
10131 /* the assignment statement of a WHERE statement, or the first
10132 statement in where-body-construct of a WHERE construct */
10133 cnext = cblock->next;
10134 while (cnext)
10135 {
10136 switch (cnext->op)
10137 {
10138 /* WHERE assignment statement */
10139 case EXEC_ASSIGN:
10140 gfc_resolve_assign_in_forall (cnext, nvar, var_expr);
10141 break;
10142
10143 /* WHERE operator assignment statement */
10144 case EXEC_ASSIGN_CALL:
10145 resolve_call (cnext);
10146 if (!cnext->resolved_sym->attr.elemental)
10147 gfc_error("Non-ELEMENTAL user-defined assignment in WHERE at %L",
10148 &cnext->ext.actual->expr->where);
10149 break;
10150
10151 /* WHERE or WHERE construct is part of a where-body-construct */
10152 case EXEC_WHERE:
10153 gfc_resolve_where_code_in_forall (cnext, nvar, var_expr);
10154 break;
10155
10156 default:
10157 gfc_error ("Unsupported statement inside WHERE at %L",
10158 &cnext->loc);
10159 }
10160 /* the next statement within the same where-body-construct */
10161 cnext = cnext->next;
10162 }
10163 /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
10164 cblock = cblock->block;
10165 }
10166 }
10167
10168
10169 /* Traverse the FORALL body to check whether the following errors exist:
10170 1. For assignment, check if a many-to-one assignment happens.
10171 2. For WHERE statement, check the WHERE body to see if there is any
10172 many-to-one assignment. */
10173
10174 static void
10175 gfc_resolve_forall_body (gfc_code *code, int nvar, gfc_expr **var_expr)
10176 {
10177 gfc_code *c;
10178
10179 c = code->block->next;
10180 while (c)
10181 {
10182 switch (c->op)
10183 {
10184 case EXEC_ASSIGN:
10185 case EXEC_POINTER_ASSIGN:
10186 gfc_resolve_assign_in_forall (c, nvar, var_expr);
10187 break;
10188
10189 case EXEC_ASSIGN_CALL:
10190 resolve_call (c);
10191 break;
10192
10193 /* Because the gfc_resolve_blocks() will handle the nested FORALL,
10194 there is no need to handle it here. */
10195 case EXEC_FORALL:
10196 break;
10197 case EXEC_WHERE:
10198 gfc_resolve_where_code_in_forall(c, nvar, var_expr);
10199 break;
10200 default:
10201 break;
10202 }
10203 /* The next statement in the FORALL body. */
10204 c = c->next;
10205 }
10206 }
10207
10208
10209 /* Counts the number of iterators needed inside a forall construct, including
10210 nested forall constructs. This is used to allocate the needed memory
10211 in gfc_resolve_forall. */
10212
10213 static int
10214 gfc_count_forall_iterators (gfc_code *code)
10215 {
10216 int max_iters, sub_iters, current_iters;
10217 gfc_forall_iterator *fa;
10218
10219 gcc_assert(code->op == EXEC_FORALL);
10220 max_iters = 0;
10221 current_iters = 0;
10222
10223 for (fa = code->ext.forall_iterator; fa; fa = fa->next)
10224 current_iters ++;
10225
10226 code = code->block->next;
10227
10228 while (code)
10229 {
10230 if (code->op == EXEC_FORALL)
10231 {
10232 sub_iters = gfc_count_forall_iterators (code);
10233 if (sub_iters > max_iters)
10234 max_iters = sub_iters;
10235 }
10236 code = code->next;
10237 }
10238
10239 return current_iters + max_iters;
10240 }
10241
10242
10243 /* Given a FORALL construct, first resolve the FORALL iterator, then call
10244 gfc_resolve_forall_body to resolve the FORALL body. */
10245
10246 static void
10247 gfc_resolve_forall (gfc_code *code, gfc_namespace *ns, int forall_save)
10248 {
10249 static gfc_expr **var_expr;
10250 static int total_var = 0;
10251 static int nvar = 0;
10252 int i, old_nvar, tmp;
10253 gfc_forall_iterator *fa;
10254
10255 old_nvar = nvar;
10256
10257 if (!gfc_notify_std (GFC_STD_F2018_OBS, "FORALL construct at %L", &code->loc))
10258 return;
10259
10260 /* Start to resolve a FORALL construct */
10261 if (forall_save == 0)
10262 {
10263 /* Count the total number of FORALL indices in the nested FORALL
10264 construct in order to allocate the VAR_EXPR with proper size. */
10265 total_var = gfc_count_forall_iterators (code);
10266
10267 /* Allocate VAR_EXPR with NUMBER_OF_FORALL_INDEX elements. */
10268 var_expr = XCNEWVEC (gfc_expr *, total_var);
10269 }
10270
10271 /* The information about FORALL iterator, including FORALL indices start, end
10272 and stride. An outer FORALL indice cannot appear in start, end or stride. */
10273 for (fa = code->ext.forall_iterator; fa; fa = fa->next)
10274 {
10275 /* Fortran 20008: C738 (R753). */
10276 if (fa->var->ref && fa->var->ref->type == REF_ARRAY)
10277 {
10278 gfc_error ("FORALL index-name at %L must be a scalar variable "
10279 "of type integer", &fa->var->where);
10280 continue;
10281 }
10282
10283 /* Check if any outer FORALL index name is the same as the current
10284 one. */
10285 for (i = 0; i < nvar; i++)
10286 {
10287 if (fa->var->symtree->n.sym == var_expr[i]->symtree->n.sym)
10288 gfc_error ("An outer FORALL construct already has an index "
10289 "with this name %L", &fa->var->where);
10290 }
10291
10292 /* Record the current FORALL index. */
10293 var_expr[nvar] = gfc_copy_expr (fa->var);
10294
10295 nvar++;
10296
10297 /* No memory leak. */
10298 gcc_assert (nvar <= total_var);
10299 }
10300
10301 /* Resolve the FORALL body. */
10302 gfc_resolve_forall_body (code, nvar, var_expr);
10303
10304 /* May call gfc_resolve_forall to resolve the inner FORALL loop. */
10305 gfc_resolve_blocks (code->block, ns);
10306
10307 tmp = nvar;
10308 nvar = old_nvar;
10309 /* Free only the VAR_EXPRs allocated in this frame. */
10310 for (i = nvar; i < tmp; i++)
10311 gfc_free_expr (var_expr[i]);
10312
10313 if (nvar == 0)
10314 {
10315 /* We are in the outermost FORALL construct. */
10316 gcc_assert (forall_save == 0);
10317
10318 /* VAR_EXPR is not needed any more. */
10319 free (var_expr);
10320 total_var = 0;
10321 }
10322 }
10323
10324
10325 /* Resolve a BLOCK construct statement. */
10326
10327 static void
10328 resolve_block_construct (gfc_code* code)
10329 {
10330 /* Resolve the BLOCK's namespace. */
10331 gfc_resolve (code->ext.block.ns);
10332
10333 /* For an ASSOCIATE block, the associations (and their targets) are already
10334 resolved during resolve_symbol. */
10335 }
10336
10337
10338 /* Resolve lists of blocks found in IF, SELECT CASE, WHERE, FORALL, GOTO and
10339 DO code nodes. */
10340
10341 void
10342 gfc_resolve_blocks (gfc_code *b, gfc_namespace *ns)
10343 {
10344 bool t;
10345
10346 for (; b; b = b->block)
10347 {
10348 t = gfc_resolve_expr (b->expr1);
10349 if (!gfc_resolve_expr (b->expr2))
10350 t = false;
10351
10352 switch (b->op)
10353 {
10354 case EXEC_IF:
10355 if (t && b->expr1 != NULL
10356 && (b->expr1->ts.type != BT_LOGICAL || b->expr1->rank != 0))
10357 gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
10358 &b->expr1->where);
10359 break;
10360
10361 case EXEC_WHERE:
10362 if (t
10363 && b->expr1 != NULL
10364 && (b->expr1->ts.type != BT_LOGICAL || b->expr1->rank == 0))
10365 gfc_error ("WHERE/ELSEWHERE clause at %L requires a LOGICAL array",
10366 &b->expr1->where);
10367 break;
10368
10369 case EXEC_GOTO:
10370 resolve_branch (b->label1, b);
10371 break;
10372
10373 case EXEC_BLOCK:
10374 resolve_block_construct (b);
10375 break;
10376
10377 case EXEC_SELECT:
10378 case EXEC_SELECT_TYPE:
10379 case EXEC_FORALL:
10380 case EXEC_DO:
10381 case EXEC_DO_WHILE:
10382 case EXEC_DO_CONCURRENT:
10383 case EXEC_CRITICAL:
10384 case EXEC_READ:
10385 case EXEC_WRITE:
10386 case EXEC_IOLENGTH:
10387 case EXEC_WAIT:
10388 break;
10389
10390 case EXEC_OMP_ATOMIC:
10391 case EXEC_OACC_ATOMIC:
10392 {
10393 gfc_omp_atomic_op aop
10394 = (gfc_omp_atomic_op) (b->ext.omp_atomic & GFC_OMP_ATOMIC_MASK);
10395
10396 /* Verify this before calling gfc_resolve_code, which might
10397 change it. */
10398 gcc_assert (b->next && b->next->op == EXEC_ASSIGN);
10399 gcc_assert (((aop != GFC_OMP_ATOMIC_CAPTURE)
10400 && b->next->next == NULL)
10401 || ((aop == GFC_OMP_ATOMIC_CAPTURE)
10402 && b->next->next != NULL
10403 && b->next->next->op == EXEC_ASSIGN
10404 && b->next->next->next == NULL));
10405 }
10406 break;
10407
10408 case EXEC_OACC_PARALLEL_LOOP:
10409 case EXEC_OACC_PARALLEL:
10410 case EXEC_OACC_KERNELS_LOOP:
10411 case EXEC_OACC_KERNELS:
10412 case EXEC_OACC_DATA:
10413 case EXEC_OACC_HOST_DATA:
10414 case EXEC_OACC_LOOP:
10415 case EXEC_OACC_UPDATE:
10416 case EXEC_OACC_WAIT:
10417 case EXEC_OACC_CACHE:
10418 case EXEC_OACC_ENTER_DATA:
10419 case EXEC_OACC_EXIT_DATA:
10420 case EXEC_OACC_ROUTINE:
10421 case EXEC_OMP_CRITICAL:
10422 case EXEC_OMP_DISTRIBUTE:
10423 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
10424 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
10425 case EXEC_OMP_DISTRIBUTE_SIMD:
10426 case EXEC_OMP_DO:
10427 case EXEC_OMP_DO_SIMD:
10428 case EXEC_OMP_MASTER:
10429 case EXEC_OMP_ORDERED:
10430 case EXEC_OMP_PARALLEL:
10431 case EXEC_OMP_PARALLEL_DO:
10432 case EXEC_OMP_PARALLEL_DO_SIMD:
10433 case EXEC_OMP_PARALLEL_SECTIONS:
10434 case EXEC_OMP_PARALLEL_WORKSHARE:
10435 case EXEC_OMP_SECTIONS:
10436 case EXEC_OMP_SIMD:
10437 case EXEC_OMP_SINGLE:
10438 case EXEC_OMP_TARGET:
10439 case EXEC_OMP_TARGET_DATA:
10440 case EXEC_OMP_TARGET_ENTER_DATA:
10441 case EXEC_OMP_TARGET_EXIT_DATA:
10442 case EXEC_OMP_TARGET_PARALLEL:
10443 case EXEC_OMP_TARGET_PARALLEL_DO:
10444 case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
10445 case EXEC_OMP_TARGET_SIMD:
10446 case EXEC_OMP_TARGET_TEAMS:
10447 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
10448 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
10449 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
10450 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
10451 case EXEC_OMP_TARGET_UPDATE:
10452 case EXEC_OMP_TASK:
10453 case EXEC_OMP_TASKGROUP:
10454 case EXEC_OMP_TASKLOOP:
10455 case EXEC_OMP_TASKLOOP_SIMD:
10456 case EXEC_OMP_TASKWAIT:
10457 case EXEC_OMP_TASKYIELD:
10458 case EXEC_OMP_TEAMS:
10459 case EXEC_OMP_TEAMS_DISTRIBUTE:
10460 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
10461 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
10462 case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
10463 case EXEC_OMP_WORKSHARE:
10464 break;
10465
10466 default:
10467 gfc_internal_error ("gfc_resolve_blocks(): Bad block type");
10468 }
10469
10470 gfc_resolve_code (b->next, ns);
10471 }
10472 }
10473
10474
10475 /* Does everything to resolve an ordinary assignment. Returns true
10476 if this is an interface assignment. */
10477 static bool
10478 resolve_ordinary_assign (gfc_code *code, gfc_namespace *ns)
10479 {
10480 bool rval = false;
10481 gfc_expr *lhs;
10482 gfc_expr *rhs;
10483 int n;
10484 gfc_ref *ref;
10485 symbol_attribute attr;
10486
10487 if (gfc_extend_assign (code, ns))
10488 {
10489 gfc_expr** rhsptr;
10490
10491 if (code->op == EXEC_ASSIGN_CALL)
10492 {
10493 lhs = code->ext.actual->expr;
10494 rhsptr = &code->ext.actual->next->expr;
10495 }
10496 else
10497 {
10498 gfc_actual_arglist* args;
10499 gfc_typebound_proc* tbp;
10500
10501 gcc_assert (code->op == EXEC_COMPCALL);
10502
10503 args = code->expr1->value.compcall.actual;
10504 lhs = args->expr;
10505 rhsptr = &args->next->expr;
10506
10507 tbp = code->expr1->value.compcall.tbp;
10508 gcc_assert (!tbp->is_generic);
10509 }
10510
10511 /* Make a temporary rhs when there is a default initializer
10512 and rhs is the same symbol as the lhs. */
10513 if ((*rhsptr)->expr_type == EXPR_VARIABLE
10514 && (*rhsptr)->symtree->n.sym->ts.type == BT_DERIVED
10515 && gfc_has_default_initializer ((*rhsptr)->symtree->n.sym->ts.u.derived)
10516 && (lhs->symtree->n.sym == (*rhsptr)->symtree->n.sym))
10517 *rhsptr = gfc_get_parentheses (*rhsptr);
10518
10519 return true;
10520 }
10521
10522 lhs = code->expr1;
10523 rhs = code->expr2;
10524
10525 /* Handle the case of a BOZ literal on the RHS. */
10526 if (rhs->ts.type == BT_BOZ)
10527 {
10528 if (gfc_invalid_boz ("BOZ literal constant at %L is neither a DATA "
10529 "statement value nor an actual argument of "
10530 "INT/REAL/DBLE/CMPLX intrinsic subprogram",
10531 &rhs->where))
10532 return false;
10533
10534 switch (lhs->ts.type)
10535 {
10536 case BT_INTEGER:
10537 if (!gfc_boz2int (rhs, lhs->ts.kind))
10538 return false;
10539 break;
10540 case BT_REAL:
10541 if (!gfc_boz2real (rhs, lhs->ts.kind))
10542 return false;
10543 break;
10544 default:
10545 gfc_error ("Invalid use of BOZ literal constant at %L", &rhs->where);
10546 return false;
10547 }
10548 }
10549
10550 if (lhs->ts.type == BT_CHARACTER && warn_character_truncation)
10551 {
10552 HOST_WIDE_INT llen = 0, rlen = 0;
10553 if (lhs->ts.u.cl != NULL
10554 && lhs->ts.u.cl->length != NULL
10555 && lhs->ts.u.cl->length->expr_type == EXPR_CONSTANT)
10556 llen = gfc_mpz_get_hwi (lhs->ts.u.cl->length->value.integer);
10557
10558 if (rhs->expr_type == EXPR_CONSTANT)
10559 rlen = rhs->value.character.length;
10560
10561 else if (rhs->ts.u.cl != NULL
10562 && rhs->ts.u.cl->length != NULL
10563 && rhs->ts.u.cl->length->expr_type == EXPR_CONSTANT)
10564 rlen = gfc_mpz_get_hwi (rhs->ts.u.cl->length->value.integer);
10565
10566 if (rlen && llen && rlen > llen)
10567 gfc_warning_now (OPT_Wcharacter_truncation,
10568 "CHARACTER expression will be truncated "
10569 "in assignment (%ld/%ld) at %L",
10570 (long) llen, (long) rlen, &code->loc);
10571 }
10572
10573 /* Ensure that a vector index expression for the lvalue is evaluated
10574 to a temporary if the lvalue symbol is referenced in it. */
10575 if (lhs->rank)
10576 {
10577 for (ref = lhs->ref; ref; ref= ref->next)
10578 if (ref->type == REF_ARRAY)
10579 {
10580 for (n = 0; n < ref->u.ar.dimen; n++)
10581 if (ref->u.ar.dimen_type[n] == DIMEN_VECTOR
10582 && gfc_find_sym_in_expr (lhs->symtree->n.sym,
10583 ref->u.ar.start[n]))
10584 ref->u.ar.start[n]
10585 = gfc_get_parentheses (ref->u.ar.start[n]);
10586 }
10587 }
10588
10589 if (gfc_pure (NULL))
10590 {
10591 if (lhs->ts.type == BT_DERIVED
10592 && lhs->expr_type == EXPR_VARIABLE
10593 && lhs->ts.u.derived->attr.pointer_comp
10594 && rhs->expr_type == EXPR_VARIABLE
10595 && (gfc_impure_variable (rhs->symtree->n.sym)
10596 || gfc_is_coindexed (rhs)))
10597 {
10598 /* F2008, C1283. */
10599 if (gfc_is_coindexed (rhs))
10600 gfc_error ("Coindexed expression at %L is assigned to "
10601 "a derived type variable with a POINTER "
10602 "component in a PURE procedure",
10603 &rhs->where);
10604 else
10605 gfc_error ("The impure variable at %L is assigned to "
10606 "a derived type variable with a POINTER "
10607 "component in a PURE procedure (12.6)",
10608 &rhs->where);
10609 return rval;
10610 }
10611
10612 /* Fortran 2008, C1283. */
10613 if (gfc_is_coindexed (lhs))
10614 {
10615 gfc_error ("Assignment to coindexed variable at %L in a PURE "
10616 "procedure", &rhs->where);
10617 return rval;
10618 }
10619 }
10620
10621 if (gfc_implicit_pure (NULL))
10622 {
10623 if (lhs->expr_type == EXPR_VARIABLE
10624 && lhs->symtree->n.sym != gfc_current_ns->proc_name
10625 && lhs->symtree->n.sym->ns != gfc_current_ns)
10626 gfc_unset_implicit_pure (NULL);
10627
10628 if (lhs->ts.type == BT_DERIVED
10629 && lhs->expr_type == EXPR_VARIABLE
10630 && lhs->ts.u.derived->attr.pointer_comp
10631 && rhs->expr_type == EXPR_VARIABLE
10632 && (gfc_impure_variable (rhs->symtree->n.sym)
10633 || gfc_is_coindexed (rhs)))
10634 gfc_unset_implicit_pure (NULL);
10635
10636 /* Fortran 2008, C1283. */
10637 if (gfc_is_coindexed (lhs))
10638 gfc_unset_implicit_pure (NULL);
10639 }
10640
10641 /* F2008, 7.2.1.2. */
10642 attr = gfc_expr_attr (lhs);
10643 if (lhs->ts.type == BT_CLASS && attr.allocatable)
10644 {
10645 if (attr.codimension)
10646 {
10647 gfc_error ("Assignment to polymorphic coarray at %L is not "
10648 "permitted", &lhs->where);
10649 return false;
10650 }
10651 if (!gfc_notify_std (GFC_STD_F2008, "Assignment to an allocatable "
10652 "polymorphic variable at %L", &lhs->where))
10653 return false;
10654 if (!flag_realloc_lhs)
10655 {
10656 gfc_error ("Assignment to an allocatable polymorphic variable at %L "
10657 "requires %<-frealloc-lhs%>", &lhs->where);
10658 return false;
10659 }
10660 }
10661 else if (lhs->ts.type == BT_CLASS)
10662 {
10663 gfc_error ("Nonallocatable variable must not be polymorphic in intrinsic "
10664 "assignment at %L - check that there is a matching specific "
10665 "subroutine for '=' operator", &lhs->where);
10666 return false;
10667 }
10668
10669 bool lhs_coindexed = gfc_is_coindexed (lhs);
10670
10671 /* F2008, Section 7.2.1.2. */
10672 if (lhs_coindexed && gfc_has_ultimate_allocatable (lhs))
10673 {
10674 gfc_error ("Coindexed variable must not have an allocatable ultimate "
10675 "component in assignment at %L", &lhs->where);
10676 return false;
10677 }
10678
10679 /* Assign the 'data' of a class object to a derived type. */
10680 if (lhs->ts.type == BT_DERIVED
10681 && rhs->ts.type == BT_CLASS
10682 && rhs->expr_type != EXPR_ARRAY)
10683 gfc_add_data_component (rhs);
10684
10685 /* Make sure there is a vtable and, in particular, a _copy for the
10686 rhs type. */
10687 if (UNLIMITED_POLY (lhs) && lhs->rank && rhs->ts.type != BT_CLASS)
10688 gfc_find_vtab (&rhs->ts);
10689
10690 bool caf_convert_to_send = flag_coarray == GFC_FCOARRAY_LIB
10691 && (lhs_coindexed
10692 || (code->expr2->expr_type == EXPR_FUNCTION
10693 && code->expr2->value.function.isym
10694 && code->expr2->value.function.isym->id == GFC_ISYM_CAF_GET
10695 && (code->expr1->rank == 0 || code->expr2->rank != 0)
10696 && !gfc_expr_attr (rhs).allocatable
10697 && !gfc_has_vector_subscript (rhs)));
10698
10699 gfc_check_assign (lhs, rhs, 1, !caf_convert_to_send);
10700
10701 /* Insert a GFC_ISYM_CAF_SEND intrinsic, when the LHS is a coindexed variable.
10702 Additionally, insert this code when the RHS is a CAF as we then use the
10703 GFC_ISYM_CAF_SEND intrinsic just to avoid a temporary; but do not do so if
10704 the LHS is (re)allocatable or has a vector subscript. If the LHS is a
10705 noncoindexed array and the RHS is a coindexed scalar, use the normal code
10706 path. */
10707 if (caf_convert_to_send)
10708 {
10709 if (code->expr2->expr_type == EXPR_FUNCTION
10710 && code->expr2->value.function.isym
10711 && code->expr2->value.function.isym->id == GFC_ISYM_CAF_GET)
10712 remove_caf_get_intrinsic (code->expr2);
10713 code->op = EXEC_CALL;
10714 gfc_get_sym_tree (GFC_PREFIX ("caf_send"), ns, &code->symtree, true);
10715 code->resolved_sym = code->symtree->n.sym;
10716 code->resolved_sym->attr.flavor = FL_PROCEDURE;
10717 code->resolved_sym->attr.intrinsic = 1;
10718 code->resolved_sym->attr.subroutine = 1;
10719 code->resolved_isym = gfc_intrinsic_subroutine_by_id (GFC_ISYM_CAF_SEND);
10720 gfc_commit_symbol (code->resolved_sym);
10721 code->ext.actual = gfc_get_actual_arglist ();
10722 code->ext.actual->expr = lhs;
10723 code->ext.actual->next = gfc_get_actual_arglist ();
10724 code->ext.actual->next->expr = rhs;
10725 code->expr1 = NULL;
10726 code->expr2 = NULL;
10727 }
10728
10729 return false;
10730 }
10731
10732
10733 /* Add a component reference onto an expression. */
10734
10735 static void
10736 add_comp_ref (gfc_expr *e, gfc_component *c)
10737 {
10738 gfc_ref **ref;
10739 ref = &(e->ref);
10740 while (*ref)
10741 ref = &((*ref)->next);
10742 *ref = gfc_get_ref ();
10743 (*ref)->type = REF_COMPONENT;
10744 (*ref)->u.c.sym = e->ts.u.derived;
10745 (*ref)->u.c.component = c;
10746 e->ts = c->ts;
10747
10748 /* Add a full array ref, as necessary. */
10749 if (c->as)
10750 {
10751 gfc_add_full_array_ref (e, c->as);
10752 e->rank = c->as->rank;
10753 }
10754 }
10755
10756
10757 /* Build an assignment. Keep the argument 'op' for future use, so that
10758 pointer assignments can be made. */
10759
10760 static gfc_code *
10761 build_assignment (gfc_exec_op op, gfc_expr *expr1, gfc_expr *expr2,
10762 gfc_component *comp1, gfc_component *comp2, locus loc)
10763 {
10764 gfc_code *this_code;
10765
10766 this_code = gfc_get_code (op);
10767 this_code->next = NULL;
10768 this_code->expr1 = gfc_copy_expr (expr1);
10769 this_code->expr2 = gfc_copy_expr (expr2);
10770 this_code->loc = loc;
10771 if (comp1 && comp2)
10772 {
10773 add_comp_ref (this_code->expr1, comp1);
10774 add_comp_ref (this_code->expr2, comp2);
10775 }
10776
10777 return this_code;
10778 }
10779
10780
10781 /* Makes a temporary variable expression based on the characteristics of
10782 a given variable expression. */
10783
10784 static gfc_expr*
10785 get_temp_from_expr (gfc_expr *e, gfc_namespace *ns)
10786 {
10787 static int serial = 0;
10788 char name[GFC_MAX_SYMBOL_LEN];
10789 gfc_symtree *tmp;
10790 gfc_array_spec *as;
10791 gfc_array_ref *aref;
10792 gfc_ref *ref;
10793
10794 sprintf (name, GFC_PREFIX("DA%d"), serial++);
10795 gfc_get_sym_tree (name, ns, &tmp, false);
10796 gfc_add_type (tmp->n.sym, &e->ts, NULL);
10797
10798 if (e->expr_type == EXPR_CONSTANT && e->ts.type == BT_CHARACTER)
10799 tmp->n.sym->ts.u.cl->length = gfc_get_int_expr (gfc_charlen_int_kind,
10800 NULL,
10801 e->value.character.length);
10802
10803 as = NULL;
10804 ref = NULL;
10805 aref = NULL;
10806
10807 /* Obtain the arrayspec for the temporary. */
10808 if (e->rank && e->expr_type != EXPR_ARRAY
10809 && e->expr_type != EXPR_FUNCTION
10810 && e->expr_type != EXPR_OP)
10811 {
10812 aref = gfc_find_array_ref (e);
10813 if (e->expr_type == EXPR_VARIABLE
10814 && e->symtree->n.sym->as == aref->as)
10815 as = aref->as;
10816 else
10817 {
10818 for (ref = e->ref; ref; ref = ref->next)
10819 if (ref->type == REF_COMPONENT
10820 && ref->u.c.component->as == aref->as)
10821 {
10822 as = aref->as;
10823 break;
10824 }
10825 }
10826 }
10827
10828 /* Add the attributes and the arrayspec to the temporary. */
10829 tmp->n.sym->attr = gfc_expr_attr (e);
10830 tmp->n.sym->attr.function = 0;
10831 tmp->n.sym->attr.result = 0;
10832 tmp->n.sym->attr.flavor = FL_VARIABLE;
10833 tmp->n.sym->attr.dummy = 0;
10834 tmp->n.sym->attr.intent = INTENT_UNKNOWN;
10835
10836 if (as)
10837 {
10838 tmp->n.sym->as = gfc_copy_array_spec (as);
10839 if (!ref)
10840 ref = e->ref;
10841 if (as->type == AS_DEFERRED)
10842 tmp->n.sym->attr.allocatable = 1;
10843 }
10844 else if (e->rank && (e->expr_type == EXPR_ARRAY
10845 || e->expr_type == EXPR_FUNCTION
10846 || e->expr_type == EXPR_OP))
10847 {
10848 tmp->n.sym->as = gfc_get_array_spec ();
10849 tmp->n.sym->as->type = AS_DEFERRED;
10850 tmp->n.sym->as->rank = e->rank;
10851 tmp->n.sym->attr.allocatable = 1;
10852 tmp->n.sym->attr.dimension = 1;
10853 }
10854 else
10855 tmp->n.sym->attr.dimension = 0;
10856
10857 gfc_set_sym_referenced (tmp->n.sym);
10858 gfc_commit_symbol (tmp->n.sym);
10859 e = gfc_lval_expr_from_sym (tmp->n.sym);
10860
10861 /* Should the lhs be a section, use its array ref for the
10862 temporary expression. */
10863 if (aref && aref->type != AR_FULL)
10864 {
10865 gfc_free_ref_list (e->ref);
10866 e->ref = gfc_copy_ref (ref);
10867 }
10868 return e;
10869 }
10870
10871
10872 /* Add one line of code to the code chain, making sure that 'head' and
10873 'tail' are appropriately updated. */
10874
10875 static void
10876 add_code_to_chain (gfc_code **this_code, gfc_code **head, gfc_code **tail)
10877 {
10878 gcc_assert (this_code);
10879 if (*head == NULL)
10880 *head = *tail = *this_code;
10881 else
10882 *tail = gfc_append_code (*tail, *this_code);
10883 *this_code = NULL;
10884 }
10885
10886
10887 /* Counts the potential number of part array references that would
10888 result from resolution of typebound defined assignments. */
10889
10890 static int
10891 nonscalar_typebound_assign (gfc_symbol *derived, int depth)
10892 {
10893 gfc_component *c;
10894 int c_depth = 0, t_depth;
10895
10896 for (c= derived->components; c; c = c->next)
10897 {
10898 if ((!gfc_bt_struct (c->ts.type)
10899 || c->attr.pointer
10900 || c->attr.allocatable
10901 || c->attr.proc_pointer_comp
10902 || c->attr.class_pointer
10903 || c->attr.proc_pointer)
10904 && !c->attr.defined_assign_comp)
10905 continue;
10906
10907 if (c->as && c_depth == 0)
10908 c_depth = 1;
10909
10910 if (c->ts.u.derived->attr.defined_assign_comp)
10911 t_depth = nonscalar_typebound_assign (c->ts.u.derived,
10912 c->as ? 1 : 0);
10913 else
10914 t_depth = 0;
10915
10916 c_depth = t_depth > c_depth ? t_depth : c_depth;
10917 }
10918 return depth + c_depth;
10919 }
10920
10921
10922 /* Implement 7.2.1.3 of the F08 standard:
10923 "An intrinsic assignment where the variable is of derived type is
10924 performed as if each component of the variable were assigned from the
10925 corresponding component of expr using pointer assignment (7.2.2) for
10926 each pointer component, defined assignment for each nonpointer
10927 nonallocatable component of a type that has a type-bound defined
10928 assignment consistent with the component, intrinsic assignment for
10929 each other nonpointer nonallocatable component, ..."
10930
10931 The pointer assignments are taken care of by the intrinsic
10932 assignment of the structure itself. This function recursively adds
10933 defined assignments where required. The recursion is accomplished
10934 by calling gfc_resolve_code.
10935
10936 When the lhs in a defined assignment has intent INOUT, we need a
10937 temporary for the lhs. In pseudo-code:
10938
10939 ! Only call function lhs once.
10940 if (lhs is not a constant or an variable)
10941 temp_x = expr2
10942 expr2 => temp_x
10943 ! Do the intrinsic assignment
10944 expr1 = expr2
10945 ! Now do the defined assignments
10946 do over components with typebound defined assignment [%cmp]
10947 #if one component's assignment procedure is INOUT
10948 t1 = expr1
10949 #if expr2 non-variable
10950 temp_x = expr2
10951 expr2 => temp_x
10952 # endif
10953 expr1 = expr2
10954 # for each cmp
10955 t1%cmp {defined=} expr2%cmp
10956 expr1%cmp = t1%cmp
10957 #else
10958 expr1 = expr2
10959
10960 # for each cmp
10961 expr1%cmp {defined=} expr2%cmp
10962 #endif
10963 */
10964
10965 /* The temporary assignments have to be put on top of the additional
10966 code to avoid the result being changed by the intrinsic assignment.
10967 */
10968 static int component_assignment_level = 0;
10969 static gfc_code *tmp_head = NULL, *tmp_tail = NULL;
10970
10971 static void
10972 generate_component_assignments (gfc_code **code, gfc_namespace *ns)
10973 {
10974 gfc_component *comp1, *comp2;
10975 gfc_code *this_code = NULL, *head = NULL, *tail = NULL;
10976 gfc_expr *t1;
10977 int error_count, depth;
10978
10979 gfc_get_errors (NULL, &error_count);
10980
10981 /* Filter out continuing processing after an error. */
10982 if (error_count
10983 || (*code)->expr1->ts.type != BT_DERIVED
10984 || (*code)->expr2->ts.type != BT_DERIVED)
10985 return;
10986
10987 /* TODO: Handle more than one part array reference in assignments. */
10988 depth = nonscalar_typebound_assign ((*code)->expr1->ts.u.derived,
10989 (*code)->expr1->rank ? 1 : 0);
10990 if (depth > 1)
10991 {
10992 gfc_warning (0, "TODO: type-bound defined assignment(s) at %L not "
10993 "done because multiple part array references would "
10994 "occur in intermediate expressions.", &(*code)->loc);
10995 return;
10996 }
10997
10998 component_assignment_level++;
10999
11000 /* Create a temporary so that functions get called only once. */
11001 if ((*code)->expr2->expr_type != EXPR_VARIABLE
11002 && (*code)->expr2->expr_type != EXPR_CONSTANT)
11003 {
11004 gfc_expr *tmp_expr;
11005
11006 /* Assign the rhs to the temporary. */
11007 tmp_expr = get_temp_from_expr ((*code)->expr1, ns);
11008 this_code = build_assignment (EXEC_ASSIGN,
11009 tmp_expr, (*code)->expr2,
11010 NULL, NULL, (*code)->loc);
11011 /* Add the code and substitute the rhs expression. */
11012 add_code_to_chain (&this_code, &tmp_head, &tmp_tail);
11013 gfc_free_expr ((*code)->expr2);
11014 (*code)->expr2 = tmp_expr;
11015 }
11016
11017 /* Do the intrinsic assignment. This is not needed if the lhs is one
11018 of the temporaries generated here, since the intrinsic assignment
11019 to the final result already does this. */
11020 if ((*code)->expr1->symtree->n.sym->name[2] != '@')
11021 {
11022 this_code = build_assignment (EXEC_ASSIGN,
11023 (*code)->expr1, (*code)->expr2,
11024 NULL, NULL, (*code)->loc);
11025 add_code_to_chain (&this_code, &head, &tail);
11026 }
11027
11028 comp1 = (*code)->expr1->ts.u.derived->components;
11029 comp2 = (*code)->expr2->ts.u.derived->components;
11030
11031 t1 = NULL;
11032 for (; comp1; comp1 = comp1->next, comp2 = comp2->next)
11033 {
11034 bool inout = false;
11035
11036 /* The intrinsic assignment does the right thing for pointers
11037 of all kinds and allocatable components. */
11038 if (!gfc_bt_struct (comp1->ts.type)
11039 || comp1->attr.pointer
11040 || comp1->attr.allocatable
11041 || comp1->attr.proc_pointer_comp
11042 || comp1->attr.class_pointer
11043 || comp1->attr.proc_pointer)
11044 continue;
11045
11046 /* Make an assigment for this component. */
11047 this_code = build_assignment (EXEC_ASSIGN,
11048 (*code)->expr1, (*code)->expr2,
11049 comp1, comp2, (*code)->loc);
11050
11051 /* Convert the assignment if there is a defined assignment for
11052 this type. Otherwise, using the call from gfc_resolve_code,
11053 recurse into its components. */
11054 gfc_resolve_code (this_code, ns);
11055
11056 if (this_code->op == EXEC_ASSIGN_CALL)
11057 {
11058 gfc_formal_arglist *dummy_args;
11059 gfc_symbol *rsym;
11060 /* Check that there is a typebound defined assignment. If not,
11061 then this must be a module defined assignment. We cannot
11062 use the defined_assign_comp attribute here because it must
11063 be this derived type that has the defined assignment and not
11064 a parent type. */
11065 if (!(comp1->ts.u.derived->f2k_derived
11066 && comp1->ts.u.derived->f2k_derived
11067 ->tb_op[INTRINSIC_ASSIGN]))
11068 {
11069 gfc_free_statements (this_code);
11070 this_code = NULL;
11071 continue;
11072 }
11073
11074 /* If the first argument of the subroutine has intent INOUT
11075 a temporary must be generated and used instead. */
11076 rsym = this_code->resolved_sym;
11077 dummy_args = gfc_sym_get_dummy_args (rsym);
11078 if (dummy_args
11079 && dummy_args->sym->attr.intent == INTENT_INOUT)
11080 {
11081 gfc_code *temp_code;
11082 inout = true;
11083
11084 /* Build the temporary required for the assignment and put
11085 it at the head of the generated code. */
11086 if (!t1)
11087 {
11088 t1 = get_temp_from_expr ((*code)->expr1, ns);
11089 temp_code = build_assignment (EXEC_ASSIGN,
11090 t1, (*code)->expr1,
11091 NULL, NULL, (*code)->loc);
11092
11093 /* For allocatable LHS, check whether it is allocated. Note
11094 that allocatable components with defined assignment are
11095 not yet support. See PR 57696. */
11096 if ((*code)->expr1->symtree->n.sym->attr.allocatable)
11097 {
11098 gfc_code *block;
11099 gfc_expr *e =
11100 gfc_lval_expr_from_sym ((*code)->expr1->symtree->n.sym);
11101 block = gfc_get_code (EXEC_IF);
11102 block->block = gfc_get_code (EXEC_IF);
11103 block->block->expr1
11104 = gfc_build_intrinsic_call (ns,
11105 GFC_ISYM_ALLOCATED, "allocated",
11106 (*code)->loc, 1, e);
11107 block->block->next = temp_code;
11108 temp_code = block;
11109 }
11110 add_code_to_chain (&temp_code, &tmp_head, &tmp_tail);
11111 }
11112
11113 /* Replace the first actual arg with the component of the
11114 temporary. */
11115 gfc_free_expr (this_code->ext.actual->expr);
11116 this_code->ext.actual->expr = gfc_copy_expr (t1);
11117 add_comp_ref (this_code->ext.actual->expr, comp1);
11118
11119 /* If the LHS variable is allocatable and wasn't allocated and
11120 the temporary is allocatable, pointer assign the address of
11121 the freshly allocated LHS to the temporary. */
11122 if ((*code)->expr1->symtree->n.sym->attr.allocatable
11123 && gfc_expr_attr ((*code)->expr1).allocatable)
11124 {
11125 gfc_code *block;
11126 gfc_expr *cond;
11127
11128 cond = gfc_get_expr ();
11129 cond->ts.type = BT_LOGICAL;
11130 cond->ts.kind = gfc_default_logical_kind;
11131 cond->expr_type = EXPR_OP;
11132 cond->where = (*code)->loc;
11133 cond->value.op.op = INTRINSIC_NOT;
11134 cond->value.op.op1 = gfc_build_intrinsic_call (ns,
11135 GFC_ISYM_ALLOCATED, "allocated",
11136 (*code)->loc, 1, gfc_copy_expr (t1));
11137 block = gfc_get_code (EXEC_IF);
11138 block->block = gfc_get_code (EXEC_IF);
11139 block->block->expr1 = cond;
11140 block->block->next = build_assignment (EXEC_POINTER_ASSIGN,
11141 t1, (*code)->expr1,
11142 NULL, NULL, (*code)->loc);
11143 add_code_to_chain (&block, &head, &tail);
11144 }
11145 }
11146 }
11147 else if (this_code->op == EXEC_ASSIGN && !this_code->next)
11148 {
11149 /* Don't add intrinsic assignments since they are already
11150 effected by the intrinsic assignment of the structure. */
11151 gfc_free_statements (this_code);
11152 this_code = NULL;
11153 continue;
11154 }
11155
11156 add_code_to_chain (&this_code, &head, &tail);
11157
11158 if (t1 && inout)
11159 {
11160 /* Transfer the value to the final result. */
11161 this_code = build_assignment (EXEC_ASSIGN,
11162 (*code)->expr1, t1,
11163 comp1, comp2, (*code)->loc);
11164 add_code_to_chain (&this_code, &head, &tail);
11165 }
11166 }
11167
11168 /* Put the temporary assignments at the top of the generated code. */
11169 if (tmp_head && component_assignment_level == 1)
11170 {
11171 gfc_append_code (tmp_head, head);
11172 head = tmp_head;
11173 tmp_head = tmp_tail = NULL;
11174 }
11175
11176 // If we did a pointer assignment - thus, we need to ensure that the LHS is
11177 // not accidentally deallocated. Hence, nullify t1.
11178 if (t1 && (*code)->expr1->symtree->n.sym->attr.allocatable
11179 && gfc_expr_attr ((*code)->expr1).allocatable)
11180 {
11181 gfc_code *block;
11182 gfc_expr *cond;
11183 gfc_expr *e;
11184
11185 e = gfc_lval_expr_from_sym ((*code)->expr1->symtree->n.sym);
11186 cond = gfc_build_intrinsic_call (ns, GFC_ISYM_ASSOCIATED, "associated",
11187 (*code)->loc, 2, gfc_copy_expr (t1), e);
11188 block = gfc_get_code (EXEC_IF);
11189 block->block = gfc_get_code (EXEC_IF);
11190 block->block->expr1 = cond;
11191 block->block->next = build_assignment (EXEC_POINTER_ASSIGN,
11192 t1, gfc_get_null_expr (&(*code)->loc),
11193 NULL, NULL, (*code)->loc);
11194 gfc_append_code (tail, block);
11195 tail = block;
11196 }
11197
11198 /* Now attach the remaining code chain to the input code. Step on
11199 to the end of the new code since resolution is complete. */
11200 gcc_assert ((*code)->op == EXEC_ASSIGN);
11201 tail->next = (*code)->next;
11202 /* Overwrite 'code' because this would place the intrinsic assignment
11203 before the temporary for the lhs is created. */
11204 gfc_free_expr ((*code)->expr1);
11205 gfc_free_expr ((*code)->expr2);
11206 **code = *head;
11207 if (head != tail)
11208 free (head);
11209 *code = tail;
11210
11211 component_assignment_level--;
11212 }
11213
11214
11215 /* F2008: Pointer function assignments are of the form:
11216 ptr_fcn (args) = expr
11217 This function breaks these assignments into two statements:
11218 temporary_pointer => ptr_fcn(args)
11219 temporary_pointer = expr */
11220
11221 static bool
11222 resolve_ptr_fcn_assign (gfc_code **code, gfc_namespace *ns)
11223 {
11224 gfc_expr *tmp_ptr_expr;
11225 gfc_code *this_code;
11226 gfc_component *comp;
11227 gfc_symbol *s;
11228
11229 if ((*code)->expr1->expr_type != EXPR_FUNCTION)
11230 return false;
11231
11232 /* Even if standard does not support this feature, continue to build
11233 the two statements to avoid upsetting frontend_passes.c. */
11234 gfc_notify_std (GFC_STD_F2008, "Pointer procedure assignment at "
11235 "%L", &(*code)->loc);
11236
11237 comp = gfc_get_proc_ptr_comp ((*code)->expr1);
11238
11239 if (comp)
11240 s = comp->ts.interface;
11241 else
11242 s = (*code)->expr1->symtree->n.sym;
11243
11244 if (s == NULL || !s->result->attr.pointer)
11245 {
11246 gfc_error ("The function result on the lhs of the assignment at "
11247 "%L must have the pointer attribute.",
11248 &(*code)->expr1->where);
11249 (*code)->op = EXEC_NOP;
11250 return false;
11251 }
11252
11253 tmp_ptr_expr = get_temp_from_expr ((*code)->expr2, ns);
11254
11255 /* get_temp_from_expression is set up for ordinary assignments. To that
11256 end, where array bounds are not known, arrays are made allocatable.
11257 Change the temporary to a pointer here. */
11258 tmp_ptr_expr->symtree->n.sym->attr.pointer = 1;
11259 tmp_ptr_expr->symtree->n.sym->attr.allocatable = 0;
11260 tmp_ptr_expr->where = (*code)->loc;
11261
11262 this_code = build_assignment (EXEC_ASSIGN,
11263 tmp_ptr_expr, (*code)->expr2,
11264 NULL, NULL, (*code)->loc);
11265 this_code->next = (*code)->next;
11266 (*code)->next = this_code;
11267 (*code)->op = EXEC_POINTER_ASSIGN;
11268 (*code)->expr2 = (*code)->expr1;
11269 (*code)->expr1 = tmp_ptr_expr;
11270
11271 return true;
11272 }
11273
11274
11275 /* Deferred character length assignments from an operator expression
11276 require a temporary because the character length of the lhs can
11277 change in the course of the assignment. */
11278
11279 static bool
11280 deferred_op_assign (gfc_code **code, gfc_namespace *ns)
11281 {
11282 gfc_expr *tmp_expr;
11283 gfc_code *this_code;
11284
11285 if (!((*code)->expr1->ts.type == BT_CHARACTER
11286 && (*code)->expr1->ts.deferred && (*code)->expr1->rank
11287 && (*code)->expr2->expr_type == EXPR_OP))
11288 return false;
11289
11290 if (!gfc_check_dependency ((*code)->expr1, (*code)->expr2, 1))
11291 return false;
11292
11293 if (gfc_expr_attr ((*code)->expr1).pointer)
11294 return false;
11295
11296 tmp_expr = get_temp_from_expr ((*code)->expr1, ns);
11297 tmp_expr->where = (*code)->loc;
11298
11299 /* A new charlen is required to ensure that the variable string
11300 length is different to that of the original lhs. */
11301 tmp_expr->ts.u.cl = gfc_get_charlen();
11302 tmp_expr->symtree->n.sym->ts.u.cl = tmp_expr->ts.u.cl;
11303 tmp_expr->ts.u.cl->next = (*code)->expr2->ts.u.cl->next;
11304 (*code)->expr2->ts.u.cl->next = tmp_expr->ts.u.cl;
11305
11306 tmp_expr->symtree->n.sym->ts.deferred = 1;
11307
11308 this_code = build_assignment (EXEC_ASSIGN,
11309 (*code)->expr1,
11310 gfc_copy_expr (tmp_expr),
11311 NULL, NULL, (*code)->loc);
11312
11313 (*code)->expr1 = tmp_expr;
11314
11315 this_code->next = (*code)->next;
11316 (*code)->next = this_code;
11317
11318 return true;
11319 }
11320
11321
11322 /* Given a block of code, recursively resolve everything pointed to by this
11323 code block. */
11324
11325 void
11326 gfc_resolve_code (gfc_code *code, gfc_namespace *ns)
11327 {
11328 int omp_workshare_save;
11329 int forall_save, do_concurrent_save;
11330 code_stack frame;
11331 bool t;
11332
11333 frame.prev = cs_base;
11334 frame.head = code;
11335 cs_base = &frame;
11336
11337 find_reachable_labels (code);
11338
11339 for (; code; code = code->next)
11340 {
11341 frame.current = code;
11342 forall_save = forall_flag;
11343 do_concurrent_save = gfc_do_concurrent_flag;
11344
11345 if (code->op == EXEC_FORALL)
11346 {
11347 forall_flag = 1;
11348 gfc_resolve_forall (code, ns, forall_save);
11349 forall_flag = 2;
11350 }
11351 else if (code->block)
11352 {
11353 omp_workshare_save = -1;
11354 switch (code->op)
11355 {
11356 case EXEC_OACC_PARALLEL_LOOP:
11357 case EXEC_OACC_PARALLEL:
11358 case EXEC_OACC_KERNELS_LOOP:
11359 case EXEC_OACC_KERNELS:
11360 case EXEC_OACC_DATA:
11361 case EXEC_OACC_HOST_DATA:
11362 case EXEC_OACC_LOOP:
11363 gfc_resolve_oacc_blocks (code, ns);
11364 break;
11365 case EXEC_OMP_PARALLEL_WORKSHARE:
11366 omp_workshare_save = omp_workshare_flag;
11367 omp_workshare_flag = 1;
11368 gfc_resolve_omp_parallel_blocks (code, ns);
11369 break;
11370 case EXEC_OMP_PARALLEL:
11371 case EXEC_OMP_PARALLEL_DO:
11372 case EXEC_OMP_PARALLEL_DO_SIMD:
11373 case EXEC_OMP_PARALLEL_SECTIONS:
11374 case EXEC_OMP_TARGET_PARALLEL:
11375 case EXEC_OMP_TARGET_PARALLEL_DO:
11376 case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
11377 case EXEC_OMP_TARGET_TEAMS:
11378 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
11379 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
11380 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
11381 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
11382 case EXEC_OMP_TASK:
11383 case EXEC_OMP_TASKLOOP:
11384 case EXEC_OMP_TASKLOOP_SIMD:
11385 case EXEC_OMP_TEAMS:
11386 case EXEC_OMP_TEAMS_DISTRIBUTE:
11387 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
11388 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
11389 case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
11390 omp_workshare_save = omp_workshare_flag;
11391 omp_workshare_flag = 0;
11392 gfc_resolve_omp_parallel_blocks (code, ns);
11393 break;
11394 case EXEC_OMP_DISTRIBUTE:
11395 case EXEC_OMP_DISTRIBUTE_SIMD:
11396 case EXEC_OMP_DO:
11397 case EXEC_OMP_DO_SIMD:
11398 case EXEC_OMP_SIMD:
11399 case EXEC_OMP_TARGET_SIMD:
11400 gfc_resolve_omp_do_blocks (code, ns);
11401 break;
11402 case EXEC_SELECT_TYPE:
11403 /* Blocks are handled in resolve_select_type because we have
11404 to transform the SELECT TYPE into ASSOCIATE first. */
11405 break;
11406 case EXEC_DO_CONCURRENT:
11407 gfc_do_concurrent_flag = 1;
11408 gfc_resolve_blocks (code->block, ns);
11409 gfc_do_concurrent_flag = 2;
11410 break;
11411 case EXEC_OMP_WORKSHARE:
11412 omp_workshare_save = omp_workshare_flag;
11413 omp_workshare_flag = 1;
11414 /* FALL THROUGH */
11415 default:
11416 gfc_resolve_blocks (code->block, ns);
11417 break;
11418 }
11419
11420 if (omp_workshare_save != -1)
11421 omp_workshare_flag = omp_workshare_save;
11422 }
11423 start:
11424 t = true;
11425 if (code->op != EXEC_COMPCALL && code->op != EXEC_CALL_PPC)
11426 t = gfc_resolve_expr (code->expr1);
11427 forall_flag = forall_save;
11428 gfc_do_concurrent_flag = do_concurrent_save;
11429
11430 if (!gfc_resolve_expr (code->expr2))
11431 t = false;
11432
11433 if (code->op == EXEC_ALLOCATE
11434 && !gfc_resolve_expr (code->expr3))
11435 t = false;
11436
11437 switch (code->op)
11438 {
11439 case EXEC_NOP:
11440 case EXEC_END_BLOCK:
11441 case EXEC_END_NESTED_BLOCK:
11442 case EXEC_CYCLE:
11443 case EXEC_PAUSE:
11444 case EXEC_STOP:
11445 case EXEC_ERROR_STOP:
11446 case EXEC_EXIT:
11447 case EXEC_CONTINUE:
11448 case EXEC_DT_END:
11449 case EXEC_ASSIGN_CALL:
11450 break;
11451
11452 case EXEC_CRITICAL:
11453 resolve_critical (code);
11454 break;
11455
11456 case EXEC_SYNC_ALL:
11457 case EXEC_SYNC_IMAGES:
11458 case EXEC_SYNC_MEMORY:
11459 resolve_sync (code);
11460 break;
11461
11462 case EXEC_LOCK:
11463 case EXEC_UNLOCK:
11464 case EXEC_EVENT_POST:
11465 case EXEC_EVENT_WAIT:
11466 resolve_lock_unlock_event (code);
11467 break;
11468
11469 case EXEC_FAIL_IMAGE:
11470 case EXEC_FORM_TEAM:
11471 case EXEC_CHANGE_TEAM:
11472 case EXEC_END_TEAM:
11473 case EXEC_SYNC_TEAM:
11474 break;
11475
11476 case EXEC_ENTRY:
11477 /* Keep track of which entry we are up to. */
11478 current_entry_id = code->ext.entry->id;
11479 break;
11480
11481 case EXEC_WHERE:
11482 resolve_where (code, NULL);
11483 break;
11484
11485 case EXEC_GOTO:
11486 if (code->expr1 != NULL)
11487 {
11488 if (code->expr1->ts.type != BT_INTEGER)
11489 gfc_error ("ASSIGNED GOTO statement at %L requires an "
11490 "INTEGER variable", &code->expr1->where);
11491 else if (code->expr1->symtree->n.sym->attr.assign != 1)
11492 gfc_error ("Variable %qs has not been assigned a target "
11493 "label at %L", code->expr1->symtree->n.sym->name,
11494 &code->expr1->where);
11495 }
11496 else
11497 resolve_branch (code->label1, code);
11498 break;
11499
11500 case EXEC_RETURN:
11501 if (code->expr1 != NULL
11502 && (code->expr1->ts.type != BT_INTEGER || code->expr1->rank))
11503 gfc_error ("Alternate RETURN statement at %L requires a SCALAR-"
11504 "INTEGER return specifier", &code->expr1->where);
11505 break;
11506
11507 case EXEC_INIT_ASSIGN:
11508 case EXEC_END_PROCEDURE:
11509 break;
11510
11511 case EXEC_ASSIGN:
11512 if (!t)
11513 break;
11514
11515 /* Remove a GFC_ISYM_CAF_GET inserted for a coindexed variable on
11516 the LHS. */
11517 if (code->expr1->expr_type == EXPR_FUNCTION
11518 && code->expr1->value.function.isym
11519 && code->expr1->value.function.isym->id == GFC_ISYM_CAF_GET)
11520 remove_caf_get_intrinsic (code->expr1);
11521
11522 /* If this is a pointer function in an lvalue variable context,
11523 the new code will have to be resolved afresh. This is also the
11524 case with an error, where the code is transformed into NOP to
11525 prevent ICEs downstream. */
11526 if (resolve_ptr_fcn_assign (&code, ns)
11527 || code->op == EXEC_NOP)
11528 goto start;
11529
11530 if (!gfc_check_vardef_context (code->expr1, false, false, false,
11531 _("assignment")))
11532 break;
11533
11534 if (resolve_ordinary_assign (code, ns))
11535 {
11536 if (code->op == EXEC_COMPCALL)
11537 goto compcall;
11538 else
11539 goto call;
11540 }
11541
11542 /* Check for dependencies in deferred character length array
11543 assignments and generate a temporary, if necessary. */
11544 if (code->op == EXEC_ASSIGN && deferred_op_assign (&code, ns))
11545 break;
11546
11547 /* F03 7.4.1.3 for non-allocatable, non-pointer components. */
11548 if (code->op != EXEC_CALL && code->expr1->ts.type == BT_DERIVED
11549 && code->expr1->ts.u.derived
11550 && code->expr1->ts.u.derived->attr.defined_assign_comp)
11551 generate_component_assignments (&code, ns);
11552
11553 break;
11554
11555 case EXEC_LABEL_ASSIGN:
11556 if (code->label1->defined == ST_LABEL_UNKNOWN)
11557 gfc_error ("Label %d referenced at %L is never defined",
11558 code->label1->value, &code->label1->where);
11559 if (t
11560 && (code->expr1->expr_type != EXPR_VARIABLE
11561 || code->expr1->symtree->n.sym->ts.type != BT_INTEGER
11562 || code->expr1->symtree->n.sym->ts.kind
11563 != gfc_default_integer_kind
11564 || code->expr1->symtree->n.sym->as != NULL))
11565 gfc_error ("ASSIGN statement at %L requires a scalar "
11566 "default INTEGER variable", &code->expr1->where);
11567 break;
11568
11569 case EXEC_POINTER_ASSIGN:
11570 {
11571 gfc_expr* e;
11572
11573 if (!t)
11574 break;
11575
11576 /* This is both a variable definition and pointer assignment
11577 context, so check both of them. For rank remapping, a final
11578 array ref may be present on the LHS and fool gfc_expr_attr
11579 used in gfc_check_vardef_context. Remove it. */
11580 e = remove_last_array_ref (code->expr1);
11581 t = gfc_check_vardef_context (e, true, false, false,
11582 _("pointer assignment"));
11583 if (t)
11584 t = gfc_check_vardef_context (e, false, false, false,
11585 _("pointer assignment"));
11586 gfc_free_expr (e);
11587
11588 t = gfc_check_pointer_assign (code->expr1, code->expr2, !t) && t;
11589
11590 if (!t)
11591 break;
11592
11593 /* Assigning a class object always is a regular assign. */
11594 if (code->expr2->ts.type == BT_CLASS
11595 && code->expr1->ts.type == BT_CLASS
11596 && !CLASS_DATA (code->expr2)->attr.dimension
11597 && !(gfc_expr_attr (code->expr1).proc_pointer
11598 && code->expr2->expr_type == EXPR_VARIABLE
11599 && code->expr2->symtree->n.sym->attr.flavor
11600 == FL_PROCEDURE))
11601 code->op = EXEC_ASSIGN;
11602 break;
11603 }
11604
11605 case EXEC_ARITHMETIC_IF:
11606 {
11607 gfc_expr *e = code->expr1;
11608
11609 gfc_resolve_expr (e);
11610 if (e->expr_type == EXPR_NULL)
11611 gfc_error ("Invalid NULL at %L", &e->where);
11612
11613 if (t && (e->rank > 0
11614 || !(e->ts.type == BT_REAL || e->ts.type == BT_INTEGER)))
11615 gfc_error ("Arithmetic IF statement at %L requires a scalar "
11616 "REAL or INTEGER expression", &e->where);
11617
11618 resolve_branch (code->label1, code);
11619 resolve_branch (code->label2, code);
11620 resolve_branch (code->label3, code);
11621 }
11622 break;
11623
11624 case EXEC_IF:
11625 if (t && code->expr1 != NULL
11626 && (code->expr1->ts.type != BT_LOGICAL
11627 || code->expr1->rank != 0))
11628 gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
11629 &code->expr1->where);
11630 break;
11631
11632 case EXEC_CALL:
11633 call:
11634 resolve_call (code);
11635 break;
11636
11637 case EXEC_COMPCALL:
11638 compcall:
11639 resolve_typebound_subroutine (code);
11640 break;
11641
11642 case EXEC_CALL_PPC:
11643 resolve_ppc_call (code);
11644 break;
11645
11646 case EXEC_SELECT:
11647 /* Select is complicated. Also, a SELECT construct could be
11648 a transformed computed GOTO. */
11649 resolve_select (code, false);
11650 break;
11651
11652 case EXEC_SELECT_TYPE:
11653 resolve_select_type (code, ns);
11654 break;
11655
11656 case EXEC_BLOCK:
11657 resolve_block_construct (code);
11658 break;
11659
11660 case EXEC_DO:
11661 if (code->ext.iterator != NULL)
11662 {
11663 gfc_iterator *iter = code->ext.iterator;
11664 if (gfc_resolve_iterator (iter, true, false))
11665 gfc_resolve_do_iterator (code, iter->var->symtree->n.sym,
11666 true);
11667 }
11668 break;
11669
11670 case EXEC_DO_WHILE:
11671 if (code->expr1 == NULL)
11672 gfc_internal_error ("gfc_resolve_code(): No expression on "
11673 "DO WHILE");
11674 if (t
11675 && (code->expr1->rank != 0
11676 || code->expr1->ts.type != BT_LOGICAL))
11677 gfc_error ("Exit condition of DO WHILE loop at %L must be "
11678 "a scalar LOGICAL expression", &code->expr1->where);
11679 break;
11680
11681 case EXEC_ALLOCATE:
11682 if (t)
11683 resolve_allocate_deallocate (code, "ALLOCATE");
11684
11685 break;
11686
11687 case EXEC_DEALLOCATE:
11688 if (t)
11689 resolve_allocate_deallocate (code, "DEALLOCATE");
11690
11691 break;
11692
11693 case EXEC_OPEN:
11694 if (!gfc_resolve_open (code->ext.open))
11695 break;
11696
11697 resolve_branch (code->ext.open->err, code);
11698 break;
11699
11700 case EXEC_CLOSE:
11701 if (!gfc_resolve_close (code->ext.close))
11702 break;
11703
11704 resolve_branch (code->ext.close->err, code);
11705 break;
11706
11707 case EXEC_BACKSPACE:
11708 case EXEC_ENDFILE:
11709 case EXEC_REWIND:
11710 case EXEC_FLUSH:
11711 if (!gfc_resolve_filepos (code->ext.filepos, &code->loc))
11712 break;
11713
11714 resolve_branch (code->ext.filepos->err, code);
11715 break;
11716
11717 case EXEC_INQUIRE:
11718 if (!gfc_resolve_inquire (code->ext.inquire))
11719 break;
11720
11721 resolve_branch (code->ext.inquire->err, code);
11722 break;
11723
11724 case EXEC_IOLENGTH:
11725 gcc_assert (code->ext.inquire != NULL);
11726 if (!gfc_resolve_inquire (code->ext.inquire))
11727 break;
11728
11729 resolve_branch (code->ext.inquire->err, code);
11730 break;
11731
11732 case EXEC_WAIT:
11733 if (!gfc_resolve_wait (code->ext.wait))
11734 break;
11735
11736 resolve_branch (code->ext.wait->err, code);
11737 resolve_branch (code->ext.wait->end, code);
11738 resolve_branch (code->ext.wait->eor, code);
11739 break;
11740
11741 case EXEC_READ:
11742 case EXEC_WRITE:
11743 if (!gfc_resolve_dt (code->ext.dt, &code->loc))
11744 break;
11745
11746 resolve_branch (code->ext.dt->err, code);
11747 resolve_branch (code->ext.dt->end, code);
11748 resolve_branch (code->ext.dt->eor, code);
11749 break;
11750
11751 case EXEC_TRANSFER:
11752 resolve_transfer (code);
11753 break;
11754
11755 case EXEC_DO_CONCURRENT:
11756 case EXEC_FORALL:
11757 resolve_forall_iterators (code->ext.forall_iterator);
11758
11759 if (code->expr1 != NULL
11760 && (code->expr1->ts.type != BT_LOGICAL || code->expr1->rank))
11761 gfc_error ("FORALL mask clause at %L requires a scalar LOGICAL "
11762 "expression", &code->expr1->where);
11763 break;
11764
11765 case EXEC_OACC_PARALLEL_LOOP:
11766 case EXEC_OACC_PARALLEL:
11767 case EXEC_OACC_KERNELS_LOOP:
11768 case EXEC_OACC_KERNELS:
11769 case EXEC_OACC_DATA:
11770 case EXEC_OACC_HOST_DATA:
11771 case EXEC_OACC_LOOP:
11772 case EXEC_OACC_UPDATE:
11773 case EXEC_OACC_WAIT:
11774 case EXEC_OACC_CACHE:
11775 case EXEC_OACC_ENTER_DATA:
11776 case EXEC_OACC_EXIT_DATA:
11777 case EXEC_OACC_ATOMIC:
11778 case EXEC_OACC_DECLARE:
11779 gfc_resolve_oacc_directive (code, ns);
11780 break;
11781
11782 case EXEC_OMP_ATOMIC:
11783 case EXEC_OMP_BARRIER:
11784 case EXEC_OMP_CANCEL:
11785 case EXEC_OMP_CANCELLATION_POINT:
11786 case EXEC_OMP_CRITICAL:
11787 case EXEC_OMP_FLUSH:
11788 case EXEC_OMP_DISTRIBUTE:
11789 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
11790 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
11791 case EXEC_OMP_DISTRIBUTE_SIMD:
11792 case EXEC_OMP_DO:
11793 case EXEC_OMP_DO_SIMD:
11794 case EXEC_OMP_MASTER:
11795 case EXEC_OMP_ORDERED:
11796 case EXEC_OMP_SECTIONS:
11797 case EXEC_OMP_SIMD:
11798 case EXEC_OMP_SINGLE:
11799 case EXEC_OMP_TARGET:
11800 case EXEC_OMP_TARGET_DATA:
11801 case EXEC_OMP_TARGET_ENTER_DATA:
11802 case EXEC_OMP_TARGET_EXIT_DATA:
11803 case EXEC_OMP_TARGET_PARALLEL:
11804 case EXEC_OMP_TARGET_PARALLEL_DO:
11805 case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
11806 case EXEC_OMP_TARGET_SIMD:
11807 case EXEC_OMP_TARGET_TEAMS:
11808 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
11809 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
11810 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
11811 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
11812 case EXEC_OMP_TARGET_UPDATE:
11813 case EXEC_OMP_TASK:
11814 case EXEC_OMP_TASKGROUP:
11815 case EXEC_OMP_TASKLOOP:
11816 case EXEC_OMP_TASKLOOP_SIMD:
11817 case EXEC_OMP_TASKWAIT:
11818 case EXEC_OMP_TASKYIELD:
11819 case EXEC_OMP_TEAMS:
11820 case EXEC_OMP_TEAMS_DISTRIBUTE:
11821 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
11822 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
11823 case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
11824 case EXEC_OMP_WORKSHARE:
11825 gfc_resolve_omp_directive (code, ns);
11826 break;
11827
11828 case EXEC_OMP_PARALLEL:
11829 case EXEC_OMP_PARALLEL_DO:
11830 case EXEC_OMP_PARALLEL_DO_SIMD:
11831 case EXEC_OMP_PARALLEL_SECTIONS:
11832 case EXEC_OMP_PARALLEL_WORKSHARE:
11833 omp_workshare_save = omp_workshare_flag;
11834 omp_workshare_flag = 0;
11835 gfc_resolve_omp_directive (code, ns);
11836 omp_workshare_flag = omp_workshare_save;
11837 break;
11838
11839 default:
11840 gfc_internal_error ("gfc_resolve_code(): Bad statement code");
11841 }
11842 }
11843
11844 cs_base = frame.prev;
11845 }
11846
11847
11848 /* Resolve initial values and make sure they are compatible with
11849 the variable. */
11850
11851 static void
11852 resolve_values (gfc_symbol *sym)
11853 {
11854 bool t;
11855
11856 if (sym->value == NULL)
11857 return;
11858
11859 if (sym->value->expr_type == EXPR_STRUCTURE)
11860 t= resolve_structure_cons (sym->value, 1);
11861 else
11862 t = gfc_resolve_expr (sym->value);
11863
11864 if (!t)
11865 return;
11866
11867 gfc_check_assign_symbol (sym, NULL, sym->value);
11868 }
11869
11870
11871 /* Verify any BIND(C) derived types in the namespace so we can report errors
11872 for them once, rather than for each variable declared of that type. */
11873
11874 static void
11875 resolve_bind_c_derived_types (gfc_symbol *derived_sym)
11876 {
11877 if (derived_sym != NULL && derived_sym->attr.flavor == FL_DERIVED
11878 && derived_sym->attr.is_bind_c == 1)
11879 verify_bind_c_derived_type (derived_sym);
11880
11881 return;
11882 }
11883
11884
11885 /* Check the interfaces of DTIO procedures associated with derived
11886 type 'sym'. These procedures can either have typebound bindings or
11887 can appear in DTIO generic interfaces. */
11888
11889 static void
11890 gfc_verify_DTIO_procedures (gfc_symbol *sym)
11891 {
11892 if (!sym || sym->attr.flavor != FL_DERIVED)
11893 return;
11894
11895 gfc_check_dtio_interfaces (sym);
11896
11897 return;
11898 }
11899
11900 /* Verify that any binding labels used in a given namespace do not collide
11901 with the names or binding labels of any global symbols. Multiple INTERFACE
11902 for the same procedure are permitted. */
11903
11904 static void
11905 gfc_verify_binding_labels (gfc_symbol *sym)
11906 {
11907 gfc_gsymbol *gsym;
11908 const char *module;
11909
11910 if (!sym || !sym->attr.is_bind_c || sym->attr.is_iso_c
11911 || sym->attr.flavor == FL_DERIVED || !sym->binding_label)
11912 return;
11913
11914 gsym = gfc_find_case_gsymbol (gfc_gsym_root, sym->binding_label);
11915
11916 if (sym->module)
11917 module = sym->module;
11918 else if (sym->ns && sym->ns->proc_name
11919 && sym->ns->proc_name->attr.flavor == FL_MODULE)
11920 module = sym->ns->proc_name->name;
11921 else if (sym->ns && sym->ns->parent
11922 && sym->ns && sym->ns->parent->proc_name
11923 && sym->ns->parent->proc_name->attr.flavor == FL_MODULE)
11924 module = sym->ns->parent->proc_name->name;
11925 else
11926 module = NULL;
11927
11928 if (!gsym
11929 || (!gsym->defined
11930 && (gsym->type == GSYM_FUNCTION || gsym->type == GSYM_SUBROUTINE)))
11931 {
11932 if (!gsym)
11933 gsym = gfc_get_gsymbol (sym->binding_label, true);
11934 gsym->where = sym->declared_at;
11935 gsym->sym_name = sym->name;
11936 gsym->binding_label = sym->binding_label;
11937 gsym->ns = sym->ns;
11938 gsym->mod_name = module;
11939 if (sym->attr.function)
11940 gsym->type = GSYM_FUNCTION;
11941 else if (sym->attr.subroutine)
11942 gsym->type = GSYM_SUBROUTINE;
11943 /* Mark as variable/procedure as defined, unless its an INTERFACE. */
11944 gsym->defined = sym->attr.if_source != IFSRC_IFBODY;
11945 return;
11946 }
11947
11948 if (sym->attr.flavor == FL_VARIABLE && gsym->type != GSYM_UNKNOWN)
11949 {
11950 gfc_error ("Variable %qs with binding label %qs at %L uses the same global "
11951 "identifier as entity at %L", sym->name,
11952 sym->binding_label, &sym->declared_at, &gsym->where);
11953 /* Clear the binding label to prevent checking multiple times. */
11954 sym->binding_label = NULL;
11955 return;
11956 }
11957
11958 if (sym->attr.flavor == FL_VARIABLE && module
11959 && (strcmp (module, gsym->mod_name) != 0
11960 || strcmp (sym->name, gsym->sym_name) != 0))
11961 {
11962 /* This can only happen if the variable is defined in a module - if it
11963 isn't the same module, reject it. */
11964 gfc_error ("Variable %qs from module %qs with binding label %qs at %L "
11965 "uses the same global identifier as entity at %L from module %qs",
11966 sym->name, module, sym->binding_label,
11967 &sym->declared_at, &gsym->where, gsym->mod_name);
11968 sym->binding_label = NULL;
11969 return;
11970 }
11971
11972 if ((sym->attr.function || sym->attr.subroutine)
11973 && ((gsym->type != GSYM_SUBROUTINE && gsym->type != GSYM_FUNCTION)
11974 || (gsym->defined && sym->attr.if_source != IFSRC_IFBODY))
11975 && (sym != gsym->ns->proc_name && sym->attr.entry == 0)
11976 && (module != gsym->mod_name
11977 || strcmp (gsym->sym_name, sym->name) != 0
11978 || (module && strcmp (module, gsym->mod_name) != 0)))
11979 {
11980 /* Print an error if the procedure is defined multiple times; we have to
11981 exclude references to the same procedure via module association or
11982 multiple checks for the same procedure. */
11983 gfc_error ("Procedure %qs with binding label %qs at %L uses the same "
11984 "global identifier as entity at %L", sym->name,
11985 sym->binding_label, &sym->declared_at, &gsym->where);
11986 sym->binding_label = NULL;
11987 }
11988 }
11989
11990
11991 /* Resolve an index expression. */
11992
11993 static bool
11994 resolve_index_expr (gfc_expr *e)
11995 {
11996 if (!gfc_resolve_expr (e))
11997 return false;
11998
11999 if (!gfc_simplify_expr (e, 0))
12000 return false;
12001
12002 if (!gfc_specification_expr (e))
12003 return false;
12004
12005 return true;
12006 }
12007
12008
12009 /* Resolve a charlen structure. */
12010
12011 static bool
12012 resolve_charlen (gfc_charlen *cl)
12013 {
12014 int k;
12015 bool saved_specification_expr;
12016
12017 if (cl->resolved)
12018 return true;
12019
12020 cl->resolved = 1;
12021 saved_specification_expr = specification_expr;
12022 specification_expr = true;
12023
12024 if (cl->length_from_typespec)
12025 {
12026 if (!gfc_resolve_expr (cl->length))
12027 {
12028 specification_expr = saved_specification_expr;
12029 return false;
12030 }
12031
12032 if (!gfc_simplify_expr (cl->length, 0))
12033 {
12034 specification_expr = saved_specification_expr;
12035 return false;
12036 }
12037
12038 /* cl->length has been resolved. It should have an integer type. */
12039 if (cl->length->ts.type != BT_INTEGER)
12040 {
12041 gfc_error ("Scalar INTEGER expression expected at %L",
12042 &cl->length->where);
12043 return false;
12044 }
12045 }
12046 else
12047 {
12048 if (!resolve_index_expr (cl->length))
12049 {
12050 specification_expr = saved_specification_expr;
12051 return false;
12052 }
12053 }
12054
12055 /* F2008, 4.4.3.2: If the character length parameter value evaluates to
12056 a negative value, the length of character entities declared is zero. */
12057 if (cl->length && cl->length->expr_type == EXPR_CONSTANT
12058 && mpz_sgn (cl->length->value.integer) < 0)
12059 gfc_replace_expr (cl->length,
12060 gfc_get_int_expr (gfc_charlen_int_kind, NULL, 0));
12061
12062 /* Check that the character length is not too large. */
12063 k = gfc_validate_kind (BT_INTEGER, gfc_charlen_int_kind, false);
12064 if (cl->length && cl->length->expr_type == EXPR_CONSTANT
12065 && cl->length->ts.type == BT_INTEGER
12066 && mpz_cmp (cl->length->value.integer, gfc_integer_kinds[k].huge) > 0)
12067 {
12068 gfc_error ("String length at %L is too large", &cl->length->where);
12069 specification_expr = saved_specification_expr;
12070 return false;
12071 }
12072
12073 specification_expr = saved_specification_expr;
12074 return true;
12075 }
12076
12077
12078 /* Test for non-constant shape arrays. */
12079
12080 static bool
12081 is_non_constant_shape_array (gfc_symbol *sym)
12082 {
12083 gfc_expr *e;
12084 int i;
12085 bool not_constant;
12086
12087 not_constant = false;
12088 if (sym->as != NULL)
12089 {
12090 /* Unfortunately, !gfc_is_compile_time_shape hits a legal case that
12091 has not been simplified; parameter array references. Do the
12092 simplification now. */
12093 for (i = 0; i < sym->as->rank + sym->as->corank; i++)
12094 {
12095 e = sym->as->lower[i];
12096 if (e && (!resolve_index_expr(e)
12097 || !gfc_is_constant_expr (e)))
12098 not_constant = true;
12099 e = sym->as->upper[i];
12100 if (e && (!resolve_index_expr(e)
12101 || !gfc_is_constant_expr (e)))
12102 not_constant = true;
12103 }
12104 }
12105 return not_constant;
12106 }
12107
12108 /* Given a symbol and an initialization expression, add code to initialize
12109 the symbol to the function entry. */
12110 static void
12111 build_init_assign (gfc_symbol *sym, gfc_expr *init)
12112 {
12113 gfc_expr *lval;
12114 gfc_code *init_st;
12115 gfc_namespace *ns = sym->ns;
12116
12117 /* Search for the function namespace if this is a contained
12118 function without an explicit result. */
12119 if (sym->attr.function && sym == sym->result
12120 && sym->name != sym->ns->proc_name->name)
12121 {
12122 ns = ns->contained;
12123 for (;ns; ns = ns->sibling)
12124 if (strcmp (ns->proc_name->name, sym->name) == 0)
12125 break;
12126 }
12127
12128 if (ns == NULL)
12129 {
12130 gfc_free_expr (init);
12131 return;
12132 }
12133
12134 /* Build an l-value expression for the result. */
12135 lval = gfc_lval_expr_from_sym (sym);
12136
12137 /* Add the code at scope entry. */
12138 init_st = gfc_get_code (EXEC_INIT_ASSIGN);
12139 init_st->next = ns->code;
12140 ns->code = init_st;
12141
12142 /* Assign the default initializer to the l-value. */
12143 init_st->loc = sym->declared_at;
12144 init_st->expr1 = lval;
12145 init_st->expr2 = init;
12146 }
12147
12148
12149 /* Whether or not we can generate a default initializer for a symbol. */
12150
12151 static bool
12152 can_generate_init (gfc_symbol *sym)
12153 {
12154 symbol_attribute *a;
12155 if (!sym)
12156 return false;
12157 a = &sym->attr;
12158
12159 /* These symbols should never have a default initialization. */
12160 return !(
12161 a->allocatable
12162 || a->external
12163 || a->pointer
12164 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
12165 && (CLASS_DATA (sym)->attr.class_pointer
12166 || CLASS_DATA (sym)->attr.proc_pointer))
12167 || a->in_equivalence
12168 || a->in_common
12169 || a->data
12170 || sym->module
12171 || a->cray_pointee
12172 || a->cray_pointer
12173 || sym->assoc
12174 || (!a->referenced && !a->result)
12175 || (a->dummy && a->intent != INTENT_OUT)
12176 || (a->function && sym != sym->result)
12177 );
12178 }
12179
12180
12181 /* Assign the default initializer to a derived type variable or result. */
12182
12183 static void
12184 apply_default_init (gfc_symbol *sym)
12185 {
12186 gfc_expr *init = NULL;
12187
12188 if (sym->attr.flavor != FL_VARIABLE && !sym->attr.function)
12189 return;
12190
12191 if (sym->ts.type == BT_DERIVED && sym->ts.u.derived)
12192 init = gfc_generate_initializer (&sym->ts, can_generate_init (sym));
12193
12194 if (init == NULL && sym->ts.type != BT_CLASS)
12195 return;
12196
12197 build_init_assign (sym, init);
12198 sym->attr.referenced = 1;
12199 }
12200
12201
12202 /* Build an initializer for a local. Returns null if the symbol should not have
12203 a default initialization. */
12204
12205 static gfc_expr *
12206 build_default_init_expr (gfc_symbol *sym)
12207 {
12208 /* These symbols should never have a default initialization. */
12209 if (sym->attr.allocatable
12210 || sym->attr.external
12211 || sym->attr.dummy
12212 || sym->attr.pointer
12213 || sym->attr.in_equivalence
12214 || sym->attr.in_common
12215 || sym->attr.data
12216 || sym->module
12217 || sym->attr.cray_pointee
12218 || sym->attr.cray_pointer
12219 || sym->assoc)
12220 return NULL;
12221
12222 /* Get the appropriate init expression. */
12223 return gfc_build_default_init_expr (&sym->ts, &sym->declared_at);
12224 }
12225
12226 /* Add an initialization expression to a local variable. */
12227 static void
12228 apply_default_init_local (gfc_symbol *sym)
12229 {
12230 gfc_expr *init = NULL;
12231
12232 /* The symbol should be a variable or a function return value. */
12233 if ((sym->attr.flavor != FL_VARIABLE && !sym->attr.function)
12234 || (sym->attr.function && sym->result != sym))
12235 return;
12236
12237 /* Try to build the initializer expression. If we can't initialize
12238 this symbol, then init will be NULL. */
12239 init = build_default_init_expr (sym);
12240 if (init == NULL)
12241 return;
12242
12243 /* For saved variables, we don't want to add an initializer at function
12244 entry, so we just add a static initializer. Note that automatic variables
12245 are stack allocated even with -fno-automatic; we have also to exclude
12246 result variable, which are also nonstatic. */
12247 if (!sym->attr.automatic
12248 && (sym->attr.save || sym->ns->save_all
12249 || (flag_max_stack_var_size == 0 && !sym->attr.result
12250 && (sym->ns->proc_name && !sym->ns->proc_name->attr.recursive)
12251 && (!sym->attr.dimension || !is_non_constant_shape_array (sym)))))
12252 {
12253 /* Don't clobber an existing initializer! */
12254 gcc_assert (sym->value == NULL);
12255 sym->value = init;
12256 return;
12257 }
12258
12259 build_init_assign (sym, init);
12260 }
12261
12262
12263 /* Resolution of common features of flavors variable and procedure. */
12264
12265 static bool
12266 resolve_fl_var_and_proc (gfc_symbol *sym, int mp_flag)
12267 {
12268 gfc_array_spec *as;
12269
12270 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
12271 as = CLASS_DATA (sym)->as;
12272 else
12273 as = sym->as;
12274
12275 /* Constraints on deferred shape variable. */
12276 if (as == NULL || as->type != AS_DEFERRED)
12277 {
12278 bool pointer, allocatable, dimension;
12279
12280 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
12281 {
12282 pointer = CLASS_DATA (sym)->attr.class_pointer;
12283 allocatable = CLASS_DATA (sym)->attr.allocatable;
12284 dimension = CLASS_DATA (sym)->attr.dimension;
12285 }
12286 else
12287 {
12288 pointer = sym->attr.pointer && !sym->attr.select_type_temporary;
12289 allocatable = sym->attr.allocatable;
12290 dimension = sym->attr.dimension;
12291 }
12292
12293 if (allocatable)
12294 {
12295 if (dimension && as->type != AS_ASSUMED_RANK)
12296 {
12297 gfc_error ("Allocatable array %qs at %L must have a deferred "
12298 "shape or assumed rank", sym->name, &sym->declared_at);
12299 return false;
12300 }
12301 else if (!gfc_notify_std (GFC_STD_F2003, "Scalar object "
12302 "%qs at %L may not be ALLOCATABLE",
12303 sym->name, &sym->declared_at))
12304 return false;
12305 }
12306
12307 if (pointer && dimension && as->type != AS_ASSUMED_RANK)
12308 {
12309 gfc_error ("Array pointer %qs at %L must have a deferred shape or "
12310 "assumed rank", sym->name, &sym->declared_at);
12311 return false;
12312 }
12313 }
12314 else
12315 {
12316 if (!mp_flag && !sym->attr.allocatable && !sym->attr.pointer
12317 && sym->ts.type != BT_CLASS && !sym->assoc)
12318 {
12319 gfc_error ("Array %qs at %L cannot have a deferred shape",
12320 sym->name, &sym->declared_at);
12321 return false;
12322 }
12323 }
12324
12325 /* Constraints on polymorphic variables. */
12326 if (sym->ts.type == BT_CLASS && !(sym->result && sym->result != sym))
12327 {
12328 /* F03:C502. */
12329 if (sym->attr.class_ok
12330 && !sym->attr.select_type_temporary
12331 && !UNLIMITED_POLY (sym)
12332 && !gfc_type_is_extensible (CLASS_DATA (sym)->ts.u.derived))
12333 {
12334 gfc_error ("Type %qs of CLASS variable %qs at %L is not extensible",
12335 CLASS_DATA (sym)->ts.u.derived->name, sym->name,
12336 &sym->declared_at);
12337 return false;
12338 }
12339
12340 /* F03:C509. */
12341 /* Assume that use associated symbols were checked in the module ns.
12342 Class-variables that are associate-names are also something special
12343 and excepted from the test. */
12344 if (!sym->attr.class_ok && !sym->attr.use_assoc && !sym->assoc)
12345 {
12346 gfc_error ("CLASS variable %qs at %L must be dummy, allocatable "
12347 "or pointer", sym->name, &sym->declared_at);
12348 return false;
12349 }
12350 }
12351
12352 return true;
12353 }
12354
12355
12356 /* Additional checks for symbols with flavor variable and derived
12357 type. To be called from resolve_fl_variable. */
12358
12359 static bool
12360 resolve_fl_variable_derived (gfc_symbol *sym, int no_init_flag)
12361 {
12362 gcc_assert (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS);
12363
12364 /* Check to see if a derived type is blocked from being host
12365 associated by the presence of another class I symbol in the same
12366 namespace. 14.6.1.3 of the standard and the discussion on
12367 comp.lang.fortran. */
12368 if (sym->ns != sym->ts.u.derived->ns
12369 && !sym->ts.u.derived->attr.use_assoc
12370 && sym->ns->proc_name->attr.if_source != IFSRC_IFBODY)
12371 {
12372 gfc_symbol *s;
12373 gfc_find_symbol (sym->ts.u.derived->name, sym->ns, 0, &s);
12374 if (s && s->attr.generic)
12375 s = gfc_find_dt_in_generic (s);
12376 if (s && !gfc_fl_struct (s->attr.flavor))
12377 {
12378 gfc_error ("The type %qs cannot be host associated at %L "
12379 "because it is blocked by an incompatible object "
12380 "of the same name declared at %L",
12381 sym->ts.u.derived->name, &sym->declared_at,
12382 &s->declared_at);
12383 return false;
12384 }
12385 }
12386
12387 /* 4th constraint in section 11.3: "If an object of a type for which
12388 component-initialization is specified (R429) appears in the
12389 specification-part of a module and does not have the ALLOCATABLE
12390 or POINTER attribute, the object shall have the SAVE attribute."
12391
12392 The check for initializers is performed with
12393 gfc_has_default_initializer because gfc_default_initializer generates
12394 a hidden default for allocatable components. */
12395 if (!(sym->value || no_init_flag) && sym->ns->proc_name
12396 && sym->ns->proc_name->attr.flavor == FL_MODULE
12397 && !(sym->ns->save_all && !sym->attr.automatic) && !sym->attr.save
12398 && !sym->attr.pointer && !sym->attr.allocatable
12399 && gfc_has_default_initializer (sym->ts.u.derived)
12400 && !gfc_notify_std (GFC_STD_F2008, "Implied SAVE for module variable "
12401 "%qs at %L, needed due to the default "
12402 "initialization", sym->name, &sym->declared_at))
12403 return false;
12404
12405 /* Assign default initializer. */
12406 if (!(sym->value || sym->attr.pointer || sym->attr.allocatable)
12407 && (!no_init_flag || sym->attr.intent == INTENT_OUT))
12408 sym->value = gfc_generate_initializer (&sym->ts, can_generate_init (sym));
12409
12410 return true;
12411 }
12412
12413
12414 /* F2008, C402 (R401): A colon shall not be used as a type-param-value
12415 except in the declaration of an entity or component that has the POINTER
12416 or ALLOCATABLE attribute. */
12417
12418 static bool
12419 deferred_requirements (gfc_symbol *sym)
12420 {
12421 if (sym->ts.deferred
12422 && !(sym->attr.pointer
12423 || sym->attr.allocatable
12424 || sym->attr.associate_var
12425 || sym->attr.omp_udr_artificial_var))
12426 {
12427 /* If a function has a result variable, only check the variable. */
12428 if (sym->result && sym->name != sym->result->name)
12429 return true;
12430
12431 gfc_error ("Entity %qs at %L has a deferred type parameter and "
12432 "requires either the POINTER or ALLOCATABLE attribute",
12433 sym->name, &sym->declared_at);
12434 return false;
12435 }
12436 return true;
12437 }
12438
12439
12440 /* Resolve symbols with flavor variable. */
12441
12442 static bool
12443 resolve_fl_variable (gfc_symbol *sym, int mp_flag)
12444 {
12445 const char *auto_save_msg = "Automatic object %qs at %L cannot have the "
12446 "SAVE attribute";
12447
12448 if (!resolve_fl_var_and_proc (sym, mp_flag))
12449 return false;
12450
12451 /* Set this flag to check that variables are parameters of all entries.
12452 This check is effected by the call to gfc_resolve_expr through
12453 is_non_constant_shape_array. */
12454 bool saved_specification_expr = specification_expr;
12455 specification_expr = true;
12456
12457 if (sym->ns->proc_name
12458 && (sym->ns->proc_name->attr.flavor == FL_MODULE
12459 || sym->ns->proc_name->attr.is_main_program)
12460 && !sym->attr.use_assoc
12461 && !sym->attr.allocatable
12462 && !sym->attr.pointer
12463 && is_non_constant_shape_array (sym))
12464 {
12465 /* F08:C541. The shape of an array defined in a main program or module
12466 * needs to be constant. */
12467 gfc_error ("The module or main program array %qs at %L must "
12468 "have constant shape", sym->name, &sym->declared_at);
12469 specification_expr = saved_specification_expr;
12470 return false;
12471 }
12472
12473 /* Constraints on deferred type parameter. */
12474 if (!deferred_requirements (sym))
12475 return false;
12476
12477 if (sym->ts.type == BT_CHARACTER && !sym->attr.associate_var)
12478 {
12479 /* Make sure that character string variables with assumed length are
12480 dummy arguments. */
12481 gfc_expr *e = NULL;
12482
12483 if (sym->ts.u.cl)
12484 e = sym->ts.u.cl->length;
12485 else
12486 return false;
12487
12488 if (e == NULL && !sym->attr.dummy && !sym->attr.result
12489 && !sym->ts.deferred && !sym->attr.select_type_temporary
12490 && !sym->attr.omp_udr_artificial_var)
12491 {
12492 gfc_error ("Entity with assumed character length at %L must be a "
12493 "dummy argument or a PARAMETER", &sym->declared_at);
12494 specification_expr = saved_specification_expr;
12495 return false;
12496 }
12497
12498 if (e && sym->attr.save == SAVE_EXPLICIT && !gfc_is_constant_expr (e))
12499 {
12500 gfc_error (auto_save_msg, sym->name, &sym->declared_at);
12501 specification_expr = saved_specification_expr;
12502 return false;
12503 }
12504
12505 if (!gfc_is_constant_expr (e)
12506 && !(e->expr_type == EXPR_VARIABLE
12507 && e->symtree->n.sym->attr.flavor == FL_PARAMETER))
12508 {
12509 if (!sym->attr.use_assoc && sym->ns->proc_name
12510 && (sym->ns->proc_name->attr.flavor == FL_MODULE
12511 || sym->ns->proc_name->attr.is_main_program))
12512 {
12513 gfc_error ("%qs at %L must have constant character length "
12514 "in this context", sym->name, &sym->declared_at);
12515 specification_expr = saved_specification_expr;
12516 return false;
12517 }
12518 if (sym->attr.in_common)
12519 {
12520 gfc_error ("COMMON variable %qs at %L must have constant "
12521 "character length", sym->name, &sym->declared_at);
12522 specification_expr = saved_specification_expr;
12523 return false;
12524 }
12525 }
12526 }
12527
12528 if (sym->value == NULL && sym->attr.referenced)
12529 apply_default_init_local (sym); /* Try to apply a default initialization. */
12530
12531 /* Determine if the symbol may not have an initializer. */
12532 int no_init_flag = 0, automatic_flag = 0;
12533 if (sym->attr.allocatable || sym->attr.external || sym->attr.dummy
12534 || sym->attr.intrinsic || sym->attr.result)
12535 no_init_flag = 1;
12536 else if ((sym->attr.dimension || sym->attr.codimension) && !sym->attr.pointer
12537 && is_non_constant_shape_array (sym))
12538 {
12539 no_init_flag = automatic_flag = 1;
12540
12541 /* Also, they must not have the SAVE attribute.
12542 SAVE_IMPLICIT is checked below. */
12543 if (sym->as && sym->attr.codimension)
12544 {
12545 int corank = sym->as->corank;
12546 sym->as->corank = 0;
12547 no_init_flag = automatic_flag = is_non_constant_shape_array (sym);
12548 sym->as->corank = corank;
12549 }
12550 if (automatic_flag && sym->attr.save == SAVE_EXPLICIT)
12551 {
12552 gfc_error (auto_save_msg, sym->name, &sym->declared_at);
12553 specification_expr = saved_specification_expr;
12554 return false;
12555 }
12556 }
12557
12558 /* Ensure that any initializer is simplified. */
12559 if (sym->value)
12560 gfc_simplify_expr (sym->value, 1);
12561
12562 /* Reject illegal initializers. */
12563 if (!sym->mark && sym->value)
12564 {
12565 if (sym->attr.allocatable || (sym->ts.type == BT_CLASS
12566 && CLASS_DATA (sym)->attr.allocatable))
12567 gfc_error ("Allocatable %qs at %L cannot have an initializer",
12568 sym->name, &sym->declared_at);
12569 else if (sym->attr.external)
12570 gfc_error ("External %qs at %L cannot have an initializer",
12571 sym->name, &sym->declared_at);
12572 else if (sym->attr.dummy
12573 && !(sym->ts.type == BT_DERIVED && sym->attr.intent == INTENT_OUT))
12574 gfc_error ("Dummy %qs at %L cannot have an initializer",
12575 sym->name, &sym->declared_at);
12576 else if (sym->attr.intrinsic)
12577 gfc_error ("Intrinsic %qs at %L cannot have an initializer",
12578 sym->name, &sym->declared_at);
12579 else if (sym->attr.result)
12580 gfc_error ("Function result %qs at %L cannot have an initializer",
12581 sym->name, &sym->declared_at);
12582 else if (automatic_flag)
12583 gfc_error ("Automatic array %qs at %L cannot have an initializer",
12584 sym->name, &sym->declared_at);
12585 else
12586 goto no_init_error;
12587 specification_expr = saved_specification_expr;
12588 return false;
12589 }
12590
12591 no_init_error:
12592 if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS)
12593 {
12594 bool res = resolve_fl_variable_derived (sym, no_init_flag);
12595 specification_expr = saved_specification_expr;
12596 return res;
12597 }
12598
12599 specification_expr = saved_specification_expr;
12600 return true;
12601 }
12602
12603
12604 /* Compare the dummy characteristics of a module procedure interface
12605 declaration with the corresponding declaration in a submodule. */
12606 static gfc_formal_arglist *new_formal;
12607 static char errmsg[200];
12608
12609 static void
12610 compare_fsyms (gfc_symbol *sym)
12611 {
12612 gfc_symbol *fsym;
12613
12614 if (sym == NULL || new_formal == NULL)
12615 return;
12616
12617 fsym = new_formal->sym;
12618
12619 if (sym == fsym)
12620 return;
12621
12622 if (strcmp (sym->name, fsym->name) == 0)
12623 {
12624 if (!gfc_check_dummy_characteristics (fsym, sym, true, errmsg, 200))
12625 gfc_error ("%s at %L", errmsg, &fsym->declared_at);
12626 }
12627 }
12628
12629
12630 /* Resolve a procedure. */
12631
12632 static bool
12633 resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
12634 {
12635 gfc_formal_arglist *arg;
12636
12637 if (sym->attr.function
12638 && !resolve_fl_var_and_proc (sym, mp_flag))
12639 return false;
12640
12641 /* Constraints on deferred type parameter. */
12642 if (!deferred_requirements (sym))
12643 return false;
12644
12645 if (sym->ts.type == BT_CHARACTER)
12646 {
12647 gfc_charlen *cl = sym->ts.u.cl;
12648
12649 if (cl && cl->length && gfc_is_constant_expr (cl->length)
12650 && !resolve_charlen (cl))
12651 return false;
12652
12653 if ((!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
12654 && sym->attr.proc == PROC_ST_FUNCTION)
12655 {
12656 gfc_error ("Character-valued statement function %qs at %L must "
12657 "have constant length", sym->name, &sym->declared_at);
12658 return false;
12659 }
12660 }
12661
12662 /* Ensure that derived type for are not of a private type. Internal
12663 module procedures are excluded by 2.2.3.3 - i.e., they are not
12664 externally accessible and can access all the objects accessible in
12665 the host. */
12666 if (!(sym->ns->parent && sym->ns->parent->proc_name
12667 && sym->ns->parent->proc_name->attr.flavor == FL_MODULE)
12668 && gfc_check_symbol_access (sym))
12669 {
12670 gfc_interface *iface;
12671
12672 for (arg = gfc_sym_get_dummy_args (sym); arg; arg = arg->next)
12673 {
12674 if (arg->sym
12675 && arg->sym->ts.type == BT_DERIVED
12676 && !arg->sym->ts.u.derived->attr.use_assoc
12677 && !gfc_check_symbol_access (arg->sym->ts.u.derived)
12678 && !gfc_notify_std (GFC_STD_F2003, "%qs is of a PRIVATE type "
12679 "and cannot be a dummy argument"
12680 " of %qs, which is PUBLIC at %L",
12681 arg->sym->name, sym->name,
12682 &sym->declared_at))
12683 {
12684 /* Stop this message from recurring. */
12685 arg->sym->ts.u.derived->attr.access = ACCESS_PUBLIC;
12686 return false;
12687 }
12688 }
12689
12690 /* PUBLIC interfaces may expose PRIVATE procedures that take types
12691 PRIVATE to the containing module. */
12692 for (iface = sym->generic; iface; iface = iface->next)
12693 {
12694 for (arg = gfc_sym_get_dummy_args (iface->sym); arg; arg = arg->next)
12695 {
12696 if (arg->sym
12697 && arg->sym->ts.type == BT_DERIVED
12698 && !arg->sym->ts.u.derived->attr.use_assoc
12699 && !gfc_check_symbol_access (arg->sym->ts.u.derived)
12700 && !gfc_notify_std (GFC_STD_F2003, "Procedure %qs in "
12701 "PUBLIC interface %qs at %L "
12702 "takes dummy arguments of %qs which "
12703 "is PRIVATE", iface->sym->name,
12704 sym->name, &iface->sym->declared_at,
12705 gfc_typename(&arg->sym->ts)))
12706 {
12707 /* Stop this message from recurring. */
12708 arg->sym->ts.u.derived->attr.access = ACCESS_PUBLIC;
12709 return false;
12710 }
12711 }
12712 }
12713 }
12714
12715 if (sym->attr.function && sym->value && sym->attr.proc != PROC_ST_FUNCTION
12716 && !sym->attr.proc_pointer)
12717 {
12718 gfc_error ("Function %qs at %L cannot have an initializer",
12719 sym->name, &sym->declared_at);
12720
12721 /* Make sure no second error is issued for this. */
12722 sym->value->error = 1;
12723 return false;
12724 }
12725
12726 /* An external symbol may not have an initializer because it is taken to be
12727 a procedure. Exception: Procedure Pointers. */
12728 if (sym->attr.external && sym->value && !sym->attr.proc_pointer)
12729 {
12730 gfc_error ("External object %qs at %L may not have an initializer",
12731 sym->name, &sym->declared_at);
12732 return false;
12733 }
12734
12735 /* An elemental function is required to return a scalar 12.7.1 */
12736 if (sym->attr.elemental && sym->attr.function
12737 && (sym->as || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as)))
12738 {
12739 gfc_error ("ELEMENTAL function %qs at %L must have a scalar "
12740 "result", sym->name, &sym->declared_at);
12741 /* Reset so that the error only occurs once. */
12742 sym->attr.elemental = 0;
12743 return false;
12744 }
12745
12746 if (sym->attr.proc == PROC_ST_FUNCTION
12747 && (sym->attr.allocatable || sym->attr.pointer))
12748 {
12749 gfc_error ("Statement function %qs at %L may not have pointer or "
12750 "allocatable attribute", sym->name, &sym->declared_at);
12751 return false;
12752 }
12753
12754 /* 5.1.1.5 of the Standard: A function name declared with an asterisk
12755 char-len-param shall not be array-valued, pointer-valued, recursive
12756 or pure. ....snip... A character value of * may only be used in the
12757 following ways: (i) Dummy arg of procedure - dummy associates with
12758 actual length; (ii) To declare a named constant; or (iii) External
12759 function - but length must be declared in calling scoping unit. */
12760 if (sym->attr.function
12761 && sym->ts.type == BT_CHARACTER && !sym->ts.deferred
12762 && sym->ts.u.cl && sym->ts.u.cl->length == NULL)
12763 {
12764 if ((sym->as && sym->as->rank) || (sym->attr.pointer)
12765 || (sym->attr.recursive) || (sym->attr.pure))
12766 {
12767 if (sym->as && sym->as->rank)
12768 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
12769 "array-valued", sym->name, &sym->declared_at);
12770
12771 if (sym->attr.pointer)
12772 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
12773 "pointer-valued", sym->name, &sym->declared_at);
12774
12775 if (sym->attr.pure)
12776 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
12777 "pure", sym->name, &sym->declared_at);
12778
12779 if (sym->attr.recursive)
12780 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
12781 "recursive", sym->name, &sym->declared_at);
12782
12783 return false;
12784 }
12785
12786 /* Appendix B.2 of the standard. Contained functions give an
12787 error anyway. Deferred character length is an F2003 feature.
12788 Don't warn on intrinsic conversion functions, which start
12789 with two underscores. */
12790 if (!sym->attr.contained && !sym->ts.deferred
12791 && (sym->name[0] != '_' || sym->name[1] != '_'))
12792 gfc_notify_std (GFC_STD_F95_OBS,
12793 "CHARACTER(*) function %qs at %L",
12794 sym->name, &sym->declared_at);
12795 }
12796
12797 /* F2008, C1218. */
12798 if (sym->attr.elemental)
12799 {
12800 if (sym->attr.proc_pointer)
12801 {
12802 gfc_error ("Procedure pointer %qs at %L shall not be elemental",
12803 sym->name, &sym->declared_at);
12804 return false;
12805 }
12806 if (sym->attr.dummy)
12807 {
12808 gfc_error ("Dummy procedure %qs at %L shall not be elemental",
12809 sym->name, &sym->declared_at);
12810 return false;
12811 }
12812 }
12813
12814 /* F2018, C15100: "The result of an elemental function shall be scalar,
12815 and shall not have the POINTER or ALLOCATABLE attribute." The scalar
12816 pointer is tested and caught elsewhere. */
12817 if (sym->attr.elemental && sym->result
12818 && (sym->result->attr.allocatable || sym->result->attr.pointer))
12819 {
12820 gfc_error ("Function result variable %qs at %L of elemental "
12821 "function %qs shall not have an ALLOCATABLE or POINTER "
12822 "attribute", sym->result->name,
12823 &sym->result->declared_at, sym->name);
12824 return false;
12825 }
12826
12827 if (sym->attr.is_bind_c && sym->attr.is_c_interop != 1)
12828 {
12829 gfc_formal_arglist *curr_arg;
12830 int has_non_interop_arg = 0;
12831
12832 if (!verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common,
12833 sym->common_block))
12834 {
12835 /* Clear these to prevent looking at them again if there was an
12836 error. */
12837 sym->attr.is_bind_c = 0;
12838 sym->attr.is_c_interop = 0;
12839 sym->ts.is_c_interop = 0;
12840 }
12841 else
12842 {
12843 /* So far, no errors have been found. */
12844 sym->attr.is_c_interop = 1;
12845 sym->ts.is_c_interop = 1;
12846 }
12847
12848 curr_arg = gfc_sym_get_dummy_args (sym);
12849 while (curr_arg != NULL)
12850 {
12851 /* Skip implicitly typed dummy args here. */
12852 if (curr_arg->sym && curr_arg->sym->attr.implicit_type == 0)
12853 if (!gfc_verify_c_interop_param (curr_arg->sym))
12854 /* If something is found to fail, record the fact so we
12855 can mark the symbol for the procedure as not being
12856 BIND(C) to try and prevent multiple errors being
12857 reported. */
12858 has_non_interop_arg = 1;
12859
12860 curr_arg = curr_arg->next;
12861 }
12862
12863 /* See if any of the arguments were not interoperable and if so, clear
12864 the procedure symbol to prevent duplicate error messages. */
12865 if (has_non_interop_arg != 0)
12866 {
12867 sym->attr.is_c_interop = 0;
12868 sym->ts.is_c_interop = 0;
12869 sym->attr.is_bind_c = 0;
12870 }
12871 }
12872
12873 if (!sym->attr.proc_pointer)
12874 {
12875 if (sym->attr.save == SAVE_EXPLICIT)
12876 {
12877 gfc_error ("PROCEDURE attribute conflicts with SAVE attribute "
12878 "in %qs at %L", sym->name, &sym->declared_at);
12879 return false;
12880 }
12881 if (sym->attr.intent)
12882 {
12883 gfc_error ("PROCEDURE attribute conflicts with INTENT attribute "
12884 "in %qs at %L", sym->name, &sym->declared_at);
12885 return false;
12886 }
12887 if (sym->attr.subroutine && sym->attr.result)
12888 {
12889 gfc_error ("PROCEDURE attribute conflicts with RESULT attribute "
12890 "in %qs at %L", sym->name, &sym->declared_at);
12891 return false;
12892 }
12893 if (sym->attr.external && sym->attr.function && !sym->attr.module_procedure
12894 && ((sym->attr.if_source == IFSRC_DECL && !sym->attr.procedure)
12895 || sym->attr.contained))
12896 {
12897 gfc_error ("EXTERNAL attribute conflicts with FUNCTION attribute "
12898 "in %qs at %L", sym->name, &sym->declared_at);
12899 return false;
12900 }
12901 if (strcmp ("ppr@", sym->name) == 0)
12902 {
12903 gfc_error ("Procedure pointer result %qs at %L "
12904 "is missing the pointer attribute",
12905 sym->ns->proc_name->name, &sym->declared_at);
12906 return false;
12907 }
12908 }
12909
12910 /* Assume that a procedure whose body is not known has references
12911 to external arrays. */
12912 if (sym->attr.if_source != IFSRC_DECL)
12913 sym->attr.array_outer_dependency = 1;
12914
12915 /* Compare the characteristics of a module procedure with the
12916 interface declaration. Ideally this would be done with
12917 gfc_compare_interfaces but, at present, the formal interface
12918 cannot be copied to the ts.interface. */
12919 if (sym->attr.module_procedure
12920 && sym->attr.if_source == IFSRC_DECL)
12921 {
12922 gfc_symbol *iface;
12923 char name[2*GFC_MAX_SYMBOL_LEN + 1];
12924 char *module_name;
12925 char *submodule_name;
12926 strcpy (name, sym->ns->proc_name->name);
12927 module_name = strtok (name, ".");
12928 submodule_name = strtok (NULL, ".");
12929
12930 iface = sym->tlink;
12931 sym->tlink = NULL;
12932
12933 /* Make sure that the result uses the correct charlen for deferred
12934 length results. */
12935 if (iface && sym->result
12936 && iface->ts.type == BT_CHARACTER
12937 && iface->ts.deferred)
12938 sym->result->ts.u.cl = iface->ts.u.cl;
12939
12940 if (iface == NULL)
12941 goto check_formal;
12942
12943 /* Check the procedure characteristics. */
12944 if (sym->attr.elemental != iface->attr.elemental)
12945 {
12946 gfc_error ("Mismatch in ELEMENTAL attribute between MODULE "
12947 "PROCEDURE at %L and its interface in %s",
12948 &sym->declared_at, module_name);
12949 return false;
12950 }
12951
12952 if (sym->attr.pure != iface->attr.pure)
12953 {
12954 gfc_error ("Mismatch in PURE attribute between MODULE "
12955 "PROCEDURE at %L and its interface in %s",
12956 &sym->declared_at, module_name);
12957 return false;
12958 }
12959
12960 if (sym->attr.recursive != iface->attr.recursive)
12961 {
12962 gfc_error ("Mismatch in RECURSIVE attribute between MODULE "
12963 "PROCEDURE at %L and its interface in %s",
12964 &sym->declared_at, module_name);
12965 return false;
12966 }
12967
12968 /* Check the result characteristics. */
12969 if (!gfc_check_result_characteristics (sym, iface, errmsg, 200))
12970 {
12971 gfc_error ("%s between the MODULE PROCEDURE declaration "
12972 "in MODULE %qs and the declaration at %L in "
12973 "(SUB)MODULE %qs",
12974 errmsg, module_name, &sym->declared_at,
12975 submodule_name ? submodule_name : module_name);
12976 return false;
12977 }
12978
12979 check_formal:
12980 /* Check the characteristics of the formal arguments. */
12981 if (sym->formal && sym->formal_ns)
12982 {
12983 for (arg = sym->formal; arg && arg->sym; arg = arg->next)
12984 {
12985 new_formal = arg;
12986 gfc_traverse_ns (sym->formal_ns, compare_fsyms);
12987 }
12988 }
12989 }
12990 return true;
12991 }
12992
12993
12994 /* Resolve a list of finalizer procedures. That is, after they have hopefully
12995 been defined and we now know their defined arguments, check that they fulfill
12996 the requirements of the standard for procedures used as finalizers. */
12997
12998 static bool
12999 gfc_resolve_finalizers (gfc_symbol* derived, bool *finalizable)
13000 {
13001 gfc_finalizer* list;
13002 gfc_finalizer** prev_link; /* For removing wrong entries from the list. */
13003 bool result = true;
13004 bool seen_scalar = false;
13005 gfc_symbol *vtab;
13006 gfc_component *c;
13007 gfc_symbol *parent = gfc_get_derived_super_type (derived);
13008
13009 if (parent)
13010 gfc_resolve_finalizers (parent, finalizable);
13011
13012 /* Ensure that derived-type components have a their finalizers resolved. */
13013 bool has_final = derived->f2k_derived && derived->f2k_derived->finalizers;
13014 for (c = derived->components; c; c = c->next)
13015 if (c->ts.type == BT_DERIVED
13016 && !c->attr.pointer && !c->attr.proc_pointer && !c->attr.allocatable)
13017 {
13018 bool has_final2 = false;
13019 if (!gfc_resolve_finalizers (c->ts.u.derived, &has_final2))
13020 return false; /* Error. */
13021 has_final = has_final || has_final2;
13022 }
13023 /* Return early if not finalizable. */
13024 if (!has_final)
13025 {
13026 if (finalizable)
13027 *finalizable = false;
13028 return true;
13029 }
13030
13031 /* Walk over the list of finalizer-procedures, check them, and if any one
13032 does not fit in with the standard's definition, print an error and remove
13033 it from the list. */
13034 prev_link = &derived->f2k_derived->finalizers;
13035 for (list = derived->f2k_derived->finalizers; list; list = *prev_link)
13036 {
13037 gfc_formal_arglist *dummy_args;
13038 gfc_symbol* arg;
13039 gfc_finalizer* i;
13040 int my_rank;
13041
13042 /* Skip this finalizer if we already resolved it. */
13043 if (list->proc_tree)
13044 {
13045 if (list->proc_tree->n.sym->formal->sym->as == NULL
13046 || list->proc_tree->n.sym->formal->sym->as->rank == 0)
13047 seen_scalar = true;
13048 prev_link = &(list->next);
13049 continue;
13050 }
13051
13052 /* Check this exists and is a SUBROUTINE. */
13053 if (!list->proc_sym->attr.subroutine)
13054 {
13055 gfc_error ("FINAL procedure %qs at %L is not a SUBROUTINE",
13056 list->proc_sym->name, &list->where);
13057 goto error;
13058 }
13059
13060 /* We should have exactly one argument. */
13061 dummy_args = gfc_sym_get_dummy_args (list->proc_sym);
13062 if (!dummy_args || dummy_args->next)
13063 {
13064 gfc_error ("FINAL procedure at %L must have exactly one argument",
13065 &list->where);
13066 goto error;
13067 }
13068 arg = dummy_args->sym;
13069
13070 /* This argument must be of our type. */
13071 if (arg->ts.type != BT_DERIVED || arg->ts.u.derived != derived)
13072 {
13073 gfc_error ("Argument of FINAL procedure at %L must be of type %qs",
13074 &arg->declared_at, derived->name);
13075 goto error;
13076 }
13077
13078 /* It must neither be a pointer nor allocatable nor optional. */
13079 if (arg->attr.pointer)
13080 {
13081 gfc_error ("Argument of FINAL procedure at %L must not be a POINTER",
13082 &arg->declared_at);
13083 goto error;
13084 }
13085 if (arg->attr.allocatable)
13086 {
13087 gfc_error ("Argument of FINAL procedure at %L must not be"
13088 " ALLOCATABLE", &arg->declared_at);
13089 goto error;
13090 }
13091 if (arg->attr.optional)
13092 {
13093 gfc_error ("Argument of FINAL procedure at %L must not be OPTIONAL",
13094 &arg->declared_at);
13095 goto error;
13096 }
13097
13098 /* It must not be INTENT(OUT). */
13099 if (arg->attr.intent == INTENT_OUT)
13100 {
13101 gfc_error ("Argument of FINAL procedure at %L must not be"
13102 " INTENT(OUT)", &arg->declared_at);
13103 goto error;
13104 }
13105
13106 /* Warn if the procedure is non-scalar and not assumed shape. */
13107 if (warn_surprising && arg->as && arg->as->rank != 0
13108 && arg->as->type != AS_ASSUMED_SHAPE)
13109 gfc_warning (OPT_Wsurprising,
13110 "Non-scalar FINAL procedure at %L should have assumed"
13111 " shape argument", &arg->declared_at);
13112
13113 /* Check that it does not match in kind and rank with a FINAL procedure
13114 defined earlier. To really loop over the *earlier* declarations,
13115 we need to walk the tail of the list as new ones were pushed at the
13116 front. */
13117 /* TODO: Handle kind parameters once they are implemented. */
13118 my_rank = (arg->as ? arg->as->rank : 0);
13119 for (i = list->next; i; i = i->next)
13120 {
13121 gfc_formal_arglist *dummy_args;
13122
13123 /* Argument list might be empty; that is an error signalled earlier,
13124 but we nevertheless continued resolving. */
13125 dummy_args = gfc_sym_get_dummy_args (i->proc_sym);
13126 if (dummy_args)
13127 {
13128 gfc_symbol* i_arg = dummy_args->sym;
13129 const int i_rank = (i_arg->as ? i_arg->as->rank : 0);
13130 if (i_rank == my_rank)
13131 {
13132 gfc_error ("FINAL procedure %qs declared at %L has the same"
13133 " rank (%d) as %qs",
13134 list->proc_sym->name, &list->where, my_rank,
13135 i->proc_sym->name);
13136 goto error;
13137 }
13138 }
13139 }
13140
13141 /* Is this the/a scalar finalizer procedure? */
13142 if (my_rank == 0)
13143 seen_scalar = true;
13144
13145 /* Find the symtree for this procedure. */
13146 gcc_assert (!list->proc_tree);
13147 list->proc_tree = gfc_find_sym_in_symtree (list->proc_sym);
13148
13149 prev_link = &list->next;
13150 continue;
13151
13152 /* Remove wrong nodes immediately from the list so we don't risk any
13153 troubles in the future when they might fail later expectations. */
13154 error:
13155 i = list;
13156 *prev_link = list->next;
13157 gfc_free_finalizer (i);
13158 result = false;
13159 }
13160
13161 if (result == false)
13162 return false;
13163
13164 /* Warn if we haven't seen a scalar finalizer procedure (but we know there
13165 were nodes in the list, must have been for arrays. It is surely a good
13166 idea to have a scalar version there if there's something to finalize. */
13167 if (warn_surprising && derived->f2k_derived->finalizers && !seen_scalar)
13168 gfc_warning (OPT_Wsurprising,
13169 "Only array FINAL procedures declared for derived type %qs"
13170 " defined at %L, suggest also scalar one",
13171 derived->name, &derived->declared_at);
13172
13173 vtab = gfc_find_derived_vtab (derived);
13174 c = vtab->ts.u.derived->components->next->next->next->next->next;
13175 gfc_set_sym_referenced (c->initializer->symtree->n.sym);
13176
13177 if (finalizable)
13178 *finalizable = true;
13179
13180 return true;
13181 }
13182
13183
13184 /* Check if two GENERIC targets are ambiguous and emit an error is they are. */
13185
13186 static bool
13187 check_generic_tbp_ambiguity (gfc_tbp_generic* t1, gfc_tbp_generic* t2,
13188 const char* generic_name, locus where)
13189 {
13190 gfc_symbol *sym1, *sym2;
13191 const char *pass1, *pass2;
13192 gfc_formal_arglist *dummy_args;
13193
13194 gcc_assert (t1->specific && t2->specific);
13195 gcc_assert (!t1->specific->is_generic);
13196 gcc_assert (!t2->specific->is_generic);
13197 gcc_assert (t1->is_operator == t2->is_operator);
13198
13199 sym1 = t1->specific->u.specific->n.sym;
13200 sym2 = t2->specific->u.specific->n.sym;
13201
13202 if (sym1 == sym2)
13203 return true;
13204
13205 /* Both must be SUBROUTINEs or both must be FUNCTIONs. */
13206 if (sym1->attr.subroutine != sym2->attr.subroutine
13207 || sym1->attr.function != sym2->attr.function)
13208 {
13209 gfc_error ("%qs and %qs cannot be mixed FUNCTION/SUBROUTINE for"
13210 " GENERIC %qs at %L",
13211 sym1->name, sym2->name, generic_name, &where);
13212 return false;
13213 }
13214
13215 /* Determine PASS arguments. */
13216 if (t1->specific->nopass)
13217 pass1 = NULL;
13218 else if (t1->specific->pass_arg)
13219 pass1 = t1->specific->pass_arg;
13220 else
13221 {
13222 dummy_args = gfc_sym_get_dummy_args (t1->specific->u.specific->n.sym);
13223 if (dummy_args)
13224 pass1 = dummy_args->sym->name;
13225 else
13226 pass1 = NULL;
13227 }
13228 if (t2->specific->nopass)
13229 pass2 = NULL;
13230 else if (t2->specific->pass_arg)
13231 pass2 = t2->specific->pass_arg;
13232 else
13233 {
13234 dummy_args = gfc_sym_get_dummy_args (t2->specific->u.specific->n.sym);
13235 if (dummy_args)
13236 pass2 = dummy_args->sym->name;
13237 else
13238 pass2 = NULL;
13239 }
13240
13241 /* Compare the interfaces. */
13242 if (gfc_compare_interfaces (sym1, sym2, sym2->name, !t1->is_operator, 0,
13243 NULL, 0, pass1, pass2))
13244 {
13245 gfc_error ("%qs and %qs for GENERIC %qs at %L are ambiguous",
13246 sym1->name, sym2->name, generic_name, &where);
13247 return false;
13248 }
13249
13250 return true;
13251 }
13252
13253
13254 /* Worker function for resolving a generic procedure binding; this is used to
13255 resolve GENERIC as well as user and intrinsic OPERATOR typebound procedures.
13256
13257 The difference between those cases is finding possible inherited bindings
13258 that are overridden, as one has to look for them in tb_sym_root,
13259 tb_uop_root or tb_op, respectively. Thus the caller must already find
13260 the super-type and set p->overridden correctly. */
13261
13262 static bool
13263 resolve_tb_generic_targets (gfc_symbol* super_type,
13264 gfc_typebound_proc* p, const char* name)
13265 {
13266 gfc_tbp_generic* target;
13267 gfc_symtree* first_target;
13268 gfc_symtree* inherited;
13269
13270 gcc_assert (p && p->is_generic);
13271
13272 /* Try to find the specific bindings for the symtrees in our target-list. */
13273 gcc_assert (p->u.generic);
13274 for (target = p->u.generic; target; target = target->next)
13275 if (!target->specific)
13276 {
13277 gfc_typebound_proc* overridden_tbp;
13278 gfc_tbp_generic* g;
13279 const char* target_name;
13280
13281 target_name = target->specific_st->name;
13282
13283 /* Defined for this type directly. */
13284 if (target->specific_st->n.tb && !target->specific_st->n.tb->error)
13285 {
13286 target->specific = target->specific_st->n.tb;
13287 goto specific_found;
13288 }
13289
13290 /* Look for an inherited specific binding. */
13291 if (super_type)
13292 {
13293 inherited = gfc_find_typebound_proc (super_type, NULL, target_name,
13294 true, NULL);
13295
13296 if (inherited)
13297 {
13298 gcc_assert (inherited->n.tb);
13299 target->specific = inherited->n.tb;
13300 goto specific_found;
13301 }
13302 }
13303
13304 gfc_error ("Undefined specific binding %qs as target of GENERIC %qs"
13305 " at %L", target_name, name, &p->where);
13306 return false;
13307
13308 /* Once we've found the specific binding, check it is not ambiguous with
13309 other specifics already found or inherited for the same GENERIC. */
13310 specific_found:
13311 gcc_assert (target->specific);
13312
13313 /* This must really be a specific binding! */
13314 if (target->specific->is_generic)
13315 {
13316 gfc_error ("GENERIC %qs at %L must target a specific binding,"
13317 " %qs is GENERIC, too", name, &p->where, target_name);
13318 return false;
13319 }
13320
13321 /* Check those already resolved on this type directly. */
13322 for (g = p->u.generic; g; g = g->next)
13323 if (g != target && g->specific
13324 && !check_generic_tbp_ambiguity (target, g, name, p->where))
13325 return false;
13326
13327 /* Check for ambiguity with inherited specific targets. */
13328 for (overridden_tbp = p->overridden; overridden_tbp;
13329 overridden_tbp = overridden_tbp->overridden)
13330 if (overridden_tbp->is_generic)
13331 {
13332 for (g = overridden_tbp->u.generic; g; g = g->next)
13333 {
13334 gcc_assert (g->specific);
13335 if (!check_generic_tbp_ambiguity (target, g, name, p->where))
13336 return false;
13337 }
13338 }
13339 }
13340
13341 /* If we attempt to "overwrite" a specific binding, this is an error. */
13342 if (p->overridden && !p->overridden->is_generic)
13343 {
13344 gfc_error ("GENERIC %qs at %L cannot overwrite specific binding with"
13345 " the same name", name, &p->where);
13346 return false;
13347 }
13348
13349 /* Take the SUBROUTINE/FUNCTION attributes of the first specific target, as
13350 all must have the same attributes here. */
13351 first_target = p->u.generic->specific->u.specific;
13352 gcc_assert (first_target);
13353 p->subroutine = first_target->n.sym->attr.subroutine;
13354 p->function = first_target->n.sym->attr.function;
13355
13356 return true;
13357 }
13358
13359
13360 /* Resolve a GENERIC procedure binding for a derived type. */
13361
13362 static bool
13363 resolve_typebound_generic (gfc_symbol* derived, gfc_symtree* st)
13364 {
13365 gfc_symbol* super_type;
13366
13367 /* Find the overridden binding if any. */
13368 st->n.tb->overridden = NULL;
13369 super_type = gfc_get_derived_super_type (derived);
13370 if (super_type)
13371 {
13372 gfc_symtree* overridden;
13373 overridden = gfc_find_typebound_proc (super_type, NULL, st->name,
13374 true, NULL);
13375
13376 if (overridden && overridden->n.tb)
13377 st->n.tb->overridden = overridden->n.tb;
13378 }
13379
13380 /* Resolve using worker function. */
13381 return resolve_tb_generic_targets (super_type, st->n.tb, st->name);
13382 }
13383
13384
13385 /* Retrieve the target-procedure of an operator binding and do some checks in
13386 common for intrinsic and user-defined type-bound operators. */
13387
13388 static gfc_symbol*
13389 get_checked_tb_operator_target (gfc_tbp_generic* target, locus where)
13390 {
13391 gfc_symbol* target_proc;
13392
13393 gcc_assert (target->specific && !target->specific->is_generic);
13394 target_proc = target->specific->u.specific->n.sym;
13395 gcc_assert (target_proc);
13396
13397 /* F08:C468. All operator bindings must have a passed-object dummy argument. */
13398 if (target->specific->nopass)
13399 {
13400 gfc_error ("Type-bound operator at %L cannot be NOPASS", &where);
13401 return NULL;
13402 }
13403
13404 return target_proc;
13405 }
13406
13407
13408 /* Resolve a type-bound intrinsic operator. */
13409
13410 static bool
13411 resolve_typebound_intrinsic_op (gfc_symbol* derived, gfc_intrinsic_op op,
13412 gfc_typebound_proc* p)
13413 {
13414 gfc_symbol* super_type;
13415 gfc_tbp_generic* target;
13416
13417 /* If there's already an error here, do nothing (but don't fail again). */
13418 if (p->error)
13419 return true;
13420
13421 /* Operators should always be GENERIC bindings. */
13422 gcc_assert (p->is_generic);
13423
13424 /* Look for an overridden binding. */
13425 super_type = gfc_get_derived_super_type (derived);
13426 if (super_type && super_type->f2k_derived)
13427 p->overridden = gfc_find_typebound_intrinsic_op (super_type, NULL,
13428 op, true, NULL);
13429 else
13430 p->overridden = NULL;
13431
13432 /* Resolve general GENERIC properties using worker function. */
13433 if (!resolve_tb_generic_targets (super_type, p, gfc_op2string(op)))
13434 goto error;
13435
13436 /* Check the targets to be procedures of correct interface. */
13437 for (target = p->u.generic; target; target = target->next)
13438 {
13439 gfc_symbol* target_proc;
13440
13441 target_proc = get_checked_tb_operator_target (target, p->where);
13442 if (!target_proc)
13443 goto error;
13444
13445 if (!gfc_check_operator_interface (target_proc, op, p->where))
13446 goto error;
13447
13448 /* Add target to non-typebound operator list. */
13449 if (!target->specific->deferred && !derived->attr.use_assoc
13450 && p->access != ACCESS_PRIVATE && derived->ns == gfc_current_ns)
13451 {
13452 gfc_interface *head, *intr;
13453
13454 /* Preempt 'gfc_check_new_interface' for submodules, where the
13455 mechanism for handling module procedures winds up resolving
13456 operator interfaces twice and would otherwise cause an error. */
13457 for (intr = derived->ns->op[op]; intr; intr = intr->next)
13458 if (intr->sym == target_proc
13459 && target_proc->attr.used_in_submodule)
13460 return true;
13461
13462 if (!gfc_check_new_interface (derived->ns->op[op],
13463 target_proc, p->where))
13464 return false;
13465 head = derived->ns->op[op];
13466 intr = gfc_get_interface ();
13467 intr->sym = target_proc;
13468 intr->where = p->where;
13469 intr->next = head;
13470 derived->ns->op[op] = intr;
13471 }
13472 }
13473
13474 return true;
13475
13476 error:
13477 p->error = 1;
13478 return false;
13479 }
13480
13481
13482 /* Resolve a type-bound user operator (tree-walker callback). */
13483
13484 static gfc_symbol* resolve_bindings_derived;
13485 static bool resolve_bindings_result;
13486
13487 static bool check_uop_procedure (gfc_symbol* sym, locus where);
13488
13489 static void
13490 resolve_typebound_user_op (gfc_symtree* stree)
13491 {
13492 gfc_symbol* super_type;
13493 gfc_tbp_generic* target;
13494
13495 gcc_assert (stree && stree->n.tb);
13496
13497 if (stree->n.tb->error)
13498 return;
13499
13500 /* Operators should always be GENERIC bindings. */
13501 gcc_assert (stree->n.tb->is_generic);
13502
13503 /* Find overridden procedure, if any. */
13504 super_type = gfc_get_derived_super_type (resolve_bindings_derived);
13505 if (super_type && super_type->f2k_derived)
13506 {
13507 gfc_symtree* overridden;
13508 overridden = gfc_find_typebound_user_op (super_type, NULL,
13509 stree->name, true, NULL);
13510
13511 if (overridden && overridden->n.tb)
13512 stree->n.tb->overridden = overridden->n.tb;
13513 }
13514 else
13515 stree->n.tb->overridden = NULL;
13516
13517 /* Resolve basically using worker function. */
13518 if (!resolve_tb_generic_targets (super_type, stree->n.tb, stree->name))
13519 goto error;
13520
13521 /* Check the targets to be functions of correct interface. */
13522 for (target = stree->n.tb->u.generic; target; target = target->next)
13523 {
13524 gfc_symbol* target_proc;
13525
13526 target_proc = get_checked_tb_operator_target (target, stree->n.tb->where);
13527 if (!target_proc)
13528 goto error;
13529
13530 if (!check_uop_procedure (target_proc, stree->n.tb->where))
13531 goto error;
13532 }
13533
13534 return;
13535
13536 error:
13537 resolve_bindings_result = false;
13538 stree->n.tb->error = 1;
13539 }
13540
13541
13542 /* Resolve the type-bound procedures for a derived type. */
13543
13544 static void
13545 resolve_typebound_procedure (gfc_symtree* stree)
13546 {
13547 gfc_symbol* proc;
13548 locus where;
13549 gfc_symbol* me_arg;
13550 gfc_symbol* super_type;
13551 gfc_component* comp;
13552
13553 gcc_assert (stree);
13554
13555 /* Undefined specific symbol from GENERIC target definition. */
13556 if (!stree->n.tb)
13557 return;
13558
13559 if (stree->n.tb->error)
13560 return;
13561
13562 /* If this is a GENERIC binding, use that routine. */
13563 if (stree->n.tb->is_generic)
13564 {
13565 if (!resolve_typebound_generic (resolve_bindings_derived, stree))
13566 goto error;
13567 return;
13568 }
13569
13570 /* Get the target-procedure to check it. */
13571 gcc_assert (!stree->n.tb->is_generic);
13572 gcc_assert (stree->n.tb->u.specific);
13573 proc = stree->n.tb->u.specific->n.sym;
13574 where = stree->n.tb->where;
13575
13576 /* Default access should already be resolved from the parser. */
13577 gcc_assert (stree->n.tb->access != ACCESS_UNKNOWN);
13578
13579 if (stree->n.tb->deferred)
13580 {
13581 if (!check_proc_interface (proc, &where))
13582 goto error;
13583 }
13584 else
13585 {
13586 /* If proc has not been resolved at this point, proc->name may
13587 actually be a USE associated entity. See PR fortran/89647. */
13588 if (!proc->resolved
13589 && proc->attr.function == 0 && proc->attr.subroutine == 0)
13590 {
13591 gfc_symbol *tmp;
13592 gfc_find_symbol (proc->name, gfc_current_ns->parent, 1, &tmp);
13593 if (tmp && tmp->attr.use_assoc)
13594 {
13595 proc->module = tmp->module;
13596 proc->attr.proc = tmp->attr.proc;
13597 proc->attr.function = tmp->attr.function;
13598 proc->attr.subroutine = tmp->attr.subroutine;
13599 proc->attr.use_assoc = tmp->attr.use_assoc;
13600 proc->ts = tmp->ts;
13601 proc->result = tmp->result;
13602 }
13603 }
13604
13605 /* Check for F08:C465. */
13606 if ((!proc->attr.subroutine && !proc->attr.function)
13607 || (proc->attr.proc != PROC_MODULE
13608 && proc->attr.if_source != IFSRC_IFBODY)
13609 || proc->attr.abstract)
13610 {
13611 gfc_error ("%qs must be a module procedure or an external "
13612 "procedure with an explicit interface at %L",
13613 proc->name, &where);
13614 goto error;
13615 }
13616 }
13617
13618 stree->n.tb->subroutine = proc->attr.subroutine;
13619 stree->n.tb->function = proc->attr.function;
13620
13621 /* Find the super-type of the current derived type. We could do this once and
13622 store in a global if speed is needed, but as long as not I believe this is
13623 more readable and clearer. */
13624 super_type = gfc_get_derived_super_type (resolve_bindings_derived);
13625
13626 /* If PASS, resolve and check arguments if not already resolved / loaded
13627 from a .mod file. */
13628 if (!stree->n.tb->nopass && stree->n.tb->pass_arg_num == 0)
13629 {
13630 gfc_formal_arglist *dummy_args;
13631
13632 dummy_args = gfc_sym_get_dummy_args (proc);
13633 if (stree->n.tb->pass_arg)
13634 {
13635 gfc_formal_arglist *i;
13636
13637 /* If an explicit passing argument name is given, walk the arg-list
13638 and look for it. */
13639
13640 me_arg = NULL;
13641 stree->n.tb->pass_arg_num = 1;
13642 for (i = dummy_args; i; i = i->next)
13643 {
13644 if (!strcmp (i->sym->name, stree->n.tb->pass_arg))
13645 {
13646 me_arg = i->sym;
13647 break;
13648 }
13649 ++stree->n.tb->pass_arg_num;
13650 }
13651
13652 if (!me_arg)
13653 {
13654 gfc_error ("Procedure %qs with PASS(%s) at %L has no"
13655 " argument %qs",
13656 proc->name, stree->n.tb->pass_arg, &where,
13657 stree->n.tb->pass_arg);
13658 goto error;
13659 }
13660 }
13661 else
13662 {
13663 /* Otherwise, take the first one; there should in fact be at least
13664 one. */
13665 stree->n.tb->pass_arg_num = 1;
13666 if (!dummy_args)
13667 {
13668 gfc_error ("Procedure %qs with PASS at %L must have at"
13669 " least one argument", proc->name, &where);
13670 goto error;
13671 }
13672 me_arg = dummy_args->sym;
13673 }
13674
13675 /* Now check that the argument-type matches and the passed-object
13676 dummy argument is generally fine. */
13677
13678 gcc_assert (me_arg);
13679
13680 if (me_arg->ts.type != BT_CLASS)
13681 {
13682 gfc_error ("Non-polymorphic passed-object dummy argument of %qs"
13683 " at %L", proc->name, &where);
13684 goto error;
13685 }
13686
13687 if (CLASS_DATA (me_arg)->ts.u.derived
13688 != resolve_bindings_derived)
13689 {
13690 gfc_error ("Argument %qs of %qs with PASS(%s) at %L must be of"
13691 " the derived-type %qs", me_arg->name, proc->name,
13692 me_arg->name, &where, resolve_bindings_derived->name);
13693 goto error;
13694 }
13695
13696 gcc_assert (me_arg->ts.type == BT_CLASS);
13697 if (CLASS_DATA (me_arg)->as && CLASS_DATA (me_arg)->as->rank != 0)
13698 {
13699 gfc_error ("Passed-object dummy argument of %qs at %L must be"
13700 " scalar", proc->name, &where);
13701 goto error;
13702 }
13703 if (CLASS_DATA (me_arg)->attr.allocatable)
13704 {
13705 gfc_error ("Passed-object dummy argument of %qs at %L must not"
13706 " be ALLOCATABLE", proc->name, &where);
13707 goto error;
13708 }
13709 if (CLASS_DATA (me_arg)->attr.class_pointer)
13710 {
13711 gfc_error ("Passed-object dummy argument of %qs at %L must not"
13712 " be POINTER", proc->name, &where);
13713 goto error;
13714 }
13715 }
13716
13717 /* If we are extending some type, check that we don't override a procedure
13718 flagged NON_OVERRIDABLE. */
13719 stree->n.tb->overridden = NULL;
13720 if (super_type)
13721 {
13722 gfc_symtree* overridden;
13723 overridden = gfc_find_typebound_proc (super_type, NULL,
13724 stree->name, true, NULL);
13725
13726 if (overridden)
13727 {
13728 if (overridden->n.tb)
13729 stree->n.tb->overridden = overridden->n.tb;
13730
13731 if (!gfc_check_typebound_override (stree, overridden))
13732 goto error;
13733 }
13734 }
13735
13736 /* See if there's a name collision with a component directly in this type. */
13737 for (comp = resolve_bindings_derived->components; comp; comp = comp->next)
13738 if (!strcmp (comp->name, stree->name))
13739 {
13740 gfc_error ("Procedure %qs at %L has the same name as a component of"
13741 " %qs",
13742 stree->name, &where, resolve_bindings_derived->name);
13743 goto error;
13744 }
13745
13746 /* Try to find a name collision with an inherited component. */
13747 if (super_type && gfc_find_component (super_type, stree->name, true, true,
13748 NULL))
13749 {
13750 gfc_error ("Procedure %qs at %L has the same name as an inherited"
13751 " component of %qs",
13752 stree->name, &where, resolve_bindings_derived->name);
13753 goto error;
13754 }
13755
13756 stree->n.tb->error = 0;
13757 return;
13758
13759 error:
13760 resolve_bindings_result = false;
13761 stree->n.tb->error = 1;
13762 }
13763
13764
13765 static bool
13766 resolve_typebound_procedures (gfc_symbol* derived)
13767 {
13768 int op;
13769 gfc_symbol* super_type;
13770
13771 if (!derived->f2k_derived || !derived->f2k_derived->tb_sym_root)
13772 return true;
13773
13774 super_type = gfc_get_derived_super_type (derived);
13775 if (super_type)
13776 resolve_symbol (super_type);
13777
13778 resolve_bindings_derived = derived;
13779 resolve_bindings_result = true;
13780
13781 if (derived->f2k_derived->tb_sym_root)
13782 gfc_traverse_symtree (derived->f2k_derived->tb_sym_root,
13783 &resolve_typebound_procedure);
13784
13785 if (derived->f2k_derived->tb_uop_root)
13786 gfc_traverse_symtree (derived->f2k_derived->tb_uop_root,
13787 &resolve_typebound_user_op);
13788
13789 for (op = 0; op != GFC_INTRINSIC_OPS; ++op)
13790 {
13791 gfc_typebound_proc* p = derived->f2k_derived->tb_op[op];
13792 if (p && !resolve_typebound_intrinsic_op (derived,
13793 (gfc_intrinsic_op)op, p))
13794 resolve_bindings_result = false;
13795 }
13796
13797 return resolve_bindings_result;
13798 }
13799
13800
13801 /* Add a derived type to the dt_list. The dt_list is used in trans-types.c
13802 to give all identical derived types the same backend_decl. */
13803 static void
13804 add_dt_to_dt_list (gfc_symbol *derived)
13805 {
13806 if (!derived->dt_next)
13807 {
13808 if (gfc_derived_types)
13809 {
13810 derived->dt_next = gfc_derived_types->dt_next;
13811 gfc_derived_types->dt_next = derived;
13812 }
13813 else
13814 {
13815 derived->dt_next = derived;
13816 }
13817 gfc_derived_types = derived;
13818 }
13819 }
13820
13821
13822 /* Ensure that a derived-type is really not abstract, meaning that every
13823 inherited DEFERRED binding is overridden by a non-DEFERRED one. */
13824
13825 static bool
13826 ensure_not_abstract_walker (gfc_symbol* sub, gfc_symtree* st)
13827 {
13828 if (!st)
13829 return true;
13830
13831 if (!ensure_not_abstract_walker (sub, st->left))
13832 return false;
13833 if (!ensure_not_abstract_walker (sub, st->right))
13834 return false;
13835
13836 if (st->n.tb && st->n.tb->deferred)
13837 {
13838 gfc_symtree* overriding;
13839 overriding = gfc_find_typebound_proc (sub, NULL, st->name, true, NULL);
13840 if (!overriding)
13841 return false;
13842 gcc_assert (overriding->n.tb);
13843 if (overriding->n.tb->deferred)
13844 {
13845 gfc_error ("Derived-type %qs declared at %L must be ABSTRACT because"
13846 " %qs is DEFERRED and not overridden",
13847 sub->name, &sub->declared_at, st->name);
13848 return false;
13849 }
13850 }
13851
13852 return true;
13853 }
13854
13855 static bool
13856 ensure_not_abstract (gfc_symbol* sub, gfc_symbol* ancestor)
13857 {
13858 /* The algorithm used here is to recursively travel up the ancestry of sub
13859 and for each ancestor-type, check all bindings. If any of them is
13860 DEFERRED, look it up starting from sub and see if the found (overriding)
13861 binding is not DEFERRED.
13862 This is not the most efficient way to do this, but it should be ok and is
13863 clearer than something sophisticated. */
13864
13865 gcc_assert (ancestor && !sub->attr.abstract);
13866
13867 if (!ancestor->attr.abstract)
13868 return true;
13869
13870 /* Walk bindings of this ancestor. */
13871 if (ancestor->f2k_derived)
13872 {
13873 bool t;
13874 t = ensure_not_abstract_walker (sub, ancestor->f2k_derived->tb_sym_root);
13875 if (!t)
13876 return false;
13877 }
13878
13879 /* Find next ancestor type and recurse on it. */
13880 ancestor = gfc_get_derived_super_type (ancestor);
13881 if (ancestor)
13882 return ensure_not_abstract (sub, ancestor);
13883
13884 return true;
13885 }
13886
13887
13888 /* This check for typebound defined assignments is done recursively
13889 since the order in which derived types are resolved is not always in
13890 order of the declarations. */
13891
13892 static void
13893 check_defined_assignments (gfc_symbol *derived)
13894 {
13895 gfc_component *c;
13896
13897 for (c = derived->components; c; c = c->next)
13898 {
13899 if (!gfc_bt_struct (c->ts.type)
13900 || c->attr.pointer
13901 || c->attr.allocatable
13902 || c->attr.proc_pointer_comp
13903 || c->attr.class_pointer
13904 || c->attr.proc_pointer)
13905 continue;
13906
13907 if (c->ts.u.derived->attr.defined_assign_comp
13908 || (c->ts.u.derived->f2k_derived
13909 && c->ts.u.derived->f2k_derived->tb_op[INTRINSIC_ASSIGN]))
13910 {
13911 derived->attr.defined_assign_comp = 1;
13912 return;
13913 }
13914
13915 check_defined_assignments (c->ts.u.derived);
13916 if (c->ts.u.derived->attr.defined_assign_comp)
13917 {
13918 derived->attr.defined_assign_comp = 1;
13919 return;
13920 }
13921 }
13922 }
13923
13924
13925 /* Resolve a single component of a derived type or structure. */
13926
13927 static bool
13928 resolve_component (gfc_component *c, gfc_symbol *sym)
13929 {
13930 gfc_symbol *super_type;
13931 symbol_attribute *attr;
13932
13933 if (c->attr.artificial)
13934 return true;
13935
13936 /* Do not allow vtype components to be resolved in nameless namespaces
13937 such as block data because the procedure pointers will cause ICEs
13938 and vtables are not needed in these contexts. */
13939 if (sym->attr.vtype && sym->attr.use_assoc
13940 && sym->ns->proc_name == NULL)
13941 return true;
13942
13943 /* F2008, C442. */
13944 if ((!sym->attr.is_class || c != sym->components)
13945 && c->attr.codimension
13946 && (!c->attr.allocatable || (c->as && c->as->type != AS_DEFERRED)))
13947 {
13948 gfc_error ("Coarray component %qs at %L must be allocatable with "
13949 "deferred shape", c->name, &c->loc);
13950 return false;
13951 }
13952
13953 /* F2008, C443. */
13954 if (c->attr.codimension && c->ts.type == BT_DERIVED
13955 && c->ts.u.derived->ts.is_iso_c)
13956 {
13957 gfc_error ("Component %qs at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) "
13958 "shall not be a coarray", c->name, &c->loc);
13959 return false;
13960 }
13961
13962 /* F2008, C444. */
13963 if (gfc_bt_struct (c->ts.type) && c->ts.u.derived->attr.coarray_comp
13964 && (c->attr.codimension || c->attr.pointer || c->attr.dimension
13965 || c->attr.allocatable))
13966 {
13967 gfc_error ("Component %qs at %L with coarray component "
13968 "shall be a nonpointer, nonallocatable scalar",
13969 c->name, &c->loc);
13970 return false;
13971 }
13972
13973 /* F2008, C448. */
13974 if (c->ts.type == BT_CLASS)
13975 {
13976 if (CLASS_DATA (c))
13977 {
13978 attr = &(CLASS_DATA (c)->attr);
13979
13980 /* Fix up contiguous attribute. */
13981 if (c->attr.contiguous)
13982 attr->contiguous = 1;
13983 }
13984 else
13985 attr = NULL;
13986 }
13987 else
13988 attr = &c->attr;
13989
13990 if (attr && attr->contiguous && (!attr->dimension || !attr->pointer))
13991 {
13992 gfc_error ("Component %qs at %L has the CONTIGUOUS attribute but "
13993 "is not an array pointer", c->name, &c->loc);
13994 return false;
13995 }
13996
13997 /* F2003, 15.2.1 - length has to be one. */
13998 if (sym->attr.is_bind_c && c->ts.type == BT_CHARACTER
13999 && (c->ts.u.cl == NULL || c->ts.u.cl->length == NULL
14000 || !gfc_is_constant_expr (c->ts.u.cl->length)
14001 || mpz_cmp_si (c->ts.u.cl->length->value.integer, 1) != 0))
14002 {
14003 gfc_error ("Component %qs of BIND(C) type at %L must have length one",
14004 c->name, &c->loc);
14005 return false;
14006 }
14007
14008 if (c->attr.proc_pointer && c->ts.interface)
14009 {
14010 gfc_symbol *ifc = c->ts.interface;
14011
14012 if (!sym->attr.vtype && !check_proc_interface (ifc, &c->loc))
14013 {
14014 c->tb->error = 1;
14015 return false;
14016 }
14017
14018 if (ifc->attr.if_source || ifc->attr.intrinsic)
14019 {
14020 /* Resolve interface and copy attributes. */
14021 if (ifc->formal && !ifc->formal_ns)
14022 resolve_symbol (ifc);
14023 if (ifc->attr.intrinsic)
14024 gfc_resolve_intrinsic (ifc, &ifc->declared_at);
14025
14026 if (ifc->result)
14027 {
14028 c->ts = ifc->result->ts;
14029 c->attr.allocatable = ifc->result->attr.allocatable;
14030 c->attr.pointer = ifc->result->attr.pointer;
14031 c->attr.dimension = ifc->result->attr.dimension;
14032 c->as = gfc_copy_array_spec (ifc->result->as);
14033 c->attr.class_ok = ifc->result->attr.class_ok;
14034 }
14035 else
14036 {
14037 c->ts = ifc->ts;
14038 c->attr.allocatable = ifc->attr.allocatable;
14039 c->attr.pointer = ifc->attr.pointer;
14040 c->attr.dimension = ifc->attr.dimension;
14041 c->as = gfc_copy_array_spec (ifc->as);
14042 c->attr.class_ok = ifc->attr.class_ok;
14043 }
14044 c->ts.interface = ifc;
14045 c->attr.function = ifc->attr.function;
14046 c->attr.subroutine = ifc->attr.subroutine;
14047
14048 c->attr.pure = ifc->attr.pure;
14049 c->attr.elemental = ifc->attr.elemental;
14050 c->attr.recursive = ifc->attr.recursive;
14051 c->attr.always_explicit = ifc->attr.always_explicit;
14052 c->attr.ext_attr |= ifc->attr.ext_attr;
14053 /* Copy char length. */
14054 if (ifc->ts.type == BT_CHARACTER && ifc->ts.u.cl)
14055 {
14056 gfc_charlen *cl = gfc_new_charlen (sym->ns, ifc->ts.u.cl);
14057 if (cl->length && !cl->resolved
14058 && !gfc_resolve_expr (cl->length))
14059 {
14060 c->tb->error = 1;
14061 return false;
14062 }
14063 c->ts.u.cl = cl;
14064 }
14065 }
14066 }
14067 else if (c->attr.proc_pointer && c->ts.type == BT_UNKNOWN)
14068 {
14069 /* Since PPCs are not implicitly typed, a PPC without an explicit
14070 interface must be a subroutine. */
14071 gfc_add_subroutine (&c->attr, c->name, &c->loc);
14072 }
14073
14074 /* Procedure pointer components: Check PASS arg. */
14075 if (c->attr.proc_pointer && !c->tb->nopass && c->tb->pass_arg_num == 0
14076 && !sym->attr.vtype)
14077 {
14078 gfc_symbol* me_arg;
14079
14080 if (c->tb->pass_arg)
14081 {
14082 gfc_formal_arglist* i;
14083
14084 /* If an explicit passing argument name is given, walk the arg-list
14085 and look for it. */
14086
14087 me_arg = NULL;
14088 c->tb->pass_arg_num = 1;
14089 for (i = c->ts.interface->formal; i; i = i->next)
14090 {
14091 if (!strcmp (i->sym->name, c->tb->pass_arg))
14092 {
14093 me_arg = i->sym;
14094 break;
14095 }
14096 c->tb->pass_arg_num++;
14097 }
14098
14099 if (!me_arg)
14100 {
14101 gfc_error ("Procedure pointer component %qs with PASS(%s) "
14102 "at %L has no argument %qs", c->name,
14103 c->tb->pass_arg, &c->loc, c->tb->pass_arg);
14104 c->tb->error = 1;
14105 return false;
14106 }
14107 }
14108 else
14109 {
14110 /* Otherwise, take the first one; there should in fact be at least
14111 one. */
14112 c->tb->pass_arg_num = 1;
14113 if (!c->ts.interface->formal)
14114 {
14115 gfc_error ("Procedure pointer component %qs with PASS at %L "
14116 "must have at least one argument",
14117 c->name, &c->loc);
14118 c->tb->error = 1;
14119 return false;
14120 }
14121 me_arg = c->ts.interface->formal->sym;
14122 }
14123
14124 /* Now check that the argument-type matches. */
14125 gcc_assert (me_arg);
14126 if ((me_arg->ts.type != BT_DERIVED && me_arg->ts.type != BT_CLASS)
14127 || (me_arg->ts.type == BT_DERIVED && me_arg->ts.u.derived != sym)
14128 || (me_arg->ts.type == BT_CLASS
14129 && CLASS_DATA (me_arg)->ts.u.derived != sym))
14130 {
14131 gfc_error ("Argument %qs of %qs with PASS(%s) at %L must be of"
14132 " the derived type %qs", me_arg->name, c->name,
14133 me_arg->name, &c->loc, sym->name);
14134 c->tb->error = 1;
14135 return false;
14136 }
14137
14138 /* Check for F03:C453. */
14139 if (CLASS_DATA (me_arg)->attr.dimension)
14140 {
14141 gfc_error ("Argument %qs of %qs with PASS(%s) at %L "
14142 "must be scalar", me_arg->name, c->name, me_arg->name,
14143 &c->loc);
14144 c->tb->error = 1;
14145 return false;
14146 }
14147
14148 if (CLASS_DATA (me_arg)->attr.class_pointer)
14149 {
14150 gfc_error ("Argument %qs of %qs with PASS(%s) at %L "
14151 "may not have the POINTER attribute", me_arg->name,
14152 c->name, me_arg->name, &c->loc);
14153 c->tb->error = 1;
14154 return false;
14155 }
14156
14157 if (CLASS_DATA (me_arg)->attr.allocatable)
14158 {
14159 gfc_error ("Argument %qs of %qs with PASS(%s) at %L "
14160 "may not be ALLOCATABLE", me_arg->name, c->name,
14161 me_arg->name, &c->loc);
14162 c->tb->error = 1;
14163 return false;
14164 }
14165
14166 if (gfc_type_is_extensible (sym) && me_arg->ts.type != BT_CLASS)
14167 {
14168 gfc_error ("Non-polymorphic passed-object dummy argument of %qs"
14169 " at %L", c->name, &c->loc);
14170 return false;
14171 }
14172
14173 }
14174
14175 /* Check type-spec if this is not the parent-type component. */
14176 if (((sym->attr.is_class
14177 && (!sym->components->ts.u.derived->attr.extension
14178 || c != sym->components->ts.u.derived->components))
14179 || (!sym->attr.is_class
14180 && (!sym->attr.extension || c != sym->components)))
14181 && !sym->attr.vtype
14182 && !resolve_typespec_used (&c->ts, &c->loc, c->name))
14183 return false;
14184
14185 super_type = gfc_get_derived_super_type (sym);
14186
14187 /* If this type is an extension, set the accessibility of the parent
14188 component. */
14189 if (super_type
14190 && ((sym->attr.is_class
14191 && c == sym->components->ts.u.derived->components)
14192 || (!sym->attr.is_class && c == sym->components))
14193 && strcmp (super_type->name, c->name) == 0)
14194 c->attr.access = super_type->attr.access;
14195
14196 /* If this type is an extension, see if this component has the same name
14197 as an inherited type-bound procedure. */
14198 if (super_type && !sym->attr.is_class
14199 && gfc_find_typebound_proc (super_type, NULL, c->name, true, NULL))
14200 {
14201 gfc_error ("Component %qs of %qs at %L has the same name as an"
14202 " inherited type-bound procedure",
14203 c->name, sym->name, &c->loc);
14204 return false;
14205 }
14206
14207 if (c->ts.type == BT_CHARACTER && !c->attr.proc_pointer
14208 && !c->ts.deferred)
14209 {
14210 if (c->ts.u.cl->length == NULL
14211 || (!resolve_charlen(c->ts.u.cl))
14212 || !gfc_is_constant_expr (c->ts.u.cl->length))
14213 {
14214 gfc_error ("Character length of component %qs needs to "
14215 "be a constant specification expression at %L",
14216 c->name,
14217 c->ts.u.cl->length ? &c->ts.u.cl->length->where : &c->loc);
14218 return false;
14219 }
14220 }
14221
14222 if (c->ts.type == BT_CHARACTER && c->ts.deferred
14223 && !c->attr.pointer && !c->attr.allocatable)
14224 {
14225 gfc_error ("Character component %qs of %qs at %L with deferred "
14226 "length must be a POINTER or ALLOCATABLE",
14227 c->name, sym->name, &c->loc);
14228 return false;
14229 }
14230
14231 /* Add the hidden deferred length field. */
14232 if (c->ts.type == BT_CHARACTER
14233 && (c->ts.deferred || c->attr.pdt_string)
14234 && !c->attr.function
14235 && !sym->attr.is_class)
14236 {
14237 char name[GFC_MAX_SYMBOL_LEN+9];
14238 gfc_component *strlen;
14239 sprintf (name, "_%s_length", c->name);
14240 strlen = gfc_find_component (sym, name, true, true, NULL);
14241 if (strlen == NULL)
14242 {
14243 if (!gfc_add_component (sym, name, &strlen))
14244 return false;
14245 strlen->ts.type = BT_INTEGER;
14246 strlen->ts.kind = gfc_charlen_int_kind;
14247 strlen->attr.access = ACCESS_PRIVATE;
14248 strlen->attr.artificial = 1;
14249 }
14250 }
14251
14252 if (c->ts.type == BT_DERIVED
14253 && sym->component_access != ACCESS_PRIVATE
14254 && gfc_check_symbol_access (sym)
14255 && !is_sym_host_assoc (c->ts.u.derived, sym->ns)
14256 && !c->ts.u.derived->attr.use_assoc
14257 && !gfc_check_symbol_access (c->ts.u.derived)
14258 && !gfc_notify_std (GFC_STD_F2003, "the component %qs is a "
14259 "PRIVATE type and cannot be a component of "
14260 "%qs, which is PUBLIC at %L", c->name,
14261 sym->name, &sym->declared_at))
14262 return false;
14263
14264 if ((sym->attr.sequence || sym->attr.is_bind_c) && c->ts.type == BT_CLASS)
14265 {
14266 gfc_error ("Polymorphic component %s at %L in SEQUENCE or BIND(C) "
14267 "type %s", c->name, &c->loc, sym->name);
14268 return false;
14269 }
14270
14271 if (sym->attr.sequence)
14272 {
14273 if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.sequence == 0)
14274 {
14275 gfc_error ("Component %s of SEQUENCE type declared at %L does "
14276 "not have the SEQUENCE attribute",
14277 c->ts.u.derived->name, &sym->declared_at);
14278 return false;
14279 }
14280 }
14281
14282 if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.generic)
14283 c->ts.u.derived = gfc_find_dt_in_generic (c->ts.u.derived);
14284 else if (c->ts.type == BT_CLASS && c->attr.class_ok
14285 && CLASS_DATA (c)->ts.u.derived->attr.generic)
14286 CLASS_DATA (c)->ts.u.derived
14287 = gfc_find_dt_in_generic (CLASS_DATA (c)->ts.u.derived);
14288
14289 /* If an allocatable component derived type is of the same type as
14290 the enclosing derived type, we need a vtable generating so that
14291 the __deallocate procedure is created. */
14292 if ((c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
14293 && c->ts.u.derived == sym && c->attr.allocatable == 1)
14294 gfc_find_vtab (&c->ts);
14295
14296 /* Ensure that all the derived type components are put on the
14297 derived type list; even in formal namespaces, where derived type
14298 pointer components might not have been declared. */
14299 if (c->ts.type == BT_DERIVED
14300 && c->ts.u.derived
14301 && c->ts.u.derived->components
14302 && c->attr.pointer
14303 && sym != c->ts.u.derived)
14304 add_dt_to_dt_list (c->ts.u.derived);
14305
14306 if (!gfc_resolve_array_spec (c->as,
14307 !(c->attr.pointer || c->attr.proc_pointer
14308 || c->attr.allocatable)))
14309 return false;
14310
14311 if (c->initializer && !sym->attr.vtype
14312 && !c->attr.pdt_kind && !c->attr.pdt_len
14313 && !gfc_check_assign_symbol (sym, c, c->initializer))
14314 return false;
14315
14316 return true;
14317 }
14318
14319
14320 /* Be nice about the locus for a structure expression - show the locus of the
14321 first non-null sub-expression if we can. */
14322
14323 static locus *
14324 cons_where (gfc_expr *struct_expr)
14325 {
14326 gfc_constructor *cons;
14327
14328 gcc_assert (struct_expr && struct_expr->expr_type == EXPR_STRUCTURE);
14329
14330 cons = gfc_constructor_first (struct_expr->value.constructor);
14331 for (; cons; cons = gfc_constructor_next (cons))
14332 {
14333 if (cons->expr && cons->expr->expr_type != EXPR_NULL)
14334 return &cons->expr->where;
14335 }
14336
14337 return &struct_expr->where;
14338 }
14339
14340 /* Resolve the components of a structure type. Much less work than derived
14341 types. */
14342
14343 static bool
14344 resolve_fl_struct (gfc_symbol *sym)
14345 {
14346 gfc_component *c;
14347 gfc_expr *init = NULL;
14348 bool success;
14349
14350 /* Make sure UNIONs do not have overlapping initializers. */
14351 if (sym->attr.flavor == FL_UNION)
14352 {
14353 for (c = sym->components; c; c = c->next)
14354 {
14355 if (init && c->initializer)
14356 {
14357 gfc_error ("Conflicting initializers in union at %L and %L",
14358 cons_where (init), cons_where (c->initializer));
14359 gfc_free_expr (c->initializer);
14360 c->initializer = NULL;
14361 }
14362 if (init == NULL)
14363 init = c->initializer;
14364 }
14365 }
14366
14367 success = true;
14368 for (c = sym->components; c; c = c->next)
14369 if (!resolve_component (c, sym))
14370 success = false;
14371
14372 if (!success)
14373 return false;
14374
14375 if (sym->components)
14376 add_dt_to_dt_list (sym);
14377
14378 return true;
14379 }
14380
14381
14382 /* Resolve the components of a derived type. This does not have to wait until
14383 resolution stage, but can be done as soon as the dt declaration has been
14384 parsed. */
14385
14386 static bool
14387 resolve_fl_derived0 (gfc_symbol *sym)
14388 {
14389 gfc_symbol* super_type;
14390 gfc_component *c;
14391 gfc_formal_arglist *f;
14392 bool success;
14393
14394 if (sym->attr.unlimited_polymorphic)
14395 return true;
14396
14397 super_type = gfc_get_derived_super_type (sym);
14398
14399 /* F2008, C432. */
14400 if (super_type && sym->attr.coarray_comp && !super_type->attr.coarray_comp)
14401 {
14402 gfc_error ("As extending type %qs at %L has a coarray component, "
14403 "parent type %qs shall also have one", sym->name,
14404 &sym->declared_at, super_type->name);
14405 return false;
14406 }
14407
14408 /* Ensure the extended type gets resolved before we do. */
14409 if (super_type && !resolve_fl_derived0 (super_type))
14410 return false;
14411
14412 /* An ABSTRACT type must be extensible. */
14413 if (sym->attr.abstract && !gfc_type_is_extensible (sym))
14414 {
14415 gfc_error ("Non-extensible derived-type %qs at %L must not be ABSTRACT",
14416 sym->name, &sym->declared_at);
14417 return false;
14418 }
14419
14420 c = (sym->attr.is_class) ? sym->components->ts.u.derived->components
14421 : sym->components;
14422
14423 success = true;
14424 for ( ; c != NULL; c = c->next)
14425 if (!resolve_component (c, sym))
14426 success = false;
14427
14428 if (!success)
14429 return false;
14430
14431 /* Now add the caf token field, where needed. */
14432 if (flag_coarray != GFC_FCOARRAY_NONE
14433 && !sym->attr.is_class && !sym->attr.vtype)
14434 {
14435 for (c = sym->components; c; c = c->next)
14436 if (!c->attr.dimension && !c->attr.codimension
14437 && (c->attr.allocatable || c->attr.pointer))
14438 {
14439 char name[GFC_MAX_SYMBOL_LEN+9];
14440 gfc_component *token;
14441 sprintf (name, "_caf_%s", c->name);
14442 token = gfc_find_component (sym, name, true, true, NULL);
14443 if (token == NULL)
14444 {
14445 if (!gfc_add_component (sym, name, &token))
14446 return false;
14447 token->ts.type = BT_VOID;
14448 token->ts.kind = gfc_default_integer_kind;
14449 token->attr.access = ACCESS_PRIVATE;
14450 token->attr.artificial = 1;
14451 token->attr.caf_token = 1;
14452 }
14453 }
14454 }
14455
14456 check_defined_assignments (sym);
14457
14458 if (!sym->attr.defined_assign_comp && super_type)
14459 sym->attr.defined_assign_comp
14460 = super_type->attr.defined_assign_comp;
14461
14462 /* If this is a non-ABSTRACT type extending an ABSTRACT one, ensure that
14463 all DEFERRED bindings are overridden. */
14464 if (super_type && super_type->attr.abstract && !sym->attr.abstract
14465 && !sym->attr.is_class
14466 && !ensure_not_abstract (sym, super_type))
14467 return false;
14468
14469 /* Check that there is a component for every PDT parameter. */
14470 if (sym->attr.pdt_template)
14471 {
14472 for (f = sym->formal; f; f = f->next)
14473 {
14474 if (!f->sym)
14475 continue;
14476 c = gfc_find_component (sym, f->sym->name, true, true, NULL);
14477 if (c == NULL)
14478 {
14479 gfc_error ("Parameterized type %qs does not have a component "
14480 "corresponding to parameter %qs at %L", sym->name,
14481 f->sym->name, &sym->declared_at);
14482 break;
14483 }
14484 }
14485 }
14486
14487 /* Add derived type to the derived type list. */
14488 add_dt_to_dt_list (sym);
14489
14490 return true;
14491 }
14492
14493
14494 /* The following procedure does the full resolution of a derived type,
14495 including resolution of all type-bound procedures (if present). In contrast
14496 to 'resolve_fl_derived0' this can only be done after the module has been
14497 parsed completely. */
14498
14499 static bool
14500 resolve_fl_derived (gfc_symbol *sym)
14501 {
14502 gfc_symbol *gen_dt = NULL;
14503
14504 if (sym->attr.unlimited_polymorphic)
14505 return true;
14506
14507 if (!sym->attr.is_class)
14508 gfc_find_symbol (sym->name, sym->ns, 0, &gen_dt);
14509 if (gen_dt && gen_dt->generic && gen_dt->generic->next
14510 && (!gen_dt->generic->sym->attr.use_assoc
14511 || gen_dt->generic->sym->module != gen_dt->generic->next->sym->module)
14512 && !gfc_notify_std (GFC_STD_F2003, "Generic name %qs of function "
14513 "%qs at %L being the same name as derived "
14514 "type at %L", sym->name,
14515 gen_dt->generic->sym == sym
14516 ? gen_dt->generic->next->sym->name
14517 : gen_dt->generic->sym->name,
14518 gen_dt->generic->sym == sym
14519 ? &gen_dt->generic->next->sym->declared_at
14520 : &gen_dt->generic->sym->declared_at,
14521 &sym->declared_at))
14522 return false;
14523
14524 if (sym->components == NULL && !sym->attr.zero_comp && !sym->attr.use_assoc)
14525 {
14526 gfc_error ("Derived type %qs at %L has not been declared",
14527 sym->name, &sym->declared_at);
14528 return false;
14529 }
14530
14531 /* Resolve the finalizer procedures. */
14532 if (!gfc_resolve_finalizers (sym, NULL))
14533 return false;
14534
14535 if (sym->attr.is_class && sym->ts.u.derived == NULL)
14536 {
14537 /* Fix up incomplete CLASS symbols. */
14538 gfc_component *data = gfc_find_component (sym, "_data", true, true, NULL);
14539 gfc_component *vptr = gfc_find_component (sym, "_vptr", true, true, NULL);
14540
14541 /* Nothing more to do for unlimited polymorphic entities. */
14542 if (data->ts.u.derived->attr.unlimited_polymorphic)
14543 return true;
14544 else if (vptr->ts.u.derived == NULL)
14545 {
14546 gfc_symbol *vtab = gfc_find_derived_vtab (data->ts.u.derived);
14547 gcc_assert (vtab);
14548 vptr->ts.u.derived = vtab->ts.u.derived;
14549 if (!resolve_fl_derived0 (vptr->ts.u.derived))
14550 return false;
14551 }
14552 }
14553
14554 if (!resolve_fl_derived0 (sym))
14555 return false;
14556
14557 /* Resolve the type-bound procedures. */
14558 if (!resolve_typebound_procedures (sym))
14559 return false;
14560
14561 /* Generate module vtables subject to their accessibility and their not
14562 being vtables or pdt templates. If this is not done class declarations
14563 in external procedures wind up with their own version and so SELECT TYPE
14564 fails because the vptrs do not have the same address. */
14565 if (gfc_option.allow_std & GFC_STD_F2003
14566 && sym->ns->proc_name
14567 && sym->ns->proc_name->attr.flavor == FL_MODULE
14568 && sym->attr.access != ACCESS_PRIVATE
14569 && !(sym->attr.use_assoc || sym->attr.vtype || sym->attr.pdt_template))
14570 {
14571 gfc_symbol *vtab = gfc_find_derived_vtab (sym);
14572 gfc_set_sym_referenced (vtab);
14573 }
14574
14575 return true;
14576 }
14577
14578
14579 static bool
14580 resolve_fl_namelist (gfc_symbol *sym)
14581 {
14582 gfc_namelist *nl;
14583 gfc_symbol *nlsym;
14584
14585 for (nl = sym->namelist; nl; nl = nl->next)
14586 {
14587 /* Check again, the check in match only works if NAMELIST comes
14588 after the decl. */
14589 if (nl->sym->as && nl->sym->as->type == AS_ASSUMED_SIZE)
14590 {
14591 gfc_error ("Assumed size array %qs in namelist %qs at %L is not "
14592 "allowed", nl->sym->name, sym->name, &sym->declared_at);
14593 return false;
14594 }
14595
14596 if (nl->sym->as && nl->sym->as->type == AS_ASSUMED_SHAPE
14597 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST array object %qs "
14598 "with assumed shape in namelist %qs at %L",
14599 nl->sym->name, sym->name, &sym->declared_at))
14600 return false;
14601
14602 if (is_non_constant_shape_array (nl->sym)
14603 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST array object %qs "
14604 "with nonconstant shape in namelist %qs at %L",
14605 nl->sym->name, sym->name, &sym->declared_at))
14606 return false;
14607
14608 if (nl->sym->ts.type == BT_CHARACTER
14609 && (nl->sym->ts.u.cl->length == NULL
14610 || !gfc_is_constant_expr (nl->sym->ts.u.cl->length))
14611 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST object %qs with "
14612 "nonconstant character length in "
14613 "namelist %qs at %L", nl->sym->name,
14614 sym->name, &sym->declared_at))
14615 return false;
14616
14617 }
14618
14619 /* Reject PRIVATE objects in a PUBLIC namelist. */
14620 if (gfc_check_symbol_access (sym))
14621 {
14622 for (nl = sym->namelist; nl; nl = nl->next)
14623 {
14624 if (!nl->sym->attr.use_assoc
14625 && !is_sym_host_assoc (nl->sym, sym->ns)
14626 && !gfc_check_symbol_access (nl->sym))
14627 {
14628 gfc_error ("NAMELIST object %qs was declared PRIVATE and "
14629 "cannot be member of PUBLIC namelist %qs at %L",
14630 nl->sym->name, sym->name, &sym->declared_at);
14631 return false;
14632 }
14633
14634 if (nl->sym->ts.type == BT_DERIVED
14635 && (nl->sym->ts.u.derived->attr.alloc_comp
14636 || nl->sym->ts.u.derived->attr.pointer_comp))
14637 {
14638 if (!gfc_notify_std (GFC_STD_F2003, "NAMELIST object %qs in "
14639 "namelist %qs at %L with ALLOCATABLE "
14640 "or POINTER components", nl->sym->name,
14641 sym->name, &sym->declared_at))
14642 return false;
14643 return true;
14644 }
14645
14646 /* Types with private components that came here by USE-association. */
14647 if (nl->sym->ts.type == BT_DERIVED
14648 && derived_inaccessible (nl->sym->ts.u.derived))
14649 {
14650 gfc_error ("NAMELIST object %qs has use-associated PRIVATE "
14651 "components and cannot be member of namelist %qs at %L",
14652 nl->sym->name, sym->name, &sym->declared_at);
14653 return false;
14654 }
14655
14656 /* Types with private components that are defined in the same module. */
14657 if (nl->sym->ts.type == BT_DERIVED
14658 && !is_sym_host_assoc (nl->sym->ts.u.derived, sym->ns)
14659 && nl->sym->ts.u.derived->attr.private_comp)
14660 {
14661 gfc_error ("NAMELIST object %qs has PRIVATE components and "
14662 "cannot be a member of PUBLIC namelist %qs at %L",
14663 nl->sym->name, sym->name, &sym->declared_at);
14664 return false;
14665 }
14666 }
14667 }
14668
14669
14670 /* 14.1.2 A module or internal procedure represent local entities
14671 of the same type as a namelist member and so are not allowed. */
14672 for (nl = sym->namelist; nl; nl = nl->next)
14673 {
14674 if (nl->sym->ts.kind != 0 && nl->sym->attr.flavor == FL_VARIABLE)
14675 continue;
14676
14677 if (nl->sym->attr.function && nl->sym == nl->sym->result)
14678 if ((nl->sym == sym->ns->proc_name)
14679 ||
14680 (sym->ns->parent && nl->sym == sym->ns->parent->proc_name))
14681 continue;
14682
14683 nlsym = NULL;
14684 if (nl->sym->name)
14685 gfc_find_symbol (nl->sym->name, sym->ns, 1, &nlsym);
14686 if (nlsym && nlsym->attr.flavor == FL_PROCEDURE)
14687 {
14688 gfc_error ("PROCEDURE attribute conflicts with NAMELIST "
14689 "attribute in %qs at %L", nlsym->name,
14690 &sym->declared_at);
14691 return false;
14692 }
14693 }
14694
14695 if (async_io_dt)
14696 {
14697 for (nl = sym->namelist; nl; nl = nl->next)
14698 nl->sym->attr.asynchronous = 1;
14699 }
14700 return true;
14701 }
14702
14703
14704 static bool
14705 resolve_fl_parameter (gfc_symbol *sym)
14706 {
14707 /* A parameter array's shape needs to be constant. */
14708 if (sym->as != NULL
14709 && (sym->as->type == AS_DEFERRED
14710 || is_non_constant_shape_array (sym)))
14711 {
14712 gfc_error ("Parameter array %qs at %L cannot be automatic "
14713 "or of deferred shape", sym->name, &sym->declared_at);
14714 return false;
14715 }
14716
14717 /* Constraints on deferred type parameter. */
14718 if (!deferred_requirements (sym))
14719 return false;
14720
14721 /* Make sure a parameter that has been implicitly typed still
14722 matches the implicit type, since PARAMETER statements can precede
14723 IMPLICIT statements. */
14724 if (sym->attr.implicit_type
14725 && !gfc_compare_types (&sym->ts, gfc_get_default_type (sym->name,
14726 sym->ns)))
14727 {
14728 gfc_error ("Implicitly typed PARAMETER %qs at %L doesn't match a "
14729 "later IMPLICIT type", sym->name, &sym->declared_at);
14730 return false;
14731 }
14732
14733 /* Make sure the types of derived parameters are consistent. This
14734 type checking is deferred until resolution because the type may
14735 refer to a derived type from the host. */
14736 if (sym->ts.type == BT_DERIVED
14737 && !gfc_compare_types (&sym->ts, &sym->value->ts))
14738 {
14739 gfc_error ("Incompatible derived type in PARAMETER at %L",
14740 &sym->value->where);
14741 return false;
14742 }
14743
14744 /* F03:C509,C514. */
14745 if (sym->ts.type == BT_CLASS)
14746 {
14747 gfc_error ("CLASS variable %qs at %L cannot have the PARAMETER attribute",
14748 sym->name, &sym->declared_at);
14749 return false;
14750 }
14751
14752 return true;
14753 }
14754
14755
14756 /* Called by resolve_symbol to check PDTs. */
14757
14758 static void
14759 resolve_pdt (gfc_symbol* sym)
14760 {
14761 gfc_symbol *derived = NULL;
14762 gfc_actual_arglist *param;
14763 gfc_component *c;
14764 bool const_len_exprs = true;
14765 bool assumed_len_exprs = false;
14766 symbol_attribute *attr;
14767
14768 if (sym->ts.type == BT_DERIVED)
14769 {
14770 derived = sym->ts.u.derived;
14771 attr = &(sym->attr);
14772 }
14773 else if (sym->ts.type == BT_CLASS)
14774 {
14775 derived = CLASS_DATA (sym)->ts.u.derived;
14776 attr = &(CLASS_DATA (sym)->attr);
14777 }
14778 else
14779 gcc_unreachable ();
14780
14781 gcc_assert (derived->attr.pdt_type);
14782
14783 for (param = sym->param_list; param; param = param->next)
14784 {
14785 c = gfc_find_component (derived, param->name, false, true, NULL);
14786 gcc_assert (c);
14787 if (c->attr.pdt_kind)
14788 continue;
14789
14790 if (param->expr && !gfc_is_constant_expr (param->expr)
14791 && c->attr.pdt_len)
14792 const_len_exprs = false;
14793 else if (param->spec_type == SPEC_ASSUMED)
14794 assumed_len_exprs = true;
14795
14796 if (param->spec_type == SPEC_DEFERRED
14797 && !attr->allocatable && !attr->pointer)
14798 gfc_error ("The object %qs at %L has a deferred LEN "
14799 "parameter %qs and is neither allocatable "
14800 "nor a pointer", sym->name, &sym->declared_at,
14801 param->name);
14802
14803 }
14804
14805 if (!const_len_exprs
14806 && (sym->ns->proc_name->attr.is_main_program
14807 || sym->ns->proc_name->attr.flavor == FL_MODULE
14808 || sym->attr.save != SAVE_NONE))
14809 gfc_error ("The AUTOMATIC object %qs at %L must not have the "
14810 "SAVE attribute or be a variable declared in the "
14811 "main program, a module or a submodule(F08/C513)",
14812 sym->name, &sym->declared_at);
14813
14814 if (assumed_len_exprs && !(sym->attr.dummy
14815 || sym->attr.select_type_temporary || sym->attr.associate_var))
14816 gfc_error ("The object %qs at %L with ASSUMED type parameters "
14817 "must be a dummy or a SELECT TYPE selector(F08/4.2)",
14818 sym->name, &sym->declared_at);
14819 }
14820
14821
14822 /* Do anything necessary to resolve a symbol. Right now, we just
14823 assume that an otherwise unknown symbol is a variable. This sort
14824 of thing commonly happens for symbols in module. */
14825
14826 static void
14827 resolve_symbol (gfc_symbol *sym)
14828 {
14829 int check_constant, mp_flag;
14830 gfc_symtree *symtree;
14831 gfc_symtree *this_symtree;
14832 gfc_namespace *ns;
14833 gfc_component *c;
14834 symbol_attribute class_attr;
14835 gfc_array_spec *as;
14836 bool saved_specification_expr;
14837
14838 if (sym->resolved)
14839 return;
14840 sym->resolved = 1;
14841
14842 /* No symbol will ever have union type; only components can be unions.
14843 Union type declaration symbols have type BT_UNKNOWN but flavor FL_UNION
14844 (just like derived type declaration symbols have flavor FL_DERIVED). */
14845 gcc_assert (sym->ts.type != BT_UNION);
14846
14847 /* Coarrayed polymorphic objects with allocatable or pointer components are
14848 yet unsupported for -fcoarray=lib. */
14849 if (flag_coarray == GFC_FCOARRAY_LIB && sym->ts.type == BT_CLASS
14850 && sym->ts.u.derived && CLASS_DATA (sym)
14851 && CLASS_DATA (sym)->attr.codimension
14852 && (CLASS_DATA (sym)->ts.u.derived->attr.alloc_comp
14853 || CLASS_DATA (sym)->ts.u.derived->attr.pointer_comp))
14854 {
14855 gfc_error ("Sorry, allocatable/pointer components in polymorphic (CLASS) "
14856 "type coarrays at %L are unsupported", &sym->declared_at);
14857 return;
14858 }
14859
14860 if (sym->attr.artificial)
14861 return;
14862
14863 if (sym->attr.unlimited_polymorphic)
14864 return;
14865
14866 if (sym->attr.flavor == FL_UNKNOWN
14867 || (sym->attr.flavor == FL_PROCEDURE && !sym->attr.intrinsic
14868 && !sym->attr.generic && !sym->attr.external
14869 && sym->attr.if_source == IFSRC_UNKNOWN
14870 && sym->ts.type == BT_UNKNOWN))
14871 {
14872
14873 /* If we find that a flavorless symbol is an interface in one of the
14874 parent namespaces, find its symtree in this namespace, free the
14875 symbol and set the symtree to point to the interface symbol. */
14876 for (ns = gfc_current_ns->parent; ns; ns = ns->parent)
14877 {
14878 symtree = gfc_find_symtree (ns->sym_root, sym->name);
14879 if (symtree && (symtree->n.sym->generic ||
14880 (symtree->n.sym->attr.flavor == FL_PROCEDURE
14881 && sym->ns->construct_entities)))
14882 {
14883 this_symtree = gfc_find_symtree (gfc_current_ns->sym_root,
14884 sym->name);
14885 if (this_symtree->n.sym == sym)
14886 {
14887 symtree->n.sym->refs++;
14888 gfc_release_symbol (sym);
14889 this_symtree->n.sym = symtree->n.sym;
14890 return;
14891 }
14892 }
14893 }
14894
14895 /* Otherwise give it a flavor according to such attributes as
14896 it has. */
14897 if (sym->attr.flavor == FL_UNKNOWN && sym->attr.external == 0
14898 && sym->attr.intrinsic == 0)
14899 sym->attr.flavor = FL_VARIABLE;
14900 else if (sym->attr.flavor == FL_UNKNOWN)
14901 {
14902 sym->attr.flavor = FL_PROCEDURE;
14903 if (sym->attr.dimension)
14904 sym->attr.function = 1;
14905 }
14906 }
14907
14908 if (sym->attr.external && sym->ts.type != BT_UNKNOWN && !sym->attr.function)
14909 gfc_add_function (&sym->attr, sym->name, &sym->declared_at);
14910
14911 if (sym->attr.procedure && sym->attr.if_source != IFSRC_DECL
14912 && !resolve_procedure_interface (sym))
14913 return;
14914
14915 if (sym->attr.is_protected && !sym->attr.proc_pointer
14916 && (sym->attr.procedure || sym->attr.external))
14917 {
14918 if (sym->attr.external)
14919 gfc_error ("PROTECTED attribute conflicts with EXTERNAL attribute "
14920 "at %L", &sym->declared_at);
14921 else
14922 gfc_error ("PROCEDURE attribute conflicts with PROTECTED attribute "
14923 "at %L", &sym->declared_at);
14924
14925 return;
14926 }
14927
14928 if (sym->attr.flavor == FL_DERIVED && !resolve_fl_derived (sym))
14929 return;
14930
14931 else if ((sym->attr.flavor == FL_STRUCT || sym->attr.flavor == FL_UNION)
14932 && !resolve_fl_struct (sym))
14933 return;
14934
14935 /* Symbols that are module procedures with results (functions) have
14936 the types and array specification copied for type checking in
14937 procedures that call them, as well as for saving to a module
14938 file. These symbols can't stand the scrutiny that their results
14939 can. */
14940 mp_flag = (sym->result != NULL && sym->result != sym);
14941
14942 /* Make sure that the intrinsic is consistent with its internal
14943 representation. This needs to be done before assigning a default
14944 type to avoid spurious warnings. */
14945 if (sym->attr.flavor != FL_MODULE && sym->attr.intrinsic
14946 && !gfc_resolve_intrinsic (sym, &sym->declared_at))
14947 return;
14948
14949 /* Resolve associate names. */
14950 if (sym->assoc)
14951 resolve_assoc_var (sym, true);
14952
14953 /* Assign default type to symbols that need one and don't have one. */
14954 if (sym->ts.type == BT_UNKNOWN)
14955 {
14956 if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER)
14957 {
14958 gfc_set_default_type (sym, 1, NULL);
14959 }
14960
14961 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.external
14962 && !sym->attr.function && !sym->attr.subroutine
14963 && gfc_get_default_type (sym->name, sym->ns)->type == BT_UNKNOWN)
14964 gfc_add_subroutine (&sym->attr, sym->name, &sym->declared_at);
14965
14966 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.function)
14967 {
14968 /* The specific case of an external procedure should emit an error
14969 in the case that there is no implicit type. */
14970 if (!mp_flag)
14971 {
14972 if (!sym->attr.mixed_entry_master)
14973 gfc_set_default_type (sym, sym->attr.external, NULL);
14974 }
14975 else
14976 {
14977 /* Result may be in another namespace. */
14978 resolve_symbol (sym->result);
14979
14980 if (!sym->result->attr.proc_pointer)
14981 {
14982 sym->ts = sym->result->ts;
14983 sym->as = gfc_copy_array_spec (sym->result->as);
14984 sym->attr.dimension = sym->result->attr.dimension;
14985 sym->attr.pointer = sym->result->attr.pointer;
14986 sym->attr.allocatable = sym->result->attr.allocatable;
14987 sym->attr.contiguous = sym->result->attr.contiguous;
14988 }
14989 }
14990 }
14991 }
14992 else if (mp_flag && sym->attr.flavor == FL_PROCEDURE && sym->attr.function)
14993 {
14994 bool saved_specification_expr = specification_expr;
14995 specification_expr = true;
14996 gfc_resolve_array_spec (sym->result->as, false);
14997 specification_expr = saved_specification_expr;
14998 }
14999
15000 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
15001 {
15002 as = CLASS_DATA (sym)->as;
15003 class_attr = CLASS_DATA (sym)->attr;
15004 class_attr.pointer = class_attr.class_pointer;
15005 }
15006 else
15007 {
15008 class_attr = sym->attr;
15009 as = sym->as;
15010 }
15011
15012 /* F2008, C530. */
15013 if (sym->attr.contiguous
15014 && (!class_attr.dimension
15015 || (as->type != AS_ASSUMED_SHAPE && as->type != AS_ASSUMED_RANK
15016 && !class_attr.pointer)))
15017 {
15018 gfc_error ("%qs at %L has the CONTIGUOUS attribute but is not an "
15019 "array pointer or an assumed-shape or assumed-rank array",
15020 sym->name, &sym->declared_at);
15021 return;
15022 }
15023
15024 /* Assumed size arrays and assumed shape arrays must be dummy
15025 arguments. Array-spec's of implied-shape should have been resolved to
15026 AS_EXPLICIT already. */
15027
15028 if (as)
15029 {
15030 /* If AS_IMPLIED_SHAPE makes it to here, it must be a bad
15031 specification expression. */
15032 if (as->type == AS_IMPLIED_SHAPE)
15033 {
15034 int i;
15035 for (i=0; i<as->rank; i++)
15036 {
15037 if (as->lower[i] != NULL && as->upper[i] == NULL)
15038 {
15039 gfc_error ("Bad specification for assumed size array at %L",
15040 &as->lower[i]->where);
15041 return;
15042 }
15043 }
15044 gcc_unreachable();
15045 }
15046
15047 if (((as->type == AS_ASSUMED_SIZE && !as->cp_was_assumed)
15048 || as->type == AS_ASSUMED_SHAPE)
15049 && !sym->attr.dummy && !sym->attr.select_type_temporary)
15050 {
15051 if (as->type == AS_ASSUMED_SIZE)
15052 gfc_error ("Assumed size array at %L must be a dummy argument",
15053 &sym->declared_at);
15054 else
15055 gfc_error ("Assumed shape array at %L must be a dummy argument",
15056 &sym->declared_at);
15057 return;
15058 }
15059 /* TS 29113, C535a. */
15060 if (as->type == AS_ASSUMED_RANK && !sym->attr.dummy
15061 && !sym->attr.select_type_temporary)
15062 {
15063 gfc_error ("Assumed-rank array at %L must be a dummy argument",
15064 &sym->declared_at);
15065 return;
15066 }
15067 if (as->type == AS_ASSUMED_RANK
15068 && (sym->attr.codimension || sym->attr.value))
15069 {
15070 gfc_error ("Assumed-rank array at %L may not have the VALUE or "
15071 "CODIMENSION attribute", &sym->declared_at);
15072 return;
15073 }
15074 }
15075
15076 /* Make sure symbols with known intent or optional are really dummy
15077 variable. Because of ENTRY statement, this has to be deferred
15078 until resolution time. */
15079
15080 if (!sym->attr.dummy
15081 && (sym->attr.optional || sym->attr.intent != INTENT_UNKNOWN))
15082 {
15083 gfc_error ("Symbol at %L is not a DUMMY variable", &sym->declared_at);
15084 return;
15085 }
15086
15087 if (sym->attr.value && !sym->attr.dummy)
15088 {
15089 gfc_error ("%qs at %L cannot have the VALUE attribute because "
15090 "it is not a dummy argument", sym->name, &sym->declared_at);
15091 return;
15092 }
15093
15094 if (sym->attr.value && sym->ts.type == BT_CHARACTER)
15095 {
15096 gfc_charlen *cl = sym->ts.u.cl;
15097 if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
15098 {
15099 gfc_error ("Character dummy variable %qs at %L with VALUE "
15100 "attribute must have constant length",
15101 sym->name, &sym->declared_at);
15102 return;
15103 }
15104
15105 if (sym->ts.is_c_interop
15106 && mpz_cmp_si (cl->length->value.integer, 1) != 0)
15107 {
15108 gfc_error ("C interoperable character dummy variable %qs at %L "
15109 "with VALUE attribute must have length one",
15110 sym->name, &sym->declared_at);
15111 return;
15112 }
15113 }
15114
15115 if (sym->ts.type == BT_DERIVED && !sym->attr.is_iso_c
15116 && sym->ts.u.derived->attr.generic)
15117 {
15118 sym->ts.u.derived = gfc_find_dt_in_generic (sym->ts.u.derived);
15119 if (!sym->ts.u.derived)
15120 {
15121 gfc_error ("The derived type %qs at %L is of type %qs, "
15122 "which has not been defined", sym->name,
15123 &sym->declared_at, sym->ts.u.derived->name);
15124 sym->ts.type = BT_UNKNOWN;
15125 return;
15126 }
15127 }
15128
15129 /* Use the same constraints as TYPE(*), except for the type check
15130 and that only scalars and assumed-size arrays are permitted. */
15131 if (sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
15132 {
15133 if (!sym->attr.dummy)
15134 {
15135 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall be "
15136 "a dummy argument", sym->name, &sym->declared_at);
15137 return;
15138 }
15139
15140 if (sym->ts.type != BT_ASSUMED && sym->ts.type != BT_INTEGER
15141 && sym->ts.type != BT_REAL && sym->ts.type != BT_LOGICAL
15142 && sym->ts.type != BT_COMPLEX)
15143 {
15144 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall be "
15145 "of type TYPE(*) or of an numeric intrinsic type",
15146 sym->name, &sym->declared_at);
15147 return;
15148 }
15149
15150 if (sym->attr.allocatable || sym->attr.codimension
15151 || sym->attr.pointer || sym->attr.value)
15152 {
15153 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may not "
15154 "have the ALLOCATABLE, CODIMENSION, POINTER or VALUE "
15155 "attribute", sym->name, &sym->declared_at);
15156 return;
15157 }
15158
15159 if (sym->attr.intent == INTENT_OUT)
15160 {
15161 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may not "
15162 "have the INTENT(OUT) attribute",
15163 sym->name, &sym->declared_at);
15164 return;
15165 }
15166 if (sym->attr.dimension && sym->as->type != AS_ASSUMED_SIZE)
15167 {
15168 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall "
15169 "either be a scalar or an assumed-size array",
15170 sym->name, &sym->declared_at);
15171 return;
15172 }
15173
15174 /* Set the type to TYPE(*) and add a dimension(*) to ensure
15175 NO_ARG_CHECK is correctly handled in trans*.c, e.g. with
15176 packing. */
15177 sym->ts.type = BT_ASSUMED;
15178 sym->as = gfc_get_array_spec ();
15179 sym->as->type = AS_ASSUMED_SIZE;
15180 sym->as->rank = 1;
15181 sym->as->lower[0] = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
15182 }
15183 else if (sym->ts.type == BT_ASSUMED)
15184 {
15185 /* TS 29113, C407a. */
15186 if (!sym->attr.dummy)
15187 {
15188 gfc_error ("Assumed type of variable %s at %L is only permitted "
15189 "for dummy variables", sym->name, &sym->declared_at);
15190 return;
15191 }
15192 if (sym->attr.allocatable || sym->attr.codimension
15193 || sym->attr.pointer || sym->attr.value)
15194 {
15195 gfc_error ("Assumed-type variable %s at %L may not have the "
15196 "ALLOCATABLE, CODIMENSION, POINTER or VALUE attribute",
15197 sym->name, &sym->declared_at);
15198 return;
15199 }
15200 if (sym->attr.intent == INTENT_OUT)
15201 {
15202 gfc_error ("Assumed-type variable %s at %L may not have the "
15203 "INTENT(OUT) attribute",
15204 sym->name, &sym->declared_at);
15205 return;
15206 }
15207 if (sym->attr.dimension && sym->as->type == AS_EXPLICIT)
15208 {
15209 gfc_error ("Assumed-type variable %s at %L shall not be an "
15210 "explicit-shape array", sym->name, &sym->declared_at);
15211 return;
15212 }
15213 }
15214
15215 /* If the symbol is marked as bind(c), that it is declared at module level
15216 scope and verify its type and kind. Do not do the latter for symbols
15217 that are implicitly typed because that is handled in
15218 gfc_set_default_type. Handle dummy arguments and procedure definitions
15219 separately. Also, anything that is use associated is not handled here
15220 but instead is handled in the module it is declared in. Finally, derived
15221 type definitions are allowed to be BIND(C) since that only implies that
15222 they're interoperable, and they are checked fully for interoperability
15223 when a variable is declared of that type. */
15224 if (sym->attr.is_bind_c && sym->attr.use_assoc == 0
15225 && sym->attr.dummy == 0 && sym->attr.flavor != FL_PROCEDURE
15226 && sym->attr.flavor != FL_DERIVED)
15227 {
15228 bool t = true;
15229
15230 /* First, make sure the variable is declared at the
15231 module-level scope (J3/04-007, Section 15.3). */
15232 if (sym->ns->proc_name->attr.flavor != FL_MODULE &&
15233 sym->attr.in_common == 0)
15234 {
15235 gfc_error ("Variable %qs at %L cannot be BIND(C) because it "
15236 "is neither a COMMON block nor declared at the "
15237 "module level scope", sym->name, &(sym->declared_at));
15238 t = false;
15239 }
15240 else if (sym->ts.type == BT_CHARACTER
15241 && (sym->ts.u.cl == NULL || sym->ts.u.cl->length == NULL
15242 || !gfc_is_constant_expr (sym->ts.u.cl->length)
15243 || mpz_cmp_si (sym->ts.u.cl->length->value.integer, 1) != 0))
15244 {
15245 gfc_error ("BIND(C) Variable %qs at %L must have length one",
15246 sym->name, &sym->declared_at);
15247 t = false;
15248 }
15249 else if (sym->common_head != NULL && sym->attr.implicit_type == 0)
15250 {
15251 t = verify_com_block_vars_c_interop (sym->common_head);
15252 }
15253 else if (sym->attr.implicit_type == 0)
15254 {
15255 /* If type() declaration, we need to verify that the components
15256 of the given type are all C interoperable, etc. */
15257 if (sym->ts.type == BT_DERIVED &&
15258 sym->ts.u.derived->attr.is_c_interop != 1)
15259 {
15260 /* Make sure the user marked the derived type as BIND(C). If
15261 not, call the verify routine. This could print an error
15262 for the derived type more than once if multiple variables
15263 of that type are declared. */
15264 if (sym->ts.u.derived->attr.is_bind_c != 1)
15265 verify_bind_c_derived_type (sym->ts.u.derived);
15266 t = false;
15267 }
15268
15269 /* Verify the variable itself as C interoperable if it
15270 is BIND(C). It is not possible for this to succeed if
15271 the verify_bind_c_derived_type failed, so don't have to handle
15272 any error returned by verify_bind_c_derived_type. */
15273 t = verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common,
15274 sym->common_block);
15275 }
15276
15277 if (!t)
15278 {
15279 /* clear the is_bind_c flag to prevent reporting errors more than
15280 once if something failed. */
15281 sym->attr.is_bind_c = 0;
15282 return;
15283 }
15284 }
15285
15286 /* If a derived type symbol has reached this point, without its
15287 type being declared, we have an error. Notice that most
15288 conditions that produce undefined derived types have already
15289 been dealt with. However, the likes of:
15290 implicit type(t) (t) ..... call foo (t) will get us here if
15291 the type is not declared in the scope of the implicit
15292 statement. Change the type to BT_UNKNOWN, both because it is so
15293 and to prevent an ICE. */
15294 if (sym->ts.type == BT_DERIVED && !sym->attr.is_iso_c
15295 && sym->ts.u.derived->components == NULL
15296 && !sym->ts.u.derived->attr.zero_comp)
15297 {
15298 gfc_error ("The derived type %qs at %L is of type %qs, "
15299 "which has not been defined", sym->name,
15300 &sym->declared_at, sym->ts.u.derived->name);
15301 sym->ts.type = BT_UNKNOWN;
15302 return;
15303 }
15304
15305 /* Make sure that the derived type has been resolved and that the
15306 derived type is visible in the symbol's namespace, if it is a
15307 module function and is not PRIVATE. */
15308 if (sym->ts.type == BT_DERIVED
15309 && sym->ts.u.derived->attr.use_assoc
15310 && sym->ns->proc_name
15311 && sym->ns->proc_name->attr.flavor == FL_MODULE
15312 && !resolve_fl_derived (sym->ts.u.derived))
15313 return;
15314
15315 /* Unless the derived-type declaration is use associated, Fortran 95
15316 does not allow public entries of private derived types.
15317 See 4.4.1 (F95) and 4.5.1.1 (F2003); and related interpretation
15318 161 in 95-006r3. */
15319 if (sym->ts.type == BT_DERIVED
15320 && sym->ns->proc_name && sym->ns->proc_name->attr.flavor == FL_MODULE
15321 && !sym->ts.u.derived->attr.use_assoc
15322 && gfc_check_symbol_access (sym)
15323 && !gfc_check_symbol_access (sym->ts.u.derived)
15324 && !gfc_notify_std (GFC_STD_F2003, "PUBLIC %s %qs at %L of PRIVATE "
15325 "derived type %qs",
15326 (sym->attr.flavor == FL_PARAMETER)
15327 ? "parameter" : "variable",
15328 sym->name, &sym->declared_at,
15329 sym->ts.u.derived->name))
15330 return;
15331
15332 /* F2008, C1302. */
15333 if (sym->ts.type == BT_DERIVED
15334 && ((sym->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
15335 && sym->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)
15336 || sym->ts.u.derived->attr.lock_comp)
15337 && !sym->attr.codimension && !sym->ts.u.derived->attr.coarray_comp)
15338 {
15339 gfc_error ("Variable %s at %L of type LOCK_TYPE or with subcomponent of "
15340 "type LOCK_TYPE must be a coarray", sym->name,
15341 &sym->declared_at);
15342 return;
15343 }
15344
15345 /* TS18508, C702/C703. */
15346 if (sym->ts.type == BT_DERIVED
15347 && ((sym->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
15348 && sym->ts.u.derived->intmod_sym_id == ISOFORTRAN_EVENT_TYPE)
15349 || sym->ts.u.derived->attr.event_comp)
15350 && !sym->attr.codimension && !sym->ts.u.derived->attr.coarray_comp)
15351 {
15352 gfc_error ("Variable %s at %L of type EVENT_TYPE or with subcomponent of "
15353 "type EVENT_TYPE must be a coarray", sym->name,
15354 &sym->declared_at);
15355 return;
15356 }
15357
15358 /* An assumed-size array with INTENT(OUT) shall not be of a type for which
15359 default initialization is defined (5.1.2.4.4). */
15360 if (sym->ts.type == BT_DERIVED
15361 && sym->attr.dummy
15362 && sym->attr.intent == INTENT_OUT
15363 && sym->as
15364 && sym->as->type == AS_ASSUMED_SIZE)
15365 {
15366 for (c = sym->ts.u.derived->components; c; c = c->next)
15367 {
15368 if (c->initializer)
15369 {
15370 gfc_error ("The INTENT(OUT) dummy argument %qs at %L is "
15371 "ASSUMED SIZE and so cannot have a default initializer",
15372 sym->name, &sym->declared_at);
15373 return;
15374 }
15375 }
15376 }
15377
15378 /* F2008, C542. */
15379 if (sym->ts.type == BT_DERIVED && sym->attr.dummy
15380 && sym->attr.intent == INTENT_OUT && sym->attr.lock_comp)
15381 {
15382 gfc_error ("Dummy argument %qs at %L of LOCK_TYPE shall not be "
15383 "INTENT(OUT)", sym->name, &sym->declared_at);
15384 return;
15385 }
15386
15387 /* TS18508. */
15388 if (sym->ts.type == BT_DERIVED && sym->attr.dummy
15389 && sym->attr.intent == INTENT_OUT && sym->attr.event_comp)
15390 {
15391 gfc_error ("Dummy argument %qs at %L of EVENT_TYPE shall not be "
15392 "INTENT(OUT)", sym->name, &sym->declared_at);
15393 return;
15394 }
15395
15396 /* F2008, C525. */
15397 if ((((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
15398 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
15399 && CLASS_DATA (sym)->attr.coarray_comp))
15400 || class_attr.codimension)
15401 && (sym->attr.result || sym->result == sym))
15402 {
15403 gfc_error ("Function result %qs at %L shall not be a coarray or have "
15404 "a coarray component", sym->name, &sym->declared_at);
15405 return;
15406 }
15407
15408 /* F2008, C524. */
15409 if (sym->attr.codimension && sym->ts.type == BT_DERIVED
15410 && sym->ts.u.derived->ts.is_iso_c)
15411 {
15412 gfc_error ("Variable %qs at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) "
15413 "shall not be a coarray", sym->name, &sym->declared_at);
15414 return;
15415 }
15416
15417 /* F2008, C525. */
15418 if (((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
15419 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
15420 && CLASS_DATA (sym)->attr.coarray_comp))
15421 && (class_attr.codimension || class_attr.pointer || class_attr.dimension
15422 || class_attr.allocatable))
15423 {
15424 gfc_error ("Variable %qs at %L with coarray component shall be a "
15425 "nonpointer, nonallocatable scalar, which is not a coarray",
15426 sym->name, &sym->declared_at);
15427 return;
15428 }
15429
15430 /* F2008, C526. The function-result case was handled above. */
15431 if (class_attr.codimension
15432 && !(class_attr.allocatable || sym->attr.dummy || sym->attr.save
15433 || sym->attr.select_type_temporary
15434 || sym->attr.associate_var
15435 || (sym->ns->save_all && !sym->attr.automatic)
15436 || sym->ns->proc_name->attr.flavor == FL_MODULE
15437 || sym->ns->proc_name->attr.is_main_program
15438 || sym->attr.function || sym->attr.result || sym->attr.use_assoc))
15439 {
15440 gfc_error ("Variable %qs at %L is a coarray and is not ALLOCATABLE, SAVE "
15441 "nor a dummy argument", sym->name, &sym->declared_at);
15442 return;
15443 }
15444 /* F2008, C528. */
15445 else if (class_attr.codimension && !sym->attr.select_type_temporary
15446 && !class_attr.allocatable && as && as->cotype == AS_DEFERRED)
15447 {
15448 gfc_error ("Coarray variable %qs at %L shall not have codimensions with "
15449 "deferred shape", sym->name, &sym->declared_at);
15450 return;
15451 }
15452 else if (class_attr.codimension && class_attr.allocatable && as
15453 && (as->cotype != AS_DEFERRED || as->type != AS_DEFERRED))
15454 {
15455 gfc_error ("Allocatable coarray variable %qs at %L must have "
15456 "deferred shape", sym->name, &sym->declared_at);
15457 return;
15458 }
15459
15460 /* F2008, C541. */
15461 if ((((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
15462 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
15463 && CLASS_DATA (sym)->attr.coarray_comp))
15464 || (class_attr.codimension && class_attr.allocatable))
15465 && sym->attr.dummy && sym->attr.intent == INTENT_OUT)
15466 {
15467 gfc_error ("Variable %qs at %L is INTENT(OUT) and can thus not be an "
15468 "allocatable coarray or have coarray components",
15469 sym->name, &sym->declared_at);
15470 return;
15471 }
15472
15473 if (class_attr.codimension && sym->attr.dummy
15474 && sym->ns->proc_name && sym->ns->proc_name->attr.is_bind_c)
15475 {
15476 gfc_error ("Coarray dummy variable %qs at %L not allowed in BIND(C) "
15477 "procedure %qs", sym->name, &sym->declared_at,
15478 sym->ns->proc_name->name);
15479 return;
15480 }
15481
15482 if (sym->ts.type == BT_LOGICAL
15483 && ((sym->attr.function && sym->attr.is_bind_c && sym->result == sym)
15484 || ((sym->attr.dummy || sym->attr.result) && sym->ns->proc_name
15485 && sym->ns->proc_name->attr.is_bind_c)))
15486 {
15487 int i;
15488 for (i = 0; gfc_logical_kinds[i].kind; i++)
15489 if (gfc_logical_kinds[i].kind == sym->ts.kind)
15490 break;
15491 if (!gfc_logical_kinds[i].c_bool && sym->attr.dummy
15492 && !gfc_notify_std (GFC_STD_GNU, "LOGICAL dummy argument %qs at "
15493 "%L with non-C_Bool kind in BIND(C) procedure "
15494 "%qs", sym->name, &sym->declared_at,
15495 sym->ns->proc_name->name))
15496 return;
15497 else if (!gfc_logical_kinds[i].c_bool
15498 && !gfc_notify_std (GFC_STD_GNU, "LOGICAL result variable "
15499 "%qs at %L with non-C_Bool kind in "
15500 "BIND(C) procedure %qs", sym->name,
15501 &sym->declared_at,
15502 sym->attr.function ? sym->name
15503 : sym->ns->proc_name->name))
15504 return;
15505 }
15506
15507 switch (sym->attr.flavor)
15508 {
15509 case FL_VARIABLE:
15510 if (!resolve_fl_variable (sym, mp_flag))
15511 return;
15512 break;
15513
15514 case FL_PROCEDURE:
15515 if (sym->formal && !sym->formal_ns)
15516 {
15517 /* Check that none of the arguments are a namelist. */
15518 gfc_formal_arglist *formal = sym->formal;
15519
15520 for (; formal; formal = formal->next)
15521 if (formal->sym && formal->sym->attr.flavor == FL_NAMELIST)
15522 {
15523 gfc_error ("Namelist %qs cannot be an argument to "
15524 "subroutine or function at %L",
15525 formal->sym->name, &sym->declared_at);
15526 return;
15527 }
15528 }
15529
15530 if (!resolve_fl_procedure (sym, mp_flag))
15531 return;
15532 break;
15533
15534 case FL_NAMELIST:
15535 if (!resolve_fl_namelist (sym))
15536 return;
15537 break;
15538
15539 case FL_PARAMETER:
15540 if (!resolve_fl_parameter (sym))
15541 return;
15542 break;
15543
15544 default:
15545 break;
15546 }
15547
15548 /* Resolve array specifier. Check as well some constraints
15549 on COMMON blocks. */
15550
15551 check_constant = sym->attr.in_common && !sym->attr.pointer;
15552
15553 /* Set the formal_arg_flag so that check_conflict will not throw
15554 an error for host associated variables in the specification
15555 expression for an array_valued function. */
15556 if ((sym->attr.function || sym->attr.result) && sym->as)
15557 formal_arg_flag = true;
15558
15559 saved_specification_expr = specification_expr;
15560 specification_expr = true;
15561 gfc_resolve_array_spec (sym->as, check_constant);
15562 specification_expr = saved_specification_expr;
15563
15564 formal_arg_flag = false;
15565
15566 /* Resolve formal namespaces. */
15567 if (sym->formal_ns && sym->formal_ns != gfc_current_ns
15568 && !sym->attr.contained && !sym->attr.intrinsic)
15569 gfc_resolve (sym->formal_ns);
15570
15571 /* Make sure the formal namespace is present. */
15572 if (sym->formal && !sym->formal_ns)
15573 {
15574 gfc_formal_arglist *formal = sym->formal;
15575 while (formal && !formal->sym)
15576 formal = formal->next;
15577
15578 if (formal)
15579 {
15580 sym->formal_ns = formal->sym->ns;
15581 if (sym->ns != formal->sym->ns)
15582 sym->formal_ns->refs++;
15583 }
15584 }
15585
15586 /* Check threadprivate restrictions. */
15587 if (sym->attr.threadprivate && !sym->attr.save
15588 && !(sym->ns->save_all && !sym->attr.automatic)
15589 && (!sym->attr.in_common
15590 && sym->module == NULL
15591 && (sym->ns->proc_name == NULL
15592 || sym->ns->proc_name->attr.flavor != FL_MODULE)))
15593 gfc_error ("Threadprivate at %L isn't SAVEd", &sym->declared_at);
15594
15595 /* Check omp declare target restrictions. */
15596 if (sym->attr.omp_declare_target
15597 && sym->attr.flavor == FL_VARIABLE
15598 && !sym->attr.save
15599 && !(sym->ns->save_all && !sym->attr.automatic)
15600 && (!sym->attr.in_common
15601 && sym->module == NULL
15602 && (sym->ns->proc_name == NULL
15603 || sym->ns->proc_name->attr.flavor != FL_MODULE)))
15604 gfc_error ("!$OMP DECLARE TARGET variable %qs at %L isn't SAVEd",
15605 sym->name, &sym->declared_at);
15606
15607 /* If we have come this far we can apply default-initializers, as
15608 described in 14.7.5, to those variables that have not already
15609 been assigned one. */
15610 if (sym->ts.type == BT_DERIVED
15611 && !sym->value
15612 && !sym->attr.allocatable
15613 && !sym->attr.alloc_comp)
15614 {
15615 symbol_attribute *a = &sym->attr;
15616
15617 if ((!a->save && !a->dummy && !a->pointer
15618 && !a->in_common && !a->use_assoc
15619 && a->referenced
15620 && !((a->function || a->result)
15621 && (!a->dimension
15622 || sym->ts.u.derived->attr.alloc_comp
15623 || sym->ts.u.derived->attr.pointer_comp))
15624 && !(a->function && sym != sym->result))
15625 || (a->dummy && a->intent == INTENT_OUT && !a->pointer))
15626 apply_default_init (sym);
15627 else if (a->function && sym->result && a->access != ACCESS_PRIVATE
15628 && (sym->ts.u.derived->attr.alloc_comp
15629 || sym->ts.u.derived->attr.pointer_comp))
15630 /* Mark the result symbol to be referenced, when it has allocatable
15631 components. */
15632 sym->result->attr.referenced = 1;
15633 }
15634
15635 if (sym->ts.type == BT_CLASS && sym->ns == gfc_current_ns
15636 && sym->attr.dummy && sym->attr.intent == INTENT_OUT
15637 && !CLASS_DATA (sym)->attr.class_pointer
15638 && !CLASS_DATA (sym)->attr.allocatable)
15639 apply_default_init (sym);
15640
15641 /* If this symbol has a type-spec, check it. */
15642 if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER
15643 || (sym->attr.flavor == FL_PROCEDURE && sym->attr.function))
15644 if (!resolve_typespec_used (&sym->ts, &sym->declared_at, sym->name))
15645 return;
15646
15647 if (sym->param_list)
15648 resolve_pdt (sym);
15649 }
15650
15651
15652 /************* Resolve DATA statements *************/
15653
15654 static struct
15655 {
15656 gfc_data_value *vnode;
15657 mpz_t left;
15658 }
15659 values;
15660
15661
15662 /* Advance the values structure to point to the next value in the data list. */
15663
15664 static bool
15665 next_data_value (void)
15666 {
15667 while (mpz_cmp_ui (values.left, 0) == 0)
15668 {
15669
15670 if (values.vnode->next == NULL)
15671 return false;
15672
15673 values.vnode = values.vnode->next;
15674 mpz_set (values.left, values.vnode->repeat);
15675 }
15676
15677 return true;
15678 }
15679
15680
15681 static bool
15682 check_data_variable (gfc_data_variable *var, locus *where)
15683 {
15684 gfc_expr *e;
15685 mpz_t size;
15686 mpz_t offset;
15687 bool t;
15688 ar_type mark = AR_UNKNOWN;
15689 int i;
15690 mpz_t section_index[GFC_MAX_DIMENSIONS];
15691 gfc_ref *ref;
15692 gfc_array_ref *ar;
15693 gfc_symbol *sym;
15694 int has_pointer;
15695
15696 if (!gfc_resolve_expr (var->expr))
15697 return false;
15698
15699 ar = NULL;
15700 mpz_init_set_si (offset, 0);
15701 e = var->expr;
15702
15703 if (e->expr_type == EXPR_FUNCTION && e->value.function.isym
15704 && e->value.function.isym->id == GFC_ISYM_CAF_GET)
15705 e = e->value.function.actual->expr;
15706
15707 if (e->expr_type != EXPR_VARIABLE)
15708 {
15709 gfc_error ("Expecting definable entity near %L", where);
15710 return false;
15711 }
15712
15713 sym = e->symtree->n.sym;
15714
15715 if (sym->ns->is_block_data && !sym->attr.in_common)
15716 {
15717 gfc_error ("BLOCK DATA element %qs at %L must be in COMMON",
15718 sym->name, &sym->declared_at);
15719 return false;
15720 }
15721
15722 if (e->ref == NULL && sym->as)
15723 {
15724 gfc_error ("DATA array %qs at %L must be specified in a previous"
15725 " declaration", sym->name, where);
15726 return false;
15727 }
15728
15729 has_pointer = sym->attr.pointer;
15730
15731 if (gfc_is_coindexed (e))
15732 {
15733 gfc_error ("DATA element %qs at %L cannot have a coindex", sym->name,
15734 where);
15735 return false;
15736 }
15737
15738 for (ref = e->ref; ref; ref = ref->next)
15739 {
15740 if (ref->type == REF_COMPONENT && ref->u.c.component->attr.pointer)
15741 has_pointer = 1;
15742
15743 if (has_pointer
15744 && ref->type == REF_ARRAY
15745 && ref->u.ar.type != AR_FULL)
15746 {
15747 gfc_error ("DATA element %qs at %L is a pointer and so must "
15748 "be a full array", sym->name, where);
15749 return false;
15750 }
15751 }
15752
15753 if (e->rank == 0 || has_pointer)
15754 {
15755 mpz_init_set_ui (size, 1);
15756 ref = NULL;
15757 }
15758 else
15759 {
15760 ref = e->ref;
15761
15762 /* Find the array section reference. */
15763 for (ref = e->ref; ref; ref = ref->next)
15764 {
15765 if (ref->type != REF_ARRAY)
15766 continue;
15767 if (ref->u.ar.type == AR_ELEMENT)
15768 continue;
15769 break;
15770 }
15771 gcc_assert (ref);
15772
15773 /* Set marks according to the reference pattern. */
15774 switch (ref->u.ar.type)
15775 {
15776 case AR_FULL:
15777 mark = AR_FULL;
15778 break;
15779
15780 case AR_SECTION:
15781 ar = &ref->u.ar;
15782 /* Get the start position of array section. */
15783 gfc_get_section_index (ar, section_index, &offset);
15784 mark = AR_SECTION;
15785 break;
15786
15787 default:
15788 gcc_unreachable ();
15789 }
15790
15791 if (!gfc_array_size (e, &size))
15792 {
15793 gfc_error ("Nonconstant array section at %L in DATA statement",
15794 where);
15795 mpz_clear (offset);
15796 return false;
15797 }
15798 }
15799
15800 t = true;
15801
15802 while (mpz_cmp_ui (size, 0) > 0)
15803 {
15804 if (!next_data_value ())
15805 {
15806 gfc_error ("DATA statement at %L has more variables than values",
15807 where);
15808 t = false;
15809 break;
15810 }
15811
15812 t = gfc_check_assign (var->expr, values.vnode->expr, 0);
15813 if (!t)
15814 break;
15815
15816 /* If we have more than one element left in the repeat count,
15817 and we have more than one element left in the target variable,
15818 then create a range assignment. */
15819 /* FIXME: Only done for full arrays for now, since array sections
15820 seem tricky. */
15821 if (mark == AR_FULL && ref && ref->next == NULL
15822 && mpz_cmp_ui (values.left, 1) > 0 && mpz_cmp_ui (size, 1) > 0)
15823 {
15824 mpz_t range;
15825
15826 if (mpz_cmp (size, values.left) >= 0)
15827 {
15828 mpz_init_set (range, values.left);
15829 mpz_sub (size, size, values.left);
15830 mpz_set_ui (values.left, 0);
15831 }
15832 else
15833 {
15834 mpz_init_set (range, size);
15835 mpz_sub (values.left, values.left, size);
15836 mpz_set_ui (size, 0);
15837 }
15838
15839 t = gfc_assign_data_value (var->expr, values.vnode->expr,
15840 offset, &range);
15841
15842 mpz_add (offset, offset, range);
15843 mpz_clear (range);
15844
15845 if (!t)
15846 break;
15847 }
15848
15849 /* Assign initial value to symbol. */
15850 else
15851 {
15852 mpz_sub_ui (values.left, values.left, 1);
15853 mpz_sub_ui (size, size, 1);
15854
15855 t = gfc_assign_data_value (var->expr, values.vnode->expr,
15856 offset, NULL);
15857 if (!t)
15858 break;
15859
15860 if (mark == AR_FULL)
15861 mpz_add_ui (offset, offset, 1);
15862
15863 /* Modify the array section indexes and recalculate the offset
15864 for next element. */
15865 else if (mark == AR_SECTION)
15866 gfc_advance_section (section_index, ar, &offset);
15867 }
15868 }
15869
15870 if (mark == AR_SECTION)
15871 {
15872 for (i = 0; i < ar->dimen; i++)
15873 mpz_clear (section_index[i]);
15874 }
15875
15876 mpz_clear (size);
15877 mpz_clear (offset);
15878
15879 return t;
15880 }
15881
15882
15883 static bool traverse_data_var (gfc_data_variable *, locus *);
15884
15885 /* Iterate over a list of elements in a DATA statement. */
15886
15887 static bool
15888 traverse_data_list (gfc_data_variable *var, locus *where)
15889 {
15890 mpz_t trip;
15891 iterator_stack frame;
15892 gfc_expr *e, *start, *end, *step;
15893 bool retval = true;
15894
15895 mpz_init (frame.value);
15896 mpz_init (trip);
15897
15898 start = gfc_copy_expr (var->iter.start);
15899 end = gfc_copy_expr (var->iter.end);
15900 step = gfc_copy_expr (var->iter.step);
15901
15902 if (!gfc_simplify_expr (start, 1)
15903 || start->expr_type != EXPR_CONSTANT)
15904 {
15905 gfc_error ("start of implied-do loop at %L could not be "
15906 "simplified to a constant value", &start->where);
15907 retval = false;
15908 goto cleanup;
15909 }
15910 if (!gfc_simplify_expr (end, 1)
15911 || end->expr_type != EXPR_CONSTANT)
15912 {
15913 gfc_error ("end of implied-do loop at %L could not be "
15914 "simplified to a constant value", &start->where);
15915 retval = false;
15916 goto cleanup;
15917 }
15918 if (!gfc_simplify_expr (step, 1)
15919 || step->expr_type != EXPR_CONSTANT)
15920 {
15921 gfc_error ("step of implied-do loop at %L could not be "
15922 "simplified to a constant value", &start->where);
15923 retval = false;
15924 goto cleanup;
15925 }
15926
15927 mpz_set (trip, end->value.integer);
15928 mpz_sub (trip, trip, start->value.integer);
15929 mpz_add (trip, trip, step->value.integer);
15930
15931 mpz_div (trip, trip, step->value.integer);
15932
15933 mpz_set (frame.value, start->value.integer);
15934
15935 frame.prev = iter_stack;
15936 frame.variable = var->iter.var->symtree;
15937 iter_stack = &frame;
15938
15939 while (mpz_cmp_ui (trip, 0) > 0)
15940 {
15941 if (!traverse_data_var (var->list, where))
15942 {
15943 retval = false;
15944 goto cleanup;
15945 }
15946
15947 e = gfc_copy_expr (var->expr);
15948 if (!gfc_simplify_expr (e, 1))
15949 {
15950 gfc_free_expr (e);
15951 retval = false;
15952 goto cleanup;
15953 }
15954
15955 mpz_add (frame.value, frame.value, step->value.integer);
15956
15957 mpz_sub_ui (trip, trip, 1);
15958 }
15959
15960 cleanup:
15961 mpz_clear (frame.value);
15962 mpz_clear (trip);
15963
15964 gfc_free_expr (start);
15965 gfc_free_expr (end);
15966 gfc_free_expr (step);
15967
15968 iter_stack = frame.prev;
15969 return retval;
15970 }
15971
15972
15973 /* Type resolve variables in the variable list of a DATA statement. */
15974
15975 static bool
15976 traverse_data_var (gfc_data_variable *var, locus *where)
15977 {
15978 bool t;
15979
15980 for (; var; var = var->next)
15981 {
15982 if (var->expr == NULL)
15983 t = traverse_data_list (var, where);
15984 else
15985 t = check_data_variable (var, where);
15986
15987 if (!t)
15988 return false;
15989 }
15990
15991 return true;
15992 }
15993
15994
15995 /* Resolve the expressions and iterators associated with a data statement.
15996 This is separate from the assignment checking because data lists should
15997 only be resolved once. */
15998
15999 static bool
16000 resolve_data_variables (gfc_data_variable *d)
16001 {
16002 for (; d; d = d->next)
16003 {
16004 if (d->list == NULL)
16005 {
16006 if (!gfc_resolve_expr (d->expr))
16007 return false;
16008 }
16009 else
16010 {
16011 if (!gfc_resolve_iterator (&d->iter, false, true))
16012 return false;
16013
16014 if (!resolve_data_variables (d->list))
16015 return false;
16016 }
16017 }
16018
16019 return true;
16020 }
16021
16022
16023 /* Resolve a single DATA statement. We implement this by storing a pointer to
16024 the value list into static variables, and then recursively traversing the
16025 variables list, expanding iterators and such. */
16026
16027 static void
16028 resolve_data (gfc_data *d)
16029 {
16030
16031 if (!resolve_data_variables (d->var))
16032 return;
16033
16034 values.vnode = d->value;
16035 if (d->value == NULL)
16036 mpz_set_ui (values.left, 0);
16037 else
16038 mpz_set (values.left, d->value->repeat);
16039
16040 if (!traverse_data_var (d->var, &d->where))
16041 return;
16042
16043 /* At this point, we better not have any values left. */
16044
16045 if (next_data_value ())
16046 gfc_error ("DATA statement at %L has more values than variables",
16047 &d->where);
16048 }
16049
16050
16051 /* 12.6 Constraint: In a pure subprogram any variable which is in common or
16052 accessed by host or use association, is a dummy argument to a pure function,
16053 is a dummy argument with INTENT (IN) to a pure subroutine, or an object that
16054 is storage associated with any such variable, shall not be used in the
16055 following contexts: (clients of this function). */
16056
16057 /* Determines if a variable is not 'pure', i.e., not assignable within a pure
16058 procedure. Returns zero if assignment is OK, nonzero if there is a
16059 problem. */
16060 int
16061 gfc_impure_variable (gfc_symbol *sym)
16062 {
16063 gfc_symbol *proc;
16064 gfc_namespace *ns;
16065
16066 if (sym->attr.use_assoc || sym->attr.in_common)
16067 return 1;
16068
16069 /* Check if the symbol's ns is inside the pure procedure. */
16070 for (ns = gfc_current_ns; ns; ns = ns->parent)
16071 {
16072 if (ns == sym->ns)
16073 break;
16074 if (ns->proc_name->attr.flavor == FL_PROCEDURE && !sym->attr.function)
16075 return 1;
16076 }
16077
16078 proc = sym->ns->proc_name;
16079 if (sym->attr.dummy
16080 && ((proc->attr.subroutine && sym->attr.intent == INTENT_IN)
16081 || proc->attr.function))
16082 return 1;
16083
16084 /* TODO: Sort out what can be storage associated, if anything, and include
16085 it here. In principle equivalences should be scanned but it does not
16086 seem to be possible to storage associate an impure variable this way. */
16087 return 0;
16088 }
16089
16090
16091 /* Test whether a symbol is pure or not. For a NULL pointer, checks if the
16092 current namespace is inside a pure procedure. */
16093
16094 int
16095 gfc_pure (gfc_symbol *sym)
16096 {
16097 symbol_attribute attr;
16098 gfc_namespace *ns;
16099
16100 if (sym == NULL)
16101 {
16102 /* Check if the current namespace or one of its parents
16103 belongs to a pure procedure. */
16104 for (ns = gfc_current_ns; ns; ns = ns->parent)
16105 {
16106 sym = ns->proc_name;
16107 if (sym == NULL)
16108 return 0;
16109 attr = sym->attr;
16110 if (attr.flavor == FL_PROCEDURE && attr.pure)
16111 return 1;
16112 }
16113 return 0;
16114 }
16115
16116 attr = sym->attr;
16117
16118 return attr.flavor == FL_PROCEDURE && attr.pure;
16119 }
16120
16121
16122 /* Test whether a symbol is implicitly pure or not. For a NULL pointer,
16123 checks if the current namespace is implicitly pure. Note that this
16124 function returns false for a PURE procedure. */
16125
16126 int
16127 gfc_implicit_pure (gfc_symbol *sym)
16128 {
16129 gfc_namespace *ns;
16130
16131 if (sym == NULL)
16132 {
16133 /* Check if the current procedure is implicit_pure. Walk up
16134 the procedure list until we find a procedure. */
16135 for (ns = gfc_current_ns; ns; ns = ns->parent)
16136 {
16137 sym = ns->proc_name;
16138 if (sym == NULL)
16139 return 0;
16140
16141 if (sym->attr.flavor == FL_PROCEDURE)
16142 break;
16143 }
16144 }
16145
16146 return sym->attr.flavor == FL_PROCEDURE && sym->attr.implicit_pure
16147 && !sym->attr.pure;
16148 }
16149
16150
16151 void
16152 gfc_unset_implicit_pure (gfc_symbol *sym)
16153 {
16154 gfc_namespace *ns;
16155
16156 if (sym == NULL)
16157 {
16158 /* Check if the current procedure is implicit_pure. Walk up
16159 the procedure list until we find a procedure. */
16160 for (ns = gfc_current_ns; ns; ns = ns->parent)
16161 {
16162 sym = ns->proc_name;
16163 if (sym == NULL)
16164 return;
16165
16166 if (sym->attr.flavor == FL_PROCEDURE)
16167 break;
16168 }
16169 }
16170
16171 if (sym->attr.flavor == FL_PROCEDURE)
16172 sym->attr.implicit_pure = 0;
16173 else
16174 sym->attr.pure = 0;
16175 }
16176
16177
16178 /* Test whether the current procedure is elemental or not. */
16179
16180 int
16181 gfc_elemental (gfc_symbol *sym)
16182 {
16183 symbol_attribute attr;
16184
16185 if (sym == NULL)
16186 sym = gfc_current_ns->proc_name;
16187 if (sym == NULL)
16188 return 0;
16189 attr = sym->attr;
16190
16191 return attr.flavor == FL_PROCEDURE && attr.elemental;
16192 }
16193
16194
16195 /* Warn about unused labels. */
16196
16197 static void
16198 warn_unused_fortran_label (gfc_st_label *label)
16199 {
16200 if (label == NULL)
16201 return;
16202
16203 warn_unused_fortran_label (label->left);
16204
16205 if (label->defined == ST_LABEL_UNKNOWN)
16206 return;
16207
16208 switch (label->referenced)
16209 {
16210 case ST_LABEL_UNKNOWN:
16211 gfc_warning (OPT_Wunused_label, "Label %d at %L defined but not used",
16212 label->value, &label->where);
16213 break;
16214
16215 case ST_LABEL_BAD_TARGET:
16216 gfc_warning (OPT_Wunused_label,
16217 "Label %d at %L defined but cannot be used",
16218 label->value, &label->where);
16219 break;
16220
16221 default:
16222 break;
16223 }
16224
16225 warn_unused_fortran_label (label->right);
16226 }
16227
16228
16229 /* Returns the sequence type of a symbol or sequence. */
16230
16231 static seq_type
16232 sequence_type (gfc_typespec ts)
16233 {
16234 seq_type result;
16235 gfc_component *c;
16236
16237 switch (ts.type)
16238 {
16239 case BT_DERIVED:
16240
16241 if (ts.u.derived->components == NULL)
16242 return SEQ_NONDEFAULT;
16243
16244 result = sequence_type (ts.u.derived->components->ts);
16245 for (c = ts.u.derived->components->next; c; c = c->next)
16246 if (sequence_type (c->ts) != result)
16247 return SEQ_MIXED;
16248
16249 return result;
16250
16251 case BT_CHARACTER:
16252 if (ts.kind != gfc_default_character_kind)
16253 return SEQ_NONDEFAULT;
16254
16255 return SEQ_CHARACTER;
16256
16257 case BT_INTEGER:
16258 if (ts.kind != gfc_default_integer_kind)
16259 return SEQ_NONDEFAULT;
16260
16261 return SEQ_NUMERIC;
16262
16263 case BT_REAL:
16264 if (!(ts.kind == gfc_default_real_kind
16265 || ts.kind == gfc_default_double_kind))
16266 return SEQ_NONDEFAULT;
16267
16268 return SEQ_NUMERIC;
16269
16270 case BT_COMPLEX:
16271 if (ts.kind != gfc_default_complex_kind)
16272 return SEQ_NONDEFAULT;
16273
16274 return SEQ_NUMERIC;
16275
16276 case BT_LOGICAL:
16277 if (ts.kind != gfc_default_logical_kind)
16278 return SEQ_NONDEFAULT;
16279
16280 return SEQ_NUMERIC;
16281
16282 default:
16283 return SEQ_NONDEFAULT;
16284 }
16285 }
16286
16287
16288 /* Resolve derived type EQUIVALENCE object. */
16289
16290 static bool
16291 resolve_equivalence_derived (gfc_symbol *derived, gfc_symbol *sym, gfc_expr *e)
16292 {
16293 gfc_component *c = derived->components;
16294
16295 if (!derived)
16296 return true;
16297
16298 /* Shall not be an object of nonsequence derived type. */
16299 if (!derived->attr.sequence)
16300 {
16301 gfc_error ("Derived type variable %qs at %L must have SEQUENCE "
16302 "attribute to be an EQUIVALENCE object", sym->name,
16303 &e->where);
16304 return false;
16305 }
16306
16307 /* Shall not have allocatable components. */
16308 if (derived->attr.alloc_comp)
16309 {
16310 gfc_error ("Derived type variable %qs at %L cannot have ALLOCATABLE "
16311 "components to be an EQUIVALENCE object",sym->name,
16312 &e->where);
16313 return false;
16314 }
16315
16316 if (sym->attr.in_common && gfc_has_default_initializer (sym->ts.u.derived))
16317 {
16318 gfc_error ("Derived type variable %qs at %L with default "
16319 "initialization cannot be in EQUIVALENCE with a variable "
16320 "in COMMON", sym->name, &e->where);
16321 return false;
16322 }
16323
16324 for (; c ; c = c->next)
16325 {
16326 if (gfc_bt_struct (c->ts.type)
16327 && (!resolve_equivalence_derived(c->ts.u.derived, sym, e)))
16328 return false;
16329
16330 /* Shall not be an object of sequence derived type containing a pointer
16331 in the structure. */
16332 if (c->attr.pointer)
16333 {
16334 gfc_error ("Derived type variable %qs at %L with pointer "
16335 "component(s) cannot be an EQUIVALENCE object",
16336 sym->name, &e->where);
16337 return false;
16338 }
16339 }
16340 return true;
16341 }
16342
16343
16344 /* Resolve equivalence object.
16345 An EQUIVALENCE object shall not be a dummy argument, a pointer, a target,
16346 an allocatable array, an object of nonsequence derived type, an object of
16347 sequence derived type containing a pointer at any level of component
16348 selection, an automatic object, a function name, an entry name, a result
16349 name, a named constant, a structure component, or a subobject of any of
16350 the preceding objects. A substring shall not have length zero. A
16351 derived type shall not have components with default initialization nor
16352 shall two objects of an equivalence group be initialized.
16353 Either all or none of the objects shall have an protected attribute.
16354 The simple constraints are done in symbol.c(check_conflict) and the rest
16355 are implemented here. */
16356
16357 static void
16358 resolve_equivalence (gfc_equiv *eq)
16359 {
16360 gfc_symbol *sym;
16361 gfc_symbol *first_sym;
16362 gfc_expr *e;
16363 gfc_ref *r;
16364 locus *last_where = NULL;
16365 seq_type eq_type, last_eq_type;
16366 gfc_typespec *last_ts;
16367 int object, cnt_protected;
16368 const char *msg;
16369
16370 last_ts = &eq->expr->symtree->n.sym->ts;
16371
16372 first_sym = eq->expr->symtree->n.sym;
16373
16374 cnt_protected = 0;
16375
16376 for (object = 1; eq; eq = eq->eq, object++)
16377 {
16378 e = eq->expr;
16379
16380 e->ts = e->symtree->n.sym->ts;
16381 /* match_varspec might not know yet if it is seeing
16382 array reference or substring reference, as it doesn't
16383 know the types. */
16384 if (e->ref && e->ref->type == REF_ARRAY)
16385 {
16386 gfc_ref *ref = e->ref;
16387 sym = e->symtree->n.sym;
16388
16389 if (sym->attr.dimension)
16390 {
16391 ref->u.ar.as = sym->as;
16392 ref = ref->next;
16393 }
16394
16395 /* For substrings, convert REF_ARRAY into REF_SUBSTRING. */
16396 if (e->ts.type == BT_CHARACTER
16397 && ref
16398 && ref->type == REF_ARRAY
16399 && ref->u.ar.dimen == 1
16400 && ref->u.ar.dimen_type[0] == DIMEN_RANGE
16401 && ref->u.ar.stride[0] == NULL)
16402 {
16403 gfc_expr *start = ref->u.ar.start[0];
16404 gfc_expr *end = ref->u.ar.end[0];
16405 void *mem = NULL;
16406
16407 /* Optimize away the (:) reference. */
16408 if (start == NULL && end == NULL)
16409 {
16410 if (e->ref == ref)
16411 e->ref = ref->next;
16412 else
16413 e->ref->next = ref->next;
16414 mem = ref;
16415 }
16416 else
16417 {
16418 ref->type = REF_SUBSTRING;
16419 if (start == NULL)
16420 start = gfc_get_int_expr (gfc_charlen_int_kind,
16421 NULL, 1);
16422 ref->u.ss.start = start;
16423 if (end == NULL && e->ts.u.cl)
16424 end = gfc_copy_expr (e->ts.u.cl->length);
16425 ref->u.ss.end = end;
16426 ref->u.ss.length = e->ts.u.cl;
16427 e->ts.u.cl = NULL;
16428 }
16429 ref = ref->next;
16430 free (mem);
16431 }
16432
16433 /* Any further ref is an error. */
16434 if (ref)
16435 {
16436 gcc_assert (ref->type == REF_ARRAY);
16437 gfc_error ("Syntax error in EQUIVALENCE statement at %L",
16438 &ref->u.ar.where);
16439 continue;
16440 }
16441 }
16442
16443 if (!gfc_resolve_expr (e))
16444 continue;
16445
16446 sym = e->symtree->n.sym;
16447
16448 if (sym->attr.is_protected)
16449 cnt_protected++;
16450 if (cnt_protected > 0 && cnt_protected != object)
16451 {
16452 gfc_error ("Either all or none of the objects in the "
16453 "EQUIVALENCE set at %L shall have the "
16454 "PROTECTED attribute",
16455 &e->where);
16456 break;
16457 }
16458
16459 /* Shall not equivalence common block variables in a PURE procedure. */
16460 if (sym->ns->proc_name
16461 && sym->ns->proc_name->attr.pure
16462 && sym->attr.in_common)
16463 {
16464 /* Need to check for symbols that may have entered the pure
16465 procedure via a USE statement. */
16466 bool saw_sym = false;
16467 if (sym->ns->use_stmts)
16468 {
16469 gfc_use_rename *r;
16470 for (r = sym->ns->use_stmts->rename; r; r = r->next)
16471 if (strcmp(r->use_name, sym->name) == 0) saw_sym = true;
16472 }
16473 else
16474 saw_sym = true;
16475
16476 if (saw_sym)
16477 gfc_error ("COMMON block member %qs at %L cannot be an "
16478 "EQUIVALENCE object in the pure procedure %qs",
16479 sym->name, &e->where, sym->ns->proc_name->name);
16480 break;
16481 }
16482
16483 /* Shall not be a named constant. */
16484 if (e->expr_type == EXPR_CONSTANT)
16485 {
16486 gfc_error ("Named constant %qs at %L cannot be an EQUIVALENCE "
16487 "object", sym->name, &e->where);
16488 continue;
16489 }
16490
16491 if (e->ts.type == BT_DERIVED
16492 && !resolve_equivalence_derived (e->ts.u.derived, sym, e))
16493 continue;
16494
16495 /* Check that the types correspond correctly:
16496 Note 5.28:
16497 A numeric sequence structure may be equivalenced to another sequence
16498 structure, an object of default integer type, default real type, double
16499 precision real type, default logical type such that components of the
16500 structure ultimately only become associated to objects of the same
16501 kind. A character sequence structure may be equivalenced to an object
16502 of default character kind or another character sequence structure.
16503 Other objects may be equivalenced only to objects of the same type and
16504 kind parameters. */
16505
16506 /* Identical types are unconditionally OK. */
16507 if (object == 1 || gfc_compare_types (last_ts, &sym->ts))
16508 goto identical_types;
16509
16510 last_eq_type = sequence_type (*last_ts);
16511 eq_type = sequence_type (sym->ts);
16512
16513 /* Since the pair of objects is not of the same type, mixed or
16514 non-default sequences can be rejected. */
16515
16516 msg = "Sequence %s with mixed components in EQUIVALENCE "
16517 "statement at %L with different type objects";
16518 if ((object ==2
16519 && last_eq_type == SEQ_MIXED
16520 && !gfc_notify_std (GFC_STD_GNU, msg, first_sym->name, last_where))
16521 || (eq_type == SEQ_MIXED
16522 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where)))
16523 continue;
16524
16525 msg = "Non-default type object or sequence %s in EQUIVALENCE "
16526 "statement at %L with objects of different type";
16527 if ((object ==2
16528 && last_eq_type == SEQ_NONDEFAULT
16529 && !gfc_notify_std (GFC_STD_GNU, msg, first_sym->name, last_where))
16530 || (eq_type == SEQ_NONDEFAULT
16531 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where)))
16532 continue;
16533
16534 msg ="Non-CHARACTER object %qs in default CHARACTER "
16535 "EQUIVALENCE statement at %L";
16536 if (last_eq_type == SEQ_CHARACTER
16537 && eq_type != SEQ_CHARACTER
16538 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where))
16539 continue;
16540
16541 msg ="Non-NUMERIC object %qs in default NUMERIC "
16542 "EQUIVALENCE statement at %L";
16543 if (last_eq_type == SEQ_NUMERIC
16544 && eq_type != SEQ_NUMERIC
16545 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where))
16546 continue;
16547
16548 identical_types:
16549 last_ts =&sym->ts;
16550 last_where = &e->where;
16551
16552 if (!e->ref)
16553 continue;
16554
16555 /* Shall not be an automatic array. */
16556 if (e->ref->type == REF_ARRAY
16557 && !gfc_resolve_array_spec (e->ref->u.ar.as, 1))
16558 {
16559 gfc_error ("Array %qs at %L with non-constant bounds cannot be "
16560 "an EQUIVALENCE object", sym->name, &e->where);
16561 continue;
16562 }
16563
16564 r = e->ref;
16565 while (r)
16566 {
16567 /* Shall not be a structure component. */
16568 if (r->type == REF_COMPONENT)
16569 {
16570 gfc_error ("Structure component %qs at %L cannot be an "
16571 "EQUIVALENCE object",
16572 r->u.c.component->name, &e->where);
16573 break;
16574 }
16575
16576 /* A substring shall not have length zero. */
16577 if (r->type == REF_SUBSTRING)
16578 {
16579 if (compare_bound (r->u.ss.start, r->u.ss.end) == CMP_GT)
16580 {
16581 gfc_error ("Substring at %L has length zero",
16582 &r->u.ss.start->where);
16583 break;
16584 }
16585 }
16586 r = r->next;
16587 }
16588 }
16589 }
16590
16591
16592 /* Function called by resolve_fntype to flag other symbol used in the
16593 length type parameter specification of function resuls. */
16594
16595 static bool
16596 flag_fn_result_spec (gfc_expr *expr,
16597 gfc_symbol *sym,
16598 int *f ATTRIBUTE_UNUSED)
16599 {
16600 gfc_namespace *ns;
16601 gfc_symbol *s;
16602
16603 if (expr->expr_type == EXPR_VARIABLE)
16604 {
16605 s = expr->symtree->n.sym;
16606 for (ns = s->ns; ns; ns = ns->parent)
16607 if (!ns->parent)
16608 break;
16609
16610 if (sym == s)
16611 {
16612 gfc_error ("Self reference in character length expression "
16613 "for %qs at %L", sym->name, &expr->where);
16614 return true;
16615 }
16616
16617 if (!s->fn_result_spec
16618 && s->attr.flavor == FL_PARAMETER)
16619 {
16620 /* Function contained in a module.... */
16621 if (ns->proc_name && ns->proc_name->attr.flavor == FL_MODULE)
16622 {
16623 gfc_symtree *st;
16624 s->fn_result_spec = 1;
16625 /* Make sure that this symbol is translated as a module
16626 variable. */
16627 st = gfc_get_unique_symtree (ns);
16628 st->n.sym = s;
16629 s->refs++;
16630 }
16631 /* ... which is use associated and called. */
16632 else if (s->attr.use_assoc || s->attr.used_in_submodule
16633 ||
16634 /* External function matched with an interface. */
16635 (s->ns->proc_name
16636 && ((s->ns == ns
16637 && s->ns->proc_name->attr.if_source == IFSRC_DECL)
16638 || s->ns->proc_name->attr.if_source == IFSRC_IFBODY)
16639 && s->ns->proc_name->attr.function))
16640 s->fn_result_spec = 1;
16641 }
16642 }
16643 return false;
16644 }
16645
16646
16647 /* Resolve function and ENTRY types, issue diagnostics if needed. */
16648
16649 static void
16650 resolve_fntype (gfc_namespace *ns)
16651 {
16652 gfc_entry_list *el;
16653 gfc_symbol *sym;
16654
16655 if (ns->proc_name == NULL || !ns->proc_name->attr.function)
16656 return;
16657
16658 /* If there are any entries, ns->proc_name is the entry master
16659 synthetic symbol and ns->entries->sym actual FUNCTION symbol. */
16660 if (ns->entries)
16661 sym = ns->entries->sym;
16662 else
16663 sym = ns->proc_name;
16664 if (sym->result == sym
16665 && sym->ts.type == BT_UNKNOWN
16666 && !gfc_set_default_type (sym, 0, NULL)
16667 && !sym->attr.untyped)
16668 {
16669 gfc_error ("Function %qs at %L has no IMPLICIT type",
16670 sym->name, &sym->declared_at);
16671 sym->attr.untyped = 1;
16672 }
16673
16674 if (sym->ts.type == BT_DERIVED && !sym->ts.u.derived->attr.use_assoc
16675 && !sym->attr.contained
16676 && !gfc_check_symbol_access (sym->ts.u.derived)
16677 && gfc_check_symbol_access (sym))
16678 {
16679 gfc_notify_std (GFC_STD_F2003, "PUBLIC function %qs at "
16680 "%L of PRIVATE type %qs", sym->name,
16681 &sym->declared_at, sym->ts.u.derived->name);
16682 }
16683
16684 if (ns->entries)
16685 for (el = ns->entries->next; el; el = el->next)
16686 {
16687 if (el->sym->result == el->sym
16688 && el->sym->ts.type == BT_UNKNOWN
16689 && !gfc_set_default_type (el->sym, 0, NULL)
16690 && !el->sym->attr.untyped)
16691 {
16692 gfc_error ("ENTRY %qs at %L has no IMPLICIT type",
16693 el->sym->name, &el->sym->declared_at);
16694 el->sym->attr.untyped = 1;
16695 }
16696 }
16697
16698 if (sym->ts.type == BT_CHARACTER)
16699 gfc_traverse_expr (sym->ts.u.cl->length, sym, flag_fn_result_spec, 0);
16700 }
16701
16702
16703 /* 12.3.2.1.1 Defined operators. */
16704
16705 static bool
16706 check_uop_procedure (gfc_symbol *sym, locus where)
16707 {
16708 gfc_formal_arglist *formal;
16709
16710 if (!sym->attr.function)
16711 {
16712 gfc_error ("User operator procedure %qs at %L must be a FUNCTION",
16713 sym->name, &where);
16714 return false;
16715 }
16716
16717 if (sym->ts.type == BT_CHARACTER
16718 && !((sym->ts.u.cl && sym->ts.u.cl->length) || sym->ts.deferred)
16719 && !(sym->result && ((sym->result->ts.u.cl
16720 && sym->result->ts.u.cl->length) || sym->result->ts.deferred)))
16721 {
16722 gfc_error ("User operator procedure %qs at %L cannot be assumed "
16723 "character length", sym->name, &where);
16724 return false;
16725 }
16726
16727 formal = gfc_sym_get_dummy_args (sym);
16728 if (!formal || !formal->sym)
16729 {
16730 gfc_error ("User operator procedure %qs at %L must have at least "
16731 "one argument", sym->name, &where);
16732 return false;
16733 }
16734
16735 if (formal->sym->attr.intent != INTENT_IN)
16736 {
16737 gfc_error ("First argument of operator interface at %L must be "
16738 "INTENT(IN)", &where);
16739 return false;
16740 }
16741
16742 if (formal->sym->attr.optional)
16743 {
16744 gfc_error ("First argument of operator interface at %L cannot be "
16745 "optional", &where);
16746 return false;
16747 }
16748
16749 formal = formal->next;
16750 if (!formal || !formal->sym)
16751 return true;
16752
16753 if (formal->sym->attr.intent != INTENT_IN)
16754 {
16755 gfc_error ("Second argument of operator interface at %L must be "
16756 "INTENT(IN)", &where);
16757 return false;
16758 }
16759
16760 if (formal->sym->attr.optional)
16761 {
16762 gfc_error ("Second argument of operator interface at %L cannot be "
16763 "optional", &where);
16764 return false;
16765 }
16766
16767 if (formal->next)
16768 {
16769 gfc_error ("Operator interface at %L must have, at most, two "
16770 "arguments", &where);
16771 return false;
16772 }
16773
16774 return true;
16775 }
16776
16777 static void
16778 gfc_resolve_uops (gfc_symtree *symtree)
16779 {
16780 gfc_interface *itr;
16781
16782 if (symtree == NULL)
16783 return;
16784
16785 gfc_resolve_uops (symtree->left);
16786 gfc_resolve_uops (symtree->right);
16787
16788 for (itr = symtree->n.uop->op; itr; itr = itr->next)
16789 check_uop_procedure (itr->sym, itr->sym->declared_at);
16790 }
16791
16792
16793 /* Examine all of the expressions associated with a program unit,
16794 assign types to all intermediate expressions, make sure that all
16795 assignments are to compatible types and figure out which names
16796 refer to which functions or subroutines. It doesn't check code
16797 block, which is handled by gfc_resolve_code. */
16798
16799 static void
16800 resolve_types (gfc_namespace *ns)
16801 {
16802 gfc_namespace *n;
16803 gfc_charlen *cl;
16804 gfc_data *d;
16805 gfc_equiv *eq;
16806 gfc_namespace* old_ns = gfc_current_ns;
16807
16808 if (ns->types_resolved)
16809 return;
16810
16811 /* Check that all IMPLICIT types are ok. */
16812 if (!ns->seen_implicit_none)
16813 {
16814 unsigned letter;
16815 for (letter = 0; letter != GFC_LETTERS; ++letter)
16816 if (ns->set_flag[letter]
16817 && !resolve_typespec_used (&ns->default_type[letter],
16818 &ns->implicit_loc[letter], NULL))
16819 return;
16820 }
16821
16822 gfc_current_ns = ns;
16823
16824 resolve_entries (ns);
16825
16826 resolve_common_vars (&ns->blank_common, false);
16827 resolve_common_blocks (ns->common_root);
16828
16829 resolve_contained_functions (ns);
16830
16831 if (ns->proc_name && ns->proc_name->attr.flavor == FL_PROCEDURE
16832 && ns->proc_name->attr.if_source == IFSRC_IFBODY)
16833 resolve_formal_arglist (ns->proc_name);
16834
16835 gfc_traverse_ns (ns, resolve_bind_c_derived_types);
16836
16837 for (cl = ns->cl_list; cl; cl = cl->next)
16838 resolve_charlen (cl);
16839
16840 gfc_traverse_ns (ns, resolve_symbol);
16841
16842 resolve_fntype (ns);
16843
16844 for (n = ns->contained; n; n = n->sibling)
16845 {
16846 if (gfc_pure (ns->proc_name) && !gfc_pure (n->proc_name))
16847 gfc_error ("Contained procedure %qs at %L of a PURE procedure must "
16848 "also be PURE", n->proc_name->name,
16849 &n->proc_name->declared_at);
16850
16851 resolve_types (n);
16852 }
16853
16854 forall_flag = 0;
16855 gfc_do_concurrent_flag = 0;
16856 gfc_check_interfaces (ns);
16857
16858 gfc_traverse_ns (ns, resolve_values);
16859
16860 if (ns->save_all || !flag_automatic)
16861 gfc_save_all (ns);
16862
16863 iter_stack = NULL;
16864 for (d = ns->data; d; d = d->next)
16865 resolve_data (d);
16866
16867 iter_stack = NULL;
16868 gfc_traverse_ns (ns, gfc_formalize_init_value);
16869
16870 gfc_traverse_ns (ns, gfc_verify_binding_labels);
16871
16872 for (eq = ns->equiv; eq; eq = eq->next)
16873 resolve_equivalence (eq);
16874
16875 /* Warn about unused labels. */
16876 if (warn_unused_label)
16877 warn_unused_fortran_label (ns->st_labels);
16878
16879 gfc_resolve_uops (ns->uop_root);
16880
16881 gfc_traverse_ns (ns, gfc_verify_DTIO_procedures);
16882
16883 gfc_resolve_omp_declare_simd (ns);
16884
16885 gfc_resolve_omp_udrs (ns->omp_udr_root);
16886
16887 ns->types_resolved = 1;
16888
16889 gfc_current_ns = old_ns;
16890 }
16891
16892
16893 /* Call gfc_resolve_code recursively. */
16894
16895 static void
16896 resolve_codes (gfc_namespace *ns)
16897 {
16898 gfc_namespace *n;
16899 bitmap_obstack old_obstack;
16900
16901 if (ns->resolved == 1)
16902 return;
16903
16904 for (n = ns->contained; n; n = n->sibling)
16905 resolve_codes (n);
16906
16907 gfc_current_ns = ns;
16908
16909 /* Don't clear 'cs_base' if this is the namespace of a BLOCK construct. */
16910 if (!(ns->proc_name && ns->proc_name->attr.flavor == FL_LABEL))
16911 cs_base = NULL;
16912
16913 /* Set to an out of range value. */
16914 current_entry_id = -1;
16915
16916 old_obstack = labels_obstack;
16917 bitmap_obstack_initialize (&labels_obstack);
16918
16919 gfc_resolve_oacc_declare (ns);
16920 gfc_resolve_oacc_routines (ns);
16921 gfc_resolve_omp_local_vars (ns);
16922 gfc_resolve_code (ns->code, ns);
16923
16924 bitmap_obstack_release (&labels_obstack);
16925 labels_obstack = old_obstack;
16926 }
16927
16928
16929 /* This function is called after a complete program unit has been compiled.
16930 Its purpose is to examine all of the expressions associated with a program
16931 unit, assign types to all intermediate expressions, make sure that all
16932 assignments are to compatible types and figure out which names refer to
16933 which functions or subroutines. */
16934
16935 void
16936 gfc_resolve (gfc_namespace *ns)
16937 {
16938 gfc_namespace *old_ns;
16939 code_stack *old_cs_base;
16940 struct gfc_omp_saved_state old_omp_state;
16941
16942 if (ns->resolved)
16943 return;
16944
16945 ns->resolved = -1;
16946 old_ns = gfc_current_ns;
16947 old_cs_base = cs_base;
16948
16949 /* As gfc_resolve can be called during resolution of an OpenMP construct
16950 body, we should clear any state associated to it, so that say NS's
16951 DO loops are not interpreted as OpenMP loops. */
16952 if (!ns->construct_entities)
16953 gfc_omp_save_and_clear_state (&old_omp_state);
16954
16955 resolve_types (ns);
16956 component_assignment_level = 0;
16957 resolve_codes (ns);
16958
16959 gfc_current_ns = old_ns;
16960 cs_base = old_cs_base;
16961 ns->resolved = 1;
16962
16963 gfc_run_passes (ns);
16964
16965 if (!ns->construct_entities)
16966 gfc_omp_restore_state (&old_omp_state);
16967 }