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