Fix indentation issues seen by -Wmisleading-indentation
[official-gcc.git] / gcc / fortran / interface.c
blob0501c1d15438d955e6e709bdb96d0bbc7b6e69cc
1 /* Deal with interfaces.
2 Copyright (C) 2000-2015 Free Software Foundation, Inc.
3 Contributed by Andy Vaught
5 This file is part of GCC.
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.
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.
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/>. */
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.
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.
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.
37 Nameless interfaces:
38 Nameless interfaces create symbols with explicit interfaces within
39 the current namespace. They are otherwise unlinked.
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.
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.
52 Extended intrinsics and assignment:
53 The head of these interface lists are stored in the containing namespace.
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.
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. */
66 #include "config.h"
67 #include "system.h"
68 #include "coretypes.h"
69 #include "flags.h"
70 #include "gfortran.h"
71 #include "match.h"
72 #include "arith.h"
74 /* The current_interface structure holds information about the
75 interface currently being parsed. This structure is saved and
76 restored during recursive interfaces. */
78 gfc_interface_info current_interface;
81 /* Free a singly linked list of gfc_interface structures. */
83 void
84 gfc_free_interface (gfc_interface *intr)
86 gfc_interface *next;
88 for (; intr; intr = next)
90 next = intr->next;
91 free (intr);
96 /* Change the operators unary plus and minus into binary plus and
97 minus respectively, leaving the rest unchanged. */
99 static gfc_intrinsic_op
100 fold_unary_intrinsic (gfc_intrinsic_op op)
102 switch (op)
104 case INTRINSIC_UPLUS:
105 op = INTRINSIC_PLUS;
106 break;
107 case INTRINSIC_UMINUS:
108 op = INTRINSIC_MINUS;
109 break;
110 default:
111 break;
114 return op;
118 /* Match a generic specification. Depending on which type of
119 interface is found, the 'name' or 'op' pointers may be set.
120 This subroutine doesn't return MATCH_NO. */
122 match
123 gfc_match_generic_spec (interface_type *type,
124 char *name,
125 gfc_intrinsic_op *op)
127 char buffer[GFC_MAX_SYMBOL_LEN + 1];
128 match m;
129 gfc_intrinsic_op i;
131 if (gfc_match (" assignment ( = )") == MATCH_YES)
133 *type = INTERFACE_INTRINSIC_OP;
134 *op = INTRINSIC_ASSIGN;
135 return MATCH_YES;
138 if (gfc_match (" operator ( %o )", &i) == MATCH_YES)
139 { /* Operator i/f */
140 *type = INTERFACE_INTRINSIC_OP;
141 *op = fold_unary_intrinsic (i);
142 return MATCH_YES;
145 *op = INTRINSIC_NONE;
146 if (gfc_match (" operator ( ") == MATCH_YES)
148 m = gfc_match_defined_op_name (buffer, 1);
149 if (m == MATCH_NO)
150 goto syntax;
151 if (m != MATCH_YES)
152 return MATCH_ERROR;
154 m = gfc_match_char (')');
155 if (m == MATCH_NO)
156 goto syntax;
157 if (m != MATCH_YES)
158 return MATCH_ERROR;
160 strcpy (name, buffer);
161 *type = INTERFACE_USER_OP;
162 return MATCH_YES;
165 if (gfc_match_name (buffer) == MATCH_YES)
167 strcpy (name, buffer);
168 *type = INTERFACE_GENERIC;
169 return MATCH_YES;
172 *type = INTERFACE_NAMELESS;
173 return MATCH_YES;
175 syntax:
176 gfc_error ("Syntax error in generic specification at %C");
177 return MATCH_ERROR;
181 /* Match one of the five F95 forms of an interface statement. The
182 matcher for the abstract interface follows. */
184 match
185 gfc_match_interface (void)
187 char name[GFC_MAX_SYMBOL_LEN + 1];
188 interface_type type;
189 gfc_symbol *sym;
190 gfc_intrinsic_op op;
191 match m;
193 m = gfc_match_space ();
195 if (gfc_match_generic_spec (&type, name, &op) == MATCH_ERROR)
196 return MATCH_ERROR;
198 /* If we're not looking at the end of the statement now, or if this
199 is not a nameless interface but we did not see a space, punt. */
200 if (gfc_match_eos () != MATCH_YES
201 || (type != INTERFACE_NAMELESS && m != MATCH_YES))
203 gfc_error ("Syntax error: Trailing garbage in INTERFACE statement "
204 "at %C");
205 return MATCH_ERROR;
208 current_interface.type = type;
210 switch (type)
212 case INTERFACE_GENERIC:
213 if (gfc_get_symbol (name, NULL, &sym))
214 return MATCH_ERROR;
216 if (!sym->attr.generic
217 && !gfc_add_generic (&sym->attr, sym->name, NULL))
218 return MATCH_ERROR;
220 if (sym->attr.dummy)
222 gfc_error ("Dummy procedure %qs at %C cannot have a "
223 "generic interface", sym->name);
224 return MATCH_ERROR;
227 current_interface.sym = gfc_new_block = sym;
228 break;
230 case INTERFACE_USER_OP:
231 current_interface.uop = gfc_get_uop (name);
232 break;
234 case INTERFACE_INTRINSIC_OP:
235 current_interface.op = op;
236 break;
238 case INTERFACE_NAMELESS:
239 case INTERFACE_ABSTRACT:
240 break;
243 return MATCH_YES;
248 /* Match a F2003 abstract interface. */
250 match
251 gfc_match_abstract_interface (void)
253 match m;
255 if (!gfc_notify_std (GFC_STD_F2003, "ABSTRACT INTERFACE at %C"))
256 return MATCH_ERROR;
258 m = gfc_match_eos ();
260 if (m != MATCH_YES)
262 gfc_error ("Syntax error in ABSTRACT INTERFACE statement at %C");
263 return MATCH_ERROR;
266 current_interface.type = INTERFACE_ABSTRACT;
268 return m;
272 /* Match the different sort of generic-specs that can be present after
273 the END INTERFACE itself. */
275 match
276 gfc_match_end_interface (void)
278 char name[GFC_MAX_SYMBOL_LEN + 1];
279 interface_type type;
280 gfc_intrinsic_op op;
281 match m;
283 m = gfc_match_space ();
285 if (gfc_match_generic_spec (&type, name, &op) == MATCH_ERROR)
286 return MATCH_ERROR;
288 /* If we're not looking at the end of the statement now, or if this
289 is not a nameless interface but we did not see a space, punt. */
290 if (gfc_match_eos () != MATCH_YES
291 || (type != INTERFACE_NAMELESS && m != MATCH_YES))
293 gfc_error ("Syntax error: Trailing garbage in END INTERFACE "
294 "statement at %C");
295 return MATCH_ERROR;
298 m = MATCH_YES;
300 switch (current_interface.type)
302 case INTERFACE_NAMELESS:
303 case INTERFACE_ABSTRACT:
304 if (type != INTERFACE_NAMELESS)
306 gfc_error ("Expected a nameless interface at %C");
307 m = MATCH_ERROR;
310 break;
312 case INTERFACE_INTRINSIC_OP:
313 if (type != current_interface.type || op != current_interface.op)
316 if (current_interface.op == INTRINSIC_ASSIGN)
318 m = MATCH_ERROR;
319 gfc_error ("Expected %<END INTERFACE ASSIGNMENT (=)%> at %C");
321 else
323 const char *s1, *s2;
324 s1 = gfc_op2string (current_interface.op);
325 s2 = gfc_op2string (op);
327 /* The following if-statements are used to enforce C1202
328 from F2003. */
329 if ((strcmp(s1, "==") == 0 && strcmp (s2, ".eq.") == 0)
330 || (strcmp(s1, ".eq.") == 0 && strcmp (s2, "==") == 0))
331 break;
332 if ((strcmp(s1, "/=") == 0 && strcmp (s2, ".ne.") == 0)
333 || (strcmp(s1, ".ne.") == 0 && strcmp (s2, "/=") == 0))
334 break;
335 if ((strcmp(s1, "<=") == 0 && strcmp (s2, ".le.") == 0)
336 || (strcmp(s1, ".le.") == 0 && strcmp (s2, "<=") == 0))
337 break;
338 if ((strcmp(s1, "<") == 0 && strcmp (s2, ".lt.") == 0)
339 || (strcmp(s1, ".lt.") == 0 && strcmp (s2, "<") == 0))
340 break;
341 if ((strcmp(s1, ">=") == 0 && strcmp (s2, ".ge.") == 0)
342 || (strcmp(s1, ".ge.") == 0 && strcmp (s2, ">=") == 0))
343 break;
344 if ((strcmp(s1, ">") == 0 && strcmp (s2, ".gt.") == 0)
345 || (strcmp(s1, ".gt.") == 0 && strcmp (s2, ">") == 0))
346 break;
348 m = MATCH_ERROR;
349 gfc_error ("Expecting %<END INTERFACE OPERATOR (%s)%> at %C, "
350 "but got %s", s1, s2);
355 break;
357 case INTERFACE_USER_OP:
358 /* Comparing the symbol node names is OK because only use-associated
359 symbols can be renamed. */
360 if (type != current_interface.type
361 || strcmp (current_interface.uop->name, name) != 0)
363 gfc_error ("Expecting %<END INTERFACE OPERATOR (.%s.)%> at %C",
364 current_interface.uop->name);
365 m = MATCH_ERROR;
368 break;
370 case INTERFACE_GENERIC:
371 if (type != current_interface.type
372 || strcmp (current_interface.sym->name, name) != 0)
374 gfc_error ("Expecting %<END INTERFACE %s%> at %C",
375 current_interface.sym->name);
376 m = MATCH_ERROR;
379 break;
382 return m;
386 /* Compare two derived types using the criteria in 4.4.2 of the standard,
387 recursing through gfc_compare_types for the components. */
390 gfc_compare_derived_types (gfc_symbol *derived1, gfc_symbol *derived2)
392 gfc_component *dt1, *dt2;
394 if (derived1 == derived2)
395 return 1;
397 gcc_assert (derived1 && derived2);
399 /* Special case for comparing derived types across namespaces. If the
400 true names and module names are the same and the module name is
401 nonnull, then they are equal. */
402 if (strcmp (derived1->name, derived2->name) == 0
403 && derived1->module != NULL && derived2->module != NULL
404 && strcmp (derived1->module, derived2->module) == 0)
405 return 1;
407 /* Compare type via the rules of the standard. Both types must have
408 the SEQUENCE or BIND(C) attribute to be equal. */
410 if (strcmp (derived1->name, derived2->name))
411 return 0;
413 if (derived1->component_access == ACCESS_PRIVATE
414 || derived2->component_access == ACCESS_PRIVATE)
415 return 0;
417 if (!(derived1->attr.sequence && derived2->attr.sequence)
418 && !(derived1->attr.is_bind_c && derived2->attr.is_bind_c))
419 return 0;
421 dt1 = derived1->components;
422 dt2 = derived2->components;
424 /* Since subtypes of SEQUENCE types must be SEQUENCE types as well, a
425 simple test can speed things up. Otherwise, lots of things have to
426 match. */
427 for (;;)
429 if (strcmp (dt1->name, dt2->name) != 0)
430 return 0;
432 if (dt1->attr.access != dt2->attr.access)
433 return 0;
435 if (dt1->attr.pointer != dt2->attr.pointer)
436 return 0;
438 if (dt1->attr.dimension != dt2->attr.dimension)
439 return 0;
441 if (dt1->attr.allocatable != dt2->attr.allocatable)
442 return 0;
444 if (dt1->attr.dimension && gfc_compare_array_spec (dt1->as, dt2->as) == 0)
445 return 0;
447 /* Make sure that link lists do not put this function into an
448 endless recursive loop! */
449 if (!(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived)
450 && !(dt2->ts.type == BT_DERIVED && derived2 == dt2->ts.u.derived)
451 && gfc_compare_types (&dt1->ts, &dt2->ts) == 0)
452 return 0;
454 else if ((dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived)
455 && !(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived))
456 return 0;
458 else if (!(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived)
459 && (dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived))
460 return 0;
462 dt1 = dt1->next;
463 dt2 = dt2->next;
465 if (dt1 == NULL && dt2 == NULL)
466 break;
467 if (dt1 == NULL || dt2 == NULL)
468 return 0;
471 return 1;
475 /* Compare two typespecs, recursively if necessary. */
478 gfc_compare_types (gfc_typespec *ts1, gfc_typespec *ts2)
480 /* See if one of the typespecs is a BT_VOID, which is what is being used
481 to allow the funcs like c_f_pointer to accept any pointer type.
482 TODO: Possibly should narrow this to just the one typespec coming in
483 that is for the formal arg, but oh well. */
484 if (ts1->type == BT_VOID || ts2->type == BT_VOID)
485 return 1;
487 /* The _data component is not always present, therefore check for its
488 presence before assuming, that its derived->attr is available.
489 When the _data component is not present, then nevertheless the
490 unlimited_polymorphic flag may be set in the derived type's attr. */
491 if (ts1->type == BT_CLASS && ts1->u.derived->components
492 && ((ts1->u.derived->attr.is_class
493 && ts1->u.derived->components->ts.u.derived->attr
494 .unlimited_polymorphic)
495 || ts1->u.derived->attr.unlimited_polymorphic))
496 return 1;
498 /* F2003: C717 */
499 if (ts2->type == BT_CLASS && ts1->type == BT_DERIVED
500 && ts2->u.derived->components
501 && ((ts2->u.derived->attr.is_class
502 && ts2->u.derived->components->ts.u.derived->attr
503 .unlimited_polymorphic)
504 || ts2->u.derived->attr.unlimited_polymorphic)
505 && (ts1->u.derived->attr.sequence || ts1->u.derived->attr.is_bind_c))
506 return 1;
508 if (ts1->type != ts2->type
509 && ((ts1->type != BT_DERIVED && ts1->type != BT_CLASS)
510 || (ts2->type != BT_DERIVED && ts2->type != BT_CLASS)))
511 return 0;
512 if (ts1->type != BT_DERIVED && ts1->type != BT_CLASS)
513 return (ts1->kind == ts2->kind);
515 /* Compare derived types. */
516 if (gfc_type_compatible (ts1, ts2))
517 return 1;
519 return gfc_compare_derived_types (ts1->u.derived ,ts2->u.derived);
523 static int
524 compare_type (gfc_symbol *s1, gfc_symbol *s2)
526 if (s2->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
527 return 1;
529 /* TYPE and CLASS of the same declared type are type compatible,
530 but have different characteristics. */
531 if ((s1->ts.type == BT_CLASS && s2->ts.type == BT_DERIVED)
532 || (s1->ts.type == BT_DERIVED && s2->ts.type == BT_CLASS))
533 return 0;
535 return gfc_compare_types (&s1->ts, &s2->ts) || s2->ts.type == BT_ASSUMED;
539 static int
540 compare_rank (gfc_symbol *s1, gfc_symbol *s2)
542 gfc_array_spec *as1, *as2;
543 int r1, r2;
545 if (s2->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
546 return 1;
548 as1 = (s1->ts.type == BT_CLASS) ? CLASS_DATA (s1)->as : s1->as;
549 as2 = (s2->ts.type == BT_CLASS) ? CLASS_DATA (s2)->as : s2->as;
551 r1 = as1 ? as1->rank : 0;
552 r2 = as2 ? as2->rank : 0;
554 if (r1 != r2 && (!as2 || as2->type != AS_ASSUMED_RANK))
555 return 0; /* Ranks differ. */
557 return 1;
561 /* Given two symbols that are formal arguments, compare their ranks
562 and types. Returns nonzero if they have the same rank and type,
563 zero otherwise. */
565 static int
566 compare_type_rank (gfc_symbol *s1, gfc_symbol *s2)
568 return compare_type (s1, s2) && compare_rank (s1, s2);
572 /* Given two symbols that are formal arguments, compare their types
573 and rank and their formal interfaces if they are both dummy
574 procedures. Returns nonzero if the same, zero if different. */
576 static int
577 compare_type_rank_if (gfc_symbol *s1, gfc_symbol *s2)
579 if (s1 == NULL || s2 == NULL)
580 return s1 == s2 ? 1 : 0;
582 if (s1 == s2)
583 return 1;
585 if (s1->attr.flavor != FL_PROCEDURE && s2->attr.flavor != FL_PROCEDURE)
586 return compare_type_rank (s1, s2);
588 if (s1->attr.flavor != FL_PROCEDURE || s2->attr.flavor != FL_PROCEDURE)
589 return 0;
591 /* At this point, both symbols are procedures. It can happen that
592 external procedures are compared, where one is identified by usage
593 to be a function or subroutine but the other is not. Check TKR
594 nonetheless for these cases. */
595 if (s1->attr.function == 0 && s1->attr.subroutine == 0)
596 return s1->attr.external == 1 ? compare_type_rank (s1, s2) : 0;
598 if (s2->attr.function == 0 && s2->attr.subroutine == 0)
599 return s2->attr.external == 1 ? compare_type_rank (s1, s2) : 0;
601 /* Now the type of procedure has been identified. */
602 if (s1->attr.function != s2->attr.function
603 || s1->attr.subroutine != s2->attr.subroutine)
604 return 0;
606 if (s1->attr.function && compare_type_rank (s1, s2) == 0)
607 return 0;
609 /* Originally, gfortran recursed here to check the interfaces of passed
610 procedures. This is explicitly not required by the standard. */
611 return 1;
615 /* Given a formal argument list and a keyword name, search the list
616 for that keyword. Returns the correct symbol node if found, NULL
617 if not found. */
619 static gfc_symbol *
620 find_keyword_arg (const char *name, gfc_formal_arglist *f)
622 for (; f; f = f->next)
623 if (strcmp (f->sym->name, name) == 0)
624 return f->sym;
626 return NULL;
630 /******** Interface checking subroutines **********/
633 /* Given an operator interface and the operator, make sure that all
634 interfaces for that operator are legal. */
636 bool
637 gfc_check_operator_interface (gfc_symbol *sym, gfc_intrinsic_op op,
638 locus opwhere)
640 gfc_formal_arglist *formal;
641 sym_intent i1, i2;
642 bt t1, t2;
643 int args, r1, r2, k1, k2;
645 gcc_assert (sym);
647 args = 0;
648 t1 = t2 = BT_UNKNOWN;
649 i1 = i2 = INTENT_UNKNOWN;
650 r1 = r2 = -1;
651 k1 = k2 = -1;
653 for (formal = gfc_sym_get_dummy_args (sym); formal; formal = formal->next)
655 gfc_symbol *fsym = formal->sym;
656 if (fsym == NULL)
658 gfc_error ("Alternate return cannot appear in operator "
659 "interface at %L", &sym->declared_at);
660 return false;
662 if (args == 0)
664 t1 = fsym->ts.type;
665 i1 = fsym->attr.intent;
666 r1 = (fsym->as != NULL) ? fsym->as->rank : 0;
667 k1 = fsym->ts.kind;
669 if (args == 1)
671 t2 = fsym->ts.type;
672 i2 = fsym->attr.intent;
673 r2 = (fsym->as != NULL) ? fsym->as->rank : 0;
674 k2 = fsym->ts.kind;
676 args++;
679 /* Only +, - and .not. can be unary operators.
680 .not. cannot be a binary operator. */
681 if (args == 0 || args > 2 || (args == 1 && op != INTRINSIC_PLUS
682 && op != INTRINSIC_MINUS
683 && op != INTRINSIC_NOT)
684 || (args == 2 && op == INTRINSIC_NOT))
686 if (op == INTRINSIC_ASSIGN)
687 gfc_error ("Assignment operator interface at %L must have "
688 "two arguments", &sym->declared_at);
689 else
690 gfc_error ("Operator interface at %L has the wrong number of arguments",
691 &sym->declared_at);
692 return false;
695 /* Check that intrinsics are mapped to functions, except
696 INTRINSIC_ASSIGN which should map to a subroutine. */
697 if (op == INTRINSIC_ASSIGN)
699 gfc_formal_arglist *dummy_args;
701 if (!sym->attr.subroutine)
703 gfc_error ("Assignment operator interface at %L must be "
704 "a SUBROUTINE", &sym->declared_at);
705 return false;
708 /* Allowed are (per F2003, 12.3.2.1.2 Defined assignments):
709 - First argument an array with different rank than second,
710 - First argument is a scalar and second an array,
711 - Types and kinds do not conform, or
712 - First argument is of derived type. */
713 dummy_args = gfc_sym_get_dummy_args (sym);
714 if (dummy_args->sym->ts.type != BT_DERIVED
715 && dummy_args->sym->ts.type != BT_CLASS
716 && (r2 == 0 || r1 == r2)
717 && (dummy_args->sym->ts.type == dummy_args->next->sym->ts.type
718 || (gfc_numeric_ts (&dummy_args->sym->ts)
719 && gfc_numeric_ts (&dummy_args->next->sym->ts))))
721 gfc_error ("Assignment operator interface at %L must not redefine "
722 "an INTRINSIC type assignment", &sym->declared_at);
723 return false;
726 else
728 if (!sym->attr.function)
730 gfc_error ("Intrinsic operator interface at %L must be a FUNCTION",
731 &sym->declared_at);
732 return false;
736 /* Check intents on operator interfaces. */
737 if (op == INTRINSIC_ASSIGN)
739 if (i1 != INTENT_OUT && i1 != INTENT_INOUT)
741 gfc_error ("First argument of defined assignment at %L must be "
742 "INTENT(OUT) or INTENT(INOUT)", &sym->declared_at);
743 return false;
746 if (i2 != INTENT_IN)
748 gfc_error ("Second argument of defined assignment at %L must be "
749 "INTENT(IN)", &sym->declared_at);
750 return false;
753 else
755 if (i1 != INTENT_IN)
757 gfc_error ("First argument of operator interface at %L must be "
758 "INTENT(IN)", &sym->declared_at);
759 return false;
762 if (args == 2 && i2 != INTENT_IN)
764 gfc_error ("Second argument of operator interface at %L must be "
765 "INTENT(IN)", &sym->declared_at);
766 return false;
770 /* From now on, all we have to do is check that the operator definition
771 doesn't conflict with an intrinsic operator. The rules for this
772 game are defined in 7.1.2 and 7.1.3 of both F95 and F2003 standards,
773 as well as 12.3.2.1.1 of Fortran 2003:
775 "If the operator is an intrinsic-operator (R310), the number of
776 function arguments shall be consistent with the intrinsic uses of
777 that operator, and the types, kind type parameters, or ranks of the
778 dummy arguments shall differ from those required for the intrinsic
779 operation (7.1.2)." */
781 #define IS_NUMERIC_TYPE(t) \
782 ((t) == BT_INTEGER || (t) == BT_REAL || (t) == BT_COMPLEX)
784 /* Unary ops are easy, do them first. */
785 if (op == INTRINSIC_NOT)
787 if (t1 == BT_LOGICAL)
788 goto bad_repl;
789 else
790 return true;
793 if (args == 1 && (op == INTRINSIC_PLUS || op == INTRINSIC_MINUS))
795 if (IS_NUMERIC_TYPE (t1))
796 goto bad_repl;
797 else
798 return true;
801 /* Character intrinsic operators have same character kind, thus
802 operator definitions with operands of different character kinds
803 are always safe. */
804 if (t1 == BT_CHARACTER && t2 == BT_CHARACTER && k1 != k2)
805 return true;
807 /* Intrinsic operators always perform on arguments of same rank,
808 so different ranks is also always safe. (rank == 0) is an exception
809 to that, because all intrinsic operators are elemental. */
810 if (r1 != r2 && r1 != 0 && r2 != 0)
811 return true;
813 switch (op)
815 case INTRINSIC_EQ:
816 case INTRINSIC_EQ_OS:
817 case INTRINSIC_NE:
818 case INTRINSIC_NE_OS:
819 if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
820 goto bad_repl;
821 /* Fall through. */
823 case INTRINSIC_PLUS:
824 case INTRINSIC_MINUS:
825 case INTRINSIC_TIMES:
826 case INTRINSIC_DIVIDE:
827 case INTRINSIC_POWER:
828 if (IS_NUMERIC_TYPE (t1) && IS_NUMERIC_TYPE (t2))
829 goto bad_repl;
830 break;
832 case INTRINSIC_GT:
833 case INTRINSIC_GT_OS:
834 case INTRINSIC_GE:
835 case INTRINSIC_GE_OS:
836 case INTRINSIC_LT:
837 case INTRINSIC_LT_OS:
838 case INTRINSIC_LE:
839 case INTRINSIC_LE_OS:
840 if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
841 goto bad_repl;
842 if ((t1 == BT_INTEGER || t1 == BT_REAL)
843 && (t2 == BT_INTEGER || t2 == BT_REAL))
844 goto bad_repl;
845 break;
847 case INTRINSIC_CONCAT:
848 if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
849 goto bad_repl;
850 break;
852 case INTRINSIC_AND:
853 case INTRINSIC_OR:
854 case INTRINSIC_EQV:
855 case INTRINSIC_NEQV:
856 if (t1 == BT_LOGICAL && t2 == BT_LOGICAL)
857 goto bad_repl;
858 break;
860 default:
861 break;
864 return true;
866 #undef IS_NUMERIC_TYPE
868 bad_repl:
869 gfc_error ("Operator interface at %L conflicts with intrinsic interface",
870 &opwhere);
871 return false;
875 /* Given a pair of formal argument lists, we see if the two lists can
876 be distinguished by counting the number of nonoptional arguments of
877 a given type/rank in f1 and seeing if there are less then that
878 number of those arguments in f2 (including optional arguments).
879 Since this test is asymmetric, it has to be called twice to make it
880 symmetric. Returns nonzero if the argument lists are incompatible
881 by this test. This subroutine implements rule 1 of section F03:16.2.3.
882 'p1' and 'p2' are the PASS arguments of both procedures (if applicable). */
884 static int
885 count_types_test (gfc_formal_arglist *f1, gfc_formal_arglist *f2,
886 const char *p1, const char *p2)
888 int rc, ac1, ac2, i, j, k, n1;
889 gfc_formal_arglist *f;
891 typedef struct
893 int flag;
894 gfc_symbol *sym;
896 arginfo;
898 arginfo *arg;
900 n1 = 0;
902 for (f = f1; f; f = f->next)
903 n1++;
905 /* Build an array of integers that gives the same integer to
906 arguments of the same type/rank. */
907 arg = XCNEWVEC (arginfo, n1);
909 f = f1;
910 for (i = 0; i < n1; i++, f = f->next)
912 arg[i].flag = -1;
913 arg[i].sym = f->sym;
916 k = 0;
918 for (i = 0; i < n1; i++)
920 if (arg[i].flag != -1)
921 continue;
923 if (arg[i].sym && (arg[i].sym->attr.optional
924 || (p1 && strcmp (arg[i].sym->name, p1) == 0)))
925 continue; /* Skip OPTIONAL and PASS arguments. */
927 arg[i].flag = k;
929 /* Find other non-optional, non-pass arguments of the same type/rank. */
930 for (j = i + 1; j < n1; j++)
931 if ((arg[j].sym == NULL
932 || !(arg[j].sym->attr.optional
933 || (p1 && strcmp (arg[j].sym->name, p1) == 0)))
934 && (compare_type_rank_if (arg[i].sym, arg[j].sym)
935 || compare_type_rank_if (arg[j].sym, arg[i].sym)))
936 arg[j].flag = k;
938 k++;
941 /* Now loop over each distinct type found in f1. */
942 k = 0;
943 rc = 0;
945 for (i = 0; i < n1; i++)
947 if (arg[i].flag != k)
948 continue;
950 ac1 = 1;
951 for (j = i + 1; j < n1; j++)
952 if (arg[j].flag == k)
953 ac1++;
955 /* Count the number of non-pass arguments in f2 with that type,
956 including those that are optional. */
957 ac2 = 0;
959 for (f = f2; f; f = f->next)
960 if ((!p2 || strcmp (f->sym->name, p2) != 0)
961 && (compare_type_rank_if (arg[i].sym, f->sym)
962 || compare_type_rank_if (f->sym, arg[i].sym)))
963 ac2++;
965 if (ac1 > ac2)
967 rc = 1;
968 break;
971 k++;
974 free (arg);
976 return rc;
980 /* Perform the correspondence test in rule (3) of F08:C1215.
981 Returns zero if no argument is found that satisfies this rule,
982 nonzero otherwise. 'p1' and 'p2' are the PASS arguments of both procedures
983 (if applicable).
985 This test is also not symmetric in f1 and f2 and must be called
986 twice. This test finds problems caused by sorting the actual
987 argument list with keywords. For example:
989 INTERFACE FOO
990 SUBROUTINE F1(A, B)
991 INTEGER :: A ; REAL :: B
992 END SUBROUTINE F1
994 SUBROUTINE F2(B, A)
995 INTEGER :: A ; REAL :: B
996 END SUBROUTINE F1
997 END INTERFACE FOO
999 At this point, 'CALL FOO(A=1, B=1.0)' is ambiguous. */
1001 static int
1002 generic_correspondence (gfc_formal_arglist *f1, gfc_formal_arglist *f2,
1003 const char *p1, const char *p2)
1005 gfc_formal_arglist *f2_save, *g;
1006 gfc_symbol *sym;
1008 f2_save = f2;
1010 while (f1)
1012 if (f1->sym->attr.optional)
1013 goto next;
1015 if (p1 && strcmp (f1->sym->name, p1) == 0)
1016 f1 = f1->next;
1017 if (f2 && p2 && strcmp (f2->sym->name, p2) == 0)
1018 f2 = f2->next;
1020 if (f2 != NULL && (compare_type_rank (f1->sym, f2->sym)
1021 || compare_type_rank (f2->sym, f1->sym))
1022 && !((gfc_option.allow_std & GFC_STD_F2008)
1023 && ((f1->sym->attr.allocatable && f2->sym->attr.pointer)
1024 || (f2->sym->attr.allocatable && f1->sym->attr.pointer))))
1025 goto next;
1027 /* Now search for a disambiguating keyword argument starting at
1028 the current non-match. */
1029 for (g = f1; g; g = g->next)
1031 if (g->sym->attr.optional || (p1 && strcmp (g->sym->name, p1) == 0))
1032 continue;
1034 sym = find_keyword_arg (g->sym->name, f2_save);
1035 if (sym == NULL || !compare_type_rank (g->sym, sym)
1036 || ((gfc_option.allow_std & GFC_STD_F2008)
1037 && ((sym->attr.allocatable && g->sym->attr.pointer)
1038 || (sym->attr.pointer && g->sym->attr.allocatable))))
1039 return 1;
1042 next:
1043 if (f1 != NULL)
1044 f1 = f1->next;
1045 if (f2 != NULL)
1046 f2 = f2->next;
1049 return 0;
1053 static int
1054 symbol_rank (gfc_symbol *sym)
1056 gfc_array_spec *as;
1057 as = (sym->ts.type == BT_CLASS) ? CLASS_DATA (sym)->as : sym->as;
1058 return as ? as->rank : 0;
1062 /* Check if the characteristics of two dummy arguments match,
1063 cf. F08:12.3.2. */
1065 static bool
1066 check_dummy_characteristics (gfc_symbol *s1, gfc_symbol *s2,
1067 bool type_must_agree, char *errmsg, int err_len)
1069 if (s1 == NULL || s2 == NULL)
1070 return s1 == s2 ? true : false;
1072 /* Check type and rank. */
1073 if (type_must_agree)
1075 if (!compare_type (s1, s2) || !compare_type (s2, s1))
1077 snprintf (errmsg, err_len, "Type mismatch in argument '%s' (%s/%s)",
1078 s1->name, gfc_typename (&s1->ts), gfc_typename (&s2->ts));
1079 return false;
1081 if (!compare_rank (s1, s2))
1083 snprintf (errmsg, err_len, "Rank mismatch in argument '%s' (%i/%i)",
1084 s1->name, symbol_rank (s1), symbol_rank (s2));
1085 return false;
1089 /* Check INTENT. */
1090 if (s1->attr.intent != s2->attr.intent)
1092 snprintf (errmsg, err_len, "INTENT mismatch in argument '%s'",
1093 s1->name);
1094 return false;
1097 /* Check OPTIONAL attribute. */
1098 if (s1->attr.optional != s2->attr.optional)
1100 snprintf (errmsg, err_len, "OPTIONAL mismatch in argument '%s'",
1101 s1->name);
1102 return false;
1105 /* Check ALLOCATABLE attribute. */
1106 if (s1->attr.allocatable != s2->attr.allocatable)
1108 snprintf (errmsg, err_len, "ALLOCATABLE mismatch in argument '%s'",
1109 s1->name);
1110 return false;
1113 /* Check POINTER attribute. */
1114 if (s1->attr.pointer != s2->attr.pointer)
1116 snprintf (errmsg, err_len, "POINTER mismatch in argument '%s'",
1117 s1->name);
1118 return false;
1121 /* Check TARGET attribute. */
1122 if (s1->attr.target != s2->attr.target)
1124 snprintf (errmsg, err_len, "TARGET mismatch in argument '%s'",
1125 s1->name);
1126 return false;
1129 /* Check ASYNCHRONOUS attribute. */
1130 if (s1->attr.asynchronous != s2->attr.asynchronous)
1132 snprintf (errmsg, err_len, "ASYNCHRONOUS mismatch in argument '%s'",
1133 s1->name);
1134 return false;
1137 /* Check CONTIGUOUS attribute. */
1138 if (s1->attr.contiguous != s2->attr.contiguous)
1140 snprintf (errmsg, err_len, "CONTIGUOUS mismatch in argument '%s'",
1141 s1->name);
1142 return false;
1145 /* Check VALUE attribute. */
1146 if (s1->attr.value != s2->attr.value)
1148 snprintf (errmsg, err_len, "VALUE mismatch in argument '%s'",
1149 s1->name);
1150 return false;
1153 /* Check VOLATILE attribute. */
1154 if (s1->attr.volatile_ != s2->attr.volatile_)
1156 snprintf (errmsg, err_len, "VOLATILE mismatch in argument '%s'",
1157 s1->name);
1158 return false;
1161 /* Check interface of dummy procedures. */
1162 if (s1->attr.flavor == FL_PROCEDURE)
1164 char err[200];
1165 if (!gfc_compare_interfaces (s1, s2, s2->name, 0, 1, err, sizeof(err),
1166 NULL, NULL))
1168 snprintf (errmsg, err_len, "Interface mismatch in dummy procedure "
1169 "'%s': %s", s1->name, err);
1170 return false;
1174 /* Check string length. */
1175 if (s1->ts.type == BT_CHARACTER
1176 && s1->ts.u.cl && s1->ts.u.cl->length
1177 && s2->ts.u.cl && s2->ts.u.cl->length)
1179 int compval = gfc_dep_compare_expr (s1->ts.u.cl->length,
1180 s2->ts.u.cl->length);
1181 switch (compval)
1183 case -1:
1184 case 1:
1185 case -3:
1186 snprintf (errmsg, err_len, "Character length mismatch "
1187 "in argument '%s'", s1->name);
1188 return false;
1190 case -2:
1191 /* FIXME: Implement a warning for this case.
1192 gfc_warning (0, "Possible character length mismatch in argument %qs",
1193 s1->name);*/
1194 break;
1196 case 0:
1197 break;
1199 default:
1200 gfc_internal_error ("check_dummy_characteristics: Unexpected result "
1201 "%i of gfc_dep_compare_expr", compval);
1202 break;
1206 /* Check array shape. */
1207 if (s1->as && s2->as)
1209 int i, compval;
1210 gfc_expr *shape1, *shape2;
1212 if (s1->as->type != s2->as->type)
1214 snprintf (errmsg, err_len, "Shape mismatch in argument '%s'",
1215 s1->name);
1216 return false;
1219 if (s1->as->corank != s2->as->corank)
1221 snprintf (errmsg, err_len, "Corank mismatch in argument '%s' (%i/%i)",
1222 s1->name, s1->as->corank, s2->as->corank);
1223 return false;
1226 if (s1->as->type == AS_EXPLICIT)
1227 for (i = 0; i < s1->as->rank + MAX (0, s1->as->corank-1); i++)
1229 shape1 = gfc_subtract (gfc_copy_expr (s1->as->upper[i]),
1230 gfc_copy_expr (s1->as->lower[i]));
1231 shape2 = gfc_subtract (gfc_copy_expr (s2->as->upper[i]),
1232 gfc_copy_expr (s2->as->lower[i]));
1233 compval = gfc_dep_compare_expr (shape1, shape2);
1234 gfc_free_expr (shape1);
1235 gfc_free_expr (shape2);
1236 switch (compval)
1238 case -1:
1239 case 1:
1240 case -3:
1241 if (i < s1->as->rank)
1242 snprintf (errmsg, err_len, "Shape mismatch in dimension %i of"
1243 " argument '%s'", i + 1, s1->name);
1244 else
1245 snprintf (errmsg, err_len, "Shape mismatch in codimension %i "
1246 "of argument '%s'", i - s1->as->rank + 1, s1->name);
1247 return false;
1249 case -2:
1250 /* FIXME: Implement a warning for this case.
1251 gfc_warning (0, "Possible shape mismatch in argument %qs",
1252 s1->name);*/
1253 break;
1255 case 0:
1256 break;
1258 default:
1259 gfc_internal_error ("check_dummy_characteristics: Unexpected "
1260 "result %i of gfc_dep_compare_expr",
1261 compval);
1262 break;
1267 return true;
1271 /* Check if the characteristics of two function results match,
1272 cf. F08:12.3.3. */
1274 static bool
1275 check_result_characteristics (gfc_symbol *s1, gfc_symbol *s2,
1276 char *errmsg, int err_len)
1278 gfc_symbol *r1, *r2;
1280 if (s1->ts.interface && s1->ts.interface->result)
1281 r1 = s1->ts.interface->result;
1282 else
1283 r1 = s1->result ? s1->result : s1;
1285 if (s2->ts.interface && s2->ts.interface->result)
1286 r2 = s2->ts.interface->result;
1287 else
1288 r2 = s2->result ? s2->result : s2;
1290 if (r1->ts.type == BT_UNKNOWN)
1291 return true;
1293 /* Check type and rank. */
1294 if (!compare_type (r1, r2))
1296 snprintf (errmsg, err_len, "Type mismatch in function result (%s/%s)",
1297 gfc_typename (&r1->ts), gfc_typename (&r2->ts));
1298 return false;
1300 if (!compare_rank (r1, r2))
1302 snprintf (errmsg, err_len, "Rank mismatch in function result (%i/%i)",
1303 symbol_rank (r1), symbol_rank (r2));
1304 return false;
1307 /* Check ALLOCATABLE attribute. */
1308 if (r1->attr.allocatable != r2->attr.allocatable)
1310 snprintf (errmsg, err_len, "ALLOCATABLE attribute mismatch in "
1311 "function result");
1312 return false;
1315 /* Check POINTER attribute. */
1316 if (r1->attr.pointer != r2->attr.pointer)
1318 snprintf (errmsg, err_len, "POINTER attribute mismatch in "
1319 "function result");
1320 return false;
1323 /* Check CONTIGUOUS attribute. */
1324 if (r1->attr.contiguous != r2->attr.contiguous)
1326 snprintf (errmsg, err_len, "CONTIGUOUS attribute mismatch in "
1327 "function result");
1328 return false;
1331 /* Check PROCEDURE POINTER attribute. */
1332 if (r1 != s1 && r1->attr.proc_pointer != r2->attr.proc_pointer)
1334 snprintf (errmsg, err_len, "PROCEDURE POINTER mismatch in "
1335 "function result");
1336 return false;
1339 /* Check string length. */
1340 if (r1->ts.type == BT_CHARACTER && r1->ts.u.cl && r2->ts.u.cl)
1342 if (r1->ts.deferred != r2->ts.deferred)
1344 snprintf (errmsg, err_len, "Character length mismatch "
1345 "in function result");
1346 return false;
1349 if (r1->ts.u.cl->length && r2->ts.u.cl->length)
1351 int compval = gfc_dep_compare_expr (r1->ts.u.cl->length,
1352 r2->ts.u.cl->length);
1353 switch (compval)
1355 case -1:
1356 case 1:
1357 case -3:
1358 snprintf (errmsg, err_len, "Character length mismatch "
1359 "in function result");
1360 return false;
1362 case -2:
1363 /* FIXME: Implement a warning for this case.
1364 snprintf (errmsg, err_len, "Possible character length mismatch "
1365 "in function result");*/
1366 break;
1368 case 0:
1369 break;
1371 default:
1372 gfc_internal_error ("check_result_characteristics (1): Unexpected "
1373 "result %i of gfc_dep_compare_expr", compval);
1374 break;
1379 /* Check array shape. */
1380 if (!r1->attr.allocatable && !r1->attr.pointer && r1->as && r2->as)
1382 int i, compval;
1383 gfc_expr *shape1, *shape2;
1385 if (r1->as->type != r2->as->type)
1387 snprintf (errmsg, err_len, "Shape mismatch in function result");
1388 return false;
1391 if (r1->as->type == AS_EXPLICIT)
1392 for (i = 0; i < r1->as->rank + r1->as->corank; i++)
1394 shape1 = gfc_subtract (gfc_copy_expr (r1->as->upper[i]),
1395 gfc_copy_expr (r1->as->lower[i]));
1396 shape2 = gfc_subtract (gfc_copy_expr (r2->as->upper[i]),
1397 gfc_copy_expr (r2->as->lower[i]));
1398 compval = gfc_dep_compare_expr (shape1, shape2);
1399 gfc_free_expr (shape1);
1400 gfc_free_expr (shape2);
1401 switch (compval)
1403 case -1:
1404 case 1:
1405 case -3:
1406 snprintf (errmsg, err_len, "Shape mismatch in dimension %i of "
1407 "function result", i + 1);
1408 return false;
1410 case -2:
1411 /* FIXME: Implement a warning for this case.
1412 gfc_warning (0, "Possible shape mismatch in return value");*/
1413 break;
1415 case 0:
1416 break;
1418 default:
1419 gfc_internal_error ("check_result_characteristics (2): "
1420 "Unexpected result %i of "
1421 "gfc_dep_compare_expr", compval);
1422 break;
1427 return true;
1431 /* 'Compare' two formal interfaces associated with a pair of symbols.
1432 We return nonzero if there exists an actual argument list that
1433 would be ambiguous between the two interfaces, zero otherwise.
1434 'strict_flag' specifies whether all the characteristics are
1435 required to match, which is not the case for ambiguity checks.
1436 'p1' and 'p2' are the PASS arguments of both procedures (if applicable). */
1439 gfc_compare_interfaces (gfc_symbol *s1, gfc_symbol *s2, const char *name2,
1440 int generic_flag, int strict_flag,
1441 char *errmsg, int err_len,
1442 const char *p1, const char *p2)
1444 gfc_formal_arglist *f1, *f2;
1446 gcc_assert (name2 != NULL);
1448 if (s1->attr.function && (s2->attr.subroutine
1449 || (!s2->attr.function && s2->ts.type == BT_UNKNOWN
1450 && gfc_get_default_type (name2, s2->ns)->type == BT_UNKNOWN)))
1452 if (errmsg != NULL)
1453 snprintf (errmsg, err_len, "'%s' is not a function", name2);
1454 return 0;
1457 if (s1->attr.subroutine && s2->attr.function)
1459 if (errmsg != NULL)
1460 snprintf (errmsg, err_len, "'%s' is not a subroutine", name2);
1461 return 0;
1464 /* Do strict checks on all characteristics
1465 (for dummy procedures and procedure pointer assignments). */
1466 if (!generic_flag && strict_flag)
1468 if (s1->attr.function && s2->attr.function)
1470 /* If both are functions, check result characteristics. */
1471 if (!check_result_characteristics (s1, s2, errmsg, err_len)
1472 || !check_result_characteristics (s2, s1, errmsg, err_len))
1473 return 0;
1476 if (s1->attr.pure && !s2->attr.pure)
1478 snprintf (errmsg, err_len, "Mismatch in PURE attribute");
1479 return 0;
1481 if (s1->attr.elemental && !s2->attr.elemental)
1483 snprintf (errmsg, err_len, "Mismatch in ELEMENTAL attribute");
1484 return 0;
1488 if (s1->attr.if_source == IFSRC_UNKNOWN
1489 || s2->attr.if_source == IFSRC_UNKNOWN)
1490 return 1;
1492 f1 = gfc_sym_get_dummy_args (s1);
1493 f2 = gfc_sym_get_dummy_args (s2);
1495 if (f1 == NULL && f2 == NULL)
1496 return 1; /* Special case: No arguments. */
1498 if (generic_flag)
1500 if (count_types_test (f1, f2, p1, p2)
1501 || count_types_test (f2, f1, p2, p1))
1502 return 0;
1503 if (generic_correspondence (f1, f2, p1, p2)
1504 || generic_correspondence (f2, f1, p2, p1))
1505 return 0;
1507 else
1508 /* Perform the abbreviated correspondence test for operators (the
1509 arguments cannot be optional and are always ordered correctly).
1510 This is also done when comparing interfaces for dummy procedures and in
1511 procedure pointer assignments. */
1513 for (;;)
1515 /* Check existence. */
1516 if (f1 == NULL && f2 == NULL)
1517 break;
1518 if (f1 == NULL || f2 == NULL)
1520 if (errmsg != NULL)
1521 snprintf (errmsg, err_len, "'%s' has the wrong number of "
1522 "arguments", name2);
1523 return 0;
1526 if (UNLIMITED_POLY (f1->sym))
1527 goto next;
1529 if (strict_flag)
1531 /* Check all characteristics. */
1532 if (!check_dummy_characteristics (f1->sym, f2->sym, true,
1533 errmsg, err_len))
1534 return 0;
1536 else
1538 /* Only check type and rank. */
1539 if (!compare_type (f2->sym, f1->sym))
1541 if (errmsg != NULL)
1542 snprintf (errmsg, err_len, "Type mismatch in argument '%s' "
1543 "(%s/%s)", f1->sym->name,
1544 gfc_typename (&f1->sym->ts),
1545 gfc_typename (&f2->sym->ts));
1546 return 0;
1548 if (!compare_rank (f2->sym, f1->sym))
1550 if (errmsg != NULL)
1551 snprintf (errmsg, err_len, "Rank mismatch in argument '%s' "
1552 "(%i/%i)", f1->sym->name, symbol_rank (f1->sym),
1553 symbol_rank (f2->sym));
1554 return 0;
1557 next:
1558 f1 = f1->next;
1559 f2 = f2->next;
1562 return 1;
1566 /* Given a pointer to an interface pointer, remove duplicate
1567 interfaces and make sure that all symbols are either functions
1568 or subroutines, and all of the same kind. Returns nonzero if
1569 something goes wrong. */
1571 static int
1572 check_interface0 (gfc_interface *p, const char *interface_name)
1574 gfc_interface *psave, *q, *qlast;
1576 psave = p;
1577 for (; p; p = p->next)
1579 /* Make sure all symbols in the interface have been defined as
1580 functions or subroutines. */
1581 if (((!p->sym->attr.function && !p->sym->attr.subroutine)
1582 || !p->sym->attr.if_source)
1583 && p->sym->attr.flavor != FL_DERIVED)
1585 if (p->sym->attr.external)
1586 gfc_error ("Procedure %qs in %s at %L has no explicit interface",
1587 p->sym->name, interface_name, &p->sym->declared_at);
1588 else
1589 gfc_error ("Procedure %qs in %s at %L is neither function nor "
1590 "subroutine", p->sym->name, interface_name,
1591 &p->sym->declared_at);
1592 return 1;
1595 /* Verify that procedures are either all SUBROUTINEs or all FUNCTIONs. */
1596 if ((psave->sym->attr.function && !p->sym->attr.function
1597 && p->sym->attr.flavor != FL_DERIVED)
1598 || (psave->sym->attr.subroutine && !p->sym->attr.subroutine))
1600 if (p->sym->attr.flavor != FL_DERIVED)
1601 gfc_error ("In %s at %L procedures must be either all SUBROUTINEs"
1602 " or all FUNCTIONs", interface_name,
1603 &p->sym->declared_at);
1604 else
1605 gfc_error ("In %s at %L procedures must be all FUNCTIONs as the "
1606 "generic name is also the name of a derived type",
1607 interface_name, &p->sym->declared_at);
1608 return 1;
1611 /* F2003, C1207. F2008, C1207. */
1612 if (p->sym->attr.proc == PROC_INTERNAL
1613 && !gfc_notify_std (GFC_STD_F2008, "Internal procedure "
1614 "%qs in %s at %L", p->sym->name,
1615 interface_name, &p->sym->declared_at))
1616 return 1;
1618 p = psave;
1620 /* Remove duplicate interfaces in this interface list. */
1621 for (; p; p = p->next)
1623 qlast = p;
1625 for (q = p->next; q;)
1627 if (p->sym != q->sym)
1629 qlast = q;
1630 q = q->next;
1632 else
1634 /* Duplicate interface. */
1635 qlast->next = q->next;
1636 free (q);
1637 q = qlast->next;
1642 return 0;
1646 /* Check lists of interfaces to make sure that no two interfaces are
1647 ambiguous. Duplicate interfaces (from the same symbol) are OK here. */
1649 static int
1650 check_interface1 (gfc_interface *p, gfc_interface *q0,
1651 int generic_flag, const char *interface_name,
1652 bool referenced)
1654 gfc_interface *q;
1655 for (; p; p = p->next)
1656 for (q = q0; q; q = q->next)
1658 if (p->sym == q->sym)
1659 continue; /* Duplicates OK here. */
1661 if (p->sym->name == q->sym->name && p->sym->module == q->sym->module)
1662 continue;
1664 if (p->sym->attr.flavor != FL_DERIVED
1665 && q->sym->attr.flavor != FL_DERIVED
1666 && gfc_compare_interfaces (p->sym, q->sym, q->sym->name,
1667 generic_flag, 0, NULL, 0, NULL, NULL))
1669 if (referenced)
1670 gfc_error ("Ambiguous interfaces %qs and %qs in %s at %L",
1671 p->sym->name, q->sym->name, interface_name,
1672 &p->where);
1673 else if (!p->sym->attr.use_assoc && q->sym->attr.use_assoc)
1674 gfc_warning (0, "Ambiguous interfaces %qs and %qs in %s at %L",
1675 p->sym->name, q->sym->name, interface_name,
1676 &p->where);
1677 else
1678 gfc_warning (0, "Although not referenced, %qs has ambiguous "
1679 "interfaces at %L", interface_name, &p->where);
1680 return 1;
1683 return 0;
1687 /* Check the generic and operator interfaces of symbols to make sure
1688 that none of the interfaces conflict. The check has to be done
1689 after all of the symbols are actually loaded. */
1691 static void
1692 check_sym_interfaces (gfc_symbol *sym)
1694 char interface_name[100];
1695 gfc_interface *p;
1697 if (sym->ns != gfc_current_ns)
1698 return;
1700 if (sym->generic != NULL)
1702 sprintf (interface_name, "generic interface '%s'", sym->name);
1703 if (check_interface0 (sym->generic, interface_name))
1704 return;
1706 for (p = sym->generic; p; p = p->next)
1708 if (p->sym->attr.mod_proc
1709 && (p->sym->attr.if_source != IFSRC_DECL
1710 || p->sym->attr.procedure))
1712 gfc_error ("%qs at %L is not a module procedure",
1713 p->sym->name, &p->where);
1714 return;
1718 /* Originally, this test was applied to host interfaces too;
1719 this is incorrect since host associated symbols, from any
1720 source, cannot be ambiguous with local symbols. */
1721 check_interface1 (sym->generic, sym->generic, 1, interface_name,
1722 sym->attr.referenced || !sym->attr.use_assoc);
1727 static void
1728 check_uop_interfaces (gfc_user_op *uop)
1730 char interface_name[100];
1731 gfc_user_op *uop2;
1732 gfc_namespace *ns;
1734 sprintf (interface_name, "operator interface '%s'", uop->name);
1735 if (check_interface0 (uop->op, interface_name))
1736 return;
1738 for (ns = gfc_current_ns; ns; ns = ns->parent)
1740 uop2 = gfc_find_uop (uop->name, ns);
1741 if (uop2 == NULL)
1742 continue;
1744 check_interface1 (uop->op, uop2->op, 0,
1745 interface_name, true);
1749 /* Given an intrinsic op, return an equivalent op if one exists,
1750 or INTRINSIC_NONE otherwise. */
1752 gfc_intrinsic_op
1753 gfc_equivalent_op (gfc_intrinsic_op op)
1755 switch(op)
1757 case INTRINSIC_EQ:
1758 return INTRINSIC_EQ_OS;
1760 case INTRINSIC_EQ_OS:
1761 return INTRINSIC_EQ;
1763 case INTRINSIC_NE:
1764 return INTRINSIC_NE_OS;
1766 case INTRINSIC_NE_OS:
1767 return INTRINSIC_NE;
1769 case INTRINSIC_GT:
1770 return INTRINSIC_GT_OS;
1772 case INTRINSIC_GT_OS:
1773 return INTRINSIC_GT;
1775 case INTRINSIC_GE:
1776 return INTRINSIC_GE_OS;
1778 case INTRINSIC_GE_OS:
1779 return INTRINSIC_GE;
1781 case INTRINSIC_LT:
1782 return INTRINSIC_LT_OS;
1784 case INTRINSIC_LT_OS:
1785 return INTRINSIC_LT;
1787 case INTRINSIC_LE:
1788 return INTRINSIC_LE_OS;
1790 case INTRINSIC_LE_OS:
1791 return INTRINSIC_LE;
1793 default:
1794 return INTRINSIC_NONE;
1798 /* For the namespace, check generic, user operator and intrinsic
1799 operator interfaces for consistency and to remove duplicate
1800 interfaces. We traverse the whole namespace, counting on the fact
1801 that most symbols will not have generic or operator interfaces. */
1803 void
1804 gfc_check_interfaces (gfc_namespace *ns)
1806 gfc_namespace *old_ns, *ns2;
1807 char interface_name[100];
1808 int i;
1810 old_ns = gfc_current_ns;
1811 gfc_current_ns = ns;
1813 gfc_traverse_ns (ns, check_sym_interfaces);
1815 gfc_traverse_user_op (ns, check_uop_interfaces);
1817 for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++)
1819 if (i == INTRINSIC_USER)
1820 continue;
1822 if (i == INTRINSIC_ASSIGN)
1823 strcpy (interface_name, "intrinsic assignment operator");
1824 else
1825 sprintf (interface_name, "intrinsic '%s' operator",
1826 gfc_op2string ((gfc_intrinsic_op) i));
1828 if (check_interface0 (ns->op[i], interface_name))
1829 continue;
1831 if (ns->op[i])
1832 gfc_check_operator_interface (ns->op[i]->sym, (gfc_intrinsic_op) i,
1833 ns->op[i]->where);
1835 for (ns2 = ns; ns2; ns2 = ns2->parent)
1837 gfc_intrinsic_op other_op;
1839 if (check_interface1 (ns->op[i], ns2->op[i], 0,
1840 interface_name, true))
1841 goto done;
1843 /* i should be gfc_intrinsic_op, but has to be int with this cast
1844 here for stupid C++ compatibility rules. */
1845 other_op = gfc_equivalent_op ((gfc_intrinsic_op) i);
1846 if (other_op != INTRINSIC_NONE
1847 && check_interface1 (ns->op[i], ns2->op[other_op],
1848 0, interface_name, true))
1849 goto done;
1853 done:
1854 gfc_current_ns = old_ns;
1858 /* Given a symbol of a formal argument list and an expression, if the
1859 formal argument is allocatable, check that the actual argument is
1860 allocatable. Returns nonzero if compatible, zero if not compatible. */
1862 static int
1863 compare_allocatable (gfc_symbol *formal, gfc_expr *actual)
1865 symbol_attribute attr;
1867 if (formal->attr.allocatable
1868 || (formal->ts.type == BT_CLASS && CLASS_DATA (formal)->attr.allocatable))
1870 attr = gfc_expr_attr (actual);
1871 if (!attr.allocatable)
1872 return 0;
1875 return 1;
1879 /* Given a symbol of a formal argument list and an expression, if the
1880 formal argument is a pointer, see if the actual argument is a
1881 pointer. Returns nonzero if compatible, zero if not compatible. */
1883 static int
1884 compare_pointer (gfc_symbol *formal, gfc_expr *actual)
1886 symbol_attribute attr;
1888 if (formal->attr.pointer
1889 || (formal->ts.type == BT_CLASS && CLASS_DATA (formal)
1890 && CLASS_DATA (formal)->attr.class_pointer))
1892 attr = gfc_expr_attr (actual);
1894 /* Fortran 2008 allows non-pointer actual arguments. */
1895 if (!attr.pointer && attr.target && formal->attr.intent == INTENT_IN)
1896 return 2;
1898 if (!attr.pointer)
1899 return 0;
1902 return 1;
1906 /* Emit clear error messages for rank mismatch. */
1908 static void
1909 argument_rank_mismatch (const char *name, locus *where,
1910 int rank1, int rank2)
1913 /* TS 29113, C407b. */
1914 if (rank2 == -1)
1916 gfc_error ("The assumed-rank array at %L requires that the dummy argument"
1917 " %qs has assumed-rank", where, name);
1919 else if (rank1 == 0)
1921 gfc_error ("Rank mismatch in argument %qs at %L "
1922 "(scalar and rank-%d)", name, where, rank2);
1924 else if (rank2 == 0)
1926 gfc_error ("Rank mismatch in argument %qs at %L "
1927 "(rank-%d and scalar)", name, where, rank1);
1929 else
1931 gfc_error ("Rank mismatch in argument %qs at %L "
1932 "(rank-%d and rank-%d)", name, where, rank1, rank2);
1937 /* Given a symbol of a formal argument list and an expression, see if
1938 the two are compatible as arguments. Returns nonzero if
1939 compatible, zero if not compatible. */
1941 static int
1942 compare_parameter (gfc_symbol *formal, gfc_expr *actual,
1943 int ranks_must_agree, int is_elemental, locus *where)
1945 gfc_ref *ref;
1946 bool rank_check, is_pointer;
1947 char err[200];
1948 gfc_component *ppc;
1950 /* If the formal arg has type BT_VOID, it's to one of the iso_c_binding
1951 procs c_f_pointer or c_f_procpointer, and we need to accept most
1952 pointers the user could give us. This should allow that. */
1953 if (formal->ts.type == BT_VOID)
1954 return 1;
1956 if (formal->ts.type == BT_DERIVED
1957 && formal->ts.u.derived && formal->ts.u.derived->ts.is_iso_c
1958 && actual->ts.type == BT_DERIVED
1959 && actual->ts.u.derived && actual->ts.u.derived->ts.is_iso_c)
1960 return 1;
1962 if (formal->ts.type == BT_CLASS && actual->ts.type == BT_DERIVED)
1963 /* Make sure the vtab symbol is present when
1964 the module variables are generated. */
1965 gfc_find_derived_vtab (actual->ts.u.derived);
1967 if (actual->ts.type == BT_PROCEDURE)
1969 gfc_symbol *act_sym = actual->symtree->n.sym;
1971 if (formal->attr.flavor != FL_PROCEDURE)
1973 if (where)
1974 gfc_error ("Invalid procedure argument at %L", &actual->where);
1975 return 0;
1978 if (!gfc_compare_interfaces (formal, act_sym, act_sym->name, 0, 1, err,
1979 sizeof(err), NULL, NULL))
1981 if (where)
1982 gfc_error ("Interface mismatch in dummy procedure %qs at %L: %s",
1983 formal->name, &actual->where, err);
1984 return 0;
1987 if (formal->attr.function && !act_sym->attr.function)
1989 gfc_add_function (&act_sym->attr, act_sym->name,
1990 &act_sym->declared_at);
1991 if (act_sym->ts.type == BT_UNKNOWN
1992 && !gfc_set_default_type (act_sym, 1, act_sym->ns))
1993 return 0;
1995 else if (formal->attr.subroutine && !act_sym->attr.subroutine)
1996 gfc_add_subroutine (&act_sym->attr, act_sym->name,
1997 &act_sym->declared_at);
1999 return 1;
2002 ppc = gfc_get_proc_ptr_comp (actual);
2003 if (ppc)
2005 if (!gfc_compare_interfaces (formal, ppc->ts.interface, ppc->name, 0, 1,
2006 err, sizeof(err), NULL, NULL))
2008 if (where)
2009 gfc_error ("Interface mismatch in dummy procedure %qs at %L: %s",
2010 formal->name, &actual->where, err);
2011 return 0;
2015 /* F2008, C1241. */
2016 if (formal->attr.pointer && formal->attr.contiguous
2017 && !gfc_is_simply_contiguous (actual, true))
2019 if (where)
2020 gfc_error ("Actual argument to contiguous pointer dummy %qs at %L "
2021 "must be simply contiguous", formal->name, &actual->where);
2022 return 0;
2025 if ((actual->expr_type != EXPR_NULL || actual->ts.type != BT_UNKNOWN)
2026 && actual->ts.type != BT_HOLLERITH
2027 && formal->ts.type != BT_ASSUMED
2028 && !(formal->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
2029 && !gfc_compare_types (&formal->ts, &actual->ts)
2030 && !(formal->ts.type == BT_DERIVED && actual->ts.type == BT_CLASS
2031 && gfc_compare_derived_types (formal->ts.u.derived,
2032 CLASS_DATA (actual)->ts.u.derived)))
2034 if (where)
2035 gfc_error ("Type mismatch in argument %qs at %L; passed %s to %s",
2036 formal->name, &actual->where, gfc_typename (&actual->ts),
2037 gfc_typename (&formal->ts));
2038 return 0;
2041 if (actual->ts.type == BT_ASSUMED && formal->ts.type != BT_ASSUMED)
2043 if (where)
2044 gfc_error ("Assumed-type actual argument at %L requires that dummy "
2045 "argument %qs is of assumed type", &actual->where,
2046 formal->name);
2047 return 0;
2050 /* F2008, 12.5.2.5; IR F08/0073. */
2051 if (formal->ts.type == BT_CLASS && formal->attr.class_ok
2052 && actual->expr_type != EXPR_NULL
2053 && ((CLASS_DATA (formal)->attr.class_pointer
2054 && formal->attr.intent != INTENT_IN)
2055 || CLASS_DATA (formal)->attr.allocatable))
2057 if (actual->ts.type != BT_CLASS)
2059 if (where)
2060 gfc_error ("Actual argument to %qs at %L must be polymorphic",
2061 formal->name, &actual->where);
2062 return 0;
2065 if (!gfc_expr_attr (actual).class_ok)
2066 return 0;
2068 if ((!UNLIMITED_POLY (formal) || !UNLIMITED_POLY(actual))
2069 && !gfc_compare_derived_types (CLASS_DATA (actual)->ts.u.derived,
2070 CLASS_DATA (formal)->ts.u.derived))
2072 if (where)
2073 gfc_error ("Actual argument to %qs at %L must have the same "
2074 "declared type", formal->name, &actual->where);
2075 return 0;
2079 /* F08: 12.5.2.5 Allocatable and pointer dummy variables. However, this
2080 is necessary also for F03, so retain error for both.
2081 NOTE: Other type/kind errors pre-empt this error. Since they are F03
2082 compatible, no attempt has been made to channel to this one. */
2083 if (UNLIMITED_POLY (formal) && !UNLIMITED_POLY (actual)
2084 && (CLASS_DATA (formal)->attr.allocatable
2085 ||CLASS_DATA (formal)->attr.class_pointer))
2087 if (where)
2088 gfc_error ("Actual argument to %qs at %L must be unlimited "
2089 "polymorphic since the formal argument is a "
2090 "pointer or allocatable unlimited polymorphic "
2091 "entity [F2008: 12.5.2.5]", formal->name,
2092 &actual->where);
2093 return 0;
2096 if (formal->attr.codimension && !gfc_is_coarray (actual))
2098 if (where)
2099 gfc_error ("Actual argument to %qs at %L must be a coarray",
2100 formal->name, &actual->where);
2101 return 0;
2104 if (formal->attr.codimension && formal->attr.allocatable)
2106 gfc_ref *last = NULL;
2108 for (ref = actual->ref; ref; ref = ref->next)
2109 if (ref->type == REF_COMPONENT)
2110 last = ref;
2112 /* F2008, 12.5.2.6. */
2113 if ((last && last->u.c.component->as->corank != formal->as->corank)
2114 || (!last
2115 && actual->symtree->n.sym->as->corank != formal->as->corank))
2117 if (where)
2118 gfc_error ("Corank mismatch in argument %qs at %L (%d and %d)",
2119 formal->name, &actual->where, formal->as->corank,
2120 last ? last->u.c.component->as->corank
2121 : actual->symtree->n.sym->as->corank);
2122 return 0;
2126 if (formal->attr.codimension)
2128 /* F2008, 12.5.2.8. */
2129 if (formal->attr.dimension
2130 && (formal->attr.contiguous || formal->as->type != AS_ASSUMED_SHAPE)
2131 && gfc_expr_attr (actual).dimension
2132 && !gfc_is_simply_contiguous (actual, true))
2134 if (where)
2135 gfc_error ("Actual argument to %qs at %L must be simply "
2136 "contiguous", formal->name, &actual->where);
2137 return 0;
2140 /* F2008, C1303 and C1304. */
2141 if (formal->attr.intent != INTENT_INOUT
2142 && (((formal->ts.type == BT_DERIVED || formal->ts.type == BT_CLASS)
2143 && formal->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
2144 && formal->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)
2145 || formal->attr.lock_comp))
2148 if (where)
2149 gfc_error ("Actual argument to non-INTENT(INOUT) dummy %qs at %L, "
2150 "which is LOCK_TYPE or has a LOCK_TYPE component",
2151 formal->name, &actual->where);
2152 return 0;
2156 /* F2008, C1239/C1240. */
2157 if (actual->expr_type == EXPR_VARIABLE
2158 && (actual->symtree->n.sym->attr.asynchronous
2159 || actual->symtree->n.sym->attr.volatile_)
2160 && (formal->attr.asynchronous || formal->attr.volatile_)
2161 && actual->rank && formal->as && !gfc_is_simply_contiguous (actual, true)
2162 && ((formal->as->type != AS_ASSUMED_SHAPE
2163 && formal->as->type != AS_ASSUMED_RANK && !formal->attr.pointer)
2164 || formal->attr.contiguous))
2166 if (where)
2167 gfc_error ("Dummy argument %qs has to be a pointer, assumed-shape or "
2168 "assumed-rank array without CONTIGUOUS attribute - as actual"
2169 " argument at %L is not simply contiguous and both are "
2170 "ASYNCHRONOUS or VOLATILE", formal->name, &actual->where);
2171 return 0;
2174 if (formal->attr.allocatable && !formal->attr.codimension
2175 && gfc_expr_attr (actual).codimension)
2177 if (formal->attr.intent == INTENT_OUT)
2179 if (where)
2180 gfc_error ("Passing coarray at %L to allocatable, noncoarray, "
2181 "INTENT(OUT) dummy argument %qs", &actual->where,
2182 formal->name);
2183 return 0;
2185 else if (warn_surprising && where && formal->attr.intent != INTENT_IN)
2186 gfc_warning (OPT_Wsurprising,
2187 "Passing coarray at %L to allocatable, noncoarray dummy "
2188 "argument %qs, which is invalid if the allocation status"
2189 " is modified", &actual->where, formal->name);
2192 /* If the rank is the same or the formal argument has assumed-rank. */
2193 if (symbol_rank (formal) == actual->rank || symbol_rank (formal) == -1)
2194 return 1;
2196 rank_check = where != NULL && !is_elemental && formal->as
2197 && (formal->as->type == AS_ASSUMED_SHAPE
2198 || formal->as->type == AS_DEFERRED)
2199 && actual->expr_type != EXPR_NULL;
2201 /* Skip rank checks for NO_ARG_CHECK. */
2202 if (formal->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
2203 return 1;
2205 /* Scalar & coindexed, see: F2008, Section 12.5.2.4. */
2206 if (rank_check || ranks_must_agree
2207 || (formal->attr.pointer && actual->expr_type != EXPR_NULL)
2208 || (actual->rank != 0 && !(is_elemental || formal->attr.dimension))
2209 || (actual->rank == 0
2210 && ((formal->ts.type == BT_CLASS
2211 && CLASS_DATA (formal)->as->type == AS_ASSUMED_SHAPE)
2212 || (formal->ts.type != BT_CLASS
2213 && formal->as->type == AS_ASSUMED_SHAPE))
2214 && actual->expr_type != EXPR_NULL)
2215 || (actual->rank == 0 && formal->attr.dimension
2216 && gfc_is_coindexed (actual)))
2218 if (where)
2219 argument_rank_mismatch (formal->name, &actual->where,
2220 symbol_rank (formal), actual->rank);
2221 return 0;
2223 else if (actual->rank != 0 && (is_elemental || formal->attr.dimension))
2224 return 1;
2226 /* At this point, we are considering a scalar passed to an array. This
2227 is valid (cf. F95 12.4.1.1, F2003 12.4.1.2, and F2008 12.5.2.4),
2228 - if the actual argument is (a substring of) an element of a
2229 non-assumed-shape/non-pointer/non-polymorphic array; or
2230 - (F2003) if the actual argument is of type character of default/c_char
2231 kind. */
2233 is_pointer = actual->expr_type == EXPR_VARIABLE
2234 ? actual->symtree->n.sym->attr.pointer : false;
2236 for (ref = actual->ref; ref; ref = ref->next)
2238 if (ref->type == REF_COMPONENT)
2239 is_pointer = ref->u.c.component->attr.pointer;
2240 else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT
2241 && ref->u.ar.dimen > 0
2242 && (!ref->next
2243 || (ref->next->type == REF_SUBSTRING && !ref->next->next)))
2244 break;
2247 if (actual->ts.type == BT_CLASS && actual->expr_type != EXPR_NULL)
2249 if (where)
2250 gfc_error ("Polymorphic scalar passed to array dummy argument %qs "
2251 "at %L", formal->name, &actual->where);
2252 return 0;
2255 if (actual->expr_type != EXPR_NULL && ref && actual->ts.type != BT_CHARACTER
2256 && (is_pointer || ref->u.ar.as->type == AS_ASSUMED_SHAPE))
2258 if (where)
2259 gfc_error ("Element of assumed-shaped or pointer "
2260 "array passed to array dummy argument %qs at %L",
2261 formal->name, &actual->where);
2262 return 0;
2265 if (actual->ts.type == BT_CHARACTER && actual->expr_type != EXPR_NULL
2266 && (!ref || is_pointer || ref->u.ar.as->type == AS_ASSUMED_SHAPE))
2268 if (formal->ts.kind != 1 && (gfc_option.allow_std & GFC_STD_GNU) == 0)
2270 if (where)
2271 gfc_error ("Extension: Scalar non-default-kind, non-C_CHAR-kind "
2272 "CHARACTER actual argument with array dummy argument "
2273 "%qs at %L", formal->name, &actual->where);
2274 return 0;
2277 if (where && (gfc_option.allow_std & GFC_STD_F2003) == 0)
2279 gfc_error ("Fortran 2003: Scalar CHARACTER actual argument with "
2280 "array dummy argument %qs at %L",
2281 formal->name, &actual->where);
2282 return 0;
2284 else if ((gfc_option.allow_std & GFC_STD_F2003) == 0)
2285 return 0;
2286 else
2287 return 1;
2290 if (ref == NULL && actual->expr_type != EXPR_NULL)
2292 if (where)
2293 argument_rank_mismatch (formal->name, &actual->where,
2294 symbol_rank (formal), actual->rank);
2295 return 0;
2298 return 1;
2302 /* Returns the storage size of a symbol (formal argument) or
2303 zero if it cannot be determined. */
2305 static unsigned long
2306 get_sym_storage_size (gfc_symbol *sym)
2308 int i;
2309 unsigned long strlen, elements;
2311 if (sym->ts.type == BT_CHARACTER)
2313 if (sym->ts.u.cl && sym->ts.u.cl->length
2314 && sym->ts.u.cl->length->expr_type == EXPR_CONSTANT)
2315 strlen = mpz_get_ui (sym->ts.u.cl->length->value.integer);
2316 else
2317 return 0;
2319 else
2320 strlen = 1;
2322 if (symbol_rank (sym) == 0)
2323 return strlen;
2325 elements = 1;
2326 if (sym->as->type != AS_EXPLICIT)
2327 return 0;
2328 for (i = 0; i < sym->as->rank; i++)
2330 if (sym->as->upper[i]->expr_type != EXPR_CONSTANT
2331 || sym->as->lower[i]->expr_type != EXPR_CONSTANT)
2332 return 0;
2334 elements *= mpz_get_si (sym->as->upper[i]->value.integer)
2335 - mpz_get_si (sym->as->lower[i]->value.integer) + 1L;
2338 return strlen*elements;
2342 /* Returns the storage size of an expression (actual argument) or
2343 zero if it cannot be determined. For an array element, it returns
2344 the remaining size as the element sequence consists of all storage
2345 units of the actual argument up to the end of the array. */
2347 static unsigned long
2348 get_expr_storage_size (gfc_expr *e)
2350 int i;
2351 long int strlen, elements;
2352 long int substrlen = 0;
2353 bool is_str_storage = false;
2354 gfc_ref *ref;
2356 if (e == NULL)
2357 return 0;
2359 if (e->ts.type == BT_CHARACTER)
2361 if (e->ts.u.cl && e->ts.u.cl->length
2362 && e->ts.u.cl->length->expr_type == EXPR_CONSTANT)
2363 strlen = mpz_get_si (e->ts.u.cl->length->value.integer);
2364 else if (e->expr_type == EXPR_CONSTANT
2365 && (e->ts.u.cl == NULL || e->ts.u.cl->length == NULL))
2366 strlen = e->value.character.length;
2367 else
2368 return 0;
2370 else
2371 strlen = 1; /* Length per element. */
2373 if (e->rank == 0 && !e->ref)
2374 return strlen;
2376 elements = 1;
2377 if (!e->ref)
2379 if (!e->shape)
2380 return 0;
2381 for (i = 0; i < e->rank; i++)
2382 elements *= mpz_get_si (e->shape[i]);
2383 return elements*strlen;
2386 for (ref = e->ref; ref; ref = ref->next)
2388 if (ref->type == REF_SUBSTRING && ref->u.ss.start
2389 && ref->u.ss.start->expr_type == EXPR_CONSTANT)
2391 if (is_str_storage)
2393 /* The string length is the substring length.
2394 Set now to full string length. */
2395 if (!ref->u.ss.length || !ref->u.ss.length->length
2396 || ref->u.ss.length->length->expr_type != EXPR_CONSTANT)
2397 return 0;
2399 strlen = mpz_get_ui (ref->u.ss.length->length->value.integer);
2401 substrlen = strlen - mpz_get_ui (ref->u.ss.start->value.integer) + 1;
2402 continue;
2405 if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION)
2406 for (i = 0; i < ref->u.ar.dimen; i++)
2408 long int start, end, stride;
2409 stride = 1;
2411 if (ref->u.ar.stride[i])
2413 if (ref->u.ar.stride[i]->expr_type == EXPR_CONSTANT)
2414 stride = mpz_get_si (ref->u.ar.stride[i]->value.integer);
2415 else
2416 return 0;
2419 if (ref->u.ar.start[i])
2421 if (ref->u.ar.start[i]->expr_type == EXPR_CONSTANT)
2422 start = mpz_get_si (ref->u.ar.start[i]->value.integer);
2423 else
2424 return 0;
2426 else if (ref->u.ar.as->lower[i]
2427 && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT)
2428 start = mpz_get_si (ref->u.ar.as->lower[i]->value.integer);
2429 else
2430 return 0;
2432 if (ref->u.ar.end[i])
2434 if (ref->u.ar.end[i]->expr_type == EXPR_CONSTANT)
2435 end = mpz_get_si (ref->u.ar.end[i]->value.integer);
2436 else
2437 return 0;
2439 else if (ref->u.ar.as->upper[i]
2440 && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
2441 end = mpz_get_si (ref->u.ar.as->upper[i]->value.integer);
2442 else
2443 return 0;
2445 elements *= (end - start)/stride + 1L;
2447 else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_FULL)
2448 for (i = 0; i < ref->u.ar.as->rank; i++)
2450 if (ref->u.ar.as->lower[i] && ref->u.ar.as->upper[i]
2451 && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT
2452 && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
2453 elements *= mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
2454 - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
2455 + 1L;
2456 else
2457 return 0;
2459 else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT
2460 && e->expr_type == EXPR_VARIABLE)
2462 if (ref->u.ar.as->type == AS_ASSUMED_SHAPE
2463 || e->symtree->n.sym->attr.pointer)
2465 elements = 1;
2466 continue;
2469 /* Determine the number of remaining elements in the element
2470 sequence for array element designators. */
2471 is_str_storage = true;
2472 for (i = ref->u.ar.dimen - 1; i >= 0; i--)
2474 if (ref->u.ar.start[i] == NULL
2475 || ref->u.ar.start[i]->expr_type != EXPR_CONSTANT
2476 || ref->u.ar.as->upper[i] == NULL
2477 || ref->u.ar.as->lower[i] == NULL
2478 || ref->u.ar.as->upper[i]->expr_type != EXPR_CONSTANT
2479 || ref->u.ar.as->lower[i]->expr_type != EXPR_CONSTANT)
2480 return 0;
2482 elements
2483 = elements
2484 * (mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
2485 - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
2486 + 1L)
2487 - (mpz_get_si (ref->u.ar.start[i]->value.integer)
2488 - mpz_get_si (ref->u.ar.as->lower[i]->value.integer));
2491 else if (ref->type == REF_COMPONENT && ref->u.c.component->attr.function
2492 && ref->u.c.component->attr.proc_pointer
2493 && ref->u.c.component->attr.dimension)
2495 /* Array-valued procedure-pointer components. */
2496 gfc_array_spec *as = ref->u.c.component->as;
2497 for (i = 0; i < as->rank; i++)
2499 if (!as->upper[i] || !as->lower[i]
2500 || as->upper[i]->expr_type != EXPR_CONSTANT
2501 || as->lower[i]->expr_type != EXPR_CONSTANT)
2502 return 0;
2504 elements = elements
2505 * (mpz_get_si (as->upper[i]->value.integer)
2506 - mpz_get_si (as->lower[i]->value.integer) + 1L);
2511 if (substrlen)
2512 return (is_str_storage) ? substrlen + (elements-1)*strlen
2513 : elements*strlen;
2514 else
2515 return elements*strlen;
2519 /* Given an expression, check whether it is an array section
2520 which has a vector subscript. If it has, one is returned,
2521 otherwise zero. */
2524 gfc_has_vector_subscript (gfc_expr *e)
2526 int i;
2527 gfc_ref *ref;
2529 if (e == NULL || e->rank == 0 || e->expr_type != EXPR_VARIABLE)
2530 return 0;
2532 for (ref = e->ref; ref; ref = ref->next)
2533 if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION)
2534 for (i = 0; i < ref->u.ar.dimen; i++)
2535 if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
2536 return 1;
2538 return 0;
2542 static bool
2543 is_procptr_result (gfc_expr *expr)
2545 gfc_component *c = gfc_get_proc_ptr_comp (expr);
2546 if (c)
2547 return (c->ts.interface && (c->ts.interface->attr.proc_pointer == 1));
2548 else
2549 return ((expr->symtree->n.sym->result != expr->symtree->n.sym)
2550 && (expr->symtree->n.sym->result->attr.proc_pointer == 1));
2554 /* Given formal and actual argument lists, see if they are compatible.
2555 If they are compatible, the actual argument list is sorted to
2556 correspond with the formal list, and elements for missing optional
2557 arguments are inserted. If WHERE pointer is nonnull, then we issue
2558 errors when things don't match instead of just returning the status
2559 code. */
2561 static int
2562 compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
2563 int ranks_must_agree, int is_elemental, locus *where)
2565 gfc_actual_arglist **new_arg, *a, *actual, temp;
2566 gfc_formal_arglist *f;
2567 int i, n, na;
2568 unsigned long actual_size, formal_size;
2569 bool full_array = false;
2571 actual = *ap;
2573 if (actual == NULL && formal == NULL)
2574 return 1;
2576 n = 0;
2577 for (f = formal; f; f = f->next)
2578 n++;
2580 new_arg = XALLOCAVEC (gfc_actual_arglist *, n);
2582 for (i = 0; i < n; i++)
2583 new_arg[i] = NULL;
2585 na = 0;
2586 f = formal;
2587 i = 0;
2589 for (a = actual; a; a = a->next, f = f->next)
2591 /* Look for keywords but ignore g77 extensions like %VAL. */
2592 if (a->name != NULL && a->name[0] != '%')
2594 i = 0;
2595 for (f = formal; f; f = f->next, i++)
2597 if (f->sym == NULL)
2598 continue;
2599 if (strcmp (f->sym->name, a->name) == 0)
2600 break;
2603 if (f == NULL)
2605 if (where)
2606 gfc_error ("Keyword argument %qs at %L is not in "
2607 "the procedure", a->name, &a->expr->where);
2608 return 0;
2611 if (new_arg[i] != NULL)
2613 if (where)
2614 gfc_error ("Keyword argument %qs at %L is already associated "
2615 "with another actual argument", a->name,
2616 &a->expr->where);
2617 return 0;
2621 if (f == NULL)
2623 if (where)
2624 gfc_error ("More actual than formal arguments in procedure "
2625 "call at %L", where);
2627 return 0;
2630 if (f->sym == NULL && a->expr == NULL)
2631 goto match;
2633 if (f->sym == NULL)
2635 if (where)
2636 gfc_error ("Missing alternate return spec in subroutine call "
2637 "at %L", where);
2638 return 0;
2641 if (a->expr == NULL)
2643 if (where)
2644 gfc_error ("Unexpected alternate return spec in subroutine "
2645 "call at %L", where);
2646 return 0;
2649 /* Make sure that intrinsic vtables exist for calls to unlimited
2650 polymorphic formal arguments. */
2651 if (UNLIMITED_POLY (f->sym)
2652 && a->expr->ts.type != BT_DERIVED
2653 && a->expr->ts.type != BT_CLASS)
2654 gfc_find_vtab (&a->expr->ts);
2656 if (a->expr->expr_type == EXPR_NULL
2657 && ((f->sym->ts.type != BT_CLASS && !f->sym->attr.pointer
2658 && (f->sym->attr.allocatable || !f->sym->attr.optional
2659 || (gfc_option.allow_std & GFC_STD_F2008) == 0))
2660 || (f->sym->ts.type == BT_CLASS
2661 && !CLASS_DATA (f->sym)->attr.class_pointer
2662 && (CLASS_DATA (f->sym)->attr.allocatable
2663 || !f->sym->attr.optional
2664 || (gfc_option.allow_std & GFC_STD_F2008) == 0))))
2666 if (where
2667 && (!f->sym->attr.optional
2668 || (f->sym->ts.type != BT_CLASS && f->sym->attr.allocatable)
2669 || (f->sym->ts.type == BT_CLASS
2670 && CLASS_DATA (f->sym)->attr.allocatable)))
2671 gfc_error ("Unexpected NULL() intrinsic at %L to dummy %qs",
2672 where, f->sym->name);
2673 else if (where)
2674 gfc_error ("Fortran 2008: Null pointer at %L to non-pointer "
2675 "dummy %qs", where, f->sym->name);
2677 return 0;
2680 if (!compare_parameter (f->sym, a->expr, ranks_must_agree,
2681 is_elemental, where))
2682 return 0;
2684 /* TS 29113, 6.3p2. */
2685 if (f->sym->ts.type == BT_ASSUMED
2686 && (a->expr->ts.type == BT_DERIVED
2687 || (a->expr->ts.type == BT_CLASS && CLASS_DATA (a->expr))))
2689 gfc_namespace *f2k_derived;
2691 f2k_derived = a->expr->ts.type == BT_DERIVED
2692 ? a->expr->ts.u.derived->f2k_derived
2693 : CLASS_DATA (a->expr)->ts.u.derived->f2k_derived;
2695 if (f2k_derived
2696 && (f2k_derived->finalizers || f2k_derived->tb_sym_root))
2698 gfc_error ("Actual argument at %L to assumed-type dummy is of "
2699 "derived type with type-bound or FINAL procedures",
2700 &a->expr->where);
2701 return false;
2705 /* Special case for character arguments. For allocatable, pointer
2706 and assumed-shape dummies, the string length needs to match
2707 exactly. */
2708 if (a->expr->ts.type == BT_CHARACTER
2709 && a->expr->ts.u.cl && a->expr->ts.u.cl->length
2710 && a->expr->ts.u.cl->length->expr_type == EXPR_CONSTANT
2711 && f->sym->ts.u.cl && f->sym->ts.u.cl && f->sym->ts.u.cl->length
2712 && f->sym->ts.u.cl->length->expr_type == EXPR_CONSTANT
2713 && (f->sym->attr.pointer || f->sym->attr.allocatable
2714 || (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2715 && (mpz_cmp (a->expr->ts.u.cl->length->value.integer,
2716 f->sym->ts.u.cl->length->value.integer) != 0))
2718 if (where && (f->sym->attr.pointer || f->sym->attr.allocatable))
2719 gfc_warning (0,
2720 "Character length mismatch (%ld/%ld) between actual "
2721 "argument and pointer or allocatable dummy argument "
2722 "%qs at %L",
2723 mpz_get_si (a->expr->ts.u.cl->length->value.integer),
2724 mpz_get_si (f->sym->ts.u.cl->length->value.integer),
2725 f->sym->name, &a->expr->where);
2726 else if (where)
2727 gfc_warning (0,
2728 "Character length mismatch (%ld/%ld) between actual "
2729 "argument and assumed-shape dummy argument %qs "
2730 "at %L",
2731 mpz_get_si (a->expr->ts.u.cl->length->value.integer),
2732 mpz_get_si (f->sym->ts.u.cl->length->value.integer),
2733 f->sym->name, &a->expr->where);
2734 return 0;
2737 if ((f->sym->attr.pointer || f->sym->attr.allocatable)
2738 && f->sym->ts.deferred != a->expr->ts.deferred
2739 && a->expr->ts.type == BT_CHARACTER)
2741 if (where)
2742 gfc_error ("Actual argument at %L to allocatable or "
2743 "pointer dummy argument %qs must have a deferred "
2744 "length type parameter if and only if the dummy has one",
2745 &a->expr->where, f->sym->name);
2746 return 0;
2749 if (f->sym->ts.type == BT_CLASS)
2750 goto skip_size_check;
2752 actual_size = get_expr_storage_size (a->expr);
2753 formal_size = get_sym_storage_size (f->sym);
2754 if (actual_size != 0 && actual_size < formal_size
2755 && a->expr->ts.type != BT_PROCEDURE
2756 && f->sym->attr.flavor != FL_PROCEDURE)
2758 if (a->expr->ts.type == BT_CHARACTER && !f->sym->as && where)
2759 gfc_warning (0, "Character length of actual argument shorter "
2760 "than of dummy argument %qs (%lu/%lu) at %L",
2761 f->sym->name, actual_size, formal_size,
2762 &a->expr->where);
2763 else if (where)
2764 gfc_warning (0, "Actual argument contains too few "
2765 "elements for dummy argument %qs (%lu/%lu) at %L",
2766 f->sym->name, actual_size, formal_size,
2767 &a->expr->where);
2768 return 0;
2771 skip_size_check:
2773 /* Satisfy F03:12.4.1.3 by ensuring that a procedure pointer actual
2774 argument is provided for a procedure pointer formal argument. */
2775 if (f->sym->attr.proc_pointer
2776 && !((a->expr->expr_type == EXPR_VARIABLE
2777 && (a->expr->symtree->n.sym->attr.proc_pointer
2778 || gfc_is_proc_ptr_comp (a->expr)))
2779 || (a->expr->expr_type == EXPR_FUNCTION
2780 && is_procptr_result (a->expr))))
2782 if (where)
2783 gfc_error ("Expected a procedure pointer for argument %qs at %L",
2784 f->sym->name, &a->expr->where);
2785 return 0;
2788 /* Satisfy F03:12.4.1.3 by ensuring that a procedure actual argument is
2789 provided for a procedure formal argument. */
2790 if (f->sym->attr.flavor == FL_PROCEDURE
2791 && !((a->expr->expr_type == EXPR_VARIABLE
2792 && (a->expr->symtree->n.sym->attr.flavor == FL_PROCEDURE
2793 || a->expr->symtree->n.sym->attr.proc_pointer
2794 || gfc_is_proc_ptr_comp (a->expr)))
2795 || (a->expr->expr_type == EXPR_FUNCTION
2796 && is_procptr_result (a->expr))))
2798 if (where)
2799 gfc_error ("Expected a procedure for argument %qs at %L",
2800 f->sym->name, &a->expr->where);
2801 return 0;
2804 if (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE
2805 && a->expr->expr_type == EXPR_VARIABLE
2806 && a->expr->symtree->n.sym->as
2807 && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SIZE
2808 && (a->expr->ref == NULL
2809 || (a->expr->ref->type == REF_ARRAY
2810 && a->expr->ref->u.ar.type == AR_FULL)))
2812 if (where)
2813 gfc_error ("Actual argument for %qs cannot be an assumed-size"
2814 " array at %L", f->sym->name, where);
2815 return 0;
2818 if (a->expr->expr_type != EXPR_NULL
2819 && compare_pointer (f->sym, a->expr) == 0)
2821 if (where)
2822 gfc_error ("Actual argument for %qs must be a pointer at %L",
2823 f->sym->name, &a->expr->where);
2824 return 0;
2827 if (a->expr->expr_type != EXPR_NULL
2828 && (gfc_option.allow_std & GFC_STD_F2008) == 0
2829 && compare_pointer (f->sym, a->expr) == 2)
2831 if (where)
2832 gfc_error ("Fortran 2008: Non-pointer actual argument at %L to "
2833 "pointer dummy %qs", &a->expr->where,f->sym->name);
2834 return 0;
2838 /* Fortran 2008, C1242. */
2839 if (f->sym->attr.pointer && gfc_is_coindexed (a->expr))
2841 if (where)
2842 gfc_error ("Coindexed actual argument at %L to pointer "
2843 "dummy %qs",
2844 &a->expr->where, f->sym->name);
2845 return 0;
2848 /* Fortran 2008, 12.5.2.5 (no constraint). */
2849 if (a->expr->expr_type == EXPR_VARIABLE
2850 && f->sym->attr.intent != INTENT_IN
2851 && f->sym->attr.allocatable
2852 && gfc_is_coindexed (a->expr))
2854 if (where)
2855 gfc_error ("Coindexed actual argument at %L to allocatable "
2856 "dummy %qs requires INTENT(IN)",
2857 &a->expr->where, f->sym->name);
2858 return 0;
2861 /* Fortran 2008, C1237. */
2862 if (a->expr->expr_type == EXPR_VARIABLE
2863 && (f->sym->attr.asynchronous || f->sym->attr.volatile_)
2864 && gfc_is_coindexed (a->expr)
2865 && (a->expr->symtree->n.sym->attr.volatile_
2866 || a->expr->symtree->n.sym->attr.asynchronous))
2868 if (where)
2869 gfc_error ("Coindexed ASYNCHRONOUS or VOLATILE actual argument at "
2870 "%L requires that dummy %qs has neither "
2871 "ASYNCHRONOUS nor VOLATILE", &a->expr->where,
2872 f->sym->name);
2873 return 0;
2876 /* Fortran 2008, 12.5.2.4 (no constraint). */
2877 if (a->expr->expr_type == EXPR_VARIABLE
2878 && f->sym->attr.intent != INTENT_IN && !f->sym->attr.value
2879 && gfc_is_coindexed (a->expr)
2880 && gfc_has_ultimate_allocatable (a->expr))
2882 if (where)
2883 gfc_error ("Coindexed actual argument at %L with allocatable "
2884 "ultimate component to dummy %qs requires either VALUE "
2885 "or INTENT(IN)", &a->expr->where, f->sym->name);
2886 return 0;
2889 if (f->sym->ts.type == BT_CLASS
2890 && CLASS_DATA (f->sym)->attr.allocatable
2891 && gfc_is_class_array_ref (a->expr, &full_array)
2892 && !full_array)
2894 if (where)
2895 gfc_error ("Actual CLASS array argument for %qs must be a full "
2896 "array at %L", f->sym->name, &a->expr->where);
2897 return 0;
2901 if (a->expr->expr_type != EXPR_NULL
2902 && compare_allocatable (f->sym, a->expr) == 0)
2904 if (where)
2905 gfc_error ("Actual argument for %qs must be ALLOCATABLE at %L",
2906 f->sym->name, &a->expr->where);
2907 return 0;
2910 /* Check intent = OUT/INOUT for definable actual argument. */
2911 if ((f->sym->attr.intent == INTENT_OUT
2912 || f->sym->attr.intent == INTENT_INOUT))
2914 const char* context = (where
2915 ? _("actual argument to INTENT = OUT/INOUT")
2916 : NULL);
2918 if (((f->sym->ts.type == BT_CLASS && f->sym->attr.class_ok
2919 && CLASS_DATA (f->sym)->attr.class_pointer)
2920 || (f->sym->ts.type != BT_CLASS && f->sym->attr.pointer))
2921 && !gfc_check_vardef_context (a->expr, true, false, false, context))
2922 return 0;
2923 if (!gfc_check_vardef_context (a->expr, false, false, false, context))
2924 return 0;
2927 if ((f->sym->attr.intent == INTENT_OUT
2928 || f->sym->attr.intent == INTENT_INOUT
2929 || f->sym->attr.volatile_
2930 || f->sym->attr.asynchronous)
2931 && gfc_has_vector_subscript (a->expr))
2933 if (where)
2934 gfc_error ("Array-section actual argument with vector "
2935 "subscripts at %L is incompatible with INTENT(OUT), "
2936 "INTENT(INOUT), VOLATILE or ASYNCHRONOUS attribute "
2937 "of the dummy argument %qs",
2938 &a->expr->where, f->sym->name);
2939 return 0;
2942 /* C1232 (R1221) For an actual argument which is an array section or
2943 an assumed-shape array, the dummy argument shall be an assumed-
2944 shape array, if the dummy argument has the VOLATILE attribute. */
2946 if (f->sym->attr.volatile_
2947 && a->expr->symtree->n.sym->as
2948 && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
2949 && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2951 if (where)
2952 gfc_error ("Assumed-shape actual argument at %L is "
2953 "incompatible with the non-assumed-shape "
2954 "dummy argument %qs due to VOLATILE attribute",
2955 &a->expr->where,f->sym->name);
2956 return 0;
2959 if (f->sym->attr.volatile_
2960 && a->expr->ref && a->expr->ref->u.ar.type == AR_SECTION
2961 && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2963 if (where)
2964 gfc_error ("Array-section actual argument at %L is "
2965 "incompatible with the non-assumed-shape "
2966 "dummy argument %qs due to VOLATILE attribute",
2967 &a->expr->where,f->sym->name);
2968 return 0;
2971 /* C1233 (R1221) For an actual argument which is a pointer array, the
2972 dummy argument shall be an assumed-shape or pointer array, if the
2973 dummy argument has the VOLATILE attribute. */
2975 if (f->sym->attr.volatile_
2976 && a->expr->symtree->n.sym->attr.pointer
2977 && a->expr->symtree->n.sym->as
2978 && !(f->sym->as
2979 && (f->sym->as->type == AS_ASSUMED_SHAPE
2980 || f->sym->attr.pointer)))
2982 if (where)
2983 gfc_error ("Pointer-array actual argument at %L requires "
2984 "an assumed-shape or pointer-array dummy "
2985 "argument %qs due to VOLATILE attribute",
2986 &a->expr->where,f->sym->name);
2987 return 0;
2990 match:
2991 if (a == actual)
2992 na = i;
2994 new_arg[i++] = a;
2997 /* Make sure missing actual arguments are optional. */
2998 i = 0;
2999 for (f = formal; f; f = f->next, i++)
3001 if (new_arg[i] != NULL)
3002 continue;
3003 if (f->sym == NULL)
3005 if (where)
3006 gfc_error ("Missing alternate return spec in subroutine call "
3007 "at %L", where);
3008 return 0;
3010 if (!f->sym->attr.optional)
3012 if (where)
3013 gfc_error ("Missing actual argument for argument %qs at %L",
3014 f->sym->name, where);
3015 return 0;
3019 /* The argument lists are compatible. We now relink a new actual
3020 argument list with null arguments in the right places. The head
3021 of the list remains the head. */
3022 for (i = 0; i < n; i++)
3023 if (new_arg[i] == NULL)
3024 new_arg[i] = gfc_get_actual_arglist ();
3026 if (na != 0)
3028 temp = *new_arg[0];
3029 *new_arg[0] = *actual;
3030 *actual = temp;
3032 a = new_arg[0];
3033 new_arg[0] = new_arg[na];
3034 new_arg[na] = a;
3037 for (i = 0; i < n - 1; i++)
3038 new_arg[i]->next = new_arg[i + 1];
3040 new_arg[i]->next = NULL;
3042 if (*ap == NULL && n > 0)
3043 *ap = new_arg[0];
3045 /* Note the types of omitted optional arguments. */
3046 for (a = *ap, f = formal; a; a = a->next, f = f->next)
3047 if (a->expr == NULL && a->label == NULL)
3048 a->missing_arg_type = f->sym->ts.type;
3050 return 1;
3054 typedef struct
3056 gfc_formal_arglist *f;
3057 gfc_actual_arglist *a;
3059 argpair;
3061 /* qsort comparison function for argument pairs, with the following
3062 order:
3063 - p->a->expr == NULL
3064 - p->a->expr->expr_type != EXPR_VARIABLE
3065 - growing p->a->expr->symbol. */
3067 static int
3068 pair_cmp (const void *p1, const void *p2)
3070 const gfc_actual_arglist *a1, *a2;
3072 /* *p1 and *p2 are elements of the to-be-sorted array. */
3073 a1 = ((const argpair *) p1)->a;
3074 a2 = ((const argpair *) p2)->a;
3075 if (!a1->expr)
3077 if (!a2->expr)
3078 return 0;
3079 return -1;
3081 if (!a2->expr)
3082 return 1;
3083 if (a1->expr->expr_type != EXPR_VARIABLE)
3085 if (a2->expr->expr_type != EXPR_VARIABLE)
3086 return 0;
3087 return -1;
3089 if (a2->expr->expr_type != EXPR_VARIABLE)
3090 return 1;
3091 return a1->expr->symtree->n.sym < a2->expr->symtree->n.sym;
3095 /* Given two expressions from some actual arguments, test whether they
3096 refer to the same expression. The analysis is conservative.
3097 Returning false will produce no warning. */
3099 static bool
3100 compare_actual_expr (gfc_expr *e1, gfc_expr *e2)
3102 const gfc_ref *r1, *r2;
3104 if (!e1 || !e2
3105 || e1->expr_type != EXPR_VARIABLE
3106 || e2->expr_type != EXPR_VARIABLE
3107 || e1->symtree->n.sym != e2->symtree->n.sym)
3108 return false;
3110 /* TODO: improve comparison, see expr.c:show_ref(). */
3111 for (r1 = e1->ref, r2 = e2->ref; r1 && r2; r1 = r1->next, r2 = r2->next)
3113 if (r1->type != r2->type)
3114 return false;
3115 switch (r1->type)
3117 case REF_ARRAY:
3118 if (r1->u.ar.type != r2->u.ar.type)
3119 return false;
3120 /* TODO: At the moment, consider only full arrays;
3121 we could do better. */
3122 if (r1->u.ar.type != AR_FULL || r2->u.ar.type != AR_FULL)
3123 return false;
3124 break;
3126 case REF_COMPONENT:
3127 if (r1->u.c.component != r2->u.c.component)
3128 return false;
3129 break;
3131 case REF_SUBSTRING:
3132 return false;
3134 default:
3135 gfc_internal_error ("compare_actual_expr(): Bad component code");
3138 if (!r1 && !r2)
3139 return true;
3140 return false;
3144 /* Given formal and actual argument lists that correspond to one
3145 another, check that identical actual arguments aren't not
3146 associated with some incompatible INTENTs. */
3148 static bool
3149 check_some_aliasing (gfc_formal_arglist *f, gfc_actual_arglist *a)
3151 sym_intent f1_intent, f2_intent;
3152 gfc_formal_arglist *f1;
3153 gfc_actual_arglist *a1;
3154 size_t n, i, j;
3155 argpair *p;
3156 bool t = true;
3158 n = 0;
3159 for (f1 = f, a1 = a;; f1 = f1->next, a1 = a1->next)
3161 if (f1 == NULL && a1 == NULL)
3162 break;
3163 if (f1 == NULL || a1 == NULL)
3164 gfc_internal_error ("check_some_aliasing(): List mismatch");
3165 n++;
3167 if (n == 0)
3168 return t;
3169 p = XALLOCAVEC (argpair, n);
3171 for (i = 0, f1 = f, a1 = a; i < n; i++, f1 = f1->next, a1 = a1->next)
3173 p[i].f = f1;
3174 p[i].a = a1;
3177 qsort (p, n, sizeof (argpair), pair_cmp);
3179 for (i = 0; i < n; i++)
3181 if (!p[i].a->expr
3182 || p[i].a->expr->expr_type != EXPR_VARIABLE
3183 || p[i].a->expr->ts.type == BT_PROCEDURE)
3184 continue;
3185 f1_intent = p[i].f->sym->attr.intent;
3186 for (j = i + 1; j < n; j++)
3188 /* Expected order after the sort. */
3189 if (!p[j].a->expr || p[j].a->expr->expr_type != EXPR_VARIABLE)
3190 gfc_internal_error ("check_some_aliasing(): corrupted data");
3192 /* Are the expression the same? */
3193 if (!compare_actual_expr (p[i].a->expr, p[j].a->expr))
3194 break;
3195 f2_intent = p[j].f->sym->attr.intent;
3196 if ((f1_intent == INTENT_IN && f2_intent == INTENT_OUT)
3197 || (f1_intent == INTENT_OUT && f2_intent == INTENT_IN)
3198 || (f1_intent == INTENT_OUT && f2_intent == INTENT_OUT))
3200 gfc_warning (0, "Same actual argument associated with INTENT(%s) "
3201 "argument %qs and INTENT(%s) argument %qs at %L",
3202 gfc_intent_string (f1_intent), p[i].f->sym->name,
3203 gfc_intent_string (f2_intent), p[j].f->sym->name,
3204 &p[i].a->expr->where);
3205 t = false;
3210 return t;
3214 /* Given formal and actual argument lists that correspond to one
3215 another, check that they are compatible in the sense that intents
3216 are not mismatched. */
3218 static bool
3219 check_intents (gfc_formal_arglist *f, gfc_actual_arglist *a)
3221 sym_intent f_intent;
3223 for (;; f = f->next, a = a->next)
3225 gfc_expr *expr;
3227 if (f == NULL && a == NULL)
3228 break;
3229 if (f == NULL || a == NULL)
3230 gfc_internal_error ("check_intents(): List mismatch");
3232 if (a->expr && a->expr->expr_type == EXPR_FUNCTION
3233 && a->expr->value.function.isym
3234 && a->expr->value.function.isym->id == GFC_ISYM_CAF_GET)
3235 expr = a->expr->value.function.actual->expr;
3236 else
3237 expr = a->expr;
3239 if (expr == NULL || expr->expr_type != EXPR_VARIABLE)
3240 continue;
3242 f_intent = f->sym->attr.intent;
3244 if (gfc_pure (NULL) && gfc_impure_variable (expr->symtree->n.sym))
3246 if ((f->sym->ts.type == BT_CLASS && f->sym->attr.class_ok
3247 && CLASS_DATA (f->sym)->attr.class_pointer)
3248 || (f->sym->ts.type != BT_CLASS && f->sym->attr.pointer))
3250 gfc_error ("Procedure argument at %L is local to a PURE "
3251 "procedure and has the POINTER attribute",
3252 &expr->where);
3253 return false;
3257 /* Fortran 2008, C1283. */
3258 if (gfc_pure (NULL) && gfc_is_coindexed (expr))
3260 if (f_intent == INTENT_INOUT || f_intent == INTENT_OUT)
3262 gfc_error ("Coindexed actual argument at %L in PURE procedure "
3263 "is passed to an INTENT(%s) argument",
3264 &expr->where, gfc_intent_string (f_intent));
3265 return false;
3268 if ((f->sym->ts.type == BT_CLASS && f->sym->attr.class_ok
3269 && CLASS_DATA (f->sym)->attr.class_pointer)
3270 || (f->sym->ts.type != BT_CLASS && f->sym->attr.pointer))
3272 gfc_error ("Coindexed actual argument at %L in PURE procedure "
3273 "is passed to a POINTER dummy argument",
3274 &expr->where);
3275 return false;
3279 /* F2008, Section 12.5.2.4. */
3280 if (expr->ts.type == BT_CLASS && f->sym->ts.type == BT_CLASS
3281 && gfc_is_coindexed (expr))
3283 gfc_error ("Coindexed polymorphic actual argument at %L is passed "
3284 "polymorphic dummy argument %qs",
3285 &expr->where, f->sym->name);
3286 return false;
3290 return true;
3294 /* Check how a procedure is used against its interface. If all goes
3295 well, the actual argument list will also end up being properly
3296 sorted. */
3298 bool
3299 gfc_procedure_use (gfc_symbol *sym, gfc_actual_arglist **ap, locus *where)
3301 gfc_formal_arglist *dummy_args;
3303 /* Warn about calls with an implicit interface. Special case
3304 for calling a ISO_C_BINDING because c_loc and c_funloc
3305 are pseudo-unknown. Additionally, warn about procedures not
3306 explicitly declared at all if requested. */
3307 if (sym->attr.if_source == IFSRC_UNKNOWN && !sym->attr.is_iso_c)
3309 if (sym->ns->has_implicit_none_export && sym->attr.proc == PROC_UNKNOWN)
3311 gfc_error ("Procedure %qs called at %L is not explicitly declared",
3312 sym->name, where);
3313 return false;
3315 if (warn_implicit_interface)
3316 gfc_warning (OPT_Wimplicit_interface,
3317 "Procedure %qs called with an implicit interface at %L",
3318 sym->name, where);
3319 else if (warn_implicit_procedure && sym->attr.proc == PROC_UNKNOWN)
3320 gfc_warning (OPT_Wimplicit_procedure,
3321 "Procedure %qs called at %L is not explicitly declared",
3322 sym->name, where);
3325 if (sym->attr.if_source == IFSRC_UNKNOWN)
3327 gfc_actual_arglist *a;
3329 if (sym->attr.pointer)
3331 gfc_error ("The pointer object %qs at %L must have an explicit "
3332 "function interface or be declared as array",
3333 sym->name, where);
3334 return false;
3337 if (sym->attr.allocatable && !sym->attr.external)
3339 gfc_error ("The allocatable object %qs at %L must have an explicit "
3340 "function interface or be declared as array",
3341 sym->name, where);
3342 return false;
3345 if (sym->attr.allocatable)
3347 gfc_error ("Allocatable function %qs at %L must have an explicit "
3348 "function interface", sym->name, where);
3349 return false;
3352 for (a = *ap; a; a = a->next)
3354 /* Skip g77 keyword extensions like %VAL, %REF, %LOC. */
3355 if (a->name != NULL && a->name[0] != '%')
3357 gfc_error ("Keyword argument requires explicit interface "
3358 "for procedure %qs at %L", sym->name, &a->expr->where);
3359 break;
3362 /* TS 29113, 6.2. */
3363 if (a->expr && a->expr->ts.type == BT_ASSUMED
3364 && sym->intmod_sym_id != ISOCBINDING_LOC)
3366 gfc_error ("Assumed-type argument %s at %L requires an explicit "
3367 "interface", a->expr->symtree->n.sym->name,
3368 &a->expr->where);
3369 break;
3372 /* F2008, C1303 and C1304. */
3373 if (a->expr
3374 && (a->expr->ts.type == BT_DERIVED || a->expr->ts.type == BT_CLASS)
3375 && ((a->expr->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
3376 && a->expr->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)
3377 || gfc_expr_attr (a->expr).lock_comp))
3379 gfc_error ("Actual argument of LOCK_TYPE or with LOCK_TYPE "
3380 "component at %L requires an explicit interface for "
3381 "procedure %qs", &a->expr->where, sym->name);
3382 break;
3385 if (a->expr && a->expr->expr_type == EXPR_NULL
3386 && a->expr->ts.type == BT_UNKNOWN)
3388 gfc_error ("MOLD argument to NULL required at %L", &a->expr->where);
3389 return false;
3392 /* TS 29113, C407b. */
3393 if (a->expr && a->expr->expr_type == EXPR_VARIABLE
3394 && symbol_rank (a->expr->symtree->n.sym) == -1)
3396 gfc_error ("Assumed-rank argument requires an explicit interface "
3397 "at %L", &a->expr->where);
3398 return false;
3402 return true;
3405 dummy_args = gfc_sym_get_dummy_args (sym);
3407 if (!compare_actual_formal (ap, dummy_args, 0, sym->attr.elemental, where))
3408 return false;
3410 if (!check_intents (dummy_args, *ap))
3411 return false;
3413 if (warn_aliasing)
3414 check_some_aliasing (dummy_args, *ap);
3416 return true;
3420 /* Check how a procedure pointer component is used against its interface.
3421 If all goes well, the actual argument list will also end up being properly
3422 sorted. Completely analogous to gfc_procedure_use. */
3424 void
3425 gfc_ppc_use (gfc_component *comp, gfc_actual_arglist **ap, locus *where)
3427 /* Warn about calls with an implicit interface. Special case
3428 for calling a ISO_C_BINDING because c_loc and c_funloc
3429 are pseudo-unknown. */
3430 if (warn_implicit_interface
3431 && comp->attr.if_source == IFSRC_UNKNOWN
3432 && !comp->attr.is_iso_c)
3433 gfc_warning (OPT_Wimplicit_interface,
3434 "Procedure pointer component %qs called with an implicit "
3435 "interface at %L", comp->name, where);
3437 if (comp->attr.if_source == IFSRC_UNKNOWN)
3439 gfc_actual_arglist *a;
3440 for (a = *ap; a; a = a->next)
3442 /* Skip g77 keyword extensions like %VAL, %REF, %LOC. */
3443 if (a->name != NULL && a->name[0] != '%')
3445 gfc_error ("Keyword argument requires explicit interface "
3446 "for procedure pointer component %qs at %L",
3447 comp->name, &a->expr->where);
3448 break;
3452 return;
3455 if (!compare_actual_formal (ap, comp->ts.interface->formal, 0,
3456 comp->attr.elemental, where))
3457 return;
3459 check_intents (comp->ts.interface->formal, *ap);
3460 if (warn_aliasing)
3461 check_some_aliasing (comp->ts.interface->formal, *ap);
3465 /* Try if an actual argument list matches the formal list of a symbol,
3466 respecting the symbol's attributes like ELEMENTAL. This is used for
3467 GENERIC resolution. */
3469 bool
3470 gfc_arglist_matches_symbol (gfc_actual_arglist** args, gfc_symbol* sym)
3472 gfc_formal_arglist *dummy_args;
3473 bool r;
3475 gcc_assert (sym->attr.flavor == FL_PROCEDURE);
3477 dummy_args = gfc_sym_get_dummy_args (sym);
3479 r = !sym->attr.elemental;
3480 if (compare_actual_formal (args, dummy_args, r, !r, NULL))
3482 check_intents (dummy_args, *args);
3483 if (warn_aliasing)
3484 check_some_aliasing (dummy_args, *args);
3485 return true;
3488 return false;
3492 /* Given an interface pointer and an actual argument list, search for
3493 a formal argument list that matches the actual. If found, returns
3494 a pointer to the symbol of the correct interface. Returns NULL if
3495 not found. */
3497 gfc_symbol *
3498 gfc_search_interface (gfc_interface *intr, int sub_flag,
3499 gfc_actual_arglist **ap)
3501 gfc_symbol *elem_sym = NULL;
3502 gfc_symbol *null_sym = NULL;
3503 locus null_expr_loc;
3504 gfc_actual_arglist *a;
3505 bool has_null_arg = false;
3507 for (a = *ap; a; a = a->next)
3508 if (a->expr && a->expr->expr_type == EXPR_NULL
3509 && a->expr->ts.type == BT_UNKNOWN)
3511 has_null_arg = true;
3512 null_expr_loc = a->expr->where;
3513 break;
3516 for (; intr; intr = intr->next)
3518 if (intr->sym->attr.flavor == FL_DERIVED)
3519 continue;
3520 if (sub_flag && intr->sym->attr.function)
3521 continue;
3522 if (!sub_flag && intr->sym->attr.subroutine)
3523 continue;
3525 if (gfc_arglist_matches_symbol (ap, intr->sym))
3527 if (has_null_arg && null_sym)
3529 gfc_error ("MOLD= required in NULL() argument at %L: Ambiguity "
3530 "between specific functions %s and %s",
3531 &null_expr_loc, null_sym->name, intr->sym->name);
3532 return NULL;
3534 else if (has_null_arg)
3536 null_sym = intr->sym;
3537 continue;
3540 /* Satisfy 12.4.4.1 such that an elemental match has lower
3541 weight than a non-elemental match. */
3542 if (intr->sym->attr.elemental)
3544 elem_sym = intr->sym;
3545 continue;
3547 return intr->sym;
3551 if (null_sym)
3552 return null_sym;
3554 return elem_sym ? elem_sym : NULL;
3558 /* Do a brute force recursive search for a symbol. */
3560 static gfc_symtree *
3561 find_symtree0 (gfc_symtree *root, gfc_symbol *sym)
3563 gfc_symtree * st;
3565 if (root->n.sym == sym)
3566 return root;
3568 st = NULL;
3569 if (root->left)
3570 st = find_symtree0 (root->left, sym);
3571 if (root->right && ! st)
3572 st = find_symtree0 (root->right, sym);
3573 return st;
3577 /* Find a symtree for a symbol. */
3579 gfc_symtree *
3580 gfc_find_sym_in_symtree (gfc_symbol *sym)
3582 gfc_symtree *st;
3583 gfc_namespace *ns;
3585 /* First try to find it by name. */
3586 gfc_find_sym_tree (sym->name, gfc_current_ns, 1, &st);
3587 if (st && st->n.sym == sym)
3588 return st;
3590 /* If it's been renamed, resort to a brute-force search. */
3591 /* TODO: avoid having to do this search. If the symbol doesn't exist
3592 in the symtree for the current namespace, it should probably be added. */
3593 for (ns = gfc_current_ns; ns; ns = ns->parent)
3595 st = find_symtree0 (ns->sym_root, sym);
3596 if (st)
3597 return st;
3599 gfc_internal_error ("Unable to find symbol %qs", sym->name);
3600 /* Not reached. */
3604 /* See if the arglist to an operator-call contains a derived-type argument
3605 with a matching type-bound operator. If so, return the matching specific
3606 procedure defined as operator-target as well as the base-object to use
3607 (which is the found derived-type argument with operator). The generic
3608 name, if any, is transmitted to the final expression via 'gname'. */
3610 static gfc_typebound_proc*
3611 matching_typebound_op (gfc_expr** tb_base,
3612 gfc_actual_arglist* args,
3613 gfc_intrinsic_op op, const char* uop,
3614 const char ** gname)
3616 gfc_actual_arglist* base;
3618 for (base = args; base; base = base->next)
3619 if (base->expr->ts.type == BT_DERIVED || base->expr->ts.type == BT_CLASS)
3621 gfc_typebound_proc* tb;
3622 gfc_symbol* derived;
3623 bool result;
3625 while (base->expr->expr_type == EXPR_OP
3626 && base->expr->value.op.op == INTRINSIC_PARENTHESES)
3627 base->expr = base->expr->value.op.op1;
3629 if (base->expr->ts.type == BT_CLASS)
3631 if (CLASS_DATA (base->expr) == NULL
3632 || !gfc_expr_attr (base->expr).class_ok)
3633 continue;
3634 derived = CLASS_DATA (base->expr)->ts.u.derived;
3636 else
3637 derived = base->expr->ts.u.derived;
3639 if (op == INTRINSIC_USER)
3641 gfc_symtree* tb_uop;
3643 gcc_assert (uop);
3644 tb_uop = gfc_find_typebound_user_op (derived, &result, uop,
3645 false, NULL);
3647 if (tb_uop)
3648 tb = tb_uop->n.tb;
3649 else
3650 tb = NULL;
3652 else
3653 tb = gfc_find_typebound_intrinsic_op (derived, &result, op,
3654 false, NULL);
3656 /* This means we hit a PRIVATE operator which is use-associated and
3657 should thus not be seen. */
3658 if (!result)
3659 tb = NULL;
3661 /* Look through the super-type hierarchy for a matching specific
3662 binding. */
3663 for (; tb; tb = tb->overridden)
3665 gfc_tbp_generic* g;
3667 gcc_assert (tb->is_generic);
3668 for (g = tb->u.generic; g; g = g->next)
3670 gfc_symbol* target;
3671 gfc_actual_arglist* argcopy;
3672 bool matches;
3674 gcc_assert (g->specific);
3675 if (g->specific->error)
3676 continue;
3678 target = g->specific->u.specific->n.sym;
3680 /* Check if this arglist matches the formal. */
3681 argcopy = gfc_copy_actual_arglist (args);
3682 matches = gfc_arglist_matches_symbol (&argcopy, target);
3683 gfc_free_actual_arglist (argcopy);
3685 /* Return if we found a match. */
3686 if (matches)
3688 *tb_base = base->expr;
3689 *gname = g->specific_st->name;
3690 return g->specific;
3696 return NULL;
3700 /* For the 'actual arglist' of an operator call and a specific typebound
3701 procedure that has been found the target of a type-bound operator, build the
3702 appropriate EXPR_COMPCALL and resolve it. We take this indirection over
3703 type-bound procedures rather than resolving type-bound operators 'directly'
3704 so that we can reuse the existing logic. */
3706 static void
3707 build_compcall_for_operator (gfc_expr* e, gfc_actual_arglist* actual,
3708 gfc_expr* base, gfc_typebound_proc* target,
3709 const char *gname)
3711 e->expr_type = EXPR_COMPCALL;
3712 e->value.compcall.tbp = target;
3713 e->value.compcall.name = gname ? gname : "$op";
3714 e->value.compcall.actual = actual;
3715 e->value.compcall.base_object = base;
3716 e->value.compcall.ignore_pass = 1;
3717 e->value.compcall.assign = 0;
3718 if (e->ts.type == BT_UNKNOWN
3719 && target->function)
3721 if (target->is_generic)
3722 e->ts = target->u.generic->specific->u.specific->n.sym->ts;
3723 else
3724 e->ts = target->u.specific->n.sym->ts;
3729 /* This subroutine is called when an expression is being resolved.
3730 The expression node in question is either a user defined operator
3731 or an intrinsic operator with arguments that aren't compatible
3732 with the operator. This subroutine builds an actual argument list
3733 corresponding to the operands, then searches for a compatible
3734 interface. If one is found, the expression node is replaced with
3735 the appropriate function call. We use the 'match' enum to specify
3736 whether a replacement has been made or not, or if an error occurred. */
3738 match
3739 gfc_extend_expr (gfc_expr *e)
3741 gfc_actual_arglist *actual;
3742 gfc_symbol *sym;
3743 gfc_namespace *ns;
3744 gfc_user_op *uop;
3745 gfc_intrinsic_op i;
3746 const char *gname;
3747 gfc_typebound_proc* tbo;
3748 gfc_expr* tb_base;
3750 sym = NULL;
3752 actual = gfc_get_actual_arglist ();
3753 actual->expr = e->value.op.op1;
3755 gname = NULL;
3757 if (e->value.op.op2 != NULL)
3759 actual->next = gfc_get_actual_arglist ();
3760 actual->next->expr = e->value.op.op2;
3763 i = fold_unary_intrinsic (e->value.op.op);
3765 /* See if we find a matching type-bound operator. */
3766 if (i == INTRINSIC_USER)
3767 tbo = matching_typebound_op (&tb_base, actual,
3768 i, e->value.op.uop->name, &gname);
3769 else
3770 switch (i)
3772 #define CHECK_OS_COMPARISON(comp) \
3773 case INTRINSIC_##comp: \
3774 case INTRINSIC_##comp##_OS: \
3775 tbo = matching_typebound_op (&tb_base, actual, \
3776 INTRINSIC_##comp, NULL, &gname); \
3777 if (!tbo) \
3778 tbo = matching_typebound_op (&tb_base, actual, \
3779 INTRINSIC_##comp##_OS, NULL, &gname); \
3780 break;
3781 CHECK_OS_COMPARISON(EQ)
3782 CHECK_OS_COMPARISON(NE)
3783 CHECK_OS_COMPARISON(GT)
3784 CHECK_OS_COMPARISON(GE)
3785 CHECK_OS_COMPARISON(LT)
3786 CHECK_OS_COMPARISON(LE)
3787 #undef CHECK_OS_COMPARISON
3789 default:
3790 tbo = matching_typebound_op (&tb_base, actual, i, NULL, &gname);
3791 break;
3794 /* If there is a matching typebound-operator, replace the expression with
3795 a call to it and succeed. */
3796 if (tbo)
3798 gcc_assert (tb_base);
3799 build_compcall_for_operator (e, actual, tb_base, tbo, gname);
3801 if (!gfc_resolve_expr (e))
3802 return MATCH_ERROR;
3803 else
3804 return MATCH_YES;
3807 if (i == INTRINSIC_USER)
3809 for (ns = gfc_current_ns; ns; ns = ns->parent)
3811 uop = gfc_find_uop (e->value.op.uop->name, ns);
3812 if (uop == NULL)
3813 continue;
3815 sym = gfc_search_interface (uop->op, 0, &actual);
3816 if (sym != NULL)
3817 break;
3820 else
3822 for (ns = gfc_current_ns; ns; ns = ns->parent)
3824 /* Due to the distinction between '==' and '.eq.' and friends, one has
3825 to check if either is defined. */
3826 switch (i)
3828 #define CHECK_OS_COMPARISON(comp) \
3829 case INTRINSIC_##comp: \
3830 case INTRINSIC_##comp##_OS: \
3831 sym = gfc_search_interface (ns->op[INTRINSIC_##comp], 0, &actual); \
3832 if (!sym) \
3833 sym = gfc_search_interface (ns->op[INTRINSIC_##comp##_OS], 0, &actual); \
3834 break;
3835 CHECK_OS_COMPARISON(EQ)
3836 CHECK_OS_COMPARISON(NE)
3837 CHECK_OS_COMPARISON(GT)
3838 CHECK_OS_COMPARISON(GE)
3839 CHECK_OS_COMPARISON(LT)
3840 CHECK_OS_COMPARISON(LE)
3841 #undef CHECK_OS_COMPARISON
3843 default:
3844 sym = gfc_search_interface (ns->op[i], 0, &actual);
3847 if (sym != NULL)
3848 break;
3852 /* TODO: Do an ambiguity-check and error if multiple matching interfaces are
3853 found rather than just taking the first one and not checking further. */
3855 if (sym == NULL)
3857 /* Don't use gfc_free_actual_arglist(). */
3858 free (actual->next);
3859 free (actual);
3860 return MATCH_NO;
3863 /* Change the expression node to a function call. */
3864 e->expr_type = EXPR_FUNCTION;
3865 e->symtree = gfc_find_sym_in_symtree (sym);
3866 e->value.function.actual = actual;
3867 e->value.function.esym = NULL;
3868 e->value.function.isym = NULL;
3869 e->value.function.name = NULL;
3870 e->user_operator = 1;
3872 if (!gfc_resolve_expr (e))
3873 return MATCH_ERROR;
3875 return MATCH_YES;
3879 /* Tries to replace an assignment code node with a subroutine call to the
3880 subroutine associated with the assignment operator. Return true if the node
3881 was replaced. On false, no error is generated. */
3883 bool
3884 gfc_extend_assign (gfc_code *c, gfc_namespace *ns)
3886 gfc_actual_arglist *actual;
3887 gfc_expr *lhs, *rhs, *tb_base;
3888 gfc_symbol *sym = NULL;
3889 const char *gname = NULL;
3890 gfc_typebound_proc* tbo;
3892 lhs = c->expr1;
3893 rhs = c->expr2;
3895 /* Don't allow an intrinsic assignment to be replaced. */
3896 if (lhs->ts.type != BT_DERIVED && lhs->ts.type != BT_CLASS
3897 && (rhs->rank == 0 || rhs->rank == lhs->rank)
3898 && (lhs->ts.type == rhs->ts.type
3899 || (gfc_numeric_ts (&lhs->ts) && gfc_numeric_ts (&rhs->ts))))
3900 return false;
3902 actual = gfc_get_actual_arglist ();
3903 actual->expr = lhs;
3905 actual->next = gfc_get_actual_arglist ();
3906 actual->next->expr = rhs;
3908 /* TODO: Ambiguity-check, see above for gfc_extend_expr. */
3910 /* See if we find a matching type-bound assignment. */
3911 tbo = matching_typebound_op (&tb_base, actual, INTRINSIC_ASSIGN,
3912 NULL, &gname);
3914 if (tbo)
3916 /* Success: Replace the expression with a type-bound call. */
3917 gcc_assert (tb_base);
3918 c->expr1 = gfc_get_expr ();
3919 build_compcall_for_operator (c->expr1, actual, tb_base, tbo, gname);
3920 c->expr1->value.compcall.assign = 1;
3921 c->expr1->where = c->loc;
3922 c->expr2 = NULL;
3923 c->op = EXEC_COMPCALL;
3924 return true;
3927 /* See if we find an 'ordinary' (non-typebound) assignment procedure. */
3928 for (; ns; ns = ns->parent)
3930 sym = gfc_search_interface (ns->op[INTRINSIC_ASSIGN], 1, &actual);
3931 if (sym != NULL)
3932 break;
3935 if (sym)
3937 /* Success: Replace the assignment with the call. */
3938 c->op = EXEC_ASSIGN_CALL;
3939 c->symtree = gfc_find_sym_in_symtree (sym);
3940 c->expr1 = NULL;
3941 c->expr2 = NULL;
3942 c->ext.actual = actual;
3943 return true;
3946 /* Failure: No assignment procedure found. */
3947 free (actual->next);
3948 free (actual);
3949 return false;
3953 /* Make sure that the interface just parsed is not already present in
3954 the given interface list. Ambiguity isn't checked yet since module
3955 procedures can be present without interfaces. */
3957 bool
3958 gfc_check_new_interface (gfc_interface *base, gfc_symbol *new_sym, locus loc)
3960 gfc_interface *ip;
3962 for (ip = base; ip; ip = ip->next)
3964 if (ip->sym == new_sym)
3966 gfc_error ("Entity %qs at %L is already present in the interface",
3967 new_sym->name, &loc);
3968 return false;
3972 return true;
3976 /* Add a symbol to the current interface. */
3978 bool
3979 gfc_add_interface (gfc_symbol *new_sym)
3981 gfc_interface **head, *intr;
3982 gfc_namespace *ns;
3983 gfc_symbol *sym;
3985 switch (current_interface.type)
3987 case INTERFACE_NAMELESS:
3988 case INTERFACE_ABSTRACT:
3989 return true;
3991 case INTERFACE_INTRINSIC_OP:
3992 for (ns = current_interface.ns; ns; ns = ns->parent)
3993 switch (current_interface.op)
3995 case INTRINSIC_EQ:
3996 case INTRINSIC_EQ_OS:
3997 if (!gfc_check_new_interface (ns->op[INTRINSIC_EQ], new_sym,
3998 gfc_current_locus)
3999 || !gfc_check_new_interface (ns->op[INTRINSIC_EQ_OS],
4000 new_sym, gfc_current_locus))
4001 return false;
4002 break;
4004 case INTRINSIC_NE:
4005 case INTRINSIC_NE_OS:
4006 if (!gfc_check_new_interface (ns->op[INTRINSIC_NE], new_sym,
4007 gfc_current_locus)
4008 || !gfc_check_new_interface (ns->op[INTRINSIC_NE_OS],
4009 new_sym, gfc_current_locus))
4010 return false;
4011 break;
4013 case INTRINSIC_GT:
4014 case INTRINSIC_GT_OS:
4015 if (!gfc_check_new_interface (ns->op[INTRINSIC_GT],
4016 new_sym, gfc_current_locus)
4017 || !gfc_check_new_interface (ns->op[INTRINSIC_GT_OS],
4018 new_sym, gfc_current_locus))
4019 return false;
4020 break;
4022 case INTRINSIC_GE:
4023 case INTRINSIC_GE_OS:
4024 if (!gfc_check_new_interface (ns->op[INTRINSIC_GE],
4025 new_sym, gfc_current_locus)
4026 || !gfc_check_new_interface (ns->op[INTRINSIC_GE_OS],
4027 new_sym, gfc_current_locus))
4028 return false;
4029 break;
4031 case INTRINSIC_LT:
4032 case INTRINSIC_LT_OS:
4033 if (!gfc_check_new_interface (ns->op[INTRINSIC_LT],
4034 new_sym, gfc_current_locus)
4035 || !gfc_check_new_interface (ns->op[INTRINSIC_LT_OS],
4036 new_sym, gfc_current_locus))
4037 return false;
4038 break;
4040 case INTRINSIC_LE:
4041 case INTRINSIC_LE_OS:
4042 if (!gfc_check_new_interface (ns->op[INTRINSIC_LE],
4043 new_sym, gfc_current_locus)
4044 || !gfc_check_new_interface (ns->op[INTRINSIC_LE_OS],
4045 new_sym, gfc_current_locus))
4046 return false;
4047 break;
4049 default:
4050 if (!gfc_check_new_interface (ns->op[current_interface.op],
4051 new_sym, gfc_current_locus))
4052 return false;
4055 head = &current_interface.ns->op[current_interface.op];
4056 break;
4058 case INTERFACE_GENERIC:
4059 for (ns = current_interface.ns; ns; ns = ns->parent)
4061 gfc_find_symbol (current_interface.sym->name, ns, 0, &sym);
4062 if (sym == NULL)
4063 continue;
4065 if (!gfc_check_new_interface (sym->generic,
4066 new_sym, gfc_current_locus))
4067 return false;
4070 head = &current_interface.sym->generic;
4071 break;
4073 case INTERFACE_USER_OP:
4074 if (!gfc_check_new_interface (current_interface.uop->op,
4075 new_sym, gfc_current_locus))
4076 return false;
4078 head = &current_interface.uop->op;
4079 break;
4081 default:
4082 gfc_internal_error ("gfc_add_interface(): Bad interface type");
4085 intr = gfc_get_interface ();
4086 intr->sym = new_sym;
4087 intr->where = gfc_current_locus;
4089 intr->next = *head;
4090 *head = intr;
4092 return true;
4096 gfc_interface *
4097 gfc_current_interface_head (void)
4099 switch (current_interface.type)
4101 case INTERFACE_INTRINSIC_OP:
4102 return current_interface.ns->op[current_interface.op];
4103 break;
4105 case INTERFACE_GENERIC:
4106 return current_interface.sym->generic;
4107 break;
4109 case INTERFACE_USER_OP:
4110 return current_interface.uop->op;
4111 break;
4113 default:
4114 gcc_unreachable ();
4119 void
4120 gfc_set_current_interface_head (gfc_interface *i)
4122 switch (current_interface.type)
4124 case INTERFACE_INTRINSIC_OP:
4125 current_interface.ns->op[current_interface.op] = i;
4126 break;
4128 case INTERFACE_GENERIC:
4129 current_interface.sym->generic = i;
4130 break;
4132 case INTERFACE_USER_OP:
4133 current_interface.uop->op = i;
4134 break;
4136 default:
4137 gcc_unreachable ();
4142 /* Gets rid of a formal argument list. We do not free symbols.
4143 Symbols are freed when a namespace is freed. */
4145 void
4146 gfc_free_formal_arglist (gfc_formal_arglist *p)
4148 gfc_formal_arglist *q;
4150 for (; p; p = q)
4152 q = p->next;
4153 free (p);
4158 /* Check that it is ok for the type-bound procedure 'proc' to override the
4159 procedure 'old', cf. F08:4.5.7.3. */
4161 bool
4162 gfc_check_typebound_override (gfc_symtree* proc, gfc_symtree* old)
4164 locus where;
4165 gfc_symbol *proc_target, *old_target;
4166 unsigned proc_pass_arg, old_pass_arg, argpos;
4167 gfc_formal_arglist *proc_formal, *old_formal;
4168 bool check_type;
4169 char err[200];
4171 /* This procedure should only be called for non-GENERIC proc. */
4172 gcc_assert (!proc->n.tb->is_generic);
4174 /* If the overwritten procedure is GENERIC, this is an error. */
4175 if (old->n.tb->is_generic)
4177 gfc_error ("Can't overwrite GENERIC %qs at %L",
4178 old->name, &proc->n.tb->where);
4179 return false;
4182 where = proc->n.tb->where;
4183 proc_target = proc->n.tb->u.specific->n.sym;
4184 old_target = old->n.tb->u.specific->n.sym;
4186 /* Check that overridden binding is not NON_OVERRIDABLE. */
4187 if (old->n.tb->non_overridable)
4189 gfc_error ("%qs at %L overrides a procedure binding declared"
4190 " NON_OVERRIDABLE", proc->name, &where);
4191 return false;
4194 /* It's an error to override a non-DEFERRED procedure with a DEFERRED one. */
4195 if (!old->n.tb->deferred && proc->n.tb->deferred)
4197 gfc_error ("%qs at %L must not be DEFERRED as it overrides a"
4198 " non-DEFERRED binding", proc->name, &where);
4199 return false;
4202 /* If the overridden binding is PURE, the overriding must be, too. */
4203 if (old_target->attr.pure && !proc_target->attr.pure)
4205 gfc_error ("%qs at %L overrides a PURE procedure and must also be PURE",
4206 proc->name, &where);
4207 return false;
4210 /* If the overridden binding is ELEMENTAL, the overriding must be, too. If it
4211 is not, the overriding must not be either. */
4212 if (old_target->attr.elemental && !proc_target->attr.elemental)
4214 gfc_error ("%qs at %L overrides an ELEMENTAL procedure and must also be"
4215 " ELEMENTAL", proc->name, &where);
4216 return false;
4218 if (!old_target->attr.elemental && proc_target->attr.elemental)
4220 gfc_error ("%qs at %L overrides a non-ELEMENTAL procedure and must not"
4221 " be ELEMENTAL, either", proc->name, &where);
4222 return false;
4225 /* If the overridden binding is a SUBROUTINE, the overriding must also be a
4226 SUBROUTINE. */
4227 if (old_target->attr.subroutine && !proc_target->attr.subroutine)
4229 gfc_error ("%qs at %L overrides a SUBROUTINE and must also be a"
4230 " SUBROUTINE", proc->name, &where);
4231 return false;
4234 /* If the overridden binding is a FUNCTION, the overriding must also be a
4235 FUNCTION and have the same characteristics. */
4236 if (old_target->attr.function)
4238 if (!proc_target->attr.function)
4240 gfc_error ("%qs at %L overrides a FUNCTION and must also be a"
4241 " FUNCTION", proc->name, &where);
4242 return false;
4245 if (!check_result_characteristics (proc_target, old_target, err,
4246 sizeof(err)))
4248 gfc_error ("Result mismatch for the overriding procedure "
4249 "%qs at %L: %s", proc->name, &where, err);
4250 return false;
4254 /* If the overridden binding is PUBLIC, the overriding one must not be
4255 PRIVATE. */
4256 if (old->n.tb->access == ACCESS_PUBLIC
4257 && proc->n.tb->access == ACCESS_PRIVATE)
4259 gfc_error ("%qs at %L overrides a PUBLIC procedure and must not be"
4260 " PRIVATE", proc->name, &where);
4261 return false;
4264 /* Compare the formal argument lists of both procedures. This is also abused
4265 to find the position of the passed-object dummy arguments of both
4266 bindings as at least the overridden one might not yet be resolved and we
4267 need those positions in the check below. */
4268 proc_pass_arg = old_pass_arg = 0;
4269 if (!proc->n.tb->nopass && !proc->n.tb->pass_arg)
4270 proc_pass_arg = 1;
4271 if (!old->n.tb->nopass && !old->n.tb->pass_arg)
4272 old_pass_arg = 1;
4273 argpos = 1;
4274 proc_formal = gfc_sym_get_dummy_args (proc_target);
4275 old_formal = gfc_sym_get_dummy_args (old_target);
4276 for ( ; proc_formal && old_formal;
4277 proc_formal = proc_formal->next, old_formal = old_formal->next)
4279 if (proc->n.tb->pass_arg
4280 && !strcmp (proc->n.tb->pass_arg, proc_formal->sym->name))
4281 proc_pass_arg = argpos;
4282 if (old->n.tb->pass_arg
4283 && !strcmp (old->n.tb->pass_arg, old_formal->sym->name))
4284 old_pass_arg = argpos;
4286 /* Check that the names correspond. */
4287 if (strcmp (proc_formal->sym->name, old_formal->sym->name))
4289 gfc_error ("Dummy argument %qs of %qs at %L should be named %qs as"
4290 " to match the corresponding argument of the overridden"
4291 " procedure", proc_formal->sym->name, proc->name, &where,
4292 old_formal->sym->name);
4293 return false;
4296 check_type = proc_pass_arg != argpos && old_pass_arg != argpos;
4297 if (!check_dummy_characteristics (proc_formal->sym, old_formal->sym,
4298 check_type, err, sizeof(err)))
4300 gfc_error ("Argument mismatch for the overriding procedure "
4301 "%qs at %L: %s", proc->name, &where, err);
4302 return false;
4305 ++argpos;
4307 if (proc_formal || old_formal)
4309 gfc_error ("%qs at %L must have the same number of formal arguments as"
4310 " the overridden procedure", proc->name, &where);
4311 return false;
4314 /* If the overridden binding is NOPASS, the overriding one must also be
4315 NOPASS. */
4316 if (old->n.tb->nopass && !proc->n.tb->nopass)
4318 gfc_error ("%qs at %L overrides a NOPASS binding and must also be"
4319 " NOPASS", proc->name, &where);
4320 return false;
4323 /* If the overridden binding is PASS(x), the overriding one must also be
4324 PASS and the passed-object dummy arguments must correspond. */
4325 if (!old->n.tb->nopass)
4327 if (proc->n.tb->nopass)
4329 gfc_error ("%qs at %L overrides a binding with PASS and must also be"
4330 " PASS", proc->name, &where);
4331 return false;
4334 if (proc_pass_arg != old_pass_arg)
4336 gfc_error ("Passed-object dummy argument of %qs at %L must be at"
4337 " the same position as the passed-object dummy argument of"
4338 " the overridden procedure", proc->name, &where);
4339 return false;
4343 return true;