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