OSDN Git Service

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