]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/fortran/resolve.c
Update copyright years.
[thirdparty/gcc.git] / gcc / fortran / resolve.c
1 /* Perform type resolution on the various structures.
2 Copyright (C) 2001-2018 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 gfc_error ("Argument %qs of statement function at %L must "
516 "be scalar", sym->name, &sym->declared_at);
517 continue;
518 }
519
520 if (sym->ts.type == BT_CHARACTER)
521 {
522 gfc_charlen *cl = sym->ts.u.cl;
523 if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
524 {
525 gfc_error ("Character-valued argument %qs of statement "
526 "function at %L must have constant length",
527 sym->name, &sym->declared_at);
528 continue;
529 }
530 }
531 }
532 }
533 formal_arg_flag = false;
534 }
535
536
537 /* Work function called when searching for symbols that have argument lists
538 associated with them. */
539
540 static void
541 find_arglists (gfc_symbol *sym)
542 {
543 if (sym->attr.if_source == IFSRC_UNKNOWN || sym->ns != gfc_current_ns
544 || gfc_fl_struct (sym->attr.flavor) || sym->attr.intrinsic)
545 return;
546
547 resolve_formal_arglist (sym);
548 }
549
550
551 /* Given a namespace, resolve all formal argument lists within the namespace.
552 */
553
554 static void
555 resolve_formal_arglists (gfc_namespace *ns)
556 {
557 if (ns == NULL)
558 return;
559
560 gfc_traverse_ns (ns, find_arglists);
561 }
562
563
564 static void
565 resolve_contained_fntype (gfc_symbol *sym, gfc_namespace *ns)
566 {
567 bool t;
568
569 if (sym && sym->attr.flavor == FL_PROCEDURE
570 && sym->ns->parent
571 && sym->ns->parent->proc_name
572 && sym->ns->parent->proc_name->attr.flavor == FL_PROCEDURE
573 && !strcmp (sym->name, sym->ns->parent->proc_name->name))
574 gfc_error ("Contained procedure %qs at %L has the same name as its "
575 "encompassing procedure", sym->name, &sym->declared_at);
576
577 /* If this namespace is not a function or an entry master function,
578 ignore it. */
579 if (! sym || !(sym->attr.function || sym->attr.flavor == FL_VARIABLE)
580 || sym->attr.entry_master)
581 return;
582
583 /* Try to find out of what the return type is. */
584 if (sym->result->ts.type == BT_UNKNOWN && sym->result->ts.interface == NULL)
585 {
586 t = gfc_set_default_type (sym->result, 0, ns);
587
588 if (!t && !sym->result->attr.untyped)
589 {
590 if (sym->result == sym)
591 gfc_error ("Contained function %qs at %L has no IMPLICIT type",
592 sym->name, &sym->declared_at);
593 else if (!sym->result->attr.proc_pointer)
594 gfc_error ("Result %qs of contained function %qs at %L has "
595 "no IMPLICIT type", sym->result->name, sym->name,
596 &sym->result->declared_at);
597 sym->result->attr.untyped = 1;
598 }
599 }
600
601 /* Fortran 95 Draft Standard, page 51, Section 5.1.1.5, on the Character
602 type, lists the only ways a character length value of * can be used:
603 dummy arguments of procedures, named constants, and function results
604 in external functions. Internal function results and results of module
605 procedures are not on this list, ergo, not permitted. */
606
607 if (sym->result->ts.type == BT_CHARACTER)
608 {
609 gfc_charlen *cl = sym->result->ts.u.cl;
610 if ((!cl || !cl->length) && !sym->result->ts.deferred)
611 {
612 /* See if this is a module-procedure and adapt error message
613 accordingly. */
614 bool module_proc;
615 gcc_assert (ns->parent && ns->parent->proc_name);
616 module_proc = (ns->parent->proc_name->attr.flavor == FL_MODULE);
617
618 gfc_error (module_proc
619 ? G_("Character-valued module procedure %qs at %L"
620 " must not be assumed length")
621 : G_("Character-valued internal function %qs at %L"
622 " must not be assumed length"),
623 sym->name, &sym->declared_at);
624 }
625 }
626 }
627
628
629 /* Add NEW_ARGS to the formal argument list of PROC, taking care not to
630 introduce duplicates. */
631
632 static void
633 merge_argument_lists (gfc_symbol *proc, gfc_formal_arglist *new_args)
634 {
635 gfc_formal_arglist *f, *new_arglist;
636 gfc_symbol *new_sym;
637
638 for (; new_args != NULL; new_args = new_args->next)
639 {
640 new_sym = new_args->sym;
641 /* See if this arg is already in the formal argument list. */
642 for (f = proc->formal; f; f = f->next)
643 {
644 if (new_sym == f->sym)
645 break;
646 }
647
648 if (f)
649 continue;
650
651 /* Add a new argument. Argument order is not important. */
652 new_arglist = gfc_get_formal_arglist ();
653 new_arglist->sym = new_sym;
654 new_arglist->next = proc->formal;
655 proc->formal = new_arglist;
656 }
657 }
658
659
660 /* Flag the arguments that are not present in all entries. */
661
662 static void
663 check_argument_lists (gfc_symbol *proc, gfc_formal_arglist *new_args)
664 {
665 gfc_formal_arglist *f, *head;
666 head = new_args;
667
668 for (f = proc->formal; f; f = f->next)
669 {
670 if (f->sym == NULL)
671 continue;
672
673 for (new_args = head; new_args; new_args = new_args->next)
674 {
675 if (new_args->sym == f->sym)
676 break;
677 }
678
679 if (new_args)
680 continue;
681
682 f->sym->attr.not_always_present = 1;
683 }
684 }
685
686
687 /* Resolve alternate entry points. If a symbol has multiple entry points we
688 create a new master symbol for the main routine, and turn the existing
689 symbol into an entry point. */
690
691 static void
692 resolve_entries (gfc_namespace *ns)
693 {
694 gfc_namespace *old_ns;
695 gfc_code *c;
696 gfc_symbol *proc;
697 gfc_entry_list *el;
698 char name[GFC_MAX_SYMBOL_LEN + 1];
699 static int master_count = 0;
700
701 if (ns->proc_name == NULL)
702 return;
703
704 /* No need to do anything if this procedure doesn't have alternate entry
705 points. */
706 if (!ns->entries)
707 return;
708
709 /* We may already have resolved alternate entry points. */
710 if (ns->proc_name->attr.entry_master)
711 return;
712
713 /* If this isn't a procedure something has gone horribly wrong. */
714 gcc_assert (ns->proc_name->attr.flavor == FL_PROCEDURE);
715
716 /* Remember the current namespace. */
717 old_ns = gfc_current_ns;
718
719 gfc_current_ns = ns;
720
721 /* Add the main entry point to the list of entry points. */
722 el = gfc_get_entry_list ();
723 el->sym = ns->proc_name;
724 el->id = 0;
725 el->next = ns->entries;
726 ns->entries = el;
727 ns->proc_name->attr.entry = 1;
728
729 /* If it is a module function, it needs to be in the right namespace
730 so that gfc_get_fake_result_decl can gather up the results. The
731 need for this arose in get_proc_name, where these beasts were
732 left in their own namespace, to keep prior references linked to
733 the entry declaration.*/
734 if (ns->proc_name->attr.function
735 && ns->parent && ns->parent->proc_name->attr.flavor == FL_MODULE)
736 el->sym->ns = ns;
737
738 /* Do the same for entries where the master is not a module
739 procedure. These are retained in the module namespace because
740 of the module procedure declaration. */
741 for (el = el->next; el; el = el->next)
742 if (el->sym->ns->proc_name->attr.flavor == FL_MODULE
743 && el->sym->attr.mod_proc)
744 el->sym->ns = ns;
745 el = ns->entries;
746
747 /* Add an entry statement for it. */
748 c = gfc_get_code (EXEC_ENTRY);
749 c->ext.entry = el;
750 c->next = ns->code;
751 ns->code = c;
752
753 /* Create a new symbol for the master function. */
754 /* Give the internal function a unique name (within this file).
755 Also include the function name so the user has some hope of figuring
756 out what is going on. */
757 snprintf (name, GFC_MAX_SYMBOL_LEN, "master.%d.%s",
758 master_count++, ns->proc_name->name);
759 gfc_get_ha_symbol (name, &proc);
760 gcc_assert (proc != NULL);
761
762 gfc_add_procedure (&proc->attr, PROC_INTERNAL, proc->name, NULL);
763 if (ns->proc_name->attr.subroutine)
764 gfc_add_subroutine (&proc->attr, proc->name, NULL);
765 else
766 {
767 gfc_symbol *sym;
768 gfc_typespec *ts, *fts;
769 gfc_array_spec *as, *fas;
770 gfc_add_function (&proc->attr, proc->name, NULL);
771 proc->result = proc;
772 fas = ns->entries->sym->as;
773 fas = fas ? fas : ns->entries->sym->result->as;
774 fts = &ns->entries->sym->result->ts;
775 if (fts->type == BT_UNKNOWN)
776 fts = gfc_get_default_type (ns->entries->sym->result->name, NULL);
777 for (el = ns->entries->next; el; el = el->next)
778 {
779 ts = &el->sym->result->ts;
780 as = el->sym->as;
781 as = as ? as : el->sym->result->as;
782 if (ts->type == BT_UNKNOWN)
783 ts = gfc_get_default_type (el->sym->result->name, NULL);
784
785 if (! gfc_compare_types (ts, fts)
786 || (el->sym->result->attr.dimension
787 != ns->entries->sym->result->attr.dimension)
788 || (el->sym->result->attr.pointer
789 != ns->entries->sym->result->attr.pointer))
790 break;
791 else if (as && fas && ns->entries->sym->result != el->sym->result
792 && gfc_compare_array_spec (as, fas) == 0)
793 gfc_error ("Function %s at %L has entries with mismatched "
794 "array specifications", ns->entries->sym->name,
795 &ns->entries->sym->declared_at);
796 /* The characteristics need to match and thus both need to have
797 the same string length, i.e. both len=*, or both len=4.
798 Having both len=<variable> is also possible, but difficult to
799 check at compile time. */
800 else if (ts->type == BT_CHARACTER && ts->u.cl && fts->u.cl
801 && (((ts->u.cl->length && !fts->u.cl->length)
802 ||(!ts->u.cl->length && fts->u.cl->length))
803 || (ts->u.cl->length
804 && ts->u.cl->length->expr_type
805 != fts->u.cl->length->expr_type)
806 || (ts->u.cl->length
807 && ts->u.cl->length->expr_type == EXPR_CONSTANT
808 && mpz_cmp (ts->u.cl->length->value.integer,
809 fts->u.cl->length->value.integer) != 0)))
810 gfc_notify_std (GFC_STD_GNU, "Function %s at %L with "
811 "entries returning variables of different "
812 "string lengths", ns->entries->sym->name,
813 &ns->entries->sym->declared_at);
814 }
815
816 if (el == NULL)
817 {
818 sym = ns->entries->sym->result;
819 /* All result types the same. */
820 proc->ts = *fts;
821 if (sym->attr.dimension)
822 gfc_set_array_spec (proc, gfc_copy_array_spec (sym->as), NULL);
823 if (sym->attr.pointer)
824 gfc_add_pointer (&proc->attr, NULL);
825 }
826 else
827 {
828 /* Otherwise the result will be passed through a union by
829 reference. */
830 proc->attr.mixed_entry_master = 1;
831 for (el = ns->entries; el; el = el->next)
832 {
833 sym = el->sym->result;
834 if (sym->attr.dimension)
835 {
836 if (el == ns->entries)
837 gfc_error ("FUNCTION result %s can't be an array in "
838 "FUNCTION %s at %L", sym->name,
839 ns->entries->sym->name, &sym->declared_at);
840 else
841 gfc_error ("ENTRY result %s can't be an array in "
842 "FUNCTION %s at %L", sym->name,
843 ns->entries->sym->name, &sym->declared_at);
844 }
845 else if (sym->attr.pointer)
846 {
847 if (el == ns->entries)
848 gfc_error ("FUNCTION result %s can't be a POINTER in "
849 "FUNCTION %s at %L", sym->name,
850 ns->entries->sym->name, &sym->declared_at);
851 else
852 gfc_error ("ENTRY result %s can't be a POINTER in "
853 "FUNCTION %s at %L", sym->name,
854 ns->entries->sym->name, &sym->declared_at);
855 }
856 else
857 {
858 ts = &sym->ts;
859 if (ts->type == BT_UNKNOWN)
860 ts = gfc_get_default_type (sym->name, NULL);
861 switch (ts->type)
862 {
863 case BT_INTEGER:
864 if (ts->kind == gfc_default_integer_kind)
865 sym = NULL;
866 break;
867 case BT_REAL:
868 if (ts->kind == gfc_default_real_kind
869 || ts->kind == gfc_default_double_kind)
870 sym = NULL;
871 break;
872 case BT_COMPLEX:
873 if (ts->kind == gfc_default_complex_kind)
874 sym = NULL;
875 break;
876 case BT_LOGICAL:
877 if (ts->kind == gfc_default_logical_kind)
878 sym = NULL;
879 break;
880 case BT_UNKNOWN:
881 /* We will issue error elsewhere. */
882 sym = NULL;
883 break;
884 default:
885 break;
886 }
887 if (sym)
888 {
889 if (el == ns->entries)
890 gfc_error ("FUNCTION result %s can't be of type %s "
891 "in FUNCTION %s at %L", sym->name,
892 gfc_typename (ts), ns->entries->sym->name,
893 &sym->declared_at);
894 else
895 gfc_error ("ENTRY result %s can't be of type %s "
896 "in FUNCTION %s at %L", sym->name,
897 gfc_typename (ts), ns->entries->sym->name,
898 &sym->declared_at);
899 }
900 }
901 }
902 }
903 }
904 proc->attr.access = ACCESS_PRIVATE;
905 proc->attr.entry_master = 1;
906
907 /* Merge all the entry point arguments. */
908 for (el = ns->entries; el; el = el->next)
909 merge_argument_lists (proc, el->sym->formal);
910
911 /* Check the master formal arguments for any that are not
912 present in all entry points. */
913 for (el = ns->entries; el; el = el->next)
914 check_argument_lists (proc, el->sym->formal);
915
916 /* Use the master function for the function body. */
917 ns->proc_name = proc;
918
919 /* Finalize the new symbols. */
920 gfc_commit_symbols ();
921
922 /* Restore the original namespace. */
923 gfc_current_ns = old_ns;
924 }
925
926
927 /* Resolve common variables. */
928 static void
929 resolve_common_vars (gfc_common_head *common_block, bool named_common)
930 {
931 gfc_symbol *csym = common_block->head;
932
933 for (; csym; csym = csym->common_next)
934 {
935 /* gfc_add_in_common may have been called before, but the reported errors
936 have been ignored to continue parsing.
937 We do the checks again here. */
938 if (!csym->attr.use_assoc)
939 gfc_add_in_common (&csym->attr, csym->name, &common_block->where);
940
941 if (csym->value || csym->attr.data)
942 {
943 if (!csym->ns->is_block_data)
944 gfc_notify_std (GFC_STD_GNU, "Variable %qs at %L is in COMMON "
945 "but only in BLOCK DATA initialization is "
946 "allowed", csym->name, &csym->declared_at);
947 else if (!named_common)
948 gfc_notify_std (GFC_STD_GNU, "Initialized variable %qs at %L is "
949 "in a blank COMMON but initialization is only "
950 "allowed in named common blocks", csym->name,
951 &csym->declared_at);
952 }
953
954 if (UNLIMITED_POLY (csym))
955 gfc_error_now ("%qs in cannot appear in COMMON at %L "
956 "[F2008:C5100]", csym->name, &csym->declared_at);
957
958 if (csym->ts.type != BT_DERIVED)
959 continue;
960
961 if (!(csym->ts.u.derived->attr.sequence
962 || csym->ts.u.derived->attr.is_bind_c))
963 gfc_error_now ("Derived type variable %qs in COMMON at %L "
964 "has neither the SEQUENCE nor the BIND(C) "
965 "attribute", csym->name, &csym->declared_at);
966 if (csym->ts.u.derived->attr.alloc_comp)
967 gfc_error_now ("Derived type variable %qs in COMMON at %L "
968 "has an ultimate component that is "
969 "allocatable", csym->name, &csym->declared_at);
970 if (gfc_has_default_initializer (csym->ts.u.derived))
971 gfc_error_now ("Derived type variable %qs in COMMON at %L "
972 "may not have default initializer", csym->name,
973 &csym->declared_at);
974
975 if (csym->attr.flavor == FL_UNKNOWN && !csym->attr.proc_pointer)
976 gfc_add_flavor (&csym->attr, FL_VARIABLE, csym->name, &csym->declared_at);
977 }
978 }
979
980 /* Resolve common blocks. */
981 static void
982 resolve_common_blocks (gfc_symtree *common_root)
983 {
984 gfc_symbol *sym;
985 gfc_gsymbol * gsym;
986
987 if (common_root == NULL)
988 return;
989
990 if (common_root->left)
991 resolve_common_blocks (common_root->left);
992 if (common_root->right)
993 resolve_common_blocks (common_root->right);
994
995 resolve_common_vars (common_root->n.common, true);
996
997 /* The common name is a global name - in Fortran 2003 also if it has a
998 C binding name, since Fortran 2008 only the C binding name is a global
999 identifier. */
1000 if (!common_root->n.common->binding_label
1001 || gfc_notification_std (GFC_STD_F2008))
1002 {
1003 gsym = gfc_find_gsymbol (gfc_gsym_root,
1004 common_root->n.common->name);
1005
1006 if (gsym && gfc_notification_std (GFC_STD_F2008)
1007 && gsym->type == GSYM_COMMON
1008 && ((common_root->n.common->binding_label
1009 && (!gsym->binding_label
1010 || strcmp (common_root->n.common->binding_label,
1011 gsym->binding_label) != 0))
1012 || (!common_root->n.common->binding_label
1013 && gsym->binding_label)))
1014 {
1015 gfc_error ("In Fortran 2003 COMMON %qs block at %L is a global "
1016 "identifier and must thus have the same binding name "
1017 "as the same-named COMMON block at %L: %s vs %s",
1018 common_root->n.common->name, &common_root->n.common->where,
1019 &gsym->where,
1020 common_root->n.common->binding_label
1021 ? common_root->n.common->binding_label : "(blank)",
1022 gsym->binding_label ? gsym->binding_label : "(blank)");
1023 return;
1024 }
1025
1026 if (gsym && gsym->type != GSYM_COMMON
1027 && !common_root->n.common->binding_label)
1028 {
1029 gfc_error ("COMMON block %qs at %L uses the same global identifier "
1030 "as entity at %L",
1031 common_root->n.common->name, &common_root->n.common->where,
1032 &gsym->where);
1033 return;
1034 }
1035 if (gsym && gsym->type != GSYM_COMMON)
1036 {
1037 gfc_error ("Fortran 2008: COMMON block %qs with binding label at "
1038 "%L sharing the identifier with global non-COMMON-block "
1039 "entity at %L", common_root->n.common->name,
1040 &common_root->n.common->where, &gsym->where);
1041 return;
1042 }
1043 if (!gsym)
1044 {
1045 gsym = gfc_get_gsymbol (common_root->n.common->name);
1046 gsym->type = GSYM_COMMON;
1047 gsym->where = common_root->n.common->where;
1048 gsym->defined = 1;
1049 }
1050 gsym->used = 1;
1051 }
1052
1053 if (common_root->n.common->binding_label)
1054 {
1055 gsym = gfc_find_gsymbol (gfc_gsym_root,
1056 common_root->n.common->binding_label);
1057 if (gsym && gsym->type != GSYM_COMMON)
1058 {
1059 gfc_error ("COMMON block at %L with binding label %qs uses the same "
1060 "global identifier as entity at %L",
1061 &common_root->n.common->where,
1062 common_root->n.common->binding_label, &gsym->where);
1063 return;
1064 }
1065 if (!gsym)
1066 {
1067 gsym = gfc_get_gsymbol (common_root->n.common->binding_label);
1068 gsym->type = GSYM_COMMON;
1069 gsym->where = common_root->n.common->where;
1070 gsym->defined = 1;
1071 }
1072 gsym->used = 1;
1073 }
1074
1075 gfc_find_symbol (common_root->name, gfc_current_ns, 0, &sym);
1076 if (sym == NULL)
1077 return;
1078
1079 if (sym->attr.flavor == FL_PARAMETER)
1080 gfc_error ("COMMON block %qs at %L is used as PARAMETER at %L",
1081 sym->name, &common_root->n.common->where, &sym->declared_at);
1082
1083 if (sym->attr.external)
1084 gfc_error ("COMMON block %qs at %L can not have the EXTERNAL attribute",
1085 sym->name, &common_root->n.common->where);
1086
1087 if (sym->attr.intrinsic)
1088 gfc_error ("COMMON block %qs at %L is also an intrinsic procedure",
1089 sym->name, &common_root->n.common->where);
1090 else if (sym->attr.result
1091 || gfc_is_function_return_value (sym, gfc_current_ns))
1092 gfc_notify_std (GFC_STD_F2003, "COMMON block %qs at %L "
1093 "that is also a function result", sym->name,
1094 &common_root->n.common->where);
1095 else if (sym->attr.flavor == FL_PROCEDURE && sym->attr.proc != PROC_INTERNAL
1096 && sym->attr.proc != PROC_ST_FUNCTION)
1097 gfc_notify_std (GFC_STD_F2003, "COMMON block %qs at %L "
1098 "that is also a global procedure", sym->name,
1099 &common_root->n.common->where);
1100 }
1101
1102
1103 /* Resolve contained function types. Because contained functions can call one
1104 another, they have to be worked out before any of the contained procedures
1105 can be resolved.
1106
1107 The good news is that if a function doesn't already have a type, the only
1108 way it can get one is through an IMPLICIT type or a RESULT variable, because
1109 by definition contained functions are contained namespace they're contained
1110 in, not in a sibling or parent namespace. */
1111
1112 static void
1113 resolve_contained_functions (gfc_namespace *ns)
1114 {
1115 gfc_namespace *child;
1116 gfc_entry_list *el;
1117
1118 resolve_formal_arglists (ns);
1119
1120 for (child = ns->contained; child; child = child->sibling)
1121 {
1122 /* Resolve alternate entry points first. */
1123 resolve_entries (child);
1124
1125 /* Then check function return types. */
1126 resolve_contained_fntype (child->proc_name, child);
1127 for (el = child->entries; el; el = el->next)
1128 resolve_contained_fntype (el->sym, child);
1129 }
1130 }
1131
1132
1133
1134 /* A Parameterized Derived Type constructor must contain values for
1135 the PDT KIND parameters or they must have a default initializer.
1136 Go through the constructor picking out the KIND expressions,
1137 storing them in 'param_list' and then call gfc_get_pdt_instance
1138 to obtain the PDT instance. */
1139
1140 static gfc_actual_arglist *param_list, *param_tail, *param;
1141
1142 static bool
1143 get_pdt_spec_expr (gfc_component *c, gfc_expr *expr)
1144 {
1145 param = gfc_get_actual_arglist ();
1146 if (!param_list)
1147 param_list = param_tail = param;
1148 else
1149 {
1150 param_tail->next = param;
1151 param_tail = param_tail->next;
1152 }
1153
1154 param_tail->name = c->name;
1155 if (expr)
1156 param_tail->expr = gfc_copy_expr (expr);
1157 else if (c->initializer)
1158 param_tail->expr = gfc_copy_expr (c->initializer);
1159 else
1160 {
1161 param_tail->spec_type = SPEC_ASSUMED;
1162 if (c->attr.pdt_kind)
1163 {
1164 gfc_error ("The KIND parameter %qs in the PDT constructor "
1165 "at %C has no value", param->name);
1166 return false;
1167 }
1168 }
1169
1170 return true;
1171 }
1172
1173 static bool
1174 get_pdt_constructor (gfc_expr *expr, gfc_constructor **constr,
1175 gfc_symbol *derived)
1176 {
1177 gfc_constructor *cons = NULL;
1178 gfc_component *comp;
1179 bool t = true;
1180
1181 if (expr && expr->expr_type == EXPR_STRUCTURE)
1182 cons = gfc_constructor_first (expr->value.constructor);
1183 else if (constr)
1184 cons = *constr;
1185 gcc_assert (cons);
1186
1187 comp = derived->components;
1188
1189 for (; comp && cons; comp = comp->next, cons = gfc_constructor_next (cons))
1190 {
1191 if (cons->expr
1192 && cons->expr->expr_type == EXPR_STRUCTURE
1193 && comp->ts.type == BT_DERIVED)
1194 {
1195 t = get_pdt_constructor (cons->expr, NULL, comp->ts.u.derived);
1196 if (!t)
1197 return t;
1198 }
1199 else if (comp->ts.type == BT_DERIVED)
1200 {
1201 t = get_pdt_constructor (NULL, &cons, comp->ts.u.derived);
1202 if (!t)
1203 return t;
1204 }
1205 else if ((comp->attr.pdt_kind || comp->attr.pdt_len)
1206 && derived->attr.pdt_template)
1207 {
1208 t = get_pdt_spec_expr (comp, cons->expr);
1209 if (!t)
1210 return t;
1211 }
1212 }
1213 return t;
1214 }
1215
1216
1217 static bool resolve_fl_derived0 (gfc_symbol *sym);
1218 static bool resolve_fl_struct (gfc_symbol *sym);
1219
1220
1221 /* Resolve all of the elements of a structure constructor and make sure that
1222 the types are correct. The 'init' flag indicates that the given
1223 constructor is an initializer. */
1224
1225 static bool
1226 resolve_structure_cons (gfc_expr *expr, int init)
1227 {
1228 gfc_constructor *cons;
1229 gfc_component *comp;
1230 bool t;
1231 symbol_attribute a;
1232
1233 t = true;
1234
1235 if (expr->ts.type == BT_DERIVED || expr->ts.type == BT_UNION)
1236 {
1237 if (expr->ts.u.derived->attr.flavor == FL_DERIVED)
1238 resolve_fl_derived0 (expr->ts.u.derived);
1239 else
1240 resolve_fl_struct (expr->ts.u.derived);
1241
1242 /* If this is a Parameterized Derived Type template, find the
1243 instance corresponding to the PDT kind parameters. */
1244 if (expr->ts.u.derived->attr.pdt_template)
1245 {
1246 param_list = NULL;
1247 t = get_pdt_constructor (expr, NULL, expr->ts.u.derived);
1248 if (!t)
1249 return t;
1250 gfc_get_pdt_instance (param_list, &expr->ts.u.derived, NULL);
1251
1252 expr->param_list = gfc_copy_actual_arglist (param_list);
1253
1254 if (param_list)
1255 gfc_free_actual_arglist (param_list);
1256
1257 if (!expr->ts.u.derived->attr.pdt_type)
1258 return false;
1259 }
1260 }
1261
1262 cons = gfc_constructor_first (expr->value.constructor);
1263
1264 /* A constructor may have references if it is the result of substituting a
1265 parameter variable. In this case we just pull out the component we
1266 want. */
1267 if (expr->ref)
1268 comp = expr->ref->u.c.sym->components;
1269 else
1270 comp = expr->ts.u.derived->components;
1271
1272 for (; comp && cons; comp = comp->next, cons = gfc_constructor_next (cons))
1273 {
1274 int rank;
1275
1276 if (!cons->expr)
1277 continue;
1278
1279 /* Unions use an EXPR_NULL contrived expression to tell the translation
1280 phase to generate an initializer of the appropriate length.
1281 Ignore it here. */
1282 if (cons->expr->ts.type == BT_UNION && cons->expr->expr_type == EXPR_NULL)
1283 continue;
1284
1285 if (!gfc_resolve_expr (cons->expr))
1286 {
1287 t = false;
1288 continue;
1289 }
1290
1291 rank = comp->as ? comp->as->rank : 0;
1292 if (comp->ts.type == BT_CLASS && CLASS_DATA (comp)->as)
1293 rank = CLASS_DATA (comp)->as->rank;
1294
1295 if (cons->expr->expr_type != EXPR_NULL && rank != cons->expr->rank
1296 && (comp->attr.allocatable || cons->expr->rank))
1297 {
1298 gfc_error ("The rank of the element in the structure "
1299 "constructor at %L does not match that of the "
1300 "component (%d/%d)", &cons->expr->where,
1301 cons->expr->rank, rank);
1302 t = false;
1303 }
1304
1305 /* If we don't have the right type, try to convert it. */
1306
1307 if (!comp->attr.proc_pointer &&
1308 !gfc_compare_types (&cons->expr->ts, &comp->ts))
1309 {
1310 if (strcmp (comp->name, "_extends") == 0)
1311 {
1312 /* Can afford to be brutal with the _extends initializer.
1313 The derived type can get lost because it is PRIVATE
1314 but it is not usage constrained by the standard. */
1315 cons->expr->ts = comp->ts;
1316 }
1317 else if (comp->attr.pointer && cons->expr->ts.type != BT_UNKNOWN)
1318 {
1319 gfc_error ("The element in the structure constructor at %L, "
1320 "for pointer component %qs, is %s but should be %s",
1321 &cons->expr->where, comp->name,
1322 gfc_basic_typename (cons->expr->ts.type),
1323 gfc_basic_typename (comp->ts.type));
1324 t = false;
1325 }
1326 else
1327 {
1328 bool t2 = gfc_convert_type (cons->expr, &comp->ts, 1);
1329 if (t)
1330 t = t2;
1331 }
1332 }
1333
1334 /* For strings, the length of the constructor should be the same as
1335 the one of the structure, ensure this if the lengths are known at
1336 compile time and when we are dealing with PARAMETER or structure
1337 constructors. */
1338 if (cons->expr->ts.type == BT_CHARACTER && comp->ts.u.cl
1339 && comp->ts.u.cl->length
1340 && comp->ts.u.cl->length->expr_type == EXPR_CONSTANT
1341 && cons->expr->ts.u.cl && cons->expr->ts.u.cl->length
1342 && cons->expr->ts.u.cl->length->expr_type == EXPR_CONSTANT
1343 && cons->expr->rank != 0
1344 && mpz_cmp (cons->expr->ts.u.cl->length->value.integer,
1345 comp->ts.u.cl->length->value.integer) != 0)
1346 {
1347 if (cons->expr->expr_type == EXPR_VARIABLE
1348 && cons->expr->symtree->n.sym->attr.flavor == FL_PARAMETER)
1349 {
1350 /* Wrap the parameter in an array constructor (EXPR_ARRAY)
1351 to make use of the gfc_resolve_character_array_constructor
1352 machinery. The expression is later simplified away to
1353 an array of string literals. */
1354 gfc_expr *para = cons->expr;
1355 cons->expr = gfc_get_expr ();
1356 cons->expr->ts = para->ts;
1357 cons->expr->where = para->where;
1358 cons->expr->expr_type = EXPR_ARRAY;
1359 cons->expr->rank = para->rank;
1360 cons->expr->shape = gfc_copy_shape (para->shape, para->rank);
1361 gfc_constructor_append_expr (&cons->expr->value.constructor,
1362 para, &cons->expr->where);
1363 }
1364
1365 if (cons->expr->expr_type == EXPR_ARRAY)
1366 {
1367 /* Rely on the cleanup of the namespace to deal correctly with
1368 the old charlen. (There was a block here that attempted to
1369 remove the charlen but broke the chain in so doing.) */
1370 cons->expr->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
1371 cons->expr->ts.u.cl->length_from_typespec = true;
1372 cons->expr->ts.u.cl->length = gfc_copy_expr (comp->ts.u.cl->length);
1373 gfc_resolve_character_array_constructor (cons->expr);
1374 }
1375 }
1376
1377 if (cons->expr->expr_type == EXPR_NULL
1378 && !(comp->attr.pointer || comp->attr.allocatable
1379 || comp->attr.proc_pointer || comp->ts.f90_type == BT_VOID
1380 || (comp->ts.type == BT_CLASS
1381 && (CLASS_DATA (comp)->attr.class_pointer
1382 || CLASS_DATA (comp)->attr.allocatable))))
1383 {
1384 t = false;
1385 gfc_error ("The NULL in the structure constructor at %L is "
1386 "being applied to component %qs, which is neither "
1387 "a POINTER nor ALLOCATABLE", &cons->expr->where,
1388 comp->name);
1389 }
1390
1391 if (comp->attr.proc_pointer && comp->ts.interface)
1392 {
1393 /* Check procedure pointer interface. */
1394 gfc_symbol *s2 = NULL;
1395 gfc_component *c2;
1396 const char *name;
1397 char err[200];
1398
1399 c2 = gfc_get_proc_ptr_comp (cons->expr);
1400 if (c2)
1401 {
1402 s2 = c2->ts.interface;
1403 name = c2->name;
1404 }
1405 else if (cons->expr->expr_type == EXPR_FUNCTION)
1406 {
1407 s2 = cons->expr->symtree->n.sym->result;
1408 name = cons->expr->symtree->n.sym->result->name;
1409 }
1410 else if (cons->expr->expr_type != EXPR_NULL)
1411 {
1412 s2 = cons->expr->symtree->n.sym;
1413 name = cons->expr->symtree->n.sym->name;
1414 }
1415
1416 if (s2 && !gfc_compare_interfaces (comp->ts.interface, s2, name, 0, 1,
1417 err, sizeof (err), NULL, NULL))
1418 {
1419 gfc_error_opt (OPT_Wargument_mismatch,
1420 "Interface mismatch for procedure-pointer "
1421 "component %qs in structure constructor at %L:"
1422 " %s", comp->name, &cons->expr->where, err);
1423 return false;
1424 }
1425 }
1426
1427 if (!comp->attr.pointer || comp->attr.proc_pointer
1428 || cons->expr->expr_type == EXPR_NULL)
1429 continue;
1430
1431 a = gfc_expr_attr (cons->expr);
1432
1433 if (!a.pointer && !a.target)
1434 {
1435 t = false;
1436 gfc_error ("The element in the structure constructor at %L, "
1437 "for pointer component %qs should be a POINTER or "
1438 "a TARGET", &cons->expr->where, comp->name);
1439 }
1440
1441 if (init)
1442 {
1443 /* F08:C461. Additional checks for pointer initialization. */
1444 if (a.allocatable)
1445 {
1446 t = false;
1447 gfc_error ("Pointer initialization target at %L "
1448 "must not be ALLOCATABLE", &cons->expr->where);
1449 }
1450 if (!a.save)
1451 {
1452 t = false;
1453 gfc_error ("Pointer initialization target at %L "
1454 "must have the SAVE attribute", &cons->expr->where);
1455 }
1456 }
1457
1458 /* F2003, C1272 (3). */
1459 bool impure = cons->expr->expr_type == EXPR_VARIABLE
1460 && (gfc_impure_variable (cons->expr->symtree->n.sym)
1461 || gfc_is_coindexed (cons->expr));
1462 if (impure && gfc_pure (NULL))
1463 {
1464 t = false;
1465 gfc_error ("Invalid expression in the structure constructor for "
1466 "pointer component %qs at %L in PURE procedure",
1467 comp->name, &cons->expr->where);
1468 }
1469
1470 if (impure)
1471 gfc_unset_implicit_pure (NULL);
1472 }
1473
1474 return t;
1475 }
1476
1477
1478 /****************** Expression name resolution ******************/
1479
1480 /* Returns 0 if a symbol was not declared with a type or
1481 attribute declaration statement, nonzero otherwise. */
1482
1483 static int
1484 was_declared (gfc_symbol *sym)
1485 {
1486 symbol_attribute a;
1487
1488 a = sym->attr;
1489
1490 if (!a.implicit_type && sym->ts.type != BT_UNKNOWN)
1491 return 1;
1492
1493 if (a.allocatable || a.dimension || a.dummy || a.external || a.intrinsic
1494 || a.optional || a.pointer || a.save || a.target || a.volatile_
1495 || a.value || a.access != ACCESS_UNKNOWN || a.intent != INTENT_UNKNOWN
1496 || a.asynchronous || a.codimension)
1497 return 1;
1498
1499 return 0;
1500 }
1501
1502
1503 /* Determine if a symbol is generic or not. */
1504
1505 static int
1506 generic_sym (gfc_symbol *sym)
1507 {
1508 gfc_symbol *s;
1509
1510 if (sym->attr.generic ||
1511 (sym->attr.intrinsic && gfc_generic_intrinsic (sym->name)))
1512 return 1;
1513
1514 if (was_declared (sym) || sym->ns->parent == NULL)
1515 return 0;
1516
1517 gfc_find_symbol (sym->name, sym->ns->parent, 1, &s);
1518
1519 if (s != NULL)
1520 {
1521 if (s == sym)
1522 return 0;
1523 else
1524 return generic_sym (s);
1525 }
1526
1527 return 0;
1528 }
1529
1530
1531 /* Determine if a symbol is specific or not. */
1532
1533 static int
1534 specific_sym (gfc_symbol *sym)
1535 {
1536 gfc_symbol *s;
1537
1538 if (sym->attr.if_source == IFSRC_IFBODY
1539 || sym->attr.proc == PROC_MODULE
1540 || sym->attr.proc == PROC_INTERNAL
1541 || sym->attr.proc == PROC_ST_FUNCTION
1542 || (sym->attr.intrinsic && gfc_specific_intrinsic (sym->name))
1543 || sym->attr.external)
1544 return 1;
1545
1546 if (was_declared (sym) || sym->ns->parent == NULL)
1547 return 0;
1548
1549 gfc_find_symbol (sym->name, sym->ns->parent, 1, &s);
1550
1551 return (s == NULL) ? 0 : specific_sym (s);
1552 }
1553
1554
1555 /* Figure out if the procedure is specific, generic or unknown. */
1556
1557 enum proc_type
1558 { PTYPE_GENERIC = 1, PTYPE_SPECIFIC, PTYPE_UNKNOWN };
1559
1560 static proc_type
1561 procedure_kind (gfc_symbol *sym)
1562 {
1563 if (generic_sym (sym))
1564 return PTYPE_GENERIC;
1565
1566 if (specific_sym (sym))
1567 return PTYPE_SPECIFIC;
1568
1569 return PTYPE_UNKNOWN;
1570 }
1571
1572 /* Check references to assumed size arrays. The flag need_full_assumed_size
1573 is nonzero when matching actual arguments. */
1574
1575 static int need_full_assumed_size = 0;
1576
1577 static bool
1578 check_assumed_size_reference (gfc_symbol *sym, gfc_expr *e)
1579 {
1580 if (need_full_assumed_size || !(sym->as && sym->as->type == AS_ASSUMED_SIZE))
1581 return false;
1582
1583 /* FIXME: The comparison "e->ref->u.ar.type == AR_FULL" is wrong.
1584 What should it be? */
1585 if (e->ref && (e->ref->u.ar.end[e->ref->u.ar.as->rank - 1] == NULL)
1586 && (e->ref->u.ar.as->type == AS_ASSUMED_SIZE)
1587 && (e->ref->u.ar.type == AR_FULL))
1588 {
1589 gfc_error ("The upper bound in the last dimension must "
1590 "appear in the reference to the assumed size "
1591 "array %qs at %L", sym->name, &e->where);
1592 return true;
1593 }
1594 return false;
1595 }
1596
1597
1598 /* Look for bad assumed size array references in argument expressions
1599 of elemental and array valued intrinsic procedures. Since this is
1600 called from procedure resolution functions, it only recurses at
1601 operators. */
1602
1603 static bool
1604 resolve_assumed_size_actual (gfc_expr *e)
1605 {
1606 if (e == NULL)
1607 return false;
1608
1609 switch (e->expr_type)
1610 {
1611 case EXPR_VARIABLE:
1612 if (e->symtree && check_assumed_size_reference (e->symtree->n.sym, e))
1613 return true;
1614 break;
1615
1616 case EXPR_OP:
1617 if (resolve_assumed_size_actual (e->value.op.op1)
1618 || resolve_assumed_size_actual (e->value.op.op2))
1619 return true;
1620 break;
1621
1622 default:
1623 break;
1624 }
1625 return false;
1626 }
1627
1628
1629 /* Check a generic procedure, passed as an actual argument, to see if
1630 there is a matching specific name. If none, it is an error, and if
1631 more than one, the reference is ambiguous. */
1632 static int
1633 count_specific_procs (gfc_expr *e)
1634 {
1635 int n;
1636 gfc_interface *p;
1637 gfc_symbol *sym;
1638
1639 n = 0;
1640 sym = e->symtree->n.sym;
1641
1642 for (p = sym->generic; p; p = p->next)
1643 if (strcmp (sym->name, p->sym->name) == 0)
1644 {
1645 e->symtree = gfc_find_symtree (p->sym->ns->sym_root,
1646 sym->name);
1647 n++;
1648 }
1649
1650 if (n > 1)
1651 gfc_error ("%qs at %L is ambiguous", e->symtree->n.sym->name,
1652 &e->where);
1653
1654 if (n == 0)
1655 gfc_error ("GENERIC procedure %qs is not allowed as an actual "
1656 "argument at %L", sym->name, &e->where);
1657
1658 return n;
1659 }
1660
1661
1662 /* See if a call to sym could possibly be a not allowed RECURSION because of
1663 a missing RECURSIVE declaration. This means that either sym is the current
1664 context itself, or sym is the parent of a contained procedure calling its
1665 non-RECURSIVE containing procedure.
1666 This also works if sym is an ENTRY. */
1667
1668 static bool
1669 is_illegal_recursion (gfc_symbol* sym, gfc_namespace* context)
1670 {
1671 gfc_symbol* proc_sym;
1672 gfc_symbol* context_proc;
1673 gfc_namespace* real_context;
1674
1675 if (sym->attr.flavor == FL_PROGRAM
1676 || gfc_fl_struct (sym->attr.flavor))
1677 return false;
1678
1679 gcc_assert (sym->attr.flavor == FL_PROCEDURE);
1680
1681 /* If we've got an ENTRY, find real procedure. */
1682 if (sym->attr.entry && sym->ns->entries)
1683 proc_sym = sym->ns->entries->sym;
1684 else
1685 proc_sym = sym;
1686
1687 /* If sym is RECURSIVE, all is well of course. */
1688 if (proc_sym->attr.recursive || flag_recursive)
1689 return false;
1690
1691 /* Find the context procedure's "real" symbol if it has entries.
1692 We look for a procedure symbol, so recurse on the parents if we don't
1693 find one (like in case of a BLOCK construct). */
1694 for (real_context = context; ; real_context = real_context->parent)
1695 {
1696 /* We should find something, eventually! */
1697 gcc_assert (real_context);
1698
1699 context_proc = (real_context->entries ? real_context->entries->sym
1700 : real_context->proc_name);
1701
1702 /* In some special cases, there may not be a proc_name, like for this
1703 invalid code:
1704 real(bad_kind()) function foo () ...
1705 when checking the call to bad_kind ().
1706 In these cases, we simply return here and assume that the
1707 call is ok. */
1708 if (!context_proc)
1709 return false;
1710
1711 if (context_proc->attr.flavor != FL_LABEL)
1712 break;
1713 }
1714
1715 /* A call from sym's body to itself is recursion, of course. */
1716 if (context_proc == proc_sym)
1717 return true;
1718
1719 /* The same is true if context is a contained procedure and sym the
1720 containing one. */
1721 if (context_proc->attr.contained)
1722 {
1723 gfc_symbol* parent_proc;
1724
1725 gcc_assert (context->parent);
1726 parent_proc = (context->parent->entries ? context->parent->entries->sym
1727 : context->parent->proc_name);
1728
1729 if (parent_proc == proc_sym)
1730 return true;
1731 }
1732
1733 return false;
1734 }
1735
1736
1737 /* Resolve an intrinsic procedure: Set its function/subroutine attribute,
1738 its typespec and formal argument list. */
1739
1740 bool
1741 gfc_resolve_intrinsic (gfc_symbol *sym, locus *loc)
1742 {
1743 gfc_intrinsic_sym* isym = NULL;
1744 const char* symstd;
1745
1746 if (sym->formal)
1747 return true;
1748
1749 /* Already resolved. */
1750 if (sym->from_intmod && sym->ts.type != BT_UNKNOWN)
1751 return true;
1752
1753 /* We already know this one is an intrinsic, so we don't call
1754 gfc_is_intrinsic for full checking but rather use gfc_find_function and
1755 gfc_find_subroutine directly to check whether it is a function or
1756 subroutine. */
1757
1758 if (sym->intmod_sym_id && sym->attr.subroutine)
1759 {
1760 gfc_isym_id id = gfc_isym_id_by_intmod_sym (sym);
1761 isym = gfc_intrinsic_subroutine_by_id (id);
1762 }
1763 else if (sym->intmod_sym_id)
1764 {
1765 gfc_isym_id id = gfc_isym_id_by_intmod_sym (sym);
1766 isym = gfc_intrinsic_function_by_id (id);
1767 }
1768 else if (!sym->attr.subroutine)
1769 isym = gfc_find_function (sym->name);
1770
1771 if (isym && !sym->attr.subroutine)
1772 {
1773 if (sym->ts.type != BT_UNKNOWN && warn_surprising
1774 && !sym->attr.implicit_type)
1775 gfc_warning (OPT_Wsurprising,
1776 "Type specified for intrinsic function %qs at %L is"
1777 " ignored", sym->name, &sym->declared_at);
1778
1779 if (!sym->attr.function &&
1780 !gfc_add_function(&sym->attr, sym->name, loc))
1781 return false;
1782
1783 sym->ts = isym->ts;
1784 }
1785 else if (isym || (isym = gfc_find_subroutine (sym->name)))
1786 {
1787 if (sym->ts.type != BT_UNKNOWN && !sym->attr.implicit_type)
1788 {
1789 gfc_error ("Intrinsic subroutine %qs at %L shall not have a type"
1790 " specifier", sym->name, &sym->declared_at);
1791 return false;
1792 }
1793
1794 if (!sym->attr.subroutine &&
1795 !gfc_add_subroutine(&sym->attr, sym->name, loc))
1796 return false;
1797 }
1798 else
1799 {
1800 gfc_error ("%qs declared INTRINSIC at %L does not exist", sym->name,
1801 &sym->declared_at);
1802 return false;
1803 }
1804
1805 gfc_copy_formal_args_intr (sym, isym, NULL);
1806
1807 sym->attr.pure = isym->pure;
1808 sym->attr.elemental = isym->elemental;
1809
1810 /* Check it is actually available in the standard settings. */
1811 if (!gfc_check_intrinsic_standard (isym, &symstd, false, sym->declared_at))
1812 {
1813 gfc_error ("The intrinsic %qs declared INTRINSIC at %L is not "
1814 "available in the current standard settings but %s. Use "
1815 "an appropriate %<-std=*%> option or enable "
1816 "%<-fall-intrinsics%> in order to use it.",
1817 sym->name, &sym->declared_at, symstd);
1818 return false;
1819 }
1820
1821 return true;
1822 }
1823
1824
1825 /* Resolve a procedure expression, like passing it to a called procedure or as
1826 RHS for a procedure pointer assignment. */
1827
1828 static bool
1829 resolve_procedure_expression (gfc_expr* expr)
1830 {
1831 gfc_symbol* sym;
1832
1833 if (expr->expr_type != EXPR_VARIABLE)
1834 return true;
1835 gcc_assert (expr->symtree);
1836
1837 sym = expr->symtree->n.sym;
1838
1839 if (sym->attr.intrinsic)
1840 gfc_resolve_intrinsic (sym, &expr->where);
1841
1842 if (sym->attr.flavor != FL_PROCEDURE
1843 || (sym->attr.function && sym->result == sym))
1844 return true;
1845
1846 /* A non-RECURSIVE procedure that is used as procedure expression within its
1847 own body is in danger of being called recursively. */
1848 if (is_illegal_recursion (sym, gfc_current_ns))
1849 gfc_warning (0, "Non-RECURSIVE procedure %qs at %L is possibly calling"
1850 " itself recursively. Declare it RECURSIVE or use"
1851 " %<-frecursive%>", sym->name, &expr->where);
1852
1853 return true;
1854 }
1855
1856
1857 /* Resolve an actual argument list. Most of the time, this is just
1858 resolving the expressions in the list.
1859 The exception is that we sometimes have to decide whether arguments
1860 that look like procedure arguments are really simple variable
1861 references. */
1862
1863 static bool
1864 resolve_actual_arglist (gfc_actual_arglist *arg, procedure_type ptype,
1865 bool no_formal_args)
1866 {
1867 gfc_symbol *sym;
1868 gfc_symtree *parent_st;
1869 gfc_expr *e;
1870 gfc_component *comp;
1871 int save_need_full_assumed_size;
1872 bool return_value = false;
1873 bool actual_arg_sav = actual_arg, first_actual_arg_sav = first_actual_arg;
1874
1875 actual_arg = true;
1876 first_actual_arg = true;
1877
1878 for (; arg; arg = arg->next)
1879 {
1880 e = arg->expr;
1881 if (e == NULL)
1882 {
1883 /* Check the label is a valid branching target. */
1884 if (arg->label)
1885 {
1886 if (arg->label->defined == ST_LABEL_UNKNOWN)
1887 {
1888 gfc_error ("Label %d referenced at %L is never defined",
1889 arg->label->value, &arg->label->where);
1890 goto cleanup;
1891 }
1892 }
1893 first_actual_arg = false;
1894 continue;
1895 }
1896
1897 if (e->expr_type == EXPR_VARIABLE
1898 && e->symtree->n.sym->attr.generic
1899 && no_formal_args
1900 && count_specific_procs (e) != 1)
1901 goto cleanup;
1902
1903 if (e->ts.type != BT_PROCEDURE)
1904 {
1905 save_need_full_assumed_size = need_full_assumed_size;
1906 if (e->expr_type != EXPR_VARIABLE)
1907 need_full_assumed_size = 0;
1908 if (!gfc_resolve_expr (e))
1909 goto cleanup;
1910 need_full_assumed_size = save_need_full_assumed_size;
1911 goto argument_list;
1912 }
1913
1914 /* See if the expression node should really be a variable reference. */
1915
1916 sym = e->symtree->n.sym;
1917
1918 if (sym->attr.flavor == FL_PROCEDURE
1919 || sym->attr.intrinsic
1920 || sym->attr.external)
1921 {
1922 int actual_ok;
1923
1924 /* If a procedure is not already determined to be something else
1925 check if it is intrinsic. */
1926 if (gfc_is_intrinsic (sym, sym->attr.subroutine, e->where))
1927 sym->attr.intrinsic = 1;
1928
1929 if (sym->attr.proc == PROC_ST_FUNCTION)
1930 {
1931 gfc_error ("Statement function %qs at %L is not allowed as an "
1932 "actual argument", sym->name, &e->where);
1933 }
1934
1935 actual_ok = gfc_intrinsic_actual_ok (sym->name,
1936 sym->attr.subroutine);
1937 if (sym->attr.intrinsic && actual_ok == 0)
1938 {
1939 gfc_error ("Intrinsic %qs at %L is not allowed as an "
1940 "actual argument", sym->name, &e->where);
1941 }
1942
1943 if (sym->attr.contained && !sym->attr.use_assoc
1944 && sym->ns->proc_name->attr.flavor != FL_MODULE)
1945 {
1946 if (!gfc_notify_std (GFC_STD_F2008, "Internal procedure %qs is"
1947 " used as actual argument at %L",
1948 sym->name, &e->where))
1949 goto cleanup;
1950 }
1951
1952 if (sym->attr.elemental && !sym->attr.intrinsic)
1953 {
1954 gfc_error ("ELEMENTAL non-INTRINSIC procedure %qs is not "
1955 "allowed as an actual argument at %L", sym->name,
1956 &e->where);
1957 }
1958
1959 /* Check if a generic interface has a specific procedure
1960 with the same name before emitting an error. */
1961 if (sym->attr.generic && count_specific_procs (e) != 1)
1962 goto cleanup;
1963
1964 /* Just in case a specific was found for the expression. */
1965 sym = e->symtree->n.sym;
1966
1967 /* If the symbol is the function that names the current (or
1968 parent) scope, then we really have a variable reference. */
1969
1970 if (gfc_is_function_return_value (sym, sym->ns))
1971 goto got_variable;
1972
1973 /* If all else fails, see if we have a specific intrinsic. */
1974 if (sym->ts.type == BT_UNKNOWN && sym->attr.intrinsic)
1975 {
1976 gfc_intrinsic_sym *isym;
1977
1978 isym = gfc_find_function (sym->name);
1979 if (isym == NULL || !isym->specific)
1980 {
1981 gfc_error ("Unable to find a specific INTRINSIC procedure "
1982 "for the reference %qs at %L", sym->name,
1983 &e->where);
1984 goto cleanup;
1985 }
1986 sym->ts = isym->ts;
1987 sym->attr.intrinsic = 1;
1988 sym->attr.function = 1;
1989 }
1990
1991 if (!gfc_resolve_expr (e))
1992 goto cleanup;
1993 goto argument_list;
1994 }
1995
1996 /* See if the name is a module procedure in a parent unit. */
1997
1998 if (was_declared (sym) || sym->ns->parent == NULL)
1999 goto got_variable;
2000
2001 if (gfc_find_sym_tree (sym->name, sym->ns->parent, 1, &parent_st))
2002 {
2003 gfc_error ("Symbol %qs at %L is ambiguous", sym->name, &e->where);
2004 goto cleanup;
2005 }
2006
2007 if (parent_st == NULL)
2008 goto got_variable;
2009
2010 sym = parent_st->n.sym;
2011 e->symtree = parent_st; /* Point to the right thing. */
2012
2013 if (sym->attr.flavor == FL_PROCEDURE
2014 || sym->attr.intrinsic
2015 || sym->attr.external)
2016 {
2017 if (!gfc_resolve_expr (e))
2018 goto cleanup;
2019 goto argument_list;
2020 }
2021
2022 got_variable:
2023 e->expr_type = EXPR_VARIABLE;
2024 e->ts = sym->ts;
2025 if ((sym->as != NULL && sym->ts.type != BT_CLASS)
2026 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
2027 && CLASS_DATA (sym)->as))
2028 {
2029 e->rank = sym->ts.type == BT_CLASS
2030 ? CLASS_DATA (sym)->as->rank : sym->as->rank;
2031 e->ref = gfc_get_ref ();
2032 e->ref->type = REF_ARRAY;
2033 e->ref->u.ar.type = AR_FULL;
2034 e->ref->u.ar.as = sym->ts.type == BT_CLASS
2035 ? CLASS_DATA (sym)->as : sym->as;
2036 }
2037
2038 /* Expressions are assigned a default ts.type of BT_PROCEDURE in
2039 primary.c (match_actual_arg). If above code determines that it
2040 is a variable instead, it needs to be resolved as it was not
2041 done at the beginning of this function. */
2042 save_need_full_assumed_size = need_full_assumed_size;
2043 if (e->expr_type != EXPR_VARIABLE)
2044 need_full_assumed_size = 0;
2045 if (!gfc_resolve_expr (e))
2046 goto cleanup;
2047 need_full_assumed_size = save_need_full_assumed_size;
2048
2049 argument_list:
2050 /* Check argument list functions %VAL, %LOC and %REF. There is
2051 nothing to do for %REF. */
2052 if (arg->name && arg->name[0] == '%')
2053 {
2054 if (strncmp ("%VAL", arg->name, 4) == 0)
2055 {
2056 if (e->ts.type == BT_CHARACTER || e->ts.type == BT_DERIVED)
2057 {
2058 gfc_error ("By-value argument at %L is not of numeric "
2059 "type", &e->where);
2060 goto cleanup;
2061 }
2062
2063 if (e->rank)
2064 {
2065 gfc_error ("By-value argument at %L cannot be an array or "
2066 "an array section", &e->where);
2067 goto cleanup;
2068 }
2069
2070 /* Intrinsics are still PROC_UNKNOWN here. However,
2071 since same file external procedures are not resolvable
2072 in gfortran, it is a good deal easier to leave them to
2073 intrinsic.c. */
2074 if (ptype != PROC_UNKNOWN
2075 && ptype != PROC_DUMMY
2076 && ptype != PROC_EXTERNAL
2077 && ptype != PROC_MODULE)
2078 {
2079 gfc_error ("By-value argument at %L is not allowed "
2080 "in this context", &e->where);
2081 goto cleanup;
2082 }
2083 }
2084
2085 /* Statement functions have already been excluded above. */
2086 else if (strncmp ("%LOC", arg->name, 4) == 0
2087 && e->ts.type == BT_PROCEDURE)
2088 {
2089 if (e->symtree->n.sym->attr.proc == PROC_INTERNAL)
2090 {
2091 gfc_error ("Passing internal procedure at %L by location "
2092 "not allowed", &e->where);
2093 goto cleanup;
2094 }
2095 }
2096 }
2097
2098 comp = gfc_get_proc_ptr_comp(e);
2099 if (e->expr_type == EXPR_VARIABLE
2100 && comp && comp->attr.elemental)
2101 {
2102 gfc_error ("ELEMENTAL procedure pointer component %qs is not "
2103 "allowed as an actual argument at %L", comp->name,
2104 &e->where);
2105 }
2106
2107 /* Fortran 2008, C1237. */
2108 if (e->expr_type == EXPR_VARIABLE && gfc_is_coindexed (e)
2109 && gfc_has_ultimate_pointer (e))
2110 {
2111 gfc_error ("Coindexed actual argument at %L with ultimate pointer "
2112 "component", &e->where);
2113 goto cleanup;
2114 }
2115
2116 first_actual_arg = false;
2117 }
2118
2119 return_value = true;
2120
2121 cleanup:
2122 actual_arg = actual_arg_sav;
2123 first_actual_arg = first_actual_arg_sav;
2124
2125 return return_value;
2126 }
2127
2128
2129 /* Do the checks of the actual argument list that are specific to elemental
2130 procedures. If called with c == NULL, we have a function, otherwise if
2131 expr == NULL, we have a subroutine. */
2132
2133 static bool
2134 resolve_elemental_actual (gfc_expr *expr, gfc_code *c)
2135 {
2136 gfc_actual_arglist *arg0;
2137 gfc_actual_arglist *arg;
2138 gfc_symbol *esym = NULL;
2139 gfc_intrinsic_sym *isym = NULL;
2140 gfc_expr *e = NULL;
2141 gfc_intrinsic_arg *iformal = NULL;
2142 gfc_formal_arglist *eformal = NULL;
2143 bool formal_optional = false;
2144 bool set_by_optional = false;
2145 int i;
2146 int rank = 0;
2147
2148 /* Is this an elemental procedure? */
2149 if (expr && expr->value.function.actual != NULL)
2150 {
2151 if (expr->value.function.esym != NULL
2152 && expr->value.function.esym->attr.elemental)
2153 {
2154 arg0 = expr->value.function.actual;
2155 esym = expr->value.function.esym;
2156 }
2157 else if (expr->value.function.isym != NULL
2158 && expr->value.function.isym->elemental)
2159 {
2160 arg0 = expr->value.function.actual;
2161 isym = expr->value.function.isym;
2162 }
2163 else
2164 return true;
2165 }
2166 else if (c && c->ext.actual != NULL)
2167 {
2168 arg0 = c->ext.actual;
2169
2170 if (c->resolved_sym)
2171 esym = c->resolved_sym;
2172 else
2173 esym = c->symtree->n.sym;
2174 gcc_assert (esym);
2175
2176 if (!esym->attr.elemental)
2177 return true;
2178 }
2179 else
2180 return true;
2181
2182 /* The rank of an elemental is the rank of its array argument(s). */
2183 for (arg = arg0; arg; arg = arg->next)
2184 {
2185 if (arg->expr != NULL && arg->expr->rank != 0)
2186 {
2187 rank = arg->expr->rank;
2188 if (arg->expr->expr_type == EXPR_VARIABLE
2189 && arg->expr->symtree->n.sym->attr.optional)
2190 set_by_optional = true;
2191
2192 /* Function specific; set the result rank and shape. */
2193 if (expr)
2194 {
2195 expr->rank = rank;
2196 if (!expr->shape && arg->expr->shape)
2197 {
2198 expr->shape = gfc_get_shape (rank);
2199 for (i = 0; i < rank; i++)
2200 mpz_init_set (expr->shape[i], arg->expr->shape[i]);
2201 }
2202 }
2203 break;
2204 }
2205 }
2206
2207 /* If it is an array, it shall not be supplied as an actual argument
2208 to an elemental procedure unless an array of the same rank is supplied
2209 as an actual argument corresponding to a nonoptional dummy argument of
2210 that elemental procedure(12.4.1.5). */
2211 formal_optional = false;
2212 if (isym)
2213 iformal = isym->formal;
2214 else
2215 eformal = esym->formal;
2216
2217 for (arg = arg0; arg; arg = arg->next)
2218 {
2219 if (eformal)
2220 {
2221 if (eformal->sym && eformal->sym->attr.optional)
2222 formal_optional = true;
2223 eformal = eformal->next;
2224 }
2225 else if (isym && iformal)
2226 {
2227 if (iformal->optional)
2228 formal_optional = true;
2229 iformal = iformal->next;
2230 }
2231 else if (isym)
2232 formal_optional = true;
2233
2234 if (pedantic && arg->expr != NULL
2235 && arg->expr->expr_type == EXPR_VARIABLE
2236 && arg->expr->symtree->n.sym->attr.optional
2237 && formal_optional
2238 && arg->expr->rank
2239 && (set_by_optional || arg->expr->rank != rank)
2240 && !(isym && isym->id == GFC_ISYM_CONVERSION))
2241 {
2242 gfc_warning (OPT_Wpedantic,
2243 "%qs at %L is an array and OPTIONAL; IF IT IS "
2244 "MISSING, it cannot be the actual argument of an "
2245 "ELEMENTAL procedure unless there is a non-optional "
2246 "argument with the same rank (12.4.1.5)",
2247 arg->expr->symtree->n.sym->name, &arg->expr->where);
2248 }
2249 }
2250
2251 for (arg = arg0; arg; arg = arg->next)
2252 {
2253 if (arg->expr == NULL || arg->expr->rank == 0)
2254 continue;
2255
2256 /* Being elemental, the last upper bound of an assumed size array
2257 argument must be present. */
2258 if (resolve_assumed_size_actual (arg->expr))
2259 return false;
2260
2261 /* Elemental procedure's array actual arguments must conform. */
2262 if (e != NULL)
2263 {
2264 if (!gfc_check_conformance (arg->expr, e, "elemental procedure"))
2265 return false;
2266 }
2267 else
2268 e = arg->expr;
2269 }
2270
2271 /* INTENT(OUT) is only allowed for subroutines; if any actual argument
2272 is an array, the intent inout/out variable needs to be also an array. */
2273 if (rank > 0 && esym && expr == NULL)
2274 for (eformal = esym->formal, arg = arg0; arg && eformal;
2275 arg = arg->next, eformal = eformal->next)
2276 if ((eformal->sym->attr.intent == INTENT_OUT
2277 || eformal->sym->attr.intent == INTENT_INOUT)
2278 && arg->expr && arg->expr->rank == 0)
2279 {
2280 gfc_error ("Actual argument at %L for INTENT(%s) dummy %qs of "
2281 "ELEMENTAL subroutine %qs is a scalar, but another "
2282 "actual argument is an array", &arg->expr->where,
2283 (eformal->sym->attr.intent == INTENT_OUT) ? "OUT"
2284 : "INOUT", eformal->sym->name, esym->name);
2285 return false;
2286 }
2287 return true;
2288 }
2289
2290
2291 /* This function does the checking of references to global procedures
2292 as defined in sections 18.1 and 14.1, respectively, of the Fortran
2293 77 and 95 standards. It checks for a gsymbol for the name, making
2294 one if it does not already exist. If it already exists, then the
2295 reference being resolved must correspond to the type of gsymbol.
2296 Otherwise, the new symbol is equipped with the attributes of the
2297 reference. The corresponding code that is called in creating
2298 global entities is parse.c.
2299
2300 In addition, for all but -std=legacy, the gsymbols are used to
2301 check the interfaces of external procedures from the same file.
2302 The namespace of the gsymbol is resolved and then, once this is
2303 done the interface is checked. */
2304
2305
2306 static bool
2307 not_in_recursive (gfc_symbol *sym, gfc_namespace *gsym_ns)
2308 {
2309 if (!gsym_ns->proc_name->attr.recursive)
2310 return true;
2311
2312 if (sym->ns == gsym_ns)
2313 return false;
2314
2315 if (sym->ns->parent && sym->ns->parent == gsym_ns)
2316 return false;
2317
2318 return true;
2319 }
2320
2321 static bool
2322 not_entry_self_reference (gfc_symbol *sym, gfc_namespace *gsym_ns)
2323 {
2324 if (gsym_ns->entries)
2325 {
2326 gfc_entry_list *entry = gsym_ns->entries;
2327
2328 for (; entry; entry = entry->next)
2329 {
2330 if (strcmp (sym->name, entry->sym->name) == 0)
2331 {
2332 if (strcmp (gsym_ns->proc_name->name,
2333 sym->ns->proc_name->name) == 0)
2334 return false;
2335
2336 if (sym->ns->parent
2337 && strcmp (gsym_ns->proc_name->name,
2338 sym->ns->parent->proc_name->name) == 0)
2339 return false;
2340 }
2341 }
2342 }
2343 return true;
2344 }
2345
2346
2347 /* Check for the requirement of an explicit interface. F08:12.4.2.2. */
2348
2349 bool
2350 gfc_explicit_interface_required (gfc_symbol *sym, char *errmsg, int err_len)
2351 {
2352 gfc_formal_arglist *arg = gfc_sym_get_dummy_args (sym);
2353
2354 for ( ; arg; arg = arg->next)
2355 {
2356 if (!arg->sym)
2357 continue;
2358
2359 if (arg->sym->attr.allocatable) /* (2a) */
2360 {
2361 strncpy (errmsg, _("allocatable argument"), err_len);
2362 return true;
2363 }
2364 else if (arg->sym->attr.asynchronous)
2365 {
2366 strncpy (errmsg, _("asynchronous argument"), err_len);
2367 return true;
2368 }
2369 else if (arg->sym->attr.optional)
2370 {
2371 strncpy (errmsg, _("optional argument"), err_len);
2372 return true;
2373 }
2374 else if (arg->sym->attr.pointer)
2375 {
2376 strncpy (errmsg, _("pointer argument"), err_len);
2377 return true;
2378 }
2379 else if (arg->sym->attr.target)
2380 {
2381 strncpy (errmsg, _("target argument"), err_len);
2382 return true;
2383 }
2384 else if (arg->sym->attr.value)
2385 {
2386 strncpy (errmsg, _("value argument"), err_len);
2387 return true;
2388 }
2389 else if (arg->sym->attr.volatile_)
2390 {
2391 strncpy (errmsg, _("volatile argument"), err_len);
2392 return true;
2393 }
2394 else if (arg->sym->as && arg->sym->as->type == AS_ASSUMED_SHAPE) /* (2b) */
2395 {
2396 strncpy (errmsg, _("assumed-shape argument"), err_len);
2397 return true;
2398 }
2399 else if (arg->sym->as && arg->sym->as->type == AS_ASSUMED_RANK) /* TS 29113, 6.2. */
2400 {
2401 strncpy (errmsg, _("assumed-rank argument"), err_len);
2402 return true;
2403 }
2404 else if (arg->sym->attr.codimension) /* (2c) */
2405 {
2406 strncpy (errmsg, _("coarray argument"), err_len);
2407 return true;
2408 }
2409 else if (false) /* (2d) TODO: parametrized derived type */
2410 {
2411 strncpy (errmsg, _("parametrized derived type argument"), err_len);
2412 return true;
2413 }
2414 else if (arg->sym->ts.type == BT_CLASS) /* (2e) */
2415 {
2416 strncpy (errmsg, _("polymorphic argument"), err_len);
2417 return true;
2418 }
2419 else if (arg->sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
2420 {
2421 strncpy (errmsg, _("NO_ARG_CHECK attribute"), err_len);
2422 return true;
2423 }
2424 else if (arg->sym->ts.type == BT_ASSUMED)
2425 {
2426 /* As assumed-type is unlimited polymorphic (cf. above).
2427 See also TS 29113, Note 6.1. */
2428 strncpy (errmsg, _("assumed-type argument"), err_len);
2429 return true;
2430 }
2431 }
2432
2433 if (sym->attr.function)
2434 {
2435 gfc_symbol *res = sym->result ? sym->result : sym;
2436
2437 if (res->attr.dimension) /* (3a) */
2438 {
2439 strncpy (errmsg, _("array result"), err_len);
2440 return true;
2441 }
2442 else if (res->attr.pointer || res->attr.allocatable) /* (3b) */
2443 {
2444 strncpy (errmsg, _("pointer or allocatable result"), err_len);
2445 return true;
2446 }
2447 else if (res->ts.type == BT_CHARACTER && res->ts.u.cl
2448 && res->ts.u.cl->length
2449 && res->ts.u.cl->length->expr_type != EXPR_CONSTANT) /* (3c) */
2450 {
2451 strncpy (errmsg, _("result with non-constant character length"), err_len);
2452 return true;
2453 }
2454 }
2455
2456 if (sym->attr.elemental && !sym->attr.intrinsic) /* (4) */
2457 {
2458 strncpy (errmsg, _("elemental procedure"), err_len);
2459 return true;
2460 }
2461 else if (sym->attr.is_bind_c) /* (5) */
2462 {
2463 strncpy (errmsg, _("bind(c) procedure"), err_len);
2464 return true;
2465 }
2466
2467 return false;
2468 }
2469
2470
2471 static void
2472 resolve_global_procedure (gfc_symbol *sym, locus *where,
2473 gfc_actual_arglist **actual, int sub)
2474 {
2475 gfc_gsymbol * gsym;
2476 gfc_namespace *ns;
2477 enum gfc_symbol_type type;
2478 char reason[200];
2479
2480 type = sub ? GSYM_SUBROUTINE : GSYM_FUNCTION;
2481
2482 gsym = gfc_get_gsymbol (sym->binding_label ? sym->binding_label : sym->name);
2483
2484 if ((gsym->type != GSYM_UNKNOWN && gsym->type != type))
2485 gfc_global_used (gsym, where);
2486
2487 if ((sym->attr.if_source == IFSRC_UNKNOWN
2488 || sym->attr.if_source == IFSRC_IFBODY)
2489 && gsym->type != GSYM_UNKNOWN
2490 && !gsym->binding_label
2491 && gsym->ns
2492 && gsym->ns->resolved != -1
2493 && gsym->ns->proc_name
2494 && not_in_recursive (sym, gsym->ns)
2495 && not_entry_self_reference (sym, gsym->ns))
2496 {
2497 gfc_symbol *def_sym;
2498
2499 /* Resolve the gsymbol namespace if needed. */
2500 if (!gsym->ns->resolved)
2501 {
2502 gfc_dt_list *old_dt_list;
2503
2504 /* Stash away derived types so that the backend_decls do not
2505 get mixed up. */
2506 old_dt_list = gfc_derived_types;
2507 gfc_derived_types = NULL;
2508
2509 gfc_resolve (gsym->ns);
2510
2511 /* Store the new derived types with the global namespace. */
2512 if (gfc_derived_types)
2513 gsym->ns->derived_types = gfc_derived_types;
2514
2515 /* Restore the derived types of this namespace. */
2516 gfc_derived_types = old_dt_list;
2517 }
2518
2519 /* Make sure that translation for the gsymbol occurs before
2520 the procedure currently being resolved. */
2521 ns = gfc_global_ns_list;
2522 for (; ns && ns != gsym->ns; ns = ns->sibling)
2523 {
2524 if (ns->sibling == gsym->ns)
2525 {
2526 ns->sibling = gsym->ns->sibling;
2527 gsym->ns->sibling = gfc_global_ns_list;
2528 gfc_global_ns_list = gsym->ns;
2529 break;
2530 }
2531 }
2532
2533 def_sym = gsym->ns->proc_name;
2534
2535 /* This can happen if a binding name has been specified. */
2536 if (gsym->binding_label && gsym->sym_name != def_sym->name)
2537 gfc_find_symbol (gsym->sym_name, gsym->ns, 0, &def_sym);
2538
2539 if (def_sym->attr.entry_master)
2540 {
2541 gfc_entry_list *entry;
2542 for (entry = gsym->ns->entries; entry; entry = entry->next)
2543 if (strcmp (entry->sym->name, sym->name) == 0)
2544 {
2545 def_sym = entry->sym;
2546 break;
2547 }
2548 }
2549
2550 if (sym->attr.function && !gfc_compare_types (&sym->ts, &def_sym->ts))
2551 {
2552 gfc_error ("Return type mismatch of function %qs at %L (%s/%s)",
2553 sym->name, &sym->declared_at, gfc_typename (&sym->ts),
2554 gfc_typename (&def_sym->ts));
2555 goto done;
2556 }
2557
2558 if (sym->attr.if_source == IFSRC_UNKNOWN
2559 && gfc_explicit_interface_required (def_sym, reason, sizeof(reason)))
2560 {
2561 gfc_error ("Explicit interface required for %qs at %L: %s",
2562 sym->name, &sym->declared_at, reason);
2563 goto done;
2564 }
2565
2566 if (!pedantic && (gfc_option.allow_std & GFC_STD_GNU))
2567 /* Turn erros into warnings with -std=gnu and -std=legacy. */
2568 gfc_errors_to_warnings (true);
2569
2570 if (!gfc_compare_interfaces (sym, def_sym, sym->name, 0, 1,
2571 reason, sizeof(reason), NULL, NULL))
2572 {
2573 gfc_error_opt (OPT_Wargument_mismatch,
2574 "Interface mismatch in global procedure %qs at %L:"
2575 " %s", sym->name, &sym->declared_at, reason);
2576 goto done;
2577 }
2578
2579 if (!pedantic
2580 || ((gfc_option.warn_std & GFC_STD_LEGACY)
2581 && !(gfc_option.warn_std & GFC_STD_GNU)))
2582 gfc_errors_to_warnings (true);
2583
2584 if (sym->attr.if_source != IFSRC_IFBODY)
2585 gfc_procedure_use (def_sym, actual, where);
2586 }
2587
2588 done:
2589 gfc_errors_to_warnings (false);
2590
2591 if (gsym->type == GSYM_UNKNOWN)
2592 {
2593 gsym->type = type;
2594 gsym->where = *where;
2595 }
2596
2597 gsym->used = 1;
2598 }
2599
2600
2601 /************* Function resolution *************/
2602
2603 /* Resolve a function call known to be generic.
2604 Section 14.1.2.4.1. */
2605
2606 static match
2607 resolve_generic_f0 (gfc_expr *expr, gfc_symbol *sym)
2608 {
2609 gfc_symbol *s;
2610
2611 if (sym->attr.generic)
2612 {
2613 s = gfc_search_interface (sym->generic, 0, &expr->value.function.actual);
2614 if (s != NULL)
2615 {
2616 expr->value.function.name = s->name;
2617 expr->value.function.esym = s;
2618
2619 if (s->ts.type != BT_UNKNOWN)
2620 expr->ts = s->ts;
2621 else if (s->result != NULL && s->result->ts.type != BT_UNKNOWN)
2622 expr->ts = s->result->ts;
2623
2624 if (s->as != NULL)
2625 expr->rank = s->as->rank;
2626 else if (s->result != NULL && s->result->as != NULL)
2627 expr->rank = s->result->as->rank;
2628
2629 gfc_set_sym_referenced (expr->value.function.esym);
2630
2631 return MATCH_YES;
2632 }
2633
2634 /* TODO: Need to search for elemental references in generic
2635 interface. */
2636 }
2637
2638 if (sym->attr.intrinsic)
2639 return gfc_intrinsic_func_interface (expr, 0);
2640
2641 return MATCH_NO;
2642 }
2643
2644
2645 static bool
2646 resolve_generic_f (gfc_expr *expr)
2647 {
2648 gfc_symbol *sym;
2649 match m;
2650 gfc_interface *intr = NULL;
2651
2652 sym = expr->symtree->n.sym;
2653
2654 for (;;)
2655 {
2656 m = resolve_generic_f0 (expr, sym);
2657 if (m == MATCH_YES)
2658 return true;
2659 else if (m == MATCH_ERROR)
2660 return false;
2661
2662 generic:
2663 if (!intr)
2664 for (intr = sym->generic; intr; intr = intr->next)
2665 if (gfc_fl_struct (intr->sym->attr.flavor))
2666 break;
2667
2668 if (sym->ns->parent == NULL)
2669 break;
2670 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
2671
2672 if (sym == NULL)
2673 break;
2674 if (!generic_sym (sym))
2675 goto generic;
2676 }
2677
2678 /* Last ditch attempt. See if the reference is to an intrinsic
2679 that possesses a matching interface. 14.1.2.4 */
2680 if (sym && !intr && !gfc_is_intrinsic (sym, 0, expr->where))
2681 {
2682 if (gfc_init_expr_flag)
2683 gfc_error ("Function %qs in initialization expression at %L "
2684 "must be an intrinsic function",
2685 expr->symtree->n.sym->name, &expr->where);
2686 else
2687 gfc_error ("There is no specific function for the generic %qs "
2688 "at %L", expr->symtree->n.sym->name, &expr->where);
2689 return false;
2690 }
2691
2692 if (intr)
2693 {
2694 if (!gfc_convert_to_structure_constructor (expr, intr->sym, NULL,
2695 NULL, false))
2696 return false;
2697 if (!gfc_use_derived (expr->ts.u.derived))
2698 return false;
2699 return resolve_structure_cons (expr, 0);
2700 }
2701
2702 m = gfc_intrinsic_func_interface (expr, 0);
2703 if (m == MATCH_YES)
2704 return true;
2705
2706 if (m == MATCH_NO)
2707 gfc_error ("Generic function %qs at %L is not consistent with a "
2708 "specific intrinsic interface", expr->symtree->n.sym->name,
2709 &expr->where);
2710
2711 return false;
2712 }
2713
2714
2715 /* Resolve a function call known to be specific. */
2716
2717 static match
2718 resolve_specific_f0 (gfc_symbol *sym, gfc_expr *expr)
2719 {
2720 match m;
2721
2722 if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
2723 {
2724 if (sym->attr.dummy)
2725 {
2726 sym->attr.proc = PROC_DUMMY;
2727 goto found;
2728 }
2729
2730 sym->attr.proc = PROC_EXTERNAL;
2731 goto found;
2732 }
2733
2734 if (sym->attr.proc == PROC_MODULE
2735 || sym->attr.proc == PROC_ST_FUNCTION
2736 || sym->attr.proc == PROC_INTERNAL)
2737 goto found;
2738
2739 if (sym->attr.intrinsic)
2740 {
2741 m = gfc_intrinsic_func_interface (expr, 1);
2742 if (m == MATCH_YES)
2743 return MATCH_YES;
2744 if (m == MATCH_NO)
2745 gfc_error ("Function %qs at %L is INTRINSIC but is not compatible "
2746 "with an intrinsic", sym->name, &expr->where);
2747
2748 return MATCH_ERROR;
2749 }
2750
2751 return MATCH_NO;
2752
2753 found:
2754 gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
2755
2756 if (sym->result)
2757 expr->ts = sym->result->ts;
2758 else
2759 expr->ts = sym->ts;
2760 expr->value.function.name = sym->name;
2761 expr->value.function.esym = sym;
2762 /* Prevent crash when sym->ts.u.derived->components is not set due to previous
2763 error(s). */
2764 if (sym->ts.type == BT_CLASS && !CLASS_DATA (sym))
2765 return MATCH_ERROR;
2766 if (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as)
2767 expr->rank = CLASS_DATA (sym)->as->rank;
2768 else if (sym->as != NULL)
2769 expr->rank = sym->as->rank;
2770
2771 return MATCH_YES;
2772 }
2773
2774
2775 static bool
2776 resolve_specific_f (gfc_expr *expr)
2777 {
2778 gfc_symbol *sym;
2779 match m;
2780
2781 sym = expr->symtree->n.sym;
2782
2783 for (;;)
2784 {
2785 m = resolve_specific_f0 (sym, expr);
2786 if (m == MATCH_YES)
2787 return true;
2788 if (m == MATCH_ERROR)
2789 return false;
2790
2791 if (sym->ns->parent == NULL)
2792 break;
2793
2794 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
2795
2796 if (sym == NULL)
2797 break;
2798 }
2799
2800 gfc_error ("Unable to resolve the specific function %qs at %L",
2801 expr->symtree->n.sym->name, &expr->where);
2802
2803 return true;
2804 }
2805
2806 /* Recursively append candidate SYM to CANDIDATES. Store the number of
2807 candidates in CANDIDATES_LEN. */
2808
2809 static void
2810 lookup_function_fuzzy_find_candidates (gfc_symtree *sym,
2811 char **&candidates,
2812 size_t &candidates_len)
2813 {
2814 gfc_symtree *p;
2815
2816 if (sym == NULL)
2817 return;
2818 if ((sym->n.sym->ts.type != BT_UNKNOWN || sym->n.sym->attr.external)
2819 && sym->n.sym->attr.flavor == FL_PROCEDURE)
2820 vec_push (candidates, candidates_len, sym->name);
2821
2822 p = sym->left;
2823 if (p)
2824 lookup_function_fuzzy_find_candidates (p, candidates, candidates_len);
2825
2826 p = sym->right;
2827 if (p)
2828 lookup_function_fuzzy_find_candidates (p, candidates, candidates_len);
2829 }
2830
2831
2832 /* Lookup function FN fuzzily, taking names in SYMROOT into account. */
2833
2834 const char*
2835 gfc_lookup_function_fuzzy (const char *fn, gfc_symtree *symroot)
2836 {
2837 char **candidates = NULL;
2838 size_t candidates_len = 0;
2839 lookup_function_fuzzy_find_candidates (symroot, candidates, candidates_len);
2840 return gfc_closest_fuzzy_match (fn, candidates);
2841 }
2842
2843
2844 /* Resolve a procedure call not known to be generic nor specific. */
2845
2846 static bool
2847 resolve_unknown_f (gfc_expr *expr)
2848 {
2849 gfc_symbol *sym;
2850 gfc_typespec *ts;
2851
2852 sym = expr->symtree->n.sym;
2853
2854 if (sym->attr.dummy)
2855 {
2856 sym->attr.proc = PROC_DUMMY;
2857 expr->value.function.name = sym->name;
2858 goto set_type;
2859 }
2860
2861 /* See if we have an intrinsic function reference. */
2862
2863 if (gfc_is_intrinsic (sym, 0, expr->where))
2864 {
2865 if (gfc_intrinsic_func_interface (expr, 1) == MATCH_YES)
2866 return true;
2867 return false;
2868 }
2869
2870 /* The reference is to an external name. */
2871
2872 sym->attr.proc = PROC_EXTERNAL;
2873 expr->value.function.name = sym->name;
2874 expr->value.function.esym = expr->symtree->n.sym;
2875
2876 if (sym->as != NULL)
2877 expr->rank = sym->as->rank;
2878
2879 /* Type of the expression is either the type of the symbol or the
2880 default type of the symbol. */
2881
2882 set_type:
2883 gfc_procedure_use (sym, &expr->value.function.actual, &expr->where);
2884
2885 if (sym->ts.type != BT_UNKNOWN)
2886 expr->ts = sym->ts;
2887 else
2888 {
2889 ts = gfc_get_default_type (sym->name, sym->ns);
2890
2891 if (ts->type == BT_UNKNOWN)
2892 {
2893 const char *guessed
2894 = gfc_lookup_function_fuzzy (sym->name, sym->ns->sym_root);
2895 if (guessed)
2896 gfc_error ("Function %qs at %L has no IMPLICIT type"
2897 "; did you mean %qs?",
2898 sym->name, &expr->where, guessed);
2899 else
2900 gfc_error ("Function %qs at %L has no IMPLICIT type",
2901 sym->name, &expr->where);
2902 return false;
2903 }
2904 else
2905 expr->ts = *ts;
2906 }
2907
2908 return true;
2909 }
2910
2911
2912 /* Return true, if the symbol is an external procedure. */
2913 static bool
2914 is_external_proc (gfc_symbol *sym)
2915 {
2916 if (!sym->attr.dummy && !sym->attr.contained
2917 && !gfc_is_intrinsic (sym, sym->attr.subroutine, sym->declared_at)
2918 && sym->attr.proc != PROC_ST_FUNCTION
2919 && !sym->attr.proc_pointer
2920 && !sym->attr.use_assoc
2921 && sym->name)
2922 return true;
2923
2924 return false;
2925 }
2926
2927
2928 /* Figure out if a function reference is pure or not. Also set the name
2929 of the function for a potential error message. Return nonzero if the
2930 function is PURE, zero if not. */
2931 static int
2932 pure_stmt_function (gfc_expr *, gfc_symbol *);
2933
2934 static int
2935 pure_function (gfc_expr *e, const char **name)
2936 {
2937 int pure;
2938 gfc_component *comp;
2939
2940 *name = NULL;
2941
2942 if (e->symtree != NULL
2943 && e->symtree->n.sym != NULL
2944 && e->symtree->n.sym->attr.proc == PROC_ST_FUNCTION)
2945 return pure_stmt_function (e, e->symtree->n.sym);
2946
2947 comp = gfc_get_proc_ptr_comp (e);
2948 if (comp)
2949 {
2950 pure = gfc_pure (comp->ts.interface);
2951 *name = comp->name;
2952 }
2953 else if (e->value.function.esym)
2954 {
2955 pure = gfc_pure (e->value.function.esym);
2956 *name = e->value.function.esym->name;
2957 }
2958 else if (e->value.function.isym)
2959 {
2960 pure = e->value.function.isym->pure
2961 || e->value.function.isym->elemental;
2962 *name = e->value.function.isym->name;
2963 }
2964 else
2965 {
2966 /* Implicit functions are not pure. */
2967 pure = 0;
2968 *name = e->value.function.name;
2969 }
2970
2971 return pure;
2972 }
2973
2974
2975 static bool
2976 impure_stmt_fcn (gfc_expr *e, gfc_symbol *sym,
2977 int *f ATTRIBUTE_UNUSED)
2978 {
2979 const char *name;
2980
2981 /* Don't bother recursing into other statement functions
2982 since they will be checked individually for purity. */
2983 if (e->expr_type != EXPR_FUNCTION
2984 || !e->symtree
2985 || e->symtree->n.sym == sym
2986 || e->symtree->n.sym->attr.proc == PROC_ST_FUNCTION)
2987 return false;
2988
2989 return pure_function (e, &name) ? false : true;
2990 }
2991
2992
2993 static int
2994 pure_stmt_function (gfc_expr *e, gfc_symbol *sym)
2995 {
2996 return gfc_traverse_expr (e, sym, impure_stmt_fcn, 0) ? 0 : 1;
2997 }
2998
2999
3000 /* Check if an impure function is allowed in the current context. */
3001
3002 static bool check_pure_function (gfc_expr *e)
3003 {
3004 const char *name = NULL;
3005 if (!pure_function (e, &name) && name)
3006 {
3007 if (forall_flag)
3008 {
3009 gfc_error ("Reference to impure function %qs at %L inside a "
3010 "FORALL %s", name, &e->where,
3011 forall_flag == 2 ? "mask" : "block");
3012 return false;
3013 }
3014 else if (gfc_do_concurrent_flag)
3015 {
3016 gfc_error ("Reference to impure function %qs at %L inside a "
3017 "DO CONCURRENT %s", name, &e->where,
3018 gfc_do_concurrent_flag == 2 ? "mask" : "block");
3019 return false;
3020 }
3021 else if (gfc_pure (NULL))
3022 {
3023 gfc_error ("Reference to impure function %qs at %L "
3024 "within a PURE procedure", name, &e->where);
3025 return false;
3026 }
3027 gfc_unset_implicit_pure (NULL);
3028 }
3029 return true;
3030 }
3031
3032
3033 /* Update current procedure's array_outer_dependency flag, considering
3034 a call to procedure SYM. */
3035
3036 static void
3037 update_current_proc_array_outer_dependency (gfc_symbol *sym)
3038 {
3039 /* Check to see if this is a sibling function that has not yet
3040 been resolved. */
3041 gfc_namespace *sibling = gfc_current_ns->sibling;
3042 for (; sibling; sibling = sibling->sibling)
3043 {
3044 if (sibling->proc_name == sym)
3045 {
3046 gfc_resolve (sibling);
3047 break;
3048 }
3049 }
3050
3051 /* If SYM has references to outer arrays, so has the procedure calling
3052 SYM. If SYM is a procedure pointer, we can assume the worst. */
3053 if (sym->attr.array_outer_dependency
3054 || sym->attr.proc_pointer)
3055 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
3056 }
3057
3058
3059 /* Resolve a function call, which means resolving the arguments, then figuring
3060 out which entity the name refers to. */
3061
3062 static bool
3063 resolve_function (gfc_expr *expr)
3064 {
3065 gfc_actual_arglist *arg;
3066 gfc_symbol *sym;
3067 bool t;
3068 int temp;
3069 procedure_type p = PROC_INTRINSIC;
3070 bool no_formal_args;
3071
3072 sym = NULL;
3073 if (expr->symtree)
3074 sym = expr->symtree->n.sym;
3075
3076 /* If this is a procedure pointer component, it has already been resolved. */
3077 if (gfc_is_proc_ptr_comp (expr))
3078 return true;
3079
3080 /* Avoid re-resolving the arguments of caf_get, which can lead to inserting
3081 another caf_get. */
3082 if (sym && sym->attr.intrinsic
3083 && (sym->intmod_sym_id == GFC_ISYM_CAF_GET
3084 || sym->intmod_sym_id == GFC_ISYM_CAF_SEND))
3085 return true;
3086
3087 if (sym && sym->attr.intrinsic
3088 && !gfc_resolve_intrinsic (sym, &expr->where))
3089 return false;
3090
3091 if (sym && (sym->attr.flavor == FL_VARIABLE || sym->attr.subroutine))
3092 {
3093 gfc_error ("%qs at %L is not a function", sym->name, &expr->where);
3094 return false;
3095 }
3096
3097 /* If this ia a deferred TBP with an abstract interface (which may
3098 of course be referenced), expr->value.function.esym will be set. */
3099 if (sym && sym->attr.abstract && !expr->value.function.esym)
3100 {
3101 gfc_error ("ABSTRACT INTERFACE %qs must not be referenced at %L",
3102 sym->name, &expr->where);
3103 return false;
3104 }
3105
3106 /* Switch off assumed size checking and do this again for certain kinds
3107 of procedure, once the procedure itself is resolved. */
3108 need_full_assumed_size++;
3109
3110 if (expr->symtree && expr->symtree->n.sym)
3111 p = expr->symtree->n.sym->attr.proc;
3112
3113 if (expr->value.function.isym && expr->value.function.isym->inquiry)
3114 inquiry_argument = true;
3115 no_formal_args = sym && is_external_proc (sym)
3116 && gfc_sym_get_dummy_args (sym) == NULL;
3117
3118 if (!resolve_actual_arglist (expr->value.function.actual,
3119 p, no_formal_args))
3120 {
3121 inquiry_argument = false;
3122 return false;
3123 }
3124
3125 inquiry_argument = false;
3126
3127 /* Resume assumed_size checking. */
3128 need_full_assumed_size--;
3129
3130 /* If the procedure is external, check for usage. */
3131 if (sym && is_external_proc (sym))
3132 resolve_global_procedure (sym, &expr->where,
3133 &expr->value.function.actual, 0);
3134
3135 if (sym && sym->ts.type == BT_CHARACTER
3136 && sym->ts.u.cl
3137 && sym->ts.u.cl->length == NULL
3138 && !sym->attr.dummy
3139 && !sym->ts.deferred
3140 && expr->value.function.esym == NULL
3141 && !sym->attr.contained)
3142 {
3143 /* Internal procedures are taken care of in resolve_contained_fntype. */
3144 gfc_error ("Function %qs is declared CHARACTER(*) and cannot "
3145 "be used at %L since it is not a dummy argument",
3146 sym->name, &expr->where);
3147 return false;
3148 }
3149
3150 /* See if function is already resolved. */
3151
3152 if (expr->value.function.name != NULL
3153 || expr->value.function.isym != NULL)
3154 {
3155 if (expr->ts.type == BT_UNKNOWN)
3156 expr->ts = sym->ts;
3157 t = true;
3158 }
3159 else
3160 {
3161 /* Apply the rules of section 14.1.2. */
3162
3163 switch (procedure_kind (sym))
3164 {
3165 case PTYPE_GENERIC:
3166 t = resolve_generic_f (expr);
3167 break;
3168
3169 case PTYPE_SPECIFIC:
3170 t = resolve_specific_f (expr);
3171 break;
3172
3173 case PTYPE_UNKNOWN:
3174 t = resolve_unknown_f (expr);
3175 break;
3176
3177 default:
3178 gfc_internal_error ("resolve_function(): bad function type");
3179 }
3180 }
3181
3182 /* If the expression is still a function (it might have simplified),
3183 then we check to see if we are calling an elemental function. */
3184
3185 if (expr->expr_type != EXPR_FUNCTION)
3186 return t;
3187
3188 temp = need_full_assumed_size;
3189 need_full_assumed_size = 0;
3190
3191 if (!resolve_elemental_actual (expr, NULL))
3192 return false;
3193
3194 if (omp_workshare_flag
3195 && expr->value.function.esym
3196 && ! gfc_elemental (expr->value.function.esym))
3197 {
3198 gfc_error ("User defined non-ELEMENTAL function %qs at %L not allowed "
3199 "in WORKSHARE construct", expr->value.function.esym->name,
3200 &expr->where);
3201 t = false;
3202 }
3203
3204 #define GENERIC_ID expr->value.function.isym->id
3205 else if (expr->value.function.actual != NULL
3206 && expr->value.function.isym != NULL
3207 && GENERIC_ID != GFC_ISYM_LBOUND
3208 && GENERIC_ID != GFC_ISYM_LCOBOUND
3209 && GENERIC_ID != GFC_ISYM_UCOBOUND
3210 && GENERIC_ID != GFC_ISYM_LEN
3211 && GENERIC_ID != GFC_ISYM_LOC
3212 && GENERIC_ID != GFC_ISYM_C_LOC
3213 && GENERIC_ID != GFC_ISYM_PRESENT)
3214 {
3215 /* Array intrinsics must also have the last upper bound of an
3216 assumed size array argument. UBOUND and SIZE have to be
3217 excluded from the check if the second argument is anything
3218 than a constant. */
3219
3220 for (arg = expr->value.function.actual; arg; arg = arg->next)
3221 {
3222 if ((GENERIC_ID == GFC_ISYM_UBOUND || GENERIC_ID == GFC_ISYM_SIZE)
3223 && arg == expr->value.function.actual
3224 && arg->next != NULL && arg->next->expr)
3225 {
3226 if (arg->next->expr->expr_type != EXPR_CONSTANT)
3227 break;
3228
3229 if (arg->next->name && strncmp (arg->next->name, "kind", 4) == 0)
3230 break;
3231
3232 if ((int)mpz_get_si (arg->next->expr->value.integer)
3233 < arg->expr->rank)
3234 break;
3235 }
3236
3237 if (arg->expr != NULL
3238 && arg->expr->rank > 0
3239 && resolve_assumed_size_actual (arg->expr))
3240 return false;
3241 }
3242 }
3243 #undef GENERIC_ID
3244
3245 need_full_assumed_size = temp;
3246
3247 if (!check_pure_function(expr))
3248 t = false;
3249
3250 /* Functions without the RECURSIVE attribution are not allowed to
3251 * call themselves. */
3252 if (expr->value.function.esym && !expr->value.function.esym->attr.recursive)
3253 {
3254 gfc_symbol *esym;
3255 esym = expr->value.function.esym;
3256
3257 if (is_illegal_recursion (esym, gfc_current_ns))
3258 {
3259 if (esym->attr.entry && esym->ns->entries)
3260 gfc_error ("ENTRY %qs at %L cannot be called recursively, as"
3261 " function %qs is not RECURSIVE",
3262 esym->name, &expr->where, esym->ns->entries->sym->name);
3263 else
3264 gfc_error ("Function %qs at %L cannot be called recursively, as it"
3265 " is not RECURSIVE", esym->name, &expr->where);
3266
3267 t = false;
3268 }
3269 }
3270
3271 /* Character lengths of use associated functions may contains references to
3272 symbols not referenced from the current program unit otherwise. Make sure
3273 those symbols are marked as referenced. */
3274
3275 if (expr->ts.type == BT_CHARACTER && expr->value.function.esym
3276 && expr->value.function.esym->attr.use_assoc)
3277 {
3278 gfc_expr_set_symbols_referenced (expr->ts.u.cl->length);
3279 }
3280
3281 /* Make sure that the expression has a typespec that works. */
3282 if (expr->ts.type == BT_UNKNOWN)
3283 {
3284 if (expr->symtree->n.sym->result
3285 && expr->symtree->n.sym->result->ts.type != BT_UNKNOWN
3286 && !expr->symtree->n.sym->result->attr.proc_pointer)
3287 expr->ts = expr->symtree->n.sym->result->ts;
3288 }
3289
3290 if (!expr->ref && !expr->value.function.isym)
3291 {
3292 if (expr->value.function.esym)
3293 update_current_proc_array_outer_dependency (expr->value.function.esym);
3294 else
3295 update_current_proc_array_outer_dependency (sym);
3296 }
3297 else if (expr->ref)
3298 /* typebound procedure: Assume the worst. */
3299 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
3300
3301 return t;
3302 }
3303
3304
3305 /************* Subroutine resolution *************/
3306
3307 static bool
3308 pure_subroutine (gfc_symbol *sym, const char *name, locus *loc)
3309 {
3310 if (gfc_pure (sym))
3311 return true;
3312
3313 if (forall_flag)
3314 {
3315 gfc_error ("Subroutine call to %qs in FORALL block at %L is not PURE",
3316 name, loc);
3317 return false;
3318 }
3319 else if (gfc_do_concurrent_flag)
3320 {
3321 gfc_error ("Subroutine call to %qs in DO CONCURRENT block at %L is not "
3322 "PURE", name, loc);
3323 return false;
3324 }
3325 else if (gfc_pure (NULL))
3326 {
3327 gfc_error ("Subroutine call to %qs at %L is not PURE", name, loc);
3328 return false;
3329 }
3330
3331 gfc_unset_implicit_pure (NULL);
3332 return true;
3333 }
3334
3335
3336 static match
3337 resolve_generic_s0 (gfc_code *c, gfc_symbol *sym)
3338 {
3339 gfc_symbol *s;
3340
3341 if (sym->attr.generic)
3342 {
3343 s = gfc_search_interface (sym->generic, 1, &c->ext.actual);
3344 if (s != NULL)
3345 {
3346 c->resolved_sym = s;
3347 if (!pure_subroutine (s, s->name, &c->loc))
3348 return MATCH_ERROR;
3349 return MATCH_YES;
3350 }
3351
3352 /* TODO: Need to search for elemental references in generic interface. */
3353 }
3354
3355 if (sym->attr.intrinsic)
3356 return gfc_intrinsic_sub_interface (c, 0);
3357
3358 return MATCH_NO;
3359 }
3360
3361
3362 static bool
3363 resolve_generic_s (gfc_code *c)
3364 {
3365 gfc_symbol *sym;
3366 match m;
3367
3368 sym = c->symtree->n.sym;
3369
3370 for (;;)
3371 {
3372 m = resolve_generic_s0 (c, sym);
3373 if (m == MATCH_YES)
3374 return true;
3375 else if (m == MATCH_ERROR)
3376 return false;
3377
3378 generic:
3379 if (sym->ns->parent == NULL)
3380 break;
3381 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
3382
3383 if (sym == NULL)
3384 break;
3385 if (!generic_sym (sym))
3386 goto generic;
3387 }
3388
3389 /* Last ditch attempt. See if the reference is to an intrinsic
3390 that possesses a matching interface. 14.1.2.4 */
3391 sym = c->symtree->n.sym;
3392
3393 if (!gfc_is_intrinsic (sym, 1, c->loc))
3394 {
3395 gfc_error ("There is no specific subroutine for the generic %qs at %L",
3396 sym->name, &c->loc);
3397 return false;
3398 }
3399
3400 m = gfc_intrinsic_sub_interface (c, 0);
3401 if (m == MATCH_YES)
3402 return true;
3403 if (m == MATCH_NO)
3404 gfc_error ("Generic subroutine %qs at %L is not consistent with an "
3405 "intrinsic subroutine interface", sym->name, &c->loc);
3406
3407 return false;
3408 }
3409
3410
3411 /* Resolve a subroutine call known to be specific. */
3412
3413 static match
3414 resolve_specific_s0 (gfc_code *c, gfc_symbol *sym)
3415 {
3416 match m;
3417
3418 if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY)
3419 {
3420 if (sym->attr.dummy)
3421 {
3422 sym->attr.proc = PROC_DUMMY;
3423 goto found;
3424 }
3425
3426 sym->attr.proc = PROC_EXTERNAL;
3427 goto found;
3428 }
3429
3430 if (sym->attr.proc == PROC_MODULE || sym->attr.proc == PROC_INTERNAL)
3431 goto found;
3432
3433 if (sym->attr.intrinsic)
3434 {
3435 m = gfc_intrinsic_sub_interface (c, 1);
3436 if (m == MATCH_YES)
3437 return MATCH_YES;
3438 if (m == MATCH_NO)
3439 gfc_error ("Subroutine %qs at %L is INTRINSIC but is not compatible "
3440 "with an intrinsic", sym->name, &c->loc);
3441
3442 return MATCH_ERROR;
3443 }
3444
3445 return MATCH_NO;
3446
3447 found:
3448 gfc_procedure_use (sym, &c->ext.actual, &c->loc);
3449
3450 c->resolved_sym = sym;
3451 if (!pure_subroutine (sym, sym->name, &c->loc))
3452 return MATCH_ERROR;
3453
3454 return MATCH_YES;
3455 }
3456
3457
3458 static bool
3459 resolve_specific_s (gfc_code *c)
3460 {
3461 gfc_symbol *sym;
3462 match m;
3463
3464 sym = c->symtree->n.sym;
3465
3466 for (;;)
3467 {
3468 m = resolve_specific_s0 (c, sym);
3469 if (m == MATCH_YES)
3470 return true;
3471 if (m == MATCH_ERROR)
3472 return false;
3473
3474 if (sym->ns->parent == NULL)
3475 break;
3476
3477 gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym);
3478
3479 if (sym == NULL)
3480 break;
3481 }
3482
3483 sym = c->symtree->n.sym;
3484 gfc_error ("Unable to resolve the specific subroutine %qs at %L",
3485 sym->name, &c->loc);
3486
3487 return false;
3488 }
3489
3490
3491 /* Resolve a subroutine call not known to be generic nor specific. */
3492
3493 static bool
3494 resolve_unknown_s (gfc_code *c)
3495 {
3496 gfc_symbol *sym;
3497
3498 sym = c->symtree->n.sym;
3499
3500 if (sym->attr.dummy)
3501 {
3502 sym->attr.proc = PROC_DUMMY;
3503 goto found;
3504 }
3505
3506 /* See if we have an intrinsic function reference. */
3507
3508 if (gfc_is_intrinsic (sym, 1, c->loc))
3509 {
3510 if (gfc_intrinsic_sub_interface (c, 1) == MATCH_YES)
3511 return true;
3512 return false;
3513 }
3514
3515 /* The reference is to an external name. */
3516
3517 found:
3518 gfc_procedure_use (sym, &c->ext.actual, &c->loc);
3519
3520 c->resolved_sym = sym;
3521
3522 return pure_subroutine (sym, sym->name, &c->loc);
3523 }
3524
3525
3526 /* Resolve a subroutine call. Although it was tempting to use the same code
3527 for functions, subroutines and functions are stored differently and this
3528 makes things awkward. */
3529
3530 static bool
3531 resolve_call (gfc_code *c)
3532 {
3533 bool t;
3534 procedure_type ptype = PROC_INTRINSIC;
3535 gfc_symbol *csym, *sym;
3536 bool no_formal_args;
3537
3538 csym = c->symtree ? c->symtree->n.sym : NULL;
3539
3540 if (csym && csym->ts.type != BT_UNKNOWN)
3541 {
3542 gfc_error ("%qs at %L has a type, which is not consistent with "
3543 "the CALL at %L", csym->name, &csym->declared_at, &c->loc);
3544 return false;
3545 }
3546
3547 if (csym && gfc_current_ns->parent && csym->ns != gfc_current_ns)
3548 {
3549 gfc_symtree *st;
3550 gfc_find_sym_tree (c->symtree->name, gfc_current_ns, 1, &st);
3551 sym = st ? st->n.sym : NULL;
3552 if (sym && csym != sym
3553 && sym->ns == gfc_current_ns
3554 && sym->attr.flavor == FL_PROCEDURE
3555 && sym->attr.contained)
3556 {
3557 sym->refs++;
3558 if (csym->attr.generic)
3559 c->symtree->n.sym = sym;
3560 else
3561 c->symtree = st;
3562 csym = c->symtree->n.sym;
3563 }
3564 }
3565
3566 /* If this ia a deferred TBP, c->expr1 will be set. */
3567 if (!c->expr1 && csym)
3568 {
3569 if (csym->attr.abstract)
3570 {
3571 gfc_error ("ABSTRACT INTERFACE %qs must not be referenced at %L",
3572 csym->name, &c->loc);
3573 return false;
3574 }
3575
3576 /* Subroutines without the RECURSIVE attribution are not allowed to
3577 call themselves. */
3578 if (is_illegal_recursion (csym, gfc_current_ns))
3579 {
3580 if (csym->attr.entry && csym->ns->entries)
3581 gfc_error ("ENTRY %qs at %L cannot be called recursively, "
3582 "as subroutine %qs is not RECURSIVE",
3583 csym->name, &c->loc, csym->ns->entries->sym->name);
3584 else
3585 gfc_error ("SUBROUTINE %qs at %L cannot be called recursively, "
3586 "as it is not RECURSIVE", csym->name, &c->loc);
3587
3588 t = false;
3589 }
3590 }
3591
3592 /* Switch off assumed size checking and do this again for certain kinds
3593 of procedure, once the procedure itself is resolved. */
3594 need_full_assumed_size++;
3595
3596 if (csym)
3597 ptype = csym->attr.proc;
3598
3599 no_formal_args = csym && is_external_proc (csym)
3600 && gfc_sym_get_dummy_args (csym) == NULL;
3601 if (!resolve_actual_arglist (c->ext.actual, ptype, no_formal_args))
3602 return false;
3603
3604 /* Resume assumed_size checking. */
3605 need_full_assumed_size--;
3606
3607 /* If external, check for usage. */
3608 if (csym && is_external_proc (csym))
3609 resolve_global_procedure (csym, &c->loc, &c->ext.actual, 1);
3610
3611 t = true;
3612 if (c->resolved_sym == NULL)
3613 {
3614 c->resolved_isym = NULL;
3615 switch (procedure_kind (csym))
3616 {
3617 case PTYPE_GENERIC:
3618 t = resolve_generic_s (c);
3619 break;
3620
3621 case PTYPE_SPECIFIC:
3622 t = resolve_specific_s (c);
3623 break;
3624
3625 case PTYPE_UNKNOWN:
3626 t = resolve_unknown_s (c);
3627 break;
3628
3629 default:
3630 gfc_internal_error ("resolve_subroutine(): bad function type");
3631 }
3632 }
3633
3634 /* Some checks of elemental subroutine actual arguments. */
3635 if (!resolve_elemental_actual (NULL, c))
3636 return false;
3637
3638 if (!c->expr1)
3639 update_current_proc_array_outer_dependency (csym);
3640 else
3641 /* Typebound procedure: Assume the worst. */
3642 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
3643
3644 return t;
3645 }
3646
3647
3648 /* Compare the shapes of two arrays that have non-NULL shapes. If both
3649 op1->shape and op2->shape are non-NULL return true if their shapes
3650 match. If both op1->shape and op2->shape are non-NULL return false
3651 if their shapes do not match. If either op1->shape or op2->shape is
3652 NULL, return true. */
3653
3654 static bool
3655 compare_shapes (gfc_expr *op1, gfc_expr *op2)
3656 {
3657 bool t;
3658 int i;
3659
3660 t = true;
3661
3662 if (op1->shape != NULL && op2->shape != NULL)
3663 {
3664 for (i = 0; i < op1->rank; i++)
3665 {
3666 if (mpz_cmp (op1->shape[i], op2->shape[i]) != 0)
3667 {
3668 gfc_error ("Shapes for operands at %L and %L are not conformable",
3669 &op1->where, &op2->where);
3670 t = false;
3671 break;
3672 }
3673 }
3674 }
3675
3676 return t;
3677 }
3678
3679 /* Convert a logical operator to the corresponding bitwise intrinsic call.
3680 For example A .AND. B becomes IAND(A, B). */
3681 static gfc_expr *
3682 logical_to_bitwise (gfc_expr *e)
3683 {
3684 gfc_expr *tmp, *op1, *op2;
3685 gfc_isym_id isym;
3686 gfc_actual_arglist *args = NULL;
3687
3688 gcc_assert (e->expr_type == EXPR_OP);
3689
3690 isym = GFC_ISYM_NONE;
3691 op1 = e->value.op.op1;
3692 op2 = e->value.op.op2;
3693
3694 switch (e->value.op.op)
3695 {
3696 case INTRINSIC_NOT:
3697 isym = GFC_ISYM_NOT;
3698 break;
3699 case INTRINSIC_AND:
3700 isym = GFC_ISYM_IAND;
3701 break;
3702 case INTRINSIC_OR:
3703 isym = GFC_ISYM_IOR;
3704 break;
3705 case INTRINSIC_NEQV:
3706 isym = GFC_ISYM_IEOR;
3707 break;
3708 case INTRINSIC_EQV:
3709 /* "Bitwise eqv" is just the complement of NEQV === IEOR.
3710 Change the old expression to NEQV, which will get replaced by IEOR,
3711 and wrap it in NOT. */
3712 tmp = gfc_copy_expr (e);
3713 tmp->value.op.op = INTRINSIC_NEQV;
3714 tmp = logical_to_bitwise (tmp);
3715 isym = GFC_ISYM_NOT;
3716 op1 = tmp;
3717 op2 = NULL;
3718 break;
3719 default:
3720 gfc_internal_error ("logical_to_bitwise(): Bad intrinsic");
3721 }
3722
3723 /* Inherit the original operation's operands as arguments. */
3724 args = gfc_get_actual_arglist ();
3725 args->expr = op1;
3726 if (op2)
3727 {
3728 args->next = gfc_get_actual_arglist ();
3729 args->next->expr = op2;
3730 }
3731
3732 /* Convert the expression to a function call. */
3733 e->expr_type = EXPR_FUNCTION;
3734 e->value.function.actual = args;
3735 e->value.function.isym = gfc_intrinsic_function_by_id (isym);
3736 e->value.function.name = e->value.function.isym->name;
3737 e->value.function.esym = NULL;
3738
3739 /* Make up a pre-resolved function call symtree if we need to. */
3740 if (!e->symtree || !e->symtree->n.sym)
3741 {
3742 gfc_symbol *sym;
3743 gfc_get_ha_sym_tree (e->value.function.isym->name, &e->symtree);
3744 sym = e->symtree->n.sym;
3745 sym->result = sym;
3746 sym->attr.flavor = FL_PROCEDURE;
3747 sym->attr.function = 1;
3748 sym->attr.elemental = 1;
3749 sym->attr.pure = 1;
3750 sym->attr.referenced = 1;
3751 gfc_intrinsic_symbol (sym);
3752 gfc_commit_symbol (sym);
3753 }
3754
3755 args->name = e->value.function.isym->formal->name;
3756 if (e->value.function.isym->formal->next)
3757 args->next->name = e->value.function.isym->formal->next->name;
3758
3759 return e;
3760 }
3761
3762 /* Recursively append candidate UOP to CANDIDATES. Store the number of
3763 candidates in CANDIDATES_LEN. */
3764 static void
3765 lookup_uop_fuzzy_find_candidates (gfc_symtree *uop,
3766 char **&candidates,
3767 size_t &candidates_len)
3768 {
3769 gfc_symtree *p;
3770
3771 if (uop == NULL)
3772 return;
3773
3774 /* Not sure how to properly filter here. Use all for a start.
3775 n.uop.op is NULL for empty interface operators (is that legal?) disregard
3776 these as i suppose they don't make terribly sense. */
3777
3778 if (uop->n.uop->op != NULL)
3779 vec_push (candidates, candidates_len, uop->name);
3780
3781 p = uop->left;
3782 if (p)
3783 lookup_uop_fuzzy_find_candidates (p, candidates, candidates_len);
3784
3785 p = uop->right;
3786 if (p)
3787 lookup_uop_fuzzy_find_candidates (p, candidates, candidates_len);
3788 }
3789
3790 /* Lookup user-operator OP fuzzily, taking names in UOP into account. */
3791
3792 static const char*
3793 lookup_uop_fuzzy (const char *op, gfc_symtree *uop)
3794 {
3795 char **candidates = NULL;
3796 size_t candidates_len = 0;
3797 lookup_uop_fuzzy_find_candidates (uop, candidates, candidates_len);
3798 return gfc_closest_fuzzy_match (op, candidates);
3799 }
3800
3801
3802 /* Resolve an operator expression node. This can involve replacing the
3803 operation with a user defined function call. */
3804
3805 static bool
3806 resolve_operator (gfc_expr *e)
3807 {
3808 gfc_expr *op1, *op2;
3809 char msg[200];
3810 bool dual_locus_error;
3811 bool t;
3812
3813 /* Resolve all subnodes-- give them types. */
3814
3815 switch (e->value.op.op)
3816 {
3817 default:
3818 if (!gfc_resolve_expr (e->value.op.op2))
3819 return false;
3820
3821 /* Fall through. */
3822
3823 case INTRINSIC_NOT:
3824 case INTRINSIC_UPLUS:
3825 case INTRINSIC_UMINUS:
3826 case INTRINSIC_PARENTHESES:
3827 if (!gfc_resolve_expr (e->value.op.op1))
3828 return false;
3829 break;
3830 }
3831
3832 /* Typecheck the new node. */
3833
3834 op1 = e->value.op.op1;
3835 op2 = e->value.op.op2;
3836 dual_locus_error = false;
3837
3838 if ((op1 && op1->expr_type == EXPR_NULL)
3839 || (op2 && op2->expr_type == EXPR_NULL))
3840 {
3841 sprintf (msg, _("Invalid context for NULL() pointer at %%L"));
3842 goto bad_op;
3843 }
3844
3845 switch (e->value.op.op)
3846 {
3847 case INTRINSIC_UPLUS:
3848 case INTRINSIC_UMINUS:
3849 if (op1->ts.type == BT_INTEGER
3850 || op1->ts.type == BT_REAL
3851 || op1->ts.type == BT_COMPLEX)
3852 {
3853 e->ts = op1->ts;
3854 break;
3855 }
3856
3857 sprintf (msg, _("Operand of unary numeric operator %%<%s%%> at %%L is %s"),
3858 gfc_op2string (e->value.op.op), gfc_typename (&e->ts));
3859 goto bad_op;
3860
3861 case INTRINSIC_PLUS:
3862 case INTRINSIC_MINUS:
3863 case INTRINSIC_TIMES:
3864 case INTRINSIC_DIVIDE:
3865 case INTRINSIC_POWER:
3866 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
3867 {
3868 gfc_type_convert_binary (e, 1);
3869 break;
3870 }
3871
3872 sprintf (msg,
3873 _("Operands of binary numeric operator %%<%s%%> at %%L are %s/%s"),
3874 gfc_op2string (e->value.op.op), gfc_typename (&op1->ts),
3875 gfc_typename (&op2->ts));
3876 goto bad_op;
3877
3878 case INTRINSIC_CONCAT:
3879 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
3880 && op1->ts.kind == op2->ts.kind)
3881 {
3882 e->ts.type = BT_CHARACTER;
3883 e->ts.kind = op1->ts.kind;
3884 break;
3885 }
3886
3887 sprintf (msg,
3888 _("Operands of string concatenation operator at %%L are %s/%s"),
3889 gfc_typename (&op1->ts), gfc_typename (&op2->ts));
3890 goto bad_op;
3891
3892 case INTRINSIC_AND:
3893 case INTRINSIC_OR:
3894 case INTRINSIC_EQV:
3895 case INTRINSIC_NEQV:
3896 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
3897 {
3898 e->ts.type = BT_LOGICAL;
3899 e->ts.kind = gfc_kind_max (op1, op2);
3900 if (op1->ts.kind < e->ts.kind)
3901 gfc_convert_type (op1, &e->ts, 2);
3902 else if (op2->ts.kind < e->ts.kind)
3903 gfc_convert_type (op2, &e->ts, 2);
3904 break;
3905 }
3906
3907 /* Logical ops on integers become bitwise ops with -fdec. */
3908 else if (flag_dec
3909 && (op1->ts.type == BT_INTEGER || op2->ts.type == BT_INTEGER))
3910 {
3911 e->ts.type = BT_INTEGER;
3912 e->ts.kind = gfc_kind_max (op1, op2);
3913 if (op1->ts.type != e->ts.type || op1->ts.kind != e->ts.kind)
3914 gfc_convert_type (op1, &e->ts, 1);
3915 if (op2->ts.type != e->ts.type || op2->ts.kind != e->ts.kind)
3916 gfc_convert_type (op2, &e->ts, 1);
3917 e = logical_to_bitwise (e);
3918 return resolve_function (e);
3919 }
3920
3921 sprintf (msg, _("Operands of logical operator %%<%s%%> at %%L are %s/%s"),
3922 gfc_op2string (e->value.op.op), gfc_typename (&op1->ts),
3923 gfc_typename (&op2->ts));
3924
3925 goto bad_op;
3926
3927 case INTRINSIC_NOT:
3928 /* Logical ops on integers become bitwise ops with -fdec. */
3929 if (flag_dec && op1->ts.type == BT_INTEGER)
3930 {
3931 e->ts.type = BT_INTEGER;
3932 e->ts.kind = op1->ts.kind;
3933 e = logical_to_bitwise (e);
3934 return resolve_function (e);
3935 }
3936
3937 if (op1->ts.type == BT_LOGICAL)
3938 {
3939 e->ts.type = BT_LOGICAL;
3940 e->ts.kind = op1->ts.kind;
3941 break;
3942 }
3943
3944 sprintf (msg, _("Operand of .not. operator at %%L is %s"),
3945 gfc_typename (&op1->ts));
3946 goto bad_op;
3947
3948 case INTRINSIC_GT:
3949 case INTRINSIC_GT_OS:
3950 case INTRINSIC_GE:
3951 case INTRINSIC_GE_OS:
3952 case INTRINSIC_LT:
3953 case INTRINSIC_LT_OS:
3954 case INTRINSIC_LE:
3955 case INTRINSIC_LE_OS:
3956 if (op1->ts.type == BT_COMPLEX || op2->ts.type == BT_COMPLEX)
3957 {
3958 strcpy (msg, _("COMPLEX quantities cannot be compared at %L"));
3959 goto bad_op;
3960 }
3961
3962 /* Fall through. */
3963
3964 case INTRINSIC_EQ:
3965 case INTRINSIC_EQ_OS:
3966 case INTRINSIC_NE:
3967 case INTRINSIC_NE_OS:
3968 if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
3969 && op1->ts.kind == op2->ts.kind)
3970 {
3971 e->ts.type = BT_LOGICAL;
3972 e->ts.kind = gfc_default_logical_kind;
3973 break;
3974 }
3975
3976 if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
3977 {
3978 gfc_type_convert_binary (e, 1);
3979
3980 e->ts.type = BT_LOGICAL;
3981 e->ts.kind = gfc_default_logical_kind;
3982
3983 if (warn_compare_reals)
3984 {
3985 gfc_intrinsic_op op = e->value.op.op;
3986
3987 /* Type conversion has made sure that the types of op1 and op2
3988 agree, so it is only necessary to check the first one. */
3989 if ((op1->ts.type == BT_REAL || op1->ts.type == BT_COMPLEX)
3990 && (op == INTRINSIC_EQ || op == INTRINSIC_EQ_OS
3991 || op == INTRINSIC_NE || op == INTRINSIC_NE_OS))
3992 {
3993 const char *msg;
3994
3995 if (op == INTRINSIC_EQ || op == INTRINSIC_EQ_OS)
3996 msg = "Equality comparison for %s at %L";
3997 else
3998 msg = "Inequality comparison for %s at %L";
3999
4000 gfc_warning (OPT_Wcompare_reals, msg,
4001 gfc_typename (&op1->ts), &op1->where);
4002 }
4003 }
4004
4005 break;
4006 }
4007
4008 if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
4009 sprintf (msg,
4010 _("Logicals at %%L must be compared with %s instead of %s"),
4011 (e->value.op.op == INTRINSIC_EQ
4012 || e->value.op.op == INTRINSIC_EQ_OS)
4013 ? ".eqv." : ".neqv.", gfc_op2string (e->value.op.op));
4014 else
4015 sprintf (msg,
4016 _("Operands of comparison operator %%<%s%%> at %%L are %s/%s"),
4017 gfc_op2string (e->value.op.op), gfc_typename (&op1->ts),
4018 gfc_typename (&op2->ts));
4019
4020 goto bad_op;
4021
4022 case INTRINSIC_USER:
4023 if (e->value.op.uop->op == NULL)
4024 {
4025 const char *name = e->value.op.uop->name;
4026 const char *guessed;
4027 guessed = lookup_uop_fuzzy (name, e->value.op.uop->ns->uop_root);
4028 if (guessed)
4029 sprintf (msg, _("Unknown operator %%<%s%%> at %%L; did you mean '%s'?"),
4030 name, guessed);
4031 else
4032 sprintf (msg, _("Unknown operator %%<%s%%> at %%L"), name);
4033 }
4034 else if (op2 == NULL)
4035 sprintf (msg, _("Operand of user operator %%<%s%%> at %%L is %s"),
4036 e->value.op.uop->name, gfc_typename (&op1->ts));
4037 else
4038 {
4039 sprintf (msg, _("Operands of user operator %%<%s%%> at %%L are %s/%s"),
4040 e->value.op.uop->name, gfc_typename (&op1->ts),
4041 gfc_typename (&op2->ts));
4042 e->value.op.uop->op->sym->attr.referenced = 1;
4043 }
4044
4045 goto bad_op;
4046
4047 case INTRINSIC_PARENTHESES:
4048 e->ts = op1->ts;
4049 if (e->ts.type == BT_CHARACTER)
4050 e->ts.u.cl = op1->ts.u.cl;
4051 break;
4052
4053 default:
4054 gfc_internal_error ("resolve_operator(): Bad intrinsic");
4055 }
4056
4057 /* Deal with arrayness of an operand through an operator. */
4058
4059 t = true;
4060
4061 switch (e->value.op.op)
4062 {
4063 case INTRINSIC_PLUS:
4064 case INTRINSIC_MINUS:
4065 case INTRINSIC_TIMES:
4066 case INTRINSIC_DIVIDE:
4067 case INTRINSIC_POWER:
4068 case INTRINSIC_CONCAT:
4069 case INTRINSIC_AND:
4070 case INTRINSIC_OR:
4071 case INTRINSIC_EQV:
4072 case INTRINSIC_NEQV:
4073 case INTRINSIC_EQ:
4074 case INTRINSIC_EQ_OS:
4075 case INTRINSIC_NE:
4076 case INTRINSIC_NE_OS:
4077 case INTRINSIC_GT:
4078 case INTRINSIC_GT_OS:
4079 case INTRINSIC_GE:
4080 case INTRINSIC_GE_OS:
4081 case INTRINSIC_LT:
4082 case INTRINSIC_LT_OS:
4083 case INTRINSIC_LE:
4084 case INTRINSIC_LE_OS:
4085
4086 if (op1->rank == 0 && op2->rank == 0)
4087 e->rank = 0;
4088
4089 if (op1->rank == 0 && op2->rank != 0)
4090 {
4091 e->rank = op2->rank;
4092
4093 if (e->shape == NULL)
4094 e->shape = gfc_copy_shape (op2->shape, op2->rank);
4095 }
4096
4097 if (op1->rank != 0 && op2->rank == 0)
4098 {
4099 e->rank = op1->rank;
4100
4101 if (e->shape == NULL)
4102 e->shape = gfc_copy_shape (op1->shape, op1->rank);
4103 }
4104
4105 if (op1->rank != 0 && op2->rank != 0)
4106 {
4107 if (op1->rank == op2->rank)
4108 {
4109 e->rank = op1->rank;
4110 if (e->shape == NULL)
4111 {
4112 t = compare_shapes (op1, op2);
4113 if (!t)
4114 e->shape = NULL;
4115 else
4116 e->shape = gfc_copy_shape (op1->shape, op1->rank);
4117 }
4118 }
4119 else
4120 {
4121 /* Allow higher level expressions to work. */
4122 e->rank = 0;
4123
4124 /* Try user-defined operators, and otherwise throw an error. */
4125 dual_locus_error = true;
4126 sprintf (msg,
4127 _("Inconsistent ranks for operator at %%L and %%L"));
4128 goto bad_op;
4129 }
4130 }
4131
4132 break;
4133
4134 case INTRINSIC_PARENTHESES:
4135 case INTRINSIC_NOT:
4136 case INTRINSIC_UPLUS:
4137 case INTRINSIC_UMINUS:
4138 /* Simply copy arrayness attribute */
4139 e->rank = op1->rank;
4140
4141 if (e->shape == NULL)
4142 e->shape = gfc_copy_shape (op1->shape, op1->rank);
4143
4144 break;
4145
4146 default:
4147 break;
4148 }
4149
4150 /* Attempt to simplify the expression. */
4151 if (t)
4152 {
4153 t = gfc_simplify_expr (e, 0);
4154 /* Some calls do not succeed in simplification and return false
4155 even though there is no error; e.g. variable references to
4156 PARAMETER arrays. */
4157 if (!gfc_is_constant_expr (e))
4158 t = true;
4159 }
4160 return t;
4161
4162 bad_op:
4163
4164 {
4165 match m = gfc_extend_expr (e);
4166 if (m == MATCH_YES)
4167 return true;
4168 if (m == MATCH_ERROR)
4169 return false;
4170 }
4171
4172 if (dual_locus_error)
4173 gfc_error (msg, &op1->where, &op2->where);
4174 else
4175 gfc_error (msg, &e->where);
4176
4177 return false;
4178 }
4179
4180
4181 /************** Array resolution subroutines **************/
4182
4183 enum compare_result
4184 { CMP_LT, CMP_EQ, CMP_GT, CMP_UNKNOWN };
4185
4186 /* Compare two integer expressions. */
4187
4188 static compare_result
4189 compare_bound (gfc_expr *a, gfc_expr *b)
4190 {
4191 int i;
4192
4193 if (a == NULL || a->expr_type != EXPR_CONSTANT
4194 || b == NULL || b->expr_type != EXPR_CONSTANT)
4195 return CMP_UNKNOWN;
4196
4197 /* If either of the types isn't INTEGER, we must have
4198 raised an error earlier. */
4199
4200 if (a->ts.type != BT_INTEGER || b->ts.type != BT_INTEGER)
4201 return CMP_UNKNOWN;
4202
4203 i = mpz_cmp (a->value.integer, b->value.integer);
4204
4205 if (i < 0)
4206 return CMP_LT;
4207 if (i > 0)
4208 return CMP_GT;
4209 return CMP_EQ;
4210 }
4211
4212
4213 /* Compare an integer expression with an integer. */
4214
4215 static compare_result
4216 compare_bound_int (gfc_expr *a, int b)
4217 {
4218 int i;
4219
4220 if (a == NULL || a->expr_type != EXPR_CONSTANT)
4221 return CMP_UNKNOWN;
4222
4223 if (a->ts.type != BT_INTEGER)
4224 gfc_internal_error ("compare_bound_int(): Bad expression");
4225
4226 i = mpz_cmp_si (a->value.integer, b);
4227
4228 if (i < 0)
4229 return CMP_LT;
4230 if (i > 0)
4231 return CMP_GT;
4232 return CMP_EQ;
4233 }
4234
4235
4236 /* Compare an integer expression with a mpz_t. */
4237
4238 static compare_result
4239 compare_bound_mpz_t (gfc_expr *a, mpz_t b)
4240 {
4241 int i;
4242
4243 if (a == NULL || a->expr_type != EXPR_CONSTANT)
4244 return CMP_UNKNOWN;
4245
4246 if (a->ts.type != BT_INTEGER)
4247 gfc_internal_error ("compare_bound_int(): Bad expression");
4248
4249 i = mpz_cmp (a->value.integer, b);
4250
4251 if (i < 0)
4252 return CMP_LT;
4253 if (i > 0)
4254 return CMP_GT;
4255 return CMP_EQ;
4256 }
4257
4258
4259 /* Compute the last value of a sequence given by a triplet.
4260 Return 0 if it wasn't able to compute the last value, or if the
4261 sequence if empty, and 1 otherwise. */
4262
4263 static int
4264 compute_last_value_for_triplet (gfc_expr *start, gfc_expr *end,
4265 gfc_expr *stride, mpz_t last)
4266 {
4267 mpz_t rem;
4268
4269 if (start == NULL || start->expr_type != EXPR_CONSTANT
4270 || end == NULL || end->expr_type != EXPR_CONSTANT
4271 || (stride != NULL && stride->expr_type != EXPR_CONSTANT))
4272 return 0;
4273
4274 if (start->ts.type != BT_INTEGER || end->ts.type != BT_INTEGER
4275 || (stride != NULL && stride->ts.type != BT_INTEGER))
4276 return 0;
4277
4278 if (stride == NULL || compare_bound_int (stride, 1) == CMP_EQ)
4279 {
4280 if (compare_bound (start, end) == CMP_GT)
4281 return 0;
4282 mpz_set (last, end->value.integer);
4283 return 1;
4284 }
4285
4286 if (compare_bound_int (stride, 0) == CMP_GT)
4287 {
4288 /* Stride is positive */
4289 if (mpz_cmp (start->value.integer, end->value.integer) > 0)
4290 return 0;
4291 }
4292 else
4293 {
4294 /* Stride is negative */
4295 if (mpz_cmp (start->value.integer, end->value.integer) < 0)
4296 return 0;
4297 }
4298
4299 mpz_init (rem);
4300 mpz_sub (rem, end->value.integer, start->value.integer);
4301 mpz_tdiv_r (rem, rem, stride->value.integer);
4302 mpz_sub (last, end->value.integer, rem);
4303 mpz_clear (rem);
4304
4305 return 1;
4306 }
4307
4308
4309 /* Compare a single dimension of an array reference to the array
4310 specification. */
4311
4312 static bool
4313 check_dimension (int i, gfc_array_ref *ar, gfc_array_spec *as)
4314 {
4315 mpz_t last_value;
4316
4317 if (ar->dimen_type[i] == DIMEN_STAR)
4318 {
4319 gcc_assert (ar->stride[i] == NULL);
4320 /* This implies [*] as [*:] and [*:3] are not possible. */
4321 if (ar->start[i] == NULL)
4322 {
4323 gcc_assert (ar->end[i] == NULL);
4324 return true;
4325 }
4326 }
4327
4328 /* Given start, end and stride values, calculate the minimum and
4329 maximum referenced indexes. */
4330
4331 switch (ar->dimen_type[i])
4332 {
4333 case DIMEN_VECTOR:
4334 case DIMEN_THIS_IMAGE:
4335 break;
4336
4337 case DIMEN_STAR:
4338 case DIMEN_ELEMENT:
4339 if (compare_bound (ar->start[i], as->lower[i]) == CMP_LT)
4340 {
4341 if (i < as->rank)
4342 gfc_warning (0, "Array reference at %L is out of bounds "
4343 "(%ld < %ld) in dimension %d", &ar->c_where[i],
4344 mpz_get_si (ar->start[i]->value.integer),
4345 mpz_get_si (as->lower[i]->value.integer), i+1);
4346 else
4347 gfc_warning (0, "Array reference at %L is out of bounds "
4348 "(%ld < %ld) in codimension %d", &ar->c_where[i],
4349 mpz_get_si (ar->start[i]->value.integer),
4350 mpz_get_si (as->lower[i]->value.integer),
4351 i + 1 - as->rank);
4352 return true;
4353 }
4354 if (compare_bound (ar->start[i], as->upper[i]) == CMP_GT)
4355 {
4356 if (i < as->rank)
4357 gfc_warning (0, "Array reference at %L is out of bounds "
4358 "(%ld > %ld) in dimension %d", &ar->c_where[i],
4359 mpz_get_si (ar->start[i]->value.integer),
4360 mpz_get_si (as->upper[i]->value.integer), i+1);
4361 else
4362 gfc_warning (0, "Array reference at %L is out of bounds "
4363 "(%ld > %ld) in codimension %d", &ar->c_where[i],
4364 mpz_get_si (ar->start[i]->value.integer),
4365 mpz_get_si (as->upper[i]->value.integer),
4366 i + 1 - as->rank);
4367 return true;
4368 }
4369
4370 break;
4371
4372 case DIMEN_RANGE:
4373 {
4374 #define AR_START (ar->start[i] ? ar->start[i] : as->lower[i])
4375 #define AR_END (ar->end[i] ? ar->end[i] : as->upper[i])
4376
4377 compare_result comp_start_end = compare_bound (AR_START, AR_END);
4378
4379 /* Check for zero stride, which is not allowed. */
4380 if (compare_bound_int (ar->stride[i], 0) == CMP_EQ)
4381 {
4382 gfc_error ("Illegal stride of zero at %L", &ar->c_where[i]);
4383 return false;
4384 }
4385
4386 /* if start == len || (stride > 0 && start < len)
4387 || (stride < 0 && start > len),
4388 then the array section contains at least one element. In this
4389 case, there is an out-of-bounds access if
4390 (start < lower || start > upper). */
4391 if (compare_bound (AR_START, AR_END) == CMP_EQ
4392 || ((compare_bound_int (ar->stride[i], 0) == CMP_GT
4393 || ar->stride[i] == NULL) && comp_start_end == CMP_LT)
4394 || (compare_bound_int (ar->stride[i], 0) == CMP_LT
4395 && comp_start_end == CMP_GT))
4396 {
4397 if (compare_bound (AR_START, as->lower[i]) == CMP_LT)
4398 {
4399 gfc_warning (0, "Lower array reference at %L is out of bounds "
4400 "(%ld < %ld) in dimension %d", &ar->c_where[i],
4401 mpz_get_si (AR_START->value.integer),
4402 mpz_get_si (as->lower[i]->value.integer), i+1);
4403 return true;
4404 }
4405 if (compare_bound (AR_START, as->upper[i]) == CMP_GT)
4406 {
4407 gfc_warning (0, "Lower array reference at %L is out of bounds "
4408 "(%ld > %ld) in dimension %d", &ar->c_where[i],
4409 mpz_get_si (AR_START->value.integer),
4410 mpz_get_si (as->upper[i]->value.integer), i+1);
4411 return true;
4412 }
4413 }
4414
4415 /* If we can compute the highest index of the array section,
4416 then it also has to be between lower and upper. */
4417 mpz_init (last_value);
4418 if (compute_last_value_for_triplet (AR_START, AR_END, ar->stride[i],
4419 last_value))
4420 {
4421 if (compare_bound_mpz_t (as->lower[i], last_value) == CMP_GT)
4422 {
4423 gfc_warning (0, "Upper array reference at %L is out of bounds "
4424 "(%ld < %ld) in dimension %d", &ar->c_where[i],
4425 mpz_get_si (last_value),
4426 mpz_get_si (as->lower[i]->value.integer), i+1);
4427 mpz_clear (last_value);
4428 return true;
4429 }
4430 if (compare_bound_mpz_t (as->upper[i], last_value) == CMP_LT)
4431 {
4432 gfc_warning (0, "Upper array reference at %L is out of bounds "
4433 "(%ld > %ld) in dimension %d", &ar->c_where[i],
4434 mpz_get_si (last_value),
4435 mpz_get_si (as->upper[i]->value.integer), i+1);
4436 mpz_clear (last_value);
4437 return true;
4438 }
4439 }
4440 mpz_clear (last_value);
4441
4442 #undef AR_START
4443 #undef AR_END
4444 }
4445 break;
4446
4447 default:
4448 gfc_internal_error ("check_dimension(): Bad array reference");
4449 }
4450
4451 return true;
4452 }
4453
4454
4455 /* Compare an array reference with an array specification. */
4456
4457 static bool
4458 compare_spec_to_ref (gfc_array_ref *ar)
4459 {
4460 gfc_array_spec *as;
4461 int i;
4462
4463 as = ar->as;
4464 i = as->rank - 1;
4465 /* TODO: Full array sections are only allowed as actual parameters. */
4466 if (as->type == AS_ASSUMED_SIZE
4467 && (/*ar->type == AR_FULL
4468 ||*/ (ar->type == AR_SECTION
4469 && ar->dimen_type[i] == DIMEN_RANGE && ar->end[i] == NULL)))
4470 {
4471 gfc_error ("Rightmost upper bound of assumed size array section "
4472 "not specified at %L", &ar->where);
4473 return false;
4474 }
4475
4476 if (ar->type == AR_FULL)
4477 return true;
4478
4479 if (as->rank != ar->dimen)
4480 {
4481 gfc_error ("Rank mismatch in array reference at %L (%d/%d)",
4482 &ar->where, ar->dimen, as->rank);
4483 return false;
4484 }
4485
4486 /* ar->codimen == 0 is a local array. */
4487 if (as->corank != ar->codimen && ar->codimen != 0)
4488 {
4489 gfc_error ("Coindex rank mismatch in array reference at %L (%d/%d)",
4490 &ar->where, ar->codimen, as->corank);
4491 return false;
4492 }
4493
4494 for (i = 0; i < as->rank; i++)
4495 if (!check_dimension (i, ar, as))
4496 return false;
4497
4498 /* Local access has no coarray spec. */
4499 if (ar->codimen != 0)
4500 for (i = as->rank; i < as->rank + as->corank; i++)
4501 {
4502 if (ar->dimen_type[i] != DIMEN_ELEMENT && !ar->in_allocate
4503 && ar->dimen_type[i] != DIMEN_THIS_IMAGE)
4504 {
4505 gfc_error ("Coindex of codimension %d must be a scalar at %L",
4506 i + 1 - as->rank, &ar->where);
4507 return false;
4508 }
4509 if (!check_dimension (i, ar, as))
4510 return false;
4511 }
4512
4513 return true;
4514 }
4515
4516
4517 /* Resolve one part of an array index. */
4518
4519 static bool
4520 gfc_resolve_index_1 (gfc_expr *index, int check_scalar,
4521 int force_index_integer_kind)
4522 {
4523 gfc_typespec ts;
4524
4525 if (index == NULL)
4526 return true;
4527
4528 if (!gfc_resolve_expr (index))
4529 return false;
4530
4531 if (check_scalar && index->rank != 0)
4532 {
4533 gfc_error ("Array index at %L must be scalar", &index->where);
4534 return false;
4535 }
4536
4537 if (index->ts.type != BT_INTEGER && index->ts.type != BT_REAL)
4538 {
4539 gfc_error ("Array index at %L must be of INTEGER type, found %s",
4540 &index->where, gfc_basic_typename (index->ts.type));
4541 return false;
4542 }
4543
4544 if (index->ts.type == BT_REAL)
4545 if (!gfc_notify_std (GFC_STD_LEGACY, "REAL array index at %L",
4546 &index->where))
4547 return false;
4548
4549 if ((index->ts.kind != gfc_index_integer_kind
4550 && force_index_integer_kind)
4551 || index->ts.type != BT_INTEGER)
4552 {
4553 gfc_clear_ts (&ts);
4554 ts.type = BT_INTEGER;
4555 ts.kind = gfc_index_integer_kind;
4556
4557 gfc_convert_type_warn (index, &ts, 2, 0);
4558 }
4559
4560 return true;
4561 }
4562
4563 /* Resolve one part of an array index. */
4564
4565 bool
4566 gfc_resolve_index (gfc_expr *index, int check_scalar)
4567 {
4568 return gfc_resolve_index_1 (index, check_scalar, 1);
4569 }
4570
4571 /* Resolve a dim argument to an intrinsic function. */
4572
4573 bool
4574 gfc_resolve_dim_arg (gfc_expr *dim)
4575 {
4576 if (dim == NULL)
4577 return true;
4578
4579 if (!gfc_resolve_expr (dim))
4580 return false;
4581
4582 if (dim->rank != 0)
4583 {
4584 gfc_error ("Argument dim at %L must be scalar", &dim->where);
4585 return false;
4586
4587 }
4588
4589 if (dim->ts.type != BT_INTEGER)
4590 {
4591 gfc_error ("Argument dim at %L must be of INTEGER type", &dim->where);
4592 return false;
4593 }
4594
4595 if (dim->ts.kind != gfc_index_integer_kind)
4596 {
4597 gfc_typespec ts;
4598
4599 gfc_clear_ts (&ts);
4600 ts.type = BT_INTEGER;
4601 ts.kind = gfc_index_integer_kind;
4602
4603 gfc_convert_type_warn (dim, &ts, 2, 0);
4604 }
4605
4606 return true;
4607 }
4608
4609 /* Given an expression that contains array references, update those array
4610 references to point to the right array specifications. While this is
4611 filled in during matching, this information is difficult to save and load
4612 in a module, so we take care of it here.
4613
4614 The idea here is that the original array reference comes from the
4615 base symbol. We traverse the list of reference structures, setting
4616 the stored reference to references. Component references can
4617 provide an additional array specification. */
4618
4619 static void
4620 find_array_spec (gfc_expr *e)
4621 {
4622 gfc_array_spec *as;
4623 gfc_component *c;
4624 gfc_ref *ref;
4625
4626 if (e->symtree->n.sym->ts.type == BT_CLASS)
4627 as = CLASS_DATA (e->symtree->n.sym)->as;
4628 else
4629 as = e->symtree->n.sym->as;
4630
4631 for (ref = e->ref; ref; ref = ref->next)
4632 switch (ref->type)
4633 {
4634 case REF_ARRAY:
4635 if (as == NULL)
4636 gfc_internal_error ("find_array_spec(): Missing spec");
4637
4638 ref->u.ar.as = as;
4639 as = NULL;
4640 break;
4641
4642 case REF_COMPONENT:
4643 c = ref->u.c.component;
4644 if (c->attr.dimension)
4645 {
4646 if (as != NULL)
4647 gfc_internal_error ("find_array_spec(): unused as(1)");
4648 as = c->as;
4649 }
4650
4651 break;
4652
4653 case REF_SUBSTRING:
4654 break;
4655 }
4656
4657 if (as != NULL)
4658 gfc_internal_error ("find_array_spec(): unused as(2)");
4659 }
4660
4661
4662 /* Resolve an array reference. */
4663
4664 static bool
4665 resolve_array_ref (gfc_array_ref *ar)
4666 {
4667 int i, check_scalar;
4668 gfc_expr *e;
4669
4670 for (i = 0; i < ar->dimen + ar->codimen; i++)
4671 {
4672 check_scalar = ar->dimen_type[i] == DIMEN_RANGE;
4673
4674 /* Do not force gfc_index_integer_kind for the start. We can
4675 do fine with any integer kind. This avoids temporary arrays
4676 created for indexing with a vector. */
4677 if (!gfc_resolve_index_1 (ar->start[i], check_scalar, 0))
4678 return false;
4679 if (!gfc_resolve_index (ar->end[i], check_scalar))
4680 return false;
4681 if (!gfc_resolve_index (ar->stride[i], check_scalar))
4682 return false;
4683
4684 e = ar->start[i];
4685
4686 if (ar->dimen_type[i] == DIMEN_UNKNOWN)
4687 switch (e->rank)
4688 {
4689 case 0:
4690 ar->dimen_type[i] = DIMEN_ELEMENT;
4691 break;
4692
4693 case 1:
4694 ar->dimen_type[i] = DIMEN_VECTOR;
4695 if (e->expr_type == EXPR_VARIABLE
4696 && e->symtree->n.sym->ts.type == BT_DERIVED)
4697 ar->start[i] = gfc_get_parentheses (e);
4698 break;
4699
4700 default:
4701 gfc_error ("Array index at %L is an array of rank %d",
4702 &ar->c_where[i], e->rank);
4703 return false;
4704 }
4705
4706 /* Fill in the upper bound, which may be lower than the
4707 specified one for something like a(2:10:5), which is
4708 identical to a(2:7:5). Only relevant for strides not equal
4709 to one. Don't try a division by zero. */
4710 if (ar->dimen_type[i] == DIMEN_RANGE
4711 && ar->stride[i] != NULL && ar->stride[i]->expr_type == EXPR_CONSTANT
4712 && mpz_cmp_si (ar->stride[i]->value.integer, 1L) != 0
4713 && mpz_cmp_si (ar->stride[i]->value.integer, 0L) != 0)
4714 {
4715 mpz_t size, end;
4716
4717 if (gfc_ref_dimen_size (ar, i, &size, &end))
4718 {
4719 if (ar->end[i] == NULL)
4720 {
4721 ar->end[i] =
4722 gfc_get_constant_expr (BT_INTEGER, gfc_index_integer_kind,
4723 &ar->where);
4724 mpz_set (ar->end[i]->value.integer, end);
4725 }
4726 else if (ar->end[i]->ts.type == BT_INTEGER
4727 && ar->end[i]->expr_type == EXPR_CONSTANT)
4728 {
4729 mpz_set (ar->end[i]->value.integer, end);
4730 }
4731 else
4732 gcc_unreachable ();
4733
4734 mpz_clear (size);
4735 mpz_clear (end);
4736 }
4737 }
4738 }
4739
4740 if (ar->type == AR_FULL)
4741 {
4742 if (ar->as->rank == 0)
4743 ar->type = AR_ELEMENT;
4744
4745 /* Make sure array is the same as array(:,:), this way
4746 we don't need to special case all the time. */
4747 ar->dimen = ar->as->rank;
4748 for (i = 0; i < ar->dimen; i++)
4749 {
4750 ar->dimen_type[i] = DIMEN_RANGE;
4751
4752 gcc_assert (ar->start[i] == NULL);
4753 gcc_assert (ar->end[i] == NULL);
4754 gcc_assert (ar->stride[i] == NULL);
4755 }
4756 }
4757
4758 /* If the reference type is unknown, figure out what kind it is. */
4759
4760 if (ar->type == AR_UNKNOWN)
4761 {
4762 ar->type = AR_ELEMENT;
4763 for (i = 0; i < ar->dimen; i++)
4764 if (ar->dimen_type[i] == DIMEN_RANGE
4765 || ar->dimen_type[i] == DIMEN_VECTOR)
4766 {
4767 ar->type = AR_SECTION;
4768 break;
4769 }
4770 }
4771
4772 if (!ar->as->cray_pointee && !compare_spec_to_ref (ar))
4773 return false;
4774
4775 if (ar->as->corank && ar->codimen == 0)
4776 {
4777 int n;
4778 ar->codimen = ar->as->corank;
4779 for (n = ar->dimen; n < ar->dimen + ar->codimen; n++)
4780 ar->dimen_type[n] = DIMEN_THIS_IMAGE;
4781 }
4782
4783 return true;
4784 }
4785
4786
4787 static bool
4788 resolve_substring (gfc_ref *ref)
4789 {
4790 int k = gfc_validate_kind (BT_INTEGER, gfc_charlen_int_kind, false);
4791
4792 if (ref->u.ss.start != NULL)
4793 {
4794 if (!gfc_resolve_expr (ref->u.ss.start))
4795 return false;
4796
4797 if (ref->u.ss.start->ts.type != BT_INTEGER)
4798 {
4799 gfc_error ("Substring start index at %L must be of type INTEGER",
4800 &ref->u.ss.start->where);
4801 return false;
4802 }
4803
4804 if (ref->u.ss.start->rank != 0)
4805 {
4806 gfc_error ("Substring start index at %L must be scalar",
4807 &ref->u.ss.start->where);
4808 return false;
4809 }
4810
4811 if (compare_bound_int (ref->u.ss.start, 1) == CMP_LT
4812 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
4813 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
4814 {
4815 gfc_error ("Substring start index at %L is less than one",
4816 &ref->u.ss.start->where);
4817 return false;
4818 }
4819 }
4820
4821 if (ref->u.ss.end != NULL)
4822 {
4823 if (!gfc_resolve_expr (ref->u.ss.end))
4824 return false;
4825
4826 if (ref->u.ss.end->ts.type != BT_INTEGER)
4827 {
4828 gfc_error ("Substring end index at %L must be of type INTEGER",
4829 &ref->u.ss.end->where);
4830 return false;
4831 }
4832
4833 if (ref->u.ss.end->rank != 0)
4834 {
4835 gfc_error ("Substring end index at %L must be scalar",
4836 &ref->u.ss.end->where);
4837 return false;
4838 }
4839
4840 if (ref->u.ss.length != NULL
4841 && compare_bound (ref->u.ss.end, ref->u.ss.length->length) == CMP_GT
4842 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
4843 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
4844 {
4845 gfc_error ("Substring end index at %L exceeds the string length",
4846 &ref->u.ss.start->where);
4847 return false;
4848 }
4849
4850 if (compare_bound_mpz_t (ref->u.ss.end,
4851 gfc_integer_kinds[k].huge) == CMP_GT
4852 && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ
4853 || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT))
4854 {
4855 gfc_error ("Substring end index at %L is too large",
4856 &ref->u.ss.end->where);
4857 return false;
4858 }
4859 }
4860
4861 return true;
4862 }
4863
4864
4865 /* This function supplies missing substring charlens. */
4866
4867 void
4868 gfc_resolve_substring_charlen (gfc_expr *e)
4869 {
4870 gfc_ref *char_ref;
4871 gfc_expr *start, *end;
4872 gfc_typespec *ts = NULL;
4873
4874 for (char_ref = e->ref; char_ref; char_ref = char_ref->next)
4875 {
4876 if (char_ref->type == REF_SUBSTRING)
4877 break;
4878 if (char_ref->type == REF_COMPONENT)
4879 ts = &char_ref->u.c.component->ts;
4880 }
4881
4882 if (!char_ref)
4883 return;
4884
4885 gcc_assert (char_ref->next == NULL);
4886
4887 if (e->ts.u.cl)
4888 {
4889 if (e->ts.u.cl->length)
4890 gfc_free_expr (e->ts.u.cl->length);
4891 else if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.dummy)
4892 return;
4893 }
4894
4895 e->ts.type = BT_CHARACTER;
4896 e->ts.kind = gfc_default_character_kind;
4897
4898 if (!e->ts.u.cl)
4899 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
4900
4901 if (char_ref->u.ss.start)
4902 start = gfc_copy_expr (char_ref->u.ss.start);
4903 else
4904 start = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
4905
4906 if (char_ref->u.ss.end)
4907 end = gfc_copy_expr (char_ref->u.ss.end);
4908 else if (e->expr_type == EXPR_VARIABLE)
4909 {
4910 if (!ts)
4911 ts = &e->symtree->n.sym->ts;
4912 end = gfc_copy_expr (ts->u.cl->length);
4913 }
4914 else
4915 end = NULL;
4916
4917 if (!start || !end)
4918 {
4919 gfc_free_expr (start);
4920 gfc_free_expr (end);
4921 return;
4922 }
4923
4924 /* Length = (end - start + 1). */
4925 e->ts.u.cl->length = gfc_subtract (end, start);
4926 e->ts.u.cl->length = gfc_add (e->ts.u.cl->length,
4927 gfc_get_int_expr (gfc_default_integer_kind,
4928 NULL, 1));
4929
4930 /* F2008, 6.4.1: Both the starting point and the ending point shall
4931 be within the range 1, 2, ..., n unless the starting point exceeds
4932 the ending point, in which case the substring has length zero. */
4933
4934 if (mpz_cmp_si (e->ts.u.cl->length->value.integer, 0) < 0)
4935 mpz_set_si (e->ts.u.cl->length->value.integer, 0);
4936
4937 e->ts.u.cl->length->ts.type = BT_INTEGER;
4938 e->ts.u.cl->length->ts.kind = gfc_charlen_int_kind;
4939
4940 /* Make sure that the length is simplified. */
4941 gfc_simplify_expr (e->ts.u.cl->length, 1);
4942 gfc_resolve_expr (e->ts.u.cl->length);
4943 }
4944
4945
4946 /* Resolve subtype references. */
4947
4948 static bool
4949 resolve_ref (gfc_expr *expr)
4950 {
4951 int current_part_dimension, n_components, seen_part_dimension;
4952 gfc_ref *ref;
4953
4954 for (ref = expr->ref; ref; ref = ref->next)
4955 if (ref->type == REF_ARRAY && ref->u.ar.as == NULL)
4956 {
4957 find_array_spec (expr);
4958 break;
4959 }
4960
4961 for (ref = expr->ref; ref; ref = ref->next)
4962 switch (ref->type)
4963 {
4964 case REF_ARRAY:
4965 if (!resolve_array_ref (&ref->u.ar))
4966 return false;
4967 break;
4968
4969 case REF_COMPONENT:
4970 break;
4971
4972 case REF_SUBSTRING:
4973 if (!resolve_substring (ref))
4974 return false;
4975 break;
4976 }
4977
4978 /* Check constraints on part references. */
4979
4980 current_part_dimension = 0;
4981 seen_part_dimension = 0;
4982 n_components = 0;
4983
4984 for (ref = expr->ref; ref; ref = ref->next)
4985 {
4986 switch (ref->type)
4987 {
4988 case REF_ARRAY:
4989 switch (ref->u.ar.type)
4990 {
4991 case AR_FULL:
4992 /* Coarray scalar. */
4993 if (ref->u.ar.as->rank == 0)
4994 {
4995 current_part_dimension = 0;
4996 break;
4997 }
4998 /* Fall through. */
4999 case AR_SECTION:
5000 current_part_dimension = 1;
5001 break;
5002
5003 case AR_ELEMENT:
5004 current_part_dimension = 0;
5005 break;
5006
5007 case AR_UNKNOWN:
5008 gfc_internal_error ("resolve_ref(): Bad array reference");
5009 }
5010
5011 break;
5012
5013 case REF_COMPONENT:
5014 if (current_part_dimension || seen_part_dimension)
5015 {
5016 /* F03:C614. */
5017 if (ref->u.c.component->attr.pointer
5018 || ref->u.c.component->attr.proc_pointer
5019 || (ref->u.c.component->ts.type == BT_CLASS
5020 && CLASS_DATA (ref->u.c.component)->attr.pointer))
5021 {
5022 gfc_error ("Component to the right of a part reference "
5023 "with nonzero rank must not have the POINTER "
5024 "attribute at %L", &expr->where);
5025 return false;
5026 }
5027 else if (ref->u.c.component->attr.allocatable
5028 || (ref->u.c.component->ts.type == BT_CLASS
5029 && CLASS_DATA (ref->u.c.component)->attr.allocatable))
5030
5031 {
5032 gfc_error ("Component to the right of a part reference "
5033 "with nonzero rank must not have the ALLOCATABLE "
5034 "attribute at %L", &expr->where);
5035 return false;
5036 }
5037 }
5038
5039 n_components++;
5040 break;
5041
5042 case REF_SUBSTRING:
5043 break;
5044 }
5045
5046 if (((ref->type == REF_COMPONENT && n_components > 1)
5047 || ref->next == NULL)
5048 && current_part_dimension
5049 && seen_part_dimension)
5050 {
5051 gfc_error ("Two or more part references with nonzero rank must "
5052 "not be specified at %L", &expr->where);
5053 return false;
5054 }
5055
5056 if (ref->type == REF_COMPONENT)
5057 {
5058 if (current_part_dimension)
5059 seen_part_dimension = 1;
5060
5061 /* reset to make sure */
5062 current_part_dimension = 0;
5063 }
5064 }
5065
5066 return true;
5067 }
5068
5069
5070 /* Given an expression, determine its shape. This is easier than it sounds.
5071 Leaves the shape array NULL if it is not possible to determine the shape. */
5072
5073 static void
5074 expression_shape (gfc_expr *e)
5075 {
5076 mpz_t array[GFC_MAX_DIMENSIONS];
5077 int i;
5078
5079 if (e->rank <= 0 || e->shape != NULL)
5080 return;
5081
5082 for (i = 0; i < e->rank; i++)
5083 if (!gfc_array_dimen_size (e, i, &array[i]))
5084 goto fail;
5085
5086 e->shape = gfc_get_shape (e->rank);
5087
5088 memcpy (e->shape, array, e->rank * sizeof (mpz_t));
5089
5090 return;
5091
5092 fail:
5093 for (i--; i >= 0; i--)
5094 mpz_clear (array[i]);
5095 }
5096
5097
5098 /* Given a variable expression node, compute the rank of the expression by
5099 examining the base symbol and any reference structures it may have. */
5100
5101 void
5102 expression_rank (gfc_expr *e)
5103 {
5104 gfc_ref *ref;
5105 int i, rank;
5106
5107 /* Just to make sure, because EXPR_COMPCALL's also have an e->ref and that
5108 could lead to serious confusion... */
5109 gcc_assert (e->expr_type != EXPR_COMPCALL);
5110
5111 if (e->ref == NULL)
5112 {
5113 if (e->expr_type == EXPR_ARRAY)
5114 goto done;
5115 /* Constructors can have a rank different from one via RESHAPE(). */
5116
5117 if (e->symtree == NULL)
5118 {
5119 e->rank = 0;
5120 goto done;
5121 }
5122
5123 e->rank = (e->symtree->n.sym->as == NULL)
5124 ? 0 : e->symtree->n.sym->as->rank;
5125 goto done;
5126 }
5127
5128 rank = 0;
5129
5130 for (ref = e->ref; ref; ref = ref->next)
5131 {
5132 if (ref->type == REF_COMPONENT && ref->u.c.component->attr.proc_pointer
5133 && ref->u.c.component->attr.function && !ref->next)
5134 rank = ref->u.c.component->as ? ref->u.c.component->as->rank : 0;
5135
5136 if (ref->type != REF_ARRAY)
5137 continue;
5138
5139 if (ref->u.ar.type == AR_FULL)
5140 {
5141 rank = ref->u.ar.as->rank;
5142 break;
5143 }
5144
5145 if (ref->u.ar.type == AR_SECTION)
5146 {
5147 /* Figure out the rank of the section. */
5148 if (rank != 0)
5149 gfc_internal_error ("expression_rank(): Two array specs");
5150
5151 for (i = 0; i < ref->u.ar.dimen; i++)
5152 if (ref->u.ar.dimen_type[i] == DIMEN_RANGE
5153 || ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
5154 rank++;
5155
5156 break;
5157 }
5158 }
5159
5160 e->rank = rank;
5161
5162 done:
5163 expression_shape (e);
5164 }
5165
5166
5167 static void
5168 add_caf_get_intrinsic (gfc_expr *e)
5169 {
5170 gfc_expr *wrapper, *tmp_expr;
5171 gfc_ref *ref;
5172 int n;
5173
5174 for (ref = e->ref; ref; ref = ref->next)
5175 if (ref->type == REF_ARRAY && ref->u.ar.codimen > 0)
5176 break;
5177 if (ref == NULL)
5178 return;
5179
5180 for (n = ref->u.ar.dimen; n < ref->u.ar.dimen + ref->u.ar.codimen; n++)
5181 if (ref->u.ar.dimen_type[n] != DIMEN_ELEMENT)
5182 return;
5183
5184 tmp_expr = XCNEW (gfc_expr);
5185 *tmp_expr = *e;
5186 wrapper = gfc_build_intrinsic_call (gfc_current_ns, GFC_ISYM_CAF_GET,
5187 "caf_get", tmp_expr->where, 1, tmp_expr);
5188 wrapper->ts = e->ts;
5189 wrapper->rank = e->rank;
5190 if (e->rank)
5191 wrapper->shape = gfc_copy_shape (e->shape, e->rank);
5192 *e = *wrapper;
5193 free (wrapper);
5194 }
5195
5196
5197 static void
5198 remove_caf_get_intrinsic (gfc_expr *e)
5199 {
5200 gcc_assert (e->expr_type == EXPR_FUNCTION && e->value.function.isym
5201 && e->value.function.isym->id == GFC_ISYM_CAF_GET);
5202 gfc_expr *e2 = e->value.function.actual->expr;
5203 e->value.function.actual->expr = NULL;
5204 gfc_free_actual_arglist (e->value.function.actual);
5205 gfc_free_shape (&e->shape, e->rank);
5206 *e = *e2;
5207 free (e2);
5208 }
5209
5210
5211 /* Resolve a variable expression. */
5212
5213 static bool
5214 resolve_variable (gfc_expr *e)
5215 {
5216 gfc_symbol *sym;
5217 bool t;
5218
5219 t = true;
5220
5221 if (e->symtree == NULL)
5222 return false;
5223 sym = e->symtree->n.sym;
5224
5225 /* Use same check as for TYPE(*) below; this check has to be before TYPE(*)
5226 as ts.type is set to BT_ASSUMED in resolve_symbol. */
5227 if (sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
5228 {
5229 if (!actual_arg || inquiry_argument)
5230 {
5231 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may only "
5232 "be used as actual argument", sym->name, &e->where);
5233 return false;
5234 }
5235 }
5236 /* TS 29113, 407b. */
5237 else if (e->ts.type == BT_ASSUMED)
5238 {
5239 if (!actual_arg)
5240 {
5241 gfc_error ("Assumed-type variable %s at %L may only be used "
5242 "as actual argument", sym->name, &e->where);
5243 return false;
5244 }
5245 else if (inquiry_argument && !first_actual_arg)
5246 {
5247 /* FIXME: It doesn't work reliably as inquiry_argument is not set
5248 for all inquiry functions in resolve_function; the reason is
5249 that the function-name resolution happens too late in that
5250 function. */
5251 gfc_error ("Assumed-type variable %s at %L as actual argument to "
5252 "an inquiry function shall be the first argument",
5253 sym->name, &e->where);
5254 return false;
5255 }
5256 }
5257 /* TS 29113, C535b. */
5258 else if ((sym->ts.type == BT_CLASS && sym->attr.class_ok
5259 && CLASS_DATA (sym)->as
5260 && CLASS_DATA (sym)->as->type == AS_ASSUMED_RANK)
5261 || (sym->ts.type != BT_CLASS && sym->as
5262 && sym->as->type == AS_ASSUMED_RANK))
5263 {
5264 if (!actual_arg)
5265 {
5266 gfc_error ("Assumed-rank variable %s at %L may only be used as "
5267 "actual argument", sym->name, &e->where);
5268 return false;
5269 }
5270 else if (inquiry_argument && !first_actual_arg)
5271 {
5272 /* FIXME: It doesn't work reliably as inquiry_argument is not set
5273 for all inquiry functions in resolve_function; the reason is
5274 that the function-name resolution happens too late in that
5275 function. */
5276 gfc_error ("Assumed-rank variable %s at %L as actual argument "
5277 "to an inquiry function shall be the first argument",
5278 sym->name, &e->where);
5279 return false;
5280 }
5281 }
5282
5283 if ((sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK)) && e->ref
5284 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
5285 && e->ref->next == NULL))
5286 {
5287 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall not have "
5288 "a subobject reference", sym->name, &e->ref->u.ar.where);
5289 return false;
5290 }
5291 /* TS 29113, 407b. */
5292 else if (e->ts.type == BT_ASSUMED && e->ref
5293 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
5294 && e->ref->next == NULL))
5295 {
5296 gfc_error ("Assumed-type variable %s at %L shall not have a subobject "
5297 "reference", sym->name, &e->ref->u.ar.where);
5298 return false;
5299 }
5300
5301 /* TS 29113, C535b. */
5302 if (((sym->ts.type == BT_CLASS && sym->attr.class_ok
5303 && CLASS_DATA (sym)->as
5304 && CLASS_DATA (sym)->as->type == AS_ASSUMED_RANK)
5305 || (sym->ts.type != BT_CLASS && sym->as
5306 && sym->as->type == AS_ASSUMED_RANK))
5307 && e->ref
5308 && !(e->ref->type == REF_ARRAY && e->ref->u.ar.type == AR_FULL
5309 && e->ref->next == NULL))
5310 {
5311 gfc_error ("Assumed-rank variable %s at %L shall not have a subobject "
5312 "reference", sym->name, &e->ref->u.ar.where);
5313 return false;
5314 }
5315
5316 /* For variables that are used in an associate (target => object) where
5317 the object's basetype is array valued while the target is scalar,
5318 the ts' type of the component refs is still array valued, which
5319 can't be translated that way. */
5320 if (sym->assoc && e->rank == 0 && e->ref && sym->ts.type == BT_CLASS
5321 && sym->assoc->target->ts.type == BT_CLASS
5322 && CLASS_DATA (sym->assoc->target)->as)
5323 {
5324 gfc_ref *ref = e->ref;
5325 while (ref)
5326 {
5327 switch (ref->type)
5328 {
5329 case REF_COMPONENT:
5330 ref->u.c.sym = sym->ts.u.derived;
5331 /* Stop the loop. */
5332 ref = NULL;
5333 break;
5334 default:
5335 ref = ref->next;
5336 break;
5337 }
5338 }
5339 }
5340
5341 /* If this is an associate-name, it may be parsed with an array reference
5342 in error even though the target is scalar. Fail directly in this case.
5343 TODO Understand why class scalar expressions must be excluded. */
5344 if (sym->assoc && !(sym->ts.type == BT_CLASS && e->rank == 0))
5345 {
5346 if (sym->ts.type == BT_CLASS)
5347 gfc_fix_class_refs (e);
5348 if (!sym->attr.dimension && e->ref && e->ref->type == REF_ARRAY)
5349 return false;
5350 }
5351
5352 if (sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.generic)
5353 sym->ts.u.derived = gfc_find_dt_in_generic (sym->ts.u.derived);
5354
5355 /* On the other hand, the parser may not have known this is an array;
5356 in this case, we have to add a FULL reference. */
5357 if (sym->assoc && sym->attr.dimension && !e->ref)
5358 {
5359 e->ref = gfc_get_ref ();
5360 e->ref->type = REF_ARRAY;
5361 e->ref->u.ar.type = AR_FULL;
5362 e->ref->u.ar.dimen = 0;
5363 }
5364
5365 /* Like above, but for class types, where the checking whether an array
5366 ref is present is more complicated. Furthermore make sure not to add
5367 the full array ref to _vptr or _len refs. */
5368 if (sym->assoc && sym->ts.type == BT_CLASS
5369 && CLASS_DATA (sym)->attr.dimension
5370 && (e->ts.type != BT_DERIVED || !e->ts.u.derived->attr.vtype))
5371 {
5372 gfc_ref *ref, *newref;
5373
5374 newref = gfc_get_ref ();
5375 newref->type = REF_ARRAY;
5376 newref->u.ar.type = AR_FULL;
5377 newref->u.ar.dimen = 0;
5378 /* Because this is an associate var and the first ref either is a ref to
5379 the _data component or not, no traversal of the ref chain is
5380 needed. The array ref needs to be inserted after the _data ref,
5381 or when that is not present, which may happend for polymorphic
5382 types, then at the first position. */
5383 ref = e->ref;
5384 if (!ref)
5385 e->ref = newref;
5386 else if (ref->type == REF_COMPONENT
5387 && strcmp ("_data", ref->u.c.component->name) == 0)
5388 {
5389 if (!ref->next || ref->next->type != REF_ARRAY)
5390 {
5391 newref->next = ref->next;
5392 ref->next = newref;
5393 }
5394 else
5395 /* Array ref present already. */
5396 gfc_free_ref_list (newref);
5397 }
5398 else if (ref->type == REF_ARRAY)
5399 /* Array ref present already. */
5400 gfc_free_ref_list (newref);
5401 else
5402 {
5403 newref->next = ref;
5404 e->ref = newref;
5405 }
5406 }
5407
5408 if (e->ref && !resolve_ref (e))
5409 return false;
5410
5411 if (sym->attr.flavor == FL_PROCEDURE
5412 && (!sym->attr.function
5413 || (sym->attr.function && sym->result
5414 && sym->result->attr.proc_pointer
5415 && !sym->result->attr.function)))
5416 {
5417 e->ts.type = BT_PROCEDURE;
5418 goto resolve_procedure;
5419 }
5420
5421 if (sym->ts.type != BT_UNKNOWN)
5422 gfc_variable_attr (e, &e->ts);
5423 else if (sym->attr.flavor == FL_PROCEDURE
5424 && sym->attr.function && sym->result
5425 && sym->result->ts.type != BT_UNKNOWN
5426 && sym->result->attr.proc_pointer)
5427 e->ts = sym->result->ts;
5428 else
5429 {
5430 /* Must be a simple variable reference. */
5431 if (!gfc_set_default_type (sym, 1, sym->ns))
5432 return false;
5433 e->ts = sym->ts;
5434 }
5435
5436 if (check_assumed_size_reference (sym, e))
5437 return false;
5438
5439 /* Deal with forward references to entries during gfc_resolve_code, to
5440 satisfy, at least partially, 12.5.2.5. */
5441 if (gfc_current_ns->entries
5442 && current_entry_id == sym->entry_id
5443 && cs_base
5444 && cs_base->current
5445 && cs_base->current->op != EXEC_ENTRY)
5446 {
5447 gfc_entry_list *entry;
5448 gfc_formal_arglist *formal;
5449 int n;
5450 bool seen, saved_specification_expr;
5451
5452 /* If the symbol is a dummy... */
5453 if (sym->attr.dummy && sym->ns == gfc_current_ns)
5454 {
5455 entry = gfc_current_ns->entries;
5456 seen = false;
5457
5458 /* ...test if the symbol is a parameter of previous entries. */
5459 for (; entry && entry->id <= current_entry_id; entry = entry->next)
5460 for (formal = entry->sym->formal; formal; formal = formal->next)
5461 {
5462 if (formal->sym && sym->name == formal->sym->name)
5463 {
5464 seen = true;
5465 break;
5466 }
5467 }
5468
5469 /* If it has not been seen as a dummy, this is an error. */
5470 if (!seen)
5471 {
5472 if (specification_expr)
5473 gfc_error ("Variable %qs, used in a specification expression"
5474 ", is referenced at %L before the ENTRY statement "
5475 "in which it is a parameter",
5476 sym->name, &cs_base->current->loc);
5477 else
5478 gfc_error ("Variable %qs is used at %L before the ENTRY "
5479 "statement in which it is a parameter",
5480 sym->name, &cs_base->current->loc);
5481 t = false;
5482 }
5483 }
5484
5485 /* Now do the same check on the specification expressions. */
5486 saved_specification_expr = specification_expr;
5487 specification_expr = true;
5488 if (sym->ts.type == BT_CHARACTER
5489 && !gfc_resolve_expr (sym->ts.u.cl->length))
5490 t = false;
5491
5492 if (sym->as)
5493 for (n = 0; n < sym->as->rank; n++)
5494 {
5495 if (!gfc_resolve_expr (sym->as->lower[n]))
5496 t = false;
5497 if (!gfc_resolve_expr (sym->as->upper[n]))
5498 t = false;
5499 }
5500 specification_expr = saved_specification_expr;
5501
5502 if (t)
5503 /* Update the symbol's entry level. */
5504 sym->entry_id = current_entry_id + 1;
5505 }
5506
5507 /* If a symbol has been host_associated mark it. This is used latter,
5508 to identify if aliasing is possible via host association. */
5509 if (sym->attr.flavor == FL_VARIABLE
5510 && gfc_current_ns->parent
5511 && (gfc_current_ns->parent == sym->ns
5512 || (gfc_current_ns->parent->parent
5513 && gfc_current_ns->parent->parent == sym->ns)))
5514 sym->attr.host_assoc = 1;
5515
5516 if (gfc_current_ns->proc_name
5517 && sym->attr.dimension
5518 && (sym->ns != gfc_current_ns
5519 || sym->attr.use_assoc
5520 || sym->attr.in_common))
5521 gfc_current_ns->proc_name->attr.array_outer_dependency = 1;
5522
5523 resolve_procedure:
5524 if (t && !resolve_procedure_expression (e))
5525 t = false;
5526
5527 /* F2008, C617 and C1229. */
5528 if (!inquiry_argument && (e->ts.type == BT_CLASS || e->ts.type == BT_DERIVED)
5529 && gfc_is_coindexed (e))
5530 {
5531 gfc_ref *ref, *ref2 = NULL;
5532
5533 for (ref = e->ref; ref; ref = ref->next)
5534 {
5535 if (ref->type == REF_COMPONENT)
5536 ref2 = ref;
5537 if (ref->type == REF_ARRAY && ref->u.ar.codimen > 0)
5538 break;
5539 }
5540
5541 for ( ; ref; ref = ref->next)
5542 if (ref->type == REF_COMPONENT)
5543 break;
5544
5545 /* Expression itself is not coindexed object. */
5546 if (ref && e->ts.type == BT_CLASS)
5547 {
5548 gfc_error ("Polymorphic subobject of coindexed object at %L",
5549 &e->where);
5550 t = false;
5551 }
5552
5553 /* Expression itself is coindexed object. */
5554 if (ref == NULL)
5555 {
5556 gfc_component *c;
5557 c = ref2 ? ref2->u.c.component : e->symtree->n.sym->components;
5558 for ( ; c; c = c->next)
5559 if (c->attr.allocatable && c->ts.type == BT_CLASS)
5560 {
5561 gfc_error ("Coindexed object with polymorphic allocatable "
5562 "subcomponent at %L", &e->where);
5563 t = false;
5564 break;
5565 }
5566 }
5567 }
5568
5569 if (t)
5570 expression_rank (e);
5571
5572 if (t && flag_coarray == GFC_FCOARRAY_LIB && gfc_is_coindexed (e))
5573 add_caf_get_intrinsic (e);
5574
5575 return t;
5576 }
5577
5578
5579 /* Checks to see that the correct symbol has been host associated.
5580 The only situation where this arises is that in which a twice
5581 contained function is parsed after the host association is made.
5582 Therefore, on detecting this, change the symbol in the expression
5583 and convert the array reference into an actual arglist if the old
5584 symbol is a variable. */
5585 static bool
5586 check_host_association (gfc_expr *e)
5587 {
5588 gfc_symbol *sym, *old_sym;
5589 gfc_symtree *st;
5590 int n;
5591 gfc_ref *ref;
5592 gfc_actual_arglist *arg, *tail = NULL;
5593 bool retval = e->expr_type == EXPR_FUNCTION;
5594
5595 /* If the expression is the result of substitution in
5596 interface.c(gfc_extend_expr) because there is no way in
5597 which the host association can be wrong. */
5598 if (e->symtree == NULL
5599 || e->symtree->n.sym == NULL
5600 || e->user_operator)
5601 return retval;
5602
5603 old_sym = e->symtree->n.sym;
5604
5605 if (gfc_current_ns->parent
5606 && old_sym->ns != gfc_current_ns)
5607 {
5608 /* Use the 'USE' name so that renamed module symbols are
5609 correctly handled. */
5610 gfc_find_symbol (e->symtree->name, gfc_current_ns, 1, &sym);
5611
5612 if (sym && old_sym != sym
5613 && sym->ts.type == old_sym->ts.type
5614 && sym->attr.flavor == FL_PROCEDURE
5615 && sym->attr.contained)
5616 {
5617 /* Clear the shape, since it might not be valid. */
5618 gfc_free_shape (&e->shape, e->rank);
5619
5620 /* Give the expression the right symtree! */
5621 gfc_find_sym_tree (e->symtree->name, NULL, 1, &st);
5622 gcc_assert (st != NULL);
5623
5624 if (old_sym->attr.flavor == FL_PROCEDURE
5625 || e->expr_type == EXPR_FUNCTION)
5626 {
5627 /* Original was function so point to the new symbol, since
5628 the actual argument list is already attached to the
5629 expression. */
5630 e->value.function.esym = NULL;
5631 e->symtree = st;
5632 }
5633 else
5634 {
5635 /* Original was variable so convert array references into
5636 an actual arglist. This does not need any checking now
5637 since resolve_function will take care of it. */
5638 e->value.function.actual = NULL;
5639 e->expr_type = EXPR_FUNCTION;
5640 e->symtree = st;
5641
5642 /* Ambiguity will not arise if the array reference is not
5643 the last reference. */
5644 for (ref = e->ref; ref; ref = ref->next)
5645 if (ref->type == REF_ARRAY && ref->next == NULL)
5646 break;
5647
5648 gcc_assert (ref->type == REF_ARRAY);
5649
5650 /* Grab the start expressions from the array ref and
5651 copy them into actual arguments. */
5652 for (n = 0; n < ref->u.ar.dimen; n++)
5653 {
5654 arg = gfc_get_actual_arglist ();
5655 arg->expr = gfc_copy_expr (ref->u.ar.start[n]);
5656 if (e->value.function.actual == NULL)
5657 tail = e->value.function.actual = arg;
5658 else
5659 {
5660 tail->next = arg;
5661 tail = arg;
5662 }
5663 }
5664
5665 /* Dump the reference list and set the rank. */
5666 gfc_free_ref_list (e->ref);
5667 e->ref = NULL;
5668 e->rank = sym->as ? sym->as->rank : 0;
5669 }
5670
5671 gfc_resolve_expr (e);
5672 sym->refs++;
5673 }
5674 }
5675 /* This might have changed! */
5676 return e->expr_type == EXPR_FUNCTION;
5677 }
5678
5679
5680 static void
5681 gfc_resolve_character_operator (gfc_expr *e)
5682 {
5683 gfc_expr *op1 = e->value.op.op1;
5684 gfc_expr *op2 = e->value.op.op2;
5685 gfc_expr *e1 = NULL;
5686 gfc_expr *e2 = NULL;
5687
5688 gcc_assert (e->value.op.op == INTRINSIC_CONCAT);
5689
5690 if (op1->ts.u.cl && op1->ts.u.cl->length)
5691 e1 = gfc_copy_expr (op1->ts.u.cl->length);
5692 else if (op1->expr_type == EXPR_CONSTANT)
5693 e1 = gfc_get_int_expr (gfc_default_integer_kind, NULL,
5694 op1->value.character.length);
5695
5696 if (op2->ts.u.cl && op2->ts.u.cl->length)
5697 e2 = gfc_copy_expr (op2->ts.u.cl->length);
5698 else if (op2->expr_type == EXPR_CONSTANT)
5699 e2 = gfc_get_int_expr (gfc_default_integer_kind, NULL,
5700 op2->value.character.length);
5701
5702 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
5703
5704 if (!e1 || !e2)
5705 {
5706 gfc_free_expr (e1);
5707 gfc_free_expr (e2);
5708
5709 return;
5710 }
5711
5712 e->ts.u.cl->length = gfc_add (e1, e2);
5713 e->ts.u.cl->length->ts.type = BT_INTEGER;
5714 e->ts.u.cl->length->ts.kind = gfc_charlen_int_kind;
5715 gfc_simplify_expr (e->ts.u.cl->length, 0);
5716 gfc_resolve_expr (e->ts.u.cl->length);
5717
5718 return;
5719 }
5720
5721
5722 /* Ensure that an character expression has a charlen and, if possible, a
5723 length expression. */
5724
5725 static void
5726 fixup_charlen (gfc_expr *e)
5727 {
5728 /* The cases fall through so that changes in expression type and the need
5729 for multiple fixes are picked up. In all circumstances, a charlen should
5730 be available for the middle end to hang a backend_decl on. */
5731 switch (e->expr_type)
5732 {
5733 case EXPR_OP:
5734 gfc_resolve_character_operator (e);
5735 /* FALLTHRU */
5736
5737 case EXPR_ARRAY:
5738 if (e->expr_type == EXPR_ARRAY)
5739 gfc_resolve_character_array_constructor (e);
5740 /* FALLTHRU */
5741
5742 case EXPR_SUBSTRING:
5743 if (!e->ts.u.cl && e->ref)
5744 gfc_resolve_substring_charlen (e);
5745 /* FALLTHRU */
5746
5747 default:
5748 if (!e->ts.u.cl)
5749 e->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
5750
5751 break;
5752 }
5753 }
5754
5755
5756 /* Update an actual argument to include the passed-object for type-bound
5757 procedures at the right position. */
5758
5759 static gfc_actual_arglist*
5760 update_arglist_pass (gfc_actual_arglist* lst, gfc_expr* po, unsigned argpos,
5761 const char *name)
5762 {
5763 gcc_assert (argpos > 0);
5764
5765 if (argpos == 1)
5766 {
5767 gfc_actual_arglist* result;
5768
5769 result = gfc_get_actual_arglist ();
5770 result->expr = po;
5771 result->next = lst;
5772 if (name)
5773 result->name = name;
5774
5775 return result;
5776 }
5777
5778 if (lst)
5779 lst->next = update_arglist_pass (lst->next, po, argpos - 1, name);
5780 else
5781 lst = update_arglist_pass (NULL, po, argpos - 1, name);
5782 return lst;
5783 }
5784
5785
5786 /* Extract the passed-object from an EXPR_COMPCALL (a copy of it). */
5787
5788 static gfc_expr*
5789 extract_compcall_passed_object (gfc_expr* e)
5790 {
5791 gfc_expr* po;
5792
5793 gcc_assert (e->expr_type == EXPR_COMPCALL);
5794
5795 if (e->value.compcall.base_object)
5796 po = gfc_copy_expr (e->value.compcall.base_object);
5797 else
5798 {
5799 po = gfc_get_expr ();
5800 po->expr_type = EXPR_VARIABLE;
5801 po->symtree = e->symtree;
5802 po->ref = gfc_copy_ref (e->ref);
5803 po->where = e->where;
5804 }
5805
5806 if (!gfc_resolve_expr (po))
5807 return NULL;
5808
5809 return po;
5810 }
5811
5812
5813 /* Update the arglist of an EXPR_COMPCALL expression to include the
5814 passed-object. */
5815
5816 static bool
5817 update_compcall_arglist (gfc_expr* e)
5818 {
5819 gfc_expr* po;
5820 gfc_typebound_proc* tbp;
5821
5822 tbp = e->value.compcall.tbp;
5823
5824 if (tbp->error)
5825 return false;
5826
5827 po = extract_compcall_passed_object (e);
5828 if (!po)
5829 return false;
5830
5831 if (tbp->nopass || e->value.compcall.ignore_pass)
5832 {
5833 gfc_free_expr (po);
5834 return true;
5835 }
5836
5837 if (tbp->pass_arg_num <= 0)
5838 return false;
5839
5840 e->value.compcall.actual = update_arglist_pass (e->value.compcall.actual, po,
5841 tbp->pass_arg_num,
5842 tbp->pass_arg);
5843
5844 return true;
5845 }
5846
5847
5848 /* Extract the passed object from a PPC call (a copy of it). */
5849
5850 static gfc_expr*
5851 extract_ppc_passed_object (gfc_expr *e)
5852 {
5853 gfc_expr *po;
5854 gfc_ref **ref;
5855
5856 po = gfc_get_expr ();
5857 po->expr_type = EXPR_VARIABLE;
5858 po->symtree = e->symtree;
5859 po->ref = gfc_copy_ref (e->ref);
5860 po->where = e->where;
5861
5862 /* Remove PPC reference. */
5863 ref = &po->ref;
5864 while ((*ref)->next)
5865 ref = &(*ref)->next;
5866 gfc_free_ref_list (*ref);
5867 *ref = NULL;
5868
5869 if (!gfc_resolve_expr (po))
5870 return NULL;
5871
5872 return po;
5873 }
5874
5875
5876 /* Update the actual arglist of a procedure pointer component to include the
5877 passed-object. */
5878
5879 static bool
5880 update_ppc_arglist (gfc_expr* e)
5881 {
5882 gfc_expr* po;
5883 gfc_component *ppc;
5884 gfc_typebound_proc* tb;
5885
5886 ppc = gfc_get_proc_ptr_comp (e);
5887 if (!ppc)
5888 return false;
5889
5890 tb = ppc->tb;
5891
5892 if (tb->error)
5893 return false;
5894 else if (tb->nopass)
5895 return true;
5896
5897 po = extract_ppc_passed_object (e);
5898 if (!po)
5899 return false;
5900
5901 /* F08:R739. */
5902 if (po->rank != 0)
5903 {
5904 gfc_error ("Passed-object at %L must be scalar", &e->where);
5905 return false;
5906 }
5907
5908 /* F08:C611. */
5909 if (po->ts.type == BT_DERIVED && po->ts.u.derived->attr.abstract)
5910 {
5911 gfc_error ("Base object for procedure-pointer component call at %L is of"
5912 " ABSTRACT type %qs", &e->where, po->ts.u.derived->name);
5913 return false;
5914 }
5915
5916 gcc_assert (tb->pass_arg_num > 0);
5917 e->value.compcall.actual = update_arglist_pass (e->value.compcall.actual, po,
5918 tb->pass_arg_num,
5919 tb->pass_arg);
5920
5921 return true;
5922 }
5923
5924
5925 /* Check that the object a TBP is called on is valid, i.e. it must not be
5926 of ABSTRACT type (as in subobject%abstract_parent%tbp()). */
5927
5928 static bool
5929 check_typebound_baseobject (gfc_expr* e)
5930 {
5931 gfc_expr* base;
5932 bool return_value = false;
5933
5934 base = extract_compcall_passed_object (e);
5935 if (!base)
5936 return false;
5937
5938 gcc_assert (base->ts.type == BT_DERIVED || base->ts.type == BT_CLASS);
5939
5940 if (base->ts.type == BT_CLASS && !gfc_expr_attr (base).class_ok)
5941 return false;
5942
5943 /* F08:C611. */
5944 if (base->ts.type == BT_DERIVED && base->ts.u.derived->attr.abstract)
5945 {
5946 gfc_error ("Base object for type-bound procedure call at %L is of"
5947 " ABSTRACT type %qs", &e->where, base->ts.u.derived->name);
5948 goto cleanup;
5949 }
5950
5951 /* F08:C1230. If the procedure called is NOPASS,
5952 the base object must be scalar. */
5953 if (e->value.compcall.tbp->nopass && base->rank != 0)
5954 {
5955 gfc_error ("Base object for NOPASS type-bound procedure call at %L must"
5956 " be scalar", &e->where);
5957 goto cleanup;
5958 }
5959
5960 return_value = true;
5961
5962 cleanup:
5963 gfc_free_expr (base);
5964 return return_value;
5965 }
5966
5967
5968 /* Resolve a call to a type-bound procedure, either function or subroutine,
5969 statically from the data in an EXPR_COMPCALL expression. The adapted
5970 arglist and the target-procedure symtree are returned. */
5971
5972 static bool
5973 resolve_typebound_static (gfc_expr* e, gfc_symtree** target,
5974 gfc_actual_arglist** actual)
5975 {
5976 gcc_assert (e->expr_type == EXPR_COMPCALL);
5977 gcc_assert (!e->value.compcall.tbp->is_generic);
5978
5979 /* Update the actual arglist for PASS. */
5980 if (!update_compcall_arglist (e))
5981 return false;
5982
5983 *actual = e->value.compcall.actual;
5984 *target = e->value.compcall.tbp->u.specific;
5985
5986 gfc_free_ref_list (e->ref);
5987 e->ref = NULL;
5988 e->value.compcall.actual = NULL;
5989
5990 /* If we find a deferred typebound procedure, check for derived types
5991 that an overriding typebound procedure has not been missed. */
5992 if (e->value.compcall.name
5993 && !e->value.compcall.tbp->non_overridable
5994 && e->value.compcall.base_object
5995 && e->value.compcall.base_object->ts.type == BT_DERIVED)
5996 {
5997 gfc_symtree *st;
5998 gfc_symbol *derived;
5999
6000 /* Use the derived type of the base_object. */
6001 derived = e->value.compcall.base_object->ts.u.derived;
6002 st = NULL;
6003
6004 /* If necessary, go through the inheritance chain. */
6005 while (!st && derived)
6006 {
6007 /* Look for the typebound procedure 'name'. */
6008 if (derived->f2k_derived && derived->f2k_derived->tb_sym_root)
6009 st = gfc_find_symtree (derived->f2k_derived->tb_sym_root,
6010 e->value.compcall.name);
6011 if (!st)
6012 derived = gfc_get_derived_super_type (derived);
6013 }
6014
6015 /* Now find the specific name in the derived type namespace. */
6016 if (st && st->n.tb && st->n.tb->u.specific)
6017 gfc_find_sym_tree (st->n.tb->u.specific->name,
6018 derived->ns, 1, &st);
6019 if (st)
6020 *target = st;
6021 }
6022 return true;
6023 }
6024
6025
6026 /* Get the ultimate declared type from an expression. In addition,
6027 return the last class/derived type reference and the copy of the
6028 reference list. If check_types is set true, derived types are
6029 identified as well as class references. */
6030 static gfc_symbol*
6031 get_declared_from_expr (gfc_ref **class_ref, gfc_ref **new_ref,
6032 gfc_expr *e, bool check_types)
6033 {
6034 gfc_symbol *declared;
6035 gfc_ref *ref;
6036
6037 declared = NULL;
6038 if (class_ref)
6039 *class_ref = NULL;
6040 if (new_ref)
6041 *new_ref = gfc_copy_ref (e->ref);
6042
6043 for (ref = e->ref; ref; ref = ref->next)
6044 {
6045 if (ref->type != REF_COMPONENT)
6046 continue;
6047
6048 if ((ref->u.c.component->ts.type == BT_CLASS
6049 || (check_types && gfc_bt_struct (ref->u.c.component->ts.type)))
6050 && ref->u.c.component->attr.flavor != FL_PROCEDURE)
6051 {
6052 declared = ref->u.c.component->ts.u.derived;
6053 if (class_ref)
6054 *class_ref = ref;
6055 }
6056 }
6057
6058 if (declared == NULL)
6059 declared = e->symtree->n.sym->ts.u.derived;
6060
6061 return declared;
6062 }
6063
6064
6065 /* Given an EXPR_COMPCALL calling a GENERIC typebound procedure, figure out
6066 which of the specific bindings (if any) matches the arglist and transform
6067 the expression into a call of that binding. */
6068
6069 static bool
6070 resolve_typebound_generic_call (gfc_expr* e, const char **name)
6071 {
6072 gfc_typebound_proc* genproc;
6073 const char* genname;
6074 gfc_symtree *st;
6075 gfc_symbol *derived;
6076
6077 gcc_assert (e->expr_type == EXPR_COMPCALL);
6078 genname = e->value.compcall.name;
6079 genproc = e->value.compcall.tbp;
6080
6081 if (!genproc->is_generic)
6082 return true;
6083
6084 /* Try the bindings on this type and in the inheritance hierarchy. */
6085 for (; genproc; genproc = genproc->overridden)
6086 {
6087 gfc_tbp_generic* g;
6088
6089 gcc_assert (genproc->is_generic);
6090 for (g = genproc->u.generic; g; g = g->next)
6091 {
6092 gfc_symbol* target;
6093 gfc_actual_arglist* args;
6094 bool matches;
6095
6096 gcc_assert (g->specific);
6097
6098 if (g->specific->error)
6099 continue;
6100
6101 target = g->specific->u.specific->n.sym;
6102
6103 /* Get the right arglist by handling PASS/NOPASS. */
6104 args = gfc_copy_actual_arglist (e->value.compcall.actual);
6105 if (!g->specific->nopass)
6106 {
6107 gfc_expr* po;
6108 po = extract_compcall_passed_object (e);
6109 if (!po)
6110 {
6111 gfc_free_actual_arglist (args);
6112 return false;
6113 }
6114
6115 gcc_assert (g->specific->pass_arg_num > 0);
6116 gcc_assert (!g->specific->error);
6117 args = update_arglist_pass (args, po, g->specific->pass_arg_num,
6118 g->specific->pass_arg);
6119 }
6120 resolve_actual_arglist (args, target->attr.proc,
6121 is_external_proc (target)
6122 && gfc_sym_get_dummy_args (target) == NULL);
6123
6124 /* Check if this arglist matches the formal. */
6125 matches = gfc_arglist_matches_symbol (&args, target);
6126
6127 /* Clean up and break out of the loop if we've found it. */
6128 gfc_free_actual_arglist (args);
6129 if (matches)
6130 {
6131 e->value.compcall.tbp = g->specific;
6132 genname = g->specific_st->name;
6133 /* Pass along the name for CLASS methods, where the vtab
6134 procedure pointer component has to be referenced. */
6135 if (name)
6136 *name = genname;
6137 goto success;
6138 }
6139 }
6140 }
6141
6142 /* Nothing matching found! */
6143 gfc_error ("Found no matching specific binding for the call to the GENERIC"
6144 " %qs at %L", genname, &e->where);
6145 return false;
6146
6147 success:
6148 /* Make sure that we have the right specific instance for the name. */
6149 derived = get_declared_from_expr (NULL, NULL, e, true);
6150
6151 st = gfc_find_typebound_proc (derived, NULL, genname, true, &e->where);
6152 if (st)
6153 e->value.compcall.tbp = st->n.tb;
6154
6155 return true;
6156 }
6157
6158
6159 /* Resolve a call to a type-bound subroutine. */
6160
6161 static bool
6162 resolve_typebound_call (gfc_code* c, const char **name, bool *overridable)
6163 {
6164 gfc_actual_arglist* newactual;
6165 gfc_symtree* target;
6166
6167 /* Check that's really a SUBROUTINE. */
6168 if (!c->expr1->value.compcall.tbp->subroutine)
6169 {
6170 gfc_error ("%qs at %L should be a SUBROUTINE",
6171 c->expr1->value.compcall.name, &c->loc);
6172 return false;
6173 }
6174
6175 if (!check_typebound_baseobject (c->expr1))
6176 return false;
6177
6178 /* Pass along the name for CLASS methods, where the vtab
6179 procedure pointer component has to be referenced. */
6180 if (name)
6181 *name = c->expr1->value.compcall.name;
6182
6183 if (!resolve_typebound_generic_call (c->expr1, name))
6184 return false;
6185
6186 /* Pass along the NON_OVERRIDABLE attribute of the specific TBP. */
6187 if (overridable)
6188 *overridable = !c->expr1->value.compcall.tbp->non_overridable;
6189
6190 /* Transform into an ordinary EXEC_CALL for now. */
6191
6192 if (!resolve_typebound_static (c->expr1, &target, &newactual))
6193 return false;
6194
6195 c->ext.actual = newactual;
6196 c->symtree = target;
6197 c->op = (c->expr1->value.compcall.assign ? EXEC_ASSIGN_CALL : EXEC_CALL);
6198
6199 gcc_assert (!c->expr1->ref && !c->expr1->value.compcall.actual);
6200
6201 gfc_free_expr (c->expr1);
6202 c->expr1 = gfc_get_expr ();
6203 c->expr1->expr_type = EXPR_FUNCTION;
6204 c->expr1->symtree = target;
6205 c->expr1->where = c->loc;
6206
6207 return resolve_call (c);
6208 }
6209
6210
6211 /* Resolve a component-call expression. */
6212 static bool
6213 resolve_compcall (gfc_expr* e, const char **name)
6214 {
6215 gfc_actual_arglist* newactual;
6216 gfc_symtree* target;
6217
6218 /* Check that's really a FUNCTION. */
6219 if (!e->value.compcall.tbp->function)
6220 {
6221 gfc_error ("%qs at %L should be a FUNCTION",
6222 e->value.compcall.name, &e->where);
6223 return false;
6224 }
6225
6226 /* These must not be assign-calls! */
6227 gcc_assert (!e->value.compcall.assign);
6228
6229 if (!check_typebound_baseobject (e))
6230 return false;
6231
6232 /* Pass along the name for CLASS methods, where the vtab
6233 procedure pointer component has to be referenced. */
6234 if (name)
6235 *name = e->value.compcall.name;
6236
6237 if (!resolve_typebound_generic_call (e, name))
6238 return false;
6239 gcc_assert (!e->value.compcall.tbp->is_generic);
6240
6241 /* Take the rank from the function's symbol. */
6242 if (e->value.compcall.tbp->u.specific->n.sym->as)
6243 e->rank = e->value.compcall.tbp->u.specific->n.sym->as->rank;
6244
6245 /* For now, we simply transform it into an EXPR_FUNCTION call with the same
6246 arglist to the TBP's binding target. */
6247
6248 if (!resolve_typebound_static (e, &target, &newactual))
6249 return false;
6250
6251 e->value.function.actual = newactual;
6252 e->value.function.name = NULL;
6253 e->value.function.esym = target->n.sym;
6254 e->value.function.isym = NULL;
6255 e->symtree = target;
6256 e->ts = target->n.sym->ts;
6257 e->expr_type = EXPR_FUNCTION;
6258
6259 /* Resolution is not necessary if this is a class subroutine; this
6260 function only has to identify the specific proc. Resolution of
6261 the call will be done next in resolve_typebound_call. */
6262 return gfc_resolve_expr (e);
6263 }
6264
6265
6266 static bool resolve_fl_derived (gfc_symbol *sym);
6267
6268
6269 /* Resolve a typebound function, or 'method'. First separate all
6270 the non-CLASS references by calling resolve_compcall directly. */
6271
6272 static bool
6273 resolve_typebound_function (gfc_expr* e)
6274 {
6275 gfc_symbol *declared;
6276 gfc_component *c;
6277 gfc_ref *new_ref;
6278 gfc_ref *class_ref;
6279 gfc_symtree *st;
6280 const char *name;
6281 gfc_typespec ts;
6282 gfc_expr *expr;
6283 bool overridable;
6284
6285 st = e->symtree;
6286
6287 /* Deal with typebound operators for CLASS objects. */
6288 expr = e->value.compcall.base_object;
6289 overridable = !e->value.compcall.tbp->non_overridable;
6290 if (expr && expr->ts.type == BT_CLASS && e->value.compcall.name)
6291 {
6292 /* If the base_object is not a variable, the corresponding actual
6293 argument expression must be stored in e->base_expression so
6294 that the corresponding tree temporary can be used as the base
6295 object in gfc_conv_procedure_call. */
6296 if (expr->expr_type != EXPR_VARIABLE)
6297 {
6298 gfc_actual_arglist *args;
6299
6300 for (args= e->value.function.actual; args; args = args->next)
6301 {
6302 if (expr == args->expr)
6303 expr = args->expr;
6304 }
6305 }
6306
6307 /* Since the typebound operators are generic, we have to ensure
6308 that any delays in resolution are corrected and that the vtab
6309 is present. */
6310 ts = expr->ts;
6311 declared = ts.u.derived;
6312 c = gfc_find_component (declared, "_vptr", true, true, NULL);
6313 if (c->ts.u.derived == NULL)
6314 c->ts.u.derived = gfc_find_derived_vtab (declared);
6315
6316 if (!resolve_compcall (e, &name))
6317 return false;
6318
6319 /* Use the generic name if it is there. */
6320 name = name ? name : e->value.function.esym->name;
6321 e->symtree = expr->symtree;
6322 e->ref = gfc_copy_ref (expr->ref);
6323 get_declared_from_expr (&class_ref, NULL, e, false);
6324
6325 /* Trim away the extraneous references that emerge from nested
6326 use of interface.c (extend_expr). */
6327 if (class_ref && class_ref->next)
6328 {
6329 gfc_free_ref_list (class_ref->next);
6330 class_ref->next = NULL;
6331 }
6332 else if (e->ref && !class_ref && expr->ts.type != BT_CLASS)
6333 {
6334 gfc_free_ref_list (e->ref);
6335 e->ref = NULL;
6336 }
6337
6338 gfc_add_vptr_component (e);
6339 gfc_add_component_ref (e, name);
6340 e->value.function.esym = NULL;
6341 if (expr->expr_type != EXPR_VARIABLE)
6342 e->base_expr = expr;
6343 return true;
6344 }
6345
6346 if (st == NULL)
6347 return resolve_compcall (e, NULL);
6348
6349 if (!resolve_ref (e))
6350 return false;
6351
6352 /* Get the CLASS declared type. */
6353 declared = get_declared_from_expr (&class_ref, &new_ref, e, true);
6354
6355 if (!resolve_fl_derived (declared))
6356 return false;
6357
6358 /* Weed out cases of the ultimate component being a derived type. */
6359 if ((class_ref && gfc_bt_struct (class_ref->u.c.component->ts.type))
6360 || (!class_ref && st->n.sym->ts.type != BT_CLASS))
6361 {
6362 gfc_free_ref_list (new_ref);
6363 return resolve_compcall (e, NULL);
6364 }
6365
6366 c = gfc_find_component (declared, "_data", true, true, NULL);
6367 declared = c->ts.u.derived;
6368
6369 /* Treat the call as if it is a typebound procedure, in order to roll
6370 out the correct name for the specific function. */
6371 if (!resolve_compcall (e, &name))
6372 {
6373 gfc_free_ref_list (new_ref);
6374 return false;
6375 }
6376 ts = e->ts;
6377
6378 if (overridable)
6379 {
6380 /* Convert the expression to a procedure pointer component call. */
6381 e->value.function.esym = NULL;
6382 e->symtree = st;
6383
6384 if (new_ref)
6385 e->ref = new_ref;
6386
6387 /* '_vptr' points to the vtab, which contains the procedure pointers. */
6388 gfc_add_vptr_component (e);
6389 gfc_add_component_ref (e, name);
6390
6391 /* Recover the typespec for the expression. This is really only
6392 necessary for generic procedures, where the additional call
6393 to gfc_add_component_ref seems to throw the collection of the
6394 correct typespec. */
6395 e->ts = ts;
6396 }
6397 else if (new_ref)
6398 gfc_free_ref_list (new_ref);
6399
6400 return true;
6401 }
6402
6403 /* Resolve a typebound subroutine, or 'method'. First separate all
6404 the non-CLASS references by calling resolve_typebound_call
6405 directly. */
6406
6407 static bool
6408 resolve_typebound_subroutine (gfc_code *code)
6409 {
6410 gfc_symbol *declared;
6411 gfc_component *c;
6412 gfc_ref *new_ref;
6413 gfc_ref *class_ref;
6414 gfc_symtree *st;
6415 const char *name;
6416 gfc_typespec ts;
6417 gfc_expr *expr;
6418 bool overridable;
6419
6420 st = code->expr1->symtree;
6421
6422 /* Deal with typebound operators for CLASS objects. */
6423 expr = code->expr1->value.compcall.base_object;
6424 overridable = !code->expr1->value.compcall.tbp->non_overridable;
6425 if (expr && expr->ts.type == BT_CLASS && code->expr1->value.compcall.name)
6426 {
6427 /* If the base_object is not a variable, the corresponding actual
6428 argument expression must be stored in e->base_expression so
6429 that the corresponding tree temporary can be used as the base
6430 object in gfc_conv_procedure_call. */
6431 if (expr->expr_type != EXPR_VARIABLE)
6432 {
6433 gfc_actual_arglist *args;
6434
6435 args= code->expr1->value.function.actual;
6436 for (; args; args = args->next)
6437 if (expr == args->expr)
6438 expr = args->expr;
6439 }
6440
6441 /* Since the typebound operators are generic, we have to ensure
6442 that any delays in resolution are corrected and that the vtab
6443 is present. */
6444 declared = expr->ts.u.derived;
6445 c = gfc_find_component (declared, "_vptr", true, true, NULL);
6446 if (c->ts.u.derived == NULL)
6447 c->ts.u.derived = gfc_find_derived_vtab (declared);
6448
6449 if (!resolve_typebound_call (code, &name, NULL))
6450 return false;
6451
6452 /* Use the generic name if it is there. */
6453 name = name ? name : code->expr1->value.function.esym->name;
6454 code->expr1->symtree = expr->symtree;
6455 code->expr1->ref = gfc_copy_ref (expr->ref);
6456
6457 /* Trim away the extraneous references that emerge from nested
6458 use of interface.c (extend_expr). */
6459 get_declared_from_expr (&class_ref, NULL, code->expr1, false);
6460 if (class_ref && class_ref->next)
6461 {
6462 gfc_free_ref_list (class_ref->next);
6463 class_ref->next = NULL;
6464 }
6465 else if (code->expr1->ref && !class_ref)
6466 {
6467 gfc_free_ref_list (code->expr1->ref);
6468 code->expr1->ref = NULL;
6469 }
6470
6471 /* Now use the procedure in the vtable. */
6472 gfc_add_vptr_component (code->expr1);
6473 gfc_add_component_ref (code->expr1, name);
6474 code->expr1->value.function.esym = NULL;
6475 if (expr->expr_type != EXPR_VARIABLE)
6476 code->expr1->base_expr = expr;
6477 return true;
6478 }
6479
6480 if (st == NULL)
6481 return resolve_typebound_call (code, NULL, NULL);
6482
6483 if (!resolve_ref (code->expr1))
6484 return false;
6485
6486 /* Get the CLASS declared type. */
6487 get_declared_from_expr (&class_ref, &new_ref, code->expr1, true);
6488
6489 /* Weed out cases of the ultimate component being a derived type. */
6490 if ((class_ref && gfc_bt_struct (class_ref->u.c.component->ts.type))
6491 || (!class_ref && st->n.sym->ts.type != BT_CLASS))
6492 {
6493 gfc_free_ref_list (new_ref);
6494 return resolve_typebound_call (code, NULL, NULL);
6495 }
6496
6497 if (!resolve_typebound_call (code, &name, &overridable))
6498 {
6499 gfc_free_ref_list (new_ref);
6500 return false;
6501 }
6502 ts = code->expr1->ts;
6503
6504 if (overridable)
6505 {
6506 /* Convert the expression to a procedure pointer component call. */
6507 code->expr1->value.function.esym = NULL;
6508 code->expr1->symtree = st;
6509
6510 if (new_ref)
6511 code->expr1->ref = new_ref;
6512
6513 /* '_vptr' points to the vtab, which contains the procedure pointers. */
6514 gfc_add_vptr_component (code->expr1);
6515 gfc_add_component_ref (code->expr1, name);
6516
6517 /* Recover the typespec for the expression. This is really only
6518 necessary for generic procedures, where the additional call
6519 to gfc_add_component_ref seems to throw the collection of the
6520 correct typespec. */
6521 code->expr1->ts = ts;
6522 }
6523 else if (new_ref)
6524 gfc_free_ref_list (new_ref);
6525
6526 return true;
6527 }
6528
6529
6530 /* Resolve a CALL to a Procedure Pointer Component (Subroutine). */
6531
6532 static bool
6533 resolve_ppc_call (gfc_code* c)
6534 {
6535 gfc_component *comp;
6536
6537 comp = gfc_get_proc_ptr_comp (c->expr1);
6538 gcc_assert (comp != NULL);
6539
6540 c->resolved_sym = c->expr1->symtree->n.sym;
6541 c->expr1->expr_type = EXPR_VARIABLE;
6542
6543 if (!comp->attr.subroutine)
6544 gfc_add_subroutine (&comp->attr, comp->name, &c->expr1->where);
6545
6546 if (!resolve_ref (c->expr1))
6547 return false;
6548
6549 if (!update_ppc_arglist (c->expr1))
6550 return false;
6551
6552 c->ext.actual = c->expr1->value.compcall.actual;
6553
6554 if (!resolve_actual_arglist (c->ext.actual, comp->attr.proc,
6555 !(comp->ts.interface
6556 && comp->ts.interface->formal)))
6557 return false;
6558
6559 if (!pure_subroutine (comp->ts.interface, comp->name, &c->expr1->where))
6560 return false;
6561
6562 gfc_ppc_use (comp, &c->expr1->value.compcall.actual, &c->expr1->where);
6563
6564 return true;
6565 }
6566
6567
6568 /* Resolve a Function Call to a Procedure Pointer Component (Function). */
6569
6570 static bool
6571 resolve_expr_ppc (gfc_expr* e)
6572 {
6573 gfc_component *comp;
6574
6575 comp = gfc_get_proc_ptr_comp (e);
6576 gcc_assert (comp != NULL);
6577
6578 /* Convert to EXPR_FUNCTION. */
6579 e->expr_type = EXPR_FUNCTION;
6580 e->value.function.isym = NULL;
6581 e->value.function.actual = e->value.compcall.actual;
6582 e->ts = comp->ts;
6583 if (comp->as != NULL)
6584 e->rank = comp->as->rank;
6585
6586 if (!comp->attr.function)
6587 gfc_add_function (&comp->attr, comp->name, &e->where);
6588
6589 if (!resolve_ref (e))
6590 return false;
6591
6592 if (!resolve_actual_arglist (e->value.function.actual, comp->attr.proc,
6593 !(comp->ts.interface
6594 && comp->ts.interface->formal)))
6595 return false;
6596
6597 if (!update_ppc_arglist (e))
6598 return false;
6599
6600 if (!check_pure_function(e))
6601 return false;
6602
6603 gfc_ppc_use (comp, &e->value.compcall.actual, &e->where);
6604
6605 return true;
6606 }
6607
6608
6609 static bool
6610 gfc_is_expandable_expr (gfc_expr *e)
6611 {
6612 gfc_constructor *con;
6613
6614 if (e->expr_type == EXPR_ARRAY)
6615 {
6616 /* Traverse the constructor looking for variables that are flavor
6617 parameter. Parameters must be expanded since they are fully used at
6618 compile time. */
6619 con = gfc_constructor_first (e->value.constructor);
6620 for (; con; con = gfc_constructor_next (con))
6621 {
6622 if (con->expr->expr_type == EXPR_VARIABLE
6623 && con->expr->symtree
6624 && (con->expr->symtree->n.sym->attr.flavor == FL_PARAMETER
6625 || con->expr->symtree->n.sym->attr.flavor == FL_VARIABLE))
6626 return true;
6627 if (con->expr->expr_type == EXPR_ARRAY
6628 && gfc_is_expandable_expr (con->expr))
6629 return true;
6630 }
6631 }
6632
6633 return false;
6634 }
6635
6636
6637 /* Sometimes variables in specification expressions of the result
6638 of module procedures in submodules wind up not being the 'real'
6639 dummy. Find this, if possible, in the namespace of the first
6640 formal argument. */
6641
6642 static void
6643 fixup_unique_dummy (gfc_expr *e)
6644 {
6645 gfc_symtree *st = NULL;
6646 gfc_symbol *s = NULL;
6647
6648 if (e->symtree->n.sym->ns->proc_name
6649 && e->symtree->n.sym->ns->proc_name->formal)
6650 s = e->symtree->n.sym->ns->proc_name->formal->sym;
6651
6652 if (s != NULL)
6653 st = gfc_find_symtree (s->ns->sym_root, e->symtree->n.sym->name);
6654
6655 if (st != NULL
6656 && st->n.sym != NULL
6657 && st->n.sym->attr.dummy)
6658 e->symtree = st;
6659 }
6660
6661 /* Resolve an expression. That is, make sure that types of operands agree
6662 with their operators, intrinsic operators are converted to function calls
6663 for overloaded types and unresolved function references are resolved. */
6664
6665 bool
6666 gfc_resolve_expr (gfc_expr *e)
6667 {
6668 bool t;
6669 bool inquiry_save, actual_arg_save, first_actual_arg_save;
6670
6671 if (e == NULL)
6672 return true;
6673
6674 /* inquiry_argument only applies to variables. */
6675 inquiry_save = inquiry_argument;
6676 actual_arg_save = actual_arg;
6677 first_actual_arg_save = first_actual_arg;
6678
6679 if (e->expr_type != EXPR_VARIABLE)
6680 {
6681 inquiry_argument = false;
6682 actual_arg = false;
6683 first_actual_arg = false;
6684 }
6685 else if (e->symtree != NULL
6686 && *e->symtree->name == '@'
6687 && e->symtree->n.sym->attr.dummy)
6688 {
6689 /* Deal with submodule specification expressions that are not
6690 found to be referenced in module.c(read_cleanup). */
6691 fixup_unique_dummy (e);
6692 }
6693
6694 switch (e->expr_type)
6695 {
6696 case EXPR_OP:
6697 t = resolve_operator (e);
6698 break;
6699
6700 case EXPR_FUNCTION:
6701 case EXPR_VARIABLE:
6702
6703 if (check_host_association (e))
6704 t = resolve_function (e);
6705 else
6706 t = resolve_variable (e);
6707
6708 if (e->ts.type == BT_CHARACTER && e->ts.u.cl == NULL && e->ref
6709 && e->ref->type != REF_SUBSTRING)
6710 gfc_resolve_substring_charlen (e);
6711
6712 break;
6713
6714 case EXPR_COMPCALL:
6715 t = resolve_typebound_function (e);
6716 break;
6717
6718 case EXPR_SUBSTRING:
6719 t = resolve_ref (e);
6720 break;
6721
6722 case EXPR_CONSTANT:
6723 case EXPR_NULL:
6724 t = true;
6725 break;
6726
6727 case EXPR_PPC:
6728 t = resolve_expr_ppc (e);
6729 break;
6730
6731 case EXPR_ARRAY:
6732 t = false;
6733 if (!resolve_ref (e))
6734 break;
6735
6736 t = gfc_resolve_array_constructor (e);
6737 /* Also try to expand a constructor. */
6738 if (t)
6739 {
6740 expression_rank (e);
6741 if (gfc_is_constant_expr (e) || gfc_is_expandable_expr (e))
6742 gfc_expand_constructor (e, false);
6743 }
6744
6745 /* This provides the opportunity for the length of constructors with
6746 character valued function elements to propagate the string length
6747 to the expression. */
6748 if (t && e->ts.type == BT_CHARACTER)
6749 {
6750 /* For efficiency, we call gfc_expand_constructor for BT_CHARACTER
6751 here rather then add a duplicate test for it above. */
6752 gfc_expand_constructor (e, false);
6753 t = gfc_resolve_character_array_constructor (e);
6754 }
6755
6756 break;
6757
6758 case EXPR_STRUCTURE:
6759 t = resolve_ref (e);
6760 if (!t)
6761 break;
6762
6763 t = resolve_structure_cons (e, 0);
6764 if (!t)
6765 break;
6766
6767 t = gfc_simplify_expr (e, 0);
6768 break;
6769
6770 default:
6771 gfc_internal_error ("gfc_resolve_expr(): Bad expression type");
6772 }
6773
6774 if (e->ts.type == BT_CHARACTER && t && !e->ts.u.cl)
6775 fixup_charlen (e);
6776
6777 inquiry_argument = inquiry_save;
6778 actual_arg = actual_arg_save;
6779 first_actual_arg = first_actual_arg_save;
6780
6781 return t;
6782 }
6783
6784
6785 /* Resolve an expression from an iterator. They must be scalar and have
6786 INTEGER or (optionally) REAL type. */
6787
6788 static bool
6789 gfc_resolve_iterator_expr (gfc_expr *expr, bool real_ok,
6790 const char *name_msgid)
6791 {
6792 if (!gfc_resolve_expr (expr))
6793 return false;
6794
6795 if (expr->rank != 0)
6796 {
6797 gfc_error ("%s at %L must be a scalar", _(name_msgid), &expr->where);
6798 return false;
6799 }
6800
6801 if (expr->ts.type != BT_INTEGER)
6802 {
6803 if (expr->ts.type == BT_REAL)
6804 {
6805 if (real_ok)
6806 return gfc_notify_std (GFC_STD_F95_DEL,
6807 "%s at %L must be integer",
6808 _(name_msgid), &expr->where);
6809 else
6810 {
6811 gfc_error ("%s at %L must be INTEGER", _(name_msgid),
6812 &expr->where);
6813 return false;
6814 }
6815 }
6816 else
6817 {
6818 gfc_error ("%s at %L must be INTEGER", _(name_msgid), &expr->where);
6819 return false;
6820 }
6821 }
6822 return true;
6823 }
6824
6825
6826 /* Resolve the expressions in an iterator structure. If REAL_OK is
6827 false allow only INTEGER type iterators, otherwise allow REAL types.
6828 Set own_scope to true for ac-implied-do and data-implied-do as those
6829 have a separate scope such that, e.g., a INTENT(IN) doesn't apply. */
6830
6831 bool
6832 gfc_resolve_iterator (gfc_iterator *iter, bool real_ok, bool own_scope)
6833 {
6834 if (!gfc_resolve_iterator_expr (iter->var, real_ok, "Loop variable"))
6835 return false;
6836
6837 if (!gfc_check_vardef_context (iter->var, false, false, own_scope,
6838 _("iterator variable")))
6839 return false;
6840
6841 if (!gfc_resolve_iterator_expr (iter->start, real_ok,
6842 "Start expression in DO loop"))
6843 return false;
6844
6845 if (!gfc_resolve_iterator_expr (iter->end, real_ok,
6846 "End expression in DO loop"))
6847 return false;
6848
6849 if (!gfc_resolve_iterator_expr (iter->step, real_ok,
6850 "Step expression in DO loop"))
6851 return false;
6852
6853 if (iter->step->expr_type == EXPR_CONSTANT)
6854 {
6855 if ((iter->step->ts.type == BT_INTEGER
6856 && mpz_cmp_ui (iter->step->value.integer, 0) == 0)
6857 || (iter->step->ts.type == BT_REAL
6858 && mpfr_sgn (iter->step->value.real) == 0))
6859 {
6860 gfc_error ("Step expression in DO loop at %L cannot be zero",
6861 &iter->step->where);
6862 return false;
6863 }
6864 }
6865
6866 /* Convert start, end, and step to the same type as var. */
6867 if (iter->start->ts.kind != iter->var->ts.kind
6868 || iter->start->ts.type != iter->var->ts.type)
6869 gfc_convert_type (iter->start, &iter->var->ts, 1);
6870
6871 if (iter->end->ts.kind != iter->var->ts.kind
6872 || iter->end->ts.type != iter->var->ts.type)
6873 gfc_convert_type (iter->end, &iter->var->ts, 1);
6874
6875 if (iter->step->ts.kind != iter->var->ts.kind
6876 || iter->step->ts.type != iter->var->ts.type)
6877 gfc_convert_type (iter->step, &iter->var->ts, 1);
6878
6879 if (iter->start->expr_type == EXPR_CONSTANT
6880 && iter->end->expr_type == EXPR_CONSTANT
6881 && iter->step->expr_type == EXPR_CONSTANT)
6882 {
6883 int sgn, cmp;
6884 if (iter->start->ts.type == BT_INTEGER)
6885 {
6886 sgn = mpz_cmp_ui (iter->step->value.integer, 0);
6887 cmp = mpz_cmp (iter->end->value.integer, iter->start->value.integer);
6888 }
6889 else
6890 {
6891 sgn = mpfr_sgn (iter->step->value.real);
6892 cmp = mpfr_cmp (iter->end->value.real, iter->start->value.real);
6893 }
6894 if (warn_zerotrip && ((sgn > 0 && cmp < 0) || (sgn < 0 && cmp > 0)))
6895 gfc_warning (OPT_Wzerotrip,
6896 "DO loop at %L will be executed zero times",
6897 &iter->step->where);
6898 }
6899
6900 if (iter->end->expr_type == EXPR_CONSTANT
6901 && iter->end->ts.type == BT_INTEGER
6902 && iter->step->expr_type == EXPR_CONSTANT
6903 && iter->step->ts.type == BT_INTEGER
6904 && (mpz_cmp_si (iter->step->value.integer, -1L) == 0
6905 || mpz_cmp_si (iter->step->value.integer, 1L) == 0))
6906 {
6907 bool is_step_positive = mpz_cmp_ui (iter->step->value.integer, 1) == 0;
6908 int k = gfc_validate_kind (BT_INTEGER, iter->end->ts.kind, false);
6909
6910 if (is_step_positive
6911 && mpz_cmp (iter->end->value.integer, gfc_integer_kinds[k].huge) == 0)
6912 gfc_warning (OPT_Wundefined_do_loop,
6913 "DO loop at %L is undefined as it overflows",
6914 &iter->step->where);
6915 else if (!is_step_positive
6916 && mpz_cmp (iter->end->value.integer,
6917 gfc_integer_kinds[k].min_int) == 0)
6918 gfc_warning (OPT_Wundefined_do_loop,
6919 "DO loop at %L is undefined as it underflows",
6920 &iter->step->where);
6921 }
6922
6923 return true;
6924 }
6925
6926
6927 /* Traversal function for find_forall_index. f == 2 signals that
6928 that variable itself is not to be checked - only the references. */
6929
6930 static bool
6931 forall_index (gfc_expr *expr, gfc_symbol *sym, int *f)
6932 {
6933 if (expr->expr_type != EXPR_VARIABLE)
6934 return false;
6935
6936 /* A scalar assignment */
6937 if (!expr->ref || *f == 1)
6938 {
6939 if (expr->symtree->n.sym == sym)
6940 return true;
6941 else
6942 return false;
6943 }
6944
6945 if (*f == 2)
6946 *f = 1;
6947 return false;
6948 }
6949
6950
6951 /* Check whether the FORALL index appears in the expression or not.
6952 Returns true if SYM is found in EXPR. */
6953
6954 bool
6955 find_forall_index (gfc_expr *expr, gfc_symbol *sym, int f)
6956 {
6957 if (gfc_traverse_expr (expr, sym, forall_index, f))
6958 return true;
6959 else
6960 return false;
6961 }
6962
6963
6964 /* Resolve a list of FORALL iterators. The FORALL index-name is constrained
6965 to be a scalar INTEGER variable. The subscripts and stride are scalar
6966 INTEGERs, and if stride is a constant it must be nonzero.
6967 Furthermore "A subscript or stride in a forall-triplet-spec shall
6968 not contain a reference to any index-name in the
6969 forall-triplet-spec-list in which it appears." (7.5.4.1) */
6970
6971 static void
6972 resolve_forall_iterators (gfc_forall_iterator *it)
6973 {
6974 gfc_forall_iterator *iter, *iter2;
6975
6976 for (iter = it; iter; iter = iter->next)
6977 {
6978 if (gfc_resolve_expr (iter->var)
6979 && (iter->var->ts.type != BT_INTEGER || iter->var->rank != 0))
6980 gfc_error ("FORALL index-name at %L must be a scalar INTEGER",
6981 &iter->var->where);
6982
6983 if (gfc_resolve_expr (iter->start)
6984 && (iter->start->ts.type != BT_INTEGER || iter->start->rank != 0))
6985 gfc_error ("FORALL start expression at %L must be a scalar INTEGER",
6986 &iter->start->where);
6987 if (iter->var->ts.kind != iter->start->ts.kind)
6988 gfc_convert_type (iter->start, &iter->var->ts, 1);
6989
6990 if (gfc_resolve_expr (iter->end)
6991 && (iter->end->ts.type != BT_INTEGER || iter->end->rank != 0))
6992 gfc_error ("FORALL end expression at %L must be a scalar INTEGER",
6993 &iter->end->where);
6994 if (iter->var->ts.kind != iter->end->ts.kind)
6995 gfc_convert_type (iter->end, &iter->var->ts, 1);
6996
6997 if (gfc_resolve_expr (iter->stride))
6998 {
6999 if (iter->stride->ts.type != BT_INTEGER || iter->stride->rank != 0)
7000 gfc_error ("FORALL stride expression at %L must be a scalar %s",
7001 &iter->stride->where, "INTEGER");
7002
7003 if (iter->stride->expr_type == EXPR_CONSTANT
7004 && mpz_cmp_ui (iter->stride->value.integer, 0) == 0)
7005 gfc_error ("FORALL stride expression at %L cannot be zero",
7006 &iter->stride->where);
7007 }
7008 if (iter->var->ts.kind != iter->stride->ts.kind)
7009 gfc_convert_type (iter->stride, &iter->var->ts, 1);
7010 }
7011
7012 for (iter = it; iter; iter = iter->next)
7013 for (iter2 = iter; iter2; iter2 = iter2->next)
7014 {
7015 if (find_forall_index (iter2->start, iter->var->symtree->n.sym, 0)
7016 || find_forall_index (iter2->end, iter->var->symtree->n.sym, 0)
7017 || find_forall_index (iter2->stride, iter->var->symtree->n.sym, 0))
7018 gfc_error ("FORALL index %qs may not appear in triplet "
7019 "specification at %L", iter->var->symtree->name,
7020 &iter2->start->where);
7021 }
7022 }
7023
7024
7025 /* Given a pointer to a symbol that is a derived type, see if it's
7026 inaccessible, i.e. if it's defined in another module and the components are
7027 PRIVATE. The search is recursive if necessary. Returns zero if no
7028 inaccessible components are found, nonzero otherwise. */
7029
7030 static int
7031 derived_inaccessible (gfc_symbol *sym)
7032 {
7033 gfc_component *c;
7034
7035 if (sym->attr.use_assoc && sym->attr.private_comp)
7036 return 1;
7037
7038 for (c = sym->components; c; c = c->next)
7039 {
7040 /* Prevent an infinite loop through this function. */
7041 if (c->ts.type == BT_DERIVED && c->attr.pointer
7042 && sym == c->ts.u.derived)
7043 continue;
7044
7045 if (c->ts.type == BT_DERIVED && derived_inaccessible (c->ts.u.derived))
7046 return 1;
7047 }
7048
7049 return 0;
7050 }
7051
7052
7053 /* Resolve the argument of a deallocate expression. The expression must be
7054 a pointer or a full array. */
7055
7056 static bool
7057 resolve_deallocate_expr (gfc_expr *e)
7058 {
7059 symbol_attribute attr;
7060 int allocatable, pointer;
7061 gfc_ref *ref;
7062 gfc_symbol *sym;
7063 gfc_component *c;
7064 bool unlimited;
7065
7066 if (!gfc_resolve_expr (e))
7067 return false;
7068
7069 if (e->expr_type != EXPR_VARIABLE)
7070 goto bad;
7071
7072 sym = e->symtree->n.sym;
7073 unlimited = UNLIMITED_POLY(sym);
7074
7075 if (sym->ts.type == BT_CLASS)
7076 {
7077 allocatable = CLASS_DATA (sym)->attr.allocatable;
7078 pointer = CLASS_DATA (sym)->attr.class_pointer;
7079 }
7080 else
7081 {
7082 allocatable = sym->attr.allocatable;
7083 pointer = sym->attr.pointer;
7084 }
7085 for (ref = e->ref; ref; ref = ref->next)
7086 {
7087 switch (ref->type)
7088 {
7089 case REF_ARRAY:
7090 if (ref->u.ar.type != AR_FULL
7091 && !(ref->u.ar.type == AR_ELEMENT && ref->u.ar.as->rank == 0
7092 && ref->u.ar.codimen && gfc_ref_this_image (ref)))
7093 allocatable = 0;
7094 break;
7095
7096 case REF_COMPONENT:
7097 c = ref->u.c.component;
7098 if (c->ts.type == BT_CLASS)
7099 {
7100 allocatable = CLASS_DATA (c)->attr.allocatable;
7101 pointer = CLASS_DATA (c)->attr.class_pointer;
7102 }
7103 else
7104 {
7105 allocatable = c->attr.allocatable;
7106 pointer = c->attr.pointer;
7107 }
7108 break;
7109
7110 case REF_SUBSTRING:
7111 allocatable = 0;
7112 break;
7113 }
7114 }
7115
7116 attr = gfc_expr_attr (e);
7117
7118 if (allocatable == 0 && attr.pointer == 0 && !unlimited)
7119 {
7120 bad:
7121 gfc_error ("Allocate-object at %L must be ALLOCATABLE or a POINTER",
7122 &e->where);
7123 return false;
7124 }
7125
7126 /* F2008, C644. */
7127 if (gfc_is_coindexed (e))
7128 {
7129 gfc_error ("Coindexed allocatable object at %L", &e->where);
7130 return false;
7131 }
7132
7133 if (pointer
7134 && !gfc_check_vardef_context (e, true, true, false,
7135 _("DEALLOCATE object")))
7136 return false;
7137 if (!gfc_check_vardef_context (e, false, true, false,
7138 _("DEALLOCATE object")))
7139 return false;
7140
7141 return true;
7142 }
7143
7144
7145 /* Returns true if the expression e contains a reference to the symbol sym. */
7146 static bool
7147 sym_in_expr (gfc_expr *e, gfc_symbol *sym, int *f ATTRIBUTE_UNUSED)
7148 {
7149 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym == sym)
7150 return true;
7151
7152 return false;
7153 }
7154
7155 bool
7156 gfc_find_sym_in_expr (gfc_symbol *sym, gfc_expr *e)
7157 {
7158 return gfc_traverse_expr (e, sym, sym_in_expr, 0);
7159 }
7160
7161
7162 /* Given the expression node e for an allocatable/pointer of derived type to be
7163 allocated, get the expression node to be initialized afterwards (needed for
7164 derived types with default initializers, and derived types with allocatable
7165 components that need nullification.) */
7166
7167 gfc_expr *
7168 gfc_expr_to_initialize (gfc_expr *e)
7169 {
7170 gfc_expr *result;
7171 gfc_ref *ref;
7172 int i;
7173
7174 result = gfc_copy_expr (e);
7175
7176 /* Change the last array reference from AR_ELEMENT to AR_FULL. */
7177 for (ref = result->ref; ref; ref = ref->next)
7178 if (ref->type == REF_ARRAY && ref->next == NULL)
7179 {
7180 ref->u.ar.type = AR_FULL;
7181
7182 for (i = 0; i < ref->u.ar.dimen; i++)
7183 ref->u.ar.start[i] = ref->u.ar.end[i] = ref->u.ar.stride[i] = NULL;
7184
7185 break;
7186 }
7187
7188 gfc_free_shape (&result->shape, result->rank);
7189
7190 /* Recalculate rank, shape, etc. */
7191 gfc_resolve_expr (result);
7192 return result;
7193 }
7194
7195
7196 /* If the last ref of an expression is an array ref, return a copy of the
7197 expression with that one removed. Otherwise, a copy of the original
7198 expression. This is used for allocate-expressions and pointer assignment
7199 LHS, where there may be an array specification that needs to be stripped
7200 off when using gfc_check_vardef_context. */
7201
7202 static gfc_expr*
7203 remove_last_array_ref (gfc_expr* e)
7204 {
7205 gfc_expr* e2;
7206 gfc_ref** r;
7207
7208 e2 = gfc_copy_expr (e);
7209 for (r = &e2->ref; *r; r = &(*r)->next)
7210 if ((*r)->type == REF_ARRAY && !(*r)->next)
7211 {
7212 gfc_free_ref_list (*r);
7213 *r = NULL;
7214 break;
7215 }
7216
7217 return e2;
7218 }
7219
7220
7221 /* Used in resolve_allocate_expr to check that a allocation-object and
7222 a source-expr are conformable. This does not catch all possible
7223 cases; in particular a runtime checking is needed. */
7224
7225 static bool
7226 conformable_arrays (gfc_expr *e1, gfc_expr *e2)
7227 {
7228 gfc_ref *tail;
7229 for (tail = e2->ref; tail && tail->next; tail = tail->next);
7230
7231 /* First compare rank. */
7232 if ((tail && e1->rank != tail->u.ar.as->rank)
7233 || (!tail && e1->rank != e2->rank))
7234 {
7235 gfc_error ("Source-expr at %L must be scalar or have the "
7236 "same rank as the allocate-object at %L",
7237 &e1->where, &e2->where);
7238 return false;
7239 }
7240
7241 if (e1->shape)
7242 {
7243 int i;
7244 mpz_t s;
7245
7246 mpz_init (s);
7247
7248 for (i = 0; i < e1->rank; i++)
7249 {
7250 if (tail->u.ar.start[i] == NULL)
7251 break;
7252
7253 if (tail->u.ar.end[i])
7254 {
7255 mpz_set (s, tail->u.ar.end[i]->value.integer);
7256 mpz_sub (s, s, tail->u.ar.start[i]->value.integer);
7257 mpz_add_ui (s, s, 1);
7258 }
7259 else
7260 {
7261 mpz_set (s, tail->u.ar.start[i]->value.integer);
7262 }
7263
7264 if (mpz_cmp (e1->shape[i], s) != 0)
7265 {
7266 gfc_error ("Source-expr at %L and allocate-object at %L must "
7267 "have the same shape", &e1->where, &e2->where);
7268 mpz_clear (s);
7269 return false;
7270 }
7271 }
7272
7273 mpz_clear (s);
7274 }
7275
7276 return true;
7277 }
7278
7279
7280 /* Resolve the expression in an ALLOCATE statement, doing the additional
7281 checks to see whether the expression is OK or not. The expression must
7282 have a trailing array reference that gives the size of the array. */
7283
7284 static bool
7285 resolve_allocate_expr (gfc_expr *e, gfc_code *code, bool *array_alloc_wo_spec)
7286 {
7287 int i, pointer, allocatable, dimension, is_abstract;
7288 int codimension;
7289 bool coindexed;
7290 bool unlimited;
7291 symbol_attribute attr;
7292 gfc_ref *ref, *ref2;
7293 gfc_expr *e2;
7294 gfc_array_ref *ar;
7295 gfc_symbol *sym = NULL;
7296 gfc_alloc *a;
7297 gfc_component *c;
7298 bool t;
7299
7300 /* Mark the utmost array component as being in allocate to allow DIMEN_STAR
7301 checking of coarrays. */
7302 for (ref = e->ref; ref; ref = ref->next)
7303 if (ref->next == NULL)
7304 break;
7305
7306 if (ref && ref->type == REF_ARRAY)
7307 ref->u.ar.in_allocate = true;
7308
7309 if (!gfc_resolve_expr (e))
7310 goto failure;
7311
7312 /* Make sure the expression is allocatable or a pointer. If it is
7313 pointer, the next-to-last reference must be a pointer. */
7314
7315 ref2 = NULL;
7316 if (e->symtree)
7317 sym = e->symtree->n.sym;
7318
7319 /* Check whether ultimate component is abstract and CLASS. */
7320 is_abstract = 0;
7321
7322 /* Is the allocate-object unlimited polymorphic? */
7323 unlimited = UNLIMITED_POLY(e);
7324
7325 if (e->expr_type != EXPR_VARIABLE)
7326 {
7327 allocatable = 0;
7328 attr = gfc_expr_attr (e);
7329 pointer = attr.pointer;
7330 dimension = attr.dimension;
7331 codimension = attr.codimension;
7332 }
7333 else
7334 {
7335 if (sym->ts.type == BT_CLASS && CLASS_DATA (sym))
7336 {
7337 allocatable = CLASS_DATA (sym)->attr.allocatable;
7338 pointer = CLASS_DATA (sym)->attr.class_pointer;
7339 dimension = CLASS_DATA (sym)->attr.dimension;
7340 codimension = CLASS_DATA (sym)->attr.codimension;
7341 is_abstract = CLASS_DATA (sym)->attr.abstract;
7342 }
7343 else
7344 {
7345 allocatable = sym->attr.allocatable;
7346 pointer = sym->attr.pointer;
7347 dimension = sym->attr.dimension;
7348 codimension = sym->attr.codimension;
7349 }
7350
7351 coindexed = false;
7352
7353 for (ref = e->ref; ref; ref2 = ref, ref = ref->next)
7354 {
7355 switch (ref->type)
7356 {
7357 case REF_ARRAY:
7358 if (ref->u.ar.codimen > 0)
7359 {
7360 int n;
7361 for (n = ref->u.ar.dimen;
7362 n < ref->u.ar.dimen + ref->u.ar.codimen; n++)
7363 if (ref->u.ar.dimen_type[n] != DIMEN_THIS_IMAGE)
7364 {
7365 coindexed = true;
7366 break;
7367 }
7368 }
7369
7370 if (ref->next != NULL)
7371 pointer = 0;
7372 break;
7373
7374 case REF_COMPONENT:
7375 /* F2008, C644. */
7376 if (coindexed)
7377 {
7378 gfc_error ("Coindexed allocatable object at %L",
7379 &e->where);
7380 goto failure;
7381 }
7382
7383 c = ref->u.c.component;
7384 if (c->ts.type == BT_CLASS)
7385 {
7386 allocatable = CLASS_DATA (c)->attr.allocatable;
7387 pointer = CLASS_DATA (c)->attr.class_pointer;
7388 dimension = CLASS_DATA (c)->attr.dimension;
7389 codimension = CLASS_DATA (c)->attr.codimension;
7390 is_abstract = CLASS_DATA (c)->attr.abstract;
7391 }
7392 else
7393 {
7394 allocatable = c->attr.allocatable;
7395 pointer = c->attr.pointer;
7396 dimension = c->attr.dimension;
7397 codimension = c->attr.codimension;
7398 is_abstract = c->attr.abstract;
7399 }
7400 break;
7401
7402 case REF_SUBSTRING:
7403 allocatable = 0;
7404 pointer = 0;
7405 break;
7406 }
7407 }
7408 }
7409
7410 /* Check for F08:C628. */
7411 if (allocatable == 0 && pointer == 0 && !unlimited)
7412 {
7413 gfc_error ("Allocate-object at %L must be ALLOCATABLE or a POINTER",
7414 &e->where);
7415 goto failure;
7416 }
7417
7418 /* Some checks for the SOURCE tag. */
7419 if (code->expr3)
7420 {
7421 /* Check F03:C631. */
7422 if (!gfc_type_compatible (&e->ts, &code->expr3->ts))
7423 {
7424 gfc_error ("Type of entity at %L is type incompatible with "
7425 "source-expr at %L", &e->where, &code->expr3->where);
7426 goto failure;
7427 }
7428
7429 /* Check F03:C632 and restriction following Note 6.18. */
7430 if (code->expr3->rank > 0 && !conformable_arrays (code->expr3, e))
7431 goto failure;
7432
7433 /* Check F03:C633. */
7434 if (code->expr3->ts.kind != e->ts.kind && !unlimited)
7435 {
7436 gfc_error ("The allocate-object at %L and the source-expr at %L "
7437 "shall have the same kind type parameter",
7438 &e->where, &code->expr3->where);
7439 goto failure;
7440 }
7441
7442 /* Check F2008, C642. */
7443 if (code->expr3->ts.type == BT_DERIVED
7444 && ((codimension && gfc_expr_attr (code->expr3).lock_comp)
7445 || (code->expr3->ts.u.derived->from_intmod
7446 == INTMOD_ISO_FORTRAN_ENV
7447 && code->expr3->ts.u.derived->intmod_sym_id
7448 == ISOFORTRAN_LOCK_TYPE)))
7449 {
7450 gfc_error ("The source-expr at %L shall neither be of type "
7451 "LOCK_TYPE nor have a LOCK_TYPE component if "
7452 "allocate-object at %L is a coarray",
7453 &code->expr3->where, &e->where);
7454 goto failure;
7455 }
7456
7457 /* Check TS18508, C702/C703. */
7458 if (code->expr3->ts.type == BT_DERIVED
7459 && ((codimension && gfc_expr_attr (code->expr3).event_comp)
7460 || (code->expr3->ts.u.derived->from_intmod
7461 == INTMOD_ISO_FORTRAN_ENV
7462 && code->expr3->ts.u.derived->intmod_sym_id
7463 == ISOFORTRAN_EVENT_TYPE)))
7464 {
7465 gfc_error ("The source-expr at %L shall neither be of type "
7466 "EVENT_TYPE nor have a EVENT_TYPE component if "
7467 "allocate-object at %L is a coarray",
7468 &code->expr3->where, &e->where);
7469 goto failure;
7470 }
7471 }
7472
7473 /* Check F08:C629. */
7474 if (is_abstract && code->ext.alloc.ts.type == BT_UNKNOWN
7475 && !code->expr3)
7476 {
7477 gcc_assert (e->ts.type == BT_CLASS);
7478 gfc_error ("Allocating %s of ABSTRACT base type at %L requires a "
7479 "type-spec or source-expr", sym->name, &e->where);
7480 goto failure;
7481 }
7482
7483 /* Check F08:C632. */
7484 if (code->ext.alloc.ts.type == BT_CHARACTER && !e->ts.deferred
7485 && !UNLIMITED_POLY (e))
7486 {
7487 int cmp = gfc_dep_compare_expr (e->ts.u.cl->length,
7488 code->ext.alloc.ts.u.cl->length);
7489 if (cmp == 1 || cmp == -1 || cmp == -3)
7490 {
7491 gfc_error ("Allocating %s at %L with type-spec requires the same "
7492 "character-length parameter as in the declaration",
7493 sym->name, &e->where);
7494 goto failure;
7495 }
7496 }
7497
7498 /* In the variable definition context checks, gfc_expr_attr is used
7499 on the expression. This is fooled by the array specification
7500 present in e, thus we have to eliminate that one temporarily. */
7501 e2 = remove_last_array_ref (e);
7502 t = true;
7503 if (t && pointer)
7504 t = gfc_check_vardef_context (e2, true, true, false,
7505 _("ALLOCATE object"));
7506 if (t)
7507 t = gfc_check_vardef_context (e2, false, true, false,
7508 _("ALLOCATE object"));
7509 gfc_free_expr (e2);
7510 if (!t)
7511 goto failure;
7512
7513 if (e->ts.type == BT_CLASS && CLASS_DATA (e)->attr.dimension
7514 && !code->expr3 && code->ext.alloc.ts.type == BT_DERIVED)
7515 {
7516 /* For class arrays, the initialization with SOURCE is done
7517 using _copy and trans_call. It is convenient to exploit that
7518 when the allocated type is different from the declared type but
7519 no SOURCE exists by setting expr3. */
7520 code->expr3 = gfc_default_initializer (&code->ext.alloc.ts);
7521 }
7522 else if (flag_coarray != GFC_FCOARRAY_LIB && e->ts.type == BT_DERIVED
7523 && e->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
7524 && e->ts.u.derived->intmod_sym_id == ISOFORTRAN_EVENT_TYPE)
7525 {
7526 /* We have to zero initialize the integer variable. */
7527 code->expr3 = gfc_get_int_expr (gfc_default_integer_kind, &e->where, 0);
7528 }
7529
7530 if (e->ts.type == BT_CLASS && !unlimited && !UNLIMITED_POLY (code->expr3))
7531 {
7532 /* Make sure the vtab symbol is present when
7533 the module variables are generated. */
7534 gfc_typespec ts = e->ts;
7535 if (code->expr3)
7536 ts = code->expr3->ts;
7537 else if (code->ext.alloc.ts.type == BT_DERIVED)
7538 ts = code->ext.alloc.ts;
7539
7540 /* Finding the vtab also publishes the type's symbol. Therefore this
7541 statement is necessary. */
7542 gfc_find_derived_vtab (ts.u.derived);
7543 }
7544 else if (unlimited && !UNLIMITED_POLY (code->expr3))
7545 {
7546 /* Again, make sure the vtab symbol is present when
7547 the module variables are generated. */
7548 gfc_typespec *ts = NULL;
7549 if (code->expr3)
7550 ts = &code->expr3->ts;
7551 else
7552 ts = &code->ext.alloc.ts;
7553
7554 gcc_assert (ts);
7555
7556 /* Finding the vtab also publishes the type's symbol. Therefore this
7557 statement is necessary. */
7558 gfc_find_vtab (ts);
7559 }
7560
7561 if (dimension == 0 && codimension == 0)
7562 goto success;
7563
7564 /* Make sure the last reference node is an array specification. */
7565
7566 if (!ref2 || ref2->type != REF_ARRAY || ref2->u.ar.type == AR_FULL
7567 || (dimension && ref2->u.ar.dimen == 0))
7568 {
7569 /* F08:C633. */
7570 if (code->expr3)
7571 {
7572 if (!gfc_notify_std (GFC_STD_F2008, "Array specification required "
7573 "in ALLOCATE statement at %L", &e->where))
7574 goto failure;
7575 if (code->expr3->rank != 0)
7576 *array_alloc_wo_spec = true;
7577 else
7578 {
7579 gfc_error ("Array specification or array-valued SOURCE= "
7580 "expression required in ALLOCATE statement at %L",
7581 &e->where);
7582 goto failure;
7583 }
7584 }
7585 else
7586 {
7587 gfc_error ("Array specification required in ALLOCATE statement "
7588 "at %L", &e->where);
7589 goto failure;
7590 }
7591 }
7592
7593 /* Make sure that the array section reference makes sense in the
7594 context of an ALLOCATE specification. */
7595
7596 ar = &ref2->u.ar;
7597
7598 if (codimension)
7599 for (i = ar->dimen; i < ar->dimen + ar->codimen; i++)
7600 if (ar->dimen_type[i] == DIMEN_THIS_IMAGE)
7601 {
7602 gfc_error ("Coarray specification required in ALLOCATE statement "
7603 "at %L", &e->where);
7604 goto failure;
7605 }
7606
7607 for (i = 0; i < ar->dimen; i++)
7608 {
7609 if (ar->type == AR_ELEMENT || ar->type == AR_FULL)
7610 goto check_symbols;
7611
7612 switch (ar->dimen_type[i])
7613 {
7614 case DIMEN_ELEMENT:
7615 break;
7616
7617 case DIMEN_RANGE:
7618 if (ar->start[i] != NULL
7619 && ar->end[i] != NULL
7620 && ar->stride[i] == NULL)
7621 break;
7622
7623 /* Fall through. */
7624
7625 case DIMEN_UNKNOWN:
7626 case DIMEN_VECTOR:
7627 case DIMEN_STAR:
7628 case DIMEN_THIS_IMAGE:
7629 gfc_error ("Bad array specification in ALLOCATE statement at %L",
7630 &e->where);
7631 goto failure;
7632 }
7633
7634 check_symbols:
7635 for (a = code->ext.alloc.list; a; a = a->next)
7636 {
7637 sym = a->expr->symtree->n.sym;
7638
7639 /* TODO - check derived type components. */
7640 if (gfc_bt_struct (sym->ts.type) || sym->ts.type == BT_CLASS)
7641 continue;
7642
7643 if ((ar->start[i] != NULL
7644 && gfc_find_sym_in_expr (sym, ar->start[i]))
7645 || (ar->end[i] != NULL
7646 && gfc_find_sym_in_expr (sym, ar->end[i])))
7647 {
7648 gfc_error ("%qs must not appear in the array specification at "
7649 "%L in the same ALLOCATE statement where it is "
7650 "itself allocated", sym->name, &ar->where);
7651 goto failure;
7652 }
7653 }
7654 }
7655
7656 for (i = ar->dimen; i < ar->codimen + ar->dimen; i++)
7657 {
7658 if (ar->dimen_type[i] == DIMEN_ELEMENT
7659 || ar->dimen_type[i] == DIMEN_RANGE)
7660 {
7661 if (i == (ar->dimen + ar->codimen - 1))
7662 {
7663 gfc_error ("Expected '*' in coindex specification in ALLOCATE "
7664 "statement at %L", &e->where);
7665 goto failure;
7666 }
7667 continue;
7668 }
7669
7670 if (ar->dimen_type[i] == DIMEN_STAR && i == (ar->dimen + ar->codimen - 1)
7671 && ar->stride[i] == NULL)
7672 break;
7673
7674 gfc_error ("Bad coarray specification in ALLOCATE statement at %L",
7675 &e->where);
7676 goto failure;
7677 }
7678
7679 success:
7680 return true;
7681
7682 failure:
7683 return false;
7684 }
7685
7686
7687 static void
7688 resolve_allocate_deallocate (gfc_code *code, const char *fcn)
7689 {
7690 gfc_expr *stat, *errmsg, *pe, *qe;
7691 gfc_alloc *a, *p, *q;
7692
7693 stat = code->expr1;
7694 errmsg = code->expr2;
7695
7696 /* Check the stat variable. */
7697 if (stat)
7698 {
7699 gfc_check_vardef_context (stat, false, false, false,
7700 _("STAT variable"));
7701
7702 if ((stat->ts.type != BT_INTEGER
7703 && !(stat->ref && (stat->ref->type == REF_ARRAY
7704 || stat->ref->type == REF_COMPONENT)))
7705 || stat->rank > 0)
7706 gfc_error ("Stat-variable at %L must be a scalar INTEGER "
7707 "variable", &stat->where);
7708
7709 for (p = code->ext.alloc.list; p; p = p->next)
7710 if (p->expr->symtree->n.sym->name == stat->symtree->n.sym->name)
7711 {
7712 gfc_ref *ref1, *ref2;
7713 bool found = true;
7714
7715 for (ref1 = p->expr->ref, ref2 = stat->ref; ref1 && ref2;
7716 ref1 = ref1->next, ref2 = ref2->next)
7717 {
7718 if (ref1->type != REF_COMPONENT || ref2->type != REF_COMPONENT)
7719 continue;
7720 if (ref1->u.c.component->name != ref2->u.c.component->name)
7721 {
7722 found = false;
7723 break;
7724 }
7725 }
7726
7727 if (found)
7728 {
7729 gfc_error ("Stat-variable at %L shall not be %sd within "
7730 "the same %s statement", &stat->where, fcn, fcn);
7731 break;
7732 }
7733 }
7734 }
7735
7736 /* Check the errmsg variable. */
7737 if (errmsg)
7738 {
7739 if (!stat)
7740 gfc_warning (0, "ERRMSG at %L is useless without a STAT tag",
7741 &errmsg->where);
7742
7743 gfc_check_vardef_context (errmsg, false, false, false,
7744 _("ERRMSG variable"));
7745
7746 if ((errmsg->ts.type != BT_CHARACTER
7747 && !(errmsg->ref
7748 && (errmsg->ref->type == REF_ARRAY
7749 || errmsg->ref->type == REF_COMPONENT)))
7750 || errmsg->rank > 0 )
7751 gfc_error ("Errmsg-variable at %L must be a scalar CHARACTER "
7752 "variable", &errmsg->where);
7753
7754 for (p = code->ext.alloc.list; p; p = p->next)
7755 if (p->expr->symtree->n.sym->name == errmsg->symtree->n.sym->name)
7756 {
7757 gfc_ref *ref1, *ref2;
7758 bool found = true;
7759
7760 for (ref1 = p->expr->ref, ref2 = errmsg->ref; ref1 && ref2;
7761 ref1 = ref1->next, ref2 = ref2->next)
7762 {
7763 if (ref1->type != REF_COMPONENT || ref2->type != REF_COMPONENT)
7764 continue;
7765 if (ref1->u.c.component->name != ref2->u.c.component->name)
7766 {
7767 found = false;
7768 break;
7769 }
7770 }
7771
7772 if (found)
7773 {
7774 gfc_error ("Errmsg-variable at %L shall not be %sd within "
7775 "the same %s statement", &errmsg->where, fcn, fcn);
7776 break;
7777 }
7778 }
7779 }
7780
7781 /* Check that an allocate-object appears only once in the statement. */
7782
7783 for (p = code->ext.alloc.list; p; p = p->next)
7784 {
7785 pe = p->expr;
7786 for (q = p->next; q; q = q->next)
7787 {
7788 qe = q->expr;
7789 if (pe->symtree->n.sym->name == qe->symtree->n.sym->name)
7790 {
7791 /* This is a potential collision. */
7792 gfc_ref *pr = pe->ref;
7793 gfc_ref *qr = qe->ref;
7794
7795 /* Follow the references until
7796 a) They start to differ, in which case there is no error;
7797 you can deallocate a%b and a%c in a single statement
7798 b) Both of them stop, which is an error
7799 c) One of them stops, which is also an error. */
7800 while (1)
7801 {
7802 if (pr == NULL && qr == NULL)
7803 {
7804 gfc_error ("Allocate-object at %L also appears at %L",
7805 &pe->where, &qe->where);
7806 break;
7807 }
7808 else if (pr != NULL && qr == NULL)
7809 {
7810 gfc_error ("Allocate-object at %L is subobject of"
7811 " object at %L", &pe->where, &qe->where);
7812 break;
7813 }
7814 else if (pr == NULL && qr != NULL)
7815 {
7816 gfc_error ("Allocate-object at %L is subobject of"
7817 " object at %L", &qe->where, &pe->where);
7818 break;
7819 }
7820 /* Here, pr != NULL && qr != NULL */
7821 gcc_assert(pr->type == qr->type);
7822 if (pr->type == REF_ARRAY)
7823 {
7824 /* Handle cases like allocate(v(3)%x(3), v(2)%x(3)),
7825 which are legal. */
7826 gcc_assert (qr->type == REF_ARRAY);
7827
7828 if (pr->next && qr->next)
7829 {
7830 int i;
7831 gfc_array_ref *par = &(pr->u.ar);
7832 gfc_array_ref *qar = &(qr->u.ar);
7833
7834 for (i=0; i<par->dimen; i++)
7835 {
7836 if ((par->start[i] != NULL
7837 || qar->start[i] != NULL)
7838 && gfc_dep_compare_expr (par->start[i],
7839 qar->start[i]) != 0)
7840 goto break_label;
7841 }
7842 }
7843 }
7844 else
7845 {
7846 if (pr->u.c.component->name != qr->u.c.component->name)
7847 break;
7848 }
7849
7850 pr = pr->next;
7851 qr = qr->next;
7852 }
7853 break_label:
7854 ;
7855 }
7856 }
7857 }
7858
7859 if (strcmp (fcn, "ALLOCATE") == 0)
7860 {
7861 bool arr_alloc_wo_spec = false;
7862
7863 /* Resolving the expr3 in the loop over all objects to allocate would
7864 execute loop invariant code for each loop item. Therefore do it just
7865 once here. */
7866 if (code->expr3 && code->expr3->mold
7867 && code->expr3->ts.type == BT_DERIVED)
7868 {
7869 /* Default initialization via MOLD (non-polymorphic). */
7870 gfc_expr *rhs = gfc_default_initializer (&code->expr3->ts);
7871 if (rhs != NULL)
7872 {
7873 gfc_resolve_expr (rhs);
7874 gfc_free_expr (code->expr3);
7875 code->expr3 = rhs;
7876 }
7877 }
7878 for (a = code->ext.alloc.list; a; a = a->next)
7879 resolve_allocate_expr (a->expr, code, &arr_alloc_wo_spec);
7880
7881 if (arr_alloc_wo_spec && code->expr3)
7882 {
7883 /* Mark the allocate to have to take the array specification
7884 from the expr3. */
7885 code->ext.alloc.arr_spec_from_expr3 = 1;
7886 }
7887 }
7888 else
7889 {
7890 for (a = code->ext.alloc.list; a; a = a->next)
7891 resolve_deallocate_expr (a->expr);
7892 }
7893 }
7894
7895
7896 /************ SELECT CASE resolution subroutines ************/
7897
7898 /* Callback function for our mergesort variant. Determines interval
7899 overlaps for CASEs. Return <0 if op1 < op2, 0 for overlap, >0 for
7900 op1 > op2. Assumes we're not dealing with the default case.
7901 We have op1 = (:L), (K:L) or (K:) and op2 = (:N), (M:N) or (M:).
7902 There are nine situations to check. */
7903
7904 static int
7905 compare_cases (const gfc_case *op1, const gfc_case *op2)
7906 {
7907 int retval;
7908
7909 if (op1->low == NULL) /* op1 = (:L) */
7910 {
7911 /* op2 = (:N), so overlap. */
7912 retval = 0;
7913 /* op2 = (M:) or (M:N), L < M */
7914 if (op2->low != NULL
7915 && gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
7916 retval = -1;
7917 }
7918 else if (op1->high == NULL) /* op1 = (K:) */
7919 {
7920 /* op2 = (M:), so overlap. */
7921 retval = 0;
7922 /* op2 = (:N) or (M:N), K > N */
7923 if (op2->high != NULL
7924 && gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
7925 retval = 1;
7926 }
7927 else /* op1 = (K:L) */
7928 {
7929 if (op2->low == NULL) /* op2 = (:N), K > N */
7930 retval = (gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
7931 ? 1 : 0;
7932 else if (op2->high == NULL) /* op2 = (M:), L < M */
7933 retval = (gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
7934 ? -1 : 0;
7935 else /* op2 = (M:N) */
7936 {
7937 retval = 0;
7938 /* L < M */
7939 if (gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0)
7940 retval = -1;
7941 /* K > N */
7942 else if (gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0)
7943 retval = 1;
7944 }
7945 }
7946
7947 return retval;
7948 }
7949
7950
7951 /* Merge-sort a double linked case list, detecting overlap in the
7952 process. LIST is the head of the double linked case list before it
7953 is sorted. Returns the head of the sorted list if we don't see any
7954 overlap, or NULL otherwise. */
7955
7956 static gfc_case *
7957 check_case_overlap (gfc_case *list)
7958 {
7959 gfc_case *p, *q, *e, *tail;
7960 int insize, nmerges, psize, qsize, cmp, overlap_seen;
7961
7962 /* If the passed list was empty, return immediately. */
7963 if (!list)
7964 return NULL;
7965
7966 overlap_seen = 0;
7967 insize = 1;
7968
7969 /* Loop unconditionally. The only exit from this loop is a return
7970 statement, when we've finished sorting the case list. */
7971 for (;;)
7972 {
7973 p = list;
7974 list = NULL;
7975 tail = NULL;
7976
7977 /* Count the number of merges we do in this pass. */
7978 nmerges = 0;
7979
7980 /* Loop while there exists a merge to be done. */
7981 while (p)
7982 {
7983 int i;
7984
7985 /* Count this merge. */
7986 nmerges++;
7987
7988 /* Cut the list in two pieces by stepping INSIZE places
7989 forward in the list, starting from P. */
7990 psize = 0;
7991 q = p;
7992 for (i = 0; i < insize; i++)
7993 {
7994 psize++;
7995 q = q->right;
7996 if (!q)
7997 break;
7998 }
7999 qsize = insize;
8000
8001 /* Now we have two lists. Merge them! */
8002 while (psize > 0 || (qsize > 0 && q != NULL))
8003 {
8004 /* See from which the next case to merge comes from. */
8005 if (psize == 0)
8006 {
8007 /* P is empty so the next case must come from Q. */
8008 e = q;
8009 q = q->right;
8010 qsize--;
8011 }
8012 else if (qsize == 0 || q == NULL)
8013 {
8014 /* Q is empty. */
8015 e = p;
8016 p = p->right;
8017 psize--;
8018 }
8019 else
8020 {
8021 cmp = compare_cases (p, q);
8022 if (cmp < 0)
8023 {
8024 /* The whole case range for P is less than the
8025 one for Q. */
8026 e = p;
8027 p = p->right;
8028 psize--;
8029 }
8030 else if (cmp > 0)
8031 {
8032 /* The whole case range for Q is greater than
8033 the case range for P. */
8034 e = q;
8035 q = q->right;
8036 qsize--;
8037 }
8038 else
8039 {
8040 /* The cases overlap, or they are the same
8041 element in the list. Either way, we must
8042 issue an error and get the next case from P. */
8043 /* FIXME: Sort P and Q by line number. */
8044 gfc_error ("CASE label at %L overlaps with CASE "
8045 "label at %L", &p->where, &q->where);
8046 overlap_seen = 1;
8047 e = p;
8048 p = p->right;
8049 psize--;
8050 }
8051 }
8052
8053 /* Add the next element to the merged list. */
8054 if (tail)
8055 tail->right = e;
8056 else
8057 list = e;
8058 e->left = tail;
8059 tail = e;
8060 }
8061
8062 /* P has now stepped INSIZE places along, and so has Q. So
8063 they're the same. */
8064 p = q;
8065 }
8066 tail->right = NULL;
8067
8068 /* If we have done only one merge or none at all, we've
8069 finished sorting the cases. */
8070 if (nmerges <= 1)
8071 {
8072 if (!overlap_seen)
8073 return list;
8074 else
8075 return NULL;
8076 }
8077
8078 /* Otherwise repeat, merging lists twice the size. */
8079 insize *= 2;
8080 }
8081 }
8082
8083
8084 /* Check to see if an expression is suitable for use in a CASE statement.
8085 Makes sure that all case expressions are scalar constants of the same
8086 type. Return false if anything is wrong. */
8087
8088 static bool
8089 validate_case_label_expr (gfc_expr *e, gfc_expr *case_expr)
8090 {
8091 if (e == NULL) return true;
8092
8093 if (e->ts.type != case_expr->ts.type)
8094 {
8095 gfc_error ("Expression in CASE statement at %L must be of type %s",
8096 &e->where, gfc_basic_typename (case_expr->ts.type));
8097 return false;
8098 }
8099
8100 /* C805 (R808) For a given case-construct, each case-value shall be of
8101 the same type as case-expr. For character type, length differences
8102 are allowed, but the kind type parameters shall be the same. */
8103
8104 if (case_expr->ts.type == BT_CHARACTER && e->ts.kind != case_expr->ts.kind)
8105 {
8106 gfc_error ("Expression in CASE statement at %L must be of kind %d",
8107 &e->where, case_expr->ts.kind);
8108 return false;
8109 }
8110
8111 /* Convert the case value kind to that of case expression kind,
8112 if needed */
8113
8114 if (e->ts.kind != case_expr->ts.kind)
8115 gfc_convert_type_warn (e, &case_expr->ts, 2, 0);
8116
8117 if (e->rank != 0)
8118 {
8119 gfc_error ("Expression in CASE statement at %L must be scalar",
8120 &e->where);
8121 return false;
8122 }
8123
8124 return true;
8125 }
8126
8127
8128 /* Given a completely parsed select statement, we:
8129
8130 - Validate all expressions and code within the SELECT.
8131 - Make sure that the selection expression is not of the wrong type.
8132 - Make sure that no case ranges overlap.
8133 - Eliminate unreachable cases and unreachable code resulting from
8134 removing case labels.
8135
8136 The standard does allow unreachable cases, e.g. CASE (5:3). But
8137 they are a hassle for code generation, and to prevent that, we just
8138 cut them out here. This is not necessary for overlapping cases
8139 because they are illegal and we never even try to generate code.
8140
8141 We have the additional caveat that a SELECT construct could have
8142 been a computed GOTO in the source code. Fortunately we can fairly
8143 easily work around that here: The case_expr for a "real" SELECT CASE
8144 is in code->expr1, but for a computed GOTO it is in code->expr2. All
8145 we have to do is make sure that the case_expr is a scalar integer
8146 expression. */
8147
8148 static void
8149 resolve_select (gfc_code *code, bool select_type)
8150 {
8151 gfc_code *body;
8152 gfc_expr *case_expr;
8153 gfc_case *cp, *default_case, *tail, *head;
8154 int seen_unreachable;
8155 int seen_logical;
8156 int ncases;
8157 bt type;
8158 bool t;
8159
8160 if (code->expr1 == NULL)
8161 {
8162 /* This was actually a computed GOTO statement. */
8163 case_expr = code->expr2;
8164 if (case_expr->ts.type != BT_INTEGER|| case_expr->rank != 0)
8165 gfc_error ("Selection expression in computed GOTO statement "
8166 "at %L must be a scalar integer expression",
8167 &case_expr->where);
8168
8169 /* Further checking is not necessary because this SELECT was built
8170 by the compiler, so it should always be OK. Just move the
8171 case_expr from expr2 to expr so that we can handle computed
8172 GOTOs as normal SELECTs from here on. */
8173 code->expr1 = code->expr2;
8174 code->expr2 = NULL;
8175 return;
8176 }
8177
8178 case_expr = code->expr1;
8179 type = case_expr->ts.type;
8180
8181 /* F08:C830. */
8182 if (type != BT_LOGICAL && type != BT_INTEGER && type != BT_CHARACTER)
8183 {
8184 gfc_error ("Argument of SELECT statement at %L cannot be %s",
8185 &case_expr->where, gfc_typename (&case_expr->ts));
8186
8187 /* Punt. Going on here just produce more garbage error messages. */
8188 return;
8189 }
8190
8191 /* F08:R842. */
8192 if (!select_type && case_expr->rank != 0)
8193 {
8194 gfc_error ("Argument of SELECT statement at %L must be a scalar "
8195 "expression", &case_expr->where);
8196
8197 /* Punt. */
8198 return;
8199 }
8200
8201 /* Raise a warning if an INTEGER case value exceeds the range of
8202 the case-expr. Later, all expressions will be promoted to the
8203 largest kind of all case-labels. */
8204
8205 if (type == BT_INTEGER)
8206 for (body = code->block; body; body = body->block)
8207 for (cp = body->ext.block.case_list; cp; cp = cp->next)
8208 {
8209 if (cp->low
8210 && gfc_check_integer_range (cp->low->value.integer,
8211 case_expr->ts.kind) != ARITH_OK)
8212 gfc_warning (0, "Expression in CASE statement at %L is "
8213 "not in the range of %s", &cp->low->where,
8214 gfc_typename (&case_expr->ts));
8215
8216 if (cp->high
8217 && cp->low != cp->high
8218 && gfc_check_integer_range (cp->high->value.integer,
8219 case_expr->ts.kind) != ARITH_OK)
8220 gfc_warning (0, "Expression in CASE statement at %L is "
8221 "not in the range of %s", &cp->high->where,
8222 gfc_typename (&case_expr->ts));
8223 }
8224
8225 /* PR 19168 has a long discussion concerning a mismatch of the kinds
8226 of the SELECT CASE expression and its CASE values. Walk the lists
8227 of case values, and if we find a mismatch, promote case_expr to
8228 the appropriate kind. */
8229
8230 if (type == BT_LOGICAL || type == BT_INTEGER)
8231 {
8232 for (body = code->block; body; body = body->block)
8233 {
8234 /* Walk the case label list. */
8235 for (cp = body->ext.block.case_list; cp; cp = cp->next)
8236 {
8237 /* Intercept the DEFAULT case. It does not have a kind. */
8238 if (cp->low == NULL && cp->high == NULL)
8239 continue;
8240
8241 /* Unreachable case ranges are discarded, so ignore. */
8242 if (cp->low != NULL && cp->high != NULL
8243 && cp->low != cp->high
8244 && gfc_compare_expr (cp->low, cp->high, INTRINSIC_GT) > 0)
8245 continue;
8246
8247 if (cp->low != NULL
8248 && case_expr->ts.kind != gfc_kind_max(case_expr, cp->low))
8249 gfc_convert_type_warn (case_expr, &cp->low->ts, 2, 0);
8250
8251 if (cp->high != NULL
8252 && case_expr->ts.kind != gfc_kind_max(case_expr, cp->high))
8253 gfc_convert_type_warn (case_expr, &cp->high->ts, 2, 0);
8254 }
8255 }
8256 }
8257
8258 /* Assume there is no DEFAULT case. */
8259 default_case = NULL;
8260 head = tail = NULL;
8261 ncases = 0;
8262 seen_logical = 0;
8263
8264 for (body = code->block; body; body = body->block)
8265 {
8266 /* Assume the CASE list is OK, and all CASE labels can be matched. */
8267 t = true;
8268 seen_unreachable = 0;
8269
8270 /* Walk the case label list, making sure that all case labels
8271 are legal. */
8272 for (cp = body->ext.block.case_list; cp; cp = cp->next)
8273 {
8274 /* Count the number of cases in the whole construct. */
8275 ncases++;
8276
8277 /* Intercept the DEFAULT case. */
8278 if (cp->low == NULL && cp->high == NULL)
8279 {
8280 if (default_case != NULL)
8281 {
8282 gfc_error ("The DEFAULT CASE at %L cannot be followed "
8283 "by a second DEFAULT CASE at %L",
8284 &default_case->where, &cp->where);
8285 t = false;
8286 break;
8287 }
8288 else
8289 {
8290 default_case = cp;
8291 continue;
8292 }
8293 }
8294
8295 /* Deal with single value cases and case ranges. Errors are
8296 issued from the validation function. */
8297 if (!validate_case_label_expr (cp->low, case_expr)
8298 || !validate_case_label_expr (cp->high, case_expr))
8299 {
8300 t = false;
8301 break;
8302 }
8303
8304 if (type == BT_LOGICAL
8305 && ((cp->low == NULL || cp->high == NULL)
8306 || cp->low != cp->high))
8307 {
8308 gfc_error ("Logical range in CASE statement at %L is not "
8309 "allowed", &cp->low->where);
8310 t = false;
8311 break;
8312 }
8313
8314 if (type == BT_LOGICAL && cp->low->expr_type == EXPR_CONSTANT)
8315 {
8316 int value;
8317 value = cp->low->value.logical == 0 ? 2 : 1;
8318 if (value & seen_logical)
8319 {
8320 gfc_error ("Constant logical value in CASE statement "
8321 "is repeated at %L",
8322 &cp->low->where);
8323 t = false;
8324 break;
8325 }
8326 seen_logical |= value;
8327 }
8328
8329 if (cp->low != NULL && cp->high != NULL
8330 && cp->low != cp->high
8331 && gfc_compare_expr (cp->low, cp->high, INTRINSIC_GT) > 0)
8332 {
8333 if (warn_surprising)
8334 gfc_warning (OPT_Wsurprising,
8335 "Range specification at %L can never be matched",
8336 &cp->where);
8337
8338 cp->unreachable = 1;
8339 seen_unreachable = 1;
8340 }
8341 else
8342 {
8343 /* If the case range can be matched, it can also overlap with
8344 other cases. To make sure it does not, we put it in a
8345 double linked list here. We sort that with a merge sort
8346 later on to detect any overlapping cases. */
8347 if (!head)
8348 {
8349 head = tail = cp;
8350 head->right = head->left = NULL;
8351 }
8352 else
8353 {
8354 tail->right = cp;
8355 tail->right->left = tail;
8356 tail = tail->right;
8357 tail->right = NULL;
8358 }
8359 }
8360 }
8361
8362 /* It there was a failure in the previous case label, give up
8363 for this case label list. Continue with the next block. */
8364 if (!t)
8365 continue;
8366
8367 /* See if any case labels that are unreachable have been seen.
8368 If so, we eliminate them. This is a bit of a kludge because
8369 the case lists for a single case statement (label) is a
8370 single forward linked lists. */
8371 if (seen_unreachable)
8372 {
8373 /* Advance until the first case in the list is reachable. */
8374 while (body->ext.block.case_list != NULL
8375 && body->ext.block.case_list->unreachable)
8376 {
8377 gfc_case *n = body->ext.block.case_list;
8378 body->ext.block.case_list = body->ext.block.case_list->next;
8379 n->next = NULL;
8380 gfc_free_case_list (n);
8381 }
8382
8383 /* Strip all other unreachable cases. */
8384 if (body->ext.block.case_list)
8385 {
8386 for (cp = body->ext.block.case_list; cp && cp->next; cp = cp->next)
8387 {
8388 if (cp->next->unreachable)
8389 {
8390 gfc_case *n = cp->next;
8391 cp->next = cp->next->next;
8392 n->next = NULL;
8393 gfc_free_case_list (n);
8394 }
8395 }
8396 }
8397 }
8398 }
8399
8400 /* See if there were overlapping cases. If the check returns NULL,
8401 there was overlap. In that case we don't do anything. If head
8402 is non-NULL, we prepend the DEFAULT case. The sorted list can
8403 then used during code generation for SELECT CASE constructs with
8404 a case expression of a CHARACTER type. */
8405 if (head)
8406 {
8407 head = check_case_overlap (head);
8408
8409 /* Prepend the default_case if it is there. */
8410 if (head != NULL && default_case)
8411 {
8412 default_case->left = NULL;
8413 default_case->right = head;
8414 head->left = default_case;
8415 }
8416 }
8417
8418 /* Eliminate dead blocks that may be the result if we've seen
8419 unreachable case labels for a block. */
8420 for (body = code; body && body->block; body = body->block)
8421 {
8422 if (body->block->ext.block.case_list == NULL)
8423 {
8424 /* Cut the unreachable block from the code chain. */
8425 gfc_code *c = body->block;
8426 body->block = c->block;
8427
8428 /* Kill the dead block, but not the blocks below it. */
8429 c->block = NULL;
8430 gfc_free_statements (c);
8431 }
8432 }
8433
8434 /* More than two cases is legal but insane for logical selects.
8435 Issue a warning for it. */
8436 if (warn_surprising && type == BT_LOGICAL && ncases > 2)
8437 gfc_warning (OPT_Wsurprising,
8438 "Logical SELECT CASE block at %L has more that two cases",
8439 &code->loc);
8440 }
8441
8442
8443 /* Check if a derived type is extensible. */
8444
8445 bool
8446 gfc_type_is_extensible (gfc_symbol *sym)
8447 {
8448 return !(sym->attr.is_bind_c || sym->attr.sequence
8449 || (sym->attr.is_class
8450 && sym->components->ts.u.derived->attr.unlimited_polymorphic));
8451 }
8452
8453
8454 static void
8455 resolve_types (gfc_namespace *ns);
8456
8457 /* Resolve an associate-name: Resolve target and ensure the type-spec is
8458 correct as well as possibly the array-spec. */
8459
8460 static void
8461 resolve_assoc_var (gfc_symbol* sym, bool resolve_target)
8462 {
8463 gfc_expr* target;
8464
8465 gcc_assert (sym->assoc);
8466 gcc_assert (sym->attr.flavor == FL_VARIABLE);
8467
8468 /* If this is for SELECT TYPE, the target may not yet be set. In that
8469 case, return. Resolution will be called later manually again when
8470 this is done. */
8471 target = sym->assoc->target;
8472 if (!target)
8473 return;
8474 gcc_assert (!sym->assoc->dangling);
8475
8476 if (resolve_target && !gfc_resolve_expr (target))
8477 return;
8478
8479 /* For variable targets, we get some attributes from the target. */
8480 if (target->expr_type == EXPR_VARIABLE)
8481 {
8482 gfc_symbol* tsym;
8483
8484 gcc_assert (target->symtree);
8485 tsym = target->symtree->n.sym;
8486
8487 sym->attr.asynchronous = tsym->attr.asynchronous;
8488 sym->attr.volatile_ = tsym->attr.volatile_;
8489
8490 sym->attr.target = tsym->attr.target
8491 || gfc_expr_attr (target).pointer;
8492 if (is_subref_array (target))
8493 sym->attr.subref_array_pointer = 1;
8494 }
8495
8496 if (target->expr_type == EXPR_NULL)
8497 {
8498 gfc_error ("Selector at %L cannot be NULL()", &target->where);
8499 return;
8500 }
8501 else if (target->ts.type == BT_UNKNOWN)
8502 {
8503 gfc_error ("Selector at %L has no type", &target->where);
8504 return;
8505 }
8506
8507 /* Get type if this was not already set. Note that it can be
8508 some other type than the target in case this is a SELECT TYPE
8509 selector! So we must not update when the type is already there. */
8510 if (sym->ts.type == BT_UNKNOWN)
8511 sym->ts = target->ts;
8512
8513 gcc_assert (sym->ts.type != BT_UNKNOWN);
8514
8515 /* See if this is a valid association-to-variable. */
8516 sym->assoc->variable = (target->expr_type == EXPR_VARIABLE
8517 && !gfc_has_vector_subscript (target));
8518
8519 /* Finally resolve if this is an array or not. */
8520 if (sym->attr.dimension && target->rank == 0)
8521 {
8522 /* primary.c makes the assumption that a reference to an associate
8523 name followed by a left parenthesis is an array reference. */
8524 if (sym->ts.type != BT_CHARACTER)
8525 gfc_error ("Associate-name %qs at %L is used as array",
8526 sym->name, &sym->declared_at);
8527 sym->attr.dimension = 0;
8528 return;
8529 }
8530
8531
8532 /* We cannot deal with class selectors that need temporaries. */
8533 if (target->ts.type == BT_CLASS
8534 && gfc_ref_needs_temporary_p (target->ref))
8535 {
8536 gfc_error ("CLASS selector at %L needs a temporary which is not "
8537 "yet implemented", &target->where);
8538 return;
8539 }
8540
8541 if (target->ts.type == BT_CLASS)
8542 gfc_fix_class_refs (target);
8543
8544 if (target->rank != 0)
8545 {
8546 gfc_array_spec *as;
8547 /* The rank may be incorrectly guessed at parsing, therefore make sure
8548 it is corrected now. */
8549 if (sym->ts.type != BT_CLASS && (!sym->as || sym->assoc->rankguessed))
8550 {
8551 if (!sym->as)
8552 sym->as = gfc_get_array_spec ();
8553 as = sym->as;
8554 as->rank = target->rank;
8555 as->type = AS_DEFERRED;
8556 as->corank = gfc_get_corank (target);
8557 sym->attr.dimension = 1;
8558 if (as->corank != 0)
8559 sym->attr.codimension = 1;
8560 }
8561 }
8562 else
8563 {
8564 /* target's rank is 0, but the type of the sym is still array valued,
8565 which has to be corrected. */
8566 if (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as)
8567 {
8568 gfc_array_spec *as;
8569 symbol_attribute attr;
8570 /* The associated variable's type is still the array type
8571 correct this now. */
8572 gfc_typespec *ts = &target->ts;
8573 gfc_ref *ref;
8574 gfc_component *c;
8575 for (ref = target->ref; ref != NULL; ref = ref->next)
8576 {
8577 switch (ref->type)
8578 {
8579 case REF_COMPONENT:
8580 ts = &ref->u.c.component->ts;
8581 break;
8582 case REF_ARRAY:
8583 if (ts->type == BT_CLASS)
8584 ts = &ts->u.derived->components->ts;
8585 break;
8586 default:
8587 break;
8588 }
8589 }
8590 /* Create a scalar instance of the current class type. Because the
8591 rank of a class array goes into its name, the type has to be
8592 rebuild. The alternative of (re-)setting just the attributes
8593 and as in the current type, destroys the type also in other
8594 places. */
8595 as = NULL;
8596 sym->ts = *ts;
8597 sym->ts.type = BT_CLASS;
8598 attr = CLASS_DATA (sym)->attr;
8599 attr.class_ok = 0;
8600 attr.associate_var = 1;
8601 attr.dimension = attr.codimension = 0;
8602 attr.class_pointer = 1;
8603 if (!gfc_build_class_symbol (&sym->ts, &attr, &as))
8604 gcc_unreachable ();
8605 /* Make sure the _vptr is set. */
8606 c = gfc_find_component (sym->ts.u.derived, "_vptr", true, true, NULL);
8607 if (c->ts.u.derived == NULL)
8608 c->ts.u.derived = gfc_find_derived_vtab (sym->ts.u.derived);
8609 CLASS_DATA (sym)->attr.pointer = 1;
8610 CLASS_DATA (sym)->attr.class_pointer = 1;
8611 gfc_set_sym_referenced (sym->ts.u.derived);
8612 gfc_commit_symbol (sym->ts.u.derived);
8613 /* _vptr now has the _vtab in it, change it to the _vtype. */
8614 if (c->ts.u.derived->attr.vtab)
8615 c->ts.u.derived = c->ts.u.derived->ts.u.derived;
8616 c->ts.u.derived->ns->types_resolved = 0;
8617 resolve_types (c->ts.u.derived->ns);
8618 }
8619 }
8620
8621 /* Mark this as an associate variable. */
8622 sym->attr.associate_var = 1;
8623
8624 /* Fix up the type-spec for CHARACTER types. */
8625 if (sym->ts.type == BT_CHARACTER && !sym->attr.select_type_temporary)
8626 {
8627 if (!sym->ts.u.cl)
8628 sym->ts.u.cl = target->ts.u.cl;
8629
8630 if (!sym->ts.u.cl->length && !sym->ts.deferred
8631 && target->expr_type == EXPR_CONSTANT)
8632 sym->ts.u.cl->length
8633 = gfc_get_int_expr (gfc_default_integer_kind,
8634 NULL, target->value.character.length);
8635 }
8636
8637 /* If the target is a good class object, so is the associate variable. */
8638 if (sym->ts.type == BT_CLASS && gfc_expr_attr (target).class_ok)
8639 sym->attr.class_ok = 1;
8640 }
8641
8642
8643 /* Ensure that SELECT TYPE expressions have the correct rank and a full
8644 array reference, where necessary. The symbols are artificial and so
8645 the dimension attribute and arrayspec can also be set. In addition,
8646 sometimes the expr1 arrives as BT_DERIVED, when the symbol is BT_CLASS.
8647 This is corrected here as well.*/
8648
8649 static void
8650 fixup_array_ref (gfc_expr **expr1, gfc_expr *expr2,
8651 int rank, gfc_ref *ref)
8652 {
8653 gfc_ref *nref = (*expr1)->ref;
8654 gfc_symbol *sym1 = (*expr1)->symtree->n.sym;
8655 gfc_symbol *sym2 = expr2 ? expr2->symtree->n.sym : NULL;
8656 (*expr1)->rank = rank;
8657 if (sym1->ts.type == BT_CLASS)
8658 {
8659 if ((*expr1)->ts.type != BT_CLASS)
8660 (*expr1)->ts = sym1->ts;
8661
8662 CLASS_DATA (sym1)->attr.dimension = 1;
8663 if (CLASS_DATA (sym1)->as == NULL && sym2)
8664 CLASS_DATA (sym1)->as
8665 = gfc_copy_array_spec (CLASS_DATA (sym2)->as);
8666 }
8667 else
8668 {
8669 sym1->attr.dimension = 1;
8670 if (sym1->as == NULL && sym2)
8671 sym1->as = gfc_copy_array_spec (sym2->as);
8672 }
8673
8674 for (; nref; nref = nref->next)
8675 if (nref->next == NULL)
8676 break;
8677
8678 if (ref && nref && nref->type != REF_ARRAY)
8679 nref->next = gfc_copy_ref (ref);
8680 else if (ref && !nref)
8681 (*expr1)->ref = gfc_copy_ref (ref);
8682 }
8683
8684
8685 static gfc_expr *
8686 build_loc_call (gfc_expr *sym_expr)
8687 {
8688 gfc_expr *loc_call;
8689 loc_call = gfc_get_expr ();
8690 loc_call->expr_type = EXPR_FUNCTION;
8691 gfc_get_sym_tree ("loc", gfc_current_ns, &loc_call->symtree, false);
8692 loc_call->symtree->n.sym->attr.flavor = FL_PROCEDURE;
8693 loc_call->symtree->n.sym->attr.intrinsic = 1;
8694 loc_call->symtree->n.sym->result = loc_call->symtree->n.sym;
8695 gfc_commit_symbol (loc_call->symtree->n.sym);
8696 loc_call->ts.type = BT_INTEGER;
8697 loc_call->ts.kind = gfc_index_integer_kind;
8698 loc_call->value.function.isym = gfc_intrinsic_function_by_id (GFC_ISYM_LOC);
8699 loc_call->value.function.actual = gfc_get_actual_arglist ();
8700 loc_call->value.function.actual->expr = sym_expr;
8701 loc_call->where = sym_expr->where;
8702 return loc_call;
8703 }
8704
8705 /* Resolve a SELECT TYPE statement. */
8706
8707 static void
8708 resolve_select_type (gfc_code *code, gfc_namespace *old_ns)
8709 {
8710 gfc_symbol *selector_type;
8711 gfc_code *body, *new_st, *if_st, *tail;
8712 gfc_code *class_is = NULL, *default_case = NULL;
8713 gfc_case *c;
8714 gfc_symtree *st;
8715 char name[GFC_MAX_SYMBOL_LEN];
8716 gfc_namespace *ns;
8717 int error = 0;
8718 int charlen = 0;
8719 int rank = 0;
8720 gfc_ref* ref = NULL;
8721 gfc_expr *selector_expr = NULL;
8722
8723 ns = code->ext.block.ns;
8724 gfc_resolve (ns);
8725
8726 /* Check for F03:C813. */
8727 if (code->expr1->ts.type != BT_CLASS
8728 && !(code->expr2 && code->expr2->ts.type == BT_CLASS))
8729 {
8730 gfc_error ("Selector shall be polymorphic in SELECT TYPE statement "
8731 "at %L", &code->loc);
8732 return;
8733 }
8734
8735 if (!code->expr1->symtree->n.sym->attr.class_ok)
8736 return;
8737
8738 if (code->expr2)
8739 {
8740 if (code->expr1->symtree->n.sym->attr.untyped)
8741 code->expr1->symtree->n.sym->ts = code->expr2->ts;
8742 selector_type = CLASS_DATA (code->expr2)->ts.u.derived;
8743
8744 if (code->expr2->rank && CLASS_DATA (code->expr1)->as)
8745 CLASS_DATA (code->expr1)->as->rank = code->expr2->rank;
8746
8747 /* F2008: C803 The selector expression must not be coindexed. */
8748 if (gfc_is_coindexed (code->expr2))
8749 {
8750 gfc_error ("Selector at %L must not be coindexed",
8751 &code->expr2->where);
8752 return;
8753 }
8754
8755 }
8756 else
8757 {
8758 selector_type = CLASS_DATA (code->expr1)->ts.u.derived;
8759
8760 if (gfc_is_coindexed (code->expr1))
8761 {
8762 gfc_error ("Selector at %L must not be coindexed",
8763 &code->expr1->where);
8764 return;
8765 }
8766 }
8767
8768 /* Loop over TYPE IS / CLASS IS cases. */
8769 for (body = code->block; body; body = body->block)
8770 {
8771 c = body->ext.block.case_list;
8772
8773 if (!error)
8774 {
8775 /* Check for repeated cases. */
8776 for (tail = code->block; tail; tail = tail->block)
8777 {
8778 gfc_case *d = tail->ext.block.case_list;
8779 if (tail == body)
8780 break;
8781
8782 if (c->ts.type == d->ts.type
8783 && ((c->ts.type == BT_DERIVED
8784 && c->ts.u.derived && d->ts.u.derived
8785 && !strcmp (c->ts.u.derived->name,
8786 d->ts.u.derived->name))
8787 || c->ts.type == BT_UNKNOWN
8788 || (!(c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
8789 && c->ts.kind == d->ts.kind)))
8790 {
8791 gfc_error ("TYPE IS at %L overlaps with TYPE IS at %L",
8792 &c->where, &d->where);
8793 return;
8794 }
8795 }
8796 }
8797
8798 /* Check F03:C815. */
8799 if ((c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
8800 && !selector_type->attr.unlimited_polymorphic
8801 && !gfc_type_is_extensible (c->ts.u.derived))
8802 {
8803 gfc_error ("Derived type %qs at %L must be extensible",
8804 c->ts.u.derived->name, &c->where);
8805 error++;
8806 continue;
8807 }
8808
8809 /* Check F03:C816. */
8810 if (c->ts.type != BT_UNKNOWN && !selector_type->attr.unlimited_polymorphic
8811 && ((c->ts.type != BT_DERIVED && c->ts.type != BT_CLASS)
8812 || !gfc_type_is_extension_of (selector_type, c->ts.u.derived)))
8813 {
8814 if (c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
8815 gfc_error ("Derived type %qs at %L must be an extension of %qs",
8816 c->ts.u.derived->name, &c->where, selector_type->name);
8817 else
8818 gfc_error ("Unexpected intrinsic type %qs at %L",
8819 gfc_basic_typename (c->ts.type), &c->where);
8820 error++;
8821 continue;
8822 }
8823
8824 /* Check F03:C814. */
8825 if (c->ts.type == BT_CHARACTER
8826 && (c->ts.u.cl->length != NULL || c->ts.deferred))
8827 {
8828 gfc_error ("The type-spec at %L shall specify that each length "
8829 "type parameter is assumed", &c->where);
8830 error++;
8831 continue;
8832 }
8833
8834 /* Intercept the DEFAULT case. */
8835 if (c->ts.type == BT_UNKNOWN)
8836 {
8837 /* Check F03:C818. */
8838 if (default_case)
8839 {
8840 gfc_error ("The DEFAULT CASE at %L cannot be followed "
8841 "by a second DEFAULT CASE at %L",
8842 &default_case->ext.block.case_list->where, &c->where);
8843 error++;
8844 continue;
8845 }
8846
8847 default_case = body;
8848 }
8849 }
8850
8851 if (error > 0)
8852 return;
8853
8854 /* Transform SELECT TYPE statement to BLOCK and associate selector to
8855 target if present. If there are any EXIT statements referring to the
8856 SELECT TYPE construct, this is no problem because the gfc_code
8857 reference stays the same and EXIT is equally possible from the BLOCK
8858 it is changed to. */
8859 code->op = EXEC_BLOCK;
8860 if (code->expr2)
8861 {
8862 gfc_association_list* assoc;
8863
8864 assoc = gfc_get_association_list ();
8865 assoc->st = code->expr1->symtree;
8866 assoc->target = gfc_copy_expr (code->expr2);
8867 assoc->target->where = code->expr2->where;
8868 /* assoc->variable will be set by resolve_assoc_var. */
8869
8870 code->ext.block.assoc = assoc;
8871 code->expr1->symtree->n.sym->assoc = assoc;
8872
8873 resolve_assoc_var (code->expr1->symtree->n.sym, false);
8874 }
8875 else
8876 code->ext.block.assoc = NULL;
8877
8878 /* Ensure that the selector rank and arrayspec are available to
8879 correct expressions in which they might be missing. */
8880 if (code->expr2 && code->expr2->rank)
8881 {
8882 rank = code->expr2->rank;
8883 for (ref = code->expr2->ref; ref; ref = ref->next)
8884 if (ref->next == NULL)
8885 break;
8886 if (ref && ref->type == REF_ARRAY)
8887 ref = gfc_copy_ref (ref);
8888
8889 /* Fixup expr1 if necessary. */
8890 if (rank)
8891 fixup_array_ref (&code->expr1, code->expr2, rank, ref);
8892 }
8893 else if (code->expr1->rank)
8894 {
8895 rank = code->expr1->rank;
8896 for (ref = code->expr1->ref; ref; ref = ref->next)
8897 if (ref->next == NULL)
8898 break;
8899 if (ref && ref->type == REF_ARRAY)
8900 ref = gfc_copy_ref (ref);
8901 }
8902
8903 /* Add EXEC_SELECT to switch on type. */
8904 new_st = gfc_get_code (code->op);
8905 new_st->expr1 = code->expr1;
8906 new_st->expr2 = code->expr2;
8907 new_st->block = code->block;
8908 code->expr1 = code->expr2 = NULL;
8909 code->block = NULL;
8910 if (!ns->code)
8911 ns->code = new_st;
8912 else
8913 ns->code->next = new_st;
8914 code = new_st;
8915 code->op = EXEC_SELECT_TYPE;
8916
8917 /* Use the intrinsic LOC function to generate an integer expression
8918 for the vtable of the selector. Note that the rank of the selector
8919 expression has to be set to zero. */
8920 gfc_add_vptr_component (code->expr1);
8921 code->expr1->rank = 0;
8922 code->expr1 = build_loc_call (code->expr1);
8923 selector_expr = code->expr1->value.function.actual->expr;
8924
8925 /* Loop over TYPE IS / CLASS IS cases. */
8926 for (body = code->block; body; body = body->block)
8927 {
8928 gfc_symbol *vtab;
8929 gfc_expr *e;
8930 c = body->ext.block.case_list;
8931
8932 /* Generate an index integer expression for address of the
8933 TYPE/CLASS vtable and store it in c->low. The hash expression
8934 is stored in c->high and is used to resolve intrinsic cases. */
8935 if (c->ts.type != BT_UNKNOWN)
8936 {
8937 if (c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
8938 {
8939 vtab = gfc_find_derived_vtab (c->ts.u.derived);
8940 gcc_assert (vtab);
8941 c->high = gfc_get_int_expr (gfc_default_integer_kind, NULL,
8942 c->ts.u.derived->hash_value);
8943 }
8944 else
8945 {
8946 vtab = gfc_find_vtab (&c->ts);
8947 gcc_assert (vtab && CLASS_DATA (vtab)->initializer);
8948 e = CLASS_DATA (vtab)->initializer;
8949 c->high = gfc_copy_expr (e);
8950 }
8951
8952 e = gfc_lval_expr_from_sym (vtab);
8953 c->low = build_loc_call (e);
8954 }
8955 else
8956 continue;
8957
8958 /* Associate temporary to selector. This should only be done
8959 when this case is actually true, so build a new ASSOCIATE
8960 that does precisely this here (instead of using the
8961 'global' one). */
8962
8963 if (c->ts.type == BT_CLASS)
8964 sprintf (name, "__tmp_class_%s", c->ts.u.derived->name);
8965 else if (c->ts.type == BT_DERIVED)
8966 sprintf (name, "__tmp_type_%s", c->ts.u.derived->name);
8967 else if (c->ts.type == BT_CHARACTER)
8968 {
8969 if (c->ts.u.cl && c->ts.u.cl->length
8970 && c->ts.u.cl->length->expr_type == EXPR_CONSTANT)
8971 charlen = mpz_get_si (c->ts.u.cl->length->value.integer);
8972 sprintf (name, "__tmp_%s_%d_%d", gfc_basic_typename (c->ts.type),
8973 charlen, c->ts.kind);
8974 }
8975 else
8976 sprintf (name, "__tmp_%s_%d", gfc_basic_typename (c->ts.type),
8977 c->ts.kind);
8978
8979 st = gfc_find_symtree (ns->sym_root, name);
8980 gcc_assert (st->n.sym->assoc);
8981 st->n.sym->assoc->target = gfc_get_variable_expr (selector_expr->symtree);
8982 st->n.sym->assoc->target->where = selector_expr->where;
8983 if (c->ts.type != BT_CLASS && c->ts.type != BT_UNKNOWN)
8984 {
8985 gfc_add_data_component (st->n.sym->assoc->target);
8986 /* Fixup the target expression if necessary. */
8987 if (rank)
8988 fixup_array_ref (&st->n.sym->assoc->target, NULL, rank, ref);
8989 }
8990
8991 new_st = gfc_get_code (EXEC_BLOCK);
8992 new_st->ext.block.ns = gfc_build_block_ns (ns);
8993 new_st->ext.block.ns->code = body->next;
8994 body->next = new_st;
8995
8996 /* Chain in the new list only if it is marked as dangling. Otherwise
8997 there is a CASE label overlap and this is already used. Just ignore,
8998 the error is diagnosed elsewhere. */
8999 if (st->n.sym->assoc->dangling)
9000 {
9001 new_st->ext.block.assoc = st->n.sym->assoc;
9002 st->n.sym->assoc->dangling = 0;
9003 }
9004
9005 resolve_assoc_var (st->n.sym, false);
9006 }
9007
9008 /* Take out CLASS IS cases for separate treatment. */
9009 body = code;
9010 while (body && body->block)
9011 {
9012 if (body->block->ext.block.case_list->ts.type == BT_CLASS)
9013 {
9014 /* Add to class_is list. */
9015 if (class_is == NULL)
9016 {
9017 class_is = body->block;
9018 tail = class_is;
9019 }
9020 else
9021 {
9022 for (tail = class_is; tail->block; tail = tail->block) ;
9023 tail->block = body->block;
9024 tail = tail->block;
9025 }
9026 /* Remove from EXEC_SELECT list. */
9027 body->block = body->block->block;
9028 tail->block = NULL;
9029 }
9030 else
9031 body = body->block;
9032 }
9033
9034 if (class_is)
9035 {
9036 gfc_symbol *vtab;
9037
9038 if (!default_case)
9039 {
9040 /* Add a default case to hold the CLASS IS cases. */
9041 for (tail = code; tail->block; tail = tail->block) ;
9042 tail->block = gfc_get_code (EXEC_SELECT_TYPE);
9043 tail = tail->block;
9044 tail->ext.block.case_list = gfc_get_case ();
9045 tail->ext.block.case_list->ts.type = BT_UNKNOWN;
9046 tail->next = NULL;
9047 default_case = tail;
9048 }
9049
9050 /* More than one CLASS IS block? */
9051 if (class_is->block)
9052 {
9053 gfc_code **c1,*c2;
9054 bool swapped;
9055 /* Sort CLASS IS blocks by extension level. */
9056 do
9057 {
9058 swapped = false;
9059 for (c1 = &class_is; (*c1) && (*c1)->block; c1 = &((*c1)->block))
9060 {
9061 c2 = (*c1)->block;
9062 /* F03:C817 (check for doubles). */
9063 if ((*c1)->ext.block.case_list->ts.u.derived->hash_value
9064 == c2->ext.block.case_list->ts.u.derived->hash_value)
9065 {
9066 gfc_error ("Double CLASS IS block in SELECT TYPE "
9067 "statement at %L",
9068 &c2->ext.block.case_list->where);
9069 return;
9070 }
9071 if ((*c1)->ext.block.case_list->ts.u.derived->attr.extension
9072 < c2->ext.block.case_list->ts.u.derived->attr.extension)
9073 {
9074 /* Swap. */
9075 (*c1)->block = c2->block;
9076 c2->block = *c1;
9077 *c1 = c2;
9078 swapped = true;
9079 }
9080 }
9081 }
9082 while (swapped);
9083 }
9084
9085 /* Generate IF chain. */
9086 if_st = gfc_get_code (EXEC_IF);
9087 new_st = if_st;
9088 for (body = class_is; body; body = body->block)
9089 {
9090 new_st->block = gfc_get_code (EXEC_IF);
9091 new_st = new_st->block;
9092 /* Set up IF condition: Call _gfortran_is_extension_of. */
9093 new_st->expr1 = gfc_get_expr ();
9094 new_st->expr1->expr_type = EXPR_FUNCTION;
9095 new_st->expr1->ts.type = BT_LOGICAL;
9096 new_st->expr1->ts.kind = 4;
9097 new_st->expr1->value.function.name = gfc_get_string (PREFIX ("is_extension_of"));
9098 new_st->expr1->value.function.isym = XCNEW (gfc_intrinsic_sym);
9099 new_st->expr1->value.function.isym->id = GFC_ISYM_EXTENDS_TYPE_OF;
9100 /* Set up arguments. */
9101 new_st->expr1->value.function.actual = gfc_get_actual_arglist ();
9102 new_st->expr1->value.function.actual->expr = gfc_get_variable_expr (selector_expr->symtree);
9103 new_st->expr1->value.function.actual->expr->where = code->loc;
9104 new_st->expr1->where = code->loc;
9105 gfc_add_vptr_component (new_st->expr1->value.function.actual->expr);
9106 vtab = gfc_find_derived_vtab (body->ext.block.case_list->ts.u.derived);
9107 st = gfc_find_symtree (vtab->ns->sym_root, vtab->name);
9108 new_st->expr1->value.function.actual->next = gfc_get_actual_arglist ();
9109 new_st->expr1->value.function.actual->next->expr = gfc_get_variable_expr (st);
9110 new_st->expr1->value.function.actual->next->expr->where = code->loc;
9111 new_st->next = body->next;
9112 }
9113 if (default_case->next)
9114 {
9115 new_st->block = gfc_get_code (EXEC_IF);
9116 new_st = new_st->block;
9117 new_st->next = default_case->next;
9118 }
9119
9120 /* Replace CLASS DEFAULT code by the IF chain. */
9121 default_case->next = if_st;
9122 }
9123
9124 /* Resolve the internal code. This can not be done earlier because
9125 it requires that the sym->assoc of selectors is set already. */
9126 gfc_current_ns = ns;
9127 gfc_resolve_blocks (code->block, gfc_current_ns);
9128 gfc_current_ns = old_ns;
9129
9130 if (ref)
9131 free (ref);
9132 }
9133
9134
9135 /* Resolve a transfer statement. This is making sure that:
9136 -- a derived type being transferred has only non-pointer components
9137 -- a derived type being transferred doesn't have private components, unless
9138 it's being transferred from the module where the type was defined
9139 -- we're not trying to transfer a whole assumed size array. */
9140
9141 static void
9142 resolve_transfer (gfc_code *code)
9143 {
9144 gfc_typespec *ts;
9145 gfc_symbol *sym, *derived;
9146 gfc_ref *ref;
9147 gfc_expr *exp;
9148 bool write = false;
9149 bool formatted = false;
9150 gfc_dt *dt = code->ext.dt;
9151 gfc_symbol *dtio_sub = NULL;
9152
9153 exp = code->expr1;
9154
9155 while (exp != NULL && exp->expr_type == EXPR_OP
9156 && exp->value.op.op == INTRINSIC_PARENTHESES)
9157 exp = exp->value.op.op1;
9158
9159 if (exp && exp->expr_type == EXPR_NULL
9160 && code->ext.dt)
9161 {
9162 gfc_error ("Invalid context for NULL () intrinsic at %L",
9163 &exp->where);
9164 return;
9165 }
9166
9167 if (exp == NULL || (exp->expr_type != EXPR_VARIABLE
9168 && exp->expr_type != EXPR_FUNCTION
9169 && exp->expr_type != EXPR_STRUCTURE))
9170 return;
9171
9172 /* If we are reading, the variable will be changed. Note that
9173 code->ext.dt may be NULL if the TRANSFER is related to
9174 an INQUIRE statement -- but in this case, we are not reading, either. */
9175 if (dt && dt->dt_io_kind->value.iokind == M_READ
9176 && !gfc_check_vardef_context (exp, false, false, false,
9177 _("item in READ")))
9178 return;
9179
9180 ts = exp->expr_type == EXPR_STRUCTURE ? &exp->ts : &exp->symtree->n.sym->ts;
9181
9182 /* Go to actual component transferred. */
9183 for (ref = exp->ref; ref; ref = ref->next)
9184 if (ref->type == REF_COMPONENT)
9185 ts = &ref->u.c.component->ts;
9186
9187 if (dt && dt->dt_io_kind->value.iokind != M_INQUIRE
9188 && (ts->type == BT_DERIVED || ts->type == BT_CLASS))
9189 {
9190 if (ts->type == BT_DERIVED || ts->type == BT_CLASS)
9191 derived = ts->u.derived;
9192 else
9193 derived = ts->u.derived->components->ts.u.derived;
9194
9195 if (dt->format_expr)
9196 {
9197 char *fmt;
9198 fmt = gfc_widechar_to_char (dt->format_expr->value.character.string,
9199 -1);
9200 if (strtok (fmt, "DT") != NULL)
9201 formatted = true;
9202 }
9203 else if (dt->format_label == &format_asterisk)
9204 {
9205 /* List directed io must call the formatted DTIO procedure. */
9206 formatted = true;
9207 }
9208
9209 write = dt->dt_io_kind->value.iokind == M_WRITE
9210 || dt->dt_io_kind->value.iokind == M_PRINT;
9211 dtio_sub = gfc_find_specific_dtio_proc (derived, write, formatted);
9212
9213 if (dtio_sub != NULL && exp->expr_type == EXPR_VARIABLE)
9214 {
9215 dt->udtio = exp;
9216 sym = exp->symtree->n.sym->ns->proc_name;
9217 /* Check to see if this is a nested DTIO call, with the
9218 dummy as the io-list object. */
9219 if (sym && sym == dtio_sub && sym->formal
9220 && sym->formal->sym == exp->symtree->n.sym
9221 && exp->ref == NULL)
9222 {
9223 if (!sym->attr.recursive)
9224 {
9225 gfc_error ("DTIO %s procedure at %L must be recursive",
9226 sym->name, &sym->declared_at);
9227 return;
9228 }
9229 }
9230 }
9231 }
9232
9233 if (ts->type == BT_CLASS && dtio_sub == NULL)
9234 {
9235 gfc_error ("Data transfer element at %L cannot be polymorphic unless "
9236 "it is processed by a defined input/output procedure",
9237 &code->loc);
9238 return;
9239 }
9240
9241 if (ts->type == BT_DERIVED)
9242 {
9243 /* Check that transferred derived type doesn't contain POINTER
9244 components unless it is processed by a defined input/output
9245 procedure". */
9246 if (ts->u.derived->attr.pointer_comp && dtio_sub == NULL)
9247 {
9248 gfc_error ("Data transfer element at %L cannot have POINTER "
9249 "components unless it is processed by a defined "
9250 "input/output procedure", &code->loc);
9251 return;
9252 }
9253
9254 /* F08:C935. */
9255 if (ts->u.derived->attr.proc_pointer_comp)
9256 {
9257 gfc_error ("Data transfer element at %L cannot have "
9258 "procedure pointer components", &code->loc);
9259 return;
9260 }
9261
9262 if (ts->u.derived->attr.alloc_comp && dtio_sub == NULL)
9263 {
9264 gfc_error ("Data transfer element at %L cannot have ALLOCATABLE "
9265 "components unless it is processed by a defined "
9266 "input/output procedure", &code->loc);
9267 return;
9268 }
9269
9270 /* C_PTR and C_FUNPTR have private components which means they can not
9271 be printed. However, if -std=gnu and not -pedantic, allow
9272 the component to be printed to help debugging. */
9273 if (ts->u.derived->ts.f90_type == BT_VOID)
9274 {
9275 if (!gfc_notify_std (GFC_STD_GNU, "Data transfer element at %L "
9276 "cannot have PRIVATE components", &code->loc))
9277 return;
9278 }
9279 else if (derived_inaccessible (ts->u.derived) && dtio_sub == NULL)
9280 {
9281 gfc_error ("Data transfer element at %L cannot have "
9282 "PRIVATE components unless it is processed by "
9283 "a defined input/output procedure", &code->loc);
9284 return;
9285 }
9286 }
9287
9288 if (exp->expr_type == EXPR_STRUCTURE)
9289 return;
9290
9291 sym = exp->symtree->n.sym;
9292
9293 if (sym->as != NULL && sym->as->type == AS_ASSUMED_SIZE && exp->ref
9294 && exp->ref->type == REF_ARRAY && exp->ref->u.ar.type == AR_FULL)
9295 {
9296 gfc_error ("Data transfer element at %L cannot be a full reference to "
9297 "an assumed-size array", &code->loc);
9298 return;
9299 }
9300
9301 if (async_io_dt && exp->expr_type == EXPR_VARIABLE)
9302 exp->symtree->n.sym->attr.asynchronous = 1;
9303 }
9304
9305
9306 /*********** Toplevel code resolution subroutines ***********/
9307
9308 /* Find the set of labels that are reachable from this block. We also
9309 record the last statement in each block. */
9310
9311 static void
9312 find_reachable_labels (gfc_code *block)
9313 {
9314 gfc_code *c;
9315
9316 if (!block)
9317 return;
9318
9319 cs_base->reachable_labels = bitmap_alloc (&labels_obstack);
9320
9321 /* Collect labels in this block. We don't keep those corresponding
9322 to END {IF|SELECT}, these are checked in resolve_branch by going
9323 up through the code_stack. */
9324 for (c = block; c; c = c->next)
9325 {
9326 if (c->here && c->op != EXEC_END_NESTED_BLOCK)
9327 bitmap_set_bit (cs_base->reachable_labels, c->here->value);
9328 }
9329
9330 /* Merge with labels from parent block. */
9331 if (cs_base->prev)
9332 {
9333 gcc_assert (cs_base->prev->reachable_labels);
9334 bitmap_ior_into (cs_base->reachable_labels,
9335 cs_base->prev->reachable_labels);
9336 }
9337 }
9338
9339
9340 static void
9341 resolve_lock_unlock_event (gfc_code *code)
9342 {
9343 if (code->expr1->expr_type == EXPR_FUNCTION
9344 && code->expr1->value.function.isym
9345 && code->expr1->value.function.isym->id == GFC_ISYM_CAF_GET)
9346 remove_caf_get_intrinsic (code->expr1);
9347
9348 if ((code->op == EXEC_LOCK || code->op == EXEC_UNLOCK)
9349 && (code->expr1->ts.type != BT_DERIVED
9350 || code->expr1->expr_type != EXPR_VARIABLE
9351 || code->expr1->ts.u.derived->from_intmod != INTMOD_ISO_FORTRAN_ENV
9352 || code->expr1->ts.u.derived->intmod_sym_id != ISOFORTRAN_LOCK_TYPE
9353 || code->expr1->rank != 0
9354 || (!gfc_is_coarray (code->expr1) &&
9355 !gfc_is_coindexed (code->expr1))))
9356 gfc_error ("Lock variable at %L must be a scalar of type LOCK_TYPE",
9357 &code->expr1->where);
9358 else if ((code->op == EXEC_EVENT_POST || code->op == EXEC_EVENT_WAIT)
9359 && (code->expr1->ts.type != BT_DERIVED
9360 || code->expr1->expr_type != EXPR_VARIABLE
9361 || code->expr1->ts.u.derived->from_intmod
9362 != INTMOD_ISO_FORTRAN_ENV
9363 || code->expr1->ts.u.derived->intmod_sym_id
9364 != ISOFORTRAN_EVENT_TYPE
9365 || code->expr1->rank != 0))
9366 gfc_error ("Event variable at %L must be a scalar of type EVENT_TYPE",
9367 &code->expr1->where);
9368 else if (code->op == EXEC_EVENT_POST && !gfc_is_coarray (code->expr1)
9369 && !gfc_is_coindexed (code->expr1))
9370 gfc_error ("Event variable argument at %L must be a coarray or coindexed",
9371 &code->expr1->where);
9372 else if (code->op == EXEC_EVENT_WAIT && !gfc_is_coarray (code->expr1))
9373 gfc_error ("Event variable argument at %L must be a coarray but not "
9374 "coindexed", &code->expr1->where);
9375
9376 /* Check STAT. */
9377 if (code->expr2
9378 && (code->expr2->ts.type != BT_INTEGER || code->expr2->rank != 0
9379 || code->expr2->expr_type != EXPR_VARIABLE))
9380 gfc_error ("STAT= argument at %L must be a scalar INTEGER variable",
9381 &code->expr2->where);
9382
9383 if (code->expr2
9384 && !gfc_check_vardef_context (code->expr2, false, false, false,
9385 _("STAT variable")))
9386 return;
9387
9388 /* Check ERRMSG. */
9389 if (code->expr3
9390 && (code->expr3->ts.type != BT_CHARACTER || code->expr3->rank != 0
9391 || code->expr3->expr_type != EXPR_VARIABLE))
9392 gfc_error ("ERRMSG= argument at %L must be a scalar CHARACTER variable",
9393 &code->expr3->where);
9394
9395 if (code->expr3
9396 && !gfc_check_vardef_context (code->expr3, false, false, false,
9397 _("ERRMSG variable")))
9398 return;
9399
9400 /* Check for LOCK the ACQUIRED_LOCK. */
9401 if (code->op != EXEC_EVENT_WAIT && code->expr4
9402 && (code->expr4->ts.type != BT_LOGICAL || code->expr4->rank != 0
9403 || code->expr4->expr_type != EXPR_VARIABLE))
9404 gfc_error ("ACQUIRED_LOCK= argument at %L must be a scalar LOGICAL "
9405 "variable", &code->expr4->where);
9406
9407 if (code->op != EXEC_EVENT_WAIT && code->expr4
9408 && !gfc_check_vardef_context (code->expr4, false, false, false,
9409 _("ACQUIRED_LOCK variable")))
9410 return;
9411
9412 /* Check for EVENT WAIT the UNTIL_COUNT. */
9413 if (code->op == EXEC_EVENT_WAIT && code->expr4)
9414 {
9415 if (!gfc_resolve_expr (code->expr4) || code->expr4->ts.type != BT_INTEGER
9416 || code->expr4->rank != 0)
9417 gfc_error ("UNTIL_COUNT= argument at %L must be a scalar INTEGER "
9418 "expression", &code->expr4->where);
9419 }
9420 }
9421
9422
9423 static void
9424 resolve_critical (gfc_code *code)
9425 {
9426 gfc_symtree *symtree;
9427 gfc_symbol *lock_type;
9428 char name[GFC_MAX_SYMBOL_LEN];
9429 static int serial = 0;
9430
9431 if (flag_coarray != GFC_FCOARRAY_LIB)
9432 return;
9433
9434 symtree = gfc_find_symtree (gfc_current_ns->sym_root,
9435 GFC_PREFIX ("lock_type"));
9436 if (symtree)
9437 lock_type = symtree->n.sym;
9438 else
9439 {
9440 if (gfc_get_sym_tree (GFC_PREFIX ("lock_type"), gfc_current_ns, &symtree,
9441 false) != 0)
9442 gcc_unreachable ();
9443 lock_type = symtree->n.sym;
9444 lock_type->attr.flavor = FL_DERIVED;
9445 lock_type->attr.zero_comp = 1;
9446 lock_type->from_intmod = INTMOD_ISO_FORTRAN_ENV;
9447 lock_type->intmod_sym_id = ISOFORTRAN_LOCK_TYPE;
9448 }
9449
9450 sprintf(name, GFC_PREFIX ("lock_var") "%d",serial++);
9451 if (gfc_get_sym_tree (name, gfc_current_ns, &symtree, false) != 0)
9452 gcc_unreachable ();
9453
9454 code->resolved_sym = symtree->n.sym;
9455 symtree->n.sym->attr.flavor = FL_VARIABLE;
9456 symtree->n.sym->attr.referenced = 1;
9457 symtree->n.sym->attr.artificial = 1;
9458 symtree->n.sym->attr.codimension = 1;
9459 symtree->n.sym->ts.type = BT_DERIVED;
9460 symtree->n.sym->ts.u.derived = lock_type;
9461 symtree->n.sym->as = gfc_get_array_spec ();
9462 symtree->n.sym->as->corank = 1;
9463 symtree->n.sym->as->type = AS_EXPLICIT;
9464 symtree->n.sym->as->cotype = AS_EXPLICIT;
9465 symtree->n.sym->as->lower[0] = gfc_get_int_expr (gfc_default_integer_kind,
9466 NULL, 1);
9467 gfc_commit_symbols();
9468 }
9469
9470
9471 static void
9472 resolve_sync (gfc_code *code)
9473 {
9474 /* Check imageset. The * case matches expr1 == NULL. */
9475 if (code->expr1)
9476 {
9477 if (code->expr1->ts.type != BT_INTEGER || code->expr1->rank > 1)
9478 gfc_error ("Imageset argument at %L must be a scalar or rank-1 "
9479 "INTEGER expression", &code->expr1->where);
9480 if (code->expr1->expr_type == EXPR_CONSTANT && code->expr1->rank == 0
9481 && mpz_cmp_si (code->expr1->value.integer, 1) < 0)
9482 gfc_error ("Imageset argument at %L must between 1 and num_images()",
9483 &code->expr1->where);
9484 else if (code->expr1->expr_type == EXPR_ARRAY
9485 && gfc_simplify_expr (code->expr1, 0))
9486 {
9487 gfc_constructor *cons;
9488 cons = gfc_constructor_first (code->expr1->value.constructor);
9489 for (; cons; cons = gfc_constructor_next (cons))
9490 if (cons->expr->expr_type == EXPR_CONSTANT
9491 && mpz_cmp_si (cons->expr->value.integer, 1) < 0)
9492 gfc_error ("Imageset argument at %L must between 1 and "
9493 "num_images()", &cons->expr->where);
9494 }
9495 }
9496
9497 /* Check STAT. */
9498 if (code->expr2
9499 && (code->expr2->ts.type != BT_INTEGER || code->expr2->rank != 0
9500 || code->expr2->expr_type != EXPR_VARIABLE))
9501 gfc_error ("STAT= argument at %L must be a scalar INTEGER variable",
9502 &code->expr2->where);
9503
9504 /* Check ERRMSG. */
9505 if (code->expr3
9506 && (code->expr3->ts.type != BT_CHARACTER || code->expr3->rank != 0
9507 || code->expr3->expr_type != EXPR_VARIABLE))
9508 gfc_error ("ERRMSG= argument at %L must be a scalar CHARACTER variable",
9509 &code->expr3->where);
9510 }
9511
9512
9513 /* Given a branch to a label, see if the branch is conforming.
9514 The code node describes where the branch is located. */
9515
9516 static void
9517 resolve_branch (gfc_st_label *label, gfc_code *code)
9518 {
9519 code_stack *stack;
9520
9521 if (label == NULL)
9522 return;
9523
9524 /* Step one: is this a valid branching target? */
9525
9526 if (label->defined == ST_LABEL_UNKNOWN)
9527 {
9528 gfc_error ("Label %d referenced at %L is never defined", label->value,
9529 &code->loc);
9530 return;
9531 }
9532
9533 if (label->defined != ST_LABEL_TARGET && label->defined != ST_LABEL_DO_TARGET)
9534 {
9535 gfc_error ("Statement at %L is not a valid branch target statement "
9536 "for the branch statement at %L", &label->where, &code->loc);
9537 return;
9538 }
9539
9540 /* Step two: make sure this branch is not a branch to itself ;-) */
9541
9542 if (code->here == label)
9543 {
9544 gfc_warning (0,
9545 "Branch at %L may result in an infinite loop", &code->loc);
9546 return;
9547 }
9548
9549 /* Step three: See if the label is in the same block as the
9550 branching statement. The hard work has been done by setting up
9551 the bitmap reachable_labels. */
9552
9553 if (bitmap_bit_p (cs_base->reachable_labels, label->value))
9554 {
9555 /* Check now whether there is a CRITICAL construct; if so, check
9556 whether the label is still visible outside of the CRITICAL block,
9557 which is invalid. */
9558 for (stack = cs_base; stack; stack = stack->prev)
9559 {
9560 if (stack->current->op == EXEC_CRITICAL
9561 && bitmap_bit_p (stack->reachable_labels, label->value))
9562 gfc_error ("GOTO statement at %L leaves CRITICAL construct for "
9563 "label at %L", &code->loc, &label->where);
9564 else if (stack->current->op == EXEC_DO_CONCURRENT
9565 && bitmap_bit_p (stack->reachable_labels, label->value))
9566 gfc_error ("GOTO statement at %L leaves DO CONCURRENT construct "
9567 "for label at %L", &code->loc, &label->where);
9568 }
9569
9570 return;
9571 }
9572
9573 /* Step four: If we haven't found the label in the bitmap, it may
9574 still be the label of the END of the enclosing block, in which
9575 case we find it by going up the code_stack. */
9576
9577 for (stack = cs_base; stack; stack = stack->prev)
9578 {
9579 if (stack->current->next && stack->current->next->here == label)
9580 break;
9581 if (stack->current->op == EXEC_CRITICAL)
9582 {
9583 /* Note: A label at END CRITICAL does not leave the CRITICAL
9584 construct as END CRITICAL is still part of it. */
9585 gfc_error ("GOTO statement at %L leaves CRITICAL construct for label"
9586 " at %L", &code->loc, &label->where);
9587 return;
9588 }
9589 else if (stack->current->op == EXEC_DO_CONCURRENT)
9590 {
9591 gfc_error ("GOTO statement at %L leaves DO CONCURRENT construct for "
9592 "label at %L", &code->loc, &label->where);
9593 return;
9594 }
9595 }
9596
9597 if (stack)
9598 {
9599 gcc_assert (stack->current->next->op == EXEC_END_NESTED_BLOCK);
9600 return;
9601 }
9602
9603 /* The label is not in an enclosing block, so illegal. This was
9604 allowed in Fortran 66, so we allow it as extension. No
9605 further checks are necessary in this case. */
9606 gfc_notify_std (GFC_STD_LEGACY, "Label at %L is not in the same block "
9607 "as the GOTO statement at %L", &label->where,
9608 &code->loc);
9609 return;
9610 }
9611
9612
9613 /* Check whether EXPR1 has the same shape as EXPR2. */
9614
9615 static bool
9616 resolve_where_shape (gfc_expr *expr1, gfc_expr *expr2)
9617 {
9618 mpz_t shape[GFC_MAX_DIMENSIONS];
9619 mpz_t shape2[GFC_MAX_DIMENSIONS];
9620 bool result = false;
9621 int i;
9622
9623 /* Compare the rank. */
9624 if (expr1->rank != expr2->rank)
9625 return result;
9626
9627 /* Compare the size of each dimension. */
9628 for (i=0; i<expr1->rank; i++)
9629 {
9630 if (!gfc_array_dimen_size (expr1, i, &shape[i]))
9631 goto ignore;
9632
9633 if (!gfc_array_dimen_size (expr2, i, &shape2[i]))
9634 goto ignore;
9635
9636 if (mpz_cmp (shape[i], shape2[i]))
9637 goto over;
9638 }
9639
9640 /* When either of the two expression is an assumed size array, we
9641 ignore the comparison of dimension sizes. */
9642 ignore:
9643 result = true;
9644
9645 over:
9646 gfc_clear_shape (shape, i);
9647 gfc_clear_shape (shape2, i);
9648 return result;
9649 }
9650
9651
9652 /* Check whether a WHERE assignment target or a WHERE mask expression
9653 has the same shape as the outmost WHERE mask expression. */
9654
9655 static void
9656 resolve_where (gfc_code *code, gfc_expr *mask)
9657 {
9658 gfc_code *cblock;
9659 gfc_code *cnext;
9660 gfc_expr *e = NULL;
9661
9662 cblock = code->block;
9663
9664 /* Store the first WHERE mask-expr of the WHERE statement or construct.
9665 In case of nested WHERE, only the outmost one is stored. */
9666 if (mask == NULL) /* outmost WHERE */
9667 e = cblock->expr1;
9668 else /* inner WHERE */
9669 e = mask;
9670
9671 while (cblock)
9672 {
9673 if (cblock->expr1)
9674 {
9675 /* Check if the mask-expr has a consistent shape with the
9676 outmost WHERE mask-expr. */
9677 if (!resolve_where_shape (cblock->expr1, e))
9678 gfc_error ("WHERE mask at %L has inconsistent shape",
9679 &cblock->expr1->where);
9680 }
9681
9682 /* the assignment statement of a WHERE statement, or the first
9683 statement in where-body-construct of a WHERE construct */
9684 cnext = cblock->next;
9685 while (cnext)
9686 {
9687 switch (cnext->op)
9688 {
9689 /* WHERE assignment statement */
9690 case EXEC_ASSIGN:
9691
9692 /* Check shape consistent for WHERE assignment target. */
9693 if (e && !resolve_where_shape (cnext->expr1, e))
9694 gfc_error ("WHERE assignment target at %L has "
9695 "inconsistent shape", &cnext->expr1->where);
9696 break;
9697
9698
9699 case EXEC_ASSIGN_CALL:
9700 resolve_call (cnext);
9701 if (!cnext->resolved_sym->attr.elemental)
9702 gfc_error("Non-ELEMENTAL user-defined assignment in WHERE at %L",
9703 &cnext->ext.actual->expr->where);
9704 break;
9705
9706 /* WHERE or WHERE construct is part of a where-body-construct */
9707 case EXEC_WHERE:
9708 resolve_where (cnext, e);
9709 break;
9710
9711 default:
9712 gfc_error ("Unsupported statement inside WHERE at %L",
9713 &cnext->loc);
9714 }
9715 /* the next statement within the same where-body-construct */
9716 cnext = cnext->next;
9717 }
9718 /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
9719 cblock = cblock->block;
9720 }
9721 }
9722
9723
9724 /* Resolve assignment in FORALL construct.
9725 NVAR is the number of FORALL index variables, and VAR_EXPR records the
9726 FORALL index variables. */
9727
9728 static void
9729 gfc_resolve_assign_in_forall (gfc_code *code, int nvar, gfc_expr **var_expr)
9730 {
9731 int n;
9732
9733 for (n = 0; n < nvar; n++)
9734 {
9735 gfc_symbol *forall_index;
9736
9737 forall_index = var_expr[n]->symtree->n.sym;
9738
9739 /* Check whether the assignment target is one of the FORALL index
9740 variable. */
9741 if ((code->expr1->expr_type == EXPR_VARIABLE)
9742 && (code->expr1->symtree->n.sym == forall_index))
9743 gfc_error ("Assignment to a FORALL index variable at %L",
9744 &code->expr1->where);
9745 else
9746 {
9747 /* If one of the FORALL index variables doesn't appear in the
9748 assignment variable, then there could be a many-to-one
9749 assignment. Emit a warning rather than an error because the
9750 mask could be resolving this problem. */
9751 if (!find_forall_index (code->expr1, forall_index, 0))
9752 gfc_warning (0, "The FORALL with index %qs is not used on the "
9753 "left side of the assignment at %L and so might "
9754 "cause multiple assignment to this object",
9755 var_expr[n]->symtree->name, &code->expr1->where);
9756 }
9757 }
9758 }
9759
9760
9761 /* Resolve WHERE statement in FORALL construct. */
9762
9763 static void
9764 gfc_resolve_where_code_in_forall (gfc_code *code, int nvar,
9765 gfc_expr **var_expr)
9766 {
9767 gfc_code *cblock;
9768 gfc_code *cnext;
9769
9770 cblock = code->block;
9771 while (cblock)
9772 {
9773 /* the assignment statement of a WHERE statement, or the first
9774 statement in where-body-construct of a WHERE construct */
9775 cnext = cblock->next;
9776 while (cnext)
9777 {
9778 switch (cnext->op)
9779 {
9780 /* WHERE assignment statement */
9781 case EXEC_ASSIGN:
9782 gfc_resolve_assign_in_forall (cnext, nvar, var_expr);
9783 break;
9784
9785 /* WHERE operator assignment statement */
9786 case EXEC_ASSIGN_CALL:
9787 resolve_call (cnext);
9788 if (!cnext->resolved_sym->attr.elemental)
9789 gfc_error("Non-ELEMENTAL user-defined assignment in WHERE at %L",
9790 &cnext->ext.actual->expr->where);
9791 break;
9792
9793 /* WHERE or WHERE construct is part of a where-body-construct */
9794 case EXEC_WHERE:
9795 gfc_resolve_where_code_in_forall (cnext, nvar, var_expr);
9796 break;
9797
9798 default:
9799 gfc_error ("Unsupported statement inside WHERE at %L",
9800 &cnext->loc);
9801 }
9802 /* the next statement within the same where-body-construct */
9803 cnext = cnext->next;
9804 }
9805 /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */
9806 cblock = cblock->block;
9807 }
9808 }
9809
9810
9811 /* Traverse the FORALL body to check whether the following errors exist:
9812 1. For assignment, check if a many-to-one assignment happens.
9813 2. For WHERE statement, check the WHERE body to see if there is any
9814 many-to-one assignment. */
9815
9816 static void
9817 gfc_resolve_forall_body (gfc_code *code, int nvar, gfc_expr **var_expr)
9818 {
9819 gfc_code *c;
9820
9821 c = code->block->next;
9822 while (c)
9823 {
9824 switch (c->op)
9825 {
9826 case EXEC_ASSIGN:
9827 case EXEC_POINTER_ASSIGN:
9828 gfc_resolve_assign_in_forall (c, nvar, var_expr);
9829 break;
9830
9831 case EXEC_ASSIGN_CALL:
9832 resolve_call (c);
9833 break;
9834
9835 /* Because the gfc_resolve_blocks() will handle the nested FORALL,
9836 there is no need to handle it here. */
9837 case EXEC_FORALL:
9838 break;
9839 case EXEC_WHERE:
9840 gfc_resolve_where_code_in_forall(c, nvar, var_expr);
9841 break;
9842 default:
9843 break;
9844 }
9845 /* The next statement in the FORALL body. */
9846 c = c->next;
9847 }
9848 }
9849
9850
9851 /* Counts the number of iterators needed inside a forall construct, including
9852 nested forall constructs. This is used to allocate the needed memory
9853 in gfc_resolve_forall. */
9854
9855 static int
9856 gfc_count_forall_iterators (gfc_code *code)
9857 {
9858 int max_iters, sub_iters, current_iters;
9859 gfc_forall_iterator *fa;
9860
9861 gcc_assert(code->op == EXEC_FORALL);
9862 max_iters = 0;
9863 current_iters = 0;
9864
9865 for (fa = code->ext.forall_iterator; fa; fa = fa->next)
9866 current_iters ++;
9867
9868 code = code->block->next;
9869
9870 while (code)
9871 {
9872 if (code->op == EXEC_FORALL)
9873 {
9874 sub_iters = gfc_count_forall_iterators (code);
9875 if (sub_iters > max_iters)
9876 max_iters = sub_iters;
9877 }
9878 code = code->next;
9879 }
9880
9881 return current_iters + max_iters;
9882 }
9883
9884
9885 /* Given a FORALL construct, first resolve the FORALL iterator, then call
9886 gfc_resolve_forall_body to resolve the FORALL body. */
9887
9888 static void
9889 gfc_resolve_forall (gfc_code *code, gfc_namespace *ns, int forall_save)
9890 {
9891 static gfc_expr **var_expr;
9892 static int total_var = 0;
9893 static int nvar = 0;
9894 int i, old_nvar, tmp;
9895 gfc_forall_iterator *fa;
9896
9897 old_nvar = nvar;
9898
9899 /* Start to resolve a FORALL construct */
9900 if (forall_save == 0)
9901 {
9902 /* Count the total number of FORALL indices in the nested FORALL
9903 construct in order to allocate the VAR_EXPR with proper size. */
9904 total_var = gfc_count_forall_iterators (code);
9905
9906 /* Allocate VAR_EXPR with NUMBER_OF_FORALL_INDEX elements. */
9907 var_expr = XCNEWVEC (gfc_expr *, total_var);
9908 }
9909
9910 /* The information about FORALL iterator, including FORALL indices start, end
9911 and stride. An outer FORALL indice cannot appear in start, end or stride. */
9912 for (fa = code->ext.forall_iterator; fa; fa = fa->next)
9913 {
9914 /* Fortran 20008: C738 (R753). */
9915 if (fa->var->ref && fa->var->ref->type == REF_ARRAY)
9916 {
9917 gfc_error ("FORALL index-name at %L must be a scalar variable "
9918 "of type integer", &fa->var->where);
9919 continue;
9920 }
9921
9922 /* Check if any outer FORALL index name is the same as the current
9923 one. */
9924 for (i = 0; i < nvar; i++)
9925 {
9926 if (fa->var->symtree->n.sym == var_expr[i]->symtree->n.sym)
9927 gfc_error ("An outer FORALL construct already has an index "
9928 "with this name %L", &fa->var->where);
9929 }
9930
9931 /* Record the current FORALL index. */
9932 var_expr[nvar] = gfc_copy_expr (fa->var);
9933
9934 nvar++;
9935
9936 /* No memory leak. */
9937 gcc_assert (nvar <= total_var);
9938 }
9939
9940 /* Resolve the FORALL body. */
9941 gfc_resolve_forall_body (code, nvar, var_expr);
9942
9943 /* May call gfc_resolve_forall to resolve the inner FORALL loop. */
9944 gfc_resolve_blocks (code->block, ns);
9945
9946 tmp = nvar;
9947 nvar = old_nvar;
9948 /* Free only the VAR_EXPRs allocated in this frame. */
9949 for (i = nvar; i < tmp; i++)
9950 gfc_free_expr (var_expr[i]);
9951
9952 if (nvar == 0)
9953 {
9954 /* We are in the outermost FORALL construct. */
9955 gcc_assert (forall_save == 0);
9956
9957 /* VAR_EXPR is not needed any more. */
9958 free (var_expr);
9959 total_var = 0;
9960 }
9961 }
9962
9963
9964 /* Resolve a BLOCK construct statement. */
9965
9966 static void
9967 resolve_block_construct (gfc_code* code)
9968 {
9969 /* Resolve the BLOCK's namespace. */
9970 gfc_resolve (code->ext.block.ns);
9971
9972 /* For an ASSOCIATE block, the associations (and their targets) are already
9973 resolved during resolve_symbol. */
9974 }
9975
9976
9977 /* Resolve lists of blocks found in IF, SELECT CASE, WHERE, FORALL, GOTO and
9978 DO code nodes. */
9979
9980 void
9981 gfc_resolve_blocks (gfc_code *b, gfc_namespace *ns)
9982 {
9983 bool t;
9984
9985 for (; b; b = b->block)
9986 {
9987 t = gfc_resolve_expr (b->expr1);
9988 if (!gfc_resolve_expr (b->expr2))
9989 t = false;
9990
9991 switch (b->op)
9992 {
9993 case EXEC_IF:
9994 if (t && b->expr1 != NULL
9995 && (b->expr1->ts.type != BT_LOGICAL || b->expr1->rank != 0))
9996 gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
9997 &b->expr1->where);
9998 break;
9999
10000 case EXEC_WHERE:
10001 if (t
10002 && b->expr1 != NULL
10003 && (b->expr1->ts.type != BT_LOGICAL || b->expr1->rank == 0))
10004 gfc_error ("WHERE/ELSEWHERE clause at %L requires a LOGICAL array",
10005 &b->expr1->where);
10006 break;
10007
10008 case EXEC_GOTO:
10009 resolve_branch (b->label1, b);
10010 break;
10011
10012 case EXEC_BLOCK:
10013 resolve_block_construct (b);
10014 break;
10015
10016 case EXEC_SELECT:
10017 case EXEC_SELECT_TYPE:
10018 case EXEC_FORALL:
10019 case EXEC_DO:
10020 case EXEC_DO_WHILE:
10021 case EXEC_DO_CONCURRENT:
10022 case EXEC_CRITICAL:
10023 case EXEC_READ:
10024 case EXEC_WRITE:
10025 case EXEC_IOLENGTH:
10026 case EXEC_WAIT:
10027 break;
10028
10029 case EXEC_OMP_ATOMIC:
10030 case EXEC_OACC_ATOMIC:
10031 {
10032 gfc_omp_atomic_op aop
10033 = (gfc_omp_atomic_op) (b->ext.omp_atomic & GFC_OMP_ATOMIC_MASK);
10034
10035 /* Verify this before calling gfc_resolve_code, which might
10036 change it. */
10037 gcc_assert (b->next && b->next->op == EXEC_ASSIGN);
10038 gcc_assert (((aop != GFC_OMP_ATOMIC_CAPTURE)
10039 && b->next->next == NULL)
10040 || ((aop == GFC_OMP_ATOMIC_CAPTURE)
10041 && b->next->next != NULL
10042 && b->next->next->op == EXEC_ASSIGN
10043 && b->next->next->next == NULL));
10044 }
10045 break;
10046
10047 case EXEC_OACC_PARALLEL_LOOP:
10048 case EXEC_OACC_PARALLEL:
10049 case EXEC_OACC_KERNELS_LOOP:
10050 case EXEC_OACC_KERNELS:
10051 case EXEC_OACC_DATA:
10052 case EXEC_OACC_HOST_DATA:
10053 case EXEC_OACC_LOOP:
10054 case EXEC_OACC_UPDATE:
10055 case EXEC_OACC_WAIT:
10056 case EXEC_OACC_CACHE:
10057 case EXEC_OACC_ENTER_DATA:
10058 case EXEC_OACC_EXIT_DATA:
10059 case EXEC_OACC_ROUTINE:
10060 case EXEC_OMP_CRITICAL:
10061 case EXEC_OMP_DISTRIBUTE:
10062 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
10063 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
10064 case EXEC_OMP_DISTRIBUTE_SIMD:
10065 case EXEC_OMP_DO:
10066 case EXEC_OMP_DO_SIMD:
10067 case EXEC_OMP_MASTER:
10068 case EXEC_OMP_ORDERED:
10069 case EXEC_OMP_PARALLEL:
10070 case EXEC_OMP_PARALLEL_DO:
10071 case EXEC_OMP_PARALLEL_DO_SIMD:
10072 case EXEC_OMP_PARALLEL_SECTIONS:
10073 case EXEC_OMP_PARALLEL_WORKSHARE:
10074 case EXEC_OMP_SECTIONS:
10075 case EXEC_OMP_SIMD:
10076 case EXEC_OMP_SINGLE:
10077 case EXEC_OMP_TARGET:
10078 case EXEC_OMP_TARGET_DATA:
10079 case EXEC_OMP_TARGET_ENTER_DATA:
10080 case EXEC_OMP_TARGET_EXIT_DATA:
10081 case EXEC_OMP_TARGET_PARALLEL:
10082 case EXEC_OMP_TARGET_PARALLEL_DO:
10083 case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
10084 case EXEC_OMP_TARGET_SIMD:
10085 case EXEC_OMP_TARGET_TEAMS:
10086 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
10087 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
10088 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
10089 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
10090 case EXEC_OMP_TARGET_UPDATE:
10091 case EXEC_OMP_TASK:
10092 case EXEC_OMP_TASKGROUP:
10093 case EXEC_OMP_TASKLOOP:
10094 case EXEC_OMP_TASKLOOP_SIMD:
10095 case EXEC_OMP_TASKWAIT:
10096 case EXEC_OMP_TASKYIELD:
10097 case EXEC_OMP_TEAMS:
10098 case EXEC_OMP_TEAMS_DISTRIBUTE:
10099 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
10100 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
10101 case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
10102 case EXEC_OMP_WORKSHARE:
10103 break;
10104
10105 default:
10106 gfc_internal_error ("gfc_resolve_blocks(): Bad block type");
10107 }
10108
10109 gfc_resolve_code (b->next, ns);
10110 }
10111 }
10112
10113
10114 /* Does everything to resolve an ordinary assignment. Returns true
10115 if this is an interface assignment. */
10116 static bool
10117 resolve_ordinary_assign (gfc_code *code, gfc_namespace *ns)
10118 {
10119 bool rval = false;
10120 gfc_expr *lhs;
10121 gfc_expr *rhs;
10122 int llen = 0;
10123 int rlen = 0;
10124 int n;
10125 gfc_ref *ref;
10126 symbol_attribute attr;
10127
10128 if (gfc_extend_assign (code, ns))
10129 {
10130 gfc_expr** rhsptr;
10131
10132 if (code->op == EXEC_ASSIGN_CALL)
10133 {
10134 lhs = code->ext.actual->expr;
10135 rhsptr = &code->ext.actual->next->expr;
10136 }
10137 else
10138 {
10139 gfc_actual_arglist* args;
10140 gfc_typebound_proc* tbp;
10141
10142 gcc_assert (code->op == EXEC_COMPCALL);
10143
10144 args = code->expr1->value.compcall.actual;
10145 lhs = args->expr;
10146 rhsptr = &args->next->expr;
10147
10148 tbp = code->expr1->value.compcall.tbp;
10149 gcc_assert (!tbp->is_generic);
10150 }
10151
10152 /* Make a temporary rhs when there is a default initializer
10153 and rhs is the same symbol as the lhs. */
10154 if ((*rhsptr)->expr_type == EXPR_VARIABLE
10155 && (*rhsptr)->symtree->n.sym->ts.type == BT_DERIVED
10156 && gfc_has_default_initializer ((*rhsptr)->symtree->n.sym->ts.u.derived)
10157 && (lhs->symtree->n.sym == (*rhsptr)->symtree->n.sym))
10158 *rhsptr = gfc_get_parentheses (*rhsptr);
10159
10160 return true;
10161 }
10162
10163 lhs = code->expr1;
10164 rhs = code->expr2;
10165
10166 if (rhs->is_boz
10167 && !gfc_notify_std (GFC_STD_GNU, "BOZ literal at %L outside "
10168 "a DATA statement and outside INT/REAL/DBLE/CMPLX",
10169 &code->loc))
10170 return false;
10171
10172 /* Handle the case of a BOZ literal on the RHS. */
10173 if (rhs->is_boz && lhs->ts.type != BT_INTEGER)
10174 {
10175 int rc;
10176 if (warn_surprising)
10177 gfc_warning (OPT_Wsurprising,
10178 "BOZ literal at %L is bitwise transferred "
10179 "non-integer symbol %qs", &code->loc,
10180 lhs->symtree->n.sym->name);
10181
10182 if (!gfc_convert_boz (rhs, &lhs->ts))
10183 return false;
10184 if ((rc = gfc_range_check (rhs)) != ARITH_OK)
10185 {
10186 if (rc == ARITH_UNDERFLOW)
10187 gfc_error ("Arithmetic underflow of bit-wise transferred BOZ at %L"
10188 ". This check can be disabled with the option "
10189 "%<-fno-range-check%>", &rhs->where);
10190 else if (rc == ARITH_OVERFLOW)
10191 gfc_error ("Arithmetic overflow of bit-wise transferred BOZ at %L"
10192 ". This check can be disabled with the option "
10193 "%<-fno-range-check%>", &rhs->where);
10194 else if (rc == ARITH_NAN)
10195 gfc_error ("Arithmetic NaN of bit-wise transferred BOZ at %L"
10196 ". This check can be disabled with the option "
10197 "%<-fno-range-check%>", &rhs->where);
10198 return false;
10199 }
10200 }
10201
10202 if (lhs->ts.type == BT_CHARACTER
10203 && warn_character_truncation)
10204 {
10205 if (lhs->ts.u.cl != NULL
10206 && lhs->ts.u.cl->length != NULL
10207 && lhs->ts.u.cl->length->expr_type == EXPR_CONSTANT)
10208 llen = mpz_get_si (lhs->ts.u.cl->length->value.integer);
10209
10210 if (rhs->expr_type == EXPR_CONSTANT)
10211 rlen = rhs->value.character.length;
10212
10213 else if (rhs->ts.u.cl != NULL
10214 && rhs->ts.u.cl->length != NULL
10215 && rhs->ts.u.cl->length->expr_type == EXPR_CONSTANT)
10216 rlen = mpz_get_si (rhs->ts.u.cl->length->value.integer);
10217
10218 if (rlen && llen && rlen > llen)
10219 gfc_warning_now (OPT_Wcharacter_truncation,
10220 "CHARACTER expression will be truncated "
10221 "in assignment (%d/%d) at %L",
10222 llen, rlen, &code->loc);
10223 }
10224
10225 /* Ensure that a vector index expression for the lvalue is evaluated
10226 to a temporary if the lvalue symbol is referenced in it. */
10227 if (lhs->rank)
10228 {
10229 for (ref = lhs->ref; ref; ref= ref->next)
10230 if (ref->type == REF_ARRAY)
10231 {
10232 for (n = 0; n < ref->u.ar.dimen; n++)
10233 if (ref->u.ar.dimen_type[n] == DIMEN_VECTOR
10234 && gfc_find_sym_in_expr (lhs->symtree->n.sym,
10235 ref->u.ar.start[n]))
10236 ref->u.ar.start[n]
10237 = gfc_get_parentheses (ref->u.ar.start[n]);
10238 }
10239 }
10240
10241 if (gfc_pure (NULL))
10242 {
10243 if (lhs->ts.type == BT_DERIVED
10244 && lhs->expr_type == EXPR_VARIABLE
10245 && lhs->ts.u.derived->attr.pointer_comp
10246 && rhs->expr_type == EXPR_VARIABLE
10247 && (gfc_impure_variable (rhs->symtree->n.sym)
10248 || gfc_is_coindexed (rhs)))
10249 {
10250 /* F2008, C1283. */
10251 if (gfc_is_coindexed (rhs))
10252 gfc_error ("Coindexed expression at %L is assigned to "
10253 "a derived type variable with a POINTER "
10254 "component in a PURE procedure",
10255 &rhs->where);
10256 else
10257 gfc_error ("The impure variable at %L is assigned to "
10258 "a derived type variable with a POINTER "
10259 "component in a PURE procedure (12.6)",
10260 &rhs->where);
10261 return rval;
10262 }
10263
10264 /* Fortran 2008, C1283. */
10265 if (gfc_is_coindexed (lhs))
10266 {
10267 gfc_error ("Assignment to coindexed variable at %L in a PURE "
10268 "procedure", &rhs->where);
10269 return rval;
10270 }
10271 }
10272
10273 if (gfc_implicit_pure (NULL))
10274 {
10275 if (lhs->expr_type == EXPR_VARIABLE
10276 && lhs->symtree->n.sym != gfc_current_ns->proc_name
10277 && lhs->symtree->n.sym->ns != gfc_current_ns)
10278 gfc_unset_implicit_pure (NULL);
10279
10280 if (lhs->ts.type == BT_DERIVED
10281 && lhs->expr_type == EXPR_VARIABLE
10282 && lhs->ts.u.derived->attr.pointer_comp
10283 && rhs->expr_type == EXPR_VARIABLE
10284 && (gfc_impure_variable (rhs->symtree->n.sym)
10285 || gfc_is_coindexed (rhs)))
10286 gfc_unset_implicit_pure (NULL);
10287
10288 /* Fortran 2008, C1283. */
10289 if (gfc_is_coindexed (lhs))
10290 gfc_unset_implicit_pure (NULL);
10291 }
10292
10293 /* F2008, 7.2.1.2. */
10294 attr = gfc_expr_attr (lhs);
10295 if (lhs->ts.type == BT_CLASS && attr.allocatable)
10296 {
10297 if (attr.codimension)
10298 {
10299 gfc_error ("Assignment to polymorphic coarray at %L is not "
10300 "permitted", &lhs->where);
10301 return false;
10302 }
10303 if (!gfc_notify_std (GFC_STD_F2008, "Assignment to an allocatable "
10304 "polymorphic variable at %L", &lhs->where))
10305 return false;
10306 if (!flag_realloc_lhs)
10307 {
10308 gfc_error ("Assignment to an allocatable polymorphic variable at %L "
10309 "requires %<-frealloc-lhs%>", &lhs->where);
10310 return false;
10311 }
10312 }
10313 else if (lhs->ts.type == BT_CLASS)
10314 {
10315 gfc_error ("Nonallocatable variable must not be polymorphic in intrinsic "
10316 "assignment at %L - check that there is a matching specific "
10317 "subroutine for '=' operator", &lhs->where);
10318 return false;
10319 }
10320
10321 bool lhs_coindexed = gfc_is_coindexed (lhs);
10322
10323 /* F2008, Section 7.2.1.2. */
10324 if (lhs_coindexed && gfc_has_ultimate_allocatable (lhs))
10325 {
10326 gfc_error ("Coindexed variable must not have an allocatable ultimate "
10327 "component in assignment at %L", &lhs->where);
10328 return false;
10329 }
10330
10331 /* Assign the 'data' of a class object to a derived type. */
10332 if (lhs->ts.type == BT_DERIVED
10333 && rhs->ts.type == BT_CLASS
10334 && rhs->expr_type != EXPR_ARRAY)
10335 gfc_add_data_component (rhs);
10336
10337 bool caf_convert_to_send = flag_coarray == GFC_FCOARRAY_LIB
10338 && (lhs_coindexed
10339 || (code->expr2->expr_type == EXPR_FUNCTION
10340 && code->expr2->value.function.isym
10341 && code->expr2->value.function.isym->id == GFC_ISYM_CAF_GET
10342 && (code->expr1->rank == 0 || code->expr2->rank != 0)
10343 && !gfc_expr_attr (rhs).allocatable
10344 && !gfc_has_vector_subscript (rhs)));
10345
10346 gfc_check_assign (lhs, rhs, 1, !caf_convert_to_send);
10347
10348 /* Insert a GFC_ISYM_CAF_SEND intrinsic, when the LHS is a coindexed variable.
10349 Additionally, insert this code when the RHS is a CAF as we then use the
10350 GFC_ISYM_CAF_SEND intrinsic just to avoid a temporary; but do not do so if
10351 the LHS is (re)allocatable or has a vector subscript. If the LHS is a
10352 noncoindexed array and the RHS is a coindexed scalar, use the normal code
10353 path. */
10354 if (caf_convert_to_send)
10355 {
10356 if (code->expr2->expr_type == EXPR_FUNCTION
10357 && code->expr2->value.function.isym
10358 && code->expr2->value.function.isym->id == GFC_ISYM_CAF_GET)
10359 remove_caf_get_intrinsic (code->expr2);
10360 code->op = EXEC_CALL;
10361 gfc_get_sym_tree (GFC_PREFIX ("caf_send"), ns, &code->symtree, true);
10362 code->resolved_sym = code->symtree->n.sym;
10363 code->resolved_sym->attr.flavor = FL_PROCEDURE;
10364 code->resolved_sym->attr.intrinsic = 1;
10365 code->resolved_sym->attr.subroutine = 1;
10366 code->resolved_isym = gfc_intrinsic_subroutine_by_id (GFC_ISYM_CAF_SEND);
10367 gfc_commit_symbol (code->resolved_sym);
10368 code->ext.actual = gfc_get_actual_arglist ();
10369 code->ext.actual->expr = lhs;
10370 code->ext.actual->next = gfc_get_actual_arglist ();
10371 code->ext.actual->next->expr = rhs;
10372 code->expr1 = NULL;
10373 code->expr2 = NULL;
10374 }
10375
10376 return false;
10377 }
10378
10379
10380 /* Add a component reference onto an expression. */
10381
10382 static void
10383 add_comp_ref (gfc_expr *e, gfc_component *c)
10384 {
10385 gfc_ref **ref;
10386 ref = &(e->ref);
10387 while (*ref)
10388 ref = &((*ref)->next);
10389 *ref = gfc_get_ref ();
10390 (*ref)->type = REF_COMPONENT;
10391 (*ref)->u.c.sym = e->ts.u.derived;
10392 (*ref)->u.c.component = c;
10393 e->ts = c->ts;
10394
10395 /* Add a full array ref, as necessary. */
10396 if (c->as)
10397 {
10398 gfc_add_full_array_ref (e, c->as);
10399 e->rank = c->as->rank;
10400 }
10401 }
10402
10403
10404 /* Build an assignment. Keep the argument 'op' for future use, so that
10405 pointer assignments can be made. */
10406
10407 static gfc_code *
10408 build_assignment (gfc_exec_op op, gfc_expr *expr1, gfc_expr *expr2,
10409 gfc_component *comp1, gfc_component *comp2, locus loc)
10410 {
10411 gfc_code *this_code;
10412
10413 this_code = gfc_get_code (op);
10414 this_code->next = NULL;
10415 this_code->expr1 = gfc_copy_expr (expr1);
10416 this_code->expr2 = gfc_copy_expr (expr2);
10417 this_code->loc = loc;
10418 if (comp1 && comp2)
10419 {
10420 add_comp_ref (this_code->expr1, comp1);
10421 add_comp_ref (this_code->expr2, comp2);
10422 }
10423
10424 return this_code;
10425 }
10426
10427
10428 /* Makes a temporary variable expression based on the characteristics of
10429 a given variable expression. */
10430
10431 static gfc_expr*
10432 get_temp_from_expr (gfc_expr *e, gfc_namespace *ns)
10433 {
10434 static int serial = 0;
10435 char name[GFC_MAX_SYMBOL_LEN];
10436 gfc_symtree *tmp;
10437 gfc_array_spec *as;
10438 gfc_array_ref *aref;
10439 gfc_ref *ref;
10440
10441 sprintf (name, GFC_PREFIX("DA%d"), serial++);
10442 gfc_get_sym_tree (name, ns, &tmp, false);
10443 gfc_add_type (tmp->n.sym, &e->ts, NULL);
10444
10445 as = NULL;
10446 ref = NULL;
10447 aref = NULL;
10448
10449 /* Obtain the arrayspec for the temporary. */
10450 if (e->rank && e->expr_type != EXPR_ARRAY
10451 && e->expr_type != EXPR_FUNCTION
10452 && e->expr_type != EXPR_OP)
10453 {
10454 aref = gfc_find_array_ref (e);
10455 if (e->expr_type == EXPR_VARIABLE
10456 && e->symtree->n.sym->as == aref->as)
10457 as = aref->as;
10458 else
10459 {
10460 for (ref = e->ref; ref; ref = ref->next)
10461 if (ref->type == REF_COMPONENT
10462 && ref->u.c.component->as == aref->as)
10463 {
10464 as = aref->as;
10465 break;
10466 }
10467 }
10468 }
10469
10470 /* Add the attributes and the arrayspec to the temporary. */
10471 tmp->n.sym->attr = gfc_expr_attr (e);
10472 tmp->n.sym->attr.function = 0;
10473 tmp->n.sym->attr.result = 0;
10474 tmp->n.sym->attr.flavor = FL_VARIABLE;
10475
10476 if (as)
10477 {
10478 tmp->n.sym->as = gfc_copy_array_spec (as);
10479 if (!ref)
10480 ref = e->ref;
10481 if (as->type == AS_DEFERRED)
10482 tmp->n.sym->attr.allocatable = 1;
10483 }
10484 else if (e->rank && (e->expr_type == EXPR_ARRAY
10485 || e->expr_type == EXPR_FUNCTION
10486 || e->expr_type == EXPR_OP))
10487 {
10488 tmp->n.sym->as = gfc_get_array_spec ();
10489 tmp->n.sym->as->type = AS_DEFERRED;
10490 tmp->n.sym->as->rank = e->rank;
10491 tmp->n.sym->attr.allocatable = 1;
10492 tmp->n.sym->attr.dimension = 1;
10493 }
10494 else
10495 tmp->n.sym->attr.dimension = 0;
10496
10497 gfc_set_sym_referenced (tmp->n.sym);
10498 gfc_commit_symbol (tmp->n.sym);
10499 e = gfc_lval_expr_from_sym (tmp->n.sym);
10500
10501 /* Should the lhs be a section, use its array ref for the
10502 temporary expression. */
10503 if (aref && aref->type != AR_FULL)
10504 {
10505 gfc_free_ref_list (e->ref);
10506 e->ref = gfc_copy_ref (ref);
10507 }
10508 return e;
10509 }
10510
10511
10512 /* Add one line of code to the code chain, making sure that 'head' and
10513 'tail' are appropriately updated. */
10514
10515 static void
10516 add_code_to_chain (gfc_code **this_code, gfc_code **head, gfc_code **tail)
10517 {
10518 gcc_assert (this_code);
10519 if (*head == NULL)
10520 *head = *tail = *this_code;
10521 else
10522 *tail = gfc_append_code (*tail, *this_code);
10523 *this_code = NULL;
10524 }
10525
10526
10527 /* Counts the potential number of part array references that would
10528 result from resolution of typebound defined assignments. */
10529
10530 static int
10531 nonscalar_typebound_assign (gfc_symbol *derived, int depth)
10532 {
10533 gfc_component *c;
10534 int c_depth = 0, t_depth;
10535
10536 for (c= derived->components; c; c = c->next)
10537 {
10538 if ((!gfc_bt_struct (c->ts.type)
10539 || c->attr.pointer
10540 || c->attr.allocatable
10541 || c->attr.proc_pointer_comp
10542 || c->attr.class_pointer
10543 || c->attr.proc_pointer)
10544 && !c->attr.defined_assign_comp)
10545 continue;
10546
10547 if (c->as && c_depth == 0)
10548 c_depth = 1;
10549
10550 if (c->ts.u.derived->attr.defined_assign_comp)
10551 t_depth = nonscalar_typebound_assign (c->ts.u.derived,
10552 c->as ? 1 : 0);
10553 else
10554 t_depth = 0;
10555
10556 c_depth = t_depth > c_depth ? t_depth : c_depth;
10557 }
10558 return depth + c_depth;
10559 }
10560
10561
10562 /* Implement 7.2.1.3 of the F08 standard:
10563 "An intrinsic assignment where the variable is of derived type is
10564 performed as if each component of the variable were assigned from the
10565 corresponding component of expr using pointer assignment (7.2.2) for
10566 each pointer component, defined assignment for each nonpointer
10567 nonallocatable component of a type that has a type-bound defined
10568 assignment consistent with the component, intrinsic assignment for
10569 each other nonpointer nonallocatable component, ..."
10570
10571 The pointer assignments are taken care of by the intrinsic
10572 assignment of the structure itself. This function recursively adds
10573 defined assignments where required. The recursion is accomplished
10574 by calling gfc_resolve_code.
10575
10576 When the lhs in a defined assignment has intent INOUT, we need a
10577 temporary for the lhs. In pseudo-code:
10578
10579 ! Only call function lhs once.
10580 if (lhs is not a constant or an variable)
10581 temp_x = expr2
10582 expr2 => temp_x
10583 ! Do the intrinsic assignment
10584 expr1 = expr2
10585 ! Now do the defined assignments
10586 do over components with typebound defined assignment [%cmp]
10587 #if one component's assignment procedure is INOUT
10588 t1 = expr1
10589 #if expr2 non-variable
10590 temp_x = expr2
10591 expr2 => temp_x
10592 # endif
10593 expr1 = expr2
10594 # for each cmp
10595 t1%cmp {defined=} expr2%cmp
10596 expr1%cmp = t1%cmp
10597 #else
10598 expr1 = expr2
10599
10600 # for each cmp
10601 expr1%cmp {defined=} expr2%cmp
10602 #endif
10603 */
10604
10605 /* The temporary assignments have to be put on top of the additional
10606 code to avoid the result being changed by the intrinsic assignment.
10607 */
10608 static int component_assignment_level = 0;
10609 static gfc_code *tmp_head = NULL, *tmp_tail = NULL;
10610
10611 static void
10612 generate_component_assignments (gfc_code **code, gfc_namespace *ns)
10613 {
10614 gfc_component *comp1, *comp2;
10615 gfc_code *this_code = NULL, *head = NULL, *tail = NULL;
10616 gfc_expr *t1;
10617 int error_count, depth;
10618
10619 gfc_get_errors (NULL, &error_count);
10620
10621 /* Filter out continuing processing after an error. */
10622 if (error_count
10623 || (*code)->expr1->ts.type != BT_DERIVED
10624 || (*code)->expr2->ts.type != BT_DERIVED)
10625 return;
10626
10627 /* TODO: Handle more than one part array reference in assignments. */
10628 depth = nonscalar_typebound_assign ((*code)->expr1->ts.u.derived,
10629 (*code)->expr1->rank ? 1 : 0);
10630 if (depth > 1)
10631 {
10632 gfc_warning (0, "TODO: type-bound defined assignment(s) at %L not "
10633 "done because multiple part array references would "
10634 "occur in intermediate expressions.", &(*code)->loc);
10635 return;
10636 }
10637
10638 component_assignment_level++;
10639
10640 /* Create a temporary so that functions get called only once. */
10641 if ((*code)->expr2->expr_type != EXPR_VARIABLE
10642 && (*code)->expr2->expr_type != EXPR_CONSTANT)
10643 {
10644 gfc_expr *tmp_expr;
10645
10646 /* Assign the rhs to the temporary. */
10647 tmp_expr = get_temp_from_expr ((*code)->expr1, ns);
10648 this_code = build_assignment (EXEC_ASSIGN,
10649 tmp_expr, (*code)->expr2,
10650 NULL, NULL, (*code)->loc);
10651 /* Add the code and substitute the rhs expression. */
10652 add_code_to_chain (&this_code, &tmp_head, &tmp_tail);
10653 gfc_free_expr ((*code)->expr2);
10654 (*code)->expr2 = tmp_expr;
10655 }
10656
10657 /* Do the intrinsic assignment. This is not needed if the lhs is one
10658 of the temporaries generated here, since the intrinsic assignment
10659 to the final result already does this. */
10660 if ((*code)->expr1->symtree->n.sym->name[2] != '@')
10661 {
10662 this_code = build_assignment (EXEC_ASSIGN,
10663 (*code)->expr1, (*code)->expr2,
10664 NULL, NULL, (*code)->loc);
10665 add_code_to_chain (&this_code, &head, &tail);
10666 }
10667
10668 comp1 = (*code)->expr1->ts.u.derived->components;
10669 comp2 = (*code)->expr2->ts.u.derived->components;
10670
10671 t1 = NULL;
10672 for (; comp1; comp1 = comp1->next, comp2 = comp2->next)
10673 {
10674 bool inout = false;
10675
10676 /* The intrinsic assignment does the right thing for pointers
10677 of all kinds and allocatable components. */
10678 if (!gfc_bt_struct (comp1->ts.type)
10679 || comp1->attr.pointer
10680 || comp1->attr.allocatable
10681 || comp1->attr.proc_pointer_comp
10682 || comp1->attr.class_pointer
10683 || comp1->attr.proc_pointer)
10684 continue;
10685
10686 /* Make an assigment for this component. */
10687 this_code = build_assignment (EXEC_ASSIGN,
10688 (*code)->expr1, (*code)->expr2,
10689 comp1, comp2, (*code)->loc);
10690
10691 /* Convert the assignment if there is a defined assignment for
10692 this type. Otherwise, using the call from gfc_resolve_code,
10693 recurse into its components. */
10694 gfc_resolve_code (this_code, ns);
10695
10696 if (this_code->op == EXEC_ASSIGN_CALL)
10697 {
10698 gfc_formal_arglist *dummy_args;
10699 gfc_symbol *rsym;
10700 /* Check that there is a typebound defined assignment. If not,
10701 then this must be a module defined assignment. We cannot
10702 use the defined_assign_comp attribute here because it must
10703 be this derived type that has the defined assignment and not
10704 a parent type. */
10705 if (!(comp1->ts.u.derived->f2k_derived
10706 && comp1->ts.u.derived->f2k_derived
10707 ->tb_op[INTRINSIC_ASSIGN]))
10708 {
10709 gfc_free_statements (this_code);
10710 this_code = NULL;
10711 continue;
10712 }
10713
10714 /* If the first argument of the subroutine has intent INOUT
10715 a temporary must be generated and used instead. */
10716 rsym = this_code->resolved_sym;
10717 dummy_args = gfc_sym_get_dummy_args (rsym);
10718 if (dummy_args
10719 && dummy_args->sym->attr.intent == INTENT_INOUT)
10720 {
10721 gfc_code *temp_code;
10722 inout = true;
10723
10724 /* Build the temporary required for the assignment and put
10725 it at the head of the generated code. */
10726 if (!t1)
10727 {
10728 t1 = get_temp_from_expr ((*code)->expr1, ns);
10729 temp_code = build_assignment (EXEC_ASSIGN,
10730 t1, (*code)->expr1,
10731 NULL, NULL, (*code)->loc);
10732
10733 /* For allocatable LHS, check whether it is allocated. Note
10734 that allocatable components with defined assignment are
10735 not yet support. See PR 57696. */
10736 if ((*code)->expr1->symtree->n.sym->attr.allocatable)
10737 {
10738 gfc_code *block;
10739 gfc_expr *e =
10740 gfc_lval_expr_from_sym ((*code)->expr1->symtree->n.sym);
10741 block = gfc_get_code (EXEC_IF);
10742 block->block = gfc_get_code (EXEC_IF);
10743 block->block->expr1
10744 = gfc_build_intrinsic_call (ns,
10745 GFC_ISYM_ALLOCATED, "allocated",
10746 (*code)->loc, 1, e);
10747 block->block->next = temp_code;
10748 temp_code = block;
10749 }
10750 add_code_to_chain (&temp_code, &tmp_head, &tmp_tail);
10751 }
10752
10753 /* Replace the first actual arg with the component of the
10754 temporary. */
10755 gfc_free_expr (this_code->ext.actual->expr);
10756 this_code->ext.actual->expr = gfc_copy_expr (t1);
10757 add_comp_ref (this_code->ext.actual->expr, comp1);
10758
10759 /* If the LHS variable is allocatable and wasn't allocated and
10760 the temporary is allocatable, pointer assign the address of
10761 the freshly allocated LHS to the temporary. */
10762 if ((*code)->expr1->symtree->n.sym->attr.allocatable
10763 && gfc_expr_attr ((*code)->expr1).allocatable)
10764 {
10765 gfc_code *block;
10766 gfc_expr *cond;
10767
10768 cond = gfc_get_expr ();
10769 cond->ts.type = BT_LOGICAL;
10770 cond->ts.kind = gfc_default_logical_kind;
10771 cond->expr_type = EXPR_OP;
10772 cond->where = (*code)->loc;
10773 cond->value.op.op = INTRINSIC_NOT;
10774 cond->value.op.op1 = gfc_build_intrinsic_call (ns,
10775 GFC_ISYM_ALLOCATED, "allocated",
10776 (*code)->loc, 1, gfc_copy_expr (t1));
10777 block = gfc_get_code (EXEC_IF);
10778 block->block = gfc_get_code (EXEC_IF);
10779 block->block->expr1 = cond;
10780 block->block->next = build_assignment (EXEC_POINTER_ASSIGN,
10781 t1, (*code)->expr1,
10782 NULL, NULL, (*code)->loc);
10783 add_code_to_chain (&block, &head, &tail);
10784 }
10785 }
10786 }
10787 else if (this_code->op == EXEC_ASSIGN && !this_code->next)
10788 {
10789 /* Don't add intrinsic assignments since they are already
10790 effected by the intrinsic assignment of the structure. */
10791 gfc_free_statements (this_code);
10792 this_code = NULL;
10793 continue;
10794 }
10795
10796 add_code_to_chain (&this_code, &head, &tail);
10797
10798 if (t1 && inout)
10799 {
10800 /* Transfer the value to the final result. */
10801 this_code = build_assignment (EXEC_ASSIGN,
10802 (*code)->expr1, t1,
10803 comp1, comp2, (*code)->loc);
10804 add_code_to_chain (&this_code, &head, &tail);
10805 }
10806 }
10807
10808 /* Put the temporary assignments at the top of the generated code. */
10809 if (tmp_head && component_assignment_level == 1)
10810 {
10811 gfc_append_code (tmp_head, head);
10812 head = tmp_head;
10813 tmp_head = tmp_tail = NULL;
10814 }
10815
10816 // If we did a pointer assignment - thus, we need to ensure that the LHS is
10817 // not accidentally deallocated. Hence, nullify t1.
10818 if (t1 && (*code)->expr1->symtree->n.sym->attr.allocatable
10819 && gfc_expr_attr ((*code)->expr1).allocatable)
10820 {
10821 gfc_code *block;
10822 gfc_expr *cond;
10823 gfc_expr *e;
10824
10825 e = gfc_lval_expr_from_sym ((*code)->expr1->symtree->n.sym);
10826 cond = gfc_build_intrinsic_call (ns, GFC_ISYM_ASSOCIATED, "associated",
10827 (*code)->loc, 2, gfc_copy_expr (t1), e);
10828 block = gfc_get_code (EXEC_IF);
10829 block->block = gfc_get_code (EXEC_IF);
10830 block->block->expr1 = cond;
10831 block->block->next = build_assignment (EXEC_POINTER_ASSIGN,
10832 t1, gfc_get_null_expr (&(*code)->loc),
10833 NULL, NULL, (*code)->loc);
10834 gfc_append_code (tail, block);
10835 tail = block;
10836 }
10837
10838 /* Now attach the remaining code chain to the input code. Step on
10839 to the end of the new code since resolution is complete. */
10840 gcc_assert ((*code)->op == EXEC_ASSIGN);
10841 tail->next = (*code)->next;
10842 /* Overwrite 'code' because this would place the intrinsic assignment
10843 before the temporary for the lhs is created. */
10844 gfc_free_expr ((*code)->expr1);
10845 gfc_free_expr ((*code)->expr2);
10846 **code = *head;
10847 if (head != tail)
10848 free (head);
10849 *code = tail;
10850
10851 component_assignment_level--;
10852 }
10853
10854
10855 /* F2008: Pointer function assignments are of the form:
10856 ptr_fcn (args) = expr
10857 This function breaks these assignments into two statements:
10858 temporary_pointer => ptr_fcn(args)
10859 temporary_pointer = expr */
10860
10861 static bool
10862 resolve_ptr_fcn_assign (gfc_code **code, gfc_namespace *ns)
10863 {
10864 gfc_expr *tmp_ptr_expr;
10865 gfc_code *this_code;
10866 gfc_component *comp;
10867 gfc_symbol *s;
10868
10869 if ((*code)->expr1->expr_type != EXPR_FUNCTION)
10870 return false;
10871
10872 /* Even if standard does not support this feature, continue to build
10873 the two statements to avoid upsetting frontend_passes.c. */
10874 gfc_notify_std (GFC_STD_F2008, "Pointer procedure assignment at "
10875 "%L", &(*code)->loc);
10876
10877 comp = gfc_get_proc_ptr_comp ((*code)->expr1);
10878
10879 if (comp)
10880 s = comp->ts.interface;
10881 else
10882 s = (*code)->expr1->symtree->n.sym;
10883
10884 if (s == NULL || !s->result->attr.pointer)
10885 {
10886 gfc_error ("The function result on the lhs of the assignment at "
10887 "%L must have the pointer attribute.",
10888 &(*code)->expr1->where);
10889 (*code)->op = EXEC_NOP;
10890 return false;
10891 }
10892
10893 tmp_ptr_expr = get_temp_from_expr ((*code)->expr2, ns);
10894
10895 /* get_temp_from_expression is set up for ordinary assignments. To that
10896 end, where array bounds are not known, arrays are made allocatable.
10897 Change the temporary to a pointer here. */
10898 tmp_ptr_expr->symtree->n.sym->attr.pointer = 1;
10899 tmp_ptr_expr->symtree->n.sym->attr.allocatable = 0;
10900 tmp_ptr_expr->where = (*code)->loc;
10901
10902 this_code = build_assignment (EXEC_ASSIGN,
10903 tmp_ptr_expr, (*code)->expr2,
10904 NULL, NULL, (*code)->loc);
10905 this_code->next = (*code)->next;
10906 (*code)->next = this_code;
10907 (*code)->op = EXEC_POINTER_ASSIGN;
10908 (*code)->expr2 = (*code)->expr1;
10909 (*code)->expr1 = tmp_ptr_expr;
10910
10911 return true;
10912 }
10913
10914
10915 /* Deferred character length assignments from an operator expression
10916 require a temporary because the character length of the lhs can
10917 change in the course of the assignment. */
10918
10919 static bool
10920 deferred_op_assign (gfc_code **code, gfc_namespace *ns)
10921 {
10922 gfc_expr *tmp_expr;
10923 gfc_code *this_code;
10924
10925 if (!((*code)->expr1->ts.type == BT_CHARACTER
10926 && (*code)->expr1->ts.deferred && (*code)->expr1->rank
10927 && (*code)->expr2->expr_type == EXPR_OP))
10928 return false;
10929
10930 if (!gfc_check_dependency ((*code)->expr1, (*code)->expr2, 1))
10931 return false;
10932
10933 tmp_expr = get_temp_from_expr ((*code)->expr1, ns);
10934 tmp_expr->where = (*code)->loc;
10935
10936 /* A new charlen is required to ensure that the variable string
10937 length is different to that of the original lhs. */
10938 tmp_expr->ts.u.cl = gfc_get_charlen();
10939 tmp_expr->symtree->n.sym->ts.u.cl = tmp_expr->ts.u.cl;
10940 tmp_expr->ts.u.cl->next = (*code)->expr2->ts.u.cl->next;
10941 (*code)->expr2->ts.u.cl->next = tmp_expr->ts.u.cl;
10942
10943 tmp_expr->symtree->n.sym->ts.deferred = 1;
10944
10945 this_code = build_assignment (EXEC_ASSIGN,
10946 (*code)->expr1,
10947 gfc_copy_expr (tmp_expr),
10948 NULL, NULL, (*code)->loc);
10949
10950 (*code)->expr1 = tmp_expr;
10951
10952 this_code->next = (*code)->next;
10953 (*code)->next = this_code;
10954
10955 return true;
10956 }
10957
10958
10959 /* Given a block of code, recursively resolve everything pointed to by this
10960 code block. */
10961
10962 void
10963 gfc_resolve_code (gfc_code *code, gfc_namespace *ns)
10964 {
10965 int omp_workshare_save;
10966 int forall_save, do_concurrent_save;
10967 code_stack frame;
10968 bool t;
10969
10970 frame.prev = cs_base;
10971 frame.head = code;
10972 cs_base = &frame;
10973
10974 find_reachable_labels (code);
10975
10976 for (; code; code = code->next)
10977 {
10978 frame.current = code;
10979 forall_save = forall_flag;
10980 do_concurrent_save = gfc_do_concurrent_flag;
10981
10982 if (code->op == EXEC_FORALL)
10983 {
10984 forall_flag = 1;
10985 gfc_resolve_forall (code, ns, forall_save);
10986 forall_flag = 2;
10987 }
10988 else if (code->block)
10989 {
10990 omp_workshare_save = -1;
10991 switch (code->op)
10992 {
10993 case EXEC_OACC_PARALLEL_LOOP:
10994 case EXEC_OACC_PARALLEL:
10995 case EXEC_OACC_KERNELS_LOOP:
10996 case EXEC_OACC_KERNELS:
10997 case EXEC_OACC_DATA:
10998 case EXEC_OACC_HOST_DATA:
10999 case EXEC_OACC_LOOP:
11000 gfc_resolve_oacc_blocks (code, ns);
11001 break;
11002 case EXEC_OMP_PARALLEL_WORKSHARE:
11003 omp_workshare_save = omp_workshare_flag;
11004 omp_workshare_flag = 1;
11005 gfc_resolve_omp_parallel_blocks (code, ns);
11006 break;
11007 case EXEC_OMP_PARALLEL:
11008 case EXEC_OMP_PARALLEL_DO:
11009 case EXEC_OMP_PARALLEL_DO_SIMD:
11010 case EXEC_OMP_PARALLEL_SECTIONS:
11011 case EXEC_OMP_TARGET_PARALLEL:
11012 case EXEC_OMP_TARGET_PARALLEL_DO:
11013 case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
11014 case EXEC_OMP_TARGET_TEAMS:
11015 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
11016 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
11017 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
11018 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
11019 case EXEC_OMP_TASK:
11020 case EXEC_OMP_TASKLOOP:
11021 case EXEC_OMP_TASKLOOP_SIMD:
11022 case EXEC_OMP_TEAMS:
11023 case EXEC_OMP_TEAMS_DISTRIBUTE:
11024 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
11025 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
11026 case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
11027 omp_workshare_save = omp_workshare_flag;
11028 omp_workshare_flag = 0;
11029 gfc_resolve_omp_parallel_blocks (code, ns);
11030 break;
11031 case EXEC_OMP_DISTRIBUTE:
11032 case EXEC_OMP_DISTRIBUTE_SIMD:
11033 case EXEC_OMP_DO:
11034 case EXEC_OMP_DO_SIMD:
11035 case EXEC_OMP_SIMD:
11036 case EXEC_OMP_TARGET_SIMD:
11037 gfc_resolve_omp_do_blocks (code, ns);
11038 break;
11039 case EXEC_SELECT_TYPE:
11040 /* Blocks are handled in resolve_select_type because we have
11041 to transform the SELECT TYPE into ASSOCIATE first. */
11042 break;
11043 case EXEC_DO_CONCURRENT:
11044 gfc_do_concurrent_flag = 1;
11045 gfc_resolve_blocks (code->block, ns);
11046 gfc_do_concurrent_flag = 2;
11047 break;
11048 case EXEC_OMP_WORKSHARE:
11049 omp_workshare_save = omp_workshare_flag;
11050 omp_workshare_flag = 1;
11051 /* FALL THROUGH */
11052 default:
11053 gfc_resolve_blocks (code->block, ns);
11054 break;
11055 }
11056
11057 if (omp_workshare_save != -1)
11058 omp_workshare_flag = omp_workshare_save;
11059 }
11060 start:
11061 t = true;
11062 if (code->op != EXEC_COMPCALL && code->op != EXEC_CALL_PPC)
11063 t = gfc_resolve_expr (code->expr1);
11064 forall_flag = forall_save;
11065 gfc_do_concurrent_flag = do_concurrent_save;
11066
11067 if (!gfc_resolve_expr (code->expr2))
11068 t = false;
11069
11070 if (code->op == EXEC_ALLOCATE
11071 && !gfc_resolve_expr (code->expr3))
11072 t = false;
11073
11074 switch (code->op)
11075 {
11076 case EXEC_NOP:
11077 case EXEC_END_BLOCK:
11078 case EXEC_END_NESTED_BLOCK:
11079 case EXEC_CYCLE:
11080 case EXEC_PAUSE:
11081 case EXEC_STOP:
11082 case EXEC_ERROR_STOP:
11083 case EXEC_EXIT:
11084 case EXEC_CONTINUE:
11085 case EXEC_DT_END:
11086 case EXEC_ASSIGN_CALL:
11087 break;
11088
11089 case EXEC_CRITICAL:
11090 resolve_critical (code);
11091 break;
11092
11093 case EXEC_SYNC_ALL:
11094 case EXEC_SYNC_IMAGES:
11095 case EXEC_SYNC_MEMORY:
11096 resolve_sync (code);
11097 break;
11098
11099 case EXEC_LOCK:
11100 case EXEC_UNLOCK:
11101 case EXEC_EVENT_POST:
11102 case EXEC_EVENT_WAIT:
11103 resolve_lock_unlock_event (code);
11104 break;
11105
11106 case EXEC_FAIL_IMAGE:
11107 break;
11108
11109 case EXEC_ENTRY:
11110 /* Keep track of which entry we are up to. */
11111 current_entry_id = code->ext.entry->id;
11112 break;
11113
11114 case EXEC_WHERE:
11115 resolve_where (code, NULL);
11116 break;
11117
11118 case EXEC_GOTO:
11119 if (code->expr1 != NULL)
11120 {
11121 if (code->expr1->ts.type != BT_INTEGER)
11122 gfc_error ("ASSIGNED GOTO statement at %L requires an "
11123 "INTEGER variable", &code->expr1->where);
11124 else if (code->expr1->symtree->n.sym->attr.assign != 1)
11125 gfc_error ("Variable %qs has not been assigned a target "
11126 "label at %L", code->expr1->symtree->n.sym->name,
11127 &code->expr1->where);
11128 }
11129 else
11130 resolve_branch (code->label1, code);
11131 break;
11132
11133 case EXEC_RETURN:
11134 if (code->expr1 != NULL
11135 && (code->expr1->ts.type != BT_INTEGER || code->expr1->rank))
11136 gfc_error ("Alternate RETURN statement at %L requires a SCALAR-"
11137 "INTEGER return specifier", &code->expr1->where);
11138 break;
11139
11140 case EXEC_INIT_ASSIGN:
11141 case EXEC_END_PROCEDURE:
11142 break;
11143
11144 case EXEC_ASSIGN:
11145 if (!t)
11146 break;
11147
11148 /* Remove a GFC_ISYM_CAF_GET inserted for a coindexed variable on
11149 the LHS. */
11150 if (code->expr1->expr_type == EXPR_FUNCTION
11151 && code->expr1->value.function.isym
11152 && code->expr1->value.function.isym->id == GFC_ISYM_CAF_GET)
11153 remove_caf_get_intrinsic (code->expr1);
11154
11155 /* If this is a pointer function in an lvalue variable context,
11156 the new code will have to be resolved afresh. This is also the
11157 case with an error, where the code is transformed into NOP to
11158 prevent ICEs downstream. */
11159 if (resolve_ptr_fcn_assign (&code, ns)
11160 || code->op == EXEC_NOP)
11161 goto start;
11162
11163 if (!gfc_check_vardef_context (code->expr1, false, false, false,
11164 _("assignment")))
11165 break;
11166
11167 if (resolve_ordinary_assign (code, ns))
11168 {
11169 if (code->op == EXEC_COMPCALL)
11170 goto compcall;
11171 else
11172 goto call;
11173 }
11174
11175 /* Check for dependencies in deferred character length array
11176 assignments and generate a temporary, if necessary. */
11177 if (code->op == EXEC_ASSIGN && deferred_op_assign (&code, ns))
11178 break;
11179
11180 /* F03 7.4.1.3 for non-allocatable, non-pointer components. */
11181 if (code->op != EXEC_CALL && code->expr1->ts.type == BT_DERIVED
11182 && code->expr1->ts.u.derived
11183 && code->expr1->ts.u.derived->attr.defined_assign_comp)
11184 generate_component_assignments (&code, ns);
11185
11186 break;
11187
11188 case EXEC_LABEL_ASSIGN:
11189 if (code->label1->defined == ST_LABEL_UNKNOWN)
11190 gfc_error ("Label %d referenced at %L is never defined",
11191 code->label1->value, &code->label1->where);
11192 if (t
11193 && (code->expr1->expr_type != EXPR_VARIABLE
11194 || code->expr1->symtree->n.sym->ts.type != BT_INTEGER
11195 || code->expr1->symtree->n.sym->ts.kind
11196 != gfc_default_integer_kind
11197 || code->expr1->symtree->n.sym->as != NULL))
11198 gfc_error ("ASSIGN statement at %L requires a scalar "
11199 "default INTEGER variable", &code->expr1->where);
11200 break;
11201
11202 case EXEC_POINTER_ASSIGN:
11203 {
11204 gfc_expr* e;
11205
11206 if (!t)
11207 break;
11208
11209 /* This is both a variable definition and pointer assignment
11210 context, so check both of them. For rank remapping, a final
11211 array ref may be present on the LHS and fool gfc_expr_attr
11212 used in gfc_check_vardef_context. Remove it. */
11213 e = remove_last_array_ref (code->expr1);
11214 t = gfc_check_vardef_context (e, true, false, false,
11215 _("pointer assignment"));
11216 if (t)
11217 t = gfc_check_vardef_context (e, false, false, false,
11218 _("pointer assignment"));
11219 gfc_free_expr (e);
11220 if (!t)
11221 break;
11222
11223 gfc_check_pointer_assign (code->expr1, code->expr2);
11224
11225 /* Assigning a class object always is a regular assign. */
11226 if (code->expr2->ts.type == BT_CLASS
11227 && code->expr1->ts.type == BT_CLASS
11228 && !CLASS_DATA (code->expr2)->attr.dimension
11229 && !(gfc_expr_attr (code->expr1).proc_pointer
11230 && code->expr2->expr_type == EXPR_VARIABLE
11231 && code->expr2->symtree->n.sym->attr.flavor
11232 == FL_PROCEDURE))
11233 code->op = EXEC_ASSIGN;
11234 break;
11235 }
11236
11237 case EXEC_ARITHMETIC_IF:
11238 {
11239 gfc_expr *e = code->expr1;
11240
11241 gfc_resolve_expr (e);
11242 if (e->expr_type == EXPR_NULL)
11243 gfc_error ("Invalid NULL at %L", &e->where);
11244
11245 if (t && (e->rank > 0
11246 || !(e->ts.type == BT_REAL || e->ts.type == BT_INTEGER)))
11247 gfc_error ("Arithmetic IF statement at %L requires a scalar "
11248 "REAL or INTEGER expression", &e->where);
11249
11250 resolve_branch (code->label1, code);
11251 resolve_branch (code->label2, code);
11252 resolve_branch (code->label3, code);
11253 }
11254 break;
11255
11256 case EXEC_IF:
11257 if (t && code->expr1 != NULL
11258 && (code->expr1->ts.type != BT_LOGICAL
11259 || code->expr1->rank != 0))
11260 gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
11261 &code->expr1->where);
11262 break;
11263
11264 case EXEC_CALL:
11265 call:
11266 resolve_call (code);
11267 break;
11268
11269 case EXEC_COMPCALL:
11270 compcall:
11271 resolve_typebound_subroutine (code);
11272 break;
11273
11274 case EXEC_CALL_PPC:
11275 resolve_ppc_call (code);
11276 break;
11277
11278 case EXEC_SELECT:
11279 /* Select is complicated. Also, a SELECT construct could be
11280 a transformed computed GOTO. */
11281 resolve_select (code, false);
11282 break;
11283
11284 case EXEC_SELECT_TYPE:
11285 resolve_select_type (code, ns);
11286 break;
11287
11288 case EXEC_BLOCK:
11289 resolve_block_construct (code);
11290 break;
11291
11292 case EXEC_DO:
11293 if (code->ext.iterator != NULL)
11294 {
11295 gfc_iterator *iter = code->ext.iterator;
11296 if (gfc_resolve_iterator (iter, true, false))
11297 gfc_resolve_do_iterator (code, iter->var->symtree->n.sym,
11298 true);
11299 }
11300 break;
11301
11302 case EXEC_DO_WHILE:
11303 if (code->expr1 == NULL)
11304 gfc_internal_error ("gfc_resolve_code(): No expression on "
11305 "DO WHILE");
11306 if (t
11307 && (code->expr1->rank != 0
11308 || code->expr1->ts.type != BT_LOGICAL))
11309 gfc_error ("Exit condition of DO WHILE loop at %L must be "
11310 "a scalar LOGICAL expression", &code->expr1->where);
11311 break;
11312
11313 case EXEC_ALLOCATE:
11314 if (t)
11315 resolve_allocate_deallocate (code, "ALLOCATE");
11316
11317 break;
11318
11319 case EXEC_DEALLOCATE:
11320 if (t)
11321 resolve_allocate_deallocate (code, "DEALLOCATE");
11322
11323 break;
11324
11325 case EXEC_OPEN:
11326 if (!gfc_resolve_open (code->ext.open))
11327 break;
11328
11329 resolve_branch (code->ext.open->err, code);
11330 break;
11331
11332 case EXEC_CLOSE:
11333 if (!gfc_resolve_close (code->ext.close))
11334 break;
11335
11336 resolve_branch (code->ext.close->err, code);
11337 break;
11338
11339 case EXEC_BACKSPACE:
11340 case EXEC_ENDFILE:
11341 case EXEC_REWIND:
11342 case EXEC_FLUSH:
11343 if (!gfc_resolve_filepos (code->ext.filepos))
11344 break;
11345
11346 resolve_branch (code->ext.filepos->err, code);
11347 break;
11348
11349 case EXEC_INQUIRE:
11350 if (!gfc_resolve_inquire (code->ext.inquire))
11351 break;
11352
11353 resolve_branch (code->ext.inquire->err, code);
11354 break;
11355
11356 case EXEC_IOLENGTH:
11357 gcc_assert (code->ext.inquire != NULL);
11358 if (!gfc_resolve_inquire (code->ext.inquire))
11359 break;
11360
11361 resolve_branch (code->ext.inquire->err, code);
11362 break;
11363
11364 case EXEC_WAIT:
11365 if (!gfc_resolve_wait (code->ext.wait))
11366 break;
11367
11368 resolve_branch (code->ext.wait->err, code);
11369 resolve_branch (code->ext.wait->end, code);
11370 resolve_branch (code->ext.wait->eor, code);
11371 break;
11372
11373 case EXEC_READ:
11374 case EXEC_WRITE:
11375 if (!gfc_resolve_dt (code->ext.dt, &code->loc))
11376 break;
11377
11378 resolve_branch (code->ext.dt->err, code);
11379 resolve_branch (code->ext.dt->end, code);
11380 resolve_branch (code->ext.dt->eor, code);
11381 break;
11382
11383 case EXEC_TRANSFER:
11384 resolve_transfer (code);
11385 break;
11386
11387 case EXEC_DO_CONCURRENT:
11388 case EXEC_FORALL:
11389 resolve_forall_iterators (code->ext.forall_iterator);
11390
11391 if (code->expr1 != NULL
11392 && (code->expr1->ts.type != BT_LOGICAL || code->expr1->rank))
11393 gfc_error ("FORALL mask clause at %L requires a scalar LOGICAL "
11394 "expression", &code->expr1->where);
11395 break;
11396
11397 case EXEC_OACC_PARALLEL_LOOP:
11398 case EXEC_OACC_PARALLEL:
11399 case EXEC_OACC_KERNELS_LOOP:
11400 case EXEC_OACC_KERNELS:
11401 case EXEC_OACC_DATA:
11402 case EXEC_OACC_HOST_DATA:
11403 case EXEC_OACC_LOOP:
11404 case EXEC_OACC_UPDATE:
11405 case EXEC_OACC_WAIT:
11406 case EXEC_OACC_CACHE:
11407 case EXEC_OACC_ENTER_DATA:
11408 case EXEC_OACC_EXIT_DATA:
11409 case EXEC_OACC_ATOMIC:
11410 case EXEC_OACC_DECLARE:
11411 gfc_resolve_oacc_directive (code, ns);
11412 break;
11413
11414 case EXEC_OMP_ATOMIC:
11415 case EXEC_OMP_BARRIER:
11416 case EXEC_OMP_CANCEL:
11417 case EXEC_OMP_CANCELLATION_POINT:
11418 case EXEC_OMP_CRITICAL:
11419 case EXEC_OMP_FLUSH:
11420 case EXEC_OMP_DISTRIBUTE:
11421 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
11422 case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
11423 case EXEC_OMP_DISTRIBUTE_SIMD:
11424 case EXEC_OMP_DO:
11425 case EXEC_OMP_DO_SIMD:
11426 case EXEC_OMP_MASTER:
11427 case EXEC_OMP_ORDERED:
11428 case EXEC_OMP_SECTIONS:
11429 case EXEC_OMP_SIMD:
11430 case EXEC_OMP_SINGLE:
11431 case EXEC_OMP_TARGET:
11432 case EXEC_OMP_TARGET_DATA:
11433 case EXEC_OMP_TARGET_ENTER_DATA:
11434 case EXEC_OMP_TARGET_EXIT_DATA:
11435 case EXEC_OMP_TARGET_PARALLEL:
11436 case EXEC_OMP_TARGET_PARALLEL_DO:
11437 case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
11438 case EXEC_OMP_TARGET_SIMD:
11439 case EXEC_OMP_TARGET_TEAMS:
11440 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
11441 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
11442 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
11443 case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
11444 case EXEC_OMP_TARGET_UPDATE:
11445 case EXEC_OMP_TASK:
11446 case EXEC_OMP_TASKGROUP:
11447 case EXEC_OMP_TASKLOOP:
11448 case EXEC_OMP_TASKLOOP_SIMD:
11449 case EXEC_OMP_TASKWAIT:
11450 case EXEC_OMP_TASKYIELD:
11451 case EXEC_OMP_TEAMS:
11452 case EXEC_OMP_TEAMS_DISTRIBUTE:
11453 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
11454 case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
11455 case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
11456 case EXEC_OMP_WORKSHARE:
11457 gfc_resolve_omp_directive (code, ns);
11458 break;
11459
11460 case EXEC_OMP_PARALLEL:
11461 case EXEC_OMP_PARALLEL_DO:
11462 case EXEC_OMP_PARALLEL_DO_SIMD:
11463 case EXEC_OMP_PARALLEL_SECTIONS:
11464 case EXEC_OMP_PARALLEL_WORKSHARE:
11465 omp_workshare_save = omp_workshare_flag;
11466 omp_workshare_flag = 0;
11467 gfc_resolve_omp_directive (code, ns);
11468 omp_workshare_flag = omp_workshare_save;
11469 break;
11470
11471 default:
11472 gfc_internal_error ("gfc_resolve_code(): Bad statement code");
11473 }
11474 }
11475
11476 cs_base = frame.prev;
11477 }
11478
11479
11480 /* Resolve initial values and make sure they are compatible with
11481 the variable. */
11482
11483 static void
11484 resolve_values (gfc_symbol *sym)
11485 {
11486 bool t;
11487
11488 if (sym->value == NULL)
11489 return;
11490
11491 if (sym->value->expr_type == EXPR_STRUCTURE)
11492 t= resolve_structure_cons (sym->value, 1);
11493 else
11494 t = gfc_resolve_expr (sym->value);
11495
11496 if (!t)
11497 return;
11498
11499 gfc_check_assign_symbol (sym, NULL, sym->value);
11500 }
11501
11502
11503 /* Verify any BIND(C) derived types in the namespace so we can report errors
11504 for them once, rather than for each variable declared of that type. */
11505
11506 static void
11507 resolve_bind_c_derived_types (gfc_symbol *derived_sym)
11508 {
11509 if (derived_sym != NULL && derived_sym->attr.flavor == FL_DERIVED
11510 && derived_sym->attr.is_bind_c == 1)
11511 verify_bind_c_derived_type (derived_sym);
11512
11513 return;
11514 }
11515
11516
11517 /* Check the interfaces of DTIO procedures associated with derived
11518 type 'sym'. These procedures can either have typebound bindings or
11519 can appear in DTIO generic interfaces. */
11520
11521 static void
11522 gfc_verify_DTIO_procedures (gfc_symbol *sym)
11523 {
11524 if (!sym || sym->attr.flavor != FL_DERIVED)
11525 return;
11526
11527 gfc_check_dtio_interfaces (sym);
11528
11529 return;
11530 }
11531
11532 /* Verify that any binding labels used in a given namespace do not collide
11533 with the names or binding labels of any global symbols. Multiple INTERFACE
11534 for the same procedure are permitted. */
11535
11536 static void
11537 gfc_verify_binding_labels (gfc_symbol *sym)
11538 {
11539 gfc_gsymbol *gsym;
11540 const char *module;
11541
11542 if (!sym || !sym->attr.is_bind_c || sym->attr.is_iso_c
11543 || sym->attr.flavor == FL_DERIVED || !sym->binding_label)
11544 return;
11545
11546 gsym = gfc_find_case_gsymbol (gfc_gsym_root, sym->binding_label);
11547
11548 if (sym->module)
11549 module = sym->module;
11550 else if (sym->ns && sym->ns->proc_name
11551 && sym->ns->proc_name->attr.flavor == FL_MODULE)
11552 module = sym->ns->proc_name->name;
11553 else if (sym->ns && sym->ns->parent
11554 && sym->ns && sym->ns->parent->proc_name
11555 && sym->ns->parent->proc_name->attr.flavor == FL_MODULE)
11556 module = sym->ns->parent->proc_name->name;
11557 else
11558 module = NULL;
11559
11560 if (!gsym
11561 || (!gsym->defined
11562 && (gsym->type == GSYM_FUNCTION || gsym->type == GSYM_SUBROUTINE)))
11563 {
11564 if (!gsym)
11565 gsym = gfc_get_gsymbol (sym->binding_label);
11566 gsym->where = sym->declared_at;
11567 gsym->sym_name = sym->name;
11568 gsym->binding_label = sym->binding_label;
11569 gsym->ns = sym->ns;
11570 gsym->mod_name = module;
11571 if (sym->attr.function)
11572 gsym->type = GSYM_FUNCTION;
11573 else if (sym->attr.subroutine)
11574 gsym->type = GSYM_SUBROUTINE;
11575 /* Mark as variable/procedure as defined, unless its an INTERFACE. */
11576 gsym->defined = sym->attr.if_source != IFSRC_IFBODY;
11577 return;
11578 }
11579
11580 if (sym->attr.flavor == FL_VARIABLE && gsym->type != GSYM_UNKNOWN)
11581 {
11582 gfc_error ("Variable %qs with binding label %qs at %L uses the same global "
11583 "identifier as entity at %L", sym->name,
11584 sym->binding_label, &sym->declared_at, &gsym->where);
11585 /* Clear the binding label to prevent checking multiple times. */
11586 sym->binding_label = NULL;
11587
11588 }
11589 else if (sym->attr.flavor == FL_VARIABLE && module
11590 && (strcmp (module, gsym->mod_name) != 0
11591 || strcmp (sym->name, gsym->sym_name) != 0))
11592 {
11593 /* This can only happen if the variable is defined in a module - if it
11594 isn't the same module, reject it. */
11595 gfc_error ("Variable %qs from module %qs with binding label %qs at %L "
11596 "uses the same global identifier as entity at %L from module %qs",
11597 sym->name, module, sym->binding_label,
11598 &sym->declared_at, &gsym->where, gsym->mod_name);
11599 sym->binding_label = NULL;
11600 }
11601 else if ((sym->attr.function || sym->attr.subroutine)
11602 && ((gsym->type != GSYM_SUBROUTINE && gsym->type != GSYM_FUNCTION)
11603 || (gsym->defined && sym->attr.if_source != IFSRC_IFBODY))
11604 && sym != gsym->ns->proc_name
11605 && (module != gsym->mod_name
11606 || strcmp (gsym->sym_name, sym->name) != 0
11607 || (module && strcmp (module, gsym->mod_name) != 0)))
11608 {
11609 /* Print an error if the procedure is defined multiple times; we have to
11610 exclude references to the same procedure via module association or
11611 multiple checks for the same procedure. */
11612 gfc_error ("Procedure %qs with binding label %qs at %L uses the same "
11613 "global identifier as entity at %L", sym->name,
11614 sym->binding_label, &sym->declared_at, &gsym->where);
11615 sym->binding_label = NULL;
11616 }
11617 }
11618
11619
11620 /* Resolve an index expression. */
11621
11622 static bool
11623 resolve_index_expr (gfc_expr *e)
11624 {
11625 if (!gfc_resolve_expr (e))
11626 return false;
11627
11628 if (!gfc_simplify_expr (e, 0))
11629 return false;
11630
11631 if (!gfc_specification_expr (e))
11632 return false;
11633
11634 return true;
11635 }
11636
11637
11638 /* Resolve a charlen structure. */
11639
11640 static bool
11641 resolve_charlen (gfc_charlen *cl)
11642 {
11643 int i, k;
11644 bool saved_specification_expr;
11645
11646 if (cl->resolved)
11647 return true;
11648
11649 cl->resolved = 1;
11650 saved_specification_expr = specification_expr;
11651 specification_expr = true;
11652
11653 if (cl->length_from_typespec)
11654 {
11655 if (!gfc_resolve_expr (cl->length))
11656 {
11657 specification_expr = saved_specification_expr;
11658 return false;
11659 }
11660
11661 if (!gfc_simplify_expr (cl->length, 0))
11662 {
11663 specification_expr = saved_specification_expr;
11664 return false;
11665 }
11666 }
11667 else
11668 {
11669
11670 if (!resolve_index_expr (cl->length))
11671 {
11672 specification_expr = saved_specification_expr;
11673 return false;
11674 }
11675 }
11676
11677 /* F2008, 4.4.3.2: If the character length parameter value evaluates to
11678 a negative value, the length of character entities declared is zero. */
11679 if (cl->length && !gfc_extract_int (cl->length, &i) && i < 0)
11680 gfc_replace_expr (cl->length,
11681 gfc_get_int_expr (gfc_default_integer_kind, NULL, 0));
11682
11683 /* Check that the character length is not too large. */
11684 k = gfc_validate_kind (BT_INTEGER, gfc_charlen_int_kind, false);
11685 if (cl->length && cl->length->expr_type == EXPR_CONSTANT
11686 && cl->length->ts.type == BT_INTEGER
11687 && mpz_cmp (cl->length->value.integer, gfc_integer_kinds[k].huge) > 0)
11688 {
11689 gfc_error ("String length at %L is too large", &cl->length->where);
11690 specification_expr = saved_specification_expr;
11691 return false;
11692 }
11693
11694 specification_expr = saved_specification_expr;
11695 return true;
11696 }
11697
11698
11699 /* Test for non-constant shape arrays. */
11700
11701 static bool
11702 is_non_constant_shape_array (gfc_symbol *sym)
11703 {
11704 gfc_expr *e;
11705 int i;
11706 bool not_constant;
11707
11708 not_constant = false;
11709 if (sym->as != NULL)
11710 {
11711 /* Unfortunately, !gfc_is_compile_time_shape hits a legal case that
11712 has not been simplified; parameter array references. Do the
11713 simplification now. */
11714 for (i = 0; i < sym->as->rank + sym->as->corank; i++)
11715 {
11716 e = sym->as->lower[i];
11717 if (e && (!resolve_index_expr(e)
11718 || !gfc_is_constant_expr (e)))
11719 not_constant = true;
11720 e = sym->as->upper[i];
11721 if (e && (!resolve_index_expr(e)
11722 || !gfc_is_constant_expr (e)))
11723 not_constant = true;
11724 }
11725 }
11726 return not_constant;
11727 }
11728
11729 /* Given a symbol and an initialization expression, add code to initialize
11730 the symbol to the function entry. */
11731 static void
11732 build_init_assign (gfc_symbol *sym, gfc_expr *init)
11733 {
11734 gfc_expr *lval;
11735 gfc_code *init_st;
11736 gfc_namespace *ns = sym->ns;
11737
11738 /* Search for the function namespace if this is a contained
11739 function without an explicit result. */
11740 if (sym->attr.function && sym == sym->result
11741 && sym->name != sym->ns->proc_name->name)
11742 {
11743 ns = ns->contained;
11744 for (;ns; ns = ns->sibling)
11745 if (strcmp (ns->proc_name->name, sym->name) == 0)
11746 break;
11747 }
11748
11749 if (ns == NULL)
11750 {
11751 gfc_free_expr (init);
11752 return;
11753 }
11754
11755 /* Build an l-value expression for the result. */
11756 lval = gfc_lval_expr_from_sym (sym);
11757
11758 /* Add the code at scope entry. */
11759 init_st = gfc_get_code (EXEC_INIT_ASSIGN);
11760 init_st->next = ns->code;
11761 ns->code = init_st;
11762
11763 /* Assign the default initializer to the l-value. */
11764 init_st->loc = sym->declared_at;
11765 init_st->expr1 = lval;
11766 init_st->expr2 = init;
11767 }
11768
11769
11770 /* Whether or not we can generate a default initializer for a symbol. */
11771
11772 static bool
11773 can_generate_init (gfc_symbol *sym)
11774 {
11775 symbol_attribute *a;
11776 if (!sym)
11777 return false;
11778 a = &sym->attr;
11779
11780 /* These symbols should never have a default initialization. */
11781 return !(
11782 a->allocatable
11783 || a->external
11784 || a->pointer
11785 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
11786 && (CLASS_DATA (sym)->attr.class_pointer
11787 || CLASS_DATA (sym)->attr.proc_pointer))
11788 || a->in_equivalence
11789 || a->in_common
11790 || a->data
11791 || sym->module
11792 || a->cray_pointee
11793 || a->cray_pointer
11794 || sym->assoc
11795 || (!a->referenced && !a->result)
11796 || (a->dummy && a->intent != INTENT_OUT)
11797 || (a->function && sym != sym->result)
11798 );
11799 }
11800
11801
11802 /* Assign the default initializer to a derived type variable or result. */
11803
11804 static void
11805 apply_default_init (gfc_symbol *sym)
11806 {
11807 gfc_expr *init = NULL;
11808
11809 if (sym->attr.flavor != FL_VARIABLE && !sym->attr.function)
11810 return;
11811
11812 if (sym->ts.type == BT_DERIVED && sym->ts.u.derived)
11813 init = gfc_generate_initializer (&sym->ts, can_generate_init (sym));
11814
11815 if (init == NULL && sym->ts.type != BT_CLASS)
11816 return;
11817
11818 build_init_assign (sym, init);
11819 sym->attr.referenced = 1;
11820 }
11821
11822
11823 /* Build an initializer for a local. Returns null if the symbol should not have
11824 a default initialization. */
11825
11826 static gfc_expr *
11827 build_default_init_expr (gfc_symbol *sym)
11828 {
11829 /* These symbols should never have a default initialization. */
11830 if (sym->attr.allocatable
11831 || sym->attr.external
11832 || sym->attr.dummy
11833 || sym->attr.pointer
11834 || sym->attr.in_equivalence
11835 || sym->attr.in_common
11836 || sym->attr.data
11837 || sym->module
11838 || sym->attr.cray_pointee
11839 || sym->attr.cray_pointer
11840 || sym->assoc)
11841 return NULL;
11842
11843 /* Get the appropriate init expression. */
11844 return gfc_build_default_init_expr (&sym->ts, &sym->declared_at);
11845 }
11846
11847 /* Add an initialization expression to a local variable. */
11848 static void
11849 apply_default_init_local (gfc_symbol *sym)
11850 {
11851 gfc_expr *init = NULL;
11852
11853 /* The symbol should be a variable or a function return value. */
11854 if ((sym->attr.flavor != FL_VARIABLE && !sym->attr.function)
11855 || (sym->attr.function && sym->result != sym))
11856 return;
11857
11858 /* Try to build the initializer expression. If we can't initialize
11859 this symbol, then init will be NULL. */
11860 init = build_default_init_expr (sym);
11861 if (init == NULL)
11862 return;
11863
11864 /* For saved variables, we don't want to add an initializer at function
11865 entry, so we just add a static initializer. Note that automatic variables
11866 are stack allocated even with -fno-automatic; we have also to exclude
11867 result variable, which are also nonstatic. */
11868 if (!sym->attr.automatic
11869 && (sym->attr.save || sym->ns->save_all
11870 || (flag_max_stack_var_size == 0 && !sym->attr.result
11871 && (sym->ns->proc_name && !sym->ns->proc_name->attr.recursive)
11872 && (!sym->attr.dimension || !is_non_constant_shape_array (sym)))))
11873 {
11874 /* Don't clobber an existing initializer! */
11875 gcc_assert (sym->value == NULL);
11876 sym->value = init;
11877 return;
11878 }
11879
11880 build_init_assign (sym, init);
11881 }
11882
11883
11884 /* Resolution of common features of flavors variable and procedure. */
11885
11886 static bool
11887 resolve_fl_var_and_proc (gfc_symbol *sym, int mp_flag)
11888 {
11889 gfc_array_spec *as;
11890
11891 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
11892 as = CLASS_DATA (sym)->as;
11893 else
11894 as = sym->as;
11895
11896 /* Constraints on deferred shape variable. */
11897 if (as == NULL || as->type != AS_DEFERRED)
11898 {
11899 bool pointer, allocatable, dimension;
11900
11901 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
11902 {
11903 pointer = CLASS_DATA (sym)->attr.class_pointer;
11904 allocatable = CLASS_DATA (sym)->attr.allocatable;
11905 dimension = CLASS_DATA (sym)->attr.dimension;
11906 }
11907 else
11908 {
11909 pointer = sym->attr.pointer && !sym->attr.select_type_temporary;
11910 allocatable = sym->attr.allocatable;
11911 dimension = sym->attr.dimension;
11912 }
11913
11914 if (allocatable)
11915 {
11916 if (dimension && as->type != AS_ASSUMED_RANK)
11917 {
11918 gfc_error ("Allocatable array %qs at %L must have a deferred "
11919 "shape or assumed rank", sym->name, &sym->declared_at);
11920 return false;
11921 }
11922 else if (!gfc_notify_std (GFC_STD_F2003, "Scalar object "
11923 "%qs at %L may not be ALLOCATABLE",
11924 sym->name, &sym->declared_at))
11925 return false;
11926 }
11927
11928 if (pointer && dimension && as->type != AS_ASSUMED_RANK)
11929 {
11930 gfc_error ("Array pointer %qs at %L must have a deferred shape or "
11931 "assumed rank", sym->name, &sym->declared_at);
11932 return false;
11933 }
11934 }
11935 else
11936 {
11937 if (!mp_flag && !sym->attr.allocatable && !sym->attr.pointer
11938 && sym->ts.type != BT_CLASS && !sym->assoc)
11939 {
11940 gfc_error ("Array %qs at %L cannot have a deferred shape",
11941 sym->name, &sym->declared_at);
11942 return false;
11943 }
11944 }
11945
11946 /* Constraints on polymorphic variables. */
11947 if (sym->ts.type == BT_CLASS && !(sym->result && sym->result != sym))
11948 {
11949 /* F03:C502. */
11950 if (sym->attr.class_ok
11951 && !sym->attr.select_type_temporary
11952 && !UNLIMITED_POLY (sym)
11953 && !gfc_type_is_extensible (CLASS_DATA (sym)->ts.u.derived))
11954 {
11955 gfc_error ("Type %qs of CLASS variable %qs at %L is not extensible",
11956 CLASS_DATA (sym)->ts.u.derived->name, sym->name,
11957 &sym->declared_at);
11958 return false;
11959 }
11960
11961 /* F03:C509. */
11962 /* Assume that use associated symbols were checked in the module ns.
11963 Class-variables that are associate-names are also something special
11964 and excepted from the test. */
11965 if (!sym->attr.class_ok && !sym->attr.use_assoc && !sym->assoc)
11966 {
11967 gfc_error ("CLASS variable %qs at %L must be dummy, allocatable "
11968 "or pointer", sym->name, &sym->declared_at);
11969 return false;
11970 }
11971 }
11972
11973 return true;
11974 }
11975
11976
11977 /* Additional checks for symbols with flavor variable and derived
11978 type. To be called from resolve_fl_variable. */
11979
11980 static bool
11981 resolve_fl_variable_derived (gfc_symbol *sym, int no_init_flag)
11982 {
11983 gcc_assert (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS);
11984
11985 /* Check to see if a derived type is blocked from being host
11986 associated by the presence of another class I symbol in the same
11987 namespace. 14.6.1.3 of the standard and the discussion on
11988 comp.lang.fortran. */
11989 if (sym->ns != sym->ts.u.derived->ns
11990 && sym->ns->proc_name->attr.if_source != IFSRC_IFBODY)
11991 {
11992 gfc_symbol *s;
11993 gfc_find_symbol (sym->ts.u.derived->name, sym->ns, 0, &s);
11994 if (s && s->attr.generic)
11995 s = gfc_find_dt_in_generic (s);
11996 if (s && !gfc_fl_struct (s->attr.flavor))
11997 {
11998 gfc_error ("The type %qs cannot be host associated at %L "
11999 "because it is blocked by an incompatible object "
12000 "of the same name declared at %L",
12001 sym->ts.u.derived->name, &sym->declared_at,
12002 &s->declared_at);
12003 return false;
12004 }
12005 }
12006
12007 /* 4th constraint in section 11.3: "If an object of a type for which
12008 component-initialization is specified (R429) appears in the
12009 specification-part of a module and does not have the ALLOCATABLE
12010 or POINTER attribute, the object shall have the SAVE attribute."
12011
12012 The check for initializers is performed with
12013 gfc_has_default_initializer because gfc_default_initializer generates
12014 a hidden default for allocatable components. */
12015 if (!(sym->value || no_init_flag) && sym->ns->proc_name
12016 && sym->ns->proc_name->attr.flavor == FL_MODULE
12017 && !(sym->ns->save_all && !sym->attr.automatic) && !sym->attr.save
12018 && !sym->attr.pointer && !sym->attr.allocatable
12019 && gfc_has_default_initializer (sym->ts.u.derived)
12020 && !gfc_notify_std (GFC_STD_F2008, "Implied SAVE for module variable "
12021 "%qs at %L, needed due to the default "
12022 "initialization", sym->name, &sym->declared_at))
12023 return false;
12024
12025 /* Assign default initializer. */
12026 if (!(sym->value || sym->attr.pointer || sym->attr.allocatable)
12027 && (!no_init_flag || sym->attr.intent == INTENT_OUT))
12028 sym->value = gfc_generate_initializer (&sym->ts, can_generate_init (sym));
12029
12030 return true;
12031 }
12032
12033
12034 /* F2008, C402 (R401): A colon shall not be used as a type-param-value
12035 except in the declaration of an entity or component that has the POINTER
12036 or ALLOCATABLE attribute. */
12037
12038 static bool
12039 deferred_requirements (gfc_symbol *sym)
12040 {
12041 if (sym->ts.deferred
12042 && !(sym->attr.pointer
12043 || sym->attr.allocatable
12044 || sym->attr.associate_var
12045 || sym->attr.omp_udr_artificial_var))
12046 {
12047 gfc_error ("Entity %qs at %L has a deferred type parameter and "
12048 "requires either the POINTER or ALLOCATABLE attribute",
12049 sym->name, &sym->declared_at);
12050 return false;
12051 }
12052 return true;
12053 }
12054
12055
12056 /* Resolve symbols with flavor variable. */
12057
12058 static bool
12059 resolve_fl_variable (gfc_symbol *sym, int mp_flag)
12060 {
12061 int no_init_flag, automatic_flag;
12062 gfc_expr *e;
12063 const char *auto_save_msg;
12064 bool saved_specification_expr;
12065
12066 auto_save_msg = "Automatic object %qs at %L cannot have the "
12067 "SAVE attribute";
12068
12069 if (!resolve_fl_var_and_proc (sym, mp_flag))
12070 return false;
12071
12072 /* Set this flag to check that variables are parameters of all entries.
12073 This check is effected by the call to gfc_resolve_expr through
12074 is_non_constant_shape_array. */
12075 saved_specification_expr = specification_expr;
12076 specification_expr = true;
12077
12078 if (sym->ns->proc_name
12079 && (sym->ns->proc_name->attr.flavor == FL_MODULE
12080 || sym->ns->proc_name->attr.is_main_program)
12081 && !sym->attr.use_assoc
12082 && !sym->attr.allocatable
12083 && !sym->attr.pointer
12084 && is_non_constant_shape_array (sym))
12085 {
12086 /* F08:C541. The shape of an array defined in a main program or module
12087 * needs to be constant. */
12088 gfc_error ("The module or main program array %qs at %L must "
12089 "have constant shape", sym->name, &sym->declared_at);
12090 specification_expr = saved_specification_expr;
12091 return false;
12092 }
12093
12094 /* Constraints on deferred type parameter. */
12095 if (!deferred_requirements (sym))
12096 return false;
12097
12098 if (sym->ts.type == BT_CHARACTER && !sym->attr.associate_var)
12099 {
12100 /* Make sure that character string variables with assumed length are
12101 dummy arguments. */
12102 e = sym->ts.u.cl->length;
12103 if (e == NULL && !sym->attr.dummy && !sym->attr.result
12104 && !sym->ts.deferred && !sym->attr.select_type_temporary
12105 && !sym->attr.omp_udr_artificial_var)
12106 {
12107 gfc_error ("Entity with assumed character length at %L must be a "
12108 "dummy argument or a PARAMETER", &sym->declared_at);
12109 specification_expr = saved_specification_expr;
12110 return false;
12111 }
12112
12113 if (e && sym->attr.save == SAVE_EXPLICIT && !gfc_is_constant_expr (e))
12114 {
12115 gfc_error (auto_save_msg, sym->name, &sym->declared_at);
12116 specification_expr = saved_specification_expr;
12117 return false;
12118 }
12119
12120 if (!gfc_is_constant_expr (e)
12121 && !(e->expr_type == EXPR_VARIABLE
12122 && e->symtree->n.sym->attr.flavor == FL_PARAMETER))
12123 {
12124 if (!sym->attr.use_assoc && sym->ns->proc_name
12125 && (sym->ns->proc_name->attr.flavor == FL_MODULE
12126 || sym->ns->proc_name->attr.is_main_program))
12127 {
12128 gfc_error ("%qs at %L must have constant character length "
12129 "in this context", sym->name, &sym->declared_at);
12130 specification_expr = saved_specification_expr;
12131 return false;
12132 }
12133 if (sym->attr.in_common)
12134 {
12135 gfc_error ("COMMON variable %qs at %L must have constant "
12136 "character length", sym->name, &sym->declared_at);
12137 specification_expr = saved_specification_expr;
12138 return false;
12139 }
12140 }
12141 }
12142
12143 if (sym->value == NULL && sym->attr.referenced)
12144 apply_default_init_local (sym); /* Try to apply a default initialization. */
12145
12146 /* Determine if the symbol may not have an initializer. */
12147 no_init_flag = automatic_flag = 0;
12148 if (sym->attr.allocatable || sym->attr.external || sym->attr.dummy
12149 || sym->attr.intrinsic || sym->attr.result)
12150 no_init_flag = 1;
12151 else if ((sym->attr.dimension || sym->attr.codimension) && !sym->attr.pointer
12152 && is_non_constant_shape_array (sym))
12153 {
12154 no_init_flag = automatic_flag = 1;
12155
12156 /* Also, they must not have the SAVE attribute.
12157 SAVE_IMPLICIT is checked below. */
12158 if (sym->as && sym->attr.codimension)
12159 {
12160 int corank = sym->as->corank;
12161 sym->as->corank = 0;
12162 no_init_flag = automatic_flag = is_non_constant_shape_array (sym);
12163 sym->as->corank = corank;
12164 }
12165 if (automatic_flag && sym->attr.save == SAVE_EXPLICIT)
12166 {
12167 gfc_error (auto_save_msg, sym->name, &sym->declared_at);
12168 specification_expr = saved_specification_expr;
12169 return false;
12170 }
12171 }
12172
12173 /* Ensure that any initializer is simplified. */
12174 if (sym->value)
12175 gfc_simplify_expr (sym->value, 1);
12176
12177 /* Reject illegal initializers. */
12178 if (!sym->mark && sym->value)
12179 {
12180 if (sym->attr.allocatable || (sym->ts.type == BT_CLASS
12181 && CLASS_DATA (sym)->attr.allocatable))
12182 gfc_error ("Allocatable %qs at %L cannot have an initializer",
12183 sym->name, &sym->declared_at);
12184 else if (sym->attr.external)
12185 gfc_error ("External %qs at %L cannot have an initializer",
12186 sym->name, &sym->declared_at);
12187 else if (sym->attr.dummy
12188 && !(sym->ts.type == BT_DERIVED && sym->attr.intent == INTENT_OUT))
12189 gfc_error ("Dummy %qs at %L cannot have an initializer",
12190 sym->name, &sym->declared_at);
12191 else if (sym->attr.intrinsic)
12192 gfc_error ("Intrinsic %qs at %L cannot have an initializer",
12193 sym->name, &sym->declared_at);
12194 else if (sym->attr.result)
12195 gfc_error ("Function result %qs at %L cannot have an initializer",
12196 sym->name, &sym->declared_at);
12197 else if (automatic_flag)
12198 gfc_error ("Automatic array %qs at %L cannot have an initializer",
12199 sym->name, &sym->declared_at);
12200 else
12201 goto no_init_error;
12202 specification_expr = saved_specification_expr;
12203 return false;
12204 }
12205
12206 no_init_error:
12207 if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS)
12208 {
12209 bool res = resolve_fl_variable_derived (sym, no_init_flag);
12210 specification_expr = saved_specification_expr;
12211 return res;
12212 }
12213
12214 specification_expr = saved_specification_expr;
12215 return true;
12216 }
12217
12218
12219 /* Compare the dummy characteristics of a module procedure interface
12220 declaration with the corresponding declaration in a submodule. */
12221 static gfc_formal_arglist *new_formal;
12222 static char errmsg[200];
12223
12224 static void
12225 compare_fsyms (gfc_symbol *sym)
12226 {
12227 gfc_symbol *fsym;
12228
12229 if (sym == NULL || new_formal == NULL)
12230 return;
12231
12232 fsym = new_formal->sym;
12233
12234 if (sym == fsym)
12235 return;
12236
12237 if (strcmp (sym->name, fsym->name) == 0)
12238 {
12239 if (!gfc_check_dummy_characteristics (fsym, sym, true, errmsg, 200))
12240 gfc_error ("%s at %L", errmsg, &fsym->declared_at);
12241 }
12242 }
12243
12244
12245 /* Resolve a procedure. */
12246
12247 static bool
12248 resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
12249 {
12250 gfc_formal_arglist *arg;
12251
12252 if (sym->attr.function
12253 && !resolve_fl_var_and_proc (sym, mp_flag))
12254 return false;
12255
12256 if (sym->ts.type == BT_CHARACTER)
12257 {
12258 gfc_charlen *cl = sym->ts.u.cl;
12259
12260 if (cl && cl->length && gfc_is_constant_expr (cl->length)
12261 && !resolve_charlen (cl))
12262 return false;
12263
12264 if ((!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
12265 && sym->attr.proc == PROC_ST_FUNCTION)
12266 {
12267 gfc_error ("Character-valued statement function %qs at %L must "
12268 "have constant length", sym->name, &sym->declared_at);
12269 return false;
12270 }
12271 }
12272
12273 /* Ensure that derived type for are not of a private type. Internal
12274 module procedures are excluded by 2.2.3.3 - i.e., they are not
12275 externally accessible and can access all the objects accessible in
12276 the host. */
12277 if (!(sym->ns->parent
12278 && sym->ns->parent->proc_name->attr.flavor == FL_MODULE)
12279 && gfc_check_symbol_access (sym))
12280 {
12281 gfc_interface *iface;
12282
12283 for (arg = gfc_sym_get_dummy_args (sym); arg; arg = arg->next)
12284 {
12285 if (arg->sym
12286 && arg->sym->ts.type == BT_DERIVED
12287 && !arg->sym->ts.u.derived->attr.use_assoc
12288 && !gfc_check_symbol_access (arg->sym->ts.u.derived)
12289 && !gfc_notify_std (GFC_STD_F2003, "%qs is of a PRIVATE type "
12290 "and cannot be a dummy argument"
12291 " of %qs, which is PUBLIC at %L",
12292 arg->sym->name, sym->name,
12293 &sym->declared_at))
12294 {
12295 /* Stop this message from recurring. */
12296 arg->sym->ts.u.derived->attr.access = ACCESS_PUBLIC;
12297 return false;
12298 }
12299 }
12300
12301 /* PUBLIC interfaces may expose PRIVATE procedures that take types
12302 PRIVATE to the containing module. */
12303 for (iface = sym->generic; iface; iface = iface->next)
12304 {
12305 for (arg = gfc_sym_get_dummy_args (iface->sym); arg; arg = arg->next)
12306 {
12307 if (arg->sym
12308 && arg->sym->ts.type == BT_DERIVED
12309 && !arg->sym->ts.u.derived->attr.use_assoc
12310 && !gfc_check_symbol_access (arg->sym->ts.u.derived)
12311 && !gfc_notify_std (GFC_STD_F2003, "Procedure %qs in "
12312 "PUBLIC interface %qs at %L "
12313 "takes dummy arguments of %qs which "
12314 "is PRIVATE", iface->sym->name,
12315 sym->name, &iface->sym->declared_at,
12316 gfc_typename(&arg->sym->ts)))
12317 {
12318 /* Stop this message from recurring. */
12319 arg->sym->ts.u.derived->attr.access = ACCESS_PUBLIC;
12320 return false;
12321 }
12322 }
12323 }
12324 }
12325
12326 if (sym->attr.function && sym->value && sym->attr.proc != PROC_ST_FUNCTION
12327 && !sym->attr.proc_pointer)
12328 {
12329 gfc_error ("Function %qs at %L cannot have an initializer",
12330 sym->name, &sym->declared_at);
12331 return false;
12332 }
12333
12334 /* An external symbol may not have an initializer because it is taken to be
12335 a procedure. Exception: Procedure Pointers. */
12336 if (sym->attr.external && sym->value && !sym->attr.proc_pointer)
12337 {
12338 gfc_error ("External object %qs at %L may not have an initializer",
12339 sym->name, &sym->declared_at);
12340 return false;
12341 }
12342
12343 /* An elemental function is required to return a scalar 12.7.1 */
12344 if (sym->attr.elemental && sym->attr.function && sym->as)
12345 {
12346 gfc_error ("ELEMENTAL function %qs at %L must have a scalar "
12347 "result", sym->name, &sym->declared_at);
12348 /* Reset so that the error only occurs once. */
12349 sym->attr.elemental = 0;
12350 return false;
12351 }
12352
12353 if (sym->attr.proc == PROC_ST_FUNCTION
12354 && (sym->attr.allocatable || sym->attr.pointer))
12355 {
12356 gfc_error ("Statement function %qs at %L may not have pointer or "
12357 "allocatable attribute", sym->name, &sym->declared_at);
12358 return false;
12359 }
12360
12361 /* 5.1.1.5 of the Standard: A function name declared with an asterisk
12362 char-len-param shall not be array-valued, pointer-valued, recursive
12363 or pure. ....snip... A character value of * may only be used in the
12364 following ways: (i) Dummy arg of procedure - dummy associates with
12365 actual length; (ii) To declare a named constant; or (iii) External
12366 function - but length must be declared in calling scoping unit. */
12367 if (sym->attr.function
12368 && sym->ts.type == BT_CHARACTER && !sym->ts.deferred
12369 && sym->ts.u.cl && sym->ts.u.cl->length == NULL)
12370 {
12371 if ((sym->as && sym->as->rank) || (sym->attr.pointer)
12372 || (sym->attr.recursive) || (sym->attr.pure))
12373 {
12374 if (sym->as && sym->as->rank)
12375 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
12376 "array-valued", sym->name, &sym->declared_at);
12377
12378 if (sym->attr.pointer)
12379 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
12380 "pointer-valued", sym->name, &sym->declared_at);
12381
12382 if (sym->attr.pure)
12383 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
12384 "pure", sym->name, &sym->declared_at);
12385
12386 if (sym->attr.recursive)
12387 gfc_error ("CHARACTER(*) function %qs at %L cannot be "
12388 "recursive", sym->name, &sym->declared_at);
12389
12390 return false;
12391 }
12392
12393 /* Appendix B.2 of the standard. Contained functions give an
12394 error anyway. Deferred character length is an F2003 feature.
12395 Don't warn on intrinsic conversion functions, which start
12396 with two underscores. */
12397 if (!sym->attr.contained && !sym->ts.deferred
12398 && (sym->name[0] != '_' || sym->name[1] != '_'))
12399 gfc_notify_std (GFC_STD_F95_OBS,
12400 "CHARACTER(*) function %qs at %L",
12401 sym->name, &sym->declared_at);
12402 }
12403
12404 /* F2008, C1218. */
12405 if (sym->attr.elemental)
12406 {
12407 if (sym->attr.proc_pointer)
12408 {
12409 gfc_error ("Procedure pointer %qs at %L shall not be elemental",
12410 sym->name, &sym->declared_at);
12411 return false;
12412 }
12413 if (sym->attr.dummy)
12414 {
12415 gfc_error ("Dummy procedure %qs at %L shall not be elemental",
12416 sym->name, &sym->declared_at);
12417 return false;
12418 }
12419 }
12420
12421 if (sym->attr.is_bind_c && sym->attr.is_c_interop != 1)
12422 {
12423 gfc_formal_arglist *curr_arg;
12424 int has_non_interop_arg = 0;
12425
12426 if (!verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common,
12427 sym->common_block))
12428 {
12429 /* Clear these to prevent looking at them again if there was an
12430 error. */
12431 sym->attr.is_bind_c = 0;
12432 sym->attr.is_c_interop = 0;
12433 sym->ts.is_c_interop = 0;
12434 }
12435 else
12436 {
12437 /* So far, no errors have been found. */
12438 sym->attr.is_c_interop = 1;
12439 sym->ts.is_c_interop = 1;
12440 }
12441
12442 curr_arg = gfc_sym_get_dummy_args (sym);
12443 while (curr_arg != NULL)
12444 {
12445 /* Skip implicitly typed dummy args here. */
12446 if (curr_arg->sym->attr.implicit_type == 0)
12447 if (!gfc_verify_c_interop_param (curr_arg->sym))
12448 /* If something is found to fail, record the fact so we
12449 can mark the symbol for the procedure as not being
12450 BIND(C) to try and prevent multiple errors being
12451 reported. */
12452 has_non_interop_arg = 1;
12453
12454 curr_arg = curr_arg->next;
12455 }
12456
12457 /* See if any of the arguments were not interoperable and if so, clear
12458 the procedure symbol to prevent duplicate error messages. */
12459 if (has_non_interop_arg != 0)
12460 {
12461 sym->attr.is_c_interop = 0;
12462 sym->ts.is_c_interop = 0;
12463 sym->attr.is_bind_c = 0;
12464 }
12465 }
12466
12467 if (!sym->attr.proc_pointer)
12468 {
12469 if (sym->attr.save == SAVE_EXPLICIT)
12470 {
12471 gfc_error ("PROCEDURE attribute conflicts with SAVE attribute "
12472 "in %qs at %L", sym->name, &sym->declared_at);
12473 return false;
12474 }
12475 if (sym->attr.intent)
12476 {
12477 gfc_error ("PROCEDURE attribute conflicts with INTENT attribute "
12478 "in %qs at %L", sym->name, &sym->declared_at);
12479 return false;
12480 }
12481 if (sym->attr.subroutine && sym->attr.result)
12482 {
12483 gfc_error ("PROCEDURE attribute conflicts with RESULT attribute "
12484 "in %qs at %L", sym->name, &sym->declared_at);
12485 return false;
12486 }
12487 if (sym->attr.external && sym->attr.function && !sym->attr.module_procedure
12488 && ((sym->attr.if_source == IFSRC_DECL && !sym->attr.procedure)
12489 || sym->attr.contained))
12490 {
12491 gfc_error ("EXTERNAL attribute conflicts with FUNCTION attribute "
12492 "in %qs at %L", sym->name, &sym->declared_at);
12493 return false;
12494 }
12495 if (strcmp ("ppr@", sym->name) == 0)
12496 {
12497 gfc_error ("Procedure pointer result %qs at %L "
12498 "is missing the pointer attribute",
12499 sym->ns->proc_name->name, &sym->declared_at);
12500 return false;
12501 }
12502 }
12503
12504 /* Assume that a procedure whose body is not known has references
12505 to external arrays. */
12506 if (sym->attr.if_source != IFSRC_DECL)
12507 sym->attr.array_outer_dependency = 1;
12508
12509 /* Compare the characteristics of a module procedure with the
12510 interface declaration. Ideally this would be done with
12511 gfc_compare_interfaces but, at present, the formal interface
12512 cannot be copied to the ts.interface. */
12513 if (sym->attr.module_procedure
12514 && sym->attr.if_source == IFSRC_DECL)
12515 {
12516 gfc_symbol *iface;
12517 char name[2*GFC_MAX_SYMBOL_LEN + 1];
12518 char *module_name;
12519 char *submodule_name;
12520 strcpy (name, sym->ns->proc_name->name);
12521 module_name = strtok (name, ".");
12522 submodule_name = strtok (NULL, ".");
12523
12524 iface = sym->tlink;
12525 sym->tlink = NULL;
12526
12527 /* Make sure that the result uses the correct charlen for deferred
12528 length results. */
12529 if (iface && sym->result
12530 && iface->ts.type == BT_CHARACTER
12531 && iface->ts.deferred)
12532 sym->result->ts.u.cl = iface->ts.u.cl;
12533
12534 if (iface == NULL)
12535 goto check_formal;
12536
12537 /* Check the procedure characteristics. */
12538 if (sym->attr.elemental != iface->attr.elemental)
12539 {
12540 gfc_error ("Mismatch in ELEMENTAL attribute between MODULE "
12541 "PROCEDURE at %L and its interface in %s",
12542 &sym->declared_at, module_name);
12543 return false;
12544 }
12545
12546 if (sym->attr.pure != iface->attr.pure)
12547 {
12548 gfc_error ("Mismatch in PURE attribute between MODULE "
12549 "PROCEDURE at %L and its interface in %s",
12550 &sym->declared_at, module_name);
12551 return false;
12552 }
12553
12554 if (sym->attr.recursive != iface->attr.recursive)
12555 {
12556 gfc_error ("Mismatch in RECURSIVE attribute between MODULE "
12557 "PROCEDURE at %L and its interface in %s",
12558 &sym->declared_at, module_name);
12559 return false;
12560 }
12561
12562 /* Check the result characteristics. */
12563 if (!gfc_check_result_characteristics (sym, iface, errmsg, 200))
12564 {
12565 gfc_error ("%s between the MODULE PROCEDURE declaration "
12566 "in MODULE %qs and the declaration at %L in "
12567 "(SUB)MODULE %qs",
12568 errmsg, module_name, &sym->declared_at,
12569 submodule_name ? submodule_name : module_name);
12570 return false;
12571 }
12572
12573 check_formal:
12574 /* Check the characteristics of the formal arguments. */
12575 if (sym->formal && sym->formal_ns)
12576 {
12577 for (arg = sym->formal; arg && arg->sym; arg = arg->next)
12578 {
12579 new_formal = arg;
12580 gfc_traverse_ns (sym->formal_ns, compare_fsyms);
12581 }
12582 }
12583 }
12584 return true;
12585 }
12586
12587
12588 /* Resolve a list of finalizer procedures. That is, after they have hopefully
12589 been defined and we now know their defined arguments, check that they fulfill
12590 the requirements of the standard for procedures used as finalizers. */
12591
12592 static bool
12593 gfc_resolve_finalizers (gfc_symbol* derived, bool *finalizable)
12594 {
12595 gfc_finalizer* list;
12596 gfc_finalizer** prev_link; /* For removing wrong entries from the list. */
12597 bool result = true;
12598 bool seen_scalar = false;
12599 gfc_symbol *vtab;
12600 gfc_component *c;
12601 gfc_symbol *parent = gfc_get_derived_super_type (derived);
12602
12603 if (parent)
12604 gfc_resolve_finalizers (parent, finalizable);
12605
12606 /* Ensure that derived-type components have a their finalizers resolved. */
12607 bool has_final = derived->f2k_derived && derived->f2k_derived->finalizers;
12608 for (c = derived->components; c; c = c->next)
12609 if (c->ts.type == BT_DERIVED
12610 && !c->attr.pointer && !c->attr.proc_pointer && !c->attr.allocatable)
12611 {
12612 bool has_final2 = false;
12613 if (!gfc_resolve_finalizers (c->ts.u.derived, &has_final2))
12614 return false; /* Error. */
12615 has_final = has_final || has_final2;
12616 }
12617 /* Return early if not finalizable. */
12618 if (!has_final)
12619 {
12620 if (finalizable)
12621 *finalizable = false;
12622 return true;
12623 }
12624
12625 /* Walk over the list of finalizer-procedures, check them, and if any one
12626 does not fit in with the standard's definition, print an error and remove
12627 it from the list. */
12628 prev_link = &derived->f2k_derived->finalizers;
12629 for (list = derived->f2k_derived->finalizers; list; list = *prev_link)
12630 {
12631 gfc_formal_arglist *dummy_args;
12632 gfc_symbol* arg;
12633 gfc_finalizer* i;
12634 int my_rank;
12635
12636 /* Skip this finalizer if we already resolved it. */
12637 if (list->proc_tree)
12638 {
12639 if (list->proc_tree->n.sym->formal->sym->as == NULL
12640 || list->proc_tree->n.sym->formal->sym->as->rank == 0)
12641 seen_scalar = true;
12642 prev_link = &(list->next);
12643 continue;
12644 }
12645
12646 /* Check this exists and is a SUBROUTINE. */
12647 if (!list->proc_sym->attr.subroutine)
12648 {
12649 gfc_error ("FINAL procedure %qs at %L is not a SUBROUTINE",
12650 list->proc_sym->name, &list->where);
12651 goto error;
12652 }
12653
12654 /* We should have exactly one argument. */
12655 dummy_args = gfc_sym_get_dummy_args (list->proc_sym);
12656 if (!dummy_args || dummy_args->next)
12657 {
12658 gfc_error ("FINAL procedure at %L must have exactly one argument",
12659 &list->where);
12660 goto error;
12661 }
12662 arg = dummy_args->sym;
12663
12664 /* This argument must be of our type. */
12665 if (arg->ts.type != BT_DERIVED || arg->ts.u.derived != derived)
12666 {
12667 gfc_error ("Argument of FINAL procedure at %L must be of type %qs",
12668 &arg->declared_at, derived->name);
12669 goto error;
12670 }
12671
12672 /* It must neither be a pointer nor allocatable nor optional. */
12673 if (arg->attr.pointer)
12674 {
12675 gfc_error ("Argument of FINAL procedure at %L must not be a POINTER",
12676 &arg->declared_at);
12677 goto error;
12678 }
12679 if (arg->attr.allocatable)
12680 {
12681 gfc_error ("Argument of FINAL procedure at %L must not be"
12682 " ALLOCATABLE", &arg->declared_at);
12683 goto error;
12684 }
12685 if (arg->attr.optional)
12686 {
12687 gfc_error ("Argument of FINAL procedure at %L must not be OPTIONAL",
12688 &arg->declared_at);
12689 goto error;
12690 }
12691
12692 /* It must not be INTENT(OUT). */
12693 if (arg->attr.intent == INTENT_OUT)
12694 {
12695 gfc_error ("Argument of FINAL procedure at %L must not be"
12696 " INTENT(OUT)", &arg->declared_at);
12697 goto error;
12698 }
12699
12700 /* Warn if the procedure is non-scalar and not assumed shape. */
12701 if (warn_surprising && arg->as && arg->as->rank != 0
12702 && arg->as->type != AS_ASSUMED_SHAPE)
12703 gfc_warning (OPT_Wsurprising,
12704 "Non-scalar FINAL procedure at %L should have assumed"
12705 " shape argument", &arg->declared_at);
12706
12707 /* Check that it does not match in kind and rank with a FINAL procedure
12708 defined earlier. To really loop over the *earlier* declarations,
12709 we need to walk the tail of the list as new ones were pushed at the
12710 front. */
12711 /* TODO: Handle kind parameters once they are implemented. */
12712 my_rank = (arg->as ? arg->as->rank : 0);
12713 for (i = list->next; i; i = i->next)
12714 {
12715 gfc_formal_arglist *dummy_args;
12716
12717 /* Argument list might be empty; that is an error signalled earlier,
12718 but we nevertheless continued resolving. */
12719 dummy_args = gfc_sym_get_dummy_args (i->proc_sym);
12720 if (dummy_args)
12721 {
12722 gfc_symbol* i_arg = dummy_args->sym;
12723 const int i_rank = (i_arg->as ? i_arg->as->rank : 0);
12724 if (i_rank == my_rank)
12725 {
12726 gfc_error ("FINAL procedure %qs declared at %L has the same"
12727 " rank (%d) as %qs",
12728 list->proc_sym->name, &list->where, my_rank,
12729 i->proc_sym->name);
12730 goto error;
12731 }
12732 }
12733 }
12734
12735 /* Is this the/a scalar finalizer procedure? */
12736 if (my_rank == 0)
12737 seen_scalar = true;
12738
12739 /* Find the symtree for this procedure. */
12740 gcc_assert (!list->proc_tree);
12741 list->proc_tree = gfc_find_sym_in_symtree (list->proc_sym);
12742
12743 prev_link = &list->next;
12744 continue;
12745
12746 /* Remove wrong nodes immediately from the list so we don't risk any
12747 troubles in the future when they might fail later expectations. */
12748 error:
12749 i = list;
12750 *prev_link = list->next;
12751 gfc_free_finalizer (i);
12752 result = false;
12753 }
12754
12755 if (result == false)
12756 return false;
12757
12758 /* Warn if we haven't seen a scalar finalizer procedure (but we know there
12759 were nodes in the list, must have been for arrays. It is surely a good
12760 idea to have a scalar version there if there's something to finalize. */
12761 if (warn_surprising && derived->f2k_derived->finalizers && !seen_scalar)
12762 gfc_warning (OPT_Wsurprising,
12763 "Only array FINAL procedures declared for derived type %qs"
12764 " defined at %L, suggest also scalar one",
12765 derived->name, &derived->declared_at);
12766
12767 vtab = gfc_find_derived_vtab (derived);
12768 c = vtab->ts.u.derived->components->next->next->next->next->next;
12769 gfc_set_sym_referenced (c->initializer->symtree->n.sym);
12770
12771 if (finalizable)
12772 *finalizable = true;
12773
12774 return true;
12775 }
12776
12777
12778 /* Check if two GENERIC targets are ambiguous and emit an error is they are. */
12779
12780 static bool
12781 check_generic_tbp_ambiguity (gfc_tbp_generic* t1, gfc_tbp_generic* t2,
12782 const char* generic_name, locus where)
12783 {
12784 gfc_symbol *sym1, *sym2;
12785 const char *pass1, *pass2;
12786 gfc_formal_arglist *dummy_args;
12787
12788 gcc_assert (t1->specific && t2->specific);
12789 gcc_assert (!t1->specific->is_generic);
12790 gcc_assert (!t2->specific->is_generic);
12791 gcc_assert (t1->is_operator == t2->is_operator);
12792
12793 sym1 = t1->specific->u.specific->n.sym;
12794 sym2 = t2->specific->u.specific->n.sym;
12795
12796 if (sym1 == sym2)
12797 return true;
12798
12799 /* Both must be SUBROUTINEs or both must be FUNCTIONs. */
12800 if (sym1->attr.subroutine != sym2->attr.subroutine
12801 || sym1->attr.function != sym2->attr.function)
12802 {
12803 gfc_error ("%qs and %qs can't be mixed FUNCTION/SUBROUTINE for"
12804 " GENERIC %qs at %L",
12805 sym1->name, sym2->name, generic_name, &where);
12806 return false;
12807 }
12808
12809 /* Determine PASS arguments. */
12810 if (t1->specific->nopass)
12811 pass1 = NULL;
12812 else if (t1->specific->pass_arg)
12813 pass1 = t1->specific->pass_arg;
12814 else
12815 {
12816 dummy_args = gfc_sym_get_dummy_args (t1->specific->u.specific->n.sym);
12817 if (dummy_args)
12818 pass1 = dummy_args->sym->name;
12819 else
12820 pass1 = NULL;
12821 }
12822 if (t2->specific->nopass)
12823 pass2 = NULL;
12824 else if (t2->specific->pass_arg)
12825 pass2 = t2->specific->pass_arg;
12826 else
12827 {
12828 dummy_args = gfc_sym_get_dummy_args (t2->specific->u.specific->n.sym);
12829 if (dummy_args)
12830 pass2 = dummy_args->sym->name;
12831 else
12832 pass2 = NULL;
12833 }
12834
12835 /* Compare the interfaces. */
12836 if (gfc_compare_interfaces (sym1, sym2, sym2->name, !t1->is_operator, 0,
12837 NULL, 0, pass1, pass2))
12838 {
12839 gfc_error ("%qs and %qs for GENERIC %qs at %L are ambiguous",
12840 sym1->name, sym2->name, generic_name, &where);
12841 return false;
12842 }
12843
12844 return true;
12845 }
12846
12847
12848 /* Worker function for resolving a generic procedure binding; this is used to
12849 resolve GENERIC as well as user and intrinsic OPERATOR typebound procedures.
12850
12851 The difference between those cases is finding possible inherited bindings
12852 that are overridden, as one has to look for them in tb_sym_root,
12853 tb_uop_root or tb_op, respectively. Thus the caller must already find
12854 the super-type and set p->overridden correctly. */
12855
12856 static bool
12857 resolve_tb_generic_targets (gfc_symbol* super_type,
12858 gfc_typebound_proc* p, const char* name)
12859 {
12860 gfc_tbp_generic* target;
12861 gfc_symtree* first_target;
12862 gfc_symtree* inherited;
12863
12864 gcc_assert (p && p->is_generic);
12865
12866 /* Try to find the specific bindings for the symtrees in our target-list. */
12867 gcc_assert (p->u.generic);
12868 for (target = p->u.generic; target; target = target->next)
12869 if (!target->specific)
12870 {
12871 gfc_typebound_proc* overridden_tbp;
12872 gfc_tbp_generic* g;
12873 const char* target_name;
12874
12875 target_name = target->specific_st->name;
12876
12877 /* Defined for this type directly. */
12878 if (target->specific_st->n.tb && !target->specific_st->n.tb->error)
12879 {
12880 target->specific = target->specific_st->n.tb;
12881 goto specific_found;
12882 }
12883
12884 /* Look for an inherited specific binding. */
12885 if (super_type)
12886 {
12887 inherited = gfc_find_typebound_proc (super_type, NULL, target_name,
12888 true, NULL);
12889
12890 if (inherited)
12891 {
12892 gcc_assert (inherited->n.tb);
12893 target->specific = inherited->n.tb;
12894 goto specific_found;
12895 }
12896 }
12897
12898 gfc_error ("Undefined specific binding %qs as target of GENERIC %qs"
12899 " at %L", target_name, name, &p->where);
12900 return false;
12901
12902 /* Once we've found the specific binding, check it is not ambiguous with
12903 other specifics already found or inherited for the same GENERIC. */
12904 specific_found:
12905 gcc_assert (target->specific);
12906
12907 /* This must really be a specific binding! */
12908 if (target->specific->is_generic)
12909 {
12910 gfc_error ("GENERIC %qs at %L must target a specific binding,"
12911 " %qs is GENERIC, too", name, &p->where, target_name);
12912 return false;
12913 }
12914
12915 /* Check those already resolved on this type directly. */
12916 for (g = p->u.generic; g; g = g->next)
12917 if (g != target && g->specific
12918 && !check_generic_tbp_ambiguity (target, g, name, p->where))
12919 return false;
12920
12921 /* Check for ambiguity with inherited specific targets. */
12922 for (overridden_tbp = p->overridden; overridden_tbp;
12923 overridden_tbp = overridden_tbp->overridden)
12924 if (overridden_tbp->is_generic)
12925 {
12926 for (g = overridden_tbp->u.generic; g; g = g->next)
12927 {
12928 gcc_assert (g->specific);
12929 if (!check_generic_tbp_ambiguity (target, g, name, p->where))
12930 return false;
12931 }
12932 }
12933 }
12934
12935 /* If we attempt to "overwrite" a specific binding, this is an error. */
12936 if (p->overridden && !p->overridden->is_generic)
12937 {
12938 gfc_error ("GENERIC %qs at %L can't overwrite specific binding with"
12939 " the same name", name, &p->where);
12940 return false;
12941 }
12942
12943 /* Take the SUBROUTINE/FUNCTION attributes of the first specific target, as
12944 all must have the same attributes here. */
12945 first_target = p->u.generic->specific->u.specific;
12946 gcc_assert (first_target);
12947 p->subroutine = first_target->n.sym->attr.subroutine;
12948 p->function = first_target->n.sym->attr.function;
12949
12950 return true;
12951 }
12952
12953
12954 /* Resolve a GENERIC procedure binding for a derived type. */
12955
12956 static bool
12957 resolve_typebound_generic (gfc_symbol* derived, gfc_symtree* st)
12958 {
12959 gfc_symbol* super_type;
12960
12961 /* Find the overridden binding if any. */
12962 st->n.tb->overridden = NULL;
12963 super_type = gfc_get_derived_super_type (derived);
12964 if (super_type)
12965 {
12966 gfc_symtree* overridden;
12967 overridden = gfc_find_typebound_proc (super_type, NULL, st->name,
12968 true, NULL);
12969
12970 if (overridden && overridden->n.tb)
12971 st->n.tb->overridden = overridden->n.tb;
12972 }
12973
12974 /* Resolve using worker function. */
12975 return resolve_tb_generic_targets (super_type, st->n.tb, st->name);
12976 }
12977
12978
12979 /* Retrieve the target-procedure of an operator binding and do some checks in
12980 common for intrinsic and user-defined type-bound operators. */
12981
12982 static gfc_symbol*
12983 get_checked_tb_operator_target (gfc_tbp_generic* target, locus where)
12984 {
12985 gfc_symbol* target_proc;
12986
12987 gcc_assert (target->specific && !target->specific->is_generic);
12988 target_proc = target->specific->u.specific->n.sym;
12989 gcc_assert (target_proc);
12990
12991 /* F08:C468. All operator bindings must have a passed-object dummy argument. */
12992 if (target->specific->nopass)
12993 {
12994 gfc_error ("Type-bound operator at %L can't be NOPASS", &where);
12995 return NULL;
12996 }
12997
12998 return target_proc;
12999 }
13000
13001
13002 /* Resolve a type-bound intrinsic operator. */
13003
13004 static bool
13005 resolve_typebound_intrinsic_op (gfc_symbol* derived, gfc_intrinsic_op op,
13006 gfc_typebound_proc* p)
13007 {
13008 gfc_symbol* super_type;
13009 gfc_tbp_generic* target;
13010
13011 /* If there's already an error here, do nothing (but don't fail again). */
13012 if (p->error)
13013 return true;
13014
13015 /* Operators should always be GENERIC bindings. */
13016 gcc_assert (p->is_generic);
13017
13018 /* Look for an overridden binding. */
13019 super_type = gfc_get_derived_super_type (derived);
13020 if (super_type && super_type->f2k_derived)
13021 p->overridden = gfc_find_typebound_intrinsic_op (super_type, NULL,
13022 op, true, NULL);
13023 else
13024 p->overridden = NULL;
13025
13026 /* Resolve general GENERIC properties using worker function. */
13027 if (!resolve_tb_generic_targets (super_type, p, gfc_op2string(op)))
13028 goto error;
13029
13030 /* Check the targets to be procedures of correct interface. */
13031 for (target = p->u.generic; target; target = target->next)
13032 {
13033 gfc_symbol* target_proc;
13034
13035 target_proc = get_checked_tb_operator_target (target, p->where);
13036 if (!target_proc)
13037 goto error;
13038
13039 if (!gfc_check_operator_interface (target_proc, op, p->where))
13040 goto error;
13041
13042 /* Add target to non-typebound operator list. */
13043 if (!target->specific->deferred && !derived->attr.use_assoc
13044 && p->access != ACCESS_PRIVATE && derived->ns == gfc_current_ns)
13045 {
13046 gfc_interface *head, *intr;
13047
13048 /* Preempt 'gfc_check_new_interface' for submodules, where the
13049 mechanism for handling module procedures winds up resolving
13050 operator interfaces twice and would otherwise cause an error. */
13051 for (intr = derived->ns->op[op]; intr; intr = intr->next)
13052 if (intr->sym == target_proc
13053 && target_proc->attr.used_in_submodule)
13054 return true;
13055
13056 if (!gfc_check_new_interface (derived->ns->op[op],
13057 target_proc, p->where))
13058 return false;
13059 head = derived->ns->op[op];
13060 intr = gfc_get_interface ();
13061 intr->sym = target_proc;
13062 intr->where = p->where;
13063 intr->next = head;
13064 derived->ns->op[op] = intr;
13065 }
13066 }
13067
13068 return true;
13069
13070 error:
13071 p->error = 1;
13072 return false;
13073 }
13074
13075
13076 /* Resolve a type-bound user operator (tree-walker callback). */
13077
13078 static gfc_symbol* resolve_bindings_derived;
13079 static bool resolve_bindings_result;
13080
13081 static bool check_uop_procedure (gfc_symbol* sym, locus where);
13082
13083 static void
13084 resolve_typebound_user_op (gfc_symtree* stree)
13085 {
13086 gfc_symbol* super_type;
13087 gfc_tbp_generic* target;
13088
13089 gcc_assert (stree && stree->n.tb);
13090
13091 if (stree->n.tb->error)
13092 return;
13093
13094 /* Operators should always be GENERIC bindings. */
13095 gcc_assert (stree->n.tb->is_generic);
13096
13097 /* Find overridden procedure, if any. */
13098 super_type = gfc_get_derived_super_type (resolve_bindings_derived);
13099 if (super_type && super_type->f2k_derived)
13100 {
13101 gfc_symtree* overridden;
13102 overridden = gfc_find_typebound_user_op (super_type, NULL,
13103 stree->name, true, NULL);
13104
13105 if (overridden && overridden->n.tb)
13106 stree->n.tb->overridden = overridden->n.tb;
13107 }
13108 else
13109 stree->n.tb->overridden = NULL;
13110
13111 /* Resolve basically using worker function. */
13112 if (!resolve_tb_generic_targets (super_type, stree->n.tb, stree->name))
13113 goto error;
13114
13115 /* Check the targets to be functions of correct interface. */
13116 for (target = stree->n.tb->u.generic; target; target = target->next)
13117 {
13118 gfc_symbol* target_proc;
13119
13120 target_proc = get_checked_tb_operator_target (target, stree->n.tb->where);
13121 if (!target_proc)
13122 goto error;
13123
13124 if (!check_uop_procedure (target_proc, stree->n.tb->where))
13125 goto error;
13126 }
13127
13128 return;
13129
13130 error:
13131 resolve_bindings_result = false;
13132 stree->n.tb->error = 1;
13133 }
13134
13135
13136 /* Resolve the type-bound procedures for a derived type. */
13137
13138 static void
13139 resolve_typebound_procedure (gfc_symtree* stree)
13140 {
13141 gfc_symbol* proc;
13142 locus where;
13143 gfc_symbol* me_arg;
13144 gfc_symbol* super_type;
13145 gfc_component* comp;
13146
13147 gcc_assert (stree);
13148
13149 /* Undefined specific symbol from GENERIC target definition. */
13150 if (!stree->n.tb)
13151 return;
13152
13153 if (stree->n.tb->error)
13154 return;
13155
13156 /* If this is a GENERIC binding, use that routine. */
13157 if (stree->n.tb->is_generic)
13158 {
13159 if (!resolve_typebound_generic (resolve_bindings_derived, stree))
13160 goto error;
13161 return;
13162 }
13163
13164 /* Get the target-procedure to check it. */
13165 gcc_assert (!stree->n.tb->is_generic);
13166 gcc_assert (stree->n.tb->u.specific);
13167 proc = stree->n.tb->u.specific->n.sym;
13168 where = stree->n.tb->where;
13169
13170 /* Default access should already be resolved from the parser. */
13171 gcc_assert (stree->n.tb->access != ACCESS_UNKNOWN);
13172
13173 if (stree->n.tb->deferred)
13174 {
13175 if (!check_proc_interface (proc, &where))
13176 goto error;
13177 }
13178 else
13179 {
13180 /* Check for F08:C465. */
13181 if ((!proc->attr.subroutine && !proc->attr.function)
13182 || (proc->attr.proc != PROC_MODULE
13183 && proc->attr.if_source != IFSRC_IFBODY)
13184 || proc->attr.abstract)
13185 {
13186 gfc_error ("%qs must be a module procedure or an external procedure with"
13187 " an explicit interface at %L", proc->name, &where);
13188 goto error;
13189 }
13190 }
13191
13192 stree->n.tb->subroutine = proc->attr.subroutine;
13193 stree->n.tb->function = proc->attr.function;
13194
13195 /* Find the super-type of the current derived type. We could do this once and
13196 store in a global if speed is needed, but as long as not I believe this is
13197 more readable and clearer. */
13198 super_type = gfc_get_derived_super_type (resolve_bindings_derived);
13199
13200 /* If PASS, resolve and check arguments if not already resolved / loaded
13201 from a .mod file. */
13202 if (!stree->n.tb->nopass && stree->n.tb->pass_arg_num == 0)
13203 {
13204 gfc_formal_arglist *dummy_args;
13205
13206 dummy_args = gfc_sym_get_dummy_args (proc);
13207 if (stree->n.tb->pass_arg)
13208 {
13209 gfc_formal_arglist *i;
13210
13211 /* If an explicit passing argument name is given, walk the arg-list
13212 and look for it. */
13213
13214 me_arg = NULL;
13215 stree->n.tb->pass_arg_num = 1;
13216 for (i = dummy_args; i; i = i->next)
13217 {
13218 if (!strcmp (i->sym->name, stree->n.tb->pass_arg))
13219 {
13220 me_arg = i->sym;
13221 break;
13222 }
13223 ++stree->n.tb->pass_arg_num;
13224 }
13225
13226 if (!me_arg)
13227 {
13228 gfc_error ("Procedure %qs with PASS(%s) at %L has no"
13229 " argument %qs",
13230 proc->name, stree->n.tb->pass_arg, &where,
13231 stree->n.tb->pass_arg);
13232 goto error;
13233 }
13234 }
13235 else
13236 {
13237 /* Otherwise, take the first one; there should in fact be at least
13238 one. */
13239 stree->n.tb->pass_arg_num = 1;
13240 if (!dummy_args)
13241 {
13242 gfc_error ("Procedure %qs with PASS at %L must have at"
13243 " least one argument", proc->name, &where);
13244 goto error;
13245 }
13246 me_arg = dummy_args->sym;
13247 }
13248
13249 /* Now check that the argument-type matches and the passed-object
13250 dummy argument is generally fine. */
13251
13252 gcc_assert (me_arg);
13253
13254 if (me_arg->ts.type != BT_CLASS)
13255 {
13256 gfc_error ("Non-polymorphic passed-object dummy argument of %qs"
13257 " at %L", proc->name, &where);
13258 goto error;
13259 }
13260
13261 if (CLASS_DATA (me_arg)->ts.u.derived
13262 != resolve_bindings_derived)
13263 {
13264 gfc_error ("Argument %qs of %qs with PASS(%s) at %L must be of"
13265 " the derived-type %qs", me_arg->name, proc->name,
13266 me_arg->name, &where, resolve_bindings_derived->name);
13267 goto error;
13268 }
13269
13270 gcc_assert (me_arg->ts.type == BT_CLASS);
13271 if (CLASS_DATA (me_arg)->as && CLASS_DATA (me_arg)->as->rank != 0)
13272 {
13273 gfc_error ("Passed-object dummy argument of %qs at %L must be"
13274 " scalar", proc->name, &where);
13275 goto error;
13276 }
13277 if (CLASS_DATA (me_arg)->attr.allocatable)
13278 {
13279 gfc_error ("Passed-object dummy argument of %qs at %L must not"
13280 " be ALLOCATABLE", proc->name, &where);
13281 goto error;
13282 }
13283 if (CLASS_DATA (me_arg)->attr.class_pointer)
13284 {
13285 gfc_error ("Passed-object dummy argument of %qs at %L must not"
13286 " be POINTER", proc->name, &where);
13287 goto error;
13288 }
13289 }
13290
13291 /* If we are extending some type, check that we don't override a procedure
13292 flagged NON_OVERRIDABLE. */
13293 stree->n.tb->overridden = NULL;
13294 if (super_type)
13295 {
13296 gfc_symtree* overridden;
13297 overridden = gfc_find_typebound_proc (super_type, NULL,
13298 stree->name, true, NULL);
13299
13300 if (overridden)
13301 {
13302 if (overridden->n.tb)
13303 stree->n.tb->overridden = overridden->n.tb;
13304
13305 if (!gfc_check_typebound_override (stree, overridden))
13306 goto error;
13307 }
13308 }
13309
13310 /* See if there's a name collision with a component directly in this type. */
13311 for (comp = resolve_bindings_derived->components; comp; comp = comp->next)
13312 if (!strcmp (comp->name, stree->name))
13313 {
13314 gfc_error ("Procedure %qs at %L has the same name as a component of"
13315 " %qs",
13316 stree->name, &where, resolve_bindings_derived->name);
13317 goto error;
13318 }
13319
13320 /* Try to find a name collision with an inherited component. */
13321 if (super_type && gfc_find_component (super_type, stree->name, true, true,
13322 NULL))
13323 {
13324 gfc_error ("Procedure %qs at %L has the same name as an inherited"
13325 " component of %qs",
13326 stree->name, &where, resolve_bindings_derived->name);
13327 goto error;
13328 }
13329
13330 stree->n.tb->error = 0;
13331 return;
13332
13333 error:
13334 resolve_bindings_result = false;
13335 stree->n.tb->error = 1;
13336 }
13337
13338
13339 static bool
13340 resolve_typebound_procedures (gfc_symbol* derived)
13341 {
13342 int op;
13343 gfc_symbol* super_type;
13344
13345 if (!derived->f2k_derived || !derived->f2k_derived->tb_sym_root)
13346 return true;
13347
13348 super_type = gfc_get_derived_super_type (derived);
13349 if (super_type)
13350 resolve_symbol (super_type);
13351
13352 resolve_bindings_derived = derived;
13353 resolve_bindings_result = true;
13354
13355 if (derived->f2k_derived->tb_sym_root)
13356 gfc_traverse_symtree (derived->f2k_derived->tb_sym_root,
13357 &resolve_typebound_procedure);
13358
13359 if (derived->f2k_derived->tb_uop_root)
13360 gfc_traverse_symtree (derived->f2k_derived->tb_uop_root,
13361 &resolve_typebound_user_op);
13362
13363 for (op = 0; op != GFC_INTRINSIC_OPS; ++op)
13364 {
13365 gfc_typebound_proc* p = derived->f2k_derived->tb_op[op];
13366 if (p && !resolve_typebound_intrinsic_op (derived,
13367 (gfc_intrinsic_op)op, p))
13368 resolve_bindings_result = false;
13369 }
13370
13371 return resolve_bindings_result;
13372 }
13373
13374
13375 /* Add a derived type to the dt_list. The dt_list is used in trans-types.c
13376 to give all identical derived types the same backend_decl. */
13377 static void
13378 add_dt_to_dt_list (gfc_symbol *derived)
13379 {
13380 gfc_dt_list *dt_list;
13381
13382 for (dt_list = gfc_derived_types; dt_list; dt_list = dt_list->next)
13383 if (derived == dt_list->derived)
13384 return;
13385
13386 dt_list = gfc_get_dt_list ();
13387 dt_list->next = gfc_derived_types;
13388 dt_list->derived = derived;
13389 gfc_derived_types = dt_list;
13390 }
13391
13392
13393 /* Ensure that a derived-type is really not abstract, meaning that every
13394 inherited DEFERRED binding is overridden by a non-DEFERRED one. */
13395
13396 static bool
13397 ensure_not_abstract_walker (gfc_symbol* sub, gfc_symtree* st)
13398 {
13399 if (!st)
13400 return true;
13401
13402 if (!ensure_not_abstract_walker (sub, st->left))
13403 return false;
13404 if (!ensure_not_abstract_walker (sub, st->right))
13405 return false;
13406
13407 if (st->n.tb && st->n.tb->deferred)
13408 {
13409 gfc_symtree* overriding;
13410 overriding = gfc_find_typebound_proc (sub, NULL, st->name, true, NULL);
13411 if (!overriding)
13412 return false;
13413 gcc_assert (overriding->n.tb);
13414 if (overriding->n.tb->deferred)
13415 {
13416 gfc_error ("Derived-type %qs declared at %L must be ABSTRACT because"
13417 " %qs is DEFERRED and not overridden",
13418 sub->name, &sub->declared_at, st->name);
13419 return false;
13420 }
13421 }
13422
13423 return true;
13424 }
13425
13426 static bool
13427 ensure_not_abstract (gfc_symbol* sub, gfc_symbol* ancestor)
13428 {
13429 /* The algorithm used here is to recursively travel up the ancestry of sub
13430 and for each ancestor-type, check all bindings. If any of them is
13431 DEFERRED, look it up starting from sub and see if the found (overriding)
13432 binding is not DEFERRED.
13433 This is not the most efficient way to do this, but it should be ok and is
13434 clearer than something sophisticated. */
13435
13436 gcc_assert (ancestor && !sub->attr.abstract);
13437
13438 if (!ancestor->attr.abstract)
13439 return true;
13440
13441 /* Walk bindings of this ancestor. */
13442 if (ancestor->f2k_derived)
13443 {
13444 bool t;
13445 t = ensure_not_abstract_walker (sub, ancestor->f2k_derived->tb_sym_root);
13446 if (!t)
13447 return false;
13448 }
13449
13450 /* Find next ancestor type and recurse on it. */
13451 ancestor = gfc_get_derived_super_type (ancestor);
13452 if (ancestor)
13453 return ensure_not_abstract (sub, ancestor);
13454
13455 return true;
13456 }
13457
13458
13459 /* This check for typebound defined assignments is done recursively
13460 since the order in which derived types are resolved is not always in
13461 order of the declarations. */
13462
13463 static void
13464 check_defined_assignments (gfc_symbol *derived)
13465 {
13466 gfc_component *c;
13467
13468 for (c = derived->components; c; c = c->next)
13469 {
13470 if (!gfc_bt_struct (c->ts.type)
13471 || c->attr.pointer
13472 || c->attr.allocatable
13473 || c->attr.proc_pointer_comp
13474 || c->attr.class_pointer
13475 || c->attr.proc_pointer)
13476 continue;
13477
13478 if (c->ts.u.derived->attr.defined_assign_comp
13479 || (c->ts.u.derived->f2k_derived
13480 && c->ts.u.derived->f2k_derived->tb_op[INTRINSIC_ASSIGN]))
13481 {
13482 derived->attr.defined_assign_comp = 1;
13483 return;
13484 }
13485
13486 check_defined_assignments (c->ts.u.derived);
13487 if (c->ts.u.derived->attr.defined_assign_comp)
13488 {
13489 derived->attr.defined_assign_comp = 1;
13490 return;
13491 }
13492 }
13493 }
13494
13495
13496 /* Resolve a single component of a derived type or structure. */
13497
13498 static bool
13499 resolve_component (gfc_component *c, gfc_symbol *sym)
13500 {
13501 gfc_symbol *super_type;
13502
13503 if (c->attr.artificial)
13504 return true;
13505
13506 /* Do not allow vtype components to be resolved in nameless namespaces
13507 such as block data because the procedure pointers will cause ICEs
13508 and vtables are not needed in these contexts. */
13509 if (sym->attr.vtype && sym->attr.use_assoc
13510 && sym->ns->proc_name == NULL)
13511 return true;
13512
13513 /* F2008, C442. */
13514 if ((!sym->attr.is_class || c != sym->components)
13515 && c->attr.codimension
13516 && (!c->attr.allocatable || (c->as && c->as->type != AS_DEFERRED)))
13517 {
13518 gfc_error ("Coarray component %qs at %L must be allocatable with "
13519 "deferred shape", c->name, &c->loc);
13520 return false;
13521 }
13522
13523 /* F2008, C443. */
13524 if (c->attr.codimension && c->ts.type == BT_DERIVED
13525 && c->ts.u.derived->ts.is_iso_c)
13526 {
13527 gfc_error ("Component %qs at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) "
13528 "shall not be a coarray", c->name, &c->loc);
13529 return false;
13530 }
13531
13532 /* F2008, C444. */
13533 if (gfc_bt_struct (c->ts.type) && c->ts.u.derived->attr.coarray_comp
13534 && (c->attr.codimension || c->attr.pointer || c->attr.dimension
13535 || c->attr.allocatable))
13536 {
13537 gfc_error ("Component %qs at %L with coarray component "
13538 "shall be a nonpointer, nonallocatable scalar",
13539 c->name, &c->loc);
13540 return false;
13541 }
13542
13543 /* F2008, C448. */
13544 if (c->attr.contiguous && (!c->attr.dimension || !c->attr.pointer))
13545 {
13546 gfc_error ("Component %qs at %L has the CONTIGUOUS attribute but "
13547 "is not an array pointer", c->name, &c->loc);
13548 return false;
13549 }
13550
13551 if (c->attr.proc_pointer && c->ts.interface)
13552 {
13553 gfc_symbol *ifc = c->ts.interface;
13554
13555 if (!sym->attr.vtype && !check_proc_interface (ifc, &c->loc))
13556 {
13557 c->tb->error = 1;
13558 return false;
13559 }
13560
13561 if (ifc->attr.if_source || ifc->attr.intrinsic)
13562 {
13563 /* Resolve interface and copy attributes. */
13564 if (ifc->formal && !ifc->formal_ns)
13565 resolve_symbol (ifc);
13566 if (ifc->attr.intrinsic)
13567 gfc_resolve_intrinsic (ifc, &ifc->declared_at);
13568
13569 if (ifc->result)
13570 {
13571 c->ts = ifc->result->ts;
13572 c->attr.allocatable = ifc->result->attr.allocatable;
13573 c->attr.pointer = ifc->result->attr.pointer;
13574 c->attr.dimension = ifc->result->attr.dimension;
13575 c->as = gfc_copy_array_spec (ifc->result->as);
13576 c->attr.class_ok = ifc->result->attr.class_ok;
13577 }
13578 else
13579 {
13580 c->ts = ifc->ts;
13581 c->attr.allocatable = ifc->attr.allocatable;
13582 c->attr.pointer = ifc->attr.pointer;
13583 c->attr.dimension = ifc->attr.dimension;
13584 c->as = gfc_copy_array_spec (ifc->as);
13585 c->attr.class_ok = ifc->attr.class_ok;
13586 }
13587 c->ts.interface = ifc;
13588 c->attr.function = ifc->attr.function;
13589 c->attr.subroutine = ifc->attr.subroutine;
13590
13591 c->attr.pure = ifc->attr.pure;
13592 c->attr.elemental = ifc->attr.elemental;
13593 c->attr.recursive = ifc->attr.recursive;
13594 c->attr.always_explicit = ifc->attr.always_explicit;
13595 c->attr.ext_attr |= ifc->attr.ext_attr;
13596 /* Copy char length. */
13597 if (ifc->ts.type == BT_CHARACTER && ifc->ts.u.cl)
13598 {
13599 gfc_charlen *cl = gfc_new_charlen (sym->ns, ifc->ts.u.cl);
13600 if (cl->length && !cl->resolved
13601 && !gfc_resolve_expr (cl->length))
13602 {
13603 c->tb->error = 1;
13604 return false;
13605 }
13606 c->ts.u.cl = cl;
13607 }
13608 }
13609 }
13610 else if (c->attr.proc_pointer && c->ts.type == BT_UNKNOWN)
13611 {
13612 /* Since PPCs are not implicitly typed, a PPC without an explicit
13613 interface must be a subroutine. */
13614 gfc_add_subroutine (&c->attr, c->name, &c->loc);
13615 }
13616
13617 /* Procedure pointer components: Check PASS arg. */
13618 if (c->attr.proc_pointer && !c->tb->nopass && c->tb->pass_arg_num == 0
13619 && !sym->attr.vtype)
13620 {
13621 gfc_symbol* me_arg;
13622
13623 if (c->tb->pass_arg)
13624 {
13625 gfc_formal_arglist* i;
13626
13627 /* If an explicit passing argument name is given, walk the arg-list
13628 and look for it. */
13629
13630 me_arg = NULL;
13631 c->tb->pass_arg_num = 1;
13632 for (i = c->ts.interface->formal; i; i = i->next)
13633 {
13634 if (!strcmp (i->sym->name, c->tb->pass_arg))
13635 {
13636 me_arg = i->sym;
13637 break;
13638 }
13639 c->tb->pass_arg_num++;
13640 }
13641
13642 if (!me_arg)
13643 {
13644 gfc_error ("Procedure pointer component %qs with PASS(%s) "
13645 "at %L has no argument %qs", c->name,
13646 c->tb->pass_arg, &c->loc, c->tb->pass_arg);
13647 c->tb->error = 1;
13648 return false;
13649 }
13650 }
13651 else
13652 {
13653 /* Otherwise, take the first one; there should in fact be at least
13654 one. */
13655 c->tb->pass_arg_num = 1;
13656 if (!c->ts.interface->formal)
13657 {
13658 gfc_error ("Procedure pointer component %qs with PASS at %L "
13659 "must have at least one argument",
13660 c->name, &c->loc);
13661 c->tb->error = 1;
13662 return false;
13663 }
13664 me_arg = c->ts.interface->formal->sym;
13665 }
13666
13667 /* Now check that the argument-type matches. */
13668 gcc_assert (me_arg);
13669 if ((me_arg->ts.type != BT_DERIVED && me_arg->ts.type != BT_CLASS)
13670 || (me_arg->ts.type == BT_DERIVED && me_arg->ts.u.derived != sym)
13671 || (me_arg->ts.type == BT_CLASS
13672 && CLASS_DATA (me_arg)->ts.u.derived != sym))
13673 {
13674 gfc_error ("Argument %qs of %qs with PASS(%s) at %L must be of"
13675 " the derived type %qs", me_arg->name, c->name,
13676 me_arg->name, &c->loc, sym->name);
13677 c->tb->error = 1;
13678 return false;
13679 }
13680
13681 /* Check for C453. */
13682 if (me_arg->attr.dimension)
13683 {
13684 gfc_error ("Argument %qs of %qs with PASS(%s) at %L "
13685 "must be scalar", me_arg->name, c->name, me_arg->name,
13686 &c->loc);
13687 c->tb->error = 1;
13688 return false;
13689 }
13690
13691 if (me_arg->attr.pointer)
13692 {
13693 gfc_error ("Argument %qs of %qs with PASS(%s) at %L "
13694 "may not have the POINTER attribute", me_arg->name,
13695 c->name, me_arg->name, &c->loc);
13696 c->tb->error = 1;
13697 return false;
13698 }
13699
13700 if (me_arg->attr.allocatable)
13701 {
13702 gfc_error ("Argument %qs of %qs with PASS(%s) at %L "
13703 "may not be ALLOCATABLE", me_arg->name, c->name,
13704 me_arg->name, &c->loc);
13705 c->tb->error = 1;
13706 return false;
13707 }
13708
13709 if (gfc_type_is_extensible (sym) && me_arg->ts.type != BT_CLASS)
13710 {
13711 gfc_error ("Non-polymorphic passed-object dummy argument of %qs"
13712 " at %L", c->name, &c->loc);
13713 return false;
13714 }
13715
13716 }
13717
13718 /* Check type-spec if this is not the parent-type component. */
13719 if (((sym->attr.is_class
13720 && (!sym->components->ts.u.derived->attr.extension
13721 || c != sym->components->ts.u.derived->components))
13722 || (!sym->attr.is_class
13723 && (!sym->attr.extension || c != sym->components)))
13724 && !sym->attr.vtype
13725 && !resolve_typespec_used (&c->ts, &c->loc, c->name))
13726 return false;
13727
13728 super_type = gfc_get_derived_super_type (sym);
13729
13730 /* If this type is an extension, set the accessibility of the parent
13731 component. */
13732 if (super_type
13733 && ((sym->attr.is_class
13734 && c == sym->components->ts.u.derived->components)
13735 || (!sym->attr.is_class && c == sym->components))
13736 && strcmp (super_type->name, c->name) == 0)
13737 c->attr.access = super_type->attr.access;
13738
13739 /* If this type is an extension, see if this component has the same name
13740 as an inherited type-bound procedure. */
13741 if (super_type && !sym->attr.is_class
13742 && gfc_find_typebound_proc (super_type, NULL, c->name, true, NULL))
13743 {
13744 gfc_error ("Component %qs of %qs at %L has the same name as an"
13745 " inherited type-bound procedure",
13746 c->name, sym->name, &c->loc);
13747 return false;
13748 }
13749
13750 if (c->ts.type == BT_CHARACTER && !c->attr.proc_pointer
13751 && !c->ts.deferred)
13752 {
13753 if (c->ts.u.cl->length == NULL
13754 || (!resolve_charlen(c->ts.u.cl))
13755 || !gfc_is_constant_expr (c->ts.u.cl->length))
13756 {
13757 gfc_error ("Character length of component %qs needs to "
13758 "be a constant specification expression at %L",
13759 c->name,
13760 c->ts.u.cl->length ? &c->ts.u.cl->length->where : &c->loc);
13761 return false;
13762 }
13763 }
13764
13765 if (c->ts.type == BT_CHARACTER && c->ts.deferred
13766 && !c->attr.pointer && !c->attr.allocatable)
13767 {
13768 gfc_error ("Character component %qs of %qs at %L with deferred "
13769 "length must be a POINTER or ALLOCATABLE",
13770 c->name, sym->name, &c->loc);
13771 return false;
13772 }
13773
13774 /* Add the hidden deferred length field. */
13775 if (c->ts.type == BT_CHARACTER
13776 && (c->ts.deferred || c->attr.pdt_string)
13777 && !c->attr.function
13778 && !sym->attr.is_class)
13779 {
13780 char name[GFC_MAX_SYMBOL_LEN+9];
13781 gfc_component *strlen;
13782 sprintf (name, "_%s_length", c->name);
13783 strlen = gfc_find_component (sym, name, true, true, NULL);
13784 if (strlen == NULL)
13785 {
13786 if (!gfc_add_component (sym, name, &strlen))
13787 return false;
13788 strlen->ts.type = BT_INTEGER;
13789 strlen->ts.kind = gfc_charlen_int_kind;
13790 strlen->attr.access = ACCESS_PRIVATE;
13791 strlen->attr.artificial = 1;
13792 }
13793 }
13794
13795 if (c->ts.type == BT_DERIVED
13796 && sym->component_access != ACCESS_PRIVATE
13797 && gfc_check_symbol_access (sym)
13798 && !is_sym_host_assoc (c->ts.u.derived, sym->ns)
13799 && !c->ts.u.derived->attr.use_assoc
13800 && !gfc_check_symbol_access (c->ts.u.derived)
13801 && !gfc_notify_std (GFC_STD_F2003, "the component %qs is a "
13802 "PRIVATE type and cannot be a component of "
13803 "%qs, which is PUBLIC at %L", c->name,
13804 sym->name, &sym->declared_at))
13805 return false;
13806
13807 if ((sym->attr.sequence || sym->attr.is_bind_c) && c->ts.type == BT_CLASS)
13808 {
13809 gfc_error ("Polymorphic component %s at %L in SEQUENCE or BIND(C) "
13810 "type %s", c->name, &c->loc, sym->name);
13811 return false;
13812 }
13813
13814 if (sym->attr.sequence)
13815 {
13816 if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.sequence == 0)
13817 {
13818 gfc_error ("Component %s of SEQUENCE type declared at %L does "
13819 "not have the SEQUENCE attribute",
13820 c->ts.u.derived->name, &sym->declared_at);
13821 return false;
13822 }
13823 }
13824
13825 if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.generic)
13826 c->ts.u.derived = gfc_find_dt_in_generic (c->ts.u.derived);
13827 else if (c->ts.type == BT_CLASS && c->attr.class_ok
13828 && CLASS_DATA (c)->ts.u.derived->attr.generic)
13829 CLASS_DATA (c)->ts.u.derived
13830 = gfc_find_dt_in_generic (CLASS_DATA (c)->ts.u.derived);
13831
13832 if (!sym->attr.is_class && c->ts.type == BT_DERIVED && !sym->attr.vtype
13833 && c->attr.pointer && c->ts.u.derived->components == NULL
13834 && !c->ts.u.derived->attr.zero_comp)
13835 {
13836 gfc_error ("The pointer component %qs of %qs at %L is a type "
13837 "that has not been declared", c->name, sym->name,
13838 &c->loc);
13839 return false;
13840 }
13841
13842 if (c->ts.type == BT_CLASS && c->attr.class_ok
13843 && CLASS_DATA (c)->attr.class_pointer
13844 && CLASS_DATA (c)->ts.u.derived->components == NULL
13845 && !CLASS_DATA (c)->ts.u.derived->attr.zero_comp
13846 && !UNLIMITED_POLY (c))
13847 {
13848 gfc_error ("The pointer component %qs of %qs at %L is a type "
13849 "that has not been declared", c->name, sym->name,
13850 &c->loc);
13851 return false;
13852 }
13853
13854 /* If an allocatable component derived type is of the same type as
13855 the enclosing derived type, we need a vtable generating so that
13856 the __deallocate procedure is created. */
13857 if ((c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS)
13858 && c->ts.u.derived == sym && c->attr.allocatable == 1)
13859 gfc_find_vtab (&c->ts);
13860
13861 /* Ensure that all the derived type components are put on the
13862 derived type list; even in formal namespaces, where derived type
13863 pointer components might not have been declared. */
13864 if (c->ts.type == BT_DERIVED
13865 && c->ts.u.derived
13866 && c->ts.u.derived->components
13867 && c->attr.pointer
13868 && sym != c->ts.u.derived)
13869 add_dt_to_dt_list (c->ts.u.derived);
13870
13871 if (!gfc_resolve_array_spec (c->as,
13872 !(c->attr.pointer || c->attr.proc_pointer
13873 || c->attr.allocatable)))
13874 return false;
13875
13876 if (c->initializer && !sym->attr.vtype
13877 && !c->attr.pdt_kind && !c->attr.pdt_len
13878 && !gfc_check_assign_symbol (sym, c, c->initializer))
13879 return false;
13880
13881 return true;
13882 }
13883
13884
13885 /* Be nice about the locus for a structure expression - show the locus of the
13886 first non-null sub-expression if we can. */
13887
13888 static locus *
13889 cons_where (gfc_expr *struct_expr)
13890 {
13891 gfc_constructor *cons;
13892
13893 gcc_assert (struct_expr && struct_expr->expr_type == EXPR_STRUCTURE);
13894
13895 cons = gfc_constructor_first (struct_expr->value.constructor);
13896 for (; cons; cons = gfc_constructor_next (cons))
13897 {
13898 if (cons->expr && cons->expr->expr_type != EXPR_NULL)
13899 return &cons->expr->where;
13900 }
13901
13902 return &struct_expr->where;
13903 }
13904
13905 /* Resolve the components of a structure type. Much less work than derived
13906 types. */
13907
13908 static bool
13909 resolve_fl_struct (gfc_symbol *sym)
13910 {
13911 gfc_component *c;
13912 gfc_expr *init = NULL;
13913 bool success;
13914
13915 /* Make sure UNIONs do not have overlapping initializers. */
13916 if (sym->attr.flavor == FL_UNION)
13917 {
13918 for (c = sym->components; c; c = c->next)
13919 {
13920 if (init && c->initializer)
13921 {
13922 gfc_error ("Conflicting initializers in union at %L and %L",
13923 cons_where (init), cons_where (c->initializer));
13924 gfc_free_expr (c->initializer);
13925 c->initializer = NULL;
13926 }
13927 if (init == NULL)
13928 init = c->initializer;
13929 }
13930 }
13931
13932 success = true;
13933 for (c = sym->components; c; c = c->next)
13934 if (!resolve_component (c, sym))
13935 success = false;
13936
13937 if (!success)
13938 return false;
13939
13940 if (sym->components)
13941 add_dt_to_dt_list (sym);
13942
13943 return true;
13944 }
13945
13946
13947 /* Resolve the components of a derived type. This does not have to wait until
13948 resolution stage, but can be done as soon as the dt declaration has been
13949 parsed. */
13950
13951 static bool
13952 resolve_fl_derived0 (gfc_symbol *sym)
13953 {
13954 gfc_symbol* super_type;
13955 gfc_component *c;
13956 gfc_formal_arglist *f;
13957 bool success;
13958
13959 if (sym->attr.unlimited_polymorphic)
13960 return true;
13961
13962 super_type = gfc_get_derived_super_type (sym);
13963
13964 /* F2008, C432. */
13965 if (super_type && sym->attr.coarray_comp && !super_type->attr.coarray_comp)
13966 {
13967 gfc_error ("As extending type %qs at %L has a coarray component, "
13968 "parent type %qs shall also have one", sym->name,
13969 &sym->declared_at, super_type->name);
13970 return false;
13971 }
13972
13973 /* Ensure the extended type gets resolved before we do. */
13974 if (super_type && !resolve_fl_derived0 (super_type))
13975 return false;
13976
13977 /* An ABSTRACT type must be extensible. */
13978 if (sym->attr.abstract && !gfc_type_is_extensible (sym))
13979 {
13980 gfc_error ("Non-extensible derived-type %qs at %L must not be ABSTRACT",
13981 sym->name, &sym->declared_at);
13982 return false;
13983 }
13984
13985 c = (sym->attr.is_class) ? sym->components->ts.u.derived->components
13986 : sym->components;
13987
13988 success = true;
13989 for ( ; c != NULL; c = c->next)
13990 if (!resolve_component (c, sym))
13991 success = false;
13992
13993 if (!success)
13994 return false;
13995
13996 /* Now add the caf token field, where needed. */
13997 if (flag_coarray != GFC_FCOARRAY_NONE
13998 && !sym->attr.is_class && !sym->attr.vtype)
13999 {
14000 for (c = sym->components; c; c = c->next)
14001 if (!c->attr.dimension && !c->attr.codimension
14002 && (c->attr.allocatable || c->attr.pointer))
14003 {
14004 char name[GFC_MAX_SYMBOL_LEN+9];
14005 gfc_component *token;
14006 sprintf (name, "_caf_%s", c->name);
14007 token = gfc_find_component (sym, name, true, true, NULL);
14008 if (token == NULL)
14009 {
14010 if (!gfc_add_component (sym, name, &token))
14011 return false;
14012 token->ts.type = BT_VOID;
14013 token->ts.kind = gfc_default_integer_kind;
14014 token->attr.access = ACCESS_PRIVATE;
14015 token->attr.artificial = 1;
14016 token->attr.caf_token = 1;
14017 }
14018 }
14019 }
14020
14021 check_defined_assignments (sym);
14022
14023 if (!sym->attr.defined_assign_comp && super_type)
14024 sym->attr.defined_assign_comp
14025 = super_type->attr.defined_assign_comp;
14026
14027 /* If this is a non-ABSTRACT type extending an ABSTRACT one, ensure that
14028 all DEFERRED bindings are overridden. */
14029 if (super_type && super_type->attr.abstract && !sym->attr.abstract
14030 && !sym->attr.is_class
14031 && !ensure_not_abstract (sym, super_type))
14032 return false;
14033
14034 /* Check that there is a component for every PDT parameter. */
14035 if (sym->attr.pdt_template)
14036 {
14037 for (f = sym->formal; f; f = f->next)
14038 {
14039 if (!f->sym)
14040 continue;
14041 c = gfc_find_component (sym, f->sym->name, true, true, NULL);
14042 if (c == NULL)
14043 {
14044 gfc_error ("Parameterized type %qs does not have a component "
14045 "corresponding to parameter %qs at %L", sym->name,
14046 f->sym->name, &sym->declared_at);
14047 break;
14048 }
14049 }
14050 }
14051
14052 /* Add derived type to the derived type list. */
14053 add_dt_to_dt_list (sym);
14054
14055 return true;
14056 }
14057
14058
14059 /* The following procedure does the full resolution of a derived type,
14060 including resolution of all type-bound procedures (if present). In contrast
14061 to 'resolve_fl_derived0' this can only be done after the module has been
14062 parsed completely. */
14063
14064 static bool
14065 resolve_fl_derived (gfc_symbol *sym)
14066 {
14067 gfc_symbol *gen_dt = NULL;
14068
14069 if (sym->attr.unlimited_polymorphic)
14070 return true;
14071
14072 if (!sym->attr.is_class)
14073 gfc_find_symbol (sym->name, sym->ns, 0, &gen_dt);
14074 if (gen_dt && gen_dt->generic && gen_dt->generic->next
14075 && (!gen_dt->generic->sym->attr.use_assoc
14076 || gen_dt->generic->sym->module != gen_dt->generic->next->sym->module)
14077 && !gfc_notify_std (GFC_STD_F2003, "Generic name %qs of function "
14078 "%qs at %L being the same name as derived "
14079 "type at %L", sym->name,
14080 gen_dt->generic->sym == sym
14081 ? gen_dt->generic->next->sym->name
14082 : gen_dt->generic->sym->name,
14083 gen_dt->generic->sym == sym
14084 ? &gen_dt->generic->next->sym->declared_at
14085 : &gen_dt->generic->sym->declared_at,
14086 &sym->declared_at))
14087 return false;
14088
14089 /* Resolve the finalizer procedures. */
14090 if (!gfc_resolve_finalizers (sym, NULL))
14091 return false;
14092
14093 if (sym->attr.is_class && sym->ts.u.derived == NULL)
14094 {
14095 /* Fix up incomplete CLASS symbols. */
14096 gfc_component *data = gfc_find_component (sym, "_data", true, true, NULL);
14097 gfc_component *vptr = gfc_find_component (sym, "_vptr", true, true, NULL);
14098
14099 /* Nothing more to do for unlimited polymorphic entities. */
14100 if (data->ts.u.derived->attr.unlimited_polymorphic)
14101 return true;
14102 else if (vptr->ts.u.derived == NULL)
14103 {
14104 gfc_symbol *vtab = gfc_find_derived_vtab (data->ts.u.derived);
14105 gcc_assert (vtab);
14106 vptr->ts.u.derived = vtab->ts.u.derived;
14107 if (!resolve_fl_derived0 (vptr->ts.u.derived))
14108 return false;
14109 }
14110 }
14111
14112 if (!resolve_fl_derived0 (sym))
14113 return false;
14114
14115 /* Resolve the type-bound procedures. */
14116 if (!resolve_typebound_procedures (sym))
14117 return false;
14118
14119 /* Generate module vtables subject to their accessibility and their not
14120 being vtables or pdt templates. If this is not done class declarations
14121 in external procedures wind up with their own version and so SELECT TYPE
14122 fails because the vptrs do not have the same address. */
14123 if (gfc_option.allow_std & GFC_STD_F2003
14124 && sym->ns->proc_name
14125 && sym->ns->proc_name->attr.flavor == FL_MODULE
14126 && sym->attr.access != ACCESS_PRIVATE
14127 && !(sym->attr.use_assoc || sym->attr.vtype || sym->attr.pdt_template))
14128 {
14129 gfc_symbol *vtab = gfc_find_derived_vtab (sym);
14130 gfc_set_sym_referenced (vtab);
14131 }
14132
14133 return true;
14134 }
14135
14136
14137 static bool
14138 resolve_fl_namelist (gfc_symbol *sym)
14139 {
14140 gfc_namelist *nl;
14141 gfc_symbol *nlsym;
14142
14143 for (nl = sym->namelist; nl; nl = nl->next)
14144 {
14145 /* Check again, the check in match only works if NAMELIST comes
14146 after the decl. */
14147 if (nl->sym->as && nl->sym->as->type == AS_ASSUMED_SIZE)
14148 {
14149 gfc_error ("Assumed size array %qs in namelist %qs at %L is not "
14150 "allowed", nl->sym->name, sym->name, &sym->declared_at);
14151 return false;
14152 }
14153
14154 if (nl->sym->as && nl->sym->as->type == AS_ASSUMED_SHAPE
14155 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST array object %qs "
14156 "with assumed shape in namelist %qs at %L",
14157 nl->sym->name, sym->name, &sym->declared_at))
14158 return false;
14159
14160 if (is_non_constant_shape_array (nl->sym)
14161 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST array object %qs "
14162 "with nonconstant shape in namelist %qs at %L",
14163 nl->sym->name, sym->name, &sym->declared_at))
14164 return false;
14165
14166 if (nl->sym->ts.type == BT_CHARACTER
14167 && (nl->sym->ts.u.cl->length == NULL
14168 || !gfc_is_constant_expr (nl->sym->ts.u.cl->length))
14169 && !gfc_notify_std (GFC_STD_F2003, "NAMELIST object %qs with "
14170 "nonconstant character length in "
14171 "namelist %qs at %L", nl->sym->name,
14172 sym->name, &sym->declared_at))
14173 return false;
14174
14175 }
14176
14177 /* Reject PRIVATE objects in a PUBLIC namelist. */
14178 if (gfc_check_symbol_access (sym))
14179 {
14180 for (nl = sym->namelist; nl; nl = nl->next)
14181 {
14182 if (!nl->sym->attr.use_assoc
14183 && !is_sym_host_assoc (nl->sym, sym->ns)
14184 && !gfc_check_symbol_access (nl->sym))
14185 {
14186 gfc_error ("NAMELIST object %qs was declared PRIVATE and "
14187 "cannot be member of PUBLIC namelist %qs at %L",
14188 nl->sym->name, sym->name, &sym->declared_at);
14189 return false;
14190 }
14191
14192 if (nl->sym->ts.type == BT_DERIVED
14193 && (nl->sym->ts.u.derived->attr.alloc_comp
14194 || nl->sym->ts.u.derived->attr.pointer_comp))
14195 {
14196 if (!gfc_notify_std (GFC_STD_F2003, "NAMELIST object %qs in "
14197 "namelist %qs at %L with ALLOCATABLE "
14198 "or POINTER components", nl->sym->name,
14199 sym->name, &sym->declared_at))
14200 return false;
14201 return true;
14202 }
14203
14204 /* Types with private components that came here by USE-association. */
14205 if (nl->sym->ts.type == BT_DERIVED
14206 && derived_inaccessible (nl->sym->ts.u.derived))
14207 {
14208 gfc_error ("NAMELIST object %qs has use-associated PRIVATE "
14209 "components and cannot be member of namelist %qs at %L",
14210 nl->sym->name, sym->name, &sym->declared_at);
14211 return false;
14212 }
14213
14214 /* Types with private components that are defined in the same module. */
14215 if (nl->sym->ts.type == BT_DERIVED
14216 && !is_sym_host_assoc (nl->sym->ts.u.derived, sym->ns)
14217 && nl->sym->ts.u.derived->attr.private_comp)
14218 {
14219 gfc_error ("NAMELIST object %qs has PRIVATE components and "
14220 "cannot be a member of PUBLIC namelist %qs at %L",
14221 nl->sym->name, sym->name, &sym->declared_at);
14222 return false;
14223 }
14224 }
14225 }
14226
14227
14228 /* 14.1.2 A module or internal procedure represent local entities
14229 of the same type as a namelist member and so are not allowed. */
14230 for (nl = sym->namelist; nl; nl = nl->next)
14231 {
14232 if (nl->sym->ts.kind != 0 && nl->sym->attr.flavor == FL_VARIABLE)
14233 continue;
14234
14235 if (nl->sym->attr.function && nl->sym == nl->sym->result)
14236 if ((nl->sym == sym->ns->proc_name)
14237 ||
14238 (sym->ns->parent && nl->sym == sym->ns->parent->proc_name))
14239 continue;
14240
14241 nlsym = NULL;
14242 if (nl->sym->name)
14243 gfc_find_symbol (nl->sym->name, sym->ns, 1, &nlsym);
14244 if (nlsym && nlsym->attr.flavor == FL_PROCEDURE)
14245 {
14246 gfc_error ("PROCEDURE attribute conflicts with NAMELIST "
14247 "attribute in %qs at %L", nlsym->name,
14248 &sym->declared_at);
14249 return false;
14250 }
14251 }
14252
14253 if (async_io_dt)
14254 {
14255 for (nl = sym->namelist; nl; nl = nl->next)
14256 nl->sym->attr.asynchronous = 1;
14257 }
14258 return true;
14259 }
14260
14261
14262 static bool
14263 resolve_fl_parameter (gfc_symbol *sym)
14264 {
14265 /* A parameter array's shape needs to be constant. */
14266 if (sym->as != NULL
14267 && (sym->as->type == AS_DEFERRED
14268 || is_non_constant_shape_array (sym)))
14269 {
14270 gfc_error ("Parameter array %qs at %L cannot be automatic "
14271 "or of deferred shape", sym->name, &sym->declared_at);
14272 return false;
14273 }
14274
14275 /* Constraints on deferred type parameter. */
14276 if (!deferred_requirements (sym))
14277 return false;
14278
14279 /* Make sure a parameter that has been implicitly typed still
14280 matches the implicit type, since PARAMETER statements can precede
14281 IMPLICIT statements. */
14282 if (sym->attr.implicit_type
14283 && !gfc_compare_types (&sym->ts, gfc_get_default_type (sym->name,
14284 sym->ns)))
14285 {
14286 gfc_error ("Implicitly typed PARAMETER %qs at %L doesn't match a "
14287 "later IMPLICIT type", sym->name, &sym->declared_at);
14288 return false;
14289 }
14290
14291 /* Make sure the types of derived parameters are consistent. This
14292 type checking is deferred until resolution because the type may
14293 refer to a derived type from the host. */
14294 if (sym->ts.type == BT_DERIVED
14295 && !gfc_compare_types (&sym->ts, &sym->value->ts))
14296 {
14297 gfc_error ("Incompatible derived type in PARAMETER at %L",
14298 &sym->value->where);
14299 return false;
14300 }
14301
14302 /* F03:C509,C514. */
14303 if (sym->ts.type == BT_CLASS)
14304 {
14305 gfc_error ("CLASS variable %qs at %L cannot have the PARAMETER attribute",
14306 sym->name, &sym->declared_at);
14307 return false;
14308 }
14309
14310 return true;
14311 }
14312
14313
14314 /* Called by resolve_symbol to check PDTs. */
14315
14316 static void
14317 resolve_pdt (gfc_symbol* sym)
14318 {
14319 gfc_symbol *derived = NULL;
14320 gfc_actual_arglist *param;
14321 gfc_component *c;
14322 bool const_len_exprs = true;
14323 bool assumed_len_exprs = false;
14324 symbol_attribute *attr;
14325
14326 if (sym->ts.type == BT_DERIVED)
14327 {
14328 derived = sym->ts.u.derived;
14329 attr = &(sym->attr);
14330 }
14331 else if (sym->ts.type == BT_CLASS)
14332 {
14333 derived = CLASS_DATA (sym)->ts.u.derived;
14334 attr = &(CLASS_DATA (sym)->attr);
14335 }
14336 else
14337 gcc_unreachable ();
14338
14339 gcc_assert (derived->attr.pdt_type);
14340
14341 for (param = sym->param_list; param; param = param->next)
14342 {
14343 c = gfc_find_component (derived, param->name, false, true, NULL);
14344 gcc_assert (c);
14345 if (c->attr.pdt_kind)
14346 continue;
14347
14348 if (param->expr && !gfc_is_constant_expr (param->expr)
14349 && c->attr.pdt_len)
14350 const_len_exprs = false;
14351 else if (param->spec_type == SPEC_ASSUMED)
14352 assumed_len_exprs = true;
14353
14354 if (param->spec_type == SPEC_DEFERRED
14355 && !attr->allocatable && !attr->pointer)
14356 gfc_error ("The object %qs at %L has a deferred LEN "
14357 "parameter %qs and is neither allocatable "
14358 "nor a pointer", sym->name, &sym->declared_at,
14359 param->name);
14360
14361 }
14362
14363 if (!const_len_exprs
14364 && (sym->ns->proc_name->attr.is_main_program
14365 || sym->ns->proc_name->attr.flavor == FL_MODULE
14366 || sym->attr.save != SAVE_NONE))
14367 gfc_error ("The AUTOMATIC object %qs at %L must not have the "
14368 "SAVE attribute or be a variable declared in the "
14369 "main program, a module or a submodule(F08/C513)",
14370 sym->name, &sym->declared_at);
14371
14372 if (assumed_len_exprs && !(sym->attr.dummy
14373 || sym->attr.select_type_temporary || sym->attr.associate_var))
14374 gfc_error ("The object %qs at %L with ASSUMED type parameters "
14375 "must be a dummy or a SELECT TYPE selector(F08/4.2)",
14376 sym->name, &sym->declared_at);
14377 }
14378
14379
14380 /* Do anything necessary to resolve a symbol. Right now, we just
14381 assume that an otherwise unknown symbol is a variable. This sort
14382 of thing commonly happens for symbols in module. */
14383
14384 static void
14385 resolve_symbol (gfc_symbol *sym)
14386 {
14387 int check_constant, mp_flag;
14388 gfc_symtree *symtree;
14389 gfc_symtree *this_symtree;
14390 gfc_namespace *ns;
14391 gfc_component *c;
14392 symbol_attribute class_attr;
14393 gfc_array_spec *as;
14394 bool saved_specification_expr;
14395
14396 if (sym->resolved)
14397 return;
14398 sym->resolved = 1;
14399
14400 /* No symbol will ever have union type; only components can be unions.
14401 Union type declaration symbols have type BT_UNKNOWN but flavor FL_UNION
14402 (just like derived type declaration symbols have flavor FL_DERIVED). */
14403 gcc_assert (sym->ts.type != BT_UNION);
14404
14405 /* Coarrayed polymorphic objects with allocatable or pointer components are
14406 yet unsupported for -fcoarray=lib. */
14407 if (flag_coarray == GFC_FCOARRAY_LIB && sym->ts.type == BT_CLASS
14408 && sym->ts.u.derived && CLASS_DATA (sym)
14409 && CLASS_DATA (sym)->attr.codimension
14410 && (CLASS_DATA (sym)->ts.u.derived->attr.alloc_comp
14411 || CLASS_DATA (sym)->ts.u.derived->attr.pointer_comp))
14412 {
14413 gfc_error ("Sorry, allocatable/pointer components in polymorphic (CLASS) "
14414 "type coarrays at %L are unsupported", &sym->declared_at);
14415 return;
14416 }
14417
14418 if (sym->attr.artificial)
14419 return;
14420
14421 if (sym->attr.unlimited_polymorphic)
14422 return;
14423
14424 if (sym->attr.flavor == FL_UNKNOWN
14425 || (sym->attr.flavor == FL_PROCEDURE && !sym->attr.intrinsic
14426 && !sym->attr.generic && !sym->attr.external
14427 && sym->attr.if_source == IFSRC_UNKNOWN
14428 && sym->ts.type == BT_UNKNOWN))
14429 {
14430
14431 /* If we find that a flavorless symbol is an interface in one of the
14432 parent namespaces, find its symtree in this namespace, free the
14433 symbol and set the symtree to point to the interface symbol. */
14434 for (ns = gfc_current_ns->parent; ns; ns = ns->parent)
14435 {
14436 symtree = gfc_find_symtree (ns->sym_root, sym->name);
14437 if (symtree && (symtree->n.sym->generic ||
14438 (symtree->n.sym->attr.flavor == FL_PROCEDURE
14439 && sym->ns->construct_entities)))
14440 {
14441 this_symtree = gfc_find_symtree (gfc_current_ns->sym_root,
14442 sym->name);
14443 if (this_symtree->n.sym == sym)
14444 {
14445 symtree->n.sym->refs++;
14446 gfc_release_symbol (sym);
14447 this_symtree->n.sym = symtree->n.sym;
14448 return;
14449 }
14450 }
14451 }
14452
14453 /* Otherwise give it a flavor according to such attributes as
14454 it has. */
14455 if (sym->attr.flavor == FL_UNKNOWN && sym->attr.external == 0
14456 && sym->attr.intrinsic == 0)
14457 sym->attr.flavor = FL_VARIABLE;
14458 else if (sym->attr.flavor == FL_UNKNOWN)
14459 {
14460 sym->attr.flavor = FL_PROCEDURE;
14461 if (sym->attr.dimension)
14462 sym->attr.function = 1;
14463 }
14464 }
14465
14466 if (sym->attr.external && sym->ts.type != BT_UNKNOWN && !sym->attr.function)
14467 gfc_add_function (&sym->attr, sym->name, &sym->declared_at);
14468
14469 if (sym->attr.procedure && sym->attr.if_source != IFSRC_DECL
14470 && !resolve_procedure_interface (sym))
14471 return;
14472
14473 if (sym->attr.is_protected && !sym->attr.proc_pointer
14474 && (sym->attr.procedure || sym->attr.external))
14475 {
14476 if (sym->attr.external)
14477 gfc_error ("PROTECTED attribute conflicts with EXTERNAL attribute "
14478 "at %L", &sym->declared_at);
14479 else
14480 gfc_error ("PROCEDURE attribute conflicts with PROTECTED attribute "
14481 "at %L", &sym->declared_at);
14482
14483 return;
14484 }
14485
14486 if (sym->attr.flavor == FL_DERIVED && !resolve_fl_derived (sym))
14487 return;
14488
14489 else if ((sym->attr.flavor == FL_STRUCT || sym->attr.flavor == FL_UNION)
14490 && !resolve_fl_struct (sym))
14491 return;
14492
14493 /* Symbols that are module procedures with results (functions) have
14494 the types and array specification copied for type checking in
14495 procedures that call them, as well as for saving to a module
14496 file. These symbols can't stand the scrutiny that their results
14497 can. */
14498 mp_flag = (sym->result != NULL && sym->result != sym);
14499
14500 /* Make sure that the intrinsic is consistent with its internal
14501 representation. This needs to be done before assigning a default
14502 type to avoid spurious warnings. */
14503 if (sym->attr.flavor != FL_MODULE && sym->attr.intrinsic
14504 && !gfc_resolve_intrinsic (sym, &sym->declared_at))
14505 return;
14506
14507 /* Resolve associate names. */
14508 if (sym->assoc)
14509 resolve_assoc_var (sym, true);
14510
14511 /* Assign default type to symbols that need one and don't have one. */
14512 if (sym->ts.type == BT_UNKNOWN)
14513 {
14514 if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER)
14515 {
14516 gfc_set_default_type (sym, 1, NULL);
14517 }
14518
14519 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.external
14520 && !sym->attr.function && !sym->attr.subroutine
14521 && gfc_get_default_type (sym->name, sym->ns)->type == BT_UNKNOWN)
14522 gfc_add_subroutine (&sym->attr, sym->name, &sym->declared_at);
14523
14524 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.function)
14525 {
14526 /* The specific case of an external procedure should emit an error
14527 in the case that there is no implicit type. */
14528 if (!mp_flag)
14529 {
14530 if (!sym->attr.mixed_entry_master)
14531 gfc_set_default_type (sym, sym->attr.external, NULL);
14532 }
14533 else
14534 {
14535 /* Result may be in another namespace. */
14536 resolve_symbol (sym->result);
14537
14538 if (!sym->result->attr.proc_pointer)
14539 {
14540 sym->ts = sym->result->ts;
14541 sym->as = gfc_copy_array_spec (sym->result->as);
14542 sym->attr.dimension = sym->result->attr.dimension;
14543 sym->attr.pointer = sym->result->attr.pointer;
14544 sym->attr.allocatable = sym->result->attr.allocatable;
14545 sym->attr.contiguous = sym->result->attr.contiguous;
14546 }
14547 }
14548 }
14549 }
14550 else if (mp_flag && sym->attr.flavor == FL_PROCEDURE && sym->attr.function)
14551 {
14552 bool saved_specification_expr = specification_expr;
14553 specification_expr = true;
14554 gfc_resolve_array_spec (sym->result->as, false);
14555 specification_expr = saved_specification_expr;
14556 }
14557
14558 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
14559 {
14560 as = CLASS_DATA (sym)->as;
14561 class_attr = CLASS_DATA (sym)->attr;
14562 class_attr.pointer = class_attr.class_pointer;
14563 }
14564 else
14565 {
14566 class_attr = sym->attr;
14567 as = sym->as;
14568 }
14569
14570 /* F2008, C530. */
14571 if (sym->attr.contiguous
14572 && (!class_attr.dimension
14573 || (as->type != AS_ASSUMED_SHAPE && as->type != AS_ASSUMED_RANK
14574 && !class_attr.pointer)))
14575 {
14576 gfc_error ("%qs at %L has the CONTIGUOUS attribute but is not an "
14577 "array pointer or an assumed-shape or assumed-rank array",
14578 sym->name, &sym->declared_at);
14579 return;
14580 }
14581
14582 /* Assumed size arrays and assumed shape arrays must be dummy
14583 arguments. Array-spec's of implied-shape should have been resolved to
14584 AS_EXPLICIT already. */
14585
14586 if (as)
14587 {
14588 /* If AS_IMPLIED_SHAPE makes it to here, it must be a bad
14589 specification expression. */
14590 if (as->type == AS_IMPLIED_SHAPE)
14591 {
14592 int i;
14593 for (i=0; i<as->rank; i++)
14594 {
14595 if (as->lower[i] != NULL && as->upper[i] == NULL)
14596 {
14597 gfc_error ("Bad specification for assumed size array at %L",
14598 &as->lower[i]->where);
14599 return;
14600 }
14601 }
14602 gcc_unreachable();
14603 }
14604
14605 if (((as->type == AS_ASSUMED_SIZE && !as->cp_was_assumed)
14606 || as->type == AS_ASSUMED_SHAPE)
14607 && !sym->attr.dummy && !sym->attr.select_type_temporary)
14608 {
14609 if (as->type == AS_ASSUMED_SIZE)
14610 gfc_error ("Assumed size array at %L must be a dummy argument",
14611 &sym->declared_at);
14612 else
14613 gfc_error ("Assumed shape array at %L must be a dummy argument",
14614 &sym->declared_at);
14615 return;
14616 }
14617 /* TS 29113, C535a. */
14618 if (as->type == AS_ASSUMED_RANK && !sym->attr.dummy
14619 && !sym->attr.select_type_temporary)
14620 {
14621 gfc_error ("Assumed-rank array at %L must be a dummy argument",
14622 &sym->declared_at);
14623 return;
14624 }
14625 if (as->type == AS_ASSUMED_RANK
14626 && (sym->attr.codimension || sym->attr.value))
14627 {
14628 gfc_error ("Assumed-rank array at %L may not have the VALUE or "
14629 "CODIMENSION attribute", &sym->declared_at);
14630 return;
14631 }
14632 }
14633
14634 /* Make sure symbols with known intent or optional are really dummy
14635 variable. Because of ENTRY statement, this has to be deferred
14636 until resolution time. */
14637
14638 if (!sym->attr.dummy
14639 && (sym->attr.optional || sym->attr.intent != INTENT_UNKNOWN))
14640 {
14641 gfc_error ("Symbol at %L is not a DUMMY variable", &sym->declared_at);
14642 return;
14643 }
14644
14645 if (sym->attr.value && !sym->attr.dummy)
14646 {
14647 gfc_error ("%qs at %L cannot have the VALUE attribute because "
14648 "it is not a dummy argument", sym->name, &sym->declared_at);
14649 return;
14650 }
14651
14652 if (sym->attr.value && sym->ts.type == BT_CHARACTER)
14653 {
14654 gfc_charlen *cl = sym->ts.u.cl;
14655 if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
14656 {
14657 gfc_error ("Character dummy variable %qs at %L with VALUE "
14658 "attribute must have constant length",
14659 sym->name, &sym->declared_at);
14660 return;
14661 }
14662
14663 if (sym->ts.is_c_interop
14664 && mpz_cmp_si (cl->length->value.integer, 1) != 0)
14665 {
14666 gfc_error ("C interoperable character dummy variable %qs at %L "
14667 "with VALUE attribute must have length one",
14668 sym->name, &sym->declared_at);
14669 return;
14670 }
14671 }
14672
14673 if (sym->ts.type == BT_DERIVED && !sym->attr.is_iso_c
14674 && sym->ts.u.derived->attr.generic)
14675 {
14676 sym->ts.u.derived = gfc_find_dt_in_generic (sym->ts.u.derived);
14677 if (!sym->ts.u.derived)
14678 {
14679 gfc_error ("The derived type %qs at %L is of type %qs, "
14680 "which has not been defined", sym->name,
14681 &sym->declared_at, sym->ts.u.derived->name);
14682 sym->ts.type = BT_UNKNOWN;
14683 return;
14684 }
14685 }
14686
14687 /* Use the same constraints as TYPE(*), except for the type check
14688 and that only scalars and assumed-size arrays are permitted. */
14689 if (sym->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
14690 {
14691 if (!sym->attr.dummy)
14692 {
14693 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall be "
14694 "a dummy argument", sym->name, &sym->declared_at);
14695 return;
14696 }
14697
14698 if (sym->ts.type != BT_ASSUMED && sym->ts.type != BT_INTEGER
14699 && sym->ts.type != BT_REAL && sym->ts.type != BT_LOGICAL
14700 && sym->ts.type != BT_COMPLEX)
14701 {
14702 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall be "
14703 "of type TYPE(*) or of an numeric intrinsic type",
14704 sym->name, &sym->declared_at);
14705 return;
14706 }
14707
14708 if (sym->attr.allocatable || sym->attr.codimension
14709 || sym->attr.pointer || sym->attr.value)
14710 {
14711 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may not "
14712 "have the ALLOCATABLE, CODIMENSION, POINTER or VALUE "
14713 "attribute", sym->name, &sym->declared_at);
14714 return;
14715 }
14716
14717 if (sym->attr.intent == INTENT_OUT)
14718 {
14719 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute may not "
14720 "have the INTENT(OUT) attribute",
14721 sym->name, &sym->declared_at);
14722 return;
14723 }
14724 if (sym->attr.dimension && sym->as->type != AS_ASSUMED_SIZE)
14725 {
14726 gfc_error ("Variable %s at %L with NO_ARG_CHECK attribute shall "
14727 "either be a scalar or an assumed-size array",
14728 sym->name, &sym->declared_at);
14729 return;
14730 }
14731
14732 /* Set the type to TYPE(*) and add a dimension(*) to ensure
14733 NO_ARG_CHECK is correctly handled in trans*.c, e.g. with
14734 packing. */
14735 sym->ts.type = BT_ASSUMED;
14736 sym->as = gfc_get_array_spec ();
14737 sym->as->type = AS_ASSUMED_SIZE;
14738 sym->as->rank = 1;
14739 sym->as->lower[0] = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
14740 }
14741 else if (sym->ts.type == BT_ASSUMED)
14742 {
14743 /* TS 29113, C407a. */
14744 if (!sym->attr.dummy)
14745 {
14746 gfc_error ("Assumed type of variable %s at %L is only permitted "
14747 "for dummy variables", sym->name, &sym->declared_at);
14748 return;
14749 }
14750 if (sym->attr.allocatable || sym->attr.codimension
14751 || sym->attr.pointer || sym->attr.value)
14752 {
14753 gfc_error ("Assumed-type variable %s at %L may not have the "
14754 "ALLOCATABLE, CODIMENSION, POINTER or VALUE attribute",
14755 sym->name, &sym->declared_at);
14756 return;
14757 }
14758 if (sym->attr.intent == INTENT_OUT)
14759 {
14760 gfc_error ("Assumed-type variable %s at %L may not have the "
14761 "INTENT(OUT) attribute",
14762 sym->name, &sym->declared_at);
14763 return;
14764 }
14765 if (sym->attr.dimension && sym->as->type == AS_EXPLICIT)
14766 {
14767 gfc_error ("Assumed-type variable %s at %L shall not be an "
14768 "explicit-shape array", sym->name, &sym->declared_at);
14769 return;
14770 }
14771 }
14772
14773 /* If the symbol is marked as bind(c), that it is declared at module level
14774 scope and verify its type and kind. Do not do the latter for symbols
14775 that are implicitly typed because that is handled in
14776 gfc_set_default_type. Handle dummy arguments and procedure definitions
14777 separately. Also, anything that is use associated is not handled here
14778 but instead is handled in the module it is declared in. Finally, derived
14779 type definitions are allowed to be BIND(C) since that only implies that
14780 they're interoperable, and they are checked fully for interoperability
14781 when a variable is declared of that type. */
14782 if (sym->attr.is_bind_c && sym->attr.use_assoc == 0
14783 && sym->attr.dummy == 0 && sym->attr.flavor != FL_PROCEDURE
14784 && sym->attr.flavor != FL_DERIVED)
14785 {
14786 bool t = true;
14787
14788 /* First, make sure the variable is declared at the
14789 module-level scope (J3/04-007, Section 15.3). */
14790 if (sym->ns->proc_name->attr.flavor != FL_MODULE &&
14791 sym->attr.in_common == 0)
14792 {
14793 gfc_error ("Variable %qs at %L cannot be BIND(C) because it "
14794 "is neither a COMMON block nor declared at the "
14795 "module level scope", sym->name, &(sym->declared_at));
14796 t = false;
14797 }
14798 else if (sym->common_head != NULL && sym->attr.implicit_type == 0)
14799 {
14800 t = verify_com_block_vars_c_interop (sym->common_head);
14801 }
14802 else if (sym->attr.implicit_type == 0)
14803 {
14804 /* If type() declaration, we need to verify that the components
14805 of the given type are all C interoperable, etc. */
14806 if (sym->ts.type == BT_DERIVED &&
14807 sym->ts.u.derived->attr.is_c_interop != 1)
14808 {
14809 /* Make sure the user marked the derived type as BIND(C). If
14810 not, call the verify routine. This could print an error
14811 for the derived type more than once if multiple variables
14812 of that type are declared. */
14813 if (sym->ts.u.derived->attr.is_bind_c != 1)
14814 verify_bind_c_derived_type (sym->ts.u.derived);
14815 t = false;
14816 }
14817
14818 /* Verify the variable itself as C interoperable if it
14819 is BIND(C). It is not possible for this to succeed if
14820 the verify_bind_c_derived_type failed, so don't have to handle
14821 any error returned by verify_bind_c_derived_type. */
14822 t = verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common,
14823 sym->common_block);
14824 }
14825
14826 if (!t)
14827 {
14828 /* clear the is_bind_c flag to prevent reporting errors more than
14829 once if something failed. */
14830 sym->attr.is_bind_c = 0;
14831 return;
14832 }
14833 }
14834
14835 /* If a derived type symbol has reached this point, without its
14836 type being declared, we have an error. Notice that most
14837 conditions that produce undefined derived types have already
14838 been dealt with. However, the likes of:
14839 implicit type(t) (t) ..... call foo (t) will get us here if
14840 the type is not declared in the scope of the implicit
14841 statement. Change the type to BT_UNKNOWN, both because it is so
14842 and to prevent an ICE. */
14843 if (sym->ts.type == BT_DERIVED && !sym->attr.is_iso_c
14844 && sym->ts.u.derived->components == NULL
14845 && !sym->ts.u.derived->attr.zero_comp)
14846 {
14847 gfc_error ("The derived type %qs at %L is of type %qs, "
14848 "which has not been defined", sym->name,
14849 &sym->declared_at, sym->ts.u.derived->name);
14850 sym->ts.type = BT_UNKNOWN;
14851 return;
14852 }
14853
14854 /* Make sure that the derived type has been resolved and that the
14855 derived type is visible in the symbol's namespace, if it is a
14856 module function and is not PRIVATE. */
14857 if (sym->ts.type == BT_DERIVED
14858 && sym->ts.u.derived->attr.use_assoc
14859 && sym->ns->proc_name
14860 && sym->ns->proc_name->attr.flavor == FL_MODULE
14861 && !resolve_fl_derived (sym->ts.u.derived))
14862 return;
14863
14864 /* Unless the derived-type declaration is use associated, Fortran 95
14865 does not allow public entries of private derived types.
14866 See 4.4.1 (F95) and 4.5.1.1 (F2003); and related interpretation
14867 161 in 95-006r3. */
14868 if (sym->ts.type == BT_DERIVED
14869 && sym->ns->proc_name && sym->ns->proc_name->attr.flavor == FL_MODULE
14870 && !sym->ts.u.derived->attr.use_assoc
14871 && gfc_check_symbol_access (sym)
14872 && !gfc_check_symbol_access (sym->ts.u.derived)
14873 && !gfc_notify_std (GFC_STD_F2003, "PUBLIC %s %qs at %L of PRIVATE "
14874 "derived type %qs",
14875 (sym->attr.flavor == FL_PARAMETER)
14876 ? "parameter" : "variable",
14877 sym->name, &sym->declared_at,
14878 sym->ts.u.derived->name))
14879 return;
14880
14881 /* F2008, C1302. */
14882 if (sym->ts.type == BT_DERIVED
14883 && ((sym->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
14884 && sym->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)
14885 || sym->ts.u.derived->attr.lock_comp)
14886 && !sym->attr.codimension && !sym->ts.u.derived->attr.coarray_comp)
14887 {
14888 gfc_error ("Variable %s at %L of type LOCK_TYPE or with subcomponent of "
14889 "type LOCK_TYPE must be a coarray", sym->name,
14890 &sym->declared_at);
14891 return;
14892 }
14893
14894 /* TS18508, C702/C703. */
14895 if (sym->ts.type == BT_DERIVED
14896 && ((sym->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
14897 && sym->ts.u.derived->intmod_sym_id == ISOFORTRAN_EVENT_TYPE)
14898 || sym->ts.u.derived->attr.event_comp)
14899 && !sym->attr.codimension && !sym->ts.u.derived->attr.coarray_comp)
14900 {
14901 gfc_error ("Variable %s at %L of type EVENT_TYPE or with subcomponent of "
14902 "type EVENT_TYPE must be a coarray", sym->name,
14903 &sym->declared_at);
14904 return;
14905 }
14906
14907 /* An assumed-size array with INTENT(OUT) shall not be of a type for which
14908 default initialization is defined (5.1.2.4.4). */
14909 if (sym->ts.type == BT_DERIVED
14910 && sym->attr.dummy
14911 && sym->attr.intent == INTENT_OUT
14912 && sym->as
14913 && sym->as->type == AS_ASSUMED_SIZE)
14914 {
14915 for (c = sym->ts.u.derived->components; c; c = c->next)
14916 {
14917 if (c->initializer)
14918 {
14919 gfc_error ("The INTENT(OUT) dummy argument %qs at %L is "
14920 "ASSUMED SIZE and so cannot have a default initializer",
14921 sym->name, &sym->declared_at);
14922 return;
14923 }
14924 }
14925 }
14926
14927 /* F2008, C542. */
14928 if (sym->ts.type == BT_DERIVED && sym->attr.dummy
14929 && sym->attr.intent == INTENT_OUT && sym->attr.lock_comp)
14930 {
14931 gfc_error ("Dummy argument %qs at %L of LOCK_TYPE shall not be "
14932 "INTENT(OUT)", sym->name, &sym->declared_at);
14933 return;
14934 }
14935
14936 /* TS18508. */
14937 if (sym->ts.type == BT_DERIVED && sym->attr.dummy
14938 && sym->attr.intent == INTENT_OUT && sym->attr.event_comp)
14939 {
14940 gfc_error ("Dummy argument %qs at %L of EVENT_TYPE shall not be "
14941 "INTENT(OUT)", sym->name, &sym->declared_at);
14942 return;
14943 }
14944
14945 /* F2008, C525. */
14946 if ((((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
14947 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
14948 && CLASS_DATA (sym)->attr.coarray_comp))
14949 || class_attr.codimension)
14950 && (sym->attr.result || sym->result == sym))
14951 {
14952 gfc_error ("Function result %qs at %L shall not be a coarray or have "
14953 "a coarray component", sym->name, &sym->declared_at);
14954 return;
14955 }
14956
14957 /* F2008, C524. */
14958 if (sym->attr.codimension && sym->ts.type == BT_DERIVED
14959 && sym->ts.u.derived->ts.is_iso_c)
14960 {
14961 gfc_error ("Variable %qs at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) "
14962 "shall not be a coarray", sym->name, &sym->declared_at);
14963 return;
14964 }
14965
14966 /* F2008, C525. */
14967 if (((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
14968 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
14969 && CLASS_DATA (sym)->attr.coarray_comp))
14970 && (class_attr.codimension || class_attr.pointer || class_attr.dimension
14971 || class_attr.allocatable))
14972 {
14973 gfc_error ("Variable %qs at %L with coarray component shall be a "
14974 "nonpointer, nonallocatable scalar, which is not a coarray",
14975 sym->name, &sym->declared_at);
14976 return;
14977 }
14978
14979 /* F2008, C526. The function-result case was handled above. */
14980 if (class_attr.codimension
14981 && !(class_attr.allocatable || sym->attr.dummy || sym->attr.save
14982 || sym->attr.select_type_temporary
14983 || sym->attr.associate_var
14984 || (sym->ns->save_all && !sym->attr.automatic)
14985 || sym->ns->proc_name->attr.flavor == FL_MODULE
14986 || sym->ns->proc_name->attr.is_main_program
14987 || sym->attr.function || sym->attr.result || sym->attr.use_assoc))
14988 {
14989 gfc_error ("Variable %qs at %L is a coarray and is not ALLOCATABLE, SAVE "
14990 "nor a dummy argument", sym->name, &sym->declared_at);
14991 return;
14992 }
14993 /* F2008, C528. */
14994 else if (class_attr.codimension && !sym->attr.select_type_temporary
14995 && !class_attr.allocatable && as && as->cotype == AS_DEFERRED)
14996 {
14997 gfc_error ("Coarray variable %qs at %L shall not have codimensions with "
14998 "deferred shape", sym->name, &sym->declared_at);
14999 return;
15000 }
15001 else if (class_attr.codimension && class_attr.allocatable && as
15002 && (as->cotype != AS_DEFERRED || as->type != AS_DEFERRED))
15003 {
15004 gfc_error ("Allocatable coarray variable %qs at %L must have "
15005 "deferred shape", sym->name, &sym->declared_at);
15006 return;
15007 }
15008
15009 /* F2008, C541. */
15010 if ((((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.coarray_comp)
15011 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
15012 && CLASS_DATA (sym)->attr.coarray_comp))
15013 || (class_attr.codimension && class_attr.allocatable))
15014 && sym->attr.dummy && sym->attr.intent == INTENT_OUT)
15015 {
15016 gfc_error ("Variable %qs at %L is INTENT(OUT) and can thus not be an "
15017 "allocatable coarray or have coarray components",
15018 sym->name, &sym->declared_at);
15019 return;
15020 }
15021
15022 if (class_attr.codimension && sym->attr.dummy
15023 && sym->ns->proc_name && sym->ns->proc_name->attr.is_bind_c)
15024 {
15025 gfc_error ("Coarray dummy variable %qs at %L not allowed in BIND(C) "
15026 "procedure %qs", sym->name, &sym->declared_at,
15027 sym->ns->proc_name->name);
15028 return;
15029 }
15030
15031 if (sym->ts.type == BT_LOGICAL
15032 && ((sym->attr.function && sym->attr.is_bind_c && sym->result == sym)
15033 || ((sym->attr.dummy || sym->attr.result) && sym->ns->proc_name
15034 && sym->ns->proc_name->attr.is_bind_c)))
15035 {
15036 int i;
15037 for (i = 0; gfc_logical_kinds[i].kind; i++)
15038 if (gfc_logical_kinds[i].kind == sym->ts.kind)
15039 break;
15040 if (!gfc_logical_kinds[i].c_bool && sym->attr.dummy
15041 && !gfc_notify_std (GFC_STD_GNU, "LOGICAL dummy argument %qs at "
15042 "%L with non-C_Bool kind in BIND(C) procedure "
15043 "%qs", sym->name, &sym->declared_at,
15044 sym->ns->proc_name->name))
15045 return;
15046 else if (!gfc_logical_kinds[i].c_bool
15047 && !gfc_notify_std (GFC_STD_GNU, "LOGICAL result variable "
15048 "%qs at %L with non-C_Bool kind in "
15049 "BIND(C) procedure %qs", sym->name,
15050 &sym->declared_at,
15051 sym->attr.function ? sym->name
15052 : sym->ns->proc_name->name))
15053 return;
15054 }
15055
15056 switch (sym->attr.flavor)
15057 {
15058 case FL_VARIABLE:
15059 if (!resolve_fl_variable (sym, mp_flag))
15060 return;
15061 break;
15062
15063 case FL_PROCEDURE:
15064 if (sym->formal && !sym->formal_ns)
15065 {
15066 /* Check that none of the arguments are a namelist. */
15067 gfc_formal_arglist *formal = sym->formal;
15068
15069 for (; formal; formal = formal->next)
15070 if (formal->sym && formal->sym->attr.flavor == FL_NAMELIST)
15071 {
15072 gfc_error ("Namelist %qs can not be an argument to "
15073 "subroutine or function at %L",
15074 formal->sym->name, &sym->declared_at);
15075 return;
15076 }
15077 }
15078
15079 if (!resolve_fl_procedure (sym, mp_flag))
15080 return;
15081 break;
15082
15083 case FL_NAMELIST:
15084 if (!resolve_fl_namelist (sym))
15085 return;
15086 break;
15087
15088 case FL_PARAMETER:
15089 if (!resolve_fl_parameter (sym))
15090 return;
15091 break;
15092
15093 default:
15094 break;
15095 }
15096
15097 /* Resolve array specifier. Check as well some constraints
15098 on COMMON blocks. */
15099
15100 check_constant = sym->attr.in_common && !sym->attr.pointer;
15101
15102 /* Set the formal_arg_flag so that check_conflict will not throw
15103 an error for host associated variables in the specification
15104 expression for an array_valued function. */
15105 if (sym->attr.function && sym->as)
15106 formal_arg_flag = true;
15107
15108 saved_specification_expr = specification_expr;
15109 specification_expr = true;
15110 gfc_resolve_array_spec (sym->as, check_constant);
15111 specification_expr = saved_specification_expr;
15112
15113 formal_arg_flag = false;
15114
15115 /* Resolve formal namespaces. */
15116 if (sym->formal_ns && sym->formal_ns != gfc_current_ns
15117 && !sym->attr.contained && !sym->attr.intrinsic)
15118 gfc_resolve (sym->formal_ns);
15119
15120 /* Make sure the formal namespace is present. */
15121 if (sym->formal && !sym->formal_ns)
15122 {
15123 gfc_formal_arglist *formal = sym->formal;
15124 while (formal && !formal->sym)
15125 formal = formal->next;
15126
15127 if (formal)
15128 {
15129 sym->formal_ns = formal->sym->ns;
15130 if (sym->ns != formal->sym->ns)
15131 sym->formal_ns->refs++;
15132 }
15133 }
15134
15135 /* Check threadprivate restrictions. */
15136 if (sym->attr.threadprivate && !sym->attr.save
15137 && !(sym->ns->save_all && !sym->attr.automatic)
15138 && (!sym->attr.in_common
15139 && sym->module == NULL
15140 && (sym->ns->proc_name == NULL
15141 || sym->ns->proc_name->attr.flavor != FL_MODULE)))
15142 gfc_error ("Threadprivate at %L isn't SAVEd", &sym->declared_at);
15143
15144 /* Check omp declare target restrictions. */
15145 if (sym->attr.omp_declare_target
15146 && sym->attr.flavor == FL_VARIABLE
15147 && !sym->attr.save
15148 && !(sym->ns->save_all && !sym->attr.automatic)
15149 && (!sym->attr.in_common
15150 && sym->module == NULL
15151 && (sym->ns->proc_name == NULL
15152 || sym->ns->proc_name->attr.flavor != FL_MODULE)))
15153 gfc_error ("!$OMP DECLARE TARGET variable %qs at %L isn't SAVEd",
15154 sym->name, &sym->declared_at);
15155
15156 /* If we have come this far we can apply default-initializers, as
15157 described in 14.7.5, to those variables that have not already
15158 been assigned one. */
15159 if (sym->ts.type == BT_DERIVED
15160 && !sym->value
15161 && !sym->attr.allocatable
15162 && !sym->attr.alloc_comp)
15163 {
15164 symbol_attribute *a = &sym->attr;
15165
15166 if ((!a->save && !a->dummy && !a->pointer
15167 && !a->in_common && !a->use_assoc
15168 && a->referenced
15169 && !((a->function || a->result)
15170 && (!a->dimension
15171 || sym->ts.u.derived->attr.alloc_comp
15172 || sym->ts.u.derived->attr.pointer_comp))
15173 && !(a->function && sym != sym->result))
15174 || (a->dummy && a->intent == INTENT_OUT && !a->pointer))
15175 apply_default_init (sym);
15176 else if (a->function && sym->result && a->access != ACCESS_PRIVATE
15177 && (sym->ts.u.derived->attr.alloc_comp
15178 || sym->ts.u.derived->attr.pointer_comp))
15179 /* Mark the result symbol to be referenced, when it has allocatable
15180 components. */
15181 sym->result->attr.referenced = 1;
15182 }
15183
15184 if (sym->ts.type == BT_CLASS && sym->ns == gfc_current_ns
15185 && sym->attr.dummy && sym->attr.intent == INTENT_OUT
15186 && !CLASS_DATA (sym)->attr.class_pointer
15187 && !CLASS_DATA (sym)->attr.allocatable)
15188 apply_default_init (sym);
15189
15190 /* If this symbol has a type-spec, check it. */
15191 if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER
15192 || (sym->attr.flavor == FL_PROCEDURE && sym->attr.function))
15193 if (!resolve_typespec_used (&sym->ts, &sym->declared_at, sym->name))
15194 return;
15195
15196 if (sym->param_list)
15197 resolve_pdt (sym);
15198 }
15199
15200
15201 /************* Resolve DATA statements *************/
15202
15203 static struct
15204 {
15205 gfc_data_value *vnode;
15206 mpz_t left;
15207 }
15208 values;
15209
15210
15211 /* Advance the values structure to point to the next value in the data list. */
15212
15213 static bool
15214 next_data_value (void)
15215 {
15216 while (mpz_cmp_ui (values.left, 0) == 0)
15217 {
15218
15219 if (values.vnode->next == NULL)
15220 return false;
15221
15222 values.vnode = values.vnode->next;
15223 mpz_set (values.left, values.vnode->repeat);
15224 }
15225
15226 return true;
15227 }
15228
15229
15230 static bool
15231 check_data_variable (gfc_data_variable *var, locus *where)
15232 {
15233 gfc_expr *e;
15234 mpz_t size;
15235 mpz_t offset;
15236 bool t;
15237 ar_type mark = AR_UNKNOWN;
15238 int i;
15239 mpz_t section_index[GFC_MAX_DIMENSIONS];
15240 gfc_ref *ref;
15241 gfc_array_ref *ar;
15242 gfc_symbol *sym;
15243 int has_pointer;
15244
15245 if (!gfc_resolve_expr (var->expr))
15246 return false;
15247
15248 ar = NULL;
15249 mpz_init_set_si (offset, 0);
15250 e = var->expr;
15251
15252 if (e->expr_type == EXPR_FUNCTION && e->value.function.isym
15253 && e->value.function.isym->id == GFC_ISYM_CAF_GET)
15254 e = e->value.function.actual->expr;
15255
15256 if (e->expr_type != EXPR_VARIABLE)
15257 gfc_internal_error ("check_data_variable(): Bad expression");
15258
15259 sym = e->symtree->n.sym;
15260
15261 if (sym->ns->is_block_data && !sym->attr.in_common)
15262 {
15263 gfc_error ("BLOCK DATA element %qs at %L must be in COMMON",
15264 sym->name, &sym->declared_at);
15265 }
15266
15267 if (e->ref == NULL && sym->as)
15268 {
15269 gfc_error ("DATA array %qs at %L must be specified in a previous"
15270 " declaration", sym->name, where);
15271 return false;
15272 }
15273
15274 has_pointer = sym->attr.pointer;
15275
15276 if (gfc_is_coindexed (e))
15277 {
15278 gfc_error ("DATA element %qs at %L cannot have a coindex", sym->name,
15279 where);
15280 return false;
15281 }
15282
15283 for (ref = e->ref; ref; ref = ref->next)
15284 {
15285 if (ref->type == REF_COMPONENT && ref->u.c.component->attr.pointer)
15286 has_pointer = 1;
15287
15288 if (has_pointer
15289 && ref->type == REF_ARRAY
15290 && ref->u.ar.type != AR_FULL)
15291 {
15292 gfc_error ("DATA element %qs at %L is a pointer and so must "
15293 "be a full array", sym->name, where);
15294 return false;
15295 }
15296 }
15297
15298 if (e->rank == 0 || has_pointer)
15299 {
15300 mpz_init_set_ui (size, 1);
15301 ref = NULL;
15302 }
15303 else
15304 {
15305 ref = e->ref;
15306
15307 /* Find the array section reference. */
15308 for (ref = e->ref; ref; ref = ref->next)
15309 {
15310 if (ref->type != REF_ARRAY)
15311 continue;
15312 if (ref->u.ar.type == AR_ELEMENT)
15313 continue;
15314 break;
15315 }
15316 gcc_assert (ref);
15317
15318 /* Set marks according to the reference pattern. */
15319 switch (ref->u.ar.type)
15320 {
15321 case AR_FULL:
15322 mark = AR_FULL;
15323 break;
15324
15325 case AR_SECTION:
15326 ar = &ref->u.ar;
15327 /* Get the start position of array section. */
15328 gfc_get_section_index (ar, section_index, &offset);
15329 mark = AR_SECTION;
15330 break;
15331
15332 default:
15333 gcc_unreachable ();
15334 }
15335
15336 if (!gfc_array_size (e, &size))
15337 {
15338 gfc_error ("Nonconstant array section at %L in DATA statement",
15339 where);
15340 mpz_clear (offset);
15341 return false;
15342 }
15343 }
15344
15345 t = true;
15346
15347 while (mpz_cmp_ui (size, 0) > 0)
15348 {
15349 if (!next_data_value ())
15350 {
15351 gfc_error ("DATA statement at %L has more variables than values",
15352 where);
15353 t = false;
15354 break;
15355 }
15356
15357 t = gfc_check_assign (var->expr, values.vnode->expr, 0);
15358 if (!t)
15359 break;
15360
15361 /* If we have more than one element left in the repeat count,
15362 and we have more than one element left in the target variable,
15363 then create a range assignment. */
15364 /* FIXME: Only done for full arrays for now, since array sections
15365 seem tricky. */
15366 if (mark == AR_FULL && ref && ref->next == NULL
15367 && mpz_cmp_ui (values.left, 1) > 0 && mpz_cmp_ui (size, 1) > 0)
15368 {
15369 mpz_t range;
15370
15371 if (mpz_cmp (size, values.left) >= 0)
15372 {
15373 mpz_init_set (range, values.left);
15374 mpz_sub (size, size, values.left);
15375 mpz_set_ui (values.left, 0);
15376 }
15377 else
15378 {
15379 mpz_init_set (range, size);
15380 mpz_sub (values.left, values.left, size);
15381 mpz_set_ui (size, 0);
15382 }
15383
15384 t = gfc_assign_data_value (var->expr, values.vnode->expr,
15385 offset, &range);
15386
15387 mpz_add (offset, offset, range);
15388 mpz_clear (range);
15389
15390 if (!t)
15391 break;
15392 }
15393
15394 /* Assign initial value to symbol. */
15395 else
15396 {
15397 mpz_sub_ui (values.left, values.left, 1);
15398 mpz_sub_ui (size, size, 1);
15399
15400 t = gfc_assign_data_value (var->expr, values.vnode->expr,
15401 offset, NULL);
15402 if (!t)
15403 break;
15404
15405 if (mark == AR_FULL)
15406 mpz_add_ui (offset, offset, 1);
15407
15408 /* Modify the array section indexes and recalculate the offset
15409 for next element. */
15410 else if (mark == AR_SECTION)
15411 gfc_advance_section (section_index, ar, &offset);
15412 }
15413 }
15414
15415 if (mark == AR_SECTION)
15416 {
15417 for (i = 0; i < ar->dimen; i++)
15418 mpz_clear (section_index[i]);
15419 }
15420
15421 mpz_clear (size);
15422 mpz_clear (offset);
15423
15424 return t;
15425 }
15426
15427
15428 static bool traverse_data_var (gfc_data_variable *, locus *);
15429
15430 /* Iterate over a list of elements in a DATA statement. */
15431
15432 static bool
15433 traverse_data_list (gfc_data_variable *var, locus *where)
15434 {
15435 mpz_t trip;
15436 iterator_stack frame;
15437 gfc_expr *e, *start, *end, *step;
15438 bool retval = true;
15439
15440 mpz_init (frame.value);
15441 mpz_init (trip);
15442
15443 start = gfc_copy_expr (var->iter.start);
15444 end = gfc_copy_expr (var->iter.end);
15445 step = gfc_copy_expr (var->iter.step);
15446
15447 if (!gfc_simplify_expr (start, 1)
15448 || start->expr_type != EXPR_CONSTANT)
15449 {
15450 gfc_error ("start of implied-do loop at %L could not be "
15451 "simplified to a constant value", &start->where);
15452 retval = false;
15453 goto cleanup;
15454 }
15455 if (!gfc_simplify_expr (end, 1)
15456 || end->expr_type != EXPR_CONSTANT)
15457 {
15458 gfc_error ("end of implied-do loop at %L could not be "
15459 "simplified to a constant value", &start->where);
15460 retval = false;
15461 goto cleanup;
15462 }
15463 if (!gfc_simplify_expr (step, 1)
15464 || step->expr_type != EXPR_CONSTANT)
15465 {
15466 gfc_error ("step of implied-do loop at %L could not be "
15467 "simplified to a constant value", &start->where);
15468 retval = false;
15469 goto cleanup;
15470 }
15471
15472 mpz_set (trip, end->value.integer);
15473 mpz_sub (trip, trip, start->value.integer);
15474 mpz_add (trip, trip, step->value.integer);
15475
15476 mpz_div (trip, trip, step->value.integer);
15477
15478 mpz_set (frame.value, start->value.integer);
15479
15480 frame.prev = iter_stack;
15481 frame.variable = var->iter.var->symtree;
15482 iter_stack = &frame;
15483
15484 while (mpz_cmp_ui (trip, 0) > 0)
15485 {
15486 if (!traverse_data_var (var->list, where))
15487 {
15488 retval = false;
15489 goto cleanup;
15490 }
15491
15492 e = gfc_copy_expr (var->expr);
15493 if (!gfc_simplify_expr (e, 1))
15494 {
15495 gfc_free_expr (e);
15496 retval = false;
15497 goto cleanup;
15498 }
15499
15500 mpz_add (frame.value, frame.value, step->value.integer);
15501
15502 mpz_sub_ui (trip, trip, 1);
15503 }
15504
15505 cleanup:
15506 mpz_clear (frame.value);
15507 mpz_clear (trip);
15508
15509 gfc_free_expr (start);
15510 gfc_free_expr (end);
15511 gfc_free_expr (step);
15512
15513 iter_stack = frame.prev;
15514 return retval;
15515 }
15516
15517
15518 /* Type resolve variables in the variable list of a DATA statement. */
15519
15520 static bool
15521 traverse_data_var (gfc_data_variable *var, locus *where)
15522 {
15523 bool t;
15524
15525 for (; var; var = var->next)
15526 {
15527 if (var->expr == NULL)
15528 t = traverse_data_list (var, where);
15529 else
15530 t = check_data_variable (var, where);
15531
15532 if (!t)
15533 return false;
15534 }
15535
15536 return true;
15537 }
15538
15539
15540 /* Resolve the expressions and iterators associated with a data statement.
15541 This is separate from the assignment checking because data lists should
15542 only be resolved once. */
15543
15544 static bool
15545 resolve_data_variables (gfc_data_variable *d)
15546 {
15547 for (; d; d = d->next)
15548 {
15549 if (d->list == NULL)
15550 {
15551 if (!gfc_resolve_expr (d->expr))
15552 return false;
15553 }
15554 else
15555 {
15556 if (!gfc_resolve_iterator (&d->iter, false, true))
15557 return false;
15558
15559 if (!resolve_data_variables (d->list))
15560 return false;
15561 }
15562 }
15563
15564 return true;
15565 }
15566
15567
15568 /* Resolve a single DATA statement. We implement this by storing a pointer to
15569 the value list into static variables, and then recursively traversing the
15570 variables list, expanding iterators and such. */
15571
15572 static void
15573 resolve_data (gfc_data *d)
15574 {
15575
15576 if (!resolve_data_variables (d->var))
15577 return;
15578
15579 values.vnode = d->value;
15580 if (d->value == NULL)
15581 mpz_set_ui (values.left, 0);
15582 else
15583 mpz_set (values.left, d->value->repeat);
15584
15585 if (!traverse_data_var (d->var, &d->where))
15586 return;
15587
15588 /* At this point, we better not have any values left. */
15589
15590 if (next_data_value ())
15591 gfc_error ("DATA statement at %L has more values than variables",
15592 &d->where);
15593 }
15594
15595
15596 /* 12.6 Constraint: In a pure subprogram any variable which is in common or
15597 accessed by host or use association, is a dummy argument to a pure function,
15598 is a dummy argument with INTENT (IN) to a pure subroutine, or an object that
15599 is storage associated with any such variable, shall not be used in the
15600 following contexts: (clients of this function). */
15601
15602 /* Determines if a variable is not 'pure', i.e., not assignable within a pure
15603 procedure. Returns zero if assignment is OK, nonzero if there is a
15604 problem. */
15605 int
15606 gfc_impure_variable (gfc_symbol *sym)
15607 {
15608 gfc_symbol *proc;
15609 gfc_namespace *ns;
15610
15611 if (sym->attr.use_assoc || sym->attr.in_common)
15612 return 1;
15613
15614 /* Check if the symbol's ns is inside the pure procedure. */
15615 for (ns = gfc_current_ns; ns; ns = ns->parent)
15616 {
15617 if (ns == sym->ns)
15618 break;
15619 if (ns->proc_name->attr.flavor == FL_PROCEDURE && !sym->attr.function)
15620 return 1;
15621 }
15622
15623 proc = sym->ns->proc_name;
15624 if (sym->attr.dummy
15625 && ((proc->attr.subroutine && sym->attr.intent == INTENT_IN)
15626 || proc->attr.function))
15627 return 1;
15628
15629 /* TODO: Sort out what can be storage associated, if anything, and include
15630 it here. In principle equivalences should be scanned but it does not
15631 seem to be possible to storage associate an impure variable this way. */
15632 return 0;
15633 }
15634
15635
15636 /* Test whether a symbol is pure or not. For a NULL pointer, checks if the
15637 current namespace is inside a pure procedure. */
15638
15639 int
15640 gfc_pure (gfc_symbol *sym)
15641 {
15642 symbol_attribute attr;
15643 gfc_namespace *ns;
15644
15645 if (sym == NULL)
15646 {
15647 /* Check if the current namespace or one of its parents
15648 belongs to a pure procedure. */
15649 for (ns = gfc_current_ns; ns; ns = ns->parent)
15650 {
15651 sym = ns->proc_name;
15652 if (sym == NULL)
15653 return 0;
15654 attr = sym->attr;
15655 if (attr.flavor == FL_PROCEDURE && attr.pure)
15656 return 1;
15657 }
15658 return 0;
15659 }
15660
15661 attr = sym->attr;
15662
15663 return attr.flavor == FL_PROCEDURE && attr.pure;
15664 }
15665
15666
15667 /* Test whether a symbol is implicitly pure or not. For a NULL pointer,
15668 checks if the current namespace is implicitly pure. Note that this
15669 function returns false for a PURE procedure. */
15670
15671 int
15672 gfc_implicit_pure (gfc_symbol *sym)
15673 {
15674 gfc_namespace *ns;
15675
15676 if (sym == NULL)
15677 {
15678 /* Check if the current procedure is implicit_pure. Walk up
15679 the procedure list until we find a procedure. */
15680 for (ns = gfc_current_ns; ns; ns = ns->parent)
15681 {
15682 sym = ns->proc_name;
15683 if (sym == NULL)
15684 return 0;
15685
15686 if (sym->attr.flavor == FL_PROCEDURE)
15687 break;
15688 }
15689 }
15690
15691 return sym->attr.flavor == FL_PROCEDURE && sym->attr.implicit_pure
15692 && !sym->attr.pure;
15693 }
15694
15695
15696 void
15697 gfc_unset_implicit_pure (gfc_symbol *sym)
15698 {
15699 gfc_namespace *ns;
15700
15701 if (sym == NULL)
15702 {
15703 /* Check if the current procedure is implicit_pure. Walk up
15704 the procedure list until we find a procedure. */
15705 for (ns = gfc_current_ns; ns; ns = ns->parent)
15706 {
15707 sym = ns->proc_name;
15708 if (sym == NULL)
15709 return;
15710
15711 if (sym->attr.flavor == FL_PROCEDURE)
15712 break;
15713 }
15714 }
15715
15716 if (sym->attr.flavor == FL_PROCEDURE)
15717 sym->attr.implicit_pure = 0;
15718 else
15719 sym->attr.pure = 0;
15720 }
15721
15722
15723 /* Test whether the current procedure is elemental or not. */
15724
15725 int
15726 gfc_elemental (gfc_symbol *sym)
15727 {
15728 symbol_attribute attr;
15729
15730 if (sym == NULL)
15731 sym = gfc_current_ns->proc_name;
15732 if (sym == NULL)
15733 return 0;
15734 attr = sym->attr;
15735
15736 return attr.flavor == FL_PROCEDURE && attr.elemental;
15737 }
15738
15739
15740 /* Warn about unused labels. */
15741
15742 static void
15743 warn_unused_fortran_label (gfc_st_label *label)
15744 {
15745 if (label == NULL)
15746 return;
15747
15748 warn_unused_fortran_label (label->left);
15749
15750 if (label->defined == ST_LABEL_UNKNOWN)
15751 return;
15752
15753 switch (label->referenced)
15754 {
15755 case ST_LABEL_UNKNOWN:
15756 gfc_warning (OPT_Wunused_label, "Label %d at %L defined but not used",
15757 label->value, &label->where);
15758 break;
15759
15760 case ST_LABEL_BAD_TARGET:
15761 gfc_warning (OPT_Wunused_label,
15762 "Label %d at %L defined but cannot be used",
15763 label->value, &label->where);
15764 break;
15765
15766 default:
15767 break;
15768 }
15769
15770 warn_unused_fortran_label (label->right);
15771 }
15772
15773
15774 /* Returns the sequence type of a symbol or sequence. */
15775
15776 static seq_type
15777 sequence_type (gfc_typespec ts)
15778 {
15779 seq_type result;
15780 gfc_component *c;
15781
15782 switch (ts.type)
15783 {
15784 case BT_DERIVED:
15785
15786 if (ts.u.derived->components == NULL)
15787 return SEQ_NONDEFAULT;
15788
15789 result = sequence_type (ts.u.derived->components->ts);
15790 for (c = ts.u.derived->components->next; c; c = c->next)
15791 if (sequence_type (c->ts) != result)
15792 return SEQ_MIXED;
15793
15794 return result;
15795
15796 case BT_CHARACTER:
15797 if (ts.kind != gfc_default_character_kind)
15798 return SEQ_NONDEFAULT;
15799
15800 return SEQ_CHARACTER;
15801
15802 case BT_INTEGER:
15803 if (ts.kind != gfc_default_integer_kind)
15804 return SEQ_NONDEFAULT;
15805
15806 return SEQ_NUMERIC;
15807
15808 case BT_REAL:
15809 if (!(ts.kind == gfc_default_real_kind
15810 || ts.kind == gfc_default_double_kind))
15811 return SEQ_NONDEFAULT;
15812
15813 return SEQ_NUMERIC;
15814
15815 case BT_COMPLEX:
15816 if (ts.kind != gfc_default_complex_kind)
15817 return SEQ_NONDEFAULT;
15818
15819 return SEQ_NUMERIC;
15820
15821 case BT_LOGICAL:
15822 if (ts.kind != gfc_default_logical_kind)
15823 return SEQ_NONDEFAULT;
15824
15825 return SEQ_NUMERIC;
15826
15827 default:
15828 return SEQ_NONDEFAULT;
15829 }
15830 }
15831
15832
15833 /* Resolve derived type EQUIVALENCE object. */
15834
15835 static bool
15836 resolve_equivalence_derived (gfc_symbol *derived, gfc_symbol *sym, gfc_expr *e)
15837 {
15838 gfc_component *c = derived->components;
15839
15840 if (!derived)
15841 return true;
15842
15843 /* Shall not be an object of nonsequence derived type. */
15844 if (!derived->attr.sequence)
15845 {
15846 gfc_error ("Derived type variable %qs at %L must have SEQUENCE "
15847 "attribute to be an EQUIVALENCE object", sym->name,
15848 &e->where);
15849 return false;
15850 }
15851
15852 /* Shall not have allocatable components. */
15853 if (derived->attr.alloc_comp)
15854 {
15855 gfc_error ("Derived type variable %qs at %L cannot have ALLOCATABLE "
15856 "components to be an EQUIVALENCE object",sym->name,
15857 &e->where);
15858 return false;
15859 }
15860
15861 if (sym->attr.in_common && gfc_has_default_initializer (sym->ts.u.derived))
15862 {
15863 gfc_error ("Derived type variable %qs at %L with default "
15864 "initialization cannot be in EQUIVALENCE with a variable "
15865 "in COMMON", sym->name, &e->where);
15866 return false;
15867 }
15868
15869 for (; c ; c = c->next)
15870 {
15871 if (gfc_bt_struct (c->ts.type)
15872 && (!resolve_equivalence_derived(c->ts.u.derived, sym, e)))
15873 return false;
15874
15875 /* Shall not be an object of sequence derived type containing a pointer
15876 in the structure. */
15877 if (c->attr.pointer)
15878 {
15879 gfc_error ("Derived type variable %qs at %L with pointer "
15880 "component(s) cannot be an EQUIVALENCE object",
15881 sym->name, &e->where);
15882 return false;
15883 }
15884 }
15885 return true;
15886 }
15887
15888
15889 /* Resolve equivalence object.
15890 An EQUIVALENCE object shall not be a dummy argument, a pointer, a target,
15891 an allocatable array, an object of nonsequence derived type, an object of
15892 sequence derived type containing a pointer at any level of component
15893 selection, an automatic object, a function name, an entry name, a result
15894 name, a named constant, a structure component, or a subobject of any of
15895 the preceding objects. A substring shall not have length zero. A
15896 derived type shall not have components with default initialization nor
15897 shall two objects of an equivalence group be initialized.
15898 Either all or none of the objects shall have an protected attribute.
15899 The simple constraints are done in symbol.c(check_conflict) and the rest
15900 are implemented here. */
15901
15902 static void
15903 resolve_equivalence (gfc_equiv *eq)
15904 {
15905 gfc_symbol *sym;
15906 gfc_symbol *first_sym;
15907 gfc_expr *e;
15908 gfc_ref *r;
15909 locus *last_where = NULL;
15910 seq_type eq_type, last_eq_type;
15911 gfc_typespec *last_ts;
15912 int object, cnt_protected;
15913 const char *msg;
15914
15915 last_ts = &eq->expr->symtree->n.sym->ts;
15916
15917 first_sym = eq->expr->symtree->n.sym;
15918
15919 cnt_protected = 0;
15920
15921 for (object = 1; eq; eq = eq->eq, object++)
15922 {
15923 e = eq->expr;
15924
15925 e->ts = e->symtree->n.sym->ts;
15926 /* match_varspec might not know yet if it is seeing
15927 array reference or substring reference, as it doesn't
15928 know the types. */
15929 if (e->ref && e->ref->type == REF_ARRAY)
15930 {
15931 gfc_ref *ref = e->ref;
15932 sym = e->symtree->n.sym;
15933
15934 if (sym->attr.dimension)
15935 {
15936 ref->u.ar.as = sym->as;
15937 ref = ref->next;
15938 }
15939
15940 /* For substrings, convert REF_ARRAY into REF_SUBSTRING. */
15941 if (e->ts.type == BT_CHARACTER
15942 && ref
15943 && ref->type == REF_ARRAY
15944 && ref->u.ar.dimen == 1
15945 && ref->u.ar.dimen_type[0] == DIMEN_RANGE
15946 && ref->u.ar.stride[0] == NULL)
15947 {
15948 gfc_expr *start = ref->u.ar.start[0];
15949 gfc_expr *end = ref->u.ar.end[0];
15950 void *mem = NULL;
15951
15952 /* Optimize away the (:) reference. */
15953 if (start == NULL && end == NULL)
15954 {
15955 if (e->ref == ref)
15956 e->ref = ref->next;
15957 else
15958 e->ref->next = ref->next;
15959 mem = ref;
15960 }
15961 else
15962 {
15963 ref->type = REF_SUBSTRING;
15964 if (start == NULL)
15965 start = gfc_get_int_expr (gfc_default_integer_kind,
15966 NULL, 1);
15967 ref->u.ss.start = start;
15968 if (end == NULL && e->ts.u.cl)
15969 end = gfc_copy_expr (e->ts.u.cl->length);
15970 ref->u.ss.end = end;
15971 ref->u.ss.length = e->ts.u.cl;
15972 e->ts.u.cl = NULL;
15973 }
15974 ref = ref->next;
15975 free (mem);
15976 }
15977
15978 /* Any further ref is an error. */
15979 if (ref)
15980 {
15981 gcc_assert (ref->type == REF_ARRAY);
15982 gfc_error ("Syntax error in EQUIVALENCE statement at %L",
15983 &ref->u.ar.where);
15984 continue;
15985 }
15986 }
15987
15988 if (!gfc_resolve_expr (e))
15989 continue;
15990
15991 sym = e->symtree->n.sym;
15992
15993 if (sym->attr.is_protected)
15994 cnt_protected++;
15995 if (cnt_protected > 0 && cnt_protected != object)
15996 {
15997 gfc_error ("Either all or none of the objects in the "
15998 "EQUIVALENCE set at %L shall have the "
15999 "PROTECTED attribute",
16000 &e->where);
16001 break;
16002 }
16003
16004 /* Shall not equivalence common block variables in a PURE procedure. */
16005 if (sym->ns->proc_name
16006 && sym->ns->proc_name->attr.pure
16007 && sym->attr.in_common)
16008 {
16009 /* Need to check for symbols that may have entered the pure
16010 procedure via a USE statement. */
16011 bool saw_sym = false;
16012 if (sym->ns->use_stmts)
16013 {
16014 gfc_use_rename *r;
16015 for (r = sym->ns->use_stmts->rename; r; r = r->next)
16016 if (strcmp(r->use_name, sym->name) == 0) saw_sym = true;
16017 }
16018 else
16019 saw_sym = true;
16020
16021 if (saw_sym)
16022 gfc_error ("COMMON block member %qs at %L cannot be an "
16023 "EQUIVALENCE object in the pure procedure %qs",
16024 sym->name, &e->where, sym->ns->proc_name->name);
16025 break;
16026 }
16027
16028 /* Shall not be a named constant. */
16029 if (e->expr_type == EXPR_CONSTANT)
16030 {
16031 gfc_error ("Named constant %qs at %L cannot be an EQUIVALENCE "
16032 "object", sym->name, &e->where);
16033 continue;
16034 }
16035
16036 if (e->ts.type == BT_DERIVED
16037 && !resolve_equivalence_derived (e->ts.u.derived, sym, e))
16038 continue;
16039
16040 /* Check that the types correspond correctly:
16041 Note 5.28:
16042 A numeric sequence structure may be equivalenced to another sequence
16043 structure, an object of default integer type, default real type, double
16044 precision real type, default logical type such that components of the
16045 structure ultimately only become associated to objects of the same
16046 kind. A character sequence structure may be equivalenced to an object
16047 of default character kind or another character sequence structure.
16048 Other objects may be equivalenced only to objects of the same type and
16049 kind parameters. */
16050
16051 /* Identical types are unconditionally OK. */
16052 if (object == 1 || gfc_compare_types (last_ts, &sym->ts))
16053 goto identical_types;
16054
16055 last_eq_type = sequence_type (*last_ts);
16056 eq_type = sequence_type (sym->ts);
16057
16058 /* Since the pair of objects is not of the same type, mixed or
16059 non-default sequences can be rejected. */
16060
16061 msg = "Sequence %s with mixed components in EQUIVALENCE "
16062 "statement at %L with different type objects";
16063 if ((object ==2
16064 && last_eq_type == SEQ_MIXED
16065 && !gfc_notify_std (GFC_STD_GNU, msg, first_sym->name, last_where))
16066 || (eq_type == SEQ_MIXED
16067 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where)))
16068 continue;
16069
16070 msg = "Non-default type object or sequence %s in EQUIVALENCE "
16071 "statement at %L with objects of different type";
16072 if ((object ==2
16073 && last_eq_type == SEQ_NONDEFAULT
16074 && !gfc_notify_std (GFC_STD_GNU, msg, first_sym->name, last_where))
16075 || (eq_type == SEQ_NONDEFAULT
16076 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where)))
16077 continue;
16078
16079 msg ="Non-CHARACTER object %qs in default CHARACTER "
16080 "EQUIVALENCE statement at %L";
16081 if (last_eq_type == SEQ_CHARACTER
16082 && eq_type != SEQ_CHARACTER
16083 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where))
16084 continue;
16085
16086 msg ="Non-NUMERIC object %qs in default NUMERIC "
16087 "EQUIVALENCE statement at %L";
16088 if (last_eq_type == SEQ_NUMERIC
16089 && eq_type != SEQ_NUMERIC
16090 && !gfc_notify_std (GFC_STD_GNU, msg, sym->name, &e->where))
16091 continue;
16092
16093 identical_types:
16094 last_ts =&sym->ts;
16095 last_where = &e->where;
16096
16097 if (!e->ref)
16098 continue;
16099
16100 /* Shall not be an automatic array. */
16101 if (e->ref->type == REF_ARRAY
16102 && !gfc_resolve_array_spec (e->ref->u.ar.as, 1))
16103 {
16104 gfc_error ("Array %qs at %L with non-constant bounds cannot be "
16105 "an EQUIVALENCE object", sym->name, &e->where);
16106 continue;
16107 }
16108
16109 r = e->ref;
16110 while (r)
16111 {
16112 /* Shall not be a structure component. */
16113 if (r->type == REF_COMPONENT)
16114 {
16115 gfc_error ("Structure component %qs at %L cannot be an "
16116 "EQUIVALENCE object",
16117 r->u.c.component->name, &e->where);
16118 break;
16119 }
16120
16121 /* A substring shall not have length zero. */
16122 if (r->type == REF_SUBSTRING)
16123 {
16124 if (compare_bound (r->u.ss.start, r->u.ss.end) == CMP_GT)
16125 {
16126 gfc_error ("Substring at %L has length zero",
16127 &r->u.ss.start->where);
16128 break;
16129 }
16130 }
16131 r = r->next;
16132 }
16133 }
16134 }
16135
16136
16137 /* Function called by resolve_fntype to flag other symbol used in the
16138 length type parameter specification of function resuls. */
16139
16140 static bool
16141 flag_fn_result_spec (gfc_expr *expr,
16142 gfc_symbol *sym ATTRIBUTE_UNUSED,
16143 int *f ATTRIBUTE_UNUSED)
16144 {
16145 gfc_namespace *ns;
16146 gfc_symbol *s;
16147
16148 if (expr->expr_type == EXPR_VARIABLE)
16149 {
16150 s = expr->symtree->n.sym;
16151 for (ns = s->ns; ns; ns = ns->parent)
16152 if (!ns->parent)
16153 break;
16154
16155 if (!s->fn_result_spec
16156 && s->attr.flavor == FL_PARAMETER)
16157 {
16158 /* Function contained in a module.... */
16159 if (ns->proc_name && ns->proc_name->attr.flavor == FL_MODULE)
16160 {
16161 gfc_symtree *st;
16162 s->fn_result_spec = 1;
16163 /* Make sure that this symbol is translated as a module
16164 variable. */
16165 st = gfc_get_unique_symtree (ns);
16166 st->n.sym = s;
16167 s->refs++;
16168 }
16169 /* ... which is use associated and called. */
16170 else if (s->attr.use_assoc || s->attr.used_in_submodule
16171 ||
16172 /* External function matched with an interface. */
16173 (s->ns->proc_name
16174 && ((s->ns == ns
16175 && s->ns->proc_name->attr.if_source == IFSRC_DECL)
16176 || s->ns->proc_name->attr.if_source == IFSRC_IFBODY)
16177 && s->ns->proc_name->attr.function))
16178 s->fn_result_spec = 1;
16179 }
16180 }
16181 return false;
16182 }
16183
16184
16185 /* Resolve function and ENTRY types, issue diagnostics if needed. */
16186
16187 static void
16188 resolve_fntype (gfc_namespace *ns)
16189 {
16190 gfc_entry_list *el;
16191 gfc_symbol *sym;
16192
16193 if (ns->proc_name == NULL || !ns->proc_name->attr.function)
16194 return;
16195
16196 /* If there are any entries, ns->proc_name is the entry master
16197 synthetic symbol and ns->entries->sym actual FUNCTION symbol. */
16198 if (ns->entries)
16199 sym = ns->entries->sym;
16200 else
16201 sym = ns->proc_name;
16202 if (sym->result == sym
16203 && sym->ts.type == BT_UNKNOWN
16204 && !gfc_set_default_type (sym, 0, NULL)
16205 && !sym->attr.untyped)
16206 {
16207 gfc_error ("Function %qs at %L has no IMPLICIT type",
16208 sym->name, &sym->declared_at);
16209 sym->attr.untyped = 1;
16210 }
16211
16212 if (sym->ts.type == BT_DERIVED && !sym->ts.u.derived->attr.use_assoc
16213 && !sym->attr.contained
16214 && !gfc_check_symbol_access (sym->ts.u.derived)
16215 && gfc_check_symbol_access (sym))
16216 {
16217 gfc_notify_std (GFC_STD_F2003, "PUBLIC function %qs at "
16218 "%L of PRIVATE type %qs", sym->name,
16219 &sym->declared_at, sym->ts.u.derived->name);
16220 }
16221
16222 if (ns->entries)
16223 for (el = ns->entries->next; el; el = el->next)
16224 {
16225 if (el->sym->result == el->sym
16226 && el->sym->ts.type == BT_UNKNOWN
16227 && !gfc_set_default_type (el->sym, 0, NULL)
16228 && !el->sym->attr.untyped)
16229 {
16230 gfc_error ("ENTRY %qs at %L has no IMPLICIT type",
16231 el->sym->name, &el->sym->declared_at);
16232 el->sym->attr.untyped = 1;
16233 }
16234 }
16235
16236 if (sym->ts.type == BT_CHARACTER)
16237 gfc_traverse_expr (sym->ts.u.cl->length, NULL, flag_fn_result_spec, 0);
16238 }
16239
16240
16241 /* 12.3.2.1.1 Defined operators. */
16242
16243 static bool
16244 check_uop_procedure (gfc_symbol *sym, locus where)
16245 {
16246 gfc_formal_arglist *formal;
16247
16248 if (!sym->attr.function)
16249 {
16250 gfc_error ("User operator procedure %qs at %L must be a FUNCTION",
16251 sym->name, &where);
16252 return false;
16253 }
16254
16255 if (sym->ts.type == BT_CHARACTER
16256 && !((sym->ts.u.cl && sym->ts.u.cl->length) || sym->ts.deferred)
16257 && !(sym->result && ((sym->result->ts.u.cl
16258 && sym->result->ts.u.cl->length) || sym->result->ts.deferred)))
16259 {
16260 gfc_error ("User operator procedure %qs at %L cannot be assumed "
16261 "character length", sym->name, &where);
16262 return false;
16263 }
16264
16265 formal = gfc_sym_get_dummy_args (sym);
16266 if (!formal || !formal->sym)
16267 {
16268 gfc_error ("User operator procedure %qs at %L must have at least "
16269 "one argument", sym->name, &where);
16270 return false;
16271 }
16272
16273 if (formal->sym->attr.intent != INTENT_IN)
16274 {
16275 gfc_error ("First argument of operator interface at %L must be "
16276 "INTENT(IN)", &where);
16277 return false;
16278 }
16279
16280 if (formal->sym->attr.optional)
16281 {
16282 gfc_error ("First argument of operator interface at %L cannot be "
16283 "optional", &where);
16284 return false;
16285 }
16286
16287 formal = formal->next;
16288 if (!formal || !formal->sym)
16289 return true;
16290
16291 if (formal->sym->attr.intent != INTENT_IN)
16292 {
16293 gfc_error ("Second argument of operator interface at %L must be "
16294 "INTENT(IN)", &where);
16295 return false;
16296 }
16297
16298 if (formal->sym->attr.optional)
16299 {
16300 gfc_error ("Second argument of operator interface at %L cannot be "
16301 "optional", &where);
16302 return false;
16303 }
16304
16305 if (formal->next)
16306 {
16307 gfc_error ("Operator interface at %L must have, at most, two "
16308 "arguments", &where);
16309 return false;
16310 }
16311
16312 return true;
16313 }
16314
16315 static void
16316 gfc_resolve_uops (gfc_symtree *symtree)
16317 {
16318 gfc_interface *itr;
16319
16320 if (symtree == NULL)
16321 return;
16322
16323 gfc_resolve_uops (symtree->left);
16324 gfc_resolve_uops (symtree->right);
16325
16326 for (itr = symtree->n.uop->op; itr; itr = itr->next)
16327 check_uop_procedure (itr->sym, itr->sym->declared_at);
16328 }
16329
16330
16331 /* Examine all of the expressions associated with a program unit,
16332 assign types to all intermediate expressions, make sure that all
16333 assignments are to compatible types and figure out which names
16334 refer to which functions or subroutines. It doesn't check code
16335 block, which is handled by gfc_resolve_code. */
16336
16337 static void
16338 resolve_types (gfc_namespace *ns)
16339 {
16340 gfc_namespace *n;
16341 gfc_charlen *cl;
16342 gfc_data *d;
16343 gfc_equiv *eq;
16344 gfc_namespace* old_ns = gfc_current_ns;
16345
16346 if (ns->types_resolved)
16347 return;
16348
16349 /* Check that all IMPLICIT types are ok. */
16350 if (!ns->seen_implicit_none)
16351 {
16352 unsigned letter;
16353 for (letter = 0; letter != GFC_LETTERS; ++letter)
16354 if (ns->set_flag[letter]
16355 && !resolve_typespec_used (&ns->default_type[letter],
16356 &ns->implicit_loc[letter], NULL))
16357 return;
16358 }
16359
16360 gfc_current_ns = ns;
16361
16362 resolve_entries (ns);
16363
16364 resolve_common_vars (&ns->blank_common, false);
16365 resolve_common_blocks (ns->common_root);
16366
16367 resolve_contained_functions (ns);
16368
16369 if (ns->proc_name && ns->proc_name->attr.flavor == FL_PROCEDURE
16370 && ns->proc_name->attr.if_source == IFSRC_IFBODY)
16371 resolve_formal_arglist (ns->proc_name);
16372
16373 gfc_traverse_ns (ns, resolve_bind_c_derived_types);
16374
16375 for (cl = ns->cl_list; cl; cl = cl->next)
16376 resolve_charlen (cl);
16377
16378 gfc_traverse_ns (ns, resolve_symbol);
16379
16380 resolve_fntype (ns);
16381
16382 for (n = ns->contained; n; n = n->sibling)
16383 {
16384 if (gfc_pure (ns->proc_name) && !gfc_pure (n->proc_name))
16385 gfc_error ("Contained procedure %qs at %L of a PURE procedure must "
16386 "also be PURE", n->proc_name->name,
16387 &n->proc_name->declared_at);
16388
16389 resolve_types (n);
16390 }
16391
16392 forall_flag = 0;
16393 gfc_do_concurrent_flag = 0;
16394 gfc_check_interfaces (ns);
16395
16396 gfc_traverse_ns (ns, resolve_values);
16397
16398 if (ns->save_all)
16399 gfc_save_all (ns);
16400
16401 iter_stack = NULL;
16402 for (d = ns->data; d; d = d->next)
16403 resolve_data (d);
16404
16405 iter_stack = NULL;
16406 gfc_traverse_ns (ns, gfc_formalize_init_value);
16407
16408 gfc_traverse_ns (ns, gfc_verify_binding_labels);
16409
16410 for (eq = ns->equiv; eq; eq = eq->next)
16411 resolve_equivalence (eq);
16412
16413 /* Warn about unused labels. */
16414 if (warn_unused_label)
16415 warn_unused_fortran_label (ns->st_labels);
16416
16417 gfc_resolve_uops (ns->uop_root);
16418
16419 gfc_traverse_ns (ns, gfc_verify_DTIO_procedures);
16420
16421 gfc_resolve_omp_declare_simd (ns);
16422
16423 gfc_resolve_omp_udrs (ns->omp_udr_root);
16424
16425 ns->types_resolved = 1;
16426
16427 gfc_current_ns = old_ns;
16428 }
16429
16430
16431 /* Call gfc_resolve_code recursively. */
16432
16433 static void
16434 resolve_codes (gfc_namespace *ns)
16435 {
16436 gfc_namespace *n;
16437 bitmap_obstack old_obstack;
16438
16439 if (ns->resolved == 1)
16440 return;
16441
16442 for (n = ns->contained; n; n = n->sibling)
16443 resolve_codes (n);
16444
16445 gfc_current_ns = ns;
16446
16447 /* Don't clear 'cs_base' if this is the namespace of a BLOCK construct. */
16448 if (!(ns->proc_name && ns->proc_name->attr.flavor == FL_LABEL))
16449 cs_base = NULL;
16450
16451 /* Set to an out of range value. */
16452 current_entry_id = -1;
16453
16454 old_obstack = labels_obstack;
16455 bitmap_obstack_initialize (&labels_obstack);
16456
16457 gfc_resolve_oacc_declare (ns);
16458 gfc_resolve_omp_local_vars (ns);
16459 gfc_resolve_code (ns->code, ns);
16460
16461 bitmap_obstack_release (&labels_obstack);
16462 labels_obstack = old_obstack;
16463 }
16464
16465
16466 /* This function is called after a complete program unit has been compiled.
16467 Its purpose is to examine all of the expressions associated with a program
16468 unit, assign types to all intermediate expressions, make sure that all
16469 assignments are to compatible types and figure out which names refer to
16470 which functions or subroutines. */
16471
16472 void
16473 gfc_resolve (gfc_namespace *ns)
16474 {
16475 gfc_namespace *old_ns;
16476 code_stack *old_cs_base;
16477 struct gfc_omp_saved_state old_omp_state;
16478
16479 if (ns->resolved)
16480 return;
16481
16482 ns->resolved = -1;
16483 old_ns = gfc_current_ns;
16484 old_cs_base = cs_base;
16485
16486 /* As gfc_resolve can be called during resolution of an OpenMP construct
16487 body, we should clear any state associated to it, so that say NS's
16488 DO loops are not interpreted as OpenMP loops. */
16489 if (!ns->construct_entities)
16490 gfc_omp_save_and_clear_state (&old_omp_state);
16491
16492 resolve_types (ns);
16493 component_assignment_level = 0;
16494 resolve_codes (ns);
16495
16496 gfc_current_ns = old_ns;
16497 cs_base = old_cs_base;
16498 ns->resolved = 1;
16499
16500 gfc_run_passes (ns);
16501
16502 if (!ns->construct_entities)
16503 gfc_omp_restore_state (&old_omp_state);
16504 }