OSDN Git Service

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