OSDN Git Service

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