OSDN Git Service

2008-01-16 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 && actual->ts.type == BT_DERIVED
1474           && formal->ts.type == BT_DERIVED)
1475         gfc_error ("Type mismatch in argument '%s' at %L; passed type(%s) to "
1476                    "type(%s)", formal->name, &actual->where,
1477                    actual->ts.derived->name, formal->ts.derived->name);
1478       else if (where)
1479         gfc_error ("Type mismatch in argument '%s' at %L; passed %s to %s",
1480                    formal->name, &actual->where,
1481                    actual->ts.type == BT_DERIVED ? "derived type"
1482                                      : gfc_basic_typename (actual->ts.type),
1483                    formal->ts.type == BT_DERIVED ? "derived type"
1484                                      : gfc_basic_typename (formal->ts.type));
1485       return 0;
1486     }
1487
1488   if (symbol_rank (formal) == actual->rank)
1489     return 1;
1490
1491   rank_check = where != NULL && !is_elemental && formal->as
1492                && (formal->as->type == AS_ASSUMED_SHAPE
1493                    || formal->as->type == AS_DEFERRED);
1494
1495   if (rank_check || ranks_must_agree || formal->attr.pointer
1496       || (actual->rank != 0 && !(is_elemental || formal->attr.dimension))
1497       || (actual->rank == 0 && formal->as->type == AS_ASSUMED_SHAPE))
1498     {
1499       if (where)
1500         gfc_error ("Rank mismatch in argument '%s' at %L (%d and %d)",
1501                    formal->name, &actual->where, symbol_rank (formal),
1502                    actual->rank);
1503       return 0;
1504     }
1505   else if (actual->rank != 0 && (is_elemental || formal->attr.dimension))
1506     return 1;
1507
1508   /* At this point, we are considering a scalar passed to an array.   This
1509      is valid (cf. F95 12.4.1.1; F2003 12.4.1.2),
1510      - if the actual argument is (a substring of) an element of a
1511        non-assumed-shape/non-pointer array;
1512      - (F2003) if the actual argument is of type character.  */
1513
1514   for (ref = actual->ref; ref; ref = ref->next)
1515     if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT)
1516       break;
1517
1518   /* Not an array element.  */
1519   if (formal->ts.type == BT_CHARACTER
1520       && (ref == NULL
1521           || (actual->expr_type == EXPR_VARIABLE
1522               && (actual->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
1523                   || actual->symtree->n.sym->attr.pointer))))
1524     {
1525       if (where && (gfc_option.allow_std & GFC_STD_F2003) == 0)
1526         {
1527           gfc_error ("Fortran 2003: Scalar CHARACTER actual argument with "
1528                      "array dummy argument '%s' at %L",
1529                      formal->name, &actual->where);
1530           return 0;
1531         }
1532       else if ((gfc_option.allow_std & GFC_STD_F2003) == 0)
1533         return 0;
1534       else
1535         return 1;
1536     }
1537   else if (ref == NULL)
1538     {
1539       if (where)
1540         gfc_error ("Rank mismatch in argument '%s' at %L (%d and %d)",
1541                    formal->name, &actual->where, symbol_rank (formal),
1542                    actual->rank);
1543       return 0;
1544     }
1545
1546   if (actual->expr_type == EXPR_VARIABLE
1547       && actual->symtree->n.sym->as
1548       && (actual->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
1549           || actual->symtree->n.sym->attr.pointer))
1550     {
1551       if (where)
1552         gfc_error ("Element of assumed-shaped array passed to dummy "
1553                    "argument '%s' at %L", formal->name, &actual->where);
1554       return 0;
1555     }
1556
1557   return 1;
1558 }
1559
1560
1561 /* Given a symbol of a formal argument list and an expression, see if
1562    the two are compatible as arguments.  Returns nonzero if
1563    compatible, zero if not compatible.  */
1564
1565 static int
1566 compare_parameter_protected (gfc_symbol *formal, gfc_expr *actual)
1567 {
1568   if (actual->expr_type != EXPR_VARIABLE)
1569     return 1;
1570
1571   if (!actual->symtree->n.sym->attr.protected)
1572     return 1;
1573
1574   if (!actual->symtree->n.sym->attr.use_assoc)
1575     return 1;
1576
1577   if (formal->attr.intent == INTENT_IN
1578       || formal->attr.intent == INTENT_UNKNOWN)
1579     return 1;
1580
1581   if (!actual->symtree->n.sym->attr.pointer)
1582     return 0;
1583
1584   if (actual->symtree->n.sym->attr.pointer && formal->attr.pointer)
1585     return 0;
1586
1587   return 1;
1588 }
1589
1590
1591 /* Returns the storage size of a symbol (formal argument) or
1592    zero if it cannot be determined.  */
1593
1594 static unsigned long
1595 get_sym_storage_size (gfc_symbol *sym)
1596 {
1597   int i;
1598   unsigned long strlen, elements;
1599
1600   if (sym->ts.type == BT_CHARACTER)
1601     {
1602       if (sym->ts.cl && sym->ts.cl->length
1603           && sym->ts.cl->length->expr_type == EXPR_CONSTANT)
1604         strlen = mpz_get_ui (sym->ts.cl->length->value.integer);
1605       else
1606         return 0;
1607     }
1608   else
1609     strlen = 1; 
1610
1611   if (symbol_rank (sym) == 0)
1612     return strlen;
1613
1614   elements = 1;
1615   if (sym->as->type != AS_EXPLICIT)
1616     return 0;
1617   for (i = 0; i < sym->as->rank; i++)
1618     {
1619       if (!sym->as || sym->as->upper[i]->expr_type != EXPR_CONSTANT
1620           || sym->as->lower[i]->expr_type != EXPR_CONSTANT)
1621         return 0;
1622
1623       elements *= mpz_get_ui (sym->as->upper[i]->value.integer)
1624                   - mpz_get_ui (sym->as->lower[i]->value.integer) + 1L;
1625     }
1626
1627   return strlen*elements;
1628 }
1629
1630
1631 /* Returns the storage size of an expression (actual argument) or
1632    zero if it cannot be determined. For an array element, it returns
1633    the remaining size as the element sequence consists of all storage
1634    units of the actual argument up to the end of the array.  */
1635
1636 static unsigned long
1637 get_expr_storage_size (gfc_expr *e)
1638 {
1639   int i;
1640   long int strlen, elements;
1641   long int substrlen = 0;
1642   gfc_ref *ref;
1643
1644   if (e == NULL)
1645     return 0;
1646   
1647   if (e->ts.type == BT_CHARACTER)
1648     {
1649       if (e->ts.cl && e->ts.cl->length
1650           && e->ts.cl->length->expr_type == EXPR_CONSTANT)
1651         strlen = mpz_get_si (e->ts.cl->length->value.integer);
1652       else if (e->expr_type == EXPR_CONSTANT
1653                && (e->ts.cl == NULL || e->ts.cl->length == NULL))
1654         strlen = e->value.character.length;
1655       else
1656         return 0;
1657     }
1658   else
1659     strlen = 1; /* Length per element.  */
1660
1661   if (e->rank == 0 && !e->ref)
1662     return strlen;
1663
1664   elements = 1;
1665   if (!e->ref)
1666     {
1667       if (!e->shape)
1668         return 0;
1669       for (i = 0; i < e->rank; i++)
1670         elements *= mpz_get_si (e->shape[i]);
1671       return elements*strlen;
1672     }
1673
1674   for (ref = e->ref; ref; ref = ref->next)
1675     {
1676       if (ref->type == REF_SUBSTRING && ref->u.ss.start
1677           && ref->u.ss.start->expr_type == EXPR_CONSTANT)
1678         {
1679           int len = strlen;
1680           if (ref->u.ss.end && ref->u.ss.end->expr_type == EXPR_CONSTANT)
1681             len = mpz_get_ui (ref->u.ss.end->value.integer);
1682           substrlen = len - 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                && (e->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
1746                   || e->symtree->n.sym->attr.pointer))
1747         elements = 1;
1748       else
1749         /* TODO: Determine the number of remaining elements in the element
1750            sequence for array element designators. See PR 32616.
1751            See also get_array_index in data.c.  */
1752         return 0;
1753     }
1754
1755   if (substrlen)
1756     return elements*substrlen;
1757
1758   return elements*strlen;
1759 }
1760
1761
1762 /* Given an expression, check whether it is an array section
1763    which has a vector subscript. If it has, one is returned,
1764    otherwise zero.  */
1765
1766 static int
1767 has_vector_subscript (gfc_expr *e)
1768 {
1769   int i;
1770   gfc_ref *ref;
1771
1772   if (e == NULL || e->rank == 0 || e->expr_type != EXPR_VARIABLE)
1773     return 0;
1774
1775   for (ref = e->ref; ref; ref = ref->next)
1776     if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION)
1777       for (i = 0; i < ref->u.ar.dimen; i++)
1778         if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
1779           return 1;
1780
1781   return 0;
1782 }
1783
1784
1785 /* Given formal and actual argument lists, see if they are compatible.
1786    If they are compatible, the actual argument list is sorted to
1787    correspond with the formal list, and elements for missing optional
1788    arguments are inserted. If WHERE pointer is nonnull, then we issue
1789    errors when things don't match instead of just returning the status
1790    code.  */
1791
1792 static int
1793 compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
1794                        int ranks_must_agree, int is_elemental, locus *where)
1795 {
1796   gfc_actual_arglist **new, *a, *actual, temp;
1797   gfc_formal_arglist *f;
1798   int i, n, na;
1799   unsigned long actual_size, formal_size;
1800
1801   actual = *ap;
1802
1803   if (actual == NULL && formal == NULL)
1804     return 1;
1805
1806   n = 0;
1807   for (f = formal; f; f = f->next)
1808     n++;
1809
1810   new = (gfc_actual_arglist **) alloca (n * sizeof (gfc_actual_arglist *));
1811
1812   for (i = 0; i < n; i++)
1813     new[i] = NULL;
1814
1815   na = 0;
1816   f = formal;
1817   i = 0;
1818
1819   for (a = actual; a; a = a->next, f = f->next)
1820     {
1821       /* Look for keywords but ignore g77 extensions like %VAL.  */
1822       if (a->name != NULL && a->name[0] != '%')
1823         {
1824           i = 0;
1825           for (f = formal; f; f = f->next, i++)
1826             {
1827               if (f->sym == NULL)
1828                 continue;
1829               if (strcmp (f->sym->name, a->name) == 0)
1830                 break;
1831             }
1832
1833           if (f == NULL)
1834             {
1835               if (where)
1836                 gfc_error ("Keyword argument '%s' at %L is not in "
1837                            "the procedure", a->name, &a->expr->where);
1838               return 0;
1839             }
1840
1841           if (new[i] != NULL)
1842             {
1843               if (where)
1844                 gfc_error ("Keyword argument '%s' at %L is already associated "
1845                            "with another actual argument", a->name,
1846                            &a->expr->where);
1847               return 0;
1848             }
1849         }
1850
1851       if (f == NULL)
1852         {
1853           if (where)
1854             gfc_error ("More actual than formal arguments in procedure "
1855                        "call at %L", where);
1856
1857           return 0;
1858         }
1859
1860       if (f->sym == NULL && a->expr == NULL)
1861         goto match;
1862
1863       if (f->sym == NULL)
1864         {
1865           if (where)
1866             gfc_error ("Missing alternate return spec in subroutine call "
1867                        "at %L", where);
1868           return 0;
1869         }
1870
1871       if (a->expr == NULL)
1872         {
1873           if (where)
1874             gfc_error ("Unexpected alternate return spec in subroutine "
1875                        "call at %L", where);
1876           return 0;
1877         }
1878       
1879       if (!compare_parameter (f->sym, a->expr, ranks_must_agree,
1880                               is_elemental, where))
1881         return 0;
1882
1883       if (a->expr->ts.type == BT_CHARACTER
1884            && a->expr->ts.cl && a->expr->ts.cl->length
1885            && a->expr->ts.cl->length->expr_type == EXPR_CONSTANT
1886            && f->sym->ts.cl && f->sym->ts.cl && f->sym->ts.cl->length
1887            && f->sym->ts.cl->length->expr_type == EXPR_CONSTANT)
1888          {
1889            if ((f->sym->attr.pointer || f->sym->attr.allocatable)
1890                && (mpz_cmp (a->expr->ts.cl->length->value.integer,
1891                            f->sym->ts.cl->length->value.integer) != 0))
1892              {
1893                 if (where)
1894                   gfc_warning ("Character length mismatch between actual "
1895                                "argument and pointer or allocatable dummy "
1896                                "argument '%s' at %L",
1897                                f->sym->name, &a->expr->where);
1898                 return 0;
1899              }
1900          }
1901
1902       actual_size = get_expr_storage_size (a->expr);
1903       formal_size = get_sym_storage_size (f->sym);
1904       if (actual_size != 0 && actual_size < formal_size)
1905         {
1906           if (a->expr->ts.type == BT_CHARACTER && !f->sym->as && where)
1907             gfc_warning ("Character length of actual argument shorter "
1908                         "than of dummy argument '%s' (%lu/%lu) at %L",
1909                         f->sym->name, actual_size, formal_size,
1910                         &a->expr->where);
1911           else if (where)
1912             gfc_warning ("Actual argument contains too few "
1913                         "elements for dummy argument '%s' (%lu/%lu) at %L",
1914                         f->sym->name, actual_size, formal_size,
1915                         &a->expr->where);
1916           return  0;
1917         }
1918
1919       /* Satisfy 12.4.1.2 by ensuring that a procedure actual argument is
1920          provided for a procedure formal argument.  */
1921       if (a->expr->ts.type != BT_PROCEDURE
1922           && a->expr->expr_type == EXPR_VARIABLE
1923           && f->sym->attr.flavor == FL_PROCEDURE)
1924         {
1925           if (where)
1926             gfc_error ("Expected a procedure for argument '%s' at %L",
1927                        f->sym->name, &a->expr->where);
1928           return 0;
1929         }
1930
1931       if (f->sym->attr.flavor == FL_PROCEDURE && f->sym->attr.pure
1932           && a->expr->ts.type == BT_PROCEDURE
1933           && !a->expr->symtree->n.sym->attr.pure)
1934         {
1935           if (where)
1936             gfc_error ("Expected a PURE procedure for argument '%s' at %L",
1937                        f->sym->name, &a->expr->where);
1938           return 0;
1939         }
1940
1941       if (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE
1942           && a->expr->expr_type == EXPR_VARIABLE
1943           && a->expr->symtree->n.sym->as
1944           && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SIZE
1945           && (a->expr->ref == NULL
1946               || (a->expr->ref->type == REF_ARRAY
1947                   && a->expr->ref->u.ar.type == AR_FULL)))
1948         {
1949           if (where)
1950             gfc_error ("Actual argument for '%s' cannot be an assumed-size"
1951                        " array at %L", f->sym->name, where);
1952           return 0;
1953         }
1954
1955       if (a->expr->expr_type != EXPR_NULL
1956           && compare_pointer (f->sym, a->expr) == 0)
1957         {
1958           if (where)
1959             gfc_error ("Actual argument for '%s' must be a pointer at %L",
1960                        f->sym->name, &a->expr->where);
1961           return 0;
1962         }
1963
1964       if (a->expr->expr_type != EXPR_NULL
1965           && compare_allocatable (f->sym, a->expr) == 0)
1966         {
1967           if (where)
1968             gfc_error ("Actual argument for '%s' must be ALLOCATABLE at %L",
1969                        f->sym->name, &a->expr->where);
1970           return 0;
1971         }
1972
1973       /* Check intent = OUT/INOUT for definable actual argument.  */
1974       if ((a->expr->expr_type != EXPR_VARIABLE
1975            || (a->expr->symtree->n.sym->attr.flavor != FL_VARIABLE
1976                && a->expr->symtree->n.sym->attr.flavor != FL_PROCEDURE))
1977           && (f->sym->attr.intent == INTENT_OUT
1978               || f->sym->attr.intent == INTENT_INOUT))
1979         {
1980           if (where)
1981             gfc_error ("Actual argument at %L must be definable as "
1982                        "the dummy argument '%s' is INTENT = OUT/INOUT",
1983                        &a->expr->where, f->sym->name);
1984           return 0;
1985         }
1986
1987       if (!compare_parameter_protected(f->sym, a->expr))
1988         {
1989           if (where)
1990             gfc_error ("Actual argument at %L is use-associated with "
1991                        "PROTECTED attribute and dummy argument '%s' is "
1992                        "INTENT = OUT/INOUT",
1993                        &a->expr->where,f->sym->name);
1994           return 0;
1995         }
1996
1997       if ((f->sym->attr.intent == INTENT_OUT
1998            || f->sym->attr.intent == INTENT_INOUT
1999            || f->sym->attr.volatile_)
2000           && has_vector_subscript (a->expr))
2001         {
2002           if (where)
2003             gfc_error ("Array-section actual argument with vector subscripts "
2004                        "at %L is incompatible with INTENT(IN), INTENT(INOUT) "
2005                        "or VOLATILE attribute of the dummy argument '%s'",
2006                        &a->expr->where, f->sym->name);
2007           return 0;
2008         }
2009
2010       /* C1232 (R1221) For an actual argument which is an array section or
2011          an assumed-shape array, the dummy argument shall be an assumed-
2012          shape array, if the dummy argument has the VOLATILE attribute.  */
2013
2014       if (f->sym->attr.volatile_
2015           && a->expr->symtree->n.sym->as
2016           && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
2017           && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2018         {
2019           if (where)
2020             gfc_error ("Assumed-shape actual argument at %L is "
2021                        "incompatible with the non-assumed-shape "
2022                        "dummy argument '%s' due to VOLATILE attribute",
2023                        &a->expr->where,f->sym->name);
2024           return 0;
2025         }
2026
2027       if (f->sym->attr.volatile_
2028           && a->expr->ref && a->expr->ref->u.ar.type == AR_SECTION
2029           && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2030         {
2031           if (where)
2032             gfc_error ("Array-section actual argument at %L is "
2033                        "incompatible with the non-assumed-shape "
2034                        "dummy argument '%s' due to VOLATILE attribute",
2035                        &a->expr->where,f->sym->name);
2036           return 0;
2037         }
2038
2039       /* C1233 (R1221) For an actual argument which is a pointer array, the
2040          dummy argument shall be an assumed-shape or pointer array, if the
2041          dummy argument has the VOLATILE attribute.  */
2042
2043       if (f->sym->attr.volatile_
2044           && a->expr->symtree->n.sym->attr.pointer
2045           && a->expr->symtree->n.sym->as
2046           && !(f->sym->as
2047                && (f->sym->as->type == AS_ASSUMED_SHAPE
2048                    || f->sym->attr.pointer)))
2049         {
2050           if (where)
2051             gfc_error ("Pointer-array actual argument at %L requires "
2052                        "an assumed-shape or pointer-array dummy "
2053                        "argument '%s' due to VOLATILE attribute",
2054                        &a->expr->where,f->sym->name);
2055           return 0;
2056         }
2057
2058     match:
2059       if (a == actual)
2060         na = i;
2061
2062       new[i++] = a;
2063     }
2064
2065   /* Make sure missing actual arguments are optional.  */
2066   i = 0;
2067   for (f = formal; f; f = f->next, i++)
2068     {
2069       if (new[i] != NULL)
2070         continue;
2071       if (f->sym == NULL)
2072         {
2073           if (where)
2074             gfc_error ("Missing alternate return spec in subroutine call "
2075                        "at %L", where);
2076           return 0;
2077         }
2078       if (!f->sym->attr.optional)
2079         {
2080           if (where)
2081             gfc_error ("Missing actual argument for argument '%s' at %L",
2082                        f->sym->name, where);
2083           return 0;
2084         }
2085     }
2086
2087   /* The argument lists are compatible.  We now relink a new actual
2088      argument list with null arguments in the right places.  The head
2089      of the list remains the head.  */
2090   for (i = 0; i < n; i++)
2091     if (new[i] == NULL)
2092       new[i] = gfc_get_actual_arglist ();
2093
2094   if (na != 0)
2095     {
2096       temp = *new[0];
2097       *new[0] = *actual;
2098       *actual = temp;
2099
2100       a = new[0];
2101       new[0] = new[na];
2102       new[na] = a;
2103     }
2104
2105   for (i = 0; i < n - 1; i++)
2106     new[i]->next = new[i + 1];
2107
2108   new[i]->next = NULL;
2109
2110   if (*ap == NULL && n > 0)
2111     *ap = new[0];
2112
2113   /* Note the types of omitted optional arguments.  */
2114   for (a = actual, f = formal; a; a = a->next, f = f->next)
2115     if (a->expr == NULL && a->label == NULL)
2116       a->missing_arg_type = f->sym->ts.type;
2117
2118   return 1;
2119 }
2120
2121
2122 typedef struct
2123 {
2124   gfc_formal_arglist *f;
2125   gfc_actual_arglist *a;
2126 }
2127 argpair;
2128
2129 /* qsort comparison function for argument pairs, with the following
2130    order:
2131     - p->a->expr == NULL
2132     - p->a->expr->expr_type != EXPR_VARIABLE
2133     - growing p->a->expr->symbol.  */
2134
2135 static int
2136 pair_cmp (const void *p1, const void *p2)
2137 {
2138   const gfc_actual_arglist *a1, *a2;
2139
2140   /* *p1 and *p2 are elements of the to-be-sorted array.  */
2141   a1 = ((const argpair *) p1)->a;
2142   a2 = ((const argpair *) p2)->a;
2143   if (!a1->expr)
2144     {
2145       if (!a2->expr)
2146         return 0;
2147       return -1;
2148     }
2149   if (!a2->expr)
2150     return 1;
2151   if (a1->expr->expr_type != EXPR_VARIABLE)
2152     {
2153       if (a2->expr->expr_type != EXPR_VARIABLE)
2154         return 0;
2155       return -1;
2156     }
2157   if (a2->expr->expr_type != EXPR_VARIABLE)
2158     return 1;
2159   return a1->expr->symtree->n.sym < a2->expr->symtree->n.sym;
2160 }
2161
2162
2163 /* Given two expressions from some actual arguments, test whether they
2164    refer to the same expression. The analysis is conservative.
2165    Returning FAILURE will produce no warning.  */
2166
2167 static try
2168 compare_actual_expr (gfc_expr *e1, gfc_expr *e2)
2169 {
2170   const gfc_ref *r1, *r2;
2171
2172   if (!e1 || !e2
2173       || e1->expr_type != EXPR_VARIABLE
2174       || e2->expr_type != EXPR_VARIABLE
2175       || e1->symtree->n.sym != e2->symtree->n.sym)
2176     return FAILURE;
2177
2178   /* TODO: improve comparison, see expr.c:show_ref().  */
2179   for (r1 = e1->ref, r2 = e2->ref; r1 && r2; r1 = r1->next, r2 = r2->next)
2180     {
2181       if (r1->type != r2->type)
2182         return FAILURE;
2183       switch (r1->type)
2184         {
2185         case REF_ARRAY:
2186           if (r1->u.ar.type != r2->u.ar.type)
2187             return FAILURE;
2188           /* TODO: At the moment, consider only full arrays;
2189              we could do better.  */
2190           if (r1->u.ar.type != AR_FULL || r2->u.ar.type != AR_FULL)
2191             return FAILURE;
2192           break;
2193
2194         case REF_COMPONENT:
2195           if (r1->u.c.component != r2->u.c.component)
2196             return FAILURE;
2197           break;
2198
2199         case REF_SUBSTRING:
2200           return FAILURE;
2201
2202         default:
2203           gfc_internal_error ("compare_actual_expr(): Bad component code");
2204         }
2205     }
2206   if (!r1 && !r2)
2207     return SUCCESS;
2208   return FAILURE;
2209 }
2210
2211
2212 /* Given formal and actual argument lists that correspond to one
2213    another, check that identical actual arguments aren't not
2214    associated with some incompatible INTENTs.  */
2215
2216 static try
2217 check_some_aliasing (gfc_formal_arglist *f, gfc_actual_arglist *a)
2218 {
2219   sym_intent f1_intent, f2_intent;
2220   gfc_formal_arglist *f1;
2221   gfc_actual_arglist *a1;
2222   size_t n, i, j;
2223   argpair *p;
2224   try t = SUCCESS;
2225
2226   n = 0;
2227   for (f1 = f, a1 = a;; f1 = f1->next, a1 = a1->next)
2228     {
2229       if (f1 == NULL && a1 == NULL)
2230         break;
2231       if (f1 == NULL || a1 == NULL)
2232         gfc_internal_error ("check_some_aliasing(): List mismatch");
2233       n++;
2234     }
2235   if (n == 0)
2236     return t;
2237   p = (argpair *) alloca (n * sizeof (argpair));
2238
2239   for (i = 0, f1 = f, a1 = a; i < n; i++, f1 = f1->next, a1 = a1->next)
2240     {
2241       p[i].f = f1;
2242       p[i].a = a1;
2243     }
2244
2245   qsort (p, n, sizeof (argpair), pair_cmp);
2246
2247   for (i = 0; i < n; i++)
2248     {
2249       if (!p[i].a->expr
2250           || p[i].a->expr->expr_type != EXPR_VARIABLE
2251           || p[i].a->expr->ts.type == BT_PROCEDURE)
2252         continue;
2253       f1_intent = p[i].f->sym->attr.intent;
2254       for (j = i + 1; j < n; j++)
2255         {
2256           /* Expected order after the sort.  */
2257           if (!p[j].a->expr || p[j].a->expr->expr_type != EXPR_VARIABLE)
2258             gfc_internal_error ("check_some_aliasing(): corrupted data");
2259
2260           /* Are the expression the same?  */
2261           if (compare_actual_expr (p[i].a->expr, p[j].a->expr) == FAILURE)
2262             break;
2263           f2_intent = p[j].f->sym->attr.intent;
2264           if ((f1_intent == INTENT_IN && f2_intent == INTENT_OUT)
2265               || (f1_intent == INTENT_OUT && f2_intent == INTENT_IN))
2266             {
2267               gfc_warning ("Same actual argument associated with INTENT(%s) "
2268                            "argument '%s' and INTENT(%s) argument '%s' at %L",
2269                            gfc_intent_string (f1_intent), p[i].f->sym->name,
2270                            gfc_intent_string (f2_intent), p[j].f->sym->name,
2271                            &p[i].a->expr->where);
2272               t = FAILURE;
2273             }
2274         }
2275     }
2276
2277   return t;
2278 }
2279
2280
2281 /* Given a symbol of a formal argument list and an expression,
2282    return nonzero if their intents are compatible, zero otherwise.  */
2283
2284 static int
2285 compare_parameter_intent (gfc_symbol *formal, gfc_expr *actual)
2286 {
2287   if (actual->symtree->n.sym->attr.pointer && !formal->attr.pointer)
2288     return 1;
2289
2290   if (actual->symtree->n.sym->attr.intent != INTENT_IN)
2291     return 1;
2292
2293   if (formal->attr.intent == INTENT_INOUT || formal->attr.intent == INTENT_OUT)
2294     return 0;
2295
2296   return 1;
2297 }
2298
2299
2300 /* Given formal and actual argument lists that correspond to one
2301    another, check that they are compatible in the sense that intents
2302    are not mismatched.  */
2303
2304 static try
2305 check_intents (gfc_formal_arglist *f, gfc_actual_arglist *a)
2306 {
2307   sym_intent f_intent;
2308
2309   for (;; f = f->next, a = a->next)
2310     {
2311       if (f == NULL && a == NULL)
2312         break;
2313       if (f == NULL || a == NULL)
2314         gfc_internal_error ("check_intents(): List mismatch");
2315
2316       if (a->expr == NULL || a->expr->expr_type != EXPR_VARIABLE)
2317         continue;
2318
2319       f_intent = f->sym->attr.intent;
2320
2321       if (!compare_parameter_intent(f->sym, a->expr))
2322         {
2323           gfc_error ("Procedure argument at %L is INTENT(IN) while interface "
2324                      "specifies INTENT(%s)", &a->expr->where,
2325                      gfc_intent_string (f_intent));
2326           return FAILURE;
2327         }
2328
2329       if (gfc_pure (NULL) && gfc_impure_variable (a->expr->symtree->n.sym))
2330         {
2331           if (f_intent == INTENT_INOUT || f_intent == INTENT_OUT)
2332             {
2333               gfc_error ("Procedure argument at %L is local to a PURE "
2334                          "procedure and is passed to an INTENT(%s) argument",
2335                          &a->expr->where, gfc_intent_string (f_intent));
2336               return FAILURE;
2337             }
2338
2339           if (a->expr->symtree->n.sym->attr.pointer)
2340             {
2341               gfc_error ("Procedure argument at %L is local to a PURE "
2342                          "procedure and has the POINTER attribute",
2343                          &a->expr->where);
2344               return FAILURE;
2345             }
2346         }
2347     }
2348
2349   return SUCCESS;
2350 }
2351
2352
2353 /* Check how a procedure is used against its interface.  If all goes
2354    well, the actual argument list will also end up being properly
2355    sorted.  */
2356
2357 void
2358 gfc_procedure_use (gfc_symbol *sym, gfc_actual_arglist **ap, locus *where)
2359 {
2360
2361   /* Warn about calls with an implicit interface.  */
2362   if (gfc_option.warn_implicit_interface
2363       && sym->attr.if_source == IFSRC_UNKNOWN)
2364     gfc_warning ("Procedure '%s' called with an implicit interface at %L",
2365                  sym->name, where);
2366
2367   if (sym->interface && sym->interface->attr.intrinsic)
2368     {
2369       gfc_intrinsic_sym *isym;
2370       isym = gfc_find_function (sym->interface->name);
2371       if (isym != NULL)
2372         {
2373           if (compare_actual_formal_intr (ap, sym->interface))
2374             return;
2375           gfc_error ("Type/rank mismatch in argument '%s' at %L",
2376                      sym->name, where);
2377           return;
2378         }
2379     }
2380
2381   if (sym->attr.if_source == IFSRC_UNKNOWN
2382       || !compare_actual_formal (ap, sym->formal, 0,
2383                                  sym->attr.elemental, where))
2384     return;
2385
2386   check_intents (sym->formal, *ap);
2387   if (gfc_option.warn_aliasing)
2388     check_some_aliasing (sym->formal, *ap);
2389 }
2390
2391
2392 /* Given an interface pointer and an actual argument list, search for
2393    a formal argument list that matches the actual.  If found, returns
2394    a pointer to the symbol of the correct interface.  Returns NULL if
2395    not found.  */
2396
2397 gfc_symbol *
2398 gfc_search_interface (gfc_interface *intr, int sub_flag,
2399                       gfc_actual_arglist **ap)
2400 {
2401   int r;
2402
2403   for (; intr; intr = intr->next)
2404     {
2405       if (sub_flag && intr->sym->attr.function)
2406         continue;
2407       if (!sub_flag && intr->sym->attr.subroutine)
2408         continue;
2409
2410       r = !intr->sym->attr.elemental;
2411
2412       if (compare_actual_formal (ap, intr->sym->formal, r, !r, NULL))
2413         {
2414           check_intents (intr->sym->formal, *ap);
2415           if (gfc_option.warn_aliasing)
2416             check_some_aliasing (intr->sym->formal, *ap);
2417           return intr->sym;
2418         }
2419     }
2420
2421   return NULL;
2422 }
2423
2424
2425 /* Do a brute force recursive search for a symbol.  */
2426
2427 static gfc_symtree *
2428 find_symtree0 (gfc_symtree *root, gfc_symbol *sym)
2429 {
2430   gfc_symtree * st;
2431
2432   if (root->n.sym == sym)
2433     return root;
2434
2435   st = NULL;
2436   if (root->left)
2437     st = find_symtree0 (root->left, sym);
2438   if (root->right && ! st)
2439     st = find_symtree0 (root->right, sym);
2440   return st;
2441 }
2442
2443
2444 /* Find a symtree for a symbol.  */
2445
2446 static gfc_symtree *
2447 find_sym_in_symtree (gfc_symbol *sym)
2448 {
2449   gfc_symtree *st;
2450   gfc_namespace *ns;
2451
2452   /* First try to find it by name.  */
2453   gfc_find_sym_tree (sym->name, gfc_current_ns, 1, &st);
2454   if (st && st->n.sym == sym)
2455     return st;
2456
2457   /* If it's been renamed, resort to a brute-force search.  */
2458   /* TODO: avoid having to do this search.  If the symbol doesn't exist
2459      in the symtree for the current namespace, it should probably be added.  */
2460   for (ns = gfc_current_ns; ns; ns = ns->parent)
2461     {
2462       st = find_symtree0 (ns->sym_root, sym);
2463       if (st)
2464         return st;
2465     }
2466   gfc_internal_error ("Unable to find symbol %s", sym->name);
2467   /* Not reached.  */
2468 }
2469
2470
2471 /* This subroutine is called when an expression is being resolved.
2472    The expression node in question is either a user defined operator
2473    or an intrinsic operator with arguments that aren't compatible
2474    with the operator.  This subroutine builds an actual argument list
2475    corresponding to the operands, then searches for a compatible
2476    interface.  If one is found, the expression node is replaced with
2477    the appropriate function call.  */
2478
2479 try
2480 gfc_extend_expr (gfc_expr *e)
2481 {
2482   gfc_actual_arglist *actual;
2483   gfc_symbol *sym;
2484   gfc_namespace *ns;
2485   gfc_user_op *uop;
2486   gfc_intrinsic_op i;
2487
2488   sym = NULL;
2489
2490   actual = gfc_get_actual_arglist ();
2491   actual->expr = e->value.op.op1;
2492
2493   if (e->value.op.op2 != NULL)
2494     {
2495       actual->next = gfc_get_actual_arglist ();
2496       actual->next->expr = e->value.op.op2;
2497     }
2498
2499   i = fold_unary (e->value.op.operator);
2500
2501   if (i == INTRINSIC_USER)
2502     {
2503       for (ns = gfc_current_ns; ns; ns = ns->parent)
2504         {
2505           uop = gfc_find_uop (e->value.op.uop->name, ns);
2506           if (uop == NULL)
2507             continue;
2508
2509           sym = gfc_search_interface (uop->operator, 0, &actual);
2510           if (sym != NULL)
2511             break;
2512         }
2513     }
2514   else
2515     {
2516       for (ns = gfc_current_ns; ns; ns = ns->parent)
2517         {
2518           /* Due to the distinction between '==' and '.eq.' and friends, one has
2519              to check if either is defined.  */
2520           switch (i)
2521             {
2522               case INTRINSIC_EQ:
2523               case INTRINSIC_EQ_OS:
2524                 sym = gfc_search_interface (ns->operator[INTRINSIC_EQ], 0, &actual);
2525                 if (sym == NULL)
2526                   sym = gfc_search_interface (ns->operator[INTRINSIC_EQ_OS], 0, &actual);
2527                 break;
2528
2529               case INTRINSIC_NE:
2530               case INTRINSIC_NE_OS:
2531                 sym = gfc_search_interface (ns->operator[INTRINSIC_NE], 0, &actual);
2532                 if (sym == NULL)
2533                   sym = gfc_search_interface (ns->operator[INTRINSIC_NE_OS], 0, &actual);
2534                 break;
2535
2536               case INTRINSIC_GT:
2537               case INTRINSIC_GT_OS:
2538                 sym = gfc_search_interface (ns->operator[INTRINSIC_GT], 0, &actual);
2539                 if (sym == NULL)
2540                   sym = gfc_search_interface (ns->operator[INTRINSIC_GT_OS], 0, &actual);
2541                 break;
2542
2543               case INTRINSIC_GE:
2544               case INTRINSIC_GE_OS:
2545                 sym = gfc_search_interface (ns->operator[INTRINSIC_GE], 0, &actual);
2546                 if (sym == NULL)
2547                   sym = gfc_search_interface (ns->operator[INTRINSIC_GE_OS], 0, &actual);
2548                 break;
2549
2550               case INTRINSIC_LT:
2551               case INTRINSIC_LT_OS:
2552                 sym = gfc_search_interface (ns->operator[INTRINSIC_LT], 0, &actual);
2553                 if (sym == NULL)
2554                   sym = gfc_search_interface (ns->operator[INTRINSIC_LT_OS], 0, &actual);
2555                 break;
2556
2557               case INTRINSIC_LE:
2558               case INTRINSIC_LE_OS:
2559                 sym = gfc_search_interface (ns->operator[INTRINSIC_LE], 0, &actual);
2560                 if (sym == NULL)
2561                   sym = gfc_search_interface (ns->operator[INTRINSIC_LE_OS], 0, &actual);
2562                 break;
2563
2564               default:
2565                 sym = gfc_search_interface (ns->operator[i], 0, &actual);
2566             }
2567
2568           if (sym != NULL)
2569             break;
2570         }
2571     }
2572
2573   if (sym == NULL)
2574     {
2575       /* Don't use gfc_free_actual_arglist().  */
2576       if (actual->next != NULL)
2577         gfc_free (actual->next);
2578       gfc_free (actual);
2579
2580       return FAILURE;
2581     }
2582
2583   /* Change the expression node to a function call.  */
2584   e->expr_type = EXPR_FUNCTION;
2585   e->symtree = find_sym_in_symtree (sym);
2586   e->value.function.actual = actual;
2587   e->value.function.esym = NULL;
2588   e->value.function.isym = NULL;
2589   e->value.function.name = NULL;
2590
2591   if (gfc_pure (NULL) && !gfc_pure (sym))
2592     {
2593       gfc_error ("Function '%s' called in lieu of an operator at %L must "
2594                  "be PURE", sym->name, &e->where);
2595       return FAILURE;
2596     }
2597
2598   if (gfc_resolve_expr (e) == FAILURE)
2599     return FAILURE;
2600
2601   return SUCCESS;
2602 }
2603
2604
2605 /* Tries to replace an assignment code node with a subroutine call to
2606    the subroutine associated with the assignment operator.  Return
2607    SUCCESS if the node was replaced.  On FAILURE, no error is
2608    generated.  */
2609
2610 try
2611 gfc_extend_assign (gfc_code *c, gfc_namespace *ns)
2612 {
2613   gfc_actual_arglist *actual;
2614   gfc_expr *lhs, *rhs;
2615   gfc_symbol *sym;
2616
2617   lhs = c->expr;
2618   rhs = c->expr2;
2619
2620   /* Don't allow an intrinsic assignment to be replaced.  */
2621   if (lhs->ts.type != BT_DERIVED && rhs->ts.type != BT_DERIVED
2622       && (lhs->ts.type == rhs->ts.type
2623           || (gfc_numeric_ts (&lhs->ts) && gfc_numeric_ts (&rhs->ts))))
2624     return FAILURE;
2625
2626   actual = gfc_get_actual_arglist ();
2627   actual->expr = lhs;
2628
2629   actual->next = gfc_get_actual_arglist ();
2630   actual->next->expr = rhs;
2631
2632   sym = NULL;
2633
2634   for (; ns; ns = ns->parent)
2635     {
2636       sym = gfc_search_interface (ns->operator[INTRINSIC_ASSIGN], 1, &actual);
2637       if (sym != NULL)
2638         break;
2639     }
2640
2641   if (sym == NULL)
2642     {
2643       gfc_free (actual->next);
2644       gfc_free (actual);
2645       return FAILURE;
2646     }
2647
2648   /* Replace the assignment with the call.  */
2649   c->op = EXEC_ASSIGN_CALL;
2650   c->symtree = find_sym_in_symtree (sym);
2651   c->expr = NULL;
2652   c->expr2 = NULL;
2653   c->ext.actual = actual;
2654
2655   return SUCCESS;
2656 }
2657
2658
2659 /* Make sure that the interface just parsed is not already present in
2660    the given interface list.  Ambiguity isn't checked yet since module
2661    procedures can be present without interfaces.  */
2662
2663 static try
2664 check_new_interface (gfc_interface *base, gfc_symbol *new)
2665 {
2666   gfc_interface *ip;
2667
2668   for (ip = base; ip; ip = ip->next)
2669     {
2670       if (ip->sym == new)
2671         {
2672           gfc_error ("Entity '%s' at %C is already present in the interface",
2673                      new->name);
2674           return FAILURE;
2675         }
2676     }
2677
2678   return SUCCESS;
2679 }
2680
2681
2682 /* Add a symbol to the current interface.  */
2683
2684 try
2685 gfc_add_interface (gfc_symbol *new)
2686 {
2687   gfc_interface **head, *intr;
2688   gfc_namespace *ns;
2689   gfc_symbol *sym;
2690
2691   switch (current_interface.type)
2692     {
2693     case INTERFACE_NAMELESS:
2694     case INTERFACE_ABSTRACT:
2695       return SUCCESS;
2696
2697     case INTERFACE_INTRINSIC_OP:
2698       for (ns = current_interface.ns; ns; ns = ns->parent)
2699         switch (current_interface.op)
2700           {
2701             case INTRINSIC_EQ:
2702             case INTRINSIC_EQ_OS:
2703               if (check_new_interface (ns->operator[INTRINSIC_EQ], new) == FAILURE ||
2704                   check_new_interface (ns->operator[INTRINSIC_EQ_OS], new) == FAILURE)
2705                 return FAILURE;
2706               break;
2707
2708             case INTRINSIC_NE:
2709             case INTRINSIC_NE_OS:
2710               if (check_new_interface (ns->operator[INTRINSIC_NE], new) == FAILURE ||
2711                   check_new_interface (ns->operator[INTRINSIC_NE_OS], new) == FAILURE)
2712                 return FAILURE;
2713               break;
2714
2715             case INTRINSIC_GT:
2716             case INTRINSIC_GT_OS:
2717               if (check_new_interface (ns->operator[INTRINSIC_GT], new) == FAILURE ||
2718                   check_new_interface (ns->operator[INTRINSIC_GT_OS], new) == FAILURE)
2719                 return FAILURE;
2720               break;
2721
2722             case INTRINSIC_GE:
2723             case INTRINSIC_GE_OS:
2724               if (check_new_interface (ns->operator[INTRINSIC_GE], new) == FAILURE ||
2725                   check_new_interface (ns->operator[INTRINSIC_GE_OS], new) == FAILURE)
2726                 return FAILURE;
2727               break;
2728
2729             case INTRINSIC_LT:
2730             case INTRINSIC_LT_OS:
2731               if (check_new_interface (ns->operator[INTRINSIC_LT], new) == FAILURE ||
2732                   check_new_interface (ns->operator[INTRINSIC_LT_OS], new) == FAILURE)
2733                 return FAILURE;
2734               break;
2735
2736             case INTRINSIC_LE:
2737             case INTRINSIC_LE_OS:
2738               if (check_new_interface (ns->operator[INTRINSIC_LE], new) == FAILURE ||
2739                   check_new_interface (ns->operator[INTRINSIC_LE_OS], new) == FAILURE)
2740                 return FAILURE;
2741               break;
2742
2743             default:
2744               if (check_new_interface (ns->operator[current_interface.op], new) == FAILURE)
2745                 return FAILURE;
2746           }
2747
2748       head = &current_interface.ns->operator[current_interface.op];
2749       break;
2750
2751     case INTERFACE_GENERIC:
2752       for (ns = current_interface.ns; ns; ns = ns->parent)
2753         {
2754           gfc_find_symbol (current_interface.sym->name, ns, 0, &sym);
2755           if (sym == NULL)
2756             continue;
2757
2758           if (check_new_interface (sym->generic, new) == FAILURE)
2759             return FAILURE;
2760         }
2761
2762       head = &current_interface.sym->generic;
2763       break;
2764
2765     case INTERFACE_USER_OP:
2766       if (check_new_interface (current_interface.uop->operator, new)
2767           == FAILURE)
2768         return FAILURE;
2769
2770       head = &current_interface.uop->operator;
2771       break;
2772
2773     default:
2774       gfc_internal_error ("gfc_add_interface(): Bad interface type");
2775     }
2776
2777   intr = gfc_get_interface ();
2778   intr->sym = new;
2779   intr->where = gfc_current_locus;
2780
2781   intr->next = *head;
2782   *head = intr;
2783
2784   return SUCCESS;
2785 }
2786
2787
2788 gfc_interface *
2789 gfc_current_interface_head (void)
2790 {
2791   switch (current_interface.type)
2792     {
2793       case INTERFACE_INTRINSIC_OP:
2794         return current_interface.ns->operator[current_interface.op];
2795         break;
2796
2797       case INTERFACE_GENERIC:
2798         return current_interface.sym->generic;
2799         break;
2800
2801       case INTERFACE_USER_OP:
2802         return current_interface.uop->operator;
2803         break;
2804
2805       default:
2806         gcc_unreachable ();
2807     }
2808 }
2809
2810
2811 void
2812 gfc_set_current_interface_head (gfc_interface *i)
2813 {
2814   switch (current_interface.type)
2815     {
2816       case INTERFACE_INTRINSIC_OP:
2817         current_interface.ns->operator[current_interface.op] = i;
2818         break;
2819
2820       case INTERFACE_GENERIC:
2821         current_interface.sym->generic = i;
2822         break;
2823
2824       case INTERFACE_USER_OP:
2825         current_interface.uop->operator = i;
2826         break;
2827
2828       default:
2829         gcc_unreachable ();
2830     }
2831 }
2832
2833
2834 /* Gets rid of a formal argument list.  We do not free symbols.
2835    Symbols are freed when a namespace is freed.  */
2836
2837 void
2838 gfc_free_formal_arglist (gfc_formal_arglist *p)
2839 {
2840   gfc_formal_arglist *q;
2841
2842   for (; p; p = q)
2843     {
2844       q = p->next;
2845       gfc_free (p);
2846     }
2847 }