OSDN Git Service

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