OSDN Git Service

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