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