2009-01-05 Paul Thomas <pault@gcc.gnu.org>
[official-gcc.git] / gcc / fortran / interface.c
blobf779dfa04de9c795d51eb8d03db6332f90bf28f8
1 /* Deal with interfaces.
2 Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008
3 Free Software Foundation, Inc.
4 Contributed by Andy Vaught
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
23 /* Deal with interfaces. An explicit interface is represented as a
24 singly linked list of formal argument structures attached to the
25 relevant symbols. For an implicit interface, the arguments don't
26 point to symbols. Explicit interfaces point to namespaces that
27 contain the symbols within that interface.
29 Implicit interfaces are linked together in a singly linked list
30 along the next_if member of symbol nodes. Since a particular
31 symbol can only have a single explicit interface, the symbol cannot
32 be part of multiple lists and a single next-member suffices.
34 This is not the case for general classes, though. An operator
35 definition is independent of just about all other uses and has it's
36 own head pointer.
38 Nameless interfaces:
39 Nameless interfaces create symbols with explicit interfaces within
40 the current namespace. They are otherwise unlinked.
42 Generic interfaces:
43 The generic name points to a linked list of symbols. Each symbol
44 has an explicit interface. Each explicit interface has its own
45 namespace containing the arguments. Module procedures are symbols in
46 which the interface is added later when the module procedure is parsed.
48 User operators:
49 User-defined operators are stored in a their own set of symtrees
50 separate from regular symbols. The symtrees point to gfc_user_op
51 structures which in turn head up a list of relevant interfaces.
53 Extended intrinsics and assignment:
54 The head of these interface lists are stored in the containing namespace.
56 Implicit interfaces:
57 An implicit interface is represented as a singly linked list of
58 formal argument list structures that don't point to any symbol
59 nodes -- they just contain types.
62 When a subprogram is defined, the program unit's name points to an
63 interface as usual, but the link to the namespace is NULL and the
64 formal argument list points to symbols within the same namespace as
65 the program unit name. */
67 #include "config.h"
68 #include "system.h"
69 #include "gfortran.h"
70 #include "match.h"
72 /* The current_interface structure holds information about the
73 interface currently being parsed. This structure is saved and
74 restored during recursive interfaces. */
76 gfc_interface_info current_interface;
79 /* Free a singly linked list of gfc_interface structures. */
81 void
82 gfc_free_interface (gfc_interface *intr)
84 gfc_interface *next;
86 for (; intr; intr = next)
88 next = intr->next;
89 gfc_free (intr);
94 /* Change the operators unary plus and minus into binary plus and
95 minus respectively, leaving the rest unchanged. */
97 static gfc_intrinsic_op
98 fold_unary (gfc_intrinsic_op op)
100 switch (op)
102 case INTRINSIC_UPLUS:
103 op = INTRINSIC_PLUS;
104 break;
105 case INTRINSIC_UMINUS:
106 op = INTRINSIC_MINUS;
107 break;
108 default:
109 break;
112 return op;
116 /* Match a generic specification. Depending on which type of
117 interface is found, the 'name' or 'op' pointers may be set.
118 This subroutine doesn't return MATCH_NO. */
120 match
121 gfc_match_generic_spec (interface_type *type,
122 char *name,
123 gfc_intrinsic_op *op)
125 char buffer[GFC_MAX_SYMBOL_LEN + 1];
126 match m;
127 gfc_intrinsic_op i;
129 if (gfc_match (" assignment ( = )") == MATCH_YES)
131 *type = INTERFACE_INTRINSIC_OP;
132 *op = INTRINSIC_ASSIGN;
133 return MATCH_YES;
136 if (gfc_match (" operator ( %o )", &i) == MATCH_YES)
137 { /* Operator i/f */
138 *type = INTERFACE_INTRINSIC_OP;
139 *op = fold_unary (i);
140 return MATCH_YES;
143 if (gfc_match (" operator ( ") == MATCH_YES)
145 m = gfc_match_defined_op_name (buffer, 1);
146 if (m == MATCH_NO)
147 goto syntax;
148 if (m != MATCH_YES)
149 return MATCH_ERROR;
151 m = gfc_match_char (')');
152 if (m == MATCH_NO)
153 goto syntax;
154 if (m != MATCH_YES)
155 return MATCH_ERROR;
157 strcpy (name, buffer);
158 *type = INTERFACE_USER_OP;
159 return MATCH_YES;
162 if (gfc_match_name (buffer) == MATCH_YES)
164 strcpy (name, buffer);
165 *type = INTERFACE_GENERIC;
166 return MATCH_YES;
169 *type = INTERFACE_NAMELESS;
170 return MATCH_YES;
172 syntax:
173 gfc_error ("Syntax error in generic specification at %C");
174 return MATCH_ERROR;
178 /* Match one of the five F95 forms of an interface statement. The
179 matcher for the abstract interface follows. */
181 match
182 gfc_match_interface (void)
184 char name[GFC_MAX_SYMBOL_LEN + 1];
185 interface_type type;
186 gfc_symbol *sym;
187 gfc_intrinsic_op op;
188 match m;
190 m = gfc_match_space ();
192 if (gfc_match_generic_spec (&type, name, &op) == MATCH_ERROR)
193 return MATCH_ERROR;
195 /* If we're not looking at the end of the statement now, or if this
196 is not a nameless interface but we did not see a space, punt. */
197 if (gfc_match_eos () != MATCH_YES
198 || (type != INTERFACE_NAMELESS && m != MATCH_YES))
200 gfc_error ("Syntax error: Trailing garbage in INTERFACE statement "
201 "at %C");
202 return MATCH_ERROR;
205 current_interface.type = type;
207 switch (type)
209 case INTERFACE_GENERIC:
210 if (gfc_get_symbol (name, NULL, &sym))
211 return MATCH_ERROR;
213 if (!sym->attr.generic
214 && gfc_add_generic (&sym->attr, sym->name, NULL) == FAILURE)
215 return MATCH_ERROR;
217 if (sym->attr.dummy)
219 gfc_error ("Dummy procedure '%s' at %C cannot have a "
220 "generic interface", sym->name);
221 return MATCH_ERROR;
224 current_interface.sym = gfc_new_block = sym;
225 break;
227 case INTERFACE_USER_OP:
228 current_interface.uop = gfc_get_uop (name);
229 break;
231 case INTERFACE_INTRINSIC_OP:
232 current_interface.op = op;
233 break;
235 case INTERFACE_NAMELESS:
236 case INTERFACE_ABSTRACT:
237 break;
240 return MATCH_YES;
245 /* Match a F2003 abstract interface. */
247 match
248 gfc_match_abstract_interface (void)
250 match m;
252 if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: ABSTRACT INTERFACE at %C")
253 == FAILURE)
254 return MATCH_ERROR;
256 m = gfc_match_eos ();
258 if (m != MATCH_YES)
260 gfc_error ("Syntax error in ABSTRACT INTERFACE statement at %C");
261 return MATCH_ERROR;
264 current_interface.type = INTERFACE_ABSTRACT;
266 return m;
270 /* Match the different sort of generic-specs that can be present after
271 the END INTERFACE itself. */
273 match
274 gfc_match_end_interface (void)
276 char name[GFC_MAX_SYMBOL_LEN + 1];
277 interface_type type;
278 gfc_intrinsic_op op;
279 match m;
281 m = gfc_match_space ();
283 if (gfc_match_generic_spec (&type, name, &op) == MATCH_ERROR)
284 return MATCH_ERROR;
286 /* If we're not looking at the end of the statement now, or if this
287 is not a nameless interface but we did not see a space, punt. */
288 if (gfc_match_eos () != MATCH_YES
289 || (type != INTERFACE_NAMELESS && m != MATCH_YES))
291 gfc_error ("Syntax error: Trailing garbage in END INTERFACE "
292 "statement at %C");
293 return MATCH_ERROR;
296 m = MATCH_YES;
298 switch (current_interface.type)
300 case INTERFACE_NAMELESS:
301 case INTERFACE_ABSTRACT:
302 if (type != INTERFACE_NAMELESS)
304 gfc_error ("Expected a nameless interface at %C");
305 m = MATCH_ERROR;
308 break;
310 case INTERFACE_INTRINSIC_OP:
311 if (type != current_interface.type || op != current_interface.op)
314 if (current_interface.op == INTRINSIC_ASSIGN)
315 gfc_error ("Expected 'END INTERFACE ASSIGNMENT (=)' at %C");
316 else
317 gfc_error ("Expecting 'END INTERFACE OPERATOR (%s)' at %C",
318 gfc_op2string (current_interface.op));
320 m = MATCH_ERROR;
323 break;
325 case INTERFACE_USER_OP:
326 /* Comparing the symbol node names is OK because only use-associated
327 symbols can be renamed. */
328 if (type != current_interface.type
329 || strcmp (current_interface.uop->name, name) != 0)
331 gfc_error ("Expecting 'END INTERFACE OPERATOR (.%s.)' at %C",
332 current_interface.uop->name);
333 m = MATCH_ERROR;
336 break;
338 case INTERFACE_GENERIC:
339 if (type != current_interface.type
340 || strcmp (current_interface.sym->name, name) != 0)
342 gfc_error ("Expecting 'END INTERFACE %s' at %C",
343 current_interface.sym->name);
344 m = MATCH_ERROR;
347 break;
350 return m;
354 /* Compare two derived types using the criteria in 4.4.2 of the standard,
355 recursing through gfc_compare_types for the components. */
358 gfc_compare_derived_types (gfc_symbol *derived1, gfc_symbol *derived2)
360 gfc_component *dt1, *dt2;
362 /* Special case for comparing derived types across namespaces. If the
363 true names and module names are the same and the module name is
364 nonnull, then they are equal. */
365 if (derived1 != NULL && derived2 != NULL
366 && strcmp (derived1->name, derived2->name) == 0
367 && derived1->module != NULL && derived2->module != NULL
368 && strcmp (derived1->module, derived2->module) == 0)
369 return 1;
371 /* Compare type via the rules of the standard. Both types must have
372 the SEQUENCE attribute to be equal. */
374 if (strcmp (derived1->name, derived2->name))
375 return 0;
377 if (derived1->component_access == ACCESS_PRIVATE
378 || derived2->component_access == ACCESS_PRIVATE)
379 return 0;
381 if (derived1->attr.sequence == 0 || derived2->attr.sequence == 0)
382 return 0;
384 dt1 = derived1->components;
385 dt2 = derived2->components;
387 /* Since subtypes of SEQUENCE types must be SEQUENCE types as well, a
388 simple test can speed things up. Otherwise, lots of things have to
389 match. */
390 for (;;)
392 if (strcmp (dt1->name, dt2->name) != 0)
393 return 0;
395 if (dt1->attr.access != dt2->attr.access)
396 return 0;
398 if (dt1->attr.pointer != dt2->attr.pointer)
399 return 0;
401 if (dt1->attr.dimension != dt2->attr.dimension)
402 return 0;
404 if (dt1->attr.allocatable != dt2->attr.allocatable)
405 return 0;
407 if (dt1->attr.dimension && gfc_compare_array_spec (dt1->as, dt2->as) == 0)
408 return 0;
410 /* Make sure that link lists do not put this function into an
411 endless recursive loop! */
412 if (!(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.derived)
413 && !(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.derived)
414 && gfc_compare_types (&dt1->ts, &dt2->ts) == 0)
415 return 0;
417 else if ((dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.derived)
418 && !(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.derived))
419 return 0;
421 else if (!(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.derived)
422 && (dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.derived))
423 return 0;
425 dt1 = dt1->next;
426 dt2 = dt2->next;
428 if (dt1 == NULL && dt2 == NULL)
429 break;
430 if (dt1 == NULL || dt2 == NULL)
431 return 0;
434 return 1;
438 /* Compare two typespecs, recursively if necessary. */
441 gfc_compare_types (gfc_typespec *ts1, gfc_typespec *ts2)
443 /* See if one of the typespecs is a BT_VOID, which is what is being used
444 to allow the funcs like c_f_pointer to accept any pointer type.
445 TODO: Possibly should narrow this to just the one typespec coming in
446 that is for the formal arg, but oh well. */
447 if (ts1->type == BT_VOID || ts2->type == BT_VOID)
448 return 1;
450 if (ts1->type != ts2->type)
451 return 0;
452 if (ts1->type != BT_DERIVED)
453 return (ts1->kind == ts2->kind);
455 /* Compare derived types. */
456 if (ts1->derived == ts2->derived)
457 return 1;
459 return gfc_compare_derived_types (ts1->derived ,ts2->derived);
463 /* Given two symbols that are formal arguments, compare their ranks
464 and types. Returns nonzero if they have the same rank and type,
465 zero otherwise. */
467 static int
468 compare_type_rank (gfc_symbol *s1, gfc_symbol *s2)
470 int r1, r2;
472 r1 = (s1->as != NULL) ? s1->as->rank : 0;
473 r2 = (s2->as != NULL) ? s2->as->rank : 0;
475 if (r1 != r2)
476 return 0; /* Ranks differ. */
478 return gfc_compare_types (&s1->ts, &s2->ts);
482 static int compare_intr_interfaces (gfc_symbol *, gfc_symbol *);
484 /* Given two symbols that are formal arguments, compare their types
485 and rank and their formal interfaces if they are both dummy
486 procedures. Returns nonzero if the same, zero if different. */
488 static int
489 compare_type_rank_if (gfc_symbol *s1, gfc_symbol *s2)
491 if (s1 == NULL || s2 == NULL)
492 return s1 == s2 ? 1 : 0;
494 if (s1->attr.flavor != FL_PROCEDURE && s2->attr.flavor != FL_PROCEDURE)
495 return compare_type_rank (s1, s2);
497 if (s1->attr.flavor != FL_PROCEDURE || s2->attr.flavor != FL_PROCEDURE)
498 return 0;
500 /* At this point, both symbols are procedures. */
501 if ((s1->attr.function == 0 && s1->attr.subroutine == 0)
502 || (s2->attr.function == 0 && s2->attr.subroutine == 0))
503 return 0;
505 if (s1->attr.function != s2->attr.function
506 || s1->attr.subroutine != s2->attr.subroutine)
507 return 0;
509 if (s1->attr.function && compare_type_rank (s1, s2) == 0)
510 return 0;
512 /* Originally, gfortran recursed here to check the interfaces of passed
513 procedures. This is explicitly not required by the standard. */
514 return 1;
518 /* Given a formal argument list and a keyword name, search the list
519 for that keyword. Returns the correct symbol node if found, NULL
520 if not found. */
522 static gfc_symbol *
523 find_keyword_arg (const char *name, gfc_formal_arglist *f)
525 for (; f; f = f->next)
526 if (strcmp (f->sym->name, name) == 0)
527 return f->sym;
529 return NULL;
533 /******** Interface checking subroutines **********/
536 /* Given an operator interface and the operator, make sure that all
537 interfaces for that operator are legal. */
539 static void
540 check_operator_interface (gfc_interface *intr, gfc_intrinsic_op op)
542 gfc_formal_arglist *formal;
543 sym_intent i1, i2;
544 gfc_symbol *sym;
545 bt t1, t2;
546 int args, r1, r2, k1, k2;
548 if (intr == NULL)
549 return;
551 args = 0;
552 t1 = t2 = BT_UNKNOWN;
553 i1 = i2 = INTENT_UNKNOWN;
554 r1 = r2 = -1;
555 k1 = k2 = -1;
557 for (formal = intr->sym->formal; formal; formal = formal->next)
559 sym = formal->sym;
560 if (sym == NULL)
562 gfc_error ("Alternate return cannot appear in operator "
563 "interface at %L", &intr->sym->declared_at);
564 return;
566 if (args == 0)
568 t1 = sym->ts.type;
569 i1 = sym->attr.intent;
570 r1 = (sym->as != NULL) ? sym->as->rank : 0;
571 k1 = sym->ts.kind;
573 if (args == 1)
575 t2 = sym->ts.type;
576 i2 = sym->attr.intent;
577 r2 = (sym->as != NULL) ? sym->as->rank : 0;
578 k2 = sym->ts.kind;
580 args++;
583 sym = intr->sym;
585 /* Only +, - and .not. can be unary operators.
586 .not. cannot be a binary operator. */
587 if (args == 0 || args > 2 || (args == 1 && op != INTRINSIC_PLUS
588 && op != INTRINSIC_MINUS
589 && op != INTRINSIC_NOT)
590 || (args == 2 && op == INTRINSIC_NOT))
592 gfc_error ("Operator interface at %L has the wrong number of arguments",
593 &intr->sym->declared_at);
594 return;
597 /* Check that intrinsics are mapped to functions, except
598 INTRINSIC_ASSIGN which should map to a subroutine. */
599 if (op == INTRINSIC_ASSIGN)
601 if (!sym->attr.subroutine)
603 gfc_error ("Assignment operator interface at %L must be "
604 "a SUBROUTINE", &intr->sym->declared_at);
605 return;
607 if (args != 2)
609 gfc_error ("Assignment operator interface at %L must have "
610 "two arguments", &intr->sym->declared_at);
611 return;
614 /* Allowed are (per F2003, 12.3.2.1.2 Defined assignments):
615 - First argument an array with different rank than second,
616 - Types and kinds do not conform, and
617 - First argument is of derived type. */
618 if (sym->formal->sym->ts.type != BT_DERIVED
619 && (r1 == 0 || r1 == r2)
620 && (sym->formal->sym->ts.type == sym->formal->next->sym->ts.type
621 || (gfc_numeric_ts (&sym->formal->sym->ts)
622 && gfc_numeric_ts (&sym->formal->next->sym->ts))))
624 gfc_error ("Assignment operator interface at %L must not redefine "
625 "an INTRINSIC type assignment", &intr->sym->declared_at);
626 return;
629 else
631 if (!sym->attr.function)
633 gfc_error ("Intrinsic operator interface at %L must be a FUNCTION",
634 &intr->sym->declared_at);
635 return;
639 /* Check intents on operator interfaces. */
640 if (op == INTRINSIC_ASSIGN)
642 if (i1 != INTENT_OUT && i1 != INTENT_INOUT)
643 gfc_error ("First argument of defined assignment at %L must be "
644 "INTENT(OUT) or INTENT(INOUT)", &intr->sym->declared_at);
646 if (i2 != INTENT_IN)
647 gfc_error ("Second argument of defined assignment at %L must be "
648 "INTENT(IN)", &intr->sym->declared_at);
650 else
652 if (i1 != INTENT_IN)
653 gfc_error ("First argument of operator interface at %L must be "
654 "INTENT(IN)", &intr->sym->declared_at);
656 if (args == 2 && i2 != INTENT_IN)
657 gfc_error ("Second argument of operator interface at %L must be "
658 "INTENT(IN)", &intr->sym->declared_at);
661 /* From now on, all we have to do is check that the operator definition
662 doesn't conflict with an intrinsic operator. The rules for this
663 game are defined in 7.1.2 and 7.1.3 of both F95 and F2003 standards,
664 as well as 12.3.2.1.1 of Fortran 2003:
666 "If the operator is an intrinsic-operator (R310), the number of
667 function arguments shall be consistent with the intrinsic uses of
668 that operator, and the types, kind type parameters, or ranks of the
669 dummy arguments shall differ from those required for the intrinsic
670 operation (7.1.2)." */
672 #define IS_NUMERIC_TYPE(t) \
673 ((t) == BT_INTEGER || (t) == BT_REAL || (t) == BT_COMPLEX)
675 /* Unary ops are easy, do them first. */
676 if (op == INTRINSIC_NOT)
678 if (t1 == BT_LOGICAL)
679 goto bad_repl;
680 else
681 return;
684 if (args == 1 && (op == INTRINSIC_PLUS || op == INTRINSIC_MINUS))
686 if (IS_NUMERIC_TYPE (t1))
687 goto bad_repl;
688 else
689 return;
692 /* Character intrinsic operators have same character kind, thus
693 operator definitions with operands of different character kinds
694 are always safe. */
695 if (t1 == BT_CHARACTER && t2 == BT_CHARACTER && k1 != k2)
696 return;
698 /* Intrinsic operators always perform on arguments of same rank,
699 so different ranks is also always safe. (rank == 0) is an exception
700 to that, because all intrinsic operators are elemental. */
701 if (r1 != r2 && r1 != 0 && r2 != 0)
702 return;
704 switch (op)
706 case INTRINSIC_EQ:
707 case INTRINSIC_EQ_OS:
708 case INTRINSIC_NE:
709 case INTRINSIC_NE_OS:
710 if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
711 goto bad_repl;
712 /* Fall through. */
714 case INTRINSIC_PLUS:
715 case INTRINSIC_MINUS:
716 case INTRINSIC_TIMES:
717 case INTRINSIC_DIVIDE:
718 case INTRINSIC_POWER:
719 if (IS_NUMERIC_TYPE (t1) && IS_NUMERIC_TYPE (t2))
720 goto bad_repl;
721 break;
723 case INTRINSIC_GT:
724 case INTRINSIC_GT_OS:
725 case INTRINSIC_GE:
726 case INTRINSIC_GE_OS:
727 case INTRINSIC_LT:
728 case INTRINSIC_LT_OS:
729 case INTRINSIC_LE:
730 case INTRINSIC_LE_OS:
731 if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
732 goto bad_repl;
733 if ((t1 == BT_INTEGER || t1 == BT_REAL)
734 && (t2 == BT_INTEGER || t2 == BT_REAL))
735 goto bad_repl;
736 break;
738 case INTRINSIC_CONCAT:
739 if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
740 goto bad_repl;
741 break;
743 case INTRINSIC_AND:
744 case INTRINSIC_OR:
745 case INTRINSIC_EQV:
746 case INTRINSIC_NEQV:
747 if (t1 == BT_LOGICAL && t2 == BT_LOGICAL)
748 goto bad_repl;
749 break;
751 default:
752 break;
755 return;
757 #undef IS_NUMERIC_TYPE
759 bad_repl:
760 gfc_error ("Operator interface at %L conflicts with intrinsic interface",
761 &intr->where);
762 return;
766 /* Given a pair of formal argument lists, we see if the two lists can
767 be distinguished by counting the number of nonoptional arguments of
768 a given type/rank in f1 and seeing if there are less then that
769 number of those arguments in f2 (including optional arguments).
770 Since this test is asymmetric, it has to be called twice to make it
771 symmetric. Returns nonzero if the argument lists are incompatible
772 by this test. This subroutine implements rule 1 of section
773 14.1.2.3. */
775 static int
776 count_types_test (gfc_formal_arglist *f1, gfc_formal_arglist *f2)
778 int rc, ac1, ac2, i, j, k, n1;
779 gfc_formal_arglist *f;
781 typedef struct
783 int flag;
784 gfc_symbol *sym;
786 arginfo;
788 arginfo *arg;
790 n1 = 0;
792 for (f = f1; f; f = f->next)
793 n1++;
795 /* Build an array of integers that gives the same integer to
796 arguments of the same type/rank. */
797 arg = XCNEWVEC (arginfo, n1);
799 f = f1;
800 for (i = 0; i < n1; i++, f = f->next)
802 arg[i].flag = -1;
803 arg[i].sym = f->sym;
806 k = 0;
808 for (i = 0; i < n1; i++)
810 if (arg[i].flag != -1)
811 continue;
813 if (arg[i].sym && arg[i].sym->attr.optional)
814 continue; /* Skip optional arguments. */
816 arg[i].flag = k;
818 /* Find other nonoptional arguments of the same type/rank. */
819 for (j = i + 1; j < n1; j++)
820 if ((arg[j].sym == NULL || !arg[j].sym->attr.optional)
821 && compare_type_rank_if (arg[i].sym, arg[j].sym))
822 arg[j].flag = k;
824 k++;
827 /* Now loop over each distinct type found in f1. */
828 k = 0;
829 rc = 0;
831 for (i = 0; i < n1; i++)
833 if (arg[i].flag != k)
834 continue;
836 ac1 = 1;
837 for (j = i + 1; j < n1; j++)
838 if (arg[j].flag == k)
839 ac1++;
841 /* Count the number of arguments in f2 with that type, including
842 those that are optional. */
843 ac2 = 0;
845 for (f = f2; f; f = f->next)
846 if (compare_type_rank_if (arg[i].sym, f->sym))
847 ac2++;
849 if (ac1 > ac2)
851 rc = 1;
852 break;
855 k++;
858 gfc_free (arg);
860 return rc;
864 /* Perform the abbreviated correspondence test for operators. The
865 arguments cannot be optional and are always ordered correctly,
866 which makes this test much easier than that for generic tests.
868 This subroutine is also used when comparing a formal and actual
869 argument list when an actual parameter is a dummy procedure. At
870 that point, two formal interfaces must be compared for equality
871 which is what happens here. */
873 static int
874 operator_correspondence (gfc_formal_arglist *f1, gfc_formal_arglist *f2)
876 for (;;)
878 if (f1 == NULL && f2 == NULL)
879 break;
880 if (f1 == NULL || f2 == NULL)
881 return 1;
883 if (!compare_type_rank (f1->sym, f2->sym))
884 return 1;
886 f1 = f1->next;
887 f2 = f2->next;
890 return 0;
894 /* Perform the correspondence test in rule 2 of section 14.1.2.3.
895 Returns zero if no argument is found that satisfies rule 2, nonzero
896 otherwise.
898 This test is also not symmetric in f1 and f2 and must be called
899 twice. This test finds problems caused by sorting the actual
900 argument list with keywords. For example:
902 INTERFACE FOO
903 SUBROUTINE F1(A, B)
904 INTEGER :: A ; REAL :: B
905 END SUBROUTINE F1
907 SUBROUTINE F2(B, A)
908 INTEGER :: A ; REAL :: B
909 END SUBROUTINE F1
910 END INTERFACE FOO
912 At this point, 'CALL FOO(A=1, B=1.0)' is ambiguous. */
914 static int
915 generic_correspondence (gfc_formal_arglist *f1, gfc_formal_arglist *f2)
917 gfc_formal_arglist *f2_save, *g;
918 gfc_symbol *sym;
920 f2_save = f2;
922 while (f1)
924 if (f1->sym->attr.optional)
925 goto next;
927 if (f2 != NULL && compare_type_rank (f1->sym, f2->sym))
928 goto next;
930 /* Now search for a disambiguating keyword argument starting at
931 the current non-match. */
932 for (g = f1; g; g = g->next)
934 if (g->sym->attr.optional)
935 continue;
937 sym = find_keyword_arg (g->sym->name, f2_save);
938 if (sym == NULL || !compare_type_rank (g->sym, sym))
939 return 1;
942 next:
943 f1 = f1->next;
944 if (f2 != NULL)
945 f2 = f2->next;
948 return 0;
952 /* 'Compare' two formal interfaces associated with a pair of symbols.
953 We return nonzero if there exists an actual argument list that
954 would be ambiguous between the two interfaces, zero otherwise. */
957 gfc_compare_interfaces (gfc_symbol *s1, gfc_symbol *s2, int generic_flag)
959 gfc_formal_arglist *f1, *f2;
961 if (s1->attr.function != s2->attr.function
962 || s1->attr.subroutine != s2->attr.subroutine)
963 return 0; /* Disagreement between function/subroutine. */
965 f1 = s1->formal;
966 f2 = s2->formal;
968 if (f1 == NULL && f2 == NULL)
969 return 1; /* Special case. */
971 if (count_types_test (f1, f2))
972 return 0;
973 if (count_types_test (f2, f1))
974 return 0;
976 if (generic_flag)
978 if (generic_correspondence (f1, f2))
979 return 0;
980 if (generic_correspondence (f2, f1))
981 return 0;
983 else
985 if (operator_correspondence (f1, f2))
986 return 0;
989 return 1;
993 static int
994 compare_intr_interfaces (gfc_symbol *s1, gfc_symbol *s2)
996 gfc_formal_arglist *f, *f1;
997 gfc_intrinsic_arg *fi, *f2;
998 gfc_intrinsic_sym *isym;
1000 if (s1->attr.function != s2->attr.function
1001 || s1->attr.subroutine != s2->attr.subroutine)
1002 return 0; /* Disagreement between function/subroutine. */
1004 /* If the arguments are functions, check type and kind. */
1006 if (s1->attr.dummy && s1->attr.function && s2->attr.function)
1008 if (s1->ts.type != s2->ts.type)
1009 return 0;
1010 if (s1->ts.kind != s2->ts.kind)
1011 return 0;
1012 if (s1->attr.if_source == IFSRC_DECL)
1013 return 1;
1016 isym = gfc_find_function (s2->name);
1018 /* This should already have been checked in
1019 resolve.c (resolve_actual_arglist). */
1020 gcc_assert (isym);
1022 f1 = s1->formal;
1023 f2 = isym->formal;
1025 /* Special case. */
1026 if (f1 == NULL && f2 == NULL)
1027 return 1;
1029 /* First scan through the formal argument list and check the intrinsic. */
1030 fi = f2;
1031 for (f = f1; f; f = f->next)
1033 if (fi == NULL)
1034 return 0;
1035 if ((fi->ts.type != f->sym->ts.type) || (fi->ts.kind != f->sym->ts.kind))
1036 return 0;
1037 fi = fi->next;
1040 /* Now scan through the intrinsic argument list and check the formal. */
1041 f = f1;
1042 for (fi = f2; fi; fi = fi->next)
1044 if (f == NULL)
1045 return 0;
1046 if ((fi->ts.type != f->sym->ts.type) || (fi->ts.kind != f->sym->ts.kind))
1047 return 0;
1048 f = f->next;
1051 return 1;
1055 /* Compare an actual argument list with an intrinsic argument list. */
1057 static int
1058 compare_actual_formal_intr (gfc_actual_arglist **ap, gfc_symbol *s2)
1060 gfc_actual_arglist *a;
1061 gfc_intrinsic_arg *fi, *f2;
1062 gfc_intrinsic_sym *isym;
1064 isym = gfc_find_function (s2->name);
1066 /* This should already have been checked in
1067 resolve.c (resolve_actual_arglist). */
1068 gcc_assert (isym);
1070 f2 = isym->formal;
1072 /* Special case. */
1073 if (*ap == NULL && f2 == NULL)
1074 return 1;
1076 /* First scan through the actual argument list and check the intrinsic. */
1077 fi = f2;
1078 for (a = *ap; a; a = a->next)
1080 if (fi == NULL)
1081 return 0;
1082 if ((fi->ts.type != a->expr->ts.type)
1083 || (fi->ts.kind != a->expr->ts.kind))
1084 return 0;
1085 fi = fi->next;
1088 /* Now scan through the intrinsic argument list and check the formal. */
1089 a = *ap;
1090 for (fi = f2; fi; fi = fi->next)
1092 if (a == NULL)
1093 return 0;
1094 if ((fi->ts.type != a->expr->ts.type)
1095 || (fi->ts.kind != a->expr->ts.kind))
1096 return 0;
1097 a = a->next;
1100 return 1;
1104 /* Given a pointer to an interface pointer, remove duplicate
1105 interfaces and make sure that all symbols are either functions or
1106 subroutines. Returns nonzero if something goes wrong. */
1108 static int
1109 check_interface0 (gfc_interface *p, const char *interface_name)
1111 gfc_interface *psave, *q, *qlast;
1113 psave = p;
1114 /* Make sure all symbols in the interface have been defined as
1115 functions or subroutines. */
1116 for (; p; p = p->next)
1117 if ((!p->sym->attr.function && !p->sym->attr.subroutine)
1118 || !p->sym->attr.if_source)
1120 if (p->sym->attr.external)
1121 gfc_error ("Procedure '%s' in %s at %L has no explicit interface",
1122 p->sym->name, interface_name, &p->sym->declared_at);
1123 else
1124 gfc_error ("Procedure '%s' in %s at %L is neither function nor "
1125 "subroutine", p->sym->name, interface_name,
1126 &p->sym->declared_at);
1127 return 1;
1129 p = psave;
1131 /* Remove duplicate interfaces in this interface list. */
1132 for (; p; p = p->next)
1134 qlast = p;
1136 for (q = p->next; q;)
1138 if (p->sym != q->sym)
1140 qlast = q;
1141 q = q->next;
1143 else
1145 /* Duplicate interface. */
1146 qlast->next = q->next;
1147 gfc_free (q);
1148 q = qlast->next;
1153 return 0;
1157 /* Check lists of interfaces to make sure that no two interfaces are
1158 ambiguous. Duplicate interfaces (from the same symbol) are OK here. */
1160 static int
1161 check_interface1 (gfc_interface *p, gfc_interface *q0,
1162 int generic_flag, const char *interface_name,
1163 bool referenced)
1165 gfc_interface *q;
1166 for (; p; p = p->next)
1167 for (q = q0; q; q = q->next)
1169 if (p->sym == q->sym)
1170 continue; /* Duplicates OK here. */
1172 if (p->sym->name == q->sym->name && p->sym->module == q->sym->module)
1173 continue;
1175 if (gfc_compare_interfaces (p->sym, q->sym, generic_flag))
1177 if (referenced)
1179 gfc_error ("Ambiguous interfaces '%s' and '%s' in %s at %L",
1180 p->sym->name, q->sym->name, interface_name,
1181 &p->where);
1184 if (!p->sym->attr.use_assoc && q->sym->attr.use_assoc)
1185 gfc_warning ("Ambiguous interfaces '%s' and '%s' in %s at %L",
1186 p->sym->name, q->sym->name, interface_name,
1187 &p->where);
1188 return 1;
1191 return 0;
1195 /* Check the generic and operator interfaces of symbols to make sure
1196 that none of the interfaces conflict. The check has to be done
1197 after all of the symbols are actually loaded. */
1199 static void
1200 check_sym_interfaces (gfc_symbol *sym)
1202 char interface_name[100];
1203 bool k;
1204 gfc_interface *p;
1206 if (sym->ns != gfc_current_ns)
1207 return;
1209 if (sym->generic != NULL)
1211 sprintf (interface_name, "generic interface '%s'", sym->name);
1212 if (check_interface0 (sym->generic, interface_name))
1213 return;
1215 for (p = sym->generic; p; p = p->next)
1217 if (p->sym->attr.mod_proc
1218 && (p->sym->attr.if_source != IFSRC_DECL
1219 || p->sym->attr.procedure))
1221 gfc_error ("'%s' at %L is not a module procedure",
1222 p->sym->name, &p->where);
1223 return;
1227 /* Originally, this test was applied to host interfaces too;
1228 this is incorrect since host associated symbols, from any
1229 source, cannot be ambiguous with local symbols. */
1230 k = sym->attr.referenced || !sym->attr.use_assoc;
1231 if (check_interface1 (sym->generic, sym->generic, 1, interface_name, k))
1232 sym->attr.ambiguous_interfaces = 1;
1237 static void
1238 check_uop_interfaces (gfc_user_op *uop)
1240 char interface_name[100];
1241 gfc_user_op *uop2;
1242 gfc_namespace *ns;
1244 sprintf (interface_name, "operator interface '%s'", uop->name);
1245 if (check_interface0 (uop->op, interface_name))
1246 return;
1248 for (ns = gfc_current_ns; ns; ns = ns->parent)
1250 uop2 = gfc_find_uop (uop->name, ns);
1251 if (uop2 == NULL)
1252 continue;
1254 check_interface1 (uop->op, uop2->op, 0,
1255 interface_name, true);
1260 /* For the namespace, check generic, user operator and intrinsic
1261 operator interfaces for consistency and to remove duplicate
1262 interfaces. We traverse the whole namespace, counting on the fact
1263 that most symbols will not have generic or operator interfaces. */
1265 void
1266 gfc_check_interfaces (gfc_namespace *ns)
1268 gfc_namespace *old_ns, *ns2;
1269 char interface_name[100];
1270 gfc_intrinsic_op i;
1272 old_ns = gfc_current_ns;
1273 gfc_current_ns = ns;
1275 gfc_traverse_ns (ns, check_sym_interfaces);
1277 gfc_traverse_user_op (ns, check_uop_interfaces);
1279 for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++)
1281 if (i == INTRINSIC_USER)
1282 continue;
1284 if (i == INTRINSIC_ASSIGN)
1285 strcpy (interface_name, "intrinsic assignment operator");
1286 else
1287 sprintf (interface_name, "intrinsic '%s' operator",
1288 gfc_op2string (i));
1290 if (check_interface0 (ns->op[i], interface_name))
1291 continue;
1293 check_operator_interface (ns->op[i], i);
1295 for (ns2 = ns; ns2; ns2 = ns2->parent)
1297 if (check_interface1 (ns->op[i], ns2->op[i], 0,
1298 interface_name, true))
1299 goto done;
1301 switch (i)
1303 case INTRINSIC_EQ:
1304 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_EQ_OS],
1305 0, interface_name, true)) goto done;
1306 break;
1308 case INTRINSIC_EQ_OS:
1309 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_EQ],
1310 0, interface_name, true)) goto done;
1311 break;
1313 case INTRINSIC_NE:
1314 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_NE_OS],
1315 0, interface_name, true)) goto done;
1316 break;
1318 case INTRINSIC_NE_OS:
1319 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_NE],
1320 0, interface_name, true)) goto done;
1321 break;
1323 case INTRINSIC_GT:
1324 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_GT_OS],
1325 0, interface_name, true)) goto done;
1326 break;
1328 case INTRINSIC_GT_OS:
1329 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_GT],
1330 0, interface_name, true)) goto done;
1331 break;
1333 case INTRINSIC_GE:
1334 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_GE_OS],
1335 0, interface_name, true)) goto done;
1336 break;
1338 case INTRINSIC_GE_OS:
1339 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_GE],
1340 0, interface_name, true)) goto done;
1341 break;
1343 case INTRINSIC_LT:
1344 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_LT_OS],
1345 0, interface_name, true)) goto done;
1346 break;
1348 case INTRINSIC_LT_OS:
1349 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_LT],
1350 0, interface_name, true)) goto done;
1351 break;
1353 case INTRINSIC_LE:
1354 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_LE_OS],
1355 0, interface_name, true)) goto done;
1356 break;
1358 case INTRINSIC_LE_OS:
1359 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_LE],
1360 0, interface_name, true)) goto done;
1361 break;
1363 default:
1364 break;
1369 done:
1370 gfc_current_ns = old_ns;
1374 static int
1375 symbol_rank (gfc_symbol *sym)
1377 return (sym->as == NULL) ? 0 : sym->as->rank;
1381 /* Given a symbol of a formal argument list and an expression, if the
1382 formal argument is allocatable, check that the actual argument is
1383 allocatable. Returns nonzero if compatible, zero if not compatible. */
1385 static int
1386 compare_allocatable (gfc_symbol *formal, gfc_expr *actual)
1388 symbol_attribute attr;
1390 if (formal->attr.allocatable)
1392 attr = gfc_expr_attr (actual);
1393 if (!attr.allocatable)
1394 return 0;
1397 return 1;
1401 /* Given a symbol of a formal argument list and an expression, if the
1402 formal argument is a pointer, see if the actual argument is a
1403 pointer. Returns nonzero if compatible, zero if not compatible. */
1405 static int
1406 compare_pointer (gfc_symbol *formal, gfc_expr *actual)
1408 symbol_attribute attr;
1410 if (formal->attr.pointer)
1412 attr = gfc_expr_attr (actual);
1413 if (!attr.pointer)
1414 return 0;
1417 return 1;
1421 /* Given a symbol of a formal argument list and an expression, see if
1422 the two are compatible as arguments. Returns nonzero if
1423 compatible, zero if not compatible. */
1425 static int
1426 compare_parameter (gfc_symbol *formal, gfc_expr *actual,
1427 int ranks_must_agree, int is_elemental, locus *where)
1429 gfc_ref *ref;
1430 bool rank_check;
1432 /* If the formal arg has type BT_VOID, it's to one of the iso_c_binding
1433 procs c_f_pointer or c_f_procpointer, and we need to accept most
1434 pointers the user could give us. This should allow that. */
1435 if (formal->ts.type == BT_VOID)
1436 return 1;
1438 if (formal->ts.type == BT_DERIVED
1439 && formal->ts.derived && formal->ts.derived->ts.is_iso_c
1440 && actual->ts.type == BT_DERIVED
1441 && actual->ts.derived && actual->ts.derived->ts.is_iso_c)
1442 return 1;
1444 if (actual->ts.type == BT_PROCEDURE)
1446 if (formal->attr.flavor != FL_PROCEDURE)
1447 goto proc_fail;
1449 if (formal->attr.function
1450 && !compare_type_rank (formal, actual->symtree->n.sym))
1451 goto proc_fail;
1453 if (formal->attr.if_source == IFSRC_UNKNOWN
1454 || actual->symtree->n.sym->attr.external)
1455 return 1; /* Assume match. */
1457 if (actual->symtree->n.sym->attr.intrinsic)
1459 if (!compare_intr_interfaces (formal, actual->symtree->n.sym))
1460 goto proc_fail;
1462 else if (!gfc_compare_interfaces (formal, actual->symtree->n.sym, 0))
1463 goto proc_fail;
1465 return 1;
1467 proc_fail:
1468 if (where)
1469 gfc_error ("Type/rank mismatch in argument '%s' at %L",
1470 formal->name, &actual->where);
1471 return 0;
1474 if ((actual->expr_type != EXPR_NULL || actual->ts.type != BT_UNKNOWN)
1475 && !gfc_compare_types (&formal->ts, &actual->ts))
1477 if (where)
1478 gfc_error ("Type mismatch in argument '%s' at %L; passed %s to %s",
1479 formal->name, &actual->where, gfc_typename (&actual->ts),
1480 gfc_typename (&formal->ts));
1481 return 0;
1484 if (symbol_rank (formal) == actual->rank)
1485 return 1;
1487 rank_check = where != NULL && !is_elemental && formal->as
1488 && (formal->as->type == AS_ASSUMED_SHAPE
1489 || formal->as->type == AS_DEFERRED);
1491 if (rank_check || ranks_must_agree || formal->attr.pointer
1492 || (actual->rank != 0 && !(is_elemental || formal->attr.dimension))
1493 || (actual->rank == 0 && formal->as->type == AS_ASSUMED_SHAPE))
1495 if (where)
1496 gfc_error ("Rank mismatch in argument '%s' at %L (%d and %d)",
1497 formal->name, &actual->where, symbol_rank (formal),
1498 actual->rank);
1499 return 0;
1501 else if (actual->rank != 0 && (is_elemental || formal->attr.dimension))
1502 return 1;
1504 /* At this point, we are considering a scalar passed to an array. This
1505 is valid (cf. F95 12.4.1.1; F2003 12.4.1.2),
1506 - if the actual argument is (a substring of) an element of a
1507 non-assumed-shape/non-pointer array;
1508 - (F2003) if the actual argument is of type character. */
1510 for (ref = actual->ref; ref; ref = ref->next)
1511 if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT)
1512 break;
1514 /* Not an array element. */
1515 if (formal->ts.type == BT_CHARACTER
1516 && (ref == NULL
1517 || (actual->expr_type == EXPR_VARIABLE
1518 && (actual->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
1519 || actual->symtree->n.sym->attr.pointer))))
1521 if (where && (gfc_option.allow_std & GFC_STD_F2003) == 0)
1523 gfc_error ("Fortran 2003: Scalar CHARACTER actual argument with "
1524 "array dummy argument '%s' at %L",
1525 formal->name, &actual->where);
1526 return 0;
1528 else if ((gfc_option.allow_std & GFC_STD_F2003) == 0)
1529 return 0;
1530 else
1531 return 1;
1533 else if (ref == NULL)
1535 if (where)
1536 gfc_error ("Rank mismatch in argument '%s' at %L (%d and %d)",
1537 formal->name, &actual->where, symbol_rank (formal),
1538 actual->rank);
1539 return 0;
1542 if (actual->expr_type == EXPR_VARIABLE
1543 && actual->symtree->n.sym->as
1544 && (actual->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
1545 || actual->symtree->n.sym->attr.pointer))
1547 if (where)
1548 gfc_error ("Element of assumed-shaped array passed to dummy "
1549 "argument '%s' at %L", formal->name, &actual->where);
1550 return 0;
1553 return 1;
1557 /* Given a symbol of a formal argument list and an expression, see if
1558 the two are compatible as arguments. Returns nonzero if
1559 compatible, zero if not compatible. */
1561 static int
1562 compare_parameter_protected (gfc_symbol *formal, gfc_expr *actual)
1564 if (actual->expr_type != EXPR_VARIABLE)
1565 return 1;
1567 if (!actual->symtree->n.sym->attr.is_protected)
1568 return 1;
1570 if (!actual->symtree->n.sym->attr.use_assoc)
1571 return 1;
1573 if (formal->attr.intent == INTENT_IN
1574 || formal->attr.intent == INTENT_UNKNOWN)
1575 return 1;
1577 if (!actual->symtree->n.sym->attr.pointer)
1578 return 0;
1580 if (actual->symtree->n.sym->attr.pointer && formal->attr.pointer)
1581 return 0;
1583 return 1;
1587 /* Returns the storage size of a symbol (formal argument) or
1588 zero if it cannot be determined. */
1590 static unsigned long
1591 get_sym_storage_size (gfc_symbol *sym)
1593 int i;
1594 unsigned long strlen, elements;
1596 if (sym->ts.type == BT_CHARACTER)
1598 if (sym->ts.cl && sym->ts.cl->length
1599 && sym->ts.cl->length->expr_type == EXPR_CONSTANT)
1600 strlen = mpz_get_ui (sym->ts.cl->length->value.integer);
1601 else
1602 return 0;
1604 else
1605 strlen = 1;
1607 if (symbol_rank (sym) == 0)
1608 return strlen;
1610 elements = 1;
1611 if (sym->as->type != AS_EXPLICIT)
1612 return 0;
1613 for (i = 0; i < sym->as->rank; i++)
1615 if (!sym->as || sym->as->upper[i]->expr_type != EXPR_CONSTANT
1616 || sym->as->lower[i]->expr_type != EXPR_CONSTANT)
1617 return 0;
1619 elements *= mpz_get_ui (sym->as->upper[i]->value.integer)
1620 - mpz_get_ui (sym->as->lower[i]->value.integer) + 1L;
1623 return strlen*elements;
1627 /* Returns the storage size of an expression (actual argument) or
1628 zero if it cannot be determined. For an array element, it returns
1629 the remaining size as the element sequence consists of all storage
1630 units of the actual argument up to the end of the array. */
1632 static unsigned long
1633 get_expr_storage_size (gfc_expr *e)
1635 int i;
1636 long int strlen, elements;
1637 long int substrlen = 0;
1638 bool is_str_storage = false;
1639 gfc_ref *ref;
1641 if (e == NULL)
1642 return 0;
1644 if (e->ts.type == BT_CHARACTER)
1646 if (e->ts.cl && e->ts.cl->length
1647 && e->ts.cl->length->expr_type == EXPR_CONSTANT)
1648 strlen = mpz_get_si (e->ts.cl->length->value.integer);
1649 else if (e->expr_type == EXPR_CONSTANT
1650 && (e->ts.cl == NULL || e->ts.cl->length == NULL))
1651 strlen = e->value.character.length;
1652 else
1653 return 0;
1655 else
1656 strlen = 1; /* Length per element. */
1658 if (e->rank == 0 && !e->ref)
1659 return strlen;
1661 elements = 1;
1662 if (!e->ref)
1664 if (!e->shape)
1665 return 0;
1666 for (i = 0; i < e->rank; i++)
1667 elements *= mpz_get_si (e->shape[i]);
1668 return elements*strlen;
1671 for (ref = e->ref; ref; ref = ref->next)
1673 if (ref->type == REF_SUBSTRING && ref->u.ss.start
1674 && ref->u.ss.start->expr_type == EXPR_CONSTANT)
1676 if (is_str_storage)
1678 /* The string length is the substring length.
1679 Set now to full string length. */
1680 if (ref->u.ss.length == NULL
1681 || ref->u.ss.length->length->expr_type != EXPR_CONSTANT)
1682 return 0;
1684 strlen = mpz_get_ui (ref->u.ss.length->length->value.integer);
1686 substrlen = strlen - mpz_get_ui (ref->u.ss.start->value.integer) + 1;
1687 continue;
1690 if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION
1691 && ref->u.ar.start && ref->u.ar.end && ref->u.ar.stride
1692 && ref->u.ar.as->upper)
1693 for (i = 0; i < ref->u.ar.dimen; i++)
1695 long int start, end, stride;
1696 stride = 1;
1698 if (ref->u.ar.stride[i])
1700 if (ref->u.ar.stride[i]->expr_type == EXPR_CONSTANT)
1701 stride = mpz_get_si (ref->u.ar.stride[i]->value.integer);
1702 else
1703 return 0;
1706 if (ref->u.ar.start[i])
1708 if (ref->u.ar.start[i]->expr_type == EXPR_CONSTANT)
1709 start = mpz_get_si (ref->u.ar.start[i]->value.integer);
1710 else
1711 return 0;
1713 else if (ref->u.ar.as->lower[i]
1714 && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT)
1715 start = mpz_get_si (ref->u.ar.as->lower[i]->value.integer);
1716 else
1717 return 0;
1719 if (ref->u.ar.end[i])
1721 if (ref->u.ar.end[i]->expr_type == EXPR_CONSTANT)
1722 end = mpz_get_si (ref->u.ar.end[i]->value.integer);
1723 else
1724 return 0;
1726 else if (ref->u.ar.as->upper[i]
1727 && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
1728 end = mpz_get_si (ref->u.ar.as->upper[i]->value.integer);
1729 else
1730 return 0;
1732 elements *= (end - start)/stride + 1L;
1734 else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_FULL
1735 && ref->u.ar.as->lower && ref->u.ar.as->upper)
1736 for (i = 0; i < ref->u.ar.as->rank; i++)
1738 if (ref->u.ar.as->lower[i] && ref->u.ar.as->upper[i]
1739 && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT
1740 && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
1741 elements *= mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
1742 - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
1743 + 1L;
1744 else
1745 return 0;
1747 else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT
1748 && e->expr_type == EXPR_VARIABLE)
1750 if (e->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
1751 || e->symtree->n.sym->attr.pointer)
1753 elements = 1;
1754 continue;
1757 /* Determine the number of remaining elements in the element
1758 sequence for array element designators. */
1759 is_str_storage = true;
1760 for (i = ref->u.ar.dimen - 1; i >= 0; i--)
1762 if (ref->u.ar.start[i] == NULL
1763 || ref->u.ar.start[i]->expr_type != EXPR_CONSTANT
1764 || ref->u.ar.as->upper[i] == NULL
1765 || ref->u.ar.as->lower[i] == NULL
1766 || ref->u.ar.as->upper[i]->expr_type != EXPR_CONSTANT
1767 || ref->u.ar.as->lower[i]->expr_type != EXPR_CONSTANT)
1768 return 0;
1770 elements
1771 = elements
1772 * (mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
1773 - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
1774 + 1L)
1775 - (mpz_get_si (ref->u.ar.start[i]->value.integer)
1776 - mpz_get_si (ref->u.ar.as->lower[i]->value.integer));
1779 else
1780 return 0;
1783 if (substrlen)
1784 return (is_str_storage) ? substrlen + (elements-1)*strlen
1785 : elements*strlen;
1786 else
1787 return elements*strlen;
1791 /* Given an expression, check whether it is an array section
1792 which has a vector subscript. If it has, one is returned,
1793 otherwise zero. */
1795 static int
1796 has_vector_subscript (gfc_expr *e)
1798 int i;
1799 gfc_ref *ref;
1801 if (e == NULL || e->rank == 0 || e->expr_type != EXPR_VARIABLE)
1802 return 0;
1804 for (ref = e->ref; ref; ref = ref->next)
1805 if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION)
1806 for (i = 0; i < ref->u.ar.dimen; i++)
1807 if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
1808 return 1;
1810 return 0;
1814 /* Given formal and actual argument lists, see if they are compatible.
1815 If they are compatible, the actual argument list is sorted to
1816 correspond with the formal list, and elements for missing optional
1817 arguments are inserted. If WHERE pointer is nonnull, then we issue
1818 errors when things don't match instead of just returning the status
1819 code. */
1821 static int
1822 compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
1823 int ranks_must_agree, int is_elemental, locus *where)
1825 gfc_actual_arglist **new_arg, *a, *actual, temp;
1826 gfc_formal_arglist *f;
1827 int i, n, na;
1828 unsigned long actual_size, formal_size;
1830 actual = *ap;
1832 if (actual == NULL && formal == NULL)
1833 return 1;
1835 n = 0;
1836 for (f = formal; f; f = f->next)
1837 n++;
1839 new_arg = (gfc_actual_arglist **) alloca (n * sizeof (gfc_actual_arglist *));
1841 for (i = 0; i < n; i++)
1842 new_arg[i] = NULL;
1844 na = 0;
1845 f = formal;
1846 i = 0;
1848 for (a = actual; a; a = a->next, f = f->next)
1850 /* Look for keywords but ignore g77 extensions like %VAL. */
1851 if (a->name != NULL && a->name[0] != '%')
1853 i = 0;
1854 for (f = formal; f; f = f->next, i++)
1856 if (f->sym == NULL)
1857 continue;
1858 if (strcmp (f->sym->name, a->name) == 0)
1859 break;
1862 if (f == NULL)
1864 if (where)
1865 gfc_error ("Keyword argument '%s' at %L is not in "
1866 "the procedure", a->name, &a->expr->where);
1867 return 0;
1870 if (new_arg[i] != NULL)
1872 if (where)
1873 gfc_error ("Keyword argument '%s' at %L is already associated "
1874 "with another actual argument", a->name,
1875 &a->expr->where);
1876 return 0;
1880 if (f == NULL)
1882 if (where)
1883 gfc_error ("More actual than formal arguments in procedure "
1884 "call at %L", where);
1886 return 0;
1889 if (f->sym == NULL && a->expr == NULL)
1890 goto match;
1892 if (f->sym == NULL)
1894 if (where)
1895 gfc_error ("Missing alternate return spec in subroutine call "
1896 "at %L", where);
1897 return 0;
1900 if (a->expr == NULL)
1902 if (where)
1903 gfc_error ("Unexpected alternate return spec in subroutine "
1904 "call at %L", where);
1905 return 0;
1908 if (!compare_parameter (f->sym, a->expr, ranks_must_agree,
1909 is_elemental, where))
1910 return 0;
1912 /* Special case for character arguments. For allocatable, pointer
1913 and assumed-shape dummies, the string length needs to match
1914 exactly. */
1915 if (a->expr->ts.type == BT_CHARACTER
1916 && a->expr->ts.cl && a->expr->ts.cl->length
1917 && a->expr->ts.cl->length->expr_type == EXPR_CONSTANT
1918 && f->sym->ts.cl && f->sym->ts.cl && f->sym->ts.cl->length
1919 && f->sym->ts.cl->length->expr_type == EXPR_CONSTANT
1920 && (f->sym->attr.pointer || f->sym->attr.allocatable
1921 || (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
1922 && (mpz_cmp (a->expr->ts.cl->length->value.integer,
1923 f->sym->ts.cl->length->value.integer) != 0))
1925 if (where && (f->sym->attr.pointer || f->sym->attr.allocatable))
1926 gfc_warning ("Character length mismatch (%ld/%ld) between actual "
1927 "argument and pointer or allocatable dummy argument "
1928 "'%s' at %L",
1929 mpz_get_si (a->expr->ts.cl->length->value.integer),
1930 mpz_get_si (f->sym->ts.cl->length->value.integer),
1931 f->sym->name, &a->expr->where);
1932 else if (where)
1933 gfc_warning ("Character length mismatch (%ld/%ld) between actual "
1934 "argument and assumed-shape dummy argument '%s' "
1935 "at %L",
1936 mpz_get_si (a->expr->ts.cl->length->value.integer),
1937 mpz_get_si (f->sym->ts.cl->length->value.integer),
1938 f->sym->name, &a->expr->where);
1939 return 0;
1942 actual_size = get_expr_storage_size (a->expr);
1943 formal_size = get_sym_storage_size (f->sym);
1944 if (actual_size != 0
1945 && actual_size < formal_size
1946 && a->expr->ts.type != BT_PROCEDURE)
1948 if (a->expr->ts.type == BT_CHARACTER && !f->sym->as && where)
1949 gfc_warning ("Character length of actual argument shorter "
1950 "than of dummy argument '%s' (%lu/%lu) at %L",
1951 f->sym->name, actual_size, formal_size,
1952 &a->expr->where);
1953 else if (where)
1954 gfc_warning ("Actual argument contains too few "
1955 "elements for dummy argument '%s' (%lu/%lu) at %L",
1956 f->sym->name, actual_size, formal_size,
1957 &a->expr->where);
1958 return 0;
1961 /* Satisfy 12.4.1.3 by ensuring that a procedure pointer actual argument
1962 is provided for a procedure pointer formal argument. */
1963 if (f->sym->attr.proc_pointer
1964 && !a->expr->symtree->n.sym->attr.proc_pointer)
1966 if (where)
1967 gfc_error ("Expected a procedure pointer for argument '%s' at %L",
1968 f->sym->name, &a->expr->where);
1969 return 0;
1972 /* Satisfy 12.4.1.2 by ensuring that a procedure actual argument is
1973 provided for a procedure formal argument. */
1974 if (a->expr->ts.type != BT_PROCEDURE
1975 && a->expr->expr_type == EXPR_VARIABLE
1976 && f->sym->attr.flavor == FL_PROCEDURE)
1978 if (where)
1979 gfc_error ("Expected a procedure for argument '%s' at %L",
1980 f->sym->name, &a->expr->where);
1981 return 0;
1984 if (f->sym->attr.flavor == FL_PROCEDURE && f->sym->attr.pure
1985 && a->expr->ts.type == BT_PROCEDURE
1986 && !a->expr->symtree->n.sym->attr.pure)
1988 if (where)
1989 gfc_error ("Expected a PURE procedure for argument '%s' at %L",
1990 f->sym->name, &a->expr->where);
1991 return 0;
1994 if (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE
1995 && a->expr->expr_type == EXPR_VARIABLE
1996 && a->expr->symtree->n.sym->as
1997 && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SIZE
1998 && (a->expr->ref == NULL
1999 || (a->expr->ref->type == REF_ARRAY
2000 && a->expr->ref->u.ar.type == AR_FULL)))
2002 if (where)
2003 gfc_error ("Actual argument for '%s' cannot be an assumed-size"
2004 " array at %L", f->sym->name, where);
2005 return 0;
2008 if (a->expr->expr_type != EXPR_NULL
2009 && compare_pointer (f->sym, a->expr) == 0)
2011 if (where)
2012 gfc_error ("Actual argument for '%s' must be a pointer at %L",
2013 f->sym->name, &a->expr->where);
2014 return 0;
2017 if (a->expr->expr_type != EXPR_NULL
2018 && compare_allocatable (f->sym, a->expr) == 0)
2020 if (where)
2021 gfc_error ("Actual argument for '%s' must be ALLOCATABLE at %L",
2022 f->sym->name, &a->expr->where);
2023 return 0;
2026 /* Check intent = OUT/INOUT for definable actual argument. */
2027 if ((a->expr->expr_type != EXPR_VARIABLE
2028 || (a->expr->symtree->n.sym->attr.flavor != FL_VARIABLE
2029 && a->expr->symtree->n.sym->attr.flavor != FL_PROCEDURE))
2030 && (f->sym->attr.intent == INTENT_OUT
2031 || f->sym->attr.intent == INTENT_INOUT))
2033 if (where)
2034 gfc_error ("Actual argument at %L must be definable as "
2035 "the dummy argument '%s' is INTENT = OUT/INOUT",
2036 &a->expr->where, f->sym->name);
2037 return 0;
2040 if (!compare_parameter_protected(f->sym, a->expr))
2042 if (where)
2043 gfc_error ("Actual argument at %L is use-associated with "
2044 "PROTECTED attribute and dummy argument '%s' is "
2045 "INTENT = OUT/INOUT",
2046 &a->expr->where,f->sym->name);
2047 return 0;
2050 if ((f->sym->attr.intent == INTENT_OUT
2051 || f->sym->attr.intent == INTENT_INOUT
2052 || f->sym->attr.volatile_)
2053 && has_vector_subscript (a->expr))
2055 if (where)
2056 gfc_error ("Array-section actual argument with vector subscripts "
2057 "at %L is incompatible with INTENT(OUT), INTENT(INOUT) "
2058 "or VOLATILE attribute of the dummy argument '%s'",
2059 &a->expr->where, f->sym->name);
2060 return 0;
2063 /* C1232 (R1221) For an actual argument which is an array section or
2064 an assumed-shape array, the dummy argument shall be an assumed-
2065 shape array, if the dummy argument has the VOLATILE attribute. */
2067 if (f->sym->attr.volatile_
2068 && a->expr->symtree->n.sym->as
2069 && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
2070 && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2072 if (where)
2073 gfc_error ("Assumed-shape actual argument at %L is "
2074 "incompatible with the non-assumed-shape "
2075 "dummy argument '%s' due to VOLATILE attribute",
2076 &a->expr->where,f->sym->name);
2077 return 0;
2080 if (f->sym->attr.volatile_
2081 && a->expr->ref && a->expr->ref->u.ar.type == AR_SECTION
2082 && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2084 if (where)
2085 gfc_error ("Array-section actual argument at %L is "
2086 "incompatible with the non-assumed-shape "
2087 "dummy argument '%s' due to VOLATILE attribute",
2088 &a->expr->where,f->sym->name);
2089 return 0;
2092 /* C1233 (R1221) For an actual argument which is a pointer array, the
2093 dummy argument shall be an assumed-shape or pointer array, if the
2094 dummy argument has the VOLATILE attribute. */
2096 if (f->sym->attr.volatile_
2097 && a->expr->symtree->n.sym->attr.pointer
2098 && a->expr->symtree->n.sym->as
2099 && !(f->sym->as
2100 && (f->sym->as->type == AS_ASSUMED_SHAPE
2101 || f->sym->attr.pointer)))
2103 if (where)
2104 gfc_error ("Pointer-array actual argument at %L requires "
2105 "an assumed-shape or pointer-array dummy "
2106 "argument '%s' due to VOLATILE attribute",
2107 &a->expr->where,f->sym->name);
2108 return 0;
2111 match:
2112 if (a == actual)
2113 na = i;
2115 new_arg[i++] = a;
2118 /* Make sure missing actual arguments are optional. */
2119 i = 0;
2120 for (f = formal; f; f = f->next, i++)
2122 if (new_arg[i] != NULL)
2123 continue;
2124 if (f->sym == NULL)
2126 if (where)
2127 gfc_error ("Missing alternate return spec in subroutine call "
2128 "at %L", where);
2129 return 0;
2131 if (!f->sym->attr.optional)
2133 if (where)
2134 gfc_error ("Missing actual argument for argument '%s' at %L",
2135 f->sym->name, where);
2136 return 0;
2140 /* The argument lists are compatible. We now relink a new actual
2141 argument list with null arguments in the right places. The head
2142 of the list remains the head. */
2143 for (i = 0; i < n; i++)
2144 if (new_arg[i] == NULL)
2145 new_arg[i] = gfc_get_actual_arglist ();
2147 if (na != 0)
2149 temp = *new_arg[0];
2150 *new_arg[0] = *actual;
2151 *actual = temp;
2153 a = new_arg[0];
2154 new_arg[0] = new_arg[na];
2155 new_arg[na] = a;
2158 for (i = 0; i < n - 1; i++)
2159 new_arg[i]->next = new_arg[i + 1];
2161 new_arg[i]->next = NULL;
2163 if (*ap == NULL && n > 0)
2164 *ap = new_arg[0];
2166 /* Note the types of omitted optional arguments. */
2167 for (a = *ap, f = formal; a; a = a->next, f = f->next)
2168 if (a->expr == NULL && a->label == NULL)
2169 a->missing_arg_type = f->sym->ts.type;
2171 return 1;
2175 typedef struct
2177 gfc_formal_arglist *f;
2178 gfc_actual_arglist *a;
2180 argpair;
2182 /* qsort comparison function for argument pairs, with the following
2183 order:
2184 - p->a->expr == NULL
2185 - p->a->expr->expr_type != EXPR_VARIABLE
2186 - growing p->a->expr->symbol. */
2188 static int
2189 pair_cmp (const void *p1, const void *p2)
2191 const gfc_actual_arglist *a1, *a2;
2193 /* *p1 and *p2 are elements of the to-be-sorted array. */
2194 a1 = ((const argpair *) p1)->a;
2195 a2 = ((const argpair *) p2)->a;
2196 if (!a1->expr)
2198 if (!a2->expr)
2199 return 0;
2200 return -1;
2202 if (!a2->expr)
2203 return 1;
2204 if (a1->expr->expr_type != EXPR_VARIABLE)
2206 if (a2->expr->expr_type != EXPR_VARIABLE)
2207 return 0;
2208 return -1;
2210 if (a2->expr->expr_type != EXPR_VARIABLE)
2211 return 1;
2212 return a1->expr->symtree->n.sym < a2->expr->symtree->n.sym;
2216 /* Given two expressions from some actual arguments, test whether they
2217 refer to the same expression. The analysis is conservative.
2218 Returning FAILURE will produce no warning. */
2220 static gfc_try
2221 compare_actual_expr (gfc_expr *e1, gfc_expr *e2)
2223 const gfc_ref *r1, *r2;
2225 if (!e1 || !e2
2226 || e1->expr_type != EXPR_VARIABLE
2227 || e2->expr_type != EXPR_VARIABLE
2228 || e1->symtree->n.sym != e2->symtree->n.sym)
2229 return FAILURE;
2231 /* TODO: improve comparison, see expr.c:show_ref(). */
2232 for (r1 = e1->ref, r2 = e2->ref; r1 && r2; r1 = r1->next, r2 = r2->next)
2234 if (r1->type != r2->type)
2235 return FAILURE;
2236 switch (r1->type)
2238 case REF_ARRAY:
2239 if (r1->u.ar.type != r2->u.ar.type)
2240 return FAILURE;
2241 /* TODO: At the moment, consider only full arrays;
2242 we could do better. */
2243 if (r1->u.ar.type != AR_FULL || r2->u.ar.type != AR_FULL)
2244 return FAILURE;
2245 break;
2247 case REF_COMPONENT:
2248 if (r1->u.c.component != r2->u.c.component)
2249 return FAILURE;
2250 break;
2252 case REF_SUBSTRING:
2253 return FAILURE;
2255 default:
2256 gfc_internal_error ("compare_actual_expr(): Bad component code");
2259 if (!r1 && !r2)
2260 return SUCCESS;
2261 return FAILURE;
2265 /* Given formal and actual argument lists that correspond to one
2266 another, check that identical actual arguments aren't not
2267 associated with some incompatible INTENTs. */
2269 static gfc_try
2270 check_some_aliasing (gfc_formal_arglist *f, gfc_actual_arglist *a)
2272 sym_intent f1_intent, f2_intent;
2273 gfc_formal_arglist *f1;
2274 gfc_actual_arglist *a1;
2275 size_t n, i, j;
2276 argpair *p;
2277 gfc_try t = SUCCESS;
2279 n = 0;
2280 for (f1 = f, a1 = a;; f1 = f1->next, a1 = a1->next)
2282 if (f1 == NULL && a1 == NULL)
2283 break;
2284 if (f1 == NULL || a1 == NULL)
2285 gfc_internal_error ("check_some_aliasing(): List mismatch");
2286 n++;
2288 if (n == 0)
2289 return t;
2290 p = (argpair *) alloca (n * sizeof (argpair));
2292 for (i = 0, f1 = f, a1 = a; i < n; i++, f1 = f1->next, a1 = a1->next)
2294 p[i].f = f1;
2295 p[i].a = a1;
2298 qsort (p, n, sizeof (argpair), pair_cmp);
2300 for (i = 0; i < n; i++)
2302 if (!p[i].a->expr
2303 || p[i].a->expr->expr_type != EXPR_VARIABLE
2304 || p[i].a->expr->ts.type == BT_PROCEDURE)
2305 continue;
2306 f1_intent = p[i].f->sym->attr.intent;
2307 for (j = i + 1; j < n; j++)
2309 /* Expected order after the sort. */
2310 if (!p[j].a->expr || p[j].a->expr->expr_type != EXPR_VARIABLE)
2311 gfc_internal_error ("check_some_aliasing(): corrupted data");
2313 /* Are the expression the same? */
2314 if (compare_actual_expr (p[i].a->expr, p[j].a->expr) == FAILURE)
2315 break;
2316 f2_intent = p[j].f->sym->attr.intent;
2317 if ((f1_intent == INTENT_IN && f2_intent == INTENT_OUT)
2318 || (f1_intent == INTENT_OUT && f2_intent == INTENT_IN))
2320 gfc_warning ("Same actual argument associated with INTENT(%s) "
2321 "argument '%s' and INTENT(%s) argument '%s' at %L",
2322 gfc_intent_string (f1_intent), p[i].f->sym->name,
2323 gfc_intent_string (f2_intent), p[j].f->sym->name,
2324 &p[i].a->expr->where);
2325 t = FAILURE;
2330 return t;
2334 /* Given a symbol of a formal argument list and an expression,
2335 return nonzero if their intents are compatible, zero otherwise. */
2337 static int
2338 compare_parameter_intent (gfc_symbol *formal, gfc_expr *actual)
2340 if (actual->symtree->n.sym->attr.pointer && !formal->attr.pointer)
2341 return 1;
2343 if (actual->symtree->n.sym->attr.intent != INTENT_IN)
2344 return 1;
2346 if (formal->attr.intent == INTENT_INOUT || formal->attr.intent == INTENT_OUT)
2347 return 0;
2349 return 1;
2353 /* Given formal and actual argument lists that correspond to one
2354 another, check that they are compatible in the sense that intents
2355 are not mismatched. */
2357 static gfc_try
2358 check_intents (gfc_formal_arglist *f, gfc_actual_arglist *a)
2360 sym_intent f_intent;
2362 for (;; f = f->next, a = a->next)
2364 if (f == NULL && a == NULL)
2365 break;
2366 if (f == NULL || a == NULL)
2367 gfc_internal_error ("check_intents(): List mismatch");
2369 if (a->expr == NULL || a->expr->expr_type != EXPR_VARIABLE)
2370 continue;
2372 f_intent = f->sym->attr.intent;
2374 if (!compare_parameter_intent(f->sym, a->expr))
2376 gfc_error ("Procedure argument at %L is INTENT(IN) while interface "
2377 "specifies INTENT(%s)", &a->expr->where,
2378 gfc_intent_string (f_intent));
2379 return FAILURE;
2382 if (gfc_pure (NULL) && gfc_impure_variable (a->expr->symtree->n.sym))
2384 if (f_intent == INTENT_INOUT || f_intent == INTENT_OUT)
2386 gfc_error ("Procedure argument at %L is local to a PURE "
2387 "procedure and is passed to an INTENT(%s) argument",
2388 &a->expr->where, gfc_intent_string (f_intent));
2389 return FAILURE;
2392 if (f->sym->attr.pointer)
2394 gfc_error ("Procedure argument at %L is local to a PURE "
2395 "procedure and has the POINTER attribute",
2396 &a->expr->where);
2397 return FAILURE;
2402 return SUCCESS;
2406 /* Check how a procedure is used against its interface. If all goes
2407 well, the actual argument list will also end up being properly
2408 sorted. */
2410 void
2411 gfc_procedure_use (gfc_symbol *sym, gfc_actual_arglist **ap, locus *where)
2414 /* Warn about calls with an implicit interface. */
2415 if (gfc_option.warn_implicit_interface
2416 && sym->attr.if_source == IFSRC_UNKNOWN)
2417 gfc_warning ("Procedure '%s' called with an implicit interface at %L",
2418 sym->name, where);
2420 if (sym->ts.interface && sym->ts.interface->attr.intrinsic)
2422 gfc_intrinsic_sym *isym;
2423 isym = gfc_find_function (sym->ts.interface->name);
2424 if (isym != NULL)
2426 if (compare_actual_formal_intr (ap, sym->ts.interface))
2427 return;
2428 gfc_error ("Type/rank mismatch in argument '%s' at %L",
2429 sym->name, where);
2430 return;
2434 if (sym->attr.if_source == IFSRC_UNKNOWN)
2436 gfc_actual_arglist *a;
2437 for (a = *ap; a; a = a->next)
2439 /* Skip g77 keyword extensions like %VAL, %REF, %LOC. */
2440 if (a->name != NULL && a->name[0] != '%')
2442 gfc_error("Keyword argument requires explicit interface "
2443 "for procedure '%s' at %L", sym->name, &a->expr->where);
2444 break;
2448 return;
2451 if (!compare_actual_formal (ap, sym->formal, 0, sym->attr.elemental, where))
2452 return;
2454 check_intents (sym->formal, *ap);
2455 if (gfc_option.warn_aliasing)
2456 check_some_aliasing (sym->formal, *ap);
2460 /* Try if an actual argument list matches the formal list of a symbol,
2461 respecting the symbol's attributes like ELEMENTAL. This is used for
2462 GENERIC resolution. */
2464 bool
2465 gfc_arglist_matches_symbol (gfc_actual_arglist** args, gfc_symbol* sym)
2467 bool r;
2469 gcc_assert (sym->attr.flavor == FL_PROCEDURE);
2471 r = !sym->attr.elemental;
2472 if (compare_actual_formal (args, sym->formal, r, !r, NULL))
2474 check_intents (sym->formal, *args);
2475 if (gfc_option.warn_aliasing)
2476 check_some_aliasing (sym->formal, *args);
2477 return true;
2480 return false;
2484 /* Given an interface pointer and an actual argument list, search for
2485 a formal argument list that matches the actual. If found, returns
2486 a pointer to the symbol of the correct interface. Returns NULL if
2487 not found. */
2489 gfc_symbol *
2490 gfc_search_interface (gfc_interface *intr, int sub_flag,
2491 gfc_actual_arglist **ap)
2493 for (; intr; intr = intr->next)
2495 if (sub_flag && intr->sym->attr.function)
2496 continue;
2497 if (!sub_flag && intr->sym->attr.subroutine)
2498 continue;
2500 if (gfc_arglist_matches_symbol (ap, intr->sym))
2501 return intr->sym;
2504 return NULL;
2508 /* Do a brute force recursive search for a symbol. */
2510 static gfc_symtree *
2511 find_symtree0 (gfc_symtree *root, gfc_symbol *sym)
2513 gfc_symtree * st;
2515 if (root->n.sym == sym)
2516 return root;
2518 st = NULL;
2519 if (root->left)
2520 st = find_symtree0 (root->left, sym);
2521 if (root->right && ! st)
2522 st = find_symtree0 (root->right, sym);
2523 return st;
2527 /* Find a symtree for a symbol. */
2529 gfc_symtree *
2530 gfc_find_sym_in_symtree (gfc_symbol *sym)
2532 gfc_symtree *st;
2533 gfc_namespace *ns;
2535 /* First try to find it by name. */
2536 gfc_find_sym_tree (sym->name, gfc_current_ns, 1, &st);
2537 if (st && st->n.sym == sym)
2538 return st;
2540 /* If it's been renamed, resort to a brute-force search. */
2541 /* TODO: avoid having to do this search. If the symbol doesn't exist
2542 in the symtree for the current namespace, it should probably be added. */
2543 for (ns = gfc_current_ns; ns; ns = ns->parent)
2545 st = find_symtree0 (ns->sym_root, sym);
2546 if (st)
2547 return st;
2549 gfc_internal_error ("Unable to find symbol %s", sym->name);
2550 /* Not reached. */
2554 /* This subroutine is called when an expression is being resolved.
2555 The expression node in question is either a user defined operator
2556 or an intrinsic operator with arguments that aren't compatible
2557 with the operator. This subroutine builds an actual argument list
2558 corresponding to the operands, then searches for a compatible
2559 interface. If one is found, the expression node is replaced with
2560 the appropriate function call. */
2562 gfc_try
2563 gfc_extend_expr (gfc_expr *e)
2565 gfc_actual_arglist *actual;
2566 gfc_symbol *sym;
2567 gfc_namespace *ns;
2568 gfc_user_op *uop;
2569 gfc_intrinsic_op i;
2571 sym = NULL;
2573 actual = gfc_get_actual_arglist ();
2574 actual->expr = e->value.op.op1;
2576 if (e->value.op.op2 != NULL)
2578 actual->next = gfc_get_actual_arglist ();
2579 actual->next->expr = e->value.op.op2;
2582 i = fold_unary (e->value.op.op);
2584 if (i == INTRINSIC_USER)
2586 for (ns = gfc_current_ns; ns; ns = ns->parent)
2588 uop = gfc_find_uop (e->value.op.uop->name, ns);
2589 if (uop == NULL)
2590 continue;
2592 sym = gfc_search_interface (uop->op, 0, &actual);
2593 if (sym != NULL)
2594 break;
2597 else
2599 for (ns = gfc_current_ns; ns; ns = ns->parent)
2601 /* Due to the distinction between '==' and '.eq.' and friends, one has
2602 to check if either is defined. */
2603 switch (i)
2605 case INTRINSIC_EQ:
2606 case INTRINSIC_EQ_OS:
2607 sym = gfc_search_interface (ns->op[INTRINSIC_EQ], 0, &actual);
2608 if (sym == NULL)
2609 sym = gfc_search_interface (ns->op[INTRINSIC_EQ_OS], 0, &actual);
2610 break;
2612 case INTRINSIC_NE:
2613 case INTRINSIC_NE_OS:
2614 sym = gfc_search_interface (ns->op[INTRINSIC_NE], 0, &actual);
2615 if (sym == NULL)
2616 sym = gfc_search_interface (ns->op[INTRINSIC_NE_OS], 0, &actual);
2617 break;
2619 case INTRINSIC_GT:
2620 case INTRINSIC_GT_OS:
2621 sym = gfc_search_interface (ns->op[INTRINSIC_GT], 0, &actual);
2622 if (sym == NULL)
2623 sym = gfc_search_interface (ns->op[INTRINSIC_GT_OS], 0, &actual);
2624 break;
2626 case INTRINSIC_GE:
2627 case INTRINSIC_GE_OS:
2628 sym = gfc_search_interface (ns->op[INTRINSIC_GE], 0, &actual);
2629 if (sym == NULL)
2630 sym = gfc_search_interface (ns->op[INTRINSIC_GE_OS], 0, &actual);
2631 break;
2633 case INTRINSIC_LT:
2634 case INTRINSIC_LT_OS:
2635 sym = gfc_search_interface (ns->op[INTRINSIC_LT], 0, &actual);
2636 if (sym == NULL)
2637 sym = gfc_search_interface (ns->op[INTRINSIC_LT_OS], 0, &actual);
2638 break;
2640 case INTRINSIC_LE:
2641 case INTRINSIC_LE_OS:
2642 sym = gfc_search_interface (ns->op[INTRINSIC_LE], 0, &actual);
2643 if (sym == NULL)
2644 sym = gfc_search_interface (ns->op[INTRINSIC_LE_OS], 0, &actual);
2645 break;
2647 default:
2648 sym = gfc_search_interface (ns->op[i], 0, &actual);
2651 if (sym != NULL)
2652 break;
2656 if (sym == NULL)
2658 /* Don't use gfc_free_actual_arglist(). */
2659 if (actual->next != NULL)
2660 gfc_free (actual->next);
2661 gfc_free (actual);
2663 return FAILURE;
2666 /* Change the expression node to a function call. */
2667 e->expr_type = EXPR_FUNCTION;
2668 e->symtree = gfc_find_sym_in_symtree (sym);
2669 e->value.function.actual = actual;
2670 e->value.function.esym = NULL;
2671 e->value.function.isym = NULL;
2672 e->value.function.name = NULL;
2673 e->user_operator = 1;
2675 if (gfc_pure (NULL) && !gfc_pure (sym))
2677 gfc_error ("Function '%s' called in lieu of an operator at %L must "
2678 "be PURE", sym->name, &e->where);
2679 return FAILURE;
2682 if (gfc_resolve_expr (e) == FAILURE)
2683 return FAILURE;
2685 return SUCCESS;
2689 /* Tries to replace an assignment code node with a subroutine call to
2690 the subroutine associated with the assignment operator. Return
2691 SUCCESS if the node was replaced. On FAILURE, no error is
2692 generated. */
2694 gfc_try
2695 gfc_extend_assign (gfc_code *c, gfc_namespace *ns)
2697 gfc_actual_arglist *actual;
2698 gfc_expr *lhs, *rhs;
2699 gfc_symbol *sym;
2701 lhs = c->expr;
2702 rhs = c->expr2;
2704 /* Don't allow an intrinsic assignment to be replaced. */
2705 if (lhs->ts.type != BT_DERIVED
2706 && (rhs->rank == 0 || rhs->rank == lhs->rank)
2707 && (lhs->ts.type == rhs->ts.type
2708 || (gfc_numeric_ts (&lhs->ts) && gfc_numeric_ts (&rhs->ts))))
2709 return FAILURE;
2711 actual = gfc_get_actual_arglist ();
2712 actual->expr = lhs;
2714 actual->next = gfc_get_actual_arglist ();
2715 actual->next->expr = rhs;
2717 sym = NULL;
2719 for (; ns; ns = ns->parent)
2721 sym = gfc_search_interface (ns->op[INTRINSIC_ASSIGN], 1, &actual);
2722 if (sym != NULL)
2723 break;
2726 if (sym == NULL)
2728 gfc_free (actual->next);
2729 gfc_free (actual);
2730 return FAILURE;
2733 /* Replace the assignment with the call. */
2734 c->op = EXEC_ASSIGN_CALL;
2735 c->symtree = gfc_find_sym_in_symtree (sym);
2736 c->expr = NULL;
2737 c->expr2 = NULL;
2738 c->ext.actual = actual;
2740 return SUCCESS;
2744 /* Make sure that the interface just parsed is not already present in
2745 the given interface list. Ambiguity isn't checked yet since module
2746 procedures can be present without interfaces. */
2748 static gfc_try
2749 check_new_interface (gfc_interface *base, gfc_symbol *new_sym)
2751 gfc_interface *ip;
2753 for (ip = base; ip; ip = ip->next)
2755 if (ip->sym == new_sym)
2757 gfc_error ("Entity '%s' at %C is already present in the interface",
2758 new_sym->name);
2759 return FAILURE;
2763 return SUCCESS;
2767 /* Add a symbol to the current interface. */
2769 gfc_try
2770 gfc_add_interface (gfc_symbol *new_sym)
2772 gfc_interface **head, *intr;
2773 gfc_namespace *ns;
2774 gfc_symbol *sym;
2776 switch (current_interface.type)
2778 case INTERFACE_NAMELESS:
2779 case INTERFACE_ABSTRACT:
2780 return SUCCESS;
2782 case INTERFACE_INTRINSIC_OP:
2783 for (ns = current_interface.ns; ns; ns = ns->parent)
2784 switch (current_interface.op)
2786 case INTRINSIC_EQ:
2787 case INTRINSIC_EQ_OS:
2788 if (check_new_interface (ns->op[INTRINSIC_EQ], new_sym) == FAILURE ||
2789 check_new_interface (ns->op[INTRINSIC_EQ_OS], new_sym) == FAILURE)
2790 return FAILURE;
2791 break;
2793 case INTRINSIC_NE:
2794 case INTRINSIC_NE_OS:
2795 if (check_new_interface (ns->op[INTRINSIC_NE], new_sym) == FAILURE ||
2796 check_new_interface (ns->op[INTRINSIC_NE_OS], new_sym) == FAILURE)
2797 return FAILURE;
2798 break;
2800 case INTRINSIC_GT:
2801 case INTRINSIC_GT_OS:
2802 if (check_new_interface (ns->op[INTRINSIC_GT], new_sym) == FAILURE ||
2803 check_new_interface (ns->op[INTRINSIC_GT_OS], new_sym) == FAILURE)
2804 return FAILURE;
2805 break;
2807 case INTRINSIC_GE:
2808 case INTRINSIC_GE_OS:
2809 if (check_new_interface (ns->op[INTRINSIC_GE], new_sym) == FAILURE ||
2810 check_new_interface (ns->op[INTRINSIC_GE_OS], new_sym) == FAILURE)
2811 return FAILURE;
2812 break;
2814 case INTRINSIC_LT:
2815 case INTRINSIC_LT_OS:
2816 if (check_new_interface (ns->op[INTRINSIC_LT], new_sym) == FAILURE ||
2817 check_new_interface (ns->op[INTRINSIC_LT_OS], new_sym) == FAILURE)
2818 return FAILURE;
2819 break;
2821 case INTRINSIC_LE:
2822 case INTRINSIC_LE_OS:
2823 if (check_new_interface (ns->op[INTRINSIC_LE], new_sym) == FAILURE ||
2824 check_new_interface (ns->op[INTRINSIC_LE_OS], new_sym) == FAILURE)
2825 return FAILURE;
2826 break;
2828 default:
2829 if (check_new_interface (ns->op[current_interface.op], new_sym) == FAILURE)
2830 return FAILURE;
2833 head = &current_interface.ns->op[current_interface.op];
2834 break;
2836 case INTERFACE_GENERIC:
2837 for (ns = current_interface.ns; ns; ns = ns->parent)
2839 gfc_find_symbol (current_interface.sym->name, ns, 0, &sym);
2840 if (sym == NULL)
2841 continue;
2843 if (check_new_interface (sym->generic, new_sym) == FAILURE)
2844 return FAILURE;
2847 head = &current_interface.sym->generic;
2848 break;
2850 case INTERFACE_USER_OP:
2851 if (check_new_interface (current_interface.uop->op, new_sym)
2852 == FAILURE)
2853 return FAILURE;
2855 head = &current_interface.uop->op;
2856 break;
2858 default:
2859 gfc_internal_error ("gfc_add_interface(): Bad interface type");
2862 intr = gfc_get_interface ();
2863 intr->sym = new_sym;
2864 intr->where = gfc_current_locus;
2866 intr->next = *head;
2867 *head = intr;
2869 return SUCCESS;
2873 gfc_interface *
2874 gfc_current_interface_head (void)
2876 switch (current_interface.type)
2878 case INTERFACE_INTRINSIC_OP:
2879 return current_interface.ns->op[current_interface.op];
2880 break;
2882 case INTERFACE_GENERIC:
2883 return current_interface.sym->generic;
2884 break;
2886 case INTERFACE_USER_OP:
2887 return current_interface.uop->op;
2888 break;
2890 default:
2891 gcc_unreachable ();
2896 void
2897 gfc_set_current_interface_head (gfc_interface *i)
2899 switch (current_interface.type)
2901 case INTERFACE_INTRINSIC_OP:
2902 current_interface.ns->op[current_interface.op] = i;
2903 break;
2905 case INTERFACE_GENERIC:
2906 current_interface.sym->generic = i;
2907 break;
2909 case INTERFACE_USER_OP:
2910 current_interface.uop->op = i;
2911 break;
2913 default:
2914 gcc_unreachable ();
2919 /* Gets rid of a formal argument list. We do not free symbols.
2920 Symbols are freed when a namespace is freed. */
2922 void
2923 gfc_free_formal_arglist (gfc_formal_arglist *p)
2925 gfc_formal_arglist *q;
2927 for (; p; p = q)
2929 q = p->next;
2930 gfc_free (p);