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