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