OSDN Git Service

2009-11-05 Janus Weil <janus@gcc.gnu.org>
[pf3gnuchains/gcc-fork.git] / gcc / fortran / interface.c
1 /* Deal with interfaces.
2    Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009
3    Free Software Foundation, Inc.
4    Contributed by Andy Vaught
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22
23 /* Deal with interfaces.  An explicit interface is represented as a
24    singly linked list of formal argument structures attached to the
25    relevant symbols.  For an implicit interface, the arguments don't
26    point to symbols.  Explicit interfaces point to namespaces that
27    contain the symbols within that interface.
28
29    Implicit interfaces are linked together in a singly linked list
30    along the next_if member of symbol nodes.  Since a particular
31    symbol can only have a single explicit interface, the symbol cannot
32    be part of multiple lists and a single next-member suffices.
33
34    This is not the case for general classes, though.  An operator
35    definition is independent of just about all other uses and has it's
36    own head pointer.
37
38    Nameless interfaces:
39      Nameless interfaces create symbols with explicit interfaces within
40      the current namespace.  They are otherwise unlinked.
41
42    Generic interfaces:
43      The generic name points to a linked list of symbols.  Each symbol
44      has an explicit interface.  Each explicit interface has its own
45      namespace containing the arguments.  Module procedures are symbols in
46      which the interface is added later when the module procedure is parsed.
47
48    User operators:
49      User-defined operators are stored in a their own set of symtrees
50      separate from regular symbols.  The symtrees point to gfc_user_op
51      structures which in turn head up a list of relevant interfaces.
52
53    Extended intrinsics and assignment:
54      The head of these interface lists are stored in the containing namespace.
55
56    Implicit interfaces:
57      An implicit interface is represented as a singly linked list of
58      formal argument list structures that don't point to any symbol
59      nodes -- they just contain types.
60
61
62    When a subprogram is defined, the program unit's name points to an
63    interface as usual, but the link to the namespace is NULL and the
64    formal argument list points to symbols within the same namespace as
65    the program unit name.  */
66
67 #include "config.h"
68 #include "system.h"
69 #include "gfortran.h"
70 #include "match.h"
71
72 /* The current_interface structure holds information about the
73    interface currently being parsed.  This structure is saved and
74    restored during recursive interfaces.  */
75
76 gfc_interface_info current_interface;
77
78
79 /* Free a singly linked list of gfc_interface structures.  */
80
81 void
82 gfc_free_interface (gfc_interface *intr)
83 {
84   gfc_interface *next;
85
86   for (; intr; intr = next)
87     {
88       next = intr->next;
89       gfc_free (intr);
90     }
91 }
92
93
94 /* Change the operators unary plus and minus into binary plus and
95    minus respectively, leaving the rest unchanged.  */
96
97 static gfc_intrinsic_op
98 fold_unary_intrinsic (gfc_intrinsic_op op)
99 {
100   switch (op)
101     {
102     case INTRINSIC_UPLUS:
103       op = INTRINSIC_PLUS;
104       break;
105     case INTRINSIC_UMINUS:
106       op = INTRINSIC_MINUS;
107       break;
108     default:
109       break;
110     }
111
112   return op;
113 }
114
115
116 /* Match a generic specification.  Depending on which type of
117    interface is found, the 'name' or 'op' pointers may be set.
118    This subroutine doesn't return MATCH_NO.  */
119
120 match
121 gfc_match_generic_spec (interface_type *type,
122                         char *name,
123                         gfc_intrinsic_op *op)
124 {
125   char buffer[GFC_MAX_SYMBOL_LEN + 1];
126   match m;
127   gfc_intrinsic_op i;
128
129   if (gfc_match (" assignment ( = )") == MATCH_YES)
130     {
131       *type = INTERFACE_INTRINSIC_OP;
132       *op = INTRINSIC_ASSIGN;
133       return MATCH_YES;
134     }
135
136   if (gfc_match (" operator ( %o )", &i) == MATCH_YES)
137     {                           /* Operator i/f */
138       *type = INTERFACE_INTRINSIC_OP;
139       *op = fold_unary_intrinsic (i);
140       return MATCH_YES;
141     }
142
143   *op = INTRINSIC_NONE;
144   if (gfc_match (" operator ( ") == MATCH_YES)
145     {
146       m = gfc_match_defined_op_name (buffer, 1);
147       if (m == MATCH_NO)
148         goto syntax;
149       if (m != MATCH_YES)
150         return MATCH_ERROR;
151
152       m = gfc_match_char (')');
153       if (m == MATCH_NO)
154         goto syntax;
155       if (m != MATCH_YES)
156         return MATCH_ERROR;
157
158       strcpy (name, buffer);
159       *type = INTERFACE_USER_OP;
160       return MATCH_YES;
161     }
162
163   if (gfc_match_name (buffer) == MATCH_YES)
164     {
165       strcpy (name, buffer);
166       *type = INTERFACE_GENERIC;
167       return MATCH_YES;
168     }
169
170   *type = INTERFACE_NAMELESS;
171   return MATCH_YES;
172
173 syntax:
174   gfc_error ("Syntax error in generic specification at %C");
175   return MATCH_ERROR;
176 }
177
178
179 /* Match one of the five F95 forms of an interface statement.  The
180    matcher for the abstract interface follows.  */
181
182 match
183 gfc_match_interface (void)
184 {
185   char name[GFC_MAX_SYMBOL_LEN + 1];
186   interface_type type;
187   gfc_symbol *sym;
188   gfc_intrinsic_op op;
189   match m;
190
191   m = gfc_match_space ();
192
193   if (gfc_match_generic_spec (&type, name, &op) == MATCH_ERROR)
194     return MATCH_ERROR;
195
196   /* If we're not looking at the end of the statement now, or if this
197      is not a nameless interface but we did not see a space, punt.  */
198   if (gfc_match_eos () != MATCH_YES
199       || (type != INTERFACE_NAMELESS && m != MATCH_YES))
200     {
201       gfc_error ("Syntax error: Trailing garbage in INTERFACE statement "
202                  "at %C");
203       return MATCH_ERROR;
204     }
205
206   current_interface.type = type;
207
208   switch (type)
209     {
210     case INTERFACE_GENERIC:
211       if (gfc_get_symbol (name, NULL, &sym))
212         return MATCH_ERROR;
213
214       if (!sym->attr.generic 
215           && gfc_add_generic (&sym->attr, sym->name, NULL) == FAILURE)
216         return MATCH_ERROR;
217
218       if (sym->attr.dummy)
219         {
220           gfc_error ("Dummy procedure '%s' at %C cannot have a "
221                      "generic interface", sym->name);
222           return MATCH_ERROR;
223         }
224
225       current_interface.sym = gfc_new_block = sym;
226       break;
227
228     case INTERFACE_USER_OP:
229       current_interface.uop = gfc_get_uop (name);
230       break;
231
232     case INTERFACE_INTRINSIC_OP:
233       current_interface.op = op;
234       break;
235
236     case INTERFACE_NAMELESS:
237     case INTERFACE_ABSTRACT:
238       break;
239     }
240
241   return MATCH_YES;
242 }
243
244
245
246 /* Match a F2003 abstract interface.  */
247
248 match
249 gfc_match_abstract_interface (void)
250 {
251   match m;
252
253   if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: ABSTRACT INTERFACE at %C")
254                       == FAILURE)
255     return MATCH_ERROR;
256
257   m = gfc_match_eos ();
258
259   if (m != MATCH_YES)
260     {
261       gfc_error ("Syntax error in ABSTRACT INTERFACE statement at %C");
262       return MATCH_ERROR;
263     }
264
265   current_interface.type = INTERFACE_ABSTRACT;
266
267   return m;
268 }
269
270
271 /* Match the different sort of generic-specs that can be present after
272    the END INTERFACE itself.  */
273
274 match
275 gfc_match_end_interface (void)
276 {
277   char name[GFC_MAX_SYMBOL_LEN + 1];
278   interface_type type;
279   gfc_intrinsic_op op;
280   match m;
281
282   m = gfc_match_space ();
283
284   if (gfc_match_generic_spec (&type, name, &op) == MATCH_ERROR)
285     return MATCH_ERROR;
286
287   /* If we're not looking at the end of the statement now, or if this
288      is not a nameless interface but we did not see a space, punt.  */
289   if (gfc_match_eos () != MATCH_YES
290       || (type != INTERFACE_NAMELESS && m != MATCH_YES))
291     {
292       gfc_error ("Syntax error: Trailing garbage in END INTERFACE "
293                  "statement at %C");
294       return MATCH_ERROR;
295     }
296
297   m = MATCH_YES;
298
299   switch (current_interface.type)
300     {
301     case INTERFACE_NAMELESS:
302     case INTERFACE_ABSTRACT:
303       if (type != INTERFACE_NAMELESS)
304         {
305           gfc_error ("Expected a nameless interface at %C");
306           m = MATCH_ERROR;
307         }
308
309       break;
310
311     case INTERFACE_INTRINSIC_OP:
312       if (type != current_interface.type || op != current_interface.op)
313         {
314
315           if (current_interface.op == INTRINSIC_ASSIGN)
316             gfc_error ("Expected 'END INTERFACE ASSIGNMENT (=)' at %C");
317           else
318             gfc_error ("Expecting 'END INTERFACE OPERATOR (%s)' at %C",
319                        gfc_op2string (current_interface.op));
320
321           m = MATCH_ERROR;
322         }
323
324       break;
325
326     case INTERFACE_USER_OP:
327       /* Comparing the symbol node names is OK because only use-associated
328          symbols can be renamed.  */
329       if (type != current_interface.type
330           || strcmp (current_interface.uop->name, name) != 0)
331         {
332           gfc_error ("Expecting 'END INTERFACE OPERATOR (.%s.)' at %C",
333                      current_interface.uop->name);
334           m = MATCH_ERROR;
335         }
336
337       break;
338
339     case INTERFACE_GENERIC:
340       if (type != current_interface.type
341           || strcmp (current_interface.sym->name, name) != 0)
342         {
343           gfc_error ("Expecting 'END INTERFACE %s' at %C",
344                      current_interface.sym->name);
345           m = MATCH_ERROR;
346         }
347
348       break;
349     }
350
351   return m;
352 }
353
354
355 /* Compare two derived types using the criteria in 4.4.2 of the standard,
356    recursing through gfc_compare_types for the components.  */
357
358 int
359 gfc_compare_derived_types (gfc_symbol *derived1, gfc_symbol *derived2)
360 {
361   gfc_component *dt1, *dt2;
362
363   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   if (s1->attr.function && (s2->attr.subroutine
959       || (!s2->attr.function && s2->ts.type == BT_UNKNOWN
960           && gfc_get_default_type (name2, s2->ns)->type == BT_UNKNOWN)))
961     {
962       if (errmsg != NULL)
963         snprintf (errmsg, err_len, "'%s' is not a function", name2);
964       return 0;
965     }
966
967   if (s1->attr.subroutine && s2->attr.function)
968     {
969       if (errmsg != NULL)
970         snprintf (errmsg, err_len, "'%s' is not a subroutine", name2);
971       return 0;
972     }
973
974   /* If the arguments are functions, check type and kind
975      (only for dummy procedures and procedure pointer assignments).  */
976   if (!generic_flag && intent_flag && s1->attr.function && s2->attr.function)
977     {
978       if (s1->ts.type == BT_UNKNOWN)
979         return 1;
980       if ((s1->ts.type != s2->ts.type) || (s1->ts.kind != s2->ts.kind))
981         {
982           if (errmsg != NULL)
983             snprintf (errmsg, err_len, "Type/kind mismatch in return value "
984                       "of '%s'", name2);
985           return 0;
986         }
987     }
988
989   if (s1->attr.if_source == IFSRC_UNKNOWN
990       || s2->attr.if_source == IFSRC_UNKNOWN)
991     return 1;
992
993   f1 = s1->formal;
994   f2 = s2->formal;
995
996   if (f1 == NULL && f2 == NULL)
997     return 1;                   /* Special case: No arguments.  */
998
999   if (generic_flag)
1000     {
1001       if (count_types_test (f1, f2) || count_types_test (f2, f1))
1002         return 0;
1003       if (generic_correspondence (f1, f2) || generic_correspondence (f2, f1))
1004         return 0;
1005     }
1006   else
1007     /* Perform the abbreviated correspondence test for operators (the
1008        arguments cannot be optional and are always ordered correctly).
1009        This is also done when comparing interfaces for dummy procedures and in
1010        procedure pointer assignments.  */
1011
1012     for (;;)
1013       {
1014         /* Check existence.  */
1015         if (f1 == NULL && f2 == NULL)
1016           break;
1017         if (f1 == NULL || f2 == NULL)
1018           {
1019             if (errmsg != NULL)
1020               snprintf (errmsg, err_len, "'%s' has the wrong number of "
1021                         "arguments", name2);
1022             return 0;
1023           }
1024
1025         /* Check type and rank.  */
1026         if (!compare_type_rank (f1->sym, f2->sym))
1027           {
1028             if (errmsg != NULL)
1029               snprintf (errmsg, err_len, "Type/rank mismatch in argument '%s'",
1030                         f1->sym->name);
1031             return 0;
1032           }
1033
1034         /* Check INTENT.  */
1035         if (intent_flag && (f1->sym->attr.intent != f2->sym->attr.intent))
1036           {
1037             snprintf (errmsg, err_len, "INTENT mismatch in argument '%s'",
1038                       f1->sym->name);
1039             return 0;
1040           }
1041
1042         /* Check OPTIONAL.  */
1043         if (intent_flag && (f1->sym->attr.optional != f2->sym->attr.optional))
1044           {
1045             snprintf (errmsg, err_len, "OPTIONAL mismatch in argument '%s'",
1046                       f1->sym->name);
1047             return 0;
1048           }
1049
1050         f1 = f1->next;
1051         f2 = f2->next;
1052       }
1053
1054   return 1;
1055 }
1056
1057
1058 /* Given a pointer to an interface pointer, remove duplicate
1059    interfaces and make sure that all symbols are either functions or
1060    subroutines.  Returns nonzero if something goes wrong.  */
1061
1062 static int
1063 check_interface0 (gfc_interface *p, const char *interface_name)
1064 {
1065   gfc_interface *psave, *q, *qlast;
1066
1067   psave = p;
1068   /* Make sure all symbols in the interface have been defined as
1069      functions or subroutines.  */
1070   for (; p; p = p->next)
1071     if ((!p->sym->attr.function && !p->sym->attr.subroutine)
1072         || !p->sym->attr.if_source)
1073       {
1074         if (p->sym->attr.external)
1075           gfc_error ("Procedure '%s' in %s at %L has no explicit interface",
1076                      p->sym->name, interface_name, &p->sym->declared_at);
1077         else
1078           gfc_error ("Procedure '%s' in %s at %L is neither function nor "
1079                      "subroutine", p->sym->name, interface_name,
1080                      &p->sym->declared_at);
1081         return 1;
1082       }
1083   p = psave;
1084
1085   /* Remove duplicate interfaces in this interface list.  */
1086   for (; p; p = p->next)
1087     {
1088       qlast = p;
1089
1090       for (q = p->next; q;)
1091         {
1092           if (p->sym != q->sym)
1093             {
1094               qlast = q;
1095               q = q->next;
1096             }
1097           else
1098             {
1099               /* Duplicate interface.  */
1100               qlast->next = q->next;
1101               gfc_free (q);
1102               q = qlast->next;
1103             }
1104         }
1105     }
1106
1107   return 0;
1108 }
1109
1110
1111 /* Check lists of interfaces to make sure that no two interfaces are
1112    ambiguous.  Duplicate interfaces (from the same symbol) are OK here.  */
1113
1114 static int
1115 check_interface1 (gfc_interface *p, gfc_interface *q0,
1116                   int generic_flag, const char *interface_name,
1117                   bool referenced)
1118 {
1119   gfc_interface *q;
1120   for (; p; p = p->next)
1121     for (q = q0; q; q = q->next)
1122       {
1123         if (p->sym == q->sym)
1124           continue;             /* Duplicates OK here.  */
1125
1126         if (p->sym->name == q->sym->name && p->sym->module == q->sym->module)
1127           continue;
1128
1129         if (gfc_compare_interfaces (p->sym, q->sym, NULL, generic_flag, 0,
1130                                     NULL, 0))
1131           {
1132             if (referenced)
1133               {
1134                 gfc_error ("Ambiguous interfaces '%s' and '%s' in %s at %L",
1135                            p->sym->name, q->sym->name, interface_name,
1136                            &p->where);
1137               }
1138
1139             if (!p->sym->attr.use_assoc && q->sym->attr.use_assoc)
1140               gfc_warning ("Ambiguous interfaces '%s' and '%s' in %s at %L",
1141                            p->sym->name, q->sym->name, interface_name,
1142                            &p->where);
1143             return 1;
1144           }
1145       }
1146   return 0;
1147 }
1148
1149
1150 /* Check the generic and operator interfaces of symbols to make sure
1151    that none of the interfaces conflict.  The check has to be done
1152    after all of the symbols are actually loaded.  */
1153
1154 static void
1155 check_sym_interfaces (gfc_symbol *sym)
1156 {
1157   char interface_name[100];
1158   bool k;
1159   gfc_interface *p;
1160
1161   if (sym->ns != gfc_current_ns)
1162     return;
1163
1164   if (sym->generic != NULL)
1165     {
1166       sprintf (interface_name, "generic interface '%s'", sym->name);
1167       if (check_interface0 (sym->generic, interface_name))
1168         return;
1169
1170       for (p = sym->generic; p; p = p->next)
1171         {
1172           if (p->sym->attr.mod_proc
1173               && (p->sym->attr.if_source != IFSRC_DECL
1174                   || p->sym->attr.procedure))
1175             {
1176               gfc_error ("'%s' at %L is not a module procedure",
1177                          p->sym->name, &p->where);
1178               return;
1179             }
1180         }
1181
1182       /* Originally, this test was applied to host interfaces too;
1183          this is incorrect since host associated symbols, from any
1184          source, cannot be ambiguous with local symbols.  */
1185       k = sym->attr.referenced || !sym->attr.use_assoc;
1186       if (check_interface1 (sym->generic, sym->generic, 1, interface_name, k))
1187         sym->attr.ambiguous_interfaces = 1;
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.  */
2384   if (gfc_option.warn_implicit_interface
2385       && sym->attr.if_source == IFSRC_UNKNOWN
2386       && ! sym->attr.is_iso_c)
2387     gfc_warning ("Procedure '%s' called with an implicit interface at %L",
2388                  sym->name, where);
2389
2390   if (sym->attr.if_source == IFSRC_UNKNOWN)
2391     {
2392       gfc_actual_arglist *a;
2393       for (a = *ap; a; a = a->next)
2394         {
2395           /* Skip g77 keyword extensions like %VAL, %REF, %LOC.  */
2396           if (a->name != NULL && a->name[0] != '%')
2397             {
2398               gfc_error("Keyword argument requires explicit interface "
2399                         "for procedure '%s' at %L", sym->name, &a->expr->where);
2400               break;
2401             }
2402         }
2403
2404       return;
2405     }
2406
2407   if (!compare_actual_formal (ap, sym->formal, 0, sym->attr.elemental, where))
2408     return;
2409
2410   check_intents (sym->formal, *ap);
2411   if (gfc_option.warn_aliasing)
2412     check_some_aliasing (sym->formal, *ap);
2413 }
2414
2415
2416 /* Check how a procedure pointer component is used against its interface.
2417    If all goes well, the actual argument list will also end up being properly
2418    sorted. Completely analogous to gfc_procedure_use.  */
2419
2420 void
2421 gfc_ppc_use (gfc_component *comp, gfc_actual_arglist **ap, locus *where)
2422 {
2423
2424   /* Warn about calls with an implicit interface.  Special case
2425      for calling a ISO_C_BINDING becase c_loc and c_funloc
2426      are pseudo-unknown.  */
2427   if (gfc_option.warn_implicit_interface
2428       && comp->attr.if_source == IFSRC_UNKNOWN
2429       && !comp->attr.is_iso_c)
2430     gfc_warning ("Procedure pointer component '%s' called with an implicit "
2431                  "interface at %L", comp->name, where);
2432
2433   if (comp->attr.if_source == IFSRC_UNKNOWN)
2434     {
2435       gfc_actual_arglist *a;
2436       for (a = *ap; a; a = a->next)
2437         {
2438           /* Skip g77 keyword extensions like %VAL, %REF, %LOC.  */
2439           if (a->name != NULL && a->name[0] != '%')
2440             {
2441               gfc_error("Keyword argument requires explicit interface "
2442                         "for procedure pointer component '%s' at %L",
2443                         comp->name, &a->expr->where);
2444               break;
2445             }
2446         }
2447
2448       return;
2449     }
2450
2451   if (!compare_actual_formal (ap, comp->formal, 0, comp->attr.elemental, where))
2452     return;
2453
2454   check_intents (comp->formal, *ap);
2455   if (gfc_option.warn_aliasing)
2456     check_some_aliasing (comp->formal, *ap);
2457 }
2458
2459
2460 /* Try if an actual argument list matches the formal list of a symbol,
2461    respecting the symbol's attributes like ELEMENTAL.  This is used for
2462    GENERIC resolution.  */
2463
2464 bool
2465 gfc_arglist_matches_symbol (gfc_actual_arglist** args, gfc_symbol* sym)
2466 {
2467   bool r;
2468
2469   gcc_assert (sym->attr.flavor == FL_PROCEDURE);
2470
2471   r = !sym->attr.elemental;
2472   if (compare_actual_formal (args, sym->formal, r, !r, NULL))
2473     {
2474       check_intents (sym->formal, *args);
2475       if (gfc_option.warn_aliasing)
2476         check_some_aliasing (sym->formal, *args);
2477       return true;
2478     }
2479
2480   return false;
2481 }
2482
2483
2484 /* Given an interface pointer and an actual argument list, search for
2485    a formal argument list that matches the actual.  If found, returns
2486    a pointer to the symbol of the correct interface.  Returns NULL if
2487    not found.  */
2488
2489 gfc_symbol *
2490 gfc_search_interface (gfc_interface *intr, int sub_flag,
2491                       gfc_actual_arglist **ap)
2492 {
2493   gfc_symbol *elem_sym = NULL;
2494   for (; intr; intr = intr->next)
2495     {
2496       if (sub_flag && intr->sym->attr.function)
2497         continue;
2498       if (!sub_flag && intr->sym->attr.subroutine)
2499         continue;
2500
2501       if (gfc_arglist_matches_symbol (ap, intr->sym))
2502         {
2503           /* Satisfy 12.4.4.1 such that an elemental match has lower
2504              weight than a non-elemental match.  */ 
2505           if (intr->sym->attr.elemental)
2506             {
2507               elem_sym = intr->sym;
2508               continue;
2509             }
2510           return intr->sym;
2511         }
2512     }
2513
2514   return elem_sym ? elem_sym : NULL;
2515 }
2516
2517
2518 /* Do a brute force recursive search for a symbol.  */
2519
2520 static gfc_symtree *
2521 find_symtree0 (gfc_symtree *root, gfc_symbol *sym)
2522 {
2523   gfc_symtree * st;
2524
2525   if (root->n.sym == sym)
2526     return root;
2527
2528   st = NULL;
2529   if (root->left)
2530     st = find_symtree0 (root->left, sym);
2531   if (root->right && ! st)
2532     st = find_symtree0 (root->right, sym);
2533   return st;
2534 }
2535
2536
2537 /* Find a symtree for a symbol.  */
2538
2539 gfc_symtree *
2540 gfc_find_sym_in_symtree (gfc_symbol *sym)
2541 {
2542   gfc_symtree *st;
2543   gfc_namespace *ns;
2544
2545   /* First try to find it by name.  */
2546   gfc_find_sym_tree (sym->name, gfc_current_ns, 1, &st);
2547   if (st && st->n.sym == sym)
2548     return st;
2549
2550   /* If it's been renamed, resort to a brute-force search.  */
2551   /* TODO: avoid having to do this search.  If the symbol doesn't exist
2552      in the symtree for the current namespace, it should probably be added.  */
2553   for (ns = gfc_current_ns; ns; ns = ns->parent)
2554     {
2555       st = find_symtree0 (ns->sym_root, sym);
2556       if (st)
2557         return st;
2558     }
2559   gfc_internal_error ("Unable to find symbol %s", sym->name);
2560   /* Not reached.  */
2561 }
2562
2563
2564 /* See if the arglist to an operator-call contains a derived-type argument
2565    with a matching type-bound operator.  If so, return the matching specific
2566    procedure defined as operator-target as well as the base-object to use
2567    (which is the found derived-type argument with operator).  */
2568
2569 static gfc_typebound_proc*
2570 matching_typebound_op (gfc_expr** tb_base,
2571                        gfc_actual_arglist* args,
2572                        gfc_intrinsic_op op, const char* uop)
2573 {
2574   gfc_actual_arglist* base;
2575
2576   for (base = args; base; base = base->next)
2577     if (base->expr->ts.type == BT_DERIVED || base->expr->ts.type == BT_CLASS)
2578       {
2579         gfc_typebound_proc* tb;
2580         gfc_symbol* derived;
2581         gfc_try result;
2582
2583         if (base->expr->ts.type == BT_CLASS)
2584           derived = base->expr->ts.u.derived->components->ts.u.derived;
2585         else
2586           derived = base->expr->ts.u.derived;
2587
2588         if (op == INTRINSIC_USER)
2589           {
2590             gfc_symtree* tb_uop;
2591
2592             gcc_assert (uop);
2593             tb_uop = gfc_find_typebound_user_op (derived, &result, uop,
2594                                                  false, NULL);
2595
2596             if (tb_uop)
2597               tb = tb_uop->n.tb;
2598             else
2599               tb = NULL;
2600           }
2601         else
2602           tb = gfc_find_typebound_intrinsic_op (derived, &result, op,
2603                                                 false, NULL);
2604
2605         /* This means we hit a PRIVATE operator which is use-associated and
2606            should thus not be seen.  */
2607         if (result == FAILURE)
2608           tb = NULL;
2609
2610         /* Look through the super-type hierarchy for a matching specific
2611            binding.  */
2612         for (; tb; tb = tb->overridden)
2613           {
2614             gfc_tbp_generic* g;
2615
2616             gcc_assert (tb->is_generic);
2617             for (g = tb->u.generic; g; g = g->next)
2618               {
2619                 gfc_symbol* target;
2620                 gfc_actual_arglist* argcopy;
2621                 bool matches;
2622
2623                 gcc_assert (g->specific);
2624                 if (g->specific->error)
2625                   continue;
2626
2627                 target = g->specific->u.specific->n.sym;
2628
2629                 /* Check if this arglist matches the formal.  */
2630                 argcopy = gfc_copy_actual_arglist (args);
2631                 matches = gfc_arglist_matches_symbol (&argcopy, target);
2632                 gfc_free_actual_arglist (argcopy);
2633
2634                 /* Return if we found a match.  */
2635                 if (matches)
2636                   {
2637                     *tb_base = base->expr;
2638                     return g->specific;
2639                   }
2640               }
2641           }
2642       }
2643
2644   return NULL;
2645 }
2646
2647
2648 /* For the 'actual arglist' of an operator call and a specific typebound
2649    procedure that has been found the target of a type-bound operator, build the
2650    appropriate EXPR_COMPCALL and resolve it.  We take this indirection over
2651    type-bound procedures rather than resolving type-bound operators 'directly'
2652    so that we can reuse the existing logic.  */
2653
2654 static void
2655 build_compcall_for_operator (gfc_expr* e, gfc_actual_arglist* actual,
2656                              gfc_expr* base, gfc_typebound_proc* target)
2657 {
2658   e->expr_type = EXPR_COMPCALL;
2659   e->value.compcall.tbp = target;
2660   e->value.compcall.name = "operator"; /* Should not matter.  */
2661   e->value.compcall.actual = actual;
2662   e->value.compcall.base_object = base;
2663   e->value.compcall.ignore_pass = 1;
2664   e->value.compcall.assign = 0;
2665 }
2666
2667
2668 /* This subroutine is called when an expression is being resolved.
2669    The expression node in question is either a user defined operator
2670    or an intrinsic operator with arguments that aren't compatible
2671    with the operator.  This subroutine builds an actual argument list
2672    corresponding to the operands, then searches for a compatible
2673    interface.  If one is found, the expression node is replaced with
2674    the appropriate function call.
2675    real_error is an additional output argument that specifies if FAILURE
2676    is because of some real error and not because no match was found.  */
2677
2678 gfc_try
2679 gfc_extend_expr (gfc_expr *e, bool *real_error)
2680 {
2681   gfc_actual_arglist *actual;
2682   gfc_symbol *sym;
2683   gfc_namespace *ns;
2684   gfc_user_op *uop;
2685   gfc_intrinsic_op i;
2686
2687   sym = NULL;
2688
2689   actual = gfc_get_actual_arglist ();
2690   actual->expr = e->value.op.op1;
2691
2692   *real_error = false;
2693
2694   if (e->value.op.op2 != NULL)
2695     {
2696       actual->next = gfc_get_actual_arglist ();
2697       actual->next->expr = e->value.op.op2;
2698     }
2699
2700   i = fold_unary_intrinsic (e->value.op.op);
2701
2702   if (i == INTRINSIC_USER)
2703     {
2704       for (ns = gfc_current_ns; ns; ns = ns->parent)
2705         {
2706           uop = gfc_find_uop (e->value.op.uop->name, ns);
2707           if (uop == NULL)
2708             continue;
2709
2710           sym = gfc_search_interface (uop->op, 0, &actual);
2711           if (sym != NULL)
2712             break;
2713         }
2714     }
2715   else
2716     {
2717       for (ns = gfc_current_ns; ns; ns = ns->parent)
2718         {
2719           /* Due to the distinction between '==' and '.eq.' and friends, one has
2720              to check if either is defined.  */
2721           switch (i)
2722             {
2723 #define CHECK_OS_COMPARISON(comp) \
2724   case INTRINSIC_##comp: \
2725   case INTRINSIC_##comp##_OS: \
2726     sym = gfc_search_interface (ns->op[INTRINSIC_##comp], 0, &actual); \
2727     if (!sym) \
2728       sym = gfc_search_interface (ns->op[INTRINSIC_##comp##_OS], 0, &actual); \
2729     break;
2730               CHECK_OS_COMPARISON(EQ)
2731               CHECK_OS_COMPARISON(NE)
2732               CHECK_OS_COMPARISON(GT)
2733               CHECK_OS_COMPARISON(GE)
2734               CHECK_OS_COMPARISON(LT)
2735               CHECK_OS_COMPARISON(LE)
2736 #undef CHECK_OS_COMPARISON
2737
2738               default:
2739                 sym = gfc_search_interface (ns->op[i], 0, &actual);
2740             }
2741
2742           if (sym != NULL)
2743             break;
2744         }
2745     }
2746
2747   /* TODO: Do an ambiguity-check and error if multiple matching interfaces are
2748      found rather than just taking the first one and not checking further.  */
2749
2750   if (sym == NULL)
2751     {
2752       gfc_typebound_proc* tbo;
2753       gfc_expr* tb_base;
2754
2755       /* See if we find a matching type-bound operator.  */
2756       if (i == INTRINSIC_USER)
2757         tbo = matching_typebound_op (&tb_base, actual,
2758                                      i, e->value.op.uop->name);
2759       else
2760         switch (i)
2761           {
2762 #define CHECK_OS_COMPARISON(comp) \
2763   case INTRINSIC_##comp: \
2764   case INTRINSIC_##comp##_OS: \
2765     tbo = matching_typebound_op (&tb_base, actual, \
2766                                  INTRINSIC_##comp, NULL); \
2767     if (!tbo) \
2768       tbo = matching_typebound_op (&tb_base, actual, \
2769                                    INTRINSIC_##comp##_OS, NULL); \
2770     break;
2771             CHECK_OS_COMPARISON(EQ)
2772             CHECK_OS_COMPARISON(NE)
2773             CHECK_OS_COMPARISON(GT)
2774             CHECK_OS_COMPARISON(GE)
2775             CHECK_OS_COMPARISON(LT)
2776             CHECK_OS_COMPARISON(LE)
2777 #undef CHECK_OS_COMPARISON
2778
2779             default:
2780               tbo = matching_typebound_op (&tb_base, actual, i, NULL);
2781               break;
2782           }
2783               
2784       /* If there is a matching typebound-operator, replace the expression with
2785          a call to it and succeed.  */
2786       if (tbo)
2787         {
2788           gfc_try result;
2789
2790           gcc_assert (tb_base);
2791           build_compcall_for_operator (e, actual, tb_base, tbo);
2792
2793           result = gfc_resolve_expr (e);
2794           if (result == FAILURE)
2795             *real_error = true;
2796
2797           return result;
2798         }
2799
2800       /* Don't use gfc_free_actual_arglist().  */
2801       if (actual->next != NULL)
2802         gfc_free (actual->next);
2803       gfc_free (actual);
2804
2805       return FAILURE;
2806     }
2807
2808   /* Change the expression node to a function call.  */
2809   e->expr_type = EXPR_FUNCTION;
2810   e->symtree = gfc_find_sym_in_symtree (sym);
2811   e->value.function.actual = actual;
2812   e->value.function.esym = NULL;
2813   e->value.function.isym = NULL;
2814   e->value.function.name = NULL;
2815   e->user_operator = 1;
2816
2817   if (gfc_resolve_expr (e) == FAILURE)
2818     {
2819       *real_error = true;
2820       return FAILURE;
2821     }
2822
2823   return SUCCESS;
2824 }
2825
2826
2827 /* Tries to replace an assignment code node with a subroutine call to
2828    the subroutine associated with the assignment operator.  Return
2829    SUCCESS if the node was replaced.  On FAILURE, no error is
2830    generated.  */
2831
2832 gfc_try
2833 gfc_extend_assign (gfc_code *c, gfc_namespace *ns)
2834 {
2835   gfc_actual_arglist *actual;
2836   gfc_expr *lhs, *rhs;
2837   gfc_symbol *sym;
2838
2839   lhs = c->expr1;
2840   rhs = c->expr2;
2841
2842   /* Don't allow an intrinsic assignment to be replaced.  */
2843   if (lhs->ts.type != BT_DERIVED && lhs->ts.type != BT_CLASS
2844       && (rhs->rank == 0 || rhs->rank == lhs->rank)
2845       && (lhs->ts.type == rhs->ts.type
2846           || (gfc_numeric_ts (&lhs->ts) && gfc_numeric_ts (&rhs->ts))))
2847     return FAILURE;
2848
2849   actual = gfc_get_actual_arglist ();
2850   actual->expr = lhs;
2851
2852   actual->next = gfc_get_actual_arglist ();
2853   actual->next->expr = rhs;
2854
2855   sym = NULL;
2856
2857   for (; ns; ns = ns->parent)
2858     {
2859       sym = gfc_search_interface (ns->op[INTRINSIC_ASSIGN], 1, &actual);
2860       if (sym != NULL)
2861         break;
2862     }
2863
2864   /* TODO: Ambiguity-check, see above for gfc_extend_expr.  */
2865
2866   if (sym == NULL)
2867     {
2868       gfc_typebound_proc* tbo;
2869       gfc_expr* tb_base;
2870
2871       /* See if we find a matching type-bound assignment.  */
2872       tbo = matching_typebound_op (&tb_base, actual,
2873                                    INTRINSIC_ASSIGN, NULL);
2874               
2875       /* If there is one, replace the expression with a call to it and
2876          succeed.  */
2877       if (tbo)
2878         {
2879           gcc_assert (tb_base);
2880           c->expr1 = gfc_get_expr ();
2881           build_compcall_for_operator (c->expr1, actual, tb_base, tbo);
2882           c->expr1->value.compcall.assign = 1;
2883           c->expr2 = NULL;
2884           c->op = EXEC_COMPCALL;
2885
2886           /* c is resolved from the caller, so no need to do it here.  */
2887
2888           return SUCCESS;
2889         }
2890
2891       gfc_free (actual->next);
2892       gfc_free (actual);
2893       return FAILURE;
2894     }
2895
2896   /* Replace the assignment with the call.  */
2897   c->op = EXEC_ASSIGN_CALL;
2898   c->symtree = gfc_find_sym_in_symtree (sym);
2899   c->expr1 = NULL;
2900   c->expr2 = NULL;
2901   c->ext.actual = actual;
2902
2903   return SUCCESS;
2904 }
2905
2906
2907 /* Make sure that the interface just parsed is not already present in
2908    the given interface list.  Ambiguity isn't checked yet since module
2909    procedures can be present without interfaces.  */
2910
2911 static gfc_try
2912 check_new_interface (gfc_interface *base, gfc_symbol *new_sym)
2913 {
2914   gfc_interface *ip;
2915
2916   for (ip = base; ip; ip = ip->next)
2917     {
2918       if (ip->sym == new_sym)
2919         {
2920           gfc_error ("Entity '%s' at %C is already present in the interface",
2921                      new_sym->name);
2922           return FAILURE;
2923         }
2924     }
2925
2926   return SUCCESS;
2927 }
2928
2929
2930 /* Add a symbol to the current interface.  */
2931
2932 gfc_try
2933 gfc_add_interface (gfc_symbol *new_sym)
2934 {
2935   gfc_interface **head, *intr;
2936   gfc_namespace *ns;
2937   gfc_symbol *sym;
2938
2939   switch (current_interface.type)
2940     {
2941     case INTERFACE_NAMELESS:
2942     case INTERFACE_ABSTRACT:
2943       return SUCCESS;
2944
2945     case INTERFACE_INTRINSIC_OP:
2946       for (ns = current_interface.ns; ns; ns = ns->parent)
2947         switch (current_interface.op)
2948           {
2949             case INTRINSIC_EQ:
2950             case INTRINSIC_EQ_OS:
2951               if (check_new_interface (ns->op[INTRINSIC_EQ], new_sym) == FAILURE ||
2952                   check_new_interface (ns->op[INTRINSIC_EQ_OS], new_sym) == FAILURE)
2953                 return FAILURE;
2954               break;
2955
2956             case INTRINSIC_NE:
2957             case INTRINSIC_NE_OS:
2958               if (check_new_interface (ns->op[INTRINSIC_NE], new_sym) == FAILURE ||
2959                   check_new_interface (ns->op[INTRINSIC_NE_OS], new_sym) == FAILURE)
2960                 return FAILURE;
2961               break;
2962
2963             case INTRINSIC_GT:
2964             case INTRINSIC_GT_OS:
2965               if (check_new_interface (ns->op[INTRINSIC_GT], new_sym) == FAILURE ||
2966                   check_new_interface (ns->op[INTRINSIC_GT_OS], new_sym) == FAILURE)
2967                 return FAILURE;
2968               break;
2969
2970             case INTRINSIC_GE:
2971             case INTRINSIC_GE_OS:
2972               if (check_new_interface (ns->op[INTRINSIC_GE], new_sym) == FAILURE ||
2973                   check_new_interface (ns->op[INTRINSIC_GE_OS], new_sym) == FAILURE)
2974                 return FAILURE;
2975               break;
2976
2977             case INTRINSIC_LT:
2978             case INTRINSIC_LT_OS:
2979               if (check_new_interface (ns->op[INTRINSIC_LT], new_sym) == FAILURE ||
2980                   check_new_interface (ns->op[INTRINSIC_LT_OS], new_sym) == FAILURE)
2981                 return FAILURE;
2982               break;
2983
2984             case INTRINSIC_LE:
2985             case INTRINSIC_LE_OS:
2986               if (check_new_interface (ns->op[INTRINSIC_LE], new_sym) == FAILURE ||
2987                   check_new_interface (ns->op[INTRINSIC_LE_OS], new_sym) == FAILURE)
2988                 return FAILURE;
2989               break;
2990
2991             default:
2992               if (check_new_interface (ns->op[current_interface.op], new_sym) == FAILURE)
2993                 return FAILURE;
2994           }
2995
2996       head = &current_interface.ns->op[current_interface.op];
2997       break;
2998
2999     case INTERFACE_GENERIC:
3000       for (ns = current_interface.ns; ns; ns = ns->parent)
3001         {
3002           gfc_find_symbol (current_interface.sym->name, ns, 0, &sym);
3003           if (sym == NULL)
3004             continue;
3005
3006           if (check_new_interface (sym->generic, new_sym) == FAILURE)
3007             return FAILURE;
3008         }
3009
3010       head = &current_interface.sym->generic;
3011       break;
3012
3013     case INTERFACE_USER_OP:
3014       if (check_new_interface (current_interface.uop->op, new_sym)
3015           == FAILURE)
3016         return FAILURE;
3017
3018       head = &current_interface.uop->op;
3019       break;
3020
3021     default:
3022       gfc_internal_error ("gfc_add_interface(): Bad interface type");
3023     }
3024
3025   intr = gfc_get_interface ();
3026   intr->sym = new_sym;
3027   intr->where = gfc_current_locus;
3028
3029   intr->next = *head;
3030   *head = intr;
3031
3032   return SUCCESS;
3033 }
3034
3035
3036 gfc_interface *
3037 gfc_current_interface_head (void)
3038 {
3039   switch (current_interface.type)
3040     {
3041       case INTERFACE_INTRINSIC_OP:
3042         return current_interface.ns->op[current_interface.op];
3043         break;
3044
3045       case INTERFACE_GENERIC:
3046         return current_interface.sym->generic;
3047         break;
3048
3049       case INTERFACE_USER_OP:
3050         return current_interface.uop->op;
3051         break;
3052
3053       default:
3054         gcc_unreachable ();
3055     }
3056 }
3057
3058
3059 void
3060 gfc_set_current_interface_head (gfc_interface *i)
3061 {
3062   switch (current_interface.type)
3063     {
3064       case INTERFACE_INTRINSIC_OP:
3065         current_interface.ns->op[current_interface.op] = i;
3066         break;
3067
3068       case INTERFACE_GENERIC:
3069         current_interface.sym->generic = i;
3070         break;
3071
3072       case INTERFACE_USER_OP:
3073         current_interface.uop->op = i;
3074         break;
3075
3076       default:
3077         gcc_unreachable ();
3078     }
3079 }
3080
3081
3082 /* Gets rid of a formal argument list.  We do not free symbols.
3083    Symbols are freed when a namespace is freed.  */
3084
3085 void
3086 gfc_free_formal_arglist (gfc_formal_arglist *p)
3087 {
3088   gfc_formal_arglist *q;
3089
3090   for (; p; p = q)
3091     {
3092       q = p->next;
3093       gfc_free (p);
3094     }
3095 }