OSDN Git Service

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