OSDN Git Service

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