1 /* Deal with interfaces.
2 Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009,
4 Free Software Foundation, Inc.
5 Contributed by Andy Vaught
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify it under
10 the terms of the GNU General Public License as published by the Free
11 Software Foundation; either version 3, or (at your option) any later
14 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15 WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
24 /* Deal with interfaces. An explicit interface is represented as a
25 singly linked list of formal argument structures attached to the
26 relevant symbols. For an implicit interface, the arguments don't
27 point to symbols. Explicit interfaces point to namespaces that
28 contain the symbols within that interface.
30 Implicit interfaces are linked together in a singly linked list
31 along the next_if member of symbol nodes. Since a particular
32 symbol can only have a single explicit interface, the symbol cannot
33 be part of multiple lists and a single next-member suffices.
35 This is not the case for general classes, though. An operator
36 definition is independent of just about all other uses and has it's
40 Nameless interfaces create symbols with explicit interfaces within
41 the current namespace. They are otherwise unlinked.
44 The generic name points to a linked list of symbols. Each symbol
45 has an explicit interface. Each explicit interface has its own
46 namespace containing the arguments. Module procedures are symbols in
47 which the interface is added later when the module procedure is parsed.
50 User-defined operators are stored in a their own set of symtrees
51 separate from regular symbols. The symtrees point to gfc_user_op
52 structures which in turn head up a list of relevant interfaces.
54 Extended intrinsics and assignment:
55 The head of these interface lists are stored in the containing namespace.
58 An implicit interface is represented as a singly linked list of
59 formal argument list structures that don't point to any symbol
60 nodes -- they just contain types.
63 When a subprogram is defined, the program unit's name points to an
64 interface as usual, but the link to the namespace is NULL and the
65 formal argument list points to symbols within the same namespace as
66 the program unit name. */
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. */
84 gfc_free_interface (gfc_interface *intr)
88 for (; intr; intr = next)
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)
104 case INTRINSIC_UPLUS:
107 case INTRINSIC_UMINUS:
108 op = INTRINSIC_MINUS;
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. */
123 gfc_match_generic_spec (interface_type *type,
125 gfc_intrinsic_op *op)
127 char buffer[GFC_MAX_SYMBOL_LEN + 1];
131 if (gfc_match (" assignment ( = )") == MATCH_YES)
133 *type = INTERFACE_INTRINSIC_OP;
134 *op = INTRINSIC_ASSIGN;
138 if (gfc_match (" operator ( %o )", &i) == MATCH_YES)
140 *type = INTERFACE_INTRINSIC_OP;
141 *op = fold_unary_intrinsic (i);
145 *op = INTRINSIC_NONE;
146 if (gfc_match (" operator ( ") == MATCH_YES)
148 m = gfc_match_defined_op_name (buffer, 1);
154 m = gfc_match_char (')');
160 strcpy (name, buffer);
161 *type = INTERFACE_USER_OP;
165 if (gfc_match_name (buffer) == MATCH_YES)
167 strcpy (name, buffer);
168 *type = INTERFACE_GENERIC;
172 *type = INTERFACE_NAMELESS;
176 gfc_error ("Syntax error in generic specification at %C");
181 /* Match one of the five F95 forms of an interface statement. The
182 matcher for the abstract interface follows. */
185 gfc_match_interface (void)
187 char name[GFC_MAX_SYMBOL_LEN + 1];
193 m = gfc_match_space ();
195 if (gfc_match_generic_spec (&type, name, &op) == 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 "
208 current_interface.type = type;
212 case INTERFACE_GENERIC:
213 if (gfc_get_symbol (name, NULL, &sym))
216 if (!sym->attr.generic
217 && gfc_add_generic (&sym->attr, sym->name, NULL) == FAILURE)
222 gfc_error ("Dummy procedure '%s' at %C cannot have a "
223 "generic interface", sym->name);
227 current_interface.sym = gfc_new_block = sym;
230 case INTERFACE_USER_OP:
231 current_interface.uop = gfc_get_uop (name);
234 case INTERFACE_INTRINSIC_OP:
235 current_interface.op = op;
238 case INTERFACE_NAMELESS:
239 case INTERFACE_ABSTRACT:
248 /* Match a F2003 abstract interface. */
251 gfc_match_abstract_interface (void)
255 if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: ABSTRACT INTERFACE at %C")
259 m = gfc_match_eos ();
263 gfc_error ("Syntax error in ABSTRACT INTERFACE statement at %C");
267 current_interface.type = INTERFACE_ABSTRACT;
273 /* Match the different sort of generic-specs that can be present after
274 the END INTERFACE itself. */
277 gfc_match_end_interface (void)
279 char name[GFC_MAX_SYMBOL_LEN + 1];
284 m = gfc_match_space ();
286 if (gfc_match_generic_spec (&type, name, &op) == MATCH_ERROR)
289 /* If we're not looking at the end of the statement now, or if this
290 is not a nameless interface but we did not see a space, punt. */
291 if (gfc_match_eos () != MATCH_YES
292 || (type != INTERFACE_NAMELESS && m != MATCH_YES))
294 gfc_error ("Syntax error: Trailing garbage in END INTERFACE "
301 switch (current_interface.type)
303 case INTERFACE_NAMELESS:
304 case INTERFACE_ABSTRACT:
305 if (type != INTERFACE_NAMELESS)
307 gfc_error ("Expected a nameless interface at %C");
313 case INTERFACE_INTRINSIC_OP:
314 if (type != current_interface.type || op != current_interface.op)
317 if (current_interface.op == INTRINSIC_ASSIGN)
320 gfc_error ("Expected 'END INTERFACE ASSIGNMENT (=)' at %C");
325 s1 = gfc_op2string (current_interface.op);
326 s2 = gfc_op2string (op);
328 /* The following if-statements are used to enforce C1202
330 if ((strcmp(s1, "==") == 0 && strcmp(s2, ".eq.") == 0)
331 || (strcmp(s1, ".eq.") == 0 && strcmp(s2, "==") == 0))
333 if ((strcmp(s1, "/=") == 0 && strcmp(s2, ".ne.") == 0)
334 || (strcmp(s1, ".ne.") == 0 && strcmp(s2, "/=") == 0))
336 if ((strcmp(s1, "<=") == 0 && strcmp(s2, ".le.") == 0)
337 || (strcmp(s1, ".le.") == 0 && strcmp(s2, "<=") == 0))
339 if ((strcmp(s1, "<") == 0 && strcmp(s2, ".lt.") == 0)
340 || (strcmp(s1, ".lt.") == 0 && strcmp(s2, "<") == 0))
342 if ((strcmp(s1, ">=") == 0 && strcmp(s2, ".ge.") == 0)
343 || (strcmp(s1, ".ge.") == 0 && strcmp(s2, ">=") == 0))
345 if ((strcmp(s1, ">") == 0 && strcmp(s2, ".gt.") == 0)
346 || (strcmp(s1, ".gt.") == 0 && strcmp(s2, ">") == 0))
350 gfc_error ("Expecting 'END INTERFACE OPERATOR (%s)' at %C, "
351 "but got %s", s1, s2);
358 case INTERFACE_USER_OP:
359 /* Comparing the symbol node names is OK because only use-associated
360 symbols can be renamed. */
361 if (type != current_interface.type
362 || strcmp (current_interface.uop->name, name) != 0)
364 gfc_error ("Expecting 'END INTERFACE OPERATOR (.%s.)' at %C",
365 current_interface.uop->name);
371 case INTERFACE_GENERIC:
372 if (type != current_interface.type
373 || strcmp (current_interface.sym->name, name) != 0)
375 gfc_error ("Expecting 'END INTERFACE %s' at %C",
376 current_interface.sym->name);
387 /* Compare two derived types using the criteria in 4.4.2 of the standard,
388 recursing through gfc_compare_types for the components. */
391 gfc_compare_derived_types (gfc_symbol *derived1, gfc_symbol *derived2)
393 gfc_component *dt1, *dt2;
395 if (derived1 == derived2)
398 /* Special case for comparing derived types across namespaces. If the
399 true names and module names are the same and the module name is
400 nonnull, then they are equal. */
401 if (derived1 != NULL && derived2 != NULL
402 && strcmp (derived1->name, derived2->name) == 0
403 && derived1->module != NULL && derived2->module != NULL
404 && strcmp (derived1->module, derived2->module) == 0)
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))
413 if (derived1->component_access == ACCESS_PRIVATE
414 || derived2->component_access == ACCESS_PRIVATE)
417 if (!(derived1->attr.sequence && derived2->attr.sequence)
418 && !(derived1->attr.is_bind_c && derived2->attr.is_bind_c))
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
429 if (strcmp (dt1->name, dt2->name) != 0)
432 if (dt1->attr.access != dt2->attr.access)
435 if (dt1->attr.pointer != dt2->attr.pointer)
438 if (dt1->attr.dimension != dt2->attr.dimension)
441 if (dt1->attr.allocatable != dt2->attr.allocatable)
444 if (dt1->attr.dimension && gfc_compare_array_spec (dt1->as, dt2->as) == 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 && !(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived)
451 && gfc_compare_types (&dt1->ts, &dt2->ts) == 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))
458 else if (!(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived)
459 && (dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived))
465 if (dt1 == NULL && dt2 == NULL)
467 if (dt1 == NULL || dt2 == NULL)
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)
487 if (ts1->type != ts2->type
488 && ((ts1->type != BT_DERIVED && ts1->type != BT_CLASS)
489 || (ts2->type != BT_DERIVED && ts2->type != BT_CLASS)))
491 if (ts1->type != BT_DERIVED && ts1->type != BT_CLASS)
492 return (ts1->kind == ts2->kind);
494 /* Compare derived types. */
495 if (gfc_type_compatible (ts1, ts2))
498 return gfc_compare_derived_types (ts1->u.derived ,ts2->u.derived);
502 /* Given two symbols that are formal arguments, compare their ranks
503 and types. Returns nonzero if they have the same rank and type,
507 compare_type_rank (gfc_symbol *s1, gfc_symbol *s2)
511 r1 = (s1->as != NULL) ? s1->as->rank : 0;
512 r2 = (s2->as != NULL) ? s2->as->rank : 0;
515 return 0; /* Ranks differ. */
517 return gfc_compare_types (&s1->ts, &s2->ts);
521 /* Given two symbols that are formal arguments, compare their types
522 and rank and their formal interfaces if they are both dummy
523 procedures. Returns nonzero if the same, zero if different. */
526 compare_type_rank_if (gfc_symbol *s1, gfc_symbol *s2)
528 if (s1 == NULL || s2 == NULL)
529 return s1 == s2 ? 1 : 0;
534 if (s1->attr.flavor != FL_PROCEDURE && s2->attr.flavor != FL_PROCEDURE)
535 return compare_type_rank (s1, s2);
537 if (s1->attr.flavor != FL_PROCEDURE || s2->attr.flavor != FL_PROCEDURE)
540 /* At this point, both symbols are procedures. It can happen that
541 external procedures are compared, where one is identified by usage
542 to be a function or subroutine but the other is not. Check TKR
543 nonetheless for these cases. */
544 if (s1->attr.function == 0 && s1->attr.subroutine == 0)
545 return s1->attr.external == 1 ? compare_type_rank (s1, s2) : 0;
547 if (s2->attr.function == 0 && s2->attr.subroutine == 0)
548 return s2->attr.external == 1 ? compare_type_rank (s1, s2) : 0;
550 /* Now the type of procedure has been identified. */
551 if (s1->attr.function != s2->attr.function
552 || s1->attr.subroutine != s2->attr.subroutine)
555 if (s1->attr.function && compare_type_rank (s1, s2) == 0)
558 /* Originally, gfortran recursed here to check the interfaces of passed
559 procedures. This is explicitly not required by the standard. */
564 /* Given a formal argument list and a keyword name, search the list
565 for that keyword. Returns the correct symbol node if found, NULL
569 find_keyword_arg (const char *name, gfc_formal_arglist *f)
571 for (; f; f = f->next)
572 if (strcmp (f->sym->name, name) == 0)
579 /******** Interface checking subroutines **********/
582 /* Given an operator interface and the operator, make sure that all
583 interfaces for that operator are legal. */
586 gfc_check_operator_interface (gfc_symbol *sym, gfc_intrinsic_op op,
589 gfc_formal_arglist *formal;
592 int args, r1, r2, k1, k2;
597 t1 = t2 = BT_UNKNOWN;
598 i1 = i2 = INTENT_UNKNOWN;
602 for (formal = sym->formal; formal; formal = formal->next)
604 gfc_symbol *fsym = formal->sym;
607 gfc_error ("Alternate return cannot appear in operator "
608 "interface at %L", &sym->declared_at);
614 i1 = fsym->attr.intent;
615 r1 = (fsym->as != NULL) ? fsym->as->rank : 0;
621 i2 = fsym->attr.intent;
622 r2 = (fsym->as != NULL) ? fsym->as->rank : 0;
628 /* Only +, - and .not. can be unary operators.
629 .not. cannot be a binary operator. */
630 if (args == 0 || args > 2 || (args == 1 && op != INTRINSIC_PLUS
631 && op != INTRINSIC_MINUS
632 && op != INTRINSIC_NOT)
633 || (args == 2 && op == INTRINSIC_NOT))
635 gfc_error ("Operator interface at %L has the wrong number of arguments",
640 /* Check that intrinsics are mapped to functions, except
641 INTRINSIC_ASSIGN which should map to a subroutine. */
642 if (op == INTRINSIC_ASSIGN)
644 if (!sym->attr.subroutine)
646 gfc_error ("Assignment operator interface at %L must be "
647 "a SUBROUTINE", &sym->declared_at);
652 gfc_error ("Assignment operator interface at %L must have "
653 "two arguments", &sym->declared_at);
657 /* Allowed are (per F2003, 12.3.2.1.2 Defined assignments):
658 - First argument an array with different rank than second,
659 - First argument is a scalar and second an array,
660 - Types and kinds do not conform, or
661 - First argument is of derived type. */
662 if (sym->formal->sym->ts.type != BT_DERIVED
663 && sym->formal->sym->ts.type != BT_CLASS
664 && (r2 == 0 || r1 == r2)
665 && (sym->formal->sym->ts.type == sym->formal->next->sym->ts.type
666 || (gfc_numeric_ts (&sym->formal->sym->ts)
667 && gfc_numeric_ts (&sym->formal->next->sym->ts))))
669 gfc_error ("Assignment operator interface at %L must not redefine "
670 "an INTRINSIC type assignment", &sym->declared_at);
676 if (!sym->attr.function)
678 gfc_error ("Intrinsic operator interface at %L must be a FUNCTION",
684 /* Check intents on operator interfaces. */
685 if (op == INTRINSIC_ASSIGN)
687 if (i1 != INTENT_OUT && i1 != INTENT_INOUT)
689 gfc_error ("First argument of defined assignment at %L must be "
690 "INTENT(OUT) or INTENT(INOUT)", &sym->declared_at);
696 gfc_error ("Second argument of defined assignment at %L must be "
697 "INTENT(IN)", &sym->declared_at);
705 gfc_error ("First argument of operator interface at %L must be "
706 "INTENT(IN)", &sym->declared_at);
710 if (args == 2 && i2 != INTENT_IN)
712 gfc_error ("Second argument of operator interface at %L must be "
713 "INTENT(IN)", &sym->declared_at);
718 /* From now on, all we have to do is check that the operator definition
719 doesn't conflict with an intrinsic operator. The rules for this
720 game are defined in 7.1.2 and 7.1.3 of both F95 and F2003 standards,
721 as well as 12.3.2.1.1 of Fortran 2003:
723 "If the operator is an intrinsic-operator (R310), the number of
724 function arguments shall be consistent with the intrinsic uses of
725 that operator, and the types, kind type parameters, or ranks of the
726 dummy arguments shall differ from those required for the intrinsic
727 operation (7.1.2)." */
729 #define IS_NUMERIC_TYPE(t) \
730 ((t) == BT_INTEGER || (t) == BT_REAL || (t) == BT_COMPLEX)
732 /* Unary ops are easy, do them first. */
733 if (op == INTRINSIC_NOT)
735 if (t1 == BT_LOGICAL)
741 if (args == 1 && (op == INTRINSIC_PLUS || op == INTRINSIC_MINUS))
743 if (IS_NUMERIC_TYPE (t1))
749 /* Character intrinsic operators have same character kind, thus
750 operator definitions with operands of different character kinds
752 if (t1 == BT_CHARACTER && t2 == BT_CHARACTER && k1 != k2)
755 /* Intrinsic operators always perform on arguments of same rank,
756 so different ranks is also always safe. (rank == 0) is an exception
757 to that, because all intrinsic operators are elemental. */
758 if (r1 != r2 && r1 != 0 && r2 != 0)
764 case INTRINSIC_EQ_OS:
766 case INTRINSIC_NE_OS:
767 if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
772 case INTRINSIC_MINUS:
773 case INTRINSIC_TIMES:
774 case INTRINSIC_DIVIDE:
775 case INTRINSIC_POWER:
776 if (IS_NUMERIC_TYPE (t1) && IS_NUMERIC_TYPE (t2))
781 case INTRINSIC_GT_OS:
783 case INTRINSIC_GE_OS:
785 case INTRINSIC_LT_OS:
787 case INTRINSIC_LE_OS:
788 if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
790 if ((t1 == BT_INTEGER || t1 == BT_REAL)
791 && (t2 == BT_INTEGER || t2 == BT_REAL))
795 case INTRINSIC_CONCAT:
796 if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
804 if (t1 == BT_LOGICAL && t2 == BT_LOGICAL)
814 #undef IS_NUMERIC_TYPE
817 gfc_error ("Operator interface at %L conflicts with intrinsic interface",
823 /* Given a pair of formal argument lists, we see if the two lists can
824 be distinguished by counting the number of nonoptional arguments of
825 a given type/rank in f1 and seeing if there are less then that
826 number of those arguments in f2 (including optional arguments).
827 Since this test is asymmetric, it has to be called twice to make it
828 symmetric. Returns nonzero if the argument lists are incompatible
829 by this test. This subroutine implements rule 1 of section
830 14.1.2.3 in the Fortran 95 standard. */
833 count_types_test (gfc_formal_arglist *f1, gfc_formal_arglist *f2)
835 int rc, ac1, ac2, i, j, k, n1;
836 gfc_formal_arglist *f;
849 for (f = f1; f; f = f->next)
852 /* Build an array of integers that gives the same integer to
853 arguments of the same type/rank. */
854 arg = XCNEWVEC (arginfo, n1);
857 for (i = 0; i < n1; i++, f = f->next)
865 for (i = 0; i < n1; i++)
867 if (arg[i].flag != -1)
870 if (arg[i].sym && arg[i].sym->attr.optional)
871 continue; /* Skip optional arguments. */
875 /* Find other nonoptional arguments of the same type/rank. */
876 for (j = i + 1; j < n1; j++)
877 if ((arg[j].sym == NULL || !arg[j].sym->attr.optional)
878 && (compare_type_rank_if (arg[i].sym, arg[j].sym)
879 || compare_type_rank_if (arg[j].sym, arg[i].sym)))
885 /* Now loop over each distinct type found in f1. */
889 for (i = 0; i < n1; i++)
891 if (arg[i].flag != k)
895 for (j = i + 1; j < n1; j++)
896 if (arg[j].flag == k)
899 /* Count the number of arguments in f2 with that type, including
900 those that are optional. */
903 for (f = f2; f; f = f->next)
904 if (compare_type_rank_if (arg[i].sym, f->sym)
905 || compare_type_rank_if (f->sym, arg[i].sym))
923 /* Perform the correspondence test in rule 2 of section 14.1.2.3.
924 Returns zero if no argument is found that satisfies rule 2, nonzero
927 This test is also not symmetric in f1 and f2 and must be called
928 twice. This test finds problems caused by sorting the actual
929 argument list with keywords. For example:
933 INTEGER :: A ; REAL :: B
937 INTEGER :: A ; REAL :: B
941 At this point, 'CALL FOO(A=1, B=1.0)' is ambiguous. */
944 generic_correspondence (gfc_formal_arglist *f1, gfc_formal_arglist *f2)
946 gfc_formal_arglist *f2_save, *g;
953 if (f1->sym->attr.optional)
956 if (f2 != NULL && (compare_type_rank (f1->sym, f2->sym)
957 || compare_type_rank (f2->sym, f1->sym)))
960 /* Now search for a disambiguating keyword argument starting at
961 the current non-match. */
962 for (g = f1; g; g = g->next)
964 if (g->sym->attr.optional)
967 sym = find_keyword_arg (g->sym->name, f2_save);
968 if (sym == NULL || !compare_type_rank (g->sym, sym))
982 /* Check if the characteristics of two dummy arguments match,
986 check_dummy_characteristics (gfc_symbol *s1, gfc_symbol *s2,
987 bool type_must_agree, char *errmsg, int err_len)
989 /* Check type and rank. */
990 if (type_must_agree && !compare_type_rank (s2, s1))
993 snprintf (errmsg, err_len, "Type/rank mismatch in argument '%s'",
999 if (s1->attr.intent != s2->attr.intent)
1001 snprintf (errmsg, err_len, "INTENT mismatch in argument '%s'",
1006 /* Check OPTIONAL attribute. */
1007 if (s1->attr.optional != s2->attr.optional)
1009 snprintf (errmsg, err_len, "OPTIONAL mismatch in argument '%s'",
1014 /* Check ALLOCATABLE attribute. */
1015 if (s1->attr.allocatable != s2->attr.allocatable)
1017 snprintf (errmsg, err_len, "ALLOCATABLE mismatch in argument '%s'",
1022 /* Check POINTER attribute. */
1023 if (s1->attr.pointer != s2->attr.pointer)
1025 snprintf (errmsg, err_len, "POINTER mismatch in argument '%s'",
1030 /* Check TARGET attribute. */
1031 if (s1->attr.target != s2->attr.target)
1033 snprintf (errmsg, err_len, "TARGET mismatch in argument '%s'",
1038 /* FIXME: Do more comprehensive testing of attributes, like e.g.
1039 ASYNCHRONOUS, CONTIGUOUS, VALUE, VOLATILE, etc. */
1041 /* Check string length. */
1042 if (s1->ts.type == BT_CHARACTER
1043 && s1->ts.u.cl && s1->ts.u.cl->length
1044 && s2->ts.u.cl && s2->ts.u.cl->length)
1046 int compval = gfc_dep_compare_expr (s1->ts.u.cl->length,
1047 s2->ts.u.cl->length);
1053 snprintf (errmsg, err_len, "Character length mismatch "
1054 "in argument '%s'", s1->name);
1058 /* FIXME: Implement a warning for this case.
1059 gfc_warning ("Possible character length mismatch in argument '%s'",
1067 gfc_internal_error ("check_dummy_characteristics: Unexpected result "
1068 "%i of gfc_dep_compare_expr", compval);
1073 /* Check array shape. */
1074 if (s1->as && s2->as)
1077 gfc_expr *shape1, *shape2;
1079 if (s1->as->type != s2->as->type)
1081 snprintf (errmsg, err_len, "Shape mismatch in argument '%s'",
1086 if (s1->as->type == AS_EXPLICIT)
1087 for (i = 0; i < s1->as->rank + s1->as->corank; i++)
1089 shape1 = gfc_subtract (gfc_copy_expr (s1->as->upper[i]),
1090 gfc_copy_expr (s1->as->lower[i]));
1091 shape2 = gfc_subtract (gfc_copy_expr (s2->as->upper[i]),
1092 gfc_copy_expr (s2->as->lower[i]));
1093 compval = gfc_dep_compare_expr (shape1, shape2);
1094 gfc_free_expr (shape1);
1095 gfc_free_expr (shape2);
1101 snprintf (errmsg, err_len, "Shape mismatch in dimension %i of "
1102 "argument '%s'", i + 1, s1->name);
1106 /* FIXME: Implement a warning for this case.
1107 gfc_warning ("Possible shape mismatch in argument '%s'",
1115 gfc_internal_error ("check_dummy_characteristics: Unexpected "
1116 "result %i of gfc_dep_compare_expr",
1127 /* 'Compare' two formal interfaces associated with a pair of symbols.
1128 We return nonzero if there exists an actual argument list that
1129 would be ambiguous between the two interfaces, zero otherwise.
1130 'strict_flag' specifies whether all the characteristics are
1131 required to match, which is not the case for ambiguity checks.*/
1134 gfc_compare_interfaces (gfc_symbol *s1, gfc_symbol *s2, const char *name2,
1135 int generic_flag, int strict_flag,
1136 char *errmsg, int err_len)
1138 gfc_formal_arglist *f1, *f2;
1140 gcc_assert (name2 != NULL);
1142 if (s1->attr.function && (s2->attr.subroutine
1143 || (!s2->attr.function && s2->ts.type == BT_UNKNOWN
1144 && gfc_get_default_type (name2, s2->ns)->type == BT_UNKNOWN)))
1147 snprintf (errmsg, err_len, "'%s' is not a function", name2);
1151 if (s1->attr.subroutine && s2->attr.function)
1154 snprintf (errmsg, err_len, "'%s' is not a subroutine", name2);
1158 /* Do strict checks on all characteristics
1159 (for dummy procedures and procedure pointer assignments). */
1160 if (!generic_flag && strict_flag)
1162 if (s1->attr.function && s2->attr.function)
1164 /* If both are functions, check result type. */
1165 if (s1->ts.type == BT_UNKNOWN)
1167 if (!compare_type_rank (s1,s2))
1170 snprintf (errmsg, err_len, "Type/rank mismatch in return value "
1175 /* FIXME: Check array bounds and string length of result. */
1178 if (s1->attr.pure && !s2->attr.pure)
1180 snprintf (errmsg, err_len, "Mismatch in PURE attribute");
1183 if (s1->attr.elemental && !s2->attr.elemental)
1185 snprintf (errmsg, err_len, "Mismatch in ELEMENTAL attribute");
1190 if (s1->attr.if_source == IFSRC_UNKNOWN
1191 || s2->attr.if_source == IFSRC_UNKNOWN)
1197 if (f1 == NULL && f2 == NULL)
1198 return 1; /* Special case: No arguments. */
1202 if (count_types_test (f1, f2) || count_types_test (f2, f1))
1204 if (generic_correspondence (f1, f2) || generic_correspondence (f2, f1))
1208 /* Perform the abbreviated correspondence test for operators (the
1209 arguments cannot be optional and are always ordered correctly).
1210 This is also done when comparing interfaces for dummy procedures and in
1211 procedure pointer assignments. */
1215 /* Check existence. */
1216 if (f1 == NULL && f2 == NULL)
1218 if (f1 == NULL || f2 == NULL)
1221 snprintf (errmsg, err_len, "'%s' has the wrong number of "
1222 "arguments", name2);
1228 /* Check all characteristics. */
1229 if (check_dummy_characteristics (f1->sym, f2->sym,
1230 true, errmsg, err_len) == FAILURE)
1233 else if (!compare_type_rank (f2->sym, f1->sym))
1235 /* Only check type and rank. */
1237 snprintf (errmsg, err_len, "Type/rank mismatch in argument '%s'",
1250 /* Given a pointer to an interface pointer, remove duplicate
1251 interfaces and make sure that all symbols are either functions
1252 or subroutines, and all of the same kind. Returns nonzero if
1253 something goes wrong. */
1256 check_interface0 (gfc_interface *p, const char *interface_name)
1258 gfc_interface *psave, *q, *qlast;
1261 for (; p; p = p->next)
1263 /* Make sure all symbols in the interface have been defined as
1264 functions or subroutines. */
1265 if (((!p->sym->attr.function && !p->sym->attr.subroutine)
1266 || !p->sym->attr.if_source)
1267 && p->sym->attr.flavor != FL_DERIVED)
1269 if (p->sym->attr.external)
1270 gfc_error ("Procedure '%s' in %s at %L has no explicit interface",
1271 p->sym->name, interface_name, &p->sym->declared_at);
1273 gfc_error ("Procedure '%s' in %s at %L is neither function nor "
1274 "subroutine", p->sym->name, interface_name,
1275 &p->sym->declared_at);
1279 /* Verify that procedures are either all SUBROUTINEs or all FUNCTIONs. */
1280 if ((psave->sym->attr.function && !p->sym->attr.function
1281 && p->sym->attr.flavor != FL_DERIVED)
1282 || (psave->sym->attr.subroutine && !p->sym->attr.subroutine))
1284 if (p->sym->attr.flavor != FL_DERIVED)
1285 gfc_error ("In %s at %L procedures must be either all SUBROUTINEs"
1286 " or all FUNCTIONs", interface_name,
1287 &p->sym->declared_at);
1289 gfc_error ("In %s at %L procedures must be all FUNCTIONs as the "
1290 "generic name is also the name of a derived type",
1291 interface_name, &p->sym->declared_at);
1295 if (p->sym->attr.proc == PROC_INTERNAL
1296 && gfc_notify_std (GFC_STD_GNU, "Extension: Internal procedure '%s' "
1297 "in %s at %L", p->sym->name, interface_name,
1298 &p->sym->declared_at) == FAILURE)
1303 /* Remove duplicate interfaces in this interface list. */
1304 for (; p; p = p->next)
1308 for (q = p->next; q;)
1310 if (p->sym != q->sym)
1317 /* Duplicate interface. */
1318 qlast->next = q->next;
1329 /* Check lists of interfaces to make sure that no two interfaces are
1330 ambiguous. Duplicate interfaces (from the same symbol) are OK here. */
1333 check_interface1 (gfc_interface *p, gfc_interface *q0,
1334 int generic_flag, const char *interface_name,
1338 for (; p; p = p->next)
1339 for (q = q0; q; q = q->next)
1341 if (p->sym == q->sym)
1342 continue; /* Duplicates OK here. */
1344 if (p->sym->name == q->sym->name && p->sym->module == q->sym->module)
1347 if (p->sym->attr.flavor != FL_DERIVED
1348 && q->sym->attr.flavor != FL_DERIVED
1349 && gfc_compare_interfaces (p->sym, q->sym, q->sym->name,
1350 generic_flag, 0, NULL, 0))
1353 gfc_error ("Ambiguous interfaces '%s' and '%s' in %s at %L",
1354 p->sym->name, q->sym->name, interface_name,
1356 else if (!p->sym->attr.use_assoc && q->sym->attr.use_assoc)
1357 gfc_warning ("Ambiguous interfaces '%s' and '%s' in %s at %L",
1358 p->sym->name, q->sym->name, interface_name,
1361 gfc_warning ("Although not referenced, '%s' has ambiguous "
1362 "interfaces at %L", interface_name, &p->where);
1370 /* Check the generic and operator interfaces of symbols to make sure
1371 that none of the interfaces conflict. The check has to be done
1372 after all of the symbols are actually loaded. */
1375 check_sym_interfaces (gfc_symbol *sym)
1377 char interface_name[100];
1380 if (sym->ns != gfc_current_ns)
1383 if (sym->generic != NULL)
1385 sprintf (interface_name, "generic interface '%s'", sym->name);
1386 if (check_interface0 (sym->generic, interface_name))
1389 for (p = sym->generic; p; p = p->next)
1391 if (p->sym->attr.mod_proc
1392 && (p->sym->attr.if_source != IFSRC_DECL
1393 || p->sym->attr.procedure))
1395 gfc_error ("'%s' at %L is not a module procedure",
1396 p->sym->name, &p->where);
1401 /* Originally, this test was applied to host interfaces too;
1402 this is incorrect since host associated symbols, from any
1403 source, cannot be ambiguous with local symbols. */
1404 check_interface1 (sym->generic, sym->generic, 1, interface_name,
1405 sym->attr.referenced || !sym->attr.use_assoc);
1411 check_uop_interfaces (gfc_user_op *uop)
1413 char interface_name[100];
1417 sprintf (interface_name, "operator interface '%s'", uop->name);
1418 if (check_interface0 (uop->op, interface_name))
1421 for (ns = gfc_current_ns; ns; ns = ns->parent)
1423 uop2 = gfc_find_uop (uop->name, ns);
1427 check_interface1 (uop->op, uop2->op, 0,
1428 interface_name, true);
1432 /* Given an intrinsic op, return an equivalent op if one exists,
1433 or INTRINSIC_NONE otherwise. */
1436 gfc_equivalent_op (gfc_intrinsic_op op)
1441 return INTRINSIC_EQ_OS;
1443 case INTRINSIC_EQ_OS:
1444 return INTRINSIC_EQ;
1447 return INTRINSIC_NE_OS;
1449 case INTRINSIC_NE_OS:
1450 return INTRINSIC_NE;
1453 return INTRINSIC_GT_OS;
1455 case INTRINSIC_GT_OS:
1456 return INTRINSIC_GT;
1459 return INTRINSIC_GE_OS;
1461 case INTRINSIC_GE_OS:
1462 return INTRINSIC_GE;
1465 return INTRINSIC_LT_OS;
1467 case INTRINSIC_LT_OS:
1468 return INTRINSIC_LT;
1471 return INTRINSIC_LE_OS;
1473 case INTRINSIC_LE_OS:
1474 return INTRINSIC_LE;
1477 return INTRINSIC_NONE;
1481 /* For the namespace, check generic, user operator and intrinsic
1482 operator interfaces for consistency and to remove duplicate
1483 interfaces. We traverse the whole namespace, counting on the fact
1484 that most symbols will not have generic or operator interfaces. */
1487 gfc_check_interfaces (gfc_namespace *ns)
1489 gfc_namespace *old_ns, *ns2;
1490 char interface_name[100];
1493 old_ns = gfc_current_ns;
1494 gfc_current_ns = ns;
1496 gfc_traverse_ns (ns, check_sym_interfaces);
1498 gfc_traverse_user_op (ns, check_uop_interfaces);
1500 for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++)
1502 if (i == INTRINSIC_USER)
1505 if (i == INTRINSIC_ASSIGN)
1506 strcpy (interface_name, "intrinsic assignment operator");
1508 sprintf (interface_name, "intrinsic '%s' operator",
1509 gfc_op2string ((gfc_intrinsic_op) i));
1511 if (check_interface0 (ns->op[i], interface_name))
1515 gfc_check_operator_interface (ns->op[i]->sym, (gfc_intrinsic_op) i,
1518 for (ns2 = ns; ns2; ns2 = ns2->parent)
1520 gfc_intrinsic_op other_op;
1522 if (check_interface1 (ns->op[i], ns2->op[i], 0,
1523 interface_name, true))
1526 /* i should be gfc_intrinsic_op, but has to be int with this cast
1527 here for stupid C++ compatibility rules. */
1528 other_op = gfc_equivalent_op ((gfc_intrinsic_op) i);
1529 if (other_op != INTRINSIC_NONE
1530 && check_interface1 (ns->op[i], ns2->op[other_op],
1531 0, interface_name, true))
1537 gfc_current_ns = old_ns;
1542 symbol_rank (gfc_symbol *sym)
1544 return (sym->as == NULL) ? 0 : sym->as->rank;
1548 /* Given a symbol of a formal argument list and an expression, if the
1549 formal argument is allocatable, check that the actual argument is
1550 allocatable. Returns nonzero if compatible, zero if not compatible. */
1553 compare_allocatable (gfc_symbol *formal, gfc_expr *actual)
1555 symbol_attribute attr;
1557 if (formal->attr.allocatable
1558 || (formal->ts.type == BT_CLASS && CLASS_DATA (formal)->attr.allocatable))
1560 attr = gfc_expr_attr (actual);
1561 if (!attr.allocatable)
1569 /* Given a symbol of a formal argument list and an expression, if the
1570 formal argument is a pointer, see if the actual argument is a
1571 pointer. Returns nonzero if compatible, zero if not compatible. */
1574 compare_pointer (gfc_symbol *formal, gfc_expr *actual)
1576 symbol_attribute attr;
1578 if (formal->attr.pointer)
1580 attr = gfc_expr_attr (actual);
1582 /* Fortran 2008 allows non-pointer actual arguments. */
1583 if (!attr.pointer && attr.target && formal->attr.intent == INTENT_IN)
1594 /* Emit clear error messages for rank mismatch. */
1597 argument_rank_mismatch (const char *name, locus *where,
1598 int rank1, int rank2)
1602 gfc_error ("Rank mismatch in argument '%s' at %L "
1603 "(scalar and rank-%d)", name, where, rank2);
1605 else if (rank2 == 0)
1607 gfc_error ("Rank mismatch in argument '%s' at %L "
1608 "(rank-%d and scalar)", name, where, rank1);
1612 gfc_error ("Rank mismatch in argument '%s' at %L "
1613 "(rank-%d and rank-%d)", name, where, rank1, rank2);
1618 /* Given a symbol of a formal argument list and an expression, see if
1619 the two are compatible as arguments. Returns nonzero if
1620 compatible, zero if not compatible. */
1623 compare_parameter (gfc_symbol *formal, gfc_expr *actual,
1624 int ranks_must_agree, int is_elemental, locus *where)
1627 bool rank_check, is_pointer;
1629 /* If the formal arg has type BT_VOID, it's to one of the iso_c_binding
1630 procs c_f_pointer or c_f_procpointer, and we need to accept most
1631 pointers the user could give us. This should allow that. */
1632 if (formal->ts.type == BT_VOID)
1635 if (formal->ts.type == BT_DERIVED
1636 && formal->ts.u.derived && formal->ts.u.derived->ts.is_iso_c
1637 && actual->ts.type == BT_DERIVED
1638 && actual->ts.u.derived && actual->ts.u.derived->ts.is_iso_c)
1641 if (formal->ts.type == BT_CLASS && actual->ts.type == BT_DERIVED)
1642 /* Make sure the vtab symbol is present when
1643 the module variables are generated. */
1644 gfc_find_derived_vtab (actual->ts.u.derived);
1646 if (actual->ts.type == BT_PROCEDURE)
1649 gfc_symbol *act_sym = actual->symtree->n.sym;
1651 if (formal->attr.flavor != FL_PROCEDURE)
1654 gfc_error ("Invalid procedure argument at %L", &actual->where);
1658 if (!gfc_compare_interfaces (formal, act_sym, act_sym->name, 0, 1, err,
1662 gfc_error ("Interface mismatch in dummy procedure '%s' at %L: %s",
1663 formal->name, &actual->where, err);
1667 if (formal->attr.function && !act_sym->attr.function)
1669 gfc_add_function (&act_sym->attr, act_sym->name,
1670 &act_sym->declared_at);
1671 if (act_sym->ts.type == BT_UNKNOWN
1672 && gfc_set_default_type (act_sym, 1, act_sym->ns) == FAILURE)
1675 else if (formal->attr.subroutine && !act_sym->attr.subroutine)
1676 gfc_add_subroutine (&act_sym->attr, act_sym->name,
1677 &act_sym->declared_at);
1683 if (formal->attr.pointer && formal->attr.contiguous
1684 && !gfc_is_simply_contiguous (actual, true))
1687 gfc_error ("Actual argument to contiguous pointer dummy '%s' at %L "
1688 "must be simply contigous", formal->name, &actual->where);
1692 if ((actual->expr_type != EXPR_NULL || actual->ts.type != BT_UNKNOWN)
1693 && actual->ts.type != BT_HOLLERITH
1694 && !gfc_compare_types (&formal->ts, &actual->ts))
1697 gfc_error ("Type mismatch in argument '%s' at %L; passed %s to %s",
1698 formal->name, &actual->where, gfc_typename (&actual->ts),
1699 gfc_typename (&formal->ts));
1703 /* F2003, 12.5.2.5. */
1704 if (formal->ts.type == BT_CLASS
1705 && (CLASS_DATA (formal)->attr.class_pointer
1706 || CLASS_DATA (formal)->attr.allocatable))
1708 if (actual->ts.type != BT_CLASS)
1711 gfc_error ("Actual argument to '%s' at %L must be polymorphic",
1712 formal->name, &actual->where);
1715 if (CLASS_DATA (actual)->ts.u.derived
1716 != CLASS_DATA (formal)->ts.u.derived)
1719 gfc_error ("Actual argument to '%s' at %L must have the same "
1720 "declared type", formal->name, &actual->where);
1725 if (formal->attr.codimension && !gfc_is_coarray (actual))
1728 gfc_error ("Actual argument to '%s' at %L must be a coarray",
1729 formal->name, &actual->where);
1733 if (formal->attr.codimension && formal->attr.allocatable)
1735 gfc_ref *last = NULL;
1737 for (ref = actual->ref; ref; ref = ref->next)
1738 if (ref->type == REF_COMPONENT)
1741 /* F2008, 12.5.2.6. */
1742 if ((last && last->u.c.component->as->corank != formal->as->corank)
1744 && actual->symtree->n.sym->as->corank != formal->as->corank))
1747 gfc_error ("Corank mismatch in argument '%s' at %L (%d and %d)",
1748 formal->name, &actual->where, formal->as->corank,
1749 last ? last->u.c.component->as->corank
1750 : actual->symtree->n.sym->as->corank);
1755 if (formal->attr.codimension)
1757 /* F2008, 12.5.2.8. */
1758 if (formal->attr.dimension
1759 && (formal->attr.contiguous || formal->as->type != AS_ASSUMED_SHAPE)
1760 && gfc_expr_attr (actual).dimension
1761 && !gfc_is_simply_contiguous (actual, true))
1764 gfc_error ("Actual argument to '%s' at %L must be simply "
1765 "contiguous", formal->name, &actual->where);
1769 /* F2008, C1303 and C1304. */
1770 if (formal->attr.intent != INTENT_INOUT
1771 && (((formal->ts.type == BT_DERIVED || formal->ts.type == BT_CLASS)
1772 && formal->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
1773 && formal->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)
1774 || formal->attr.lock_comp))
1778 gfc_error ("Actual argument to non-INTENT(INOUT) dummy '%s' at %L, "
1779 "which is LOCK_TYPE or has a LOCK_TYPE component",
1780 formal->name, &actual->where);
1785 /* F2008, C1239/C1240. */
1786 if (actual->expr_type == EXPR_VARIABLE
1787 && (actual->symtree->n.sym->attr.asynchronous
1788 || actual->symtree->n.sym->attr.volatile_)
1789 && (formal->attr.asynchronous || formal->attr.volatile_)
1790 && actual->rank && !gfc_is_simply_contiguous (actual, true)
1791 && ((formal->as->type != AS_ASSUMED_SHAPE && !formal->attr.pointer)
1792 || formal->attr.contiguous))
1795 gfc_error ("Dummy argument '%s' has to be a pointer or assumed-shape "
1796 "array without CONTIGUOUS attribute - as actual argument at"
1797 " %L is not simply contiguous and both are ASYNCHRONOUS "
1798 "or VOLATILE", formal->name, &actual->where);
1802 if (formal->attr.allocatable && !formal->attr.codimension
1803 && gfc_expr_attr (actual).codimension)
1805 if (formal->attr.intent == INTENT_OUT)
1808 gfc_error ("Passing coarray at %L to allocatable, noncoarray, "
1809 "INTENT(OUT) dummy argument '%s'", &actual->where,
1813 else if (gfc_option.warn_surprising && where
1814 && formal->attr.intent != INTENT_IN)
1815 gfc_warning ("Passing coarray at %L to allocatable, noncoarray dummy "
1816 "argument '%s', which is invalid if the allocation status"
1817 " is modified", &actual->where, formal->name);
1820 if (symbol_rank (formal) == actual->rank)
1823 rank_check = where != NULL && !is_elemental && formal->as
1824 && (formal->as->type == AS_ASSUMED_SHAPE
1825 || formal->as->type == AS_DEFERRED)
1826 && actual->expr_type != EXPR_NULL;
1828 /* Scalar & coindexed, see: F2008, Section 12.5.2.4. */
1829 if (rank_check || ranks_must_agree
1830 || (formal->attr.pointer && actual->expr_type != EXPR_NULL)
1831 || (actual->rank != 0 && !(is_elemental || formal->attr.dimension))
1832 || (actual->rank == 0 && formal->as->type == AS_ASSUMED_SHAPE
1833 && actual->expr_type != EXPR_NULL)
1834 || (actual->rank == 0 && formal->attr.dimension
1835 && gfc_is_coindexed (actual)))
1838 argument_rank_mismatch (formal->name, &actual->where,
1839 symbol_rank (formal), actual->rank);
1842 else if (actual->rank != 0 && (is_elemental || formal->attr.dimension))
1845 /* At this point, we are considering a scalar passed to an array. This
1846 is valid (cf. F95 12.4.1.1, F2003 12.4.1.2, and F2008 12.5.2.4),
1847 - if the actual argument is (a substring of) an element of a
1848 non-assumed-shape/non-pointer/non-polymorphic array; or
1849 - (F2003) if the actual argument is of type character of default/c_char
1852 is_pointer = actual->expr_type == EXPR_VARIABLE
1853 ? actual->symtree->n.sym->attr.pointer : false;
1855 for (ref = actual->ref; ref; ref = ref->next)
1857 if (ref->type == REF_COMPONENT)
1858 is_pointer = ref->u.c.component->attr.pointer;
1859 else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT
1860 && ref->u.ar.dimen > 0
1862 || (ref->next->type == REF_SUBSTRING && !ref->next->next)))
1866 if (actual->ts.type == BT_CLASS && actual->expr_type != EXPR_NULL)
1869 gfc_error ("Polymorphic scalar passed to array dummy argument '%s' "
1870 "at %L", formal->name, &actual->where);
1874 if (actual->expr_type != EXPR_NULL && ref && actual->ts.type != BT_CHARACTER
1875 && (is_pointer || ref->u.ar.as->type == AS_ASSUMED_SHAPE))
1878 gfc_error ("Element of assumed-shaped or pointer "
1879 "array passed to array dummy argument '%s' at %L",
1880 formal->name, &actual->where);
1884 if (actual->ts.type == BT_CHARACTER && actual->expr_type != EXPR_NULL
1885 && (!ref || is_pointer || ref->u.ar.as->type == AS_ASSUMED_SHAPE))
1887 if (formal->ts.kind != 1 && (gfc_option.allow_std & GFC_STD_GNU) == 0)
1890 gfc_error ("Extension: Scalar non-default-kind, non-C_CHAR-kind "
1891 "CHARACTER actual argument with array dummy argument "
1892 "'%s' at %L", formal->name, &actual->where);
1896 if (where && (gfc_option.allow_std & GFC_STD_F2003) == 0)
1898 gfc_error ("Fortran 2003: Scalar CHARACTER actual argument with "
1899 "array dummy argument '%s' at %L",
1900 formal->name, &actual->where);
1903 else if ((gfc_option.allow_std & GFC_STD_F2003) == 0)
1909 if (ref == NULL && actual->expr_type != EXPR_NULL)
1912 argument_rank_mismatch (formal->name, &actual->where,
1913 symbol_rank (formal), actual->rank);
1921 /* Returns the storage size of a symbol (formal argument) or
1922 zero if it cannot be determined. */
1924 static unsigned long
1925 get_sym_storage_size (gfc_symbol *sym)
1928 unsigned long strlen, elements;
1930 if (sym->ts.type == BT_CHARACTER)
1932 if (sym->ts.u.cl && sym->ts.u.cl->length
1933 && sym->ts.u.cl->length->expr_type == EXPR_CONSTANT)
1934 strlen = mpz_get_ui (sym->ts.u.cl->length->value.integer);
1941 if (symbol_rank (sym) == 0)
1945 if (sym->as->type != AS_EXPLICIT)
1947 for (i = 0; i < sym->as->rank; i++)
1949 if (!sym->as || sym->as->upper[i]->expr_type != EXPR_CONSTANT
1950 || sym->as->lower[i]->expr_type != EXPR_CONSTANT)
1953 elements *= mpz_get_si (sym->as->upper[i]->value.integer)
1954 - mpz_get_si (sym->as->lower[i]->value.integer) + 1L;
1957 return strlen*elements;
1961 /* Returns the storage size of an expression (actual argument) or
1962 zero if it cannot be determined. For an array element, it returns
1963 the remaining size as the element sequence consists of all storage
1964 units of the actual argument up to the end of the array. */
1966 static unsigned long
1967 get_expr_storage_size (gfc_expr *e)
1970 long int strlen, elements;
1971 long int substrlen = 0;
1972 bool is_str_storage = false;
1978 if (e->ts.type == BT_CHARACTER)
1980 if (e->ts.u.cl && e->ts.u.cl->length
1981 && e->ts.u.cl->length->expr_type == EXPR_CONSTANT)
1982 strlen = mpz_get_si (e->ts.u.cl->length->value.integer);
1983 else if (e->expr_type == EXPR_CONSTANT
1984 && (e->ts.u.cl == NULL || e->ts.u.cl->length == NULL))
1985 strlen = e->value.character.length;
1990 strlen = 1; /* Length per element. */
1992 if (e->rank == 0 && !e->ref)
2000 for (i = 0; i < e->rank; i++)
2001 elements *= mpz_get_si (e->shape[i]);
2002 return elements*strlen;
2005 for (ref = e->ref; ref; ref = ref->next)
2007 if (ref->type == REF_SUBSTRING && ref->u.ss.start
2008 && ref->u.ss.start->expr_type == EXPR_CONSTANT)
2012 /* The string length is the substring length.
2013 Set now to full string length. */
2014 if (!ref->u.ss.length || !ref->u.ss.length->length
2015 || ref->u.ss.length->length->expr_type != EXPR_CONSTANT)
2018 strlen = mpz_get_ui (ref->u.ss.length->length->value.integer);
2020 substrlen = strlen - mpz_get_ui (ref->u.ss.start->value.integer) + 1;
2024 if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION
2025 && ref->u.ar.start && ref->u.ar.end && ref->u.ar.stride
2026 && ref->u.ar.as->upper)
2027 for (i = 0; i < ref->u.ar.dimen; i++)
2029 long int start, end, stride;
2032 if (ref->u.ar.stride[i])
2034 if (ref->u.ar.stride[i]->expr_type == EXPR_CONSTANT)
2035 stride = mpz_get_si (ref->u.ar.stride[i]->value.integer);
2040 if (ref->u.ar.start[i])
2042 if (ref->u.ar.start[i]->expr_type == EXPR_CONSTANT)
2043 start = mpz_get_si (ref->u.ar.start[i]->value.integer);
2047 else if (ref->u.ar.as->lower[i]
2048 && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT)
2049 start = mpz_get_si (ref->u.ar.as->lower[i]->value.integer);
2053 if (ref->u.ar.end[i])
2055 if (ref->u.ar.end[i]->expr_type == EXPR_CONSTANT)
2056 end = mpz_get_si (ref->u.ar.end[i]->value.integer);
2060 else if (ref->u.ar.as->upper[i]
2061 && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
2062 end = mpz_get_si (ref->u.ar.as->upper[i]->value.integer);
2066 elements *= (end - start)/stride + 1L;
2068 else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_FULL
2069 && ref->u.ar.as->lower && ref->u.ar.as->upper)
2070 for (i = 0; i < ref->u.ar.as->rank; i++)
2072 if (ref->u.ar.as->lower[i] && ref->u.ar.as->upper[i]
2073 && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT
2074 && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
2075 elements *= mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
2076 - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
2081 else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT
2082 && e->expr_type == EXPR_VARIABLE)
2084 if (ref->u.ar.as->type == AS_ASSUMED_SHAPE
2085 || e->symtree->n.sym->attr.pointer)
2091 /* Determine the number of remaining elements in the element
2092 sequence for array element designators. */
2093 is_str_storage = true;
2094 for (i = ref->u.ar.dimen - 1; i >= 0; i--)
2096 if (ref->u.ar.start[i] == NULL
2097 || ref->u.ar.start[i]->expr_type != EXPR_CONSTANT
2098 || ref->u.ar.as->upper[i] == NULL
2099 || ref->u.ar.as->lower[i] == NULL
2100 || ref->u.ar.as->upper[i]->expr_type != EXPR_CONSTANT
2101 || ref->u.ar.as->lower[i]->expr_type != EXPR_CONSTANT)
2106 * (mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
2107 - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
2109 - (mpz_get_si (ref->u.ar.start[i]->value.integer)
2110 - mpz_get_si (ref->u.ar.as->lower[i]->value.integer));
2116 return (is_str_storage) ? substrlen + (elements-1)*strlen
2119 return elements*strlen;
2123 /* Given an expression, check whether it is an array section
2124 which has a vector subscript. If it has, one is returned,
2128 gfc_has_vector_subscript (gfc_expr *e)
2133 if (e == NULL || e->rank == 0 || e->expr_type != EXPR_VARIABLE)
2136 for (ref = e->ref; ref; ref = ref->next)
2137 if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION)
2138 for (i = 0; i < ref->u.ar.dimen; i++)
2139 if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
2146 /* Given formal and actual argument lists, see if they are compatible.
2147 If they are compatible, the actual argument list is sorted to
2148 correspond with the formal list, and elements for missing optional
2149 arguments are inserted. If WHERE pointer is nonnull, then we issue
2150 errors when things don't match instead of just returning the status
2154 compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
2155 int ranks_must_agree, int is_elemental, locus *where)
2157 gfc_actual_arglist **new_arg, *a, *actual, temp;
2158 gfc_formal_arglist *f;
2160 unsigned long actual_size, formal_size;
2164 if (actual == NULL && formal == NULL)
2168 for (f = formal; f; f = f->next)
2171 new_arg = XALLOCAVEC (gfc_actual_arglist *, n);
2173 for (i = 0; i < n; i++)
2180 for (a = actual; a; a = a->next, f = f->next)
2182 /* Look for keywords but ignore g77 extensions like %VAL. */
2183 if (a->name != NULL && a->name[0] != '%')
2186 for (f = formal; f; f = f->next, i++)
2190 if (strcmp (f->sym->name, a->name) == 0)
2197 gfc_error ("Keyword argument '%s' at %L is not in "
2198 "the procedure", a->name, &a->expr->where);
2202 if (new_arg[i] != NULL)
2205 gfc_error ("Keyword argument '%s' at %L is already associated "
2206 "with another actual argument", a->name,
2215 gfc_error ("More actual than formal arguments in procedure "
2216 "call at %L", where);
2221 if (f->sym == NULL && a->expr == NULL)
2227 gfc_error ("Missing alternate return spec in subroutine call "
2232 if (a->expr == NULL)
2235 gfc_error ("Unexpected alternate return spec in subroutine "
2236 "call at %L", where);
2240 if (a->expr->expr_type == EXPR_NULL && !f->sym->attr.pointer
2241 && (f->sym->attr.allocatable || !f->sym->attr.optional
2242 || (gfc_option.allow_std & GFC_STD_F2008) == 0))
2244 if (where && (f->sym->attr.allocatable || !f->sym->attr.optional))
2245 gfc_error ("Unexpected NULL() intrinsic at %L to dummy '%s'",
2246 where, f->sym->name);
2248 gfc_error ("Fortran 2008: Null pointer at %L to non-pointer "
2249 "dummy '%s'", where, f->sym->name);
2254 if (!compare_parameter (f->sym, a->expr, ranks_must_agree,
2255 is_elemental, where))
2258 /* Special case for character arguments. For allocatable, pointer
2259 and assumed-shape dummies, the string length needs to match
2261 if (a->expr->ts.type == BT_CHARACTER
2262 && a->expr->ts.u.cl && a->expr->ts.u.cl->length
2263 && a->expr->ts.u.cl->length->expr_type == EXPR_CONSTANT
2264 && f->sym->ts.u.cl && f->sym->ts.u.cl && f->sym->ts.u.cl->length
2265 && f->sym->ts.u.cl->length->expr_type == EXPR_CONSTANT
2266 && (f->sym->attr.pointer || f->sym->attr.allocatable
2267 || (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2268 && (mpz_cmp (a->expr->ts.u.cl->length->value.integer,
2269 f->sym->ts.u.cl->length->value.integer) != 0))
2271 if (where && (f->sym->attr.pointer || f->sym->attr.allocatable))
2272 gfc_warning ("Character length mismatch (%ld/%ld) between actual "
2273 "argument and pointer or allocatable dummy argument "
2275 mpz_get_si (a->expr->ts.u.cl->length->value.integer),
2276 mpz_get_si (f->sym->ts.u.cl->length->value.integer),
2277 f->sym->name, &a->expr->where);
2279 gfc_warning ("Character length mismatch (%ld/%ld) between actual "
2280 "argument and assumed-shape dummy argument '%s' "
2282 mpz_get_si (a->expr->ts.u.cl->length->value.integer),
2283 mpz_get_si (f->sym->ts.u.cl->length->value.integer),
2284 f->sym->name, &a->expr->where);
2288 if ((f->sym->attr.pointer || f->sym->attr.allocatable)
2289 && f->sym->ts.deferred != a->expr->ts.deferred
2290 && a->expr->ts.type == BT_CHARACTER)
2293 gfc_error ("Actual argument argument at %L to allocatable or "
2294 "pointer dummy argument '%s' must have a deferred "
2295 "length type parameter if and only if the dummy has one",
2296 &a->expr->where, f->sym->name);
2300 actual_size = get_expr_storage_size (a->expr);
2301 formal_size = get_sym_storage_size (f->sym);
2302 if (actual_size != 0 && actual_size < formal_size
2303 && a->expr->ts.type != BT_PROCEDURE
2304 && f->sym->attr.flavor != FL_PROCEDURE)
2306 if (a->expr->ts.type == BT_CHARACTER && !f->sym->as && where)
2307 gfc_warning ("Character length of actual argument shorter "
2308 "than of dummy argument '%s' (%lu/%lu) at %L",
2309 f->sym->name, actual_size, formal_size,
2312 gfc_warning ("Actual argument contains too few "
2313 "elements for dummy argument '%s' (%lu/%lu) at %L",
2314 f->sym->name, actual_size, formal_size,
2319 /* Satisfy 12.4.1.3 by ensuring that a procedure pointer actual argument
2320 is provided for a procedure pointer formal argument. */
2321 if (f->sym->attr.proc_pointer
2322 && !((a->expr->expr_type == EXPR_VARIABLE
2323 && a->expr->symtree->n.sym->attr.proc_pointer)
2324 || (a->expr->expr_type == EXPR_FUNCTION
2325 && a->expr->symtree->n.sym->result->attr.proc_pointer)
2326 || gfc_is_proc_ptr_comp (a->expr, NULL)))
2329 gfc_error ("Expected a procedure pointer for argument '%s' at %L",
2330 f->sym->name, &a->expr->where);
2334 /* Satisfy 12.4.1.2 by ensuring that a procedure actual argument is
2335 provided for a procedure formal argument. */
2336 if (a->expr->ts.type != BT_PROCEDURE && !gfc_is_proc_ptr_comp (a->expr, NULL)
2337 && a->expr->expr_type == EXPR_VARIABLE
2338 && f->sym->attr.flavor == FL_PROCEDURE)
2341 gfc_error ("Expected a procedure for argument '%s' at %L",
2342 f->sym->name, &a->expr->where);
2346 if (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE
2347 && a->expr->expr_type == EXPR_VARIABLE
2348 && a->expr->symtree->n.sym->as
2349 && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SIZE
2350 && (a->expr->ref == NULL
2351 || (a->expr->ref->type == REF_ARRAY
2352 && a->expr->ref->u.ar.type == AR_FULL)))
2355 gfc_error ("Actual argument for '%s' cannot be an assumed-size"
2356 " array at %L", f->sym->name, where);
2360 if (a->expr->expr_type != EXPR_NULL
2361 && compare_pointer (f->sym, a->expr) == 0)
2364 gfc_error ("Actual argument for '%s' must be a pointer at %L",
2365 f->sym->name, &a->expr->where);
2369 if (a->expr->expr_type != EXPR_NULL
2370 && (gfc_option.allow_std & GFC_STD_F2008) == 0
2371 && compare_pointer (f->sym, a->expr) == 2)
2374 gfc_error ("Fortran 2008: Non-pointer actual argument at %L to "
2375 "pointer dummy '%s'", &a->expr->where,f->sym->name);
2380 /* Fortran 2008, C1242. */
2381 if (f->sym->attr.pointer && gfc_is_coindexed (a->expr))
2384 gfc_error ("Coindexed actual argument at %L to pointer "
2386 &a->expr->where, f->sym->name);
2390 /* Fortran 2008, 12.5.2.5 (no constraint). */
2391 if (a->expr->expr_type == EXPR_VARIABLE
2392 && f->sym->attr.intent != INTENT_IN
2393 && f->sym->attr.allocatable
2394 && gfc_is_coindexed (a->expr))
2397 gfc_error ("Coindexed actual argument at %L to allocatable "
2398 "dummy '%s' requires INTENT(IN)",
2399 &a->expr->where, f->sym->name);
2403 /* Fortran 2008, C1237. */
2404 if (a->expr->expr_type == EXPR_VARIABLE
2405 && (f->sym->attr.asynchronous || f->sym->attr.volatile_)
2406 && gfc_is_coindexed (a->expr)
2407 && (a->expr->symtree->n.sym->attr.volatile_
2408 || a->expr->symtree->n.sym->attr.asynchronous))
2411 gfc_error ("Coindexed ASYNCHRONOUS or VOLATILE actual argument at "
2412 "at %L requires that dummy %s' has neither "
2413 "ASYNCHRONOUS nor VOLATILE", &a->expr->where,
2418 /* Fortran 2008, 12.5.2.4 (no constraint). */
2419 if (a->expr->expr_type == EXPR_VARIABLE
2420 && f->sym->attr.intent != INTENT_IN && !f->sym->attr.value
2421 && gfc_is_coindexed (a->expr)
2422 && gfc_has_ultimate_allocatable (a->expr))
2425 gfc_error ("Coindexed actual argument at %L with allocatable "
2426 "ultimate component to dummy '%s' requires either VALUE "
2427 "or INTENT(IN)", &a->expr->where, f->sym->name);
2431 if (a->expr->expr_type != EXPR_NULL
2432 && compare_allocatable (f->sym, a->expr) == 0)
2435 gfc_error ("Actual argument for '%s' must be ALLOCATABLE at %L",
2436 f->sym->name, &a->expr->where);
2440 /* Check intent = OUT/INOUT for definable actual argument. */
2441 if ((f->sym->attr.intent == INTENT_OUT
2442 || f->sym->attr.intent == INTENT_INOUT))
2444 const char* context = (where
2445 ? _("actual argument to INTENT = OUT/INOUT")
2448 if (f->sym->attr.pointer
2449 && gfc_check_vardef_context (a->expr, true, false, context)
2452 if (gfc_check_vardef_context (a->expr, false, false, context)
2457 if ((f->sym->attr.intent == INTENT_OUT
2458 || f->sym->attr.intent == INTENT_INOUT
2459 || f->sym->attr.volatile_
2460 || f->sym->attr.asynchronous)
2461 && gfc_has_vector_subscript (a->expr))
2464 gfc_error ("Array-section actual argument with vector "
2465 "subscripts at %L is incompatible with INTENT(OUT), "
2466 "INTENT(INOUT), VOLATILE or ASYNCHRONOUS attribute "
2467 "of the dummy argument '%s'",
2468 &a->expr->where, f->sym->name);
2472 /* C1232 (R1221) For an actual argument which is an array section or
2473 an assumed-shape array, the dummy argument shall be an assumed-
2474 shape array, if the dummy argument has the VOLATILE attribute. */
2476 if (f->sym->attr.volatile_
2477 && a->expr->symtree->n.sym->as
2478 && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
2479 && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2482 gfc_error ("Assumed-shape actual argument at %L is "
2483 "incompatible with the non-assumed-shape "
2484 "dummy argument '%s' due to VOLATILE attribute",
2485 &a->expr->where,f->sym->name);
2489 if (f->sym->attr.volatile_
2490 && a->expr->ref && a->expr->ref->u.ar.type == AR_SECTION
2491 && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2494 gfc_error ("Array-section actual argument at %L is "
2495 "incompatible with the non-assumed-shape "
2496 "dummy argument '%s' due to VOLATILE attribute",
2497 &a->expr->where,f->sym->name);
2501 /* C1233 (R1221) For an actual argument which is a pointer array, the
2502 dummy argument shall be an assumed-shape or pointer array, if the
2503 dummy argument has the VOLATILE attribute. */
2505 if (f->sym->attr.volatile_
2506 && a->expr->symtree->n.sym->attr.pointer
2507 && a->expr->symtree->n.sym->as
2509 && (f->sym->as->type == AS_ASSUMED_SHAPE
2510 || f->sym->attr.pointer)))
2513 gfc_error ("Pointer-array actual argument at %L requires "
2514 "an assumed-shape or pointer-array dummy "
2515 "argument '%s' due to VOLATILE attribute",
2516 &a->expr->where,f->sym->name);
2527 /* Make sure missing actual arguments are optional. */
2529 for (f = formal; f; f = f->next, i++)
2531 if (new_arg[i] != NULL)
2536 gfc_error ("Missing alternate return spec in subroutine call "
2540 if (!f->sym->attr.optional)
2543 gfc_error ("Missing actual argument for argument '%s' at %L",
2544 f->sym->name, where);
2549 /* The argument lists are compatible. We now relink a new actual
2550 argument list with null arguments in the right places. The head
2551 of the list remains the head. */
2552 for (i = 0; i < n; i++)
2553 if (new_arg[i] == NULL)
2554 new_arg[i] = gfc_get_actual_arglist ();
2559 *new_arg[0] = *actual;
2563 new_arg[0] = new_arg[na];
2567 for (i = 0; i < n - 1; i++)
2568 new_arg[i]->next = new_arg[i + 1];
2570 new_arg[i]->next = NULL;
2572 if (*ap == NULL && n > 0)
2575 /* Note the types of omitted optional arguments. */
2576 for (a = *ap, f = formal; a; a = a->next, f = f->next)
2577 if (a->expr == NULL && a->label == NULL)
2578 a->missing_arg_type = f->sym->ts.type;
2586 gfc_formal_arglist *f;
2587 gfc_actual_arglist *a;
2591 /* qsort comparison function for argument pairs, with the following
2593 - p->a->expr == NULL
2594 - p->a->expr->expr_type != EXPR_VARIABLE
2595 - growing p->a->expr->symbol. */
2598 pair_cmp (const void *p1, const void *p2)
2600 const gfc_actual_arglist *a1, *a2;
2602 /* *p1 and *p2 are elements of the to-be-sorted array. */
2603 a1 = ((const argpair *) p1)->a;
2604 a2 = ((const argpair *) p2)->a;
2613 if (a1->expr->expr_type != EXPR_VARIABLE)
2615 if (a2->expr->expr_type != EXPR_VARIABLE)
2619 if (a2->expr->expr_type != EXPR_VARIABLE)
2621 return a1->expr->symtree->n.sym < a2->expr->symtree->n.sym;
2625 /* Given two expressions from some actual arguments, test whether they
2626 refer to the same expression. The analysis is conservative.
2627 Returning FAILURE will produce no warning. */
2630 compare_actual_expr (gfc_expr *e1, gfc_expr *e2)
2632 const gfc_ref *r1, *r2;
2635 || e1->expr_type != EXPR_VARIABLE
2636 || e2->expr_type != EXPR_VARIABLE
2637 || e1->symtree->n.sym != e2->symtree->n.sym)
2640 /* TODO: improve comparison, see expr.c:show_ref(). */
2641 for (r1 = e1->ref, r2 = e2->ref; r1 && r2; r1 = r1->next, r2 = r2->next)
2643 if (r1->type != r2->type)
2648 if (r1->u.ar.type != r2->u.ar.type)
2650 /* TODO: At the moment, consider only full arrays;
2651 we could do better. */
2652 if (r1->u.ar.type != AR_FULL || r2->u.ar.type != AR_FULL)
2657 if (r1->u.c.component != r2->u.c.component)
2665 gfc_internal_error ("compare_actual_expr(): Bad component code");
2674 /* Given formal and actual argument lists that correspond to one
2675 another, check that identical actual arguments aren't not
2676 associated with some incompatible INTENTs. */
2679 check_some_aliasing (gfc_formal_arglist *f, gfc_actual_arglist *a)
2681 sym_intent f1_intent, f2_intent;
2682 gfc_formal_arglist *f1;
2683 gfc_actual_arglist *a1;
2686 gfc_try t = SUCCESS;
2689 for (f1 = f, a1 = a;; f1 = f1->next, a1 = a1->next)
2691 if (f1 == NULL && a1 == NULL)
2693 if (f1 == NULL || a1 == NULL)
2694 gfc_internal_error ("check_some_aliasing(): List mismatch");
2699 p = XALLOCAVEC (argpair, n);
2701 for (i = 0, f1 = f, a1 = a; i < n; i++, f1 = f1->next, a1 = a1->next)
2707 qsort (p, n, sizeof (argpair), pair_cmp);
2709 for (i = 0; i < n; i++)
2712 || p[i].a->expr->expr_type != EXPR_VARIABLE
2713 || p[i].a->expr->ts.type == BT_PROCEDURE)
2715 f1_intent = p[i].f->sym->attr.intent;
2716 for (j = i + 1; j < n; j++)
2718 /* Expected order after the sort. */
2719 if (!p[j].a->expr || p[j].a->expr->expr_type != EXPR_VARIABLE)
2720 gfc_internal_error ("check_some_aliasing(): corrupted data");
2722 /* Are the expression the same? */
2723 if (compare_actual_expr (p[i].a->expr, p[j].a->expr) == FAILURE)
2725 f2_intent = p[j].f->sym->attr.intent;
2726 if ((f1_intent == INTENT_IN && f2_intent == INTENT_OUT)
2727 || (f1_intent == INTENT_OUT && f2_intent == INTENT_IN))
2729 gfc_warning ("Same actual argument associated with INTENT(%s) "
2730 "argument '%s' and INTENT(%s) argument '%s' at %L",
2731 gfc_intent_string (f1_intent), p[i].f->sym->name,
2732 gfc_intent_string (f2_intent), p[j].f->sym->name,
2733 &p[i].a->expr->where);
2743 /* Given a symbol of a formal argument list and an expression,
2744 return nonzero if their intents are compatible, zero otherwise. */
2747 compare_parameter_intent (gfc_symbol *formal, gfc_expr *actual)
2749 if (actual->symtree->n.sym->attr.pointer && !formal->attr.pointer)
2752 if (actual->symtree->n.sym->attr.intent != INTENT_IN)
2755 if (formal->attr.intent == INTENT_INOUT || formal->attr.intent == INTENT_OUT)
2762 /* Given formal and actual argument lists that correspond to one
2763 another, check that they are compatible in the sense that intents
2764 are not mismatched. */
2767 check_intents (gfc_formal_arglist *f, gfc_actual_arglist *a)
2769 sym_intent f_intent;
2771 for (;; f = f->next, a = a->next)
2773 if (f == NULL && a == NULL)
2775 if (f == NULL || a == NULL)
2776 gfc_internal_error ("check_intents(): List mismatch");
2778 if (a->expr == NULL || a->expr->expr_type != EXPR_VARIABLE)
2781 f_intent = f->sym->attr.intent;
2783 if (!compare_parameter_intent(f->sym, a->expr))
2785 gfc_error ("Procedure argument at %L is INTENT(IN) while interface "
2786 "specifies INTENT(%s)", &a->expr->where,
2787 gfc_intent_string (f_intent));
2791 if (gfc_pure (NULL) && gfc_impure_variable (a->expr->symtree->n.sym))
2793 if (f_intent == INTENT_INOUT || f_intent == INTENT_OUT)
2795 gfc_error ("Procedure argument at %L is local to a PURE "
2796 "procedure and is passed to an INTENT(%s) argument",
2797 &a->expr->where, gfc_intent_string (f_intent));
2801 if (f->sym->attr.pointer)
2803 gfc_error ("Procedure argument at %L is local to a PURE "
2804 "procedure and has the POINTER attribute",
2810 /* Fortran 2008, C1283. */
2811 if (gfc_pure (NULL) && gfc_is_coindexed (a->expr))
2813 if (f_intent == INTENT_INOUT || f_intent == INTENT_OUT)
2815 gfc_error ("Coindexed actual argument at %L in PURE procedure "
2816 "is passed to an INTENT(%s) argument",
2817 &a->expr->where, gfc_intent_string (f_intent));
2821 if (f->sym->attr.pointer)
2823 gfc_error ("Coindexed actual argument at %L in PURE procedure "
2824 "is passed to a POINTER dummy argument",
2830 /* F2008, Section 12.5.2.4. */
2831 if (a->expr->ts.type == BT_CLASS && f->sym->ts.type == BT_CLASS
2832 && gfc_is_coindexed (a->expr))
2834 gfc_error ("Coindexed polymorphic actual argument at %L is passed "
2835 "polymorphic dummy argument '%s'",
2836 &a->expr->where, f->sym->name);
2845 /* Check how a procedure is used against its interface. If all goes
2846 well, the actual argument list will also end up being properly
2850 gfc_procedure_use (gfc_symbol *sym, gfc_actual_arglist **ap, locus *where)
2853 /* Warn about calls with an implicit interface. Special case
2854 for calling a ISO_C_BINDING becase c_loc and c_funloc
2855 are pseudo-unknown. Additionally, warn about procedures not
2856 explicitly declared at all if requested. */
2857 if (sym->attr.if_source == IFSRC_UNKNOWN && ! sym->attr.is_iso_c)
2859 if (gfc_option.warn_implicit_interface)
2860 gfc_warning ("Procedure '%s' called with an implicit interface at %L",
2862 else if (gfc_option.warn_implicit_procedure
2863 && sym->attr.proc == PROC_UNKNOWN)
2864 gfc_warning ("Procedure '%s' called at %L is not explicitly declared",
2868 if (sym->attr.if_source == IFSRC_UNKNOWN)
2870 gfc_actual_arglist *a;
2872 if (sym->attr.pointer)
2874 gfc_error("The pointer object '%s' at %L must have an explicit "
2875 "function interface or be declared as array",
2880 if (sym->attr.allocatable && !sym->attr.external)
2882 gfc_error("The allocatable object '%s' at %L must have an explicit "
2883 "function interface or be declared as array",
2888 if (sym->attr.allocatable)
2890 gfc_error("Allocatable function '%s' at %L must have an explicit "
2891 "function interface", sym->name, where);
2895 for (a = *ap; a; a = a->next)
2897 /* Skip g77 keyword extensions like %VAL, %REF, %LOC. */
2898 if (a->name != NULL && a->name[0] != '%')
2900 gfc_error("Keyword argument requires explicit interface "
2901 "for procedure '%s' at %L", sym->name, &a->expr->where);
2905 /* F2008, C1303 and C1304. */
2907 && (a->expr->ts.type == BT_DERIVED || a->expr->ts.type == BT_CLASS)
2908 && ((a->expr->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
2909 && a->expr->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)
2910 || gfc_expr_attr (a->expr).lock_comp))
2912 gfc_error("Actual argument of LOCK_TYPE or with LOCK_TYPE "
2913 "component at %L requires an explicit interface for "
2914 "procedure '%s'", &a->expr->where, sym->name);
2918 if (a->expr && a->expr->expr_type == EXPR_NULL
2919 && a->expr->ts.type == BT_UNKNOWN)
2921 gfc_error ("MOLD argument to NULL required at %L", &a->expr->where);
2929 if (!compare_actual_formal (ap, sym->formal, 0, sym->attr.elemental, where))
2932 check_intents (sym->formal, *ap);
2933 if (gfc_option.warn_aliasing)
2934 check_some_aliasing (sym->formal, *ap);
2938 /* Check how a procedure pointer component is used against its interface.
2939 If all goes well, the actual argument list will also end up being properly
2940 sorted. Completely analogous to gfc_procedure_use. */
2943 gfc_ppc_use (gfc_component *comp, gfc_actual_arglist **ap, locus *where)
2946 /* Warn about calls with an implicit interface. Special case
2947 for calling a ISO_C_BINDING becase c_loc and c_funloc
2948 are pseudo-unknown. */
2949 if (gfc_option.warn_implicit_interface
2950 && comp->attr.if_source == IFSRC_UNKNOWN
2951 && !comp->attr.is_iso_c)
2952 gfc_warning ("Procedure pointer component '%s' called with an implicit "
2953 "interface at %L", comp->name, where);
2955 if (comp->attr.if_source == IFSRC_UNKNOWN)
2957 gfc_actual_arglist *a;
2958 for (a = *ap; a; a = a->next)
2960 /* Skip g77 keyword extensions like %VAL, %REF, %LOC. */
2961 if (a->name != NULL && a->name[0] != '%')
2963 gfc_error("Keyword argument requires explicit interface "
2964 "for procedure pointer component '%s' at %L",
2965 comp->name, &a->expr->where);
2973 if (!compare_actual_formal (ap, comp->formal, 0, comp->attr.elemental, where))
2976 check_intents (comp->formal, *ap);
2977 if (gfc_option.warn_aliasing)
2978 check_some_aliasing (comp->formal, *ap);
2982 /* Try if an actual argument list matches the formal list of a symbol,
2983 respecting the symbol's attributes like ELEMENTAL. This is used for
2984 GENERIC resolution. */
2987 gfc_arglist_matches_symbol (gfc_actual_arglist** args, gfc_symbol* sym)
2991 gcc_assert (sym->attr.flavor == FL_PROCEDURE);
2993 r = !sym->attr.elemental;
2994 if (compare_actual_formal (args, sym->formal, r, !r, NULL))
2996 check_intents (sym->formal, *args);
2997 if (gfc_option.warn_aliasing)
2998 check_some_aliasing (sym->formal, *args);
3006 /* Given an interface pointer and an actual argument list, search for
3007 a formal argument list that matches the actual. If found, returns
3008 a pointer to the symbol of the correct interface. Returns NULL if
3012 gfc_search_interface (gfc_interface *intr, int sub_flag,
3013 gfc_actual_arglist **ap)
3015 gfc_symbol *elem_sym = NULL;
3016 gfc_symbol *null_sym = NULL;
3017 locus null_expr_loc;
3018 gfc_actual_arglist *a;
3019 bool has_null_arg = false;
3021 for (a = *ap; a; a = a->next)
3022 if (a->expr && a->expr->expr_type == EXPR_NULL
3023 && a->expr->ts.type == BT_UNKNOWN)
3025 has_null_arg = true;
3026 null_expr_loc = a->expr->where;
3030 for (; intr; intr = intr->next)
3032 if (intr->sym->attr.flavor == FL_DERIVED)
3034 if (sub_flag && intr->sym->attr.function)
3036 if (!sub_flag && intr->sym->attr.subroutine)
3039 if (gfc_arglist_matches_symbol (ap, intr->sym))
3041 if (has_null_arg && null_sym)
3043 gfc_error ("MOLD= required in NULL() argument at %L: Ambiguity "
3044 "between specific functions %s and %s",
3045 &null_expr_loc, null_sym->name, intr->sym->name);
3048 else if (has_null_arg)
3050 null_sym = intr->sym;
3054 /* Satisfy 12.4.4.1 such that an elemental match has lower
3055 weight than a non-elemental match. */
3056 if (intr->sym->attr.elemental)
3058 elem_sym = intr->sym;
3068 return elem_sym ? elem_sym : NULL;
3072 /* Do a brute force recursive search for a symbol. */
3074 static gfc_symtree *
3075 find_symtree0 (gfc_symtree *root, gfc_symbol *sym)
3079 if (root->n.sym == sym)
3084 st = find_symtree0 (root->left, sym);
3085 if (root->right && ! st)
3086 st = find_symtree0 (root->right, sym);
3091 /* Find a symtree for a symbol. */
3094 gfc_find_sym_in_symtree (gfc_symbol *sym)
3099 /* First try to find it by name. */
3100 gfc_find_sym_tree (sym->name, gfc_current_ns, 1, &st);
3101 if (st && st->n.sym == sym)
3104 /* If it's been renamed, resort to a brute-force search. */
3105 /* TODO: avoid having to do this search. If the symbol doesn't exist
3106 in the symtree for the current namespace, it should probably be added. */
3107 for (ns = gfc_current_ns; ns; ns = ns->parent)
3109 st = find_symtree0 (ns->sym_root, sym);
3113 gfc_internal_error ("Unable to find symbol %s", sym->name);
3118 /* See if the arglist to an operator-call contains a derived-type argument
3119 with a matching type-bound operator. If so, return the matching specific
3120 procedure defined as operator-target as well as the base-object to use
3121 (which is the found derived-type argument with operator). The generic
3122 name, if any, is transmitted to the final expression via 'gname'. */
3124 static gfc_typebound_proc*
3125 matching_typebound_op (gfc_expr** tb_base,
3126 gfc_actual_arglist* args,
3127 gfc_intrinsic_op op, const char* uop,
3128 const char ** gname)
3130 gfc_actual_arglist* base;
3132 for (base = args; base; base = base->next)
3133 if (base->expr->ts.type == BT_DERIVED || base->expr->ts.type == BT_CLASS)
3135 gfc_typebound_proc* tb;
3136 gfc_symbol* derived;
3139 if (base->expr->ts.type == BT_CLASS)
3141 if (!gfc_expr_attr (base->expr).class_ok)
3143 derived = CLASS_DATA (base->expr)->ts.u.derived;
3146 derived = base->expr->ts.u.derived;
3148 if (op == INTRINSIC_USER)
3150 gfc_symtree* tb_uop;
3153 tb_uop = gfc_find_typebound_user_op (derived, &result, uop,
3162 tb = gfc_find_typebound_intrinsic_op (derived, &result, op,
3165 /* This means we hit a PRIVATE operator which is use-associated and
3166 should thus not be seen. */
3167 if (result == FAILURE)
3170 /* Look through the super-type hierarchy for a matching specific
3172 for (; tb; tb = tb->overridden)
3176 gcc_assert (tb->is_generic);
3177 for (g = tb->u.generic; g; g = g->next)
3180 gfc_actual_arglist* argcopy;
3183 gcc_assert (g->specific);
3184 if (g->specific->error)
3187 target = g->specific->u.specific->n.sym;
3189 /* Check if this arglist matches the formal. */
3190 argcopy = gfc_copy_actual_arglist (args);
3191 matches = gfc_arglist_matches_symbol (&argcopy, target);
3192 gfc_free_actual_arglist (argcopy);
3194 /* Return if we found a match. */
3197 *tb_base = base->expr;
3198 *gname = g->specific_st->name;
3209 /* For the 'actual arglist' of an operator call and a specific typebound
3210 procedure that has been found the target of a type-bound operator, build the
3211 appropriate EXPR_COMPCALL and resolve it. We take this indirection over
3212 type-bound procedures rather than resolving type-bound operators 'directly'
3213 so that we can reuse the existing logic. */
3216 build_compcall_for_operator (gfc_expr* e, gfc_actual_arglist* actual,
3217 gfc_expr* base, gfc_typebound_proc* target,
3220 e->expr_type = EXPR_COMPCALL;
3221 e->value.compcall.tbp = target;
3222 e->value.compcall.name = gname ? gname : "$op";
3223 e->value.compcall.actual = actual;
3224 e->value.compcall.base_object = base;
3225 e->value.compcall.ignore_pass = 1;
3226 e->value.compcall.assign = 0;
3230 /* This subroutine is called when an expression is being resolved.
3231 The expression node in question is either a user defined operator
3232 or an intrinsic operator with arguments that aren't compatible
3233 with the operator. This subroutine builds an actual argument list
3234 corresponding to the operands, then searches for a compatible
3235 interface. If one is found, the expression node is replaced with
3236 the appropriate function call. We use the 'match' enum to specify
3237 whether a replacement has been made or not, or if an error occurred. */
3240 gfc_extend_expr (gfc_expr *e)
3242 gfc_actual_arglist *actual;
3251 actual = gfc_get_actual_arglist ();
3252 actual->expr = e->value.op.op1;
3256 if (e->value.op.op2 != NULL)
3258 actual->next = gfc_get_actual_arglist ();
3259 actual->next->expr = e->value.op.op2;
3262 i = fold_unary_intrinsic (e->value.op.op);
3264 if (i == INTRINSIC_USER)
3266 for (ns = gfc_current_ns; ns; ns = ns->parent)
3268 uop = gfc_find_uop (e->value.op.uop->name, ns);
3272 sym = gfc_search_interface (uop->op, 0, &actual);
3279 for (ns = gfc_current_ns; ns; ns = ns->parent)
3281 /* Due to the distinction between '==' and '.eq.' and friends, one has
3282 to check if either is defined. */
3285 #define CHECK_OS_COMPARISON(comp) \
3286 case INTRINSIC_##comp: \
3287 case INTRINSIC_##comp##_OS: \
3288 sym = gfc_search_interface (ns->op[INTRINSIC_##comp], 0, &actual); \
3290 sym = gfc_search_interface (ns->op[INTRINSIC_##comp##_OS], 0, &actual); \
3292 CHECK_OS_COMPARISON(EQ)
3293 CHECK_OS_COMPARISON(NE)
3294 CHECK_OS_COMPARISON(GT)
3295 CHECK_OS_COMPARISON(GE)
3296 CHECK_OS_COMPARISON(LT)
3297 CHECK_OS_COMPARISON(LE)
3298 #undef CHECK_OS_COMPARISON
3301 sym = gfc_search_interface (ns->op[i], 0, &actual);
3309 /* TODO: Do an ambiguity-check and error if multiple matching interfaces are
3310 found rather than just taking the first one and not checking further. */
3314 gfc_typebound_proc* tbo;
3317 /* See if we find a matching type-bound operator. */
3318 if (i == INTRINSIC_USER)
3319 tbo = matching_typebound_op (&tb_base, actual,
3320 i, e->value.op.uop->name, &gname);
3324 #define CHECK_OS_COMPARISON(comp) \
3325 case INTRINSIC_##comp: \
3326 case INTRINSIC_##comp##_OS: \
3327 tbo = matching_typebound_op (&tb_base, actual, \
3328 INTRINSIC_##comp, NULL, &gname); \
3330 tbo = matching_typebound_op (&tb_base, actual, \
3331 INTRINSIC_##comp##_OS, NULL, &gname); \
3333 CHECK_OS_COMPARISON(EQ)
3334 CHECK_OS_COMPARISON(NE)
3335 CHECK_OS_COMPARISON(GT)
3336 CHECK_OS_COMPARISON(GE)
3337 CHECK_OS_COMPARISON(LT)
3338 CHECK_OS_COMPARISON(LE)
3339 #undef CHECK_OS_COMPARISON
3342 tbo = matching_typebound_op (&tb_base, actual, i, NULL, &gname);
3346 /* If there is a matching typebound-operator, replace the expression with
3347 a call to it and succeed. */
3352 gcc_assert (tb_base);
3353 build_compcall_for_operator (e, actual, tb_base, tbo, gname);
3355 result = gfc_resolve_expr (e);
3356 if (result == FAILURE)
3362 /* Don't use gfc_free_actual_arglist(). */
3363 free (actual->next);
3369 /* Change the expression node to a function call. */
3370 e->expr_type = EXPR_FUNCTION;
3371 e->symtree = gfc_find_sym_in_symtree (sym);
3372 e->value.function.actual = actual;
3373 e->value.function.esym = NULL;
3374 e->value.function.isym = NULL;
3375 e->value.function.name = NULL;
3376 e->user_operator = 1;
3378 if (gfc_resolve_expr (e) == FAILURE)
3385 /* Tries to replace an assignment code node with a subroutine call to
3386 the subroutine associated with the assignment operator. Return
3387 SUCCESS if the node was replaced. On FAILURE, no error is
3391 gfc_extend_assign (gfc_code *c, gfc_namespace *ns)
3393 gfc_actual_arglist *actual;
3394 gfc_expr *lhs, *rhs;
3403 /* Don't allow an intrinsic assignment to be replaced. */
3404 if (lhs->ts.type != BT_DERIVED && lhs->ts.type != BT_CLASS
3405 && (rhs->rank == 0 || rhs->rank == lhs->rank)
3406 && (lhs->ts.type == rhs->ts.type
3407 || (gfc_numeric_ts (&lhs->ts) && gfc_numeric_ts (&rhs->ts))))
3410 actual = gfc_get_actual_arglist ();
3413 actual->next = gfc_get_actual_arglist ();
3414 actual->next->expr = rhs;
3418 for (; ns; ns = ns->parent)
3420 sym = gfc_search_interface (ns->op[INTRINSIC_ASSIGN], 1, &actual);
3425 /* TODO: Ambiguity-check, see above for gfc_extend_expr. */
3429 gfc_typebound_proc* tbo;
3432 /* See if we find a matching type-bound assignment. */
3433 tbo = matching_typebound_op (&tb_base, actual,
3434 INTRINSIC_ASSIGN, NULL, &gname);
3436 /* If there is one, replace the expression with a call to it and
3440 gcc_assert (tb_base);
3441 c->expr1 = gfc_get_expr ();
3442 build_compcall_for_operator (c->expr1, actual, tb_base, tbo, gname);
3443 c->expr1->value.compcall.assign = 1;
3444 c->expr1->where = c->loc;
3446 c->op = EXEC_COMPCALL;
3448 /* c is resolved from the caller, so no need to do it here. */
3453 free (actual->next);
3458 /* Replace the assignment with the call. */
3459 c->op = EXEC_ASSIGN_CALL;
3460 c->symtree = gfc_find_sym_in_symtree (sym);
3463 c->ext.actual = actual;
3469 /* Make sure that the interface just parsed is not already present in
3470 the given interface list. Ambiguity isn't checked yet since module
3471 procedures can be present without interfaces. */
3474 check_new_interface (gfc_interface *base, gfc_symbol *new_sym)
3478 for (ip = base; ip; ip = ip->next)
3480 if (ip->sym == new_sym)
3482 gfc_error ("Entity '%s' at %C is already present in the interface",
3492 /* Add a symbol to the current interface. */
3495 gfc_add_interface (gfc_symbol *new_sym)
3497 gfc_interface **head, *intr;
3501 switch (current_interface.type)
3503 case INTERFACE_NAMELESS:
3504 case INTERFACE_ABSTRACT:
3507 case INTERFACE_INTRINSIC_OP:
3508 for (ns = current_interface.ns; ns; ns = ns->parent)
3509 switch (current_interface.op)
3512 case INTRINSIC_EQ_OS:
3513 if (check_new_interface (ns->op[INTRINSIC_EQ], new_sym) == FAILURE ||
3514 check_new_interface (ns->op[INTRINSIC_EQ_OS], new_sym) == FAILURE)
3519 case INTRINSIC_NE_OS:
3520 if (check_new_interface (ns->op[INTRINSIC_NE], new_sym) == FAILURE ||
3521 check_new_interface (ns->op[INTRINSIC_NE_OS], new_sym) == FAILURE)
3526 case INTRINSIC_GT_OS:
3527 if (check_new_interface (ns->op[INTRINSIC_GT], new_sym) == FAILURE ||
3528 check_new_interface (ns->op[INTRINSIC_GT_OS], new_sym) == FAILURE)
3533 case INTRINSIC_GE_OS:
3534 if (check_new_interface (ns->op[INTRINSIC_GE], new_sym) == FAILURE ||
3535 check_new_interface (ns->op[INTRINSIC_GE_OS], new_sym) == FAILURE)
3540 case INTRINSIC_LT_OS:
3541 if (check_new_interface (ns->op[INTRINSIC_LT], new_sym) == FAILURE ||
3542 check_new_interface (ns->op[INTRINSIC_LT_OS], new_sym) == FAILURE)
3547 case INTRINSIC_LE_OS:
3548 if (check_new_interface (ns->op[INTRINSIC_LE], new_sym) == FAILURE ||
3549 check_new_interface (ns->op[INTRINSIC_LE_OS], new_sym) == FAILURE)
3554 if (check_new_interface (ns->op[current_interface.op], new_sym) == FAILURE)
3558 head = ¤t_interface.ns->op[current_interface.op];
3561 case INTERFACE_GENERIC:
3562 for (ns = current_interface.ns; ns; ns = ns->parent)
3564 gfc_find_symbol (current_interface.sym->name, ns, 0, &sym);
3568 if (check_new_interface (sym->generic, new_sym) == FAILURE)
3572 head = ¤t_interface.sym->generic;
3575 case INTERFACE_USER_OP:
3576 if (check_new_interface (current_interface.uop->op, new_sym)
3580 head = ¤t_interface.uop->op;
3584 gfc_internal_error ("gfc_add_interface(): Bad interface type");
3587 intr = gfc_get_interface ();
3588 intr->sym = new_sym;
3589 intr->where = gfc_current_locus;
3599 gfc_current_interface_head (void)
3601 switch (current_interface.type)
3603 case INTERFACE_INTRINSIC_OP:
3604 return current_interface.ns->op[current_interface.op];
3607 case INTERFACE_GENERIC:
3608 return current_interface.sym->generic;
3611 case INTERFACE_USER_OP:
3612 return current_interface.uop->op;
3622 gfc_set_current_interface_head (gfc_interface *i)
3624 switch (current_interface.type)
3626 case INTERFACE_INTRINSIC_OP:
3627 current_interface.ns->op[current_interface.op] = i;
3630 case INTERFACE_GENERIC:
3631 current_interface.sym->generic = i;
3634 case INTERFACE_USER_OP:
3635 current_interface.uop->op = i;
3644 /* Gets rid of a formal argument list. We do not free symbols.
3645 Symbols are freed when a namespace is freed. */
3648 gfc_free_formal_arglist (gfc_formal_arglist *p)
3650 gfc_formal_arglist *q;
3660 /* Check that it is ok for the type-bound procedure 'proc' to override the
3661 procedure 'old', cf. F08:4.5.7.3. */
3664 gfc_check_typebound_override (gfc_symtree* proc, gfc_symtree* old)
3667 const gfc_symbol *proc_target, *old_target;
3668 unsigned proc_pass_arg, old_pass_arg, argpos;
3669 gfc_formal_arglist *proc_formal, *old_formal;
3673 /* This procedure should only be called for non-GENERIC proc. */
3674 gcc_assert (!proc->n.tb->is_generic);
3676 /* If the overwritten procedure is GENERIC, this is an error. */
3677 if (old->n.tb->is_generic)
3679 gfc_error ("Can't overwrite GENERIC '%s' at %L",
3680 old->name, &proc->n.tb->where);
3684 where = proc->n.tb->where;
3685 proc_target = proc->n.tb->u.specific->n.sym;
3686 old_target = old->n.tb->u.specific->n.sym;
3688 /* Check that overridden binding is not NON_OVERRIDABLE. */
3689 if (old->n.tb->non_overridable)
3691 gfc_error ("'%s' at %L overrides a procedure binding declared"
3692 " NON_OVERRIDABLE", proc->name, &where);
3696 /* It's an error to override a non-DEFERRED procedure with a DEFERRED one. */
3697 if (!old->n.tb->deferred && proc->n.tb->deferred)
3699 gfc_error ("'%s' at %L must not be DEFERRED as it overrides a"
3700 " non-DEFERRED binding", proc->name, &where);
3704 /* If the overridden binding is PURE, the overriding must be, too. */
3705 if (old_target->attr.pure && !proc_target->attr.pure)
3707 gfc_error ("'%s' at %L overrides a PURE procedure and must also be PURE",
3708 proc->name, &where);
3712 /* If the overridden binding is ELEMENTAL, the overriding must be, too. If it
3713 is not, the overriding must not be either. */
3714 if (old_target->attr.elemental && !proc_target->attr.elemental)
3716 gfc_error ("'%s' at %L overrides an ELEMENTAL procedure and must also be"
3717 " ELEMENTAL", proc->name, &where);
3720 if (!old_target->attr.elemental && proc_target->attr.elemental)
3722 gfc_error ("'%s' at %L overrides a non-ELEMENTAL procedure and must not"
3723 " be ELEMENTAL, either", proc->name, &where);
3727 /* If the overridden binding is a SUBROUTINE, the overriding must also be a
3729 if (old_target->attr.subroutine && !proc_target->attr.subroutine)
3731 gfc_error ("'%s' at %L overrides a SUBROUTINE and must also be a"
3732 " SUBROUTINE", proc->name, &where);
3736 /* If the overridden binding is a FUNCTION, the overriding must also be a
3737 FUNCTION and have the same characteristics. */
3738 if (old_target->attr.function)
3740 if (!proc_target->attr.function)
3742 gfc_error ("'%s' at %L overrides a FUNCTION and must also be a"
3743 " FUNCTION", proc->name, &where);
3747 /* FIXME: Do more comprehensive checking (including, for instance, the
3749 gcc_assert (proc_target->result && old_target->result);
3750 if (!compare_type_rank (proc_target->result, old_target->result))
3752 gfc_error ("'%s' at %L and the overridden FUNCTION should have"
3753 " matching result types and ranks", proc->name, &where);
3757 /* Check string length. */
3758 if (proc_target->result->ts.type == BT_CHARACTER
3759 && proc_target->result->ts.u.cl && old_target->result->ts.u.cl)
3761 int compval = gfc_dep_compare_expr (proc_target->result->ts.u.cl->length,
3762 old_target->result->ts.u.cl->length);
3768 gfc_error ("Character length mismatch between '%s' at '%L' and "
3769 "overridden FUNCTION", proc->name, &where);
3773 gfc_warning ("Possible character length mismatch between '%s' at"
3774 " '%L' and overridden FUNCTION", proc->name, &where);
3781 gfc_internal_error ("gfc_check_typebound_override: Unexpected "
3782 "result %i of gfc_dep_compare_expr", compval);
3788 /* If the overridden binding is PUBLIC, the overriding one must not be
3790 if (old->n.tb->access == ACCESS_PUBLIC
3791 && proc->n.tb->access == ACCESS_PRIVATE)
3793 gfc_error ("'%s' at %L overrides a PUBLIC procedure and must not be"
3794 " PRIVATE", proc->name, &where);
3798 /* Compare the formal argument lists of both procedures. This is also abused
3799 to find the position of the passed-object dummy arguments of both
3800 bindings as at least the overridden one might not yet be resolved and we
3801 need those positions in the check below. */
3802 proc_pass_arg = old_pass_arg = 0;
3803 if (!proc->n.tb->nopass && !proc->n.tb->pass_arg)
3805 if (!old->n.tb->nopass && !old->n.tb->pass_arg)
3808 for (proc_formal = proc_target->formal, old_formal = old_target->formal;
3809 proc_formal && old_formal;
3810 proc_formal = proc_formal->next, old_formal = old_formal->next)
3812 if (proc->n.tb->pass_arg
3813 && !strcmp (proc->n.tb->pass_arg, proc_formal->sym->name))
3814 proc_pass_arg = argpos;
3815 if (old->n.tb->pass_arg
3816 && !strcmp (old->n.tb->pass_arg, old_formal->sym->name))
3817 old_pass_arg = argpos;
3819 /* Check that the names correspond. */
3820 if (strcmp (proc_formal->sym->name, old_formal->sym->name))
3822 gfc_error ("Dummy argument '%s' of '%s' at %L should be named '%s' as"
3823 " to match the corresponding argument of the overridden"
3824 " procedure", proc_formal->sym->name, proc->name, &where,
3825 old_formal->sym->name);
3829 check_type = proc_pass_arg != argpos && old_pass_arg != argpos;
3830 if (check_dummy_characteristics (proc_formal->sym, old_formal->sym,
3831 check_type, err, sizeof(err)) == FAILURE)
3833 gfc_error ("Argument mismatch for the overriding procedure "
3834 "'%s' at %L: %s", proc->name, &where, err);
3840 if (proc_formal || old_formal)
3842 gfc_error ("'%s' at %L must have the same number of formal arguments as"
3843 " the overridden procedure", proc->name, &where);
3847 /* If the overridden binding is NOPASS, the overriding one must also be
3849 if (old->n.tb->nopass && !proc->n.tb->nopass)
3851 gfc_error ("'%s' at %L overrides a NOPASS binding and must also be"
3852 " NOPASS", proc->name, &where);
3856 /* If the overridden binding is PASS(x), the overriding one must also be
3857 PASS and the passed-object dummy arguments must correspond. */
3858 if (!old->n.tb->nopass)
3860 if (proc->n.tb->nopass)
3862 gfc_error ("'%s' at %L overrides a binding with PASS and must also be"
3863 " PASS", proc->name, &where);
3867 if (proc_pass_arg != old_pass_arg)
3869 gfc_error ("Passed-object dummy argument of '%s' at %L must be at"
3870 " the same position as the passed-object dummy argument of"
3871 " the overridden procedure", proc->name, &where);