OSDN Git Service

2006-01-29 Paul Thomas <pault@gcc.gnu.org>
[pf3gnuchains/gcc-fork.git] / gcc / fortran / interface.c
1 /* Deal with interfaces.
2    Copyright (C) 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc.
3    Contributed by Andy Vaught
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING.  If not, write to the Free
19 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
20 02110-1301, USA.  */
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
44      has an explicit interface.  Each explicit interface has its own
45      namespace containing the arguments.  Module procedures are symbols in
46      which the interface is added later when the module procedure is parsed.
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"
68 #include "system.h"
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
77 gfc_interface_info current_interface;
78
79
80 /* Free a singly linked list of gfc_interface structures.  */
81
82 void
83 gfc_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
98 static gfc_intrinsic_op
99 fold_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
122 match
123 gfc_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
174 syntax:
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
182 match
183 gfc_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
216       if (!sym->attr.generic 
217           && gfc_add_generic (&sym->attr, sym->name, NULL) == FAILURE)
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
242 match
243 gfc_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
298           || strcmp (current_interface.uop->name, name) != 0)
299         {
300           gfc_error ("Expecting 'END INTERFACE OPERATOR (.%s.)' at %C",
301                      current_interface.uop->name);
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
323 /* Compare two derived types using the criteria in 4.4.2 of the standard,
324    recursing through gfc_compare_types for the components.  */
325
326 int
327 gfc_compare_derived_types (gfc_symbol * derived1, gfc_symbol * derived2)
328 {
329   gfc_component *dt1, *dt2;
330
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.  */
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)
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
343   if (strcmp (derived1->name, derived2->name))
344     return 0;
345
346   if (derived1->component_access == ACCESS_PRIVATE
347         || derived2->component_access == ACCESS_PRIVATE)
348     return 0;
349
350   if (derived1->attr.sequence == 0 || derived2->attr.sequence == 0)
351     return 0;
352
353   dt1 = derived1->components;
354   dt2 = derived2->components;
355
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
388 /* Compare two typespecs, recursively if necessary.  */
389
390 int
391 gfc_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
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
411 static int
412 compare_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
426 static 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
432 static int
433 compare_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
462 static gfc_symbol *
463 find_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
480 static void
481 check_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
639 bad_repl:
640   gfc_error ("Operator interface at %L conflicts with intrinsic interface",
641              &intr->where);
642   return;
643
644 num_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
660 static int
661 count_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
727          those that are optional.  */
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
758 static int
759 operator_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.
780    Returns zero if no argument is found that satisfies rule 2, nonzero
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
799 static int
800 generic_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
842 static int
843 compare_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
883 static int
884 check_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
932 static int
933 check_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
943         if (p->sym->name == q->sym->name && p->sym->module == q->sym->module)
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
962 static void
963 check_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
992 static void
993 check_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
1019 void
1020 gfc_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
1059 static int
1060 symbol_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
1071 static int
1072 compare_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
1091 static int
1092 compare_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
1112   if ((actual->expr_type != EXPR_NULL || actual->ts.type != BT_UNKNOWN)
1113       && !gfc_compare_types (&formal->ts, &actual->ts))
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
1153 static int
1154 compare_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     {
1182       if (a->name != NULL)
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
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
1267       if (a->expr->expr_type != EXPR_NULL
1268           && compare_pointer (f->sym, a->expr) == 0)
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       /* Check intent = OUT/INOUT for definable actual argument.  */
1277       if (a->expr->expr_type != EXPR_VARIABLE
1278              && (f->sym->attr.intent == INTENT_OUT
1279                    || f->sym->attr.intent == INTENT_INOUT))
1280         {
1281           gfc_error ("Actual argument at %L must be definable to "
1282                      "match dummy INTENT = OUT/INOUT", &a->expr->where);
1283           return 0;
1284         }
1285
1286     match:
1287       if (a == actual)
1288         na = i;
1289
1290       new[i++] = a;
1291     }
1292
1293   /* Make sure missing actual arguments are optional.  */
1294   i = 0;
1295   for (f = formal; f; f = f->next, i++)
1296     {
1297       if (new[i] != NULL)
1298         continue;
1299       if (!f->sym->attr.optional)
1300         {
1301           if (where)
1302             gfc_error ("Missing actual argument for argument '%s' at %L",
1303                        f->sym->name, where);
1304           return 0;
1305         }
1306     }
1307
1308   /* The argument lists are compatible.  We now relink a new actual
1309      argument list with null arguments in the right places.  The head
1310      of the list remains the head.  */
1311   for (i = 0; i < n; i++)
1312     if (new[i] == NULL)
1313       new[i] = gfc_get_actual_arglist ();
1314
1315   if (na != 0)
1316     {
1317       temp = *new[0];
1318       *new[0] = *actual;
1319       *actual = temp;
1320
1321       a = new[0];
1322       new[0] = new[na];
1323       new[na] = a;
1324     }
1325
1326   for (i = 0; i < n - 1; i++)
1327     new[i]->next = new[i + 1];
1328
1329   new[i]->next = NULL;
1330
1331   if (*ap == NULL && n > 0)
1332     *ap = new[0];
1333
1334   /* Note the types of omitted optional arguments.  */
1335   for (a = actual, f = formal; a; a = a->next, f = f->next)
1336     if (a->expr == NULL && a->label == NULL)
1337       a->missing_arg_type = f->sym->ts.type;
1338
1339   return 1;
1340 }
1341
1342
1343 typedef struct
1344 {
1345   gfc_formal_arglist *f;
1346   gfc_actual_arglist *a;
1347 }
1348 argpair;
1349
1350 /* qsort comparison function for argument pairs, with the following
1351    order:
1352     - p->a->expr == NULL
1353     - p->a->expr->expr_type != EXPR_VARIABLE
1354     - growing p->a->expr->symbol.  */
1355
1356 static int
1357 pair_cmp (const void *p1, const void *p2)
1358 {
1359   const gfc_actual_arglist *a1, *a2;
1360
1361   /* *p1 and *p2 are elements of the to-be-sorted array.  */
1362   a1 = ((const argpair *) p1)->a;
1363   a2 = ((const argpair *) p2)->a;
1364   if (!a1->expr)
1365     {
1366       if (!a2->expr)
1367         return 0;
1368       return -1;
1369     }
1370   if (!a2->expr)
1371     return 1;
1372   if (a1->expr->expr_type != EXPR_VARIABLE)
1373     {
1374       if (a2->expr->expr_type != EXPR_VARIABLE)
1375         return 0;
1376       return -1;
1377     }
1378   if (a2->expr->expr_type != EXPR_VARIABLE)
1379     return 1;
1380   return a1->expr->symtree->n.sym < a2->expr->symtree->n.sym;
1381 }
1382
1383
1384 /* Given two expressions from some actual arguments, test whether they
1385    refer to the same expression. The analysis is conservative.
1386    Returning FAILURE will produce no warning.  */
1387
1388 static try
1389 compare_actual_expr (gfc_expr * e1, gfc_expr * e2)
1390 {
1391   const gfc_ref *r1, *r2;
1392
1393   if (!e1 || !e2
1394       || e1->expr_type != EXPR_VARIABLE
1395       || e2->expr_type != EXPR_VARIABLE
1396       || e1->symtree->n.sym != e2->symtree->n.sym)
1397     return FAILURE;
1398
1399   /* TODO: improve comparison, see expr.c:show_ref().  */
1400   for (r1 = e1->ref, r2 = e2->ref; r1 && r2; r1 = r1->next, r2 = r2->next)
1401     {
1402       if (r1->type != r2->type)
1403         return FAILURE;
1404       switch (r1->type)
1405         {
1406         case REF_ARRAY:
1407           if (r1->u.ar.type != r2->u.ar.type)
1408             return FAILURE;
1409           /* TODO: At the moment, consider only full arrays;
1410              we could do better.  */
1411           if (r1->u.ar.type != AR_FULL || r2->u.ar.type != AR_FULL)
1412             return FAILURE;
1413           break;
1414
1415         case REF_COMPONENT:
1416           if (r1->u.c.component != r2->u.c.component)
1417             return FAILURE;
1418           break;
1419
1420         case REF_SUBSTRING:
1421           return FAILURE;
1422
1423         default:
1424           gfc_internal_error ("compare_actual_expr(): Bad component code");
1425         }
1426     }
1427   if (!r1 && !r2)
1428     return SUCCESS;
1429   return FAILURE;
1430 }
1431
1432 /* Given formal and actual argument lists that correspond to one
1433    another, check that identical actual arguments aren't not
1434    associated with some incompatible INTENTs.  */
1435
1436 static try
1437 check_some_aliasing (gfc_formal_arglist * f, gfc_actual_arglist * a)
1438 {
1439   sym_intent f1_intent, f2_intent;
1440   gfc_formal_arglist *f1;
1441   gfc_actual_arglist *a1;
1442   size_t n, i, j;
1443   argpair *p;
1444   try t = SUCCESS;
1445
1446   n = 0;
1447   for (f1 = f, a1 = a;; f1 = f1->next, a1 = a1->next)
1448     {
1449       if (f1 == NULL && a1 == NULL)
1450         break;
1451       if (f1 == NULL || a1 == NULL)
1452         gfc_internal_error ("check_some_aliasing(): List mismatch");
1453       n++;
1454     }
1455   if (n == 0)
1456     return t;
1457   p = (argpair *) alloca (n * sizeof (argpair));
1458
1459   for (i = 0, f1 = f, a1 = a; i < n; i++, f1 = f1->next, a1 = a1->next)
1460     {
1461       p[i].f = f1;
1462       p[i].a = a1;
1463     }
1464
1465   qsort (p, n, sizeof (argpair), pair_cmp);
1466
1467   for (i = 0; i < n; i++)
1468     {
1469       if (!p[i].a->expr
1470           || p[i].a->expr->expr_type != EXPR_VARIABLE
1471           || p[i].a->expr->ts.type == BT_PROCEDURE)
1472         continue;
1473       f1_intent = p[i].f->sym->attr.intent;
1474       for (j = i + 1; j < n; j++)
1475         {
1476           /* Expected order after the sort.  */
1477           if (!p[j].a->expr || p[j].a->expr->expr_type != EXPR_VARIABLE)
1478             gfc_internal_error ("check_some_aliasing(): corrupted data");
1479
1480           /* Are the expression the same?  */
1481           if (compare_actual_expr (p[i].a->expr, p[j].a->expr) == FAILURE)
1482             break;
1483           f2_intent = p[j].f->sym->attr.intent;
1484           if ((f1_intent == INTENT_IN && f2_intent == INTENT_OUT)
1485               || (f1_intent == INTENT_OUT && f2_intent == INTENT_IN))
1486             {
1487               gfc_warning ("Same actual argument associated with INTENT(%s) "
1488                            "argument '%s' and INTENT(%s) argument '%s' at %L",
1489                            gfc_intent_string (f1_intent), p[i].f->sym->name,
1490                            gfc_intent_string (f2_intent), p[j].f->sym->name,
1491                            &p[i].a->expr->where);
1492               t = FAILURE;
1493             }
1494         }
1495     }
1496
1497   return t;
1498 }
1499
1500
1501 /* Given formal and actual argument lists that correspond to one
1502    another, check that they are compatible in the sense that intents
1503    are not mismatched.  */
1504
1505 static try
1506 check_intents (gfc_formal_arglist * f, gfc_actual_arglist * a)
1507 {
1508   sym_intent a_intent, f_intent;
1509
1510   for (;; f = f->next, a = a->next)
1511     {
1512       if (f == NULL && a == NULL)
1513         break;
1514       if (f == NULL || a == NULL)
1515         gfc_internal_error ("check_intents(): List mismatch");
1516
1517       if (a->expr == NULL || a->expr->expr_type != EXPR_VARIABLE)
1518         continue;
1519
1520       a_intent = a->expr->symtree->n.sym->attr.intent;
1521       f_intent = f->sym->attr.intent;
1522
1523       if (a_intent == INTENT_IN
1524           && (f_intent == INTENT_INOUT
1525               || f_intent == INTENT_OUT))
1526         {
1527
1528           gfc_error ("Procedure argument at %L is INTENT(IN) while interface "
1529                      "specifies INTENT(%s)", &a->expr->where,
1530                      gfc_intent_string (f_intent));
1531           return FAILURE;
1532         }
1533
1534       if (gfc_pure (NULL) && gfc_impure_variable (a->expr->symtree->n.sym))
1535         {
1536           if (f_intent == INTENT_INOUT || f_intent == INTENT_OUT)
1537             {
1538               gfc_error
1539                 ("Procedure argument at %L is local to a PURE procedure and "
1540                  "is passed to an INTENT(%s) argument", &a->expr->where,
1541                  gfc_intent_string (f_intent));
1542               return FAILURE;
1543             }
1544
1545           if (a->expr->symtree->n.sym->attr.pointer)
1546             {
1547               gfc_error
1548                 ("Procedure argument at %L is local to a PURE procedure and "
1549                  "has the POINTER attribute", &a->expr->where);
1550               return FAILURE;
1551             }
1552         }
1553     }
1554
1555   return SUCCESS;
1556 }
1557
1558
1559 /* Check how a procedure is used against its interface.  If all goes
1560    well, the actual argument list will also end up being properly
1561    sorted.  */
1562
1563 void
1564 gfc_procedure_use (gfc_symbol * sym, gfc_actual_arglist ** ap, locus * where)
1565 {
1566   /* Warn about calls with an implicit interface.  */
1567   if (gfc_option.warn_implicit_interface
1568       && sym->attr.if_source == IFSRC_UNKNOWN)
1569     gfc_warning ("Procedure '%s' called with an implicit interface at %L",
1570                  sym->name, where);
1571
1572   if (sym->attr.if_source == IFSRC_UNKNOWN
1573       || !compare_actual_formal (ap, sym->formal, 0,
1574                                  sym->attr.elemental, where))
1575     return;
1576
1577   check_intents (sym->formal, *ap);
1578   if (gfc_option.warn_aliasing)
1579     check_some_aliasing (sym->formal, *ap);
1580 }
1581
1582
1583 /* Given an interface pointer and an actual argument list, search for
1584    a formal argument list that matches the actual.  If found, returns
1585    a pointer to the symbol of the correct interface.  Returns NULL if
1586    not found.  */
1587
1588 gfc_symbol *
1589 gfc_search_interface (gfc_interface * intr, int sub_flag,
1590                       gfc_actual_arglist ** ap)
1591 {
1592   int r;
1593
1594   for (; intr; intr = intr->next)
1595     {
1596       if (sub_flag && intr->sym->attr.function)
1597         continue;
1598       if (!sub_flag && intr->sym->attr.subroutine)
1599         continue;
1600
1601       r = !intr->sym->attr.elemental;
1602
1603       if (compare_actual_formal (ap, intr->sym->formal, r, !r, NULL))
1604         {
1605           check_intents (intr->sym->formal, *ap);
1606           if (gfc_option.warn_aliasing)
1607             check_some_aliasing (intr->sym->formal, *ap);
1608           return intr->sym;
1609         }
1610     }
1611
1612   return NULL;
1613 }
1614
1615
1616 /* Do a brute force recursive search for a symbol.  */
1617
1618 static gfc_symtree *
1619 find_symtree0 (gfc_symtree * root, gfc_symbol * sym)
1620 {
1621   gfc_symtree * st;
1622
1623   if (root->n.sym == sym)
1624     return root;
1625
1626   st = NULL;
1627   if (root->left)
1628     st = find_symtree0 (root->left, sym);
1629   if (root->right && ! st)
1630     st = find_symtree0 (root->right, sym);
1631   return st;
1632 }
1633
1634
1635 /* Find a symtree for a symbol.  */
1636
1637 static gfc_symtree *
1638 find_sym_in_symtree (gfc_symbol * sym)
1639 {
1640   gfc_symtree *st;
1641   gfc_namespace *ns;
1642
1643   /* First try to find it by name.  */
1644   gfc_find_sym_tree (sym->name, gfc_current_ns, 1, &st);
1645   if (st && st->n.sym == sym)
1646     return st;
1647
1648   /* if it's been renamed, resort to a brute-force search.  */
1649   /* TODO: avoid having to do this search.  If the symbol doesn't exist
1650      in the symtree for the current namespace, it should probably be added.  */
1651   for (ns = gfc_current_ns; ns; ns = ns->parent)
1652     {
1653       st = find_symtree0 (ns->sym_root, sym);
1654       if (st)
1655         return st;
1656     }
1657   gfc_internal_error ("Unable to find symbol %s", sym->name);
1658   /* Not reached */
1659 }
1660
1661
1662 /* This subroutine is called when an expression is being resolved.
1663    The expression node in question is either a user defined operator
1664    or an intrinsic operator with arguments that aren't compatible
1665    with the operator.  This subroutine builds an actual argument list
1666    corresponding to the operands, then searches for a compatible
1667    interface.  If one is found, the expression node is replaced with
1668    the appropriate function call.  */
1669
1670 try
1671 gfc_extend_expr (gfc_expr * e)
1672 {
1673   gfc_actual_arglist *actual;
1674   gfc_symbol *sym;
1675   gfc_namespace *ns;
1676   gfc_user_op *uop;
1677   gfc_intrinsic_op i;
1678
1679   sym = NULL;
1680
1681   actual = gfc_get_actual_arglist ();
1682   actual->expr = e->value.op.op1;
1683
1684   if (e->value.op.op2 != NULL)
1685     {
1686       actual->next = gfc_get_actual_arglist ();
1687       actual->next->expr = e->value.op.op2;
1688     }
1689
1690   i = fold_unary (e->value.op.operator);
1691
1692   if (i == INTRINSIC_USER)
1693     {
1694       for (ns = gfc_current_ns; ns; ns = ns->parent)
1695         {
1696           uop = gfc_find_uop (e->value.op.uop->name, ns);
1697           if (uop == NULL)
1698             continue;
1699
1700           sym = gfc_search_interface (uop->operator, 0, &actual);
1701           if (sym != NULL)
1702             break;
1703         }
1704     }
1705   else
1706     {
1707       for (ns = gfc_current_ns; ns; ns = ns->parent)
1708         {
1709           sym = gfc_search_interface (ns->operator[i], 0, &actual);
1710           if (sym != NULL)
1711             break;
1712         }
1713     }
1714
1715   if (sym == NULL)
1716     {
1717       /* Don't use gfc_free_actual_arglist() */
1718       if (actual->next != NULL)
1719         gfc_free (actual->next);
1720       gfc_free (actual);
1721
1722       return FAILURE;
1723     }
1724
1725   /* Change the expression node to a function call.  */
1726   e->expr_type = EXPR_FUNCTION;
1727   e->symtree = find_sym_in_symtree (sym);
1728   e->value.function.actual = actual;
1729   e->value.function.esym = NULL;
1730   e->value.function.isym = NULL;
1731   e->value.function.name = NULL;
1732
1733   if (gfc_pure (NULL) && !gfc_pure (sym))
1734     {
1735       gfc_error
1736         ("Function '%s' called in lieu of an operator at %L must be PURE",
1737          sym->name, &e->where);
1738       return FAILURE;
1739     }
1740
1741   if (gfc_resolve_expr (e) == FAILURE)
1742     return FAILURE;
1743
1744   return SUCCESS;
1745 }
1746
1747
1748 /* Tries to replace an assignment code node with a subroutine call to
1749    the subroutine associated with the assignment operator.  Return
1750    SUCCESS if the node was replaced.  On FAILURE, no error is
1751    generated.  */
1752
1753 try
1754 gfc_extend_assign (gfc_code * c, gfc_namespace * ns)
1755 {
1756   gfc_actual_arglist *actual;
1757   gfc_expr *lhs, *rhs;
1758   gfc_symbol *sym;
1759
1760   lhs = c->expr;
1761   rhs = c->expr2;
1762
1763   /* Don't allow an intrinsic assignment to be replaced.  */
1764   if (lhs->ts.type != BT_DERIVED && rhs->ts.type != BT_DERIVED
1765       && (lhs->ts.type == rhs->ts.type
1766           || (gfc_numeric_ts (&lhs->ts)
1767               && gfc_numeric_ts (&rhs->ts))))
1768     return FAILURE;
1769
1770   actual = gfc_get_actual_arglist ();
1771   actual->expr = lhs;
1772
1773   actual->next = gfc_get_actual_arglist ();
1774   actual->next->expr = rhs;
1775
1776   sym = NULL;
1777
1778   for (; ns; ns = ns->parent)
1779     {
1780       sym = gfc_search_interface (ns->operator[INTRINSIC_ASSIGN], 1, &actual);
1781       if (sym != NULL)
1782         break;
1783     }
1784
1785   if (sym == NULL)
1786     {
1787       gfc_free (actual->next);
1788       gfc_free (actual);
1789       return FAILURE;
1790     }
1791
1792   /* Replace the assignment with the call.  */
1793   c->op = EXEC_CALL;
1794   c->symtree = find_sym_in_symtree (sym);
1795   c->expr = NULL;
1796   c->expr2 = NULL;
1797   c->ext.actual = actual;
1798
1799   if (gfc_pure (NULL) && !gfc_pure (sym))
1800     {
1801       gfc_error ("Subroutine '%s' called in lieu of assignment at %L must be "
1802                  "PURE", sym->name, &c->loc);
1803       return FAILURE;
1804     }
1805
1806   return SUCCESS;
1807 }
1808
1809
1810 /* Make sure that the interface just parsed is not already present in
1811    the given interface list.  Ambiguity isn't checked yet since module
1812    procedures can be present without interfaces.  */
1813
1814 static try
1815 check_new_interface (gfc_interface * base, gfc_symbol * new)
1816 {
1817   gfc_interface *ip;
1818
1819   for (ip = base; ip; ip = ip->next)
1820     {
1821       if (ip->sym == new)
1822         {
1823           gfc_error ("Entity '%s' at %C is already present in the interface",
1824                      new->name);
1825           return FAILURE;
1826         }
1827     }
1828
1829   return SUCCESS;
1830 }
1831
1832
1833 /* Add a symbol to the current interface.  */
1834
1835 try
1836 gfc_add_interface (gfc_symbol * new)
1837 {
1838   gfc_interface **head, *intr;
1839   gfc_namespace *ns;
1840   gfc_symbol *sym;
1841
1842   switch (current_interface.type)
1843     {
1844     case INTERFACE_NAMELESS:
1845       return SUCCESS;
1846
1847     case INTERFACE_INTRINSIC_OP:
1848       for (ns = current_interface.ns; ns; ns = ns->parent)
1849         if (check_new_interface (ns->operator[current_interface.op], new)
1850             == FAILURE)
1851           return FAILURE;
1852
1853       head = &current_interface.ns->operator[current_interface.op];
1854       break;
1855
1856     case INTERFACE_GENERIC:
1857       for (ns = current_interface.ns; ns; ns = ns->parent)
1858         {
1859           gfc_find_symbol (current_interface.sym->name, ns, 0, &sym);
1860           if (sym == NULL)
1861             continue;
1862
1863           if (check_new_interface (sym->generic, new) == FAILURE)
1864             return FAILURE;
1865         }
1866
1867       head = &current_interface.sym->generic;
1868       break;
1869
1870     case INTERFACE_USER_OP:
1871       if (check_new_interface (current_interface.uop->operator, new) ==
1872           FAILURE)
1873         return FAILURE;
1874
1875       head = &current_interface.uop->operator;
1876       break;
1877
1878     default:
1879       gfc_internal_error ("gfc_add_interface(): Bad interface type");
1880     }
1881
1882   intr = gfc_get_interface ();
1883   intr->sym = new;
1884   intr->where = gfc_current_locus;
1885
1886   intr->next = *head;
1887   *head = intr;
1888
1889   return SUCCESS;
1890 }
1891
1892
1893 /* Gets rid of a formal argument list.  We do not free symbols.
1894    Symbols are freed when a namespace is freed.  */
1895
1896 void
1897 gfc_free_formal_arglist (gfc_formal_arglist * p)
1898 {
1899   gfc_formal_arglist *q;
1900
1901   for (; p; p = q)
1902     {
1903       q = p->next;
1904       gfc_free (p);
1905     }
1906 }