OSDN Git Service

gcc/
[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,
1133                                     0, 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 /* Emit clear error messages for rank mismatch.  */
1380
1381 static void
1382 argument_rank_mismatch (const char *name, locus *where,
1383                         int rank1, int rank2)
1384 {
1385   if (rank1 == 0)
1386     {
1387       gfc_error ("Rank mismatch in argument '%s' at %L "
1388                  "(scalar and rank-%d)", name, where, rank2);
1389     }
1390   else if (rank2 == 0)
1391     {
1392       gfc_error ("Rank mismatch in argument '%s' at %L "
1393                  "(rank-%d and scalar)", name, where, rank1);
1394     }
1395   else
1396     {    
1397       gfc_error ("Rank mismatch in argument '%s' at %L "
1398                  "(rank-%d and rank-%d)", name, where, rank1, rank2);
1399     }
1400 }
1401
1402
1403 /* Given a symbol of a formal argument list and an expression, see if
1404    the two are compatible as arguments.  Returns nonzero if
1405    compatible, zero if not compatible.  */
1406
1407 static int
1408 compare_parameter (gfc_symbol *formal, gfc_expr *actual,
1409                    int ranks_must_agree, int is_elemental, locus *where)
1410 {
1411   gfc_ref *ref;
1412   bool rank_check;
1413
1414   /* If the formal arg has type BT_VOID, it's to one of the iso_c_binding
1415      procs c_f_pointer or c_f_procpointer, and we need to accept most
1416      pointers the user could give us.  This should allow that.  */
1417   if (formal->ts.type == BT_VOID)
1418     return 1;
1419
1420   if (formal->ts.type == BT_DERIVED
1421       && formal->ts.u.derived && formal->ts.u.derived->ts.is_iso_c
1422       && actual->ts.type == BT_DERIVED
1423       && actual->ts.u.derived && actual->ts.u.derived->ts.is_iso_c)
1424     return 1;
1425
1426   if (actual->ts.type == BT_PROCEDURE)
1427     {
1428       char err[200];
1429       gfc_symbol *act_sym = actual->symtree->n.sym;
1430
1431       if (formal->attr.flavor != FL_PROCEDURE)
1432         {
1433           if (where)
1434             gfc_error ("Invalid procedure argument at %L", &actual->where);
1435           return 0;
1436         }
1437
1438       if (!gfc_compare_interfaces (formal, act_sym, act_sym->name, 0, 1, err,
1439                                    sizeof(err)))
1440         {
1441           if (where)
1442             gfc_error ("Interface mismatch in dummy procedure '%s' at %L: %s",
1443                        formal->name, &actual->where, err);
1444           return 0;
1445         }
1446
1447       if (formal->attr.function && !act_sym->attr.function)
1448         {
1449           gfc_add_function (&act_sym->attr, act_sym->name,
1450           &act_sym->declared_at);
1451           if (act_sym->ts.type == BT_UNKNOWN
1452               && gfc_set_default_type (act_sym, 1, act_sym->ns) == FAILURE)
1453             return 0;
1454         }
1455       else if (formal->attr.subroutine && !act_sym->attr.subroutine)
1456         gfc_add_subroutine (&act_sym->attr, act_sym->name,
1457                             &act_sym->declared_at);
1458
1459       return 1;
1460     }
1461
1462   /* F2008, C1241.  */
1463   if (formal->attr.pointer && formal->attr.contiguous
1464       && !gfc_is_simply_contiguous (actual, true))
1465     {
1466       if (where)
1467         gfc_error ("Actual argument to contiguous pointer dummy '%s' at %L "
1468                    "must be simply contigous", formal->name, &actual->where);
1469       return 0;
1470     }
1471
1472   if ((actual->expr_type != EXPR_NULL || actual->ts.type != BT_UNKNOWN)
1473       && !gfc_compare_types (&formal->ts, &actual->ts))
1474     {
1475       if (where)
1476         gfc_error ("Type mismatch in argument '%s' at %L; passed %s to %s",
1477                    formal->name, &actual->where, gfc_typename (&actual->ts),
1478                    gfc_typename (&formal->ts));
1479       return 0;
1480     }
1481
1482   if (formal->attr.codimension)
1483     {
1484       gfc_ref *last = NULL;
1485
1486       if (actual->expr_type != EXPR_VARIABLE
1487           || (actual->ref == NULL
1488               && !actual->symtree->n.sym->attr.codimension))
1489         {
1490           if (where)
1491             gfc_error ("Actual argument to '%s' at %L must be a coarray",
1492                        formal->name, &actual->where);
1493           return 0;
1494         }
1495
1496       for (ref = actual->ref; ref; ref = ref->next)
1497         {
1498           if (ref->type == REF_ARRAY && ref->u.ar.codimen != 0)
1499             {
1500               if (where)
1501                 gfc_error ("Actual argument to '%s' at %L must be a coarray "
1502                            "and not coindexed", formal->name, &ref->u.ar.where);
1503               return 0;
1504             }
1505           if (ref->type == REF_ARRAY && ref->u.ar.as->corank
1506               && ref->u.ar.type != AR_FULL && ref->u.ar.dimen != 0)
1507             {
1508               if (where)
1509                 gfc_error ("Actual argument to '%s' at %L must be a coarray "
1510                            "and thus shall not have an array designator",
1511                            formal->name, &ref->u.ar.where);
1512               return 0;
1513             }
1514           if (ref->type == REF_COMPONENT)
1515             last = ref;
1516         }
1517
1518       if (last && !last->u.c.component->attr.codimension)
1519         {
1520           if (where)
1521             gfc_error ("Actual argument to '%s' at %L must be a coarray",
1522                        formal->name, &actual->where);
1523           return 0;
1524         }
1525
1526       /* F2008, 12.5.2.6.  */
1527       if (formal->attr.allocatable &&
1528           ((last && last->u.c.component->as->corank != formal->as->corank)
1529            || (!last
1530                && actual->symtree->n.sym->as->corank != formal->as->corank)))
1531         {
1532           if (where)
1533             gfc_error ("Corank mismatch in argument '%s' at %L (%d and %d)",
1534                    formal->name, &actual->where, formal->as->corank,
1535                    last ? last->u.c.component->as->corank
1536                         : actual->symtree->n.sym->as->corank);
1537           return 0;
1538         }
1539
1540       /* F2008, 12.5.2.8.  */
1541       if (formal->attr.dimension
1542           && (formal->attr.contiguous || formal->as->type != AS_ASSUMED_SHAPE)
1543           && !gfc_is_simply_contiguous (actual, true))
1544         {
1545           if (where)
1546             gfc_error ("Actual argument to '%s' at %L must be simply "
1547                        "contiguous", formal->name, &actual->where);
1548           return 0;
1549         }
1550     }
1551
1552   /* F2008, C1239/C1240.  */
1553   if (actual->expr_type == EXPR_VARIABLE
1554       && (actual->symtree->n.sym->attr.asynchronous
1555          || actual->symtree->n.sym->attr.volatile_)
1556       &&  (formal->attr.asynchronous || formal->attr.volatile_)
1557       && actual->rank && !gfc_is_simply_contiguous (actual, true)
1558       && ((formal->as->type != AS_ASSUMED_SHAPE && !formal->attr.pointer)
1559           || formal->attr.contiguous))
1560     {
1561       if (where)
1562         gfc_error ("Dummy argument '%s' has to be a pointer or assumed-shape "
1563                    "array without CONTIGUOUS attribute - as actual argument at"
1564                    " %L is not simply contiguous and both are ASYNCHRONOUS "
1565                    "or VOLATILE", formal->name, &actual->where);
1566       return 0;
1567     }
1568
1569   if (symbol_rank (formal) == actual->rank)
1570     return 1;
1571
1572   rank_check = where != NULL && !is_elemental && formal->as
1573                && (formal->as->type == AS_ASSUMED_SHAPE
1574                    || formal->as->type == AS_DEFERRED)
1575                && actual->expr_type != EXPR_NULL;
1576
1577   /* Scalar & coindexed, see: F2008, Section 12.5.2.4.  */
1578   if (rank_check || ranks_must_agree
1579       || (formal->attr.pointer && actual->expr_type != EXPR_NULL)
1580       || (actual->rank != 0 && !(is_elemental || formal->attr.dimension))
1581       || (actual->rank == 0 && formal->as->type == AS_ASSUMED_SHAPE)
1582       || (actual->rank == 0 && formal->attr.dimension
1583           && gfc_is_coindexed (actual)))
1584     {
1585       if (where)
1586         argument_rank_mismatch (formal->name, &actual->where,
1587                                 symbol_rank (formal), actual->rank);
1588       return 0;
1589     }
1590   else if (actual->rank != 0 && (is_elemental || formal->attr.dimension))
1591     return 1;
1592
1593   /* At this point, we are considering a scalar passed to an array.   This
1594      is valid (cf. F95 12.4.1.1; F2003 12.4.1.2),
1595      - if the actual argument is (a substring of) an element of a
1596        non-assumed-shape/non-pointer array;
1597      - (F2003) if the actual argument is of type character.  */
1598
1599   for (ref = actual->ref; ref; ref = ref->next)
1600     if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT
1601         && ref->u.ar.dimen > 0)
1602       break;
1603
1604   /* Not an array element.  */
1605   if (formal->ts.type == BT_CHARACTER
1606       && (ref == NULL
1607           || (actual->expr_type == EXPR_VARIABLE
1608               && (actual->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
1609                   || actual->symtree->n.sym->attr.pointer))))
1610     {
1611       if (where && (gfc_option.allow_std & GFC_STD_F2003) == 0)
1612         {
1613           gfc_error ("Fortran 2003: Scalar CHARACTER actual argument with "
1614                      "array dummy argument '%s' at %L",
1615                      formal->name, &actual->where);
1616           return 0;
1617         }
1618       else if ((gfc_option.allow_std & GFC_STD_F2003) == 0)
1619         return 0;
1620       else
1621         return 1;
1622     }
1623   else if (ref == NULL && actual->expr_type != EXPR_NULL)
1624     {
1625       if (where)
1626         argument_rank_mismatch (formal->name, &actual->where,
1627                                 symbol_rank (formal), actual->rank);
1628       return 0;
1629     }
1630
1631   if (actual->expr_type == EXPR_VARIABLE
1632       && actual->symtree->n.sym->as
1633       && (actual->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
1634           || actual->symtree->n.sym->attr.pointer))
1635     {
1636       if (where)
1637         gfc_error ("Element of assumed-shaped array passed to dummy "
1638                    "argument '%s' at %L", formal->name, &actual->where);
1639       return 0;
1640     }
1641
1642   return 1;
1643 }
1644
1645
1646 /* Given a symbol of a formal argument list and an expression, see if
1647    the two are compatible as arguments.  Returns nonzero if
1648    compatible, zero if not compatible.  */
1649
1650 static int
1651 compare_parameter_protected (gfc_symbol *formal, gfc_expr *actual)
1652 {
1653   if (actual->expr_type != EXPR_VARIABLE)
1654     return 1;
1655
1656   if (!actual->symtree->n.sym->attr.is_protected)
1657     return 1;
1658
1659   if (!actual->symtree->n.sym->attr.use_assoc)
1660     return 1;
1661
1662   if (formal->attr.intent == INTENT_IN
1663       || formal->attr.intent == INTENT_UNKNOWN)
1664     return 1;
1665
1666   if (!actual->symtree->n.sym->attr.pointer)
1667     return 0;
1668
1669   if (actual->symtree->n.sym->attr.pointer && formal->attr.pointer)
1670     return 0;
1671
1672   return 1;
1673 }
1674
1675
1676 /* Returns the storage size of a symbol (formal argument) or
1677    zero if it cannot be determined.  */
1678
1679 static unsigned long
1680 get_sym_storage_size (gfc_symbol *sym)
1681 {
1682   int i;
1683   unsigned long strlen, elements;
1684
1685   if (sym->ts.type == BT_CHARACTER)
1686     {
1687       if (sym->ts.u.cl && sym->ts.u.cl->length
1688           && sym->ts.u.cl->length->expr_type == EXPR_CONSTANT)
1689         strlen = mpz_get_ui (sym->ts.u.cl->length->value.integer);
1690       else
1691         return 0;
1692     }
1693   else
1694     strlen = 1; 
1695
1696   if (symbol_rank (sym) == 0)
1697     return strlen;
1698
1699   elements = 1;
1700   if (sym->as->type != AS_EXPLICIT)
1701     return 0;
1702   for (i = 0; i < sym->as->rank; i++)
1703     {
1704       if (!sym->as || sym->as->upper[i]->expr_type != EXPR_CONSTANT
1705           || sym->as->lower[i]->expr_type != EXPR_CONSTANT)
1706         return 0;
1707
1708       elements *= mpz_get_si (sym->as->upper[i]->value.integer)
1709                   - mpz_get_si (sym->as->lower[i]->value.integer) + 1L;
1710     }
1711
1712   return strlen*elements;
1713 }
1714
1715
1716 /* Returns the storage size of an expression (actual argument) or
1717    zero if it cannot be determined. For an array element, it returns
1718    the remaining size as the element sequence consists of all storage
1719    units of the actual argument up to the end of the array.  */
1720
1721 static unsigned long
1722 get_expr_storage_size (gfc_expr *e)
1723 {
1724   int i;
1725   long int strlen, elements;
1726   long int substrlen = 0;
1727   bool is_str_storage = false;
1728   gfc_ref *ref;
1729
1730   if (e == NULL)
1731     return 0;
1732   
1733   if (e->ts.type == BT_CHARACTER)
1734     {
1735       if (e->ts.u.cl && e->ts.u.cl->length
1736           && e->ts.u.cl->length->expr_type == EXPR_CONSTANT)
1737         strlen = mpz_get_si (e->ts.u.cl->length->value.integer);
1738       else if (e->expr_type == EXPR_CONSTANT
1739                && (e->ts.u.cl == NULL || e->ts.u.cl->length == NULL))
1740         strlen = e->value.character.length;
1741       else
1742         return 0;
1743     }
1744   else
1745     strlen = 1; /* Length per element.  */
1746
1747   if (e->rank == 0 && !e->ref)
1748     return strlen;
1749
1750   elements = 1;
1751   if (!e->ref)
1752     {
1753       if (!e->shape)
1754         return 0;
1755       for (i = 0; i < e->rank; i++)
1756         elements *= mpz_get_si (e->shape[i]);
1757       return elements*strlen;
1758     }
1759
1760   for (ref = e->ref; ref; ref = ref->next)
1761     {
1762       if (ref->type == REF_SUBSTRING && ref->u.ss.start
1763           && ref->u.ss.start->expr_type == EXPR_CONSTANT)
1764         {
1765           if (is_str_storage)
1766             {
1767               /* The string length is the substring length.
1768                  Set now to full string length.  */
1769               if (ref->u.ss.length == NULL
1770                   || ref->u.ss.length->length->expr_type != EXPR_CONSTANT)
1771                 return 0;
1772
1773               strlen = mpz_get_ui (ref->u.ss.length->length->value.integer);
1774             }
1775           substrlen = strlen - mpz_get_ui (ref->u.ss.start->value.integer) + 1;
1776           continue;
1777         }
1778
1779       if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION
1780           && ref->u.ar.start && ref->u.ar.end && ref->u.ar.stride
1781           && ref->u.ar.as->upper)
1782         for (i = 0; i < ref->u.ar.dimen; i++)
1783           {
1784             long int start, end, stride;
1785             stride = 1;
1786
1787             if (ref->u.ar.stride[i])
1788               {
1789                 if (ref->u.ar.stride[i]->expr_type == EXPR_CONSTANT)
1790                   stride = mpz_get_si (ref->u.ar.stride[i]->value.integer);
1791                 else
1792                   return 0;
1793               }
1794
1795             if (ref->u.ar.start[i])
1796               {
1797                 if (ref->u.ar.start[i]->expr_type == EXPR_CONSTANT)
1798                   start = mpz_get_si (ref->u.ar.start[i]->value.integer);
1799                 else
1800                   return 0;
1801               }
1802             else if (ref->u.ar.as->lower[i]
1803                      && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT)
1804               start = mpz_get_si (ref->u.ar.as->lower[i]->value.integer);
1805             else
1806               return 0;
1807
1808             if (ref->u.ar.end[i])
1809               {
1810                 if (ref->u.ar.end[i]->expr_type == EXPR_CONSTANT)
1811                   end = mpz_get_si (ref->u.ar.end[i]->value.integer);
1812                 else
1813                   return 0;
1814               }
1815             else if (ref->u.ar.as->upper[i]
1816                      && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
1817               end = mpz_get_si (ref->u.ar.as->upper[i]->value.integer);
1818             else
1819               return 0;
1820
1821             elements *= (end - start)/stride + 1L;
1822           }
1823       else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_FULL
1824                && ref->u.ar.as->lower && ref->u.ar.as->upper)
1825         for (i = 0; i < ref->u.ar.as->rank; i++)
1826           {
1827             if (ref->u.ar.as->lower[i] && ref->u.ar.as->upper[i]
1828                 && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT
1829                 && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
1830               elements *= mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
1831                           - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
1832                           + 1L;
1833             else
1834               return 0;
1835           }
1836       else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT
1837                && e->expr_type == EXPR_VARIABLE)
1838         {
1839           if (e->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
1840               || e->symtree->n.sym->attr.pointer)
1841             {
1842               elements = 1;
1843               continue;
1844             }
1845
1846           /* Determine the number of remaining elements in the element
1847              sequence for array element designators.  */
1848           is_str_storage = true;
1849           for (i = ref->u.ar.dimen - 1; i >= 0; i--)
1850             {
1851               if (ref->u.ar.start[i] == NULL
1852                   || ref->u.ar.start[i]->expr_type != EXPR_CONSTANT
1853                   || ref->u.ar.as->upper[i] == NULL
1854                   || ref->u.ar.as->lower[i] == NULL
1855                   || ref->u.ar.as->upper[i]->expr_type != EXPR_CONSTANT
1856                   || ref->u.ar.as->lower[i]->expr_type != EXPR_CONSTANT)
1857                 return 0;
1858
1859               elements
1860                    = elements
1861                      * (mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
1862                         - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
1863                         + 1L)
1864                      - (mpz_get_si (ref->u.ar.start[i]->value.integer)
1865                         - mpz_get_si (ref->u.ar.as->lower[i]->value.integer));
1866             }
1867         }
1868       else
1869         return 0;
1870     }
1871
1872   if (substrlen)
1873     return (is_str_storage) ? substrlen + (elements-1)*strlen
1874                             : elements*strlen;
1875   else
1876     return elements*strlen;
1877 }
1878
1879
1880 /* Given an expression, check whether it is an array section
1881    which has a vector subscript. If it has, one is returned,
1882    otherwise zero.  */
1883
1884 int
1885 gfc_has_vector_subscript (gfc_expr *e)
1886 {
1887   int i;
1888   gfc_ref *ref;
1889
1890   if (e == NULL || e->rank == 0 || e->expr_type != EXPR_VARIABLE)
1891     return 0;
1892
1893   for (ref = e->ref; ref; ref = ref->next)
1894     if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION)
1895       for (i = 0; i < ref->u.ar.dimen; i++)
1896         if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
1897           return 1;
1898
1899   return 0;
1900 }
1901
1902
1903 /* Given formal and actual argument lists, see if they are compatible.
1904    If they are compatible, the actual argument list is sorted to
1905    correspond with the formal list, and elements for missing optional
1906    arguments are inserted. If WHERE pointer is nonnull, then we issue
1907    errors when things don't match instead of just returning the status
1908    code.  */
1909
1910 static int
1911 compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
1912                        int ranks_must_agree, int is_elemental, locus *where)
1913 {
1914   gfc_actual_arglist **new_arg, *a, *actual, temp;
1915   gfc_formal_arglist *f;
1916   int i, n, na;
1917   unsigned long actual_size, formal_size;
1918
1919   actual = *ap;
1920
1921   if (actual == NULL && formal == NULL)
1922     return 1;
1923
1924   n = 0;
1925   for (f = formal; f; f = f->next)
1926     n++;
1927
1928   new_arg = (gfc_actual_arglist **) alloca (n * sizeof (gfc_actual_arglist *));
1929
1930   for (i = 0; i < n; i++)
1931     new_arg[i] = NULL;
1932
1933   na = 0;
1934   f = formal;
1935   i = 0;
1936
1937   for (a = actual; a; a = a->next, f = f->next)
1938     {
1939       /* Look for keywords but ignore g77 extensions like %VAL.  */
1940       if (a->name != NULL && a->name[0] != '%')
1941         {
1942           i = 0;
1943           for (f = formal; f; f = f->next, i++)
1944             {
1945               if (f->sym == NULL)
1946                 continue;
1947               if (strcmp (f->sym->name, a->name) == 0)
1948                 break;
1949             }
1950
1951           if (f == NULL)
1952             {
1953               if (where)
1954                 gfc_error ("Keyword argument '%s' at %L is not in "
1955                            "the procedure", a->name, &a->expr->where);
1956               return 0;
1957             }
1958
1959           if (new_arg[i] != NULL)
1960             {
1961               if (where)
1962                 gfc_error ("Keyword argument '%s' at %L is already associated "
1963                            "with another actual argument", a->name,
1964                            &a->expr->where);
1965               return 0;
1966             }
1967         }
1968
1969       if (f == NULL)
1970         {
1971           if (where)
1972             gfc_error ("More actual than formal arguments in procedure "
1973                        "call at %L", where);
1974
1975           return 0;
1976         }
1977
1978       if (f->sym == NULL && a->expr == NULL)
1979         goto match;
1980
1981       if (f->sym == NULL)
1982         {
1983           if (where)
1984             gfc_error ("Missing alternate return spec in subroutine call "
1985                        "at %L", where);
1986           return 0;
1987         }
1988
1989       if (a->expr == NULL)
1990         {
1991           if (where)
1992             gfc_error ("Unexpected alternate return spec in subroutine "
1993                        "call at %L", where);
1994           return 0;
1995         }
1996       
1997       if (!compare_parameter (f->sym, a->expr, ranks_must_agree,
1998                               is_elemental, where))
1999         return 0;
2000
2001       /* Special case for character arguments.  For allocatable, pointer
2002          and assumed-shape dummies, the string length needs to match
2003          exactly.  */
2004       if (a->expr->ts.type == BT_CHARACTER
2005            && a->expr->ts.u.cl && a->expr->ts.u.cl->length
2006            && a->expr->ts.u.cl->length->expr_type == EXPR_CONSTANT
2007            && f->sym->ts.u.cl && f->sym->ts.u.cl && f->sym->ts.u.cl->length
2008            && f->sym->ts.u.cl->length->expr_type == EXPR_CONSTANT
2009            && (f->sym->attr.pointer || f->sym->attr.allocatable
2010                || (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2011            && (mpz_cmp (a->expr->ts.u.cl->length->value.integer,
2012                         f->sym->ts.u.cl->length->value.integer) != 0))
2013          {
2014            if (where && (f->sym->attr.pointer || f->sym->attr.allocatable))
2015              gfc_warning ("Character length mismatch (%ld/%ld) between actual "
2016                           "argument and pointer or allocatable dummy argument "
2017                           "'%s' at %L",
2018                           mpz_get_si (a->expr->ts.u.cl->length->value.integer),
2019                           mpz_get_si (f->sym->ts.u.cl->length->value.integer),
2020                           f->sym->name, &a->expr->where);
2021            else if (where)
2022              gfc_warning ("Character length mismatch (%ld/%ld) between actual "
2023                           "argument and assumed-shape dummy argument '%s' "
2024                           "at %L",
2025                           mpz_get_si (a->expr->ts.u.cl->length->value.integer),
2026                           mpz_get_si (f->sym->ts.u.cl->length->value.integer),
2027                           f->sym->name, &a->expr->where);
2028            return 0;
2029          }
2030
2031       actual_size = get_expr_storage_size (a->expr);
2032       formal_size = get_sym_storage_size (f->sym);
2033       if (actual_size != 0
2034             && actual_size < formal_size
2035             && a->expr->ts.type != BT_PROCEDURE)
2036         {
2037           if (a->expr->ts.type == BT_CHARACTER && !f->sym->as && where)
2038             gfc_warning ("Character length of actual argument shorter "
2039                         "than of dummy argument '%s' (%lu/%lu) at %L",
2040                         f->sym->name, actual_size, formal_size,
2041                         &a->expr->where);
2042           else if (where)
2043             gfc_warning ("Actual argument contains too few "
2044                         "elements for dummy argument '%s' (%lu/%lu) at %L",
2045                         f->sym->name, actual_size, formal_size,
2046                         &a->expr->where);
2047           return  0;
2048         }
2049
2050       /* Satisfy 12.4.1.3 by ensuring that a procedure pointer actual argument
2051          is provided for a procedure pointer formal argument.  */
2052       if (f->sym->attr.proc_pointer
2053           && !((a->expr->expr_type == EXPR_VARIABLE
2054                 && a->expr->symtree->n.sym->attr.proc_pointer)
2055                || (a->expr->expr_type == EXPR_FUNCTION
2056                    && a->expr->symtree->n.sym->result->attr.proc_pointer)
2057                || gfc_is_proc_ptr_comp (a->expr, NULL)))
2058         {
2059           if (where)
2060             gfc_error ("Expected a procedure pointer for argument '%s' at %L",
2061                        f->sym->name, &a->expr->where);
2062           return 0;
2063         }
2064
2065       /* Satisfy 12.4.1.2 by ensuring that a procedure actual argument is
2066          provided for a procedure formal argument.  */
2067       if (a->expr->ts.type != BT_PROCEDURE && !gfc_is_proc_ptr_comp (a->expr, NULL)
2068           && a->expr->expr_type == EXPR_VARIABLE
2069           && f->sym->attr.flavor == FL_PROCEDURE)
2070         {
2071           if (where)
2072             gfc_error ("Expected a procedure for argument '%s' at %L",
2073                        f->sym->name, &a->expr->where);
2074           return 0;
2075         }
2076
2077       if (f->sym->attr.flavor == FL_PROCEDURE && f->sym->attr.pure
2078           && a->expr->ts.type == BT_PROCEDURE
2079           && !a->expr->symtree->n.sym->attr.pure)
2080         {
2081           if (where)
2082             gfc_error ("Expected a PURE procedure for argument '%s' at %L",
2083                        f->sym->name, &a->expr->where);
2084           return 0;
2085         }
2086
2087       if (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE
2088           && a->expr->expr_type == EXPR_VARIABLE
2089           && a->expr->symtree->n.sym->as
2090           && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SIZE
2091           && (a->expr->ref == NULL
2092               || (a->expr->ref->type == REF_ARRAY
2093                   && a->expr->ref->u.ar.type == AR_FULL)))
2094         {
2095           if (where)
2096             gfc_error ("Actual argument for '%s' cannot be an assumed-size"
2097                        " array at %L", f->sym->name, where);
2098           return 0;
2099         }
2100
2101       if (a->expr->expr_type != EXPR_NULL
2102           && compare_pointer (f->sym, a->expr) == 0)
2103         {
2104           if (where)
2105             gfc_error ("Actual argument for '%s' must be a pointer at %L",
2106                        f->sym->name, &a->expr->where);
2107           return 0;
2108         }
2109
2110       /* Fortran 2008, C1242.  */
2111       if (f->sym->attr.pointer && gfc_is_coindexed (a->expr))
2112         {
2113           if (where)
2114             gfc_error ("Coindexed actual argument at %L to pointer "
2115                        "dummy '%s'",
2116                        &a->expr->where, f->sym->name);
2117           return 0;
2118         }
2119
2120       /* Fortran 2008, 12.5.2.5 (no constraint).  */
2121       if (a->expr->expr_type == EXPR_VARIABLE
2122           && f->sym->attr.intent != INTENT_IN
2123           && f->sym->attr.allocatable
2124           && gfc_is_coindexed (a->expr))
2125         {
2126           if (where)
2127             gfc_error ("Coindexed actual argument at %L to allocatable "
2128                        "dummy '%s' requires INTENT(IN)",
2129                        &a->expr->where, f->sym->name);
2130           return 0;
2131         }
2132
2133       /* Fortran 2008, C1237.  */
2134       if (a->expr->expr_type == EXPR_VARIABLE
2135           && (f->sym->attr.asynchronous || f->sym->attr.volatile_)
2136           && gfc_is_coindexed (a->expr)
2137           && (a->expr->symtree->n.sym->attr.volatile_
2138               || a->expr->symtree->n.sym->attr.asynchronous))
2139         {
2140           if (where)
2141             gfc_error ("Coindexed ASYNCHRONOUS or VOLATILE actual argument at "
2142                        "at %L requires that dummy %s' has neither "
2143                        "ASYNCHRONOUS nor VOLATILE", &a->expr->where,
2144                        f->sym->name);
2145           return 0;
2146         }
2147
2148       /* Fortran 2008, 12.5.2.4 (no constraint).  */
2149       if (a->expr->expr_type == EXPR_VARIABLE
2150           && f->sym->attr.intent != INTENT_IN && !f->sym->attr.value
2151           && gfc_is_coindexed (a->expr)
2152           && gfc_has_ultimate_allocatable (a->expr))
2153         {
2154           if (where)
2155             gfc_error ("Coindexed actual argument at %L with allocatable "
2156                        "ultimate component to dummy '%s' requires either VALUE "
2157                        "or INTENT(IN)", &a->expr->where, f->sym->name);
2158           return 0;
2159         }
2160
2161       if (a->expr->expr_type != EXPR_NULL
2162           && compare_allocatable (f->sym, a->expr) == 0)
2163         {
2164           if (where)
2165             gfc_error ("Actual argument for '%s' must be ALLOCATABLE at %L",
2166                        f->sym->name, &a->expr->where);
2167           return 0;
2168         }
2169
2170       /* Check intent = OUT/INOUT for definable actual argument.  */
2171       if ((a->expr->expr_type != EXPR_VARIABLE
2172            || (a->expr->symtree->n.sym->attr.flavor != FL_VARIABLE
2173                && a->expr->symtree->n.sym->attr.flavor != FL_PROCEDURE))
2174           && (f->sym->attr.intent == INTENT_OUT
2175               || f->sym->attr.intent == INTENT_INOUT))
2176         {
2177           if (where)
2178             gfc_error ("Actual argument at %L must be definable as "
2179                        "the dummy argument '%s' is INTENT = OUT/INOUT",
2180                        &a->expr->where, f->sym->name);
2181           return 0;
2182         }
2183
2184       if (!compare_parameter_protected(f->sym, a->expr))
2185         {
2186           if (where)
2187             gfc_error ("Actual argument at %L is use-associated with "
2188                        "PROTECTED attribute and dummy argument '%s' is "
2189                        "INTENT = OUT/INOUT",
2190                        &a->expr->where,f->sym->name);
2191           return 0;
2192         }
2193
2194       if ((f->sym->attr.intent == INTENT_OUT
2195            || f->sym->attr.intent == INTENT_INOUT
2196            || f->sym->attr.volatile_
2197            || f->sym->attr.asynchronous)
2198           && gfc_has_vector_subscript (a->expr))
2199         {
2200           if (where)
2201             gfc_error ("Array-section actual argument with vector "
2202                        "subscripts at %L is incompatible with INTENT(OUT), "
2203                        "INTENT(INOUT), VOLATILE or ASYNCHRONOUS attribute "
2204                        "of the dummy argument '%s'",
2205                        &a->expr->where, f->sym->name);
2206           return 0;
2207         }
2208
2209       /* C1232 (R1221) For an actual argument which is an array section or
2210          an assumed-shape array, the dummy argument shall be an assumed-
2211          shape array, if the dummy argument has the VOLATILE attribute.  */
2212
2213       if (f->sym->attr.volatile_
2214           && a->expr->symtree->n.sym->as
2215           && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
2216           && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2217         {
2218           if (where)
2219             gfc_error ("Assumed-shape actual argument at %L is "
2220                        "incompatible with the non-assumed-shape "
2221                        "dummy argument '%s' due to VOLATILE attribute",
2222                        &a->expr->where,f->sym->name);
2223           return 0;
2224         }
2225
2226       if (f->sym->attr.volatile_
2227           && a->expr->ref && a->expr->ref->u.ar.type == AR_SECTION
2228           && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2229         {
2230           if (where)
2231             gfc_error ("Array-section actual argument at %L is "
2232                        "incompatible with the non-assumed-shape "
2233                        "dummy argument '%s' due to VOLATILE attribute",
2234                        &a->expr->where,f->sym->name);
2235           return 0;
2236         }
2237
2238       /* C1233 (R1221) For an actual argument which is a pointer array, the
2239          dummy argument shall be an assumed-shape or pointer array, if the
2240          dummy argument has the VOLATILE attribute.  */
2241
2242       if (f->sym->attr.volatile_
2243           && a->expr->symtree->n.sym->attr.pointer
2244           && a->expr->symtree->n.sym->as
2245           && !(f->sym->as
2246                && (f->sym->as->type == AS_ASSUMED_SHAPE
2247                    || f->sym->attr.pointer)))
2248         {
2249           if (where)
2250             gfc_error ("Pointer-array actual argument at %L requires "
2251                        "an assumed-shape or pointer-array dummy "
2252                        "argument '%s' due to VOLATILE attribute",
2253                        &a->expr->where,f->sym->name);
2254           return 0;
2255         }
2256
2257     match:
2258       if (a == actual)
2259         na = i;
2260
2261       new_arg[i++] = a;
2262     }
2263
2264   /* Make sure missing actual arguments are optional.  */
2265   i = 0;
2266   for (f = formal; f; f = f->next, i++)
2267     {
2268       if (new_arg[i] != NULL)
2269         continue;
2270       if (f->sym == NULL)
2271         {
2272           if (where)
2273             gfc_error ("Missing alternate return spec in subroutine call "
2274                        "at %L", where);
2275           return 0;
2276         }
2277       if (!f->sym->attr.optional)
2278         {
2279           if (where)
2280             gfc_error ("Missing actual argument for argument '%s' at %L",
2281                        f->sym->name, where);
2282           return 0;
2283         }
2284     }
2285
2286   /* The argument lists are compatible.  We now relink a new actual
2287      argument list with null arguments in the right places.  The head
2288      of the list remains the head.  */
2289   for (i = 0; i < n; i++)
2290     if (new_arg[i] == NULL)
2291       new_arg[i] = gfc_get_actual_arglist ();
2292
2293   if (na != 0)
2294     {
2295       temp = *new_arg[0];
2296       *new_arg[0] = *actual;
2297       *actual = temp;
2298
2299       a = new_arg[0];
2300       new_arg[0] = new_arg[na];
2301       new_arg[na] = a;
2302     }
2303
2304   for (i = 0; i < n - 1; i++)
2305     new_arg[i]->next = new_arg[i + 1];
2306
2307   new_arg[i]->next = NULL;
2308
2309   if (*ap == NULL && n > 0)
2310     *ap = new_arg[0];
2311
2312   /* Note the types of omitted optional arguments.  */
2313   for (a = *ap, f = formal; a; a = a->next, f = f->next)
2314     if (a->expr == NULL && a->label == NULL)
2315       a->missing_arg_type = f->sym->ts.type;
2316
2317   return 1;
2318 }
2319
2320
2321 typedef struct
2322 {
2323   gfc_formal_arglist *f;
2324   gfc_actual_arglist *a;
2325 }
2326 argpair;
2327
2328 /* qsort comparison function for argument pairs, with the following
2329    order:
2330     - p->a->expr == NULL
2331     - p->a->expr->expr_type != EXPR_VARIABLE
2332     - growing p->a->expr->symbol.  */
2333
2334 static int
2335 pair_cmp (const void *p1, const void *p2)
2336 {
2337   const gfc_actual_arglist *a1, *a2;
2338
2339   /* *p1 and *p2 are elements of the to-be-sorted array.  */
2340   a1 = ((const argpair *) p1)->a;
2341   a2 = ((const argpair *) p2)->a;
2342   if (!a1->expr)
2343     {
2344       if (!a2->expr)
2345         return 0;
2346       return -1;
2347     }
2348   if (!a2->expr)
2349     return 1;
2350   if (a1->expr->expr_type != EXPR_VARIABLE)
2351     {
2352       if (a2->expr->expr_type != EXPR_VARIABLE)
2353         return 0;
2354       return -1;
2355     }
2356   if (a2->expr->expr_type != EXPR_VARIABLE)
2357     return 1;
2358   return a1->expr->symtree->n.sym < a2->expr->symtree->n.sym;
2359 }
2360
2361
2362 /* Given two expressions from some actual arguments, test whether they
2363    refer to the same expression. The analysis is conservative.
2364    Returning FAILURE will produce no warning.  */
2365
2366 static gfc_try
2367 compare_actual_expr (gfc_expr *e1, gfc_expr *e2)
2368 {
2369   const gfc_ref *r1, *r2;
2370
2371   if (!e1 || !e2
2372       || e1->expr_type != EXPR_VARIABLE
2373       || e2->expr_type != EXPR_VARIABLE
2374       || e1->symtree->n.sym != e2->symtree->n.sym)
2375     return FAILURE;
2376
2377   /* TODO: improve comparison, see expr.c:show_ref().  */
2378   for (r1 = e1->ref, r2 = e2->ref; r1 && r2; r1 = r1->next, r2 = r2->next)
2379     {
2380       if (r1->type != r2->type)
2381         return FAILURE;
2382       switch (r1->type)
2383         {
2384         case REF_ARRAY:
2385           if (r1->u.ar.type != r2->u.ar.type)
2386             return FAILURE;
2387           /* TODO: At the moment, consider only full arrays;
2388              we could do better.  */
2389           if (r1->u.ar.type != AR_FULL || r2->u.ar.type != AR_FULL)
2390             return FAILURE;
2391           break;
2392
2393         case REF_COMPONENT:
2394           if (r1->u.c.component != r2->u.c.component)
2395             return FAILURE;
2396           break;
2397
2398         case REF_SUBSTRING:
2399           return FAILURE;
2400
2401         default:
2402           gfc_internal_error ("compare_actual_expr(): Bad component code");
2403         }
2404     }
2405   if (!r1 && !r2)
2406     return SUCCESS;
2407   return FAILURE;
2408 }
2409
2410
2411 /* Given formal and actual argument lists that correspond to one
2412    another, check that identical actual arguments aren't not
2413    associated with some incompatible INTENTs.  */
2414
2415 static gfc_try
2416 check_some_aliasing (gfc_formal_arglist *f, gfc_actual_arglist *a)
2417 {
2418   sym_intent f1_intent, f2_intent;
2419   gfc_formal_arglist *f1;
2420   gfc_actual_arglist *a1;
2421   size_t n, i, j;
2422   argpair *p;
2423   gfc_try t = SUCCESS;
2424
2425   n = 0;
2426   for (f1 = f, a1 = a;; f1 = f1->next, a1 = a1->next)
2427     {
2428       if (f1 == NULL && a1 == NULL)
2429         break;
2430       if (f1 == NULL || a1 == NULL)
2431         gfc_internal_error ("check_some_aliasing(): List mismatch");
2432       n++;
2433     }
2434   if (n == 0)
2435     return t;
2436   p = (argpair *) alloca (n * sizeof (argpair));
2437
2438   for (i = 0, f1 = f, a1 = a; i < n; i++, f1 = f1->next, a1 = a1->next)
2439     {
2440       p[i].f = f1;
2441       p[i].a = a1;
2442     }
2443
2444   qsort (p, n, sizeof (argpair), pair_cmp);
2445
2446   for (i = 0; i < n; i++)
2447     {
2448       if (!p[i].a->expr
2449           || p[i].a->expr->expr_type != EXPR_VARIABLE
2450           || p[i].a->expr->ts.type == BT_PROCEDURE)
2451         continue;
2452       f1_intent = p[i].f->sym->attr.intent;
2453       for (j = i + 1; j < n; j++)
2454         {
2455           /* Expected order after the sort.  */
2456           if (!p[j].a->expr || p[j].a->expr->expr_type != EXPR_VARIABLE)
2457             gfc_internal_error ("check_some_aliasing(): corrupted data");
2458
2459           /* Are the expression the same?  */
2460           if (compare_actual_expr (p[i].a->expr, p[j].a->expr) == FAILURE)
2461             break;
2462           f2_intent = p[j].f->sym->attr.intent;
2463           if ((f1_intent == INTENT_IN && f2_intent == INTENT_OUT)
2464               || (f1_intent == INTENT_OUT && f2_intent == INTENT_IN))
2465             {
2466               gfc_warning ("Same actual argument associated with INTENT(%s) "
2467                            "argument '%s' and INTENT(%s) argument '%s' at %L",
2468                            gfc_intent_string (f1_intent), p[i].f->sym->name,
2469                            gfc_intent_string (f2_intent), p[j].f->sym->name,
2470                            &p[i].a->expr->where);
2471               t = FAILURE;
2472             }
2473         }
2474     }
2475
2476   return t;
2477 }
2478
2479
2480 /* Given a symbol of a formal argument list and an expression,
2481    return nonzero if their intents are compatible, zero otherwise.  */
2482
2483 static int
2484 compare_parameter_intent (gfc_symbol *formal, gfc_expr *actual)
2485 {
2486   if (actual->symtree->n.sym->attr.pointer && !formal->attr.pointer)
2487     return 1;
2488
2489   if (actual->symtree->n.sym->attr.intent != INTENT_IN)
2490     return 1;
2491
2492   if (formal->attr.intent == INTENT_INOUT || formal->attr.intent == INTENT_OUT)
2493     return 0;
2494
2495   return 1;
2496 }
2497
2498
2499 /* Given formal and actual argument lists that correspond to one
2500    another, check that they are compatible in the sense that intents
2501    are not mismatched.  */
2502
2503 static gfc_try
2504 check_intents (gfc_formal_arglist *f, gfc_actual_arglist *a)
2505 {
2506   sym_intent f_intent;
2507
2508   for (;; f = f->next, a = a->next)
2509     {
2510       if (f == NULL && a == NULL)
2511         break;
2512       if (f == NULL || a == NULL)
2513         gfc_internal_error ("check_intents(): List mismatch");
2514
2515       if (a->expr == NULL || a->expr->expr_type != EXPR_VARIABLE)
2516         continue;
2517
2518       f_intent = f->sym->attr.intent;
2519
2520       if (!compare_parameter_intent(f->sym, a->expr))
2521         {
2522           gfc_error ("Procedure argument at %L is INTENT(IN) while interface "
2523                      "specifies INTENT(%s)", &a->expr->where,
2524                      gfc_intent_string (f_intent));
2525           return FAILURE;
2526         }
2527
2528       if (gfc_pure (NULL) && gfc_impure_variable (a->expr->symtree->n.sym))
2529         {
2530           if (f_intent == INTENT_INOUT || f_intent == INTENT_OUT)
2531             {
2532               gfc_error ("Procedure argument at %L is local to a PURE "
2533                          "procedure and is passed to an INTENT(%s) argument",
2534                          &a->expr->where, gfc_intent_string (f_intent));
2535               return FAILURE;
2536             }
2537
2538           if (f->sym->attr.pointer)
2539             {
2540               gfc_error ("Procedure argument at %L is local to a PURE "
2541                          "procedure and has the POINTER attribute",
2542                          &a->expr->where);
2543               return FAILURE;
2544             }
2545         }
2546
2547        /* Fortran 2008, C1283.  */
2548        if (gfc_pure (NULL) && gfc_is_coindexed (a->expr))
2549         {
2550           if (f_intent == INTENT_INOUT || f_intent == INTENT_OUT)
2551             {
2552               gfc_error ("Coindexed actual argument at %L in PURE procedure "
2553                          "is passed to an INTENT(%s) argument",
2554                          &a->expr->where, gfc_intent_string (f_intent));
2555               return FAILURE;
2556             }
2557
2558           if (f->sym->attr.pointer)
2559             {
2560               gfc_error ("Coindexed actual argument at %L in PURE procedure "
2561                          "is passed to a POINTER dummy argument",
2562                          &a->expr->where);
2563               return FAILURE;
2564             }
2565         }
2566
2567        /* F2008, Section 12.5.2.4.  */
2568        if (a->expr->ts.type == BT_CLASS && f->sym->ts.type == BT_CLASS
2569            && gfc_is_coindexed (a->expr))
2570          {
2571            gfc_error ("Coindexed polymorphic actual argument at %L is passed "
2572                       "polymorphic dummy argument '%s'",
2573                          &a->expr->where, f->sym->name);
2574            return FAILURE;
2575          }
2576     }
2577
2578   return SUCCESS;
2579 }
2580
2581
2582 /* Check how a procedure is used against its interface.  If all goes
2583    well, the actual argument list will also end up being properly
2584    sorted.  */
2585
2586 void
2587 gfc_procedure_use (gfc_symbol *sym, gfc_actual_arglist **ap, locus *where)
2588 {
2589
2590   /* Warn about calls with an implicit interface.  Special case
2591      for calling a ISO_C_BINDING becase c_loc and c_funloc
2592      are pseudo-unknown.  Additionally, warn about procedures not
2593      explicitly declared at all if requested.  */
2594   if (sym->attr.if_source == IFSRC_UNKNOWN && ! sym->attr.is_iso_c)
2595     {
2596       if (gfc_option.warn_implicit_interface)
2597         gfc_warning ("Procedure '%s' called with an implicit interface at %L",
2598                      sym->name, where);
2599       else if (gfc_option.warn_implicit_procedure
2600                && sym->attr.proc == PROC_UNKNOWN)
2601         gfc_warning ("Procedure '%s' called at %L is not explicitly declared",
2602                      sym->name, where);
2603     }
2604
2605   if (sym->attr.if_source == IFSRC_UNKNOWN)
2606     {
2607       gfc_actual_arglist *a;
2608       for (a = *ap; a; a = a->next)
2609         {
2610           /* Skip g77 keyword extensions like %VAL, %REF, %LOC.  */
2611           if (a->name != NULL && a->name[0] != '%')
2612             {
2613               gfc_error("Keyword argument requires explicit interface "
2614                         "for procedure '%s' at %L", sym->name, &a->expr->where);
2615               break;
2616             }
2617         }
2618
2619       return;
2620     }
2621
2622   if (!compare_actual_formal (ap, sym->formal, 0, sym->attr.elemental, where))
2623     return;
2624
2625   check_intents (sym->formal, *ap);
2626   if (gfc_option.warn_aliasing)
2627     check_some_aliasing (sym->formal, *ap);
2628 }
2629
2630
2631 /* Check how a procedure pointer component is used against its interface.
2632    If all goes well, the actual argument list will also end up being properly
2633    sorted. Completely analogous to gfc_procedure_use.  */
2634
2635 void
2636 gfc_ppc_use (gfc_component *comp, gfc_actual_arglist **ap, locus *where)
2637 {
2638
2639   /* Warn about calls with an implicit interface.  Special case
2640      for calling a ISO_C_BINDING becase c_loc and c_funloc
2641      are pseudo-unknown.  */
2642   if (gfc_option.warn_implicit_interface
2643       && comp->attr.if_source == IFSRC_UNKNOWN
2644       && !comp->attr.is_iso_c)
2645     gfc_warning ("Procedure pointer component '%s' called with an implicit "
2646                  "interface at %L", comp->name, where);
2647
2648   if (comp->attr.if_source == IFSRC_UNKNOWN)
2649     {
2650       gfc_actual_arglist *a;
2651       for (a = *ap; a; a = a->next)
2652         {
2653           /* Skip g77 keyword extensions like %VAL, %REF, %LOC.  */
2654           if (a->name != NULL && a->name[0] != '%')
2655             {
2656               gfc_error("Keyword argument requires explicit interface "
2657                         "for procedure pointer component '%s' at %L",
2658                         comp->name, &a->expr->where);
2659               break;
2660             }
2661         }
2662
2663       return;
2664     }
2665
2666   if (!compare_actual_formal (ap, comp->formal, 0, comp->attr.elemental, where))
2667     return;
2668
2669   check_intents (comp->formal, *ap);
2670   if (gfc_option.warn_aliasing)
2671     check_some_aliasing (comp->formal, *ap);
2672 }
2673
2674
2675 /* Try if an actual argument list matches the formal list of a symbol,
2676    respecting the symbol's attributes like ELEMENTAL.  This is used for
2677    GENERIC resolution.  */
2678
2679 bool
2680 gfc_arglist_matches_symbol (gfc_actual_arglist** args, gfc_symbol* sym)
2681 {
2682   bool r;
2683
2684   gcc_assert (sym->attr.flavor == FL_PROCEDURE);
2685
2686   r = !sym->attr.elemental;
2687   if (compare_actual_formal (args, sym->formal, r, !r, NULL))
2688     {
2689       check_intents (sym->formal, *args);
2690       if (gfc_option.warn_aliasing)
2691         check_some_aliasing (sym->formal, *args);
2692       return true;
2693     }
2694
2695   return false;
2696 }
2697
2698
2699 /* Given an interface pointer and an actual argument list, search for
2700    a formal argument list that matches the actual.  If found, returns
2701    a pointer to the symbol of the correct interface.  Returns NULL if
2702    not found.  */
2703
2704 gfc_symbol *
2705 gfc_search_interface (gfc_interface *intr, int sub_flag,
2706                       gfc_actual_arglist **ap)
2707 {
2708   gfc_symbol *elem_sym = NULL;
2709   for (; intr; intr = intr->next)
2710     {
2711       if (sub_flag && intr->sym->attr.function)
2712         continue;
2713       if (!sub_flag && intr->sym->attr.subroutine)
2714         continue;
2715
2716       if (gfc_arglist_matches_symbol (ap, intr->sym))
2717         {
2718           /* Satisfy 12.4.4.1 such that an elemental match has lower
2719              weight than a non-elemental match.  */ 
2720           if (intr->sym->attr.elemental)
2721             {
2722               elem_sym = intr->sym;
2723               continue;
2724             }
2725           return intr->sym;
2726         }
2727     }
2728
2729   return elem_sym ? elem_sym : NULL;
2730 }
2731
2732
2733 /* Do a brute force recursive search for a symbol.  */
2734
2735 static gfc_symtree *
2736 find_symtree0 (gfc_symtree *root, gfc_symbol *sym)
2737 {
2738   gfc_symtree * st;
2739
2740   if (root->n.sym == sym)
2741     return root;
2742
2743   st = NULL;
2744   if (root->left)
2745     st = find_symtree0 (root->left, sym);
2746   if (root->right && ! st)
2747     st = find_symtree0 (root->right, sym);
2748   return st;
2749 }
2750
2751
2752 /* Find a symtree for a symbol.  */
2753
2754 gfc_symtree *
2755 gfc_find_sym_in_symtree (gfc_symbol *sym)
2756 {
2757   gfc_symtree *st;
2758   gfc_namespace *ns;
2759
2760   /* First try to find it by name.  */
2761   gfc_find_sym_tree (sym->name, gfc_current_ns, 1, &st);
2762   if (st && st->n.sym == sym)
2763     return st;
2764
2765   /* If it's been renamed, resort to a brute-force search.  */
2766   /* TODO: avoid having to do this search.  If the symbol doesn't exist
2767      in the symtree for the current namespace, it should probably be added.  */
2768   for (ns = gfc_current_ns; ns; ns = ns->parent)
2769     {
2770       st = find_symtree0 (ns->sym_root, sym);
2771       if (st)
2772         return st;
2773     }
2774   gfc_internal_error ("Unable to find symbol %s", sym->name);
2775   /* Not reached.  */
2776 }
2777
2778
2779 /* See if the arglist to an operator-call contains a derived-type argument
2780    with a matching type-bound operator.  If so, return the matching specific
2781    procedure defined as operator-target as well as the base-object to use
2782    (which is the found derived-type argument with operator).  */
2783
2784 static gfc_typebound_proc*
2785 matching_typebound_op (gfc_expr** tb_base,
2786                        gfc_actual_arglist* args,
2787                        gfc_intrinsic_op op, const char* uop)
2788 {
2789   gfc_actual_arglist* base;
2790
2791   for (base = args; base; base = base->next)
2792     if (base->expr->ts.type == BT_DERIVED || base->expr->ts.type == BT_CLASS)
2793       {
2794         gfc_typebound_proc* tb;
2795         gfc_symbol* derived;
2796         gfc_try result;
2797
2798         if (base->expr->ts.type == BT_CLASS)
2799           derived = CLASS_DATA (base->expr)->ts.u.derived;
2800         else
2801           derived = base->expr->ts.u.derived;
2802
2803         if (op == INTRINSIC_USER)
2804           {
2805             gfc_symtree* tb_uop;
2806
2807             gcc_assert (uop);
2808             tb_uop = gfc_find_typebound_user_op (derived, &result, uop,
2809                                                  false, NULL);
2810
2811             if (tb_uop)
2812               tb = tb_uop->n.tb;
2813             else
2814               tb = NULL;
2815           }
2816         else
2817           tb = gfc_find_typebound_intrinsic_op (derived, &result, op,
2818                                                 false, NULL);
2819
2820         /* This means we hit a PRIVATE operator which is use-associated and
2821            should thus not be seen.  */
2822         if (result == FAILURE)
2823           tb = NULL;
2824
2825         /* Look through the super-type hierarchy for a matching specific
2826            binding.  */
2827         for (; tb; tb = tb->overridden)
2828           {
2829             gfc_tbp_generic* g;
2830
2831             gcc_assert (tb->is_generic);
2832             for (g = tb->u.generic; g; g = g->next)
2833               {
2834                 gfc_symbol* target;
2835                 gfc_actual_arglist* argcopy;
2836                 bool matches;
2837
2838                 gcc_assert (g->specific);
2839                 if (g->specific->error)
2840                   continue;
2841
2842                 target = g->specific->u.specific->n.sym;
2843
2844                 /* Check if this arglist matches the formal.  */
2845                 argcopy = gfc_copy_actual_arglist (args);
2846                 matches = gfc_arglist_matches_symbol (&argcopy, target);
2847                 gfc_free_actual_arglist (argcopy);
2848
2849                 /* Return if we found a match.  */
2850                 if (matches)
2851                   {
2852                     *tb_base = base->expr;
2853                     return g->specific;
2854                   }
2855               }
2856           }
2857       }
2858
2859   return NULL;
2860 }
2861
2862
2863 /* For the 'actual arglist' of an operator call and a specific typebound
2864    procedure that has been found the target of a type-bound operator, build the
2865    appropriate EXPR_COMPCALL and resolve it.  We take this indirection over
2866    type-bound procedures rather than resolving type-bound operators 'directly'
2867    so that we can reuse the existing logic.  */
2868
2869 static void
2870 build_compcall_for_operator (gfc_expr* e, gfc_actual_arglist* actual,
2871                              gfc_expr* base, gfc_typebound_proc* target)
2872 {
2873   e->expr_type = EXPR_COMPCALL;
2874   e->value.compcall.tbp = target;
2875   e->value.compcall.name = "operator"; /* Should not matter.  */
2876   e->value.compcall.actual = actual;
2877   e->value.compcall.base_object = base;
2878   e->value.compcall.ignore_pass = 1;
2879   e->value.compcall.assign = 0;
2880 }
2881
2882
2883 /* This subroutine is called when an expression is being resolved.
2884    The expression node in question is either a user defined operator
2885    or an intrinsic operator with arguments that aren't compatible
2886    with the operator.  This subroutine builds an actual argument list
2887    corresponding to the operands, then searches for a compatible
2888    interface.  If one is found, the expression node is replaced with
2889    the appropriate function call.
2890    real_error is an additional output argument that specifies if FAILURE
2891    is because of some real error and not because no match was found.  */
2892
2893 gfc_try
2894 gfc_extend_expr (gfc_expr *e, bool *real_error)
2895 {
2896   gfc_actual_arglist *actual;
2897   gfc_symbol *sym;
2898   gfc_namespace *ns;
2899   gfc_user_op *uop;
2900   gfc_intrinsic_op i;
2901
2902   sym = NULL;
2903
2904   actual = gfc_get_actual_arglist ();
2905   actual->expr = e->value.op.op1;
2906
2907   *real_error = false;
2908
2909   if (e->value.op.op2 != NULL)
2910     {
2911       actual->next = gfc_get_actual_arglist ();
2912       actual->next->expr = e->value.op.op2;
2913     }
2914
2915   i = fold_unary_intrinsic (e->value.op.op);
2916
2917   if (i == INTRINSIC_USER)
2918     {
2919       for (ns = gfc_current_ns; ns; ns = ns->parent)
2920         {
2921           uop = gfc_find_uop (e->value.op.uop->name, ns);
2922           if (uop == NULL)
2923             continue;
2924
2925           sym = gfc_search_interface (uop->op, 0, &actual);
2926           if (sym != NULL)
2927             break;
2928         }
2929     }
2930   else
2931     {
2932       for (ns = gfc_current_ns; ns; ns = ns->parent)
2933         {
2934           /* Due to the distinction between '==' and '.eq.' and friends, one has
2935              to check if either is defined.  */
2936           switch (i)
2937             {
2938 #define CHECK_OS_COMPARISON(comp) \
2939   case INTRINSIC_##comp: \
2940   case INTRINSIC_##comp##_OS: \
2941     sym = gfc_search_interface (ns->op[INTRINSIC_##comp], 0, &actual); \
2942     if (!sym) \
2943       sym = gfc_search_interface (ns->op[INTRINSIC_##comp##_OS], 0, &actual); \
2944     break;
2945               CHECK_OS_COMPARISON(EQ)
2946               CHECK_OS_COMPARISON(NE)
2947               CHECK_OS_COMPARISON(GT)
2948               CHECK_OS_COMPARISON(GE)
2949               CHECK_OS_COMPARISON(LT)
2950               CHECK_OS_COMPARISON(LE)
2951 #undef CHECK_OS_COMPARISON
2952
2953               default:
2954                 sym = gfc_search_interface (ns->op[i], 0, &actual);
2955             }
2956
2957           if (sym != NULL)
2958             break;
2959         }
2960     }
2961
2962   /* TODO: Do an ambiguity-check and error if multiple matching interfaces are
2963      found rather than just taking the first one and not checking further.  */
2964
2965   if (sym == NULL)
2966     {
2967       gfc_typebound_proc* tbo;
2968       gfc_expr* tb_base;
2969
2970       /* See if we find a matching type-bound operator.  */
2971       if (i == INTRINSIC_USER)
2972         tbo = matching_typebound_op (&tb_base, actual,
2973                                      i, e->value.op.uop->name);
2974       else
2975         switch (i)
2976           {
2977 #define CHECK_OS_COMPARISON(comp) \
2978   case INTRINSIC_##comp: \
2979   case INTRINSIC_##comp##_OS: \
2980     tbo = matching_typebound_op (&tb_base, actual, \
2981                                  INTRINSIC_##comp, NULL); \
2982     if (!tbo) \
2983       tbo = matching_typebound_op (&tb_base, actual, \
2984                                    INTRINSIC_##comp##_OS, NULL); \
2985     break;
2986             CHECK_OS_COMPARISON(EQ)
2987             CHECK_OS_COMPARISON(NE)
2988             CHECK_OS_COMPARISON(GT)
2989             CHECK_OS_COMPARISON(GE)
2990             CHECK_OS_COMPARISON(LT)
2991             CHECK_OS_COMPARISON(LE)
2992 #undef CHECK_OS_COMPARISON
2993
2994             default:
2995               tbo = matching_typebound_op (&tb_base, actual, i, NULL);
2996               break;
2997           }
2998               
2999       /* If there is a matching typebound-operator, replace the expression with
3000          a call to it and succeed.  */
3001       if (tbo)
3002         {
3003           gfc_try result;
3004
3005           gcc_assert (tb_base);
3006           build_compcall_for_operator (e, actual, tb_base, tbo);
3007
3008           result = gfc_resolve_expr (e);
3009           if (result == FAILURE)
3010             *real_error = true;
3011
3012           return result;
3013         }
3014
3015       /* Don't use gfc_free_actual_arglist().  */
3016       if (actual->next != NULL)
3017         gfc_free (actual->next);
3018       gfc_free (actual);
3019
3020       return FAILURE;
3021     }
3022
3023   /* Change the expression node to a function call.  */
3024   e->expr_type = EXPR_FUNCTION;
3025   e->symtree = gfc_find_sym_in_symtree (sym);
3026   e->value.function.actual = actual;
3027   e->value.function.esym = NULL;
3028   e->value.function.isym = NULL;
3029   e->value.function.name = NULL;
3030   e->user_operator = 1;
3031
3032   if (gfc_resolve_expr (e) == FAILURE)
3033     {
3034       *real_error = true;
3035       return FAILURE;
3036     }
3037
3038   return SUCCESS;
3039 }
3040
3041
3042 /* Tries to replace an assignment code node with a subroutine call to
3043    the subroutine associated with the assignment operator.  Return
3044    SUCCESS if the node was replaced.  On FAILURE, no error is
3045    generated.  */
3046
3047 gfc_try
3048 gfc_extend_assign (gfc_code *c, gfc_namespace *ns)
3049 {
3050   gfc_actual_arglist *actual;
3051   gfc_expr *lhs, *rhs;
3052   gfc_symbol *sym;
3053
3054   lhs = c->expr1;
3055   rhs = c->expr2;
3056
3057   /* Don't allow an intrinsic assignment to be replaced.  */
3058   if (lhs->ts.type != BT_DERIVED && lhs->ts.type != BT_CLASS
3059       && (rhs->rank == 0 || rhs->rank == lhs->rank)
3060       && (lhs->ts.type == rhs->ts.type
3061           || (gfc_numeric_ts (&lhs->ts) && gfc_numeric_ts (&rhs->ts))))
3062     return FAILURE;
3063
3064   actual = gfc_get_actual_arglist ();
3065   actual->expr = lhs;
3066
3067   actual->next = gfc_get_actual_arglist ();
3068   actual->next->expr = rhs;
3069
3070   sym = NULL;
3071
3072   for (; ns; ns = ns->parent)
3073     {
3074       sym = gfc_search_interface (ns->op[INTRINSIC_ASSIGN], 1, &actual);
3075       if (sym != NULL)
3076         break;
3077     }
3078
3079   /* TODO: Ambiguity-check, see above for gfc_extend_expr.  */
3080
3081   if (sym == NULL)
3082     {
3083       gfc_typebound_proc* tbo;
3084       gfc_expr* tb_base;
3085
3086       /* See if we find a matching type-bound assignment.  */
3087       tbo = matching_typebound_op (&tb_base, actual,
3088                                    INTRINSIC_ASSIGN, NULL);
3089               
3090       /* If there is one, replace the expression with a call to it and
3091          succeed.  */
3092       if (tbo)
3093         {
3094           gcc_assert (tb_base);
3095           c->expr1 = gfc_get_expr ();
3096           build_compcall_for_operator (c->expr1, actual, tb_base, tbo);
3097           c->expr1->value.compcall.assign = 1;
3098           c->expr2 = NULL;
3099           c->op = EXEC_COMPCALL;
3100
3101           /* c is resolved from the caller, so no need to do it here.  */
3102
3103           return SUCCESS;
3104         }
3105
3106       gfc_free (actual->next);
3107       gfc_free (actual);
3108       return FAILURE;
3109     }
3110
3111   /* Replace the assignment with the call.  */
3112   c->op = EXEC_ASSIGN_CALL;
3113   c->symtree = gfc_find_sym_in_symtree (sym);
3114   c->expr1 = NULL;
3115   c->expr2 = NULL;
3116   c->ext.actual = actual;
3117
3118   return SUCCESS;
3119 }
3120
3121
3122 /* Make sure that the interface just parsed is not already present in
3123    the given interface list.  Ambiguity isn't checked yet since module
3124    procedures can be present without interfaces.  */
3125
3126 static gfc_try
3127 check_new_interface (gfc_interface *base, gfc_symbol *new_sym)
3128 {
3129   gfc_interface *ip;
3130
3131   for (ip = base; ip; ip = ip->next)
3132     {
3133       if (ip->sym == new_sym)
3134         {
3135           gfc_error ("Entity '%s' at %C is already present in the interface",
3136                      new_sym->name);
3137           return FAILURE;
3138         }
3139     }
3140
3141   return SUCCESS;
3142 }
3143
3144
3145 /* Add a symbol to the current interface.  */
3146
3147 gfc_try
3148 gfc_add_interface (gfc_symbol *new_sym)
3149 {
3150   gfc_interface **head, *intr;
3151   gfc_namespace *ns;
3152   gfc_symbol *sym;
3153
3154   switch (current_interface.type)
3155     {
3156     case INTERFACE_NAMELESS:
3157     case INTERFACE_ABSTRACT:
3158       return SUCCESS;
3159
3160     case INTERFACE_INTRINSIC_OP:
3161       for (ns = current_interface.ns; ns; ns = ns->parent)
3162         switch (current_interface.op)
3163           {
3164             case INTRINSIC_EQ:
3165             case INTRINSIC_EQ_OS:
3166               if (check_new_interface (ns->op[INTRINSIC_EQ], new_sym) == FAILURE ||
3167                   check_new_interface (ns->op[INTRINSIC_EQ_OS], new_sym) == FAILURE)
3168                 return FAILURE;
3169               break;
3170
3171             case INTRINSIC_NE:
3172             case INTRINSIC_NE_OS:
3173               if (check_new_interface (ns->op[INTRINSIC_NE], new_sym) == FAILURE ||
3174                   check_new_interface (ns->op[INTRINSIC_NE_OS], new_sym) == FAILURE)
3175                 return FAILURE;
3176               break;
3177
3178             case INTRINSIC_GT:
3179             case INTRINSIC_GT_OS:
3180               if (check_new_interface (ns->op[INTRINSIC_GT], new_sym) == FAILURE ||
3181                   check_new_interface (ns->op[INTRINSIC_GT_OS], new_sym) == FAILURE)
3182                 return FAILURE;
3183               break;
3184
3185             case INTRINSIC_GE:
3186             case INTRINSIC_GE_OS:
3187               if (check_new_interface (ns->op[INTRINSIC_GE], new_sym) == FAILURE ||
3188                   check_new_interface (ns->op[INTRINSIC_GE_OS], new_sym) == FAILURE)
3189                 return FAILURE;
3190               break;
3191
3192             case INTRINSIC_LT:
3193             case INTRINSIC_LT_OS:
3194               if (check_new_interface (ns->op[INTRINSIC_LT], new_sym) == FAILURE ||
3195                   check_new_interface (ns->op[INTRINSIC_LT_OS], new_sym) == FAILURE)
3196                 return FAILURE;
3197               break;
3198
3199             case INTRINSIC_LE:
3200             case INTRINSIC_LE_OS:
3201               if (check_new_interface (ns->op[INTRINSIC_LE], new_sym) == FAILURE ||
3202                   check_new_interface (ns->op[INTRINSIC_LE_OS], new_sym) == FAILURE)
3203                 return FAILURE;
3204               break;
3205
3206             default:
3207               if (check_new_interface (ns->op[current_interface.op], new_sym) == FAILURE)
3208                 return FAILURE;
3209           }
3210
3211       head = &current_interface.ns->op[current_interface.op];
3212       break;
3213
3214     case INTERFACE_GENERIC:
3215       for (ns = current_interface.ns; ns; ns = ns->parent)
3216         {
3217           gfc_find_symbol (current_interface.sym->name, ns, 0, &sym);
3218           if (sym == NULL)
3219             continue;
3220
3221           if (check_new_interface (sym->generic, new_sym) == FAILURE)
3222             return FAILURE;
3223         }
3224
3225       head = &current_interface.sym->generic;
3226       break;
3227
3228     case INTERFACE_USER_OP:
3229       if (check_new_interface (current_interface.uop->op, new_sym)
3230           == FAILURE)
3231         return FAILURE;
3232
3233       head = &current_interface.uop->op;
3234       break;
3235
3236     default:
3237       gfc_internal_error ("gfc_add_interface(): Bad interface type");
3238     }
3239
3240   intr = gfc_get_interface ();
3241   intr->sym = new_sym;
3242   intr->where = gfc_current_locus;
3243
3244   intr->next = *head;
3245   *head = intr;
3246
3247   return SUCCESS;
3248 }
3249
3250
3251 gfc_interface *
3252 gfc_current_interface_head (void)
3253 {
3254   switch (current_interface.type)
3255     {
3256       case INTERFACE_INTRINSIC_OP:
3257         return current_interface.ns->op[current_interface.op];
3258         break;
3259
3260       case INTERFACE_GENERIC:
3261         return current_interface.sym->generic;
3262         break;
3263
3264       case INTERFACE_USER_OP:
3265         return current_interface.uop->op;
3266         break;
3267
3268       default:
3269         gcc_unreachable ();
3270     }
3271 }
3272
3273
3274 void
3275 gfc_set_current_interface_head (gfc_interface *i)
3276 {
3277   switch (current_interface.type)
3278     {
3279       case INTERFACE_INTRINSIC_OP:
3280         current_interface.ns->op[current_interface.op] = i;
3281         break;
3282
3283       case INTERFACE_GENERIC:
3284         current_interface.sym->generic = i;
3285         break;
3286
3287       case INTERFACE_USER_OP:
3288         current_interface.uop->op = i;
3289         break;
3290
3291       default:
3292         gcc_unreachable ();
3293     }
3294 }
3295
3296
3297 /* Gets rid of a formal argument list.  We do not free symbols.
3298    Symbols are freed when a namespace is freed.  */
3299
3300 void
3301 gfc_free_formal_arglist (gfc_formal_arglist *p)
3302 {
3303   gfc_formal_arglist *q;
3304
3305   for (; p; p = q)
3306     {
3307       q = p->next;
3308       gfc_free (p);
3309     }
3310 }