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