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 &&
991 (!compare_type_rank (s1, s2) || !compare_type_rank (s2, s1)))
994 snprintf (errmsg, err_len, "Type/rank mismatch in argument '%s'",
1000 if (s1->attr.intent != s2->attr.intent)
1002 snprintf (errmsg, err_len, "INTENT mismatch in argument '%s'",
1007 /* Check OPTIONAL attribute. */
1008 if (s1->attr.optional != s2->attr.optional)
1010 snprintf (errmsg, err_len, "OPTIONAL mismatch in argument '%s'",
1015 /* Check ALLOCATABLE attribute. */
1016 if (s1->attr.allocatable != s2->attr.allocatable)
1018 snprintf (errmsg, err_len, "ALLOCATABLE mismatch in argument '%s'",
1023 /* Check POINTER attribute. */
1024 if (s1->attr.pointer != s2->attr.pointer)
1026 snprintf (errmsg, err_len, "POINTER mismatch in argument '%s'",
1031 /* Check TARGET attribute. */
1032 if (s1->attr.target != s2->attr.target)
1034 snprintf (errmsg, err_len, "TARGET mismatch in argument '%s'",
1039 /* FIXME: Do more comprehensive testing of attributes, like e.g.
1040 ASYNCHRONOUS, CONTIGUOUS, VALUE, VOLATILE, etc. */
1042 /* Check string length. */
1043 if (s1->ts.type == BT_CHARACTER
1044 && s1->ts.u.cl && s1->ts.u.cl->length
1045 && s2->ts.u.cl && s2->ts.u.cl->length)
1047 int compval = gfc_dep_compare_expr (s1->ts.u.cl->length,
1048 s2->ts.u.cl->length);
1054 snprintf (errmsg, err_len, "Character length mismatch "
1055 "in argument '%s'", s1->name);
1059 /* FIXME: Implement a warning for this case.
1060 gfc_warning ("Possible character length mismatch in argument '%s'",
1068 gfc_internal_error ("check_dummy_characteristics: Unexpected result "
1069 "%i of gfc_dep_compare_expr", compval);
1074 /* Check array shape. */
1075 if (s1->as && s2->as)
1078 gfc_expr *shape1, *shape2;
1080 if (s1->as->type != s2->as->type)
1082 snprintf (errmsg, err_len, "Shape mismatch in argument '%s'",
1087 if (s1->as->type == AS_EXPLICIT)
1088 for (i = 0; i < s1->as->rank + s1->as->corank; i++)
1090 shape1 = gfc_subtract (gfc_copy_expr (s1->as->upper[i]),
1091 gfc_copy_expr (s1->as->lower[i]));
1092 shape2 = gfc_subtract (gfc_copy_expr (s2->as->upper[i]),
1093 gfc_copy_expr (s2->as->lower[i]));
1094 compval = gfc_dep_compare_expr (shape1, shape2);
1095 gfc_free_expr (shape1);
1096 gfc_free_expr (shape2);
1102 snprintf (errmsg, err_len, "Shape mismatch in dimension %i of "
1103 "argument '%s'", i + 1, s1->name);
1107 /* FIXME: Implement a warning for this case.
1108 gfc_warning ("Possible shape mismatch in argument '%s'",
1116 gfc_internal_error ("check_dummy_characteristics: Unexpected "
1117 "result %i of gfc_dep_compare_expr",
1128 /* 'Compare' two formal interfaces associated with a pair of symbols.
1129 We return nonzero if there exists an actual argument list that
1130 would be ambiguous between the two interfaces, zero otherwise.
1131 'strict_flag' specifies whether all the characteristics are
1132 required to match, which is not the case for ambiguity checks.*/
1135 gfc_compare_interfaces (gfc_symbol *s1, gfc_symbol *s2, const char *name2,
1136 int generic_flag, int strict_flag,
1137 char *errmsg, int err_len)
1139 gfc_formal_arglist *f1, *f2;
1141 gcc_assert (name2 != NULL);
1143 if (s1->attr.function && (s2->attr.subroutine
1144 || (!s2->attr.function && s2->ts.type == BT_UNKNOWN
1145 && gfc_get_default_type (name2, s2->ns)->type == BT_UNKNOWN)))
1148 snprintf (errmsg, err_len, "'%s' is not a function", name2);
1152 if (s1->attr.subroutine && s2->attr.function)
1155 snprintf (errmsg, err_len, "'%s' is not a subroutine", name2);
1159 /* Do strict checks on all characteristics
1160 (for dummy procedures and procedure pointer assignments). */
1161 if (!generic_flag && strict_flag)
1163 if (s1->attr.function && s2->attr.function)
1165 /* If both are functions, check result type. */
1166 if (s1->ts.type == BT_UNKNOWN)
1168 if (!compare_type_rank (s1,s2))
1171 snprintf (errmsg, err_len, "Type/rank mismatch in return value "
1176 /* FIXME: Check array bounds and string length of result. */
1179 if (s1->attr.pure && !s2->attr.pure)
1181 snprintf (errmsg, err_len, "Mismatch in PURE attribute");
1184 if (s1->attr.elemental && !s2->attr.elemental)
1186 snprintf (errmsg, err_len, "Mismatch in ELEMENTAL attribute");
1191 if (s1->attr.if_source == IFSRC_UNKNOWN
1192 || s2->attr.if_source == IFSRC_UNKNOWN)
1198 if (f1 == NULL && f2 == NULL)
1199 return 1; /* Special case: No arguments. */
1203 if (count_types_test (f1, f2) || count_types_test (f2, f1))
1205 if (generic_correspondence (f1, f2) || generic_correspondence (f2, f1))
1209 /* Perform the abbreviated correspondence test for operators (the
1210 arguments cannot be optional and are always ordered correctly).
1211 This is also done when comparing interfaces for dummy procedures and in
1212 procedure pointer assignments. */
1216 /* Check existence. */
1217 if (f1 == NULL && f2 == NULL)
1219 if (f1 == NULL || f2 == NULL)
1222 snprintf (errmsg, err_len, "'%s' has the wrong number of "
1223 "arguments", name2);
1229 /* Check all characteristics. */
1230 if (check_dummy_characteristics (f1->sym, f2->sym,
1231 true, errmsg, err_len) == FAILURE)
1234 else if (!compare_type_rank (f2->sym, f1->sym))
1236 /* Only check type and rank. */
1238 snprintf (errmsg, err_len, "Type/rank mismatch in argument '%s'",
1251 /* Given a pointer to an interface pointer, remove duplicate
1252 interfaces and make sure that all symbols are either functions
1253 or subroutines, and all of the same kind. Returns nonzero if
1254 something goes wrong. */
1257 check_interface0 (gfc_interface *p, const char *interface_name)
1259 gfc_interface *psave, *q, *qlast;
1262 for (; p; p = p->next)
1264 /* Make sure all symbols in the interface have been defined as
1265 functions or subroutines. */
1266 if (((!p->sym->attr.function && !p->sym->attr.subroutine)
1267 || !p->sym->attr.if_source)
1268 && p->sym->attr.flavor != FL_DERIVED)
1270 if (p->sym->attr.external)
1271 gfc_error ("Procedure '%s' in %s at %L has no explicit interface",
1272 p->sym->name, interface_name, &p->sym->declared_at);
1274 gfc_error ("Procedure '%s' in %s at %L is neither function nor "
1275 "subroutine", p->sym->name, interface_name,
1276 &p->sym->declared_at);
1280 /* Verify that procedures are either all SUBROUTINEs or all FUNCTIONs. */
1281 if ((psave->sym->attr.function && !p->sym->attr.function
1282 && p->sym->attr.flavor != FL_DERIVED)
1283 || (psave->sym->attr.subroutine && !p->sym->attr.subroutine))
1285 if (p->sym->attr.flavor != FL_DERIVED)
1286 gfc_error ("In %s at %L procedures must be either all SUBROUTINEs"
1287 " or all FUNCTIONs", interface_name,
1288 &p->sym->declared_at);
1290 gfc_error ("In %s at %L procedures must be all FUNCTIONs as the "
1291 "generic name is also the name of a derived type",
1292 interface_name, &p->sym->declared_at);
1296 /* F2003, C1207. F2008, C1207. */
1297 if (p->sym->attr.proc == PROC_INTERNAL
1298 && gfc_notify_std (GFC_STD_F2008, "Fortran 2008: Internal procedure "
1299 "'%s' in %s at %L", p->sym->name, interface_name,
1300 &p->sym->declared_at) == FAILURE)
1305 /* Remove duplicate interfaces in this interface list. */
1306 for (; p; p = p->next)
1310 for (q = p->next; q;)
1312 if (p->sym != q->sym)
1319 /* Duplicate interface. */
1320 qlast->next = q->next;
1331 /* Check lists of interfaces to make sure that no two interfaces are
1332 ambiguous. Duplicate interfaces (from the same symbol) are OK here. */
1335 check_interface1 (gfc_interface *p, gfc_interface *q0,
1336 int generic_flag, const char *interface_name,
1340 for (; p; p = p->next)
1341 for (q = q0; q; q = q->next)
1343 if (p->sym == q->sym)
1344 continue; /* Duplicates OK here. */
1346 if (p->sym->name == q->sym->name && p->sym->module == q->sym->module)
1349 if (p->sym->attr.flavor != FL_DERIVED
1350 && q->sym->attr.flavor != FL_DERIVED
1351 && gfc_compare_interfaces (p->sym, q->sym, q->sym->name,
1352 generic_flag, 0, NULL, 0))
1355 gfc_error ("Ambiguous interfaces '%s' and '%s' in %s at %L",
1356 p->sym->name, q->sym->name, interface_name,
1358 else if (!p->sym->attr.use_assoc && q->sym->attr.use_assoc)
1359 gfc_warning ("Ambiguous interfaces '%s' and '%s' in %s at %L",
1360 p->sym->name, q->sym->name, interface_name,
1363 gfc_warning ("Although not referenced, '%s' has ambiguous "
1364 "interfaces at %L", interface_name, &p->where);
1372 /* Check the generic and operator interfaces of symbols to make sure
1373 that none of the interfaces conflict. The check has to be done
1374 after all of the symbols are actually loaded. */
1377 check_sym_interfaces (gfc_symbol *sym)
1379 char interface_name[100];
1382 if (sym->ns != gfc_current_ns)
1385 if (sym->generic != NULL)
1387 sprintf (interface_name, "generic interface '%s'", sym->name);
1388 if (check_interface0 (sym->generic, interface_name))
1391 for (p = sym->generic; p; p = p->next)
1393 if (p->sym->attr.mod_proc
1394 && (p->sym->attr.if_source != IFSRC_DECL
1395 || p->sym->attr.procedure))
1397 gfc_error ("'%s' at %L is not a module procedure",
1398 p->sym->name, &p->where);
1403 /* Originally, this test was applied to host interfaces too;
1404 this is incorrect since host associated symbols, from any
1405 source, cannot be ambiguous with local symbols. */
1406 check_interface1 (sym->generic, sym->generic, 1, interface_name,
1407 sym->attr.referenced || !sym->attr.use_assoc);
1413 check_uop_interfaces (gfc_user_op *uop)
1415 char interface_name[100];
1419 sprintf (interface_name, "operator interface '%s'", uop->name);
1420 if (check_interface0 (uop->op, interface_name))
1423 for (ns = gfc_current_ns; ns; ns = ns->parent)
1425 uop2 = gfc_find_uop (uop->name, ns);
1429 check_interface1 (uop->op, uop2->op, 0,
1430 interface_name, true);
1434 /* Given an intrinsic op, return an equivalent op if one exists,
1435 or INTRINSIC_NONE otherwise. */
1438 gfc_equivalent_op (gfc_intrinsic_op op)
1443 return INTRINSIC_EQ_OS;
1445 case INTRINSIC_EQ_OS:
1446 return INTRINSIC_EQ;
1449 return INTRINSIC_NE_OS;
1451 case INTRINSIC_NE_OS:
1452 return INTRINSIC_NE;
1455 return INTRINSIC_GT_OS;
1457 case INTRINSIC_GT_OS:
1458 return INTRINSIC_GT;
1461 return INTRINSIC_GE_OS;
1463 case INTRINSIC_GE_OS:
1464 return INTRINSIC_GE;
1467 return INTRINSIC_LT_OS;
1469 case INTRINSIC_LT_OS:
1470 return INTRINSIC_LT;
1473 return INTRINSIC_LE_OS;
1475 case INTRINSIC_LE_OS:
1476 return INTRINSIC_LE;
1479 return INTRINSIC_NONE;
1483 /* For the namespace, check generic, user operator and intrinsic
1484 operator interfaces for consistency and to remove duplicate
1485 interfaces. We traverse the whole namespace, counting on the fact
1486 that most symbols will not have generic or operator interfaces. */
1489 gfc_check_interfaces (gfc_namespace *ns)
1491 gfc_namespace *old_ns, *ns2;
1492 char interface_name[100];
1495 old_ns = gfc_current_ns;
1496 gfc_current_ns = ns;
1498 gfc_traverse_ns (ns, check_sym_interfaces);
1500 gfc_traverse_user_op (ns, check_uop_interfaces);
1502 for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++)
1504 if (i == INTRINSIC_USER)
1507 if (i == INTRINSIC_ASSIGN)
1508 strcpy (interface_name, "intrinsic assignment operator");
1510 sprintf (interface_name, "intrinsic '%s' operator",
1511 gfc_op2string ((gfc_intrinsic_op) i));
1513 if (check_interface0 (ns->op[i], interface_name))
1517 gfc_check_operator_interface (ns->op[i]->sym, (gfc_intrinsic_op) i,
1520 for (ns2 = ns; ns2; ns2 = ns2->parent)
1522 gfc_intrinsic_op other_op;
1524 if (check_interface1 (ns->op[i], ns2->op[i], 0,
1525 interface_name, true))
1528 /* i should be gfc_intrinsic_op, but has to be int with this cast
1529 here for stupid C++ compatibility rules. */
1530 other_op = gfc_equivalent_op ((gfc_intrinsic_op) i);
1531 if (other_op != INTRINSIC_NONE
1532 && check_interface1 (ns->op[i], ns2->op[other_op],
1533 0, interface_name, true))
1539 gfc_current_ns = old_ns;
1544 symbol_rank (gfc_symbol *sym)
1546 if (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as)
1547 return CLASS_DATA (sym)->as->rank;
1549 return (sym->as == NULL) ? 0 : sym->as->rank;
1553 /* Given a symbol of a formal argument list and an expression, if the
1554 formal argument is allocatable, check that the actual argument is
1555 allocatable. Returns nonzero if compatible, zero if not compatible. */
1558 compare_allocatable (gfc_symbol *formal, gfc_expr *actual)
1560 symbol_attribute attr;
1562 if (formal->attr.allocatable
1563 || (formal->ts.type == BT_CLASS && CLASS_DATA (formal)->attr.allocatable))
1565 attr = gfc_expr_attr (actual);
1566 if (!attr.allocatable)
1574 /* Given a symbol of a formal argument list and an expression, if the
1575 formal argument is a pointer, see if the actual argument is a
1576 pointer. Returns nonzero if compatible, zero if not compatible. */
1579 compare_pointer (gfc_symbol *formal, gfc_expr *actual)
1581 symbol_attribute attr;
1583 if (formal->attr.pointer)
1585 attr = gfc_expr_attr (actual);
1587 /* Fortran 2008 allows non-pointer actual arguments. */
1588 if (!attr.pointer && attr.target && formal->attr.intent == INTENT_IN)
1599 /* Emit clear error messages for rank mismatch. */
1602 argument_rank_mismatch (const char *name, locus *where,
1603 int rank1, int rank2)
1607 gfc_error ("Rank mismatch in argument '%s' at %L "
1608 "(scalar and rank-%d)", name, where, rank2);
1610 else if (rank2 == 0)
1612 gfc_error ("Rank mismatch in argument '%s' at %L "
1613 "(rank-%d and scalar)", name, where, rank1);
1617 gfc_error ("Rank mismatch in argument '%s' at %L "
1618 "(rank-%d and rank-%d)", name, where, rank1, rank2);
1623 /* Given a symbol of a formal argument list and an expression, see if
1624 the two are compatible as arguments. Returns nonzero if
1625 compatible, zero if not compatible. */
1628 compare_parameter (gfc_symbol *formal, gfc_expr *actual,
1629 int ranks_must_agree, int is_elemental, locus *where)
1632 bool rank_check, is_pointer;
1634 /* If the formal arg has type BT_VOID, it's to one of the iso_c_binding
1635 procs c_f_pointer or c_f_procpointer, and we need to accept most
1636 pointers the user could give us. This should allow that. */
1637 if (formal->ts.type == BT_VOID)
1640 if (formal->ts.type == BT_DERIVED
1641 && formal->ts.u.derived && formal->ts.u.derived->ts.is_iso_c
1642 && actual->ts.type == BT_DERIVED
1643 && actual->ts.u.derived && actual->ts.u.derived->ts.is_iso_c)
1646 if (formal->ts.type == BT_CLASS && actual->ts.type == BT_DERIVED)
1647 /* Make sure the vtab symbol is present when
1648 the module variables are generated. */
1649 gfc_find_derived_vtab (actual->ts.u.derived);
1651 if (actual->ts.type == BT_PROCEDURE)
1654 gfc_symbol *act_sym = actual->symtree->n.sym;
1656 if (formal->attr.flavor != FL_PROCEDURE)
1659 gfc_error ("Invalid procedure argument at %L", &actual->where);
1663 if (!gfc_compare_interfaces (formal, act_sym, act_sym->name, 0, 1, err,
1667 gfc_error ("Interface mismatch in dummy procedure '%s' at %L: %s",
1668 formal->name, &actual->where, err);
1672 if (formal->attr.function && !act_sym->attr.function)
1674 gfc_add_function (&act_sym->attr, act_sym->name,
1675 &act_sym->declared_at);
1676 if (act_sym->ts.type == BT_UNKNOWN
1677 && gfc_set_default_type (act_sym, 1, act_sym->ns) == FAILURE)
1680 else if (formal->attr.subroutine && !act_sym->attr.subroutine)
1681 gfc_add_subroutine (&act_sym->attr, act_sym->name,
1682 &act_sym->declared_at);
1688 if (formal->attr.pointer && formal->attr.contiguous
1689 && !gfc_is_simply_contiguous (actual, true))
1692 gfc_error ("Actual argument to contiguous pointer dummy '%s' at %L "
1693 "must be simply contigous", formal->name, &actual->where);
1697 if ((actual->expr_type != EXPR_NULL || actual->ts.type != BT_UNKNOWN)
1698 && actual->ts.type != BT_HOLLERITH
1699 && !gfc_compare_types (&formal->ts, &actual->ts)
1700 && !(formal->ts.type == BT_DERIVED && actual->ts.type == BT_CLASS
1701 && gfc_compare_derived_types (formal->ts.u.derived,
1702 CLASS_DATA (actual)->ts.u.derived)))
1705 gfc_error ("Type mismatch in argument '%s' at %L; passed %s to %s",
1706 formal->name, &actual->where, gfc_typename (&actual->ts),
1707 gfc_typename (&formal->ts));
1711 /* F2008, 12.5.2.5. */
1712 if (formal->ts.type == BT_CLASS
1713 && (CLASS_DATA (formal)->attr.class_pointer
1714 || CLASS_DATA (formal)->attr.allocatable))
1716 if (actual->ts.type != BT_CLASS)
1719 gfc_error ("Actual argument to '%s' at %L must be polymorphic",
1720 formal->name, &actual->where);
1723 if (!gfc_compare_derived_types (CLASS_DATA (actual)->ts.u.derived,
1724 CLASS_DATA (formal)->ts.u.derived))
1727 gfc_error ("Actual argument to '%s' at %L must have the same "
1728 "declared type", formal->name, &actual->where);
1733 if (formal->attr.codimension && !gfc_is_coarray (actual))
1736 gfc_error ("Actual argument to '%s' at %L must be a coarray",
1737 formal->name, &actual->where);
1741 if (formal->attr.codimension && formal->attr.allocatable)
1743 gfc_ref *last = NULL;
1745 for (ref = actual->ref; ref; ref = ref->next)
1746 if (ref->type == REF_COMPONENT)
1749 /* F2008, 12.5.2.6. */
1750 if ((last && last->u.c.component->as->corank != formal->as->corank)
1752 && actual->symtree->n.sym->as->corank != formal->as->corank))
1755 gfc_error ("Corank mismatch in argument '%s' at %L (%d and %d)",
1756 formal->name, &actual->where, formal->as->corank,
1757 last ? last->u.c.component->as->corank
1758 : actual->symtree->n.sym->as->corank);
1763 if (formal->attr.codimension)
1765 /* F2008, 12.5.2.8. */
1766 if (formal->attr.dimension
1767 && (formal->attr.contiguous || formal->as->type != AS_ASSUMED_SHAPE)
1768 && gfc_expr_attr (actual).dimension
1769 && !gfc_is_simply_contiguous (actual, true))
1772 gfc_error ("Actual argument to '%s' at %L must be simply "
1773 "contiguous", formal->name, &actual->where);
1777 /* F2008, C1303 and C1304. */
1778 if (formal->attr.intent != INTENT_INOUT
1779 && (((formal->ts.type == BT_DERIVED || formal->ts.type == BT_CLASS)
1780 && formal->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
1781 && formal->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)
1782 || formal->attr.lock_comp))
1786 gfc_error ("Actual argument to non-INTENT(INOUT) dummy '%s' at %L, "
1787 "which is LOCK_TYPE or has a LOCK_TYPE component",
1788 formal->name, &actual->where);
1793 /* F2008, C1239/C1240. */
1794 if (actual->expr_type == EXPR_VARIABLE
1795 && (actual->symtree->n.sym->attr.asynchronous
1796 || actual->symtree->n.sym->attr.volatile_)
1797 && (formal->attr.asynchronous || formal->attr.volatile_)
1798 && actual->rank && !gfc_is_simply_contiguous (actual, true)
1799 && ((formal->as->type != AS_ASSUMED_SHAPE && !formal->attr.pointer)
1800 || formal->attr.contiguous))
1803 gfc_error ("Dummy argument '%s' has to be a pointer or assumed-shape "
1804 "array without CONTIGUOUS attribute - as actual argument at"
1805 " %L is not simply contiguous and both are ASYNCHRONOUS "
1806 "or VOLATILE", formal->name, &actual->where);
1810 if (formal->attr.allocatable && !formal->attr.codimension
1811 && gfc_expr_attr (actual).codimension)
1813 if (formal->attr.intent == INTENT_OUT)
1816 gfc_error ("Passing coarray at %L to allocatable, noncoarray, "
1817 "INTENT(OUT) dummy argument '%s'", &actual->where,
1821 else if (gfc_option.warn_surprising && where
1822 && formal->attr.intent != INTENT_IN)
1823 gfc_warning ("Passing coarray at %L to allocatable, noncoarray dummy "
1824 "argument '%s', which is invalid if the allocation status"
1825 " is modified", &actual->where, formal->name);
1828 if (symbol_rank (formal) == actual->rank)
1831 if (actual->ts.type == BT_CLASS && CLASS_DATA (actual)->as
1832 && CLASS_DATA (actual)->as->rank == symbol_rank (formal))
1835 rank_check = where != NULL && !is_elemental && formal->as
1836 && (formal->as->type == AS_ASSUMED_SHAPE
1837 || formal->as->type == AS_DEFERRED)
1838 && actual->expr_type != EXPR_NULL;
1840 /* Scalar & coindexed, see: F2008, Section 12.5.2.4. */
1841 if (rank_check || ranks_must_agree
1842 || (formal->attr.pointer && actual->expr_type != EXPR_NULL)
1843 || (actual->rank != 0 && !(is_elemental || formal->attr.dimension))
1844 || (actual->rank == 0
1845 && ((formal->ts.type == BT_CLASS
1846 && CLASS_DATA (formal)->as->type == AS_ASSUMED_SHAPE)
1847 || (formal->ts.type != BT_CLASS
1848 && formal->as->type == AS_ASSUMED_SHAPE))
1849 && actual->expr_type != EXPR_NULL)
1850 || (actual->rank == 0 && formal->attr.dimension
1851 && gfc_is_coindexed (actual)))
1854 argument_rank_mismatch (formal->name, &actual->where,
1855 symbol_rank (formal), actual->rank);
1858 else if (actual->rank != 0 && (is_elemental || formal->attr.dimension))
1861 /* At this point, we are considering a scalar passed to an array. This
1862 is valid (cf. F95 12.4.1.1, F2003 12.4.1.2, and F2008 12.5.2.4),
1863 - if the actual argument is (a substring of) an element of a
1864 non-assumed-shape/non-pointer/non-polymorphic array; or
1865 - (F2003) if the actual argument is of type character of default/c_char
1868 is_pointer = actual->expr_type == EXPR_VARIABLE
1869 ? actual->symtree->n.sym->attr.pointer : false;
1871 for (ref = actual->ref; ref; ref = ref->next)
1873 if (ref->type == REF_COMPONENT)
1874 is_pointer = ref->u.c.component->attr.pointer;
1875 else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT
1876 && ref->u.ar.dimen > 0
1878 || (ref->next->type == REF_SUBSTRING && !ref->next->next)))
1882 if (actual->ts.type == BT_CLASS && actual->expr_type != EXPR_NULL)
1885 gfc_error ("Polymorphic scalar passed to array dummy argument '%s' "
1886 "at %L", formal->name, &actual->where);
1890 if (actual->expr_type != EXPR_NULL && ref && actual->ts.type != BT_CHARACTER
1891 && (is_pointer || ref->u.ar.as->type == AS_ASSUMED_SHAPE))
1894 gfc_error ("Element of assumed-shaped or pointer "
1895 "array passed to array dummy argument '%s' at %L",
1896 formal->name, &actual->where);
1900 if (actual->ts.type == BT_CHARACTER && actual->expr_type != EXPR_NULL
1901 && (!ref || is_pointer || ref->u.ar.as->type == AS_ASSUMED_SHAPE))
1903 if (formal->ts.kind != 1 && (gfc_option.allow_std & GFC_STD_GNU) == 0)
1906 gfc_error ("Extension: Scalar non-default-kind, non-C_CHAR-kind "
1907 "CHARACTER actual argument with array dummy argument "
1908 "'%s' at %L", formal->name, &actual->where);
1912 if (where && (gfc_option.allow_std & GFC_STD_F2003) == 0)
1914 gfc_error ("Fortran 2003: Scalar CHARACTER actual argument with "
1915 "array dummy argument '%s' at %L",
1916 formal->name, &actual->where);
1919 else if ((gfc_option.allow_std & GFC_STD_F2003) == 0)
1925 if (ref == NULL && actual->expr_type != EXPR_NULL)
1928 argument_rank_mismatch (formal->name, &actual->where,
1929 symbol_rank (formal), actual->rank);
1937 /* Returns the storage size of a symbol (formal argument) or
1938 zero if it cannot be determined. */
1940 static unsigned long
1941 get_sym_storage_size (gfc_symbol *sym)
1944 unsigned long strlen, elements;
1946 if (sym->ts.type == BT_CHARACTER)
1948 if (sym->ts.u.cl && sym->ts.u.cl->length
1949 && sym->ts.u.cl->length->expr_type == EXPR_CONSTANT)
1950 strlen = mpz_get_ui (sym->ts.u.cl->length->value.integer);
1957 if (symbol_rank (sym) == 0)
1961 if (sym->as->type != AS_EXPLICIT)
1963 for (i = 0; i < sym->as->rank; i++)
1965 if (!sym->as || sym->as->upper[i]->expr_type != EXPR_CONSTANT
1966 || sym->as->lower[i]->expr_type != EXPR_CONSTANT)
1969 elements *= mpz_get_si (sym->as->upper[i]->value.integer)
1970 - mpz_get_si (sym->as->lower[i]->value.integer) + 1L;
1973 return strlen*elements;
1977 /* Returns the storage size of an expression (actual argument) or
1978 zero if it cannot be determined. For an array element, it returns
1979 the remaining size as the element sequence consists of all storage
1980 units of the actual argument up to the end of the array. */
1982 static unsigned long
1983 get_expr_storage_size (gfc_expr *e)
1986 long int strlen, elements;
1987 long int substrlen = 0;
1988 bool is_str_storage = false;
1994 if (e->ts.type == BT_CHARACTER)
1996 if (e->ts.u.cl && e->ts.u.cl->length
1997 && e->ts.u.cl->length->expr_type == EXPR_CONSTANT)
1998 strlen = mpz_get_si (e->ts.u.cl->length->value.integer);
1999 else if (e->expr_type == EXPR_CONSTANT
2000 && (e->ts.u.cl == NULL || e->ts.u.cl->length == NULL))
2001 strlen = e->value.character.length;
2006 strlen = 1; /* Length per element. */
2008 if (e->rank == 0 && !e->ref)
2016 for (i = 0; i < e->rank; i++)
2017 elements *= mpz_get_si (e->shape[i]);
2018 return elements*strlen;
2021 for (ref = e->ref; ref; ref = ref->next)
2023 if (ref->type == REF_SUBSTRING && ref->u.ss.start
2024 && ref->u.ss.start->expr_type == EXPR_CONSTANT)
2028 /* The string length is the substring length.
2029 Set now to full string length. */
2030 if (!ref->u.ss.length || !ref->u.ss.length->length
2031 || ref->u.ss.length->length->expr_type != EXPR_CONSTANT)
2034 strlen = mpz_get_ui (ref->u.ss.length->length->value.integer);
2036 substrlen = strlen - mpz_get_ui (ref->u.ss.start->value.integer) + 1;
2040 if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION
2041 && ref->u.ar.start && ref->u.ar.end && ref->u.ar.stride
2042 && ref->u.ar.as->upper)
2043 for (i = 0; i < ref->u.ar.dimen; i++)
2045 long int start, end, stride;
2048 if (ref->u.ar.stride[i])
2050 if (ref->u.ar.stride[i]->expr_type == EXPR_CONSTANT)
2051 stride = mpz_get_si (ref->u.ar.stride[i]->value.integer);
2056 if (ref->u.ar.start[i])
2058 if (ref->u.ar.start[i]->expr_type == EXPR_CONSTANT)
2059 start = mpz_get_si (ref->u.ar.start[i]->value.integer);
2063 else if (ref->u.ar.as->lower[i]
2064 && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT)
2065 start = mpz_get_si (ref->u.ar.as->lower[i]->value.integer);
2069 if (ref->u.ar.end[i])
2071 if (ref->u.ar.end[i]->expr_type == EXPR_CONSTANT)
2072 end = mpz_get_si (ref->u.ar.end[i]->value.integer);
2076 else if (ref->u.ar.as->upper[i]
2077 && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
2078 end = mpz_get_si (ref->u.ar.as->upper[i]->value.integer);
2082 elements *= (end - start)/stride + 1L;
2084 else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_FULL
2085 && ref->u.ar.as->lower && ref->u.ar.as->upper)
2086 for (i = 0; i < ref->u.ar.as->rank; i++)
2088 if (ref->u.ar.as->lower[i] && ref->u.ar.as->upper[i]
2089 && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT
2090 && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
2091 elements *= mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
2092 - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
2097 else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT
2098 && e->expr_type == EXPR_VARIABLE)
2100 if (ref->u.ar.as->type == AS_ASSUMED_SHAPE
2101 || e->symtree->n.sym->attr.pointer)
2107 /* Determine the number of remaining elements in the element
2108 sequence for array element designators. */
2109 is_str_storage = true;
2110 for (i = ref->u.ar.dimen - 1; i >= 0; i--)
2112 if (ref->u.ar.start[i] == NULL
2113 || ref->u.ar.start[i]->expr_type != EXPR_CONSTANT
2114 || ref->u.ar.as->upper[i] == NULL
2115 || ref->u.ar.as->lower[i] == NULL
2116 || ref->u.ar.as->upper[i]->expr_type != EXPR_CONSTANT
2117 || ref->u.ar.as->lower[i]->expr_type != EXPR_CONSTANT)
2122 * (mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
2123 - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
2125 - (mpz_get_si (ref->u.ar.start[i]->value.integer)
2126 - mpz_get_si (ref->u.ar.as->lower[i]->value.integer));
2132 return (is_str_storage) ? substrlen + (elements-1)*strlen
2135 return elements*strlen;
2139 /* Given an expression, check whether it is an array section
2140 which has a vector subscript. If it has, one is returned,
2144 gfc_has_vector_subscript (gfc_expr *e)
2149 if (e == NULL || e->rank == 0 || e->expr_type != EXPR_VARIABLE)
2152 for (ref = e->ref; ref; ref = ref->next)
2153 if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION)
2154 for (i = 0; i < ref->u.ar.dimen; i++)
2155 if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
2162 /* Given formal and actual argument lists, see if they are compatible.
2163 If they are compatible, the actual argument list is sorted to
2164 correspond with the formal list, and elements for missing optional
2165 arguments are inserted. If WHERE pointer is nonnull, then we issue
2166 errors when things don't match instead of just returning the status
2170 compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
2171 int ranks_must_agree, int is_elemental, locus *where)
2173 gfc_actual_arglist **new_arg, *a, *actual, temp;
2174 gfc_formal_arglist *f;
2176 unsigned long actual_size, formal_size;
2177 bool full_array = false;
2181 if (actual == NULL && formal == NULL)
2185 for (f = formal; f; f = f->next)
2188 new_arg = XALLOCAVEC (gfc_actual_arglist *, n);
2190 for (i = 0; i < n; i++)
2197 for (a = actual; a; a = a->next, f = f->next)
2199 /* Look for keywords but ignore g77 extensions like %VAL. */
2200 if (a->name != NULL && a->name[0] != '%')
2203 for (f = formal; f; f = f->next, i++)
2207 if (strcmp (f->sym->name, a->name) == 0)
2214 gfc_error ("Keyword argument '%s' at %L is not in "
2215 "the procedure", a->name, &a->expr->where);
2219 if (new_arg[i] != NULL)
2222 gfc_error ("Keyword argument '%s' at %L is already associated "
2223 "with another actual argument", a->name,
2232 gfc_error ("More actual than formal arguments in procedure "
2233 "call at %L", where);
2238 if (f->sym == NULL && a->expr == NULL)
2244 gfc_error ("Missing alternate return spec in subroutine call "
2249 if (a->expr == NULL)
2252 gfc_error ("Unexpected alternate return spec in subroutine "
2253 "call at %L", where);
2257 if (a->expr->expr_type == EXPR_NULL && !f->sym->attr.pointer
2258 && (f->sym->attr.allocatable || !f->sym->attr.optional
2259 || (gfc_option.allow_std & GFC_STD_F2008) == 0))
2261 if (where && (f->sym->attr.allocatable || !f->sym->attr.optional))
2262 gfc_error ("Unexpected NULL() intrinsic at %L to dummy '%s'",
2263 where, f->sym->name);
2265 gfc_error ("Fortran 2008: Null pointer at %L to non-pointer "
2266 "dummy '%s'", where, f->sym->name);
2271 if (!compare_parameter (f->sym, a->expr, ranks_must_agree,
2272 is_elemental, where))
2275 /* Special case for character arguments. For allocatable, pointer
2276 and assumed-shape dummies, the string length needs to match
2278 if (a->expr->ts.type == BT_CHARACTER
2279 && a->expr->ts.u.cl && a->expr->ts.u.cl->length
2280 && a->expr->ts.u.cl->length->expr_type == EXPR_CONSTANT
2281 && f->sym->ts.u.cl && f->sym->ts.u.cl && f->sym->ts.u.cl->length
2282 && f->sym->ts.u.cl->length->expr_type == EXPR_CONSTANT
2283 && (f->sym->attr.pointer || f->sym->attr.allocatable
2284 || (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2285 && (mpz_cmp (a->expr->ts.u.cl->length->value.integer,
2286 f->sym->ts.u.cl->length->value.integer) != 0))
2288 if (where && (f->sym->attr.pointer || f->sym->attr.allocatable))
2289 gfc_warning ("Character length mismatch (%ld/%ld) between actual "
2290 "argument and pointer or allocatable dummy argument "
2292 mpz_get_si (a->expr->ts.u.cl->length->value.integer),
2293 mpz_get_si (f->sym->ts.u.cl->length->value.integer),
2294 f->sym->name, &a->expr->where);
2296 gfc_warning ("Character length mismatch (%ld/%ld) between actual "
2297 "argument and assumed-shape dummy argument '%s' "
2299 mpz_get_si (a->expr->ts.u.cl->length->value.integer),
2300 mpz_get_si (f->sym->ts.u.cl->length->value.integer),
2301 f->sym->name, &a->expr->where);
2305 if ((f->sym->attr.pointer || f->sym->attr.allocatable)
2306 && f->sym->ts.deferred != a->expr->ts.deferred
2307 && a->expr->ts.type == BT_CHARACTER)
2310 gfc_error ("Actual argument at %L to allocatable or "
2311 "pointer dummy argument '%s' must have a deferred "
2312 "length type parameter if and only if the dummy has one",
2313 &a->expr->where, f->sym->name);
2317 if (f->sym->ts.type == BT_CLASS)
2318 goto skip_size_check;
2320 actual_size = get_expr_storage_size (a->expr);
2321 formal_size = get_sym_storage_size (f->sym);
2322 if (actual_size != 0 && actual_size < formal_size
2323 && a->expr->ts.type != BT_PROCEDURE
2324 && f->sym->attr.flavor != FL_PROCEDURE)
2326 if (a->expr->ts.type == BT_CHARACTER && !f->sym->as && where)
2327 gfc_warning ("Character length of actual argument shorter "
2328 "than of dummy argument '%s' (%lu/%lu) at %L",
2329 f->sym->name, actual_size, formal_size,
2332 gfc_warning ("Actual argument contains too few "
2333 "elements for dummy argument '%s' (%lu/%lu) at %L",
2334 f->sym->name, actual_size, formal_size,
2341 /* Satisfy 12.4.1.3 by ensuring that a procedure pointer actual argument
2342 is provided for a procedure pointer formal argument. */
2343 if (f->sym->attr.proc_pointer
2344 && !((a->expr->expr_type == EXPR_VARIABLE
2345 && a->expr->symtree->n.sym->attr.proc_pointer)
2346 || (a->expr->expr_type == EXPR_FUNCTION
2347 && a->expr->symtree->n.sym->result->attr.proc_pointer)
2348 || gfc_is_proc_ptr_comp (a->expr, NULL)))
2351 gfc_error ("Expected a procedure pointer for argument '%s' at %L",
2352 f->sym->name, &a->expr->where);
2356 /* Satisfy 12.4.1.2 by ensuring that a procedure actual argument is
2357 provided for a procedure formal argument. */
2358 if (a->expr->ts.type != BT_PROCEDURE && !gfc_is_proc_ptr_comp (a->expr, NULL)
2359 && a->expr->expr_type == EXPR_VARIABLE
2360 && f->sym->attr.flavor == FL_PROCEDURE)
2363 gfc_error ("Expected a procedure for argument '%s' at %L",
2364 f->sym->name, &a->expr->where);
2368 if (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE
2369 && a->expr->expr_type == EXPR_VARIABLE
2370 && a->expr->symtree->n.sym->as
2371 && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SIZE
2372 && (a->expr->ref == NULL
2373 || (a->expr->ref->type == REF_ARRAY
2374 && a->expr->ref->u.ar.type == AR_FULL)))
2377 gfc_error ("Actual argument for '%s' cannot be an assumed-size"
2378 " array at %L", f->sym->name, where);
2382 if (a->expr->expr_type != EXPR_NULL
2383 && compare_pointer (f->sym, a->expr) == 0)
2386 gfc_error ("Actual argument for '%s' must be a pointer at %L",
2387 f->sym->name, &a->expr->where);
2391 if (a->expr->expr_type != EXPR_NULL
2392 && (gfc_option.allow_std & GFC_STD_F2008) == 0
2393 && compare_pointer (f->sym, a->expr) == 2)
2396 gfc_error ("Fortran 2008: Non-pointer actual argument at %L to "
2397 "pointer dummy '%s'", &a->expr->where,f->sym->name);
2402 /* Fortran 2008, C1242. */
2403 if (f->sym->attr.pointer && gfc_is_coindexed (a->expr))
2406 gfc_error ("Coindexed actual argument at %L to pointer "
2408 &a->expr->where, f->sym->name);
2412 /* Fortran 2008, 12.5.2.5 (no constraint). */
2413 if (a->expr->expr_type == EXPR_VARIABLE
2414 && f->sym->attr.intent != INTENT_IN
2415 && f->sym->attr.allocatable
2416 && gfc_is_coindexed (a->expr))
2419 gfc_error ("Coindexed actual argument at %L to allocatable "
2420 "dummy '%s' requires INTENT(IN)",
2421 &a->expr->where, f->sym->name);
2425 /* Fortran 2008, C1237. */
2426 if (a->expr->expr_type == EXPR_VARIABLE
2427 && (f->sym->attr.asynchronous || f->sym->attr.volatile_)
2428 && gfc_is_coindexed (a->expr)
2429 && (a->expr->symtree->n.sym->attr.volatile_
2430 || a->expr->symtree->n.sym->attr.asynchronous))
2433 gfc_error ("Coindexed ASYNCHRONOUS or VOLATILE actual argument at "
2434 "%L requires that dummy '%s' has neither "
2435 "ASYNCHRONOUS nor VOLATILE", &a->expr->where,
2440 /* Fortran 2008, 12.5.2.4 (no constraint). */
2441 if (a->expr->expr_type == EXPR_VARIABLE
2442 && f->sym->attr.intent != INTENT_IN && !f->sym->attr.value
2443 && gfc_is_coindexed (a->expr)
2444 && gfc_has_ultimate_allocatable (a->expr))
2447 gfc_error ("Coindexed actual argument at %L with allocatable "
2448 "ultimate component to dummy '%s' requires either VALUE "
2449 "or INTENT(IN)", &a->expr->where, f->sym->name);
2453 if (f->sym->ts.type == BT_CLASS
2454 && CLASS_DATA (f->sym)->attr.allocatable
2455 && gfc_is_class_array_ref (a->expr, &full_array)
2459 gfc_error ("Actual CLASS array argument for '%s' must be a full "
2460 "array at %L", f->sym->name, &a->expr->where);
2465 if (a->expr->expr_type != EXPR_NULL
2466 && compare_allocatable (f->sym, a->expr) == 0)
2469 gfc_error ("Actual argument for '%s' must be ALLOCATABLE at %L",
2470 f->sym->name, &a->expr->where);
2474 /* Check intent = OUT/INOUT for definable actual argument. */
2475 if ((f->sym->attr.intent == INTENT_OUT
2476 || f->sym->attr.intent == INTENT_INOUT))
2478 const char* context = (where
2479 ? _("actual argument to INTENT = OUT/INOUT")
2482 if (f->sym->attr.pointer
2483 && gfc_check_vardef_context (a->expr, true, false, context)
2486 if (gfc_check_vardef_context (a->expr, false, false, context)
2491 if ((f->sym->attr.intent == INTENT_OUT
2492 || f->sym->attr.intent == INTENT_INOUT
2493 || f->sym->attr.volatile_
2494 || f->sym->attr.asynchronous)
2495 && gfc_has_vector_subscript (a->expr))
2498 gfc_error ("Array-section actual argument with vector "
2499 "subscripts at %L is incompatible with INTENT(OUT), "
2500 "INTENT(INOUT), VOLATILE or ASYNCHRONOUS attribute "
2501 "of the dummy argument '%s'",
2502 &a->expr->where, f->sym->name);
2506 /* C1232 (R1221) For an actual argument which is an array section or
2507 an assumed-shape array, the dummy argument shall be an assumed-
2508 shape array, if the dummy argument has the VOLATILE attribute. */
2510 if (f->sym->attr.volatile_
2511 && a->expr->symtree->n.sym->as
2512 && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
2513 && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2516 gfc_error ("Assumed-shape actual argument at %L is "
2517 "incompatible with the non-assumed-shape "
2518 "dummy argument '%s' due to VOLATILE attribute",
2519 &a->expr->where,f->sym->name);
2523 if (f->sym->attr.volatile_
2524 && a->expr->ref && a->expr->ref->u.ar.type == AR_SECTION
2525 && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2528 gfc_error ("Array-section actual argument at %L is "
2529 "incompatible with the non-assumed-shape "
2530 "dummy argument '%s' due to VOLATILE attribute",
2531 &a->expr->where,f->sym->name);
2535 /* C1233 (R1221) For an actual argument which is a pointer array, the
2536 dummy argument shall be an assumed-shape or pointer array, if the
2537 dummy argument has the VOLATILE attribute. */
2539 if (f->sym->attr.volatile_
2540 && a->expr->symtree->n.sym->attr.pointer
2541 && a->expr->symtree->n.sym->as
2543 && (f->sym->as->type == AS_ASSUMED_SHAPE
2544 || f->sym->attr.pointer)))
2547 gfc_error ("Pointer-array actual argument at %L requires "
2548 "an assumed-shape or pointer-array dummy "
2549 "argument '%s' due to VOLATILE attribute",
2550 &a->expr->where,f->sym->name);
2561 /* Make sure missing actual arguments are optional. */
2563 for (f = formal; f; f = f->next, i++)
2565 if (new_arg[i] != NULL)
2570 gfc_error ("Missing alternate return spec in subroutine call "
2574 if (!f->sym->attr.optional)
2577 gfc_error ("Missing actual argument for argument '%s' at %L",
2578 f->sym->name, where);
2583 /* The argument lists are compatible. We now relink a new actual
2584 argument list with null arguments in the right places. The head
2585 of the list remains the head. */
2586 for (i = 0; i < n; i++)
2587 if (new_arg[i] == NULL)
2588 new_arg[i] = gfc_get_actual_arglist ();
2593 *new_arg[0] = *actual;
2597 new_arg[0] = new_arg[na];
2601 for (i = 0; i < n - 1; i++)
2602 new_arg[i]->next = new_arg[i + 1];
2604 new_arg[i]->next = NULL;
2606 if (*ap == NULL && n > 0)
2609 /* Note the types of omitted optional arguments. */
2610 for (a = *ap, f = formal; a; a = a->next, f = f->next)
2611 if (a->expr == NULL && a->label == NULL)
2612 a->missing_arg_type = f->sym->ts.type;
2620 gfc_formal_arglist *f;
2621 gfc_actual_arglist *a;
2625 /* qsort comparison function for argument pairs, with the following
2627 - p->a->expr == NULL
2628 - p->a->expr->expr_type != EXPR_VARIABLE
2629 - growing p->a->expr->symbol. */
2632 pair_cmp (const void *p1, const void *p2)
2634 const gfc_actual_arglist *a1, *a2;
2636 /* *p1 and *p2 are elements of the to-be-sorted array. */
2637 a1 = ((const argpair *) p1)->a;
2638 a2 = ((const argpair *) p2)->a;
2647 if (a1->expr->expr_type != EXPR_VARIABLE)
2649 if (a2->expr->expr_type != EXPR_VARIABLE)
2653 if (a2->expr->expr_type != EXPR_VARIABLE)
2655 return a1->expr->symtree->n.sym < a2->expr->symtree->n.sym;
2659 /* Given two expressions from some actual arguments, test whether they
2660 refer to the same expression. The analysis is conservative.
2661 Returning FAILURE will produce no warning. */
2664 compare_actual_expr (gfc_expr *e1, gfc_expr *e2)
2666 const gfc_ref *r1, *r2;
2669 || e1->expr_type != EXPR_VARIABLE
2670 || e2->expr_type != EXPR_VARIABLE
2671 || e1->symtree->n.sym != e2->symtree->n.sym)
2674 /* TODO: improve comparison, see expr.c:show_ref(). */
2675 for (r1 = e1->ref, r2 = e2->ref; r1 && r2; r1 = r1->next, r2 = r2->next)
2677 if (r1->type != r2->type)
2682 if (r1->u.ar.type != r2->u.ar.type)
2684 /* TODO: At the moment, consider only full arrays;
2685 we could do better. */
2686 if (r1->u.ar.type != AR_FULL || r2->u.ar.type != AR_FULL)
2691 if (r1->u.c.component != r2->u.c.component)
2699 gfc_internal_error ("compare_actual_expr(): Bad component code");
2708 /* Given formal and actual argument lists that correspond to one
2709 another, check that identical actual arguments aren't not
2710 associated with some incompatible INTENTs. */
2713 check_some_aliasing (gfc_formal_arglist *f, gfc_actual_arglist *a)
2715 sym_intent f1_intent, f2_intent;
2716 gfc_formal_arglist *f1;
2717 gfc_actual_arglist *a1;
2720 gfc_try t = SUCCESS;
2723 for (f1 = f, a1 = a;; f1 = f1->next, a1 = a1->next)
2725 if (f1 == NULL && a1 == NULL)
2727 if (f1 == NULL || a1 == NULL)
2728 gfc_internal_error ("check_some_aliasing(): List mismatch");
2733 p = XALLOCAVEC (argpair, n);
2735 for (i = 0, f1 = f, a1 = a; i < n; i++, f1 = f1->next, a1 = a1->next)
2741 qsort (p, n, sizeof (argpair), pair_cmp);
2743 for (i = 0; i < n; i++)
2746 || p[i].a->expr->expr_type != EXPR_VARIABLE
2747 || p[i].a->expr->ts.type == BT_PROCEDURE)
2749 f1_intent = p[i].f->sym->attr.intent;
2750 for (j = i + 1; j < n; j++)
2752 /* Expected order after the sort. */
2753 if (!p[j].a->expr || p[j].a->expr->expr_type != EXPR_VARIABLE)
2754 gfc_internal_error ("check_some_aliasing(): corrupted data");
2756 /* Are the expression the same? */
2757 if (compare_actual_expr (p[i].a->expr, p[j].a->expr) == FAILURE)
2759 f2_intent = p[j].f->sym->attr.intent;
2760 if ((f1_intent == INTENT_IN && f2_intent == INTENT_OUT)
2761 || (f1_intent == INTENT_OUT && f2_intent == INTENT_IN))
2763 gfc_warning ("Same actual argument associated with INTENT(%s) "
2764 "argument '%s' and INTENT(%s) argument '%s' at %L",
2765 gfc_intent_string (f1_intent), p[i].f->sym->name,
2766 gfc_intent_string (f2_intent), p[j].f->sym->name,
2767 &p[i].a->expr->where);
2777 /* Given a symbol of a formal argument list and an expression,
2778 return nonzero if their intents are compatible, zero otherwise. */
2781 compare_parameter_intent (gfc_symbol *formal, gfc_expr *actual)
2783 if (actual->symtree->n.sym->attr.pointer && !formal->attr.pointer)
2786 if (actual->symtree->n.sym->attr.intent != INTENT_IN)
2789 if (formal->attr.intent == INTENT_INOUT || formal->attr.intent == INTENT_OUT)
2796 /* Given formal and actual argument lists that correspond to one
2797 another, check that they are compatible in the sense that intents
2798 are not mismatched. */
2801 check_intents (gfc_formal_arglist *f, gfc_actual_arglist *a)
2803 sym_intent f_intent;
2805 for (;; f = f->next, a = a->next)
2807 if (f == NULL && a == NULL)
2809 if (f == NULL || a == NULL)
2810 gfc_internal_error ("check_intents(): List mismatch");
2812 if (a->expr == NULL || a->expr->expr_type != EXPR_VARIABLE)
2815 f_intent = f->sym->attr.intent;
2817 if (!compare_parameter_intent(f->sym, a->expr))
2819 gfc_error ("Procedure argument at %L is INTENT(IN) while interface "
2820 "specifies INTENT(%s)", &a->expr->where,
2821 gfc_intent_string (f_intent));
2825 if (gfc_pure (NULL) && gfc_impure_variable (a->expr->symtree->n.sym))
2827 if (f_intent == INTENT_INOUT || f_intent == INTENT_OUT)
2829 gfc_error ("Procedure argument at %L is local to a PURE "
2830 "procedure and is passed to an INTENT(%s) argument",
2831 &a->expr->where, gfc_intent_string (f_intent));
2835 if (f->sym->attr.pointer)
2837 gfc_error ("Procedure argument at %L is local to a PURE "
2838 "procedure and has the POINTER attribute",
2844 /* Fortran 2008, C1283. */
2845 if (gfc_pure (NULL) && gfc_is_coindexed (a->expr))
2847 if (f_intent == INTENT_INOUT || f_intent == INTENT_OUT)
2849 gfc_error ("Coindexed actual argument at %L in PURE procedure "
2850 "is passed to an INTENT(%s) argument",
2851 &a->expr->where, gfc_intent_string (f_intent));
2855 if (f->sym->attr.pointer)
2857 gfc_error ("Coindexed actual argument at %L in PURE procedure "
2858 "is passed to a POINTER dummy argument",
2864 /* F2008, Section 12.5.2.4. */
2865 if (a->expr->ts.type == BT_CLASS && f->sym->ts.type == BT_CLASS
2866 && gfc_is_coindexed (a->expr))
2868 gfc_error ("Coindexed polymorphic actual argument at %L is passed "
2869 "polymorphic dummy argument '%s'",
2870 &a->expr->where, f->sym->name);
2879 /* Check how a procedure is used against its interface. If all goes
2880 well, the actual argument list will also end up being properly
2884 gfc_procedure_use (gfc_symbol *sym, gfc_actual_arglist **ap, locus *where)
2887 /* Warn about calls with an implicit interface. Special case
2888 for calling a ISO_C_BINDING becase c_loc and c_funloc
2889 are pseudo-unknown. Additionally, warn about procedures not
2890 explicitly declared at all if requested. */
2891 if (sym->attr.if_source == IFSRC_UNKNOWN && ! sym->attr.is_iso_c)
2893 if (gfc_option.warn_implicit_interface)
2894 gfc_warning ("Procedure '%s' called with an implicit interface at %L",
2896 else if (gfc_option.warn_implicit_procedure
2897 && sym->attr.proc == PROC_UNKNOWN)
2898 gfc_warning ("Procedure '%s' called at %L is not explicitly declared",
2902 if (sym->attr.if_source == IFSRC_UNKNOWN)
2904 gfc_actual_arglist *a;
2906 if (sym->attr.pointer)
2908 gfc_error("The pointer object '%s' at %L must have an explicit "
2909 "function interface or be declared as array",
2914 if (sym->attr.allocatable && !sym->attr.external)
2916 gfc_error("The allocatable object '%s' at %L must have an explicit "
2917 "function interface or be declared as array",
2922 if (sym->attr.allocatable)
2924 gfc_error("Allocatable function '%s' at %L must have an explicit "
2925 "function interface", sym->name, where);
2929 for (a = *ap; a; a = a->next)
2931 /* Skip g77 keyword extensions like %VAL, %REF, %LOC. */
2932 if (a->name != NULL && a->name[0] != '%')
2934 gfc_error("Keyword argument requires explicit interface "
2935 "for procedure '%s' at %L", sym->name, &a->expr->where);
2939 /* F2008, C1303 and C1304. */
2941 && (a->expr->ts.type == BT_DERIVED || a->expr->ts.type == BT_CLASS)
2942 && ((a->expr->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
2943 && a->expr->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)
2944 || gfc_expr_attr (a->expr).lock_comp))
2946 gfc_error("Actual argument of LOCK_TYPE or with LOCK_TYPE "
2947 "component at %L requires an explicit interface for "
2948 "procedure '%s'", &a->expr->where, sym->name);
2952 if (a->expr && a->expr->expr_type == EXPR_NULL
2953 && a->expr->ts.type == BT_UNKNOWN)
2955 gfc_error ("MOLD argument to NULL required at %L", &a->expr->where);
2963 if (!compare_actual_formal (ap, sym->formal, 0, sym->attr.elemental, where))
2966 check_intents (sym->formal, *ap);
2967 if (gfc_option.warn_aliasing)
2968 check_some_aliasing (sym->formal, *ap);
2972 /* Check how a procedure pointer component is used against its interface.
2973 If all goes well, the actual argument list will also end up being properly
2974 sorted. Completely analogous to gfc_procedure_use. */
2977 gfc_ppc_use (gfc_component *comp, gfc_actual_arglist **ap, locus *where)
2980 /* Warn about calls with an implicit interface. Special case
2981 for calling a ISO_C_BINDING becase c_loc and c_funloc
2982 are pseudo-unknown. */
2983 if (gfc_option.warn_implicit_interface
2984 && comp->attr.if_source == IFSRC_UNKNOWN
2985 && !comp->attr.is_iso_c)
2986 gfc_warning ("Procedure pointer component '%s' called with an implicit "
2987 "interface at %L", comp->name, where);
2989 if (comp->attr.if_source == IFSRC_UNKNOWN)
2991 gfc_actual_arglist *a;
2992 for (a = *ap; a; a = a->next)
2994 /* Skip g77 keyword extensions like %VAL, %REF, %LOC. */
2995 if (a->name != NULL && a->name[0] != '%')
2997 gfc_error("Keyword argument requires explicit interface "
2998 "for procedure pointer component '%s' at %L",
2999 comp->name, &a->expr->where);
3007 if (!compare_actual_formal (ap, comp->formal, 0, comp->attr.elemental, where))
3010 check_intents (comp->formal, *ap);
3011 if (gfc_option.warn_aliasing)
3012 check_some_aliasing (comp->formal, *ap);
3016 /* Try if an actual argument list matches the formal list of a symbol,
3017 respecting the symbol's attributes like ELEMENTAL. This is used for
3018 GENERIC resolution. */
3021 gfc_arglist_matches_symbol (gfc_actual_arglist** args, gfc_symbol* sym)
3025 gcc_assert (sym->attr.flavor == FL_PROCEDURE);
3027 r = !sym->attr.elemental;
3028 if (compare_actual_formal (args, sym->formal, r, !r, NULL))
3030 check_intents (sym->formal, *args);
3031 if (gfc_option.warn_aliasing)
3032 check_some_aliasing (sym->formal, *args);
3040 /* Given an interface pointer and an actual argument list, search for
3041 a formal argument list that matches the actual. If found, returns
3042 a pointer to the symbol of the correct interface. Returns NULL if
3046 gfc_search_interface (gfc_interface *intr, int sub_flag,
3047 gfc_actual_arglist **ap)
3049 gfc_symbol *elem_sym = NULL;
3050 gfc_symbol *null_sym = NULL;
3051 locus null_expr_loc;
3052 gfc_actual_arglist *a;
3053 bool has_null_arg = false;
3055 for (a = *ap; a; a = a->next)
3056 if (a->expr && a->expr->expr_type == EXPR_NULL
3057 && a->expr->ts.type == BT_UNKNOWN)
3059 has_null_arg = true;
3060 null_expr_loc = a->expr->where;
3064 for (; intr; intr = intr->next)
3066 if (intr->sym->attr.flavor == FL_DERIVED)
3068 if (sub_flag && intr->sym->attr.function)
3070 if (!sub_flag && intr->sym->attr.subroutine)
3073 if (gfc_arglist_matches_symbol (ap, intr->sym))
3075 if (has_null_arg && null_sym)
3077 gfc_error ("MOLD= required in NULL() argument at %L: Ambiguity "
3078 "between specific functions %s and %s",
3079 &null_expr_loc, null_sym->name, intr->sym->name);
3082 else if (has_null_arg)
3084 null_sym = intr->sym;
3088 /* Satisfy 12.4.4.1 such that an elemental match has lower
3089 weight than a non-elemental match. */
3090 if (intr->sym->attr.elemental)
3092 elem_sym = intr->sym;
3102 return elem_sym ? elem_sym : NULL;
3106 /* Do a brute force recursive search for a symbol. */
3108 static gfc_symtree *
3109 find_symtree0 (gfc_symtree *root, gfc_symbol *sym)
3113 if (root->n.sym == sym)
3118 st = find_symtree0 (root->left, sym);
3119 if (root->right && ! st)
3120 st = find_symtree0 (root->right, sym);
3125 /* Find a symtree for a symbol. */
3128 gfc_find_sym_in_symtree (gfc_symbol *sym)
3133 /* First try to find it by name. */
3134 gfc_find_sym_tree (sym->name, gfc_current_ns, 1, &st);
3135 if (st && st->n.sym == sym)
3138 /* If it's been renamed, resort to a brute-force search. */
3139 /* TODO: avoid having to do this search. If the symbol doesn't exist
3140 in the symtree for the current namespace, it should probably be added. */
3141 for (ns = gfc_current_ns; ns; ns = ns->parent)
3143 st = find_symtree0 (ns->sym_root, sym);
3147 gfc_internal_error ("Unable to find symbol %s", sym->name);
3152 /* See if the arglist to an operator-call contains a derived-type argument
3153 with a matching type-bound operator. If so, return the matching specific
3154 procedure defined as operator-target as well as the base-object to use
3155 (which is the found derived-type argument with operator). The generic
3156 name, if any, is transmitted to the final expression via 'gname'. */
3158 static gfc_typebound_proc*
3159 matching_typebound_op (gfc_expr** tb_base,
3160 gfc_actual_arglist* args,
3161 gfc_intrinsic_op op, const char* uop,
3162 const char ** gname)
3164 gfc_actual_arglist* base;
3166 for (base = args; base; base = base->next)
3167 if (base->expr->ts.type == BT_DERIVED || base->expr->ts.type == BT_CLASS)
3169 gfc_typebound_proc* tb;
3170 gfc_symbol* derived;
3173 while (base->expr->expr_type == EXPR_OP
3174 && base->expr->value.op.op == INTRINSIC_PARENTHESES)
3175 base->expr = base->expr->value.op.op1;
3177 if (base->expr->ts.type == BT_CLASS)
3179 if (CLASS_DATA (base->expr) == NULL)
3181 derived = CLASS_DATA (base->expr)->ts.u.derived;
3184 derived = base->expr->ts.u.derived;
3186 if (op == INTRINSIC_USER)
3188 gfc_symtree* tb_uop;
3191 tb_uop = gfc_find_typebound_user_op (derived, &result, uop,
3200 tb = gfc_find_typebound_intrinsic_op (derived, &result, op,
3203 /* This means we hit a PRIVATE operator which is use-associated and
3204 should thus not be seen. */
3205 if (result == FAILURE)
3208 /* Look through the super-type hierarchy for a matching specific
3210 for (; tb; tb = tb->overridden)
3214 gcc_assert (tb->is_generic);
3215 for (g = tb->u.generic; g; g = g->next)
3218 gfc_actual_arglist* argcopy;
3221 gcc_assert (g->specific);
3222 if (g->specific->error)
3225 target = g->specific->u.specific->n.sym;
3227 /* Check if this arglist matches the formal. */
3228 argcopy = gfc_copy_actual_arglist (args);
3229 matches = gfc_arglist_matches_symbol (&argcopy, target);
3230 gfc_free_actual_arglist (argcopy);
3232 /* Return if we found a match. */
3235 *tb_base = base->expr;
3236 *gname = g->specific_st->name;
3247 /* For the 'actual arglist' of an operator call and a specific typebound
3248 procedure that has been found the target of a type-bound operator, build the
3249 appropriate EXPR_COMPCALL and resolve it. We take this indirection over
3250 type-bound procedures rather than resolving type-bound operators 'directly'
3251 so that we can reuse the existing logic. */
3254 build_compcall_for_operator (gfc_expr* e, gfc_actual_arglist* actual,
3255 gfc_expr* base, gfc_typebound_proc* target,
3258 e->expr_type = EXPR_COMPCALL;
3259 e->value.compcall.tbp = target;
3260 e->value.compcall.name = gname ? gname : "$op";
3261 e->value.compcall.actual = actual;
3262 e->value.compcall.base_object = base;
3263 e->value.compcall.ignore_pass = 1;
3264 e->value.compcall.assign = 0;
3265 if (e->ts.type == BT_UNKNOWN
3266 && target->function)
3268 if (target->is_generic)
3269 e->ts = target->u.generic->specific->u.specific->n.sym->ts;
3271 e->ts = target->u.specific->n.sym->ts;
3276 /* This subroutine is called when an expression is being resolved.
3277 The expression node in question is either a user defined operator
3278 or an intrinsic operator with arguments that aren't compatible
3279 with the operator. This subroutine builds an actual argument list
3280 corresponding to the operands, then searches for a compatible
3281 interface. If one is found, the expression node is replaced with
3282 the appropriate function call. We use the 'match' enum to specify
3283 whether a replacement has been made or not, or if an error occurred. */
3286 gfc_extend_expr (gfc_expr *e)
3288 gfc_actual_arglist *actual;
3297 actual = gfc_get_actual_arglist ();
3298 actual->expr = e->value.op.op1;
3302 if (e->value.op.op2 != NULL)
3304 actual->next = gfc_get_actual_arglist ();
3305 actual->next->expr = e->value.op.op2;
3308 i = fold_unary_intrinsic (e->value.op.op);
3310 if (i == INTRINSIC_USER)
3312 for (ns = gfc_current_ns; ns; ns = ns->parent)
3314 uop = gfc_find_uop (e->value.op.uop->name, ns);
3318 sym = gfc_search_interface (uop->op, 0, &actual);
3325 for (ns = gfc_current_ns; ns; ns = ns->parent)
3327 /* Due to the distinction between '==' and '.eq.' and friends, one has
3328 to check if either is defined. */
3331 #define CHECK_OS_COMPARISON(comp) \
3332 case INTRINSIC_##comp: \
3333 case INTRINSIC_##comp##_OS: \
3334 sym = gfc_search_interface (ns->op[INTRINSIC_##comp], 0, &actual); \
3336 sym = gfc_search_interface (ns->op[INTRINSIC_##comp##_OS], 0, &actual); \
3338 CHECK_OS_COMPARISON(EQ)
3339 CHECK_OS_COMPARISON(NE)
3340 CHECK_OS_COMPARISON(GT)
3341 CHECK_OS_COMPARISON(GE)
3342 CHECK_OS_COMPARISON(LT)
3343 CHECK_OS_COMPARISON(LE)
3344 #undef CHECK_OS_COMPARISON
3347 sym = gfc_search_interface (ns->op[i], 0, &actual);
3355 /* TODO: Do an ambiguity-check and error if multiple matching interfaces are
3356 found rather than just taking the first one and not checking further. */
3360 gfc_typebound_proc* tbo;
3363 /* See if we find a matching type-bound operator. */
3364 if (i == INTRINSIC_USER)
3365 tbo = matching_typebound_op (&tb_base, actual,
3366 i, e->value.op.uop->name, &gname);
3370 #define CHECK_OS_COMPARISON(comp) \
3371 case INTRINSIC_##comp: \
3372 case INTRINSIC_##comp##_OS: \
3373 tbo = matching_typebound_op (&tb_base, actual, \
3374 INTRINSIC_##comp, NULL, &gname); \
3376 tbo = matching_typebound_op (&tb_base, actual, \
3377 INTRINSIC_##comp##_OS, NULL, &gname); \
3379 CHECK_OS_COMPARISON(EQ)
3380 CHECK_OS_COMPARISON(NE)
3381 CHECK_OS_COMPARISON(GT)
3382 CHECK_OS_COMPARISON(GE)
3383 CHECK_OS_COMPARISON(LT)
3384 CHECK_OS_COMPARISON(LE)
3385 #undef CHECK_OS_COMPARISON
3388 tbo = matching_typebound_op (&tb_base, actual, i, NULL, &gname);
3392 /* If there is a matching typebound-operator, replace the expression with
3393 a call to it and succeed. */
3398 gcc_assert (tb_base);
3399 build_compcall_for_operator (e, actual, tb_base, tbo, gname);
3401 result = gfc_resolve_expr (e);
3402 if (result == FAILURE)
3408 /* Don't use gfc_free_actual_arglist(). */
3409 free (actual->next);
3415 /* Change the expression node to a function call. */
3416 e->expr_type = EXPR_FUNCTION;
3417 e->symtree = gfc_find_sym_in_symtree (sym);
3418 e->value.function.actual = actual;
3419 e->value.function.esym = NULL;
3420 e->value.function.isym = NULL;
3421 e->value.function.name = NULL;
3422 e->user_operator = 1;
3424 if (gfc_resolve_expr (e) == FAILURE)
3431 /* Tries to replace an assignment code node with a subroutine call to
3432 the subroutine associated with the assignment operator. Return
3433 SUCCESS if the node was replaced. On FAILURE, no error is
3437 gfc_extend_assign (gfc_code *c, gfc_namespace *ns)
3439 gfc_actual_arglist *actual;
3440 gfc_expr *lhs, *rhs;
3449 /* Don't allow an intrinsic assignment to be replaced. */
3450 if (lhs->ts.type != BT_DERIVED && lhs->ts.type != BT_CLASS
3451 && (rhs->rank == 0 || rhs->rank == lhs->rank)
3452 && (lhs->ts.type == rhs->ts.type
3453 || (gfc_numeric_ts (&lhs->ts) && gfc_numeric_ts (&rhs->ts))))
3456 actual = gfc_get_actual_arglist ();
3459 actual->next = gfc_get_actual_arglist ();
3460 actual->next->expr = rhs;
3464 for (; ns; ns = ns->parent)
3466 sym = gfc_search_interface (ns->op[INTRINSIC_ASSIGN], 1, &actual);
3471 /* TODO: Ambiguity-check, see above for gfc_extend_expr. */
3475 gfc_typebound_proc* tbo;
3478 /* See if we find a matching type-bound assignment. */
3479 tbo = matching_typebound_op (&tb_base, actual,
3480 INTRINSIC_ASSIGN, NULL, &gname);
3482 /* If there is one, replace the expression with a call to it and
3486 gcc_assert (tb_base);
3487 c->expr1 = gfc_get_expr ();
3488 build_compcall_for_operator (c->expr1, actual, tb_base, tbo, gname);
3489 c->expr1->value.compcall.assign = 1;
3490 c->expr1->where = c->loc;
3492 c->op = EXEC_COMPCALL;
3494 /* c is resolved from the caller, so no need to do it here. */
3499 free (actual->next);
3504 /* Replace the assignment with the call. */
3505 c->op = EXEC_ASSIGN_CALL;
3506 c->symtree = gfc_find_sym_in_symtree (sym);
3509 c->ext.actual = actual;
3515 /* Make sure that the interface just parsed is not already present in
3516 the given interface list. Ambiguity isn't checked yet since module
3517 procedures can be present without interfaces. */
3520 check_new_interface (gfc_interface *base, gfc_symbol *new_sym)
3524 for (ip = base; ip; ip = ip->next)
3526 if (ip->sym == new_sym)
3528 gfc_error ("Entity '%s' at %C is already present in the interface",
3538 /* Add a symbol to the current interface. */
3541 gfc_add_interface (gfc_symbol *new_sym)
3543 gfc_interface **head, *intr;
3547 switch (current_interface.type)
3549 case INTERFACE_NAMELESS:
3550 case INTERFACE_ABSTRACT:
3553 case INTERFACE_INTRINSIC_OP:
3554 for (ns = current_interface.ns; ns; ns = ns->parent)
3555 switch (current_interface.op)
3558 case INTRINSIC_EQ_OS:
3559 if (check_new_interface (ns->op[INTRINSIC_EQ], new_sym) == FAILURE ||
3560 check_new_interface (ns->op[INTRINSIC_EQ_OS], new_sym) == FAILURE)
3565 case INTRINSIC_NE_OS:
3566 if (check_new_interface (ns->op[INTRINSIC_NE], new_sym) == FAILURE ||
3567 check_new_interface (ns->op[INTRINSIC_NE_OS], new_sym) == FAILURE)
3572 case INTRINSIC_GT_OS:
3573 if (check_new_interface (ns->op[INTRINSIC_GT], new_sym) == FAILURE ||
3574 check_new_interface (ns->op[INTRINSIC_GT_OS], new_sym) == FAILURE)
3579 case INTRINSIC_GE_OS:
3580 if (check_new_interface (ns->op[INTRINSIC_GE], new_sym) == FAILURE ||
3581 check_new_interface (ns->op[INTRINSIC_GE_OS], new_sym) == FAILURE)
3586 case INTRINSIC_LT_OS:
3587 if (check_new_interface (ns->op[INTRINSIC_LT], new_sym) == FAILURE ||
3588 check_new_interface (ns->op[INTRINSIC_LT_OS], new_sym) == FAILURE)
3593 case INTRINSIC_LE_OS:
3594 if (check_new_interface (ns->op[INTRINSIC_LE], new_sym) == FAILURE ||
3595 check_new_interface (ns->op[INTRINSIC_LE_OS], new_sym) == FAILURE)
3600 if (check_new_interface (ns->op[current_interface.op], new_sym) == FAILURE)
3604 head = ¤t_interface.ns->op[current_interface.op];
3607 case INTERFACE_GENERIC:
3608 for (ns = current_interface.ns; ns; ns = ns->parent)
3610 gfc_find_symbol (current_interface.sym->name, ns, 0, &sym);
3614 if (check_new_interface (sym->generic, new_sym) == FAILURE)
3618 head = ¤t_interface.sym->generic;
3621 case INTERFACE_USER_OP:
3622 if (check_new_interface (current_interface.uop->op, new_sym)
3626 head = ¤t_interface.uop->op;
3630 gfc_internal_error ("gfc_add_interface(): Bad interface type");
3633 intr = gfc_get_interface ();
3634 intr->sym = new_sym;
3635 intr->where = gfc_current_locus;
3645 gfc_current_interface_head (void)
3647 switch (current_interface.type)
3649 case INTERFACE_INTRINSIC_OP:
3650 return current_interface.ns->op[current_interface.op];
3653 case INTERFACE_GENERIC:
3654 return current_interface.sym->generic;
3657 case INTERFACE_USER_OP:
3658 return current_interface.uop->op;
3668 gfc_set_current_interface_head (gfc_interface *i)
3670 switch (current_interface.type)
3672 case INTERFACE_INTRINSIC_OP:
3673 current_interface.ns->op[current_interface.op] = i;
3676 case INTERFACE_GENERIC:
3677 current_interface.sym->generic = i;
3680 case INTERFACE_USER_OP:
3681 current_interface.uop->op = i;
3690 /* Gets rid of a formal argument list. We do not free symbols.
3691 Symbols are freed when a namespace is freed. */
3694 gfc_free_formal_arglist (gfc_formal_arglist *p)
3696 gfc_formal_arglist *q;
3706 /* Check that it is ok for the type-bound procedure 'proc' to override the
3707 procedure 'old', cf. F08:4.5.7.3. */
3710 gfc_check_typebound_override (gfc_symtree* proc, gfc_symtree* old)
3713 const gfc_symbol *proc_target, *old_target;
3714 unsigned proc_pass_arg, old_pass_arg, argpos;
3715 gfc_formal_arglist *proc_formal, *old_formal;
3719 /* This procedure should only be called for non-GENERIC proc. */
3720 gcc_assert (!proc->n.tb->is_generic);
3722 /* If the overwritten procedure is GENERIC, this is an error. */
3723 if (old->n.tb->is_generic)
3725 gfc_error ("Can't overwrite GENERIC '%s' at %L",
3726 old->name, &proc->n.tb->where);
3730 where = proc->n.tb->where;
3731 proc_target = proc->n.tb->u.specific->n.sym;
3732 old_target = old->n.tb->u.specific->n.sym;
3734 /* Check that overridden binding is not NON_OVERRIDABLE. */
3735 if (old->n.tb->non_overridable)
3737 gfc_error ("'%s' at %L overrides a procedure binding declared"
3738 " NON_OVERRIDABLE", proc->name, &where);
3742 /* It's an error to override a non-DEFERRED procedure with a DEFERRED one. */
3743 if (!old->n.tb->deferred && proc->n.tb->deferred)
3745 gfc_error ("'%s' at %L must not be DEFERRED as it overrides a"
3746 " non-DEFERRED binding", proc->name, &where);
3750 /* If the overridden binding is PURE, the overriding must be, too. */
3751 if (old_target->attr.pure && !proc_target->attr.pure)
3753 gfc_error ("'%s' at %L overrides a PURE procedure and must also be PURE",
3754 proc->name, &where);
3758 /* If the overridden binding is ELEMENTAL, the overriding must be, too. If it
3759 is not, the overriding must not be either. */
3760 if (old_target->attr.elemental && !proc_target->attr.elemental)
3762 gfc_error ("'%s' at %L overrides an ELEMENTAL procedure and must also be"
3763 " ELEMENTAL", proc->name, &where);
3766 if (!old_target->attr.elemental && proc_target->attr.elemental)
3768 gfc_error ("'%s' at %L overrides a non-ELEMENTAL procedure and must not"
3769 " be ELEMENTAL, either", proc->name, &where);
3773 /* If the overridden binding is a SUBROUTINE, the overriding must also be a
3775 if (old_target->attr.subroutine && !proc_target->attr.subroutine)
3777 gfc_error ("'%s' at %L overrides a SUBROUTINE and must also be a"
3778 " SUBROUTINE", proc->name, &where);
3782 /* If the overridden binding is a FUNCTION, the overriding must also be a
3783 FUNCTION and have the same characteristics. */
3784 if (old_target->attr.function)
3786 if (!proc_target->attr.function)
3788 gfc_error ("'%s' at %L overrides a FUNCTION and must also be a"
3789 " FUNCTION", proc->name, &where);
3793 /* FIXME: Do more comprehensive checking (including, for instance, the
3795 gcc_assert (proc_target->result && old_target->result);
3796 if (!compare_type_rank (proc_target->result, old_target->result))
3798 gfc_error ("'%s' at %L and the overridden FUNCTION should have"
3799 " matching result types and ranks", proc->name, &where);
3803 /* Check string length. */
3804 if (proc_target->result->ts.type == BT_CHARACTER
3805 && proc_target->result->ts.u.cl && old_target->result->ts.u.cl)
3807 int compval = gfc_dep_compare_expr (proc_target->result->ts.u.cl->length,
3808 old_target->result->ts.u.cl->length);
3814 gfc_error ("Character length mismatch between '%s' at '%L' and "
3815 "overridden FUNCTION", proc->name, &where);
3819 gfc_warning ("Possible character length mismatch between '%s' at"
3820 " '%L' and overridden FUNCTION", proc->name, &where);
3827 gfc_internal_error ("gfc_check_typebound_override: Unexpected "
3828 "result %i of gfc_dep_compare_expr", compval);
3834 /* If the overridden binding is PUBLIC, the overriding one must not be
3836 if (old->n.tb->access == ACCESS_PUBLIC
3837 && proc->n.tb->access == ACCESS_PRIVATE)
3839 gfc_error ("'%s' at %L overrides a PUBLIC procedure and must not be"
3840 " PRIVATE", proc->name, &where);
3844 /* Compare the formal argument lists of both procedures. This is also abused
3845 to find the position of the passed-object dummy arguments of both
3846 bindings as at least the overridden one might not yet be resolved and we
3847 need those positions in the check below. */
3848 proc_pass_arg = old_pass_arg = 0;
3849 if (!proc->n.tb->nopass && !proc->n.tb->pass_arg)
3851 if (!old->n.tb->nopass && !old->n.tb->pass_arg)
3854 for (proc_formal = proc_target->formal, old_formal = old_target->formal;
3855 proc_formal && old_formal;
3856 proc_formal = proc_formal->next, old_formal = old_formal->next)
3858 if (proc->n.tb->pass_arg
3859 && !strcmp (proc->n.tb->pass_arg, proc_formal->sym->name))
3860 proc_pass_arg = argpos;
3861 if (old->n.tb->pass_arg
3862 && !strcmp (old->n.tb->pass_arg, old_formal->sym->name))
3863 old_pass_arg = argpos;
3865 /* Check that the names correspond. */
3866 if (strcmp (proc_formal->sym->name, old_formal->sym->name))
3868 gfc_error ("Dummy argument '%s' of '%s' at %L should be named '%s' as"
3869 " to match the corresponding argument of the overridden"
3870 " procedure", proc_formal->sym->name, proc->name, &where,
3871 old_formal->sym->name);
3875 check_type = proc_pass_arg != argpos && old_pass_arg != argpos;
3876 if (check_dummy_characteristics (proc_formal->sym, old_formal->sym,
3877 check_type, err, sizeof(err)) == FAILURE)
3879 gfc_error ("Argument mismatch for the overriding procedure "
3880 "'%s' at %L: %s", proc->name, &where, err);
3886 if (proc_formal || old_formal)
3888 gfc_error ("'%s' at %L must have the same number of formal arguments as"
3889 " the overridden procedure", proc->name, &where);
3893 /* If the overridden binding is NOPASS, the overriding one must also be
3895 if (old->n.tb->nopass && !proc->n.tb->nopass)
3897 gfc_error ("'%s' at %L overrides a NOPASS binding and must also be"
3898 " NOPASS", proc->name, &where);
3902 /* If the overridden binding is PASS(x), the overriding one must also be
3903 PASS and the passed-object dummy arguments must correspond. */
3904 if (!old->n.tb->nopass)
3906 if (proc->n.tb->nopass)
3908 gfc_error ("'%s' at %L overrides a binding with PASS and must also be"
3909 " PASS", proc->name, &where);
3913 if (proc_pass_arg != old_pass_arg)
3915 gfc_error ("Passed-object dummy argument of '%s' at %L must be at"
3916 " the same position as the passed-object dummy argument of"
3917 " the overridden procedure", proc->name, &where);