OSDN Git Service

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