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 /* F2003, C1207. F2008, C1207. */
1296 if (p->sym->attr.proc == PROC_INTERNAL
1297 && gfc_notify_std (GFC_STD_F2008, "Fortran 2008: Internal procedure "
1298 "'%s' in %s at %L", p->sym->name, interface_name,
1299 &p->sym->declared_at) == FAILURE)
1304 /* Remove duplicate interfaces in this interface list. */
1305 for (; p; p = p->next)
1309 for (q = p->next; q;)
1311 if (p->sym != q->sym)
1318 /* Duplicate interface. */
1319 qlast->next = q->next;
1330 /* Check lists of interfaces to make sure that no two interfaces are
1331 ambiguous. Duplicate interfaces (from the same symbol) are OK here. */
1334 check_interface1 (gfc_interface *p, gfc_interface *q0,
1335 int generic_flag, const char *interface_name,
1339 for (; p; p = p->next)
1340 for (q = q0; q; q = q->next)
1342 if (p->sym == q->sym)
1343 continue; /* Duplicates OK here. */
1345 if (p->sym->name == q->sym->name && p->sym->module == q->sym->module)
1348 if (p->sym->attr.flavor != FL_DERIVED
1349 && q->sym->attr.flavor != FL_DERIVED
1350 && gfc_compare_interfaces (p->sym, q->sym, q->sym->name,
1351 generic_flag, 0, NULL, 0))
1354 gfc_error ("Ambiguous interfaces '%s' and '%s' in %s at %L",
1355 p->sym->name, q->sym->name, interface_name,
1357 else if (!p->sym->attr.use_assoc && q->sym->attr.use_assoc)
1358 gfc_warning ("Ambiguous interfaces '%s' and '%s' in %s at %L",
1359 p->sym->name, q->sym->name, interface_name,
1362 gfc_warning ("Although not referenced, '%s' has ambiguous "
1363 "interfaces at %L", interface_name, &p->where);
1371 /* Check the generic and operator interfaces of symbols to make sure
1372 that none of the interfaces conflict. The check has to be done
1373 after all of the symbols are actually loaded. */
1376 check_sym_interfaces (gfc_symbol *sym)
1378 char interface_name[100];
1381 if (sym->ns != gfc_current_ns)
1384 if (sym->generic != NULL)
1386 sprintf (interface_name, "generic interface '%s'", sym->name);
1387 if (check_interface0 (sym->generic, interface_name))
1390 for (p = sym->generic; p; p = p->next)
1392 if (p->sym->attr.mod_proc
1393 && (p->sym->attr.if_source != IFSRC_DECL
1394 || p->sym->attr.procedure))
1396 gfc_error ("'%s' at %L is not a module procedure",
1397 p->sym->name, &p->where);
1402 /* Originally, this test was applied to host interfaces too;
1403 this is incorrect since host associated symbols, from any
1404 source, cannot be ambiguous with local symbols. */
1405 check_interface1 (sym->generic, sym->generic, 1, interface_name,
1406 sym->attr.referenced || !sym->attr.use_assoc);
1412 check_uop_interfaces (gfc_user_op *uop)
1414 char interface_name[100];
1418 sprintf (interface_name, "operator interface '%s'", uop->name);
1419 if (check_interface0 (uop->op, interface_name))
1422 for (ns = gfc_current_ns; ns; ns = ns->parent)
1424 uop2 = gfc_find_uop (uop->name, ns);
1428 check_interface1 (uop->op, uop2->op, 0,
1429 interface_name, true);
1433 /* Given an intrinsic op, return an equivalent op if one exists,
1434 or INTRINSIC_NONE otherwise. */
1437 gfc_equivalent_op (gfc_intrinsic_op op)
1442 return INTRINSIC_EQ_OS;
1444 case INTRINSIC_EQ_OS:
1445 return INTRINSIC_EQ;
1448 return INTRINSIC_NE_OS;
1450 case INTRINSIC_NE_OS:
1451 return INTRINSIC_NE;
1454 return INTRINSIC_GT_OS;
1456 case INTRINSIC_GT_OS:
1457 return INTRINSIC_GT;
1460 return INTRINSIC_GE_OS;
1462 case INTRINSIC_GE_OS:
1463 return INTRINSIC_GE;
1466 return INTRINSIC_LT_OS;
1468 case INTRINSIC_LT_OS:
1469 return INTRINSIC_LT;
1472 return INTRINSIC_LE_OS;
1474 case INTRINSIC_LE_OS:
1475 return INTRINSIC_LE;
1478 return INTRINSIC_NONE;
1482 /* For the namespace, check generic, user operator and intrinsic
1483 operator interfaces for consistency and to remove duplicate
1484 interfaces. We traverse the whole namespace, counting on the fact
1485 that most symbols will not have generic or operator interfaces. */
1488 gfc_check_interfaces (gfc_namespace *ns)
1490 gfc_namespace *old_ns, *ns2;
1491 char interface_name[100];
1494 old_ns = gfc_current_ns;
1495 gfc_current_ns = ns;
1497 gfc_traverse_ns (ns, check_sym_interfaces);
1499 gfc_traverse_user_op (ns, check_uop_interfaces);
1501 for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++)
1503 if (i == INTRINSIC_USER)
1506 if (i == INTRINSIC_ASSIGN)
1507 strcpy (interface_name, "intrinsic assignment operator");
1509 sprintf (interface_name, "intrinsic '%s' operator",
1510 gfc_op2string ((gfc_intrinsic_op) i));
1512 if (check_interface0 (ns->op[i], interface_name))
1516 gfc_check_operator_interface (ns->op[i]->sym, (gfc_intrinsic_op) i,
1519 for (ns2 = ns; ns2; ns2 = ns2->parent)
1521 gfc_intrinsic_op other_op;
1523 if (check_interface1 (ns->op[i], ns2->op[i], 0,
1524 interface_name, true))
1527 /* i should be gfc_intrinsic_op, but has to be int with this cast
1528 here for stupid C++ compatibility rules. */
1529 other_op = gfc_equivalent_op ((gfc_intrinsic_op) i);
1530 if (other_op != INTRINSIC_NONE
1531 && check_interface1 (ns->op[i], ns2->op[other_op],
1532 0, interface_name, true))
1538 gfc_current_ns = old_ns;
1543 symbol_rank (gfc_symbol *sym)
1545 if (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as)
1546 return CLASS_DATA (sym)->as->rank;
1548 return (sym->as == NULL) ? 0 : sym->as->rank;
1552 /* Given a symbol of a formal argument list and an expression, if the
1553 formal argument is allocatable, check that the actual argument is
1554 allocatable. Returns nonzero if compatible, zero if not compatible. */
1557 compare_allocatable (gfc_symbol *formal, gfc_expr *actual)
1559 symbol_attribute attr;
1561 if (formal->attr.allocatable
1562 || (formal->ts.type == BT_CLASS && CLASS_DATA (formal)->attr.allocatable))
1564 attr = gfc_expr_attr (actual);
1565 if (!attr.allocatable)
1573 /* Given a symbol of a formal argument list and an expression, if the
1574 formal argument is a pointer, see if the actual argument is a
1575 pointer. Returns nonzero if compatible, zero if not compatible. */
1578 compare_pointer (gfc_symbol *formal, gfc_expr *actual)
1580 symbol_attribute attr;
1582 if (formal->attr.pointer)
1584 attr = gfc_expr_attr (actual);
1586 /* Fortran 2008 allows non-pointer actual arguments. */
1587 if (!attr.pointer && attr.target && formal->attr.intent == INTENT_IN)
1598 /* Emit clear error messages for rank mismatch. */
1601 argument_rank_mismatch (const char *name, locus *where,
1602 int rank1, int rank2)
1606 gfc_error ("Rank mismatch in argument '%s' at %L "
1607 "(scalar and rank-%d)", name, where, rank2);
1609 else if (rank2 == 0)
1611 gfc_error ("Rank mismatch in argument '%s' at %L "
1612 "(rank-%d and scalar)", name, where, rank1);
1616 gfc_error ("Rank mismatch in argument '%s' at %L "
1617 "(rank-%d and rank-%d)", name, where, rank1, rank2);
1622 /* Given a symbol of a formal argument list and an expression, see if
1623 the two are compatible as arguments. Returns nonzero if
1624 compatible, zero if not compatible. */
1627 compare_parameter (gfc_symbol *formal, gfc_expr *actual,
1628 int ranks_must_agree, int is_elemental, locus *where)
1631 bool rank_check, is_pointer;
1633 /* If the formal arg has type BT_VOID, it's to one of the iso_c_binding
1634 procs c_f_pointer or c_f_procpointer, and we need to accept most
1635 pointers the user could give us. This should allow that. */
1636 if (formal->ts.type == BT_VOID)
1639 if (formal->ts.type == BT_DERIVED
1640 && formal->ts.u.derived && formal->ts.u.derived->ts.is_iso_c
1641 && actual->ts.type == BT_DERIVED
1642 && actual->ts.u.derived && actual->ts.u.derived->ts.is_iso_c)
1645 if (formal->ts.type == BT_CLASS && actual->ts.type == BT_DERIVED)
1646 /* Make sure the vtab symbol is present when
1647 the module variables are generated. */
1648 gfc_find_derived_vtab (actual->ts.u.derived);
1650 if (actual->ts.type == BT_PROCEDURE)
1653 gfc_symbol *act_sym = actual->symtree->n.sym;
1655 if (formal->attr.flavor != FL_PROCEDURE)
1658 gfc_error ("Invalid procedure argument at %L", &actual->where);
1662 if (!gfc_compare_interfaces (formal, act_sym, act_sym->name, 0, 1, err,
1666 gfc_error ("Interface mismatch in dummy procedure '%s' at %L: %s",
1667 formal->name, &actual->where, err);
1671 if (formal->attr.function && !act_sym->attr.function)
1673 gfc_add_function (&act_sym->attr, act_sym->name,
1674 &act_sym->declared_at);
1675 if (act_sym->ts.type == BT_UNKNOWN
1676 && gfc_set_default_type (act_sym, 1, act_sym->ns) == FAILURE)
1679 else if (formal->attr.subroutine && !act_sym->attr.subroutine)
1680 gfc_add_subroutine (&act_sym->attr, act_sym->name,
1681 &act_sym->declared_at);
1687 if (formal->attr.pointer && formal->attr.contiguous
1688 && !gfc_is_simply_contiguous (actual, true))
1691 gfc_error ("Actual argument to contiguous pointer dummy '%s' at %L "
1692 "must be simply contigous", formal->name, &actual->where);
1696 if ((actual->expr_type != EXPR_NULL || actual->ts.type != BT_UNKNOWN)
1697 && actual->ts.type != BT_HOLLERITH
1698 && !gfc_compare_types (&formal->ts, &actual->ts)
1699 && !(formal->ts.type == BT_DERIVED && actual->ts.type == BT_CLASS
1700 && gfc_compare_derived_types (formal->ts.u.derived,
1701 CLASS_DATA (actual)->ts.u.derived)))
1704 gfc_error ("Type mismatch in argument '%s' at %L; passed %s to %s",
1705 formal->name, &actual->where, gfc_typename (&actual->ts),
1706 gfc_typename (&formal->ts));
1710 /* F2008, 12.5.2.5. */
1711 if (formal->ts.type == BT_CLASS
1712 && (CLASS_DATA (formal)->attr.class_pointer
1713 || CLASS_DATA (formal)->attr.allocatable))
1715 if (actual->ts.type != BT_CLASS)
1718 gfc_error ("Actual argument to '%s' at %L must be polymorphic",
1719 formal->name, &actual->where);
1722 if (!gfc_compare_derived_types (CLASS_DATA (actual)->ts.u.derived,
1723 CLASS_DATA (formal)->ts.u.derived))
1726 gfc_error ("Actual argument to '%s' at %L must have the same "
1727 "declared type", formal->name, &actual->where);
1732 if (formal->attr.codimension && !gfc_is_coarray (actual))
1735 gfc_error ("Actual argument to '%s' at %L must be a coarray",
1736 formal->name, &actual->where);
1740 if (formal->attr.codimension && formal->attr.allocatable)
1742 gfc_ref *last = NULL;
1744 for (ref = actual->ref; ref; ref = ref->next)
1745 if (ref->type == REF_COMPONENT)
1748 /* F2008, 12.5.2.6. */
1749 if ((last && last->u.c.component->as->corank != formal->as->corank)
1751 && actual->symtree->n.sym->as->corank != formal->as->corank))
1754 gfc_error ("Corank mismatch in argument '%s' at %L (%d and %d)",
1755 formal->name, &actual->where, formal->as->corank,
1756 last ? last->u.c.component->as->corank
1757 : actual->symtree->n.sym->as->corank);
1762 if (formal->attr.codimension)
1764 /* F2008, 12.5.2.8. */
1765 if (formal->attr.dimension
1766 && (formal->attr.contiguous || formal->as->type != AS_ASSUMED_SHAPE)
1767 && gfc_expr_attr (actual).dimension
1768 && !gfc_is_simply_contiguous (actual, true))
1771 gfc_error ("Actual argument to '%s' at %L must be simply "
1772 "contiguous", formal->name, &actual->where);
1776 /* F2008, C1303 and C1304. */
1777 if (formal->attr.intent != INTENT_INOUT
1778 && (((formal->ts.type == BT_DERIVED || formal->ts.type == BT_CLASS)
1779 && formal->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
1780 && formal->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)
1781 || formal->attr.lock_comp))
1785 gfc_error ("Actual argument to non-INTENT(INOUT) dummy '%s' at %L, "
1786 "which is LOCK_TYPE or has a LOCK_TYPE component",
1787 formal->name, &actual->where);
1792 /* F2008, C1239/C1240. */
1793 if (actual->expr_type == EXPR_VARIABLE
1794 && (actual->symtree->n.sym->attr.asynchronous
1795 || actual->symtree->n.sym->attr.volatile_)
1796 && (formal->attr.asynchronous || formal->attr.volatile_)
1797 && actual->rank && !gfc_is_simply_contiguous (actual, true)
1798 && ((formal->as->type != AS_ASSUMED_SHAPE && !formal->attr.pointer)
1799 || formal->attr.contiguous))
1802 gfc_error ("Dummy argument '%s' has to be a pointer or assumed-shape "
1803 "array without CONTIGUOUS attribute - as actual argument at"
1804 " %L is not simply contiguous and both are ASYNCHRONOUS "
1805 "or VOLATILE", formal->name, &actual->where);
1809 if (formal->attr.allocatable && !formal->attr.codimension
1810 && gfc_expr_attr (actual).codimension)
1812 if (formal->attr.intent == INTENT_OUT)
1815 gfc_error ("Passing coarray at %L to allocatable, noncoarray, "
1816 "INTENT(OUT) dummy argument '%s'", &actual->where,
1820 else if (gfc_option.warn_surprising && where
1821 && formal->attr.intent != INTENT_IN)
1822 gfc_warning ("Passing coarray at %L to allocatable, noncoarray dummy "
1823 "argument '%s', which is invalid if the allocation status"
1824 " is modified", &actual->where, formal->name);
1827 if (symbol_rank (formal) == actual->rank)
1830 if (actual->ts.type == BT_CLASS && CLASS_DATA (actual)->as
1831 && CLASS_DATA (actual)->as->rank == symbol_rank (formal))
1834 rank_check = where != NULL && !is_elemental && formal->as
1835 && (formal->as->type == AS_ASSUMED_SHAPE
1836 || formal->as->type == AS_DEFERRED)
1837 && actual->expr_type != EXPR_NULL;
1839 /* Scalar & coindexed, see: F2008, Section 12.5.2.4. */
1840 if (rank_check || ranks_must_agree
1841 || (formal->attr.pointer && actual->expr_type != EXPR_NULL)
1842 || (actual->rank != 0 && !(is_elemental || formal->attr.dimension))
1843 || (actual->rank == 0
1844 && ((formal->ts.type == BT_CLASS
1845 && CLASS_DATA (formal)->as->type == AS_ASSUMED_SHAPE)
1846 || (formal->ts.type != BT_CLASS
1847 && formal->as->type == AS_ASSUMED_SHAPE))
1848 && actual->expr_type != EXPR_NULL)
1849 || (actual->rank == 0 && formal->attr.dimension
1850 && gfc_is_coindexed (actual)))
1853 argument_rank_mismatch (formal->name, &actual->where,
1854 symbol_rank (formal), actual->rank);
1857 else if (actual->rank != 0 && (is_elemental || formal->attr.dimension))
1860 /* At this point, we are considering a scalar passed to an array. This
1861 is valid (cf. F95 12.4.1.1, F2003 12.4.1.2, and F2008 12.5.2.4),
1862 - if the actual argument is (a substring of) an element of a
1863 non-assumed-shape/non-pointer/non-polymorphic array; or
1864 - (F2003) if the actual argument is of type character of default/c_char
1867 is_pointer = actual->expr_type == EXPR_VARIABLE
1868 ? actual->symtree->n.sym->attr.pointer : false;
1870 for (ref = actual->ref; ref; ref = ref->next)
1872 if (ref->type == REF_COMPONENT)
1873 is_pointer = ref->u.c.component->attr.pointer;
1874 else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT
1875 && ref->u.ar.dimen > 0
1877 || (ref->next->type == REF_SUBSTRING && !ref->next->next)))
1881 if (actual->ts.type == BT_CLASS && actual->expr_type != EXPR_NULL)
1884 gfc_error ("Polymorphic scalar passed to array dummy argument '%s' "
1885 "at %L", formal->name, &actual->where);
1889 if (actual->expr_type != EXPR_NULL && ref && actual->ts.type != BT_CHARACTER
1890 && (is_pointer || ref->u.ar.as->type == AS_ASSUMED_SHAPE))
1893 gfc_error ("Element of assumed-shaped or pointer "
1894 "array passed to array dummy argument '%s' at %L",
1895 formal->name, &actual->where);
1899 if (actual->ts.type == BT_CHARACTER && actual->expr_type != EXPR_NULL
1900 && (!ref || is_pointer || ref->u.ar.as->type == AS_ASSUMED_SHAPE))
1902 if (formal->ts.kind != 1 && (gfc_option.allow_std & GFC_STD_GNU) == 0)
1905 gfc_error ("Extension: Scalar non-default-kind, non-C_CHAR-kind "
1906 "CHARACTER actual argument with array dummy argument "
1907 "'%s' at %L", formal->name, &actual->where);
1911 if (where && (gfc_option.allow_std & GFC_STD_F2003) == 0)
1913 gfc_error ("Fortran 2003: Scalar CHARACTER actual argument with "
1914 "array dummy argument '%s' at %L",
1915 formal->name, &actual->where);
1918 else if ((gfc_option.allow_std & GFC_STD_F2003) == 0)
1924 if (ref == NULL && actual->expr_type != EXPR_NULL)
1927 argument_rank_mismatch (formal->name, &actual->where,
1928 symbol_rank (formal), actual->rank);
1936 /* Returns the storage size of a symbol (formal argument) or
1937 zero if it cannot be determined. */
1939 static unsigned long
1940 get_sym_storage_size (gfc_symbol *sym)
1943 unsigned long strlen, elements;
1945 if (sym->ts.type == BT_CHARACTER)
1947 if (sym->ts.u.cl && sym->ts.u.cl->length
1948 && sym->ts.u.cl->length->expr_type == EXPR_CONSTANT)
1949 strlen = mpz_get_ui (sym->ts.u.cl->length->value.integer);
1956 if (symbol_rank (sym) == 0)
1960 if (sym->as->type != AS_EXPLICIT)
1962 for (i = 0; i < sym->as->rank; i++)
1964 if (!sym->as || sym->as->upper[i]->expr_type != EXPR_CONSTANT
1965 || sym->as->lower[i]->expr_type != EXPR_CONSTANT)
1968 elements *= mpz_get_si (sym->as->upper[i]->value.integer)
1969 - mpz_get_si (sym->as->lower[i]->value.integer) + 1L;
1972 return strlen*elements;
1976 /* Returns the storage size of an expression (actual argument) or
1977 zero if it cannot be determined. For an array element, it returns
1978 the remaining size as the element sequence consists of all storage
1979 units of the actual argument up to the end of the array. */
1981 static unsigned long
1982 get_expr_storage_size (gfc_expr *e)
1985 long int strlen, elements;
1986 long int substrlen = 0;
1987 bool is_str_storage = false;
1993 if (e->ts.type == BT_CHARACTER)
1995 if (e->ts.u.cl && e->ts.u.cl->length
1996 && e->ts.u.cl->length->expr_type == EXPR_CONSTANT)
1997 strlen = mpz_get_si (e->ts.u.cl->length->value.integer);
1998 else if (e->expr_type == EXPR_CONSTANT
1999 && (e->ts.u.cl == NULL || e->ts.u.cl->length == NULL))
2000 strlen = e->value.character.length;
2005 strlen = 1; /* Length per element. */
2007 if (e->rank == 0 && !e->ref)
2015 for (i = 0; i < e->rank; i++)
2016 elements *= mpz_get_si (e->shape[i]);
2017 return elements*strlen;
2020 for (ref = e->ref; ref; ref = ref->next)
2022 if (ref->type == REF_SUBSTRING && ref->u.ss.start
2023 && ref->u.ss.start->expr_type == EXPR_CONSTANT)
2027 /* The string length is the substring length.
2028 Set now to full string length. */
2029 if (!ref->u.ss.length || !ref->u.ss.length->length
2030 || ref->u.ss.length->length->expr_type != EXPR_CONSTANT)
2033 strlen = mpz_get_ui (ref->u.ss.length->length->value.integer);
2035 substrlen = strlen - mpz_get_ui (ref->u.ss.start->value.integer) + 1;
2039 if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION
2040 && ref->u.ar.start && ref->u.ar.end && ref->u.ar.stride
2041 && ref->u.ar.as->upper)
2042 for (i = 0; i < ref->u.ar.dimen; i++)
2044 long int start, end, stride;
2047 if (ref->u.ar.stride[i])
2049 if (ref->u.ar.stride[i]->expr_type == EXPR_CONSTANT)
2050 stride = mpz_get_si (ref->u.ar.stride[i]->value.integer);
2055 if (ref->u.ar.start[i])
2057 if (ref->u.ar.start[i]->expr_type == EXPR_CONSTANT)
2058 start = mpz_get_si (ref->u.ar.start[i]->value.integer);
2062 else if (ref->u.ar.as->lower[i]
2063 && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT)
2064 start = mpz_get_si (ref->u.ar.as->lower[i]->value.integer);
2068 if (ref->u.ar.end[i])
2070 if (ref->u.ar.end[i]->expr_type == EXPR_CONSTANT)
2071 end = mpz_get_si (ref->u.ar.end[i]->value.integer);
2075 else if (ref->u.ar.as->upper[i]
2076 && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
2077 end = mpz_get_si (ref->u.ar.as->upper[i]->value.integer);
2081 elements *= (end - start)/stride + 1L;
2083 else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_FULL
2084 && ref->u.ar.as->lower && ref->u.ar.as->upper)
2085 for (i = 0; i < ref->u.ar.as->rank; i++)
2087 if (ref->u.ar.as->lower[i] && ref->u.ar.as->upper[i]
2088 && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT
2089 && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
2090 elements *= mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
2091 - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
2096 else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT
2097 && e->expr_type == EXPR_VARIABLE)
2099 if (ref->u.ar.as->type == AS_ASSUMED_SHAPE
2100 || e->symtree->n.sym->attr.pointer)
2106 /* Determine the number of remaining elements in the element
2107 sequence for array element designators. */
2108 is_str_storage = true;
2109 for (i = ref->u.ar.dimen - 1; i >= 0; i--)
2111 if (ref->u.ar.start[i] == NULL
2112 || ref->u.ar.start[i]->expr_type != EXPR_CONSTANT
2113 || ref->u.ar.as->upper[i] == NULL
2114 || ref->u.ar.as->lower[i] == NULL
2115 || ref->u.ar.as->upper[i]->expr_type != EXPR_CONSTANT
2116 || ref->u.ar.as->lower[i]->expr_type != EXPR_CONSTANT)
2121 * (mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
2122 - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
2124 - (mpz_get_si (ref->u.ar.start[i]->value.integer)
2125 - mpz_get_si (ref->u.ar.as->lower[i]->value.integer));
2131 return (is_str_storage) ? substrlen + (elements-1)*strlen
2134 return elements*strlen;
2138 /* Given an expression, check whether it is an array section
2139 which has a vector subscript. If it has, one is returned,
2143 gfc_has_vector_subscript (gfc_expr *e)
2148 if (e == NULL || e->rank == 0 || e->expr_type != EXPR_VARIABLE)
2151 for (ref = e->ref; ref; ref = ref->next)
2152 if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION)
2153 for (i = 0; i < ref->u.ar.dimen; i++)
2154 if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
2161 /* Given formal and actual argument lists, see if they are compatible.
2162 If they are compatible, the actual argument list is sorted to
2163 correspond with the formal list, and elements for missing optional
2164 arguments are inserted. If WHERE pointer is nonnull, then we issue
2165 errors when things don't match instead of just returning the status
2169 compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
2170 int ranks_must_agree, int is_elemental, locus *where)
2172 gfc_actual_arglist **new_arg, *a, *actual, temp;
2173 gfc_formal_arglist *f;
2175 unsigned long actual_size, formal_size;
2176 bool full_array = false;
2180 if (actual == NULL && formal == NULL)
2184 for (f = formal; f; f = f->next)
2187 new_arg = XALLOCAVEC (gfc_actual_arglist *, n);
2189 for (i = 0; i < n; i++)
2196 for (a = actual; a; a = a->next, f = f->next)
2198 /* Look for keywords but ignore g77 extensions like %VAL. */
2199 if (a->name != NULL && a->name[0] != '%')
2202 for (f = formal; f; f = f->next, i++)
2206 if (strcmp (f->sym->name, a->name) == 0)
2213 gfc_error ("Keyword argument '%s' at %L is not in "
2214 "the procedure", a->name, &a->expr->where);
2218 if (new_arg[i] != NULL)
2221 gfc_error ("Keyword argument '%s' at %L is already associated "
2222 "with another actual argument", a->name,
2231 gfc_error ("More actual than formal arguments in procedure "
2232 "call at %L", where);
2237 if (f->sym == NULL && a->expr == NULL)
2243 gfc_error ("Missing alternate return spec in subroutine call "
2248 if (a->expr == NULL)
2251 gfc_error ("Unexpected alternate return spec in subroutine "
2252 "call at %L", where);
2256 if (a->expr->expr_type == EXPR_NULL && !f->sym->attr.pointer
2257 && (f->sym->attr.allocatable || !f->sym->attr.optional
2258 || (gfc_option.allow_std & GFC_STD_F2008) == 0))
2260 if (where && (f->sym->attr.allocatable || !f->sym->attr.optional))
2261 gfc_error ("Unexpected NULL() intrinsic at %L to dummy '%s'",
2262 where, f->sym->name);
2264 gfc_error ("Fortran 2008: Null pointer at %L to non-pointer "
2265 "dummy '%s'", where, f->sym->name);
2270 if (!compare_parameter (f->sym, a->expr, ranks_must_agree,
2271 is_elemental, where))
2274 /* Special case for character arguments. For allocatable, pointer
2275 and assumed-shape dummies, the string length needs to match
2277 if (a->expr->ts.type == BT_CHARACTER
2278 && a->expr->ts.u.cl && a->expr->ts.u.cl->length
2279 && a->expr->ts.u.cl->length->expr_type == EXPR_CONSTANT
2280 && f->sym->ts.u.cl && f->sym->ts.u.cl && f->sym->ts.u.cl->length
2281 && f->sym->ts.u.cl->length->expr_type == EXPR_CONSTANT
2282 && (f->sym->attr.pointer || f->sym->attr.allocatable
2283 || (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2284 && (mpz_cmp (a->expr->ts.u.cl->length->value.integer,
2285 f->sym->ts.u.cl->length->value.integer) != 0))
2287 if (where && (f->sym->attr.pointer || f->sym->attr.allocatable))
2288 gfc_warning ("Character length mismatch (%ld/%ld) between actual "
2289 "argument and pointer or allocatable dummy argument "
2291 mpz_get_si (a->expr->ts.u.cl->length->value.integer),
2292 mpz_get_si (f->sym->ts.u.cl->length->value.integer),
2293 f->sym->name, &a->expr->where);
2295 gfc_warning ("Character length mismatch (%ld/%ld) between actual "
2296 "argument and assumed-shape dummy argument '%s' "
2298 mpz_get_si (a->expr->ts.u.cl->length->value.integer),
2299 mpz_get_si (f->sym->ts.u.cl->length->value.integer),
2300 f->sym->name, &a->expr->where);
2304 if ((f->sym->attr.pointer || f->sym->attr.allocatable)
2305 && f->sym->ts.deferred != a->expr->ts.deferred
2306 && a->expr->ts.type == BT_CHARACTER)
2309 gfc_error ("Actual argument at %L to allocatable or "
2310 "pointer dummy argument '%s' must have a deferred "
2311 "length type parameter if and only if the dummy has one",
2312 &a->expr->where, f->sym->name);
2316 if (f->sym->ts.type == BT_CLASS)
2317 goto skip_size_check;
2319 actual_size = get_expr_storage_size (a->expr);
2320 formal_size = get_sym_storage_size (f->sym);
2321 if (actual_size != 0 && actual_size < formal_size
2322 && a->expr->ts.type != BT_PROCEDURE
2323 && f->sym->attr.flavor != FL_PROCEDURE)
2325 if (a->expr->ts.type == BT_CHARACTER && !f->sym->as && where)
2326 gfc_warning ("Character length of actual argument shorter "
2327 "than of dummy argument '%s' (%lu/%lu) at %L",
2328 f->sym->name, actual_size, formal_size,
2331 gfc_warning ("Actual argument contains too few "
2332 "elements for dummy argument '%s' (%lu/%lu) at %L",
2333 f->sym->name, actual_size, formal_size,
2340 /* Satisfy 12.4.1.3 by ensuring that a procedure pointer actual argument
2341 is provided for a procedure pointer formal argument. */
2342 if (f->sym->attr.proc_pointer
2343 && !((a->expr->expr_type == EXPR_VARIABLE
2344 && a->expr->symtree->n.sym->attr.proc_pointer)
2345 || (a->expr->expr_type == EXPR_FUNCTION
2346 && a->expr->symtree->n.sym->result->attr.proc_pointer)
2347 || gfc_is_proc_ptr_comp (a->expr, NULL)))
2350 gfc_error ("Expected a procedure pointer for argument '%s' at %L",
2351 f->sym->name, &a->expr->where);
2355 /* Satisfy 12.4.1.2 by ensuring that a procedure actual argument is
2356 provided for a procedure formal argument. */
2357 if (a->expr->ts.type != BT_PROCEDURE && !gfc_is_proc_ptr_comp (a->expr, NULL)
2358 && a->expr->expr_type == EXPR_VARIABLE
2359 && f->sym->attr.flavor == FL_PROCEDURE)
2362 gfc_error ("Expected a procedure for argument '%s' at %L",
2363 f->sym->name, &a->expr->where);
2367 if (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE
2368 && a->expr->expr_type == EXPR_VARIABLE
2369 && a->expr->symtree->n.sym->as
2370 && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SIZE
2371 && (a->expr->ref == NULL
2372 || (a->expr->ref->type == REF_ARRAY
2373 && a->expr->ref->u.ar.type == AR_FULL)))
2376 gfc_error ("Actual argument for '%s' cannot be an assumed-size"
2377 " array at %L", f->sym->name, where);
2381 if (a->expr->expr_type != EXPR_NULL
2382 && compare_pointer (f->sym, a->expr) == 0)
2385 gfc_error ("Actual argument for '%s' must be a pointer at %L",
2386 f->sym->name, &a->expr->where);
2390 if (a->expr->expr_type != EXPR_NULL
2391 && (gfc_option.allow_std & GFC_STD_F2008) == 0
2392 && compare_pointer (f->sym, a->expr) == 2)
2395 gfc_error ("Fortran 2008: Non-pointer actual argument at %L to "
2396 "pointer dummy '%s'", &a->expr->where,f->sym->name);
2401 /* Fortran 2008, C1242. */
2402 if (f->sym->attr.pointer && gfc_is_coindexed (a->expr))
2405 gfc_error ("Coindexed actual argument at %L to pointer "
2407 &a->expr->where, f->sym->name);
2411 /* Fortran 2008, 12.5.2.5 (no constraint). */
2412 if (a->expr->expr_type == EXPR_VARIABLE
2413 && f->sym->attr.intent != INTENT_IN
2414 && f->sym->attr.allocatable
2415 && gfc_is_coindexed (a->expr))
2418 gfc_error ("Coindexed actual argument at %L to allocatable "
2419 "dummy '%s' requires INTENT(IN)",
2420 &a->expr->where, f->sym->name);
2424 /* Fortran 2008, C1237. */
2425 if (a->expr->expr_type == EXPR_VARIABLE
2426 && (f->sym->attr.asynchronous || f->sym->attr.volatile_)
2427 && gfc_is_coindexed (a->expr)
2428 && (a->expr->symtree->n.sym->attr.volatile_
2429 || a->expr->symtree->n.sym->attr.asynchronous))
2432 gfc_error ("Coindexed ASYNCHRONOUS or VOLATILE actual argument at "
2433 "%L requires that dummy '%s' has neither "
2434 "ASYNCHRONOUS nor VOLATILE", &a->expr->where,
2439 /* Fortran 2008, 12.5.2.4 (no constraint). */
2440 if (a->expr->expr_type == EXPR_VARIABLE
2441 && f->sym->attr.intent != INTENT_IN && !f->sym->attr.value
2442 && gfc_is_coindexed (a->expr)
2443 && gfc_has_ultimate_allocatable (a->expr))
2446 gfc_error ("Coindexed actual argument at %L with allocatable "
2447 "ultimate component to dummy '%s' requires either VALUE "
2448 "or INTENT(IN)", &a->expr->where, f->sym->name);
2452 if (f->sym->ts.type == BT_CLASS
2453 && CLASS_DATA (f->sym)->attr.allocatable
2454 && gfc_is_class_array_ref (a->expr, &full_array)
2458 gfc_error ("Actual CLASS array argument for '%s' must be a full "
2459 "array at %L", f->sym->name, &a->expr->where);
2464 if (a->expr->expr_type != EXPR_NULL
2465 && compare_allocatable (f->sym, a->expr) == 0)
2468 gfc_error ("Actual argument for '%s' must be ALLOCATABLE at %L",
2469 f->sym->name, &a->expr->where);
2473 /* Check intent = OUT/INOUT for definable actual argument. */
2474 if ((f->sym->attr.intent == INTENT_OUT
2475 || f->sym->attr.intent == INTENT_INOUT))
2477 const char* context = (where
2478 ? _("actual argument to INTENT = OUT/INOUT")
2481 if (f->sym->attr.pointer
2482 && gfc_check_vardef_context (a->expr, true, false, context)
2485 if (gfc_check_vardef_context (a->expr, false, false, context)
2490 if ((f->sym->attr.intent == INTENT_OUT
2491 || f->sym->attr.intent == INTENT_INOUT
2492 || f->sym->attr.volatile_
2493 || f->sym->attr.asynchronous)
2494 && gfc_has_vector_subscript (a->expr))
2497 gfc_error ("Array-section actual argument with vector "
2498 "subscripts at %L is incompatible with INTENT(OUT), "
2499 "INTENT(INOUT), VOLATILE or ASYNCHRONOUS attribute "
2500 "of the dummy argument '%s'",
2501 &a->expr->where, f->sym->name);
2505 /* C1232 (R1221) For an actual argument which is an array section or
2506 an assumed-shape array, the dummy argument shall be an assumed-
2507 shape array, if the dummy argument has the VOLATILE attribute. */
2509 if (f->sym->attr.volatile_
2510 && a->expr->symtree->n.sym->as
2511 && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
2512 && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2515 gfc_error ("Assumed-shape actual argument at %L is "
2516 "incompatible with the non-assumed-shape "
2517 "dummy argument '%s' due to VOLATILE attribute",
2518 &a->expr->where,f->sym->name);
2522 if (f->sym->attr.volatile_
2523 && a->expr->ref && a->expr->ref->u.ar.type == AR_SECTION
2524 && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2527 gfc_error ("Array-section actual argument at %L is "
2528 "incompatible with the non-assumed-shape "
2529 "dummy argument '%s' due to VOLATILE attribute",
2530 &a->expr->where,f->sym->name);
2534 /* C1233 (R1221) For an actual argument which is a pointer array, the
2535 dummy argument shall be an assumed-shape or pointer array, if the
2536 dummy argument has the VOLATILE attribute. */
2538 if (f->sym->attr.volatile_
2539 && a->expr->symtree->n.sym->attr.pointer
2540 && a->expr->symtree->n.sym->as
2542 && (f->sym->as->type == AS_ASSUMED_SHAPE
2543 || f->sym->attr.pointer)))
2546 gfc_error ("Pointer-array actual argument at %L requires "
2547 "an assumed-shape or pointer-array dummy "
2548 "argument '%s' due to VOLATILE attribute",
2549 &a->expr->where,f->sym->name);
2560 /* Make sure missing actual arguments are optional. */
2562 for (f = formal; f; f = f->next, i++)
2564 if (new_arg[i] != NULL)
2569 gfc_error ("Missing alternate return spec in subroutine call "
2573 if (!f->sym->attr.optional)
2576 gfc_error ("Missing actual argument for argument '%s' at %L",
2577 f->sym->name, where);
2582 /* The argument lists are compatible. We now relink a new actual
2583 argument list with null arguments in the right places. The head
2584 of the list remains the head. */
2585 for (i = 0; i < n; i++)
2586 if (new_arg[i] == NULL)
2587 new_arg[i] = gfc_get_actual_arglist ();
2592 *new_arg[0] = *actual;
2596 new_arg[0] = new_arg[na];
2600 for (i = 0; i < n - 1; i++)
2601 new_arg[i]->next = new_arg[i + 1];
2603 new_arg[i]->next = NULL;
2605 if (*ap == NULL && n > 0)
2608 /* Note the types of omitted optional arguments. */
2609 for (a = *ap, f = formal; a; a = a->next, f = f->next)
2610 if (a->expr == NULL && a->label == NULL)
2611 a->missing_arg_type = f->sym->ts.type;
2619 gfc_formal_arglist *f;
2620 gfc_actual_arglist *a;
2624 /* qsort comparison function for argument pairs, with the following
2626 - p->a->expr == NULL
2627 - p->a->expr->expr_type != EXPR_VARIABLE
2628 - growing p->a->expr->symbol. */
2631 pair_cmp (const void *p1, const void *p2)
2633 const gfc_actual_arglist *a1, *a2;
2635 /* *p1 and *p2 are elements of the to-be-sorted array. */
2636 a1 = ((const argpair *) p1)->a;
2637 a2 = ((const argpair *) p2)->a;
2646 if (a1->expr->expr_type != EXPR_VARIABLE)
2648 if (a2->expr->expr_type != EXPR_VARIABLE)
2652 if (a2->expr->expr_type != EXPR_VARIABLE)
2654 return a1->expr->symtree->n.sym < a2->expr->symtree->n.sym;
2658 /* Given two expressions from some actual arguments, test whether they
2659 refer to the same expression. The analysis is conservative.
2660 Returning FAILURE will produce no warning. */
2663 compare_actual_expr (gfc_expr *e1, gfc_expr *e2)
2665 const gfc_ref *r1, *r2;
2668 || e1->expr_type != EXPR_VARIABLE
2669 || e2->expr_type != EXPR_VARIABLE
2670 || e1->symtree->n.sym != e2->symtree->n.sym)
2673 /* TODO: improve comparison, see expr.c:show_ref(). */
2674 for (r1 = e1->ref, r2 = e2->ref; r1 && r2; r1 = r1->next, r2 = r2->next)
2676 if (r1->type != r2->type)
2681 if (r1->u.ar.type != r2->u.ar.type)
2683 /* TODO: At the moment, consider only full arrays;
2684 we could do better. */
2685 if (r1->u.ar.type != AR_FULL || r2->u.ar.type != AR_FULL)
2690 if (r1->u.c.component != r2->u.c.component)
2698 gfc_internal_error ("compare_actual_expr(): Bad component code");
2707 /* Given formal and actual argument lists that correspond to one
2708 another, check that identical actual arguments aren't not
2709 associated with some incompatible INTENTs. */
2712 check_some_aliasing (gfc_formal_arglist *f, gfc_actual_arglist *a)
2714 sym_intent f1_intent, f2_intent;
2715 gfc_formal_arglist *f1;
2716 gfc_actual_arglist *a1;
2719 gfc_try t = SUCCESS;
2722 for (f1 = f, a1 = a;; f1 = f1->next, a1 = a1->next)
2724 if (f1 == NULL && a1 == NULL)
2726 if (f1 == NULL || a1 == NULL)
2727 gfc_internal_error ("check_some_aliasing(): List mismatch");
2732 p = XALLOCAVEC (argpair, n);
2734 for (i = 0, f1 = f, a1 = a; i < n; i++, f1 = f1->next, a1 = a1->next)
2740 qsort (p, n, sizeof (argpair), pair_cmp);
2742 for (i = 0; i < n; i++)
2745 || p[i].a->expr->expr_type != EXPR_VARIABLE
2746 || p[i].a->expr->ts.type == BT_PROCEDURE)
2748 f1_intent = p[i].f->sym->attr.intent;
2749 for (j = i + 1; j < n; j++)
2751 /* Expected order after the sort. */
2752 if (!p[j].a->expr || p[j].a->expr->expr_type != EXPR_VARIABLE)
2753 gfc_internal_error ("check_some_aliasing(): corrupted data");
2755 /* Are the expression the same? */
2756 if (compare_actual_expr (p[i].a->expr, p[j].a->expr) == FAILURE)
2758 f2_intent = p[j].f->sym->attr.intent;
2759 if ((f1_intent == INTENT_IN && f2_intent == INTENT_OUT)
2760 || (f1_intent == INTENT_OUT && f2_intent == INTENT_IN))
2762 gfc_warning ("Same actual argument associated with INTENT(%s) "
2763 "argument '%s' and INTENT(%s) argument '%s' at %L",
2764 gfc_intent_string (f1_intent), p[i].f->sym->name,
2765 gfc_intent_string (f2_intent), p[j].f->sym->name,
2766 &p[i].a->expr->where);
2776 /* Given a symbol of a formal argument list and an expression,
2777 return nonzero if their intents are compatible, zero otherwise. */
2780 compare_parameter_intent (gfc_symbol *formal, gfc_expr *actual)
2782 if (actual->symtree->n.sym->attr.pointer && !formal->attr.pointer)
2785 if (actual->symtree->n.sym->attr.intent != INTENT_IN)
2788 if (formal->attr.intent == INTENT_INOUT || formal->attr.intent == INTENT_OUT)
2795 /* Given formal and actual argument lists that correspond to one
2796 another, check that they are compatible in the sense that intents
2797 are not mismatched. */
2800 check_intents (gfc_formal_arglist *f, gfc_actual_arglist *a)
2802 sym_intent f_intent;
2804 for (;; f = f->next, a = a->next)
2806 if (f == NULL && a == NULL)
2808 if (f == NULL || a == NULL)
2809 gfc_internal_error ("check_intents(): List mismatch");
2811 if (a->expr == NULL || a->expr->expr_type != EXPR_VARIABLE)
2814 f_intent = f->sym->attr.intent;
2816 if (!compare_parameter_intent(f->sym, a->expr))
2818 gfc_error ("Procedure argument at %L is INTENT(IN) while interface "
2819 "specifies INTENT(%s)", &a->expr->where,
2820 gfc_intent_string (f_intent));
2824 if (gfc_pure (NULL) && gfc_impure_variable (a->expr->symtree->n.sym))
2826 if (f_intent == INTENT_INOUT || f_intent == INTENT_OUT)
2828 gfc_error ("Procedure argument at %L is local to a PURE "
2829 "procedure and is passed to an INTENT(%s) argument",
2830 &a->expr->where, gfc_intent_string (f_intent));
2834 if (f->sym->attr.pointer)
2836 gfc_error ("Procedure argument at %L is local to a PURE "
2837 "procedure and has the POINTER attribute",
2843 /* Fortran 2008, C1283. */
2844 if (gfc_pure (NULL) && gfc_is_coindexed (a->expr))
2846 if (f_intent == INTENT_INOUT || f_intent == INTENT_OUT)
2848 gfc_error ("Coindexed actual argument at %L in PURE procedure "
2849 "is passed to an INTENT(%s) argument",
2850 &a->expr->where, gfc_intent_string (f_intent));
2854 if (f->sym->attr.pointer)
2856 gfc_error ("Coindexed actual argument at %L in PURE procedure "
2857 "is passed to a POINTER dummy argument",
2863 /* F2008, Section 12.5.2.4. */
2864 if (a->expr->ts.type == BT_CLASS && f->sym->ts.type == BT_CLASS
2865 && gfc_is_coindexed (a->expr))
2867 gfc_error ("Coindexed polymorphic actual argument at %L is passed "
2868 "polymorphic dummy argument '%s'",
2869 &a->expr->where, f->sym->name);
2878 /* Check how a procedure is used against its interface. If all goes
2879 well, the actual argument list will also end up being properly
2883 gfc_procedure_use (gfc_symbol *sym, gfc_actual_arglist **ap, locus *where)
2886 /* Warn about calls with an implicit interface. Special case
2887 for calling a ISO_C_BINDING becase c_loc and c_funloc
2888 are pseudo-unknown. Additionally, warn about procedures not
2889 explicitly declared at all if requested. */
2890 if (sym->attr.if_source == IFSRC_UNKNOWN && ! sym->attr.is_iso_c)
2892 if (gfc_option.warn_implicit_interface)
2893 gfc_warning ("Procedure '%s' called with an implicit interface at %L",
2895 else if (gfc_option.warn_implicit_procedure
2896 && sym->attr.proc == PROC_UNKNOWN)
2897 gfc_warning ("Procedure '%s' called at %L is not explicitly declared",
2901 if (sym->attr.if_source == IFSRC_UNKNOWN)
2903 gfc_actual_arglist *a;
2905 if (sym->attr.pointer)
2907 gfc_error("The pointer object '%s' at %L must have an explicit "
2908 "function interface or be declared as array",
2913 if (sym->attr.allocatable && !sym->attr.external)
2915 gfc_error("The allocatable object '%s' at %L must have an explicit "
2916 "function interface or be declared as array",
2921 if (sym->attr.allocatable)
2923 gfc_error("Allocatable function '%s' at %L must have an explicit "
2924 "function interface", sym->name, where);
2928 for (a = *ap; a; a = a->next)
2930 /* Skip g77 keyword extensions like %VAL, %REF, %LOC. */
2931 if (a->name != NULL && a->name[0] != '%')
2933 gfc_error("Keyword argument requires explicit interface "
2934 "for procedure '%s' at %L", sym->name, &a->expr->where);
2938 /* F2008, C1303 and C1304. */
2940 && (a->expr->ts.type == BT_DERIVED || a->expr->ts.type == BT_CLASS)
2941 && ((a->expr->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
2942 && a->expr->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)
2943 || gfc_expr_attr (a->expr).lock_comp))
2945 gfc_error("Actual argument of LOCK_TYPE or with LOCK_TYPE "
2946 "component at %L requires an explicit interface for "
2947 "procedure '%s'", &a->expr->where, sym->name);
2951 if (a->expr && a->expr->expr_type == EXPR_NULL
2952 && a->expr->ts.type == BT_UNKNOWN)
2954 gfc_error ("MOLD argument to NULL required at %L", &a->expr->where);
2962 if (!compare_actual_formal (ap, sym->formal, 0, sym->attr.elemental, where))
2965 check_intents (sym->formal, *ap);
2966 if (gfc_option.warn_aliasing)
2967 check_some_aliasing (sym->formal, *ap);
2971 /* Check how a procedure pointer component is used against its interface.
2972 If all goes well, the actual argument list will also end up being properly
2973 sorted. Completely analogous to gfc_procedure_use. */
2976 gfc_ppc_use (gfc_component *comp, gfc_actual_arglist **ap, locus *where)
2979 /* Warn about calls with an implicit interface. Special case
2980 for calling a ISO_C_BINDING becase c_loc and c_funloc
2981 are pseudo-unknown. */
2982 if (gfc_option.warn_implicit_interface
2983 && comp->attr.if_source == IFSRC_UNKNOWN
2984 && !comp->attr.is_iso_c)
2985 gfc_warning ("Procedure pointer component '%s' called with an implicit "
2986 "interface at %L", comp->name, where);
2988 if (comp->attr.if_source == IFSRC_UNKNOWN)
2990 gfc_actual_arglist *a;
2991 for (a = *ap; a; a = a->next)
2993 /* Skip g77 keyword extensions like %VAL, %REF, %LOC. */
2994 if (a->name != NULL && a->name[0] != '%')
2996 gfc_error("Keyword argument requires explicit interface "
2997 "for procedure pointer component '%s' at %L",
2998 comp->name, &a->expr->where);
3006 if (!compare_actual_formal (ap, comp->formal, 0, comp->attr.elemental, where))
3009 check_intents (comp->formal, *ap);
3010 if (gfc_option.warn_aliasing)
3011 check_some_aliasing (comp->formal, *ap);
3015 /* Try if an actual argument list matches the formal list of a symbol,
3016 respecting the symbol's attributes like ELEMENTAL. This is used for
3017 GENERIC resolution. */
3020 gfc_arglist_matches_symbol (gfc_actual_arglist** args, gfc_symbol* sym)
3024 gcc_assert (sym->attr.flavor == FL_PROCEDURE);
3026 r = !sym->attr.elemental;
3027 if (compare_actual_formal (args, sym->formal, r, !r, NULL))
3029 check_intents (sym->formal, *args);
3030 if (gfc_option.warn_aliasing)
3031 check_some_aliasing (sym->formal, *args);
3039 /* Given an interface pointer and an actual argument list, search for
3040 a formal argument list that matches the actual. If found, returns
3041 a pointer to the symbol of the correct interface. Returns NULL if
3045 gfc_search_interface (gfc_interface *intr, int sub_flag,
3046 gfc_actual_arglist **ap)
3048 gfc_symbol *elem_sym = NULL;
3049 gfc_symbol *null_sym = NULL;
3050 locus null_expr_loc;
3051 gfc_actual_arglist *a;
3052 bool has_null_arg = false;
3054 for (a = *ap; a; a = a->next)
3055 if (a->expr && a->expr->expr_type == EXPR_NULL
3056 && a->expr->ts.type == BT_UNKNOWN)
3058 has_null_arg = true;
3059 null_expr_loc = a->expr->where;
3063 for (; intr; intr = intr->next)
3065 if (intr->sym->attr.flavor == FL_DERIVED)
3067 if (sub_flag && intr->sym->attr.function)
3069 if (!sub_flag && intr->sym->attr.subroutine)
3072 if (gfc_arglist_matches_symbol (ap, intr->sym))
3074 if (has_null_arg && null_sym)
3076 gfc_error ("MOLD= required in NULL() argument at %L: Ambiguity "
3077 "between specific functions %s and %s",
3078 &null_expr_loc, null_sym->name, intr->sym->name);
3081 else if (has_null_arg)
3083 null_sym = intr->sym;
3087 /* Satisfy 12.4.4.1 such that an elemental match has lower
3088 weight than a non-elemental match. */
3089 if (intr->sym->attr.elemental)
3091 elem_sym = intr->sym;
3101 return elem_sym ? elem_sym : NULL;
3105 /* Do a brute force recursive search for a symbol. */
3107 static gfc_symtree *
3108 find_symtree0 (gfc_symtree *root, gfc_symbol *sym)
3112 if (root->n.sym == sym)
3117 st = find_symtree0 (root->left, sym);
3118 if (root->right && ! st)
3119 st = find_symtree0 (root->right, sym);
3124 /* Find a symtree for a symbol. */
3127 gfc_find_sym_in_symtree (gfc_symbol *sym)
3132 /* First try to find it by name. */
3133 gfc_find_sym_tree (sym->name, gfc_current_ns, 1, &st);
3134 if (st && st->n.sym == sym)
3137 /* If it's been renamed, resort to a brute-force search. */
3138 /* TODO: avoid having to do this search. If the symbol doesn't exist
3139 in the symtree for the current namespace, it should probably be added. */
3140 for (ns = gfc_current_ns; ns; ns = ns->parent)
3142 st = find_symtree0 (ns->sym_root, sym);
3146 gfc_internal_error ("Unable to find symbol %s", sym->name);
3151 /* See if the arglist to an operator-call contains a derived-type argument
3152 with a matching type-bound operator. If so, return the matching specific
3153 procedure defined as operator-target as well as the base-object to use
3154 (which is the found derived-type argument with operator). The generic
3155 name, if any, is transmitted to the final expression via 'gname'. */
3157 static gfc_typebound_proc*
3158 matching_typebound_op (gfc_expr** tb_base,
3159 gfc_actual_arglist* args,
3160 gfc_intrinsic_op op, const char* uop,
3161 const char ** gname)
3163 gfc_actual_arglist* base;
3165 for (base = args; base; base = base->next)
3166 if (base->expr->ts.type == BT_DERIVED || base->expr->ts.type == BT_CLASS)
3168 gfc_typebound_proc* tb;
3169 gfc_symbol* derived;
3172 while (base->expr->expr_type == EXPR_OP
3173 && base->expr->value.op.op == INTRINSIC_PARENTHESES)
3174 base->expr = base->expr->value.op.op1;
3176 if (base->expr->ts.type == BT_CLASS)
3178 if (CLASS_DATA (base->expr) == NULL)
3180 derived = CLASS_DATA (base->expr)->ts.u.derived;
3183 derived = base->expr->ts.u.derived;
3185 if (op == INTRINSIC_USER)
3187 gfc_symtree* tb_uop;
3190 tb_uop = gfc_find_typebound_user_op (derived, &result, uop,
3199 tb = gfc_find_typebound_intrinsic_op (derived, &result, op,
3202 /* This means we hit a PRIVATE operator which is use-associated and
3203 should thus not be seen. */
3204 if (result == FAILURE)
3207 /* Look through the super-type hierarchy for a matching specific
3209 for (; tb; tb = tb->overridden)
3213 gcc_assert (tb->is_generic);
3214 for (g = tb->u.generic; g; g = g->next)
3217 gfc_actual_arglist* argcopy;
3220 gcc_assert (g->specific);
3221 if (g->specific->error)
3224 target = g->specific->u.specific->n.sym;
3226 /* Check if this arglist matches the formal. */
3227 argcopy = gfc_copy_actual_arglist (args);
3228 matches = gfc_arglist_matches_symbol (&argcopy, target);
3229 gfc_free_actual_arglist (argcopy);
3231 /* Return if we found a match. */
3234 *tb_base = base->expr;
3235 *gname = g->specific_st->name;
3246 /* For the 'actual arglist' of an operator call and a specific typebound
3247 procedure that has been found the target of a type-bound operator, build the
3248 appropriate EXPR_COMPCALL and resolve it. We take this indirection over
3249 type-bound procedures rather than resolving type-bound operators 'directly'
3250 so that we can reuse the existing logic. */
3253 build_compcall_for_operator (gfc_expr* e, gfc_actual_arglist* actual,
3254 gfc_expr* base, gfc_typebound_proc* target,
3257 e->expr_type = EXPR_COMPCALL;
3258 e->value.compcall.tbp = target;
3259 e->value.compcall.name = gname ? gname : "$op";
3260 e->value.compcall.actual = actual;
3261 e->value.compcall.base_object = base;
3262 e->value.compcall.ignore_pass = 1;
3263 e->value.compcall.assign = 0;
3264 if (e->ts.type == BT_UNKNOWN
3265 && target->function)
3267 if (target->is_generic)
3268 e->ts = target->u.generic->specific->u.specific->n.sym->ts;
3270 e->ts = target->u.specific->n.sym->ts;
3275 /* This subroutine is called when an expression is being resolved.
3276 The expression node in question is either a user defined operator
3277 or an intrinsic operator with arguments that aren't compatible
3278 with the operator. This subroutine builds an actual argument list
3279 corresponding to the operands, then searches for a compatible
3280 interface. If one is found, the expression node is replaced with
3281 the appropriate function call. We use the 'match' enum to specify
3282 whether a replacement has been made or not, or if an error occurred. */
3285 gfc_extend_expr (gfc_expr *e)
3287 gfc_actual_arglist *actual;
3296 actual = gfc_get_actual_arglist ();
3297 actual->expr = e->value.op.op1;
3301 if (e->value.op.op2 != NULL)
3303 actual->next = gfc_get_actual_arglist ();
3304 actual->next->expr = e->value.op.op2;
3307 i = fold_unary_intrinsic (e->value.op.op);
3309 if (i == INTRINSIC_USER)
3311 for (ns = gfc_current_ns; ns; ns = ns->parent)
3313 uop = gfc_find_uop (e->value.op.uop->name, ns);
3317 sym = gfc_search_interface (uop->op, 0, &actual);
3324 for (ns = gfc_current_ns; ns; ns = ns->parent)
3326 /* Due to the distinction between '==' and '.eq.' and friends, one has
3327 to check if either is defined. */
3330 #define CHECK_OS_COMPARISON(comp) \
3331 case INTRINSIC_##comp: \
3332 case INTRINSIC_##comp##_OS: \
3333 sym = gfc_search_interface (ns->op[INTRINSIC_##comp], 0, &actual); \
3335 sym = gfc_search_interface (ns->op[INTRINSIC_##comp##_OS], 0, &actual); \
3337 CHECK_OS_COMPARISON(EQ)
3338 CHECK_OS_COMPARISON(NE)
3339 CHECK_OS_COMPARISON(GT)
3340 CHECK_OS_COMPARISON(GE)
3341 CHECK_OS_COMPARISON(LT)
3342 CHECK_OS_COMPARISON(LE)
3343 #undef CHECK_OS_COMPARISON
3346 sym = gfc_search_interface (ns->op[i], 0, &actual);
3354 /* TODO: Do an ambiguity-check and error if multiple matching interfaces are
3355 found rather than just taking the first one and not checking further. */
3359 gfc_typebound_proc* tbo;
3362 /* See if we find a matching type-bound operator. */
3363 if (i == INTRINSIC_USER)
3364 tbo = matching_typebound_op (&tb_base, actual,
3365 i, e->value.op.uop->name, &gname);
3369 #define CHECK_OS_COMPARISON(comp) \
3370 case INTRINSIC_##comp: \
3371 case INTRINSIC_##comp##_OS: \
3372 tbo = matching_typebound_op (&tb_base, actual, \
3373 INTRINSIC_##comp, NULL, &gname); \
3375 tbo = matching_typebound_op (&tb_base, actual, \
3376 INTRINSIC_##comp##_OS, NULL, &gname); \
3378 CHECK_OS_COMPARISON(EQ)
3379 CHECK_OS_COMPARISON(NE)
3380 CHECK_OS_COMPARISON(GT)
3381 CHECK_OS_COMPARISON(GE)
3382 CHECK_OS_COMPARISON(LT)
3383 CHECK_OS_COMPARISON(LE)
3384 #undef CHECK_OS_COMPARISON
3387 tbo = matching_typebound_op (&tb_base, actual, i, NULL, &gname);
3391 /* If there is a matching typebound-operator, replace the expression with
3392 a call to it and succeed. */
3397 gcc_assert (tb_base);
3398 build_compcall_for_operator (e, actual, tb_base, tbo, gname);
3400 result = gfc_resolve_expr (e);
3401 if (result == FAILURE)
3407 /* Don't use gfc_free_actual_arglist(). */
3408 free (actual->next);
3414 /* Change the expression node to a function call. */
3415 e->expr_type = EXPR_FUNCTION;
3416 e->symtree = gfc_find_sym_in_symtree (sym);
3417 e->value.function.actual = actual;
3418 e->value.function.esym = NULL;
3419 e->value.function.isym = NULL;
3420 e->value.function.name = NULL;
3421 e->user_operator = 1;
3423 if (gfc_resolve_expr (e) == FAILURE)
3430 /* Tries to replace an assignment code node with a subroutine call to
3431 the subroutine associated with the assignment operator. Return
3432 SUCCESS if the node was replaced. On FAILURE, no error is
3436 gfc_extend_assign (gfc_code *c, gfc_namespace *ns)
3438 gfc_actual_arglist *actual;
3439 gfc_expr *lhs, *rhs;
3448 /* Don't allow an intrinsic assignment to be replaced. */
3449 if (lhs->ts.type != BT_DERIVED && lhs->ts.type != BT_CLASS
3450 && (rhs->rank == 0 || rhs->rank == lhs->rank)
3451 && (lhs->ts.type == rhs->ts.type
3452 || (gfc_numeric_ts (&lhs->ts) && gfc_numeric_ts (&rhs->ts))))
3455 actual = gfc_get_actual_arglist ();
3458 actual->next = gfc_get_actual_arglist ();
3459 actual->next->expr = rhs;
3463 for (; ns; ns = ns->parent)
3465 sym = gfc_search_interface (ns->op[INTRINSIC_ASSIGN], 1, &actual);
3470 /* TODO: Ambiguity-check, see above for gfc_extend_expr. */
3474 gfc_typebound_proc* tbo;
3477 /* See if we find a matching type-bound assignment. */
3478 tbo = matching_typebound_op (&tb_base, actual,
3479 INTRINSIC_ASSIGN, NULL, &gname);
3481 /* If there is one, replace the expression with a call to it and
3485 gcc_assert (tb_base);
3486 c->expr1 = gfc_get_expr ();
3487 build_compcall_for_operator (c->expr1, actual, tb_base, tbo, gname);
3488 c->expr1->value.compcall.assign = 1;
3489 c->expr1->where = c->loc;
3491 c->op = EXEC_COMPCALL;
3493 /* c is resolved from the caller, so no need to do it here. */
3498 free (actual->next);
3503 /* Replace the assignment with the call. */
3504 c->op = EXEC_ASSIGN_CALL;
3505 c->symtree = gfc_find_sym_in_symtree (sym);
3508 c->ext.actual = actual;
3514 /* Make sure that the interface just parsed is not already present in
3515 the given interface list. Ambiguity isn't checked yet since module
3516 procedures can be present without interfaces. */
3519 check_new_interface (gfc_interface *base, gfc_symbol *new_sym)
3523 for (ip = base; ip; ip = ip->next)
3525 if (ip->sym == new_sym)
3527 gfc_error ("Entity '%s' at %C is already present in the interface",
3537 /* Add a symbol to the current interface. */
3540 gfc_add_interface (gfc_symbol *new_sym)
3542 gfc_interface **head, *intr;
3546 switch (current_interface.type)
3548 case INTERFACE_NAMELESS:
3549 case INTERFACE_ABSTRACT:
3552 case INTERFACE_INTRINSIC_OP:
3553 for (ns = current_interface.ns; ns; ns = ns->parent)
3554 switch (current_interface.op)
3557 case INTRINSIC_EQ_OS:
3558 if (check_new_interface (ns->op[INTRINSIC_EQ], new_sym) == FAILURE ||
3559 check_new_interface (ns->op[INTRINSIC_EQ_OS], new_sym) == FAILURE)
3564 case INTRINSIC_NE_OS:
3565 if (check_new_interface (ns->op[INTRINSIC_NE], new_sym) == FAILURE ||
3566 check_new_interface (ns->op[INTRINSIC_NE_OS], new_sym) == FAILURE)
3571 case INTRINSIC_GT_OS:
3572 if (check_new_interface (ns->op[INTRINSIC_GT], new_sym) == FAILURE ||
3573 check_new_interface (ns->op[INTRINSIC_GT_OS], new_sym) == FAILURE)
3578 case INTRINSIC_GE_OS:
3579 if (check_new_interface (ns->op[INTRINSIC_GE], new_sym) == FAILURE ||
3580 check_new_interface (ns->op[INTRINSIC_GE_OS], new_sym) == FAILURE)
3585 case INTRINSIC_LT_OS:
3586 if (check_new_interface (ns->op[INTRINSIC_LT], new_sym) == FAILURE ||
3587 check_new_interface (ns->op[INTRINSIC_LT_OS], new_sym) == FAILURE)
3592 case INTRINSIC_LE_OS:
3593 if (check_new_interface (ns->op[INTRINSIC_LE], new_sym) == FAILURE ||
3594 check_new_interface (ns->op[INTRINSIC_LE_OS], new_sym) == FAILURE)
3599 if (check_new_interface (ns->op[current_interface.op], new_sym) == FAILURE)
3603 head = ¤t_interface.ns->op[current_interface.op];
3606 case INTERFACE_GENERIC:
3607 for (ns = current_interface.ns; ns; ns = ns->parent)
3609 gfc_find_symbol (current_interface.sym->name, ns, 0, &sym);
3613 if (check_new_interface (sym->generic, new_sym) == FAILURE)
3617 head = ¤t_interface.sym->generic;
3620 case INTERFACE_USER_OP:
3621 if (check_new_interface (current_interface.uop->op, new_sym)
3625 head = ¤t_interface.uop->op;
3629 gfc_internal_error ("gfc_add_interface(): Bad interface type");
3632 intr = gfc_get_interface ();
3633 intr->sym = new_sym;
3634 intr->where = gfc_current_locus;
3644 gfc_current_interface_head (void)
3646 switch (current_interface.type)
3648 case INTERFACE_INTRINSIC_OP:
3649 return current_interface.ns->op[current_interface.op];
3652 case INTERFACE_GENERIC:
3653 return current_interface.sym->generic;
3656 case INTERFACE_USER_OP:
3657 return current_interface.uop->op;
3667 gfc_set_current_interface_head (gfc_interface *i)
3669 switch (current_interface.type)
3671 case INTERFACE_INTRINSIC_OP:
3672 current_interface.ns->op[current_interface.op] = i;
3675 case INTERFACE_GENERIC:
3676 current_interface.sym->generic = i;
3679 case INTERFACE_USER_OP:
3680 current_interface.uop->op = i;
3689 /* Gets rid of a formal argument list. We do not free symbols.
3690 Symbols are freed when a namespace is freed. */
3693 gfc_free_formal_arglist (gfc_formal_arglist *p)
3695 gfc_formal_arglist *q;
3705 /* Check that it is ok for the type-bound procedure 'proc' to override the
3706 procedure 'old', cf. F08:4.5.7.3. */
3709 gfc_check_typebound_override (gfc_symtree* proc, gfc_symtree* old)
3712 const gfc_symbol *proc_target, *old_target;
3713 unsigned proc_pass_arg, old_pass_arg, argpos;
3714 gfc_formal_arglist *proc_formal, *old_formal;
3718 /* This procedure should only be called for non-GENERIC proc. */
3719 gcc_assert (!proc->n.tb->is_generic);
3721 /* If the overwritten procedure is GENERIC, this is an error. */
3722 if (old->n.tb->is_generic)
3724 gfc_error ("Can't overwrite GENERIC '%s' at %L",
3725 old->name, &proc->n.tb->where);
3729 where = proc->n.tb->where;
3730 proc_target = proc->n.tb->u.specific->n.sym;
3731 old_target = old->n.tb->u.specific->n.sym;
3733 /* Check that overridden binding is not NON_OVERRIDABLE. */
3734 if (old->n.tb->non_overridable)
3736 gfc_error ("'%s' at %L overrides a procedure binding declared"
3737 " NON_OVERRIDABLE", proc->name, &where);
3741 /* It's an error to override a non-DEFERRED procedure with a DEFERRED one. */
3742 if (!old->n.tb->deferred && proc->n.tb->deferred)
3744 gfc_error ("'%s' at %L must not be DEFERRED as it overrides a"
3745 " non-DEFERRED binding", proc->name, &where);
3749 /* If the overridden binding is PURE, the overriding must be, too. */
3750 if (old_target->attr.pure && !proc_target->attr.pure)
3752 gfc_error ("'%s' at %L overrides a PURE procedure and must also be PURE",
3753 proc->name, &where);
3757 /* If the overridden binding is ELEMENTAL, the overriding must be, too. If it
3758 is not, the overriding must not be either. */
3759 if (old_target->attr.elemental && !proc_target->attr.elemental)
3761 gfc_error ("'%s' at %L overrides an ELEMENTAL procedure and must also be"
3762 " ELEMENTAL", proc->name, &where);
3765 if (!old_target->attr.elemental && proc_target->attr.elemental)
3767 gfc_error ("'%s' at %L overrides a non-ELEMENTAL procedure and must not"
3768 " be ELEMENTAL, either", proc->name, &where);
3772 /* If the overridden binding is a SUBROUTINE, the overriding must also be a
3774 if (old_target->attr.subroutine && !proc_target->attr.subroutine)
3776 gfc_error ("'%s' at %L overrides a SUBROUTINE and must also be a"
3777 " SUBROUTINE", proc->name, &where);
3781 /* If the overridden binding is a FUNCTION, the overriding must also be a
3782 FUNCTION and have the same characteristics. */
3783 if (old_target->attr.function)
3785 if (!proc_target->attr.function)
3787 gfc_error ("'%s' at %L overrides a FUNCTION and must also be a"
3788 " FUNCTION", proc->name, &where);
3792 /* FIXME: Do more comprehensive checking (including, for instance, the
3794 gcc_assert (proc_target->result && old_target->result);
3795 if (!compare_type_rank (proc_target->result, old_target->result))
3797 gfc_error ("'%s' at %L and the overridden FUNCTION should have"
3798 " matching result types and ranks", proc->name, &where);
3802 /* Check string length. */
3803 if (proc_target->result->ts.type == BT_CHARACTER
3804 && proc_target->result->ts.u.cl && old_target->result->ts.u.cl)
3806 int compval = gfc_dep_compare_expr (proc_target->result->ts.u.cl->length,
3807 old_target->result->ts.u.cl->length);
3813 gfc_error ("Character length mismatch between '%s' at '%L' and "
3814 "overridden FUNCTION", proc->name, &where);
3818 gfc_warning ("Possible character length mismatch between '%s' at"
3819 " '%L' and overridden FUNCTION", proc->name, &where);
3826 gfc_internal_error ("gfc_check_typebound_override: Unexpected "
3827 "result %i of gfc_dep_compare_expr", compval);
3833 /* If the overridden binding is PUBLIC, the overriding one must not be
3835 if (old->n.tb->access == ACCESS_PUBLIC
3836 && proc->n.tb->access == ACCESS_PRIVATE)
3838 gfc_error ("'%s' at %L overrides a PUBLIC procedure and must not be"
3839 " PRIVATE", proc->name, &where);
3843 /* Compare the formal argument lists of both procedures. This is also abused
3844 to find the position of the passed-object dummy arguments of both
3845 bindings as at least the overridden one might not yet be resolved and we
3846 need those positions in the check below. */
3847 proc_pass_arg = old_pass_arg = 0;
3848 if (!proc->n.tb->nopass && !proc->n.tb->pass_arg)
3850 if (!old->n.tb->nopass && !old->n.tb->pass_arg)
3853 for (proc_formal = proc_target->formal, old_formal = old_target->formal;
3854 proc_formal && old_formal;
3855 proc_formal = proc_formal->next, old_formal = old_formal->next)
3857 if (proc->n.tb->pass_arg
3858 && !strcmp (proc->n.tb->pass_arg, proc_formal->sym->name))
3859 proc_pass_arg = argpos;
3860 if (old->n.tb->pass_arg
3861 && !strcmp (old->n.tb->pass_arg, old_formal->sym->name))
3862 old_pass_arg = argpos;
3864 /* Check that the names correspond. */
3865 if (strcmp (proc_formal->sym->name, old_formal->sym->name))
3867 gfc_error ("Dummy argument '%s' of '%s' at %L should be named '%s' as"
3868 " to match the corresponding argument of the overridden"
3869 " procedure", proc_formal->sym->name, proc->name, &where,
3870 old_formal->sym->name);
3874 check_type = proc_pass_arg != argpos && old_pass_arg != argpos;
3875 if (check_dummy_characteristics (proc_formal->sym, old_formal->sym,
3876 check_type, err, sizeof(err)) == FAILURE)
3878 gfc_error ("Argument mismatch for the overriding procedure "
3879 "'%s' at %L: %s", proc->name, &where, err);
3885 if (proc_formal || old_formal)
3887 gfc_error ("'%s' at %L must have the same number of formal arguments as"
3888 " the overridden procedure", proc->name, &where);
3892 /* If the overridden binding is NOPASS, the overriding one must also be
3894 if (old->n.tb->nopass && !proc->n.tb->nopass)
3896 gfc_error ("'%s' at %L overrides a NOPASS binding and must also be"
3897 " NOPASS", proc->name, &where);
3901 /* If the overridden binding is PASS(x), the overriding one must also be
3902 PASS and the passed-object dummy arguments must correspond. */
3903 if (!old->n.tb->nopass)
3905 if (proc->n.tb->nopass)
3907 gfc_error ("'%s' at %L overrides a binding with PASS and must also be"
3908 " PASS", proc->name, &where);
3912 if (proc_pass_arg != old_pass_arg)
3914 gfc_error ("Passed-object dummy argument of '%s' at %L must be at"
3915 " the same position as the passed-object dummy argument of"
3916 " the overridden procedure", proc->name, &where);