OSDN Git Service

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