Daily bump.
[gcc.git] / gcc / fortran / interface.c
1 /* Deal with interfaces.
2 Copyright (C) 2000-2021 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
22 /* Deal with interfaces. An explicit interface is represented as a
23 singly linked list of formal argument structures attached to the
24 relevant symbols. For an implicit interface, the arguments don't
25 point to symbols. Explicit interfaces point to namespaces that
26 contain the symbols within that interface.
27
28 Implicit interfaces are linked together in a singly linked list
29 along the next_if member of symbol nodes. Since a particular
30 symbol can only have a single explicit interface, the symbol cannot
31 be part of multiple lists and a single next-member suffices.
32
33 This is not the case for general classes, though. An operator
34 definition is independent of just about all other uses and has it's
35 own head pointer.
36
37 Nameless interfaces:
38 Nameless interfaces create symbols with explicit interfaces within
39 the current namespace. They are otherwise unlinked.
40
41 Generic interfaces:
42 The generic name points to a linked list of symbols. Each symbol
43 has an explicit interface. Each explicit interface has its own
44 namespace containing the arguments. Module procedures are symbols in
45 which the interface is added later when the module procedure is parsed.
46
47 User operators:
48 User-defined operators are stored in a their own set of symtrees
49 separate from regular symbols. The symtrees point to gfc_user_op
50 structures which in turn head up a list of relevant interfaces.
51
52 Extended intrinsics and assignment:
53 The head of these interface lists are stored in the containing namespace.
54
55 Implicit interfaces:
56 An implicit interface is represented as a singly linked list of
57 formal argument list structures that don't point to any symbol
58 nodes -- they just contain types.
59
60
61 When a subprogram is defined, the program unit's name points to an
62 interface as usual, but the link to the namespace is NULL and the
63 formal argument list points to symbols within the same namespace as
64 the program unit name. */
65
66 #include "config.h"
67 #include "system.h"
68 #include "coretypes.h"
69 #include "options.h"
70 #include "gfortran.h"
71 #include "match.h"
72 #include "arith.h"
73
74 /* The current_interface structure holds information about the
75 interface currently being parsed. This structure is saved and
76 restored during recursive interfaces. */
77
78 gfc_interface_info current_interface;
79
80
81 /* Free a singly linked list of gfc_interface structures. */
82
83 void
84 gfc_free_interface (gfc_interface *intr)
85 {
86 gfc_interface *next;
87
88 for (; intr; intr = next)
89 {
90 next = intr->next;
91 free (intr);
92 }
93 }
94
95
96 /* Change the operators unary plus and minus into binary plus and
97 minus respectively, leaving the rest unchanged. */
98
99 static gfc_intrinsic_op
100 fold_unary_intrinsic (gfc_intrinsic_op op)
101 {
102 switch (op)
103 {
104 case INTRINSIC_UPLUS:
105 op = INTRINSIC_PLUS;
106 break;
107 case INTRINSIC_UMINUS:
108 op = INTRINSIC_MINUS;
109 break;
110 default:
111 break;
112 }
113
114 return op;
115 }
116
117
118 /* Return the operator depending on the DTIO moded string. Note that
119 these are not operators in the normal sense and so have been placed
120 beyond GFC_INTRINSIC_END in gfortran.h:enum gfc_intrinsic_op. */
121
122 static gfc_intrinsic_op
123 dtio_op (char* mode)
124 {
125 if (strcmp (mode, "formatted") == 0)
126 return INTRINSIC_FORMATTED;
127 if (strcmp (mode, "unformatted") == 0)
128 return INTRINSIC_UNFORMATTED;
129 return INTRINSIC_NONE;
130 }
131
132
133 /* Match a generic specification. Depending on which type of
134 interface is found, the 'name' or 'op' pointers may be set.
135 This subroutine doesn't return MATCH_NO. */
136
137 match
138 gfc_match_generic_spec (interface_type *type,
139 char *name,
140 gfc_intrinsic_op *op)
141 {
142 char buffer[GFC_MAX_SYMBOL_LEN + 1];
143 match m;
144 gfc_intrinsic_op i;
145
146 if (gfc_match (" assignment ( = )") == MATCH_YES)
147 {
148 *type = INTERFACE_INTRINSIC_OP;
149 *op = INTRINSIC_ASSIGN;
150 return MATCH_YES;
151 }
152
153 if (gfc_match (" operator ( %o )", &i) == MATCH_YES)
154 { /* Operator i/f */
155 *type = INTERFACE_INTRINSIC_OP;
156 *op = fold_unary_intrinsic (i);
157 return MATCH_YES;
158 }
159
160 *op = INTRINSIC_NONE;
161 if (gfc_match (" operator ( ") == MATCH_YES)
162 {
163 m = gfc_match_defined_op_name (buffer, 1);
164 if (m == MATCH_NO)
165 goto syntax;
166 if (m != MATCH_YES)
167 return MATCH_ERROR;
168
169 m = gfc_match_char (')');
170 if (m == MATCH_NO)
171 goto syntax;
172 if (m != MATCH_YES)
173 return MATCH_ERROR;
174
175 strcpy (name, buffer);
176 *type = INTERFACE_USER_OP;
177 return MATCH_YES;
178 }
179
180 if (gfc_match (" read ( %n )", buffer) == MATCH_YES)
181 {
182 *op = dtio_op (buffer);
183 if (*op == INTRINSIC_FORMATTED)
184 {
185 strcpy (name, gfc_code2string (dtio_procs, DTIO_RF));
186 *type = INTERFACE_DTIO;
187 }
188 if (*op == INTRINSIC_UNFORMATTED)
189 {
190 strcpy (name, gfc_code2string (dtio_procs, DTIO_RUF));
191 *type = INTERFACE_DTIO;
192 }
193 if (*op != INTRINSIC_NONE)
194 return MATCH_YES;
195 }
196
197 if (gfc_match (" write ( %n )", buffer) == MATCH_YES)
198 {
199 *op = dtio_op (buffer);
200 if (*op == INTRINSIC_FORMATTED)
201 {
202 strcpy (name, gfc_code2string (dtio_procs, DTIO_WF));
203 *type = INTERFACE_DTIO;
204 }
205 if (*op == INTRINSIC_UNFORMATTED)
206 {
207 strcpy (name, gfc_code2string (dtio_procs, DTIO_WUF));
208 *type = INTERFACE_DTIO;
209 }
210 if (*op != INTRINSIC_NONE)
211 return MATCH_YES;
212 }
213
214 if (gfc_match_name (buffer) == MATCH_YES)
215 {
216 strcpy (name, buffer);
217 *type = INTERFACE_GENERIC;
218 return MATCH_YES;
219 }
220
221 *type = INTERFACE_NAMELESS;
222 return MATCH_YES;
223
224 syntax:
225 gfc_error ("Syntax error in generic specification at %C");
226 return MATCH_ERROR;
227 }
228
229
230 /* Match one of the five F95 forms of an interface statement. The
231 matcher for the abstract interface follows. */
232
233 match
234 gfc_match_interface (void)
235 {
236 char name[GFC_MAX_SYMBOL_LEN + 1];
237 interface_type type;
238 gfc_symbol *sym;
239 gfc_intrinsic_op op;
240 match m;
241
242 m = gfc_match_space ();
243
244 if (gfc_match_generic_spec (&type, name, &op) == MATCH_ERROR)
245 return MATCH_ERROR;
246
247 /* If we're not looking at the end of the statement now, or if this
248 is not a nameless interface but we did not see a space, punt. */
249 if (gfc_match_eos () != MATCH_YES
250 || (type != INTERFACE_NAMELESS && m != MATCH_YES))
251 {
252 gfc_error ("Syntax error: Trailing garbage in INTERFACE statement "
253 "at %C");
254 return MATCH_ERROR;
255 }
256
257 current_interface.type = type;
258
259 switch (type)
260 {
261 case INTERFACE_DTIO:
262 case INTERFACE_GENERIC:
263 if (gfc_get_symbol (name, NULL, &sym))
264 return MATCH_ERROR;
265
266 if (!sym->attr.generic
267 && !gfc_add_generic (&sym->attr, sym->name, NULL))
268 return MATCH_ERROR;
269
270 if (sym->attr.dummy)
271 {
272 gfc_error ("Dummy procedure %qs at %C cannot have a "
273 "generic interface", sym->name);
274 return MATCH_ERROR;
275 }
276
277 current_interface.sym = gfc_new_block = sym;
278 break;
279
280 case INTERFACE_USER_OP:
281 current_interface.uop = gfc_get_uop (name);
282 break;
283
284 case INTERFACE_INTRINSIC_OP:
285 current_interface.op = op;
286 break;
287
288 case INTERFACE_NAMELESS:
289 case INTERFACE_ABSTRACT:
290 break;
291 }
292
293 return MATCH_YES;
294 }
295
296
297
298 /* Match a F2003 abstract interface. */
299
300 match
301 gfc_match_abstract_interface (void)
302 {
303 match m;
304
305 if (!gfc_notify_std (GFC_STD_F2003, "ABSTRACT INTERFACE at %C"))
306 return MATCH_ERROR;
307
308 m = gfc_match_eos ();
309
310 if (m != MATCH_YES)
311 {
312 gfc_error ("Syntax error in ABSTRACT INTERFACE statement at %C");
313 return MATCH_ERROR;
314 }
315
316 current_interface.type = INTERFACE_ABSTRACT;
317
318 return m;
319 }
320
321
322 /* Match the different sort of generic-specs that can be present after
323 the END INTERFACE itself. */
324
325 match
326 gfc_match_end_interface (void)
327 {
328 char name[GFC_MAX_SYMBOL_LEN + 1];
329 interface_type type;
330 gfc_intrinsic_op op;
331 match m;
332
333 m = gfc_match_space ();
334
335 if (gfc_match_generic_spec (&type, name, &op) == MATCH_ERROR)
336 return MATCH_ERROR;
337
338 /* If we're not looking at the end of the statement now, or if this
339 is not a nameless interface but we did not see a space, punt. */
340 if (gfc_match_eos () != MATCH_YES
341 || (type != INTERFACE_NAMELESS && m != MATCH_YES))
342 {
343 gfc_error ("Syntax error: Trailing garbage in END INTERFACE "
344 "statement at %C");
345 return MATCH_ERROR;
346 }
347
348 m = MATCH_YES;
349
350 switch (current_interface.type)
351 {
352 case INTERFACE_NAMELESS:
353 case INTERFACE_ABSTRACT:
354 if (type != INTERFACE_NAMELESS)
355 {
356 gfc_error ("Expected a nameless interface at %C");
357 m = MATCH_ERROR;
358 }
359
360 break;
361
362 case INTERFACE_INTRINSIC_OP:
363 if (type != current_interface.type || op != current_interface.op)
364 {
365
366 if (current_interface.op == INTRINSIC_ASSIGN)
367 {
368 m = MATCH_ERROR;
369 gfc_error ("Expected %<END INTERFACE ASSIGNMENT (=)%> at %C");
370 }
371 else
372 {
373 const char *s1, *s2;
374 s1 = gfc_op2string (current_interface.op);
375 s2 = gfc_op2string (op);
376
377 /* The following if-statements are used to enforce C1202
378 from F2003. */
379 if ((strcmp(s1, "==") == 0 && strcmp (s2, ".eq.") == 0)
380 || (strcmp(s1, ".eq.") == 0 && strcmp (s2, "==") == 0))
381 break;
382 if ((strcmp(s1, "/=") == 0 && strcmp (s2, ".ne.") == 0)
383 || (strcmp(s1, ".ne.") == 0 && strcmp (s2, "/=") == 0))
384 break;
385 if ((strcmp(s1, "<=") == 0 && strcmp (s2, ".le.") == 0)
386 || (strcmp(s1, ".le.") == 0 && strcmp (s2, "<=") == 0))
387 break;
388 if ((strcmp(s1, "<") == 0 && strcmp (s2, ".lt.") == 0)
389 || (strcmp(s1, ".lt.") == 0 && strcmp (s2, "<") == 0))
390 break;
391 if ((strcmp(s1, ">=") == 0 && strcmp (s2, ".ge.") == 0)
392 || (strcmp(s1, ".ge.") == 0 && strcmp (s2, ">=") == 0))
393 break;
394 if ((strcmp(s1, ">") == 0 && strcmp (s2, ".gt.") == 0)
395 || (strcmp(s1, ".gt.") == 0 && strcmp (s2, ">") == 0))
396 break;
397
398 m = MATCH_ERROR;
399 if (strcmp(s2, "none") == 0)
400 gfc_error ("Expecting %<END INTERFACE OPERATOR (%s)%> "
401 "at %C", s1);
402 else
403 gfc_error ("Expecting %<END INTERFACE OPERATOR (%s)%> at %C, "
404 "but got %qs", s1, s2);
405 }
406
407 }
408
409 break;
410
411 case INTERFACE_USER_OP:
412 /* Comparing the symbol node names is OK because only use-associated
413 symbols can be renamed. */
414 if (type != current_interface.type
415 || strcmp (current_interface.uop->name, name) != 0)
416 {
417 gfc_error ("Expecting %<END INTERFACE OPERATOR (.%s.)%> at %C",
418 current_interface.uop->name);
419 m = MATCH_ERROR;
420 }
421
422 break;
423
424 case INTERFACE_DTIO:
425 case INTERFACE_GENERIC:
426 if (type != current_interface.type
427 || strcmp (current_interface.sym->name, name) != 0)
428 {
429 gfc_error ("Expecting %<END INTERFACE %s%> at %C",
430 current_interface.sym->name);
431 m = MATCH_ERROR;
432 }
433
434 break;
435 }
436
437 return m;
438 }
439
440
441 /* Return whether the component was defined anonymously. */
442
443 static bool
444 is_anonymous_component (gfc_component *cmp)
445 {
446 /* Only UNION and MAP components are anonymous. In the case of a MAP,
447 the derived type symbol is FL_STRUCT and the component name looks like mM*.
448 This is the only case in which the second character of a component name is
449 uppercase. */
450 return cmp->ts.type == BT_UNION
451 || (cmp->ts.type == BT_DERIVED
452 && cmp->ts.u.derived->attr.flavor == FL_STRUCT
453 && cmp->name[0] && cmp->name[1] && ISUPPER (cmp->name[1]));
454 }
455
456
457 /* Return whether the derived type was defined anonymously. */
458
459 static bool
460 is_anonymous_dt (gfc_symbol *derived)
461 {
462 /* UNION and MAP types are always anonymous. Otherwise, only nested STRUCTURE
463 types can be anonymous. For anonymous MAP/STRUCTURE, we have FL_STRUCT
464 and the type name looks like XX*. This is the only case in which the
465 second character of a type name is uppercase. */
466 return derived->attr.flavor == FL_UNION
467 || (derived->attr.flavor == FL_STRUCT
468 && derived->name[0] && derived->name[1] && ISUPPER (derived->name[1]));
469 }
470
471
472 /* Compare components according to 4.4.2 of the Fortran standard. */
473
474 static bool
475 compare_components (gfc_component *cmp1, gfc_component *cmp2,
476 gfc_symbol *derived1, gfc_symbol *derived2)
477 {
478 /* Compare names, but not for anonymous components such as UNION or MAP. */
479 if (!is_anonymous_component (cmp1) && !is_anonymous_component (cmp2)
480 && strcmp (cmp1->name, cmp2->name) != 0)
481 return false;
482
483 if (cmp1->attr.access != cmp2->attr.access)
484 return false;
485
486 if (cmp1->attr.pointer != cmp2->attr.pointer)
487 return false;
488
489 if (cmp1->attr.dimension != cmp2->attr.dimension)
490 return false;
491
492 if (cmp1->attr.allocatable != cmp2->attr.allocatable)
493 return false;
494
495 if (cmp1->attr.dimension && gfc_compare_array_spec (cmp1->as, cmp2->as) == 0)
496 return false;
497
498 if (cmp1->ts.type == BT_CHARACTER && cmp2->ts.type == BT_CHARACTER)
499 {
500 gfc_charlen *l1 = cmp1->ts.u.cl;
501 gfc_charlen *l2 = cmp2->ts.u.cl;
502 if (l1 && l2 && l1->length && l2->length
503 && l1->length->expr_type == EXPR_CONSTANT
504 && l2->length->expr_type == EXPR_CONSTANT
505 && gfc_dep_compare_expr (l1->length, l2->length) != 0)
506 return false;
507 }
508
509 /* Make sure that link lists do not put this function into an
510 endless recursive loop! */
511 if (!(cmp1->ts.type == BT_DERIVED && derived1 == cmp1->ts.u.derived)
512 && !(cmp2->ts.type == BT_DERIVED && derived2 == cmp2->ts.u.derived)
513 && !gfc_compare_types (&cmp1->ts, &cmp2->ts))
514 return false;
515
516 else if ( (cmp1->ts.type == BT_DERIVED && derived1 == cmp1->ts.u.derived)
517 && !(cmp2->ts.type == BT_DERIVED && derived2 == cmp2->ts.u.derived))
518 return false;
519
520 else if (!(cmp1->ts.type == BT_DERIVED && derived1 == cmp1->ts.u.derived)
521 && (cmp2->ts.type == BT_DERIVED && derived2 == cmp2->ts.u.derived))
522 return false;
523
524 return true;
525 }
526
527
528 /* Compare two union types by comparing the components of their maps.
529 Because unions and maps are anonymous their types get special internal
530 names; therefore the usual derived type comparison will fail on them.
531
532 Returns nonzero if equal, as with gfc_compare_derived_types. Also as with
533 gfc_compare_derived_types, 'equal' is closer to meaning 'duplicate
534 definitions' than 'equivalent structure'. */
535
536 static bool
537 compare_union_types (gfc_symbol *un1, gfc_symbol *un2)
538 {
539 gfc_component *map1, *map2, *cmp1, *cmp2;
540 gfc_symbol *map1_t, *map2_t;
541
542 if (un1->attr.flavor != FL_UNION || un2->attr.flavor != FL_UNION)
543 return false;
544
545 if (un1->attr.zero_comp != un2->attr.zero_comp)
546 return false;
547
548 if (un1->attr.zero_comp)
549 return true;
550
551 map1 = un1->components;
552 map2 = un2->components;
553
554 /* In terms of 'equality' here we are worried about types which are
555 declared the same in two places, not types that represent equivalent
556 structures. (This is common because of FORTRAN's weird scoping rules.)
557 Though two unions with their maps in different orders could be equivalent,
558 we will say they are not equal for the purposes of this test; therefore
559 we compare the maps sequentially. */
560 for (;;)
561 {
562 map1_t = map1->ts.u.derived;
563 map2_t = map2->ts.u.derived;
564
565 cmp1 = map1_t->components;
566 cmp2 = map2_t->components;
567
568 /* Protect against null components. */
569 if (map1_t->attr.zero_comp != map2_t->attr.zero_comp)
570 return false;
571
572 if (map1_t->attr.zero_comp)
573 return true;
574
575 for (;;)
576 {
577 /* No two fields will ever point to the same map type unless they are
578 the same component, because one map field is created with its type
579 declaration. Therefore don't worry about recursion here. */
580 /* TODO: worry about recursion into parent types of the unions? */
581 if (!compare_components (cmp1, cmp2, map1_t, map2_t))
582 return false;
583
584 cmp1 = cmp1->next;
585 cmp2 = cmp2->next;
586
587 if (cmp1 == NULL && cmp2 == NULL)
588 break;
589 if (cmp1 == NULL || cmp2 == NULL)
590 return false;
591 }
592
593 map1 = map1->next;
594 map2 = map2->next;
595
596 if (map1 == NULL && map2 == NULL)
597 break;
598 if (map1 == NULL || map2 == NULL)
599 return false;
600 }
601
602 return true;
603 }
604
605
606
607 /* Compare two derived types using the criteria in 4.4.2 of the standard,
608 recursing through gfc_compare_types for the components. */
609
610 bool
611 gfc_compare_derived_types (gfc_symbol *derived1, gfc_symbol *derived2)
612 {
613 gfc_component *cmp1, *cmp2;
614
615 if (derived1 == derived2)
616 return true;
617
618 if (!derived1 || !derived2)
619 gfc_internal_error ("gfc_compare_derived_types: invalid derived type");
620
621 /* Compare UNION types specially. */
622 if (derived1->attr.flavor == FL_UNION || derived2->attr.flavor == FL_UNION)
623 return compare_union_types (derived1, derived2);
624
625 /* Special case for comparing derived types across namespaces. If the
626 true names and module names are the same and the module name is
627 nonnull, then they are equal. */
628 if (strcmp (derived1->name, derived2->name) == 0
629 && derived1->module != NULL && derived2->module != NULL
630 && strcmp (derived1->module, derived2->module) == 0)
631 return true;
632
633 /* Compare type via the rules of the standard. Both types must have
634 the SEQUENCE or BIND(C) attribute to be equal. STRUCTUREs are special
635 because they can be anonymous; therefore two structures with different
636 names may be equal. */
637
638 /* Compare names, but not for anonymous types such as UNION or MAP. */
639 if (!is_anonymous_dt (derived1) && !is_anonymous_dt (derived2)
640 && strcmp (derived1->name, derived2->name) != 0)
641 return false;
642
643 if (derived1->component_access == ACCESS_PRIVATE
644 || derived2->component_access == ACCESS_PRIVATE)
645 return false;
646
647 if (!(derived1->attr.sequence && derived2->attr.sequence)
648 && !(derived1->attr.is_bind_c && derived2->attr.is_bind_c)
649 && !(derived1->attr.pdt_type && derived2->attr.pdt_type))
650 return false;
651
652 /* Protect against null components. */
653 if (derived1->attr.zero_comp != derived2->attr.zero_comp)
654 return false;
655
656 if (derived1->attr.zero_comp)
657 return true;
658
659 cmp1 = derived1->components;
660 cmp2 = derived2->components;
661
662 /* Since subtypes of SEQUENCE types must be SEQUENCE types as well, a
663 simple test can speed things up. Otherwise, lots of things have to
664 match. */
665 for (;;)
666 {
667 if (!compare_components (cmp1, cmp2, derived1, derived2))
668 return false;
669
670 cmp1 = cmp1->next;
671 cmp2 = cmp2->next;
672
673 if (cmp1 == NULL && cmp2 == NULL)
674 break;
675 if (cmp1 == NULL || cmp2 == NULL)
676 return false;
677 }
678
679 return true;
680 }
681
682
683 /* Compare two typespecs, recursively if necessary. */
684
685 bool
686 gfc_compare_types (gfc_typespec *ts1, gfc_typespec *ts2)
687 {
688 /* See if one of the typespecs is a BT_VOID, which is what is being used
689 to allow the funcs like c_f_pointer to accept any pointer type.
690 TODO: Possibly should narrow this to just the one typespec coming in
691 that is for the formal arg, but oh well. */
692 if (ts1->type == BT_VOID || ts2->type == BT_VOID)
693 return true;
694
695 /* Special case for our C interop types. FIXME: There should be a
696 better way of doing this. When ISO C binding is cleared up,
697 this can probably be removed. See PR 57048. */
698
699 if (((ts1->type == BT_INTEGER && ts2->type == BT_DERIVED)
700 || (ts1->type == BT_DERIVED && ts2->type == BT_INTEGER))
701 && ts1->u.derived && ts2->u.derived
702 && ts1->u.derived == ts2->u.derived)
703 return true;
704
705 /* The _data component is not always present, therefore check for its
706 presence before assuming, that its derived->attr is available.
707 When the _data component is not present, then nevertheless the
708 unlimited_polymorphic flag may be set in the derived type's attr. */
709 if (ts1->type == BT_CLASS && ts1->u.derived->components
710 && ((ts1->u.derived->attr.is_class
711 && ts1->u.derived->components->ts.u.derived->attr
712 .unlimited_polymorphic)
713 || ts1->u.derived->attr.unlimited_polymorphic))
714 return true;
715
716 /* F2003: C717 */
717 if (ts2->type == BT_CLASS && ts1->type == BT_DERIVED
718 && ts2->u.derived->components
719 && ((ts2->u.derived->attr.is_class
720 && ts2->u.derived->components->ts.u.derived->attr
721 .unlimited_polymorphic)
722 || ts2->u.derived->attr.unlimited_polymorphic)
723 && (ts1->u.derived->attr.sequence || ts1->u.derived->attr.is_bind_c))
724 return true;
725
726 if (ts1->type != ts2->type
727 && ((ts1->type != BT_DERIVED && ts1->type != BT_CLASS)
728 || (ts2->type != BT_DERIVED && ts2->type != BT_CLASS)))
729 return false;
730
731 if (ts1->type == BT_UNION)
732 return compare_union_types (ts1->u.derived, ts2->u.derived);
733
734 if (ts1->type != BT_DERIVED && ts1->type != BT_CLASS)
735 return (ts1->kind == ts2->kind);
736
737 /* Compare derived types. */
738 return gfc_type_compatible (ts1, ts2);
739 }
740
741
742 static bool
743 compare_type (gfc_symbol *s1, gfc_symbol *s2)
744 {
745 if (s2->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
746 return true;
747
748 return gfc_compare_types (&s1->ts, &s2->ts) || s2->ts.type == BT_ASSUMED;
749 }
750
751
752 static bool
753 compare_type_characteristics (gfc_symbol *s1, gfc_symbol *s2)
754 {
755 /* TYPE and CLASS of the same declared type are type compatible,
756 but have different characteristics. */
757 if ((s1->ts.type == BT_CLASS && s2->ts.type == BT_DERIVED)
758 || (s1->ts.type == BT_DERIVED && s2->ts.type == BT_CLASS))
759 return false;
760
761 return compare_type (s1, s2);
762 }
763
764
765 static bool
766 compare_rank (gfc_symbol *s1, gfc_symbol *s2)
767 {
768 gfc_array_spec *as1, *as2;
769 int r1, r2;
770
771 if (s2->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
772 return true;
773
774 as1 = (s1->ts.type == BT_CLASS
775 && !s1->ts.u.derived->attr.unlimited_polymorphic)
776 ? CLASS_DATA (s1)->as : s1->as;
777 as2 = (s2->ts.type == BT_CLASS
778 && !s2->ts.u.derived->attr.unlimited_polymorphic)
779 ? CLASS_DATA (s2)->as : s2->as;
780
781 r1 = as1 ? as1->rank : 0;
782 r2 = as2 ? as2->rank : 0;
783
784 if (r1 != r2 && (!as2 || as2->type != AS_ASSUMED_RANK))
785 return false; /* Ranks differ. */
786
787 return true;
788 }
789
790
791 /* Given two symbols that are formal arguments, compare their ranks
792 and types. Returns true if they have the same rank and type,
793 false otherwise. */
794
795 static bool
796 compare_type_rank (gfc_symbol *s1, gfc_symbol *s2)
797 {
798 return compare_type (s1, s2) && compare_rank (s1, s2);
799 }
800
801
802 /* Given two symbols that are formal arguments, compare their types
803 and rank and their formal interfaces if they are both dummy
804 procedures. Returns true if the same, false if different. */
805
806 static bool
807 compare_type_rank_if (gfc_symbol *s1, gfc_symbol *s2)
808 {
809 if (s1 == NULL || s2 == NULL)
810 return (s1 == s2);
811
812 if (s1 == s2)
813 return true;
814
815 if (s1->attr.flavor != FL_PROCEDURE && s2->attr.flavor != FL_PROCEDURE)
816 return compare_type_rank (s1, s2);
817
818 if (s1->attr.flavor != FL_PROCEDURE || s2->attr.flavor != FL_PROCEDURE)
819 return false;
820
821 /* At this point, both symbols are procedures. It can happen that
822 external procedures are compared, where one is identified by usage
823 to be a function or subroutine but the other is not. Check TKR
824 nonetheless for these cases. */
825 if (s1->attr.function == 0 && s1->attr.subroutine == 0)
826 return s1->attr.external ? compare_type_rank (s1, s2) : false;
827
828 if (s2->attr.function == 0 && s2->attr.subroutine == 0)
829 return s2->attr.external ? compare_type_rank (s1, s2) : false;
830
831 /* Now the type of procedure has been identified. */
832 if (s1->attr.function != s2->attr.function
833 || s1->attr.subroutine != s2->attr.subroutine)
834 return false;
835
836 if (s1->attr.function && !compare_type_rank (s1, s2))
837 return false;
838
839 /* Originally, gfortran recursed here to check the interfaces of passed
840 procedures. This is explicitly not required by the standard. */
841 return true;
842 }
843
844
845 /* Given a formal argument list and a keyword name, search the list
846 for that keyword. Returns the correct symbol node if found, NULL
847 if not found. */
848
849 static gfc_symbol *
850 find_keyword_arg (const char *name, gfc_formal_arglist *f)
851 {
852 for (; f; f = f->next)
853 if (strcmp (f->sym->name, name) == 0)
854 return f->sym;
855
856 return NULL;
857 }
858
859
860 /******** Interface checking subroutines **********/
861
862
863 /* Given an operator interface and the operator, make sure that all
864 interfaces for that operator are legal. */
865
866 bool
867 gfc_check_operator_interface (gfc_symbol *sym, gfc_intrinsic_op op,
868 locus opwhere)
869 {
870 gfc_formal_arglist *formal;
871 sym_intent i1, i2;
872 bt t1, t2;
873 int args, r1, r2, k1, k2;
874
875 gcc_assert (sym);
876
877 args = 0;
878 t1 = t2 = BT_UNKNOWN;
879 i1 = i2 = INTENT_UNKNOWN;
880 r1 = r2 = -1;
881 k1 = k2 = -1;
882
883 for (formal = gfc_sym_get_dummy_args (sym); formal; formal = formal->next)
884 {
885 gfc_symbol *fsym = formal->sym;
886 if (fsym == NULL)
887 {
888 gfc_error ("Alternate return cannot appear in operator "
889 "interface at %L", &sym->declared_at);
890 return false;
891 }
892 if (args == 0)
893 {
894 t1 = fsym->ts.type;
895 i1 = fsym->attr.intent;
896 r1 = (fsym->as != NULL) ? fsym->as->rank : 0;
897 k1 = fsym->ts.kind;
898 }
899 if (args == 1)
900 {
901 t2 = fsym->ts.type;
902 i2 = fsym->attr.intent;
903 r2 = (fsym->as != NULL) ? fsym->as->rank : 0;
904 k2 = fsym->ts.kind;
905 }
906 args++;
907 }
908
909 /* Only +, - and .not. can be unary operators.
910 .not. cannot be a binary operator. */
911 if (args == 0 || args > 2 || (args == 1 && op != INTRINSIC_PLUS
912 && op != INTRINSIC_MINUS
913 && op != INTRINSIC_NOT)
914 || (args == 2 && op == INTRINSIC_NOT))
915 {
916 if (op == INTRINSIC_ASSIGN)
917 gfc_error ("Assignment operator interface at %L must have "
918 "two arguments", &sym->declared_at);
919 else
920 gfc_error ("Operator interface at %L has the wrong number of arguments",
921 &sym->declared_at);
922 return false;
923 }
924
925 /* Check that intrinsics are mapped to functions, except
926 INTRINSIC_ASSIGN which should map to a subroutine. */
927 if (op == INTRINSIC_ASSIGN)
928 {
929 gfc_formal_arglist *dummy_args;
930
931 if (!sym->attr.subroutine)
932 {
933 gfc_error ("Assignment operator interface at %L must be "
934 "a SUBROUTINE", &sym->declared_at);
935 return false;
936 }
937
938 /* Allowed are (per F2003, 12.3.2.1.2 Defined assignments):
939 - First argument an array with different rank than second,
940 - First argument is a scalar and second an array,
941 - Types and kinds do not conform, or
942 - First argument is of derived type. */
943 dummy_args = gfc_sym_get_dummy_args (sym);
944 if (dummy_args->sym->ts.type != BT_DERIVED
945 && dummy_args->sym->ts.type != BT_CLASS
946 && (r2 == 0 || r1 == r2)
947 && (dummy_args->sym->ts.type == dummy_args->next->sym->ts.type
948 || (gfc_numeric_ts (&dummy_args->sym->ts)
949 && gfc_numeric_ts (&dummy_args->next->sym->ts))))
950 {
951 gfc_error ("Assignment operator interface at %L must not redefine "
952 "an INTRINSIC type assignment", &sym->declared_at);
953 return false;
954 }
955 }
956 else
957 {
958 if (!sym->attr.function)
959 {
960 gfc_error ("Intrinsic operator interface at %L must be a FUNCTION",
961 &sym->declared_at);
962 return false;
963 }
964 }
965
966 /* Check intents on operator interfaces. */
967 if (op == INTRINSIC_ASSIGN)
968 {
969 if (i1 != INTENT_OUT && i1 != INTENT_INOUT)
970 {
971 gfc_error ("First argument of defined assignment at %L must be "
972 "INTENT(OUT) or INTENT(INOUT)", &sym->declared_at);
973 return false;
974 }
975
976 if (i2 != INTENT_IN)
977 {
978 gfc_error ("Second argument of defined assignment at %L must be "
979 "INTENT(IN)", &sym->declared_at);
980 return false;
981 }
982 }
983 else
984 {
985 if (i1 != INTENT_IN)
986 {
987 gfc_error ("First argument of operator interface at %L must be "
988 "INTENT(IN)", &sym->declared_at);
989 return false;
990 }
991
992 if (args == 2 && i2 != INTENT_IN)
993 {
994 gfc_error ("Second argument of operator interface at %L must be "
995 "INTENT(IN)", &sym->declared_at);
996 return false;
997 }
998 }
999
1000 /* From now on, all we have to do is check that the operator definition
1001 doesn't conflict with an intrinsic operator. The rules for this
1002 game are defined in 7.1.2 and 7.1.3 of both F95 and F2003 standards,
1003 as well as 12.3.2.1.1 of Fortran 2003:
1004
1005 "If the operator is an intrinsic-operator (R310), the number of
1006 function arguments shall be consistent with the intrinsic uses of
1007 that operator, and the types, kind type parameters, or ranks of the
1008 dummy arguments shall differ from those required for the intrinsic
1009 operation (7.1.2)." */
1010
1011 #define IS_NUMERIC_TYPE(t) \
1012 ((t) == BT_INTEGER || (t) == BT_REAL || (t) == BT_COMPLEX)
1013
1014 /* Unary ops are easy, do them first. */
1015 if (op == INTRINSIC_NOT)
1016 {
1017 if (t1 == BT_LOGICAL)
1018 goto bad_repl;
1019 else
1020 return true;
1021 }
1022
1023 if (args == 1 && (op == INTRINSIC_PLUS || op == INTRINSIC_MINUS))
1024 {
1025 if (IS_NUMERIC_TYPE (t1))
1026 goto bad_repl;
1027 else
1028 return true;
1029 }
1030
1031 /* Character intrinsic operators have same character kind, thus
1032 operator definitions with operands of different character kinds
1033 are always safe. */
1034 if (t1 == BT_CHARACTER && t2 == BT_CHARACTER && k1 != k2)
1035 return true;
1036
1037 /* Intrinsic operators always perform on arguments of same rank,
1038 so different ranks is also always safe. (rank == 0) is an exception
1039 to that, because all intrinsic operators are elemental. */
1040 if (r1 != r2 && r1 != 0 && r2 != 0)
1041 return true;
1042
1043 switch (op)
1044 {
1045 case INTRINSIC_EQ:
1046 case INTRINSIC_EQ_OS:
1047 case INTRINSIC_NE:
1048 case INTRINSIC_NE_OS:
1049 if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
1050 goto bad_repl;
1051 /* Fall through. */
1052
1053 case INTRINSIC_PLUS:
1054 case INTRINSIC_MINUS:
1055 case INTRINSIC_TIMES:
1056 case INTRINSIC_DIVIDE:
1057 case INTRINSIC_POWER:
1058 if (IS_NUMERIC_TYPE (t1) && IS_NUMERIC_TYPE (t2))
1059 goto bad_repl;
1060 break;
1061
1062 case INTRINSIC_GT:
1063 case INTRINSIC_GT_OS:
1064 case INTRINSIC_GE:
1065 case INTRINSIC_GE_OS:
1066 case INTRINSIC_LT:
1067 case INTRINSIC_LT_OS:
1068 case INTRINSIC_LE:
1069 case INTRINSIC_LE_OS:
1070 if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
1071 goto bad_repl;
1072 if ((t1 == BT_INTEGER || t1 == BT_REAL)
1073 && (t2 == BT_INTEGER || t2 == BT_REAL))
1074 goto bad_repl;
1075 break;
1076
1077 case INTRINSIC_CONCAT:
1078 if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
1079 goto bad_repl;
1080 break;
1081
1082 case INTRINSIC_AND:
1083 case INTRINSIC_OR:
1084 case INTRINSIC_EQV:
1085 case INTRINSIC_NEQV:
1086 if (t1 == BT_LOGICAL && t2 == BT_LOGICAL)
1087 goto bad_repl;
1088 break;
1089
1090 default:
1091 break;
1092 }
1093
1094 return true;
1095
1096 #undef IS_NUMERIC_TYPE
1097
1098 bad_repl:
1099 gfc_error ("Operator interface at %L conflicts with intrinsic interface",
1100 &opwhere);
1101 return false;
1102 }
1103
1104
1105 /* Given a pair of formal argument lists, we see if the two lists can
1106 be distinguished by counting the number of nonoptional arguments of
1107 a given type/rank in f1 and seeing if there are less then that
1108 number of those arguments in f2 (including optional arguments).
1109 Since this test is asymmetric, it has to be called twice to make it
1110 symmetric. Returns nonzero if the argument lists are incompatible
1111 by this test. This subroutine implements rule 1 of section F03:16.2.3.
1112 'p1' and 'p2' are the PASS arguments of both procedures (if applicable). */
1113
1114 static bool
1115 count_types_test (gfc_formal_arglist *f1, gfc_formal_arglist *f2,
1116 const char *p1, const char *p2)
1117 {
1118 int ac1, ac2, i, j, k, n1;
1119 gfc_formal_arglist *f;
1120
1121 typedef struct
1122 {
1123 int flag;
1124 gfc_symbol *sym;
1125 }
1126 arginfo;
1127
1128 arginfo *arg;
1129
1130 n1 = 0;
1131
1132 for (f = f1; f; f = f->next)
1133 n1++;
1134
1135 /* Build an array of integers that gives the same integer to
1136 arguments of the same type/rank. */
1137 arg = XCNEWVEC (arginfo, n1);
1138
1139 f = f1;
1140 for (i = 0; i < n1; i++, f = f->next)
1141 {
1142 arg[i].flag = -1;
1143 arg[i].sym = f->sym;
1144 }
1145
1146 k = 0;
1147
1148 for (i = 0; i < n1; i++)
1149 {
1150 if (arg[i].flag != -1)
1151 continue;
1152
1153 if (arg[i].sym && (arg[i].sym->attr.optional
1154 || (p1 && strcmp (arg[i].sym->name, p1) == 0)))
1155 continue; /* Skip OPTIONAL and PASS arguments. */
1156
1157 arg[i].flag = k;
1158
1159 /* Find other non-optional, non-pass arguments of the same type/rank. */
1160 for (j = i + 1; j < n1; j++)
1161 if ((arg[j].sym == NULL
1162 || !(arg[j].sym->attr.optional
1163 || (p1 && strcmp (arg[j].sym->name, p1) == 0)))
1164 && (compare_type_rank_if (arg[i].sym, arg[j].sym)
1165 || compare_type_rank_if (arg[j].sym, arg[i].sym)))
1166 arg[j].flag = k;
1167
1168 k++;
1169 }
1170
1171 /* Now loop over each distinct type found in f1. */
1172 k = 0;
1173 bool rc = false;
1174
1175 for (i = 0; i < n1; i++)
1176 {
1177 if (arg[i].flag != k)
1178 continue;
1179
1180 ac1 = 1;
1181 for (j = i + 1; j < n1; j++)
1182 if (arg[j].flag == k)
1183 ac1++;
1184
1185 /* Count the number of non-pass arguments in f2 with that type,
1186 including those that are optional. */
1187 ac2 = 0;
1188
1189 for (f = f2; f; f = f->next)
1190 if ((!p2 || strcmp (f->sym->name, p2) != 0)
1191 && (compare_type_rank_if (arg[i].sym, f->sym)
1192 || compare_type_rank_if (f->sym, arg[i].sym)))
1193 ac2++;
1194
1195 if (ac1 > ac2)
1196 {
1197 rc = true;
1198 break;
1199 }
1200
1201 k++;
1202 }
1203
1204 free (arg);
1205
1206 return rc;
1207 }
1208
1209
1210 /* Returns true if two dummy arguments are distinguishable due to their POINTER
1211 and ALLOCATABLE attributes according to F2018 section 15.4.3.4.5 (3).
1212 The function is asymmetric wrt to the arguments s1 and s2 and should always
1213 be called twice (with flipped arguments in the second call). */
1214
1215 static bool
1216 compare_ptr_alloc(gfc_symbol *s1, gfc_symbol *s2)
1217 {
1218 /* Is s1 allocatable? */
1219 const bool a1 = s1->ts.type == BT_CLASS ?
1220 CLASS_DATA(s1)->attr.allocatable : s1->attr.allocatable;
1221 /* Is s2 a pointer? */
1222 const bool p2 = s2->ts.type == BT_CLASS ?
1223 CLASS_DATA(s2)->attr.class_pointer : s2->attr.pointer;
1224 return a1 && p2 && (s2->attr.intent != INTENT_IN);
1225 }
1226
1227
1228 /* Perform the correspondence test in rule (3) of F08:C1215.
1229 Returns zero if no argument is found that satisfies this rule,
1230 nonzero otherwise. 'p1' and 'p2' are the PASS arguments of both procedures
1231 (if applicable).
1232
1233 This test is also not symmetric in f1 and f2 and must be called
1234 twice. This test finds problems caused by sorting the actual
1235 argument list with keywords. For example:
1236
1237 INTERFACE FOO
1238 SUBROUTINE F1(A, B)
1239 INTEGER :: A ; REAL :: B
1240 END SUBROUTINE F1
1241
1242 SUBROUTINE F2(B, A)
1243 INTEGER :: A ; REAL :: B
1244 END SUBROUTINE F1
1245 END INTERFACE FOO
1246
1247 At this point, 'CALL FOO(A=1, B=1.0)' is ambiguous. */
1248
1249 static bool
1250 generic_correspondence (gfc_formal_arglist *f1, gfc_formal_arglist *f2,
1251 const char *p1, const char *p2)
1252 {
1253 gfc_formal_arglist *f2_save, *g;
1254 gfc_symbol *sym;
1255
1256 f2_save = f2;
1257
1258 while (f1)
1259 {
1260 if (!f1->sym || f1->sym->attr.optional)
1261 goto next;
1262
1263 if (p1 && strcmp (f1->sym->name, p1) == 0)
1264 f1 = f1->next;
1265 if (f2 && p2 && strcmp (f2->sym->name, p2) == 0)
1266 f2 = f2->next;
1267
1268 if (f2 != NULL && (compare_type_rank (f1->sym, f2->sym)
1269 || compare_type_rank (f2->sym, f1->sym))
1270 && !((gfc_option.allow_std & GFC_STD_F2008)
1271 && (compare_ptr_alloc(f1->sym, f2->sym)
1272 || compare_ptr_alloc(f2->sym, f1->sym))))
1273 goto next;
1274
1275 /* Now search for a disambiguating keyword argument starting at
1276 the current non-match. */
1277 for (g = f1; g; g = g->next)
1278 {
1279 if (g->sym->attr.optional || (p1 && strcmp (g->sym->name, p1) == 0))
1280 continue;
1281
1282 sym = find_keyword_arg (g->sym->name, f2_save);
1283 if (sym == NULL || !compare_type_rank (g->sym, sym)
1284 || ((gfc_option.allow_std & GFC_STD_F2008)
1285 && (compare_ptr_alloc(sym, g->sym)
1286 || compare_ptr_alloc(g->sym, sym))))
1287 return true;
1288 }
1289
1290 next:
1291 if (f1 != NULL)
1292 f1 = f1->next;
1293 if (f2 != NULL)
1294 f2 = f2->next;
1295 }
1296
1297 return false;
1298 }
1299
1300
1301 static int
1302 symbol_rank (gfc_symbol *sym)
1303 {
1304 gfc_array_spec *as = NULL;
1305
1306 if (sym->ts.type == BT_CLASS && CLASS_DATA (sym))
1307 as = CLASS_DATA (sym)->as;
1308 else
1309 as = sym->as;
1310
1311 return as ? as->rank : 0;
1312 }
1313
1314
1315 /* Check if the characteristics of two dummy arguments match,
1316 cf. F08:12.3.2. */
1317
1318 bool
1319 gfc_check_dummy_characteristics (gfc_symbol *s1, gfc_symbol *s2,
1320 bool type_must_agree, char *errmsg,
1321 int err_len)
1322 {
1323 if (s1 == NULL || s2 == NULL)
1324 return s1 == s2 ? true : false;
1325
1326 /* Check type and rank. */
1327 if (type_must_agree)
1328 {
1329 if (!compare_type_characteristics (s1, s2)
1330 || !compare_type_characteristics (s2, s1))
1331 {
1332 snprintf (errmsg, err_len, "Type mismatch in argument '%s' (%s/%s)",
1333 s1->name, gfc_dummy_typename (&s1->ts),
1334 gfc_dummy_typename (&s2->ts));
1335 return false;
1336 }
1337 if (!compare_rank (s1, s2))
1338 {
1339 snprintf (errmsg, err_len, "Rank mismatch in argument '%s' (%i/%i)",
1340 s1->name, symbol_rank (s1), symbol_rank (s2));
1341 return false;
1342 }
1343 }
1344
1345 /* Check INTENT. */
1346 if (s1->attr.intent != s2->attr.intent && !s1->attr.artificial
1347 && !s2->attr.artificial)
1348 {
1349 snprintf (errmsg, err_len, "INTENT mismatch in argument '%s'",
1350 s1->name);
1351 return false;
1352 }
1353
1354 /* Check OPTIONAL attribute. */
1355 if (s1->attr.optional != s2->attr.optional)
1356 {
1357 snprintf (errmsg, err_len, "OPTIONAL mismatch in argument '%s'",
1358 s1->name);
1359 return false;
1360 }
1361
1362 /* Check ALLOCATABLE attribute. */
1363 if (s1->attr.allocatable != s2->attr.allocatable)
1364 {
1365 snprintf (errmsg, err_len, "ALLOCATABLE mismatch in argument '%s'",
1366 s1->name);
1367 return false;
1368 }
1369
1370 /* Check POINTER attribute. */
1371 if (s1->attr.pointer != s2->attr.pointer)
1372 {
1373 snprintf (errmsg, err_len, "POINTER mismatch in argument '%s'",
1374 s1->name);
1375 return false;
1376 }
1377
1378 /* Check TARGET attribute. */
1379 if (s1->attr.target != s2->attr.target)
1380 {
1381 snprintf (errmsg, err_len, "TARGET mismatch in argument '%s'",
1382 s1->name);
1383 return false;
1384 }
1385
1386 /* Check ASYNCHRONOUS attribute. */
1387 if (s1->attr.asynchronous != s2->attr.asynchronous)
1388 {
1389 snprintf (errmsg, err_len, "ASYNCHRONOUS mismatch in argument '%s'",
1390 s1->name);
1391 return false;
1392 }
1393
1394 /* Check CONTIGUOUS attribute. */
1395 if (s1->attr.contiguous != s2->attr.contiguous)
1396 {
1397 snprintf (errmsg, err_len, "CONTIGUOUS mismatch in argument '%s'",
1398 s1->name);
1399 return false;
1400 }
1401
1402 /* Check VALUE attribute. */
1403 if (s1->attr.value != s2->attr.value)
1404 {
1405 snprintf (errmsg, err_len, "VALUE mismatch in argument '%s'",
1406 s1->name);
1407 return false;
1408 }
1409
1410 /* Check VOLATILE attribute. */
1411 if (s1->attr.volatile_ != s2->attr.volatile_)
1412 {
1413 snprintf (errmsg, err_len, "VOLATILE mismatch in argument '%s'",
1414 s1->name);
1415 return false;
1416 }
1417
1418 /* Check interface of dummy procedures. */
1419 if (s1->attr.flavor == FL_PROCEDURE)
1420 {
1421 char err[200];
1422 if (!gfc_compare_interfaces (s1, s2, s2->name, 0, 1, err, sizeof(err),
1423 NULL, NULL))
1424 {
1425 snprintf (errmsg, err_len, "Interface mismatch in dummy procedure "
1426 "'%s': %s", s1->name, err);
1427 return false;
1428 }
1429 }
1430
1431 /* Check string length. */
1432 if (s1->ts.type == BT_CHARACTER
1433 && s1->ts.u.cl && s1->ts.u.cl->length
1434 && s2->ts.u.cl && s2->ts.u.cl->length)
1435 {
1436 int compval = gfc_dep_compare_expr (s1->ts.u.cl->length,
1437 s2->ts.u.cl->length);
1438 switch (compval)
1439 {
1440 case -1:
1441 case 1:
1442 case -3:
1443 snprintf (errmsg, err_len, "Character length mismatch "
1444 "in argument '%s'", s1->name);
1445 return false;
1446
1447 case -2:
1448 /* FIXME: Implement a warning for this case.
1449 gfc_warning (0, "Possible character length mismatch in argument %qs",
1450 s1->name);*/
1451 break;
1452
1453 case 0:
1454 break;
1455
1456 default:
1457 gfc_internal_error ("check_dummy_characteristics: Unexpected result "
1458 "%i of gfc_dep_compare_expr", compval);
1459 break;
1460 }
1461 }
1462
1463 /* Check array shape. */
1464 if (s1->as && s2->as)
1465 {
1466 int i, compval;
1467 gfc_expr *shape1, *shape2;
1468
1469 /* Sometimes the ambiguity between deferred shape and assumed shape
1470 does not get resolved in module procedures, where the only explicit
1471 declaration of the dummy is in the interface. */
1472 if (s1->ns->proc_name && s1->ns->proc_name->attr.module_procedure
1473 && s1->as->type == AS_ASSUMED_SHAPE
1474 && s2->as->type == AS_DEFERRED)
1475 {
1476 s2->as->type = AS_ASSUMED_SHAPE;
1477 for (i = 0; i < s2->as->rank; i++)
1478 if (s1->as->lower[i] != NULL)
1479 s2->as->lower[i] = gfc_copy_expr (s1->as->lower[i]);
1480 }
1481
1482 if (s1->as->type != s2->as->type)
1483 {
1484 snprintf (errmsg, err_len, "Shape mismatch in argument '%s'",
1485 s1->name);
1486 return false;
1487 }
1488
1489 if (s1->as->corank != s2->as->corank)
1490 {
1491 snprintf (errmsg, err_len, "Corank mismatch in argument '%s' (%i/%i)",
1492 s1->name, s1->as->corank, s2->as->corank);
1493 return false;
1494 }
1495
1496 if (s1->as->type == AS_EXPLICIT)
1497 for (i = 0; i < s1->as->rank + MAX (0, s1->as->corank-1); i++)
1498 {
1499 shape1 = gfc_subtract (gfc_copy_expr (s1->as->upper[i]),
1500 gfc_copy_expr (s1->as->lower[i]));
1501 shape2 = gfc_subtract (gfc_copy_expr (s2->as->upper[i]),
1502 gfc_copy_expr (s2->as->lower[i]));
1503 compval = gfc_dep_compare_expr (shape1, shape2);
1504 gfc_free_expr (shape1);
1505 gfc_free_expr (shape2);
1506 switch (compval)
1507 {
1508 case -1:
1509 case 1:
1510 case -3:
1511 if (i < s1->as->rank)
1512 snprintf (errmsg, err_len, "Shape mismatch in dimension %i of"
1513 " argument '%s'", i + 1, s1->name);
1514 else
1515 snprintf (errmsg, err_len, "Shape mismatch in codimension %i "
1516 "of argument '%s'", i - s1->as->rank + 1, s1->name);
1517 return false;
1518
1519 case -2:
1520 /* FIXME: Implement a warning for this case.
1521 gfc_warning (0, "Possible shape mismatch in argument %qs",
1522 s1->name);*/
1523 break;
1524
1525 case 0:
1526 break;
1527
1528 default:
1529 gfc_internal_error ("check_dummy_characteristics: Unexpected "
1530 "result %i of gfc_dep_compare_expr",
1531 compval);
1532 break;
1533 }
1534 }
1535 }
1536
1537 return true;
1538 }
1539
1540
1541 /* Check if the characteristics of two function results match,
1542 cf. F08:12.3.3. */
1543
1544 bool
1545 gfc_check_result_characteristics (gfc_symbol *s1, gfc_symbol *s2,
1546 char *errmsg, int err_len)
1547 {
1548 gfc_symbol *r1, *r2;
1549
1550 if (s1->ts.interface && s1->ts.interface->result)
1551 r1 = s1->ts.interface->result;
1552 else
1553 r1 = s1->result ? s1->result : s1;
1554
1555 if (s2->ts.interface && s2->ts.interface->result)
1556 r2 = s2->ts.interface->result;
1557 else
1558 r2 = s2->result ? s2->result : s2;
1559
1560 if (r1->ts.type == BT_UNKNOWN)
1561 return true;
1562
1563 /* Check type and rank. */
1564 if (!compare_type_characteristics (r1, r2))
1565 {
1566 snprintf (errmsg, err_len, "Type mismatch in function result (%s/%s)",
1567 gfc_typename (&r1->ts), gfc_typename (&r2->ts));
1568 return false;
1569 }
1570 if (!compare_rank (r1, r2))
1571 {
1572 snprintf (errmsg, err_len, "Rank mismatch in function result (%i/%i)",
1573 symbol_rank (r1), symbol_rank (r2));
1574 return false;
1575 }
1576
1577 /* Check ALLOCATABLE attribute. */
1578 if (r1->attr.allocatable != r2->attr.allocatable)
1579 {
1580 snprintf (errmsg, err_len, "ALLOCATABLE attribute mismatch in "
1581 "function result");
1582 return false;
1583 }
1584
1585 /* Check POINTER attribute. */
1586 if (r1->attr.pointer != r2->attr.pointer)
1587 {
1588 snprintf (errmsg, err_len, "POINTER attribute mismatch in "
1589 "function result");
1590 return false;
1591 }
1592
1593 /* Check CONTIGUOUS attribute. */
1594 if (r1->attr.contiguous != r2->attr.contiguous)
1595 {
1596 snprintf (errmsg, err_len, "CONTIGUOUS attribute mismatch in "
1597 "function result");
1598 return false;
1599 }
1600
1601 /* Check PROCEDURE POINTER attribute. */
1602 if (r1 != s1 && r1->attr.proc_pointer != r2->attr.proc_pointer)
1603 {
1604 snprintf (errmsg, err_len, "PROCEDURE POINTER mismatch in "
1605 "function result");
1606 return false;
1607 }
1608
1609 /* Check string length. */
1610 if (r1->ts.type == BT_CHARACTER && r1->ts.u.cl && r2->ts.u.cl)
1611 {
1612 if (r1->ts.deferred != r2->ts.deferred)
1613 {
1614 snprintf (errmsg, err_len, "Character length mismatch "
1615 "in function result");
1616 return false;
1617 }
1618
1619 if (r1->ts.u.cl->length && r2->ts.u.cl->length)
1620 {
1621 int compval = gfc_dep_compare_expr (r1->ts.u.cl->length,
1622 r2->ts.u.cl->length);
1623 switch (compval)
1624 {
1625 case -1:
1626 case 1:
1627 case -3:
1628 snprintf (errmsg, err_len, "Character length mismatch "
1629 "in function result");
1630 return false;
1631
1632 case -2:
1633 /* FIXME: Implement a warning for this case.
1634 snprintf (errmsg, err_len, "Possible character length mismatch "
1635 "in function result");*/
1636 break;
1637
1638 case 0:
1639 break;
1640
1641 default:
1642 gfc_internal_error ("check_result_characteristics (1): Unexpected "
1643 "result %i of gfc_dep_compare_expr", compval);
1644 break;
1645 }
1646 }
1647 }
1648
1649 /* Check array shape. */
1650 if (!r1->attr.allocatable && !r1->attr.pointer && r1->as && r2->as)
1651 {
1652 int i, compval;
1653 gfc_expr *shape1, *shape2;
1654
1655 if (r1->as->type != r2->as->type)
1656 {
1657 snprintf (errmsg, err_len, "Shape mismatch in function result");
1658 return false;
1659 }
1660
1661 if (r1->as->type == AS_EXPLICIT)
1662 for (i = 0; i < r1->as->rank + r1->as->corank; i++)
1663 {
1664 shape1 = gfc_subtract (gfc_copy_expr (r1->as->upper[i]),
1665 gfc_copy_expr (r1->as->lower[i]));
1666 shape2 = gfc_subtract (gfc_copy_expr (r2->as->upper[i]),
1667 gfc_copy_expr (r2->as->lower[i]));
1668 compval = gfc_dep_compare_expr (shape1, shape2);
1669 gfc_free_expr (shape1);
1670 gfc_free_expr (shape2);
1671 switch (compval)
1672 {
1673 case -1:
1674 case 1:
1675 case -3:
1676 snprintf (errmsg, err_len, "Shape mismatch in dimension %i of "
1677 "function result", i + 1);
1678 return false;
1679
1680 case -2:
1681 /* FIXME: Implement a warning for this case.
1682 gfc_warning (0, "Possible shape mismatch in return value");*/
1683 break;
1684
1685 case 0:
1686 break;
1687
1688 default:
1689 gfc_internal_error ("check_result_characteristics (2): "
1690 "Unexpected result %i of "
1691 "gfc_dep_compare_expr", compval);
1692 break;
1693 }
1694 }
1695 }
1696
1697 return true;
1698 }
1699
1700
1701 /* 'Compare' two formal interfaces associated with a pair of symbols.
1702 We return true if there exists an actual argument list that
1703 would be ambiguous between the two interfaces, zero otherwise.
1704 'strict_flag' specifies whether all the characteristics are
1705 required to match, which is not the case for ambiguity checks.
1706 'p1' and 'p2' are the PASS arguments of both procedures (if applicable). */
1707
1708 bool
1709 gfc_compare_interfaces (gfc_symbol *s1, gfc_symbol *s2, const char *name2,
1710 int generic_flag, int strict_flag,
1711 char *errmsg, int err_len,
1712 const char *p1, const char *p2,
1713 bool *bad_result_characteristics)
1714 {
1715 gfc_formal_arglist *f1, *f2;
1716
1717 gcc_assert (name2 != NULL);
1718
1719 if (bad_result_characteristics)
1720 *bad_result_characteristics = false;
1721
1722 if (s1->attr.function && (s2->attr.subroutine
1723 || (!s2->attr.function && s2->ts.type == BT_UNKNOWN
1724 && gfc_get_default_type (name2, s2->ns)->type == BT_UNKNOWN)))
1725 {
1726 if (errmsg != NULL)
1727 snprintf (errmsg, err_len, "'%s' is not a function", name2);
1728 return false;
1729 }
1730
1731 if (s1->attr.subroutine && s2->attr.function)
1732 {
1733 if (errmsg != NULL)
1734 snprintf (errmsg, err_len, "'%s' is not a subroutine", name2);
1735 return false;
1736 }
1737
1738 /* Do strict checks on all characteristics
1739 (for dummy procedures and procedure pointer assignments). */
1740 if (!generic_flag && strict_flag)
1741 {
1742 if (s1->attr.function && s2->attr.function)
1743 {
1744 /* If both are functions, check result characteristics. */
1745 if (!gfc_check_result_characteristics (s1, s2, errmsg, err_len)
1746 || !gfc_check_result_characteristics (s2, s1, errmsg, err_len))
1747 {
1748 if (bad_result_characteristics)
1749 *bad_result_characteristics = true;
1750 return false;
1751 }
1752 }
1753
1754 if (s1->attr.pure && !s2->attr.pure)
1755 {
1756 snprintf (errmsg, err_len, "Mismatch in PURE attribute");
1757 return false;
1758 }
1759 if (s1->attr.elemental && !s2->attr.elemental)
1760 {
1761 snprintf (errmsg, err_len, "Mismatch in ELEMENTAL attribute");
1762 return false;
1763 }
1764 }
1765
1766 if (s1->attr.if_source == IFSRC_UNKNOWN
1767 || s2->attr.if_source == IFSRC_UNKNOWN)
1768 return true;
1769
1770 f1 = gfc_sym_get_dummy_args (s1);
1771 f2 = gfc_sym_get_dummy_args (s2);
1772
1773 /* Special case: No arguments. */
1774 if (f1 == NULL && f2 == NULL)
1775 return true;
1776
1777 if (generic_flag)
1778 {
1779 if (count_types_test (f1, f2, p1, p2)
1780 || count_types_test (f2, f1, p2, p1))
1781 return false;
1782
1783 /* Special case: alternate returns. If both f1->sym and f2->sym are
1784 NULL, then the leading formal arguments are alternate returns.
1785 The previous conditional should catch argument lists with
1786 different number of argument. */
1787 if (f1 && f1->sym == NULL && f2 && f2->sym == NULL)
1788 return true;
1789
1790 if (generic_correspondence (f1, f2, p1, p2)
1791 || generic_correspondence (f2, f1, p2, p1))
1792 return false;
1793 }
1794 else
1795 /* Perform the abbreviated correspondence test for operators (the
1796 arguments cannot be optional and are always ordered correctly).
1797 This is also done when comparing interfaces for dummy procedures and in
1798 procedure pointer assignments. */
1799
1800 for (; f1 || f2; f1 = f1->next, f2 = f2->next)
1801 {
1802 /* Check existence. */
1803 if (f1 == NULL || f2 == NULL)
1804 {
1805 if (errmsg != NULL)
1806 snprintf (errmsg, err_len, "'%s' has the wrong number of "
1807 "arguments", name2);
1808 return false;
1809 }
1810
1811 if (strict_flag)
1812 {
1813 /* Check all characteristics. */
1814 if (!gfc_check_dummy_characteristics (f1->sym, f2->sym, true,
1815 errmsg, err_len))
1816 return false;
1817 }
1818 else
1819 {
1820 /* Operators: Only check type and rank of arguments. */
1821 if (!compare_type (f2->sym, f1->sym))
1822 {
1823 if (errmsg != NULL)
1824 snprintf (errmsg, err_len, "Type mismatch in argument '%s' "
1825 "(%s/%s)", f1->sym->name,
1826 gfc_typename (&f1->sym->ts),
1827 gfc_typename (&f2->sym->ts));
1828 return false;
1829 }
1830 if (!compare_rank (f2->sym, f1->sym))
1831 {
1832 if (errmsg != NULL)
1833 snprintf (errmsg, err_len, "Rank mismatch in argument "
1834 "'%s' (%i/%i)", f1->sym->name,
1835 symbol_rank (f1->sym), symbol_rank (f2->sym));
1836 return false;
1837 }
1838 if ((gfc_option.allow_std & GFC_STD_F2008)
1839 && (compare_ptr_alloc(f1->sym, f2->sym)
1840 || compare_ptr_alloc(f2->sym, f1->sym)))
1841 {
1842 if (errmsg != NULL)
1843 snprintf (errmsg, err_len, "Mismatching POINTER/ALLOCATABLE "
1844 "attribute in argument '%s' ", f1->sym->name);
1845 return false;
1846 }
1847 }
1848 }
1849
1850 return true;
1851 }
1852
1853
1854 /* Given a pointer to an interface pointer, remove duplicate
1855 interfaces and make sure that all symbols are either functions
1856 or subroutines, and all of the same kind. Returns true if
1857 something goes wrong. */
1858
1859 static bool
1860 check_interface0 (gfc_interface *p, const char *interface_name)
1861 {
1862 gfc_interface *psave, *q, *qlast;
1863
1864 psave = p;
1865 for (; p; p = p->next)
1866 {
1867 /* Make sure all symbols in the interface have been defined as
1868 functions or subroutines. */
1869 if (((!p->sym->attr.function && !p->sym->attr.subroutine)
1870 || !p->sym->attr.if_source)
1871 && !gfc_fl_struct (p->sym->attr.flavor))
1872 {
1873 const char *guessed
1874 = gfc_lookup_function_fuzzy (p->sym->name, p->sym->ns->sym_root);
1875
1876 if (p->sym->attr.external)
1877 if (guessed)
1878 gfc_error ("Procedure %qs in %s at %L has no explicit interface"
1879 "; did you mean %qs?",
1880 p->sym->name, interface_name, &p->sym->declared_at,
1881 guessed);
1882 else
1883 gfc_error ("Procedure %qs in %s at %L has no explicit interface",
1884 p->sym->name, interface_name, &p->sym->declared_at);
1885 else
1886 if (guessed)
1887 gfc_error ("Procedure %qs in %s at %L is neither function nor "
1888 "subroutine; did you mean %qs?", p->sym->name,
1889 interface_name, &p->sym->declared_at, guessed);
1890 else
1891 gfc_error ("Procedure %qs in %s at %L is neither function nor "
1892 "subroutine", p->sym->name, interface_name,
1893 &p->sym->declared_at);
1894 return true;
1895 }
1896
1897 /* Verify that procedures are either all SUBROUTINEs or all FUNCTIONs. */
1898 if ((psave->sym->attr.function && !p->sym->attr.function
1899 && !gfc_fl_struct (p->sym->attr.flavor))
1900 || (psave->sym->attr.subroutine && !p->sym->attr.subroutine))
1901 {
1902 if (!gfc_fl_struct (p->sym->attr.flavor))
1903 gfc_error ("In %s at %L procedures must be either all SUBROUTINEs"
1904 " or all FUNCTIONs", interface_name,
1905 &p->sym->declared_at);
1906 else if (p->sym->attr.flavor == FL_DERIVED)
1907 gfc_error ("In %s at %L procedures must be all FUNCTIONs as the "
1908 "generic name is also the name of a derived type",
1909 interface_name, &p->sym->declared_at);
1910 return true;
1911 }
1912
1913 /* F2003, C1207. F2008, C1207. */
1914 if (p->sym->attr.proc == PROC_INTERNAL
1915 && !gfc_notify_std (GFC_STD_F2008, "Internal procedure "
1916 "%qs in %s at %L", p->sym->name,
1917 interface_name, &p->sym->declared_at))
1918 return true;
1919 }
1920 p = psave;
1921
1922 /* Remove duplicate interfaces in this interface list. */
1923 for (; p; p = p->next)
1924 {
1925 qlast = p;
1926
1927 for (q = p->next; q;)
1928 {
1929 if (p->sym != q->sym)
1930 {
1931 qlast = q;
1932 q = q->next;
1933 }
1934 else
1935 {
1936 /* Duplicate interface. */
1937 qlast->next = q->next;
1938 free (q);
1939 q = qlast->next;
1940 }
1941 }
1942 }
1943
1944 return false;
1945 }
1946
1947
1948 /* Check lists of interfaces to make sure that no two interfaces are
1949 ambiguous. Duplicate interfaces (from the same symbol) are OK here. */
1950
1951 static bool
1952 check_interface1 (gfc_interface *p, gfc_interface *q0,
1953 int generic_flag, const char *interface_name,
1954 bool referenced)
1955 {
1956 gfc_interface *q;
1957 for (; p; p = p->next)
1958 for (q = q0; q; q = q->next)
1959 {
1960 if (p->sym == q->sym)
1961 continue; /* Duplicates OK here. */
1962
1963 if (p->sym->name == q->sym->name && p->sym->module == q->sym->module)
1964 continue;
1965
1966 if (!gfc_fl_struct (p->sym->attr.flavor)
1967 && !gfc_fl_struct (q->sym->attr.flavor)
1968 && gfc_compare_interfaces (p->sym, q->sym, q->sym->name,
1969 generic_flag, 0, NULL, 0, NULL, NULL))
1970 {
1971 if (referenced)
1972 gfc_error ("Ambiguous interfaces in %s for %qs at %L "
1973 "and %qs at %L", interface_name,
1974 q->sym->name, &q->sym->declared_at,
1975 p->sym->name, &p->sym->declared_at);
1976 else if (!p->sym->attr.use_assoc && q->sym->attr.use_assoc)
1977 gfc_warning (0, "Ambiguous interfaces in %s for %qs at %L "
1978 "and %qs at %L", interface_name,
1979 q->sym->name, &q->sym->declared_at,
1980 p->sym->name, &p->sym->declared_at);
1981 else
1982 gfc_warning (0, "Although not referenced, %qs has ambiguous "
1983 "interfaces at %L", interface_name, &p->where);
1984 return true;
1985 }
1986 }
1987 return false;
1988 }
1989
1990
1991 /* Check the generic and operator interfaces of symbols to make sure
1992 that none of the interfaces conflict. The check has to be done
1993 after all of the symbols are actually loaded. */
1994
1995 static void
1996 check_sym_interfaces (gfc_symbol *sym)
1997 {
1998 /* Provide sufficient space to hold "generic interface 'symbol.symbol'". */
1999 char interface_name[2*GFC_MAX_SYMBOL_LEN+2 + sizeof("generic interface ''")];
2000 gfc_interface *p;
2001
2002 if (sym->ns != gfc_current_ns)
2003 return;
2004
2005 if (sym->generic != NULL)
2006 {
2007 size_t len = strlen (sym->name) + sizeof("generic interface ''");
2008 gcc_assert (len < sizeof (interface_name));
2009 sprintf (interface_name, "generic interface '%s'", sym->name);
2010 if (check_interface0 (sym->generic, interface_name))
2011 return;
2012
2013 for (p = sym->generic; p; p = p->next)
2014 {
2015 if (p->sym->attr.mod_proc
2016 && !p->sym->attr.module_procedure
2017 && (p->sym->attr.if_source != IFSRC_DECL
2018 || p->sym->attr.procedure))
2019 {
2020 gfc_error ("%qs at %L is not a module procedure",
2021 p->sym->name, &p->where);
2022 return;
2023 }
2024 }
2025
2026 /* Originally, this test was applied to host interfaces too;
2027 this is incorrect since host associated symbols, from any
2028 source, cannot be ambiguous with local symbols. */
2029 check_interface1 (sym->generic, sym->generic, 1, interface_name,
2030 sym->attr.referenced || !sym->attr.use_assoc);
2031 }
2032 }
2033
2034
2035 static void
2036 check_uop_interfaces (gfc_user_op *uop)
2037 {
2038 char interface_name[GFC_MAX_SYMBOL_LEN + sizeof("operator interface ''")];
2039 gfc_user_op *uop2;
2040 gfc_namespace *ns;
2041
2042 sprintf (interface_name, "operator interface '%s'", uop->name);
2043 if (check_interface0 (uop->op, interface_name))
2044 return;
2045
2046 for (ns = gfc_current_ns; ns; ns = ns->parent)
2047 {
2048 uop2 = gfc_find_uop (uop->name, ns);
2049 if (uop2 == NULL)
2050 continue;
2051
2052 check_interface1 (uop->op, uop2->op, 0,
2053 interface_name, true);
2054 }
2055 }
2056
2057 /* Given an intrinsic op, return an equivalent op if one exists,
2058 or INTRINSIC_NONE otherwise. */
2059
2060 gfc_intrinsic_op
2061 gfc_equivalent_op (gfc_intrinsic_op op)
2062 {
2063 switch(op)
2064 {
2065 case INTRINSIC_EQ:
2066 return INTRINSIC_EQ_OS;
2067
2068 case INTRINSIC_EQ_OS:
2069 return INTRINSIC_EQ;
2070
2071 case INTRINSIC_NE:
2072 return INTRINSIC_NE_OS;
2073
2074 case INTRINSIC_NE_OS:
2075 return INTRINSIC_NE;
2076
2077 case INTRINSIC_GT:
2078 return INTRINSIC_GT_OS;
2079
2080 case INTRINSIC_GT_OS:
2081 return INTRINSIC_GT;
2082
2083 case INTRINSIC_GE:
2084 return INTRINSIC_GE_OS;
2085
2086 case INTRINSIC_GE_OS:
2087 return INTRINSIC_GE;
2088
2089 case INTRINSIC_LT:
2090 return INTRINSIC_LT_OS;
2091
2092 case INTRINSIC_LT_OS:
2093 return INTRINSIC_LT;
2094
2095 case INTRINSIC_LE:
2096 return INTRINSIC_LE_OS;
2097
2098 case INTRINSIC_LE_OS:
2099 return INTRINSIC_LE;
2100
2101 default:
2102 return INTRINSIC_NONE;
2103 }
2104 }
2105
2106 /* For the namespace, check generic, user operator and intrinsic
2107 operator interfaces for consistency and to remove duplicate
2108 interfaces. We traverse the whole namespace, counting on the fact
2109 that most symbols will not have generic or operator interfaces. */
2110
2111 void
2112 gfc_check_interfaces (gfc_namespace *ns)
2113 {
2114 gfc_namespace *old_ns, *ns2;
2115 char interface_name[GFC_MAX_SYMBOL_LEN + sizeof("intrinsic '' operator")];
2116 int i;
2117
2118 old_ns = gfc_current_ns;
2119 gfc_current_ns = ns;
2120
2121 gfc_traverse_ns (ns, check_sym_interfaces);
2122
2123 gfc_traverse_user_op (ns, check_uop_interfaces);
2124
2125 for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++)
2126 {
2127 if (i == INTRINSIC_USER)
2128 continue;
2129
2130 if (i == INTRINSIC_ASSIGN)
2131 strcpy (interface_name, "intrinsic assignment operator");
2132 else
2133 sprintf (interface_name, "intrinsic '%s' operator",
2134 gfc_op2string ((gfc_intrinsic_op) i));
2135
2136 if (check_interface0 (ns->op[i], interface_name))
2137 continue;
2138
2139 if (ns->op[i])
2140 gfc_check_operator_interface (ns->op[i]->sym, (gfc_intrinsic_op) i,
2141 ns->op[i]->where);
2142
2143 for (ns2 = ns; ns2; ns2 = ns2->parent)
2144 {
2145 gfc_intrinsic_op other_op;
2146
2147 if (check_interface1 (ns->op[i], ns2->op[i], 0,
2148 interface_name, true))
2149 goto done;
2150
2151 /* i should be gfc_intrinsic_op, but has to be int with this cast
2152 here for stupid C++ compatibility rules. */
2153 other_op = gfc_equivalent_op ((gfc_intrinsic_op) i);
2154 if (other_op != INTRINSIC_NONE
2155 && check_interface1 (ns->op[i], ns2->op[other_op],
2156 0, interface_name, true))
2157 goto done;
2158 }
2159 }
2160
2161 done:
2162 gfc_current_ns = old_ns;
2163 }
2164
2165
2166 /* Given a symbol of a formal argument list and an expression, if the
2167 formal argument is allocatable, check that the actual argument is
2168 allocatable. Returns true if compatible, zero if not compatible. */
2169
2170 static bool
2171 compare_allocatable (gfc_symbol *formal, gfc_expr *actual)
2172 {
2173 if (formal->attr.allocatable
2174 || (formal->ts.type == BT_CLASS && CLASS_DATA (formal)->attr.allocatable))
2175 {
2176 symbol_attribute attr = gfc_expr_attr (actual);
2177 if (actual->ts.type == BT_CLASS && !attr.class_ok)
2178 return true;
2179 else if (!attr.allocatable)
2180 return false;
2181 }
2182
2183 return true;
2184 }
2185
2186
2187 /* Given a symbol of a formal argument list and an expression, if the
2188 formal argument is a pointer, see if the actual argument is a
2189 pointer. Returns nonzero if compatible, zero if not compatible. */
2190
2191 static int
2192 compare_pointer (gfc_symbol *formal, gfc_expr *actual)
2193 {
2194 symbol_attribute attr;
2195
2196 if (formal->attr.pointer
2197 || (formal->ts.type == BT_CLASS && CLASS_DATA (formal)
2198 && CLASS_DATA (formal)->attr.class_pointer))
2199 {
2200 attr = gfc_expr_attr (actual);
2201
2202 /* Fortran 2008 allows non-pointer actual arguments. */
2203 if (!attr.pointer && attr.target && formal->attr.intent == INTENT_IN)
2204 return 2;
2205
2206 if (!attr.pointer)
2207 return 0;
2208 }
2209
2210 return 1;
2211 }
2212
2213
2214 /* Emit clear error messages for rank mismatch. */
2215
2216 static void
2217 argument_rank_mismatch (const char *name, locus *where,
2218 int rank1, int rank2, locus *where_formal)
2219 {
2220
2221 /* TS 29113, C407b. */
2222 if (where_formal == NULL)
2223 {
2224 if (rank2 == -1)
2225 gfc_error ("The assumed-rank array at %L requires that the dummy "
2226 "argument %qs has assumed-rank", where, name);
2227 else if (rank1 == 0)
2228 gfc_error_opt (0, "Rank mismatch in argument %qs "
2229 "at %L (scalar and rank-%d)", name, where, rank2);
2230 else if (rank2 == 0)
2231 gfc_error_opt (0, "Rank mismatch in argument %qs "
2232 "at %L (rank-%d and scalar)", name, where, rank1);
2233 else
2234 gfc_error_opt (0, "Rank mismatch in argument %qs "
2235 "at %L (rank-%d and rank-%d)", name, where, rank1,
2236 rank2);
2237 }
2238 else
2239 {
2240 gcc_assert (rank2 != -1);
2241 if (rank1 == 0)
2242 gfc_error_opt (0, "Rank mismatch between actual argument at %L "
2243 "and actual argument at %L (scalar and rank-%d)",
2244 where, where_formal, rank2);
2245 else if (rank2 == 0)
2246 gfc_error_opt (0, "Rank mismatch between actual argument at %L "
2247 "and actual argument at %L (rank-%d and scalar)",
2248 where, where_formal, rank1);
2249 else
2250 gfc_error_opt (0, "Rank mismatch between actual argument at %L "
2251 "and actual argument at %L (rank-%d and rank-%d)", where,
2252 where_formal, rank1, rank2);
2253 }
2254 }
2255
2256
2257 /* Under certain conditions, a scalar actual argument can be passed
2258 to an array dummy argument - see F2018, 15.5.2.4, paragraph 14.
2259 This function returns true for these conditions so that an error
2260 or warning for this can be suppressed later. Always return false
2261 for expressions with rank > 0. */
2262
2263 bool
2264 maybe_dummy_array_arg (gfc_expr *e)
2265 {
2266 gfc_symbol *s;
2267 gfc_ref *ref;
2268 bool array_pointer = false;
2269 bool assumed_shape = false;
2270 bool scalar_ref = true;
2271
2272 if (e->rank > 0)
2273 return false;
2274
2275 if (e->ts.type == BT_CHARACTER && e->ts.kind == 1)
2276 return true;
2277
2278 /* If this comes from a constructor, it has been an array element
2279 originally. */
2280
2281 if (e->expr_type == EXPR_CONSTANT)
2282 return e->from_constructor;
2283
2284 if (e->expr_type != EXPR_VARIABLE)
2285 return false;
2286
2287 s = e->symtree->n.sym;
2288
2289 if (s->attr.dimension)
2290 {
2291 scalar_ref = false;
2292 array_pointer = s->attr.pointer;
2293 }
2294
2295 if (s->as && s->as->type == AS_ASSUMED_SHAPE)
2296 assumed_shape = true;
2297
2298 for (ref=e->ref; ref; ref=ref->next)
2299 {
2300 if (ref->type == REF_COMPONENT)
2301 {
2302 symbol_attribute *attr;
2303 attr = &ref->u.c.component->attr;
2304 if (attr->dimension)
2305 {
2306 array_pointer = attr->pointer;
2307 assumed_shape = false;
2308 scalar_ref = false;
2309 }
2310 else
2311 scalar_ref = true;
2312 }
2313 }
2314
2315 return !(scalar_ref || array_pointer || assumed_shape);
2316 }
2317
2318 /* Given a symbol of a formal argument list and an expression, see if
2319 the two are compatible as arguments. Returns true if
2320 compatible, false if not compatible. */
2321
2322 static bool
2323 compare_parameter (gfc_symbol *formal, gfc_expr *actual,
2324 int ranks_must_agree, int is_elemental, locus *where)
2325 {
2326 gfc_ref *ref;
2327 bool rank_check, is_pointer;
2328 char err[200];
2329 gfc_component *ppc;
2330
2331 /* If the formal arg has type BT_VOID, it's to one of the iso_c_binding
2332 procs c_f_pointer or c_f_procpointer, and we need to accept most
2333 pointers the user could give us. This should allow that. */
2334 if (formal->ts.type == BT_VOID)
2335 return true;
2336
2337 if (formal->ts.type == BT_DERIVED
2338 && formal->ts.u.derived && formal->ts.u.derived->ts.is_iso_c
2339 && actual->ts.type == BT_DERIVED
2340 && actual->ts.u.derived && actual->ts.u.derived->ts.is_iso_c)
2341 return true;
2342
2343 if (formal->ts.type == BT_CLASS && actual->ts.type == BT_DERIVED)
2344 /* Make sure the vtab symbol is present when
2345 the module variables are generated. */
2346 gfc_find_derived_vtab (actual->ts.u.derived);
2347
2348 if (actual->ts.type == BT_PROCEDURE)
2349 {
2350 gfc_symbol *act_sym = actual->symtree->n.sym;
2351
2352 if (formal->attr.flavor != FL_PROCEDURE)
2353 {
2354 if (where)
2355 gfc_error ("Invalid procedure argument at %L", &actual->where);
2356 return false;
2357 }
2358
2359 if (!gfc_compare_interfaces (formal, act_sym, act_sym->name, 0, 1, err,
2360 sizeof(err), NULL, NULL))
2361 {
2362 if (where)
2363 gfc_error_opt (0, "Interface mismatch in dummy procedure %qs at %L:"
2364 " %s", formal->name, &actual->where, err);
2365 return false;
2366 }
2367
2368 if (formal->attr.function && !act_sym->attr.function)
2369 {
2370 gfc_add_function (&act_sym->attr, act_sym->name,
2371 &act_sym->declared_at);
2372 if (act_sym->ts.type == BT_UNKNOWN
2373 && !gfc_set_default_type (act_sym, 1, act_sym->ns))
2374 return false;
2375 }
2376 else if (formal->attr.subroutine && !act_sym->attr.subroutine)
2377 gfc_add_subroutine (&act_sym->attr, act_sym->name,
2378 &act_sym->declared_at);
2379
2380 return true;
2381 }
2382
2383 ppc = gfc_get_proc_ptr_comp (actual);
2384 if (ppc && ppc->ts.interface)
2385 {
2386 if (!gfc_compare_interfaces (formal, ppc->ts.interface, ppc->name, 0, 1,
2387 err, sizeof(err), NULL, NULL))
2388 {
2389 if (where)
2390 gfc_error_opt (0, "Interface mismatch in dummy procedure %qs at %L:"
2391 " %s", formal->name, &actual->where, err);
2392 return false;
2393 }
2394 }
2395
2396 /* F2008, C1241. */
2397 if (formal->attr.pointer && formal->attr.contiguous
2398 && !gfc_is_simply_contiguous (actual, true, false))
2399 {
2400 if (where)
2401 gfc_error ("Actual argument to contiguous pointer dummy %qs at %L "
2402 "must be simply contiguous", formal->name, &actual->where);
2403 return false;
2404 }
2405
2406 symbol_attribute actual_attr = gfc_expr_attr (actual);
2407 if (actual->ts.type == BT_CLASS && !actual_attr.class_ok)
2408 return true;
2409
2410 if ((actual->expr_type != EXPR_NULL || actual->ts.type != BT_UNKNOWN)
2411 && actual->ts.type != BT_HOLLERITH
2412 && formal->ts.type != BT_ASSUMED
2413 && !(formal->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
2414 && !gfc_compare_types (&formal->ts, &actual->ts)
2415 && !(formal->ts.type == BT_DERIVED && actual->ts.type == BT_CLASS
2416 && gfc_compare_derived_types (formal->ts.u.derived,
2417 CLASS_DATA (actual)->ts.u.derived)))
2418 {
2419 if (where)
2420 {
2421 if (formal->attr.artificial)
2422 {
2423 if (!flag_allow_argument_mismatch || !formal->error)
2424 gfc_error_opt (0, "Type mismatch between actual argument at %L "
2425 "and actual argument at %L (%s/%s).",
2426 &actual->where,
2427 &formal->declared_at,
2428 gfc_typename (actual),
2429 gfc_dummy_typename (&formal->ts));
2430
2431 formal->error = 1;
2432 }
2433 else
2434 gfc_error_opt (0, "Type mismatch in argument %qs at %L; passed %s "
2435 "to %s", formal->name, where, gfc_typename (actual),
2436 gfc_dummy_typename (&formal->ts));
2437 }
2438 return false;
2439 }
2440
2441 if (actual->ts.type == BT_ASSUMED && formal->ts.type != BT_ASSUMED)
2442 {
2443 if (where)
2444 gfc_error ("Assumed-type actual argument at %L requires that dummy "
2445 "argument %qs is of assumed type", &actual->where,
2446 formal->name);
2447 return false;
2448 }
2449
2450 /* F2008, 12.5.2.5; IR F08/0073. */
2451 if (formal->ts.type == BT_CLASS && formal->attr.class_ok
2452 && actual->expr_type != EXPR_NULL
2453 && ((CLASS_DATA (formal)->attr.class_pointer
2454 && formal->attr.intent != INTENT_IN)
2455 || CLASS_DATA (formal)->attr.allocatable))
2456 {
2457 if (actual->ts.type != BT_CLASS)
2458 {
2459 if (where)
2460 gfc_error ("Actual argument to %qs at %L must be polymorphic",
2461 formal->name, &actual->where);
2462 return false;
2463 }
2464
2465 if ((!UNLIMITED_POLY (formal) || !UNLIMITED_POLY(actual))
2466 && !gfc_compare_derived_types (CLASS_DATA (actual)->ts.u.derived,
2467 CLASS_DATA (formal)->ts.u.derived))
2468 {
2469 if (where)
2470 gfc_error ("Actual argument to %qs at %L must have the same "
2471 "declared type", formal->name, &actual->where);
2472 return false;
2473 }
2474 }
2475
2476 /* F08: 12.5.2.5 Allocatable and pointer dummy variables. However, this
2477 is necessary also for F03, so retain error for both.
2478 NOTE: Other type/kind errors pre-empt this error. Since they are F03
2479 compatible, no attempt has been made to channel to this one. */
2480 if (UNLIMITED_POLY (formal) && !UNLIMITED_POLY (actual)
2481 && (CLASS_DATA (formal)->attr.allocatable
2482 ||CLASS_DATA (formal)->attr.class_pointer))
2483 {
2484 if (where)
2485 gfc_error ("Actual argument to %qs at %L must be unlimited "
2486 "polymorphic since the formal argument is a "
2487 "pointer or allocatable unlimited polymorphic "
2488 "entity [F2008: 12.5.2.5]", formal->name,
2489 &actual->where);
2490 return false;
2491 }
2492
2493 if (formal->attr.codimension && !gfc_is_coarray (actual))
2494 {
2495 if (where)
2496 gfc_error ("Actual argument to %qs at %L must be a coarray",
2497 formal->name, &actual->where);
2498 return false;
2499 }
2500
2501 if (formal->attr.codimension && formal->attr.allocatable)
2502 {
2503 gfc_ref *last = NULL;
2504
2505 for (ref = actual->ref; ref; ref = ref->next)
2506 if (ref->type == REF_COMPONENT)
2507 last = ref;
2508
2509 /* F2008, 12.5.2.6. */
2510 if ((last && last->u.c.component->as->corank != formal->as->corank)
2511 || (!last
2512 && actual->symtree->n.sym->as->corank != formal->as->corank))
2513 {
2514 if (where)
2515 gfc_error ("Corank mismatch in argument %qs at %L (%d and %d)",
2516 formal->name, &actual->where, formal->as->corank,
2517 last ? last->u.c.component->as->corank
2518 : actual->symtree->n.sym->as->corank);
2519 return false;
2520 }
2521 }
2522
2523 if (formal->attr.codimension)
2524 {
2525 /* F2008, 12.5.2.8 + Corrig 2 (IR F08/0048). */
2526 /* F2018, 12.5.2.8. */
2527 if (formal->attr.dimension
2528 && (formal->attr.contiguous || formal->as->type != AS_ASSUMED_SHAPE)
2529 && actual_attr.dimension
2530 && !gfc_is_simply_contiguous (actual, true, true))
2531 {
2532 if (where)
2533 gfc_error ("Actual argument to %qs at %L must be simply "
2534 "contiguous or an element of such an array",
2535 formal->name, &actual->where);
2536 return false;
2537 }
2538
2539 /* F2008, C1303 and C1304. */
2540 if (formal->attr.intent != INTENT_INOUT
2541 && (((formal->ts.type == BT_DERIVED || formal->ts.type == BT_CLASS)
2542 && formal->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
2543 && formal->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)
2544 || formal->attr.lock_comp))
2545
2546 {
2547 if (where)
2548 gfc_error ("Actual argument to non-INTENT(INOUT) dummy %qs at %L, "
2549 "which is LOCK_TYPE or has a LOCK_TYPE component",
2550 formal->name, &actual->where);
2551 return false;
2552 }
2553
2554 /* TS18508, C702/C703. */
2555 if (formal->attr.intent != INTENT_INOUT
2556 && (((formal->ts.type == BT_DERIVED || formal->ts.type == BT_CLASS)
2557 && formal->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
2558 && formal->ts.u.derived->intmod_sym_id == ISOFORTRAN_EVENT_TYPE)
2559 || formal->attr.event_comp))
2560
2561 {
2562 if (where)
2563 gfc_error ("Actual argument to non-INTENT(INOUT) dummy %qs at %L, "
2564 "which is EVENT_TYPE or has a EVENT_TYPE component",
2565 formal->name, &actual->where);
2566 return false;
2567 }
2568 }
2569
2570 /* F2008, C1239/C1240. */
2571 if (actual->expr_type == EXPR_VARIABLE
2572 && (actual->symtree->n.sym->attr.asynchronous
2573 || actual->symtree->n.sym->attr.volatile_)
2574 && (formal->attr.asynchronous || formal->attr.volatile_)
2575 && actual->rank && formal->as
2576 && !gfc_is_simply_contiguous (actual, true, false)
2577 && ((formal->as->type != AS_ASSUMED_SHAPE
2578 && formal->as->type != AS_ASSUMED_RANK && !formal->attr.pointer)
2579 || formal->attr.contiguous))
2580 {
2581 if (where)
2582 gfc_error ("Dummy argument %qs has to be a pointer, assumed-shape or "
2583 "assumed-rank array without CONTIGUOUS attribute - as actual"
2584 " argument at %L is not simply contiguous and both are "
2585 "ASYNCHRONOUS or VOLATILE", formal->name, &actual->where);
2586 return false;
2587 }
2588
2589 if (formal->attr.allocatable && !formal->attr.codimension
2590 && actual_attr.codimension)
2591 {
2592 if (formal->attr.intent == INTENT_OUT)
2593 {
2594 if (where)
2595 gfc_error ("Passing coarray at %L to allocatable, noncoarray, "
2596 "INTENT(OUT) dummy argument %qs", &actual->where,
2597 formal->name);
2598 return false;
2599 }
2600 else if (warn_surprising && where && formal->attr.intent != INTENT_IN)
2601 gfc_warning (OPT_Wsurprising,
2602 "Passing coarray at %L to allocatable, noncoarray dummy "
2603 "argument %qs, which is invalid if the allocation status"
2604 " is modified", &actual->where, formal->name);
2605 }
2606
2607 /* If the rank is the same or the formal argument has assumed-rank. */
2608 if (symbol_rank (formal) == actual->rank || symbol_rank (formal) == -1)
2609 return true;
2610
2611 rank_check = where != NULL && !is_elemental && formal->as
2612 && (formal->as->type == AS_ASSUMED_SHAPE
2613 || formal->as->type == AS_DEFERRED)
2614 && actual->expr_type != EXPR_NULL;
2615
2616 /* Skip rank checks for NO_ARG_CHECK. */
2617 if (formal->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
2618 return true;
2619
2620 /* Scalar & coindexed, see: F2008, Section 12.5.2.4. */
2621 if (rank_check || ranks_must_agree
2622 || (formal->attr.pointer && actual->expr_type != EXPR_NULL)
2623 || (actual->rank != 0 && !(is_elemental || formal->attr.dimension))
2624 || (actual->rank == 0
2625 && ((formal->ts.type == BT_CLASS
2626 && CLASS_DATA (formal)->as->type == AS_ASSUMED_SHAPE)
2627 || (formal->ts.type != BT_CLASS
2628 && formal->as->type == AS_ASSUMED_SHAPE))
2629 && actual->expr_type != EXPR_NULL)
2630 || (actual->rank == 0 && formal->attr.dimension
2631 && gfc_is_coindexed (actual)))
2632 {
2633 if (where
2634 && (!formal->attr.artificial || (!formal->maybe_array
2635 && !maybe_dummy_array_arg (actual))))
2636 {
2637 locus *where_formal;
2638 if (formal->attr.artificial)
2639 where_formal = &formal->declared_at;
2640 else
2641 where_formal = NULL;
2642
2643 argument_rank_mismatch (formal->name, &actual->where,
2644 symbol_rank (formal), actual->rank,
2645 where_formal);
2646 }
2647 return false;
2648 }
2649 else if (actual->rank != 0 && (is_elemental || formal->attr.dimension))
2650 return true;
2651
2652 /* At this point, we are considering a scalar passed to an array. This
2653 is valid (cf. F95 12.4.1.1, F2003 12.4.1.2, and F2008 12.5.2.4),
2654 - if the actual argument is (a substring of) an element of a
2655 non-assumed-shape/non-pointer/non-polymorphic array; or
2656 - (F2003) if the actual argument is of type character of default/c_char
2657 kind. */
2658
2659 is_pointer = actual->expr_type == EXPR_VARIABLE
2660 ? actual->symtree->n.sym->attr.pointer : false;
2661
2662 for (ref = actual->ref; ref; ref = ref->next)
2663 {
2664 if (ref->type == REF_COMPONENT)
2665 is_pointer = ref->u.c.component->attr.pointer;
2666 else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT
2667 && ref->u.ar.dimen > 0
2668 && (!ref->next
2669 || (ref->next->type == REF_SUBSTRING && !ref->next->next)))
2670 break;
2671 }
2672
2673 if (actual->ts.type == BT_CLASS && actual->expr_type != EXPR_NULL)
2674 {
2675 if (where)
2676 gfc_error ("Polymorphic scalar passed to array dummy argument %qs "
2677 "at %L", formal->name, &actual->where);
2678 return false;
2679 }
2680
2681 if (actual->expr_type != EXPR_NULL && ref && actual->ts.type != BT_CHARACTER
2682 && (is_pointer || ref->u.ar.as->type == AS_ASSUMED_SHAPE))
2683 {
2684 if (where)
2685 {
2686 if (formal->attr.artificial)
2687 gfc_error ("Element of assumed-shape or pointer array "
2688 "as actual argument at %L cannot correspond to "
2689 "actual argument at %L",
2690 &actual->where, &formal->declared_at);
2691 else
2692 gfc_error ("Element of assumed-shape or pointer "
2693 "array passed to array dummy argument %qs at %L",
2694 formal->name, &actual->where);
2695 }
2696 return false;
2697 }
2698
2699 if (actual->ts.type == BT_CHARACTER && actual->expr_type != EXPR_NULL
2700 && (!ref || is_pointer || ref->u.ar.as->type == AS_ASSUMED_SHAPE))
2701 {
2702 if (formal->ts.kind != 1 && (gfc_option.allow_std & GFC_STD_GNU) == 0)
2703 {
2704 if (where)
2705 gfc_error ("Extension: Scalar non-default-kind, non-C_CHAR-kind "
2706 "CHARACTER actual argument with array dummy argument "
2707 "%qs at %L", formal->name, &actual->where);
2708 return false;
2709 }
2710
2711 if (where && (gfc_option.allow_std & GFC_STD_F2003) == 0)
2712 {
2713 gfc_error ("Fortran 2003: Scalar CHARACTER actual argument with "
2714 "array dummy argument %qs at %L",
2715 formal->name, &actual->where);
2716 return false;
2717 }
2718 else
2719 return ((gfc_option.allow_std & GFC_STD_F2003) != 0);
2720 }
2721
2722 if (ref == NULL && actual->expr_type != EXPR_NULL)
2723 {
2724 if (where
2725 && (!formal->attr.artificial || (!formal->maybe_array
2726 && !maybe_dummy_array_arg (actual))))
2727 {
2728 locus *where_formal;
2729 if (formal->attr.artificial)
2730 where_formal = &formal->declared_at;
2731 else
2732 where_formal = NULL;
2733
2734 argument_rank_mismatch (formal->name, &actual->where,
2735 symbol_rank (formal), actual->rank,
2736 where_formal);
2737 }
2738 return false;
2739 }
2740
2741 return true;
2742 }
2743
2744
2745 /* Returns the storage size of a symbol (formal argument) or
2746 zero if it cannot be determined. */
2747
2748 static unsigned long
2749 get_sym_storage_size (gfc_symbol *sym)
2750 {
2751 int i;
2752 unsigned long strlen, elements;
2753
2754 if (sym->ts.type == BT_CHARACTER)
2755 {
2756 if (sym->ts.u.cl && sym->ts.u.cl->length
2757 && sym->ts.u.cl->length->expr_type == EXPR_CONSTANT)
2758 strlen = mpz_get_ui (sym->ts.u.cl->length->value.integer);
2759 else
2760 return 0;
2761 }
2762 else
2763 strlen = 1;
2764
2765 if (symbol_rank (sym) == 0)
2766 return strlen;
2767
2768 elements = 1;
2769 if (sym->as->type != AS_EXPLICIT)
2770 return 0;
2771 for (i = 0; i < sym->as->rank; i++)
2772 {
2773 if (sym->as->upper[i]->expr_type != EXPR_CONSTANT
2774 || sym->as->lower[i]->expr_type != EXPR_CONSTANT)
2775 return 0;
2776
2777 elements *= mpz_get_si (sym->as->upper[i]->value.integer)
2778 - mpz_get_si (sym->as->lower[i]->value.integer) + 1L;
2779 }
2780
2781 return strlen*elements;
2782 }
2783
2784
2785 /* Returns the storage size of an expression (actual argument) or
2786 zero if it cannot be determined. For an array element, it returns
2787 the remaining size as the element sequence consists of all storage
2788 units of the actual argument up to the end of the array. */
2789
2790 static unsigned long
2791 get_expr_storage_size (gfc_expr *e)
2792 {
2793 int i;
2794 long int strlen, elements;
2795 long int substrlen = 0;
2796 bool is_str_storage = false;
2797 gfc_ref *ref;
2798
2799 if (e == NULL)
2800 return 0;
2801
2802 if (e->ts.type == BT_CHARACTER)
2803 {
2804 if (e->ts.u.cl && e->ts.u.cl->length
2805 && e->ts.u.cl->length->expr_type == EXPR_CONSTANT)
2806 strlen = mpz_get_si (e->ts.u.cl->length->value.integer);
2807 else if (e->expr_type == EXPR_CONSTANT
2808 && (e->ts.u.cl == NULL || e->ts.u.cl->length == NULL))
2809 strlen = e->value.character.length;
2810 else
2811 return 0;
2812 }
2813 else
2814 strlen = 1; /* Length per element. */
2815
2816 if (e->rank == 0 && !e->ref)
2817 return strlen;
2818
2819 elements = 1;
2820 if (!e->ref)
2821 {
2822 if (!e->shape)
2823 return 0;
2824 for (i = 0; i < e->rank; i++)
2825 elements *= mpz_get_si (e->shape[i]);
2826 return elements*strlen;
2827 }
2828
2829 for (ref = e->ref; ref; ref = ref->next)
2830 {
2831 if (ref->type == REF_SUBSTRING && ref->u.ss.start
2832 && ref->u.ss.start->expr_type == EXPR_CONSTANT)
2833 {
2834 if (is_str_storage)
2835 {
2836 /* The string length is the substring length.
2837 Set now to full string length. */
2838 if (!ref->u.ss.length || !ref->u.ss.length->length
2839 || ref->u.ss.length->length->expr_type != EXPR_CONSTANT)
2840 return 0;
2841
2842 strlen = mpz_get_ui (ref->u.ss.length->length->value.integer);
2843 }
2844 substrlen = strlen - mpz_get_ui (ref->u.ss.start->value.integer) + 1;
2845 continue;
2846 }
2847
2848 if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION)
2849 for (i = 0; i < ref->u.ar.dimen; i++)
2850 {
2851 long int start, end, stride;
2852 stride = 1;
2853
2854 if (ref->u.ar.stride[i])
2855 {
2856 if (ref->u.ar.stride[i]->expr_type == EXPR_CONSTANT)
2857 stride = mpz_get_si (ref->u.ar.stride[i]->value.integer);
2858 else
2859 return 0;
2860 }
2861
2862 if (ref->u.ar.start[i])
2863 {
2864 if (ref->u.ar.start[i]->expr_type == EXPR_CONSTANT)
2865 start = mpz_get_si (ref->u.ar.start[i]->value.integer);
2866 else
2867 return 0;
2868 }
2869 else if (ref->u.ar.as->lower[i]
2870 && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT)
2871 start = mpz_get_si (ref->u.ar.as->lower[i]->value.integer);
2872 else
2873 return 0;
2874
2875 if (ref->u.ar.end[i])
2876 {
2877 if (ref->u.ar.end[i]->expr_type == EXPR_CONSTANT)
2878 end = mpz_get_si (ref->u.ar.end[i]->value.integer);
2879 else
2880 return 0;
2881 }
2882 else if (ref->u.ar.as->upper[i]
2883 && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
2884 end = mpz_get_si (ref->u.ar.as->upper[i]->value.integer);
2885 else
2886 return 0;
2887
2888 elements *= (end - start)/stride + 1L;
2889 }
2890 else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_FULL)
2891 for (i = 0; i < ref->u.ar.as->rank; i++)
2892 {
2893 if (ref->u.ar.as->lower[i] && ref->u.ar.as->upper[i]
2894 && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT
2895 && ref->u.ar.as->lower[i]->ts.type == BT_INTEGER
2896 && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT
2897 && ref->u.ar.as->upper[i]->ts.type == BT_INTEGER)
2898 elements *= mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
2899 - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
2900 + 1L;
2901 else
2902 return 0;
2903 }
2904 else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT
2905 && e->expr_type == EXPR_VARIABLE)
2906 {
2907 if (ref->u.ar.as->type == AS_ASSUMED_SHAPE
2908 || e->symtree->n.sym->attr.pointer)
2909 {
2910 elements = 1;
2911 continue;
2912 }
2913
2914 /* Determine the number of remaining elements in the element
2915 sequence for array element designators. */
2916 is_str_storage = true;
2917 for (i = ref->u.ar.dimen - 1; i >= 0; i--)
2918 {
2919 if (ref->u.ar.start[i] == NULL
2920 || ref->u.ar.start[i]->expr_type != EXPR_CONSTANT
2921 || ref->u.ar.as->upper[i] == NULL
2922 || ref->u.ar.as->lower[i] == NULL
2923 || ref->u.ar.as->upper[i]->expr_type != EXPR_CONSTANT
2924 || ref->u.ar.as->lower[i]->expr_type != EXPR_CONSTANT)
2925 return 0;
2926
2927 elements
2928 = elements
2929 * (mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
2930 - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
2931 + 1L)
2932 - (mpz_get_si (ref->u.ar.start[i]->value.integer)
2933 - mpz_get_si (ref->u.ar.as->lower[i]->value.integer));
2934 }
2935 }
2936 else if (ref->type == REF_COMPONENT && ref->u.c.component->attr.function
2937 && ref->u.c.component->attr.proc_pointer
2938 && ref->u.c.component->attr.dimension)
2939 {
2940 /* Array-valued procedure-pointer components. */
2941 gfc_array_spec *as = ref->u.c.component->as;
2942 for (i = 0; i < as->rank; i++)
2943 {
2944 if (!as->upper[i] || !as->lower[i]
2945 || as->upper[i]->expr_type != EXPR_CONSTANT
2946 || as->lower[i]->expr_type != EXPR_CONSTANT)
2947 return 0;
2948
2949 elements = elements
2950 * (mpz_get_si (as->upper[i]->value.integer)
2951 - mpz_get_si (as->lower[i]->value.integer) + 1L);
2952 }
2953 }
2954 }
2955
2956 if (substrlen)
2957 return (is_str_storage) ? substrlen + (elements-1)*strlen
2958 : elements*strlen;
2959 else
2960 return elements*strlen;
2961 }
2962
2963
2964 /* Given an expression, check whether it is an array section
2965 which has a vector subscript. */
2966
2967 bool
2968 gfc_has_vector_subscript (gfc_expr *e)
2969 {
2970 int i;
2971 gfc_ref *ref;
2972
2973 if (e == NULL || e->rank == 0 || e->expr_type != EXPR_VARIABLE)
2974 return false;
2975
2976 for (ref = e->ref; ref; ref = ref->next)
2977 if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION)
2978 for (i = 0; i < ref->u.ar.dimen; i++)
2979 if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
2980 return true;
2981
2982 return false;
2983 }
2984
2985
2986 static bool
2987 is_procptr_result (gfc_expr *expr)
2988 {
2989 gfc_component *c = gfc_get_proc_ptr_comp (expr);
2990 if (c)
2991 return (c->ts.interface && (c->ts.interface->attr.proc_pointer == 1));
2992 else
2993 return ((expr->symtree->n.sym->result != expr->symtree->n.sym)
2994 && (expr->symtree->n.sym->result->attr.proc_pointer == 1));
2995 }
2996
2997
2998 /* Recursively append candidate argument ARG to CANDIDATES. Store the
2999 number of total candidates in CANDIDATES_LEN. */
3000
3001 static void
3002 lookup_arg_fuzzy_find_candidates (gfc_formal_arglist *arg,
3003 char **&candidates,
3004 size_t &candidates_len)
3005 {
3006 for (gfc_formal_arglist *p = arg; p && p->sym; p = p->next)
3007 vec_push (candidates, candidates_len, p->sym->name);
3008 }
3009
3010
3011 /* Lookup argument ARG fuzzily, taking names in ARGUMENTS into account. */
3012
3013 static const char*
3014 lookup_arg_fuzzy (const char *arg, gfc_formal_arglist *arguments)
3015 {
3016 char **candidates = NULL;
3017 size_t candidates_len = 0;
3018 lookup_arg_fuzzy_find_candidates (arguments, candidates, candidates_len);
3019 return gfc_closest_fuzzy_match (arg, candidates);
3020 }
3021
3022
3023 /* Given formal and actual argument lists, see if they are compatible.
3024 If they are compatible, the actual argument list is sorted to
3025 correspond with the formal list, and elements for missing optional
3026 arguments are inserted. If WHERE pointer is nonnull, then we issue
3027 errors when things don't match instead of just returning the status
3028 code. */
3029
3030 bool
3031 gfc_compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
3032 int ranks_must_agree, int is_elemental,
3033 bool in_statement_function, locus *where)
3034 {
3035 gfc_actual_arglist **new_arg, *a, *actual;
3036 gfc_formal_arglist *f;
3037 int i, n, na;
3038 unsigned long actual_size, formal_size;
3039 bool full_array = false;
3040 gfc_array_ref *actual_arr_ref;
3041
3042 actual = *ap;
3043
3044 if (actual == NULL && formal == NULL)
3045 return true;
3046
3047 n = 0;
3048 for (f = formal; f; f = f->next)
3049 n++;
3050
3051 new_arg = XALLOCAVEC (gfc_actual_arglist *, n);
3052
3053 for (i = 0; i < n; i++)
3054 new_arg[i] = NULL;
3055
3056 na = 0;
3057 f = formal;
3058 i = 0;
3059
3060 for (a = actual; a; a = a->next, f = f->next)
3061 {
3062 if (a->name != NULL && in_statement_function)
3063 {
3064 gfc_error ("Keyword argument %qs at %L is invalid in "
3065 "a statement function", a->name, &a->expr->where);
3066 return false;
3067 }
3068
3069 /* Look for keywords but ignore g77 extensions like %VAL. */
3070 if (a->name != NULL && a->name[0] != '%')
3071 {
3072 i = 0;
3073 for (f = formal; f; f = f->next, i++)
3074 {
3075 if (f->sym == NULL)
3076 continue;
3077 if (strcmp (f->sym->name, a->name) == 0)
3078 break;
3079 }
3080
3081 if (f == NULL)
3082 {
3083 if (where)
3084 {
3085 const char *guessed = lookup_arg_fuzzy (a->name, formal);
3086 if (guessed)
3087 gfc_error ("Keyword argument %qs at %L is not in "
3088 "the procedure; did you mean %qs?",
3089 a->name, &a->expr->where, guessed);
3090 else
3091 gfc_error ("Keyword argument %qs at %L is not in "
3092 "the procedure", a->name, &a->expr->where);
3093 }
3094 return false;
3095 }
3096
3097 if (new_arg[i] != NULL)
3098 {
3099 if (where)
3100 gfc_error ("Keyword argument %qs at %L is already associated "
3101 "with another actual argument", a->name,
3102 &a->expr->where);
3103 return false;
3104 }
3105 }
3106
3107 if (f == NULL)
3108 {
3109 if (where)
3110 gfc_error ("More actual than formal arguments in procedure "
3111 "call at %L", where);
3112
3113 return false;
3114 }
3115
3116 if (f->sym == NULL && a->expr == NULL)
3117 goto match;
3118
3119 if (f->sym == NULL)
3120 {
3121 /* These errors have to be issued, otherwise an ICE can occur.
3122 See PR 78865. */
3123 if (where)
3124 gfc_error_now ("Missing alternate return specifier in subroutine "
3125 "call at %L", where);
3126 return false;
3127 }
3128
3129 if (a->expr == NULL)
3130 {
3131 if (f->sym->attr.optional)
3132 continue;
3133 else
3134 {
3135 if (where)
3136 gfc_error_now ("Unexpected alternate return specifier in "
3137 "subroutine call at %L", where);
3138 return false;
3139 }
3140 }
3141
3142 /* Make sure that intrinsic vtables exist for calls to unlimited
3143 polymorphic formal arguments. */
3144 if (UNLIMITED_POLY (f->sym)
3145 && a->expr->ts.type != BT_DERIVED
3146 && a->expr->ts.type != BT_CLASS
3147 && a->expr->ts.type != BT_ASSUMED)
3148 gfc_find_vtab (&a->expr->ts);
3149
3150 if (a->expr->expr_type == EXPR_NULL
3151 && ((f->sym->ts.type != BT_CLASS && !f->sym->attr.pointer
3152 && (f->sym->attr.allocatable || !f->sym->attr.optional
3153 || (gfc_option.allow_std & GFC_STD_F2008) == 0))
3154 || (f->sym->ts.type == BT_CLASS
3155 && !CLASS_DATA (f->sym)->attr.class_pointer
3156 && (CLASS_DATA (f->sym)->attr.allocatable
3157 || !f->sym->attr.optional
3158 || (gfc_option.allow_std & GFC_STD_F2008) == 0))))
3159 {
3160 if (where
3161 && (!f->sym->attr.optional
3162 || (f->sym->ts.type != BT_CLASS && f->sym->attr.allocatable)
3163 || (f->sym->ts.type == BT_CLASS
3164 && CLASS_DATA (f->sym)->attr.allocatable)))
3165 gfc_error ("Unexpected NULL() intrinsic at %L to dummy %qs",
3166 where, f->sym->name);
3167 else if (where)
3168 gfc_error ("Fortran 2008: Null pointer at %L to non-pointer "
3169 "dummy %qs", where, f->sym->name);
3170
3171 return false;
3172 }
3173
3174 if (!compare_parameter (f->sym, a->expr, ranks_must_agree,
3175 is_elemental, where))
3176 return false;
3177
3178 /* TS 29113, 6.3p2. */
3179 if (f->sym->ts.type == BT_ASSUMED
3180 && (a->expr->ts.type == BT_DERIVED
3181 || (a->expr->ts.type == BT_CLASS && CLASS_DATA (a->expr))))
3182 {
3183 gfc_namespace *f2k_derived;
3184
3185 f2k_derived = a->expr->ts.type == BT_DERIVED
3186 ? a->expr->ts.u.derived->f2k_derived
3187 : CLASS_DATA (a->expr)->ts.u.derived->f2k_derived;
3188
3189 if (f2k_derived
3190 && (f2k_derived->finalizers || f2k_derived->tb_sym_root))
3191 {
3192 gfc_error ("Actual argument at %L to assumed-type dummy is of "
3193 "derived type with type-bound or FINAL procedures",
3194 &a->expr->where);
3195 return false;
3196 }
3197 }
3198
3199 /* Special case for character arguments. For allocatable, pointer
3200 and assumed-shape dummies, the string length needs to match
3201 exactly. */
3202 if (a->expr->ts.type == BT_CHARACTER
3203 && a->expr->ts.u.cl && a->expr->ts.u.cl->length
3204 && a->expr->ts.u.cl->length->expr_type == EXPR_CONSTANT
3205 && f->sym->ts.type == BT_CHARACTER && f->sym->ts.u.cl
3206 && f->sym->ts.u.cl->length
3207 && f->sym->ts.u.cl->length->expr_type == EXPR_CONSTANT
3208 && (f->sym->attr.pointer || f->sym->attr.allocatable
3209 || (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
3210 && (mpz_cmp (a->expr->ts.u.cl->length->value.integer,
3211 f->sym->ts.u.cl->length->value.integer) != 0))
3212 {
3213 if (where && (f->sym->attr.pointer || f->sym->attr.allocatable))
3214 gfc_warning (0, "Character length mismatch (%ld/%ld) between actual "
3215 "argument and pointer or allocatable dummy argument "
3216 "%qs at %L",
3217 mpz_get_si (a->expr->ts.u.cl->length->value.integer),
3218 mpz_get_si (f->sym->ts.u.cl->length->value.integer),
3219 f->sym->name, &a->expr->where);
3220 else if (where)
3221 gfc_warning (0, "Character length mismatch (%ld/%ld) between actual "
3222 "argument and assumed-shape dummy argument %qs "
3223 "at %L",
3224 mpz_get_si (a->expr->ts.u.cl->length->value.integer),
3225 mpz_get_si (f->sym->ts.u.cl->length->value.integer),
3226 f->sym->name, &a->expr->where);
3227 return false;
3228 }
3229
3230 if ((f->sym->attr.pointer || f->sym->attr.allocatable)
3231 && f->sym->ts.deferred != a->expr->ts.deferred
3232 && a->expr->ts.type == BT_CHARACTER)
3233 {
3234 if (where)
3235 gfc_error ("Actual argument at %L to allocatable or "
3236 "pointer dummy argument %qs must have a deferred "
3237 "length type parameter if and only if the dummy has one",
3238 &a->expr->where, f->sym->name);
3239 return false;
3240 }
3241
3242 if (f->sym->ts.type == BT_CLASS)
3243 goto skip_size_check;
3244
3245 actual_size = get_expr_storage_size (a->expr);
3246 formal_size = get_sym_storage_size (f->sym);
3247 if (actual_size != 0 && actual_size < formal_size
3248 && a->expr->ts.type != BT_PROCEDURE
3249 && f->sym->attr.flavor != FL_PROCEDURE)
3250 {
3251 if (a->expr->ts.type == BT_CHARACTER && !f->sym->as && where)
3252 gfc_warning (0, "Character length of actual argument shorter "
3253 "than of dummy argument %qs (%lu/%lu) at %L",
3254 f->sym->name, actual_size, formal_size,
3255 &a->expr->where);
3256 else if (where)
3257 {
3258 /* Emit a warning for -std=legacy and an error otherwise. */
3259 if (gfc_option.warn_std == 0)
3260 gfc_warning (0, "Actual argument contains too few "
3261 "elements for dummy argument %qs (%lu/%lu) "
3262 "at %L", f->sym->name, actual_size,
3263 formal_size, &a->expr->where);
3264 else
3265 gfc_error_now ("Actual argument contains too few "
3266 "elements for dummy argument %qs (%lu/%lu) "
3267 "at %L", f->sym->name, actual_size,
3268 formal_size, &a->expr->where);
3269 }
3270 return false;
3271 }
3272
3273 skip_size_check:
3274
3275 /* Satisfy F03:12.4.1.3 by ensuring that a procedure pointer actual
3276 argument is provided for a procedure pointer formal argument. */
3277 if (f->sym->attr.proc_pointer
3278 && !((a->expr->expr_type == EXPR_VARIABLE
3279 && (a->expr->symtree->n.sym->attr.proc_pointer
3280 || gfc_is_proc_ptr_comp (a->expr)))
3281 || (a->expr->expr_type == EXPR_FUNCTION
3282 && is_procptr_result (a->expr))))
3283 {
3284 if (where)
3285 gfc_error ("Expected a procedure pointer for argument %qs at %L",
3286 f->sym->name, &a->expr->where);
3287 return false;
3288 }
3289
3290 /* Satisfy F03:12.4.1.3 by ensuring that a procedure actual argument is
3291 provided for a procedure formal argument. */
3292 if (f->sym->attr.flavor == FL_PROCEDURE
3293 && !((a->expr->expr_type == EXPR_VARIABLE
3294 && (a->expr->symtree->n.sym->attr.flavor == FL_PROCEDURE
3295 || a->expr->symtree->n.sym->attr.proc_pointer
3296 || gfc_is_proc_ptr_comp (a->expr)))
3297 || (a->expr->expr_type == EXPR_FUNCTION
3298 && is_procptr_result (a->expr))))
3299 {
3300 if (where)
3301 gfc_error ("Expected a procedure for argument %qs at %L",
3302 f->sym->name, &a->expr->where);
3303 return false;
3304 }
3305
3306 if (f->sym->as
3307 && (f->sym->as->type == AS_ASSUMED_SHAPE
3308 || f->sym->as->type == AS_DEFERRED
3309 || (f->sym->as->type == AS_ASSUMED_RANK && f->sym->attr.pointer))
3310 && a->expr->expr_type == EXPR_VARIABLE
3311 && a->expr->symtree->n.sym->as
3312 && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SIZE
3313 && (a->expr->ref == NULL
3314 || (a->expr->ref->type == REF_ARRAY
3315 && a->expr->ref->u.ar.type == AR_FULL)))
3316 {
3317 if (where)
3318 gfc_error ("Actual argument for %qs cannot be an assumed-size"
3319 " array at %L", f->sym->name, where);
3320 return false;
3321 }
3322
3323 if (a->expr->expr_type != EXPR_NULL
3324 && compare_pointer (f->sym, a->expr) == 0)
3325 {
3326 if (where)
3327 gfc_error ("Actual argument for %qs must be a pointer at %L",
3328 f->sym->name, &a->expr->where);
3329 return false;
3330 }
3331
3332 if (a->expr->expr_type != EXPR_NULL
3333 && (gfc_option.allow_std & GFC_STD_F2008) == 0
3334 && compare_pointer (f->sym, a->expr) == 2)
3335 {
3336 if (where)
3337 gfc_error ("Fortran 2008: Non-pointer actual argument at %L to "
3338 "pointer dummy %qs", &a->expr->where,f->sym->name);
3339 return false;
3340 }
3341
3342
3343 /* Fortran 2008, C1242. */
3344 if (f->sym->attr.pointer && gfc_is_coindexed (a->expr))
3345 {
3346 if (where)
3347 gfc_error ("Coindexed actual argument at %L to pointer "
3348 "dummy %qs",
3349 &a->expr->where, f->sym->name);
3350 return false;
3351 }
3352
3353 /* Fortran 2008, 12.5.2.5 (no constraint). */
3354 if (a->expr->expr_type == EXPR_VARIABLE
3355 && f->sym->attr.intent != INTENT_IN
3356 && f->sym->attr.allocatable
3357 && gfc_is_coindexed (a->expr))
3358 {
3359 if (where)
3360 gfc_error ("Coindexed actual argument at %L to allocatable "
3361 "dummy %qs requires INTENT(IN)",
3362 &a->expr->where, f->sym->name);
3363 return false;
3364 }
3365
3366 /* Fortran 2008, C1237. */
3367 if (a->expr->expr_type == EXPR_VARIABLE
3368 && (f->sym->attr.asynchronous || f->sym->attr.volatile_)
3369 && gfc_is_coindexed (a->expr)
3370 && (a->expr->symtree->n.sym->attr.volatile_
3371 || a->expr->symtree->n.sym->attr.asynchronous))
3372 {
3373 if (where)
3374 gfc_error ("Coindexed ASYNCHRONOUS or VOLATILE actual argument at "
3375 "%L requires that dummy %qs has neither "
3376 "ASYNCHRONOUS nor VOLATILE", &a->expr->where,
3377 f->sym->name);
3378 return false;
3379 }
3380
3381 /* Fortran 2008, 12.5.2.4 (no constraint). */
3382 if (a->expr->expr_type == EXPR_VARIABLE
3383 && f->sym->attr.intent != INTENT_IN && !f->sym->attr.value
3384 && gfc_is_coindexed (a->expr)
3385 && gfc_has_ultimate_allocatable (a->expr))
3386 {
3387 if (where)
3388 gfc_error ("Coindexed actual argument at %L with allocatable "
3389 "ultimate component to dummy %qs requires either VALUE "
3390 "or INTENT(IN)", &a->expr->where, f->sym->name);
3391 return false;
3392 }
3393
3394 if (f->sym->ts.type == BT_CLASS
3395 && CLASS_DATA (f->sym)->attr.allocatable
3396 && gfc_is_class_array_ref (a->expr, &full_array)
3397 && !full_array)
3398 {
3399 if (where)
3400 gfc_error ("Actual CLASS array argument for %qs must be a full "
3401 "array at %L", f->sym->name, &a->expr->where);
3402 return false;
3403 }
3404
3405
3406 if (a->expr->expr_type != EXPR_NULL
3407 && !compare_allocatable (f->sym, a->expr))
3408 {
3409 if (where)
3410 gfc_error ("Actual argument for %qs must be ALLOCATABLE at %L",
3411 f->sym->name, &a->expr->where);
3412 return false;
3413 }
3414
3415 /* Check intent = OUT/INOUT for definable actual argument. */
3416 if (!in_statement_function
3417 && (f->sym->attr.intent == INTENT_OUT
3418 || f->sym->attr.intent == INTENT_INOUT))
3419 {
3420 const char* context = (where
3421 ? _("actual argument to INTENT = OUT/INOUT")
3422 : NULL);
3423
3424 if (((f->sym->ts.type == BT_CLASS && f->sym->attr.class_ok
3425 && CLASS_DATA (f->sym)->attr.class_pointer)
3426 || (f->sym->ts.type != BT_CLASS && f->sym->attr.pointer))
3427 && !gfc_check_vardef_context (a->expr, true, false, false, context))
3428 return false;
3429 if (!gfc_check_vardef_context (a->expr, false, false, false, context))
3430 return false;
3431 }
3432
3433 if ((f->sym->attr.intent == INTENT_OUT
3434 || f->sym->attr.intent == INTENT_INOUT
3435 || f->sym->attr.volatile_
3436 || f->sym->attr.asynchronous)
3437 && gfc_has_vector_subscript (a->expr))
3438 {
3439 if (where)
3440 gfc_error ("Array-section actual argument with vector "
3441 "subscripts at %L is incompatible with INTENT(OUT), "
3442 "INTENT(INOUT), VOLATILE or ASYNCHRONOUS attribute "
3443 "of the dummy argument %qs",
3444 &a->expr->where, f->sym->name);
3445 return false;
3446 }
3447
3448 /* C1232 (R1221) For an actual argument which is an array section or
3449 an assumed-shape array, the dummy argument shall be an assumed-
3450 shape array, if the dummy argument has the VOLATILE attribute. */
3451
3452 if (f->sym->attr.volatile_
3453 && a->expr->expr_type == EXPR_VARIABLE
3454 && a->expr->symtree->n.sym->as
3455 && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
3456 && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
3457 {
3458 if (where)
3459 gfc_error ("Assumed-shape actual argument at %L is "
3460 "incompatible with the non-assumed-shape "
3461 "dummy argument %qs due to VOLATILE attribute",
3462 &a->expr->where,f->sym->name);
3463 return false;
3464 }
3465
3466 /* Find the last array_ref. */
3467 actual_arr_ref = NULL;
3468 if (a->expr->ref)
3469 actual_arr_ref = gfc_find_array_ref (a->expr, true);
3470
3471 if (f->sym->attr.volatile_
3472 && actual_arr_ref && actual_arr_ref->type == AR_SECTION
3473 && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
3474 {
3475 if (where)
3476 gfc_error ("Array-section actual argument at %L is "
3477 "incompatible with the non-assumed-shape "
3478 "dummy argument %qs due to VOLATILE attribute",
3479 &a->expr->where, f->sym->name);
3480 return false;
3481 }
3482
3483 /* C1233 (R1221) For an actual argument which is a pointer array, the
3484 dummy argument shall be an assumed-shape or pointer array, if the
3485 dummy argument has the VOLATILE attribute. */
3486
3487 if (f->sym->attr.volatile_
3488 && a->expr->expr_type == EXPR_VARIABLE
3489 && a->expr->symtree->n.sym->attr.pointer
3490 && a->expr->symtree->n.sym->as
3491 && !(f->sym->as
3492 && (f->sym->as->type == AS_ASSUMED_SHAPE
3493 || f->sym->attr.pointer)))
3494 {
3495 if (where)
3496 gfc_error ("Pointer-array actual argument at %L requires "
3497 "an assumed-shape or pointer-array dummy "
3498 "argument %qs due to VOLATILE attribute",
3499 &a->expr->where,f->sym->name);
3500 return false;
3501 }
3502
3503 match:
3504 if (a == actual)
3505 na = i;
3506
3507 new_arg[i++] = a;
3508 }
3509
3510 /* Make sure missing actual arguments are optional. */
3511 i = 0;
3512 for (f = formal; f; f = f->next, i++)
3513 {
3514 if (new_arg[i] != NULL)
3515 continue;
3516 if (f->sym == NULL)
3517 {
3518 if (where)
3519 gfc_error ("Missing alternate return spec in subroutine call "
3520 "at %L", where);
3521 return false;
3522 }
3523 if (!f->sym->attr.optional
3524 || (in_statement_function && f->sym->attr.optional))
3525 {
3526 if (where)
3527 gfc_error ("Missing actual argument for argument %qs at %L",
3528 f->sym->name, where);
3529 return false;
3530 }
3531 }
3532
3533 /* We should have handled the cases where the formal arglist is null
3534 already. */
3535 gcc_assert (n > 0);
3536
3537 /* The argument lists are compatible. We now relink a new actual
3538 argument list with null arguments in the right places. The head
3539 of the list remains the head. */
3540 for (i = 0; i < n; i++)
3541 if (new_arg[i] == NULL)
3542 new_arg[i] = gfc_get_actual_arglist ();
3543
3544 if (na != 0)
3545 {
3546 std::swap (*new_arg[0], *actual);
3547 std::swap (new_arg[0], new_arg[na]);
3548 }
3549
3550 for (i = 0; i < n - 1; i++)
3551 new_arg[i]->next = new_arg[i + 1];
3552
3553 new_arg[i]->next = NULL;
3554
3555 if (*ap == NULL && n > 0)
3556 *ap = new_arg[0];
3557
3558 /* Note the types of omitted optional arguments. */
3559 for (a = *ap, f = formal; a; a = a->next, f = f->next)
3560 if (a->expr == NULL && a->label == NULL)
3561 a->missing_arg_type = f->sym->ts.type;
3562
3563 return true;
3564 }
3565
3566
3567 typedef struct
3568 {
3569 gfc_formal_arglist *f;
3570 gfc_actual_arglist *a;
3571 }
3572 argpair;
3573
3574 /* qsort comparison function for argument pairs, with the following
3575 order:
3576 - p->a->expr == NULL
3577 - p->a->expr->expr_type != EXPR_VARIABLE
3578 - by gfc_symbol pointer value (larger first). */
3579
3580 static int
3581 pair_cmp (const void *p1, const void *p2)
3582 {
3583 const gfc_actual_arglist *a1, *a2;
3584
3585 /* *p1 and *p2 are elements of the to-be-sorted array. */
3586 a1 = ((const argpair *) p1)->a;
3587 a2 = ((const argpair *) p2)->a;
3588 if (!a1->expr)
3589 {
3590 if (!a2->expr)
3591 return 0;
3592 return -1;
3593 }
3594 if (!a2->expr)
3595 return 1;
3596 if (a1->expr->expr_type != EXPR_VARIABLE)
3597 {
3598 if (a2->expr->expr_type != EXPR_VARIABLE)
3599 return 0;
3600 return -1;
3601 }
3602 if (a2->expr->expr_type != EXPR_VARIABLE)
3603 return 1;
3604 if (a1->expr->symtree->n.sym > a2->expr->symtree->n.sym)
3605 return -1;
3606 return a1->expr->symtree->n.sym < a2->expr->symtree->n.sym;
3607 }
3608
3609
3610 /* Given two expressions from some actual arguments, test whether they
3611 refer to the same expression. The analysis is conservative.
3612 Returning false will produce no warning. */
3613
3614 static bool
3615 compare_actual_expr (gfc_expr *e1, gfc_expr *e2)
3616 {
3617 const gfc_ref *r1, *r2;
3618
3619 if (!e1 || !e2
3620 || e1->expr_type != EXPR_VARIABLE
3621 || e2->expr_type != EXPR_VARIABLE
3622 || e1->symtree->n.sym != e2->symtree->n.sym)
3623 return false;
3624
3625 /* TODO: improve comparison, see expr.c:show_ref(). */
3626 for (r1 = e1->ref, r2 = e2->ref; r1 && r2; r1 = r1->next, r2 = r2->next)
3627 {
3628 if (r1->type != r2->type)
3629 return false;
3630 switch (r1->type)
3631 {
3632 case REF_ARRAY:
3633 if (r1->u.ar.type != r2->u.ar.type)
3634 return false;
3635 /* TODO: At the moment, consider only full arrays;
3636 we could do better. */
3637 if (r1->u.ar.type != AR_FULL || r2->u.ar.type != AR_FULL)
3638 return false;
3639 break;
3640
3641 case REF_COMPONENT:
3642 if (r1->u.c.component != r2->u.c.component)
3643 return false;
3644 break;
3645
3646 case REF_SUBSTRING:
3647 return false;
3648
3649 case REF_INQUIRY:
3650 if (e1->symtree->n.sym->ts.type == BT_COMPLEX
3651 && e1->ts.type == BT_REAL && e2->ts.type == BT_REAL
3652 && r1->u.i != r2->u.i)
3653 return false;
3654 break;
3655
3656 default:
3657 gfc_internal_error ("compare_actual_expr(): Bad component code");
3658 }
3659 }
3660 if (!r1 && !r2)
3661 return true;
3662 return false;
3663 }
3664
3665
3666 /* Given formal and actual argument lists that correspond to one
3667 another, check that identical actual arguments aren't not
3668 associated with some incompatible INTENTs. */
3669
3670 static bool
3671 check_some_aliasing (gfc_formal_arglist *f, gfc_actual_arglist *a)
3672 {
3673 sym_intent f1_intent, f2_intent;
3674 gfc_formal_arglist *f1;
3675 gfc_actual_arglist *a1;
3676 size_t n, i, j;
3677 argpair *p;
3678 bool t = true;
3679
3680 n = 0;
3681 for (f1 = f, a1 = a;; f1 = f1->next, a1 = a1->next)
3682 {
3683 if (f1 == NULL && a1 == NULL)
3684 break;
3685 if (f1 == NULL || a1 == NULL)
3686 gfc_internal_error ("check_some_aliasing(): List mismatch");
3687 n++;
3688 }
3689 if (n == 0)
3690 return t;
3691 p = XALLOCAVEC (argpair, n);
3692
3693 for (i = 0, f1 = f, a1 = a; i < n; i++, f1 = f1->next, a1 = a1->next)
3694 {
3695 p[i].f = f1;
3696 p[i].a = a1;
3697 }
3698
3699 qsort (p, n, sizeof (argpair), pair_cmp);
3700
3701 for (i = 0; i < n; i++)
3702 {
3703 if (!p[i].a->expr
3704 || p[i].a->expr->expr_type != EXPR_VARIABLE
3705 || p[i].a->expr->ts.type == BT_PROCEDURE)
3706 continue;
3707 f1_intent = p[i].f->sym->attr.intent;
3708 for (j = i + 1; j < n; j++)
3709 {
3710 /* Expected order after the sort. */
3711 if (!p[j].a->expr || p[j].a->expr->expr_type != EXPR_VARIABLE)
3712 gfc_internal_error ("check_some_aliasing(): corrupted data");
3713
3714 /* Are the expression the same? */
3715 if (!compare_actual_expr (p[i].a->expr, p[j].a->expr))
3716 break;
3717 f2_intent = p[j].f->sym->attr.intent;
3718 if ((f1_intent == INTENT_IN && f2_intent == INTENT_OUT)
3719 || (f1_intent == INTENT_OUT && f2_intent == INTENT_IN)
3720 || (f1_intent == INTENT_OUT && f2_intent == INTENT_OUT))
3721 {
3722 gfc_warning (0, "Same actual argument associated with INTENT(%s) "
3723 "argument %qs and INTENT(%s) argument %qs at %L",
3724 gfc_intent_string (f1_intent), p[i].f->sym->name,
3725 gfc_intent_string (f2_intent), p[j].f->sym->name,
3726 &p[i].a->expr->where);
3727 t = false;
3728 }
3729 }
3730 }
3731
3732 return t;
3733 }
3734
3735
3736 /* Given formal and actual argument lists that correspond to one
3737 another, check that they are compatible in the sense that intents
3738 are not mismatched. */
3739
3740 static bool
3741 check_intents (gfc_formal_arglist *f, gfc_actual_arglist *a)
3742 {
3743 sym_intent f_intent;
3744
3745 for (;; f = f->next, a = a->next)
3746 {
3747 gfc_expr *expr;
3748
3749 if (f == NULL && a == NULL)
3750 break;
3751 if (f == NULL || a == NULL)
3752 gfc_internal_error ("check_intents(): List mismatch");
3753
3754 if (a->expr && a->expr->expr_type == EXPR_FUNCTION
3755 && a->expr->value.function.isym
3756 && a->expr->value.function.isym->id == GFC_ISYM_CAF_GET)
3757 expr = a->expr->value.function.actual->expr;
3758 else
3759 expr = a->expr;
3760
3761 if (expr == NULL || expr->expr_type != EXPR_VARIABLE)
3762 continue;
3763
3764 f_intent = f->sym->attr.intent;
3765
3766 if (gfc_pure (NULL) && gfc_impure_variable (expr->symtree->n.sym))
3767 {
3768 if ((f->sym->ts.type == BT_CLASS && f->sym->attr.class_ok
3769 && CLASS_DATA (f->sym)->attr.class_pointer)
3770 || (f->sym->ts.type != BT_CLASS && f->sym->attr.pointer))
3771 {
3772 gfc_error ("Procedure argument at %L is local to a PURE "
3773 "procedure and has the POINTER attribute",
3774 &expr->where);
3775 return false;
3776 }
3777 }
3778
3779 /* Fortran 2008, C1283. */
3780 if (gfc_pure (NULL) && gfc_is_coindexed (expr))
3781 {
3782 if (f_intent == INTENT_INOUT || f_intent == INTENT_OUT)
3783 {
3784 gfc_error ("Coindexed actual argument at %L in PURE procedure "
3785 "is passed to an INTENT(%s) argument",
3786 &expr->where, gfc_intent_string (f_intent));
3787 return false;
3788 }
3789
3790 if ((f->sym->ts.type == BT_CLASS && f->sym->attr.class_ok
3791 && CLASS_DATA (f->sym)->attr.class_pointer)
3792 || (f->sym->ts.type != BT_CLASS && f->sym->attr.pointer))
3793 {
3794 gfc_error ("Coindexed actual argument at %L in PURE procedure "
3795 "is passed to a POINTER dummy argument",
3796 &expr->where);
3797 return false;
3798 }
3799 }
3800
3801 /* F2008, Section 12.5.2.4. */
3802 if (expr->ts.type == BT_CLASS && f->sym->ts.type == BT_CLASS
3803 && gfc_is_coindexed (expr))
3804 {
3805 gfc_error ("Coindexed polymorphic actual argument at %L is passed "
3806 "polymorphic dummy argument %qs",
3807 &expr->where, f->sym->name);
3808 return false;
3809 }
3810 }
3811
3812 return true;
3813 }
3814
3815
3816 /* Check how a procedure is used against its interface. If all goes
3817 well, the actual argument list will also end up being properly
3818 sorted. */
3819
3820 bool
3821 gfc_procedure_use (gfc_symbol *sym, gfc_actual_arglist **ap, locus *where)
3822 {
3823 gfc_actual_arglist *a;
3824 gfc_formal_arglist *dummy_args;
3825 bool implicit = false;
3826
3827 /* Warn about calls with an implicit interface. Special case
3828 for calling a ISO_C_BINDING because c_loc and c_funloc
3829 are pseudo-unknown. Additionally, warn about procedures not
3830 explicitly declared at all if requested. */
3831 if (sym->attr.if_source == IFSRC_UNKNOWN && !sym->attr.is_iso_c)
3832 {
3833 bool has_implicit_none_export = false;
3834 implicit = true;
3835 if (sym->attr.proc == PROC_UNKNOWN)
3836 for (gfc_namespace *ns = sym->ns; ns; ns = ns->parent)
3837 if (ns->has_implicit_none_export)
3838 {
3839 has_implicit_none_export = true;
3840 break;
3841 }
3842 if (has_implicit_none_export)
3843 {
3844 const char *guessed
3845 = gfc_lookup_function_fuzzy (sym->name, sym->ns->sym_root);
3846 if (guessed)
3847 gfc_error ("Procedure %qs called at %L is not explicitly declared"
3848 "; did you mean %qs?",
3849 sym->name, where, guessed);
3850 else
3851 gfc_error ("Procedure %qs called at %L is not explicitly declared",
3852 sym->name, where);
3853 return false;
3854 }
3855 if (warn_implicit_interface)
3856 gfc_warning (OPT_Wimplicit_interface,
3857 "Procedure %qs called with an implicit interface at %L",
3858 sym->name, where);
3859 else if (warn_implicit_procedure && sym->attr.proc == PROC_UNKNOWN)
3860 gfc_warning (OPT_Wimplicit_procedure,
3861 "Procedure %qs called at %L is not explicitly declared",
3862 sym->name, where);
3863 gfc_find_proc_namespace (sym->ns)->implicit_interface_calls = 1;
3864 }
3865
3866 if (sym->attr.if_source == IFSRC_UNKNOWN)
3867 {
3868 if (sym->attr.pointer)
3869 {
3870 gfc_error ("The pointer object %qs at %L must have an explicit "
3871 "function interface or be declared as array",
3872 sym->name, where);
3873 return false;
3874 }
3875
3876 if (sym->attr.allocatable && !sym->attr.external)
3877 {
3878 gfc_error ("The allocatable object %qs at %L must have an explicit "
3879 "function interface or be declared as array",
3880 sym->name, where);
3881 return false;
3882 }
3883
3884 if (sym->attr.allocatable)
3885 {
3886 gfc_error ("Allocatable function %qs at %L must have an explicit "
3887 "function interface", sym->name, where);
3888 return false;
3889 }
3890
3891 for (a = *ap; a; a = a->next)
3892 {
3893 if (a->expr && a->expr->error)
3894 return false;
3895
3896 /* F2018, 15.4.2.2 Explicit interface is required for a
3897 polymorphic dummy argument, so there is no way to
3898 legally have a class appear in an argument with an
3899 implicit interface. */
3900
3901 if (implicit && a->expr && a->expr->ts.type == BT_CLASS)
3902 {
3903 gfc_error ("Explicit interface required for polymorphic "
3904 "argument at %L",&a->expr->where);
3905 a->expr->error = 1;
3906 break;
3907 }
3908
3909 /* Skip g77 keyword extensions like %VAL, %REF, %LOC. */
3910 if (a->name != NULL && a->name[0] != '%')
3911 {
3912 gfc_error ("Keyword argument requires explicit interface "
3913 "for procedure %qs at %L", sym->name, &a->expr->where);
3914 break;
3915 }
3916
3917 /* TS 29113, 6.2. */
3918 if (a->expr && a->expr->ts.type == BT_ASSUMED
3919 && sym->intmod_sym_id != ISOCBINDING_LOC)
3920 {
3921 gfc_error ("Assumed-type argument %s at %L requires an explicit "
3922 "interface", a->expr->symtree->n.sym->name,
3923 &a->expr->where);
3924 a->expr->error = 1;
3925 break;
3926 }
3927
3928 /* F2008, C1303 and C1304. */
3929 if (a->expr
3930 && (a->expr->ts.type == BT_DERIVED || a->expr->ts.type == BT_CLASS)
3931 && a->expr->ts.u.derived
3932 && ((a->expr->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
3933 && a->expr->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)
3934 || gfc_expr_attr (a->expr).lock_comp))
3935 {
3936 gfc_error ("Actual argument of LOCK_TYPE or with LOCK_TYPE "
3937 "component at %L requires an explicit interface for "
3938 "procedure %qs", &a->expr->where, sym->name);
3939 a->expr->error = 1;
3940 break;
3941 }
3942
3943 if (a->expr
3944 && (a->expr->ts.type == BT_DERIVED || a->expr->ts.type == BT_CLASS)
3945 && a->expr->ts.u.derived
3946 && ((a->expr->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
3947 && a->expr->ts.u.derived->intmod_sym_id
3948 == ISOFORTRAN_EVENT_TYPE)
3949 || gfc_expr_attr (a->expr).event_comp))
3950 {
3951 gfc_error ("Actual argument of EVENT_TYPE or with EVENT_TYPE "
3952 "component at %L requires an explicit interface for "
3953 "procedure %qs", &a->expr->where, sym->name);
3954 a->expr->error = 1;
3955 break;
3956 }
3957
3958 if (a->expr && a->expr->expr_type == EXPR_NULL
3959 && a->expr->ts.type == BT_UNKNOWN)
3960 {
3961 gfc_error ("MOLD argument to NULL required at %L",
3962 &a->expr->where);
3963 a->expr->error = 1;
3964 return false;
3965 }
3966
3967 /* TS 29113, C407b. */
3968 if (a->expr && a->expr->expr_type == EXPR_VARIABLE
3969 && symbol_rank (a->expr->symtree->n.sym) == -1)
3970 {
3971 gfc_error ("Assumed-rank argument requires an explicit interface "
3972 "at %L", &a->expr->where);
3973 a->expr->error = 1;
3974 return false;
3975 }
3976 }
3977
3978 return true;
3979 }
3980
3981 dummy_args = gfc_sym_get_dummy_args (sym);
3982
3983 /* For a statement function, check that types and type parameters of actual
3984 arguments and dummy arguments match. */
3985 if (!gfc_compare_actual_formal (ap, dummy_args, 0, sym->attr.elemental,
3986 sym->attr.proc == PROC_ST_FUNCTION, where))
3987 return false;
3988
3989 if (!check_intents (dummy_args, *ap))
3990 return false;
3991
3992 if (warn_aliasing)
3993 check_some_aliasing (dummy_args, *ap);
3994
3995 return true;
3996 }
3997
3998
3999 /* Check how a procedure pointer component is used against its interface.
4000 If all goes well, the actual argument list will also end up being properly
4001 sorted. Completely analogous to gfc_procedure_use. */
4002
4003 void
4004 gfc_ppc_use (gfc_component *comp, gfc_actual_arglist **ap, locus *where)
4005 {
4006 /* Warn about calls with an implicit interface. Special case
4007 for calling a ISO_C_BINDING because c_loc and c_funloc
4008 are pseudo-unknown. */
4009 if (warn_implicit_interface
4010 && comp->attr.if_source == IFSRC_UNKNOWN
4011 && !comp->attr.is_iso_c)
4012 gfc_warning (OPT_Wimplicit_interface,
4013 "Procedure pointer component %qs called with an implicit "
4014 "interface at %L", comp->name, where);
4015
4016 if (comp->attr.if_source == IFSRC_UNKNOWN)
4017 {
4018 gfc_actual_arglist *a;
4019 for (a = *ap; a; a = a->next)
4020 {
4021 /* Skip g77 keyword extensions like %VAL, %REF, %LOC. */
4022 if (a->name != NULL && a->name[0] != '%')
4023 {
4024 gfc_error ("Keyword argument requires explicit interface "
4025 "for procedure pointer component %qs at %L",
4026 comp->name, &a->expr->where);
4027 break;
4028 }
4029 }
4030
4031 return;
4032 }
4033
4034 if (!gfc_compare_actual_formal (ap, comp->ts.interface->formal, 0,
4035 comp->attr.elemental, false, where))
4036 return;
4037
4038 check_intents (comp->ts.interface->formal, *ap);
4039 if (warn_aliasing)
4040 check_some_aliasing (comp->ts.interface->formal, *ap);
4041 }
4042
4043
4044 /* Try if an actual argument list matches the formal list of a symbol,
4045 respecting the symbol's attributes like ELEMENTAL. This is used for
4046 GENERIC resolution. */
4047
4048 bool
4049 gfc_arglist_matches_symbol (gfc_actual_arglist** args, gfc_symbol* sym)
4050 {
4051 gfc_formal_arglist *dummy_args;
4052 bool r;
4053
4054 if (sym->attr.flavor != FL_PROCEDURE)
4055 return false;
4056
4057 dummy_args = gfc_sym_get_dummy_args (sym);
4058
4059 r = !sym->attr.elemental;
4060 if (gfc_compare_actual_formal (args, dummy_args, r, !r, false, NULL))
4061 {
4062 check_intents (dummy_args, *args);
4063 if (warn_aliasing)
4064 check_some_aliasing (dummy_args, *args);
4065 return true;
4066 }
4067
4068 return false;
4069 }
4070
4071
4072 /* Given an interface pointer and an actual argument list, search for
4073 a formal argument list that matches the actual. If found, returns
4074 a pointer to the symbol of the correct interface. Returns NULL if
4075 not found. */
4076
4077 gfc_symbol *
4078 gfc_search_interface (gfc_interface *intr, int sub_flag,
4079 gfc_actual_arglist **ap)
4080 {
4081 gfc_symbol *elem_sym = NULL;
4082 gfc_symbol *null_sym = NULL;
4083 locus null_expr_loc;
4084 gfc_actual_arglist *a;
4085 bool has_null_arg = false;
4086
4087 for (a = *ap; a; a = a->next)
4088 if (a->expr && a->expr->expr_type == EXPR_NULL
4089 && a->expr->ts.type == BT_UNKNOWN)
4090 {
4091 has_null_arg = true;
4092 null_expr_loc = a->expr->where;
4093 break;
4094 }
4095
4096 for (; intr; intr = intr->next)
4097 {
4098 if (gfc_fl_struct (intr->sym->attr.flavor))
4099 continue;
4100 if (sub_flag && intr->sym->attr.function)
4101 continue;
4102 if (!sub_flag && intr->sym->attr.subroutine)
4103 continue;
4104
4105 if (gfc_arglist_matches_symbol (ap, intr->sym))
4106 {
4107 if (has_null_arg && null_sym)
4108 {
4109 gfc_error ("MOLD= required in NULL() argument at %L: Ambiguity "
4110 "between specific functions %s and %s",
4111 &null_expr_loc, null_sym->name, intr->sym->name);
4112 return NULL;
4113 }
4114 else if (has_null_arg)
4115 {
4116 null_sym = intr->sym;
4117 continue;
4118 }
4119
4120 /* Satisfy 12.4.4.1 such that an elemental match has lower
4121 weight than a non-elemental match. */
4122 if (intr->sym->attr.elemental)
4123 {
4124 elem_sym = intr->sym;
4125 continue;
4126 }
4127 return intr->sym;
4128 }
4129 }
4130
4131 if (null_sym)
4132 return null_sym;
4133
4134 return elem_sym ? elem_sym : NULL;
4135 }
4136
4137
4138 /* Do a brute force recursive search for a symbol. */
4139
4140 static gfc_symtree *
4141 find_symtree0 (gfc_symtree *root, gfc_symbol *sym)
4142 {
4143 gfc_symtree * st;
4144
4145 if (root->n.sym == sym)
4146 return root;
4147
4148 st = NULL;
4149 if (root->left)
4150 st = find_symtree0 (root->left, sym);
4151 if (root->right && ! st)
4152 st = find_symtree0 (root->right, sym);
4153 return st;
4154 }
4155
4156
4157 /* Find a symtree for a symbol. */
4158
4159 gfc_symtree *
4160 gfc_find_sym_in_symtree (gfc_symbol *sym)
4161 {
4162 gfc_symtree *st;
4163 gfc_namespace *ns;
4164
4165 /* First try to find it by name. */
4166 gfc_find_sym_tree (sym->name, gfc_current_ns, 1, &st);
4167 if (st && st->n.sym == sym)
4168 return st;
4169
4170 /* If it's been renamed, resort to a brute-force search. */
4171 /* TODO: avoid having to do this search. If the symbol doesn't exist
4172 in the symtree for the current namespace, it should probably be added. */
4173 for (ns = gfc_current_ns; ns; ns = ns->parent)
4174 {
4175 st = find_symtree0 (ns->sym_root, sym);
4176 if (st)
4177 return st;
4178 }
4179 gfc_internal_error ("Unable to find symbol %qs", sym->name);
4180 /* Not reached. */
4181 }
4182
4183
4184 /* See if the arglist to an operator-call contains a derived-type argument
4185 with a matching type-bound operator. If so, return the matching specific
4186 procedure defined as operator-target as well as the base-object to use
4187 (which is the found derived-type argument with operator). The generic
4188 name, if any, is transmitted to the final expression via 'gname'. */
4189
4190 static gfc_typebound_proc*
4191 matching_typebound_op (gfc_expr** tb_base,
4192 gfc_actual_arglist* args,
4193 gfc_intrinsic_op op, const char* uop,
4194 const char ** gname)
4195 {
4196 gfc_actual_arglist* base;
4197
4198 for (base = args; base; base = base->next)
4199 if (base->expr->ts.type == BT_DERIVED || base->expr->ts.type == BT_CLASS)
4200 {
4201 gfc_typebound_proc* tb;
4202 gfc_symbol* derived;
4203 bool result;
4204
4205 while (base->expr->expr_type == EXPR_OP
4206 && base->expr->value.op.op == INTRINSIC_PARENTHESES)
4207 base->expr = base->expr->value.op.op1;
4208
4209 if (base->expr->ts.type == BT_CLASS)
4210 {
4211 if (!base->expr->ts.u.derived || CLASS_DATA (base->expr) == NULL
4212 || !gfc_expr_attr (base->expr).class_ok)
4213 continue;
4214 derived = CLASS_DATA (base->expr)->ts.u.derived;
4215 }
4216 else
4217 derived = base->expr->ts.u.derived;
4218
4219 if (op == INTRINSIC_USER)
4220 {
4221 gfc_symtree* tb_uop;
4222
4223 gcc_assert (uop);
4224 tb_uop = gfc_find_typebound_user_op (derived, &result, uop,
4225 false, NULL);
4226
4227 if (tb_uop)
4228 tb = tb_uop->n.tb;
4229 else
4230 tb = NULL;
4231 }
4232 else
4233 tb = gfc_find_typebound_intrinsic_op (derived, &result, op,
4234 false, NULL);
4235
4236 /* This means we hit a PRIVATE operator which is use-associated and
4237 should thus not be seen. */
4238 if (!result)
4239 tb = NULL;
4240
4241 /* Look through the super-type hierarchy for a matching specific
4242 binding. */
4243 for (; tb; tb = tb->overridden)
4244 {
4245 gfc_tbp_generic* g;
4246
4247 gcc_assert (tb->is_generic);
4248 for (g = tb->u.generic; g; g = g->next)
4249 {
4250 gfc_symbol* target;
4251 gfc_actual_arglist* argcopy;
4252 bool matches;
4253
4254 gcc_assert (g->specific);
4255 if (g->specific->error)
4256 continue;
4257
4258 target = g->specific->u.specific->n.sym;
4259
4260 /* Check if this arglist matches the formal. */
4261 argcopy = gfc_copy_actual_arglist (args);
4262 matches = gfc_arglist_matches_symbol (&argcopy, target);
4263 gfc_free_actual_arglist (argcopy);
4264
4265 /* Return if we found a match. */
4266 if (matches)
4267 {
4268 *tb_base = base->expr;
4269 *gname = g->specific_st->name;
4270 return g->specific;
4271 }
4272 }
4273 }
4274 }
4275
4276 return NULL;
4277 }
4278
4279
4280 /* For the 'actual arglist' of an operator call and a specific typebound
4281 procedure that has been found the target of a type-bound operator, build the
4282 appropriate EXPR_COMPCALL and resolve it. We take this indirection over
4283 type-bound procedures rather than resolving type-bound operators 'directly'
4284 so that we can reuse the existing logic. */
4285
4286 static void
4287 build_compcall_for_operator (gfc_expr* e, gfc_actual_arglist* actual,
4288 gfc_expr* base, gfc_typebound_proc* target,
4289 const char *gname)
4290 {
4291 e->expr_type = EXPR_COMPCALL;
4292 e->value.compcall.tbp = target;
4293 e->value.compcall.name = gname ? gname : "$op";
4294 e->value.compcall.actual = actual;
4295 e->value.compcall.base_object = base;
4296 e->value.compcall.ignore_pass = 1;
4297 e->value.compcall.assign = 0;
4298 if (e->ts.type == BT_UNKNOWN
4299 && target->function)
4300 {
4301 if (target->is_generic)
4302 e->ts = target->u.generic->specific->u.specific->n.sym->ts;
4303 else
4304 e->ts = target->u.specific->n.sym->ts;
4305 }
4306 }
4307
4308
4309 /* This subroutine is called when an expression is being resolved.
4310 The expression node in question is either a user defined operator
4311 or an intrinsic operator with arguments that aren't compatible
4312 with the operator. This subroutine builds an actual argument list
4313 corresponding to the operands, then searches for a compatible
4314 interface. If one is found, the expression node is replaced with
4315 the appropriate function call. We use the 'match' enum to specify
4316 whether a replacement has been made or not, or if an error occurred. */
4317
4318 match
4319 gfc_extend_expr (gfc_expr *e)
4320 {
4321 gfc_actual_arglist *actual;
4322 gfc_symbol *sym;
4323 gfc_namespace *ns;
4324 gfc_user_op *uop;
4325 gfc_intrinsic_op i;
4326 const char *gname;
4327 gfc_typebound_proc* tbo;
4328 gfc_expr* tb_base;
4329
4330 sym = NULL;
4331
4332 actual = gfc_get_actual_arglist ();
4333 actual->expr = e->value.op.op1;
4334
4335 gname = NULL;
4336
4337 if (e->value.op.op2 != NULL)
4338 {
4339 actual->next = gfc_get_actual_arglist ();
4340 actual->next->expr = e->value.op.op2;
4341 }
4342
4343 i = fold_unary_intrinsic (e->value.op.op);
4344
4345 /* See if we find a matching type-bound operator. */
4346 if (i == INTRINSIC_USER)
4347 tbo = matching_typebound_op (&tb_base, actual,
4348 i, e->value.op.uop->name, &gname);
4349 else
4350 switch (i)
4351 {
4352 #define CHECK_OS_COMPARISON(comp) \
4353 case INTRINSIC_##comp: \
4354 case INTRINSIC_##comp##_OS: \
4355 tbo = matching_typebound_op (&tb_base, actual, \
4356 INTRINSIC_##comp, NULL, &gname); \
4357 if (!tbo) \
4358 tbo = matching_typebound_op (&tb_base, actual, \
4359 INTRINSIC_##comp##_OS, NULL, &gname); \
4360 break;
4361 CHECK_OS_COMPARISON(EQ)
4362 CHECK_OS_COMPARISON(NE)
4363 CHECK_OS_COMPARISON(GT)
4364 CHECK_OS_COMPARISON(GE)
4365 CHECK_OS_COMPARISON(LT)
4366 CHECK_OS_COMPARISON(LE)
4367 #undef CHECK_OS_COMPARISON
4368
4369 default:
4370 tbo = matching_typebound_op (&tb_base, actual, i, NULL, &gname);
4371 break;
4372 }
4373
4374 /* If there is a matching typebound-operator, replace the expression with
4375 a call to it and succeed. */
4376 if (tbo)
4377 {
4378 gcc_assert (tb_base);
4379 build_compcall_for_operator (e, actual, tb_base, tbo, gname);
4380
4381 if (!gfc_resolve_expr (e))
4382 return MATCH_ERROR;
4383 else
4384 return MATCH_YES;
4385 }
4386
4387 if (i == INTRINSIC_USER)
4388 {
4389 for (ns = gfc_current_ns; ns; ns = ns->parent)
4390 {
4391 uop = gfc_find_uop (e->value.op.uop->name, ns);
4392 if (uop == NULL)
4393 continue;
4394
4395 sym = gfc_search_interface (uop->op, 0, &actual);
4396 if (sym != NULL)
4397 break;
4398 }
4399 }
4400 else
4401 {
4402 for (ns = gfc_current_ns; ns; ns = ns->parent)
4403 {
4404 /* Due to the distinction between '==' and '.eq.' and friends, one has
4405 to check if either is defined. */
4406 switch (i)
4407 {
4408 #define CHECK_OS_COMPARISON(comp) \
4409 case INTRINSIC_##comp: \
4410 case INTRINSIC_##comp##_OS: \
4411 sym = gfc_search_interface (ns->op[INTRINSIC_##comp], 0, &actual); \
4412 if (!sym) \
4413 sym = gfc_search_interface (ns->op[INTRINSIC_##comp##_OS], 0, &actual); \
4414 break;
4415 CHECK_OS_COMPARISON(EQ)
4416 CHECK_OS_COMPARISON(NE)
4417 CHECK_OS_COMPARISON(GT)
4418 CHECK_OS_COMPARISON(GE)
4419 CHECK_OS_COMPARISON(LT)
4420 CHECK_OS_COMPARISON(LE)
4421 #undef CHECK_OS_COMPARISON
4422
4423 default:
4424 sym = gfc_search_interface (ns->op[i], 0, &actual);
4425 }
4426
4427 if (sym != NULL)
4428 break;
4429 }
4430 }
4431
4432 /* TODO: Do an ambiguity-check and error if multiple matching interfaces are
4433 found rather than just taking the first one and not checking further. */
4434
4435 if (sym == NULL)
4436 {
4437 /* Don't use gfc_free_actual_arglist(). */
4438 free (actual->next);
4439 free (actual);
4440 return MATCH_NO;
4441 }
4442
4443 /* Change the expression node to a function call. */
4444 e->expr_type = EXPR_FUNCTION;
4445 e->symtree = gfc_find_sym_in_symtree (sym);
4446 e->value.function.actual = actual;
4447 e->value.function.esym = NULL;
4448 e->value.function.isym = NULL;
4449 e->value.function.name = NULL;
4450 e->user_operator = 1;
4451
4452 if (!gfc_resolve_expr (e))
4453 return MATCH_ERROR;
4454
4455 return MATCH_YES;
4456 }
4457
4458
4459 /* Tries to replace an assignment code node with a subroutine call to the
4460 subroutine associated with the assignment operator. Return true if the node
4461 was replaced. On false, no error is generated. */
4462
4463 bool
4464 gfc_extend_assign (gfc_code *c, gfc_namespace *ns)
4465 {
4466 gfc_actual_arglist *actual;
4467 gfc_expr *lhs, *rhs, *tb_base;
4468 gfc_symbol *sym = NULL;
4469 const char *gname = NULL;
4470 gfc_typebound_proc* tbo;
4471
4472 lhs = c->expr1;
4473 rhs = c->expr2;
4474
4475 /* Don't allow an intrinsic assignment with a BOZ rhs to be replaced. */
4476 if (c->op == EXEC_ASSIGN
4477 && c->expr1->expr_type == EXPR_VARIABLE
4478 && c->expr2->expr_type == EXPR_CONSTANT && c->expr2->ts.type == BT_BOZ)
4479 return false;
4480
4481 /* Don't allow an intrinsic assignment to be replaced. */
4482 if (lhs->ts.type != BT_DERIVED && lhs->ts.type != BT_CLASS
4483 && (rhs->rank == 0 || rhs->rank == lhs->rank)
4484 && (lhs->ts.type == rhs->ts.type
4485 || (gfc_numeric_ts (&lhs->ts) && gfc_numeric_ts (&rhs->ts))))
4486 return false;
4487
4488 actual = gfc_get_actual_arglist ();
4489 actual->expr = lhs;
4490
4491 actual->next = gfc_get_actual_arglist ();
4492 actual->next->expr = rhs;
4493
4494 /* TODO: Ambiguity-check, see above for gfc_extend_expr. */
4495
4496 /* See if we find a matching type-bound assignment. */
4497 tbo = matching_typebound_op (&tb_base, actual, INTRINSIC_ASSIGN,
4498 NULL, &gname);
4499
4500 if (tbo)
4501 {
4502 /* Success: Replace the expression with a type-bound call. */
4503 gcc_assert (tb_base);
4504 c->expr1 = gfc_get_expr ();
4505 build_compcall_for_operator (c->expr1, actual, tb_base, tbo, gname);
4506 c->expr1->value.compcall.assign = 1;
4507 c->expr1->where = c->loc;
4508 c->expr2 = NULL;
4509 c->op = EXEC_COMPCALL;
4510 return true;
4511 }
4512
4513 /* See if we find an 'ordinary' (non-typebound) assignment procedure. */
4514 for (; ns; ns = ns->parent)
4515 {
4516 sym = gfc_search_interface (ns->op[INTRINSIC_ASSIGN], 1, &actual);
4517 if (sym != NULL)
4518 break;
4519 }
4520
4521 if (sym)
4522 {
4523 /* Success: Replace the assignment with the call. */
4524 c->op = EXEC_ASSIGN_CALL;
4525 c->symtree = gfc_find_sym_in_symtree (sym);
4526 c->expr1 = NULL;
4527 c->expr2 = NULL;
4528 c->ext.actual = actual;
4529 return true;
4530 }
4531
4532 /* Failure: No assignment procedure found. */
4533 free (actual->next);
4534 free (actual);
4535 return false;
4536 }
4537
4538
4539 /* Make sure that the interface just parsed is not already present in
4540 the given interface list. Ambiguity isn't checked yet since module
4541 procedures can be present without interfaces. */
4542
4543 bool
4544 gfc_check_new_interface (gfc_interface *base, gfc_symbol *new_sym, locus loc)
4545 {
4546 gfc_interface *ip;
4547
4548 for (ip = base; ip; ip = ip->next)
4549 {
4550 if (ip->sym == new_sym)
4551 {
4552 gfc_error ("Entity %qs at %L is already present in the interface",
4553 new_sym->name, &loc);
4554 return false;
4555 }
4556 }
4557
4558 return true;
4559 }
4560
4561
4562 /* Add a symbol to the current interface. */
4563
4564 bool
4565 gfc_add_interface (gfc_symbol *new_sym)
4566 {
4567 gfc_interface **head, *intr;
4568 gfc_namespace *ns;
4569 gfc_symbol *sym;
4570
4571 switch (current_interface.type)
4572 {
4573 case INTERFACE_NAMELESS:
4574 case INTERFACE_ABSTRACT:
4575 return true;
4576
4577 case INTERFACE_INTRINSIC_OP:
4578 for (ns = current_interface.ns; ns; ns = ns->parent)
4579 switch (current_interface.op)
4580 {
4581 case INTRINSIC_EQ:
4582 case INTRINSIC_EQ_OS:
4583 if (!gfc_check_new_interface (ns->op[INTRINSIC_EQ], new_sym,
4584 gfc_current_locus)
4585 || !gfc_check_new_interface (ns->op[INTRINSIC_EQ_OS],
4586 new_sym, gfc_current_locus))
4587 return false;
4588 break;
4589
4590 case INTRINSIC_NE:
4591 case INTRINSIC_NE_OS:
4592 if (!gfc_check_new_interface (ns->op[INTRINSIC_NE], new_sym,
4593 gfc_current_locus)
4594 || !gfc_check_new_interface (ns->op[INTRINSIC_NE_OS],
4595 new_sym, gfc_current_locus))
4596 return false;
4597 break;
4598
4599 case INTRINSIC_GT:
4600 case INTRINSIC_GT_OS:
4601 if (!gfc_check_new_interface (ns->op[INTRINSIC_GT],
4602 new_sym, gfc_current_locus)
4603 || !gfc_check_new_interface (ns->op[INTRINSIC_GT_OS],
4604 new_sym, gfc_current_locus))
4605 return false;
4606 break;
4607
4608 case INTRINSIC_GE:
4609 case INTRINSIC_GE_OS:
4610 if (!gfc_check_new_interface (ns->op[INTRINSIC_GE],
4611 new_sym, gfc_current_locus)
4612 || !gfc_check_new_interface (ns->op[INTRINSIC_GE_OS],
4613 new_sym, gfc_current_locus))
4614 return false;
4615 break;
4616
4617 case INTRINSIC_LT:
4618 case INTRINSIC_LT_OS:
4619 if (!gfc_check_new_interface (ns->op[INTRINSIC_LT],
4620 new_sym, gfc_current_locus)
4621 || !gfc_check_new_interface (ns->op[INTRINSIC_LT_OS],
4622 new_sym, gfc_current_locus))
4623 return false;
4624 break;
4625
4626 case INTRINSIC_LE:
4627 case INTRINSIC_LE_OS:
4628 if (!gfc_check_new_interface (ns->op[INTRINSIC_LE],
4629 new_sym, gfc_current_locus)
4630 || !gfc_check_new_interface (ns->op[INTRINSIC_LE_OS],
4631 new_sym, gfc_current_locus))
4632 return false;
4633 break;
4634
4635 default:
4636 if (!gfc_check_new_interface (ns->op[current_interface.op],
4637 new_sym, gfc_current_locus))
4638 return false;
4639 }
4640
4641 head = &current_interface.ns->op[current_interface.op];
4642 break;
4643
4644 case INTERFACE_GENERIC:
4645 case INTERFACE_DTIO:
4646 for (ns = current_interface.ns; ns; ns = ns->parent)
4647 {
4648 gfc_find_symbol (current_interface.sym->name, ns, 0, &sym);
4649 if (sym == NULL)
4650 continue;
4651
4652 if (!gfc_check_new_interface (sym->generic,
4653 new_sym, gfc_current_locus))
4654 return false;
4655 }
4656
4657 head = &current_interface.sym->generic;
4658 break;
4659
4660 case INTERFACE_USER_OP:
4661 if (!gfc_check_new_interface (current_interface.uop->op,
4662 new_sym, gfc_current_locus))
4663 return false;
4664
4665 head = &current_interface.uop->op;
4666 break;
4667
4668 default:
4669 gfc_internal_error ("gfc_add_interface(): Bad interface type");
4670 }
4671
4672 intr = gfc_get_interface ();
4673 intr->sym = new_sym;
4674 intr->where = gfc_current_locus;
4675
4676 intr->next = *head;
4677 *head = intr;
4678
4679 return true;
4680 }
4681
4682
4683 gfc_interface *
4684 gfc_current_interface_head (void)
4685 {
4686 switch (current_interface.type)
4687 {
4688 case INTERFACE_INTRINSIC_OP:
4689 return current_interface.ns->op[current_interface.op];
4690
4691 case INTERFACE_GENERIC:
4692 case INTERFACE_DTIO:
4693 return current_interface.sym->generic;
4694
4695 case INTERFACE_USER_OP:
4696 return current_interface.uop->op;
4697
4698 default:
4699 gcc_unreachable ();
4700 }
4701 }
4702
4703
4704 void
4705 gfc_set_current_interface_head (gfc_interface *i)
4706 {
4707 switch (current_interface.type)
4708 {
4709 case INTERFACE_INTRINSIC_OP:
4710 current_interface.ns->op[current_interface.op] = i;
4711 break;
4712
4713 case INTERFACE_GENERIC:
4714 case INTERFACE_DTIO:
4715 current_interface.sym->generic = i;
4716 break;
4717
4718 case INTERFACE_USER_OP:
4719 current_interface.uop->op = i;
4720 break;
4721
4722 default:
4723 gcc_unreachable ();
4724 }
4725 }
4726
4727
4728 /* Gets rid of a formal argument list. We do not free symbols.
4729 Symbols are freed when a namespace is freed. */
4730
4731 void
4732 gfc_free_formal_arglist (gfc_formal_arglist *p)
4733 {
4734 gfc_formal_arglist *q;
4735
4736 for (; p; p = q)
4737 {
4738 q = p->next;
4739 free (p);
4740 }
4741 }
4742
4743
4744 /* Check that it is ok for the type-bound procedure 'proc' to override the
4745 procedure 'old', cf. F08:4.5.7.3. */
4746
4747 bool
4748 gfc_check_typebound_override (gfc_symtree* proc, gfc_symtree* old)
4749 {
4750 locus where;
4751 gfc_symbol *proc_target, *old_target;
4752 unsigned proc_pass_arg, old_pass_arg, argpos;
4753 gfc_formal_arglist *proc_formal, *old_formal;
4754 bool check_type;
4755 char err[200];
4756
4757 /* This procedure should only be called for non-GENERIC proc. */
4758 gcc_assert (!proc->n.tb->is_generic);
4759
4760 /* If the overwritten procedure is GENERIC, this is an error. */
4761 if (old->n.tb->is_generic)
4762 {
4763 gfc_error ("Cannot overwrite GENERIC %qs at %L",
4764 old->name, &proc->n.tb->where);
4765 return false;
4766 }
4767
4768 where = proc->n.tb->where;
4769 proc_target = proc->n.tb->u.specific->n.sym;
4770 old_target = old->n.tb->u.specific->n.sym;
4771
4772 /* Check that overridden binding is not NON_OVERRIDABLE. */
4773 if (old->n.tb->non_overridable)
4774 {
4775 gfc_error ("%qs at %L overrides a procedure binding declared"
4776 " NON_OVERRIDABLE", proc->name, &where);
4777 return false;
4778 }
4779
4780 /* It's an error to override a non-DEFERRED procedure with a DEFERRED one. */
4781 if (!old->n.tb->deferred && proc->n.tb->deferred)
4782 {
4783 gfc_error ("%qs at %L must not be DEFERRED as it overrides a"
4784 " non-DEFERRED binding", proc->name, &where);
4785 return false;
4786 }
4787
4788 /* If the overridden binding is PURE, the overriding must be, too. */
4789 if (old_target->attr.pure && !proc_target->attr.pure)
4790 {
4791 gfc_error ("%qs at %L overrides a PURE procedure and must also be PURE",
4792 proc->name, &where);
4793 return false;
4794 }
4795
4796 /* If the overridden binding is ELEMENTAL, the overriding must be, too. If it
4797 is not, the overriding must not be either. */
4798 if (old_target->attr.elemental && !proc_target->attr.elemental)
4799 {
4800 gfc_error ("%qs at %L overrides an ELEMENTAL procedure and must also be"
4801 " ELEMENTAL", proc->name, &where);
4802 return false;
4803 }
4804 if (!old_target->attr.elemental && proc_target->attr.elemental)
4805 {
4806 gfc_error ("%qs at %L overrides a non-ELEMENTAL procedure and must not"
4807 " be ELEMENTAL, either", proc->name, &where);
4808 return false;
4809 }
4810
4811 /* If the overridden binding is a SUBROUTINE, the overriding must also be a
4812 SUBROUTINE. */
4813 if (old_target->attr.subroutine && !proc_target->attr.subroutine)
4814 {
4815 gfc_error ("%qs at %L overrides a SUBROUTINE and must also be a"
4816 " SUBROUTINE", proc->name, &where);
4817 return false;
4818 }
4819
4820 /* If the overridden binding is a FUNCTION, the overriding must also be a
4821 FUNCTION and have the same characteristics. */
4822 if (old_target->attr.function)
4823 {
4824 if (!proc_target->attr.function)
4825 {
4826 gfc_error ("%qs at %L overrides a FUNCTION and must also be a"
4827 " FUNCTION", proc->name, &where);
4828 return false;
4829 }
4830
4831 if (!gfc_check_result_characteristics (proc_target, old_target,
4832 err, sizeof(err)))
4833 {
4834 gfc_error ("Result mismatch for the overriding procedure "
4835 "%qs at %L: %s", proc->name, &where, err);
4836 return false;
4837 }
4838 }
4839
4840 /* If the overridden binding is PUBLIC, the overriding one must not be
4841 PRIVATE. */
4842 if (old->n.tb->access == ACCESS_PUBLIC
4843 && proc->n.tb->access == ACCESS_PRIVATE)
4844 {
4845 gfc_error ("%qs at %L overrides a PUBLIC procedure and must not be"
4846 " PRIVATE", proc->name, &where);
4847 return false;
4848 }
4849
4850 /* Compare the formal argument lists of both procedures. This is also abused
4851 to find the position of the passed-object dummy arguments of both
4852 bindings as at least the overridden one might not yet be resolved and we
4853 need those positions in the check below. */
4854 proc_pass_arg = old_pass_arg = 0;
4855 if (!proc->n.tb->nopass && !proc->n.tb->pass_arg)
4856 proc_pass_arg = 1;
4857 if (!old->n.tb->nopass && !old->n.tb->pass_arg)
4858 old_pass_arg = 1;
4859 argpos = 1;
4860 proc_formal = gfc_sym_get_dummy_args (proc_target);
4861 old_formal = gfc_sym_get_dummy_args (old_target);
4862 for ( ; proc_formal && old_formal;
4863 proc_formal = proc_formal->next, old_formal = old_formal->next)
4864 {
4865 if (proc->n.tb->pass_arg
4866 && !strcmp (proc->n.tb->pass_arg, proc_formal->sym->name))
4867 proc_pass_arg = argpos;
4868 if (old->n.tb->pass_arg
4869 && !strcmp (old->n.tb->pass_arg, old_formal->sym->name))
4870 old_pass_arg = argpos;
4871
4872 /* Check that the names correspond. */
4873 if (strcmp (proc_formal->sym->name, old_formal->sym->name))
4874 {
4875 gfc_error ("Dummy argument %qs of %qs at %L should be named %qs as"
4876 " to match the corresponding argument of the overridden"
4877 " procedure", proc_formal->sym->name, proc->name, &where,
4878 old_formal->sym->name);
4879 return false;
4880 }
4881
4882 check_type = proc_pass_arg != argpos && old_pass_arg != argpos;
4883 if (!gfc_check_dummy_characteristics (proc_formal->sym, old_formal->sym,
4884 check_type, err, sizeof(err)))
4885 {
4886 gfc_error_opt (0, "Argument mismatch for the overriding procedure "
4887 "%qs at %L: %s", proc->name, &where, err);
4888 return false;
4889 }
4890
4891 ++argpos;
4892 }
4893 if (proc_formal || old_formal)
4894 {
4895 gfc_error ("%qs at %L must have the same number of formal arguments as"
4896 " the overridden procedure", proc->name, &where);
4897 return false;
4898 }
4899
4900 /* If the overridden binding is NOPASS, the overriding one must also be
4901 NOPASS. */
4902 if (old->n.tb->nopass && !proc->n.tb->nopass)
4903 {
4904 gfc_error ("%qs at %L overrides a NOPASS binding and must also be"
4905 " NOPASS", proc->name, &where);
4906 return false;
4907 }
4908
4909 /* If the overridden binding is PASS(x), the overriding one must also be
4910 PASS and the passed-object dummy arguments must correspond. */
4911 if (!old->n.tb->nopass)
4912 {
4913 if (proc->n.tb->nopass)
4914 {
4915 gfc_error ("%qs at %L overrides a binding with PASS and must also be"
4916 " PASS", proc->name, &where);
4917 return false;
4918 }
4919
4920 if (proc_pass_arg != old_pass_arg)
4921 {
4922 gfc_error ("Passed-object dummy argument of %qs at %L must be at"
4923 " the same position as the passed-object dummy argument of"
4924 " the overridden procedure", proc->name, &where);
4925 return false;
4926 }
4927 }
4928
4929 return true;
4930 }
4931
4932
4933 /* The following three functions check that the formal arguments
4934 of user defined derived type IO procedures are compliant with
4935 the requirements of the standard, see F03:9.5.3.7.2 (F08:9.6.4.8.3). */
4936
4937 static void
4938 check_dtio_arg_TKR_intent (gfc_symbol *fsym, bool typebound, bt type,
4939 int kind, int rank, sym_intent intent)
4940 {
4941 if (fsym->ts.type != type)
4942 {
4943 gfc_error ("DTIO dummy argument at %L must be of type %s",
4944 &fsym->declared_at, gfc_basic_typename (type));
4945 return;
4946 }
4947
4948 if (fsym->ts.type != BT_CLASS && fsym->ts.type != BT_DERIVED
4949 && fsym->ts.kind != kind)
4950 gfc_error ("DTIO dummy argument at %L must be of KIND = %d",
4951 &fsym->declared_at, kind);
4952
4953 if (!typebound
4954 && rank == 0
4955 && (((type == BT_CLASS) && CLASS_DATA (fsym)->attr.dimension)
4956 || ((type != BT_CLASS) && fsym->attr.dimension)))
4957 gfc_error ("DTIO dummy argument at %L must be a scalar",
4958 &fsym->declared_at);
4959 else if (rank == 1
4960 && (fsym->as == NULL || fsym->as->type != AS_ASSUMED_SHAPE))
4961 gfc_error ("DTIO dummy argument at %L must be an "
4962 "ASSUMED SHAPE ARRAY", &fsym->declared_at);
4963
4964 if (type == BT_CHARACTER && fsym->ts.u.cl->length != NULL)
4965 gfc_error ("DTIO character argument at %L must have assumed length",
4966 &fsym->declared_at);
4967
4968 if (fsym->attr.intent != intent)
4969 gfc_error ("DTIO dummy argument at %L must have INTENT %s",
4970 &fsym->declared_at, gfc_code2string (intents, (int)intent));
4971 return;
4972 }
4973
4974
4975 static void
4976 check_dtio_interface1 (gfc_symbol *derived, gfc_symtree *tb_io_st,
4977 bool typebound, bool formatted, int code)
4978 {
4979 gfc_symbol *dtio_sub, *generic_proc, *fsym;
4980 gfc_typebound_proc *tb_io_proc, *specific_proc;
4981 gfc_interface *intr;
4982 gfc_formal_arglist *formal;
4983 int arg_num;
4984
4985 bool read = ((dtio_codes)code == DTIO_RF)
4986 || ((dtio_codes)code == DTIO_RUF);
4987 bt type;
4988 sym_intent intent;
4989 int kind;
4990
4991 dtio_sub = NULL;
4992 if (typebound)
4993 {
4994 /* Typebound DTIO binding. */
4995 tb_io_proc = tb_io_st->n.tb;
4996 if (tb_io_proc == NULL)
4997 return;
4998
4999 gcc_assert (tb_io_proc->is_generic);
5000
5001 specific_proc = tb_io_proc->u.generic->specific;
5002 if (specific_proc == NULL || specific_proc->is_generic)
5003 return;
5004
5005 dtio_sub = specific_proc->u.specific->n.sym;
5006 }
5007 else
5008 {
5009 generic_proc = tb_io_st->n.sym;
5010 if (generic_proc == NULL || generic_proc->generic == NULL)
5011 return;
5012
5013 for (intr = tb_io_st->n.sym->generic; intr; intr = intr->next)
5014 {
5015 if (intr->sym && intr->sym->formal && intr->sym->formal->sym
5016 && ((intr->sym->formal->sym->ts.type == BT_CLASS
5017 && CLASS_DATA (intr->sym->formal->sym)->ts.u.derived
5018 == derived)
5019 || (intr->sym->formal->sym->ts.type == BT_DERIVED
5020 && intr->sym->formal->sym->ts.u.derived == derived)))
5021 {
5022 dtio_sub = intr->sym;
5023 break;
5024 }
5025 else if (intr->sym && intr->sym->formal && !intr->sym->formal->sym)
5026 {
5027 gfc_error ("Alternate return at %L is not permitted in a DTIO "
5028 "procedure", &intr->sym->declared_at);
5029 return;
5030 }
5031 }
5032
5033 if (dtio_sub == NULL)
5034 return;
5035 }
5036
5037 gcc_assert (dtio_sub);
5038 if (!dtio_sub->attr.subroutine)
5039 gfc_error ("DTIO procedure %qs at %L must be a subroutine",
5040 dtio_sub->name, &dtio_sub->declared_at);
5041
5042 if (!dtio_sub->resolve_symbol_called)
5043 gfc_resolve_formal_arglist (dtio_sub);
5044
5045 arg_num = 0;
5046 for (formal = dtio_sub->formal; formal; formal = formal->next)
5047 arg_num++;
5048
5049 if (arg_num < (formatted ? 6 : 4))
5050 {
5051 gfc_error ("Too few dummy arguments in DTIO procedure %qs at %L",
5052 dtio_sub->name, &dtio_sub->declared_at);
5053 return;
5054 }
5055
5056 if (arg_num > (formatted ? 6 : 4))
5057 {
5058 gfc_error ("Too many dummy arguments in DTIO procedure %qs at %L",
5059 dtio_sub->name, &dtio_sub->declared_at);
5060 return;
5061 }
5062
5063 /* Now go through the formal arglist. */
5064 arg_num = 1;
5065 for (formal = dtio_sub->formal; formal; formal = formal->next, arg_num++)
5066 {
5067 if (!formatted && arg_num == 3)
5068 arg_num = 5;
5069 fsym = formal->sym;
5070
5071 if (fsym == NULL)
5072 {
5073 gfc_error ("Alternate return at %L is not permitted in a DTIO "
5074 "procedure", &dtio_sub->declared_at);
5075 return;
5076 }
5077
5078 switch (arg_num)
5079 {
5080 case(1): /* DTV */
5081 type = derived->attr.sequence || derived->attr.is_bind_c ?
5082 BT_DERIVED : BT_CLASS;
5083 kind = 0;
5084 intent = read ? INTENT_INOUT : INTENT_IN;
5085 check_dtio_arg_TKR_intent (fsym, typebound, type, kind,
5086 0, intent);
5087 break;
5088
5089 case(2): /* UNIT */
5090 type = BT_INTEGER;
5091 kind = gfc_default_integer_kind;
5092 intent = INTENT_IN;
5093 check_dtio_arg_TKR_intent (fsym, typebound, type, kind,
5094 0, intent);
5095 break;
5096 case(3): /* IOTYPE */
5097 type = BT_CHARACTER;
5098 kind = gfc_default_character_kind;
5099 intent = INTENT_IN;
5100 check_dtio_arg_TKR_intent (fsym, typebound, type, kind,
5101 0, intent);
5102 break;
5103 case(4): /* VLIST */
5104 type = BT_INTEGER;
5105 kind = gfc_default_integer_kind;
5106 intent = INTENT_IN;
5107 check_dtio_arg_TKR_intent (fsym, typebound, type, kind,
5108 1, intent);
5109 break;
5110 case(5): /* IOSTAT */
5111 type = BT_INTEGER;
5112 kind = gfc_default_integer_kind;
5113 intent = INTENT_OUT;
5114 check_dtio_arg_TKR_intent (fsym, typebound, type, kind,
5115 0, intent);
5116 break;
5117 case(6): /* IOMSG */
5118 type = BT_CHARACTER;
5119 kind = gfc_default_character_kind;
5120 intent = INTENT_INOUT;
5121 check_dtio_arg_TKR_intent (fsym, typebound, type, kind,
5122 0, intent);
5123 break;
5124 default:
5125 gcc_unreachable ();
5126 }
5127 }
5128 derived->attr.has_dtio_procs = 1;
5129 return;
5130 }
5131
5132 void
5133 gfc_check_dtio_interfaces (gfc_symbol *derived)
5134 {
5135 gfc_symtree *tb_io_st;
5136 bool t = false;
5137 int code;
5138 bool formatted;
5139
5140 if (derived->attr.is_class == 1 || derived->attr.vtype == 1)
5141 return;
5142
5143 /* Check typebound DTIO bindings. */
5144 for (code = 0; code < 4; code++)
5145 {
5146 formatted = ((dtio_codes)code == DTIO_RF)
5147 || ((dtio_codes)code == DTIO_WF);
5148
5149 tb_io_st = gfc_find_typebound_proc (derived, &t,
5150 gfc_code2string (dtio_procs, code),
5151 true, &derived->declared_at);
5152 if (tb_io_st != NULL)
5153 check_dtio_interface1 (derived, tb_io_st, true, formatted, code);
5154 }
5155
5156 /* Check generic DTIO interfaces. */
5157 for (code = 0; code < 4; code++)
5158 {
5159 formatted = ((dtio_codes)code == DTIO_RF)
5160 || ((dtio_codes)code == DTIO_WF);
5161
5162 tb_io_st = gfc_find_symtree (derived->ns->sym_root,
5163 gfc_code2string (dtio_procs, code));
5164 if (tb_io_st != NULL)
5165 check_dtio_interface1 (derived, tb_io_st, false, formatted, code);
5166 }
5167 }
5168
5169
5170 gfc_symtree*
5171 gfc_find_typebound_dtio_proc (gfc_symbol *derived, bool write, bool formatted)
5172 {
5173 gfc_symtree *tb_io_st = NULL;
5174 bool t = false;
5175
5176 if (!derived || !derived->resolve_symbol_called
5177 || derived->attr.flavor != FL_DERIVED)
5178 return NULL;
5179
5180 /* Try to find a typebound DTIO binding. */
5181 if (formatted == true)
5182 {
5183 if (write == true)
5184 tb_io_st = gfc_find_typebound_proc (derived, &t,
5185 gfc_code2string (dtio_procs,
5186 DTIO_WF),
5187 true,
5188 &derived->declared_at);
5189 else
5190 tb_io_st = gfc_find_typebound_proc (derived, &t,
5191 gfc_code2string (dtio_procs,
5192 DTIO_RF),
5193 true,
5194 &derived->declared_at);
5195 }
5196 else
5197 {
5198 if (write == true)
5199 tb_io_st = gfc_find_typebound_proc (derived, &t,
5200 gfc_code2string (dtio_procs,
5201 DTIO_WUF),
5202 true,
5203 &derived->declared_at);
5204 else
5205 tb_io_st = gfc_find_typebound_proc (derived, &t,
5206 gfc_code2string (dtio_procs,
5207 DTIO_RUF),
5208 true,
5209 &derived->declared_at);
5210 }
5211 return tb_io_st;
5212 }
5213
5214
5215 gfc_symbol *
5216 gfc_find_specific_dtio_proc (gfc_symbol *derived, bool write, bool formatted)
5217 {
5218 gfc_symtree *tb_io_st = NULL;
5219 gfc_symbol *dtio_sub = NULL;
5220 gfc_symbol *extended;
5221 gfc_typebound_proc *tb_io_proc, *specific_proc;
5222
5223 tb_io_st = gfc_find_typebound_dtio_proc (derived, write, formatted);
5224
5225 if (tb_io_st != NULL)
5226 {
5227 const char *genname;
5228 gfc_symtree *st;
5229
5230 tb_io_proc = tb_io_st->n.tb;
5231 gcc_assert (tb_io_proc != NULL);
5232 gcc_assert (tb_io_proc->is_generic);
5233 gcc_assert (tb_io_proc->u.generic->next == NULL);
5234
5235 specific_proc = tb_io_proc->u.generic->specific;
5236 gcc_assert (!specific_proc->is_generic);
5237
5238 /* Go back and make sure that we have the right specific procedure.
5239 Here we most likely have a procedure from the parent type, which
5240 can be overridden in extensions. */
5241 genname = tb_io_proc->u.generic->specific_st->name;
5242 st = gfc_find_typebound_proc (derived, NULL, genname,
5243 true, &tb_io_proc->where);
5244 if (st)
5245 dtio_sub = st->n.tb->u.specific->n.sym;
5246 else
5247 dtio_sub = specific_proc->u.specific->n.sym;
5248
5249 goto finish;
5250 }
5251
5252 /* If there is not a typebound binding, look for a generic
5253 DTIO interface. */
5254 for (extended = derived; extended;
5255 extended = gfc_get_derived_super_type (extended))
5256 {
5257 if (extended == NULL || extended->ns == NULL
5258 || extended->attr.flavor == FL_UNKNOWN)
5259 return NULL;
5260
5261 if (formatted == true)
5262 {
5263 if (write == true)
5264 tb_io_st = gfc_find_symtree (extended->ns->sym_root,
5265 gfc_code2string (dtio_procs,
5266 DTIO_WF));
5267 else
5268 tb_io_st = gfc_find_symtree (extended->ns->sym_root,
5269 gfc_code2string (dtio_procs,
5270 DTIO_RF));
5271 }
5272 else
5273 {
5274 if (write == true)
5275 tb_io_st = gfc_find_symtree (extended->ns->sym_root,
5276 gfc_code2string (dtio_procs,
5277 DTIO_WUF));
5278 else
5279 tb_io_st = gfc_find_symtree (extended->ns->sym_root,
5280 gfc_code2string (dtio_procs,
5281 DTIO_RUF));
5282 }
5283
5284 if (tb_io_st != NULL
5285 && tb_io_st->n.sym
5286 && tb_io_st->n.sym->generic)
5287 {
5288 for (gfc_interface *intr = tb_io_st->n.sym->generic;
5289 intr && intr->sym; intr = intr->next)
5290 {
5291 if (intr->sym->formal)
5292 {
5293 gfc_symbol *fsym = intr->sym->formal->sym;
5294 if ((fsym->ts.type == BT_CLASS
5295 && CLASS_DATA (fsym)->ts.u.derived == extended)
5296 || (fsym->ts.type == BT_DERIVED
5297 && fsym->ts.u.derived == extended))
5298 {
5299 dtio_sub = intr->sym;
5300 break;
5301 }
5302 }
5303 }
5304 }
5305 }
5306
5307 finish:
5308 if (dtio_sub && derived != CLASS_DATA (dtio_sub->formal->sym)->ts.u.derived)
5309 gfc_find_derived_vtab (derived);
5310
5311 return dtio_sub;
5312 }
5313
5314 /* Helper function - if we do not find an interface for a procedure,
5315 construct it from the actual arglist. Luckily, this can only
5316 happen for call by reference, so the information we actually need
5317 to provide (and which would be impossible to guess from the call
5318 itself) is not actually needed. */
5319
5320 void
5321 gfc_get_formal_from_actual_arglist (gfc_symbol *sym,
5322 gfc_actual_arglist *actual_args)
5323 {
5324 gfc_actual_arglist *a;
5325 gfc_formal_arglist **f;
5326 gfc_symbol *s;
5327 char name[GFC_MAX_SYMBOL_LEN + 1];
5328 static int var_num;
5329
5330 f = &sym->formal;
5331 for (a = actual_args; a != NULL; a = a->next)
5332 {
5333 (*f) = gfc_get_formal_arglist ();
5334 if (a->expr)
5335 {
5336 snprintf (name, GFC_MAX_SYMBOL_LEN, "_formal_%d", var_num ++);
5337 gfc_get_symbol (name, gfc_current_ns, &s);
5338 if (a->expr->ts.type == BT_PROCEDURE)
5339 {
5340 s->attr.flavor = FL_PROCEDURE;
5341 }
5342 else
5343 {
5344 s->ts = a->expr->ts;
5345
5346 if (s->ts.type == BT_CHARACTER)
5347 s->ts.u.cl = gfc_get_charlen ();
5348
5349 s->ts.deferred = 0;
5350 s->ts.is_iso_c = 0;
5351 s->ts.is_c_interop = 0;
5352 s->attr.flavor = FL_VARIABLE;
5353 if (a->expr->rank > 0)
5354 {
5355 s->attr.dimension = 1;
5356 s->as = gfc_get_array_spec ();
5357 s->as->rank = 1;
5358 s->as->lower[0] = gfc_get_int_expr (gfc_index_integer_kind,
5359 &a->expr->where, 1);
5360 s->as->upper[0] = NULL;
5361 s->as->type = AS_ASSUMED_SIZE;
5362 }
5363 else
5364 s->maybe_array = maybe_dummy_array_arg (a->expr);
5365 }
5366 s->attr.dummy = 1;
5367 s->attr.artificial = 1;
5368 s->declared_at = a->expr->where;
5369 s->attr.intent = INTENT_UNKNOWN;
5370 (*f)->sym = s;
5371 }
5372 else /* If a->expr is NULL, this is an alternate rerturn. */
5373 (*f)->sym = NULL;
5374
5375 f = &((*f)->next);
5376 }
5377 }