]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/fortran/interface.c
tree-ssa-ccp.c (maybe_fold_offset_to_array_ref): Use type of offset to build the...
[thirdparty/gcc.git] / gcc / fortran / interface.c
CommitLineData
6de9cd9a 1/* Deal with interfaces.
bc0a33d3
TS
2 Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006 Free Software
3 Foundation, Inc.
6de9cd9a
DN
4 Contributed by Andy Vaught
5
9fc4d79b 6This file is part of GCC.
6de9cd9a 7
9fc4d79b
TS
8GCC is free software; you can redistribute it and/or modify it under
9the terms of the GNU General Public License as published by the Free
10Software Foundation; either version 2, or (at your option) any later
11version.
6de9cd9a 12
9fc4d79b
TS
13GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14WARRANTY; without even the implied warranty of MERCHANTABILITY or
15FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16for more details.
6de9cd9a
DN
17
18You should have received a copy of the GNU General Public License
9fc4d79b 19along with GCC; see the file COPYING. If not, write to the Free
ab57747b
KC
20Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
2102110-1301, USA. */
6de9cd9a
DN
22
23
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.
29
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.
34
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
37 own head pointer.
38
39 Nameless interfaces:
40 Nameless interfaces create symbols with explicit interfaces within
41 the current namespace. They are otherwise unlinked.
42
43 Generic interfaces:
44 The generic name points to a linked list of symbols. Each symbol
6892757c 45 has an explicit interface. Each explicit interface has its own
6de9cd9a
DN
46 namespace containing the arguments. Module procedures are symbols in
47 which the interface is added later when the module procedure is parsed.
48
49 User operators:
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.
53
54 Extended intrinsics and assignment:
55 The head of these interface lists are stored in the containing namespace.
56
57 Implicit interfaces:
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.
61
62
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. */
67
68#include "config.h"
d22e4895 69#include "system.h"
6de9cd9a
DN
70#include "gfortran.h"
71#include "match.h"
72
73
74/* The current_interface structure holds information about the
75 interface currently being parsed. This structure is saved and
76 restored during recursive interfaces. */
77
78gfc_interface_info current_interface;
79
80
81/* Free a singly linked list of gfc_interface structures. */
82
83void
84gfc_free_interface (gfc_interface * intr)
85{
86 gfc_interface *next;
87
88 for (; intr; intr = next)
89 {
90 next = intr->next;
91 gfc_free (intr);
92 }
93}
94
95
96/* Change the operators unary plus and minus into binary plus and
97 minus respectively, leaving the rest unchanged. */
98
99static gfc_intrinsic_op
100fold_unary (gfc_intrinsic_op operator)
101{
102
103 switch (operator)
104 {
105 case INTRINSIC_UPLUS:
106 operator = INTRINSIC_PLUS;
107 break;
108 case INTRINSIC_UMINUS:
109 operator = INTRINSIC_MINUS;
110 break;
111 default:
112 break;
113 }
114
115 return operator;
116}
117
118
119/* Match a generic specification. Depending on which type of
120 interface is found, the 'name' or 'operator' pointers may be set.
121 This subroutine doesn't return MATCH_NO. */
122
123match
124gfc_match_generic_spec (interface_type * type,
125 char *name,
126 gfc_intrinsic_op *operator)
127{
128 char buffer[GFC_MAX_SYMBOL_LEN + 1];
129 match m;
130 gfc_intrinsic_op i;
131
132 if (gfc_match (" assignment ( = )") == MATCH_YES)
133 {
134 *type = INTERFACE_INTRINSIC_OP;
135 *operator = INTRINSIC_ASSIGN;
136 return MATCH_YES;
137 }
138
139 if (gfc_match (" operator ( %o )", &i) == MATCH_YES)
140 { /* Operator i/f */
141 *type = INTERFACE_INTRINSIC_OP;
142 *operator = fold_unary (i);
143 return MATCH_YES;
144 }
145
146 if (gfc_match (" operator ( ") == MATCH_YES)
147 {
148 m = gfc_match_defined_op_name (buffer, 1);
149 if (m == MATCH_NO)
150 goto syntax;
151 if (m != MATCH_YES)
152 return MATCH_ERROR;
153
154 m = gfc_match_char (')');
155 if (m == MATCH_NO)
156 goto syntax;
157 if (m != MATCH_YES)
158 return MATCH_ERROR;
159
160 strcpy (name, buffer);
161 *type = INTERFACE_USER_OP;
162 return MATCH_YES;
163 }
164
165 if (gfc_match_name (buffer) == MATCH_YES)
166 {
167 strcpy (name, buffer);
168 *type = INTERFACE_GENERIC;
169 return MATCH_YES;
170 }
171
172 *type = INTERFACE_NAMELESS;
173 return MATCH_YES;
174
175syntax:
176 gfc_error ("Syntax error in generic specification at %C");
177 return MATCH_ERROR;
178}
179
180
181/* Match one of the five forms of an interface statement. */
182
183match
184gfc_match_interface (void)
185{
186 char name[GFC_MAX_SYMBOL_LEN + 1];
187 interface_type type;
188 gfc_symbol *sym;
189 gfc_intrinsic_op operator;
190 match m;
191
192 m = gfc_match_space ();
193
194 if (gfc_match_generic_spec (&type, name, &operator) == MATCH_ERROR)
195 return MATCH_ERROR;
196
197
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
202 && m != MATCH_YES))
203 {
204 gfc_error
205 ("Syntax error: Trailing garbage in INTERFACE statement at %C");
206 return MATCH_ERROR;
207 }
208
209 current_interface.type = type;
210
211 switch (type)
212 {
213 case INTERFACE_GENERIC:
214 if (gfc_get_symbol (name, NULL, &sym))
215 return MATCH_ERROR;
216
231b2fcc
TS
217 if (!sym->attr.generic
218 && gfc_add_generic (&sym->attr, sym->name, NULL) == FAILURE)
6de9cd9a
DN
219 return MATCH_ERROR;
220
e5d7f6f7
FXC
221 if (sym->attr.dummy)
222 {
223 gfc_error ("Dummy procedure '%s' at %C cannot have a "
224 "generic interface", sym->name);
225 return MATCH_ERROR;
226 }
227
6de9cd9a
DN
228 current_interface.sym = gfc_new_block = sym;
229 break;
230
231 case INTERFACE_USER_OP:
232 current_interface.uop = gfc_get_uop (name);
233 break;
234
235 case INTERFACE_INTRINSIC_OP:
236 current_interface.op = operator;
237 break;
238
239 case INTERFACE_NAMELESS:
240 break;
241 }
242
243 return MATCH_YES;
244}
245
246
247/* Match the different sort of generic-specs that can be present after
248 the END INTERFACE itself. */
249
250match
251gfc_match_end_interface (void)
252{
253 char name[GFC_MAX_SYMBOL_LEN + 1];
254 interface_type type;
255 gfc_intrinsic_op operator;
256 match m;
257
258 m = gfc_match_space ();
259
260 if (gfc_match_generic_spec (&type, name, &operator) == MATCH_ERROR)
261 return MATCH_ERROR;
262
263 /* If we're not looking at the end of the statement now, or if this
264 is not a nameless interface but we did not see a space, punt. */
265 if (gfc_match_eos () != MATCH_YES
266 || (type != INTERFACE_NAMELESS
267 && m != MATCH_YES))
268 {
269 gfc_error
270 ("Syntax error: Trailing garbage in END INTERFACE statement at %C");
271 return MATCH_ERROR;
272 }
273
274 m = MATCH_YES;
275
276 switch (current_interface.type)
277 {
278 case INTERFACE_NAMELESS:
279 if (type != current_interface.type)
280 {
281 gfc_error ("Expected a nameless interface at %C");
282 m = MATCH_ERROR;
283 }
284
285 break;
286
287 case INTERFACE_INTRINSIC_OP:
288 if (type != current_interface.type || operator != current_interface.op)
289 {
290
291 if (current_interface.op == INTRINSIC_ASSIGN)
292 gfc_error ("Expected 'END INTERFACE ASSIGNMENT (=)' at %C");
293 else
294 gfc_error ("Expecting 'END INTERFACE OPERATOR (%s)' at %C",
295 gfc_op2string (current_interface.op));
296
297 m = MATCH_ERROR;
298 }
299
300 break;
301
302 case INTERFACE_USER_OP:
303 /* Comparing the symbol node names is OK because only use-associated
304 symbols can be renamed. */
305 if (type != current_interface.type
9b46f94f 306 || strcmp (current_interface.uop->name, name) != 0)
6de9cd9a
DN
307 {
308 gfc_error ("Expecting 'END INTERFACE OPERATOR (.%s.)' at %C",
55898b2c 309 current_interface.uop->name);
6de9cd9a
DN
310 m = MATCH_ERROR;
311 }
312
313 break;
314
315 case INTERFACE_GENERIC:
316 if (type != current_interface.type
317 || strcmp (current_interface.sym->name, name) != 0)
318 {
319 gfc_error ("Expecting 'END INTERFACE %s' at %C",
320 current_interface.sym->name);
321 m = MATCH_ERROR;
322 }
323
324 break;
325 }
326
327 return m;
328}
329
330
e0e85e06
PT
331/* Compare two derived types using the criteria in 4.4.2 of the standard,
332 recursing through gfc_compare_types for the components. */
6de9cd9a
DN
333
334int
e0e85e06 335gfc_compare_derived_types (gfc_symbol * derived1, gfc_symbol * derived2)
6de9cd9a
DN
336{
337 gfc_component *dt1, *dt2;
338
6de9cd9a
DN
339 /* Special case for comparing derived types across namespaces. If the
340 true names and module names are the same and the module name is
341 nonnull, then they are equal. */
e0e85e06
PT
342 if (strcmp (derived1->name, derived2->name) == 0
343 && derived1 != NULL && derived2 != NULL
344 && derived1->module != NULL && derived2->module != NULL
345 && strcmp (derived1->module, derived2->module) == 0)
6de9cd9a
DN
346 return 1;
347
348 /* Compare type via the rules of the standard. Both types must have
349 the SEQUENCE attribute to be equal. */
350
e0e85e06 351 if (strcmp (derived1->name, derived2->name))
6de9cd9a
DN
352 return 0;
353
e0e85e06
PT
354 if (derived1->component_access == ACCESS_PRIVATE
355 || derived2->component_access == ACCESS_PRIVATE)
356 return 0;
6de9cd9a 357
e0e85e06 358 if (derived1->attr.sequence == 0 || derived2->attr.sequence == 0)
6de9cd9a
DN
359 return 0;
360
e0e85e06
PT
361 dt1 = derived1->components;
362 dt2 = derived2->components;
363
6de9cd9a
DN
364 /* Since subtypes of SEQUENCE types must be SEQUENCE types as well, a
365 simple test can speed things up. Otherwise, lots of things have to
366 match. */
367 for (;;)
368 {
369 if (strcmp (dt1->name, dt2->name) != 0)
370 return 0;
371
372 if (dt1->pointer != dt2->pointer)
373 return 0;
374
375 if (dt1->dimension != dt2->dimension)
376 return 0;
377
5046aff5
PT
378 if (dt1->allocatable != dt2->allocatable)
379 return 0;
380
6de9cd9a
DN
381 if (dt1->dimension && gfc_compare_array_spec (dt1->as, dt2->as) == 0)
382 return 0;
383
384 if (gfc_compare_types (&dt1->ts, &dt2->ts) == 0)
385 return 0;
386
387 dt1 = dt1->next;
388 dt2 = dt2->next;
389
390 if (dt1 == NULL && dt2 == NULL)
391 break;
392 if (dt1 == NULL || dt2 == NULL)
393 return 0;
394 }
395
396 return 1;
397}
398
e0e85e06
PT
399/* Compare two typespecs, recursively if necessary. */
400
401int
402gfc_compare_types (gfc_typespec * ts1, gfc_typespec * ts2)
403{
404
405 if (ts1->type != ts2->type)
406 return 0;
407 if (ts1->type != BT_DERIVED)
408 return (ts1->kind == ts2->kind);
409
410 /* Compare derived types. */
411 if (ts1->derived == ts2->derived)
412 return 1;
413
414 return gfc_compare_derived_types (ts1->derived ,ts2->derived);
415}
416
6de9cd9a
DN
417
418/* Given two symbols that are formal arguments, compare their ranks
419 and types. Returns nonzero if they have the same rank and type,
420 zero otherwise. */
421
422static int
423compare_type_rank (gfc_symbol * s1, gfc_symbol * s2)
424{
425 int r1, r2;
426
427 r1 = (s1->as != NULL) ? s1->as->rank : 0;
428 r2 = (s2->as != NULL) ? s2->as->rank : 0;
429
430 if (r1 != r2)
431 return 0; /* Ranks differ */
432
433 return gfc_compare_types (&s1->ts, &s2->ts);
434}
435
436
437static int compare_interfaces (gfc_symbol *, gfc_symbol *, int);
438
439/* Given two symbols that are formal arguments, compare their types
440 and rank and their formal interfaces if they are both dummy
441 procedures. Returns nonzero if the same, zero if different. */
442
443static int
444compare_type_rank_if (gfc_symbol * s1, gfc_symbol * s2)
445{
26f2ca2b
PT
446 if (s1 == NULL || s2 == NULL)
447 return s1 == s2 ? 1 : 0;
6de9cd9a
DN
448
449 if (s1->attr.flavor != FL_PROCEDURE && s2->attr.flavor != FL_PROCEDURE)
450 return compare_type_rank (s1, s2);
451
452 if (s1->attr.flavor != FL_PROCEDURE || s2->attr.flavor != FL_PROCEDURE)
453 return 0;
454
455 /* At this point, both symbols are procedures. */
456 if ((s1->attr.function == 0 && s1->attr.subroutine == 0)
457 || (s2->attr.function == 0 && s2->attr.subroutine == 0))
458 return 0;
459
460 if (s1->attr.function != s2->attr.function
461 || s1->attr.subroutine != s2->attr.subroutine)
462 return 0;
463
464 if (s1->attr.function && compare_type_rank (s1, s2) == 0)
465 return 0;
466
993ef28f
PT
467 /* Originally, gfortran recursed here to check the interfaces of passed
468 procedures. This is explicitly not required by the standard. */
469 return 1;
6de9cd9a
DN
470}
471
472
473/* Given a formal argument list and a keyword name, search the list
474 for that keyword. Returns the correct symbol node if found, NULL
475 if not found. */
476
477static gfc_symbol *
478find_keyword_arg (const char *name, gfc_formal_arglist * f)
479{
480
481 for (; f; f = f->next)
482 if (strcmp (f->sym->name, name) == 0)
483 return f->sym;
484
485 return NULL;
486}
487
488
489/******** Interface checking subroutines **********/
490
491
492/* Given an operator interface and the operator, make sure that all
493 interfaces for that operator are legal. */
494
495static void
496check_operator_interface (gfc_interface * intr, gfc_intrinsic_op operator)
497{
498 gfc_formal_arglist *formal;
499 sym_intent i1, i2;
500 gfc_symbol *sym;
501 bt t1, t2;
502 int args;
503
504 if (intr == NULL)
505 return;
506
507 args = 0;
508 t1 = t2 = BT_UNKNOWN;
509 i1 = i2 = INTENT_UNKNOWN;
510
511 for (formal = intr->sym->formal; formal; formal = formal->next)
512 {
513 sym = formal->sym;
8c086c9c
PT
514 if (sym == NULL)
515 {
516 gfc_error ("Alternate return cannot appear in operator "
517 "interface at %L", &intr->where);
518 return;
519 }
6de9cd9a
DN
520 if (args == 0)
521 {
522 t1 = sym->ts.type;
523 i1 = sym->attr.intent;
524 }
525 if (args == 1)
526 {
527 t2 = sym->ts.type;
528 i2 = sym->attr.intent;
529 }
530 args++;
531 }
532
533 if (args == 0 || args > 2)
534 goto num_args;
535
536 sym = intr->sym;
537
538 if (operator == INTRINSIC_ASSIGN)
539 {
540 if (!sym->attr.subroutine)
541 {
542 gfc_error
543 ("Assignment operator interface at %L must be a SUBROUTINE",
544 &intr->where);
545 return;
546 }
8c086c9c
PT
547 if (args != 2)
548 {
549 gfc_error
550 ("Assignment operator interface at %L must have two arguments",
551 &intr->where);
552 return;
553 }
554 if (sym->formal->sym->ts.type != BT_DERIVED
555 && sym->formal->next->sym->ts.type != BT_DERIVED
556 && (sym->formal->sym->ts.type == sym->formal->next->sym->ts.type
557 || (gfc_numeric_ts (&sym->formal->sym->ts)
558 && gfc_numeric_ts (&sym->formal->next->sym->ts))))
559 {
560 gfc_error
561 ("Assignment operator interface at %L must not redefine "
562 "an INTRINSIC type assignment", &intr->where);
563 return;
564 }
6de9cd9a
DN
565 }
566 else
567 {
568 if (!sym->attr.function)
569 {
570 gfc_error ("Intrinsic operator interface at %L must be a FUNCTION",
571 &intr->where);
572 return;
573 }
574 }
575
576 switch (operator)
577 {
578 case INTRINSIC_PLUS: /* Numeric unary or binary */
579 case INTRINSIC_MINUS:
580 if ((args == 1)
581 && (t1 == BT_INTEGER
582 || t1 == BT_REAL
583 || t1 == BT_COMPLEX))
584 goto bad_repl;
585
586 if ((args == 2)
587 && (t1 == BT_INTEGER || t1 == BT_REAL || t1 == BT_COMPLEX)
588 && (t2 == BT_INTEGER || t2 == BT_REAL || t2 == BT_COMPLEX))
589 goto bad_repl;
590
591 break;
592
593 case INTRINSIC_POWER: /* Binary numeric */
594 case INTRINSIC_TIMES:
595 case INTRINSIC_DIVIDE:
596
597 case INTRINSIC_EQ:
598 case INTRINSIC_NE:
599 if (args == 1)
600 goto num_args;
601
602 if ((t1 == BT_INTEGER || t1 == BT_REAL || t1 == BT_COMPLEX)
603 && (t2 == BT_INTEGER || t2 == BT_REAL || t2 == BT_COMPLEX))
604 goto bad_repl;
605
606 break;
607
608 case INTRINSIC_GE: /* Binary numeric operators that do not support */
609 case INTRINSIC_LE: /* complex numbers */
610 case INTRINSIC_LT:
611 case INTRINSIC_GT:
612 if (args == 1)
613 goto num_args;
614
615 if ((t1 == BT_INTEGER || t1 == BT_REAL)
616 && (t2 == BT_INTEGER || t2 == BT_REAL))
617 goto bad_repl;
618
619 break;
620
621 case INTRINSIC_OR: /* Binary logical */
622 case INTRINSIC_AND:
623 case INTRINSIC_EQV:
624 case INTRINSIC_NEQV:
625 if (args == 1)
626 goto num_args;
627 if (t1 == BT_LOGICAL && t2 == BT_LOGICAL)
628 goto bad_repl;
629 break;
630
631 case INTRINSIC_NOT: /* Unary logical */
632 if (args != 1)
633 goto num_args;
634 if (t1 == BT_LOGICAL)
635 goto bad_repl;
636 break;
637
638 case INTRINSIC_CONCAT: /* Binary string */
639 if (args != 2)
640 goto num_args;
641 if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
642 goto bad_repl;
643 break;
644
645 case INTRINSIC_ASSIGN: /* Class by itself */
646 if (args != 2)
647 goto num_args;
648 break;
649 default:
650 gfc_internal_error ("check_operator_interface(): Bad operator");
651 }
652
653 /* Check intents on operator interfaces. */
654 if (operator == INTRINSIC_ASSIGN)
655 {
656 if (i1 != INTENT_OUT && i1 != INTENT_INOUT)
657 gfc_error ("First argument of defined assignment at %L must be "
658 "INTENT(IN) or INTENT(INOUT)", &intr->where);
659
660 if (i2 != INTENT_IN)
661 gfc_error ("Second argument of defined assignment at %L must be "
662 "INTENT(IN)", &intr->where);
663 }
664 else
665 {
666 if (i1 != INTENT_IN)
667 gfc_error ("First argument of operator interface at %L must be "
668 "INTENT(IN)", &intr->where);
669
670 if (args == 2 && i2 != INTENT_IN)
671 gfc_error ("Second argument of operator interface at %L must be "
672 "INTENT(IN)", &intr->where);
673 }
674
675 return;
676
677bad_repl:
678 gfc_error ("Operator interface at %L conflicts with intrinsic interface",
679 &intr->where);
680 return;
681
682num_args:
683 gfc_error ("Operator interface at %L has the wrong number of arguments",
684 &intr->where);
685 return;
686}
687
688
689/* Given a pair of formal argument lists, we see if the two lists can
690 be distinguished by counting the number of nonoptional arguments of
691 a given type/rank in f1 and seeing if there are less then that
692 number of those arguments in f2 (including optional arguments).
693 Since this test is asymmetric, it has to be called twice to make it
694 symmetric. Returns nonzero if the argument lists are incompatible
695 by this test. This subroutine implements rule 1 of section
696 14.1.2.3. */
697
698static int
699count_types_test (gfc_formal_arglist * f1, gfc_formal_arglist * f2)
700{
701 int rc, ac1, ac2, i, j, k, n1;
702 gfc_formal_arglist *f;
703
704 typedef struct
705 {
706 int flag;
707 gfc_symbol *sym;
708 }
709 arginfo;
710
711 arginfo *arg;
712
713 n1 = 0;
714
715 for (f = f1; f; f = f->next)
716 n1++;
717
718 /* Build an array of integers that gives the same integer to
719 arguments of the same type/rank. */
720 arg = gfc_getmem (n1 * sizeof (arginfo));
721
722 f = f1;
723 for (i = 0; i < n1; i++, f = f->next)
724 {
725 arg[i].flag = -1;
726 arg[i].sym = f->sym;
727 }
728
729 k = 0;
730
731 for (i = 0; i < n1; i++)
732 {
733 if (arg[i].flag != -1)
734 continue;
735
26f2ca2b 736 if (arg[i].sym && arg[i].sym->attr.optional)
6de9cd9a
DN
737 continue; /* Skip optional arguments */
738
739 arg[i].flag = k;
740
741 /* Find other nonoptional arguments of the same type/rank. */
742 for (j = i + 1; j < n1; j++)
26f2ca2b 743 if ((arg[j].sym == NULL || !arg[j].sym->attr.optional)
6de9cd9a
DN
744 && compare_type_rank_if (arg[i].sym, arg[j].sym))
745 arg[j].flag = k;
746
747 k++;
748 }
749
750 /* Now loop over each distinct type found in f1. */
751 k = 0;
752 rc = 0;
753
754 for (i = 0; i < n1; i++)
755 {
756 if (arg[i].flag != k)
757 continue;
758
759 ac1 = 1;
760 for (j = i + 1; j < n1; j++)
761 if (arg[j].flag == k)
762 ac1++;
763
764 /* Count the number of arguments in f2 with that type, including
f7b529fa 765 those that are optional. */
6de9cd9a
DN
766 ac2 = 0;
767
768 for (f = f2; f; f = f->next)
769 if (compare_type_rank_if (arg[i].sym, f->sym))
770 ac2++;
771
772 if (ac1 > ac2)
773 {
774 rc = 1;
775 break;
776 }
777
778 k++;
779 }
780
781 gfc_free (arg);
782
783 return rc;
784}
785
786
787/* Perform the abbreviated correspondence test for operators. The
788 arguments cannot be optional and are always ordered correctly,
789 which makes this test much easier than that for generic tests.
790
791 This subroutine is also used when comparing a formal and actual
792 argument list when an actual parameter is a dummy procedure. At
793 that point, two formal interfaces must be compared for equality
794 which is what happens here. */
795
796static int
797operator_correspondence (gfc_formal_arglist * f1, gfc_formal_arglist * f2)
798{
799 for (;;)
800 {
801 if (f1 == NULL && f2 == NULL)
802 break;
803 if (f1 == NULL || f2 == NULL)
804 return 1;
805
806 if (!compare_type_rank (f1->sym, f2->sym))
807 return 1;
808
809 f1 = f1->next;
810 f2 = f2->next;
811 }
812
813 return 0;
814}
815
816
817/* Perform the correspondence test in rule 2 of section 14.1.2.3.
69de3b83 818 Returns zero if no argument is found that satisfies rule 2, nonzero
6de9cd9a
DN
819 otherwise.
820
821 This test is also not symmetric in f1 and f2 and must be called
822 twice. This test finds problems caused by sorting the actual
823 argument list with keywords. For example:
824
825 INTERFACE FOO
826 SUBROUTINE F1(A, B)
827 INTEGER :: A ; REAL :: B
828 END SUBROUTINE F1
829
830 SUBROUTINE F2(B, A)
831 INTEGER :: A ; REAL :: B
832 END SUBROUTINE F1
833 END INTERFACE FOO
834
835 At this point, 'CALL FOO(A=1, B=1.0)' is ambiguous. */
836
837static int
838generic_correspondence (gfc_formal_arglist * f1, gfc_formal_arglist * f2)
839{
840
841 gfc_formal_arglist *f2_save, *g;
842 gfc_symbol *sym;
843
844 f2_save = f2;
845
846 while (f1)
847 {
848 if (f1->sym->attr.optional)
849 goto next;
850
851 if (f2 != NULL && compare_type_rank (f1->sym, f2->sym))
852 goto next;
853
854 /* Now search for a disambiguating keyword argument starting at
855 the current non-match. */
856 for (g = f1; g; g = g->next)
857 {
858 if (g->sym->attr.optional)
859 continue;
860
861 sym = find_keyword_arg (g->sym->name, f2_save);
862 if (sym == NULL || !compare_type_rank (g->sym, sym))
863 return 1;
864 }
865
866 next:
867 f1 = f1->next;
868 if (f2 != NULL)
869 f2 = f2->next;
870 }
871
872 return 0;
873}
874
875
876/* 'Compare' two formal interfaces associated with a pair of symbols.
877 We return nonzero if there exists an actual argument list that
878 would be ambiguous between the two interfaces, zero otherwise. */
879
880static int
881compare_interfaces (gfc_symbol * s1, gfc_symbol * s2, int generic_flag)
882{
883 gfc_formal_arglist *f1, *f2;
884
885 if (s1->attr.function != s2->attr.function
886 && s1->attr.subroutine != s2->attr.subroutine)
887 return 0; /* disagreement between function/subroutine */
888
889 f1 = s1->formal;
890 f2 = s2->formal;
891
892 if (f1 == NULL && f2 == NULL)
893 return 1; /* Special case */
894
895 if (count_types_test (f1, f2))
896 return 0;
897 if (count_types_test (f2, f1))
898 return 0;
899
900 if (generic_flag)
901 {
902 if (generic_correspondence (f1, f2))
903 return 0;
904 if (generic_correspondence (f2, f1))
905 return 0;
906 }
907 else
908 {
909 if (operator_correspondence (f1, f2))
910 return 0;
911 }
912
913 return 1;
914}
915
916
917/* Given a pointer to an interface pointer, remove duplicate
918 interfaces and make sure that all symbols are either functions or
919 subroutines. Returns nonzero if something goes wrong. */
920
921static int
922check_interface0 (gfc_interface * p, const char *interface_name)
923{
924 gfc_interface *psave, *q, *qlast;
925
926 psave = p;
927 /* Make sure all symbols in the interface have been defined as
928 functions or subroutines. */
929 for (; p; p = p->next)
930 if (!p->sym->attr.function && !p->sym->attr.subroutine)
931 {
932 gfc_error ("Procedure '%s' in %s at %L is neither function nor "
933 "subroutine", p->sym->name, interface_name,
934 &p->sym->declared_at);
935 return 1;
936 }
937 p = psave;
938
939 /* Remove duplicate interfaces in this interface list. */
940 for (; p; p = p->next)
941 {
942 qlast = p;
943
944 for (q = p->next; q;)
945 {
946 if (p->sym != q->sym)
947 {
948 qlast = q;
949 q = q->next;
950
951 }
952 else
953 {
954 /* Duplicate interface */
955 qlast->next = q->next;
956 gfc_free (q);
957 q = qlast->next;
958 }
959 }
960 }
961
962 return 0;
963}
964
965
966/* Check lists of interfaces to make sure that no two interfaces are
967 ambiguous. Duplicate interfaces (from the same symbol) are OK
968 here. */
969
970static int
991f3b12 971check_interface1 (gfc_interface * p, gfc_interface * q0,
993ef28f 972 int generic_flag, const char *interface_name,
26f2ca2b 973 bool referenced)
6de9cd9a 974{
991f3b12 975 gfc_interface * q;
6de9cd9a 976 for (; p; p = p->next)
991f3b12 977 for (q = q0; q; q = q->next)
6de9cd9a
DN
978 {
979 if (p->sym == q->sym)
980 continue; /* Duplicates OK here */
981
312ae8f4 982 if (p->sym->name == q->sym->name && p->sym->module == q->sym->module)
6de9cd9a
DN
983 continue;
984
985 if (compare_interfaces (p->sym, q->sym, generic_flag))
986 {
993ef28f
PT
987 if (referenced)
988 {
989 gfc_error ("Ambiguous interfaces '%s' and '%s' in %s at %L",
990 p->sym->name, q->sym->name, interface_name,
991 &p->where);
992 }
993
994 if (!p->sym->attr.use_assoc && q->sym->attr.use_assoc)
995 gfc_warning ("Ambiguous interfaces '%s' and '%s' in %s at %L",
996 p->sym->name, q->sym->name, interface_name,
997 &p->where);
6de9cd9a
DN
998 return 1;
999 }
1000 }
6de9cd9a
DN
1001 return 0;
1002}
1003
1004
1005/* Check the generic and operator interfaces of symbols to make sure
1006 that none of the interfaces conflict. The check has to be done
1007 after all of the symbols are actually loaded. */
1008
1009static void
1010check_sym_interfaces (gfc_symbol * sym)
1011{
1012 char interface_name[100];
26f2ca2b 1013 bool k;
71f77fd7 1014 gfc_interface *p;
6de9cd9a
DN
1015
1016 if (sym->ns != gfc_current_ns)
1017 return;
1018
1019 if (sym->generic != NULL)
1020 {
1021 sprintf (interface_name, "generic interface '%s'", sym->name);
1022 if (check_interface0 (sym->generic, interface_name))
1023 return;
1024
71f77fd7
PT
1025 for (p = sym->generic; p; p = p->next)
1026 {
1027 if (!p->sym->attr.use_assoc
1028 && p->sym->attr.mod_proc
1029 && p->sym->attr.if_source != IFSRC_DECL)
1030 {
1031 gfc_error ("MODULE PROCEDURE '%s' at %L does not come "
1032 "from a module", p->sym->name, &p->where);
1033 return;
1034 }
1035 }
1036
4c256e34 1037 /* Originally, this test was applied to host interfaces too;
993ef28f
PT
1038 this is incorrect since host associated symbols, from any
1039 source, cannot be ambiguous with local symbols. */
1040 k = sym->attr.referenced || !sym->attr.use_assoc;
1041 if (check_interface1 (sym->generic, sym->generic, 1,
1042 interface_name, k))
1043 sym->attr.ambiguous_interfaces = 1;
6de9cd9a
DN
1044 }
1045}
1046
1047
1048static void
1049check_uop_interfaces (gfc_user_op * uop)
1050{
1051 char interface_name[100];
1052 gfc_user_op *uop2;
1053 gfc_namespace *ns;
1054
1055 sprintf (interface_name, "operator interface '%s'", uop->name);
1056 if (check_interface0 (uop->operator, interface_name))
1057 return;
1058
1059 for (ns = gfc_current_ns; ns; ns = ns->parent)
1060 {
1061 uop2 = gfc_find_uop (uop->name, ns);
1062 if (uop2 == NULL)
1063 continue;
1064
993ef28f 1065 check_interface1 (uop->operator, uop2->operator, 0,
26f2ca2b 1066 interface_name, true);
6de9cd9a
DN
1067 }
1068}
1069
1070
1071/* For the namespace, check generic, user operator and intrinsic
1072 operator interfaces for consistency and to remove duplicate
1073 interfaces. We traverse the whole namespace, counting on the fact
1074 that most symbols will not have generic or operator interfaces. */
1075
1076void
1077gfc_check_interfaces (gfc_namespace * ns)
1078{
1079 gfc_namespace *old_ns, *ns2;
1080 char interface_name[100];
1081 gfc_intrinsic_op i;
1082
1083 old_ns = gfc_current_ns;
1084 gfc_current_ns = ns;
1085
1086 gfc_traverse_ns (ns, check_sym_interfaces);
1087
1088 gfc_traverse_user_op (ns, check_uop_interfaces);
1089
1090 for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++)
1091 {
1092 if (i == INTRINSIC_USER)
1093 continue;
1094
1095 if (i == INTRINSIC_ASSIGN)
1096 strcpy (interface_name, "intrinsic assignment operator");
1097 else
1098 sprintf (interface_name, "intrinsic '%s' operator",
1099 gfc_op2string (i));
1100
1101 if (check_interface0 (ns->operator[i], interface_name))
1102 continue;
1103
1104 check_operator_interface (ns->operator[i], i);
1105
1106 for (ns2 = ns->parent; ns2; ns2 = ns2->parent)
1107 if (check_interface1 (ns->operator[i], ns2->operator[i], 0,
26f2ca2b 1108 interface_name, true))
6de9cd9a
DN
1109 break;
1110 }
1111
1112 gfc_current_ns = old_ns;
1113}
1114
1115
1116static int
1117symbol_rank (gfc_symbol * sym)
1118{
1119
1120 return (sym->as == NULL) ? 0 : sym->as->rank;
1121}
1122
1123
aa08038d
EE
1124/* Given a symbol of a formal argument list and an expression, if the
1125 formal argument is allocatable, check that the actual argument is
1126 allocatable. Returns nonzero if compatible, zero if not compatible. */
1127
1128static int
1129compare_allocatable (gfc_symbol * formal, gfc_expr * actual)
1130{
1131 symbol_attribute attr;
1132
1133 if (formal->attr.allocatable)
1134 {
1135 attr = gfc_expr_attr (actual);
1136 if (!attr.allocatable)
1137 return 0;
1138 }
1139
1140 return 1;
1141}
1142
1143
6de9cd9a
DN
1144/* Given a symbol of a formal argument list and an expression, if the
1145 formal argument is a pointer, see if the actual argument is a
1146 pointer. Returns nonzero if compatible, zero if not compatible. */
1147
1148static int
1149compare_pointer (gfc_symbol * formal, gfc_expr * actual)
1150{
1151 symbol_attribute attr;
1152
1153 if (formal->attr.pointer)
1154 {
1155 attr = gfc_expr_attr (actual);
1156 if (!attr.pointer)
1157 return 0;
1158 }
1159
1160 return 1;
1161}
1162
1163
1164/* Given a symbol of a formal argument list and an expression, see if
1165 the two are compatible as arguments. Returns nonzero if
1166 compatible, zero if not compatible. */
1167
1168static int
1169compare_parameter (gfc_symbol * formal, gfc_expr * actual,
1170 int ranks_must_agree, int is_elemental)
1171{
1172 gfc_ref *ref;
1173
1174 if (actual->ts.type == BT_PROCEDURE)
1175 {
1176 if (formal->attr.flavor != FL_PROCEDURE)
1177 return 0;
1178
1179 if (formal->attr.function
1180 && !compare_type_rank (formal, actual->symtree->n.sym))
1181 return 0;
1182
699fa7aa
PT
1183 if (formal->attr.if_source == IFSRC_UNKNOWN
1184 || actual->symtree->n.sym->attr.external)
6de9cd9a
DN
1185 return 1; /* Assume match */
1186
1187 return compare_interfaces (formal, actual->symtree->n.sym, 0);
1188 }
1189
90aeadcb 1190 if ((actual->expr_type != EXPR_NULL || actual->ts.type != BT_UNKNOWN)
1600fe22 1191 && !gfc_compare_types (&formal->ts, &actual->ts))
6de9cd9a
DN
1192 return 0;
1193
1194 if (symbol_rank (formal) == actual->rank)
1195 return 1;
1196
1197 /* At this point the ranks didn't agree. */
1198 if (ranks_must_agree || formal->attr.pointer)
1199 return 0;
1200
1201 if (actual->rank != 0)
1202 return is_elemental || formal->attr.dimension;
1203
1204 /* At this point, we are considering a scalar passed to an array.
1205 This is legal if the scalar is an array element of the right sort. */
1206 if (formal->as->type == AS_ASSUMED_SHAPE)
1207 return 0;
1208
1209 for (ref = actual->ref; ref; ref = ref->next)
1210 if (ref->type == REF_SUBSTRING)
1211 return 0;
1212
1213 for (ref = actual->ref; ref; ref = ref->next)
1214 if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT)
1215 break;
1216
1217 if (ref == NULL)
1218 return 0; /* Not an array element */
1219
1220 return 1;
1221}
1222
1223
ee7e677f
TB
1224/* Given a symbol of a formal argument list and an expression, see if
1225 the two are compatible as arguments. Returns nonzero if
1226 compatible, zero if not compatible. */
1227
1228static int
1229compare_parameter_protected (gfc_symbol * formal, gfc_expr * actual)
1230{
1231 if (actual->expr_type != EXPR_VARIABLE)
1232 return 1;
1233
1234 if (!actual->symtree->n.sym->attr.protected)
1235 return 1;
1236
1237 if (!actual->symtree->n.sym->attr.use_assoc)
1238 return 1;
1239
1240 if (formal->attr.intent == INTENT_IN
1241 || formal->attr.intent == INTENT_UNKNOWN)
1242 return 1;
1243
1244 if (!actual->symtree->n.sym->attr.pointer)
1245 return 0;
1246
1247 if (actual->symtree->n.sym->attr.pointer && formal->attr.pointer)
1248 return 0;
1249
1250 return 1;
1251}
1252
1253
6de9cd9a
DN
1254/* Given formal and actual argument lists, see if they are compatible.
1255 If they are compatible, the actual argument list is sorted to
1256 correspond with the formal list, and elements for missing optional
1257 arguments are inserted. If WHERE pointer is nonnull, then we issue
1258 errors when things don't match instead of just returning the status
1259 code. */
1260
1261static int
1262compare_actual_formal (gfc_actual_arglist ** ap,
1263 gfc_formal_arglist * formal,
1264 int ranks_must_agree, int is_elemental, locus * where)
1265{
1266 gfc_actual_arglist **new, *a, *actual, temp;
1267 gfc_formal_arglist *f;
1268 int i, n, na;
98cb5a54 1269 bool rank_check;
6de9cd9a
DN
1270
1271 actual = *ap;
1272
1273 if (actual == NULL && formal == NULL)
1274 return 1;
1275
1276 n = 0;
1277 for (f = formal; f; f = f->next)
1278 n++;
1279
1280 new = (gfc_actual_arglist **) alloca (n * sizeof (gfc_actual_arglist *));
1281
1282 for (i = 0; i < n; i++)
1283 new[i] = NULL;
1284
1285 na = 0;
1286 f = formal;
1287 i = 0;
1288
1289 for (a = actual; a; a = a->next, f = f->next)
1290 {
7fcafa71
PT
1291 /* Look for keywords but ignore g77 extensions like %VAL. */
1292 if (a->name != NULL && a->name[0] != '%')
6de9cd9a
DN
1293 {
1294 i = 0;
1295 for (f = formal; f; f = f->next, i++)
1296 {
1297 if (f->sym == NULL)
1298 continue;
1299 if (strcmp (f->sym->name, a->name) == 0)
1300 break;
1301 }
1302
1303 if (f == NULL)
1304 {
1305 if (where)
1306 gfc_error
1307 ("Keyword argument '%s' at %L is not in the procedure",
1308 a->name, &a->expr->where);
1309 return 0;
1310 }
1311
1312 if (new[i] != NULL)
1313 {
1314 if (where)
1315 gfc_error
1316 ("Keyword argument '%s' at %L is already associated "
1317 "with another actual argument", a->name, &a->expr->where);
1318 return 0;
1319 }
1320 }
1321
1322 if (f == NULL)
1323 {
1324 if (where)
1325 gfc_error
1326 ("More actual than formal arguments in procedure call at %L",
1327 where);
1328
1329 return 0;
1330 }
1331
1332 if (f->sym == NULL && a->expr == NULL)
1333 goto match;
1334
1335 if (f->sym == NULL)
1336 {
1337 if (where)
1338 gfc_error
1339 ("Missing alternate return spec in subroutine call at %L",
1340 where);
1341 return 0;
1342 }
1343
1344 if (a->expr == NULL)
1345 {
1346 if (where)
1347 gfc_error
1348 ("Unexpected alternate return spec in subroutine call at %L",
1349 where);
1350 return 0;
1351 }
1352
98cb5a54
PT
1353 rank_check = where != NULL
1354 && !is_elemental
1355 && f->sym->as
1356 && (f->sym->as->type == AS_ASSUMED_SHAPE
1357 || f->sym->as->type == AS_DEFERRED);
1358
6de9cd9a 1359 if (!compare_parameter
98cb5a54 1360 (f->sym, a->expr, ranks_must_agree || rank_check, is_elemental))
6de9cd9a
DN
1361 {
1362 if (where)
1363 gfc_error ("Type/rank mismatch in argument '%s' at %L",
1364 f->sym->name, &a->expr->where);
1365 return 0;
1366 }
1367
699fa7aa
PT
1368 /* Satisfy 12.4.1.2 by ensuring that a procedure actual argument is
1369 provided for a procedure formal argument. */
1370 if (a->expr->ts.type != BT_PROCEDURE
1371 && a->expr->expr_type == EXPR_VARIABLE
1372 && f->sym->attr.flavor == FL_PROCEDURE)
1373 {
9914f8cf
PT
1374 if (where)
1375 gfc_error ("Expected a procedure for argument '%s' at %L",
1376 f->sym->name, &a->expr->where);
1377 return 0;
699fa7aa
PT
1378 }
1379
d68bd5a8
PT
1380 if (f->sym->attr.flavor == FL_PROCEDURE
1381 && f->sym->attr.pure
1382 && a->expr->ts.type == BT_PROCEDURE
1383 && !a->expr->symtree->n.sym->attr.pure)
1384 {
1385 if (where)
1386 gfc_error ("Expected a PURE procedure for argument '%s' at %L",
1387 f->sym->name, &a->expr->where);
1388 return 0;
1389 }
1390
bf9d2177
JJ
1391 if (f->sym->as
1392 && f->sym->as->type == AS_ASSUMED_SHAPE
1393 && a->expr->expr_type == EXPR_VARIABLE
1394 && a->expr->symtree->n.sym->as
1395 && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SIZE
1396 && (a->expr->ref == NULL
1397 || (a->expr->ref->type == REF_ARRAY
1398 && a->expr->ref->u.ar.type == AR_FULL)))
1399 {
1400 if (where)
1401 gfc_error ("Actual argument for '%s' cannot be an assumed-size"
1402 " array at %L", f->sym->name, where);
1403 return 0;
1404 }
1405
1600fe22
TS
1406 if (a->expr->expr_type != EXPR_NULL
1407 && compare_pointer (f->sym, a->expr) == 0)
6de9cd9a
DN
1408 {
1409 if (where)
1410 gfc_error ("Actual argument for '%s' must be a pointer at %L",
1411 f->sym->name, &a->expr->where);
1412 return 0;
1413 }
1414
aa08038d
EE
1415 if (a->expr->expr_type != EXPR_NULL
1416 && compare_allocatable (f->sym, a->expr) == 0)
1417 {
1418 if (where)
1419 gfc_error ("Actual argument for '%s' must be ALLOCATABLE at %L",
1420 f->sym->name, &a->expr->where);
1421 return 0;
1422 }
1423
a920e94a
PT
1424 /* Check intent = OUT/INOUT for definable actual argument. */
1425 if (a->expr->expr_type != EXPR_VARIABLE
1426 && (f->sym->attr.intent == INTENT_OUT
1427 || f->sym->attr.intent == INTENT_INOUT))
1428 {
536afc35
PT
1429 if (where)
1430 gfc_error ("Actual argument at %L must be definable to "
1431 "match dummy INTENT = OUT/INOUT", &a->expr->where);
a920e94a
PT
1432 return 0;
1433 }
1434
ee7e677f
TB
1435 if (!compare_parameter_protected(f->sym, a->expr))
1436 {
1437 if (where)
1438 gfc_error ("Actual argument at %L is use-associated with "
1439 "PROTECTED attribute and dummy argument '%s' is "
1440 "INTENT = OUT/INOUT",
1441 &a->expr->where,f->sym->name);
1442 return 0;
1443 }
1444
6de9cd9a
DN
1445 match:
1446 if (a == actual)
1447 na = i;
1448
1449 new[i++] = a;
1450 }
1451
1452 /* Make sure missing actual arguments are optional. */
1453 i = 0;
1454 for (f = formal; f; f = f->next, i++)
1455 {
1456 if (new[i] != NULL)
1457 continue;
3ab7b3de
BM
1458 if (f->sym == NULL)
1459 {
1460 if (where)
1461 gfc_error ("Missing alternate return spec in subroutine call at %L",
1462 where);
1463 return 0;
1464 }
6de9cd9a
DN
1465 if (!f->sym->attr.optional)
1466 {
1467 if (where)
1468 gfc_error ("Missing actual argument for argument '%s' at %L",
1469 f->sym->name, where);
1470 return 0;
1471 }
1472 }
1473
1474 /* The argument lists are compatible. We now relink a new actual
1475 argument list with null arguments in the right places. The head
1476 of the list remains the head. */
1477 for (i = 0; i < n; i++)
1478 if (new[i] == NULL)
1479 new[i] = gfc_get_actual_arglist ();
1480
1481 if (na != 0)
1482 {
1483 temp = *new[0];
1484 *new[0] = *actual;
1485 *actual = temp;
1486
1487 a = new[0];
1488 new[0] = new[na];
1489 new[na] = a;
1490 }
1491
1492 for (i = 0; i < n - 1; i++)
1493 new[i]->next = new[i + 1];
1494
1495 new[i]->next = NULL;
1496
1497 if (*ap == NULL && n > 0)
1498 *ap = new[0];
1499
1600fe22
TS
1500 /* Note the types of omitted optional arguments. */
1501 for (a = actual, f = formal; a; a = a->next, f = f->next)
1502 if (a->expr == NULL && a->label == NULL)
1503 a->missing_arg_type = f->sym->ts.type;
1504
6de9cd9a
DN
1505 return 1;
1506}
1507
1508
1509typedef struct
1510{
1511 gfc_formal_arglist *f;
1512 gfc_actual_arglist *a;
1513}
1514argpair;
1515
1516/* qsort comparison function for argument pairs, with the following
1517 order:
1518 - p->a->expr == NULL
1519 - p->a->expr->expr_type != EXPR_VARIABLE
f7b529fa 1520 - growing p->a->expr->symbol. */
6de9cd9a
DN
1521
1522static int
1523pair_cmp (const void *p1, const void *p2)
1524{
1525 const gfc_actual_arglist *a1, *a2;
1526
1527 /* *p1 and *p2 are elements of the to-be-sorted array. */
1528 a1 = ((const argpair *) p1)->a;
1529 a2 = ((const argpair *) p2)->a;
1530 if (!a1->expr)
1531 {
1532 if (!a2->expr)
1533 return 0;
1534 return -1;
1535 }
1536 if (!a2->expr)
1537 return 1;
1538 if (a1->expr->expr_type != EXPR_VARIABLE)
1539 {
1540 if (a2->expr->expr_type != EXPR_VARIABLE)
1541 return 0;
1542 return -1;
1543 }
1544 if (a2->expr->expr_type != EXPR_VARIABLE)
1545 return 1;
1546 return a1->expr->symtree->n.sym < a2->expr->symtree->n.sym;
1547}
1548
1549
1550/* Given two expressions from some actual arguments, test whether they
1551 refer to the same expression. The analysis is conservative.
1552 Returning FAILURE will produce no warning. */
1553
1554static try
1555compare_actual_expr (gfc_expr * e1, gfc_expr * e2)
1556{
1557 const gfc_ref *r1, *r2;
1558
1559 if (!e1 || !e2
1560 || e1->expr_type != EXPR_VARIABLE
1561 || e2->expr_type != EXPR_VARIABLE
1562 || e1->symtree->n.sym != e2->symtree->n.sym)
1563 return FAILURE;
1564
1565 /* TODO: improve comparison, see expr.c:show_ref(). */
1566 for (r1 = e1->ref, r2 = e2->ref; r1 && r2; r1 = r1->next, r2 = r2->next)
1567 {
1568 if (r1->type != r2->type)
1569 return FAILURE;
1570 switch (r1->type)
1571 {
1572 case REF_ARRAY:
1573 if (r1->u.ar.type != r2->u.ar.type)
1574 return FAILURE;
1575 /* TODO: At the moment, consider only full arrays;
1576 we could do better. */
1577 if (r1->u.ar.type != AR_FULL || r2->u.ar.type != AR_FULL)
1578 return FAILURE;
1579 break;
1580
1581 case REF_COMPONENT:
1582 if (r1->u.c.component != r2->u.c.component)
1583 return FAILURE;
1584 break;
1585
1586 case REF_SUBSTRING:
1587 return FAILURE;
1588
1589 default:
1590 gfc_internal_error ("compare_actual_expr(): Bad component code");
1591 }
1592 }
1593 if (!r1 && !r2)
1594 return SUCCESS;
1595 return FAILURE;
1596}
1597
1598/* Given formal and actual argument lists that correspond to one
1599 another, check that identical actual arguments aren't not
1600 associated with some incompatible INTENTs. */
1601
1602static try
1603check_some_aliasing (gfc_formal_arglist * f, gfc_actual_arglist * a)
1604{
1605 sym_intent f1_intent, f2_intent;
1606 gfc_formal_arglist *f1;
1607 gfc_actual_arglist *a1;
1608 size_t n, i, j;
1609 argpair *p;
1610 try t = SUCCESS;
1611
1612 n = 0;
1613 for (f1 = f, a1 = a;; f1 = f1->next, a1 = a1->next)
1614 {
1615 if (f1 == NULL && a1 == NULL)
1616 break;
1617 if (f1 == NULL || a1 == NULL)
1618 gfc_internal_error ("check_some_aliasing(): List mismatch");
1619 n++;
1620 }
1621 if (n == 0)
1622 return t;
1623 p = (argpair *) alloca (n * sizeof (argpair));
1624
1625 for (i = 0, f1 = f, a1 = a; i < n; i++, f1 = f1->next, a1 = a1->next)
1626 {
1627 p[i].f = f1;
1628 p[i].a = a1;
1629 }
1630
1631 qsort (p, n, sizeof (argpair), pair_cmp);
1632
1633 for (i = 0; i < n; i++)
1634 {
1635 if (!p[i].a->expr
1636 || p[i].a->expr->expr_type != EXPR_VARIABLE
1637 || p[i].a->expr->ts.type == BT_PROCEDURE)
1638 continue;
1639 f1_intent = p[i].f->sym->attr.intent;
1640 for (j = i + 1; j < n; j++)
1641 {
1642 /* Expected order after the sort. */
1643 if (!p[j].a->expr || p[j].a->expr->expr_type != EXPR_VARIABLE)
1644 gfc_internal_error ("check_some_aliasing(): corrupted data");
1645
1646 /* Are the expression the same? */
1647 if (compare_actual_expr (p[i].a->expr, p[j].a->expr) == FAILURE)
1648 break;
1649 f2_intent = p[j].f->sym->attr.intent;
1650 if ((f1_intent == INTENT_IN && f2_intent == INTENT_OUT)
1651 || (f1_intent == INTENT_OUT && f2_intent == INTENT_IN))
1652 {
1653 gfc_warning ("Same actual argument associated with INTENT(%s) "
1654 "argument '%s' and INTENT(%s) argument '%s' at %L",
1655 gfc_intent_string (f1_intent), p[i].f->sym->name,
1656 gfc_intent_string (f2_intent), p[j].f->sym->name,
1657 &p[i].a->expr->where);
1658 t = FAILURE;
1659 }
1660 }
1661 }
1662
1663 return t;
1664}
1665
1666
f17facac
TB
1667/* Given a symbol of a formal argument list and an expression,
1668 return non-zero if their intents are compatible, zero otherwise. */
1669
1670static int
1671compare_parameter_intent (gfc_symbol * formal, gfc_expr * actual)
1672{
1673 if (actual->symtree->n.sym->attr.pointer
1674 && !formal->attr.pointer)
1675 return 1;
1676
1677 if (actual->symtree->n.sym->attr.intent != INTENT_IN)
1678 return 1;
1679
1680 if (formal->attr.intent == INTENT_INOUT
1681 || formal->attr.intent == INTENT_OUT)
1682 return 0;
1683
1684 return 1;
1685}
1686
1687
6de9cd9a
DN
1688/* Given formal and actual argument lists that correspond to one
1689 another, check that they are compatible in the sense that intents
1690 are not mismatched. */
1691
1692static try
1693check_intents (gfc_formal_arglist * f, gfc_actual_arglist * a)
1694{
f17facac 1695 sym_intent f_intent;
6de9cd9a
DN
1696
1697 for (;; f = f->next, a = a->next)
1698 {
1699 if (f == NULL && a == NULL)
1700 break;
1701 if (f == NULL || a == NULL)
1702 gfc_internal_error ("check_intents(): List mismatch");
1703
1704 if (a->expr == NULL || a->expr->expr_type != EXPR_VARIABLE)
1705 continue;
1706
6de9cd9a
DN
1707 f_intent = f->sym->attr.intent;
1708
f17facac 1709 if (!compare_parameter_intent(f->sym, a->expr))
6de9cd9a
DN
1710 {
1711
1712 gfc_error ("Procedure argument at %L is INTENT(IN) while interface "
1713 "specifies INTENT(%s)", &a->expr->where,
1714 gfc_intent_string (f_intent));
1715 return FAILURE;
1716 }
1717
1718 if (gfc_pure (NULL) && gfc_impure_variable (a->expr->symtree->n.sym))
1719 {
1720 if (f_intent == INTENT_INOUT || f_intent == INTENT_OUT)
1721 {
1722 gfc_error
1723 ("Procedure argument at %L is local to a PURE procedure and "
1724 "is passed to an INTENT(%s) argument", &a->expr->where,
1725 gfc_intent_string (f_intent));
1726 return FAILURE;
1727 }
1728
1729 if (a->expr->symtree->n.sym->attr.pointer)
1730 {
1731 gfc_error
1732 ("Procedure argument at %L is local to a PURE procedure and "
1733 "has the POINTER attribute", &a->expr->where);
1734 return FAILURE;
1735 }
1736 }
1737 }
1738
1739 return SUCCESS;
1740}
1741
1742
1743/* Check how a procedure is used against its interface. If all goes
1744 well, the actual argument list will also end up being properly
1745 sorted. */
1746
1747void
1748gfc_procedure_use (gfc_symbol * sym, gfc_actual_arglist ** ap, locus * where)
1749{
c4bbc105 1750
6de9cd9a
DN
1751 /* Warn about calls with an implicit interface. */
1752 if (gfc_option.warn_implicit_interface
1753 && sym->attr.if_source == IFSRC_UNKNOWN)
1754 gfc_warning ("Procedure '%s' called with an implicit interface at %L",
1755 sym->name, where);
1756
1757 if (sym->attr.if_source == IFSRC_UNKNOWN
98cb5a54 1758 || !compare_actual_formal (ap, sym->formal, 0,
c4bbc105 1759 sym->attr.elemental, where))
6de9cd9a
DN
1760 return;
1761
1762 check_intents (sym->formal, *ap);
1763 if (gfc_option.warn_aliasing)
1764 check_some_aliasing (sym->formal, *ap);
1765}
1766
1767
1768/* Given an interface pointer and an actual argument list, search for
1769 a formal argument list that matches the actual. If found, returns
1770 a pointer to the symbol of the correct interface. Returns NULL if
1771 not found. */
1772
1773gfc_symbol *
1774gfc_search_interface (gfc_interface * intr, int sub_flag,
1775 gfc_actual_arglist ** ap)
1776{
1777 int r;
1778
1779 for (; intr; intr = intr->next)
1780 {
1781 if (sub_flag && intr->sym->attr.function)
1782 continue;
1783 if (!sub_flag && intr->sym->attr.subroutine)
1784 continue;
1785
1786 r = !intr->sym->attr.elemental;
1787
1788 if (compare_actual_formal (ap, intr->sym->formal, r, !r, NULL))
1789 {
1790 check_intents (intr->sym->formal, *ap);
1791 if (gfc_option.warn_aliasing)
1792 check_some_aliasing (intr->sym->formal, *ap);
1793 return intr->sym;
1794 }
1795 }
1796
1797 return NULL;
1798}
1799
1800
1801/* Do a brute force recursive search for a symbol. */
1802
1803static gfc_symtree *
1804find_symtree0 (gfc_symtree * root, gfc_symbol * sym)
1805{
1806 gfc_symtree * st;
1807
1808 if (root->n.sym == sym)
1809 return root;
1810
1811 st = NULL;
1812 if (root->left)
1813 st = find_symtree0 (root->left, sym);
1814 if (root->right && ! st)
1815 st = find_symtree0 (root->right, sym);
1816 return st;
1817}
1818
1819
1820/* Find a symtree for a symbol. */
1821
1822static gfc_symtree *
1823find_sym_in_symtree (gfc_symbol * sym)
1824{
1825 gfc_symtree *st;
1826 gfc_namespace *ns;
1827
1828 /* First try to find it by name. */
1829 gfc_find_sym_tree (sym->name, gfc_current_ns, 1, &st);
1830 if (st && st->n.sym == sym)
1831 return st;
1832
1833 /* if it's been renamed, resort to a brute-force search. */
1834 /* TODO: avoid having to do this search. If the symbol doesn't exist
1835 in the symtree for the current namespace, it should probably be added. */
1836 for (ns = gfc_current_ns; ns; ns = ns->parent)
1837 {
1838 st = find_symtree0 (ns->sym_root, sym);
1839 if (st)
1840 return st;
1841 }
1842 gfc_internal_error ("Unable to find symbol %s", sym->name);
1843 /* Not reached */
1844}
1845
1846
1847/* This subroutine is called when an expression is being resolved.
1848 The expression node in question is either a user defined operator
1f2959f0 1849 or an intrinsic operator with arguments that aren't compatible
6de9cd9a
DN
1850 with the operator. This subroutine builds an actual argument list
1851 corresponding to the operands, then searches for a compatible
1852 interface. If one is found, the expression node is replaced with
1853 the appropriate function call. */
1854
1855try
1856gfc_extend_expr (gfc_expr * e)
1857{
1858 gfc_actual_arglist *actual;
1859 gfc_symbol *sym;
1860 gfc_namespace *ns;
1861 gfc_user_op *uop;
1862 gfc_intrinsic_op i;
1863
1864 sym = NULL;
1865
1866 actual = gfc_get_actual_arglist ();
58b03ab2 1867 actual->expr = e->value.op.op1;
6de9cd9a 1868
58b03ab2 1869 if (e->value.op.op2 != NULL)
6de9cd9a
DN
1870 {
1871 actual->next = gfc_get_actual_arglist ();
58b03ab2 1872 actual->next->expr = e->value.op.op2;
6de9cd9a
DN
1873 }
1874
58b03ab2 1875 i = fold_unary (e->value.op.operator);
6de9cd9a
DN
1876
1877 if (i == INTRINSIC_USER)
1878 {
1879 for (ns = gfc_current_ns; ns; ns = ns->parent)
1880 {
58b03ab2 1881 uop = gfc_find_uop (e->value.op.uop->name, ns);
6de9cd9a
DN
1882 if (uop == NULL)
1883 continue;
1884
1885 sym = gfc_search_interface (uop->operator, 0, &actual);
1886 if (sym != NULL)
1887 break;
1888 }
1889 }
1890 else
1891 {
1892 for (ns = gfc_current_ns; ns; ns = ns->parent)
1893 {
1894 sym = gfc_search_interface (ns->operator[i], 0, &actual);
1895 if (sym != NULL)
1896 break;
1897 }
1898 }
1899
1900 if (sym == NULL)
1901 {
1902 /* Don't use gfc_free_actual_arglist() */
1903 if (actual->next != NULL)
1904 gfc_free (actual->next);
1905 gfc_free (actual);
1906
1907 return FAILURE;
1908 }
1909
1910 /* Change the expression node to a function call. */
1911 e->expr_type = EXPR_FUNCTION;
1912 e->symtree = find_sym_in_symtree (sym);
1913 e->value.function.actual = actual;
58b03ab2
TS
1914 e->value.function.esym = NULL;
1915 e->value.function.isym = NULL;
cf013e9f 1916 e->value.function.name = NULL;
6de9cd9a
DN
1917
1918 if (gfc_pure (NULL) && !gfc_pure (sym))
1919 {
1920 gfc_error
1921 ("Function '%s' called in lieu of an operator at %L must be PURE",
1922 sym->name, &e->where);
1923 return FAILURE;
1924 }
1925
1926 if (gfc_resolve_expr (e) == FAILURE)
1927 return FAILURE;
1928
1929 return SUCCESS;
1930}
1931
1932
1933/* Tries to replace an assignment code node with a subroutine call to
1934 the subroutine associated with the assignment operator. Return
1935 SUCCESS if the node was replaced. On FAILURE, no error is
1936 generated. */
1937
1938try
1939gfc_extend_assign (gfc_code * c, gfc_namespace * ns)
1940{
1941 gfc_actual_arglist *actual;
1942 gfc_expr *lhs, *rhs;
1943 gfc_symbol *sym;
1944
1945 lhs = c->expr;
1946 rhs = c->expr2;
1947
1948 /* Don't allow an intrinsic assignment to be replaced. */
1949 if (lhs->ts.type != BT_DERIVED && rhs->ts.type != BT_DERIVED
1950 && (lhs->ts.type == rhs->ts.type
1951 || (gfc_numeric_ts (&lhs->ts)
1952 && gfc_numeric_ts (&rhs->ts))))
1953 return FAILURE;
1954
1955 actual = gfc_get_actual_arglist ();
1956 actual->expr = lhs;
1957
1958 actual->next = gfc_get_actual_arglist ();
1959 actual->next->expr = rhs;
1960
1961 sym = NULL;
1962
1963 for (; ns; ns = ns->parent)
1964 {
1965 sym = gfc_search_interface (ns->operator[INTRINSIC_ASSIGN], 1, &actual);
1966 if (sym != NULL)
1967 break;
1968 }
1969
1970 if (sym == NULL)
1971 {
1972 gfc_free (actual->next);
1973 gfc_free (actual);
1974 return FAILURE;
1975 }
1976
1977 /* Replace the assignment with the call. */
476220e7 1978 c->op = EXEC_ASSIGN_CALL;
6de9cd9a
DN
1979 c->symtree = find_sym_in_symtree (sym);
1980 c->expr = NULL;
1981 c->expr2 = NULL;
1982 c->ext.actual = actual;
1983
6de9cd9a
DN
1984 return SUCCESS;
1985}
1986
1987
1988/* Make sure that the interface just parsed is not already present in
1989 the given interface list. Ambiguity isn't checked yet since module
1990 procedures can be present without interfaces. */
1991
1992static try
1993check_new_interface (gfc_interface * base, gfc_symbol * new)
1994{
1995 gfc_interface *ip;
1996
1997 for (ip = base; ip; ip = ip->next)
1998 {
1999 if (ip->sym == new)
2000 {
2001 gfc_error ("Entity '%s' at %C is already present in the interface",
2002 new->name);
2003 return FAILURE;
2004 }
2005 }
2006
2007 return SUCCESS;
2008}
2009
2010
2011/* Add a symbol to the current interface. */
2012
2013try
2014gfc_add_interface (gfc_symbol * new)
2015{
2016 gfc_interface **head, *intr;
2017 gfc_namespace *ns;
2018 gfc_symbol *sym;
2019
2020 switch (current_interface.type)
2021 {
2022 case INTERFACE_NAMELESS:
2023 return SUCCESS;
2024
2025 case INTERFACE_INTRINSIC_OP:
2026 for (ns = current_interface.ns; ns; ns = ns->parent)
2027 if (check_new_interface (ns->operator[current_interface.op], new)
2028 == FAILURE)
2029 return FAILURE;
2030
2031 head = &current_interface.ns->operator[current_interface.op];
2032 break;
2033
2034 case INTERFACE_GENERIC:
2035 for (ns = current_interface.ns; ns; ns = ns->parent)
2036 {
2037 gfc_find_symbol (current_interface.sym->name, ns, 0, &sym);
2038 if (sym == NULL)
2039 continue;
2040
2041 if (check_new_interface (sym->generic, new) == FAILURE)
2042 return FAILURE;
2043 }
2044
2045 head = &current_interface.sym->generic;
2046 break;
2047
2048 case INTERFACE_USER_OP:
2049 if (check_new_interface (current_interface.uop->operator, new) ==
2050 FAILURE)
2051 return FAILURE;
2052
2053 head = &current_interface.uop->operator;
2054 break;
2055
2056 default:
2057 gfc_internal_error ("gfc_add_interface(): Bad interface type");
2058 }
2059
2060 intr = gfc_get_interface ();
2061 intr->sym = new;
63645982 2062 intr->where = gfc_current_locus;
6de9cd9a
DN
2063
2064 intr->next = *head;
2065 *head = intr;
2066
2067 return SUCCESS;
2068}
2069
2070
2071/* Gets rid of a formal argument list. We do not free symbols.
2072 Symbols are freed when a namespace is freed. */
2073
2074void
2075gfc_free_formal_arglist (gfc_formal_arglist * p)
2076{
2077 gfc_formal_arglist *q;
2078
2079 for (; p; p = q)
2080 {
2081 q = p->next;
2082 gfc_free (p);
2083 }
2084}