OSDN Git Service

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