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