OSDN Git Service

2007-06-13 Tobias Burnus <burnus@net-b.de>
[pf3gnuchains/gcc-fork.git] / gcc / fortran / interface.c
1 /* Deal with interfaces.
2    Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007
3    Free Software Foundation, Inc.
4    Contributed by Andy Vaught
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2, 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 COPYING.  If not, write to the Free
20 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
21 02110-1301, USA.  */
22
23
24 /* Deal with interfaces.  An explicit interface is represented as a
25    singly linked list of formal argument structures attached to the
26    relevant symbols.  For an implicit interface, the arguments don't
27    point to symbols.  Explicit interfaces point to namespaces that
28    contain the symbols within that interface.
29
30    Implicit interfaces are linked together in a singly linked list
31    along the next_if member of symbol nodes.  Since a particular
32    symbol can only have a single explicit interface, the symbol cannot
33    be part of multiple lists and a single next-member suffices.
34
35    This is not the case for general classes, though.  An operator
36    definition is independent of just about all other uses and has it's
37    own head pointer.
38
39    Nameless interfaces:
40      Nameless interfaces create symbols with explicit interfaces within
41      the current namespace.  They are otherwise unlinked.
42
43    Generic interfaces:
44      The generic name points to a linked list of symbols.  Each symbol
45      has an explicit interface.  Each explicit interface has its own
46      namespace containing the arguments.  Module procedures are symbols in
47      which the interface is added later when the module procedure is parsed.
48
49    User operators:
50      User-defined operators are stored in a their own set of symtrees
51      separate from regular symbols.  The symtrees point to gfc_user_op
52      structures which in turn head up a list of relevant interfaces.
53
54    Extended intrinsics and assignment:
55      The head of these interface lists are stored in the containing namespace.
56
57    Implicit interfaces:
58      An implicit interface is represented as a singly linked list of
59      formal argument list structures that don't point to any symbol
60      nodes -- they just contain types.
61
62
63    When a subprogram is defined, the program unit's name points to an
64    interface as usual, but the link to the namespace is NULL and the
65    formal argument list points to symbols within the same namespace as
66    the program unit name.  */
67
68 #include "config.h"
69 #include "system.h"
70 #include "gfortran.h"
71 #include "match.h"
72
73 /* The current_interface structure holds information about the
74    interface currently being parsed.  This structure is saved and
75    restored during recursive interfaces.  */
76
77 gfc_interface_info current_interface;
78
79
80 /* Free a singly linked list of gfc_interface structures.  */
81
82 void
83 gfc_free_interface (gfc_interface *intr)
84 {
85   gfc_interface *next;
86
87   for (; intr; intr = next)
88     {
89       next = intr->next;
90       gfc_free (intr);
91     }
92 }
93
94
95 /* Change the operators unary plus and minus into binary plus and
96    minus respectively, leaving the rest unchanged.  */
97
98 static gfc_intrinsic_op
99 fold_unary (gfc_intrinsic_op operator)
100 {
101   switch (operator)
102     {
103     case INTRINSIC_UPLUS:
104       operator = INTRINSIC_PLUS;
105       break;
106     case INTRINSIC_UMINUS:
107       operator = INTRINSIC_MINUS;
108       break;
109     default:
110       break;
111     }
112
113   return operator;
114 }
115
116
117 /* Match a generic specification.  Depending on which type of
118    interface is found, the 'name' or 'operator' pointers may be set.
119    This subroutine doesn't return MATCH_NO.  */
120
121 match
122 gfc_match_generic_spec (interface_type *type,
123                         char *name,
124                         gfc_intrinsic_op *operator)
125 {
126   char buffer[GFC_MAX_SYMBOL_LEN + 1];
127   match m;
128   gfc_intrinsic_op i;
129
130   if (gfc_match (" assignment ( = )") == MATCH_YES)
131     {
132       *type = INTERFACE_INTRINSIC_OP;
133       *operator = INTRINSIC_ASSIGN;
134       return MATCH_YES;
135     }
136
137   if (gfc_match (" operator ( %o )", &i) == MATCH_YES)
138     {                           /* Operator i/f */
139       *type = INTERFACE_INTRINSIC_OP;
140       *operator = fold_unary (i);
141       return MATCH_YES;
142     }
143
144   if (gfc_match (" operator ( ") == MATCH_YES)
145     {
146       m = gfc_match_defined_op_name (buffer, 1);
147       if (m == MATCH_NO)
148         goto syntax;
149       if (m != MATCH_YES)
150         return MATCH_ERROR;
151
152       m = gfc_match_char (')');
153       if (m == MATCH_NO)
154         goto syntax;
155       if (m != MATCH_YES)
156         return MATCH_ERROR;
157
158       strcpy (name, buffer);
159       *type = INTERFACE_USER_OP;
160       return MATCH_YES;
161     }
162
163   if (gfc_match_name (buffer) == MATCH_YES)
164     {
165       strcpy (name, buffer);
166       *type = INTERFACE_GENERIC;
167       return MATCH_YES;
168     }
169
170   *type = INTERFACE_NAMELESS;
171   return MATCH_YES;
172
173 syntax:
174   gfc_error ("Syntax error in generic specification at %C");
175   return MATCH_ERROR;
176 }
177
178
179 /* Match one of the five forms of an interface statement.  */
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       break;
237     }
238
239   return MATCH_YES;
240 }
241
242
243 /* Match the different sort of generic-specs that can be present after
244    the END INTERFACE itself.  */
245
246 match
247 gfc_match_end_interface (void)
248 {
249   char name[GFC_MAX_SYMBOL_LEN + 1];
250   interface_type type;
251   gfc_intrinsic_op operator;
252   match m;
253
254   m = gfc_match_space ();
255
256   if (gfc_match_generic_spec (&type, name, &operator) == MATCH_ERROR)
257     return MATCH_ERROR;
258
259   /* If we're not looking at the end of the statement now, or if this
260      is not a nameless interface but we did not see a space, punt.  */
261   if (gfc_match_eos () != MATCH_YES
262       || (type != INTERFACE_NAMELESS && m != MATCH_YES))
263     {
264       gfc_error ("Syntax error: Trailing garbage in END INTERFACE "
265                  "statement at %C");
266       return MATCH_ERROR;
267     }
268
269   m = MATCH_YES;
270
271   switch (current_interface.type)
272     {
273     case INTERFACE_NAMELESS:
274       if (type != current_interface.type)
275         {
276           gfc_error ("Expected a nameless interface at %C");
277           m = MATCH_ERROR;
278         }
279
280       break;
281
282     case INTERFACE_INTRINSIC_OP:
283       if (type != current_interface.type || operator != current_interface.op)
284         {
285
286           if (current_interface.op == INTRINSIC_ASSIGN)
287             gfc_error ("Expected 'END INTERFACE ASSIGNMENT (=)' at %C");
288           else
289             gfc_error ("Expecting 'END INTERFACE OPERATOR (%s)' at %C",
290                        gfc_op2string (current_interface.op));
291
292           m = MATCH_ERROR;
293         }
294
295       break;
296
297     case INTERFACE_USER_OP:
298       /* Comparing the symbol node names is OK because only use-associated
299          symbols can be renamed.  */
300       if (type != current_interface.type
301           || strcmp (current_interface.uop->name, name) != 0)
302         {
303           gfc_error ("Expecting 'END INTERFACE OPERATOR (.%s.)' at %C",
304                      current_interface.uop->name);
305           m = MATCH_ERROR;
306         }
307
308       break;
309
310     case INTERFACE_GENERIC:
311       if (type != current_interface.type
312           || strcmp (current_interface.sym->name, name) != 0)
313         {
314           gfc_error ("Expecting 'END INTERFACE %s' at %C",
315                      current_interface.sym->name);
316           m = MATCH_ERROR;
317         }
318
319       break;
320     }
321
322   return m;
323 }
324
325
326 /* Compare two derived types using the criteria in 4.4.2 of the standard,
327    recursing through gfc_compare_types for the components.  */
328
329 int
330 gfc_compare_derived_types (gfc_symbol *derived1, gfc_symbol *derived2)
331 {
332   gfc_component *dt1, *dt2;
333
334   /* Special case for comparing derived types across namespaces.  If the
335      true names and module names are the same and the module name is
336      nonnull, then they are equal.  */
337   if (strcmp (derived1->name, derived2->name) == 0
338       && derived1 != NULL && derived2 != NULL
339       && derived1->module != NULL && derived2->module != NULL
340       && strcmp (derived1->module, derived2->module) == 0)
341     return 1;
342
343   /* Compare type via the rules of the standard.  Both types must have
344      the SEQUENCE attribute to be equal.  */
345
346   if (strcmp (derived1->name, derived2->name))
347     return 0;
348
349   if (derived1->component_access == ACCESS_PRIVATE
350       || derived2->component_access == ACCESS_PRIVATE)
351     return 0;
352
353   if (derived1->attr.sequence == 0 || derived2->attr.sequence == 0)
354     return 0;
355
356   dt1 = derived1->components;
357   dt2 = derived2->components;
358
359   /* Since subtypes of SEQUENCE types must be SEQUENCE types as well, a
360      simple test can speed things up.  Otherwise, lots of things have to
361      match.  */
362   for (;;)
363     {
364       if (strcmp (dt1->name, dt2->name) != 0)
365         return 0;
366
367       if (dt1->pointer != dt2->pointer)
368         return 0;
369
370       if (dt1->dimension != dt2->dimension)
371         return 0;
372
373      if (dt1->allocatable != dt2->allocatable)
374         return 0;
375
376       if (dt1->dimension && gfc_compare_array_spec (dt1->as, dt2->as) == 0)
377         return 0;
378
379       if (gfc_compare_types (&dt1->ts, &dt2->ts) == 0)
380         return 0;
381
382       dt1 = dt1->next;
383       dt2 = dt2->next;
384
385       if (dt1 == NULL && dt2 == NULL)
386         break;
387       if (dt1 == NULL || dt2 == NULL)
388         return 0;
389     }
390
391   return 1;
392 }
393
394
395 /* Compare two typespecs, recursively if necessary.  */
396
397 int
398 gfc_compare_types (gfc_typespec *ts1, gfc_typespec *ts2)
399 {
400   if (ts1->type != ts2->type)
401     return 0;
402   if (ts1->type != BT_DERIVED)
403     return (ts1->kind == ts2->kind);
404
405   /* Compare derived types.  */
406   if (ts1->derived == ts2->derived)
407     return 1;
408
409   return gfc_compare_derived_types (ts1->derived ,ts2->derived);
410 }
411
412
413 /* Given two symbols that are formal arguments, compare their ranks
414    and types.  Returns nonzero if they have the same rank and type,
415    zero otherwise.  */
416
417 static int
418 compare_type_rank (gfc_symbol *s1, gfc_symbol *s2)
419 {
420   int r1, r2;
421
422   r1 = (s1->as != NULL) ? s1->as->rank : 0;
423   r2 = (s2->as != NULL) ? s2->as->rank : 0;
424
425   if (r1 != r2)
426     return 0;                   /* Ranks differ.  */
427
428   return gfc_compare_types (&s1->ts, &s2->ts);
429 }
430
431
432 static int compare_interfaces (gfc_symbol *, gfc_symbol *, int);
433
434 /* Given two symbols that are formal arguments, compare their types
435    and rank and their formal interfaces if they are both dummy
436    procedures.  Returns nonzero if the same, zero if different.  */
437
438 static int
439 compare_type_rank_if (gfc_symbol *s1, gfc_symbol *s2)
440 {
441   if (s1 == NULL || s2 == NULL)
442     return s1 == s2 ? 1 : 0;
443
444   if (s1->attr.flavor != FL_PROCEDURE && s2->attr.flavor != FL_PROCEDURE)
445     return compare_type_rank (s1, s2);
446
447   if (s1->attr.flavor != FL_PROCEDURE || s2->attr.flavor != FL_PROCEDURE)
448     return 0;
449
450   /* At this point, both symbols are procedures.  */
451   if ((s1->attr.function == 0 && s1->attr.subroutine == 0)
452       || (s2->attr.function == 0 && s2->attr.subroutine == 0))
453     return 0;
454
455   if (s1->attr.function != s2->attr.function
456       || s1->attr.subroutine != s2->attr.subroutine)
457     return 0;
458
459   if (s1->attr.function && compare_type_rank (s1, s2) == 0)
460     return 0;
461
462   /* Originally, gfortran recursed here to check the interfaces of passed
463      procedures.  This is explicitly not required by the standard.  */
464   return 1;
465 }
466
467
468 /* Given a formal argument list and a keyword name, search the list
469    for that keyword.  Returns the correct symbol node if found, NULL
470    if not found.  */
471
472 static gfc_symbol *
473 find_keyword_arg (const char *name, gfc_formal_arglist *f)
474 {
475   for (; f; f = f->next)
476     if (strcmp (f->sym->name, name) == 0)
477       return f->sym;
478
479   return NULL;
480 }
481
482
483 /******** Interface checking subroutines **********/
484
485
486 /* Given an operator interface and the operator, make sure that all
487    interfaces for that operator are legal.  */
488
489 static void
490 check_operator_interface (gfc_interface *intr, gfc_intrinsic_op operator)
491 {
492   gfc_formal_arglist *formal;
493   sym_intent i1, i2;
494   gfc_symbol *sym;
495   bt t1, t2;
496   int args, r1, r2, k1, k2;
497
498   if (intr == NULL)
499     return;
500
501   args = 0;
502   t1 = t2 = BT_UNKNOWN;
503   i1 = i2 = INTENT_UNKNOWN;
504   r1 = r2 = -1;
505   k1 = k2 = -1;
506
507   for (formal = intr->sym->formal; formal; formal = formal->next)
508     {
509       sym = formal->sym;
510       if (sym == NULL)
511         {
512           gfc_error ("Alternate return cannot appear in operator "
513                      "interface at %L", &intr->where);
514           return;
515         }
516       if (args == 0)
517         {
518           t1 = sym->ts.type;
519           i1 = sym->attr.intent;
520           r1 = (sym->as != NULL) ? sym->as->rank : 0;
521           k1 = sym->ts.kind;
522         }
523       if (args == 1)
524         {
525           t2 = sym->ts.type;
526           i2 = sym->attr.intent;
527           r2 = (sym->as != NULL) ? sym->as->rank : 0;
528           k2 = sym->ts.kind;
529         }
530       args++;
531     }
532
533   sym = intr->sym;
534
535   /* Only +, - and .not. can be unary operators.
536      .not. cannot be a binary operator.  */
537   if (args == 0 || args > 2 || (args == 1 && operator != INTRINSIC_PLUS
538                                 && operator != INTRINSIC_MINUS
539                                 && operator != INTRINSIC_NOT)
540       || (args == 2 && operator == INTRINSIC_NOT))
541     {
542       gfc_error ("Operator interface at %L has the wrong number of arguments",
543                  &intr->where);
544       return;
545     }
546
547   /* Check that intrinsics are mapped to functions, except
548      INTRINSIC_ASSIGN which should map to a subroutine.  */
549   if (operator == INTRINSIC_ASSIGN)
550     {
551       if (!sym->attr.subroutine)
552         {
553           gfc_error ("Assignment operator interface at %L must be "
554                      "a SUBROUTINE", &intr->where);
555           return;
556         }
557       if (args != 2)
558         {
559           gfc_error ("Assignment operator interface at %L must have "
560                      "two arguments", &intr->where);
561           return;
562         }
563       if (sym->formal->sym->ts.type != BT_DERIVED
564           && sym->formal->next->sym->ts.type != BT_DERIVED
565           && (sym->formal->sym->ts.type == sym->formal->next->sym->ts.type
566               || (gfc_numeric_ts (&sym->formal->sym->ts)
567                   && gfc_numeric_ts (&sym->formal->next->sym->ts))))
568         {
569           gfc_error ("Assignment operator interface at %L must not redefine "
570                      "an INTRINSIC type assignment", &intr->where);
571           return;
572         }
573     }
574   else
575     {
576       if (!sym->attr.function)
577         {
578           gfc_error ("Intrinsic operator interface at %L must be a FUNCTION",
579                      &intr->where);
580           return;
581         }
582     }
583
584   /* Check intents on operator interfaces.  */
585   if (operator == INTRINSIC_ASSIGN)
586     {
587       if (i1 != INTENT_OUT && i1 != INTENT_INOUT)
588         gfc_error ("First argument of defined assignment at %L must be "
589                    "INTENT(IN) or INTENT(INOUT)", &intr->where);
590
591       if (i2 != INTENT_IN)
592         gfc_error ("Second argument of defined assignment at %L must be "
593                    "INTENT(IN)", &intr->where);
594     }
595   else
596     {
597       if (i1 != INTENT_IN)
598         gfc_error ("First argument of operator interface at %L must be "
599                    "INTENT(IN)", &intr->where);
600
601       if (args == 2 && i2 != INTENT_IN)
602         gfc_error ("Second argument of operator interface at %L must be "
603                    "INTENT(IN)", &intr->where);
604     }
605
606   /* From now on, all we have to do is check that the operator definition
607      doesn't conflict with an intrinsic operator. The rules for this
608      game are defined in 7.1.2 and 7.1.3 of both F95 and F2003 standards,
609      as well as 12.3.2.1.1 of Fortran 2003:
610
611      "If the operator is an intrinsic-operator (R310), the number of
612      function arguments shall be consistent with the intrinsic uses of
613      that operator, and the types, kind type parameters, or ranks of the
614      dummy arguments shall differ from those required for the intrinsic
615      operation (7.1.2)."  */
616
617 #define IS_NUMERIC_TYPE(t) \
618   ((t) == BT_INTEGER || (t) == BT_REAL || (t) == BT_COMPLEX)
619
620   /* Unary ops are easy, do them first.  */
621   if (operator == INTRINSIC_NOT)
622     {
623       if (t1 == BT_LOGICAL)
624         goto bad_repl;
625       else
626         return;
627     }
628
629   if (args == 1 && (operator == INTRINSIC_PLUS || operator == INTRINSIC_MINUS))
630     {
631       if (IS_NUMERIC_TYPE (t1))
632         goto bad_repl;
633       else
634         return;
635     }
636
637   /* Character intrinsic operators have same character kind, thus
638      operator definitions with operands of different character kinds
639      are always safe.  */
640   if (t1 == BT_CHARACTER && t2 == BT_CHARACTER && k1 != k2)
641     return;
642
643   /* Intrinsic operators always perform on arguments of same rank,
644      so different ranks is also always safe.  (rank == 0) is an exception
645      to that, because all intrinsic operators are elemental.  */
646   if (r1 != r2 && r1 != 0 && r2 != 0)
647     return;
648
649   switch (operator)
650   {
651     case INTRINSIC_EQ:
652     case INTRINSIC_NE:
653       if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
654         goto bad_repl;
655       /* Fall through.  */
656
657     case INTRINSIC_PLUS:
658     case INTRINSIC_MINUS:
659     case INTRINSIC_TIMES:
660     case INTRINSIC_DIVIDE:
661     case INTRINSIC_POWER:
662       if (IS_NUMERIC_TYPE (t1) && IS_NUMERIC_TYPE (t2))
663         goto bad_repl;
664       break;
665
666     case INTRINSIC_GT:
667     case INTRINSIC_GE:
668     case INTRINSIC_LT:
669     case INTRINSIC_LE:
670       if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
671         goto bad_repl;
672       if ((t1 == BT_INTEGER || t1 == BT_REAL)
673           && (t2 == BT_INTEGER || t2 == BT_REAL))
674         goto bad_repl;
675       break;
676
677     case INTRINSIC_CONCAT:
678       if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
679         goto bad_repl;
680       break;
681
682     case INTRINSIC_AND:
683     case INTRINSIC_OR:
684     case INTRINSIC_EQV:
685     case INTRINSIC_NEQV:
686       if (t1 == BT_LOGICAL && t2 == BT_LOGICAL)
687         goto bad_repl;
688       break;
689
690     default:
691       break;
692   }
693
694   return;
695
696 #undef IS_NUMERIC_TYPE
697
698 bad_repl:
699   gfc_error ("Operator interface at %L conflicts with intrinsic interface",
700              &intr->where);
701   return;
702 }
703
704
705 /* Given a pair of formal argument lists, we see if the two lists can
706    be distinguished by counting the number of nonoptional arguments of
707    a given type/rank in f1 and seeing if there are less then that
708    number of those arguments in f2 (including optional arguments).
709    Since this test is asymmetric, it has to be called twice to make it
710    symmetric.  Returns nonzero if the argument lists are incompatible
711    by this test.  This subroutine implements rule 1 of section
712    14.1.2.3.  */
713
714 static int
715 count_types_test (gfc_formal_arglist *f1, gfc_formal_arglist *f2)
716 {
717   int rc, ac1, ac2, i, j, k, n1;
718   gfc_formal_arglist *f;
719
720   typedef struct
721   {
722     int flag;
723     gfc_symbol *sym;
724   }
725   arginfo;
726
727   arginfo *arg;
728
729   n1 = 0;
730
731   for (f = f1; f; f = f->next)
732     n1++;
733
734   /* Build an array of integers that gives the same integer to
735      arguments of the same type/rank.  */
736   arg = gfc_getmem (n1 * sizeof (arginfo));
737
738   f = f1;
739   for (i = 0; i < n1; i++, f = f->next)
740     {
741       arg[i].flag = -1;
742       arg[i].sym = f->sym;
743     }
744
745   k = 0;
746
747   for (i = 0; i < n1; i++)
748     {
749       if (arg[i].flag != -1)
750         continue;
751
752       if (arg[i].sym && arg[i].sym->attr.optional)
753         continue;               /* Skip optional arguments.  */
754
755       arg[i].flag = k;
756
757       /* Find other nonoptional arguments of the same type/rank.  */
758       for (j = i + 1; j < n1; j++)
759         if ((arg[j].sym == NULL || !arg[j].sym->attr.optional)
760             && compare_type_rank_if (arg[i].sym, arg[j].sym))
761           arg[j].flag = k;
762
763       k++;
764     }
765
766   /* Now loop over each distinct type found in f1.  */
767   k = 0;
768   rc = 0;
769
770   for (i = 0; i < n1; i++)
771     {
772       if (arg[i].flag != k)
773         continue;
774
775       ac1 = 1;
776       for (j = i + 1; j < n1; j++)
777         if (arg[j].flag == k)
778           ac1++;
779
780       /* Count the number of arguments in f2 with that type, including
781          those that are optional.  */
782       ac2 = 0;
783
784       for (f = f2; f; f = f->next)
785         if (compare_type_rank_if (arg[i].sym, f->sym))
786           ac2++;
787
788       if (ac1 > ac2)
789         {
790           rc = 1;
791           break;
792         }
793
794       k++;
795     }
796
797   gfc_free (arg);
798
799   return rc;
800 }
801
802
803 /* Perform the abbreviated correspondence test for operators.  The
804    arguments cannot be optional and are always ordered correctly,
805    which makes this test much easier than that for generic tests.
806
807    This subroutine is also used when comparing a formal and actual
808    argument list when an actual parameter is a dummy procedure.  At
809    that point, two formal interfaces must be compared for equality
810    which is what happens here.  */
811
812 static int
813 operator_correspondence (gfc_formal_arglist *f1, gfc_formal_arglist *f2)
814 {
815   for (;;)
816     {
817       if (f1 == NULL && f2 == NULL)
818         break;
819       if (f1 == NULL || f2 == NULL)
820         return 1;
821
822       if (!compare_type_rank (f1->sym, f2->sym))
823         return 1;
824
825       f1 = f1->next;
826       f2 = f2->next;
827     }
828
829   return 0;
830 }
831
832
833 /* Perform the correspondence test in rule 2 of section 14.1.2.3.
834    Returns zero if no argument is found that satisfies rule 2, nonzero
835    otherwise.
836
837    This test is also not symmetric in f1 and f2 and must be called
838    twice.  This test finds problems caused by sorting the actual
839    argument list with keywords.  For example:
840
841    INTERFACE FOO
842        SUBROUTINE F1(A, B)
843            INTEGER :: A ; REAL :: B
844        END SUBROUTINE F1
845
846        SUBROUTINE F2(B, A)
847            INTEGER :: A ; REAL :: B
848        END SUBROUTINE F1
849    END INTERFACE FOO
850
851    At this point, 'CALL FOO(A=1, B=1.0)' is ambiguous.  */
852
853 static int
854 generic_correspondence (gfc_formal_arglist *f1, gfc_formal_arglist *f2)
855 {
856   gfc_formal_arglist *f2_save, *g;
857   gfc_symbol *sym;
858
859   f2_save = f2;
860
861   while (f1)
862     {
863       if (f1->sym->attr.optional)
864         goto next;
865
866       if (f2 != NULL && compare_type_rank (f1->sym, f2->sym))
867         goto next;
868
869       /* Now search for a disambiguating keyword argument starting at
870          the current non-match.  */
871       for (g = f1; g; g = g->next)
872         {
873           if (g->sym->attr.optional)
874             continue;
875
876           sym = find_keyword_arg (g->sym->name, f2_save);
877           if (sym == NULL || !compare_type_rank (g->sym, sym))
878             return 1;
879         }
880
881     next:
882       f1 = f1->next;
883       if (f2 != NULL)
884         f2 = f2->next;
885     }
886
887   return 0;
888 }
889
890
891 /* 'Compare' two formal interfaces associated with a pair of symbols.
892    We return nonzero if there exists an actual argument list that
893    would be ambiguous between the two interfaces, zero otherwise.  */
894
895 static int
896 compare_interfaces (gfc_symbol *s1, gfc_symbol *s2, int generic_flag)
897 {
898   gfc_formal_arglist *f1, *f2;
899
900   if (s1->attr.function != s2->attr.function
901       && s1->attr.subroutine != s2->attr.subroutine)
902     return 0;           /* Disagreement between function/subroutine.  */
903
904   f1 = s1->formal;
905   f2 = s2->formal;
906
907   if (f1 == NULL && f2 == NULL)
908     return 1;                   /* Special case.  */
909
910   if (count_types_test (f1, f2))
911     return 0;
912   if (count_types_test (f2, f1))
913     return 0;
914
915   if (generic_flag)
916     {
917       if (generic_correspondence (f1, f2))
918         return 0;
919       if (generic_correspondence (f2, f1))
920         return 0;
921     }
922   else
923     {
924       if (operator_correspondence (f1, f2))
925         return 0;
926     }
927
928   return 1;
929 }
930
931
932 /* Given a pointer to an interface pointer, remove duplicate
933    interfaces and make sure that all symbols are either functions or
934    subroutines.  Returns nonzero if something goes wrong.  */
935
936 static int
937 check_interface0 (gfc_interface *p, const char *interface_name)
938 {
939   gfc_interface *psave, *q, *qlast;
940
941   psave = p;
942   /* Make sure all symbols in the interface have been defined as
943      functions or subroutines.  */
944   for (; p; p = p->next)
945     if (!p->sym->attr.function && !p->sym->attr.subroutine)
946       {
947         gfc_error ("Procedure '%s' in %s at %L is neither function nor "
948                    "subroutine", p->sym->name, interface_name,
949                    &p->sym->declared_at);
950         return 1;
951       }
952   p = psave;
953
954   /* Remove duplicate interfaces in this interface list.  */
955   for (; p; p = p->next)
956     {
957       qlast = p;
958
959       for (q = p->next; q;)
960         {
961           if (p->sym != q->sym)
962             {
963               qlast = q;
964               q = q->next;
965             }
966           else
967             {
968               /* Duplicate interface.  */
969               qlast->next = q->next;
970               gfc_free (q);
971               q = qlast->next;
972             }
973         }
974     }
975
976   return 0;
977 }
978
979
980 /* Check lists of interfaces to make sure that no two interfaces are
981    ambiguous.  Duplicate interfaces (from the same symbol) are OK here.  */
982
983 static int
984 check_interface1 (gfc_interface *p, gfc_interface *q0,
985                   int generic_flag, const char *interface_name,
986                   bool referenced)
987 {
988   gfc_interface *q;
989   for (; p; p = p->next)
990     for (q = q0; q; q = q->next)
991       {
992         if (p->sym == q->sym)
993           continue;             /* Duplicates OK here.  */
994
995         if (p->sym->name == q->sym->name && p->sym->module == q->sym->module)
996           continue;
997
998         if (compare_interfaces (p->sym, q->sym, generic_flag))
999           {
1000             if (referenced)
1001               {
1002                 gfc_error ("Ambiguous interfaces '%s' and '%s' in %s at %L",
1003                            p->sym->name, q->sym->name, interface_name,
1004                            &p->where);
1005               }
1006
1007             if (!p->sym->attr.use_assoc && q->sym->attr.use_assoc)
1008               gfc_warning ("Ambiguous interfaces '%s' and '%s' in %s at %L",
1009                            p->sym->name, q->sym->name, interface_name,
1010                            &p->where);
1011             return 1;
1012           }
1013       }
1014   return 0;
1015 }
1016
1017
1018 /* Check the generic and operator interfaces of symbols to make sure
1019    that none of the interfaces conflict.  The check has to be done
1020    after all of the symbols are actually loaded.  */
1021
1022 static void
1023 check_sym_interfaces (gfc_symbol *sym)
1024 {
1025   char interface_name[100];
1026   bool k;
1027   gfc_interface *p;
1028
1029   if (sym->ns != gfc_current_ns)
1030     return;
1031
1032   if (sym->generic != NULL)
1033     {
1034       sprintf (interface_name, "generic interface '%s'", sym->name);
1035       if (check_interface0 (sym->generic, interface_name))
1036         return;
1037
1038       for (p = sym->generic; p; p = p->next)
1039         {
1040           if (!p->sym->attr.use_assoc && p->sym->attr.mod_proc
1041               && p->sym->attr.if_source != IFSRC_DECL)
1042             {
1043               gfc_error ("MODULE PROCEDURE '%s' at %L does not come "
1044                          "from a module", p->sym->name, &p->where);
1045               return;
1046             }
1047         }
1048
1049       /* Originally, this test was applied to host interfaces too;
1050          this is incorrect since host associated symbols, from any
1051          source, cannot be ambiguous with local symbols.  */
1052       k = sym->attr.referenced || !sym->attr.use_assoc;
1053       if (check_interface1 (sym->generic, sym->generic, 1, interface_name, k))
1054         sym->attr.ambiguous_interfaces = 1;
1055     }
1056 }
1057
1058
1059 static void
1060 check_uop_interfaces (gfc_user_op *uop)
1061 {
1062   char interface_name[100];
1063   gfc_user_op *uop2;
1064   gfc_namespace *ns;
1065
1066   sprintf (interface_name, "operator interface '%s'", uop->name);
1067   if (check_interface0 (uop->operator, interface_name))
1068     return;
1069
1070   for (ns = gfc_current_ns; ns; ns = ns->parent)
1071     {
1072       uop2 = gfc_find_uop (uop->name, ns);
1073       if (uop2 == NULL)
1074         continue;
1075
1076       check_interface1 (uop->operator, uop2->operator, 0,
1077                         interface_name, true);
1078     }
1079 }
1080
1081
1082 /* For the namespace, check generic, user operator and intrinsic
1083    operator interfaces for consistency and to remove duplicate
1084    interfaces.  We traverse the whole namespace, counting on the fact
1085    that most symbols will not have generic or operator interfaces.  */
1086
1087 void
1088 gfc_check_interfaces (gfc_namespace *ns)
1089 {
1090   gfc_namespace *old_ns, *ns2;
1091   char interface_name[100];
1092   gfc_intrinsic_op i;
1093
1094   old_ns = gfc_current_ns;
1095   gfc_current_ns = ns;
1096
1097   gfc_traverse_ns (ns, check_sym_interfaces);
1098
1099   gfc_traverse_user_op (ns, check_uop_interfaces);
1100
1101   for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++)
1102     {
1103       if (i == INTRINSIC_USER)
1104         continue;
1105
1106       if (i == INTRINSIC_ASSIGN)
1107         strcpy (interface_name, "intrinsic assignment operator");
1108       else
1109         sprintf (interface_name, "intrinsic '%s' operator",
1110                  gfc_op2string (i));
1111
1112       if (check_interface0 (ns->operator[i], interface_name))
1113         continue;
1114
1115       check_operator_interface (ns->operator[i], i);
1116
1117       for (ns2 = ns->parent; ns2; ns2 = ns2->parent)
1118         if (check_interface1 (ns->operator[i], ns2->operator[i], 0,
1119                               interface_name, true))
1120           break;
1121     }
1122
1123   gfc_current_ns = old_ns;
1124 }
1125
1126
1127 static int
1128 symbol_rank (gfc_symbol *sym)
1129 {
1130   return (sym->as == NULL) ? 0 : sym->as->rank;
1131 }
1132
1133
1134 /* Given a symbol of a formal argument list and an expression, if the
1135    formal argument is allocatable, check that the actual argument is
1136    allocatable. Returns nonzero if compatible, zero if not compatible.  */
1137
1138 static int
1139 compare_allocatable (gfc_symbol *formal, gfc_expr *actual)
1140 {
1141   symbol_attribute attr;
1142
1143   if (formal->attr.allocatable)
1144     {
1145       attr = gfc_expr_attr (actual);
1146       if (!attr.allocatable)
1147         return 0;
1148     }
1149
1150   return 1;
1151 }
1152
1153
1154 /* Given a symbol of a formal argument list and an expression, if the
1155    formal argument is a pointer, see if the actual argument is a
1156    pointer. Returns nonzero if compatible, zero if not compatible.  */
1157
1158 static int
1159 compare_pointer (gfc_symbol *formal, gfc_expr *actual)
1160 {
1161   symbol_attribute attr;
1162
1163   if (formal->attr.pointer)
1164     {
1165       attr = gfc_expr_attr (actual);
1166       if (!attr.pointer)
1167         return 0;
1168     }
1169
1170   return 1;
1171 }
1172
1173
1174 /* Given a symbol of a formal argument list and an expression, see if
1175    the two are compatible as arguments.  Returns nonzero if
1176    compatible, zero if not compatible.  */
1177
1178 static int
1179 compare_parameter (gfc_symbol *formal, gfc_expr *actual,
1180                    int ranks_must_agree, int is_elemental)
1181 {
1182   gfc_ref *ref;
1183
1184   if (actual->ts.type == BT_PROCEDURE)
1185     {
1186       if (formal->attr.flavor != FL_PROCEDURE)
1187         return 0;
1188
1189       if (formal->attr.function
1190           && !compare_type_rank (formal, actual->symtree->n.sym))
1191         return 0;
1192
1193       if (formal->attr.if_source == IFSRC_UNKNOWN
1194           || actual->symtree->n.sym->attr.external)
1195         return 1;               /* Assume match.  */
1196
1197       return compare_interfaces (formal, actual->symtree->n.sym, 0);
1198     }
1199
1200   if ((actual->expr_type != EXPR_NULL || actual->ts.type != BT_UNKNOWN)
1201       && !gfc_compare_types (&formal->ts, &actual->ts))
1202     return 0;
1203
1204   if (symbol_rank (formal) == actual->rank)
1205     return 1;
1206
1207   /* At this point the ranks didn't agree.  */
1208   if (ranks_must_agree || formal->attr.pointer)
1209     return 0;
1210
1211   if (actual->rank != 0)
1212     return is_elemental || formal->attr.dimension;
1213
1214   /* At this point, we are considering a scalar passed to an array.
1215      This is legal if the scalar is an array element of the right sort.  */
1216   if (formal->as->type == AS_ASSUMED_SHAPE)
1217     return 0;
1218
1219   for (ref = actual->ref; ref; ref = ref->next)
1220     if (ref->type == REF_SUBSTRING)
1221       return 0;
1222
1223   for (ref = actual->ref; ref; ref = ref->next)
1224     if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT)
1225       break;
1226
1227   if (ref == NULL)
1228     return 0;                   /* Not an array element.  */
1229
1230   return 1;
1231 }
1232
1233
1234 /* Given a symbol of a formal argument list and an expression, see if
1235    the two are compatible as arguments.  Returns nonzero if
1236    compatible, zero if not compatible.  */
1237
1238 static int
1239 compare_parameter_protected (gfc_symbol *formal, gfc_expr *actual)
1240 {
1241   if (actual->expr_type != EXPR_VARIABLE)
1242     return 1;
1243
1244   if (!actual->symtree->n.sym->attr.protected)
1245     return 1;
1246
1247   if (!actual->symtree->n.sym->attr.use_assoc)
1248     return 1;
1249
1250   if (formal->attr.intent == INTENT_IN
1251       || formal->attr.intent == INTENT_UNKNOWN)
1252     return 1;
1253
1254   if (!actual->symtree->n.sym->attr.pointer)
1255     return 0;
1256
1257   if (actual->symtree->n.sym->attr.pointer && formal->attr.pointer)
1258     return 0;
1259
1260   return 1;
1261 }
1262
1263
1264 /* Given an expression, check whether it is an array section
1265    which has a vector subscript. If it has, one is returned,
1266    otherwise zero.  */
1267
1268 static int
1269 has_vector_subscript (gfc_expr *e)
1270 {
1271   int i;
1272   gfc_ref *ref;
1273
1274   if (e == NULL || e->rank == 0 || e->expr_type != EXPR_VARIABLE)
1275     return 0;
1276
1277   for (ref = e->ref; ref; ref = ref->next)
1278     if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION)
1279       for (i = 0; i < ref->u.ar.dimen; i++)
1280         if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
1281           return 1;
1282
1283   return 0;
1284 }
1285
1286
1287 /* Given formal and actual argument lists, see if they are compatible.
1288    If they are compatible, the actual argument list is sorted to
1289    correspond with the formal list, and elements for missing optional
1290    arguments are inserted. If WHERE pointer is nonnull, then we issue
1291    errors when things don't match instead of just returning the status
1292    code.  */
1293
1294 static int
1295 compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
1296                        int ranks_must_agree, int is_elemental, locus *where)
1297 {
1298   gfc_actual_arglist **new, *a, *actual, temp;
1299   gfc_formal_arglist *f;
1300   int i, n, na;
1301   bool rank_check;
1302
1303   actual = *ap;
1304
1305   if (actual == NULL && formal == NULL)
1306     return 1;
1307
1308   n = 0;
1309   for (f = formal; f; f = f->next)
1310     n++;
1311
1312   new = (gfc_actual_arglist **) alloca (n * sizeof (gfc_actual_arglist *));
1313
1314   for (i = 0; i < n; i++)
1315     new[i] = NULL;
1316
1317   na = 0;
1318   f = formal;
1319   i = 0;
1320
1321   for (a = actual; a; a = a->next, f = f->next)
1322     {
1323       /* Look for keywords but ignore g77 extensions like %VAL.  */
1324       if (a->name != NULL && a->name[0] != '%')
1325         {
1326           i = 0;
1327           for (f = formal; f; f = f->next, i++)
1328             {
1329               if (f->sym == NULL)
1330                 continue;
1331               if (strcmp (f->sym->name, a->name) == 0)
1332                 break;
1333             }
1334
1335           if (f == NULL)
1336             {
1337               if (where)
1338                 gfc_error ("Keyword argument '%s' at %L is not in "
1339                            "the procedure", a->name, &a->expr->where);
1340               return 0;
1341             }
1342
1343           if (new[i] != NULL)
1344             {
1345               if (where)
1346                 gfc_error ("Keyword argument '%s' at %L is already associated "
1347                            "with another actual argument", a->name,
1348                            &a->expr->where);
1349               return 0;
1350             }
1351         }
1352
1353       if (f == NULL)
1354         {
1355           if (where)
1356             gfc_error ("More actual than formal arguments in procedure "
1357                        "call at %L", where);
1358
1359           return 0;
1360         }
1361
1362       if (f->sym == NULL && a->expr == NULL)
1363         goto match;
1364
1365       if (f->sym == NULL)
1366         {
1367           if (where)
1368             gfc_error ("Missing alternate return spec in subroutine call "
1369                        "at %L", where);
1370           return 0;
1371         }
1372
1373       if (a->expr == NULL)
1374         {
1375           if (where)
1376             gfc_error ("Unexpected alternate return spec in subroutine "
1377                        "call at %L", where);
1378           return 0;
1379         }
1380
1381       rank_check = where != NULL && !is_elemental && f->sym->as
1382                    && (f->sym->as->type == AS_ASSUMED_SHAPE
1383                        || f->sym->as->type == AS_DEFERRED);
1384
1385       if (!compare_parameter (f->sym, a->expr,
1386                               ranks_must_agree || rank_check, is_elemental))
1387         {
1388           if (where)
1389             gfc_error ("Type/rank mismatch in argument '%s' at %L",
1390                        f->sym->name, &a->expr->where);
1391           return 0;
1392         }
1393
1394        if (a->expr->ts.type == BT_CHARACTER
1395            && a->expr->ts.cl && a->expr->ts.cl->length
1396            && a->expr->ts.cl->length->expr_type == EXPR_CONSTANT
1397            && f->sym->ts.cl && f->sym->ts.cl && f->sym->ts.cl->length
1398            && f->sym->ts.cl->length->expr_type == EXPR_CONSTANT)
1399          {
1400            if (mpz_cmp (a->expr->ts.cl->length->value.integer,
1401                         f->sym->ts.cl->length->value.integer) < 0)
1402              {
1403                 if (where)
1404                   gfc_error ("Character length of actual argument shorter "
1405                              "than of dummy argument '%s' at %L",
1406                              f->sym->name, &a->expr->where);
1407                 return 0;
1408              }
1409
1410            if ((f->sym->attr.pointer || f->sym->attr.allocatable)
1411                && (mpz_cmp (a->expr->ts.cl->length->value.integer,
1412                            f->sym->ts.cl->length->value.integer) != 0))
1413              {
1414                 if (where)
1415                   gfc_error ("Character length mismatch between actual argument "
1416                              "and pointer or allocatable dummy argument "
1417                              "'%s' at %L", f->sym->name, &a->expr->where);
1418                 return 0;
1419              }
1420          }
1421
1422       /* Satisfy 12.4.1.2 by ensuring that a procedure actual argument is
1423          provided for a procedure formal argument.  */
1424       if (a->expr->ts.type != BT_PROCEDURE
1425           && a->expr->expr_type == EXPR_VARIABLE
1426           && f->sym->attr.flavor == FL_PROCEDURE)
1427         {
1428           if (where)
1429             gfc_error ("Expected a procedure for argument '%s' at %L",
1430                        f->sym->name, &a->expr->where);
1431           return 0;
1432         }
1433
1434       if (f->sym->attr.flavor == FL_PROCEDURE && f->sym->attr.pure
1435           && a->expr->ts.type == BT_PROCEDURE
1436           && !a->expr->symtree->n.sym->attr.pure)
1437         {
1438           if (where)
1439             gfc_error ("Expected a PURE procedure for argument '%s' at %L",
1440                        f->sym->name, &a->expr->where);
1441           return 0;
1442         }
1443
1444       if (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE
1445           && a->expr->expr_type == EXPR_VARIABLE
1446           && a->expr->symtree->n.sym->as
1447           && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SIZE
1448           && (a->expr->ref == NULL
1449               || (a->expr->ref->type == REF_ARRAY
1450                   && a->expr->ref->u.ar.type == AR_FULL)))
1451         {
1452           if (where)
1453             gfc_error ("Actual argument for '%s' cannot be an assumed-size"
1454                        " array at %L", f->sym->name, where);
1455           return 0;
1456         }
1457
1458       if (a->expr->expr_type != EXPR_NULL
1459           && compare_pointer (f->sym, a->expr) == 0)
1460         {
1461           if (where)
1462             gfc_error ("Actual argument for '%s' must be a pointer at %L",
1463                        f->sym->name, &a->expr->where);
1464           return 0;
1465         }
1466
1467       if (a->expr->expr_type != EXPR_NULL
1468           && compare_allocatable (f->sym, a->expr) == 0)
1469         {
1470           if (where)
1471             gfc_error ("Actual argument for '%s' must be ALLOCATABLE at %L",
1472                        f->sym->name, &a->expr->where);
1473           return 0;
1474         }
1475
1476       /* Check intent = OUT/INOUT for definable actual argument.  */
1477       if (a->expr->expr_type != EXPR_VARIABLE
1478           && (f->sym->attr.intent == INTENT_OUT
1479               || f->sym->attr.intent == INTENT_INOUT))
1480         {
1481           if (where)
1482             gfc_error ("Actual argument at %L must be definable to "
1483                        "match dummy INTENT = OUT/INOUT", &a->expr->where);
1484           return 0;
1485         }
1486
1487       if (!compare_parameter_protected(f->sym, a->expr))
1488         {
1489           if (where)
1490             gfc_error ("Actual argument at %L is use-associated with "
1491                        "PROTECTED attribute and dummy argument '%s' is "
1492                        "INTENT = OUT/INOUT",
1493                        &a->expr->where,f->sym->name);
1494           return 0;
1495         }
1496
1497       if ((f->sym->attr.intent == INTENT_OUT
1498            || f->sym->attr.intent == INTENT_INOUT
1499            || f->sym->attr.volatile_)
1500           && has_vector_subscript (a->expr))
1501         {
1502           if (where)
1503             gfc_error ("Array-section actual argument with vector subscripts "
1504                        "at %L is incompatible with INTENT(IN), INTENT(INOUT) "
1505                        "or VOLATILE attribute of the dummy argument '%s'",
1506                        &a->expr->where, f->sym->name);
1507           return 0;
1508         }
1509
1510       /* C1232 (R1221) For an actual argument which is an array section or
1511          an assumed-shape array, the dummy argument shall be an assumed-
1512          shape array, if the dummy argument has the VOLATILE attribute.  */
1513
1514       if (f->sym->attr.volatile_
1515           && a->expr->symtree->n.sym->as
1516           && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
1517           && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
1518         {
1519           if (where)
1520             gfc_error ("Assumed-shape actual argument at %L is "
1521                        "incompatible with the non-assumed-shape "
1522                        "dummy argument '%s' due to VOLATILE attribute",
1523                        &a->expr->where,f->sym->name);
1524           return 0;
1525         }
1526
1527       if (f->sym->attr.volatile_
1528           && a->expr->ref && a->expr->ref->u.ar.type == AR_SECTION
1529           && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
1530         {
1531           if (where)
1532             gfc_error ("Array-section actual argument at %L is "
1533                        "incompatible with the non-assumed-shape "
1534                        "dummy argument '%s' due to VOLATILE attribute",
1535                        &a->expr->where,f->sym->name);
1536           return 0;
1537         }
1538
1539       /* C1233 (R1221) For an actual argument which is a pointer array, the
1540          dummy argument shall be an assumed-shape or pointer array, if the
1541          dummy argument has the VOLATILE attribute.  */
1542
1543       if (f->sym->attr.volatile_
1544           && a->expr->symtree->n.sym->attr.pointer
1545           && a->expr->symtree->n.sym->as
1546           && !(f->sym->as
1547                && (f->sym->as->type == AS_ASSUMED_SHAPE
1548                    || f->sym->attr.pointer)))
1549         {
1550           if (where)
1551             gfc_error ("Pointer-array actual argument at %L requires "
1552                        "an assumed-shape or pointer-array dummy "
1553                        "argument '%s' due to VOLATILE attribute",
1554                        &a->expr->where,f->sym->name);
1555           return 0;
1556         }
1557
1558     match:
1559       if (a == actual)
1560         na = i;
1561
1562       new[i++] = a;
1563     }
1564
1565   /* Make sure missing actual arguments are optional.  */
1566   i = 0;
1567   for (f = formal; f; f = f->next, i++)
1568     {
1569       if (new[i] != NULL)
1570         continue;
1571       if (f->sym == NULL)
1572         {
1573           if (where)
1574             gfc_error ("Missing alternate return spec in subroutine call "
1575                        "at %L", where);
1576           return 0;
1577         }
1578       if (!f->sym->attr.optional)
1579         {
1580           if (where)
1581             gfc_error ("Missing actual argument for argument '%s' at %L",
1582                        f->sym->name, where);
1583           return 0;
1584         }
1585     }
1586
1587   /* The argument lists are compatible.  We now relink a new actual
1588      argument list with null arguments in the right places.  The head
1589      of the list remains the head.  */
1590   for (i = 0; i < n; i++)
1591     if (new[i] == NULL)
1592       new[i] = gfc_get_actual_arglist ();
1593
1594   if (na != 0)
1595     {
1596       temp = *new[0];
1597       *new[0] = *actual;
1598       *actual = temp;
1599
1600       a = new[0];
1601       new[0] = new[na];
1602       new[na] = a;
1603     }
1604
1605   for (i = 0; i < n - 1; i++)
1606     new[i]->next = new[i + 1];
1607
1608   new[i]->next = NULL;
1609
1610   if (*ap == NULL && n > 0)
1611     *ap = new[0];
1612
1613   /* Note the types of omitted optional arguments.  */
1614   for (a = actual, f = formal; a; a = a->next, f = f->next)
1615     if (a->expr == NULL && a->label == NULL)
1616       a->missing_arg_type = f->sym->ts.type;
1617
1618   return 1;
1619 }
1620
1621
1622 typedef struct
1623 {
1624   gfc_formal_arglist *f;
1625   gfc_actual_arglist *a;
1626 }
1627 argpair;
1628
1629 /* qsort comparison function for argument pairs, with the following
1630    order:
1631     - p->a->expr == NULL
1632     - p->a->expr->expr_type != EXPR_VARIABLE
1633     - growing p->a->expr->symbol.  */
1634
1635 static int
1636 pair_cmp (const void *p1, const void *p2)
1637 {
1638   const gfc_actual_arglist *a1, *a2;
1639
1640   /* *p1 and *p2 are elements of the to-be-sorted array.  */
1641   a1 = ((const argpair *) p1)->a;
1642   a2 = ((const argpair *) p2)->a;
1643   if (!a1->expr)
1644     {
1645       if (!a2->expr)
1646         return 0;
1647       return -1;
1648     }
1649   if (!a2->expr)
1650     return 1;
1651   if (a1->expr->expr_type != EXPR_VARIABLE)
1652     {
1653       if (a2->expr->expr_type != EXPR_VARIABLE)
1654         return 0;
1655       return -1;
1656     }
1657   if (a2->expr->expr_type != EXPR_VARIABLE)
1658     return 1;
1659   return a1->expr->symtree->n.sym < a2->expr->symtree->n.sym;
1660 }
1661
1662
1663 /* Given two expressions from some actual arguments, test whether they
1664    refer to the same expression. The analysis is conservative.
1665    Returning FAILURE will produce no warning.  */
1666
1667 static try
1668 compare_actual_expr (gfc_expr *e1, gfc_expr *e2)
1669 {
1670   const gfc_ref *r1, *r2;
1671
1672   if (!e1 || !e2
1673       || e1->expr_type != EXPR_VARIABLE
1674       || e2->expr_type != EXPR_VARIABLE
1675       || e1->symtree->n.sym != e2->symtree->n.sym)
1676     return FAILURE;
1677
1678   /* TODO: improve comparison, see expr.c:show_ref().  */
1679   for (r1 = e1->ref, r2 = e2->ref; r1 && r2; r1 = r1->next, r2 = r2->next)
1680     {
1681       if (r1->type != r2->type)
1682         return FAILURE;
1683       switch (r1->type)
1684         {
1685         case REF_ARRAY:
1686           if (r1->u.ar.type != r2->u.ar.type)
1687             return FAILURE;
1688           /* TODO: At the moment, consider only full arrays;
1689              we could do better.  */
1690           if (r1->u.ar.type != AR_FULL || r2->u.ar.type != AR_FULL)
1691             return FAILURE;
1692           break;
1693
1694         case REF_COMPONENT:
1695           if (r1->u.c.component != r2->u.c.component)
1696             return FAILURE;
1697           break;
1698
1699         case REF_SUBSTRING:
1700           return FAILURE;
1701
1702         default:
1703           gfc_internal_error ("compare_actual_expr(): Bad component code");
1704         }
1705     }
1706   if (!r1 && !r2)
1707     return SUCCESS;
1708   return FAILURE;
1709 }
1710
1711
1712 /* Given formal and actual argument lists that correspond to one
1713    another, check that identical actual arguments aren't not
1714    associated with some incompatible INTENTs.  */
1715
1716 static try
1717 check_some_aliasing (gfc_formal_arglist *f, gfc_actual_arglist *a)
1718 {
1719   sym_intent f1_intent, f2_intent;
1720   gfc_formal_arglist *f1;
1721   gfc_actual_arglist *a1;
1722   size_t n, i, j;
1723   argpair *p;
1724   try t = SUCCESS;
1725
1726   n = 0;
1727   for (f1 = f, a1 = a;; f1 = f1->next, a1 = a1->next)
1728     {
1729       if (f1 == NULL && a1 == NULL)
1730         break;
1731       if (f1 == NULL || a1 == NULL)
1732         gfc_internal_error ("check_some_aliasing(): List mismatch");
1733       n++;
1734     }
1735   if (n == 0)
1736     return t;
1737   p = (argpair *) alloca (n * sizeof (argpair));
1738
1739   for (i = 0, f1 = f, a1 = a; i < n; i++, f1 = f1->next, a1 = a1->next)
1740     {
1741       p[i].f = f1;
1742       p[i].a = a1;
1743     }
1744
1745   qsort (p, n, sizeof (argpair), pair_cmp);
1746
1747   for (i = 0; i < n; i++)
1748     {
1749       if (!p[i].a->expr
1750           || p[i].a->expr->expr_type != EXPR_VARIABLE
1751           || p[i].a->expr->ts.type == BT_PROCEDURE)
1752         continue;
1753       f1_intent = p[i].f->sym->attr.intent;
1754       for (j = i + 1; j < n; j++)
1755         {
1756           /* Expected order after the sort.  */
1757           if (!p[j].a->expr || p[j].a->expr->expr_type != EXPR_VARIABLE)
1758             gfc_internal_error ("check_some_aliasing(): corrupted data");
1759
1760           /* Are the expression the same?  */
1761           if (compare_actual_expr (p[i].a->expr, p[j].a->expr) == FAILURE)
1762             break;
1763           f2_intent = p[j].f->sym->attr.intent;
1764           if ((f1_intent == INTENT_IN && f2_intent == INTENT_OUT)
1765               || (f1_intent == INTENT_OUT && f2_intent == INTENT_IN))
1766             {
1767               gfc_warning ("Same actual argument associated with INTENT(%s) "
1768                            "argument '%s' and INTENT(%s) argument '%s' at %L",
1769                            gfc_intent_string (f1_intent), p[i].f->sym->name,
1770                            gfc_intent_string (f2_intent), p[j].f->sym->name,
1771                            &p[i].a->expr->where);
1772               t = FAILURE;
1773             }
1774         }
1775     }
1776
1777   return t;
1778 }
1779
1780
1781 /* Given a symbol of a formal argument list and an expression,
1782    return non-zero if their intents are compatible, zero otherwise.  */
1783
1784 static int
1785 compare_parameter_intent (gfc_symbol *formal, gfc_expr *actual)
1786 {
1787   if (actual->symtree->n.sym->attr.pointer && !formal->attr.pointer)
1788     return 1;
1789
1790   if (actual->symtree->n.sym->attr.intent != INTENT_IN)
1791     return 1;
1792
1793   if (formal->attr.intent == INTENT_INOUT || formal->attr.intent == INTENT_OUT)
1794     return 0;
1795
1796   return 1;
1797 }
1798
1799
1800 /* Given formal and actual argument lists that correspond to one
1801    another, check that they are compatible in the sense that intents
1802    are not mismatched.  */
1803
1804 static try
1805 check_intents (gfc_formal_arglist *f, gfc_actual_arglist *a)
1806 {
1807   sym_intent f_intent;
1808
1809   for (;; f = f->next, a = a->next)
1810     {
1811       if (f == NULL && a == NULL)
1812         break;
1813       if (f == NULL || a == NULL)
1814         gfc_internal_error ("check_intents(): List mismatch");
1815
1816       if (a->expr == NULL || a->expr->expr_type != EXPR_VARIABLE)
1817         continue;
1818
1819       f_intent = f->sym->attr.intent;
1820
1821       if (!compare_parameter_intent(f->sym, a->expr))
1822         {
1823           gfc_error ("Procedure argument at %L is INTENT(IN) while interface "
1824                      "specifies INTENT(%s)", &a->expr->where,
1825                      gfc_intent_string (f_intent));
1826           return FAILURE;
1827         }
1828
1829       if (gfc_pure (NULL) && gfc_impure_variable (a->expr->symtree->n.sym))
1830         {
1831           if (f_intent == INTENT_INOUT || f_intent == INTENT_OUT)
1832             {
1833               gfc_error ("Procedure argument at %L is local to a PURE "
1834                          "procedure and is passed to an INTENT(%s) argument",
1835                          &a->expr->where, gfc_intent_string (f_intent));
1836               return FAILURE;
1837             }
1838
1839           if (a->expr->symtree->n.sym->attr.pointer)
1840             {
1841               gfc_error ("Procedure argument at %L is local to a PURE "
1842                          "procedure and has the POINTER attribute",
1843                          &a->expr->where);
1844               return FAILURE;
1845             }
1846         }
1847     }
1848
1849   return SUCCESS;
1850 }
1851
1852
1853 /* Check how a procedure is used against its interface.  If all goes
1854    well, the actual argument list will also end up being properly
1855    sorted.  */
1856
1857 void
1858 gfc_procedure_use (gfc_symbol *sym, gfc_actual_arglist **ap, locus *where)
1859 {
1860
1861   /* Warn about calls with an implicit interface.  */
1862   if (gfc_option.warn_implicit_interface
1863       && sym->attr.if_source == IFSRC_UNKNOWN)
1864     gfc_warning ("Procedure '%s' called with an implicit interface at %L",
1865                  sym->name, where);
1866
1867   if (sym->attr.if_source == IFSRC_UNKNOWN
1868       || !compare_actual_formal (ap, sym->formal, 0,
1869                                  sym->attr.elemental, where))
1870     return;
1871
1872   check_intents (sym->formal, *ap);
1873   if (gfc_option.warn_aliasing)
1874     check_some_aliasing (sym->formal, *ap);
1875 }
1876
1877
1878 /* Given an interface pointer and an actual argument list, search for
1879    a formal argument list that matches the actual.  If found, returns
1880    a pointer to the symbol of the correct interface.  Returns NULL if
1881    not found.  */
1882
1883 gfc_symbol *
1884 gfc_search_interface (gfc_interface *intr, int sub_flag,
1885                       gfc_actual_arglist **ap)
1886 {
1887   int r;
1888
1889   for (; intr; intr = intr->next)
1890     {
1891       if (sub_flag && intr->sym->attr.function)
1892         continue;
1893       if (!sub_flag && intr->sym->attr.subroutine)
1894         continue;
1895
1896       r = !intr->sym->attr.elemental;
1897
1898       if (compare_actual_formal (ap, intr->sym->formal, r, !r, NULL))
1899         {
1900           check_intents (intr->sym->formal, *ap);
1901           if (gfc_option.warn_aliasing)
1902             check_some_aliasing (intr->sym->formal, *ap);
1903           return intr->sym;
1904         }
1905     }
1906
1907   return NULL;
1908 }
1909
1910
1911 /* Do a brute force recursive search for a symbol.  */
1912
1913 static gfc_symtree *
1914 find_symtree0 (gfc_symtree *root, gfc_symbol *sym)
1915 {
1916   gfc_symtree * st;
1917
1918   if (root->n.sym == sym)
1919     return root;
1920
1921   st = NULL;
1922   if (root->left)
1923     st = find_symtree0 (root->left, sym);
1924   if (root->right && ! st)
1925     st = find_symtree0 (root->right, sym);
1926   return st;
1927 }
1928
1929
1930 /* Find a symtree for a symbol.  */
1931
1932 static gfc_symtree *
1933 find_sym_in_symtree (gfc_symbol *sym)
1934 {
1935   gfc_symtree *st;
1936   gfc_namespace *ns;
1937
1938   /* First try to find it by name.  */
1939   gfc_find_sym_tree (sym->name, gfc_current_ns, 1, &st);
1940   if (st && st->n.sym == sym)
1941     return st;
1942
1943   /* If it's been renamed, resort to a brute-force search.  */
1944   /* TODO: avoid having to do this search.  If the symbol doesn't exist
1945      in the symtree for the current namespace, it should probably be added.  */
1946   for (ns = gfc_current_ns; ns; ns = ns->parent)
1947     {
1948       st = find_symtree0 (ns->sym_root, sym);
1949       if (st)
1950         return st;
1951     }
1952   gfc_internal_error ("Unable to find symbol %s", sym->name);
1953   /* Not reached.  */
1954 }
1955
1956
1957 /* This subroutine is called when an expression is being resolved.
1958    The expression node in question is either a user defined operator
1959    or an intrinsic operator with arguments that aren't compatible
1960    with the operator.  This subroutine builds an actual argument list
1961    corresponding to the operands, then searches for a compatible
1962    interface.  If one is found, the expression node is replaced with
1963    the appropriate function call.  */
1964
1965 try
1966 gfc_extend_expr (gfc_expr *e)
1967 {
1968   gfc_actual_arglist *actual;
1969   gfc_symbol *sym;
1970   gfc_namespace *ns;
1971   gfc_user_op *uop;
1972   gfc_intrinsic_op i;
1973
1974   sym = NULL;
1975
1976   actual = gfc_get_actual_arglist ();
1977   actual->expr = e->value.op.op1;
1978
1979   if (e->value.op.op2 != NULL)
1980     {
1981       actual->next = gfc_get_actual_arglist ();
1982       actual->next->expr = e->value.op.op2;
1983     }
1984
1985   i = fold_unary (e->value.op.operator);
1986
1987   if (i == INTRINSIC_USER)
1988     {
1989       for (ns = gfc_current_ns; ns; ns = ns->parent)
1990         {
1991           uop = gfc_find_uop (e->value.op.uop->name, ns);
1992           if (uop == NULL)
1993             continue;
1994
1995           sym = gfc_search_interface (uop->operator, 0, &actual);
1996           if (sym != NULL)
1997             break;
1998         }
1999     }
2000   else
2001     {
2002       for (ns = gfc_current_ns; ns; ns = ns->parent)
2003         {
2004           sym = gfc_search_interface (ns->operator[i], 0, &actual);
2005           if (sym != NULL)
2006             break;
2007         }
2008     }
2009
2010   if (sym == NULL)
2011     {
2012       /* Don't use gfc_free_actual_arglist().  */
2013       if (actual->next != NULL)
2014         gfc_free (actual->next);
2015       gfc_free (actual);
2016
2017       return FAILURE;
2018     }
2019
2020   /* Change the expression node to a function call.  */
2021   e->expr_type = EXPR_FUNCTION;
2022   e->symtree = find_sym_in_symtree (sym);
2023   e->value.function.actual = actual;
2024   e->value.function.esym = NULL;
2025   e->value.function.isym = NULL;
2026   e->value.function.name = NULL;
2027
2028   if (gfc_pure (NULL) && !gfc_pure (sym))
2029     {
2030       gfc_error ("Function '%s' called in lieu of an operator at %L must "
2031                  "be PURE", sym->name, &e->where);
2032       return FAILURE;
2033     }
2034
2035   if (gfc_resolve_expr (e) == FAILURE)
2036     return FAILURE;
2037
2038   return SUCCESS;
2039 }
2040
2041
2042 /* Tries to replace an assignment code node with a subroutine call to
2043    the subroutine associated with the assignment operator.  Return
2044    SUCCESS if the node was replaced.  On FAILURE, no error is
2045    generated.  */
2046
2047 try
2048 gfc_extend_assign (gfc_code *c, gfc_namespace *ns)
2049 {
2050   gfc_actual_arglist *actual;
2051   gfc_expr *lhs, *rhs;
2052   gfc_symbol *sym;
2053
2054   lhs = c->expr;
2055   rhs = c->expr2;
2056
2057   /* Don't allow an intrinsic assignment to be replaced.  */
2058   if (lhs->ts.type != BT_DERIVED && rhs->ts.type != BT_DERIVED
2059       && (lhs->ts.type == rhs->ts.type
2060           || (gfc_numeric_ts (&lhs->ts) && gfc_numeric_ts (&rhs->ts))))
2061     return FAILURE;
2062
2063   actual = gfc_get_actual_arglist ();
2064   actual->expr = lhs;
2065
2066   actual->next = gfc_get_actual_arglist ();
2067   actual->next->expr = rhs;
2068
2069   sym = NULL;
2070
2071   for (; ns; ns = ns->parent)
2072     {
2073       sym = gfc_search_interface (ns->operator[INTRINSIC_ASSIGN], 1, &actual);
2074       if (sym != NULL)
2075         break;
2076     }
2077
2078   if (sym == NULL)
2079     {
2080       gfc_free (actual->next);
2081       gfc_free (actual);
2082       return FAILURE;
2083     }
2084
2085   /* Replace the assignment with the call.  */
2086   c->op = EXEC_ASSIGN_CALL;
2087   c->symtree = find_sym_in_symtree (sym);
2088   c->expr = NULL;
2089   c->expr2 = NULL;
2090   c->ext.actual = actual;
2091
2092   return SUCCESS;
2093 }
2094
2095
2096 /* Make sure that the interface just parsed is not already present in
2097    the given interface list.  Ambiguity isn't checked yet since module
2098    procedures can be present without interfaces.  */
2099
2100 static try
2101 check_new_interface (gfc_interface *base, gfc_symbol *new)
2102 {
2103   gfc_interface *ip;
2104
2105   for (ip = base; ip; ip = ip->next)
2106     {
2107       if (ip->sym == new)
2108         {
2109           gfc_error ("Entity '%s' at %C is already present in the interface",
2110                      new->name);
2111           return FAILURE;
2112         }
2113     }
2114
2115   return SUCCESS;
2116 }
2117
2118
2119 /* Add a symbol to the current interface.  */
2120
2121 try
2122 gfc_add_interface (gfc_symbol *new)
2123 {
2124   gfc_interface **head, *intr;
2125   gfc_namespace *ns;
2126   gfc_symbol *sym;
2127
2128   switch (current_interface.type)
2129     {
2130     case INTERFACE_NAMELESS:
2131       return SUCCESS;
2132
2133     case INTERFACE_INTRINSIC_OP:
2134       for (ns = current_interface.ns; ns; ns = ns->parent)
2135         if (check_new_interface (ns->operator[current_interface.op], new)
2136             == FAILURE)
2137           return FAILURE;
2138
2139       head = &current_interface.ns->operator[current_interface.op];
2140       break;
2141
2142     case INTERFACE_GENERIC:
2143       for (ns = current_interface.ns; ns; ns = ns->parent)
2144         {
2145           gfc_find_symbol (current_interface.sym->name, ns, 0, &sym);
2146           if (sym == NULL)
2147             continue;
2148
2149           if (check_new_interface (sym->generic, new) == FAILURE)
2150             return FAILURE;
2151         }
2152
2153       head = &current_interface.sym->generic;
2154       break;
2155
2156     case INTERFACE_USER_OP:
2157       if (check_new_interface (current_interface.uop->operator, new)
2158           == FAILURE)
2159         return FAILURE;
2160
2161       head = &current_interface.uop->operator;
2162       break;
2163
2164     default:
2165       gfc_internal_error ("gfc_add_interface(): Bad interface type");
2166     }
2167
2168   intr = gfc_get_interface ();
2169   intr->sym = new;
2170   intr->where = gfc_current_locus;
2171
2172   intr->next = *head;
2173   *head = intr;
2174
2175   return SUCCESS;
2176 }
2177
2178
2179 /* Gets rid of a formal argument list.  We do not free symbols.
2180    Symbols are freed when a namespace is freed.  */
2181
2182 void
2183 gfc_free_formal_arglist (gfc_formal_arglist *p)
2184 {
2185   gfc_formal_arglist *q;
2186
2187   for (; p; p = q)
2188     {
2189       q = p->next;
2190       gfc_free (p);
2191     }
2192 }