OSDN Git Service

2009-08-27 Daniel Kraft <d@domob.eu>
[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, int generic_flag,
947                         int intent_flag, char *errmsg, int err_len)
948 {
949   gfc_formal_arglist *f1, *f2;
950
951   if (s1->attr.function && (s2->attr.subroutine
952       || (!s2->attr.function && s2->ts.type == BT_UNKNOWN
953           && gfc_get_default_type (s2->name, s2->ns)->type == BT_UNKNOWN)))
954     {
955       if (errmsg != NULL)
956         snprintf (errmsg, err_len, "'%s' is not a function", s2->name);
957       return 0;
958     }
959
960   if (s1->attr.subroutine && s2->attr.function)
961     {
962       if (errmsg != NULL)
963         snprintf (errmsg, err_len, "'%s' is not a subroutine", s2->name);
964       return 0;
965     }
966
967   /* If the arguments are functions, check type and kind
968      (only for dummy procedures and procedure pointer assignments).  */
969   if ((s1->attr.dummy || s1->attr.proc_pointer)
970       && 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'", s2->name);
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", s2->name);
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, generic_flag, 0, NULL, 0))
1124           {
1125             if (referenced)
1126               {
1127                 gfc_error ("Ambiguous interfaces '%s' and '%s' in %s at %L",
1128                            p->sym->name, q->sym->name, interface_name,
1129                            &p->where);
1130               }
1131
1132             if (!p->sym->attr.use_assoc && q->sym->attr.use_assoc)
1133               gfc_warning ("Ambiguous interfaces '%s' and '%s' in %s at %L",
1134                            p->sym->name, q->sym->name, interface_name,
1135                            &p->where);
1136             return 1;
1137           }
1138       }
1139   return 0;
1140 }
1141
1142
1143 /* Check the generic and operator interfaces of symbols to make sure
1144    that none of the interfaces conflict.  The check has to be done
1145    after all of the symbols are actually loaded.  */
1146
1147 static void
1148 check_sym_interfaces (gfc_symbol *sym)
1149 {
1150   char interface_name[100];
1151   bool k;
1152   gfc_interface *p;
1153
1154   if (sym->ns != gfc_current_ns)
1155     return;
1156
1157   if (sym->generic != NULL)
1158     {
1159       sprintf (interface_name, "generic interface '%s'", sym->name);
1160       if (check_interface0 (sym->generic, interface_name))
1161         return;
1162
1163       for (p = sym->generic; p; p = p->next)
1164         {
1165           if (p->sym->attr.mod_proc
1166               && (p->sym->attr.if_source != IFSRC_DECL
1167                   || p->sym->attr.procedure))
1168             {
1169               gfc_error ("'%s' at %L is not a module procedure",
1170                          p->sym->name, &p->where);
1171               return;
1172             }
1173         }
1174
1175       /* Originally, this test was applied to host interfaces too;
1176          this is incorrect since host associated symbols, from any
1177          source, cannot be ambiguous with local symbols.  */
1178       k = sym->attr.referenced || !sym->attr.use_assoc;
1179       if (check_interface1 (sym->generic, sym->generic, 1, interface_name, k))
1180         sym->attr.ambiguous_interfaces = 1;
1181     }
1182 }
1183
1184
1185 static void
1186 check_uop_interfaces (gfc_user_op *uop)
1187 {
1188   char interface_name[100];
1189   gfc_user_op *uop2;
1190   gfc_namespace *ns;
1191
1192   sprintf (interface_name, "operator interface '%s'", uop->name);
1193   if (check_interface0 (uop->op, interface_name))
1194     return;
1195
1196   for (ns = gfc_current_ns; ns; ns = ns->parent)
1197     {
1198       uop2 = gfc_find_uop (uop->name, ns);
1199       if (uop2 == NULL)
1200         continue;
1201
1202       check_interface1 (uop->op, uop2->op, 0,
1203                         interface_name, true);
1204     }
1205 }
1206
1207
1208 /* For the namespace, check generic, user operator and intrinsic
1209    operator interfaces for consistency and to remove duplicate
1210    interfaces.  We traverse the whole namespace, counting on the fact
1211    that most symbols will not have generic or operator interfaces.  */
1212
1213 void
1214 gfc_check_interfaces (gfc_namespace *ns)
1215 {
1216   gfc_namespace *old_ns, *ns2;
1217   char interface_name[100];
1218   int i;
1219
1220   old_ns = gfc_current_ns;
1221   gfc_current_ns = ns;
1222
1223   gfc_traverse_ns (ns, check_sym_interfaces);
1224
1225   gfc_traverse_user_op (ns, check_uop_interfaces);
1226
1227   for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++)
1228     {
1229       if (i == INTRINSIC_USER)
1230         continue;
1231
1232       if (i == INTRINSIC_ASSIGN)
1233         strcpy (interface_name, "intrinsic assignment operator");
1234       else
1235         sprintf (interface_name, "intrinsic '%s' operator",
1236                  gfc_op2string ((gfc_intrinsic_op) i));
1237
1238       if (check_interface0 (ns->op[i], interface_name))
1239         continue;
1240
1241       if (ns->op[i])
1242         gfc_check_operator_interface (ns->op[i]->sym, (gfc_intrinsic_op) i,
1243                                       ns->op[i]->where);
1244
1245       for (ns2 = ns; ns2; ns2 = ns2->parent)
1246         {
1247           if (check_interface1 (ns->op[i], ns2->op[i], 0,
1248                                 interface_name, true))
1249             goto done;
1250
1251           switch (i)
1252             {
1253               case INTRINSIC_EQ:
1254                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_EQ_OS],
1255                                       0, interface_name, true)) goto done;
1256                 break;
1257
1258               case INTRINSIC_EQ_OS:
1259                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_EQ],
1260                                       0, interface_name, true)) goto done;
1261                 break;
1262
1263               case INTRINSIC_NE:
1264                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_NE_OS],
1265                                       0, interface_name, true)) goto done;
1266                 break;
1267
1268               case INTRINSIC_NE_OS:
1269                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_NE],
1270                                       0, interface_name, true)) goto done;
1271                 break;
1272
1273               case INTRINSIC_GT:
1274                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_GT_OS],
1275                                       0, interface_name, true)) goto done;
1276                 break;
1277
1278               case INTRINSIC_GT_OS:
1279                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_GT],
1280                                       0, interface_name, true)) goto done;
1281                 break;
1282
1283               case INTRINSIC_GE:
1284                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_GE_OS],
1285                                       0, interface_name, true)) goto done;
1286                 break;
1287
1288               case INTRINSIC_GE_OS:
1289                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_GE],
1290                                       0, interface_name, true)) goto done;
1291                 break;
1292
1293               case INTRINSIC_LT:
1294                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_LT_OS],
1295                                       0, interface_name, true)) goto done;
1296                 break;
1297
1298               case INTRINSIC_LT_OS:
1299                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_LT],
1300                                       0, interface_name, true)) goto done;
1301                 break;
1302
1303               case INTRINSIC_LE:
1304                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_LE_OS],
1305                                       0, interface_name, true)) goto done;
1306                 break;
1307
1308               case INTRINSIC_LE_OS:
1309                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_LE],
1310                                       0, interface_name, true)) goto done;
1311                 break;
1312
1313               default:
1314                 break;
1315             }
1316         }
1317     }
1318
1319 done:
1320   gfc_current_ns = old_ns;
1321 }
1322
1323
1324 static int
1325 symbol_rank (gfc_symbol *sym)
1326 {
1327   return (sym->as == NULL) ? 0 : sym->as->rank;
1328 }
1329
1330
1331 /* Given a symbol of a formal argument list and an expression, if the
1332    formal argument is allocatable, check that the actual argument is
1333    allocatable. Returns nonzero if compatible, zero if not compatible.  */
1334
1335 static int
1336 compare_allocatable (gfc_symbol *formal, gfc_expr *actual)
1337 {
1338   symbol_attribute attr;
1339
1340   if (formal->attr.allocatable)
1341     {
1342       attr = gfc_expr_attr (actual);
1343       if (!attr.allocatable)
1344         return 0;
1345     }
1346
1347   return 1;
1348 }
1349
1350
1351 /* Given a symbol of a formal argument list and an expression, if the
1352    formal argument is a pointer, see if the actual argument is a
1353    pointer. Returns nonzero if compatible, zero if not compatible.  */
1354
1355 static int
1356 compare_pointer (gfc_symbol *formal, gfc_expr *actual)
1357 {
1358   symbol_attribute attr;
1359
1360   if (formal->attr.pointer)
1361     {
1362       attr = gfc_expr_attr (actual);
1363       if (!attr.pointer)
1364         return 0;
1365     }
1366
1367   return 1;
1368 }
1369
1370
1371 /* Given a symbol of a formal argument list and an expression, see if
1372    the two are compatible as arguments.  Returns nonzero if
1373    compatible, zero if not compatible.  */
1374
1375 static int
1376 compare_parameter (gfc_symbol *formal, gfc_expr *actual,
1377                    int ranks_must_agree, int is_elemental, locus *where)
1378 {
1379   gfc_ref *ref;
1380   bool rank_check;
1381
1382   /* If the formal arg has type BT_VOID, it's to one of the iso_c_binding
1383      procs c_f_pointer or c_f_procpointer, and we need to accept most
1384      pointers the user could give us.  This should allow that.  */
1385   if (formal->ts.type == BT_VOID)
1386     return 1;
1387
1388   if (formal->ts.type == BT_DERIVED
1389       && formal->ts.u.derived && formal->ts.u.derived->ts.is_iso_c
1390       && actual->ts.type == BT_DERIVED
1391       && actual->ts.u.derived && actual->ts.u.derived->ts.is_iso_c)
1392     return 1;
1393
1394   if (actual->ts.type == BT_PROCEDURE)
1395     {
1396       char err[200];
1397       gfc_symbol *act_sym = actual->symtree->n.sym;
1398
1399       if (formal->attr.flavor != FL_PROCEDURE)
1400         {
1401           if (where)
1402             gfc_error ("Invalid procedure argument at %L", &actual->where);
1403           return 0;
1404         }
1405
1406       if (!gfc_compare_interfaces (formal, act_sym, 0, 1, err,
1407                                    sizeof(err)))
1408         {
1409           if (where)
1410             gfc_error ("Interface mismatch in dummy procedure '%s' at %L: %s",
1411                        formal->name, &actual->where, err);
1412           return 0;
1413         }
1414
1415       if (formal->attr.function && !act_sym->attr.function)
1416         {
1417           gfc_add_function (&act_sym->attr, act_sym->name,
1418           &act_sym->declared_at);
1419           if (act_sym->ts.type == BT_UNKNOWN
1420               && gfc_set_default_type (act_sym, 1, act_sym->ns) == FAILURE)
1421             return 0;
1422         }
1423       else if (formal->attr.subroutine && !act_sym->attr.subroutine)
1424         gfc_add_subroutine (&act_sym->attr, act_sym->name,
1425                             &act_sym->declared_at);
1426
1427       return 1;
1428     }
1429
1430   if ((actual->expr_type != EXPR_NULL || actual->ts.type != BT_UNKNOWN)
1431       && !gfc_compare_types (&formal->ts, &actual->ts))
1432     {
1433       if (where)
1434         gfc_error ("Type mismatch in argument '%s' at %L; passed %s to %s",
1435                    formal->name, &actual->where, gfc_typename (&actual->ts),
1436                    gfc_typename (&formal->ts));
1437       return 0;
1438     }
1439
1440   if (symbol_rank (formal) == actual->rank)
1441     return 1;
1442
1443   rank_check = where != NULL && !is_elemental && formal->as
1444                && (formal->as->type == AS_ASSUMED_SHAPE
1445                    || formal->as->type == AS_DEFERRED);
1446
1447   if (rank_check || ranks_must_agree || formal->attr.pointer
1448       || (actual->rank != 0 && !(is_elemental || formal->attr.dimension))
1449       || (actual->rank == 0 && formal->as->type == AS_ASSUMED_SHAPE))
1450     {
1451       if (where)
1452         gfc_error ("Rank mismatch in argument '%s' at %L (%d and %d)",
1453                    formal->name, &actual->where, symbol_rank (formal),
1454                    actual->rank);
1455       return 0;
1456     }
1457   else if (actual->rank != 0 && (is_elemental || formal->attr.dimension))
1458     return 1;
1459
1460   /* At this point, we are considering a scalar passed to an array.   This
1461      is valid (cf. F95 12.4.1.1; F2003 12.4.1.2),
1462      - if the actual argument is (a substring of) an element of a
1463        non-assumed-shape/non-pointer array;
1464      - (F2003) if the actual argument is of type character.  */
1465
1466   for (ref = actual->ref; ref; ref = ref->next)
1467     if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT)
1468       break;
1469
1470   /* Not an array element.  */
1471   if (formal->ts.type == BT_CHARACTER
1472       && (ref == NULL
1473           || (actual->expr_type == EXPR_VARIABLE
1474               && (actual->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
1475                   || actual->symtree->n.sym->attr.pointer))))
1476     {
1477       if (where && (gfc_option.allow_std & GFC_STD_F2003) == 0)
1478         {
1479           gfc_error ("Fortran 2003: Scalar CHARACTER actual argument with "
1480                      "array dummy argument '%s' at %L",
1481                      formal->name, &actual->where);
1482           return 0;
1483         }
1484       else if ((gfc_option.allow_std & GFC_STD_F2003) == 0)
1485         return 0;
1486       else
1487         return 1;
1488     }
1489   else if (ref == NULL)
1490     {
1491       if (where)
1492         gfc_error ("Rank mismatch in argument '%s' at %L (%d and %d)",
1493                    formal->name, &actual->where, symbol_rank (formal),
1494                    actual->rank);
1495       return 0;
1496     }
1497
1498   if (actual->expr_type == EXPR_VARIABLE
1499       && actual->symtree->n.sym->as
1500       && (actual->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
1501           || actual->symtree->n.sym->attr.pointer))
1502     {
1503       if (where)
1504         gfc_error ("Element of assumed-shaped array passed to dummy "
1505                    "argument '%s' at %L", formal->name, &actual->where);
1506       return 0;
1507     }
1508
1509   return 1;
1510 }
1511
1512
1513 /* Given a symbol of a formal argument list and an expression, see if
1514    the two are compatible as arguments.  Returns nonzero if
1515    compatible, zero if not compatible.  */
1516
1517 static int
1518 compare_parameter_protected (gfc_symbol *formal, gfc_expr *actual)
1519 {
1520   if (actual->expr_type != EXPR_VARIABLE)
1521     return 1;
1522
1523   if (!actual->symtree->n.sym->attr.is_protected)
1524     return 1;
1525
1526   if (!actual->symtree->n.sym->attr.use_assoc)
1527     return 1;
1528
1529   if (formal->attr.intent == INTENT_IN
1530       || formal->attr.intent == INTENT_UNKNOWN)
1531     return 1;
1532
1533   if (!actual->symtree->n.sym->attr.pointer)
1534     return 0;
1535
1536   if (actual->symtree->n.sym->attr.pointer && formal->attr.pointer)
1537     return 0;
1538
1539   return 1;
1540 }
1541
1542
1543 /* Returns the storage size of a symbol (formal argument) or
1544    zero if it cannot be determined.  */
1545
1546 static unsigned long
1547 get_sym_storage_size (gfc_symbol *sym)
1548 {
1549   int i;
1550   unsigned long strlen, elements;
1551
1552   if (sym->ts.type == BT_CHARACTER)
1553     {
1554       if (sym->ts.u.cl && sym->ts.u.cl->length
1555           && sym->ts.u.cl->length->expr_type == EXPR_CONSTANT)
1556         strlen = mpz_get_ui (sym->ts.u.cl->length->value.integer);
1557       else
1558         return 0;
1559     }
1560   else
1561     strlen = 1; 
1562
1563   if (symbol_rank (sym) == 0)
1564     return strlen;
1565
1566   elements = 1;
1567   if (sym->as->type != AS_EXPLICIT)
1568     return 0;
1569   for (i = 0; i < sym->as->rank; i++)
1570     {
1571       if (!sym->as || sym->as->upper[i]->expr_type != EXPR_CONSTANT
1572           || sym->as->lower[i]->expr_type != EXPR_CONSTANT)
1573         return 0;
1574
1575       elements *= mpz_get_ui (sym->as->upper[i]->value.integer)
1576                   - mpz_get_ui (sym->as->lower[i]->value.integer) + 1L;
1577     }
1578
1579   return strlen*elements;
1580 }
1581
1582
1583 /* Returns the storage size of an expression (actual argument) or
1584    zero if it cannot be determined. For an array element, it returns
1585    the remaining size as the element sequence consists of all storage
1586    units of the actual argument up to the end of the array.  */
1587
1588 static unsigned long
1589 get_expr_storage_size (gfc_expr *e)
1590 {
1591   int i;
1592   long int strlen, elements;
1593   long int substrlen = 0;
1594   bool is_str_storage = false;
1595   gfc_ref *ref;
1596
1597   if (e == NULL)
1598     return 0;
1599   
1600   if (e->ts.type == BT_CHARACTER)
1601     {
1602       if (e->ts.u.cl && e->ts.u.cl->length
1603           && e->ts.u.cl->length->expr_type == EXPR_CONSTANT)
1604         strlen = mpz_get_si (e->ts.u.cl->length->value.integer);
1605       else if (e->expr_type == EXPR_CONSTANT
1606                && (e->ts.u.cl == NULL || e->ts.u.cl->length == NULL))
1607         strlen = e->value.character.length;
1608       else
1609         return 0;
1610     }
1611   else
1612     strlen = 1; /* Length per element.  */
1613
1614   if (e->rank == 0 && !e->ref)
1615     return strlen;
1616
1617   elements = 1;
1618   if (!e->ref)
1619     {
1620       if (!e->shape)
1621         return 0;
1622       for (i = 0; i < e->rank; i++)
1623         elements *= mpz_get_si (e->shape[i]);
1624       return elements*strlen;
1625     }
1626
1627   for (ref = e->ref; ref; ref = ref->next)
1628     {
1629       if (ref->type == REF_SUBSTRING && ref->u.ss.start
1630           && ref->u.ss.start->expr_type == EXPR_CONSTANT)
1631         {
1632           if (is_str_storage)
1633             {
1634               /* The string length is the substring length.
1635                  Set now to full string length.  */
1636               if (ref->u.ss.length == NULL
1637                   || ref->u.ss.length->length->expr_type != EXPR_CONSTANT)
1638                 return 0;
1639
1640               strlen = mpz_get_ui (ref->u.ss.length->length->value.integer);
1641             }
1642           substrlen = strlen - mpz_get_ui (ref->u.ss.start->value.integer) + 1;
1643           continue;
1644         }
1645
1646       if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION
1647           && ref->u.ar.start && ref->u.ar.end && ref->u.ar.stride
1648           && ref->u.ar.as->upper)
1649         for (i = 0; i < ref->u.ar.dimen; i++)
1650           {
1651             long int start, end, stride;
1652             stride = 1;
1653
1654             if (ref->u.ar.stride[i])
1655               {
1656                 if (ref->u.ar.stride[i]->expr_type == EXPR_CONSTANT)
1657                   stride = mpz_get_si (ref->u.ar.stride[i]->value.integer);
1658                 else
1659                   return 0;
1660               }
1661
1662             if (ref->u.ar.start[i])
1663               {
1664                 if (ref->u.ar.start[i]->expr_type == EXPR_CONSTANT)
1665                   start = mpz_get_si (ref->u.ar.start[i]->value.integer);
1666                 else
1667                   return 0;
1668               }
1669             else if (ref->u.ar.as->lower[i]
1670                      && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT)
1671               start = mpz_get_si (ref->u.ar.as->lower[i]->value.integer);
1672             else
1673               return 0;
1674
1675             if (ref->u.ar.end[i])
1676               {
1677                 if (ref->u.ar.end[i]->expr_type == EXPR_CONSTANT)
1678                   end = mpz_get_si (ref->u.ar.end[i]->value.integer);
1679                 else
1680                   return 0;
1681               }
1682             else if (ref->u.ar.as->upper[i]
1683                      && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
1684               end = mpz_get_si (ref->u.ar.as->upper[i]->value.integer);
1685             else
1686               return 0;
1687
1688             elements *= (end - start)/stride + 1L;
1689           }
1690       else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_FULL
1691                && ref->u.ar.as->lower && ref->u.ar.as->upper)
1692         for (i = 0; i < ref->u.ar.as->rank; i++)
1693           {
1694             if (ref->u.ar.as->lower[i] && ref->u.ar.as->upper[i]
1695                 && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT
1696                 && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
1697               elements *= mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
1698                           - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
1699                           + 1L;
1700             else
1701               return 0;
1702           }
1703       else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT
1704                && e->expr_type == EXPR_VARIABLE)
1705         {
1706           if (e->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
1707               || e->symtree->n.sym->attr.pointer)
1708             {
1709               elements = 1;
1710               continue;
1711             }
1712
1713           /* Determine the number of remaining elements in the element
1714              sequence for array element designators.  */
1715           is_str_storage = true;
1716           for (i = ref->u.ar.dimen - 1; i >= 0; i--)
1717             {
1718               if (ref->u.ar.start[i] == NULL
1719                   || ref->u.ar.start[i]->expr_type != EXPR_CONSTANT
1720                   || ref->u.ar.as->upper[i] == NULL
1721                   || ref->u.ar.as->lower[i] == NULL
1722                   || ref->u.ar.as->upper[i]->expr_type != EXPR_CONSTANT
1723                   || ref->u.ar.as->lower[i]->expr_type != EXPR_CONSTANT)
1724                 return 0;
1725
1726               elements
1727                    = elements
1728                      * (mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
1729                         - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
1730                         + 1L)
1731                      - (mpz_get_si (ref->u.ar.start[i]->value.integer)
1732                         - mpz_get_si (ref->u.ar.as->lower[i]->value.integer));
1733             }
1734         }
1735       else
1736         return 0;
1737     }
1738
1739   if (substrlen)
1740     return (is_str_storage) ? substrlen + (elements-1)*strlen
1741                             : elements*strlen;
1742   else
1743     return elements*strlen;
1744 }
1745
1746
1747 /* Given an expression, check whether it is an array section
1748    which has a vector subscript. If it has, one is returned,
1749    otherwise zero.  */
1750
1751 static int
1752 has_vector_subscript (gfc_expr *e)
1753 {
1754   int i;
1755   gfc_ref *ref;
1756
1757   if (e == NULL || e->rank == 0 || e->expr_type != EXPR_VARIABLE)
1758     return 0;
1759
1760   for (ref = e->ref; ref; ref = ref->next)
1761     if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION)
1762       for (i = 0; i < ref->u.ar.dimen; i++)
1763         if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
1764           return 1;
1765
1766   return 0;
1767 }
1768
1769
1770 /* Given formal and actual argument lists, see if they are compatible.
1771    If they are compatible, the actual argument list is sorted to
1772    correspond with the formal list, and elements for missing optional
1773    arguments are inserted. If WHERE pointer is nonnull, then we issue
1774    errors when things don't match instead of just returning the status
1775    code.  */
1776
1777 static int
1778 compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
1779                        int ranks_must_agree, int is_elemental, locus *where)
1780 {
1781   gfc_actual_arglist **new_arg, *a, *actual, temp;
1782   gfc_formal_arglist *f;
1783   int i, n, na;
1784   unsigned long actual_size, formal_size;
1785
1786   actual = *ap;
1787
1788   if (actual == NULL && formal == NULL)
1789     return 1;
1790
1791   n = 0;
1792   for (f = formal; f; f = f->next)
1793     n++;
1794
1795   new_arg = (gfc_actual_arglist **) alloca (n * sizeof (gfc_actual_arglist *));
1796
1797   for (i = 0; i < n; i++)
1798     new_arg[i] = NULL;
1799
1800   na = 0;
1801   f = formal;
1802   i = 0;
1803
1804   for (a = actual; a; a = a->next, f = f->next)
1805     {
1806       /* Look for keywords but ignore g77 extensions like %VAL.  */
1807       if (a->name != NULL && a->name[0] != '%')
1808         {
1809           i = 0;
1810           for (f = formal; f; f = f->next, i++)
1811             {
1812               if (f->sym == NULL)
1813                 continue;
1814               if (strcmp (f->sym->name, a->name) == 0)
1815                 break;
1816             }
1817
1818           if (f == NULL)
1819             {
1820               if (where)
1821                 gfc_error ("Keyword argument '%s' at %L is not in "
1822                            "the procedure", a->name, &a->expr->where);
1823               return 0;
1824             }
1825
1826           if (new_arg[i] != NULL)
1827             {
1828               if (where)
1829                 gfc_error ("Keyword argument '%s' at %L is already associated "
1830                            "with another actual argument", a->name,
1831                            &a->expr->where);
1832               return 0;
1833             }
1834         }
1835
1836       if (f == NULL)
1837         {
1838           if (where)
1839             gfc_error ("More actual than formal arguments in procedure "
1840                        "call at %L", where);
1841
1842           return 0;
1843         }
1844
1845       if (f->sym == NULL && a->expr == NULL)
1846         goto match;
1847
1848       if (f->sym == NULL)
1849         {
1850           if (where)
1851             gfc_error ("Missing alternate return spec in subroutine call "
1852                        "at %L", where);
1853           return 0;
1854         }
1855
1856       if (a->expr == NULL)
1857         {
1858           if (where)
1859             gfc_error ("Unexpected alternate return spec in subroutine "
1860                        "call at %L", where);
1861           return 0;
1862         }
1863       
1864       if (!compare_parameter (f->sym, a->expr, ranks_must_agree,
1865                               is_elemental, where))
1866         return 0;
1867
1868       /* Special case for character arguments.  For allocatable, pointer
1869          and assumed-shape dummies, the string length needs to match
1870          exactly.  */
1871       if (a->expr->ts.type == BT_CHARACTER
1872            && a->expr->ts.u.cl && a->expr->ts.u.cl->length
1873            && a->expr->ts.u.cl->length->expr_type == EXPR_CONSTANT
1874            && f->sym->ts.u.cl && f->sym->ts.u.cl && f->sym->ts.u.cl->length
1875            && f->sym->ts.u.cl->length->expr_type == EXPR_CONSTANT
1876            && (f->sym->attr.pointer || f->sym->attr.allocatable
1877                || (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
1878            && (mpz_cmp (a->expr->ts.u.cl->length->value.integer,
1879                         f->sym->ts.u.cl->length->value.integer) != 0))
1880          {
1881            if (where && (f->sym->attr.pointer || f->sym->attr.allocatable))
1882              gfc_warning ("Character length mismatch (%ld/%ld) between actual "
1883                           "argument and pointer or allocatable dummy argument "
1884                           "'%s' at %L",
1885                           mpz_get_si (a->expr->ts.u.cl->length->value.integer),
1886                           mpz_get_si (f->sym->ts.u.cl->length->value.integer),
1887                           f->sym->name, &a->expr->where);
1888            else if (where)
1889              gfc_warning ("Character length mismatch (%ld/%ld) between actual "
1890                           "argument and assumed-shape dummy argument '%s' "
1891                           "at %L",
1892                           mpz_get_si (a->expr->ts.u.cl->length->value.integer),
1893                           mpz_get_si (f->sym->ts.u.cl->length->value.integer),
1894                           f->sym->name, &a->expr->where);
1895            return 0;
1896          }
1897
1898       actual_size = get_expr_storage_size (a->expr);
1899       formal_size = get_sym_storage_size (f->sym);
1900       if (actual_size != 0
1901             && actual_size < formal_size
1902             && a->expr->ts.type != BT_PROCEDURE)
1903         {
1904           if (a->expr->ts.type == BT_CHARACTER && !f->sym->as && where)
1905             gfc_warning ("Character length of actual argument shorter "
1906                         "than of dummy argument '%s' (%lu/%lu) at %L",
1907                         f->sym->name, actual_size, formal_size,
1908                         &a->expr->where);
1909           else if (where)
1910             gfc_warning ("Actual argument contains too few "
1911                         "elements for dummy argument '%s' (%lu/%lu) at %L",
1912                         f->sym->name, actual_size, formal_size,
1913                         &a->expr->where);
1914           return  0;
1915         }
1916
1917       /* Satisfy 12.4.1.3 by ensuring that a procedure pointer actual argument
1918          is provided for a procedure pointer formal argument.  */
1919       if (f->sym->attr.proc_pointer
1920           && !((a->expr->expr_type == EXPR_VARIABLE
1921                 && a->expr->symtree->n.sym->attr.proc_pointer)
1922                || (a->expr->expr_type == EXPR_FUNCTION
1923                    && a->expr->symtree->n.sym->result->attr.proc_pointer)
1924                || gfc_is_proc_ptr_comp (a->expr, NULL)))
1925         {
1926           if (where)
1927             gfc_error ("Expected a procedure pointer for argument '%s' at %L",
1928                        f->sym->name, &a->expr->where);
1929           return 0;
1930         }
1931
1932       /* Satisfy 12.4.1.2 by ensuring that a procedure actual argument is
1933          provided for a procedure formal argument.  */
1934       if (a->expr->ts.type != BT_PROCEDURE && !gfc_is_proc_ptr_comp (a->expr, NULL)
1935           && a->expr->expr_type == EXPR_VARIABLE
1936           && f->sym->attr.flavor == FL_PROCEDURE)
1937         {
1938           if (where)
1939             gfc_error ("Expected a procedure for argument '%s' at %L",
1940                        f->sym->name, &a->expr->where);
1941           return 0;
1942         }
1943
1944       if (f->sym->attr.flavor == FL_PROCEDURE && f->sym->attr.pure
1945           && a->expr->ts.type == BT_PROCEDURE
1946           && !a->expr->symtree->n.sym->attr.pure)
1947         {
1948           if (where)
1949             gfc_error ("Expected a PURE procedure for argument '%s' at %L",
1950                        f->sym->name, &a->expr->where);
1951           return 0;
1952         }
1953
1954       if (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE
1955           && a->expr->expr_type == EXPR_VARIABLE
1956           && a->expr->symtree->n.sym->as
1957           && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SIZE
1958           && (a->expr->ref == NULL
1959               || (a->expr->ref->type == REF_ARRAY
1960                   && a->expr->ref->u.ar.type == AR_FULL)))
1961         {
1962           if (where)
1963             gfc_error ("Actual argument for '%s' cannot be an assumed-size"
1964                        " array at %L", f->sym->name, where);
1965           return 0;
1966         }
1967
1968       if (a->expr->expr_type != EXPR_NULL
1969           && compare_pointer (f->sym, a->expr) == 0)
1970         {
1971           if (where)
1972             gfc_error ("Actual argument for '%s' must be a pointer at %L",
1973                        f->sym->name, &a->expr->where);
1974           return 0;
1975         }
1976
1977       if (a->expr->expr_type != EXPR_NULL
1978           && compare_allocatable (f->sym, a->expr) == 0)
1979         {
1980           if (where)
1981             gfc_error ("Actual argument for '%s' must be ALLOCATABLE at %L",
1982                        f->sym->name, &a->expr->where);
1983           return 0;
1984         }
1985
1986       /* Check intent = OUT/INOUT for definable actual argument.  */
1987       if ((a->expr->expr_type != EXPR_VARIABLE
1988            || (a->expr->symtree->n.sym->attr.flavor != FL_VARIABLE
1989                && a->expr->symtree->n.sym->attr.flavor != FL_PROCEDURE))
1990           && (f->sym->attr.intent == INTENT_OUT
1991               || f->sym->attr.intent == INTENT_INOUT))
1992         {
1993           if (where)
1994             gfc_error ("Actual argument at %L must be definable as "
1995                        "the dummy argument '%s' is INTENT = OUT/INOUT",
1996                        &a->expr->where, f->sym->name);
1997           return 0;
1998         }
1999
2000       if (!compare_parameter_protected(f->sym, a->expr))
2001         {
2002           if (where)
2003             gfc_error ("Actual argument at %L is use-associated with "
2004                        "PROTECTED attribute and dummy argument '%s' is "
2005                        "INTENT = OUT/INOUT",
2006                        &a->expr->where,f->sym->name);
2007           return 0;
2008         }
2009
2010       if ((f->sym->attr.intent == INTENT_OUT
2011            || f->sym->attr.intent == INTENT_INOUT
2012            || f->sym->attr.volatile_)
2013           && has_vector_subscript (a->expr))
2014         {
2015           if (where)
2016             gfc_error ("Array-section actual argument with vector subscripts "
2017                        "at %L is incompatible with INTENT(OUT), INTENT(INOUT) "
2018                        "or VOLATILE attribute of the dummy argument '%s'",
2019                        &a->expr->where, f->sym->name);
2020           return 0;
2021         }
2022
2023       /* C1232 (R1221) For an actual argument which is an array section or
2024          an assumed-shape array, the dummy argument shall be an assumed-
2025          shape array, if the dummy argument has the VOLATILE attribute.  */
2026
2027       if (f->sym->attr.volatile_
2028           && a->expr->symtree->n.sym->as
2029           && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
2030           && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2031         {
2032           if (where)
2033             gfc_error ("Assumed-shape actual argument at %L is "
2034                        "incompatible with the non-assumed-shape "
2035                        "dummy argument '%s' due to VOLATILE attribute",
2036                        &a->expr->where,f->sym->name);
2037           return 0;
2038         }
2039
2040       if (f->sym->attr.volatile_
2041           && a->expr->ref && a->expr->ref->u.ar.type == AR_SECTION
2042           && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2043         {
2044           if (where)
2045             gfc_error ("Array-section actual argument at %L is "
2046                        "incompatible with the non-assumed-shape "
2047                        "dummy argument '%s' due to VOLATILE attribute",
2048                        &a->expr->where,f->sym->name);
2049           return 0;
2050         }
2051
2052       /* C1233 (R1221) For an actual argument which is a pointer array, the
2053          dummy argument shall be an assumed-shape or pointer array, if the
2054          dummy argument has the VOLATILE attribute.  */
2055
2056       if (f->sym->attr.volatile_
2057           && a->expr->symtree->n.sym->attr.pointer
2058           && a->expr->symtree->n.sym->as
2059           && !(f->sym->as
2060                && (f->sym->as->type == AS_ASSUMED_SHAPE
2061                    || f->sym->attr.pointer)))
2062         {
2063           if (where)
2064             gfc_error ("Pointer-array actual argument at %L requires "
2065                        "an assumed-shape or pointer-array dummy "
2066                        "argument '%s' due to VOLATILE attribute",
2067                        &a->expr->where,f->sym->name);
2068           return 0;
2069         }
2070
2071     match:
2072       if (a == actual)
2073         na = i;
2074
2075       new_arg[i++] = a;
2076     }
2077
2078   /* Make sure missing actual arguments are optional.  */
2079   i = 0;
2080   for (f = formal; f; f = f->next, i++)
2081     {
2082       if (new_arg[i] != NULL)
2083         continue;
2084       if (f->sym == NULL)
2085         {
2086           if (where)
2087             gfc_error ("Missing alternate return spec in subroutine call "
2088                        "at %L", where);
2089           return 0;
2090         }
2091       if (!f->sym->attr.optional)
2092         {
2093           if (where)
2094             gfc_error ("Missing actual argument for argument '%s' at %L",
2095                        f->sym->name, where);
2096           return 0;
2097         }
2098     }
2099
2100   /* The argument lists are compatible.  We now relink a new actual
2101      argument list with null arguments in the right places.  The head
2102      of the list remains the head.  */
2103   for (i = 0; i < n; i++)
2104     if (new_arg[i] == NULL)
2105       new_arg[i] = gfc_get_actual_arglist ();
2106
2107   if (na != 0)
2108     {
2109       temp = *new_arg[0];
2110       *new_arg[0] = *actual;
2111       *actual = temp;
2112
2113       a = new_arg[0];
2114       new_arg[0] = new_arg[na];
2115       new_arg[na] = a;
2116     }
2117
2118   for (i = 0; i < n - 1; i++)
2119     new_arg[i]->next = new_arg[i + 1];
2120
2121   new_arg[i]->next = NULL;
2122
2123   if (*ap == NULL && n > 0)
2124     *ap = new_arg[0];
2125
2126   /* Note the types of omitted optional arguments.  */
2127   for (a = *ap, f = formal; a; a = a->next, f = f->next)
2128     if (a->expr == NULL && a->label == NULL)
2129       a->missing_arg_type = f->sym->ts.type;
2130
2131   return 1;
2132 }
2133
2134
2135 typedef struct
2136 {
2137   gfc_formal_arglist *f;
2138   gfc_actual_arglist *a;
2139 }
2140 argpair;
2141
2142 /* qsort comparison function for argument pairs, with the following
2143    order:
2144     - p->a->expr == NULL
2145     - p->a->expr->expr_type != EXPR_VARIABLE
2146     - growing p->a->expr->symbol.  */
2147
2148 static int
2149 pair_cmp (const void *p1, const void *p2)
2150 {
2151   const gfc_actual_arglist *a1, *a2;
2152
2153   /* *p1 and *p2 are elements of the to-be-sorted array.  */
2154   a1 = ((const argpair *) p1)->a;
2155   a2 = ((const argpair *) p2)->a;
2156   if (!a1->expr)
2157     {
2158       if (!a2->expr)
2159         return 0;
2160       return -1;
2161     }
2162   if (!a2->expr)
2163     return 1;
2164   if (a1->expr->expr_type != EXPR_VARIABLE)
2165     {
2166       if (a2->expr->expr_type != EXPR_VARIABLE)
2167         return 0;
2168       return -1;
2169     }
2170   if (a2->expr->expr_type != EXPR_VARIABLE)
2171     return 1;
2172   return a1->expr->symtree->n.sym < a2->expr->symtree->n.sym;
2173 }
2174
2175
2176 /* Given two expressions from some actual arguments, test whether they
2177    refer to the same expression. The analysis is conservative.
2178    Returning FAILURE will produce no warning.  */
2179
2180 static gfc_try
2181 compare_actual_expr (gfc_expr *e1, gfc_expr *e2)
2182 {
2183   const gfc_ref *r1, *r2;
2184
2185   if (!e1 || !e2
2186       || e1->expr_type != EXPR_VARIABLE
2187       || e2->expr_type != EXPR_VARIABLE
2188       || e1->symtree->n.sym != e2->symtree->n.sym)
2189     return FAILURE;
2190
2191   /* TODO: improve comparison, see expr.c:show_ref().  */
2192   for (r1 = e1->ref, r2 = e2->ref; r1 && r2; r1 = r1->next, r2 = r2->next)
2193     {
2194       if (r1->type != r2->type)
2195         return FAILURE;
2196       switch (r1->type)
2197         {
2198         case REF_ARRAY:
2199           if (r1->u.ar.type != r2->u.ar.type)
2200             return FAILURE;
2201           /* TODO: At the moment, consider only full arrays;
2202              we could do better.  */
2203           if (r1->u.ar.type != AR_FULL || r2->u.ar.type != AR_FULL)
2204             return FAILURE;
2205           break;
2206
2207         case REF_COMPONENT:
2208           if (r1->u.c.component != r2->u.c.component)
2209             return FAILURE;
2210           break;
2211
2212         case REF_SUBSTRING:
2213           return FAILURE;
2214
2215         default:
2216           gfc_internal_error ("compare_actual_expr(): Bad component code");
2217         }
2218     }
2219   if (!r1 && !r2)
2220     return SUCCESS;
2221   return FAILURE;
2222 }
2223
2224
2225 /* Given formal and actual argument lists that correspond to one
2226    another, check that identical actual arguments aren't not
2227    associated with some incompatible INTENTs.  */
2228
2229 static gfc_try
2230 check_some_aliasing (gfc_formal_arglist *f, gfc_actual_arglist *a)
2231 {
2232   sym_intent f1_intent, f2_intent;
2233   gfc_formal_arglist *f1;
2234   gfc_actual_arglist *a1;
2235   size_t n, i, j;
2236   argpair *p;
2237   gfc_try t = SUCCESS;
2238
2239   n = 0;
2240   for (f1 = f, a1 = a;; f1 = f1->next, a1 = a1->next)
2241     {
2242       if (f1 == NULL && a1 == NULL)
2243         break;
2244       if (f1 == NULL || a1 == NULL)
2245         gfc_internal_error ("check_some_aliasing(): List mismatch");
2246       n++;
2247     }
2248   if (n == 0)
2249     return t;
2250   p = (argpair *) alloca (n * sizeof (argpair));
2251
2252   for (i = 0, f1 = f, a1 = a; i < n; i++, f1 = f1->next, a1 = a1->next)
2253     {
2254       p[i].f = f1;
2255       p[i].a = a1;
2256     }
2257
2258   qsort (p, n, sizeof (argpair), pair_cmp);
2259
2260   for (i = 0; i < n; i++)
2261     {
2262       if (!p[i].a->expr
2263           || p[i].a->expr->expr_type != EXPR_VARIABLE
2264           || p[i].a->expr->ts.type == BT_PROCEDURE)
2265         continue;
2266       f1_intent = p[i].f->sym->attr.intent;
2267       for (j = i + 1; j < n; j++)
2268         {
2269           /* Expected order after the sort.  */
2270           if (!p[j].a->expr || p[j].a->expr->expr_type != EXPR_VARIABLE)
2271             gfc_internal_error ("check_some_aliasing(): corrupted data");
2272
2273           /* Are the expression the same?  */
2274           if (compare_actual_expr (p[i].a->expr, p[j].a->expr) == FAILURE)
2275             break;
2276           f2_intent = p[j].f->sym->attr.intent;
2277           if ((f1_intent == INTENT_IN && f2_intent == INTENT_OUT)
2278               || (f1_intent == INTENT_OUT && f2_intent == INTENT_IN))
2279             {
2280               gfc_warning ("Same actual argument associated with INTENT(%s) "
2281                            "argument '%s' and INTENT(%s) argument '%s' at %L",
2282                            gfc_intent_string (f1_intent), p[i].f->sym->name,
2283                            gfc_intent_string (f2_intent), p[j].f->sym->name,
2284                            &p[i].a->expr->where);
2285               t = FAILURE;
2286             }
2287         }
2288     }
2289
2290   return t;
2291 }
2292
2293
2294 /* Given a symbol of a formal argument list and an expression,
2295    return nonzero if their intents are compatible, zero otherwise.  */
2296
2297 static int
2298 compare_parameter_intent (gfc_symbol *formal, gfc_expr *actual)
2299 {
2300   if (actual->symtree->n.sym->attr.pointer && !formal->attr.pointer)
2301     return 1;
2302
2303   if (actual->symtree->n.sym->attr.intent != INTENT_IN)
2304     return 1;
2305
2306   if (formal->attr.intent == INTENT_INOUT || formal->attr.intent == INTENT_OUT)
2307     return 0;
2308
2309   return 1;
2310 }
2311
2312
2313 /* Given formal and actual argument lists that correspond to one
2314    another, check that they are compatible in the sense that intents
2315    are not mismatched.  */
2316
2317 static gfc_try
2318 check_intents (gfc_formal_arglist *f, gfc_actual_arglist *a)
2319 {
2320   sym_intent f_intent;
2321
2322   for (;; f = f->next, a = a->next)
2323     {
2324       if (f == NULL && a == NULL)
2325         break;
2326       if (f == NULL || a == NULL)
2327         gfc_internal_error ("check_intents(): List mismatch");
2328
2329       if (a->expr == NULL || a->expr->expr_type != EXPR_VARIABLE)
2330         continue;
2331
2332       f_intent = f->sym->attr.intent;
2333
2334       if (!compare_parameter_intent(f->sym, a->expr))
2335         {
2336           gfc_error ("Procedure argument at %L is INTENT(IN) while interface "
2337                      "specifies INTENT(%s)", &a->expr->where,
2338                      gfc_intent_string (f_intent));
2339           return FAILURE;
2340         }
2341
2342       if (gfc_pure (NULL) && gfc_impure_variable (a->expr->symtree->n.sym))
2343         {
2344           if (f_intent == INTENT_INOUT || f_intent == INTENT_OUT)
2345             {
2346               gfc_error ("Procedure argument at %L is local to a PURE "
2347                          "procedure and is passed to an INTENT(%s) argument",
2348                          &a->expr->where, gfc_intent_string (f_intent));
2349               return FAILURE;
2350             }
2351
2352           if (f->sym->attr.pointer)
2353             {
2354               gfc_error ("Procedure argument at %L is local to a PURE "
2355                          "procedure and has the POINTER attribute",
2356                          &a->expr->where);
2357               return FAILURE;
2358             }
2359         }
2360     }
2361
2362   return SUCCESS;
2363 }
2364
2365
2366 /* Check how a procedure is used against its interface.  If all goes
2367    well, the actual argument list will also end up being properly
2368    sorted.  */
2369
2370 void
2371 gfc_procedure_use (gfc_symbol *sym, gfc_actual_arglist **ap, locus *where)
2372 {
2373
2374   /* Warn about calls with an implicit interface.  Special case
2375      for calling a ISO_C_BINDING becase c_loc and c_funloc
2376      are pseudo-unknown.  */
2377   if (gfc_option.warn_implicit_interface
2378       && sym->attr.if_source == IFSRC_UNKNOWN
2379       && ! sym->attr.is_iso_c)
2380     gfc_warning ("Procedure '%s' called with an implicit interface at %L",
2381                  sym->name, where);
2382
2383   if (sym->attr.if_source == IFSRC_UNKNOWN)
2384     {
2385       gfc_actual_arglist *a;
2386       for (a = *ap; a; a = a->next)
2387         {
2388           /* Skip g77 keyword extensions like %VAL, %REF, %LOC.  */
2389           if (a->name != NULL && a->name[0] != '%')
2390             {
2391               gfc_error("Keyword argument requires explicit interface "
2392                         "for procedure '%s' at %L", sym->name, &a->expr->where);
2393               break;
2394             }
2395         }
2396
2397       return;
2398     }
2399
2400   if (!compare_actual_formal (ap, sym->formal, 0, sym->attr.elemental, where))
2401     return;
2402
2403   check_intents (sym->formal, *ap);
2404   if (gfc_option.warn_aliasing)
2405     check_some_aliasing (sym->formal, *ap);
2406 }
2407
2408
2409 /* Check how a procedure pointer component is used against its interface.
2410    If all goes well, the actual argument list will also end up being properly
2411    sorted. Completely analogous to gfc_procedure_use.  */
2412
2413 void
2414 gfc_ppc_use (gfc_component *comp, gfc_actual_arglist **ap, locus *where)
2415 {
2416
2417   /* Warn about calls with an implicit interface.  Special case
2418      for calling a ISO_C_BINDING becase c_loc and c_funloc
2419      are pseudo-unknown.  */
2420   if (gfc_option.warn_implicit_interface
2421       && comp->attr.if_source == IFSRC_UNKNOWN
2422       && !comp->attr.is_iso_c)
2423     gfc_warning ("Procedure pointer component '%s' called with an implicit "
2424                  "interface at %L", comp->name, where);
2425
2426   if (comp->attr.if_source == IFSRC_UNKNOWN)
2427     {
2428       gfc_actual_arglist *a;
2429       for (a = *ap; a; a = a->next)
2430         {
2431           /* Skip g77 keyword extensions like %VAL, %REF, %LOC.  */
2432           if (a->name != NULL && a->name[0] != '%')
2433             {
2434               gfc_error("Keyword argument requires explicit interface "
2435                         "for procedure pointer component '%s' at %L",
2436                         comp->name, &a->expr->where);
2437               break;
2438             }
2439         }
2440
2441       return;
2442     }
2443
2444   if (!compare_actual_formal (ap, comp->formal, 0, comp->attr.elemental, where))
2445     return;
2446
2447   check_intents (comp->formal, *ap);
2448   if (gfc_option.warn_aliasing)
2449     check_some_aliasing (comp->formal, *ap);
2450 }
2451
2452
2453 /* Try if an actual argument list matches the formal list of a symbol,
2454    respecting the symbol's attributes like ELEMENTAL.  This is used for
2455    GENERIC resolution.  */
2456
2457 bool
2458 gfc_arglist_matches_symbol (gfc_actual_arglist** args, gfc_symbol* sym)
2459 {
2460   bool r;
2461
2462   gcc_assert (sym->attr.flavor == FL_PROCEDURE);
2463
2464   r = !sym->attr.elemental;
2465   if (compare_actual_formal (args, sym->formal, r, !r, NULL))
2466     {
2467       check_intents (sym->formal, *args);
2468       if (gfc_option.warn_aliasing)
2469         check_some_aliasing (sym->formal, *args);
2470       return true;
2471     }
2472
2473   return false;
2474 }
2475
2476
2477 /* Given an interface pointer and an actual argument list, search for
2478    a formal argument list that matches the actual.  If found, returns
2479    a pointer to the symbol of the correct interface.  Returns NULL if
2480    not found.  */
2481
2482 gfc_symbol *
2483 gfc_search_interface (gfc_interface *intr, int sub_flag,
2484                       gfc_actual_arglist **ap)
2485 {
2486   gfc_symbol *elem_sym = NULL;
2487   for (; intr; intr = intr->next)
2488     {
2489       if (sub_flag && intr->sym->attr.function)
2490         continue;
2491       if (!sub_flag && intr->sym->attr.subroutine)
2492         continue;
2493
2494       if (gfc_arglist_matches_symbol (ap, intr->sym))
2495         {
2496           /* Satisfy 12.4.4.1 such that an elemental match has lower
2497              weight than a non-elemental match.  */ 
2498           if (intr->sym->attr.elemental)
2499             {
2500               elem_sym = intr->sym;
2501               continue;
2502             }
2503           return intr->sym;
2504         }
2505     }
2506
2507   return elem_sym ? elem_sym : NULL;
2508 }
2509
2510
2511 /* Do a brute force recursive search for a symbol.  */
2512
2513 static gfc_symtree *
2514 find_symtree0 (gfc_symtree *root, gfc_symbol *sym)
2515 {
2516   gfc_symtree * st;
2517
2518   if (root->n.sym == sym)
2519     return root;
2520
2521   st = NULL;
2522   if (root->left)
2523     st = find_symtree0 (root->left, sym);
2524   if (root->right && ! st)
2525     st = find_symtree0 (root->right, sym);
2526   return st;
2527 }
2528
2529
2530 /* Find a symtree for a symbol.  */
2531
2532 gfc_symtree *
2533 gfc_find_sym_in_symtree (gfc_symbol *sym)
2534 {
2535   gfc_symtree *st;
2536   gfc_namespace *ns;
2537
2538   /* First try to find it by name.  */
2539   gfc_find_sym_tree (sym->name, gfc_current_ns, 1, &st);
2540   if (st && st->n.sym == sym)
2541     return st;
2542
2543   /* If it's been renamed, resort to a brute-force search.  */
2544   /* TODO: avoid having to do this search.  If the symbol doesn't exist
2545      in the symtree for the current namespace, it should probably be added.  */
2546   for (ns = gfc_current_ns; ns; ns = ns->parent)
2547     {
2548       st = find_symtree0 (ns->sym_root, sym);
2549       if (st)
2550         return st;
2551     }
2552   gfc_internal_error ("Unable to find symbol %s", sym->name);
2553   /* Not reached.  */
2554 }
2555
2556
2557 /* See if the arglist to an operator-call contains a derived-type argument
2558    with a matching type-bound operator.  If so, return the matching specific
2559    procedure defined as operator-target as well as the base-object to use
2560    (which is the found derived-type argument with operator).  */
2561
2562 static gfc_typebound_proc*
2563 matching_typebound_op (gfc_expr** tb_base,
2564                        gfc_actual_arglist* args,
2565                        gfc_intrinsic_op op, const char* uop)
2566 {
2567   gfc_actual_arglist* base;
2568
2569   for (base = args; base; base = base->next)
2570     if (base->expr->ts.type == BT_DERIVED)
2571       {
2572         gfc_typebound_proc* tb;
2573         gfc_symbol* derived;
2574         gfc_try result;
2575
2576         derived = base->expr->ts.u.derived;
2577
2578         if (op == INTRINSIC_USER)
2579           {
2580             gfc_symtree* tb_uop;
2581
2582             gcc_assert (uop);
2583             tb_uop = gfc_find_typebound_user_op (derived, &result, uop,
2584                                                  false, NULL);
2585
2586             if (tb_uop)
2587               tb = tb_uop->n.tb;
2588             else
2589               tb = NULL;
2590           }
2591         else
2592           tb = gfc_find_typebound_intrinsic_op (derived, &result, op,
2593                                                 false, NULL);
2594
2595         /* This means we hit a PRIVATE operator which is use-associated and
2596            should thus not be seen.  */
2597         if (result == FAILURE)
2598           tb = NULL;
2599
2600         /* Look through the super-type hierarchy for a matching specific
2601            binding.  */
2602         for (; tb; tb = tb->overridden)
2603           {
2604             gfc_tbp_generic* g;
2605
2606             gcc_assert (tb->is_generic);
2607             for (g = tb->u.generic; g; g = g->next)
2608               {
2609                 gfc_symbol* target;
2610                 gfc_actual_arglist* argcopy;
2611                 bool matches;
2612
2613                 gcc_assert (g->specific);
2614                 if (g->specific->error)
2615                   continue;
2616
2617                 target = g->specific->u.specific->n.sym;
2618
2619                 /* Check if this arglist matches the formal.  */
2620                 argcopy = gfc_copy_actual_arglist (args);
2621                 matches = gfc_arglist_matches_symbol (&argcopy, target);
2622                 gfc_free_actual_arglist (argcopy);
2623
2624                 /* Return if we found a match.  */
2625                 if (matches)
2626                   {
2627                     *tb_base = base->expr;
2628                     return g->specific;
2629                   }
2630               }
2631           }
2632       }
2633
2634   return NULL;
2635 }
2636
2637
2638 /* For the 'actual arglist' of an operator call and a specific typebound
2639    procedure that has been found the target of a type-bound operator, build the
2640    appropriate EXPR_COMPCALL and resolve it.  We take this indirection over
2641    type-bound procedures rather than resolving type-bound operators 'directly'
2642    so that we can reuse the existing logic.  */
2643
2644 static void
2645 build_compcall_for_operator (gfc_expr* e, gfc_actual_arglist* actual,
2646                              gfc_expr* base, gfc_typebound_proc* target)
2647 {
2648   e->expr_type = EXPR_COMPCALL;
2649   e->value.compcall.tbp = target;
2650   e->value.compcall.name = "operator"; /* Should not matter.  */
2651   e->value.compcall.actual = actual;
2652   e->value.compcall.base_object = base;
2653   e->value.compcall.ignore_pass = 1;
2654   e->value.compcall.assign = 0;
2655 }
2656
2657
2658 /* This subroutine is called when an expression is being resolved.
2659    The expression node in question is either a user defined operator
2660    or an intrinsic operator with arguments that aren't compatible
2661    with the operator.  This subroutine builds an actual argument list
2662    corresponding to the operands, then searches for a compatible
2663    interface.  If one is found, the expression node is replaced with
2664    the appropriate function call.
2665    real_error is an additional output argument that specifies if FAILURE
2666    is because of some real error and not because no match was found.  */
2667
2668 gfc_try
2669 gfc_extend_expr (gfc_expr *e, bool *real_error)
2670 {
2671   gfc_actual_arglist *actual;
2672   gfc_symbol *sym;
2673   gfc_namespace *ns;
2674   gfc_user_op *uop;
2675   gfc_intrinsic_op i;
2676
2677   sym = NULL;
2678
2679   actual = gfc_get_actual_arglist ();
2680   actual->expr = e->value.op.op1;
2681
2682   *real_error = false;
2683
2684   if (e->value.op.op2 != NULL)
2685     {
2686       actual->next = gfc_get_actual_arglist ();
2687       actual->next->expr = e->value.op.op2;
2688     }
2689
2690   i = fold_unary_intrinsic (e->value.op.op);
2691
2692   if (i == INTRINSIC_USER)
2693     {
2694       for (ns = gfc_current_ns; ns; ns = ns->parent)
2695         {
2696           uop = gfc_find_uop (e->value.op.uop->name, ns);
2697           if (uop == NULL)
2698             continue;
2699
2700           sym = gfc_search_interface (uop->op, 0, &actual);
2701           if (sym != NULL)
2702             break;
2703         }
2704     }
2705   else
2706     {
2707       for (ns = gfc_current_ns; ns; ns = ns->parent)
2708         {
2709           /* Due to the distinction between '==' and '.eq.' and friends, one has
2710              to check if either is defined.  */
2711           switch (i)
2712             {
2713 #define CHECK_OS_COMPARISON(comp) \
2714   case INTRINSIC_##comp: \
2715   case INTRINSIC_##comp##_OS: \
2716     sym = gfc_search_interface (ns->op[INTRINSIC_##comp], 0, &actual); \
2717     if (!sym) \
2718       sym = gfc_search_interface (ns->op[INTRINSIC_##comp##_OS], 0, &actual); \
2719     break;
2720               CHECK_OS_COMPARISON(EQ)
2721               CHECK_OS_COMPARISON(NE)
2722               CHECK_OS_COMPARISON(GT)
2723               CHECK_OS_COMPARISON(GE)
2724               CHECK_OS_COMPARISON(LT)
2725               CHECK_OS_COMPARISON(LE)
2726 #undef CHECK_OS_COMPARISON
2727
2728               default:
2729                 sym = gfc_search_interface (ns->op[i], 0, &actual);
2730             }
2731
2732           if (sym != NULL)
2733             break;
2734         }
2735     }
2736
2737   /* TODO: Do an ambiguity-check and error if multiple matching interfaces are
2738      found rather than just taking the first one and not checking further.  */
2739
2740   if (sym == NULL)
2741     {
2742       gfc_typebound_proc* tbo;
2743       gfc_expr* tb_base;
2744
2745       /* See if we find a matching type-bound operator.  */
2746       if (i == INTRINSIC_USER)
2747         tbo = matching_typebound_op (&tb_base, actual,
2748                                      i, e->value.op.uop->name);
2749       else
2750         switch (i)
2751           {
2752 #define CHECK_OS_COMPARISON(comp) \
2753   case INTRINSIC_##comp: \
2754   case INTRINSIC_##comp##_OS: \
2755     tbo = matching_typebound_op (&tb_base, actual, \
2756                                  INTRINSIC_##comp, NULL); \
2757     if (!tbo) \
2758       tbo = matching_typebound_op (&tb_base, actual, \
2759                                    INTRINSIC_##comp##_OS, NULL); \
2760     break;
2761             CHECK_OS_COMPARISON(EQ)
2762             CHECK_OS_COMPARISON(NE)
2763             CHECK_OS_COMPARISON(GT)
2764             CHECK_OS_COMPARISON(GE)
2765             CHECK_OS_COMPARISON(LT)
2766             CHECK_OS_COMPARISON(LE)
2767 #undef CHECK_OS_COMPARISON
2768
2769             default:
2770               tbo = matching_typebound_op (&tb_base, actual, i, NULL);
2771               break;
2772           }
2773               
2774       /* If there is a matching typebound-operator, replace the expression with
2775          a call to it and succeed.  */
2776       if (tbo)
2777         {
2778           gfc_try result;
2779
2780           gcc_assert (tb_base);
2781           build_compcall_for_operator (e, actual, tb_base, tbo);
2782
2783           result = gfc_resolve_expr (e);
2784           if (result == FAILURE)
2785             *real_error = true;
2786
2787           return result;
2788         }
2789
2790       /* Don't use gfc_free_actual_arglist().  */
2791       if (actual->next != NULL)
2792         gfc_free (actual->next);
2793       gfc_free (actual);
2794
2795       return FAILURE;
2796     }
2797
2798   /* Change the expression node to a function call.  */
2799   e->expr_type = EXPR_FUNCTION;
2800   e->symtree = gfc_find_sym_in_symtree (sym);
2801   e->value.function.actual = actual;
2802   e->value.function.esym = NULL;
2803   e->value.function.isym = NULL;
2804   e->value.function.name = NULL;
2805   e->user_operator = 1;
2806
2807   if (gfc_resolve_expr (e) == FAILURE)
2808     {
2809       *real_error = true;
2810       return FAILURE;
2811     }
2812
2813   return SUCCESS;
2814 }
2815
2816
2817 /* Tries to replace an assignment code node with a subroutine call to
2818    the subroutine associated with the assignment operator.  Return
2819    SUCCESS if the node was replaced.  On FAILURE, no error is
2820    generated.  */
2821
2822 gfc_try
2823 gfc_extend_assign (gfc_code *c, gfc_namespace *ns)
2824 {
2825   gfc_actual_arglist *actual;
2826   gfc_expr *lhs, *rhs;
2827   gfc_symbol *sym;
2828
2829   lhs = c->expr1;
2830   rhs = c->expr2;
2831
2832   /* Don't allow an intrinsic assignment to be replaced.  */
2833   if (lhs->ts.type != BT_DERIVED
2834       && (rhs->rank == 0 || rhs->rank == lhs->rank)
2835       && (lhs->ts.type == rhs->ts.type
2836           || (gfc_numeric_ts (&lhs->ts) && gfc_numeric_ts (&rhs->ts))))
2837     return FAILURE;
2838
2839   actual = gfc_get_actual_arglist ();
2840   actual->expr = lhs;
2841
2842   actual->next = gfc_get_actual_arglist ();
2843   actual->next->expr = rhs;
2844
2845   sym = NULL;
2846
2847   for (; ns; ns = ns->parent)
2848     {
2849       sym = gfc_search_interface (ns->op[INTRINSIC_ASSIGN], 1, &actual);
2850       if (sym != NULL)
2851         break;
2852     }
2853
2854   /* TODO: Ambiguity-check, see above for gfc_extend_expr.  */
2855
2856   if (sym == NULL)
2857     {
2858       gfc_typebound_proc* tbo;
2859       gfc_expr* tb_base;
2860
2861       /* See if we find a matching type-bound assignment.  */
2862       tbo = matching_typebound_op (&tb_base, actual,
2863                                    INTRINSIC_ASSIGN, NULL);
2864               
2865       /* If there is one, replace the expression with a call to it and
2866          succeed.  */
2867       if (tbo)
2868         {
2869           gcc_assert (tb_base);
2870           c->expr1 = gfc_get_expr ();
2871           build_compcall_for_operator (c->expr1, actual, tb_base, tbo);
2872           c->expr1->value.compcall.assign = 1;
2873           c->expr2 = NULL;
2874           c->op = EXEC_COMPCALL;
2875
2876           /* c is resolved from the caller, so no need to do it here.  */
2877
2878           return SUCCESS;
2879         }
2880
2881       gfc_free (actual->next);
2882       gfc_free (actual);
2883       return FAILURE;
2884     }
2885
2886   /* Replace the assignment with the call.  */
2887   c->op = EXEC_ASSIGN_CALL;
2888   c->symtree = gfc_find_sym_in_symtree (sym);
2889   c->expr1 = NULL;
2890   c->expr2 = NULL;
2891   c->ext.actual = actual;
2892
2893   return SUCCESS;
2894 }
2895
2896
2897 /* Make sure that the interface just parsed is not already present in
2898    the given interface list.  Ambiguity isn't checked yet since module
2899    procedures can be present without interfaces.  */
2900
2901 static gfc_try
2902 check_new_interface (gfc_interface *base, gfc_symbol *new_sym)
2903 {
2904   gfc_interface *ip;
2905
2906   for (ip = base; ip; ip = ip->next)
2907     {
2908       if (ip->sym == new_sym)
2909         {
2910           gfc_error ("Entity '%s' at %C is already present in the interface",
2911                      new_sym->name);
2912           return FAILURE;
2913         }
2914     }
2915
2916   return SUCCESS;
2917 }
2918
2919
2920 /* Add a symbol to the current interface.  */
2921
2922 gfc_try
2923 gfc_add_interface (gfc_symbol *new_sym)
2924 {
2925   gfc_interface **head, *intr;
2926   gfc_namespace *ns;
2927   gfc_symbol *sym;
2928
2929   switch (current_interface.type)
2930     {
2931     case INTERFACE_NAMELESS:
2932     case INTERFACE_ABSTRACT:
2933       return SUCCESS;
2934
2935     case INTERFACE_INTRINSIC_OP:
2936       for (ns = current_interface.ns; ns; ns = ns->parent)
2937         switch (current_interface.op)
2938           {
2939             case INTRINSIC_EQ:
2940             case INTRINSIC_EQ_OS:
2941               if (check_new_interface (ns->op[INTRINSIC_EQ], new_sym) == FAILURE ||
2942                   check_new_interface (ns->op[INTRINSIC_EQ_OS], new_sym) == FAILURE)
2943                 return FAILURE;
2944               break;
2945
2946             case INTRINSIC_NE:
2947             case INTRINSIC_NE_OS:
2948               if (check_new_interface (ns->op[INTRINSIC_NE], new_sym) == FAILURE ||
2949                   check_new_interface (ns->op[INTRINSIC_NE_OS], new_sym) == FAILURE)
2950                 return FAILURE;
2951               break;
2952
2953             case INTRINSIC_GT:
2954             case INTRINSIC_GT_OS:
2955               if (check_new_interface (ns->op[INTRINSIC_GT], new_sym) == FAILURE ||
2956                   check_new_interface (ns->op[INTRINSIC_GT_OS], new_sym) == FAILURE)
2957                 return FAILURE;
2958               break;
2959
2960             case INTRINSIC_GE:
2961             case INTRINSIC_GE_OS:
2962               if (check_new_interface (ns->op[INTRINSIC_GE], new_sym) == FAILURE ||
2963                   check_new_interface (ns->op[INTRINSIC_GE_OS], new_sym) == FAILURE)
2964                 return FAILURE;
2965               break;
2966
2967             case INTRINSIC_LT:
2968             case INTRINSIC_LT_OS:
2969               if (check_new_interface (ns->op[INTRINSIC_LT], new_sym) == FAILURE ||
2970                   check_new_interface (ns->op[INTRINSIC_LT_OS], new_sym) == FAILURE)
2971                 return FAILURE;
2972               break;
2973
2974             case INTRINSIC_LE:
2975             case INTRINSIC_LE_OS:
2976               if (check_new_interface (ns->op[INTRINSIC_LE], new_sym) == FAILURE ||
2977                   check_new_interface (ns->op[INTRINSIC_LE_OS], new_sym) == FAILURE)
2978                 return FAILURE;
2979               break;
2980
2981             default:
2982               if (check_new_interface (ns->op[current_interface.op], new_sym) == FAILURE)
2983                 return FAILURE;
2984           }
2985
2986       head = &current_interface.ns->op[current_interface.op];
2987       break;
2988
2989     case INTERFACE_GENERIC:
2990       for (ns = current_interface.ns; ns; ns = ns->parent)
2991         {
2992           gfc_find_symbol (current_interface.sym->name, ns, 0, &sym);
2993           if (sym == NULL)
2994             continue;
2995
2996           if (check_new_interface (sym->generic, new_sym) == FAILURE)
2997             return FAILURE;
2998         }
2999
3000       head = &current_interface.sym->generic;
3001       break;
3002
3003     case INTERFACE_USER_OP:
3004       if (check_new_interface (current_interface.uop->op, new_sym)
3005           == FAILURE)
3006         return FAILURE;
3007
3008       head = &current_interface.uop->op;
3009       break;
3010
3011     default:
3012       gfc_internal_error ("gfc_add_interface(): Bad interface type");
3013     }
3014
3015   intr = gfc_get_interface ();
3016   intr->sym = new_sym;
3017   intr->where = gfc_current_locus;
3018
3019   intr->next = *head;
3020   *head = intr;
3021
3022   return SUCCESS;
3023 }
3024
3025
3026 gfc_interface *
3027 gfc_current_interface_head (void)
3028 {
3029   switch (current_interface.type)
3030     {
3031       case INTERFACE_INTRINSIC_OP:
3032         return current_interface.ns->op[current_interface.op];
3033         break;
3034
3035       case INTERFACE_GENERIC:
3036         return current_interface.sym->generic;
3037         break;
3038
3039       case INTERFACE_USER_OP:
3040         return current_interface.uop->op;
3041         break;
3042
3043       default:
3044         gcc_unreachable ();
3045     }
3046 }
3047
3048
3049 void
3050 gfc_set_current_interface_head (gfc_interface *i)
3051 {
3052   switch (current_interface.type)
3053     {
3054       case INTERFACE_INTRINSIC_OP:
3055         current_interface.ns->op[current_interface.op] = i;
3056         break;
3057
3058       case INTERFACE_GENERIC:
3059         current_interface.sym->generic = i;
3060         break;
3061
3062       case INTERFACE_USER_OP:
3063         current_interface.uop->op = i;
3064         break;
3065
3066       default:
3067         gcc_unreachable ();
3068     }
3069 }
3070
3071
3072 /* Gets rid of a formal argument list.  We do not free symbols.
3073    Symbols are freed when a namespace is freed.  */
3074
3075 void
3076 gfc_free_formal_arglist (gfc_formal_arglist *p)
3077 {
3078   gfc_formal_arglist *q;
3079
3080   for (; p; p = q)
3081     {
3082       q = p->next;
3083       gfc_free (p);
3084     }
3085 }