OSDN Git Service

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