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