OSDN Git Service

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