OSDN Git Service

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