OSDN Git Service

2010-04-29 Janus Weil <janus@gcc.gnu.org>
[pf3gnuchains/gcc-fork.git] / gcc / fortran / interface.c
1 /* Deal with interfaces.
2    Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009,
3    2010
4    Free Software Foundation, Inc.
5    Contributed by Andy Vaught
6
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify it under
10 the terms of the GNU General Public License as published by the Free
11 Software Foundation; either version 3, or (at your option) any later
12 version.
13
14 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15 WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
17 for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.  */
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_intrinsic (gfc_intrinsic_op op)
100 {
101   switch (op)
102     {
103     case INTRINSIC_UPLUS:
104       op = INTRINSIC_PLUS;
105       break;
106     case INTRINSIC_UMINUS:
107       op = INTRINSIC_MINUS;
108       break;
109     default:
110       break;
111     }
112
113   return op;
114 }
115
116
117 /* Match a generic specification.  Depending on which type of
118    interface is found, the 'name' or 'op' 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 *op)
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       *op = 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       *op = fold_unary_intrinsic (i);
141       return MATCH_YES;
142     }
143
144   *op = INTRINSIC_NONE;
145   if (gfc_match (" operator ( ") == MATCH_YES)
146     {
147       m = gfc_match_defined_op_name (buffer, 1);
148       if (m == MATCH_NO)
149         goto syntax;
150       if (m != MATCH_YES)
151         return MATCH_ERROR;
152
153       m = gfc_match_char (')');
154       if (m == MATCH_NO)
155         goto syntax;
156       if (m != MATCH_YES)
157         return MATCH_ERROR;
158
159       strcpy (name, buffer);
160       *type = INTERFACE_USER_OP;
161       return MATCH_YES;
162     }
163
164   if (gfc_match_name (buffer) == MATCH_YES)
165     {
166       strcpy (name, buffer);
167       *type = INTERFACE_GENERIC;
168       return MATCH_YES;
169     }
170
171   *type = INTERFACE_NAMELESS;
172   return MATCH_YES;
173
174 syntax:
175   gfc_error ("Syntax error in generic specification at %C");
176   return MATCH_ERROR;
177 }
178
179
180 /* Match one of the five F95 forms of an interface statement.  The
181    matcher for the abstract interface follows.  */
182
183 match
184 gfc_match_interface (void)
185 {
186   char name[GFC_MAX_SYMBOL_LEN + 1];
187   interface_type type;
188   gfc_symbol *sym;
189   gfc_intrinsic_op op;
190   match m;
191
192   m = gfc_match_space ();
193
194   if (gfc_match_generic_spec (&type, name, &op) == MATCH_ERROR)
195     return MATCH_ERROR;
196
197   /* If we're not looking at the end of the statement now, or if this
198      is not a nameless interface but we did not see a space, punt.  */
199   if (gfc_match_eos () != MATCH_YES
200       || (type != INTERFACE_NAMELESS && m != MATCH_YES))
201     {
202       gfc_error ("Syntax error: Trailing garbage in INTERFACE statement "
203                  "at %C");
204       return MATCH_ERROR;
205     }
206
207   current_interface.type = type;
208
209   switch (type)
210     {
211     case INTERFACE_GENERIC:
212       if (gfc_get_symbol (name, NULL, &sym))
213         return MATCH_ERROR;
214
215       if (!sym->attr.generic 
216           && gfc_add_generic (&sym->attr, sym->name, NULL) == FAILURE)
217         return MATCH_ERROR;
218
219       if (sym->attr.dummy)
220         {
221           gfc_error ("Dummy procedure '%s' at %C cannot have a "
222                      "generic interface", sym->name);
223           return MATCH_ERROR;
224         }
225
226       current_interface.sym = gfc_new_block = sym;
227       break;
228
229     case INTERFACE_USER_OP:
230       current_interface.uop = gfc_get_uop (name);
231       break;
232
233     case INTERFACE_INTRINSIC_OP:
234       current_interface.op = op;
235       break;
236
237     case INTERFACE_NAMELESS:
238     case INTERFACE_ABSTRACT:
239       break;
240     }
241
242   return MATCH_YES;
243 }
244
245
246
247 /* Match a F2003 abstract interface.  */
248
249 match
250 gfc_match_abstract_interface (void)
251 {
252   match m;
253
254   if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: ABSTRACT INTERFACE at %C")
255                       == FAILURE)
256     return MATCH_ERROR;
257
258   m = gfc_match_eos ();
259
260   if (m != MATCH_YES)
261     {
262       gfc_error ("Syntax error in ABSTRACT INTERFACE statement at %C");
263       return MATCH_ERROR;
264     }
265
266   current_interface.type = INTERFACE_ABSTRACT;
267
268   return m;
269 }
270
271
272 /* Match the different sort of generic-specs that can be present after
273    the END INTERFACE itself.  */
274
275 match
276 gfc_match_end_interface (void)
277 {
278   char name[GFC_MAX_SYMBOL_LEN + 1];
279   interface_type type;
280   gfc_intrinsic_op op;
281   match m;
282
283   m = gfc_match_space ();
284
285   if (gfc_match_generic_spec (&type, name, &op) == MATCH_ERROR)
286     return MATCH_ERROR;
287
288   /* If we're not looking at the end of the statement now, or if this
289      is not a nameless interface but we did not see a space, punt.  */
290   if (gfc_match_eos () != MATCH_YES
291       || (type != INTERFACE_NAMELESS && m != MATCH_YES))
292     {
293       gfc_error ("Syntax error: Trailing garbage in END INTERFACE "
294                  "statement at %C");
295       return MATCH_ERROR;
296     }
297
298   m = MATCH_YES;
299
300   switch (current_interface.type)
301     {
302     case INTERFACE_NAMELESS:
303     case INTERFACE_ABSTRACT:
304       if (type != INTERFACE_NAMELESS)
305         {
306           gfc_error ("Expected a nameless interface at %C");
307           m = MATCH_ERROR;
308         }
309
310       break;
311
312     case INTERFACE_INTRINSIC_OP:
313       if (type != current_interface.type || op != current_interface.op)
314         {
315
316           if (current_interface.op == INTRINSIC_ASSIGN)
317             gfc_error ("Expected 'END INTERFACE ASSIGNMENT (=)' at %C");
318           else
319             gfc_error ("Expecting 'END INTERFACE OPERATOR (%s)' at %C",
320                        gfc_op2string (current_interface.op));
321
322           m = MATCH_ERROR;
323         }
324
325       break;
326
327     case INTERFACE_USER_OP:
328       /* Comparing the symbol node names is OK because only use-associated
329          symbols can be renamed.  */
330       if (type != current_interface.type
331           || strcmp (current_interface.uop->name, name) != 0)
332         {
333           gfc_error ("Expecting 'END INTERFACE OPERATOR (.%s.)' at %C",
334                      current_interface.uop->name);
335           m = MATCH_ERROR;
336         }
337
338       break;
339
340     case INTERFACE_GENERIC:
341       if (type != current_interface.type
342           || strcmp (current_interface.sym->name, name) != 0)
343         {
344           gfc_error ("Expecting 'END INTERFACE %s' at %C",
345                      current_interface.sym->name);
346           m = MATCH_ERROR;
347         }
348
349       break;
350     }
351
352   return m;
353 }
354
355
356 /* Compare two derived types using the criteria in 4.4.2 of the standard,
357    recursing through gfc_compare_types for the components.  */
358
359 int
360 gfc_compare_derived_types (gfc_symbol *derived1, gfc_symbol *derived2)
361 {
362   gfc_component *dt1, *dt2;
363
364   if (derived1 == derived2)
365     return 1;
366
367   /* Special case for comparing derived types across namespaces.  If the
368      true names and module names are the same and the module name is
369      nonnull, then they are equal.  */
370   if (derived1 != NULL && derived2 != NULL
371       && strcmp (derived1->name, derived2->name) == 0
372       && derived1->module != NULL && derived2->module != NULL
373       && strcmp (derived1->module, derived2->module) == 0)
374     return 1;
375
376   /* Compare type via the rules of the standard.  Both types must have
377      the SEQUENCE attribute to be equal.  */
378
379   if (strcmp (derived1->name, derived2->name))
380     return 0;
381
382   if (derived1->component_access == ACCESS_PRIVATE
383       || derived2->component_access == ACCESS_PRIVATE)
384     return 0;
385
386   if (derived1->attr.sequence == 0 || derived2->attr.sequence == 0)
387     return 0;
388
389   dt1 = derived1->components;
390   dt2 = derived2->components;
391
392   /* Since subtypes of SEQUENCE types must be SEQUENCE types as well, a
393      simple test can speed things up.  Otherwise, lots of things have to
394      match.  */
395   for (;;)
396     {
397       if (strcmp (dt1->name, dt2->name) != 0)
398         return 0;
399
400       if (dt1->attr.access != dt2->attr.access)
401         return 0;
402
403       if (dt1->attr.pointer != dt2->attr.pointer)
404         return 0;
405
406       if (dt1->attr.dimension != dt2->attr.dimension)
407         return 0;
408
409      if (dt1->attr.allocatable != dt2->attr.allocatable)
410         return 0;
411
412       if (dt1->attr.dimension && gfc_compare_array_spec (dt1->as, dt2->as) == 0)
413         return 0;
414
415       /* Make sure that link lists do not put this function into an 
416          endless recursive loop!  */
417       if (!(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived)
418             && !(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived)
419             && gfc_compare_types (&dt1->ts, &dt2->ts) == 0)
420         return 0;
421
422       else if ((dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived)
423                 && !(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived))
424         return 0;
425
426       else if (!(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived)
427                 && (dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived))
428         return 0;
429
430       dt1 = dt1->next;
431       dt2 = dt2->next;
432
433       if (dt1 == NULL && dt2 == NULL)
434         break;
435       if (dt1 == NULL || dt2 == NULL)
436         return 0;
437     }
438
439   return 1;
440 }
441
442
443 /* Compare two typespecs, recursively if necessary.  */
444
445 int
446 gfc_compare_types (gfc_typespec *ts1, gfc_typespec *ts2)
447 {
448   /* See if one of the typespecs is a BT_VOID, which is what is being used
449      to allow the funcs like c_f_pointer to accept any pointer type.
450      TODO: Possibly should narrow this to just the one typespec coming in
451      that is for the formal arg, but oh well.  */
452   if (ts1->type == BT_VOID || ts2->type == BT_VOID)
453     return 1;
454    
455   if (ts1->type != ts2->type
456       && ((ts1->type != BT_DERIVED && ts1->type != BT_CLASS)
457           || (ts2->type != BT_DERIVED && ts2->type != BT_CLASS)))
458     return 0;
459   if (ts1->type != BT_DERIVED && ts1->type != BT_CLASS)
460     return (ts1->kind == ts2->kind);
461
462   /* Compare derived types.  */
463   if (gfc_type_compatible (ts1, ts2))
464     return 1;
465
466   return gfc_compare_derived_types (ts1->u.derived ,ts2->u.derived);
467 }
468
469
470 /* Given two symbols that are formal arguments, compare their ranks
471    and types.  Returns nonzero if they have the same rank and type,
472    zero otherwise.  */
473
474 static int
475 compare_type_rank (gfc_symbol *s1, gfc_symbol *s2)
476 {
477   int r1, r2;
478
479   r1 = (s1->as != NULL) ? s1->as->rank : 0;
480   r2 = (s2->as != NULL) ? s2->as->rank : 0;
481
482   if (r1 != r2)
483     return 0;                   /* Ranks differ.  */
484
485   return gfc_compare_types (&s1->ts, &s2->ts);
486 }
487
488
489 /* Given two symbols that are formal arguments, compare their types
490    and rank and their formal interfaces if they are both dummy
491    procedures.  Returns nonzero if the same, zero if different.  */
492
493 static int
494 compare_type_rank_if (gfc_symbol *s1, gfc_symbol *s2)
495 {
496   if (s1 == NULL || s2 == NULL)
497     return s1 == s2 ? 1 : 0;
498
499   if (s1 == s2)
500     return 1;
501
502   if (s1->attr.flavor != FL_PROCEDURE && s2->attr.flavor != FL_PROCEDURE)
503     return compare_type_rank (s1, s2);
504
505   if (s1->attr.flavor != FL_PROCEDURE || s2->attr.flavor != FL_PROCEDURE)
506     return 0;
507
508   /* At this point, both symbols are procedures.  It can happen that
509      external procedures are compared, where one is identified by usage
510      to be a function or subroutine but the other is not.  Check TKR
511      nonetheless for these cases.  */
512   if (s1->attr.function == 0 && s1->attr.subroutine == 0)
513     return s1->attr.external == 1 ? compare_type_rank (s1, s2) : 0;
514
515   if (s2->attr.function == 0 && s2->attr.subroutine == 0)
516     return s2->attr.external == 1 ? compare_type_rank (s1, s2) : 0;
517
518   /* Now the type of procedure has been identified.  */
519   if (s1->attr.function != s2->attr.function
520       || s1->attr.subroutine != s2->attr.subroutine)
521     return 0;
522
523   if (s1->attr.function && compare_type_rank (s1, s2) == 0)
524     return 0;
525
526   /* Originally, gfortran recursed here to check the interfaces of passed
527      procedures.  This is explicitly not required by the standard.  */
528   return 1;
529 }
530
531
532 /* Given a formal argument list and a keyword name, search the list
533    for that keyword.  Returns the correct symbol node if found, NULL
534    if not found.  */
535
536 static gfc_symbol *
537 find_keyword_arg (const char *name, gfc_formal_arglist *f)
538 {
539   for (; f; f = f->next)
540     if (strcmp (f->sym->name, name) == 0)
541       return f->sym;
542
543   return NULL;
544 }
545
546
547 /******** Interface checking subroutines **********/
548
549
550 /* Given an operator interface and the operator, make sure that all
551    interfaces for that operator are legal.  */
552
553 bool
554 gfc_check_operator_interface (gfc_symbol *sym, gfc_intrinsic_op op,
555                               locus opwhere)
556 {
557   gfc_formal_arglist *formal;
558   sym_intent i1, i2;
559   bt t1, t2;
560   int args, r1, r2, k1, k2;
561
562   gcc_assert (sym);
563
564   args = 0;
565   t1 = t2 = BT_UNKNOWN;
566   i1 = i2 = INTENT_UNKNOWN;
567   r1 = r2 = -1;
568   k1 = k2 = -1;
569
570   for (formal = sym->formal; formal; formal = formal->next)
571     {
572       gfc_symbol *fsym = formal->sym;
573       if (fsym == NULL)
574         {
575           gfc_error ("Alternate return cannot appear in operator "
576                      "interface at %L", &sym->declared_at);
577           return false;
578         }
579       if (args == 0)
580         {
581           t1 = fsym->ts.type;
582           i1 = fsym->attr.intent;
583           r1 = (fsym->as != NULL) ? fsym->as->rank : 0;
584           k1 = fsym->ts.kind;
585         }
586       if (args == 1)
587         {
588           t2 = fsym->ts.type;
589           i2 = fsym->attr.intent;
590           r2 = (fsym->as != NULL) ? fsym->as->rank : 0;
591           k2 = fsym->ts.kind;
592         }
593       args++;
594     }
595
596   /* Only +, - and .not. can be unary operators.
597      .not. cannot be a binary operator.  */
598   if (args == 0 || args > 2 || (args == 1 && op != INTRINSIC_PLUS
599                                 && op != INTRINSIC_MINUS
600                                 && op != INTRINSIC_NOT)
601       || (args == 2 && op == INTRINSIC_NOT))
602     {
603       gfc_error ("Operator interface at %L has the wrong number of arguments",
604                  &sym->declared_at);
605       return false;
606     }
607
608   /* Check that intrinsics are mapped to functions, except
609      INTRINSIC_ASSIGN which should map to a subroutine.  */
610   if (op == INTRINSIC_ASSIGN)
611     {
612       if (!sym->attr.subroutine)
613         {
614           gfc_error ("Assignment operator interface at %L must be "
615                      "a SUBROUTINE", &sym->declared_at);
616           return false;
617         }
618       if (args != 2)
619         {
620           gfc_error ("Assignment operator interface at %L must have "
621                      "two arguments", &sym->declared_at);
622           return false;
623         }
624
625       /* Allowed are (per F2003, 12.3.2.1.2 Defined assignments):
626          - First argument an array with different rank than second,
627          - Types and kinds do not conform, and
628          - First argument is of derived type.  */
629       if (sym->formal->sym->ts.type != BT_DERIVED
630           && sym->formal->sym->ts.type != BT_CLASS
631           && (r1 == 0 || r1 == r2)
632           && (sym->formal->sym->ts.type == sym->formal->next->sym->ts.type
633               || (gfc_numeric_ts (&sym->formal->sym->ts)
634                   && gfc_numeric_ts (&sym->formal->next->sym->ts))))
635         {
636           gfc_error ("Assignment operator interface at %L must not redefine "
637                      "an INTRINSIC type assignment", &sym->declared_at);
638           return false;
639         }
640     }
641   else
642     {
643       if (!sym->attr.function)
644         {
645           gfc_error ("Intrinsic operator interface at %L must be a FUNCTION",
646                      &sym->declared_at);
647           return false;
648         }
649     }
650
651   /* Check intents on operator interfaces.  */
652   if (op == INTRINSIC_ASSIGN)
653     {
654       if (i1 != INTENT_OUT && i1 != INTENT_INOUT)
655         {
656           gfc_error ("First argument of defined assignment at %L must be "
657                      "INTENT(OUT) or INTENT(INOUT)", &sym->declared_at);
658           return false;
659         }
660
661       if (i2 != INTENT_IN)
662         {
663           gfc_error ("Second argument of defined assignment at %L must be "
664                      "INTENT(IN)", &sym->declared_at);
665           return false;
666         }
667     }
668   else
669     {
670       if (i1 != INTENT_IN)
671         {
672           gfc_error ("First argument of operator interface at %L must be "
673                      "INTENT(IN)", &sym->declared_at);
674           return false;
675         }
676
677       if (args == 2 && i2 != INTENT_IN)
678         {
679           gfc_error ("Second argument of operator interface at %L must be "
680                      "INTENT(IN)", &sym->declared_at);
681           return false;
682         }
683     }
684
685   /* From now on, all we have to do is check that the operator definition
686      doesn't conflict with an intrinsic operator. The rules for this
687      game are defined in 7.1.2 and 7.1.3 of both F95 and F2003 standards,
688      as well as 12.3.2.1.1 of Fortran 2003:
689
690      "If the operator is an intrinsic-operator (R310), the number of
691      function arguments shall be consistent with the intrinsic uses of
692      that operator, and the types, kind type parameters, or ranks of the
693      dummy arguments shall differ from those required for the intrinsic
694      operation (7.1.2)."  */
695
696 #define IS_NUMERIC_TYPE(t) \
697   ((t) == BT_INTEGER || (t) == BT_REAL || (t) == BT_COMPLEX)
698
699   /* Unary ops are easy, do them first.  */
700   if (op == INTRINSIC_NOT)
701     {
702       if (t1 == BT_LOGICAL)
703         goto bad_repl;
704       else
705         return true;
706     }
707
708   if (args == 1 && (op == INTRINSIC_PLUS || op == INTRINSIC_MINUS))
709     {
710       if (IS_NUMERIC_TYPE (t1))
711         goto bad_repl;
712       else
713         return true;
714     }
715
716   /* Character intrinsic operators have same character kind, thus
717      operator definitions with operands of different character kinds
718      are always safe.  */
719   if (t1 == BT_CHARACTER && t2 == BT_CHARACTER && k1 != k2)
720     return true;
721
722   /* Intrinsic operators always perform on arguments of same rank,
723      so different ranks is also always safe.  (rank == 0) is an exception
724      to that, because all intrinsic operators are elemental.  */
725   if (r1 != r2 && r1 != 0 && r2 != 0)
726     return true;
727
728   switch (op)
729   {
730     case INTRINSIC_EQ:
731     case INTRINSIC_EQ_OS:
732     case INTRINSIC_NE:
733     case INTRINSIC_NE_OS:
734       if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
735         goto bad_repl;
736       /* Fall through.  */
737
738     case INTRINSIC_PLUS:
739     case INTRINSIC_MINUS:
740     case INTRINSIC_TIMES:
741     case INTRINSIC_DIVIDE:
742     case INTRINSIC_POWER:
743       if (IS_NUMERIC_TYPE (t1) && IS_NUMERIC_TYPE (t2))
744         goto bad_repl;
745       break;
746
747     case INTRINSIC_GT:
748     case INTRINSIC_GT_OS:
749     case INTRINSIC_GE:
750     case INTRINSIC_GE_OS:
751     case INTRINSIC_LT:
752     case INTRINSIC_LT_OS:
753     case INTRINSIC_LE:
754     case INTRINSIC_LE_OS:
755       if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
756         goto bad_repl;
757       if ((t1 == BT_INTEGER || t1 == BT_REAL)
758           && (t2 == BT_INTEGER || t2 == BT_REAL))
759         goto bad_repl;
760       break;
761
762     case INTRINSIC_CONCAT:
763       if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
764         goto bad_repl;
765       break;
766
767     case INTRINSIC_AND:
768     case INTRINSIC_OR:
769     case INTRINSIC_EQV:
770     case INTRINSIC_NEQV:
771       if (t1 == BT_LOGICAL && t2 == BT_LOGICAL)
772         goto bad_repl;
773       break;
774
775     default:
776       break;
777   }
778
779   return true;
780
781 #undef IS_NUMERIC_TYPE
782
783 bad_repl:
784   gfc_error ("Operator interface at %L conflicts with intrinsic interface",
785              &opwhere);
786   return false;
787 }
788
789
790 /* Given a pair of formal argument lists, we see if the two lists can
791    be distinguished by counting the number of nonoptional arguments of
792    a given type/rank in f1 and seeing if there are less then that
793    number of those arguments in f2 (including optional arguments).
794    Since this test is asymmetric, it has to be called twice to make it
795    symmetric.  Returns nonzero if the argument lists are incompatible
796    by this test.  This subroutine implements rule 1 of section
797    14.1.2.3 in the Fortran 95 standard.  */
798
799 static int
800 count_types_test (gfc_formal_arglist *f1, gfc_formal_arglist *f2)
801 {
802   int rc, ac1, ac2, i, j, k, n1;
803   gfc_formal_arglist *f;
804
805   typedef struct
806   {
807     int flag;
808     gfc_symbol *sym;
809   }
810   arginfo;
811
812   arginfo *arg;
813
814   n1 = 0;
815
816   for (f = f1; f; f = f->next)
817     n1++;
818
819   /* Build an array of integers that gives the same integer to
820      arguments of the same type/rank.  */
821   arg = XCNEWVEC (arginfo, n1);
822
823   f = f1;
824   for (i = 0; i < n1; i++, f = f->next)
825     {
826       arg[i].flag = -1;
827       arg[i].sym = f->sym;
828     }
829
830   k = 0;
831
832   for (i = 0; i < n1; i++)
833     {
834       if (arg[i].flag != -1)
835         continue;
836
837       if (arg[i].sym && arg[i].sym->attr.optional)
838         continue;               /* Skip optional arguments.  */
839
840       arg[i].flag = k;
841
842       /* Find other nonoptional arguments of the same type/rank.  */
843       for (j = i + 1; j < n1; j++)
844         if ((arg[j].sym == NULL || !arg[j].sym->attr.optional)
845             && compare_type_rank_if (arg[i].sym, arg[j].sym))
846           arg[j].flag = k;
847
848       k++;
849     }
850
851   /* Now loop over each distinct type found in f1.  */
852   k = 0;
853   rc = 0;
854
855   for (i = 0; i < n1; i++)
856     {
857       if (arg[i].flag != k)
858         continue;
859
860       ac1 = 1;
861       for (j = i + 1; j < n1; j++)
862         if (arg[j].flag == k)
863           ac1++;
864
865       /* Count the number of arguments in f2 with that type, including
866          those that are optional.  */
867       ac2 = 0;
868
869       for (f = f2; f; f = f->next)
870         if (compare_type_rank_if (arg[i].sym, f->sym))
871           ac2++;
872
873       if (ac1 > ac2)
874         {
875           rc = 1;
876           break;
877         }
878
879       k++;
880     }
881
882   gfc_free (arg);
883
884   return rc;
885 }
886
887
888 /* Perform the correspondence test in rule 2 of section 14.1.2.3.
889    Returns zero if no argument is found that satisfies rule 2, nonzero
890    otherwise.
891
892    This test is also not symmetric in f1 and f2 and must be called
893    twice.  This test finds problems caused by sorting the actual
894    argument list with keywords.  For example:
895
896    INTERFACE FOO
897        SUBROUTINE F1(A, B)
898            INTEGER :: A ; REAL :: B
899        END SUBROUTINE F1
900
901        SUBROUTINE F2(B, A)
902            INTEGER :: A ; REAL :: B
903        END SUBROUTINE F1
904    END INTERFACE FOO
905
906    At this point, 'CALL FOO(A=1, B=1.0)' is ambiguous.  */
907
908 static int
909 generic_correspondence (gfc_formal_arglist *f1, gfc_formal_arglist *f2)
910 {
911   gfc_formal_arglist *f2_save, *g;
912   gfc_symbol *sym;
913
914   f2_save = f2;
915
916   while (f1)
917     {
918       if (f1->sym->attr.optional)
919         goto next;
920
921       if (f2 != NULL && compare_type_rank (f1->sym, f2->sym))
922         goto next;
923
924       /* Now search for a disambiguating keyword argument starting at
925          the current non-match.  */
926       for (g = f1; g; g = g->next)
927         {
928           if (g->sym->attr.optional)
929             continue;
930
931           sym = find_keyword_arg (g->sym->name, f2_save);
932           if (sym == NULL || !compare_type_rank (g->sym, sym))
933             return 1;
934         }
935
936     next:
937       f1 = f1->next;
938       if (f2 != NULL)
939         f2 = f2->next;
940     }
941
942   return 0;
943 }
944
945
946 /* 'Compare' two formal interfaces associated with a pair of symbols.
947    We return nonzero if there exists an actual argument list that
948    would be ambiguous between the two interfaces, zero otherwise.
949    'intent_flag' specifies whether INTENT and OPTIONAL of the arguments are
950    required to match, which is not the case for ambiguity checks.*/
951
952 int
953 gfc_compare_interfaces (gfc_symbol *s1, gfc_symbol *s2, const char *name2,
954                         int generic_flag, int intent_flag,
955                         char *errmsg, int err_len)
956 {
957   gfc_formal_arglist *f1, *f2;
958
959   gcc_assert (name2 != NULL);
960
961   if (s1->attr.function && (s2->attr.subroutine
962       || (!s2->attr.function && s2->ts.type == BT_UNKNOWN
963           && gfc_get_default_type (name2, s2->ns)->type == BT_UNKNOWN)))
964     {
965       if (errmsg != NULL)
966         snprintf (errmsg, err_len, "'%s' is not a function", name2);
967       return 0;
968     }
969
970   if (s1->attr.subroutine && s2->attr.function)
971     {
972       if (errmsg != NULL)
973         snprintf (errmsg, err_len, "'%s' is not a subroutine", name2);
974       return 0;
975     }
976
977   /* If the arguments are functions, check type and kind
978      (only for dummy procedures and procedure pointer assignments).  */
979   if (!generic_flag && intent_flag && s1->attr.function && s2->attr.function)
980     {
981       if (s1->ts.type == BT_UNKNOWN)
982         return 1;
983       if ((s1->ts.type != s2->ts.type) || (s1->ts.kind != s2->ts.kind))
984         {
985           if (errmsg != NULL)
986             snprintf (errmsg, err_len, "Type/kind mismatch in return value "
987                       "of '%s'", name2);
988           return 0;
989         }
990     }
991
992   if (s1->attr.if_source == IFSRC_UNKNOWN
993       || s2->attr.if_source == IFSRC_UNKNOWN)
994     return 1;
995
996   f1 = s1->formal;
997   f2 = s2->formal;
998
999   if (f1 == NULL && f2 == NULL)
1000     return 1;                   /* Special case: No arguments.  */
1001
1002   if (generic_flag)
1003     {
1004       if (count_types_test (f1, f2) || count_types_test (f2, f1))
1005         return 0;
1006       if (generic_correspondence (f1, f2) || generic_correspondence (f2, f1))
1007         return 0;
1008     }
1009   else
1010     /* Perform the abbreviated correspondence test for operators (the
1011        arguments cannot be optional and are always ordered correctly).
1012        This is also done when comparing interfaces for dummy procedures and in
1013        procedure pointer assignments.  */
1014
1015     for (;;)
1016       {
1017         /* Check existence.  */
1018         if (f1 == NULL && f2 == NULL)
1019           break;
1020         if (f1 == NULL || f2 == NULL)
1021           {
1022             if (errmsg != NULL)
1023               snprintf (errmsg, err_len, "'%s' has the wrong number of "
1024                         "arguments", name2);
1025             return 0;
1026           }
1027
1028         /* Check type and rank.  */
1029         if (!compare_type_rank (f1->sym, f2->sym))
1030           {
1031             if (errmsg != NULL)
1032               snprintf (errmsg, err_len, "Type/rank mismatch in argument '%s'",
1033                         f1->sym->name);
1034             return 0;
1035           }
1036
1037         /* Check INTENT.  */
1038         if (intent_flag && (f1->sym->attr.intent != f2->sym->attr.intent))
1039           {
1040             snprintf (errmsg, err_len, "INTENT mismatch in argument '%s'",
1041                       f1->sym->name);
1042             return 0;
1043           }
1044
1045         /* Check OPTIONAL.  */
1046         if (intent_flag && (f1->sym->attr.optional != f2->sym->attr.optional))
1047           {
1048             snprintf (errmsg, err_len, "OPTIONAL mismatch in argument '%s'",
1049                       f1->sym->name);
1050             return 0;
1051           }
1052
1053         f1 = f1->next;
1054         f2 = f2->next;
1055       }
1056
1057   return 1;
1058 }
1059
1060
1061 /* Given a pointer to an interface pointer, remove duplicate
1062    interfaces and make sure that all symbols are either functions or
1063    subroutines.  Returns nonzero if something goes wrong.  */
1064
1065 static int
1066 check_interface0 (gfc_interface *p, const char *interface_name)
1067 {
1068   gfc_interface *psave, *q, *qlast;
1069
1070   psave = p;
1071   /* Make sure all symbols in the interface have been defined as
1072      functions or subroutines.  */
1073   for (; p; p = p->next)
1074     if ((!p->sym->attr.function && !p->sym->attr.subroutine)
1075         || !p->sym->attr.if_source)
1076       {
1077         if (p->sym->attr.external)
1078           gfc_error ("Procedure '%s' in %s at %L has no explicit interface",
1079                      p->sym->name, interface_name, &p->sym->declared_at);
1080         else
1081           gfc_error ("Procedure '%s' in %s at %L is neither function nor "
1082                      "subroutine", p->sym->name, interface_name,
1083                      &p->sym->declared_at);
1084         return 1;
1085       }
1086   p = psave;
1087
1088   /* Remove duplicate interfaces in this interface list.  */
1089   for (; p; p = p->next)
1090     {
1091       qlast = p;
1092
1093       for (q = p->next; q;)
1094         {
1095           if (p->sym != q->sym)
1096             {
1097               qlast = q;
1098               q = q->next;
1099             }
1100           else
1101             {
1102               /* Duplicate interface.  */
1103               qlast->next = q->next;
1104               gfc_free (q);
1105               q = qlast->next;
1106             }
1107         }
1108     }
1109
1110   return 0;
1111 }
1112
1113
1114 /* Check lists of interfaces to make sure that no two interfaces are
1115    ambiguous.  Duplicate interfaces (from the same symbol) are OK here.  */
1116
1117 static int
1118 check_interface1 (gfc_interface *p, gfc_interface *q0,
1119                   int generic_flag, const char *interface_name,
1120                   bool referenced)
1121 {
1122   gfc_interface *q;
1123   for (; p; p = p->next)
1124     for (q = q0; q; q = q->next)
1125       {
1126         if (p->sym == q->sym)
1127           continue;             /* Duplicates OK here.  */
1128
1129         if (p->sym->name == q->sym->name && p->sym->module == q->sym->module)
1130           continue;
1131
1132         if (gfc_compare_interfaces (p->sym, q->sym, q->sym->name, generic_flag,
1133                                     0, NULL, 0))
1134           {
1135             if (referenced)
1136               gfc_error ("Ambiguous interfaces '%s' and '%s' in %s at %L",
1137                          p->sym->name, q->sym->name, interface_name,
1138                          &p->where);
1139             else if (!p->sym->attr.use_assoc && q->sym->attr.use_assoc)
1140               gfc_warning ("Ambiguous interfaces '%s' and '%s' in %s at %L",
1141                            p->sym->name, q->sym->name, interface_name,
1142                            &p->where);
1143             else
1144               gfc_warning ("Although not referenced, '%s' has ambiguous "
1145                            "interfaces at %L", interface_name, &p->where);
1146             return 1;
1147           }
1148       }
1149   return 0;
1150 }
1151
1152
1153 /* Check the generic and operator interfaces of symbols to make sure
1154    that none of the interfaces conflict.  The check has to be done
1155    after all of the symbols are actually loaded.  */
1156
1157 static void
1158 check_sym_interfaces (gfc_symbol *sym)
1159 {
1160   char interface_name[100];
1161   gfc_interface *p;
1162
1163   if (sym->ns != gfc_current_ns)
1164     return;
1165
1166   if (sym->generic != NULL)
1167     {
1168       sprintf (interface_name, "generic interface '%s'", sym->name);
1169       if (check_interface0 (sym->generic, interface_name))
1170         return;
1171
1172       for (p = sym->generic; p; p = p->next)
1173         {
1174           if (p->sym->attr.mod_proc
1175               && (p->sym->attr.if_source != IFSRC_DECL
1176                   || p->sym->attr.procedure))
1177             {
1178               gfc_error ("'%s' at %L is not a module procedure",
1179                          p->sym->name, &p->where);
1180               return;
1181             }
1182         }
1183
1184       /* Originally, this test was applied to host interfaces too;
1185          this is incorrect since host associated symbols, from any
1186          source, cannot be ambiguous with local symbols.  */
1187       check_interface1 (sym->generic, sym->generic, 1, interface_name,
1188                         sym->attr.referenced || !sym->attr.use_assoc);
1189     }
1190 }
1191
1192
1193 static void
1194 check_uop_interfaces (gfc_user_op *uop)
1195 {
1196   char interface_name[100];
1197   gfc_user_op *uop2;
1198   gfc_namespace *ns;
1199
1200   sprintf (interface_name, "operator interface '%s'", uop->name);
1201   if (check_interface0 (uop->op, interface_name))
1202     return;
1203
1204   for (ns = gfc_current_ns; ns; ns = ns->parent)
1205     {
1206       uop2 = gfc_find_uop (uop->name, ns);
1207       if (uop2 == NULL)
1208         continue;
1209
1210       check_interface1 (uop->op, uop2->op, 0,
1211                         interface_name, true);
1212     }
1213 }
1214
1215
1216 /* For the namespace, check generic, user operator and intrinsic
1217    operator interfaces for consistency and to remove duplicate
1218    interfaces.  We traverse the whole namespace, counting on the fact
1219    that most symbols will not have generic or operator interfaces.  */
1220
1221 void
1222 gfc_check_interfaces (gfc_namespace *ns)
1223 {
1224   gfc_namespace *old_ns, *ns2;
1225   char interface_name[100];
1226   int i;
1227
1228   old_ns = gfc_current_ns;
1229   gfc_current_ns = ns;
1230
1231   gfc_traverse_ns (ns, check_sym_interfaces);
1232
1233   gfc_traverse_user_op (ns, check_uop_interfaces);
1234
1235   for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++)
1236     {
1237       if (i == INTRINSIC_USER)
1238         continue;
1239
1240       if (i == INTRINSIC_ASSIGN)
1241         strcpy (interface_name, "intrinsic assignment operator");
1242       else
1243         sprintf (interface_name, "intrinsic '%s' operator",
1244                  gfc_op2string ((gfc_intrinsic_op) i));
1245
1246       if (check_interface0 (ns->op[i], interface_name))
1247         continue;
1248
1249       if (ns->op[i])
1250         gfc_check_operator_interface (ns->op[i]->sym, (gfc_intrinsic_op) i,
1251                                       ns->op[i]->where);
1252
1253       for (ns2 = ns; ns2; ns2 = ns2->parent)
1254         {
1255           if (check_interface1 (ns->op[i], ns2->op[i], 0,
1256                                 interface_name, true))
1257             goto done;
1258
1259           switch (i)
1260             {
1261               case INTRINSIC_EQ:
1262                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_EQ_OS],
1263                                       0, interface_name, true)) goto done;
1264                 break;
1265
1266               case INTRINSIC_EQ_OS:
1267                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_EQ],
1268                                       0, interface_name, true)) goto done;
1269                 break;
1270
1271               case INTRINSIC_NE:
1272                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_NE_OS],
1273                                       0, interface_name, true)) goto done;
1274                 break;
1275
1276               case INTRINSIC_NE_OS:
1277                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_NE],
1278                                       0, interface_name, true)) goto done;
1279                 break;
1280
1281               case INTRINSIC_GT:
1282                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_GT_OS],
1283                                       0, interface_name, true)) goto done;
1284                 break;
1285
1286               case INTRINSIC_GT_OS:
1287                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_GT],
1288                                       0, interface_name, true)) goto done;
1289                 break;
1290
1291               case INTRINSIC_GE:
1292                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_GE_OS],
1293                                       0, interface_name, true)) goto done;
1294                 break;
1295
1296               case INTRINSIC_GE_OS:
1297                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_GE],
1298                                       0, interface_name, true)) goto done;
1299                 break;
1300
1301               case INTRINSIC_LT:
1302                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_LT_OS],
1303                                       0, interface_name, true)) goto done;
1304                 break;
1305
1306               case INTRINSIC_LT_OS:
1307                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_LT],
1308                                       0, interface_name, true)) goto done;
1309                 break;
1310
1311               case INTRINSIC_LE:
1312                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_LE_OS],
1313                                       0, interface_name, true)) goto done;
1314                 break;
1315
1316               case INTRINSIC_LE_OS:
1317                 if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_LE],
1318                                       0, interface_name, true)) goto done;
1319                 break;
1320
1321               default:
1322                 break;
1323             }
1324         }
1325     }
1326
1327 done:
1328   gfc_current_ns = old_ns;
1329 }
1330
1331
1332 static int
1333 symbol_rank (gfc_symbol *sym)
1334 {
1335   return (sym->as == NULL) ? 0 : sym->as->rank;
1336 }
1337
1338
1339 /* Given a symbol of a formal argument list and an expression, if the
1340    formal argument is allocatable, check that the actual argument is
1341    allocatable. Returns nonzero if compatible, zero if not compatible.  */
1342
1343 static int
1344 compare_allocatable (gfc_symbol *formal, gfc_expr *actual)
1345 {
1346   symbol_attribute attr;
1347
1348   if (formal->attr.allocatable)
1349     {
1350       attr = gfc_expr_attr (actual);
1351       if (!attr.allocatable)
1352         return 0;
1353     }
1354
1355   return 1;
1356 }
1357
1358
1359 /* Given a symbol of a formal argument list and an expression, if the
1360    formal argument is a pointer, see if the actual argument is a
1361    pointer. Returns nonzero if compatible, zero if not compatible.  */
1362
1363 static int
1364 compare_pointer (gfc_symbol *formal, gfc_expr *actual)
1365 {
1366   symbol_attribute attr;
1367
1368   if (formal->attr.pointer)
1369     {
1370       attr = gfc_expr_attr (actual);
1371       if (!attr.pointer)
1372         return 0;
1373     }
1374
1375   return 1;
1376 }
1377
1378
1379 /* Given a symbol of a formal argument list and an expression, see if
1380    the two are compatible as arguments.  Returns nonzero if
1381    compatible, zero if not compatible.  */
1382
1383 static int
1384 compare_parameter (gfc_symbol *formal, gfc_expr *actual,
1385                    int ranks_must_agree, int is_elemental, locus *where)
1386 {
1387   gfc_ref *ref;
1388   bool rank_check;
1389
1390   /* If the formal arg has type BT_VOID, it's to one of the iso_c_binding
1391      procs c_f_pointer or c_f_procpointer, and we need to accept most
1392      pointers the user could give us.  This should allow that.  */
1393   if (formal->ts.type == BT_VOID)
1394     return 1;
1395
1396   if (formal->ts.type == BT_DERIVED
1397       && formal->ts.u.derived && formal->ts.u.derived->ts.is_iso_c
1398       && actual->ts.type == BT_DERIVED
1399       && actual->ts.u.derived && actual->ts.u.derived->ts.is_iso_c)
1400     return 1;
1401
1402   if (actual->ts.type == BT_PROCEDURE)
1403     {
1404       char err[200];
1405       gfc_symbol *act_sym = actual->symtree->n.sym;
1406
1407       if (formal->attr.flavor != FL_PROCEDURE)
1408         {
1409           if (where)
1410             gfc_error ("Invalid procedure argument at %L", &actual->where);
1411           return 0;
1412         }
1413
1414       if (!gfc_compare_interfaces (formal, act_sym, act_sym->name, 0, 1, err,
1415                                    sizeof(err)))
1416         {
1417           if (where)
1418             gfc_error ("Interface mismatch in dummy procedure '%s' at %L: %s",
1419                        formal->name, &actual->where, err);
1420           return 0;
1421         }
1422
1423       if (formal->attr.function && !act_sym->attr.function)
1424         {
1425           gfc_add_function (&act_sym->attr, act_sym->name,
1426           &act_sym->declared_at);
1427           if (act_sym->ts.type == BT_UNKNOWN
1428               && gfc_set_default_type (act_sym, 1, act_sym->ns) == FAILURE)
1429             return 0;
1430         }
1431       else if (formal->attr.subroutine && !act_sym->attr.subroutine)
1432         gfc_add_subroutine (&act_sym->attr, act_sym->name,
1433                             &act_sym->declared_at);
1434
1435       return 1;
1436     }
1437
1438   if ((actual->expr_type != EXPR_NULL || actual->ts.type != BT_UNKNOWN)
1439       && !gfc_compare_types (&formal->ts, &actual->ts))
1440     {
1441       if (where)
1442         gfc_error ("Type mismatch in argument '%s' at %L; passed %s to %s",
1443                    formal->name, &actual->where, gfc_typename (&actual->ts),
1444                    gfc_typename (&formal->ts));
1445       return 0;
1446     }
1447
1448   if (formal->attr.codimension)
1449     {
1450       gfc_ref *last = NULL;
1451
1452       if (actual->expr_type != EXPR_VARIABLE
1453           || (actual->ref == NULL
1454               && !actual->symtree->n.sym->attr.codimension))
1455         {
1456           if (where)
1457             gfc_error ("Actual argument to '%s' at %L must be a coarray",
1458                        formal->name, &actual->where);
1459           return 0;
1460         }
1461
1462       for (ref = actual->ref; ref; ref = ref->next)
1463         {
1464           if (ref->type == REF_ARRAY && ref->u.ar.codimen != 0)
1465             {
1466               if (where)
1467                 gfc_error ("Actual argument to '%s' at %L must be a coarray "
1468                            "and not coindexed", formal->name, &ref->u.ar.where);
1469               return 0;
1470             }
1471           if (ref->type == REF_ARRAY && ref->u.ar.as->corank
1472               && ref->u.ar.type != AR_FULL && ref->u.ar.dimen != 0)
1473             {
1474               if (where)
1475                 gfc_error ("Actual argument to '%s' at %L must be a coarray "
1476                            "and thus shall not have an array designator",
1477                            formal->name, &ref->u.ar.where);
1478               return 0;
1479             }
1480           if (ref->type == REF_COMPONENT)
1481             last = ref;
1482         }
1483
1484       if (last && !last->u.c.component->attr.codimension)
1485         {
1486           if (where)
1487             gfc_error ("Actual argument to '%s' at %L must be a coarray",
1488                        formal->name, &actual->where);
1489           return 0;
1490         }
1491
1492       /* F2008, 12.5.2.6.  */
1493       if (formal->attr.allocatable &&
1494           ((last && last->u.c.component->as->corank != formal->as->corank)
1495            || (!last
1496                && actual->symtree->n.sym->as->corank != formal->as->corank)))
1497         {
1498           if (where)
1499             gfc_error ("Corank mismatch in argument '%s' at %L (%d and %d)",
1500                    formal->name, &actual->where, formal->as->corank,
1501                    last ? last->u.c.component->as->corank
1502                         : actual->symtree->n.sym->as->corank);
1503           return 0;
1504         }
1505     }
1506
1507   if (symbol_rank (formal) == actual->rank)
1508     return 1;
1509
1510   rank_check = where != NULL && !is_elemental && formal->as
1511                && (formal->as->type == AS_ASSUMED_SHAPE
1512                    || formal->as->type == AS_DEFERRED)
1513                && actual->expr_type != EXPR_NULL;
1514
1515   /* Scalar & coindexed, see: F2008, Section 12.5.2.4.  */
1516   if (rank_check || ranks_must_agree
1517       || (formal->attr.pointer && actual->expr_type != EXPR_NULL)
1518       || (actual->rank != 0 && !(is_elemental || formal->attr.dimension))
1519       || (actual->rank == 0 && formal->as->type == AS_ASSUMED_SHAPE)
1520       || (actual->rank == 0 && formal->attr.dimension
1521           && gfc_is_coindexed (actual)))
1522     {
1523       if (where)
1524         gfc_error ("Rank mismatch in argument '%s' at %L (%d and %d)",
1525                    formal->name, &actual->where, symbol_rank (formal),
1526                    actual->rank);
1527       return 0;
1528     }
1529   else if (actual->rank != 0 && (is_elemental || formal->attr.dimension))
1530     return 1;
1531
1532   /* At this point, we are considering a scalar passed to an array.   This
1533      is valid (cf. F95 12.4.1.1; F2003 12.4.1.2),
1534      - if the actual argument is (a substring of) an element of a
1535        non-assumed-shape/non-pointer array;
1536      - (F2003) if the actual argument is of type character.  */
1537
1538   for (ref = actual->ref; ref; ref = ref->next)
1539     if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT
1540         && ref->u.ar.dimen > 0)
1541       break;
1542
1543   /* Not an array element.  */
1544   if (formal->ts.type == BT_CHARACTER
1545       && (ref == NULL
1546           || (actual->expr_type == EXPR_VARIABLE
1547               && (actual->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
1548                   || actual->symtree->n.sym->attr.pointer))))
1549     {
1550       if (where && (gfc_option.allow_std & GFC_STD_F2003) == 0)
1551         {
1552           gfc_error ("Fortran 2003: Scalar CHARACTER actual argument with "
1553                      "array dummy argument '%s' at %L",
1554                      formal->name, &actual->where);
1555           return 0;
1556         }
1557       else if ((gfc_option.allow_std & GFC_STD_F2003) == 0)
1558         return 0;
1559       else
1560         return 1;
1561     }
1562   else if (ref == NULL && actual->expr_type != EXPR_NULL)
1563     {
1564       if (where)
1565         gfc_error ("Rank mismatch in argument '%s' at %L (%d and %d)",
1566                    formal->name, &actual->where, symbol_rank (formal),
1567                    actual->rank);
1568       return 0;
1569     }
1570
1571   if (actual->expr_type == EXPR_VARIABLE
1572       && actual->symtree->n.sym->as
1573       && (actual->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
1574           || actual->symtree->n.sym->attr.pointer))
1575     {
1576       if (where)
1577         gfc_error ("Element of assumed-shaped array passed to dummy "
1578                    "argument '%s' at %L", formal->name, &actual->where);
1579       return 0;
1580     }
1581
1582   return 1;
1583 }
1584
1585
1586 /* Given a symbol of a formal argument list and an expression, see if
1587    the two are compatible as arguments.  Returns nonzero if
1588    compatible, zero if not compatible.  */
1589
1590 static int
1591 compare_parameter_protected (gfc_symbol *formal, gfc_expr *actual)
1592 {
1593   if (actual->expr_type != EXPR_VARIABLE)
1594     return 1;
1595
1596   if (!actual->symtree->n.sym->attr.is_protected)
1597     return 1;
1598
1599   if (!actual->symtree->n.sym->attr.use_assoc)
1600     return 1;
1601
1602   if (formal->attr.intent == INTENT_IN
1603       || formal->attr.intent == INTENT_UNKNOWN)
1604     return 1;
1605
1606   if (!actual->symtree->n.sym->attr.pointer)
1607     return 0;
1608
1609   if (actual->symtree->n.sym->attr.pointer && formal->attr.pointer)
1610     return 0;
1611
1612   return 1;
1613 }
1614
1615
1616 /* Returns the storage size of a symbol (formal argument) or
1617    zero if it cannot be determined.  */
1618
1619 static unsigned long
1620 get_sym_storage_size (gfc_symbol *sym)
1621 {
1622   int i;
1623   unsigned long strlen, elements;
1624
1625   if (sym->ts.type == BT_CHARACTER)
1626     {
1627       if (sym->ts.u.cl && sym->ts.u.cl->length
1628           && sym->ts.u.cl->length->expr_type == EXPR_CONSTANT)
1629         strlen = mpz_get_ui (sym->ts.u.cl->length->value.integer);
1630       else
1631         return 0;
1632     }
1633   else
1634     strlen = 1; 
1635
1636   if (symbol_rank (sym) == 0)
1637     return strlen;
1638
1639   elements = 1;
1640   if (sym->as->type != AS_EXPLICIT)
1641     return 0;
1642   for (i = 0; i < sym->as->rank; i++)
1643     {
1644       if (!sym->as || sym->as->upper[i]->expr_type != EXPR_CONSTANT
1645           || sym->as->lower[i]->expr_type != EXPR_CONSTANT)
1646         return 0;
1647
1648       elements *= mpz_get_ui (sym->as->upper[i]->value.integer)
1649                   - mpz_get_ui (sym->as->lower[i]->value.integer) + 1L;
1650     }
1651
1652   return strlen*elements;
1653 }
1654
1655
1656 /* Returns the storage size of an expression (actual argument) or
1657    zero if it cannot be determined. For an array element, it returns
1658    the remaining size as the element sequence consists of all storage
1659    units of the actual argument up to the end of the array.  */
1660
1661 static unsigned long
1662 get_expr_storage_size (gfc_expr *e)
1663 {
1664   int i;
1665   long int strlen, elements;
1666   long int substrlen = 0;
1667   bool is_str_storage = false;
1668   gfc_ref *ref;
1669
1670   if (e == NULL)
1671     return 0;
1672   
1673   if (e->ts.type == BT_CHARACTER)
1674     {
1675       if (e->ts.u.cl && e->ts.u.cl->length
1676           && e->ts.u.cl->length->expr_type == EXPR_CONSTANT)
1677         strlen = mpz_get_si (e->ts.u.cl->length->value.integer);
1678       else if (e->expr_type == EXPR_CONSTANT
1679                && (e->ts.u.cl == NULL || e->ts.u.cl->length == NULL))
1680         strlen = e->value.character.length;
1681       else
1682         return 0;
1683     }
1684   else
1685     strlen = 1; /* Length per element.  */
1686
1687   if (e->rank == 0 && !e->ref)
1688     return strlen;
1689
1690   elements = 1;
1691   if (!e->ref)
1692     {
1693       if (!e->shape)
1694         return 0;
1695       for (i = 0; i < e->rank; i++)
1696         elements *= mpz_get_si (e->shape[i]);
1697       return elements*strlen;
1698     }
1699
1700   for (ref = e->ref; ref; ref = ref->next)
1701     {
1702       if (ref->type == REF_SUBSTRING && ref->u.ss.start
1703           && ref->u.ss.start->expr_type == EXPR_CONSTANT)
1704         {
1705           if (is_str_storage)
1706             {
1707               /* The string length is the substring length.
1708                  Set now to full string length.  */
1709               if (ref->u.ss.length == NULL
1710                   || ref->u.ss.length->length->expr_type != EXPR_CONSTANT)
1711                 return 0;
1712
1713               strlen = mpz_get_ui (ref->u.ss.length->length->value.integer);
1714             }
1715           substrlen = strlen - mpz_get_ui (ref->u.ss.start->value.integer) + 1;
1716           continue;
1717         }
1718
1719       if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION
1720           && ref->u.ar.start && ref->u.ar.end && ref->u.ar.stride
1721           && ref->u.ar.as->upper)
1722         for (i = 0; i < ref->u.ar.dimen; i++)
1723           {
1724             long int start, end, stride;
1725             stride = 1;
1726
1727             if (ref->u.ar.stride[i])
1728               {
1729                 if (ref->u.ar.stride[i]->expr_type == EXPR_CONSTANT)
1730                   stride = mpz_get_si (ref->u.ar.stride[i]->value.integer);
1731                 else
1732                   return 0;
1733               }
1734
1735             if (ref->u.ar.start[i])
1736               {
1737                 if (ref->u.ar.start[i]->expr_type == EXPR_CONSTANT)
1738                   start = mpz_get_si (ref->u.ar.start[i]->value.integer);
1739                 else
1740                   return 0;
1741               }
1742             else if (ref->u.ar.as->lower[i]
1743                      && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT)
1744               start = mpz_get_si (ref->u.ar.as->lower[i]->value.integer);
1745             else
1746               return 0;
1747
1748             if (ref->u.ar.end[i])
1749               {
1750                 if (ref->u.ar.end[i]->expr_type == EXPR_CONSTANT)
1751                   end = mpz_get_si (ref->u.ar.end[i]->value.integer);
1752                 else
1753                   return 0;
1754               }
1755             else if (ref->u.ar.as->upper[i]
1756                      && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
1757               end = mpz_get_si (ref->u.ar.as->upper[i]->value.integer);
1758             else
1759               return 0;
1760
1761             elements *= (end - start)/stride + 1L;
1762           }
1763       else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_FULL
1764                && ref->u.ar.as->lower && ref->u.ar.as->upper)
1765         for (i = 0; i < ref->u.ar.as->rank; i++)
1766           {
1767             if (ref->u.ar.as->lower[i] && ref->u.ar.as->upper[i]
1768                 && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT
1769                 && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
1770               elements *= mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
1771                           - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
1772                           + 1L;
1773             else
1774               return 0;
1775           }
1776       else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT
1777                && e->expr_type == EXPR_VARIABLE)
1778         {
1779           if (e->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
1780               || e->symtree->n.sym->attr.pointer)
1781             {
1782               elements = 1;
1783               continue;
1784             }
1785
1786           /* Determine the number of remaining elements in the element
1787              sequence for array element designators.  */
1788           is_str_storage = true;
1789           for (i = ref->u.ar.dimen - 1; i >= 0; i--)
1790             {
1791               if (ref->u.ar.start[i] == NULL
1792                   || ref->u.ar.start[i]->expr_type != EXPR_CONSTANT
1793                   || ref->u.ar.as->upper[i] == NULL
1794                   || ref->u.ar.as->lower[i] == NULL
1795                   || ref->u.ar.as->upper[i]->expr_type != EXPR_CONSTANT
1796                   || ref->u.ar.as->lower[i]->expr_type != EXPR_CONSTANT)
1797                 return 0;
1798
1799               elements
1800                    = elements
1801                      * (mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
1802                         - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
1803                         + 1L)
1804                      - (mpz_get_si (ref->u.ar.start[i]->value.integer)
1805                         - mpz_get_si (ref->u.ar.as->lower[i]->value.integer));
1806             }
1807         }
1808       else
1809         return 0;
1810     }
1811
1812   if (substrlen)
1813     return (is_str_storage) ? substrlen + (elements-1)*strlen
1814                             : elements*strlen;
1815   else
1816     return elements*strlen;
1817 }
1818
1819
1820 /* Given an expression, check whether it is an array section
1821    which has a vector subscript. If it has, one is returned,
1822    otherwise zero.  */
1823
1824 static int
1825 has_vector_subscript (gfc_expr *e)
1826 {
1827   int i;
1828   gfc_ref *ref;
1829
1830   if (e == NULL || e->rank == 0 || e->expr_type != EXPR_VARIABLE)
1831     return 0;
1832
1833   for (ref = e->ref; ref; ref = ref->next)
1834     if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION)
1835       for (i = 0; i < ref->u.ar.dimen; i++)
1836         if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
1837           return 1;
1838
1839   return 0;
1840 }
1841
1842
1843 /* Given formal and actual argument lists, see if they are compatible.
1844    If they are compatible, the actual argument list is sorted to
1845    correspond with the formal list, and elements for missing optional
1846    arguments are inserted. If WHERE pointer is nonnull, then we issue
1847    errors when things don't match instead of just returning the status
1848    code.  */
1849
1850 static int
1851 compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
1852                        int ranks_must_agree, int is_elemental, locus *where)
1853 {
1854   gfc_actual_arglist **new_arg, *a, *actual, temp;
1855   gfc_formal_arglist *f;
1856   int i, n, na;
1857   unsigned long actual_size, formal_size;
1858
1859   actual = *ap;
1860
1861   if (actual == NULL && formal == NULL)
1862     return 1;
1863
1864   n = 0;
1865   for (f = formal; f; f = f->next)
1866     n++;
1867
1868   new_arg = (gfc_actual_arglist **) alloca (n * sizeof (gfc_actual_arglist *));
1869
1870   for (i = 0; i < n; i++)
1871     new_arg[i] = NULL;
1872
1873   na = 0;
1874   f = formal;
1875   i = 0;
1876
1877   for (a = actual; a; a = a->next, f = f->next)
1878     {
1879       /* Look for keywords but ignore g77 extensions like %VAL.  */
1880       if (a->name != NULL && a->name[0] != '%')
1881         {
1882           i = 0;
1883           for (f = formal; f; f = f->next, i++)
1884             {
1885               if (f->sym == NULL)
1886                 continue;
1887               if (strcmp (f->sym->name, a->name) == 0)
1888                 break;
1889             }
1890
1891           if (f == NULL)
1892             {
1893               if (where)
1894                 gfc_error ("Keyword argument '%s' at %L is not in "
1895                            "the procedure", a->name, &a->expr->where);
1896               return 0;
1897             }
1898
1899           if (new_arg[i] != NULL)
1900             {
1901               if (where)
1902                 gfc_error ("Keyword argument '%s' at %L is already associated "
1903                            "with another actual argument", a->name,
1904                            &a->expr->where);
1905               return 0;
1906             }
1907         }
1908
1909       if (f == NULL)
1910         {
1911           if (where)
1912             gfc_error ("More actual than formal arguments in procedure "
1913                        "call at %L", where);
1914
1915           return 0;
1916         }
1917
1918       if (f->sym == NULL && a->expr == NULL)
1919         goto match;
1920
1921       if (f->sym == NULL)
1922         {
1923           if (where)
1924             gfc_error ("Missing alternate return spec in subroutine call "
1925                        "at %L", where);
1926           return 0;
1927         }
1928
1929       if (a->expr == NULL)
1930         {
1931           if (where)
1932             gfc_error ("Unexpected alternate return spec in subroutine "
1933                        "call at %L", where);
1934           return 0;
1935         }
1936       
1937       if (!compare_parameter (f->sym, a->expr, ranks_must_agree,
1938                               is_elemental, where))
1939         return 0;
1940
1941       /* Special case for character arguments.  For allocatable, pointer
1942          and assumed-shape dummies, the string length needs to match
1943          exactly.  */
1944       if (a->expr->ts.type == BT_CHARACTER
1945            && a->expr->ts.u.cl && a->expr->ts.u.cl->length
1946            && a->expr->ts.u.cl->length->expr_type == EXPR_CONSTANT
1947            && f->sym->ts.u.cl && f->sym->ts.u.cl && f->sym->ts.u.cl->length
1948            && f->sym->ts.u.cl->length->expr_type == EXPR_CONSTANT
1949            && (f->sym->attr.pointer || f->sym->attr.allocatable
1950                || (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
1951            && (mpz_cmp (a->expr->ts.u.cl->length->value.integer,
1952                         f->sym->ts.u.cl->length->value.integer) != 0))
1953          {
1954            if (where && (f->sym->attr.pointer || f->sym->attr.allocatable))
1955              gfc_warning ("Character length mismatch (%ld/%ld) between actual "
1956                           "argument and pointer or allocatable dummy argument "
1957                           "'%s' at %L",
1958                           mpz_get_si (a->expr->ts.u.cl->length->value.integer),
1959                           mpz_get_si (f->sym->ts.u.cl->length->value.integer),
1960                           f->sym->name, &a->expr->where);
1961            else if (where)
1962              gfc_warning ("Character length mismatch (%ld/%ld) between actual "
1963                           "argument and assumed-shape dummy argument '%s' "
1964                           "at %L",
1965                           mpz_get_si (a->expr->ts.u.cl->length->value.integer),
1966                           mpz_get_si (f->sym->ts.u.cl->length->value.integer),
1967                           f->sym->name, &a->expr->where);
1968            return 0;
1969          }
1970
1971       actual_size = get_expr_storage_size (a->expr);
1972       formal_size = get_sym_storage_size (f->sym);
1973       if (actual_size != 0
1974             && actual_size < formal_size
1975             && a->expr->ts.type != BT_PROCEDURE)
1976         {
1977           if (a->expr->ts.type == BT_CHARACTER && !f->sym->as && where)
1978             gfc_warning ("Character length of actual argument shorter "
1979                         "than of dummy argument '%s' (%lu/%lu) at %L",
1980                         f->sym->name, actual_size, formal_size,
1981                         &a->expr->where);
1982           else if (where)
1983             gfc_warning ("Actual argument contains too few "
1984                         "elements for dummy argument '%s' (%lu/%lu) at %L",
1985                         f->sym->name, actual_size, formal_size,
1986                         &a->expr->where);
1987           return  0;
1988         }
1989
1990       /* Satisfy 12.4.1.3 by ensuring that a procedure pointer actual argument
1991          is provided for a procedure pointer formal argument.  */
1992       if (f->sym->attr.proc_pointer
1993           && !((a->expr->expr_type == EXPR_VARIABLE
1994                 && a->expr->symtree->n.sym->attr.proc_pointer)
1995                || (a->expr->expr_type == EXPR_FUNCTION
1996                    && a->expr->symtree->n.sym->result->attr.proc_pointer)
1997                || gfc_is_proc_ptr_comp (a->expr, NULL)))
1998         {
1999           if (where)
2000             gfc_error ("Expected a procedure pointer for argument '%s' at %L",
2001                        f->sym->name, &a->expr->where);
2002           return 0;
2003         }
2004
2005       /* Satisfy 12.4.1.2 by ensuring that a procedure actual argument is
2006          provided for a procedure formal argument.  */
2007       if (a->expr->ts.type != BT_PROCEDURE && !gfc_is_proc_ptr_comp (a->expr, NULL)
2008           && a->expr->expr_type == EXPR_VARIABLE
2009           && f->sym->attr.flavor == FL_PROCEDURE)
2010         {
2011           if (where)
2012             gfc_error ("Expected a procedure for argument '%s' at %L",
2013                        f->sym->name, &a->expr->where);
2014           return 0;
2015         }
2016
2017       if (f->sym->attr.flavor == FL_PROCEDURE && f->sym->attr.pure
2018           && a->expr->ts.type == BT_PROCEDURE
2019           && !a->expr->symtree->n.sym->attr.pure)
2020         {
2021           if (where)
2022             gfc_error ("Expected a PURE procedure for argument '%s' at %L",
2023                        f->sym->name, &a->expr->where);
2024           return 0;
2025         }
2026
2027       if (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE
2028           && a->expr->expr_type == EXPR_VARIABLE
2029           && a->expr->symtree->n.sym->as
2030           && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SIZE
2031           && (a->expr->ref == NULL
2032               || (a->expr->ref->type == REF_ARRAY
2033                   && a->expr->ref->u.ar.type == AR_FULL)))
2034         {
2035           if (where)
2036             gfc_error ("Actual argument for '%s' cannot be an assumed-size"
2037                        " array at %L", f->sym->name, where);
2038           return 0;
2039         }
2040
2041       if (a->expr->expr_type != EXPR_NULL
2042           && compare_pointer (f->sym, a->expr) == 0)
2043         {
2044           if (where)
2045             gfc_error ("Actual argument for '%s' must be a pointer at %L",
2046                        f->sym->name, &a->expr->where);
2047           return 0;
2048         }
2049
2050       /* Fortran 2008, C1242.  */
2051       if (f->sym->attr.pointer && gfc_is_coindexed (a->expr))
2052         {
2053           if (where)
2054             gfc_error ("Coindexed actual argument at %L to pointer "
2055                        "dummy '%s'",
2056                        &a->expr->where, f->sym->name);
2057           return 0;
2058         }
2059
2060       /* Fortran 2008, 12.5.2.5 (no constraint).  */
2061       if (a->expr->expr_type == EXPR_VARIABLE
2062           && f->sym->attr.intent != INTENT_IN
2063           && f->sym->attr.allocatable
2064           && gfc_is_coindexed (a->expr))
2065         {
2066           if (where)
2067             gfc_error ("Coindexed actual argument at %L to allocatable "
2068                        "dummy '%s' requires INTENT(IN)",
2069                        &a->expr->where, f->sym->name);
2070           return 0;
2071         }
2072
2073       /* Fortran 2008, C1237.  */
2074       if (a->expr->expr_type == EXPR_VARIABLE
2075           && (f->sym->attr.asynchronous || f->sym->attr.volatile_)
2076           && gfc_is_coindexed (a->expr)
2077           && (a->expr->symtree->n.sym->attr.volatile_
2078               || a->expr->symtree->n.sym->attr.asynchronous))
2079         {
2080           if (where)
2081             gfc_error ("Coindexed ASYNCHRONOUS or VOLATILE actual argument at "
2082                        "at %L requires that dummy %s' has neither "
2083                        "ASYNCHRONOUS nor VOLATILE", &a->expr->where,
2084                        f->sym->name);
2085           return 0;
2086         }
2087
2088       /* Fortran 2008, 12.5.2.4 (no constraint).  */
2089       if (a->expr->expr_type == EXPR_VARIABLE
2090           && f->sym->attr.intent != INTENT_IN && !f->sym->attr.value
2091           && gfc_is_coindexed (a->expr)
2092           && gfc_has_ultimate_allocatable (a->expr))
2093         {
2094           if (where)
2095             gfc_error ("Coindexed actual argument at %L with allocatable "
2096                        "ultimate component to dummy '%s' requires either VALUE "
2097                        "or INTENT(IN)", &a->expr->where, f->sym->name);
2098           return 0;
2099         }
2100
2101       if (a->expr->expr_type != EXPR_NULL
2102           && compare_allocatable (f->sym, a->expr) == 0)
2103         {
2104           if (where)
2105             gfc_error ("Actual argument for '%s' must be ALLOCATABLE at %L",
2106                        f->sym->name, &a->expr->where);
2107           return 0;
2108         }
2109
2110       /* Check intent = OUT/INOUT for definable actual argument.  */
2111       if ((a->expr->expr_type != EXPR_VARIABLE
2112            || (a->expr->symtree->n.sym->attr.flavor != FL_VARIABLE
2113                && a->expr->symtree->n.sym->attr.flavor != FL_PROCEDURE))
2114           && (f->sym->attr.intent == INTENT_OUT
2115               || f->sym->attr.intent == INTENT_INOUT))
2116         {
2117           if (where)
2118             gfc_error ("Actual argument at %L must be definable as "
2119                        "the dummy argument '%s' is INTENT = OUT/INOUT",
2120                        &a->expr->where, f->sym->name);
2121           return 0;
2122         }
2123
2124       if (!compare_parameter_protected(f->sym, a->expr))
2125         {
2126           if (where)
2127             gfc_error ("Actual argument at %L is use-associated with "
2128                        "PROTECTED attribute and dummy argument '%s' is "
2129                        "INTENT = OUT/INOUT",
2130                        &a->expr->where,f->sym->name);
2131           return 0;
2132         }
2133
2134       if ((f->sym->attr.intent == INTENT_OUT
2135            || f->sym->attr.intent == INTENT_INOUT
2136            || f->sym->attr.volatile_)
2137           && has_vector_subscript (a->expr))
2138         {
2139           if (where)
2140             gfc_error ("Array-section actual argument with vector subscripts "
2141                        "at %L is incompatible with INTENT(OUT), INTENT(INOUT) "
2142                        "or VOLATILE attribute of the dummy argument '%s'",
2143                        &a->expr->where, f->sym->name);
2144           return 0;
2145         }
2146
2147       /* C1232 (R1221) For an actual argument which is an array section or
2148          an assumed-shape array, the dummy argument shall be an assumed-
2149          shape array, if the dummy argument has the VOLATILE attribute.  */
2150
2151       if (f->sym->attr.volatile_
2152           && a->expr->symtree->n.sym->as
2153           && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
2154           && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2155         {
2156           if (where)
2157             gfc_error ("Assumed-shape actual argument at %L is "
2158                        "incompatible with the non-assumed-shape "
2159                        "dummy argument '%s' due to VOLATILE attribute",
2160                        &a->expr->where,f->sym->name);
2161           return 0;
2162         }
2163
2164       if (f->sym->attr.volatile_
2165           && a->expr->ref && a->expr->ref->u.ar.type == AR_SECTION
2166           && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2167         {
2168           if (where)
2169             gfc_error ("Array-section actual argument at %L is "
2170                        "incompatible with the non-assumed-shape "
2171                        "dummy argument '%s' due to VOLATILE attribute",
2172                        &a->expr->where,f->sym->name);
2173           return 0;
2174         }
2175
2176       /* C1233 (R1221) For an actual argument which is a pointer array, the
2177          dummy argument shall be an assumed-shape or pointer array, if the
2178          dummy argument has the VOLATILE attribute.  */
2179
2180       if (f->sym->attr.volatile_
2181           && a->expr->symtree->n.sym->attr.pointer
2182           && a->expr->symtree->n.sym->as
2183           && !(f->sym->as
2184                && (f->sym->as->type == AS_ASSUMED_SHAPE
2185                    || f->sym->attr.pointer)))
2186         {
2187           if (where)
2188             gfc_error ("Pointer-array actual argument at %L requires "
2189                        "an assumed-shape or pointer-array dummy "
2190                        "argument '%s' due to VOLATILE attribute",
2191                        &a->expr->where,f->sym->name);
2192           return 0;
2193         }
2194
2195     match:
2196       if (a == actual)
2197         na = i;
2198
2199       new_arg[i++] = a;
2200     }
2201
2202   /* Make sure missing actual arguments are optional.  */
2203   i = 0;
2204   for (f = formal; f; f = f->next, i++)
2205     {
2206       if (new_arg[i] != NULL)
2207         continue;
2208       if (f->sym == NULL)
2209         {
2210           if (where)
2211             gfc_error ("Missing alternate return spec in subroutine call "
2212                        "at %L", where);
2213           return 0;
2214         }
2215       if (!f->sym->attr.optional)
2216         {
2217           if (where)
2218             gfc_error ("Missing actual argument for argument '%s' at %L",
2219                        f->sym->name, where);
2220           return 0;
2221         }
2222     }
2223
2224   /* The argument lists are compatible.  We now relink a new actual
2225      argument list with null arguments in the right places.  The head
2226      of the list remains the head.  */
2227   for (i = 0; i < n; i++)
2228     if (new_arg[i] == NULL)
2229       new_arg[i] = gfc_get_actual_arglist ();
2230
2231   if (na != 0)
2232     {
2233       temp = *new_arg[0];
2234       *new_arg[0] = *actual;
2235       *actual = temp;
2236
2237       a = new_arg[0];
2238       new_arg[0] = new_arg[na];
2239       new_arg[na] = a;
2240     }
2241
2242   for (i = 0; i < n - 1; i++)
2243     new_arg[i]->next = new_arg[i + 1];
2244
2245   new_arg[i]->next = NULL;
2246
2247   if (*ap == NULL && n > 0)
2248     *ap = new_arg[0];
2249
2250   /* Note the types of omitted optional arguments.  */
2251   for (a = *ap, f = formal; a; a = a->next, f = f->next)
2252     if (a->expr == NULL && a->label == NULL)
2253       a->missing_arg_type = f->sym->ts.type;
2254
2255   return 1;
2256 }
2257
2258
2259 typedef struct
2260 {
2261   gfc_formal_arglist *f;
2262   gfc_actual_arglist *a;
2263 }
2264 argpair;
2265
2266 /* qsort comparison function for argument pairs, with the following
2267    order:
2268     - p->a->expr == NULL
2269     - p->a->expr->expr_type != EXPR_VARIABLE
2270     - growing p->a->expr->symbol.  */
2271
2272 static int
2273 pair_cmp (const void *p1, const void *p2)
2274 {
2275   const gfc_actual_arglist *a1, *a2;
2276
2277   /* *p1 and *p2 are elements of the to-be-sorted array.  */
2278   a1 = ((const argpair *) p1)->a;
2279   a2 = ((const argpair *) p2)->a;
2280   if (!a1->expr)
2281     {
2282       if (!a2->expr)
2283         return 0;
2284       return -1;
2285     }
2286   if (!a2->expr)
2287     return 1;
2288   if (a1->expr->expr_type != EXPR_VARIABLE)
2289     {
2290       if (a2->expr->expr_type != EXPR_VARIABLE)
2291         return 0;
2292       return -1;
2293     }
2294   if (a2->expr->expr_type != EXPR_VARIABLE)
2295     return 1;
2296   return a1->expr->symtree->n.sym < a2->expr->symtree->n.sym;
2297 }
2298
2299
2300 /* Given two expressions from some actual arguments, test whether they
2301    refer to the same expression. The analysis is conservative.
2302    Returning FAILURE will produce no warning.  */
2303
2304 static gfc_try
2305 compare_actual_expr (gfc_expr *e1, gfc_expr *e2)
2306 {
2307   const gfc_ref *r1, *r2;
2308
2309   if (!e1 || !e2
2310       || e1->expr_type != EXPR_VARIABLE
2311       || e2->expr_type != EXPR_VARIABLE
2312       || e1->symtree->n.sym != e2->symtree->n.sym)
2313     return FAILURE;
2314
2315   /* TODO: improve comparison, see expr.c:show_ref().  */
2316   for (r1 = e1->ref, r2 = e2->ref; r1 && r2; r1 = r1->next, r2 = r2->next)
2317     {
2318       if (r1->type != r2->type)
2319         return FAILURE;
2320       switch (r1->type)
2321         {
2322         case REF_ARRAY:
2323           if (r1->u.ar.type != r2->u.ar.type)
2324             return FAILURE;
2325           /* TODO: At the moment, consider only full arrays;
2326              we could do better.  */
2327           if (r1->u.ar.type != AR_FULL || r2->u.ar.type != AR_FULL)
2328             return FAILURE;
2329           break;
2330
2331         case REF_COMPONENT:
2332           if (r1->u.c.component != r2->u.c.component)
2333             return FAILURE;
2334           break;
2335
2336         case REF_SUBSTRING:
2337           return FAILURE;
2338
2339         default:
2340           gfc_internal_error ("compare_actual_expr(): Bad component code");
2341         }
2342     }
2343   if (!r1 && !r2)
2344     return SUCCESS;
2345   return FAILURE;
2346 }
2347
2348
2349 /* Given formal and actual argument lists that correspond to one
2350    another, check that identical actual arguments aren't not
2351    associated with some incompatible INTENTs.  */
2352
2353 static gfc_try
2354 check_some_aliasing (gfc_formal_arglist *f, gfc_actual_arglist *a)
2355 {
2356   sym_intent f1_intent, f2_intent;
2357   gfc_formal_arglist *f1;
2358   gfc_actual_arglist *a1;
2359   size_t n, i, j;
2360   argpair *p;
2361   gfc_try t = SUCCESS;
2362
2363   n = 0;
2364   for (f1 = f, a1 = a;; f1 = f1->next, a1 = a1->next)
2365     {
2366       if (f1 == NULL && a1 == NULL)
2367         break;
2368       if (f1 == NULL || a1 == NULL)
2369         gfc_internal_error ("check_some_aliasing(): List mismatch");
2370       n++;
2371     }
2372   if (n == 0)
2373     return t;
2374   p = (argpair *) alloca (n * sizeof (argpair));
2375
2376   for (i = 0, f1 = f, a1 = a; i < n; i++, f1 = f1->next, a1 = a1->next)
2377     {
2378       p[i].f = f1;
2379       p[i].a = a1;
2380     }
2381
2382   qsort (p, n, sizeof (argpair), pair_cmp);
2383
2384   for (i = 0; i < n; i++)
2385     {
2386       if (!p[i].a->expr
2387           || p[i].a->expr->expr_type != EXPR_VARIABLE
2388           || p[i].a->expr->ts.type == BT_PROCEDURE)
2389         continue;
2390       f1_intent = p[i].f->sym->attr.intent;
2391       for (j = i + 1; j < n; j++)
2392         {
2393           /* Expected order after the sort.  */
2394           if (!p[j].a->expr || p[j].a->expr->expr_type != EXPR_VARIABLE)
2395             gfc_internal_error ("check_some_aliasing(): corrupted data");
2396
2397           /* Are the expression the same?  */
2398           if (compare_actual_expr (p[i].a->expr, p[j].a->expr) == FAILURE)
2399             break;
2400           f2_intent = p[j].f->sym->attr.intent;
2401           if ((f1_intent == INTENT_IN && f2_intent == INTENT_OUT)
2402               || (f1_intent == INTENT_OUT && f2_intent == INTENT_IN))
2403             {
2404               gfc_warning ("Same actual argument associated with INTENT(%s) "
2405                            "argument '%s' and INTENT(%s) argument '%s' at %L",
2406                            gfc_intent_string (f1_intent), p[i].f->sym->name,
2407                            gfc_intent_string (f2_intent), p[j].f->sym->name,
2408                            &p[i].a->expr->where);
2409               t = FAILURE;
2410             }
2411         }
2412     }
2413
2414   return t;
2415 }
2416
2417
2418 /* Given a symbol of a formal argument list and an expression,
2419    return nonzero if their intents are compatible, zero otherwise.  */
2420
2421 static int
2422 compare_parameter_intent (gfc_symbol *formal, gfc_expr *actual)
2423 {
2424   if (actual->symtree->n.sym->attr.pointer && !formal->attr.pointer)
2425     return 1;
2426
2427   if (actual->symtree->n.sym->attr.intent != INTENT_IN)
2428     return 1;
2429
2430   if (formal->attr.intent == INTENT_INOUT || formal->attr.intent == INTENT_OUT)
2431     return 0;
2432
2433   return 1;
2434 }
2435
2436
2437 /* Given formal and actual argument lists that correspond to one
2438    another, check that they are compatible in the sense that intents
2439    are not mismatched.  */
2440
2441 static gfc_try
2442 check_intents (gfc_formal_arglist *f, gfc_actual_arglist *a)
2443 {
2444   sym_intent f_intent;
2445
2446   for (;; f = f->next, a = a->next)
2447     {
2448       if (f == NULL && a == NULL)
2449         break;
2450       if (f == NULL || a == NULL)
2451         gfc_internal_error ("check_intents(): List mismatch");
2452
2453       if (a->expr == NULL || a->expr->expr_type != EXPR_VARIABLE)
2454         continue;
2455
2456       f_intent = f->sym->attr.intent;
2457
2458       if (!compare_parameter_intent(f->sym, a->expr))
2459         {
2460           gfc_error ("Procedure argument at %L is INTENT(IN) while interface "
2461                      "specifies INTENT(%s)", &a->expr->where,
2462                      gfc_intent_string (f_intent));
2463           return FAILURE;
2464         }
2465
2466       if (gfc_pure (NULL) && gfc_impure_variable (a->expr->symtree->n.sym))
2467         {
2468           if (f_intent == INTENT_INOUT || f_intent == INTENT_OUT)
2469             {
2470               gfc_error ("Procedure argument at %L is local to a PURE "
2471                          "procedure and is passed to an INTENT(%s) argument",
2472                          &a->expr->where, gfc_intent_string (f_intent));
2473               return FAILURE;
2474             }
2475
2476           if (f->sym->attr.pointer)
2477             {
2478               gfc_error ("Procedure argument at %L is local to a PURE "
2479                          "procedure and has the POINTER attribute",
2480                          &a->expr->where);
2481               return FAILURE;
2482             }
2483         }
2484
2485        /* Fortran 2008, C1283.  */
2486        if (gfc_pure (NULL) && gfc_is_coindexed (a->expr))
2487         {
2488           if (f_intent == INTENT_INOUT || f_intent == INTENT_OUT)
2489             {
2490               gfc_error ("Coindexed actual argument at %L in PURE procedure "
2491                          "is passed to an INTENT(%s) argument",
2492                          &a->expr->where, gfc_intent_string (f_intent));
2493               return FAILURE;
2494             }
2495
2496           if (f->sym->attr.pointer)
2497             {
2498               gfc_error ("Coindexed actual argument at %L in PURE procedure "
2499                          "is passed to a POINTER dummy argument",
2500                          &a->expr->where);
2501               return FAILURE;
2502             }
2503         }
2504
2505        /* F2008, Section 12.5.2.4.  */
2506        if (a->expr->ts.type == BT_CLASS && f->sym->ts.type == BT_CLASS
2507            && gfc_is_coindexed (a->expr))
2508          {
2509            gfc_error ("Coindexed polymorphic actual argument at %L is passed "
2510                       "polymorphic dummy argument '%s'",
2511                          &a->expr->where, f->sym->name);
2512            return FAILURE;
2513          }
2514     }
2515
2516   return SUCCESS;
2517 }
2518
2519
2520 /* Check how a procedure is used against its interface.  If all goes
2521    well, the actual argument list will also end up being properly
2522    sorted.  */
2523
2524 void
2525 gfc_procedure_use (gfc_symbol *sym, gfc_actual_arglist **ap, locus *where)
2526 {
2527
2528   /* Warn about calls with an implicit interface.  Special case
2529      for calling a ISO_C_BINDING becase c_loc and c_funloc
2530      are pseudo-unknown.  Additionally, warn about procedures not
2531      explicitly declared at all if requested.  */
2532   if (sym->attr.if_source == IFSRC_UNKNOWN && ! sym->attr.is_iso_c)
2533     {
2534       if (gfc_option.warn_implicit_interface)
2535         gfc_warning ("Procedure '%s' called with an implicit interface at %L",
2536                      sym->name, where);
2537       else if (gfc_option.warn_implicit_procedure
2538                && sym->attr.proc == PROC_UNKNOWN)
2539         gfc_warning ("Procedure '%s' called at %L is not explicitly declared",
2540                      sym->name, where);
2541     }
2542
2543   if (sym->attr.if_source == IFSRC_UNKNOWN)
2544     {
2545       gfc_actual_arglist *a;
2546       for (a = *ap; a; a = a->next)
2547         {
2548           /* Skip g77 keyword extensions like %VAL, %REF, %LOC.  */
2549           if (a->name != NULL && a->name[0] != '%')
2550             {
2551               gfc_error("Keyword argument requires explicit interface "
2552                         "for procedure '%s' at %L", sym->name, &a->expr->where);
2553               break;
2554             }
2555         }
2556
2557       return;
2558     }
2559
2560   if (!compare_actual_formal (ap, sym->formal, 0, sym->attr.elemental, where))
2561     return;
2562
2563   check_intents (sym->formal, *ap);
2564   if (gfc_option.warn_aliasing)
2565     check_some_aliasing (sym->formal, *ap);
2566 }
2567
2568
2569 /* Check how a procedure pointer component is used against its interface.
2570    If all goes well, the actual argument list will also end up being properly
2571    sorted. Completely analogous to gfc_procedure_use.  */
2572
2573 void
2574 gfc_ppc_use (gfc_component *comp, gfc_actual_arglist **ap, locus *where)
2575 {
2576
2577   /* Warn about calls with an implicit interface.  Special case
2578      for calling a ISO_C_BINDING becase c_loc and c_funloc
2579      are pseudo-unknown.  */
2580   if (gfc_option.warn_implicit_interface
2581       && comp->attr.if_source == IFSRC_UNKNOWN
2582       && !comp->attr.is_iso_c)
2583     gfc_warning ("Procedure pointer component '%s' called with an implicit "
2584                  "interface at %L", comp->name, where);
2585
2586   if (comp->attr.if_source == IFSRC_UNKNOWN)
2587     {
2588       gfc_actual_arglist *a;
2589       for (a = *ap; a; a = a->next)
2590         {
2591           /* Skip g77 keyword extensions like %VAL, %REF, %LOC.  */
2592           if (a->name != NULL && a->name[0] != '%')
2593             {
2594               gfc_error("Keyword argument requires explicit interface "
2595                         "for procedure pointer component '%s' at %L",
2596                         comp->name, &a->expr->where);
2597               break;
2598             }
2599         }
2600
2601       return;
2602     }
2603
2604   if (!compare_actual_formal (ap, comp->formal, 0, comp->attr.elemental, where))
2605     return;
2606
2607   check_intents (comp->formal, *ap);
2608   if (gfc_option.warn_aliasing)
2609     check_some_aliasing (comp->formal, *ap);
2610 }
2611
2612
2613 /* Try if an actual argument list matches the formal list of a symbol,
2614    respecting the symbol's attributes like ELEMENTAL.  This is used for
2615    GENERIC resolution.  */
2616
2617 bool
2618 gfc_arglist_matches_symbol (gfc_actual_arglist** args, gfc_symbol* sym)
2619 {
2620   bool r;
2621
2622   gcc_assert (sym->attr.flavor == FL_PROCEDURE);
2623
2624   r = !sym->attr.elemental;
2625   if (compare_actual_formal (args, sym->formal, r, !r, NULL))
2626     {
2627       check_intents (sym->formal, *args);
2628       if (gfc_option.warn_aliasing)
2629         check_some_aliasing (sym->formal, *args);
2630       return true;
2631     }
2632
2633   return false;
2634 }
2635
2636
2637 /* Given an interface pointer and an actual argument list, search for
2638    a formal argument list that matches the actual.  If found, returns
2639    a pointer to the symbol of the correct interface.  Returns NULL if
2640    not found.  */
2641
2642 gfc_symbol *
2643 gfc_search_interface (gfc_interface *intr, int sub_flag,
2644                       gfc_actual_arglist **ap)
2645 {
2646   gfc_symbol *elem_sym = NULL;
2647   for (; intr; intr = intr->next)
2648     {
2649       if (sub_flag && intr->sym->attr.function)
2650         continue;
2651       if (!sub_flag && intr->sym->attr.subroutine)
2652         continue;
2653
2654       if (gfc_arglist_matches_symbol (ap, intr->sym))
2655         {
2656           /* Satisfy 12.4.4.1 such that an elemental match has lower
2657              weight than a non-elemental match.  */ 
2658           if (intr->sym->attr.elemental)
2659             {
2660               elem_sym = intr->sym;
2661               continue;
2662             }
2663           return intr->sym;
2664         }
2665     }
2666
2667   return elem_sym ? elem_sym : NULL;
2668 }
2669
2670
2671 /* Do a brute force recursive search for a symbol.  */
2672
2673 static gfc_symtree *
2674 find_symtree0 (gfc_symtree *root, gfc_symbol *sym)
2675 {
2676   gfc_symtree * st;
2677
2678   if (root->n.sym == sym)
2679     return root;
2680
2681   st = NULL;
2682   if (root->left)
2683     st = find_symtree0 (root->left, sym);
2684   if (root->right && ! st)
2685     st = find_symtree0 (root->right, sym);
2686   return st;
2687 }
2688
2689
2690 /* Find a symtree for a symbol.  */
2691
2692 gfc_symtree *
2693 gfc_find_sym_in_symtree (gfc_symbol *sym)
2694 {
2695   gfc_symtree *st;
2696   gfc_namespace *ns;
2697
2698   /* First try to find it by name.  */
2699   gfc_find_sym_tree (sym->name, gfc_current_ns, 1, &st);
2700   if (st && st->n.sym == sym)
2701     return st;
2702
2703   /* If it's been renamed, resort to a brute-force search.  */
2704   /* TODO: avoid having to do this search.  If the symbol doesn't exist
2705      in the symtree for the current namespace, it should probably be added.  */
2706   for (ns = gfc_current_ns; ns; ns = ns->parent)
2707     {
2708       st = find_symtree0 (ns->sym_root, sym);
2709       if (st)
2710         return st;
2711     }
2712   gfc_internal_error ("Unable to find symbol %s", sym->name);
2713   /* Not reached.  */
2714 }
2715
2716
2717 /* See if the arglist to an operator-call contains a derived-type argument
2718    with a matching type-bound operator.  If so, return the matching specific
2719    procedure defined as operator-target as well as the base-object to use
2720    (which is the found derived-type argument with operator).  */
2721
2722 static gfc_typebound_proc*
2723 matching_typebound_op (gfc_expr** tb_base,
2724                        gfc_actual_arglist* args,
2725                        gfc_intrinsic_op op, const char* uop)
2726 {
2727   gfc_actual_arglist* base;
2728
2729   for (base = args; base; base = base->next)
2730     if (base->expr->ts.type == BT_DERIVED || base->expr->ts.type == BT_CLASS)
2731       {
2732         gfc_typebound_proc* tb;
2733         gfc_symbol* derived;
2734         gfc_try result;
2735
2736         if (base->expr->ts.type == BT_CLASS)
2737           derived = base->expr->ts.u.derived->components->ts.u.derived;
2738         else
2739           derived = base->expr->ts.u.derived;
2740
2741         if (op == INTRINSIC_USER)
2742           {
2743             gfc_symtree* tb_uop;
2744
2745             gcc_assert (uop);
2746             tb_uop = gfc_find_typebound_user_op (derived, &result, uop,
2747                                                  false, NULL);
2748
2749             if (tb_uop)
2750               tb = tb_uop->n.tb;
2751             else
2752               tb = NULL;
2753           }
2754         else
2755           tb = gfc_find_typebound_intrinsic_op (derived, &result, op,
2756                                                 false, NULL);
2757
2758         /* This means we hit a PRIVATE operator which is use-associated and
2759            should thus not be seen.  */
2760         if (result == FAILURE)
2761           tb = NULL;
2762
2763         /* Look through the super-type hierarchy for a matching specific
2764            binding.  */
2765         for (; tb; tb = tb->overridden)
2766           {
2767             gfc_tbp_generic* g;
2768
2769             gcc_assert (tb->is_generic);
2770             for (g = tb->u.generic; g; g = g->next)
2771               {
2772                 gfc_symbol* target;
2773                 gfc_actual_arglist* argcopy;
2774                 bool matches;
2775
2776                 gcc_assert (g->specific);
2777                 if (g->specific->error)
2778                   continue;
2779
2780                 target = g->specific->u.specific->n.sym;
2781
2782                 /* Check if this arglist matches the formal.  */
2783                 argcopy = gfc_copy_actual_arglist (args);
2784                 matches = gfc_arglist_matches_symbol (&argcopy, target);
2785                 gfc_free_actual_arglist (argcopy);
2786
2787                 /* Return if we found a match.  */
2788                 if (matches)
2789                   {
2790                     *tb_base = base->expr;
2791                     return g->specific;
2792                   }
2793               }
2794           }
2795       }
2796
2797   return NULL;
2798 }
2799
2800
2801 /* For the 'actual arglist' of an operator call and a specific typebound
2802    procedure that has been found the target of a type-bound operator, build the
2803    appropriate EXPR_COMPCALL and resolve it.  We take this indirection over
2804    type-bound procedures rather than resolving type-bound operators 'directly'
2805    so that we can reuse the existing logic.  */
2806
2807 static void
2808 build_compcall_for_operator (gfc_expr* e, gfc_actual_arglist* actual,
2809                              gfc_expr* base, gfc_typebound_proc* target)
2810 {
2811   e->expr_type = EXPR_COMPCALL;
2812   e->value.compcall.tbp = target;
2813   e->value.compcall.name = "operator"; /* Should not matter.  */
2814   e->value.compcall.actual = actual;
2815   e->value.compcall.base_object = base;
2816   e->value.compcall.ignore_pass = 1;
2817   e->value.compcall.assign = 0;
2818 }
2819
2820
2821 /* This subroutine is called when an expression is being resolved.
2822    The expression node in question is either a user defined operator
2823    or an intrinsic operator with arguments that aren't compatible
2824    with the operator.  This subroutine builds an actual argument list
2825    corresponding to the operands, then searches for a compatible
2826    interface.  If one is found, the expression node is replaced with
2827    the appropriate function call.
2828    real_error is an additional output argument that specifies if FAILURE
2829    is because of some real error and not because no match was found.  */
2830
2831 gfc_try
2832 gfc_extend_expr (gfc_expr *e, bool *real_error)
2833 {
2834   gfc_actual_arglist *actual;
2835   gfc_symbol *sym;
2836   gfc_namespace *ns;
2837   gfc_user_op *uop;
2838   gfc_intrinsic_op i;
2839
2840   sym = NULL;
2841
2842   actual = gfc_get_actual_arglist ();
2843   actual->expr = e->value.op.op1;
2844
2845   *real_error = false;
2846
2847   if (e->value.op.op2 != NULL)
2848     {
2849       actual->next = gfc_get_actual_arglist ();
2850       actual->next->expr = e->value.op.op2;
2851     }
2852
2853   i = fold_unary_intrinsic (e->value.op.op);
2854
2855   if (i == INTRINSIC_USER)
2856     {
2857       for (ns = gfc_current_ns; ns; ns = ns->parent)
2858         {
2859           uop = gfc_find_uop (e->value.op.uop->name, ns);
2860           if (uop == NULL)
2861             continue;
2862
2863           sym = gfc_search_interface (uop->op, 0, &actual);
2864           if (sym != NULL)
2865             break;
2866         }
2867     }
2868   else
2869     {
2870       for (ns = gfc_current_ns; ns; ns = ns->parent)
2871         {
2872           /* Due to the distinction between '==' and '.eq.' and friends, one has
2873              to check if either is defined.  */
2874           switch (i)
2875             {
2876 #define CHECK_OS_COMPARISON(comp) \
2877   case INTRINSIC_##comp: \
2878   case INTRINSIC_##comp##_OS: \
2879     sym = gfc_search_interface (ns->op[INTRINSIC_##comp], 0, &actual); \
2880     if (!sym) \
2881       sym = gfc_search_interface (ns->op[INTRINSIC_##comp##_OS], 0, &actual); \
2882     break;
2883               CHECK_OS_COMPARISON(EQ)
2884               CHECK_OS_COMPARISON(NE)
2885               CHECK_OS_COMPARISON(GT)
2886               CHECK_OS_COMPARISON(GE)
2887               CHECK_OS_COMPARISON(LT)
2888               CHECK_OS_COMPARISON(LE)
2889 #undef CHECK_OS_COMPARISON
2890
2891               default:
2892                 sym = gfc_search_interface (ns->op[i], 0, &actual);
2893             }
2894
2895           if (sym != NULL)
2896             break;
2897         }
2898     }
2899
2900   /* TODO: Do an ambiguity-check and error if multiple matching interfaces are
2901      found rather than just taking the first one and not checking further.  */
2902
2903   if (sym == NULL)
2904     {
2905       gfc_typebound_proc* tbo;
2906       gfc_expr* tb_base;
2907
2908       /* See if we find a matching type-bound operator.  */
2909       if (i == INTRINSIC_USER)
2910         tbo = matching_typebound_op (&tb_base, actual,
2911                                      i, e->value.op.uop->name);
2912       else
2913         switch (i)
2914           {
2915 #define CHECK_OS_COMPARISON(comp) \
2916   case INTRINSIC_##comp: \
2917   case INTRINSIC_##comp##_OS: \
2918     tbo = matching_typebound_op (&tb_base, actual, \
2919                                  INTRINSIC_##comp, NULL); \
2920     if (!tbo) \
2921       tbo = matching_typebound_op (&tb_base, actual, \
2922                                    INTRINSIC_##comp##_OS, NULL); \
2923     break;
2924             CHECK_OS_COMPARISON(EQ)
2925             CHECK_OS_COMPARISON(NE)
2926             CHECK_OS_COMPARISON(GT)
2927             CHECK_OS_COMPARISON(GE)
2928             CHECK_OS_COMPARISON(LT)
2929             CHECK_OS_COMPARISON(LE)
2930 #undef CHECK_OS_COMPARISON
2931
2932             default:
2933               tbo = matching_typebound_op (&tb_base, actual, i, NULL);
2934               break;
2935           }
2936               
2937       /* If there is a matching typebound-operator, replace the expression with
2938          a call to it and succeed.  */
2939       if (tbo)
2940         {
2941           gfc_try result;
2942
2943           gcc_assert (tb_base);
2944           build_compcall_for_operator (e, actual, tb_base, tbo);
2945
2946           result = gfc_resolve_expr (e);
2947           if (result == FAILURE)
2948             *real_error = true;
2949
2950           return result;
2951         }
2952
2953       /* Don't use gfc_free_actual_arglist().  */
2954       if (actual->next != NULL)
2955         gfc_free (actual->next);
2956       gfc_free (actual);
2957
2958       return FAILURE;
2959     }
2960
2961   /* Change the expression node to a function call.  */
2962   e->expr_type = EXPR_FUNCTION;
2963   e->symtree = gfc_find_sym_in_symtree (sym);
2964   e->value.function.actual = actual;
2965   e->value.function.esym = NULL;
2966   e->value.function.isym = NULL;
2967   e->value.function.name = NULL;
2968   e->user_operator = 1;
2969
2970   if (gfc_resolve_expr (e) == FAILURE)
2971     {
2972       *real_error = true;
2973       return FAILURE;
2974     }
2975
2976   return SUCCESS;
2977 }
2978
2979
2980 /* Tries to replace an assignment code node with a subroutine call to
2981    the subroutine associated with the assignment operator.  Return
2982    SUCCESS if the node was replaced.  On FAILURE, no error is
2983    generated.  */
2984
2985 gfc_try
2986 gfc_extend_assign (gfc_code *c, gfc_namespace *ns)
2987 {
2988   gfc_actual_arglist *actual;
2989   gfc_expr *lhs, *rhs;
2990   gfc_symbol *sym;
2991
2992   lhs = c->expr1;
2993   rhs = c->expr2;
2994
2995   /* Don't allow an intrinsic assignment to be replaced.  */
2996   if (lhs->ts.type != BT_DERIVED && lhs->ts.type != BT_CLASS
2997       && (rhs->rank == 0 || rhs->rank == lhs->rank)
2998       && (lhs->ts.type == rhs->ts.type
2999           || (gfc_numeric_ts (&lhs->ts) && gfc_numeric_ts (&rhs->ts))))
3000     return FAILURE;
3001
3002   actual = gfc_get_actual_arglist ();
3003   actual->expr = lhs;
3004
3005   actual->next = gfc_get_actual_arglist ();
3006   actual->next->expr = rhs;
3007
3008   sym = NULL;
3009
3010   for (; ns; ns = ns->parent)
3011     {
3012       sym = gfc_search_interface (ns->op[INTRINSIC_ASSIGN], 1, &actual);
3013       if (sym != NULL)
3014         break;
3015     }
3016
3017   /* TODO: Ambiguity-check, see above for gfc_extend_expr.  */
3018
3019   if (sym == NULL)
3020     {
3021       gfc_typebound_proc* tbo;
3022       gfc_expr* tb_base;
3023
3024       /* See if we find a matching type-bound assignment.  */
3025       tbo = matching_typebound_op (&tb_base, actual,
3026                                    INTRINSIC_ASSIGN, NULL);
3027               
3028       /* If there is one, replace the expression with a call to it and
3029          succeed.  */
3030       if (tbo)
3031         {
3032           gcc_assert (tb_base);
3033           c->expr1 = gfc_get_expr ();
3034           build_compcall_for_operator (c->expr1, actual, tb_base, tbo);
3035           c->expr1->value.compcall.assign = 1;
3036           c->expr2 = NULL;
3037           c->op = EXEC_COMPCALL;
3038
3039           /* c is resolved from the caller, so no need to do it here.  */
3040
3041           return SUCCESS;
3042         }
3043
3044       gfc_free (actual->next);
3045       gfc_free (actual);
3046       return FAILURE;
3047     }
3048
3049   /* Replace the assignment with the call.  */
3050   c->op = EXEC_ASSIGN_CALL;
3051   c->symtree = gfc_find_sym_in_symtree (sym);
3052   c->expr1 = NULL;
3053   c->expr2 = NULL;
3054   c->ext.actual = actual;
3055
3056   return SUCCESS;
3057 }
3058
3059
3060 /* Make sure that the interface just parsed is not already present in
3061    the given interface list.  Ambiguity isn't checked yet since module
3062    procedures can be present without interfaces.  */
3063
3064 static gfc_try
3065 check_new_interface (gfc_interface *base, gfc_symbol *new_sym)
3066 {
3067   gfc_interface *ip;
3068
3069   for (ip = base; ip; ip = ip->next)
3070     {
3071       if (ip->sym == new_sym)
3072         {
3073           gfc_error ("Entity '%s' at %C is already present in the interface",
3074                      new_sym->name);
3075           return FAILURE;
3076         }
3077     }
3078
3079   return SUCCESS;
3080 }
3081
3082
3083 /* Add a symbol to the current interface.  */
3084
3085 gfc_try
3086 gfc_add_interface (gfc_symbol *new_sym)
3087 {
3088   gfc_interface **head, *intr;
3089   gfc_namespace *ns;
3090   gfc_symbol *sym;
3091
3092   switch (current_interface.type)
3093     {
3094     case INTERFACE_NAMELESS:
3095     case INTERFACE_ABSTRACT:
3096       return SUCCESS;
3097
3098     case INTERFACE_INTRINSIC_OP:
3099       for (ns = current_interface.ns; ns; ns = ns->parent)
3100         switch (current_interface.op)
3101           {
3102             case INTRINSIC_EQ:
3103             case INTRINSIC_EQ_OS:
3104               if (check_new_interface (ns->op[INTRINSIC_EQ], new_sym) == FAILURE ||
3105                   check_new_interface (ns->op[INTRINSIC_EQ_OS], new_sym) == FAILURE)
3106                 return FAILURE;
3107               break;
3108
3109             case INTRINSIC_NE:
3110             case INTRINSIC_NE_OS:
3111               if (check_new_interface (ns->op[INTRINSIC_NE], new_sym) == FAILURE ||
3112                   check_new_interface (ns->op[INTRINSIC_NE_OS], new_sym) == FAILURE)
3113                 return FAILURE;
3114               break;
3115
3116             case INTRINSIC_GT:
3117             case INTRINSIC_GT_OS:
3118               if (check_new_interface (ns->op[INTRINSIC_GT], new_sym) == FAILURE ||
3119                   check_new_interface (ns->op[INTRINSIC_GT_OS], new_sym) == FAILURE)
3120                 return FAILURE;
3121               break;
3122
3123             case INTRINSIC_GE:
3124             case INTRINSIC_GE_OS:
3125               if (check_new_interface (ns->op[INTRINSIC_GE], new_sym) == FAILURE ||
3126                   check_new_interface (ns->op[INTRINSIC_GE_OS], new_sym) == FAILURE)
3127                 return FAILURE;
3128               break;
3129
3130             case INTRINSIC_LT:
3131             case INTRINSIC_LT_OS:
3132               if (check_new_interface (ns->op[INTRINSIC_LT], new_sym) == FAILURE ||
3133                   check_new_interface (ns->op[INTRINSIC_LT_OS], new_sym) == FAILURE)
3134                 return FAILURE;
3135               break;
3136
3137             case INTRINSIC_LE:
3138             case INTRINSIC_LE_OS:
3139               if (check_new_interface (ns->op[INTRINSIC_LE], new_sym) == FAILURE ||
3140                   check_new_interface (ns->op[INTRINSIC_LE_OS], new_sym) == FAILURE)
3141                 return FAILURE;
3142               break;
3143
3144             default:
3145               if (check_new_interface (ns->op[current_interface.op], new_sym) == FAILURE)
3146                 return FAILURE;
3147           }
3148
3149       head = &current_interface.ns->op[current_interface.op];
3150       break;
3151
3152     case INTERFACE_GENERIC:
3153       for (ns = current_interface.ns; ns; ns = ns->parent)
3154         {
3155           gfc_find_symbol (current_interface.sym->name, ns, 0, &sym);
3156           if (sym == NULL)
3157             continue;
3158
3159           if (check_new_interface (sym->generic, new_sym) == FAILURE)
3160             return FAILURE;
3161         }
3162
3163       head = &current_interface.sym->generic;
3164       break;
3165
3166     case INTERFACE_USER_OP:
3167       if (check_new_interface (current_interface.uop->op, new_sym)
3168           == FAILURE)
3169         return FAILURE;
3170
3171       head = &current_interface.uop->op;
3172       break;
3173
3174     default:
3175       gfc_internal_error ("gfc_add_interface(): Bad interface type");
3176     }
3177
3178   intr = gfc_get_interface ();
3179   intr->sym = new_sym;
3180   intr->where = gfc_current_locus;
3181
3182   intr->next = *head;
3183   *head = intr;
3184
3185   return SUCCESS;
3186 }
3187
3188
3189 gfc_interface *
3190 gfc_current_interface_head (void)
3191 {
3192   switch (current_interface.type)
3193     {
3194       case INTERFACE_INTRINSIC_OP:
3195         return current_interface.ns->op[current_interface.op];
3196         break;
3197
3198       case INTERFACE_GENERIC:
3199         return current_interface.sym->generic;
3200         break;
3201
3202       case INTERFACE_USER_OP:
3203         return current_interface.uop->op;
3204         break;
3205
3206       default:
3207         gcc_unreachable ();
3208     }
3209 }
3210
3211
3212 void
3213 gfc_set_current_interface_head (gfc_interface *i)
3214 {
3215   switch (current_interface.type)
3216     {
3217       case INTERFACE_INTRINSIC_OP:
3218         current_interface.ns->op[current_interface.op] = i;
3219         break;
3220
3221       case INTERFACE_GENERIC:
3222         current_interface.sym->generic = i;
3223         break;
3224
3225       case INTERFACE_USER_OP:
3226         current_interface.uop->op = i;
3227         break;
3228
3229       default:
3230         gcc_unreachable ();
3231     }
3232 }
3233
3234
3235 /* Gets rid of a formal argument list.  We do not free symbols.
3236    Symbols are freed when a namespace is freed.  */
3237
3238 void
3239 gfc_free_formal_arglist (gfc_formal_arglist *p)
3240 {
3241   gfc_formal_arglist *q;
3242
3243   for (; p; p = q)
3244     {
3245       q = p->next;
3246       gfc_free (p);
3247     }
3248 }