OSDN Git Service

* gfortran.h, interface.c, resolve.c, symbol.c: Fix comment
[pf3gnuchains/gcc-fork.git] / gcc / fortran / interface.c
1 /* Deal with interfaces.
2    Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007
3    Free Software 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 /* 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   switch (operator)
102     {
103     case INTRINSIC_UPLUS:
104       operator = INTRINSIC_PLUS;
105       break;
106     case INTRINSIC_UMINUS:
107       operator = INTRINSIC_MINUS;
108       break;
109     default:
110       break;
111     }
112
113   return operator;
114 }
115
116
117 /* Match a generic specification.  Depending on which type of
118    interface is found, the 'name' or 'operator' pointers may be set.
119    This subroutine doesn't return MATCH_NO.  */
120
121 match
122 gfc_match_generic_spec (interface_type *type,
123                         char *name,
124                         gfc_intrinsic_op *operator)
125 {
126   char buffer[GFC_MAX_SYMBOL_LEN + 1];
127   match m;
128   gfc_intrinsic_op i;
129
130   if (gfc_match (" assignment ( = )") == MATCH_YES)
131     {
132       *type = INTERFACE_INTRINSIC_OP;
133       *operator = INTRINSIC_ASSIGN;
134       return MATCH_YES;
135     }
136
137   if (gfc_match (" operator ( %o )", &i) == MATCH_YES)
138     {                           /* Operator i/f */
139       *type = INTERFACE_INTRINSIC_OP;
140       *operator = fold_unary (i);
141       return MATCH_YES;
142     }
143
144   if (gfc_match (" operator ( ") == MATCH_YES)
145     {
146       m = gfc_match_defined_op_name (buffer, 1);
147       if (m == MATCH_NO)
148         goto syntax;
149       if (m != MATCH_YES)
150         return MATCH_ERROR;
151
152       m = gfc_match_char (')');
153       if (m == MATCH_NO)
154         goto syntax;
155       if (m != MATCH_YES)
156         return MATCH_ERROR;
157
158       strcpy (name, buffer);
159       *type = INTERFACE_USER_OP;
160       return MATCH_YES;
161     }
162
163   if (gfc_match_name (buffer) == MATCH_YES)
164     {
165       strcpy (name, buffer);
166       *type = INTERFACE_GENERIC;
167       return MATCH_YES;
168     }
169
170   *type = INTERFACE_NAMELESS;
171   return MATCH_YES;
172
173 syntax:
174   gfc_error ("Syntax error in generic specification at %C");
175   return MATCH_ERROR;
176 }
177
178
179 /* Match one of the five forms of an interface statement.  */
180
181 match
182 gfc_match_interface (void)
183 {
184   char name[GFC_MAX_SYMBOL_LEN + 1];
185   interface_type type;
186   gfc_symbol *sym;
187   gfc_intrinsic_op operator;
188   match m;
189
190   m = gfc_match_space ();
191
192   if (gfc_match_generic_spec (&type, name, &operator) == MATCH_ERROR)
193     return MATCH_ERROR;
194
195   /* If we're not looking at the end of the statement now, or if this
196      is not a nameless interface but we did not see a space, punt.  */
197   if (gfc_match_eos () != MATCH_YES
198       || (type != INTERFACE_NAMELESS && m != MATCH_YES))
199     {
200       gfc_error ("Syntax error: Trailing garbage in INTERFACE statement "
201                  "at %C");
202       return MATCH_ERROR;
203     }
204
205   current_interface.type = type;
206
207   switch (type)
208     {
209     case INTERFACE_GENERIC:
210       if (gfc_get_symbol (name, NULL, &sym))
211         return MATCH_ERROR;
212
213       if (!sym->attr.generic 
214           && gfc_add_generic (&sym->attr, sym->name, NULL) == FAILURE)
215         return MATCH_ERROR;
216
217       if (sym->attr.dummy)
218         {
219           gfc_error ("Dummy procedure '%s' at %C cannot have a "
220                      "generic interface", sym->name);
221           return MATCH_ERROR;
222         }
223
224       current_interface.sym = gfc_new_block = sym;
225       break;
226
227     case INTERFACE_USER_OP:
228       current_interface.uop = gfc_get_uop (name);
229       break;
230
231     case INTERFACE_INTRINSIC_OP:
232       current_interface.op = operator;
233       break;
234
235     case INTERFACE_NAMELESS:
236       break;
237     }
238
239   return MATCH_YES;
240 }
241
242
243 /* Match the different sort of generic-specs that can be present after
244    the END INTERFACE itself.  */
245
246 match
247 gfc_match_end_interface (void)
248 {
249   char name[GFC_MAX_SYMBOL_LEN + 1];
250   interface_type type;
251   gfc_intrinsic_op operator;
252   match m;
253
254   m = gfc_match_space ();
255
256   if (gfc_match_generic_spec (&type, name, &operator) == MATCH_ERROR)
257     return MATCH_ERROR;
258
259   /* If we're not looking at the end of the statement now, or if this
260      is not a nameless interface but we did not see a space, punt.  */
261   if (gfc_match_eos () != MATCH_YES
262       || (type != INTERFACE_NAMELESS && m != MATCH_YES))
263     {
264       gfc_error ("Syntax error: Trailing garbage in END INTERFACE "
265                  "statement at %C");
266       return MATCH_ERROR;
267     }
268
269   m = MATCH_YES;
270
271   switch (current_interface.type)
272     {
273     case INTERFACE_NAMELESS:
274       if (type != current_interface.type)
275         {
276           gfc_error ("Expected a nameless interface at %C");
277           m = MATCH_ERROR;
278         }
279
280       break;
281
282     case INTERFACE_INTRINSIC_OP:
283       if (type != current_interface.type || operator != current_interface.op)
284         {
285
286           if (current_interface.op == INTRINSIC_ASSIGN)
287             gfc_error ("Expected 'END INTERFACE ASSIGNMENT (=)' at %C");
288           else
289             gfc_error ("Expecting 'END INTERFACE OPERATOR (%s)' at %C",
290                        gfc_op2string (current_interface.op));
291
292           m = MATCH_ERROR;
293         }
294
295       break;
296
297     case INTERFACE_USER_OP:
298       /* Comparing the symbol node names is OK because only use-associated
299          symbols can be renamed.  */
300       if (type != current_interface.type
301           || strcmp (current_interface.uop->name, name) != 0)
302         {
303           gfc_error ("Expecting 'END INTERFACE OPERATOR (.%s.)' at %C",
304                      current_interface.uop->name);
305           m = MATCH_ERROR;
306         }
307
308       break;
309
310     case INTERFACE_GENERIC:
311       if (type != current_interface.type
312           || strcmp (current_interface.sym->name, name) != 0)
313         {
314           gfc_error ("Expecting 'END INTERFACE %s' at %C",
315                      current_interface.sym->name);
316           m = MATCH_ERROR;
317         }
318
319       break;
320     }
321
322   return m;
323 }
324
325
326 /* Compare two derived types using the criteria in 4.4.2 of the standard,
327    recursing through gfc_compare_types for the components.  */
328
329 int
330 gfc_compare_derived_types (gfc_symbol *derived1, gfc_symbol *derived2)
331 {
332   gfc_component *dt1, *dt2;
333
334   /* Special case for comparing derived types across namespaces.  If the
335      true names and module names are the same and the module name is
336      nonnull, then they are equal.  */
337   if (derived1 != NULL && derived2 != NULL
338       && strcmp (derived1->name, derived2->name) == 0
339       && derived1->module != NULL && derived2->module != NULL
340       && strcmp (derived1->module, derived2->module) == 0)
341     return 1;
342
343   /* Compare type via the rules of the standard.  Both types must have
344      the SEQUENCE attribute to be equal.  */
345
346   if (strcmp (derived1->name, derived2->name))
347     return 0;
348
349   if (derived1->component_access == ACCESS_PRIVATE
350       || derived2->component_access == ACCESS_PRIVATE)
351     return 0;
352
353   if (derived1->attr.sequence == 0 || derived2->attr.sequence == 0)
354     return 0;
355
356   dt1 = derived1->components;
357   dt2 = derived2->components;
358
359   /* Since subtypes of SEQUENCE types must be SEQUENCE types as well, a
360      simple test can speed things up.  Otherwise, lots of things have to
361      match.  */
362   for (;;)
363     {
364       if (strcmp (dt1->name, dt2->name) != 0)
365         return 0;
366
367       if (dt1->access != dt2->access)
368         return 0;
369
370       if (dt1->pointer != dt2->pointer)
371         return 0;
372
373       if (dt1->dimension != dt2->dimension)
374         return 0;
375
376      if (dt1->allocatable != dt2->allocatable)
377         return 0;
378
379       if (dt1->dimension && gfc_compare_array_spec (dt1->as, dt2->as) == 0)
380         return 0;
381
382       if (gfc_compare_types (&dt1->ts, &dt2->ts) == 0)
383         return 0;
384
385       dt1 = dt1->next;
386       dt2 = dt2->next;
387
388       if (dt1 == NULL && dt2 == NULL)
389         break;
390       if (dt1 == NULL || dt2 == NULL)
391         return 0;
392     }
393
394   return 1;
395 }
396
397
398 /* Compare two typespecs, recursively if necessary.  */
399
400 int
401 gfc_compare_types (gfc_typespec *ts1, gfc_typespec *ts2)
402 {
403   /* See if one of the typespecs is a BT_VOID, which is what is being used
404      to allow the funcs like c_f_pointer to accept any pointer type.
405      TODO: Possibly should narrow this to just the one typespec coming in
406      that is for the formal arg, but oh well.  */
407   if (ts1->type == BT_VOID || ts2->type == BT_VOID)
408     return 1;
409    
410   if (ts1->type != ts2->type)
411     return 0;
412   if (ts1->type != BT_DERIVED)
413     return (ts1->kind == ts2->kind);
414
415   /* Compare derived types.  */
416   if (ts1->derived == ts2->derived)
417     return 1;
418
419   return gfc_compare_derived_types (ts1->derived ,ts2->derived);
420 }
421
422
423 /* Given two symbols that are formal arguments, compare their ranks
424    and types.  Returns nonzero if they have the same rank and type,
425    zero otherwise.  */
426
427 static int
428 compare_type_rank (gfc_symbol *s1, gfc_symbol *s2)
429 {
430   int r1, r2;
431
432   r1 = (s1->as != NULL) ? s1->as->rank : 0;
433   r2 = (s2->as != NULL) ? s2->as->rank : 0;
434
435   if (r1 != r2)
436     return 0;                   /* Ranks differ.  */
437
438   return gfc_compare_types (&s1->ts, &s2->ts);
439 }
440
441
442 static int compare_interfaces (gfc_symbol *, gfc_symbol *, int);
443
444 /* Given two symbols that are formal arguments, compare their types
445    and rank and their formal interfaces if they are both dummy
446    procedures.  Returns nonzero if the same, zero if different.  */
447
448 static int
449 compare_type_rank_if (gfc_symbol *s1, gfc_symbol *s2)
450 {
451   if (s1 == NULL || s2 == NULL)
452     return s1 == s2 ? 1 : 0;
453
454   if (s1->attr.flavor != FL_PROCEDURE && s2->attr.flavor != FL_PROCEDURE)
455     return compare_type_rank (s1, s2);
456
457   if (s1->attr.flavor != FL_PROCEDURE || s2->attr.flavor != FL_PROCEDURE)
458     return 0;
459
460   /* At this point, both symbols are procedures.  */
461   if ((s1->attr.function == 0 && s1->attr.subroutine == 0)
462       || (s2->attr.function == 0 && s2->attr.subroutine == 0))
463     return 0;
464
465   if (s1->attr.function != s2->attr.function
466       || s1->attr.subroutine != s2->attr.subroutine)
467     return 0;
468
469   if (s1->attr.function && compare_type_rank (s1, s2) == 0)
470     return 0;
471
472   /* Originally, gfortran recursed here to check the interfaces of passed
473      procedures.  This is explicitly not required by the standard.  */
474   return 1;
475 }
476
477
478 /* Given a formal argument list and a keyword name, search the list
479    for that keyword.  Returns the correct symbol node if found, NULL
480    if not found.  */
481
482 static gfc_symbol *
483 find_keyword_arg (const char *name, gfc_formal_arglist *f)
484 {
485   for (; f; f = f->next)
486     if (strcmp (f->sym->name, name) == 0)
487       return f->sym;
488
489   return NULL;
490 }
491
492
493 /******** Interface checking subroutines **********/
494
495
496 /* Given an operator interface and the operator, make sure that all
497    interfaces for that operator are legal.  */
498
499 static void
500 check_operator_interface (gfc_interface *intr, gfc_intrinsic_op operator)
501 {
502   gfc_formal_arglist *formal;
503   sym_intent i1, i2;
504   gfc_symbol *sym;
505   bt t1, t2;
506   int args, r1, r2, k1, k2;
507
508   if (intr == NULL)
509     return;
510
511   args = 0;
512   t1 = t2 = BT_UNKNOWN;
513   i1 = i2 = INTENT_UNKNOWN;
514   r1 = r2 = -1;
515   k1 = k2 = -1;
516
517   for (formal = intr->sym->formal; formal; formal = formal->next)
518     {
519       sym = formal->sym;
520       if (sym == NULL)
521         {
522           gfc_error ("Alternate return cannot appear in operator "
523                      "interface at %L", &intr->where);
524           return;
525         }
526       if (args == 0)
527         {
528           t1 = sym->ts.type;
529           i1 = sym->attr.intent;
530           r1 = (sym->as != NULL) ? sym->as->rank : 0;
531           k1 = sym->ts.kind;
532         }
533       if (args == 1)
534         {
535           t2 = sym->ts.type;
536           i2 = sym->attr.intent;
537           r2 = (sym->as != NULL) ? sym->as->rank : 0;
538           k2 = sym->ts.kind;
539         }
540       args++;
541     }
542
543   sym = intr->sym;
544
545   /* Only +, - and .not. can be unary operators.
546      .not. cannot be a binary operator.  */
547   if (args == 0 || args > 2 || (args == 1 && operator != INTRINSIC_PLUS
548                                 && operator != INTRINSIC_MINUS
549                                 && operator != INTRINSIC_NOT)
550       || (args == 2 && operator == INTRINSIC_NOT))
551     {
552       gfc_error ("Operator interface at %L has the wrong number of arguments",
553                  &intr->where);
554       return;
555     }
556
557   /* Check that intrinsics are mapped to functions, except
558      INTRINSIC_ASSIGN which should map to a subroutine.  */
559   if (operator == INTRINSIC_ASSIGN)
560     {
561       if (!sym->attr.subroutine)
562         {
563           gfc_error ("Assignment operator interface at %L must be "
564                      "a SUBROUTINE", &intr->where);
565           return;
566         }
567       if (args != 2)
568         {
569           gfc_error ("Assignment operator interface at %L must have "
570                      "two arguments", &intr->where);
571           return;
572         }
573       if (sym->formal->sym->ts.type != BT_DERIVED
574           && sym->formal->next->sym->ts.type != BT_DERIVED
575           && (sym->formal->sym->ts.type == sym->formal->next->sym->ts.type
576               || (gfc_numeric_ts (&sym->formal->sym->ts)
577                   && gfc_numeric_ts (&sym->formal->next->sym->ts))))
578         {
579           gfc_error ("Assignment operator interface at %L must not redefine "
580                      "an INTRINSIC type assignment", &intr->where);
581           return;
582         }
583     }
584   else
585     {
586       if (!sym->attr.function)
587         {
588           gfc_error ("Intrinsic operator interface at %L must be a FUNCTION",
589                      &intr->where);
590           return;
591         }
592     }
593
594   /* Check intents on operator interfaces.  */
595   if (operator == INTRINSIC_ASSIGN)
596     {
597       if (i1 != INTENT_OUT && i1 != INTENT_INOUT)
598         gfc_error ("First argument of defined assignment at %L must be "
599                    "INTENT(IN) or INTENT(INOUT)", &intr->where);
600
601       if (i2 != INTENT_IN)
602         gfc_error ("Second argument of defined assignment at %L must be "
603                    "INTENT(IN)", &intr->where);
604     }
605   else
606     {
607       if (i1 != INTENT_IN)
608         gfc_error ("First argument of operator interface at %L must be "
609                    "INTENT(IN)", &intr->where);
610
611       if (args == 2 && i2 != INTENT_IN)
612         gfc_error ("Second argument of operator interface at %L must be "
613                    "INTENT(IN)", &intr->where);
614     }
615
616   /* From now on, all we have to do is check that the operator definition
617      doesn't conflict with an intrinsic operator. The rules for this
618      game are defined in 7.1.2 and 7.1.3 of both F95 and F2003 standards,
619      as well as 12.3.2.1.1 of Fortran 2003:
620
621      "If the operator is an intrinsic-operator (R310), the number of
622      function arguments shall be consistent with the intrinsic uses of
623      that operator, and the types, kind type parameters, or ranks of the
624      dummy arguments shall differ from those required for the intrinsic
625      operation (7.1.2)."  */
626
627 #define IS_NUMERIC_TYPE(t) \
628   ((t) == BT_INTEGER || (t) == BT_REAL || (t) == BT_COMPLEX)
629
630   /* Unary ops are easy, do them first.  */
631   if (operator == INTRINSIC_NOT)
632     {
633       if (t1 == BT_LOGICAL)
634         goto bad_repl;
635       else
636         return;
637     }
638
639   if (args == 1 && (operator == INTRINSIC_PLUS || operator == INTRINSIC_MINUS))
640     {
641       if (IS_NUMERIC_TYPE (t1))
642         goto bad_repl;
643       else
644         return;
645     }
646
647   /* Character intrinsic operators have same character kind, thus
648      operator definitions with operands of different character kinds
649      are always safe.  */
650   if (t1 == BT_CHARACTER && t2 == BT_CHARACTER && k1 != k2)
651     return;
652
653   /* Intrinsic operators always perform on arguments of same rank,
654      so different ranks is also always safe.  (rank == 0) is an exception
655      to that, because all intrinsic operators are elemental.  */
656   if (r1 != r2 && r1 != 0 && r2 != 0)
657     return;
658
659   switch (operator)
660   {
661     case INTRINSIC_EQ:
662     case INTRINSIC_EQ_OS:
663     case INTRINSIC_NE:
664     case INTRINSIC_NE_OS:
665       if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
666         goto bad_repl;
667       /* Fall through.  */
668
669     case INTRINSIC_PLUS:
670     case INTRINSIC_MINUS:
671     case INTRINSIC_TIMES:
672     case INTRINSIC_DIVIDE:
673     case INTRINSIC_POWER:
674       if (IS_NUMERIC_TYPE (t1) && IS_NUMERIC_TYPE (t2))
675         goto bad_repl;
676       break;
677
678     case INTRINSIC_GT:
679     case INTRINSIC_GT_OS:
680     case INTRINSIC_GE:
681     case INTRINSIC_GE_OS:
682     case INTRINSIC_LT:
683     case INTRINSIC_LT_OS:
684     case INTRINSIC_LE:
685     case INTRINSIC_LE_OS:
686       if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
687         goto bad_repl;
688       if ((t1 == BT_INTEGER || t1 == BT_REAL)
689           && (t2 == BT_INTEGER || t2 == BT_REAL))
690         goto bad_repl;
691       break;
692
693     case INTRINSIC_CONCAT:
694       if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
695         goto bad_repl;
696       break;
697
698     case INTRINSIC_AND:
699     case INTRINSIC_OR:
700     case INTRINSIC_EQV:
701     case INTRINSIC_NEQV:
702       if (t1 == BT_LOGICAL && t2 == BT_LOGICAL)
703         goto bad_repl;
704       break;
705
706     default:
707       break;
708   }
709
710   return;
711
712 #undef IS_NUMERIC_TYPE
713
714 bad_repl:
715   gfc_error ("Operator interface at %L conflicts with intrinsic interface",
716              &intr->where);
717   return;
718 }
719
720
721 /* Given a pair of formal argument lists, we see if the two lists can
722    be distinguished by counting the number of nonoptional arguments of
723    a given type/rank in f1 and seeing if there are less then that
724    number of those arguments in f2 (including optional arguments).
725    Since this test is asymmetric, it has to be called twice to make it
726    symmetric.  Returns nonzero if the argument lists are incompatible
727    by this test.  This subroutine implements rule 1 of section
728    14.1.2.3.  */
729
730 static int
731 count_types_test (gfc_formal_arglist *f1, gfc_formal_arglist *f2)
732 {
733   int rc, ac1, ac2, i, j, k, n1;
734   gfc_formal_arglist *f;
735
736   typedef struct
737   {
738     int flag;
739     gfc_symbol *sym;
740   }
741   arginfo;
742
743   arginfo *arg;
744
745   n1 = 0;
746
747   for (f = f1; f; f = f->next)
748     n1++;
749
750   /* Build an array of integers that gives the same integer to
751      arguments of the same type/rank.  */
752   arg = gfc_getmem (n1 * sizeof (arginfo));
753
754   f = f1;
755   for (i = 0; i < n1; i++, f = f->next)
756     {
757       arg[i].flag = -1;
758       arg[i].sym = f->sym;
759     }
760
761   k = 0;
762
763   for (i = 0; i < n1; i++)
764     {
765       if (arg[i].flag != -1)
766         continue;
767
768       if (arg[i].sym && arg[i].sym->attr.optional)
769         continue;               /* Skip optional arguments.  */
770
771       arg[i].flag = k;
772
773       /* Find other nonoptional arguments of the same type/rank.  */
774       for (j = i + 1; j < n1; j++)
775         if ((arg[j].sym == NULL || !arg[j].sym->attr.optional)
776             && compare_type_rank_if (arg[i].sym, arg[j].sym))
777           arg[j].flag = k;
778
779       k++;
780     }
781
782   /* Now loop over each distinct type found in f1.  */
783   k = 0;
784   rc = 0;
785
786   for (i = 0; i < n1; i++)
787     {
788       if (arg[i].flag != k)
789         continue;
790
791       ac1 = 1;
792       for (j = i + 1; j < n1; j++)
793         if (arg[j].flag == k)
794           ac1++;
795
796       /* Count the number of arguments in f2 with that type, including
797          those that are optional.  */
798       ac2 = 0;
799
800       for (f = f2; f; f = f->next)
801         if (compare_type_rank_if (arg[i].sym, f->sym))
802           ac2++;
803
804       if (ac1 > ac2)
805         {
806           rc = 1;
807           break;
808         }
809
810       k++;
811     }
812
813   gfc_free (arg);
814
815   return rc;
816 }
817
818
819 /* Perform the abbreviated correspondence test for operators.  The
820    arguments cannot be optional and are always ordered correctly,
821    which makes this test much easier than that for generic tests.
822
823    This subroutine is also used when comparing a formal and actual
824    argument list when an actual parameter is a dummy procedure.  At
825    that point, two formal interfaces must be compared for equality
826    which is what happens here.  */
827
828 static int
829 operator_correspondence (gfc_formal_arglist *f1, gfc_formal_arglist *f2)
830 {
831   for (;;)
832     {
833       if (f1 == NULL && f2 == NULL)
834         break;
835       if (f1 == NULL || f2 == NULL)
836         return 1;
837
838       if (!compare_type_rank (f1->sym, f2->sym))
839         return 1;
840
841       f1 = f1->next;
842       f2 = f2->next;
843     }
844
845   return 0;
846 }
847
848
849 /* Perform the correspondence test in rule 2 of section 14.1.2.3.
850    Returns zero if no argument is found that satisfies rule 2, nonzero
851    otherwise.
852
853    This test is also not symmetric in f1 and f2 and must be called
854    twice.  This test finds problems caused by sorting the actual
855    argument list with keywords.  For example:
856
857    INTERFACE FOO
858        SUBROUTINE F1(A, B)
859            INTEGER :: A ; REAL :: B
860        END SUBROUTINE F1
861
862        SUBROUTINE F2(B, A)
863            INTEGER :: A ; REAL :: B
864        END SUBROUTINE F1
865    END INTERFACE FOO
866
867    At this point, 'CALL FOO(A=1, B=1.0)' is ambiguous.  */
868
869 static int
870 generic_correspondence (gfc_formal_arglist *f1, gfc_formal_arglist *f2)
871 {
872   gfc_formal_arglist *f2_save, *g;
873   gfc_symbol *sym;
874
875   f2_save = f2;
876
877   while (f1)
878     {
879       if (f1->sym->attr.optional)
880         goto next;
881
882       if (f2 != NULL && compare_type_rank (f1->sym, f2->sym))
883         goto next;
884
885       /* Now search for a disambiguating keyword argument starting at
886          the current non-match.  */
887       for (g = f1; g; g = g->next)
888         {
889           if (g->sym->attr.optional)
890             continue;
891
892           sym = find_keyword_arg (g->sym->name, f2_save);
893           if (sym == NULL || !compare_type_rank (g->sym, sym))
894             return 1;
895         }
896
897     next:
898       f1 = f1->next;
899       if (f2 != NULL)
900         f2 = f2->next;
901     }
902
903   return 0;
904 }
905
906
907 /* 'Compare' two formal interfaces associated with a pair of symbols.
908    We return nonzero if there exists an actual argument list that
909    would be ambiguous between the two interfaces, zero otherwise.  */
910
911 static int
912 compare_interfaces (gfc_symbol *s1, gfc_symbol *s2, int generic_flag)
913 {
914   gfc_formal_arglist *f1, *f2;
915
916   if (s1->attr.function != s2->attr.function
917       && s1->attr.subroutine != s2->attr.subroutine)
918     return 0;           /* Disagreement between function/subroutine.  */
919
920   f1 = s1->formal;
921   f2 = s2->formal;
922
923   if (f1 == NULL && f2 == NULL)
924     return 1;                   /* Special case.  */
925
926   if (count_types_test (f1, f2))
927     return 0;
928   if (count_types_test (f2, f1))
929     return 0;
930
931   if (generic_flag)
932     {
933       if (generic_correspondence (f1, f2))
934         return 0;
935       if (generic_correspondence (f2, f1))
936         return 0;
937     }
938   else
939     {
940       if (operator_correspondence (f1, f2))
941         return 0;
942     }
943
944   return 1;
945 }
946
947
948 /* Given a pointer to an interface pointer, remove duplicate
949    interfaces and make sure that all symbols are either functions or
950    subroutines.  Returns nonzero if something goes wrong.  */
951
952 static int
953 check_interface0 (gfc_interface *p, const char *interface_name)
954 {
955   gfc_interface *psave, *q, *qlast;
956
957   psave = p;
958   /* Make sure all symbols in the interface have been defined as
959      functions or subroutines.  */
960   for (; p; p = p->next)
961     if (!p->sym->attr.function && !p->sym->attr.subroutine)
962       {
963         gfc_error ("Procedure '%s' in %s at %L is neither function nor "
964                    "subroutine", p->sym->name, interface_name,
965                    &p->sym->declared_at);
966         return 1;
967       }
968   p = psave;
969
970   /* Remove duplicate interfaces in this interface list.  */
971   for (; p; p = p->next)
972     {
973       qlast = p;
974
975       for (q = p->next; q;)
976         {
977           if (p->sym != q->sym)
978             {
979               qlast = q;
980               q = q->next;
981             }
982           else
983             {
984               /* Duplicate interface.  */
985               qlast->next = q->next;
986               gfc_free (q);
987               q = qlast->next;
988             }
989         }
990     }
991
992   return 0;
993 }
994
995
996 /* Check lists of interfaces to make sure that no two interfaces are
997    ambiguous.  Duplicate interfaces (from the same symbol) are OK here.  */
998
999 static int
1000 check_interface1 (gfc_interface *p, gfc_interface *q0,
1001                   int generic_flag, const char *interface_name,
1002                   bool referenced)
1003 {
1004   gfc_interface *q;
1005   for (; p; p = p->next)
1006     for (q = q0; q; q = q->next)
1007       {
1008         if (p->sym == q->sym)
1009           continue;             /* Duplicates OK here.  */
1010
1011         if (p->sym->name == q->sym->name && p->sym->module == q->sym->module)
1012           continue;
1013
1014         if (compare_interfaces (p->sym, q->sym, generic_flag))
1015           {
1016             if (referenced)
1017               {
1018                 gfc_error ("Ambiguous interfaces '%s' and '%s' in %s at %L",
1019                            p->sym->name, q->sym->name, interface_name,
1020                            &p->where);
1021               }
1022
1023             if (!p->sym->attr.use_assoc && q->sym->attr.use_assoc)
1024               gfc_warning ("Ambiguous interfaces '%s' and '%s' in %s at %L",
1025                            p->sym->name, q->sym->name, interface_name,
1026                            &p->where);
1027             return 1;
1028           }
1029       }
1030   return 0;
1031 }
1032
1033
1034 /* Check the generic and operator interfaces of symbols to make sure
1035    that none of the interfaces conflict.  The check has to be done
1036    after all of the symbols are actually loaded.  */
1037
1038 static void
1039 check_sym_interfaces (gfc_symbol *sym)
1040 {
1041   char interface_name[100];
1042   bool k;
1043   gfc_interface *p;
1044
1045   if (sym->ns != gfc_current_ns)
1046     return;
1047
1048   if (sym->generic != NULL)
1049     {
1050       sprintf (interface_name, "generic interface '%s'", sym->name);
1051       if (check_interface0 (sym->generic, interface_name))
1052         return;
1053
1054       for (p = sym->generic; p; p = p->next)
1055         {
1056           if (!p->sym->attr.use_assoc && p->sym->attr.mod_proc
1057               && p->sym->attr.if_source != IFSRC_DECL)
1058             {
1059               gfc_error ("MODULE PROCEDURE '%s' at %L does not come "
1060                          "from a module", p->sym->name, &p->where);
1061               return;
1062             }
1063         }
1064
1065       /* Originally, this test was applied to host interfaces too;
1066          this is incorrect since host associated symbols, from any
1067          source, cannot be ambiguous with local symbols.  */
1068       k = sym->attr.referenced || !sym->attr.use_assoc;
1069       if (check_interface1 (sym->generic, sym->generic, 1, interface_name, k))
1070         sym->attr.ambiguous_interfaces = 1;
1071     }
1072 }
1073
1074
1075 static void
1076 check_uop_interfaces (gfc_user_op *uop)
1077 {
1078   char interface_name[100];
1079   gfc_user_op *uop2;
1080   gfc_namespace *ns;
1081
1082   sprintf (interface_name, "operator interface '%s'", uop->name);
1083   if (check_interface0 (uop->operator, interface_name))
1084     return;
1085
1086   for (ns = gfc_current_ns; ns; ns = ns->parent)
1087     {
1088       uop2 = gfc_find_uop (uop->name, ns);
1089       if (uop2 == NULL)
1090         continue;
1091
1092       check_interface1 (uop->operator, uop2->operator, 0,
1093                         interface_name, true);
1094     }
1095 }
1096
1097
1098 /* For the namespace, check generic, user operator and intrinsic
1099    operator interfaces for consistency and to remove duplicate
1100    interfaces.  We traverse the whole namespace, counting on the fact
1101    that most symbols will not have generic or operator interfaces.  */
1102
1103 void
1104 gfc_check_interfaces (gfc_namespace *ns)
1105 {
1106   gfc_namespace *old_ns, *ns2;
1107   char interface_name[100];
1108   gfc_intrinsic_op i;
1109
1110   old_ns = gfc_current_ns;
1111   gfc_current_ns = ns;
1112
1113   gfc_traverse_ns (ns, check_sym_interfaces);
1114
1115   gfc_traverse_user_op (ns, check_uop_interfaces);
1116
1117   for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++)
1118     {
1119       if (i == INTRINSIC_USER)
1120         continue;
1121
1122       if (i == INTRINSIC_ASSIGN)
1123         strcpy (interface_name, "intrinsic assignment operator");
1124       else
1125         sprintf (interface_name, "intrinsic '%s' operator",
1126                  gfc_op2string (i));
1127
1128       if (check_interface0 (ns->operator[i], interface_name))
1129         continue;
1130
1131       check_operator_interface (ns->operator[i], i);
1132
1133       for (ns2 = ns; ns2; ns2 = ns2->parent)
1134         {
1135           if (check_interface1 (ns->operator[i], ns2->operator[i], 0,
1136                                 interface_name, true))
1137             goto done;
1138
1139           switch (i)
1140             {
1141               case INTRINSIC_EQ:
1142                 if (check_interface1 (ns->operator[i], ns2->operator[INTRINSIC_EQ_OS],
1143                                       0, interface_name, true)) goto done;
1144                 break;
1145
1146               case INTRINSIC_EQ_OS:
1147                 if (check_interface1 (ns->operator[i], ns2->operator[INTRINSIC_EQ],
1148                                       0, interface_name, true)) goto done;
1149                 break;
1150
1151               case INTRINSIC_NE:
1152                 if (check_interface1 (ns->operator[i], ns2->operator[INTRINSIC_NE_OS],
1153                                       0, interface_name, true)) goto done;
1154                 break;
1155
1156               case INTRINSIC_NE_OS:
1157                 if (check_interface1 (ns->operator[i], ns2->operator[INTRINSIC_NE],
1158                                       0, interface_name, true)) goto done;
1159                 break;
1160
1161               case INTRINSIC_GT:
1162                 if (check_interface1 (ns->operator[i], ns2->operator[INTRINSIC_GT_OS],
1163                                       0, interface_name, true)) goto done;
1164                 break;
1165
1166               case INTRINSIC_GT_OS:
1167                 if (check_interface1 (ns->operator[i], ns2->operator[INTRINSIC_GT],
1168                                       0, interface_name, true)) goto done;
1169                 break;
1170
1171               case INTRINSIC_GE:
1172                 if (check_interface1 (ns->operator[i], ns2->operator[INTRINSIC_GE_OS],
1173                                       0, interface_name, true)) goto done;
1174                 break;
1175
1176               case INTRINSIC_GE_OS:
1177                 if (check_interface1 (ns->operator[i], ns2->operator[INTRINSIC_GE],
1178                                       0, interface_name, true)) goto done;
1179                 break;
1180
1181               case INTRINSIC_LT:
1182                 if (check_interface1 (ns->operator[i], ns2->operator[INTRINSIC_LT_OS],
1183                                       0, interface_name, true)) goto done;
1184                 break;
1185
1186               case INTRINSIC_LT_OS:
1187                 if (check_interface1 (ns->operator[i], ns2->operator[INTRINSIC_LT],
1188                                       0, interface_name, true)) goto done;
1189                 break;
1190
1191               case INTRINSIC_LE:
1192                 if (check_interface1 (ns->operator[i], ns2->operator[INTRINSIC_LE_OS],
1193                                       0, interface_name, true)) goto done;
1194                 break;
1195
1196               case INTRINSIC_LE_OS:
1197                 if (check_interface1 (ns->operator[i], ns2->operator[INTRINSIC_LE],
1198                                       0, interface_name, true)) goto done;
1199                 break;
1200
1201               default:
1202                 break;
1203             }
1204         }
1205     }
1206
1207 done:
1208   gfc_current_ns = old_ns;
1209 }
1210
1211
1212 static int
1213 symbol_rank (gfc_symbol *sym)
1214 {
1215   return (sym->as == NULL) ? 0 : sym->as->rank;
1216 }
1217
1218
1219 /* Given a symbol of a formal argument list and an expression, if the
1220    formal argument is allocatable, check that the actual argument is
1221    allocatable. Returns nonzero if compatible, zero if not compatible.  */
1222
1223 static int
1224 compare_allocatable (gfc_symbol *formal, gfc_expr *actual)
1225 {
1226   symbol_attribute attr;
1227
1228   if (formal->attr.allocatable)
1229     {
1230       attr = gfc_expr_attr (actual);
1231       if (!attr.allocatable)
1232         return 0;
1233     }
1234
1235   return 1;
1236 }
1237
1238
1239 /* Given a symbol of a formal argument list and an expression, if the
1240    formal argument is a pointer, see if the actual argument is a
1241    pointer. Returns nonzero if compatible, zero if not compatible.  */
1242
1243 static int
1244 compare_pointer (gfc_symbol *formal, gfc_expr *actual)
1245 {
1246   symbol_attribute attr;
1247
1248   if (formal->attr.pointer)
1249     {
1250       attr = gfc_expr_attr (actual);
1251       if (!attr.pointer)
1252         return 0;
1253     }
1254
1255   return 1;
1256 }
1257
1258
1259 /* Given a symbol of a formal argument list and an expression, see if
1260    the two are compatible as arguments.  Returns nonzero if
1261    compatible, zero if not compatible.  */
1262
1263 static int
1264 compare_parameter (gfc_symbol *formal, gfc_expr *actual,
1265                    int ranks_must_agree, int is_elemental)
1266 {
1267   gfc_ref *ref;
1268
1269   /* If the formal arg has type BT_VOID, it's to one of the iso_c_binding
1270      procs c_f_pointer or c_f_procpointer, and we need to accept most
1271      pointers the user could give us.  This should allow that.  */
1272   if (formal->ts.type == BT_VOID)
1273     return 1;
1274
1275   if (formal->ts.type == BT_DERIVED
1276       && formal->ts.derived && formal->ts.derived->ts.is_iso_c
1277       && actual->ts.type == BT_DERIVED
1278       && actual->ts.derived && actual->ts.derived->ts.is_iso_c)
1279     return 1;
1280
1281   if (actual->ts.type == BT_PROCEDURE)
1282     {
1283       if (formal->attr.flavor != FL_PROCEDURE)
1284         return 0;
1285
1286       if (formal->attr.function
1287           && !compare_type_rank (formal, actual->symtree->n.sym))
1288         return 0;
1289
1290       if (formal->attr.if_source == IFSRC_UNKNOWN
1291           || actual->symtree->n.sym->attr.external)
1292         return 1;               /* Assume match.  */
1293
1294       return compare_interfaces (formal, actual->symtree->n.sym, 0);
1295     }
1296
1297   if ((actual->expr_type != EXPR_NULL || actual->ts.type != BT_UNKNOWN)
1298       && !gfc_compare_types (&formal->ts, &actual->ts))
1299     return 0;
1300
1301   if (symbol_rank (formal) == actual->rank)
1302     return 1;
1303
1304   /* At this point the ranks didn't agree.  */
1305   if (ranks_must_agree || formal->attr.pointer)
1306     return 0;
1307
1308   if (actual->rank != 0)
1309     return is_elemental || formal->attr.dimension;
1310
1311   /* At this point, we are considering a scalar passed to an array.
1312      This is legal if the scalar is an array element of the right sort.  */
1313   if (formal->as->type == AS_ASSUMED_SHAPE)
1314     return 0;
1315
1316   for (ref = actual->ref; ref; ref = ref->next)
1317     if (ref->type == REF_SUBSTRING)
1318       return 0;
1319
1320   for (ref = actual->ref; ref; ref = ref->next)
1321     if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT)
1322       break;
1323
1324   if (ref == NULL)
1325     return 0;                   /* Not an array element.  */
1326
1327   return 1;
1328 }
1329
1330
1331 /* Given a symbol of a formal argument list and an expression, see if
1332    the two are compatible as arguments.  Returns nonzero if
1333    compatible, zero if not compatible.  */
1334
1335 static int
1336 compare_parameter_protected (gfc_symbol *formal, gfc_expr *actual)
1337 {
1338   if (actual->expr_type != EXPR_VARIABLE)
1339     return 1;
1340
1341   if (!actual->symtree->n.sym->attr.protected)
1342     return 1;
1343
1344   if (!actual->symtree->n.sym->attr.use_assoc)
1345     return 1;
1346
1347   if (formal->attr.intent == INTENT_IN
1348       || formal->attr.intent == INTENT_UNKNOWN)
1349     return 1;
1350
1351   if (!actual->symtree->n.sym->attr.pointer)
1352     return 0;
1353
1354   if (actual->symtree->n.sym->attr.pointer && formal->attr.pointer)
1355     return 0;
1356
1357   return 1;
1358 }
1359
1360
1361 /* Returns the storage size of a symbol (formal argument) or
1362    zero if it cannot be determined.  */
1363
1364 static unsigned long
1365 get_sym_storage_size (gfc_symbol *sym)
1366 {
1367   int i;
1368   unsigned long strlen, elements;
1369
1370   if (sym->ts.type == BT_CHARACTER)
1371     {
1372       if (sym->ts.cl && sym->ts.cl->length
1373           && sym->ts.cl->length->expr_type == EXPR_CONSTANT)
1374         strlen = mpz_get_ui (sym->ts.cl->length->value.integer);
1375       else
1376         return 0;
1377     }
1378   else
1379     strlen = 1; 
1380
1381   if (symbol_rank (sym) == 0)
1382     return strlen;
1383
1384   elements = 1;
1385   if (sym->as->type != AS_EXPLICIT)
1386     return 0;
1387   for (i = 0; i < sym->as->rank; i++)
1388     {
1389       if (!sym->as || sym->as->upper[i]->expr_type != EXPR_CONSTANT
1390           || sym->as->lower[i]->expr_type != EXPR_CONSTANT)
1391         return 0;
1392
1393       elements *= mpz_get_ui (sym->as->upper[i]->value.integer)
1394                   - mpz_get_ui (sym->as->lower[i]->value.integer) + 1L;
1395     }
1396
1397   return strlen*elements;
1398 }
1399
1400
1401 /* Returns the storage size of an expression (actual argument) or
1402    zero if it cannot be determined. For an array element, it returns
1403    the remaining size as the element sequence consists of all storage
1404    units of the actual argument up to the end of the array.  */
1405
1406 static unsigned long
1407 get_expr_storage_size (gfc_expr *e)
1408 {
1409   int i;
1410   long int strlen, elements;
1411   gfc_ref *ref;
1412
1413   if (e == NULL)
1414     return 0;
1415   
1416   if (e->ts.type == BT_CHARACTER)
1417     {
1418       if (e->ts.cl && e->ts.cl->length
1419           && e->ts.cl->length->expr_type == EXPR_CONSTANT)
1420         strlen = mpz_get_si (e->ts.cl->length->value.integer);
1421       else if (e->expr_type == EXPR_CONSTANT
1422                && (e->ts.cl == NULL || e->ts.cl->length == NULL))
1423         strlen = e->value.character.length;
1424       else
1425         return 0;
1426     }
1427   else
1428     strlen = 1; /* Length per element.  */
1429
1430   if (e->rank == 0 && !e->ref)
1431     return strlen;
1432
1433   elements = 1;
1434   if (!e->ref)
1435     {
1436       if (!e->shape)
1437         return 0;
1438       for (i = 0; i < e->rank; i++)
1439         elements *= mpz_get_si (e->shape[i]);
1440       return elements*strlen;
1441     }
1442
1443   for (ref = e->ref; ref; ref = ref->next)
1444     {
1445       if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION
1446           && ref->u.ar.start && ref->u.ar.end && ref->u.ar.stride
1447           && ref->u.ar.as->upper)
1448         for (i = 0; i < ref->u.ar.dimen; i++)
1449           {
1450             long int start, end, stride;
1451             stride = 1;
1452
1453             if (ref->u.ar.stride[i])
1454               {
1455                 if (ref->u.ar.stride[i]->expr_type == EXPR_CONSTANT)
1456                   stride = mpz_get_si (ref->u.ar.stride[i]->value.integer);
1457                 else
1458                   return 0;
1459               }
1460
1461             if (ref->u.ar.start[i])
1462               {
1463                 if (ref->u.ar.start[i]->expr_type == EXPR_CONSTANT)
1464                   start = mpz_get_si (ref->u.ar.start[i]->value.integer);
1465                 else
1466                   return 0;
1467               }
1468             else if (ref->u.ar.as->lower[i]
1469                      && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT)
1470               start = mpz_get_si (ref->u.ar.as->lower[i]->value.integer);
1471             else
1472               return 0;
1473
1474             if (ref->u.ar.end[i])
1475               {
1476                 if (ref->u.ar.end[i]->expr_type == EXPR_CONSTANT)
1477                   end = mpz_get_si (ref->u.ar.end[i]->value.integer);
1478                 else
1479                   return 0;
1480               }
1481             else if (ref->u.ar.as->upper[i]
1482                      && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
1483               end = mpz_get_si (ref->u.ar.as->upper[i]->value.integer);
1484             else
1485               return 0;
1486
1487             elements *= (end - start)/stride + 1L;
1488           }
1489       else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_FULL
1490                && ref->u.ar.as->lower && ref->u.ar.as->upper)
1491         for (i = 0; i < ref->u.ar.as->rank; i++)
1492           {
1493             if (ref->u.ar.as->lower[i] && ref->u.ar.as->upper[i]
1494                 && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT
1495                 && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
1496               elements *= mpz_get_ui (ref->u.ar.as->upper[i]->value.integer)
1497                           - mpz_get_ui (ref->u.ar.as->lower[i]->value.integer)
1498                           + 1L;
1499             else
1500               return 0;
1501           }
1502       else
1503         /* TODO: Determine the number of remaining elements in the element
1504            sequence for array element designators.
1505            See also get_array_index in data.c.  */
1506         return 0;
1507     }
1508
1509   return elements*strlen;
1510 }
1511
1512
1513 /* Given an expression, check whether it is an array section
1514    which has a vector subscript. If it has, one is returned,
1515    otherwise zero.  */
1516
1517 static int
1518 has_vector_subscript (gfc_expr *e)
1519 {
1520   int i;
1521   gfc_ref *ref;
1522
1523   if (e == NULL || e->rank == 0 || e->expr_type != EXPR_VARIABLE)
1524     return 0;
1525
1526   for (ref = e->ref; ref; ref = ref->next)
1527     if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION)
1528       for (i = 0; i < ref->u.ar.dimen; i++)
1529         if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
1530           return 1;
1531
1532   return 0;
1533 }
1534
1535
1536 /* Given formal and actual argument lists, see if they are compatible.
1537    If they are compatible, the actual argument list is sorted to
1538    correspond with the formal list, and elements for missing optional
1539    arguments are inserted. If WHERE pointer is nonnull, then we issue
1540    errors when things don't match instead of just returning the status
1541    code.  */
1542
1543 static int
1544 compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
1545                        int ranks_must_agree, int is_elemental, locus *where)
1546 {
1547   gfc_actual_arglist **new, *a, *actual, temp;
1548   gfc_formal_arglist *f;
1549   int i, n, na;
1550   bool rank_check;
1551   unsigned long actual_size, formal_size;
1552
1553   actual = *ap;
1554
1555   if (actual == NULL && formal == NULL)
1556     return 1;
1557
1558   n = 0;
1559   for (f = formal; f; f = f->next)
1560     n++;
1561
1562   new = (gfc_actual_arglist **) alloca (n * sizeof (gfc_actual_arglist *));
1563
1564   for (i = 0; i < n; i++)
1565     new[i] = NULL;
1566
1567   na = 0;
1568   f = formal;
1569   i = 0;
1570
1571   for (a = actual; a; a = a->next, f = f->next)
1572     {
1573       /* Look for keywords but ignore g77 extensions like %VAL.  */
1574       if (a->name != NULL && a->name[0] != '%')
1575         {
1576           i = 0;
1577           for (f = formal; f; f = f->next, i++)
1578             {
1579               if (f->sym == NULL)
1580                 continue;
1581               if (strcmp (f->sym->name, a->name) == 0)
1582                 break;
1583             }
1584
1585           if (f == NULL)
1586             {
1587               if (where)
1588                 gfc_error ("Keyword argument '%s' at %L is not in "
1589                            "the procedure", a->name, &a->expr->where);
1590               return 0;
1591             }
1592
1593           if (new[i] != NULL)
1594             {
1595               if (where)
1596                 gfc_error ("Keyword argument '%s' at %L is already associated "
1597                            "with another actual argument", a->name,
1598                            &a->expr->where);
1599               return 0;
1600             }
1601         }
1602
1603       if (f == NULL)
1604         {
1605           if (where)
1606             gfc_error ("More actual than formal arguments in procedure "
1607                        "call at %L", where);
1608
1609           return 0;
1610         }
1611
1612       if (f->sym == NULL && a->expr == NULL)
1613         goto match;
1614
1615       if (f->sym == NULL)
1616         {
1617           if (where)
1618             gfc_error ("Missing alternate return spec in subroutine call "
1619                        "at %L", where);
1620           return 0;
1621         }
1622
1623       if (a->expr == NULL)
1624         {
1625           if (where)
1626             gfc_error ("Unexpected alternate return spec in subroutine "
1627                        "call at %L", where);
1628           return 0;
1629         }
1630
1631       rank_check = where != NULL && !is_elemental && f->sym->as
1632                    && (f->sym->as->type == AS_ASSUMED_SHAPE
1633                        || f->sym->as->type == AS_DEFERRED);
1634
1635       if (f->sym->ts.type == BT_CHARACTER && a->expr->ts.type == BT_CHARACTER
1636           && a->expr->rank == 0
1637           && f->sym->as && f->sym->as->type != AS_ASSUMED_SHAPE)
1638         {
1639           if (where && (gfc_option.allow_std & GFC_STD_F2003) == 0)
1640             {
1641               gfc_error ("Fortran 2003: Scalar CHARACTER actual argument "
1642                          "with array dummy argument '%s' at %L",
1643                          f->sym->name, &a->expr->where);
1644               return 0;
1645             }
1646           else if ((gfc_option.allow_std & GFC_STD_F2003) == 0)
1647             return 0;
1648
1649         }
1650       else if (!compare_parameter (f->sym, a->expr,
1651                                    ranks_must_agree || rank_check, is_elemental))
1652         {
1653           if (where)
1654             gfc_error ("Type/rank mismatch in argument '%s' at %L",
1655                        f->sym->name, &a->expr->where);
1656           return 0;
1657         }
1658
1659       if (a->expr->ts.type == BT_CHARACTER
1660            && a->expr->ts.cl && a->expr->ts.cl->length
1661            && a->expr->ts.cl->length->expr_type == EXPR_CONSTANT
1662            && f->sym->ts.cl && f->sym->ts.cl && f->sym->ts.cl->length
1663            && f->sym->ts.cl->length->expr_type == EXPR_CONSTANT)
1664          {
1665            if ((f->sym->attr.pointer || f->sym->attr.allocatable)
1666                && (mpz_cmp (a->expr->ts.cl->length->value.integer,
1667                            f->sym->ts.cl->length->value.integer) != 0))
1668              {
1669                 if (where)
1670                   gfc_warning ("Character length mismatch between actual "
1671                                "argument and pointer or allocatable dummy "
1672                                "argument '%s' at %L",
1673                                f->sym->name, &a->expr->where);
1674                 return 0;
1675              }
1676          }
1677
1678       actual_size = get_expr_storage_size (a->expr);
1679       formal_size = get_sym_storage_size (f->sym);
1680       if (actual_size != 0 && actual_size < formal_size)
1681         {
1682           if (a->expr->ts.type == BT_CHARACTER && !f->sym->as && where)
1683             gfc_warning ("Character length of actual argument shorter "
1684                         "than of dummy argument '%s' (%d/%d) at %L",
1685                         f->sym->name, (int) actual_size,
1686                         (int) formal_size, &a->expr->where);
1687           else if (where)
1688             gfc_warning ("Actual argument contains too few "
1689                         "elements for dummy argument '%s' (%d/%d) at %L",
1690                         f->sym->name, (int) actual_size,
1691                         (int) formal_size, &a->expr->where);
1692           return  0;
1693         }
1694
1695       /* Satisfy 12.4.1.2 by ensuring that a procedure actual argument is
1696          provided for a procedure formal argument.  */
1697       if (a->expr->ts.type != BT_PROCEDURE
1698           && a->expr->expr_type == EXPR_VARIABLE
1699           && f->sym->attr.flavor == FL_PROCEDURE)
1700         {
1701           if (where)
1702             gfc_error ("Expected a procedure for argument '%s' at %L",
1703                        f->sym->name, &a->expr->where);
1704           return 0;
1705         }
1706
1707       if (f->sym->attr.flavor == FL_PROCEDURE && f->sym->attr.pure
1708           && a->expr->ts.type == BT_PROCEDURE
1709           && !a->expr->symtree->n.sym->attr.pure)
1710         {
1711           if (where)
1712             gfc_error ("Expected a PURE procedure for argument '%s' at %L",
1713                        f->sym->name, &a->expr->where);
1714           return 0;
1715         }
1716
1717       if (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE
1718           && a->expr->expr_type == EXPR_VARIABLE
1719           && a->expr->symtree->n.sym->as
1720           && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SIZE
1721           && (a->expr->ref == NULL
1722               || (a->expr->ref->type == REF_ARRAY
1723                   && a->expr->ref->u.ar.type == AR_FULL)))
1724         {
1725           if (where)
1726             gfc_error ("Actual argument for '%s' cannot be an assumed-size"
1727                        " array at %L", f->sym->name, where);
1728           return 0;
1729         }
1730
1731       if (a->expr->expr_type != EXPR_NULL
1732           && compare_pointer (f->sym, a->expr) == 0)
1733         {
1734           if (where)
1735             gfc_error ("Actual argument for '%s' must be a pointer at %L",
1736                        f->sym->name, &a->expr->where);
1737           return 0;
1738         }
1739
1740       if (a->expr->expr_type != EXPR_NULL
1741           && compare_allocatable (f->sym, a->expr) == 0)
1742         {
1743           if (where)
1744             gfc_error ("Actual argument for '%s' must be ALLOCATABLE at %L",
1745                        f->sym->name, &a->expr->where);
1746           return 0;
1747         }
1748
1749       /* Check intent = OUT/INOUT for definable actual argument.  */
1750       if (a->expr->expr_type != EXPR_VARIABLE
1751           && (f->sym->attr.intent == INTENT_OUT
1752               || f->sym->attr.intent == INTENT_INOUT))
1753         {
1754           if (where)
1755             gfc_error ("Actual argument at %L must be definable to "
1756                        "match dummy INTENT = OUT/INOUT", &a->expr->where);
1757           return 0;
1758         }
1759
1760       if (!compare_parameter_protected(f->sym, a->expr))
1761         {
1762           if (where)
1763             gfc_error ("Actual argument at %L is use-associated with "
1764                        "PROTECTED attribute and dummy argument '%s' is "
1765                        "INTENT = OUT/INOUT",
1766                        &a->expr->where,f->sym->name);
1767           return 0;
1768         }
1769
1770       if ((f->sym->attr.intent == INTENT_OUT
1771            || f->sym->attr.intent == INTENT_INOUT
1772            || f->sym->attr.volatile_)
1773           && has_vector_subscript (a->expr))
1774         {
1775           if (where)
1776             gfc_error ("Array-section actual argument with vector subscripts "
1777                        "at %L is incompatible with INTENT(IN), INTENT(INOUT) "
1778                        "or VOLATILE attribute of the dummy argument '%s'",
1779                        &a->expr->where, f->sym->name);
1780           return 0;
1781         }
1782
1783       /* C1232 (R1221) For an actual argument which is an array section or
1784          an assumed-shape array, the dummy argument shall be an assumed-
1785          shape array, if the dummy argument has the VOLATILE attribute.  */
1786
1787       if (f->sym->attr.volatile_
1788           && a->expr->symtree->n.sym->as
1789           && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
1790           && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
1791         {
1792           if (where)
1793             gfc_error ("Assumed-shape actual argument at %L is "
1794                        "incompatible with the non-assumed-shape "
1795                        "dummy argument '%s' due to VOLATILE attribute",
1796                        &a->expr->where,f->sym->name);
1797           return 0;
1798         }
1799
1800       if (f->sym->attr.volatile_
1801           && a->expr->ref && a->expr->ref->u.ar.type == AR_SECTION
1802           && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
1803         {
1804           if (where)
1805             gfc_error ("Array-section actual argument at %L is "
1806                        "incompatible with the non-assumed-shape "
1807                        "dummy argument '%s' due to VOLATILE attribute",
1808                        &a->expr->where,f->sym->name);
1809           return 0;
1810         }
1811
1812       /* C1233 (R1221) For an actual argument which is a pointer array, the
1813          dummy argument shall be an assumed-shape or pointer array, if the
1814          dummy argument has the VOLATILE attribute.  */
1815
1816       if (f->sym->attr.volatile_
1817           && a->expr->symtree->n.sym->attr.pointer
1818           && a->expr->symtree->n.sym->as
1819           && !(f->sym->as
1820                && (f->sym->as->type == AS_ASSUMED_SHAPE
1821                    || f->sym->attr.pointer)))
1822         {
1823           if (where)
1824             gfc_error ("Pointer-array actual argument at %L requires "
1825                        "an assumed-shape or pointer-array dummy "
1826                        "argument '%s' due to VOLATILE attribute",
1827                        &a->expr->where,f->sym->name);
1828           return 0;
1829         }
1830
1831     match:
1832       if (a == actual)
1833         na = i;
1834
1835       new[i++] = a;
1836     }
1837
1838   /* Make sure missing actual arguments are optional.  */
1839   i = 0;
1840   for (f = formal; f; f = f->next, i++)
1841     {
1842       if (new[i] != NULL)
1843         continue;
1844       if (f->sym == NULL)
1845         {
1846           if (where)
1847             gfc_error ("Missing alternate return spec in subroutine call "
1848                        "at %L", where);
1849           return 0;
1850         }
1851       if (!f->sym->attr.optional)
1852         {
1853           if (where)
1854             gfc_error ("Missing actual argument for argument '%s' at %L",
1855                        f->sym->name, where);
1856           return 0;
1857         }
1858     }
1859
1860   /* The argument lists are compatible.  We now relink a new actual
1861      argument list with null arguments in the right places.  The head
1862      of the list remains the head.  */
1863   for (i = 0; i < n; i++)
1864     if (new[i] == NULL)
1865       new[i] = gfc_get_actual_arglist ();
1866
1867   if (na != 0)
1868     {
1869       temp = *new[0];
1870       *new[0] = *actual;
1871       *actual = temp;
1872
1873       a = new[0];
1874       new[0] = new[na];
1875       new[na] = a;
1876     }
1877
1878   for (i = 0; i < n - 1; i++)
1879     new[i]->next = new[i + 1];
1880
1881   new[i]->next = NULL;
1882
1883   if (*ap == NULL && n > 0)
1884     *ap = new[0];
1885
1886   /* Note the types of omitted optional arguments.  */
1887   for (a = actual, f = formal; a; a = a->next, f = f->next)
1888     if (a->expr == NULL && a->label == NULL)
1889       a->missing_arg_type = f->sym->ts.type;
1890
1891   return 1;
1892 }
1893
1894
1895 typedef struct
1896 {
1897   gfc_formal_arglist *f;
1898   gfc_actual_arglist *a;
1899 }
1900 argpair;
1901
1902 /* qsort comparison function for argument pairs, with the following
1903    order:
1904     - p->a->expr == NULL
1905     - p->a->expr->expr_type != EXPR_VARIABLE
1906     - growing p->a->expr->symbol.  */
1907
1908 static int
1909 pair_cmp (const void *p1, const void *p2)
1910 {
1911   const gfc_actual_arglist *a1, *a2;
1912
1913   /* *p1 and *p2 are elements of the to-be-sorted array.  */
1914   a1 = ((const argpair *) p1)->a;
1915   a2 = ((const argpair *) p2)->a;
1916   if (!a1->expr)
1917     {
1918       if (!a2->expr)
1919         return 0;
1920       return -1;
1921     }
1922   if (!a2->expr)
1923     return 1;
1924   if (a1->expr->expr_type != EXPR_VARIABLE)
1925     {
1926       if (a2->expr->expr_type != EXPR_VARIABLE)
1927         return 0;
1928       return -1;
1929     }
1930   if (a2->expr->expr_type != EXPR_VARIABLE)
1931     return 1;
1932   return a1->expr->symtree->n.sym < a2->expr->symtree->n.sym;
1933 }
1934
1935
1936 /* Given two expressions from some actual arguments, test whether they
1937    refer to the same expression. The analysis is conservative.
1938    Returning FAILURE will produce no warning.  */
1939
1940 static try
1941 compare_actual_expr (gfc_expr *e1, gfc_expr *e2)
1942 {
1943   const gfc_ref *r1, *r2;
1944
1945   if (!e1 || !e2
1946       || e1->expr_type != EXPR_VARIABLE
1947       || e2->expr_type != EXPR_VARIABLE
1948       || e1->symtree->n.sym != e2->symtree->n.sym)
1949     return FAILURE;
1950
1951   /* TODO: improve comparison, see expr.c:show_ref().  */
1952   for (r1 = e1->ref, r2 = e2->ref; r1 && r2; r1 = r1->next, r2 = r2->next)
1953     {
1954       if (r1->type != r2->type)
1955         return FAILURE;
1956       switch (r1->type)
1957         {
1958         case REF_ARRAY:
1959           if (r1->u.ar.type != r2->u.ar.type)
1960             return FAILURE;
1961           /* TODO: At the moment, consider only full arrays;
1962              we could do better.  */
1963           if (r1->u.ar.type != AR_FULL || r2->u.ar.type != AR_FULL)
1964             return FAILURE;
1965           break;
1966
1967         case REF_COMPONENT:
1968           if (r1->u.c.component != r2->u.c.component)
1969             return FAILURE;
1970           break;
1971
1972         case REF_SUBSTRING:
1973           return FAILURE;
1974
1975         default:
1976           gfc_internal_error ("compare_actual_expr(): Bad component code");
1977         }
1978     }
1979   if (!r1 && !r2)
1980     return SUCCESS;
1981   return FAILURE;
1982 }
1983
1984
1985 /* Given formal and actual argument lists that correspond to one
1986    another, check that identical actual arguments aren't not
1987    associated with some incompatible INTENTs.  */
1988
1989 static try
1990 check_some_aliasing (gfc_formal_arglist *f, gfc_actual_arglist *a)
1991 {
1992   sym_intent f1_intent, f2_intent;
1993   gfc_formal_arglist *f1;
1994   gfc_actual_arglist *a1;
1995   size_t n, i, j;
1996   argpair *p;
1997   try t = SUCCESS;
1998
1999   n = 0;
2000   for (f1 = f, a1 = a;; f1 = f1->next, a1 = a1->next)
2001     {
2002       if (f1 == NULL && a1 == NULL)
2003         break;
2004       if (f1 == NULL || a1 == NULL)
2005         gfc_internal_error ("check_some_aliasing(): List mismatch");
2006       n++;
2007     }
2008   if (n == 0)
2009     return t;
2010   p = (argpair *) alloca (n * sizeof (argpair));
2011
2012   for (i = 0, f1 = f, a1 = a; i < n; i++, f1 = f1->next, a1 = a1->next)
2013     {
2014       p[i].f = f1;
2015       p[i].a = a1;
2016     }
2017
2018   qsort (p, n, sizeof (argpair), pair_cmp);
2019
2020   for (i = 0; i < n; i++)
2021     {
2022       if (!p[i].a->expr
2023           || p[i].a->expr->expr_type != EXPR_VARIABLE
2024           || p[i].a->expr->ts.type == BT_PROCEDURE)
2025         continue;
2026       f1_intent = p[i].f->sym->attr.intent;
2027       for (j = i + 1; j < n; j++)
2028         {
2029           /* Expected order after the sort.  */
2030           if (!p[j].a->expr || p[j].a->expr->expr_type != EXPR_VARIABLE)
2031             gfc_internal_error ("check_some_aliasing(): corrupted data");
2032
2033           /* Are the expression the same?  */
2034           if (compare_actual_expr (p[i].a->expr, p[j].a->expr) == FAILURE)
2035             break;
2036           f2_intent = p[j].f->sym->attr.intent;
2037           if ((f1_intent == INTENT_IN && f2_intent == INTENT_OUT)
2038               || (f1_intent == INTENT_OUT && f2_intent == INTENT_IN))
2039             {
2040               gfc_warning ("Same actual argument associated with INTENT(%s) "
2041                            "argument '%s' and INTENT(%s) argument '%s' at %L",
2042                            gfc_intent_string (f1_intent), p[i].f->sym->name,
2043                            gfc_intent_string (f2_intent), p[j].f->sym->name,
2044                            &p[i].a->expr->where);
2045               t = FAILURE;
2046             }
2047         }
2048     }
2049
2050   return t;
2051 }
2052
2053
2054 /* Given a symbol of a formal argument list and an expression,
2055    return nonzero if their intents are compatible, zero otherwise.  */
2056
2057 static int
2058 compare_parameter_intent (gfc_symbol *formal, gfc_expr *actual)
2059 {
2060   if (actual->symtree->n.sym->attr.pointer && !formal->attr.pointer)
2061     return 1;
2062
2063   if (actual->symtree->n.sym->attr.intent != INTENT_IN)
2064     return 1;
2065
2066   if (formal->attr.intent == INTENT_INOUT || formal->attr.intent == INTENT_OUT)
2067     return 0;
2068
2069   return 1;
2070 }
2071
2072
2073 /* Given formal and actual argument lists that correspond to one
2074    another, check that they are compatible in the sense that intents
2075    are not mismatched.  */
2076
2077 static try
2078 check_intents (gfc_formal_arglist *f, gfc_actual_arglist *a)
2079 {
2080   sym_intent f_intent;
2081
2082   for (;; f = f->next, a = a->next)
2083     {
2084       if (f == NULL && a == NULL)
2085         break;
2086       if (f == NULL || a == NULL)
2087         gfc_internal_error ("check_intents(): List mismatch");
2088
2089       if (a->expr == NULL || a->expr->expr_type != EXPR_VARIABLE)
2090         continue;
2091
2092       f_intent = f->sym->attr.intent;
2093
2094       if (!compare_parameter_intent(f->sym, a->expr))
2095         {
2096           gfc_error ("Procedure argument at %L is INTENT(IN) while interface "
2097                      "specifies INTENT(%s)", &a->expr->where,
2098                      gfc_intent_string (f_intent));
2099           return FAILURE;
2100         }
2101
2102       if (gfc_pure (NULL) && gfc_impure_variable (a->expr->symtree->n.sym))
2103         {
2104           if (f_intent == INTENT_INOUT || f_intent == INTENT_OUT)
2105             {
2106               gfc_error ("Procedure argument at %L is local to a PURE "
2107                          "procedure and is passed to an INTENT(%s) argument",
2108                          &a->expr->where, gfc_intent_string (f_intent));
2109               return FAILURE;
2110             }
2111
2112           if (a->expr->symtree->n.sym->attr.pointer)
2113             {
2114               gfc_error ("Procedure argument at %L is local to a PURE "
2115                          "procedure and has the POINTER attribute",
2116                          &a->expr->where);
2117               return FAILURE;
2118             }
2119         }
2120     }
2121
2122   return SUCCESS;
2123 }
2124
2125
2126 /* Check how a procedure is used against its interface.  If all goes
2127    well, the actual argument list will also end up being properly
2128    sorted.  */
2129
2130 void
2131 gfc_procedure_use (gfc_symbol *sym, gfc_actual_arglist **ap, locus *where)
2132 {
2133
2134   /* Warn about calls with an implicit interface.  */
2135   if (gfc_option.warn_implicit_interface
2136       && sym->attr.if_source == IFSRC_UNKNOWN)
2137     gfc_warning ("Procedure '%s' called with an implicit interface at %L",
2138                  sym->name, where);
2139
2140   if (sym->attr.if_source == IFSRC_UNKNOWN
2141       || !compare_actual_formal (ap, sym->formal, 0,
2142                                  sym->attr.elemental, where))
2143     return;
2144
2145   check_intents (sym->formal, *ap);
2146   if (gfc_option.warn_aliasing)
2147     check_some_aliasing (sym->formal, *ap);
2148 }
2149
2150
2151 /* Given an interface pointer and an actual argument list, search for
2152    a formal argument list that matches the actual.  If found, returns
2153    a pointer to the symbol of the correct interface.  Returns NULL if
2154    not found.  */
2155
2156 gfc_symbol *
2157 gfc_search_interface (gfc_interface *intr, int sub_flag,
2158                       gfc_actual_arglist **ap)
2159 {
2160   int r;
2161
2162   for (; intr; intr = intr->next)
2163     {
2164       if (sub_flag && intr->sym->attr.function)
2165         continue;
2166       if (!sub_flag && intr->sym->attr.subroutine)
2167         continue;
2168
2169       r = !intr->sym->attr.elemental;
2170
2171       if (compare_actual_formal (ap, intr->sym->formal, r, !r, NULL))
2172         {
2173           check_intents (intr->sym->formal, *ap);
2174           if (gfc_option.warn_aliasing)
2175             check_some_aliasing (intr->sym->formal, *ap);
2176           return intr->sym;
2177         }
2178     }
2179
2180   return NULL;
2181 }
2182
2183
2184 /* Do a brute force recursive search for a symbol.  */
2185
2186 static gfc_symtree *
2187 find_symtree0 (gfc_symtree *root, gfc_symbol *sym)
2188 {
2189   gfc_symtree * st;
2190
2191   if (root->n.sym == sym)
2192     return root;
2193
2194   st = NULL;
2195   if (root->left)
2196     st = find_symtree0 (root->left, sym);
2197   if (root->right && ! st)
2198     st = find_symtree0 (root->right, sym);
2199   return st;
2200 }
2201
2202
2203 /* Find a symtree for a symbol.  */
2204
2205 static gfc_symtree *
2206 find_sym_in_symtree (gfc_symbol *sym)
2207 {
2208   gfc_symtree *st;
2209   gfc_namespace *ns;
2210
2211   /* First try to find it by name.  */
2212   gfc_find_sym_tree (sym->name, gfc_current_ns, 1, &st);
2213   if (st && st->n.sym == sym)
2214     return st;
2215
2216   /* If it's been renamed, resort to a brute-force search.  */
2217   /* TODO: avoid having to do this search.  If the symbol doesn't exist
2218      in the symtree for the current namespace, it should probably be added.  */
2219   for (ns = gfc_current_ns; ns; ns = ns->parent)
2220     {
2221       st = find_symtree0 (ns->sym_root, sym);
2222       if (st)
2223         return st;
2224     }
2225   gfc_internal_error ("Unable to find symbol %s", sym->name);
2226   /* Not reached.  */
2227 }
2228
2229
2230 /* This subroutine is called when an expression is being resolved.
2231    The expression node in question is either a user defined operator
2232    or an intrinsic operator with arguments that aren't compatible
2233    with the operator.  This subroutine builds an actual argument list
2234    corresponding to the operands, then searches for a compatible
2235    interface.  If one is found, the expression node is replaced with
2236    the appropriate function call.  */
2237
2238 try
2239 gfc_extend_expr (gfc_expr *e)
2240 {
2241   gfc_actual_arglist *actual;
2242   gfc_symbol *sym;
2243   gfc_namespace *ns;
2244   gfc_user_op *uop;
2245   gfc_intrinsic_op i;
2246
2247   sym = NULL;
2248
2249   actual = gfc_get_actual_arglist ();
2250   actual->expr = e->value.op.op1;
2251
2252   if (e->value.op.op2 != NULL)
2253     {
2254       actual->next = gfc_get_actual_arglist ();
2255       actual->next->expr = e->value.op.op2;
2256     }
2257
2258   i = fold_unary (e->value.op.operator);
2259
2260   if (i == INTRINSIC_USER)
2261     {
2262       for (ns = gfc_current_ns; ns; ns = ns->parent)
2263         {
2264           uop = gfc_find_uop (e->value.op.uop->name, ns);
2265           if (uop == NULL)
2266             continue;
2267
2268           sym = gfc_search_interface (uop->operator, 0, &actual);
2269           if (sym != NULL)
2270             break;
2271         }
2272     }
2273   else
2274     {
2275       for (ns = gfc_current_ns; ns; ns = ns->parent)
2276         {
2277           /* Due to the distinction between '==' and '.eq.' and friends, one has
2278              to check if either is defined.  */
2279           switch (i)
2280             {
2281               case INTRINSIC_EQ:
2282               case INTRINSIC_EQ_OS:
2283                 sym = gfc_search_interface (ns->operator[INTRINSIC_EQ], 0, &actual);
2284                 if (sym == NULL)
2285                   sym = gfc_search_interface (ns->operator[INTRINSIC_EQ_OS], 0, &actual);
2286                 break;
2287
2288               case INTRINSIC_NE:
2289               case INTRINSIC_NE_OS:
2290                 sym = gfc_search_interface (ns->operator[INTRINSIC_NE], 0, &actual);
2291                 if (sym == NULL)
2292                   sym = gfc_search_interface (ns->operator[INTRINSIC_NE_OS], 0, &actual);
2293                 break;
2294
2295               case INTRINSIC_GT:
2296               case INTRINSIC_GT_OS:
2297                 sym = gfc_search_interface (ns->operator[INTRINSIC_GT], 0, &actual);
2298                 if (sym == NULL)
2299                   sym = gfc_search_interface (ns->operator[INTRINSIC_GT_OS], 0, &actual);
2300                 break;
2301
2302               case INTRINSIC_GE:
2303               case INTRINSIC_GE_OS:
2304                 sym = gfc_search_interface (ns->operator[INTRINSIC_GE], 0, &actual);
2305                 if (sym == NULL)
2306                   sym = gfc_search_interface (ns->operator[INTRINSIC_GE_OS], 0, &actual);
2307                 break;
2308
2309               case INTRINSIC_LT:
2310               case INTRINSIC_LT_OS:
2311                 sym = gfc_search_interface (ns->operator[INTRINSIC_LT], 0, &actual);
2312                 if (sym == NULL)
2313                   sym = gfc_search_interface (ns->operator[INTRINSIC_LT_OS], 0, &actual);
2314                 break;
2315
2316               case INTRINSIC_LE:
2317               case INTRINSIC_LE_OS:
2318                 sym = gfc_search_interface (ns->operator[INTRINSIC_LE], 0, &actual);
2319                 if (sym == NULL)
2320                   sym = gfc_search_interface (ns->operator[INTRINSIC_LE_OS], 0, &actual);
2321                 break;
2322
2323               default:
2324                 sym = gfc_search_interface (ns->operator[i], 0, &actual);
2325             }
2326
2327           if (sym != NULL)
2328             break;
2329         }
2330     }
2331
2332   if (sym == NULL)
2333     {
2334       /* Don't use gfc_free_actual_arglist().  */
2335       if (actual->next != NULL)
2336         gfc_free (actual->next);
2337       gfc_free (actual);
2338
2339       return FAILURE;
2340     }
2341
2342   /* Change the expression node to a function call.  */
2343   e->expr_type = EXPR_FUNCTION;
2344   e->symtree = find_sym_in_symtree (sym);
2345   e->value.function.actual = actual;
2346   e->value.function.esym = NULL;
2347   e->value.function.isym = NULL;
2348   e->value.function.name = NULL;
2349
2350   if (gfc_pure (NULL) && !gfc_pure (sym))
2351     {
2352       gfc_error ("Function '%s' called in lieu of an operator at %L must "
2353                  "be PURE", sym->name, &e->where);
2354       return FAILURE;
2355     }
2356
2357   if (gfc_resolve_expr (e) == FAILURE)
2358     return FAILURE;
2359
2360   return SUCCESS;
2361 }
2362
2363
2364 /* Tries to replace an assignment code node with a subroutine call to
2365    the subroutine associated with the assignment operator.  Return
2366    SUCCESS if the node was replaced.  On FAILURE, no error is
2367    generated.  */
2368
2369 try
2370 gfc_extend_assign (gfc_code *c, gfc_namespace *ns)
2371 {
2372   gfc_actual_arglist *actual;
2373   gfc_expr *lhs, *rhs;
2374   gfc_symbol *sym;
2375
2376   lhs = c->expr;
2377   rhs = c->expr2;
2378
2379   /* Don't allow an intrinsic assignment to be replaced.  */
2380   if (lhs->ts.type != BT_DERIVED && rhs->ts.type != BT_DERIVED
2381       && (lhs->ts.type == rhs->ts.type
2382           || (gfc_numeric_ts (&lhs->ts) && gfc_numeric_ts (&rhs->ts))))
2383     return FAILURE;
2384
2385   actual = gfc_get_actual_arglist ();
2386   actual->expr = lhs;
2387
2388   actual->next = gfc_get_actual_arglist ();
2389   actual->next->expr = rhs;
2390
2391   sym = NULL;
2392
2393   for (; ns; ns = ns->parent)
2394     {
2395       sym = gfc_search_interface (ns->operator[INTRINSIC_ASSIGN], 1, &actual);
2396       if (sym != NULL)
2397         break;
2398     }
2399
2400   if (sym == NULL)
2401     {
2402       gfc_free (actual->next);
2403       gfc_free (actual);
2404       return FAILURE;
2405     }
2406
2407   /* Replace the assignment with the call.  */
2408   c->op = EXEC_ASSIGN_CALL;
2409   c->symtree = find_sym_in_symtree (sym);
2410   c->expr = NULL;
2411   c->expr2 = NULL;
2412   c->ext.actual = actual;
2413
2414   return SUCCESS;
2415 }
2416
2417
2418 /* Make sure that the interface just parsed is not already present in
2419    the given interface list.  Ambiguity isn't checked yet since module
2420    procedures can be present without interfaces.  */
2421
2422 static try
2423 check_new_interface (gfc_interface *base, gfc_symbol *new)
2424 {
2425   gfc_interface *ip;
2426
2427   for (ip = base; ip; ip = ip->next)
2428     {
2429       if (ip->sym == new)
2430         {
2431           gfc_error ("Entity '%s' at %C is already present in the interface",
2432                      new->name);
2433           return FAILURE;
2434         }
2435     }
2436
2437   return SUCCESS;
2438 }
2439
2440
2441 /* Add a symbol to the current interface.  */
2442
2443 try
2444 gfc_add_interface (gfc_symbol *new)
2445 {
2446   gfc_interface **head, *intr;
2447   gfc_namespace *ns;
2448   gfc_symbol *sym;
2449
2450   switch (current_interface.type)
2451     {
2452     case INTERFACE_NAMELESS:
2453       return SUCCESS;
2454
2455     case INTERFACE_INTRINSIC_OP:
2456       for (ns = current_interface.ns; ns; ns = ns->parent)
2457         switch (current_interface.op)
2458           {
2459             case INTRINSIC_EQ:
2460             case INTRINSIC_EQ_OS:
2461               if (check_new_interface (ns->operator[INTRINSIC_EQ], new) == FAILURE ||
2462                   check_new_interface (ns->operator[INTRINSIC_EQ_OS], new) == FAILURE)
2463                 return FAILURE;
2464               break;
2465
2466             case INTRINSIC_NE:
2467             case INTRINSIC_NE_OS:
2468               if (check_new_interface (ns->operator[INTRINSIC_NE], new) == FAILURE ||
2469                   check_new_interface (ns->operator[INTRINSIC_NE_OS], new) == FAILURE)
2470                 return FAILURE;
2471               break;
2472
2473             case INTRINSIC_GT:
2474             case INTRINSIC_GT_OS:
2475               if (check_new_interface (ns->operator[INTRINSIC_GT], new) == FAILURE ||
2476                   check_new_interface (ns->operator[INTRINSIC_GT_OS], new) == FAILURE)
2477                 return FAILURE;
2478               break;
2479
2480             case INTRINSIC_GE:
2481             case INTRINSIC_GE_OS:
2482               if (check_new_interface (ns->operator[INTRINSIC_GE], new) == FAILURE ||
2483                   check_new_interface (ns->operator[INTRINSIC_GE_OS], new) == FAILURE)
2484                 return FAILURE;
2485               break;
2486
2487             case INTRINSIC_LT:
2488             case INTRINSIC_LT_OS:
2489               if (check_new_interface (ns->operator[INTRINSIC_LT], new) == FAILURE ||
2490                   check_new_interface (ns->operator[INTRINSIC_LT_OS], new) == FAILURE)
2491                 return FAILURE;
2492               break;
2493
2494             case INTRINSIC_LE:
2495             case INTRINSIC_LE_OS:
2496               if (check_new_interface (ns->operator[INTRINSIC_LE], new) == FAILURE ||
2497                   check_new_interface (ns->operator[INTRINSIC_LE_OS], new) == FAILURE)
2498                 return FAILURE;
2499               break;
2500
2501             default:
2502               if (check_new_interface (ns->operator[current_interface.op], new) == FAILURE)
2503                 return FAILURE;
2504           }
2505
2506       head = &current_interface.ns->operator[current_interface.op];
2507       break;
2508
2509     case INTERFACE_GENERIC:
2510       for (ns = current_interface.ns; ns; ns = ns->parent)
2511         {
2512           gfc_find_symbol (current_interface.sym->name, ns, 0, &sym);
2513           if (sym == NULL)
2514             continue;
2515
2516           if (check_new_interface (sym->generic, new) == FAILURE)
2517             return FAILURE;
2518         }
2519
2520       head = &current_interface.sym->generic;
2521       break;
2522
2523     case INTERFACE_USER_OP:
2524       if (check_new_interface (current_interface.uop->operator, new)
2525           == FAILURE)
2526         return FAILURE;
2527
2528       head = &current_interface.uop->operator;
2529       break;
2530
2531     default:
2532       gfc_internal_error ("gfc_add_interface(): Bad interface type");
2533     }
2534
2535   intr = gfc_get_interface ();
2536   intr->sym = new;
2537   intr->where = gfc_current_locus;
2538
2539   intr->next = *head;
2540   *head = intr;
2541
2542   return SUCCESS;
2543 }
2544
2545
2546 /* Gets rid of a formal argument list.  We do not free symbols.
2547    Symbols are freed when a namespace is freed.  */
2548
2549 void
2550 gfc_free_formal_arglist (gfc_formal_arglist *p)
2551 {
2552   gfc_formal_arglist *q;
2553
2554   for (; p; p = q)
2555     {
2556       q = p->next;
2557       gfc_free (p);
2558     }
2559 }