]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/fortran/interface.c
decl.c (gnat_to_gnu_entity): Do not look up the REP part of the base type in advance.
[thirdparty/gcc.git] / gcc / fortran / interface.c
CommitLineData
6de9cd9a 1/* Deal with interfaces.
fa502cb2 2 Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009,
94fae14b 3 2010, 2011, 2012
b251af97 4 Free Software Foundation, Inc.
6de9cd9a
DN
5 Contributed by Andy Vaught
6
9fc4d79b 7This file is part of GCC.
6de9cd9a 8
9fc4d79b
TS
9GCC is free software; you can redistribute it and/or modify it under
10the terms of the GNU General Public License as published by the Free
d234d788 11Software Foundation; either version 3, or (at your option) any later
9fc4d79b 12version.
6de9cd9a 13
9fc4d79b
TS
14GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15WARRANTY; without even the implied warranty of MERCHANTABILITY or
16FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17for more details.
6de9cd9a
DN
18
19You should have received a copy of the GNU General Public License
d234d788
NC
20along with GCC; see the file COPYING3. If not see
21<http://www.gnu.org/licenses/>. */
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"
953bee7c 70#include "coretypes.h"
6de9cd9a
DN
71#include "gfortran.h"
72#include "match.h"
97f26732 73#include "arith.h"
6de9cd9a 74
6de9cd9a
DN
75/* The current_interface structure holds information about the
76 interface currently being parsed. This structure is saved and
77 restored during recursive interfaces. */
78
79gfc_interface_info current_interface;
80
81
82/* Free a singly linked list of gfc_interface structures. */
83
84void
b251af97 85gfc_free_interface (gfc_interface *intr)
6de9cd9a
DN
86{
87 gfc_interface *next;
88
89 for (; intr; intr = next)
90 {
91 next = intr->next;
cede9502 92 free (intr);
6de9cd9a
DN
93 }
94}
95
96
97/* Change the operators unary plus and minus into binary plus and
98 minus respectively, leaving the rest unchanged. */
99
100static gfc_intrinsic_op
e8d4f3fc 101fold_unary_intrinsic (gfc_intrinsic_op op)
6de9cd9a 102{
a1ee985f 103 switch (op)
6de9cd9a
DN
104 {
105 case INTRINSIC_UPLUS:
a1ee985f 106 op = INTRINSIC_PLUS;
6de9cd9a
DN
107 break;
108 case INTRINSIC_UMINUS:
a1ee985f 109 op = INTRINSIC_MINUS;
6de9cd9a
DN
110 break;
111 default:
112 break;
113 }
114
a1ee985f 115 return op;
6de9cd9a
DN
116}
117
118
119/* Match a generic specification. Depending on which type of
a1ee985f 120 interface is found, the 'name' or 'op' pointers may be set.
6de9cd9a
DN
121 This subroutine doesn't return MATCH_NO. */
122
123match
b251af97 124gfc_match_generic_spec (interface_type *type,
6de9cd9a 125 char *name,
a1ee985f 126 gfc_intrinsic_op *op)
6de9cd9a
DN
127{
128 char buffer[GFC_MAX_SYMBOL_LEN + 1];
129 match m;
130 gfc_intrinsic_op i;
131
132 if (gfc_match (" assignment ( = )") == MATCH_YES)
133 {
134 *type = INTERFACE_INTRINSIC_OP;
a1ee985f 135 *op = INTRINSIC_ASSIGN;
6de9cd9a
DN
136 return MATCH_YES;
137 }
138
139 if (gfc_match (" operator ( %o )", &i) == MATCH_YES)
140 { /* Operator i/f */
141 *type = INTERFACE_INTRINSIC_OP;
e8d4f3fc 142 *op = fold_unary_intrinsic (i);
6de9cd9a
DN
143 return MATCH_YES;
144 }
145
e8d4f3fc 146 *op = INTRINSIC_NONE;
6de9cd9a
DN
147 if (gfc_match (" operator ( ") == MATCH_YES)
148 {
149 m = gfc_match_defined_op_name (buffer, 1);
150 if (m == MATCH_NO)
151 goto syntax;
152 if (m != MATCH_YES)
153 return MATCH_ERROR;
154
155 m = gfc_match_char (')');
156 if (m == MATCH_NO)
157 goto syntax;
158 if (m != MATCH_YES)
159 return MATCH_ERROR;
160
161 strcpy (name, buffer);
162 *type = INTERFACE_USER_OP;
163 return MATCH_YES;
164 }
165
166 if (gfc_match_name (buffer) == MATCH_YES)
167 {
168 strcpy (name, buffer);
169 *type = INTERFACE_GENERIC;
170 return MATCH_YES;
171 }
172
173 *type = INTERFACE_NAMELESS;
174 return MATCH_YES;
175
176syntax:
177 gfc_error ("Syntax error in generic specification at %C");
178 return MATCH_ERROR;
179}
180
181
9e1d712c
TB
182/* Match one of the five F95 forms of an interface statement. The
183 matcher for the abstract interface follows. */
6de9cd9a
DN
184
185match
186gfc_match_interface (void)
187{
188 char name[GFC_MAX_SYMBOL_LEN + 1];
189 interface_type type;
190 gfc_symbol *sym;
a1ee985f 191 gfc_intrinsic_op op;
6de9cd9a
DN
192 match m;
193
194 m = gfc_match_space ();
195
a1ee985f 196 if (gfc_match_generic_spec (&type, name, &op) == MATCH_ERROR)
6de9cd9a
DN
197 return MATCH_ERROR;
198
6de9cd9a
DN
199 /* If we're not looking at the end of the statement now, or if this
200 is not a nameless interface but we did not see a space, punt. */
201 if (gfc_match_eos () != MATCH_YES
b251af97 202 || (type != INTERFACE_NAMELESS && m != MATCH_YES))
6de9cd9a 203 {
b251af97
SK
204 gfc_error ("Syntax error: Trailing garbage in INTERFACE statement "
205 "at %C");
6de9cd9a
DN
206 return MATCH_ERROR;
207 }
208
209 current_interface.type = type;
210
211 switch (type)
212 {
213 case INTERFACE_GENERIC:
214 if (gfc_get_symbol (name, NULL, &sym))
215 return MATCH_ERROR;
216
231b2fcc
TS
217 if (!sym->attr.generic
218 && gfc_add_generic (&sym->attr, sym->name, NULL) == FAILURE)
6de9cd9a
DN
219 return MATCH_ERROR;
220
e5d7f6f7
FXC
221 if (sym->attr.dummy)
222 {
223 gfc_error ("Dummy procedure '%s' at %C cannot have a "
224 "generic interface", sym->name);
225 return MATCH_ERROR;
226 }
227
6de9cd9a
DN
228 current_interface.sym = gfc_new_block = sym;
229 break;
230
231 case INTERFACE_USER_OP:
232 current_interface.uop = gfc_get_uop (name);
233 break;
234
235 case INTERFACE_INTRINSIC_OP:
a1ee985f 236 current_interface.op = op;
6de9cd9a
DN
237 break;
238
239 case INTERFACE_NAMELESS:
9e1d712c 240 case INTERFACE_ABSTRACT:
6de9cd9a
DN
241 break;
242 }
243
244 return MATCH_YES;
245}
246
247
9e1d712c
TB
248
249/* Match a F2003 abstract interface. */
250
251match
252gfc_match_abstract_interface (void)
253{
254 match m;
255
9717f7a1 256 if (gfc_notify_std (GFC_STD_F2003, "ABSTRACT INTERFACE at %C")
9e1d712c
TB
257 == FAILURE)
258 return MATCH_ERROR;
259
260 m = gfc_match_eos ();
261
262 if (m != MATCH_YES)
263 {
264 gfc_error ("Syntax error in ABSTRACT INTERFACE statement at %C");
265 return MATCH_ERROR;
266 }
267
268 current_interface.type = INTERFACE_ABSTRACT;
269
270 return m;
271}
272
273
6de9cd9a
DN
274/* Match the different sort of generic-specs that can be present after
275 the END INTERFACE itself. */
276
277match
278gfc_match_end_interface (void)
279{
280 char name[GFC_MAX_SYMBOL_LEN + 1];
281 interface_type type;
a1ee985f 282 gfc_intrinsic_op op;
6de9cd9a
DN
283 match m;
284
285 m = gfc_match_space ();
286
a1ee985f 287 if (gfc_match_generic_spec (&type, name, &op) == MATCH_ERROR)
6de9cd9a
DN
288 return MATCH_ERROR;
289
290 /* If we're not looking at the end of the statement now, or if this
291 is not a nameless interface but we did not see a space, punt. */
292 if (gfc_match_eos () != MATCH_YES
b251af97 293 || (type != INTERFACE_NAMELESS && m != MATCH_YES))
6de9cd9a 294 {
b251af97
SK
295 gfc_error ("Syntax error: Trailing garbage in END INTERFACE "
296 "statement at %C");
6de9cd9a
DN
297 return MATCH_ERROR;
298 }
299
300 m = MATCH_YES;
301
302 switch (current_interface.type)
303 {
304 case INTERFACE_NAMELESS:
9e1d712c
TB
305 case INTERFACE_ABSTRACT:
306 if (type != INTERFACE_NAMELESS)
6de9cd9a
DN
307 {
308 gfc_error ("Expected a nameless interface at %C");
309 m = MATCH_ERROR;
310 }
311
312 break;
313
314 case INTERFACE_INTRINSIC_OP:
a1ee985f 315 if (type != current_interface.type || op != current_interface.op)
6de9cd9a
DN
316 {
317
318 if (current_interface.op == INTRINSIC_ASSIGN)
c6d6e62f
SK
319 {
320 m = MATCH_ERROR;
321 gfc_error ("Expected 'END INTERFACE ASSIGNMENT (=)' at %C");
322 }
6de9cd9a 323 else
c6d6e62f 324 {
915acec4 325 const char *s1, *s2;
c6d6e62f
SK
326 s1 = gfc_op2string (current_interface.op);
327 s2 = gfc_op2string (op);
328
329 /* The following if-statements are used to enforce C1202
330 from F2003. */
331 if ((strcmp(s1, "==") == 0 && strcmp(s2, ".eq.") == 0)
332 || (strcmp(s1, ".eq.") == 0 && strcmp(s2, "==") == 0))
333 break;
334 if ((strcmp(s1, "/=") == 0 && strcmp(s2, ".ne.") == 0)
335 || (strcmp(s1, ".ne.") == 0 && strcmp(s2, "/=") == 0))
336 break;
337 if ((strcmp(s1, "<=") == 0 && strcmp(s2, ".le.") == 0)
338 || (strcmp(s1, ".le.") == 0 && strcmp(s2, "<=") == 0))
339 break;
340 if ((strcmp(s1, "<") == 0 && strcmp(s2, ".lt.") == 0)
341 || (strcmp(s1, ".lt.") == 0 && strcmp(s2, "<") == 0))
342 break;
343 if ((strcmp(s1, ">=") == 0 && strcmp(s2, ".ge.") == 0)
344 || (strcmp(s1, ".ge.") == 0 && strcmp(s2, ">=") == 0))
345 break;
346 if ((strcmp(s1, ">") == 0 && strcmp(s2, ".gt.") == 0)
347 || (strcmp(s1, ".gt.") == 0 && strcmp(s2, ">") == 0))
348 break;
349
350 m = MATCH_ERROR;
351 gfc_error ("Expecting 'END INTERFACE OPERATOR (%s)' at %C, "
352 "but got %s", s1, s2);
353 }
354
6de9cd9a
DN
355 }
356
357 break;
358
359 case INTERFACE_USER_OP:
360 /* Comparing the symbol node names is OK because only use-associated
b251af97 361 symbols can be renamed. */
6de9cd9a 362 if (type != current_interface.type
9b46f94f 363 || strcmp (current_interface.uop->name, name) != 0)
6de9cd9a
DN
364 {
365 gfc_error ("Expecting 'END INTERFACE OPERATOR (.%s.)' at %C",
55898b2c 366 current_interface.uop->name);
6de9cd9a
DN
367 m = MATCH_ERROR;
368 }
369
370 break;
371
372 case INTERFACE_GENERIC:
373 if (type != current_interface.type
374 || strcmp (current_interface.sym->name, name) != 0)
375 {
376 gfc_error ("Expecting 'END INTERFACE %s' at %C",
377 current_interface.sym->name);
378 m = MATCH_ERROR;
379 }
380
381 break;
382 }
383
384 return m;
385}
386
387
e0e85e06
PT
388/* Compare two derived types using the criteria in 4.4.2 of the standard,
389 recursing through gfc_compare_types for the components. */
6de9cd9a
DN
390
391int
b251af97 392gfc_compare_derived_types (gfc_symbol *derived1, gfc_symbol *derived2)
6de9cd9a
DN
393{
394 gfc_component *dt1, *dt2;
395
cf2b3c22
TB
396 if (derived1 == derived2)
397 return 1;
398
6de9cd9a
DN
399 /* Special case for comparing derived types across namespaces. If the
400 true names and module names are the same and the module name is
401 nonnull, then they are equal. */
a8b3b0b6
CR
402 if (derived1 != NULL && derived2 != NULL
403 && strcmp (derived1->name, derived2->name) == 0
b251af97
SK
404 && derived1->module != NULL && derived2->module != NULL
405 && strcmp (derived1->module, derived2->module) == 0)
6de9cd9a
DN
406 return 1;
407
408 /* Compare type via the rules of the standard. Both types must have
a9e88ec6 409 the SEQUENCE or BIND(C) attribute to be equal. */
6de9cd9a 410
e0e85e06 411 if (strcmp (derived1->name, derived2->name))
6de9cd9a
DN
412 return 0;
413
e0e85e06 414 if (derived1->component_access == ACCESS_PRIVATE
b251af97 415 || derived2->component_access == ACCESS_PRIVATE)
e0e85e06 416 return 0;
6de9cd9a 417
a9e88ec6
TB
418 if (!(derived1->attr.sequence && derived2->attr.sequence)
419 && !(derived1->attr.is_bind_c && derived2->attr.is_bind_c))
6de9cd9a
DN
420 return 0;
421
e0e85e06
PT
422 dt1 = derived1->components;
423 dt2 = derived2->components;
424
6de9cd9a
DN
425 /* Since subtypes of SEQUENCE types must be SEQUENCE types as well, a
426 simple test can speed things up. Otherwise, lots of things have to
427 match. */
428 for (;;)
429 {
430 if (strcmp (dt1->name, dt2->name) != 0)
431 return 0;
432
d4b7d0f0 433 if (dt1->attr.access != dt2->attr.access)
2eae3dc7
TB
434 return 0;
435
d4b7d0f0 436 if (dt1->attr.pointer != dt2->attr.pointer)
6de9cd9a
DN
437 return 0;
438
d4b7d0f0 439 if (dt1->attr.dimension != dt2->attr.dimension)
6de9cd9a
DN
440 return 0;
441
d4b7d0f0 442 if (dt1->attr.allocatable != dt2->attr.allocatable)
5046aff5
PT
443 return 0;
444
d4b7d0f0 445 if (dt1->attr.dimension && gfc_compare_array_spec (dt1->as, dt2->as) == 0)
6de9cd9a
DN
446 return 0;
447
6669dbdf
PT
448 /* Make sure that link lists do not put this function into an
449 endless recursive loop! */
bc21d315
JW
450 if (!(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived)
451 && !(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived)
63287e10
PT
452 && gfc_compare_types (&dt1->ts, &dt2->ts) == 0)
453 return 0;
454
bc21d315
JW
455 else if ((dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived)
456 && !(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived))
6669dbdf
PT
457 return 0;
458
bc21d315
JW
459 else if (!(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived)
460 && (dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.u.derived))
6de9cd9a
DN
461 return 0;
462
463 dt1 = dt1->next;
464 dt2 = dt2->next;
465
466 if (dt1 == NULL && dt2 == NULL)
467 break;
468 if (dt1 == NULL || dt2 == NULL)
469 return 0;
470 }
471
472 return 1;
473}
474
b251af97 475
e0e85e06
PT
476/* Compare two typespecs, recursively if necessary. */
477
478int
b251af97 479gfc_compare_types (gfc_typespec *ts1, gfc_typespec *ts2)
e0e85e06 480{
a8b3b0b6
CR
481 /* See if one of the typespecs is a BT_VOID, which is what is being used
482 to allow the funcs like c_f_pointer to accept any pointer type.
483 TODO: Possibly should narrow this to just the one typespec coming in
484 that is for the formal arg, but oh well. */
485 if (ts1->type == BT_VOID || ts2->type == BT_VOID)
486 return 1;
487
cf2b3c22
TB
488 if (ts1->type != ts2->type
489 && ((ts1->type != BT_DERIVED && ts1->type != BT_CLASS)
490 || (ts2->type != BT_DERIVED && ts2->type != BT_CLASS)))
e0e85e06 491 return 0;
cf2b3c22 492 if (ts1->type != BT_DERIVED && ts1->type != BT_CLASS)
e0e85e06
PT
493 return (ts1->kind == ts2->kind);
494
495 /* Compare derived types. */
cf2b3c22 496 if (gfc_type_compatible (ts1, ts2))
e0e85e06
PT
497 return 1;
498
bc21d315 499 return gfc_compare_derived_types (ts1->u.derived ,ts2->u.derived);
e0e85e06
PT
500}
501
6de9cd9a
DN
502
503/* Given two symbols that are formal arguments, compare their ranks
504 and types. Returns nonzero if they have the same rank and type,
505 zero otherwise. */
506
507static int
b251af97 508compare_type_rank (gfc_symbol *s1, gfc_symbol *s2)
6de9cd9a
DN
509{
510 int r1, r2;
511
512 r1 = (s1->as != NULL) ? s1->as->rank : 0;
513 r2 = (s2->as != NULL) ? s2->as->rank : 0;
514
515 if (r1 != r2)
66e4ab31 516 return 0; /* Ranks differ. */
6de9cd9a 517
45a69325
TB
518 return gfc_compare_types (&s1->ts, &s2->ts)
519 || s1->ts.type == BT_ASSUMED || s2->ts.type == BT_ASSUMED;
6de9cd9a
DN
520}
521
522
6de9cd9a
DN
523/* Given two symbols that are formal arguments, compare their types
524 and rank and their formal interfaces if they are both dummy
525 procedures. Returns nonzero if the same, zero if different. */
526
527static int
b251af97 528compare_type_rank_if (gfc_symbol *s1, gfc_symbol *s2)
6de9cd9a 529{
26f2ca2b
PT
530 if (s1 == NULL || s2 == NULL)
531 return s1 == s2 ? 1 : 0;
6de9cd9a 532
489ec4e3
PT
533 if (s1 == s2)
534 return 1;
535
6de9cd9a
DN
536 if (s1->attr.flavor != FL_PROCEDURE && s2->attr.flavor != FL_PROCEDURE)
537 return compare_type_rank (s1, s2);
538
539 if (s1->attr.flavor != FL_PROCEDURE || s2->attr.flavor != FL_PROCEDURE)
540 return 0;
541
489ec4e3
PT
542 /* At this point, both symbols are procedures. It can happen that
543 external procedures are compared, where one is identified by usage
544 to be a function or subroutine but the other is not. Check TKR
545 nonetheless for these cases. */
546 if (s1->attr.function == 0 && s1->attr.subroutine == 0)
547 return s1->attr.external == 1 ? compare_type_rank (s1, s2) : 0;
548
549 if (s2->attr.function == 0 && s2->attr.subroutine == 0)
550 return s2->attr.external == 1 ? compare_type_rank (s1, s2) : 0;
6de9cd9a 551
489ec4e3 552 /* Now the type of procedure has been identified. */
6de9cd9a
DN
553 if (s1->attr.function != s2->attr.function
554 || s1->attr.subroutine != s2->attr.subroutine)
555 return 0;
556
557 if (s1->attr.function && compare_type_rank (s1, s2) == 0)
558 return 0;
559
993ef28f
PT
560 /* Originally, gfortran recursed here to check the interfaces of passed
561 procedures. This is explicitly not required by the standard. */
562 return 1;
6de9cd9a
DN
563}
564
565
566/* Given a formal argument list and a keyword name, search the list
567 for that keyword. Returns the correct symbol node if found, NULL
568 if not found. */
569
570static gfc_symbol *
b251af97 571find_keyword_arg (const char *name, gfc_formal_arglist *f)
6de9cd9a 572{
6de9cd9a
DN
573 for (; f; f = f->next)
574 if (strcmp (f->sym->name, name) == 0)
575 return f->sym;
576
577 return NULL;
578}
579
580
581/******** Interface checking subroutines **********/
582
583
584/* Given an operator interface and the operator, make sure that all
585 interfaces for that operator are legal. */
586
94747289
DK
587bool
588gfc_check_operator_interface (gfc_symbol *sym, gfc_intrinsic_op op,
589 locus opwhere)
6de9cd9a
DN
590{
591 gfc_formal_arglist *formal;
592 sym_intent i1, i2;
6de9cd9a 593 bt t1, t2;
27189292 594 int args, r1, r2, k1, k2;
6de9cd9a 595
94747289 596 gcc_assert (sym);
6de9cd9a
DN
597
598 args = 0;
599 t1 = t2 = BT_UNKNOWN;
600 i1 = i2 = INTENT_UNKNOWN;
27189292
FXC
601 r1 = r2 = -1;
602 k1 = k2 = -1;
6de9cd9a 603
94747289 604 for (formal = sym->formal; formal; formal = formal->next)
6de9cd9a 605 {
94747289
DK
606 gfc_symbol *fsym = formal->sym;
607 if (fsym == NULL)
8c086c9c
PT
608 {
609 gfc_error ("Alternate return cannot appear in operator "
94747289
DK
610 "interface at %L", &sym->declared_at);
611 return false;
8c086c9c 612 }
6de9cd9a
DN
613 if (args == 0)
614 {
94747289
DK
615 t1 = fsym->ts.type;
616 i1 = fsym->attr.intent;
617 r1 = (fsym->as != NULL) ? fsym->as->rank : 0;
618 k1 = fsym->ts.kind;
6de9cd9a
DN
619 }
620 if (args == 1)
621 {
94747289
DK
622 t2 = fsym->ts.type;
623 i2 = fsym->attr.intent;
624 r2 = (fsym->as != NULL) ? fsym->as->rank : 0;
625 k2 = fsym->ts.kind;
6de9cd9a
DN
626 }
627 args++;
628 }
629
27189292
FXC
630 /* Only +, - and .not. can be unary operators.
631 .not. cannot be a binary operator. */
a1ee985f
KG
632 if (args == 0 || args > 2 || (args == 1 && op != INTRINSIC_PLUS
633 && op != INTRINSIC_MINUS
634 && op != INTRINSIC_NOT)
635 || (args == 2 && op == INTRINSIC_NOT))
27189292
FXC
636 {
637 gfc_error ("Operator interface at %L has the wrong number of arguments",
94747289
DK
638 &sym->declared_at);
639 return false;
27189292
FXC
640 }
641
642 /* Check that intrinsics are mapped to functions, except
643 INTRINSIC_ASSIGN which should map to a subroutine. */
a1ee985f 644 if (op == INTRINSIC_ASSIGN)
6de9cd9a
DN
645 {
646 if (!sym->attr.subroutine)
647 {
b251af97 648 gfc_error ("Assignment operator interface at %L must be "
94747289
DK
649 "a SUBROUTINE", &sym->declared_at);
650 return false;
6de9cd9a 651 }
8c086c9c
PT
652 if (args != 2)
653 {
b251af97 654 gfc_error ("Assignment operator interface at %L must have "
94747289
DK
655 "two arguments", &sym->declared_at);
656 return false;
8c086c9c 657 }
e19bb186
TB
658
659 /* Allowed are (per F2003, 12.3.2.1.2 Defined assignments):
94747289 660 - First argument an array with different rank than second,
315d905f
TB
661 - First argument is a scalar and second an array,
662 - Types and kinds do not conform, or
94747289 663 - First argument is of derived type. */
8c086c9c 664 if (sym->formal->sym->ts.type != BT_DERIVED
6168891d 665 && sym->formal->sym->ts.type != BT_CLASS
315d905f 666 && (r2 == 0 || r1 == r2)
b251af97
SK
667 && (sym->formal->sym->ts.type == sym->formal->next->sym->ts.type
668 || (gfc_numeric_ts (&sym->formal->sym->ts)
669 && gfc_numeric_ts (&sym->formal->next->sym->ts))))
8c086c9c 670 {
b251af97 671 gfc_error ("Assignment operator interface at %L must not redefine "
94747289
DK
672 "an INTRINSIC type assignment", &sym->declared_at);
673 return false;
8c086c9c 674 }
6de9cd9a
DN
675 }
676 else
677 {
678 if (!sym->attr.function)
679 {
680 gfc_error ("Intrinsic operator interface at %L must be a FUNCTION",
94747289
DK
681 &sym->declared_at);
682 return false;
6de9cd9a
DN
683 }
684 }
685
27189292 686 /* Check intents on operator interfaces. */
a1ee985f 687 if (op == INTRINSIC_ASSIGN)
6de9cd9a 688 {
27189292 689 if (i1 != INTENT_OUT && i1 != INTENT_INOUT)
94747289
DK
690 {
691 gfc_error ("First argument of defined assignment at %L must be "
692 "INTENT(OUT) or INTENT(INOUT)", &sym->declared_at);
693 return false;
694 }
27189292
FXC
695
696 if (i2 != INTENT_IN)
94747289
DK
697 {
698 gfc_error ("Second argument of defined assignment at %L must be "
699 "INTENT(IN)", &sym->declared_at);
700 return false;
701 }
27189292
FXC
702 }
703 else
704 {
705 if (i1 != INTENT_IN)
94747289
DK
706 {
707 gfc_error ("First argument of operator interface at %L must be "
708 "INTENT(IN)", &sym->declared_at);
709 return false;
710 }
27189292
FXC
711
712 if (args == 2 && i2 != INTENT_IN)
94747289
DK
713 {
714 gfc_error ("Second argument of operator interface at %L must be "
715 "INTENT(IN)", &sym->declared_at);
716 return false;
717 }
27189292
FXC
718 }
719
720 /* From now on, all we have to do is check that the operator definition
721 doesn't conflict with an intrinsic operator. The rules for this
722 game are defined in 7.1.2 and 7.1.3 of both F95 and F2003 standards,
723 as well as 12.3.2.1.1 of Fortran 2003:
724
725 "If the operator is an intrinsic-operator (R310), the number of
726 function arguments shall be consistent with the intrinsic uses of
727 that operator, and the types, kind type parameters, or ranks of the
728 dummy arguments shall differ from those required for the intrinsic
729 operation (7.1.2)." */
730
731#define IS_NUMERIC_TYPE(t) \
732 ((t) == BT_INTEGER || (t) == BT_REAL || (t) == BT_COMPLEX)
733
734 /* Unary ops are easy, do them first. */
a1ee985f 735 if (op == INTRINSIC_NOT)
27189292
FXC
736 {
737 if (t1 == BT_LOGICAL)
6de9cd9a 738 goto bad_repl;
27189292 739 else
94747289 740 return true;
27189292 741 }
6de9cd9a 742
a1ee985f 743 if (args == 1 && (op == INTRINSIC_PLUS || op == INTRINSIC_MINUS))
27189292
FXC
744 {
745 if (IS_NUMERIC_TYPE (t1))
6de9cd9a 746 goto bad_repl;
27189292 747 else
94747289 748 return true;
27189292 749 }
6de9cd9a 750
27189292
FXC
751 /* Character intrinsic operators have same character kind, thus
752 operator definitions with operands of different character kinds
753 are always safe. */
754 if (t1 == BT_CHARACTER && t2 == BT_CHARACTER && k1 != k2)
94747289 755 return true;
6de9cd9a 756
27189292
FXC
757 /* Intrinsic operators always perform on arguments of same rank,
758 so different ranks is also always safe. (rank == 0) is an exception
759 to that, because all intrinsic operators are elemental. */
760 if (r1 != r2 && r1 != 0 && r2 != 0)
94747289 761 return true;
6de9cd9a 762
a1ee985f 763 switch (op)
27189292 764 {
6de9cd9a 765 case INTRINSIC_EQ:
3bed9dd0 766 case INTRINSIC_EQ_OS:
6de9cd9a 767 case INTRINSIC_NE:
3bed9dd0 768 case INTRINSIC_NE_OS:
27189292 769 if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
6de9cd9a 770 goto bad_repl;
27189292 771 /* Fall through. */
6de9cd9a 772
27189292
FXC
773 case INTRINSIC_PLUS:
774 case INTRINSIC_MINUS:
775 case INTRINSIC_TIMES:
776 case INTRINSIC_DIVIDE:
777 case INTRINSIC_POWER:
778 if (IS_NUMERIC_TYPE (t1) && IS_NUMERIC_TYPE (t2))
779 goto bad_repl;
6de9cd9a
DN
780 break;
781
6de9cd9a 782 case INTRINSIC_GT:
3bed9dd0 783 case INTRINSIC_GT_OS:
27189292 784 case INTRINSIC_GE:
3bed9dd0 785 case INTRINSIC_GE_OS:
27189292 786 case INTRINSIC_LT:
3bed9dd0 787 case INTRINSIC_LT_OS:
27189292 788 case INTRINSIC_LE:
3bed9dd0 789 case INTRINSIC_LE_OS:
27189292
FXC
790 if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
791 goto bad_repl;
6de9cd9a
DN
792 if ((t1 == BT_INTEGER || t1 == BT_REAL)
793 && (t2 == BT_INTEGER || t2 == BT_REAL))
794 goto bad_repl;
27189292 795 break;
6de9cd9a 796
27189292
FXC
797 case INTRINSIC_CONCAT:
798 if (t1 == BT_CHARACTER && t2 == BT_CHARACTER)
799 goto bad_repl;
6de9cd9a
DN
800 break;
801
6de9cd9a 802 case INTRINSIC_AND:
27189292 803 case INTRINSIC_OR:
6de9cd9a
DN
804 case INTRINSIC_EQV:
805 case INTRINSIC_NEQV:
6de9cd9a
DN
806 if (t1 == BT_LOGICAL && t2 == BT_LOGICAL)
807 goto bad_repl;
808 break;
809
6de9cd9a 810 default:
27189292
FXC
811 break;
812 }
6de9cd9a 813
94747289 814 return true;
6de9cd9a 815
27189292
FXC
816#undef IS_NUMERIC_TYPE
817
6de9cd9a
DN
818bad_repl:
819 gfc_error ("Operator interface at %L conflicts with intrinsic interface",
94747289
DK
820 &opwhere);
821 return false;
6de9cd9a
DN
822}
823
824
825/* Given a pair of formal argument lists, we see if the two lists can
826 be distinguished by counting the number of nonoptional arguments of
827 a given type/rank in f1 and seeing if there are less then that
828 number of those arguments in f2 (including optional arguments).
829 Since this test is asymmetric, it has to be called twice to make it
6f3ab30d
JW
830 symmetric. Returns nonzero if the argument lists are incompatible
831 by this test. This subroutine implements rule 1 of section F03:16.2.3.
832 'p1' and 'p2' are the PASS arguments of both procedures (if applicable). */
6de9cd9a
DN
833
834static int
6f3ab30d
JW
835count_types_test (gfc_formal_arglist *f1, gfc_formal_arglist *f2,
836 const char *p1, const char *p2)
6de9cd9a
DN
837{
838 int rc, ac1, ac2, i, j, k, n1;
839 gfc_formal_arglist *f;
840
841 typedef struct
842 {
843 int flag;
844 gfc_symbol *sym;
845 }
846 arginfo;
847
848 arginfo *arg;
849
850 n1 = 0;
851
852 for (f = f1; f; f = f->next)
853 n1++;
854
855 /* Build an array of integers that gives the same integer to
856 arguments of the same type/rank. */
ece3f663 857 arg = XCNEWVEC (arginfo, n1);
6de9cd9a
DN
858
859 f = f1;
860 for (i = 0; i < n1; i++, f = f->next)
861 {
862 arg[i].flag = -1;
863 arg[i].sym = f->sym;
864 }
865
866 k = 0;
867
868 for (i = 0; i < n1; i++)
869 {
870 if (arg[i].flag != -1)
871 continue;
872
6f3ab30d
JW
873 if (arg[i].sym && (arg[i].sym->attr.optional
874 || (p1 && strcmp (arg[i].sym->name, p1) == 0)))
875 continue; /* Skip OPTIONAL and PASS arguments. */
6de9cd9a
DN
876
877 arg[i].flag = k;
878
6f3ab30d 879 /* Find other non-optional, non-pass arguments of the same type/rank. */
6de9cd9a 880 for (j = i + 1; j < n1; j++)
6f3ab30d
JW
881 if ((arg[j].sym == NULL
882 || !(arg[j].sym->attr.optional
883 || (p1 && strcmp (arg[j].sym->name, p1) == 0)))
2b603773
JW
884 && (compare_type_rank_if (arg[i].sym, arg[j].sym)
885 || compare_type_rank_if (arg[j].sym, arg[i].sym)))
6de9cd9a
DN
886 arg[j].flag = k;
887
888 k++;
889 }
890
891 /* Now loop over each distinct type found in f1. */
892 k = 0;
893 rc = 0;
894
895 for (i = 0; i < n1; i++)
896 {
897 if (arg[i].flag != k)
898 continue;
899
900 ac1 = 1;
901 for (j = i + 1; j < n1; j++)
902 if (arg[j].flag == k)
903 ac1++;
904
6f3ab30d
JW
905 /* Count the number of non-pass arguments in f2 with that type,
906 including those that are optional. */
6de9cd9a
DN
907 ac2 = 0;
908
909 for (f = f2; f; f = f->next)
6f3ab30d
JW
910 if ((!p2 || strcmp (f->sym->name, p2) != 0)
911 && (compare_type_rank_if (arg[i].sym, f->sym)
912 || compare_type_rank_if (f->sym, arg[i].sym)))
6de9cd9a
DN
913 ac2++;
914
915 if (ac1 > ac2)
916 {
917 rc = 1;
918 break;
919 }
920
921 k++;
922 }
923
cede9502 924 free (arg);
6de9cd9a
DN
925
926 return rc;
927}
928
929
6f3ab30d
JW
930/* Perform the correspondence test in rule 3 of section F03:16.2.3.
931 Returns zero if no argument is found that satisfies rule 3, nonzero
932 otherwise. 'p1' and 'p2' are the PASS arguments of both procedures
933 (if applicable).
6de9cd9a
DN
934
935 This test is also not symmetric in f1 and f2 and must be called
936 twice. This test finds problems caused by sorting the actual
937 argument list with keywords. For example:
938
939 INTERFACE FOO
940 SUBROUTINE F1(A, B)
b251af97 941 INTEGER :: A ; REAL :: B
6de9cd9a
DN
942 END SUBROUTINE F1
943
944 SUBROUTINE F2(B, A)
b251af97 945 INTEGER :: A ; REAL :: B
6de9cd9a
DN
946 END SUBROUTINE F1
947 END INTERFACE FOO
948
949 At this point, 'CALL FOO(A=1, B=1.0)' is ambiguous. */
950
951static int
6f3ab30d
JW
952generic_correspondence (gfc_formal_arglist *f1, gfc_formal_arglist *f2,
953 const char *p1, const char *p2)
6de9cd9a 954{
6de9cd9a
DN
955 gfc_formal_arglist *f2_save, *g;
956 gfc_symbol *sym;
957
958 f2_save = f2;
959
960 while (f1)
961 {
962 if (f1->sym->attr.optional)
963 goto next;
964
6f3ab30d
JW
965 if (p1 && strcmp (f1->sym->name, p1) == 0)
966 f1 = f1->next;
967 if (f2 && p2 && strcmp (f2->sym->name, p2) == 0)
968 f2 = f2->next;
969
2b603773
JW
970 if (f2 != NULL && (compare_type_rank (f1->sym, f2->sym)
971 || compare_type_rank (f2->sym, f1->sym)))
6de9cd9a
DN
972 goto next;
973
974 /* Now search for a disambiguating keyword argument starting at
b251af97 975 the current non-match. */
6de9cd9a
DN
976 for (g = f1; g; g = g->next)
977 {
6f3ab30d 978 if (g->sym->attr.optional || (p1 && strcmp (g->sym->name, p1) == 0))
6de9cd9a
DN
979 continue;
980
981 sym = find_keyword_arg (g->sym->name, f2_save);
982 if (sym == NULL || !compare_type_rank (g->sym, sym))
983 return 1;
984 }
985
986 next:
6f3ab30d
JW
987 if (f1 != NULL)
988 f1 = f1->next;
6de9cd9a
DN
989 if (f2 != NULL)
990 f2 = f2->next;
991 }
992
993 return 0;
994}
995
996
9795c594
JW
997/* Check if the characteristics of two dummy arguments match,
998 cf. F08:12.3.2. */
999
1000static gfc_try
1001check_dummy_characteristics (gfc_symbol *s1, gfc_symbol *s2,
1002 bool type_must_agree, char *errmsg, int err_len)
1003{
1004 /* Check type and rank. */
1005 if (type_must_agree && !compare_type_rank (s2, s1))
1006 {
1007 if (errmsg != NULL)
1008 snprintf (errmsg, err_len, "Type/rank mismatch in argument '%s'",
1009 s1->name);
1010 return FAILURE;
1011 }
1012
1013 /* Check INTENT. */
1014 if (s1->attr.intent != s2->attr.intent)
1015 {
1016 snprintf (errmsg, err_len, "INTENT mismatch in argument '%s'",
1017 s1->name);
1018 return FAILURE;
1019 }
1020
1021 /* Check OPTIONAL attribute. */
1022 if (s1->attr.optional != s2->attr.optional)
1023 {
1024 snprintf (errmsg, err_len, "OPTIONAL mismatch in argument '%s'",
1025 s1->name);
1026 return FAILURE;
1027 }
1028
1029 /* Check ALLOCATABLE attribute. */
1030 if (s1->attr.allocatable != s2->attr.allocatable)
1031 {
1032 snprintf (errmsg, err_len, "ALLOCATABLE mismatch in argument '%s'",
1033 s1->name);
1034 return FAILURE;
1035 }
1036
1037 /* Check POINTER attribute. */
1038 if (s1->attr.pointer != s2->attr.pointer)
1039 {
1040 snprintf (errmsg, err_len, "POINTER mismatch in argument '%s'",
1041 s1->name);
1042 return FAILURE;
1043 }
1044
1045 /* Check TARGET attribute. */
1046 if (s1->attr.target != s2->attr.target)
1047 {
1048 snprintf (errmsg, err_len, "TARGET mismatch in argument '%s'",
1049 s1->name);
1050 return FAILURE;
1051 }
1052
1053 /* FIXME: Do more comprehensive testing of attributes, like e.g.
1054 ASYNCHRONOUS, CONTIGUOUS, VALUE, VOLATILE, etc. */
1055
1056 /* Check string length. */
1057 if (s1->ts.type == BT_CHARACTER
1058 && s1->ts.u.cl && s1->ts.u.cl->length
1059 && s2->ts.u.cl && s2->ts.u.cl->length)
1060 {
1061 int compval = gfc_dep_compare_expr (s1->ts.u.cl->length,
1062 s2->ts.u.cl->length);
1063 switch (compval)
1064 {
1065 case -1:
1066 case 1:
1067 case -3:
1068 snprintf (errmsg, err_len, "Character length mismatch "
1069 "in argument '%s'", s1->name);
1070 return FAILURE;
1071
1072 case -2:
1073 /* FIXME: Implement a warning for this case.
1074 gfc_warning ("Possible character length mismatch in argument '%s'",
1075 s1->name);*/
1076 break;
1077
1078 case 0:
1079 break;
1080
1081 default:
1082 gfc_internal_error ("check_dummy_characteristics: Unexpected result "
1083 "%i of gfc_dep_compare_expr", compval);
1084 break;
1085 }
1086 }
1087
1088 /* Check array shape. */
1089 if (s1->as && s2->as)
1090 {
97f26732
JW
1091 int i, compval;
1092 gfc_expr *shape1, *shape2;
1093
9795c594
JW
1094 if (s1->as->type != s2->as->type)
1095 {
1096 snprintf (errmsg, err_len, "Shape mismatch in argument '%s'",
1097 s1->name);
1098 return FAILURE;
1099 }
97f26732
JW
1100
1101 if (s1->as->type == AS_EXPLICIT)
1102 for (i = 0; i < s1->as->rank + s1->as->corank; i++)
1103 {
1104 shape1 = gfc_subtract (gfc_copy_expr (s1->as->upper[i]),
1105 gfc_copy_expr (s1->as->lower[i]));
1106 shape2 = gfc_subtract (gfc_copy_expr (s2->as->upper[i]),
1107 gfc_copy_expr (s2->as->lower[i]));
1108 compval = gfc_dep_compare_expr (shape1, shape2);
1109 gfc_free_expr (shape1);
1110 gfc_free_expr (shape2);
1111 switch (compval)
1112 {
1113 case -1:
1114 case 1:
1115 case -3:
1116 snprintf (errmsg, err_len, "Shape mismatch in dimension %i of "
46a9f26b 1117 "argument '%s'", i + 1, s1->name);
97f26732
JW
1118 return FAILURE;
1119
1120 case -2:
1121 /* FIXME: Implement a warning for this case.
1122 gfc_warning ("Possible shape mismatch in argument '%s'",
1123 s1->name);*/
1124 break;
1125
1126 case 0:
1127 break;
1128
1129 default:
1130 gfc_internal_error ("check_dummy_characteristics: Unexpected "
1131 "result %i of gfc_dep_compare_expr",
1132 compval);
1133 break;
1134 }
1135 }
9795c594
JW
1136 }
1137
1138 return SUCCESS;
1139}
1140
1141
6de9cd9a
DN
1142/* 'Compare' two formal interfaces associated with a pair of symbols.
1143 We return nonzero if there exists an actual argument list that
8ad15a0a 1144 would be ambiguous between the two interfaces, zero otherwise.
58c1ae36 1145 'strict_flag' specifies whether all the characteristics are
6f3ab30d
JW
1146 required to match, which is not the case for ambiguity checks.
1147 'p1' and 'p2' are the PASS arguments of both procedures (if applicable). */
6de9cd9a 1148
e157f736 1149int
889dc035 1150gfc_compare_interfaces (gfc_symbol *s1, gfc_symbol *s2, const char *name2,
58c1ae36 1151 int generic_flag, int strict_flag,
6f3ab30d
JW
1152 char *errmsg, int err_len,
1153 const char *p1, const char *p2)
6de9cd9a
DN
1154{
1155 gfc_formal_arglist *f1, *f2;
1156
0175478d
JD
1157 gcc_assert (name2 != NULL);
1158
9b63f282
JW
1159 if (s1->attr.function && (s2->attr.subroutine
1160 || (!s2->attr.function && s2->ts.type == BT_UNKNOWN
889dc035 1161 && gfc_get_default_type (name2, s2->ns)->type == BT_UNKNOWN)))
8ad15a0a
JW
1162 {
1163 if (errmsg != NULL)
889dc035 1164 snprintf (errmsg, err_len, "'%s' is not a function", name2);
8ad15a0a
JW
1165 return 0;
1166 }
1167
1168 if (s1->attr.subroutine && s2->attr.function)
1169 {
1170 if (errmsg != NULL)
889dc035 1171 snprintf (errmsg, err_len, "'%s' is not a subroutine", name2);
8ad15a0a
JW
1172 return 0;
1173 }
3afadac3 1174
58c1ae36
JW
1175 /* Do strict checks on all characteristics
1176 (for dummy procedures and procedure pointer assignments). */
1177 if (!generic_flag && strict_flag)
6cc309c9 1178 {
58c1ae36 1179 if (s1->attr.function && s2->attr.function)
8ad15a0a 1180 {
ef71fdd9 1181 /* If both are functions, check result type. */
58c1ae36
JW
1182 if (s1->ts.type == BT_UNKNOWN)
1183 return 1;
ef71fdd9 1184 if (!compare_type_rank (s1,s2))
58c1ae36
JW
1185 {
1186 if (errmsg != NULL)
ef71fdd9 1187 snprintf (errmsg, err_len, "Type/rank mismatch in return value "
58c1ae36
JW
1188 "of '%s'", name2);
1189 return 0;
1190 }
97f26732
JW
1191
1192 /* FIXME: Check array bounds and string length of result. */
58c1ae36
JW
1193 }
1194
1195 if (s1->attr.pure && !s2->attr.pure)
1196 {
1197 snprintf (errmsg, err_len, "Mismatch in PURE attribute");
1198 return 0;
1199 }
1200 if (s1->attr.elemental && !s2->attr.elemental)
1201 {
1202 snprintf (errmsg, err_len, "Mismatch in ELEMENTAL attribute");
8ad15a0a
JW
1203 return 0;
1204 }
6cc309c9 1205 }
26033479 1206
8ad15a0a
JW
1207 if (s1->attr.if_source == IFSRC_UNKNOWN
1208 || s2->attr.if_source == IFSRC_UNKNOWN)
26033479 1209 return 1;
26033479 1210
c73b6478
JW
1211 f1 = s1->formal;
1212 f2 = s2->formal;
26033479 1213
c73b6478 1214 if (f1 == NULL && f2 == NULL)
8ad15a0a 1215 return 1; /* Special case: No arguments. */
6cc309c9 1216
c73b6478 1217 if (generic_flag)
6cc309c9 1218 {
6f3ab30d
JW
1219 if (count_types_test (f1, f2, p1, p2)
1220 || count_types_test (f2, f1, p2, p1))
e26f5548 1221 return 0;
6f3ab30d
JW
1222 if (generic_correspondence (f1, f2, p1, p2)
1223 || generic_correspondence (f2, f1, p2, p1))
6cc309c9 1224 return 0;
6cc309c9 1225 }
c73b6478 1226 else
8ad15a0a
JW
1227 /* Perform the abbreviated correspondence test for operators (the
1228 arguments cannot be optional and are always ordered correctly).
1229 This is also done when comparing interfaces for dummy procedures and in
1230 procedure pointer assignments. */
1231
1232 for (;;)
1233 {
1234 /* Check existence. */
1235 if (f1 == NULL && f2 == NULL)
1236 break;
1237 if (f1 == NULL || f2 == NULL)
1238 {
1239 if (errmsg != NULL)
1240 snprintf (errmsg, err_len, "'%s' has the wrong number of "
889dc035 1241 "arguments", name2);
8ad15a0a
JW
1242 return 0;
1243 }
1244
58c1ae36 1245 if (strict_flag)
8ad15a0a 1246 {
9795c594
JW
1247 /* Check all characteristics. */
1248 if (check_dummy_characteristics (f1->sym, f2->sym,
1249 true, errmsg, err_len) == FAILURE)
1250 return 0;
1251 }
1252 else if (!compare_type_rank (f2->sym, f1->sym))
1253 {
1254 /* Only check type and rank. */
8ad15a0a
JW
1255 if (errmsg != NULL)
1256 snprintf (errmsg, err_len, "Type/rank mismatch in argument '%s'",
1257 f1->sym->name);
1258 return 0;
1259 }
1260
8ad15a0a
JW
1261 f1 = f1->next;
1262 f2 = f2->next;
1263 }
1264
6cc309c9
JD
1265 return 1;
1266}
1267
1268
6de9cd9a 1269/* Given a pointer to an interface pointer, remove duplicate
284d58f1
DF
1270 interfaces and make sure that all symbols are either functions
1271 or subroutines, and all of the same kind. Returns nonzero if
1272 something goes wrong. */
6de9cd9a
DN
1273
1274static int
b251af97 1275check_interface0 (gfc_interface *p, const char *interface_name)
6de9cd9a
DN
1276{
1277 gfc_interface *psave, *q, *qlast;
1278
1279 psave = p;
6de9cd9a 1280 for (; p; p = p->next)
284d58f1
DF
1281 {
1282 /* Make sure all symbols in the interface have been defined as
1283 functions or subroutines. */
c3f34952
TB
1284 if (((!p->sym->attr.function && !p->sym->attr.subroutine)
1285 || !p->sym->attr.if_source)
1286 && p->sym->attr.flavor != FL_DERIVED)
284d58f1
DF
1287 {
1288 if (p->sym->attr.external)
1289 gfc_error ("Procedure '%s' in %s at %L has no explicit interface",
1290 p->sym->name, interface_name, &p->sym->declared_at);
1291 else
1292 gfc_error ("Procedure '%s' in %s at %L is neither function nor "
1293 "subroutine", p->sym->name, interface_name,
1294 &p->sym->declared_at);
1295 return 1;
1296 }
1297
1298 /* Verify that procedures are either all SUBROUTINEs or all FUNCTIONs. */
c3f34952
TB
1299 if ((psave->sym->attr.function && !p->sym->attr.function
1300 && p->sym->attr.flavor != FL_DERIVED)
284d58f1
DF
1301 || (psave->sym->attr.subroutine && !p->sym->attr.subroutine))
1302 {
c3f34952
TB
1303 if (p->sym->attr.flavor != FL_DERIVED)
1304 gfc_error ("In %s at %L procedures must be either all SUBROUTINEs"
1305 " or all FUNCTIONs", interface_name,
1306 &p->sym->declared_at);
1307 else
1308 gfc_error ("In %s at %L procedures must be all FUNCTIONs as the "
1309 "generic name is also the name of a derived type",
1310 interface_name, &p->sym->declared_at);
284d58f1
DF
1311 return 1;
1312 }
a300121e 1313
d2c5dbf2 1314 /* F2003, C1207. F2008, C1207. */
a300121e 1315 if (p->sym->attr.proc == PROC_INTERNAL
9717f7a1 1316 && gfc_notify_std (GFC_STD_F2008, "Internal procedure "
d2c5dbf2 1317 "'%s' in %s at %L", p->sym->name, interface_name,
a300121e
TB
1318 &p->sym->declared_at) == FAILURE)
1319 return 1;
284d58f1 1320 }
6de9cd9a
DN
1321 p = psave;
1322
1323 /* Remove duplicate interfaces in this interface list. */
1324 for (; p; p = p->next)
1325 {
1326 qlast = p;
1327
1328 for (q = p->next; q;)
1329 {
1330 if (p->sym != q->sym)
1331 {
1332 qlast = q;
1333 q = q->next;
6de9cd9a
DN
1334 }
1335 else
1336 {
66e4ab31 1337 /* Duplicate interface. */
6de9cd9a 1338 qlast->next = q->next;
cede9502 1339 free (q);
6de9cd9a
DN
1340 q = qlast->next;
1341 }
1342 }
1343 }
1344
1345 return 0;
1346}
1347
1348
1349/* Check lists of interfaces to make sure that no two interfaces are
66e4ab31 1350 ambiguous. Duplicate interfaces (from the same symbol) are OK here. */
6de9cd9a
DN
1351
1352static int
b251af97 1353check_interface1 (gfc_interface *p, gfc_interface *q0,
993ef28f 1354 int generic_flag, const char *interface_name,
26f2ca2b 1355 bool referenced)
6de9cd9a 1356{
b251af97 1357 gfc_interface *q;
6de9cd9a 1358 for (; p; p = p->next)
991f3b12 1359 for (q = q0; q; q = q->next)
6de9cd9a
DN
1360 {
1361 if (p->sym == q->sym)
66e4ab31 1362 continue; /* Duplicates OK here. */
6de9cd9a 1363
312ae8f4 1364 if (p->sym->name == q->sym->name && p->sym->module == q->sym->module)
6de9cd9a
DN
1365 continue;
1366
c3f34952
TB
1367 if (p->sym->attr.flavor != FL_DERIVED
1368 && q->sym->attr.flavor != FL_DERIVED
1369 && gfc_compare_interfaces (p->sym, q->sym, q->sym->name,
6f3ab30d 1370 generic_flag, 0, NULL, 0, NULL, NULL))
6de9cd9a 1371 {
993ef28f 1372 if (referenced)
ae7c61de
JW
1373 gfc_error ("Ambiguous interfaces '%s' and '%s' in %s at %L",
1374 p->sym->name, q->sym->name, interface_name,
1375 &p->where);
1376 else if (!p->sym->attr.use_assoc && q->sym->attr.use_assoc)
993ef28f
PT
1377 gfc_warning ("Ambiguous interfaces '%s' and '%s' in %s at %L",
1378 p->sym->name, q->sym->name, interface_name,
1379 &p->where);
ae7c61de
JW
1380 else
1381 gfc_warning ("Although not referenced, '%s' has ambiguous "
1382 "interfaces at %L", interface_name, &p->where);
6de9cd9a
DN
1383 return 1;
1384 }
1385 }
6de9cd9a
DN
1386 return 0;
1387}
1388
1389
1390/* Check the generic and operator interfaces of symbols to make sure
1391 that none of the interfaces conflict. The check has to be done
1392 after all of the symbols are actually loaded. */
1393
1394static void
b251af97 1395check_sym_interfaces (gfc_symbol *sym)
6de9cd9a
DN
1396{
1397 char interface_name[100];
71f77fd7 1398 gfc_interface *p;
6de9cd9a
DN
1399
1400 if (sym->ns != gfc_current_ns)
1401 return;
1402
1403 if (sym->generic != NULL)
1404 {
1405 sprintf (interface_name, "generic interface '%s'", sym->name);
1406 if (check_interface0 (sym->generic, interface_name))
1407 return;
1408
71f77fd7
PT
1409 for (p = sym->generic; p; p = p->next)
1410 {
cdd244b8
TB
1411 if (sym->attr.access != ACCESS_PRIVATE)
1412 p->sym->attr.public_used = 1;
1413
abf86978
TB
1414 if (p->sym->attr.mod_proc
1415 && (p->sym->attr.if_source != IFSRC_DECL
1416 || p->sym->attr.procedure))
71f77fd7 1417 {
e9f63ace
TB
1418 gfc_error ("'%s' at %L is not a module procedure",
1419 p->sym->name, &p->where);
71f77fd7
PT
1420 return;
1421 }
1422 }
1423
4c256e34 1424 /* Originally, this test was applied to host interfaces too;
993ef28f
PT
1425 this is incorrect since host associated symbols, from any
1426 source, cannot be ambiguous with local symbols. */
ae7c61de
JW
1427 check_interface1 (sym->generic, sym->generic, 1, interface_name,
1428 sym->attr.referenced || !sym->attr.use_assoc);
6de9cd9a
DN
1429 }
1430}
1431
1432
1433static void
b251af97 1434check_uop_interfaces (gfc_user_op *uop)
6de9cd9a
DN
1435{
1436 char interface_name[100];
1437 gfc_user_op *uop2;
1438 gfc_namespace *ns;
cdd244b8 1439 gfc_interface *p;
6de9cd9a
DN
1440
1441 sprintf (interface_name, "operator interface '%s'", uop->name);
a1ee985f 1442 if (check_interface0 (uop->op, interface_name))
6de9cd9a
DN
1443 return;
1444
cdd244b8
TB
1445 if (uop->access != ACCESS_PRIVATE)
1446 for (p = uop->op; p; p = p->next)
1447 p->sym->attr.public_used = 1;
1448
6de9cd9a
DN
1449 for (ns = gfc_current_ns; ns; ns = ns->parent)
1450 {
1451 uop2 = gfc_find_uop (uop->name, ns);
1452 if (uop2 == NULL)
1453 continue;
1454
a1ee985f 1455 check_interface1 (uop->op, uop2->op, 0,
26f2ca2b 1456 interface_name, true);
6de9cd9a
DN
1457 }
1458}
1459
fb03a37e
TK
1460/* Given an intrinsic op, return an equivalent op if one exists,
1461 or INTRINSIC_NONE otherwise. */
1462
1463gfc_intrinsic_op
1464gfc_equivalent_op (gfc_intrinsic_op op)
1465{
1466 switch(op)
1467 {
1468 case INTRINSIC_EQ:
1469 return INTRINSIC_EQ_OS;
1470
1471 case INTRINSIC_EQ_OS:
1472 return INTRINSIC_EQ;
1473
1474 case INTRINSIC_NE:
1475 return INTRINSIC_NE_OS;
1476
1477 case INTRINSIC_NE_OS:
1478 return INTRINSIC_NE;
1479
1480 case INTRINSIC_GT:
1481 return INTRINSIC_GT_OS;
1482
1483 case INTRINSIC_GT_OS:
1484 return INTRINSIC_GT;
1485
1486 case INTRINSIC_GE:
1487 return INTRINSIC_GE_OS;
1488
1489 case INTRINSIC_GE_OS:
1490 return INTRINSIC_GE;
1491
1492 case INTRINSIC_LT:
1493 return INTRINSIC_LT_OS;
1494
1495 case INTRINSIC_LT_OS:
1496 return INTRINSIC_LT;
1497
1498 case INTRINSIC_LE:
1499 return INTRINSIC_LE_OS;
1500
1501 case INTRINSIC_LE_OS:
1502 return INTRINSIC_LE;
1503
1504 default:
1505 return INTRINSIC_NONE;
1506 }
1507}
6de9cd9a
DN
1508
1509/* For the namespace, check generic, user operator and intrinsic
1510 operator interfaces for consistency and to remove duplicate
1511 interfaces. We traverse the whole namespace, counting on the fact
1512 that most symbols will not have generic or operator interfaces. */
1513
1514void
b251af97 1515gfc_check_interfaces (gfc_namespace *ns)
6de9cd9a
DN
1516{
1517 gfc_namespace *old_ns, *ns2;
cdd244b8 1518 gfc_interface *p;
6de9cd9a 1519 char interface_name[100];
09639a83 1520 int i;
6de9cd9a
DN
1521
1522 old_ns = gfc_current_ns;
1523 gfc_current_ns = ns;
1524
1525 gfc_traverse_ns (ns, check_sym_interfaces);
1526
1527 gfc_traverse_user_op (ns, check_uop_interfaces);
1528
1529 for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++)
1530 {
1531 if (i == INTRINSIC_USER)
1532 continue;
1533
1534 if (i == INTRINSIC_ASSIGN)
1535 strcpy (interface_name, "intrinsic assignment operator");
1536 else
1537 sprintf (interface_name, "intrinsic '%s' operator",
09639a83 1538 gfc_op2string ((gfc_intrinsic_op) i));
6de9cd9a 1539
a1ee985f 1540 if (check_interface0 (ns->op[i], interface_name))
6de9cd9a
DN
1541 continue;
1542
cdd244b8
TB
1543 for (p = ns->op[i]; p; p = p->next)
1544 p->sym->attr.public_used = 1;
1545
1546
94747289
DK
1547 if (ns->op[i])
1548 gfc_check_operator_interface (ns->op[i]->sym, (gfc_intrinsic_op) i,
1549 ns->op[i]->where);
6de9cd9a 1550
3bed9dd0
DF
1551 for (ns2 = ns; ns2; ns2 = ns2->parent)
1552 {
fb03a37e
TK
1553 gfc_intrinsic_op other_op;
1554
a1ee985f 1555 if (check_interface1 (ns->op[i], ns2->op[i], 0,
3bed9dd0
DF
1556 interface_name, true))
1557 goto done;
1558
fb03a37e
TK
1559 /* i should be gfc_intrinsic_op, but has to be int with this cast
1560 here for stupid C++ compatibility rules. */
1561 other_op = gfc_equivalent_op ((gfc_intrinsic_op) i);
1562 if (other_op != INTRINSIC_NONE
1563 && check_interface1 (ns->op[i], ns2->op[other_op],
1564 0, interface_name, true))
1565 goto done;
3bed9dd0 1566 }
6de9cd9a
DN
1567 }
1568
3bed9dd0 1569done:
6de9cd9a
DN
1570 gfc_current_ns = old_ns;
1571}
1572
1573
1574static int
b251af97 1575symbol_rank (gfc_symbol *sym)
6de9cd9a 1576{
c49ea23d
PT
1577 if (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as)
1578 return CLASS_DATA (sym)->as->rank;
1579
6de9cd9a
DN
1580 return (sym->as == NULL) ? 0 : sym->as->rank;
1581}
1582
1583
aa08038d
EE
1584/* Given a symbol of a formal argument list and an expression, if the
1585 formal argument is allocatable, check that the actual argument is
1586 allocatable. Returns nonzero if compatible, zero if not compatible. */
1587
1588static int
b251af97 1589compare_allocatable (gfc_symbol *formal, gfc_expr *actual)
aa08038d
EE
1590{
1591 symbol_attribute attr;
1592
5ac13b8e
JW
1593 if (formal->attr.allocatable
1594 || (formal->ts.type == BT_CLASS && CLASS_DATA (formal)->attr.allocatable))
aa08038d
EE
1595 {
1596 attr = gfc_expr_attr (actual);
1597 if (!attr.allocatable)
1598 return 0;
1599 }
1600
1601 return 1;
1602}
1603
1604
6de9cd9a
DN
1605/* Given a symbol of a formal argument list and an expression, if the
1606 formal argument is a pointer, see if the actual argument is a
1607 pointer. Returns nonzero if compatible, zero if not compatible. */
1608
1609static int
b251af97 1610compare_pointer (gfc_symbol *formal, gfc_expr *actual)
6de9cd9a
DN
1611{
1612 symbol_attribute attr;
1613
f18075ff
TB
1614 if (formal->attr.pointer
1615 || (formal->ts.type == BT_CLASS && CLASS_DATA (formal)
1616 && CLASS_DATA (formal)->attr.class_pointer))
6de9cd9a
DN
1617 {
1618 attr = gfc_expr_attr (actual);
7d54ef80
TB
1619
1620 /* Fortran 2008 allows non-pointer actual arguments. */
1621 if (!attr.pointer && attr.target && formal->attr.intent == INTENT_IN)
1622 return 2;
1623
6de9cd9a
DN
1624 if (!attr.pointer)
1625 return 0;
1626 }
1627
1628 return 1;
1629}
1630
1631
a516520c
PT
1632/* Emit clear error messages for rank mismatch. */
1633
1634static void
1635argument_rank_mismatch (const char *name, locus *where,
1636 int rank1, int rank2)
1637{
1638 if (rank1 == 0)
1639 {
1640 gfc_error ("Rank mismatch in argument '%s' at %L "
1641 "(scalar and rank-%d)", name, where, rank2);
1642 }
1643 else if (rank2 == 0)
1644 {
1645 gfc_error ("Rank mismatch in argument '%s' at %L "
1646 "(rank-%d and scalar)", name, where, rank1);
1647 }
1648 else
1649 {
1650 gfc_error ("Rank mismatch in argument '%s' at %L "
1651 "(rank-%d and rank-%d)", name, where, rank1, rank2);
1652 }
1653}
1654
1655
6de9cd9a
DN
1656/* Given a symbol of a formal argument list and an expression, see if
1657 the two are compatible as arguments. Returns nonzero if
1658 compatible, zero if not compatible. */
1659
1660static int
b251af97 1661compare_parameter (gfc_symbol *formal, gfc_expr *actual,
5ad6345e 1662 int ranks_must_agree, int is_elemental, locus *where)
6de9cd9a
DN
1663{
1664 gfc_ref *ref;
975b975b 1665 bool rank_check, is_pointer;
6de9cd9a 1666
a8b3b0b6
CR
1667 /* If the formal arg has type BT_VOID, it's to one of the iso_c_binding
1668 procs c_f_pointer or c_f_procpointer, and we need to accept most
1669 pointers the user could give us. This should allow that. */
1670 if (formal->ts.type == BT_VOID)
1671 return 1;
1672
1673 if (formal->ts.type == BT_DERIVED
bc21d315 1674 && formal->ts.u.derived && formal->ts.u.derived->ts.is_iso_c
a8b3b0b6 1675 && actual->ts.type == BT_DERIVED
bc21d315 1676 && actual->ts.u.derived && actual->ts.u.derived->ts.is_iso_c)
a8b3b0b6
CR
1677 return 1;
1678
7d58b9e7 1679 if (formal->ts.type == BT_CLASS && actual->ts.type == BT_DERIVED)
e10f52d0
JW
1680 /* Make sure the vtab symbol is present when
1681 the module variables are generated. */
7d58b9e7 1682 gfc_find_derived_vtab (actual->ts.u.derived);
e10f52d0 1683
6de9cd9a
DN
1684 if (actual->ts.type == BT_PROCEDURE)
1685 {
8ad15a0a 1686 char err[200];
9b63f282 1687 gfc_symbol *act_sym = actual->symtree->n.sym;
6de9cd9a 1688
8ad15a0a
JW
1689 if (formal->attr.flavor != FL_PROCEDURE)
1690 {
1691 if (where)
1692 gfc_error ("Invalid procedure argument at %L", &actual->where);
1693 return 0;
1694 }
6de9cd9a 1695
889dc035 1696 if (!gfc_compare_interfaces (formal, act_sym, act_sym->name, 0, 1, err,
6f3ab30d 1697 sizeof(err), NULL, NULL))
8ad15a0a
JW
1698 {
1699 if (where)
1700 gfc_error ("Interface mismatch in dummy procedure '%s' at %L: %s",
1701 formal->name, &actual->where, err);
1702 return 0;
1703 }
5ad6345e 1704
9b63f282 1705 if (formal->attr.function && !act_sym->attr.function)
03bd096b
JW
1706 {
1707 gfc_add_function (&act_sym->attr, act_sym->name,
1708 &act_sym->declared_at);
1709 if (act_sym->ts.type == BT_UNKNOWN
1710 && gfc_set_default_type (act_sym, 1, act_sym->ns) == FAILURE)
1711 return 0;
1712 }
1713 else if (formal->attr.subroutine && !act_sym->attr.subroutine)
9b63f282
JW
1714 gfc_add_subroutine (&act_sym->attr, act_sym->name,
1715 &act_sym->declared_at);
1716
5ad6345e 1717 return 1;
6de9cd9a
DN
1718 }
1719
fe4e525c
TB
1720 /* F2008, C1241. */
1721 if (formal->attr.pointer && formal->attr.contiguous
1722 && !gfc_is_simply_contiguous (actual, true))
1723 {
1724 if (where)
1725 gfc_error ("Actual argument to contiguous pointer dummy '%s' at %L "
1726 "must be simply contigous", formal->name, &actual->where);
1727 return 0;
1728 }
1729
90aeadcb 1730 if ((actual->expr_type != EXPR_NULL || actual->ts.type != BT_UNKNOWN)
df161b69 1731 && actual->ts.type != BT_HOLLERITH
45a69325 1732 && formal->ts.type != BT_ASSUMED
c49ea23d
PT
1733 && !gfc_compare_types (&formal->ts, &actual->ts)
1734 && !(formal->ts.type == BT_DERIVED && actual->ts.type == BT_CLASS
1735 && gfc_compare_derived_types (formal->ts.u.derived,
1736 CLASS_DATA (actual)->ts.u.derived)))
5ad6345e 1737 {
d68e117b 1738 if (where)
5ad6345e 1739 gfc_error ("Type mismatch in argument '%s' at %L; passed %s to %s",
d68e117b
TB
1740 formal->name, &actual->where, gfc_typename (&actual->ts),
1741 gfc_typename (&formal->ts));
5ad6345e
TB
1742 return 0;
1743 }
f18075ff
TB
1744
1745 /* F2008, 12.5.2.5; IR F08/0073. */
5ac13b8e 1746 if (formal->ts.type == BT_CLASS
f18075ff
TB
1747 && ((CLASS_DATA (formal)->attr.class_pointer
1748 && !formal->attr.intent == INTENT_IN)
5ac13b8e
JW
1749 || CLASS_DATA (formal)->attr.allocatable))
1750 {
1751 if (actual->ts.type != BT_CLASS)
1752 {
1753 if (where)
1754 gfc_error ("Actual argument to '%s' at %L must be polymorphic",
1755 formal->name, &actual->where);
1756 return 0;
1757 }
076ec830
TB
1758 if (!gfc_compare_derived_types (CLASS_DATA (actual)->ts.u.derived,
1759 CLASS_DATA (formal)->ts.u.derived))
5ac13b8e
JW
1760 {
1761 if (where)
1762 gfc_error ("Actual argument to '%s' at %L must have the same "
1763 "declared type", formal->name, &actual->where);
1764 return 0;
1765 }
1766 }
6de9cd9a 1767
394d3a2e 1768 if (formal->attr.codimension && !gfc_is_coarray (actual))
d3a9eea2 1769 {
394d3a2e
TB
1770 if (where)
1771 gfc_error ("Actual argument to '%s' at %L must be a coarray",
d3a9eea2 1772 formal->name, &actual->where);
394d3a2e
TB
1773 return 0;
1774 }
d3a9eea2 1775
394d3a2e
TB
1776 if (formal->attr.codimension && formal->attr.allocatable)
1777 {
1778 gfc_ref *last = NULL;
a3935ffc 1779
d3a9eea2 1780 for (ref = actual->ref; ref; ref = ref->next)
394d3a2e
TB
1781 if (ref->type == REF_COMPONENT)
1782 last = ref;
d3a9eea2 1783
d3a9eea2 1784 /* F2008, 12.5.2.6. */
394d3a2e
TB
1785 if ((last && last->u.c.component->as->corank != formal->as->corank)
1786 || (!last
1787 && actual->symtree->n.sym->as->corank != formal->as->corank))
d3a9eea2
TB
1788 {
1789 if (where)
1790 gfc_error ("Corank mismatch in argument '%s' at %L (%d and %d)",
1791 formal->name, &actual->where, formal->as->corank,
1792 last ? last->u.c.component->as->corank
1793 : actual->symtree->n.sym->as->corank);
1794 return 0;
1795 }
394d3a2e 1796 }
fe4e525c 1797
394d3a2e
TB
1798 if (formal->attr.codimension)
1799 {
fe4e525c
TB
1800 /* F2008, 12.5.2.8. */
1801 if (formal->attr.dimension
1802 && (formal->attr.contiguous || formal->as->type != AS_ASSUMED_SHAPE)
e6242bc7 1803 && gfc_expr_attr (actual).dimension
fe4e525c
TB
1804 && !gfc_is_simply_contiguous (actual, true))
1805 {
1806 if (where)
1807 gfc_error ("Actual argument to '%s' at %L must be simply "
1808 "contiguous", formal->name, &actual->where);
1809 return 0;
1810 }
fea54935
TB
1811
1812 /* F2008, C1303 and C1304. */
1813 if (formal->attr.intent != INTENT_INOUT
1814 && (((formal->ts.type == BT_DERIVED || formal->ts.type == BT_CLASS)
1815 && formal->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
1816 && formal->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)
1817 || formal->attr.lock_comp))
1818
1819 {
1820 if (where)
1821 gfc_error ("Actual argument to non-INTENT(INOUT) dummy '%s' at %L, "
1822 "which is LOCK_TYPE or has a LOCK_TYPE component",
1823 formal->name, &actual->where);
1824 return 0;
1825 }
394d3a2e 1826 }
fe4e525c
TB
1827
1828 /* F2008, C1239/C1240. */
1829 if (actual->expr_type == EXPR_VARIABLE
1830 && (actual->symtree->n.sym->attr.asynchronous
1831 || actual->symtree->n.sym->attr.volatile_)
1832 && (formal->attr.asynchronous || formal->attr.volatile_)
1833 && actual->rank && !gfc_is_simply_contiguous (actual, true)
1834 && ((formal->as->type != AS_ASSUMED_SHAPE && !formal->attr.pointer)
1835 || formal->attr.contiguous))
1836 {
1837 if (where)
1838 gfc_error ("Dummy argument '%s' has to be a pointer or assumed-shape "
1839 "array without CONTIGUOUS attribute - as actual argument at"
1840 " %L is not simply contiguous and both are ASYNCHRONOUS "
1841 "or VOLATILE", formal->name, &actual->where);
1842 return 0;
d3a9eea2
TB
1843 }
1844
427180d2
TB
1845 if (formal->attr.allocatable && !formal->attr.codimension
1846 && gfc_expr_attr (actual).codimension)
1847 {
1848 if (formal->attr.intent == INTENT_OUT)
1849 {
1850 if (where)
1851 gfc_error ("Passing coarray at %L to allocatable, noncoarray, "
1852 "INTENT(OUT) dummy argument '%s'", &actual->where,
1853 formal->name);
1854 return 0;
1855 }
1856 else if (gfc_option.warn_surprising && where
1857 && formal->attr.intent != INTENT_IN)
1858 gfc_warning ("Passing coarray at %L to allocatable, noncoarray dummy "
1859 "argument '%s', which is invalid if the allocation status"
1860 " is modified", &actual->where, formal->name);
1861 }
1862
6de9cd9a
DN
1863 if (symbol_rank (formal) == actual->rank)
1864 return 1;
1865
c49ea23d
PT
1866 if (actual->ts.type == BT_CLASS && CLASS_DATA (actual)->as
1867 && CLASS_DATA (actual)->as->rank == symbol_rank (formal))
1868 return 1;
1869
5ad6345e
TB
1870 rank_check = where != NULL && !is_elemental && formal->as
1871 && (formal->as->type == AS_ASSUMED_SHAPE
d8a8dab3
TB
1872 || formal->as->type == AS_DEFERRED)
1873 && actual->expr_type != EXPR_NULL;
6de9cd9a 1874
d3a9eea2 1875 /* Scalar & coindexed, see: F2008, Section 12.5.2.4. */
d8a8dab3
TB
1876 if (rank_check || ranks_must_agree
1877 || (formal->attr.pointer && actual->expr_type != EXPR_NULL)
5ad6345e 1878 || (actual->rank != 0 && !(is_elemental || formal->attr.dimension))
c49ea23d
PT
1879 || (actual->rank == 0
1880 && ((formal->ts.type == BT_CLASS
1881 && CLASS_DATA (formal)->as->type == AS_ASSUMED_SHAPE)
1882 || (formal->ts.type != BT_CLASS
1883 && formal->as->type == AS_ASSUMED_SHAPE))
08857b61 1884 && actual->expr_type != EXPR_NULL)
d3a9eea2
TB
1885 || (actual->rank == 0 && formal->attr.dimension
1886 && gfc_is_coindexed (actual)))
5ad6345e
TB
1887 {
1888 if (where)
a516520c
PT
1889 argument_rank_mismatch (formal->name, &actual->where,
1890 symbol_rank (formal), actual->rank);
6de9cd9a 1891 return 0;
5ad6345e
TB
1892 }
1893 else if (actual->rank != 0 && (is_elemental || formal->attr.dimension))
1894 return 1;
1895
1896 /* At this point, we are considering a scalar passed to an array. This
975b975b 1897 is valid (cf. F95 12.4.1.1, F2003 12.4.1.2, and F2008 12.5.2.4),
5ad6345e 1898 - if the actual argument is (a substring of) an element of a
975b975b
TB
1899 non-assumed-shape/non-pointer/non-polymorphic array; or
1900 - (F2003) if the actual argument is of type character of default/c_char
1901 kind. */
1902
1903 is_pointer = actual->expr_type == EXPR_VARIABLE
1904 ? actual->symtree->n.sym->attr.pointer : false;
6de9cd9a
DN
1905
1906 for (ref = actual->ref; ref; ref = ref->next)
975b975b
TB
1907 {
1908 if (ref->type == REF_COMPONENT)
1909 is_pointer = ref->u.c.component->attr.pointer;
1910 else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT
1911 && ref->u.ar.dimen > 0
1912 && (!ref->next
1913 || (ref->next->type == REF_SUBSTRING && !ref->next->next)))
1914 break;
1915 }
1916
1917 if (actual->ts.type == BT_CLASS && actual->expr_type != EXPR_NULL)
1918 {
1919 if (where)
1920 gfc_error ("Polymorphic scalar passed to array dummy argument '%s' "
1921 "at %L", formal->name, &actual->where);
1922 return 0;
1923 }
1924
1925 if (actual->expr_type != EXPR_NULL && ref && actual->ts.type != BT_CHARACTER
1926 && (is_pointer || ref->u.ar.as->type == AS_ASSUMED_SHAPE))
1927 {
1928 if (where)
1929 gfc_error ("Element of assumed-shaped or pointer "
1930 "array passed to array dummy argument '%s' at %L",
1931 formal->name, &actual->where);
1932 return 0;
1933 }
6de9cd9a 1934
975b975b
TB
1935 if (actual->ts.type == BT_CHARACTER && actual->expr_type != EXPR_NULL
1936 && (!ref || is_pointer || ref->u.ar.as->type == AS_ASSUMED_SHAPE))
5ad6345e 1937 {
975b975b
TB
1938 if (formal->ts.kind != 1 && (gfc_option.allow_std & GFC_STD_GNU) == 0)
1939 {
1940 if (where)
1941 gfc_error ("Extension: Scalar non-default-kind, non-C_CHAR-kind "
1942 "CHARACTER actual argument with array dummy argument "
1943 "'%s' at %L", formal->name, &actual->where);
1944 return 0;
1945 }
1946
5ad6345e
TB
1947 if (where && (gfc_option.allow_std & GFC_STD_F2003) == 0)
1948 {
1949 gfc_error ("Fortran 2003: Scalar CHARACTER actual argument with "
1950 "array dummy argument '%s' at %L",
1951 formal->name, &actual->where);
1952 return 0;
1953 }
1954 else if ((gfc_option.allow_std & GFC_STD_F2003) == 0)
1955 return 0;
1956 else
1957 return 1;
1958 }
975b975b
TB
1959
1960 if (ref == NULL && actual->expr_type != EXPR_NULL)
5ad6345e
TB
1961 {
1962 if (where)
a516520c
PT
1963 argument_rank_mismatch (formal->name, &actual->where,
1964 symbol_rank (formal), actual->rank);
5ad6345e
TB
1965 return 0;
1966 }
1967
6de9cd9a
DN
1968 return 1;
1969}
1970
1971
2d5b90b2
TB
1972/* Returns the storage size of a symbol (formal argument) or
1973 zero if it cannot be determined. */
1974
1975static unsigned long
1976get_sym_storage_size (gfc_symbol *sym)
1977{
1978 int i;
1979 unsigned long strlen, elements;
1980
1981 if (sym->ts.type == BT_CHARACTER)
1982 {
bc21d315
JW
1983 if (sym->ts.u.cl && sym->ts.u.cl->length
1984 && sym->ts.u.cl->length->expr_type == EXPR_CONSTANT)
1985 strlen = mpz_get_ui (sym->ts.u.cl->length->value.integer);
2d5b90b2
TB
1986 else
1987 return 0;
1988 }
1989 else
1990 strlen = 1;
1991
1992 if (symbol_rank (sym) == 0)
1993 return strlen;
1994
1995 elements = 1;
1996 if (sym->as->type != AS_EXPLICIT)
1997 return 0;
1998 for (i = 0; i < sym->as->rank; i++)
1999 {
2000 if (!sym->as || sym->as->upper[i]->expr_type != EXPR_CONSTANT
2001 || sym->as->lower[i]->expr_type != EXPR_CONSTANT)
2002 return 0;
2003
c13af44b
SK
2004 elements *= mpz_get_si (sym->as->upper[i]->value.integer)
2005 - mpz_get_si (sym->as->lower[i]->value.integer) + 1L;
2d5b90b2
TB
2006 }
2007
2008 return strlen*elements;
2009}
2010
2011
2012/* Returns the storage size of an expression (actual argument) or
2013 zero if it cannot be determined. For an array element, it returns
1207ac67 2014 the remaining size as the element sequence consists of all storage
2d5b90b2
TB
2015 units of the actual argument up to the end of the array. */
2016
2017static unsigned long
2018get_expr_storage_size (gfc_expr *e)
2019{
2020 int i;
2021 long int strlen, elements;
6da0839a 2022 long int substrlen = 0;
a0710c29 2023 bool is_str_storage = false;
2d5b90b2
TB
2024 gfc_ref *ref;
2025
2026 if (e == NULL)
2027 return 0;
2028
2029 if (e->ts.type == BT_CHARACTER)
2030 {
bc21d315
JW
2031 if (e->ts.u.cl && e->ts.u.cl->length
2032 && e->ts.u.cl->length->expr_type == EXPR_CONSTANT)
2033 strlen = mpz_get_si (e->ts.u.cl->length->value.integer);
2d5b90b2 2034 else if (e->expr_type == EXPR_CONSTANT
bc21d315 2035 && (e->ts.u.cl == NULL || e->ts.u.cl->length == NULL))
2d5b90b2
TB
2036 strlen = e->value.character.length;
2037 else
2038 return 0;
2039 }
2040 else
2041 strlen = 1; /* Length per element. */
2042
2043 if (e->rank == 0 && !e->ref)
2044 return strlen;
2045
2046 elements = 1;
2047 if (!e->ref)
2048 {
2049 if (!e->shape)
2050 return 0;
2051 for (i = 0; i < e->rank; i++)
2052 elements *= mpz_get_si (e->shape[i]);
2053 return elements*strlen;
2054 }
2055
2056 for (ref = e->ref; ref; ref = ref->next)
2057 {
6da0839a
TB
2058 if (ref->type == REF_SUBSTRING && ref->u.ss.start
2059 && ref->u.ss.start->expr_type == EXPR_CONSTANT)
2060 {
a0710c29
TB
2061 if (is_str_storage)
2062 {
2063 /* The string length is the substring length.
2064 Set now to full string length. */
e323640f 2065 if (!ref->u.ss.length || !ref->u.ss.length->length
a0710c29
TB
2066 || ref->u.ss.length->length->expr_type != EXPR_CONSTANT)
2067 return 0;
2068
2069 strlen = mpz_get_ui (ref->u.ss.length->length->value.integer);
2070 }
2071 substrlen = strlen - mpz_get_ui (ref->u.ss.start->value.integer) + 1;
6da0839a
TB
2072 continue;
2073 }
2074
2d5b90b2
TB
2075 if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION
2076 && ref->u.ar.start && ref->u.ar.end && ref->u.ar.stride
2077 && ref->u.ar.as->upper)
2078 for (i = 0; i < ref->u.ar.dimen; i++)
2079 {
2080 long int start, end, stride;
2081 stride = 1;
37639728 2082
2d5b90b2
TB
2083 if (ref->u.ar.stride[i])
2084 {
2085 if (ref->u.ar.stride[i]->expr_type == EXPR_CONSTANT)
2086 stride = mpz_get_si (ref->u.ar.stride[i]->value.integer);
2087 else
2088 return 0;
2089 }
2090
2091 if (ref->u.ar.start[i])
2092 {
2093 if (ref->u.ar.start[i]->expr_type == EXPR_CONSTANT)
2094 start = mpz_get_si (ref->u.ar.start[i]->value.integer);
2095 else
2096 return 0;
2097 }
37639728
TB
2098 else if (ref->u.ar.as->lower[i]
2099 && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT)
2100 start = mpz_get_si (ref->u.ar.as->lower[i]->value.integer);
2101 else
2102 return 0;
2d5b90b2
TB
2103
2104 if (ref->u.ar.end[i])
2105 {
2106 if (ref->u.ar.end[i]->expr_type == EXPR_CONSTANT)
2107 end = mpz_get_si (ref->u.ar.end[i]->value.integer);
2108 else
2109 return 0;
2110 }
2111 else if (ref->u.ar.as->upper[i]
2112 && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
2113 end = mpz_get_si (ref->u.ar.as->upper[i]->value.integer);
2114 else
2115 return 0;
2116
2117 elements *= (end - start)/stride + 1L;
2118 }
2119 else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_FULL
2120 && ref->u.ar.as->lower && ref->u.ar.as->upper)
2121 for (i = 0; i < ref->u.ar.as->rank; i++)
2122 {
2123 if (ref->u.ar.as->lower[i] && ref->u.ar.as->upper[i]
2124 && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT
2125 && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
da9ad923
TB
2126 elements *= mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
2127 - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
2d5b90b2
TB
2128 + 1L;
2129 else
2130 return 0;
2131 }
6da0839a 2132 else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT
a0710c29
TB
2133 && e->expr_type == EXPR_VARIABLE)
2134 {
93302a24 2135 if (ref->u.ar.as->type == AS_ASSUMED_SHAPE
a0710c29
TB
2136 || e->symtree->n.sym->attr.pointer)
2137 {
2138 elements = 1;
2139 continue;
2140 }
2141
2142 /* Determine the number of remaining elements in the element
2143 sequence for array element designators. */
2144 is_str_storage = true;
2145 for (i = ref->u.ar.dimen - 1; i >= 0; i--)
2146 {
2147 if (ref->u.ar.start[i] == NULL
2148 || ref->u.ar.start[i]->expr_type != EXPR_CONSTANT
2149 || ref->u.ar.as->upper[i] == NULL
2150 || ref->u.ar.as->lower[i] == NULL
2151 || ref->u.ar.as->upper[i]->expr_type != EXPR_CONSTANT
2152 || ref->u.ar.as->lower[i]->expr_type != EXPR_CONSTANT)
2153 return 0;
2154
2155 elements
2156 = elements
2157 * (mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
2158 - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
2159 + 1L)
2160 - (mpz_get_si (ref->u.ar.start[i]->value.integer)
2161 - mpz_get_si (ref->u.ar.as->lower[i]->value.integer));
2162 }
2163 }
2d5b90b2
TB
2164 }
2165
6da0839a 2166 if (substrlen)
a0710c29
TB
2167 return (is_str_storage) ? substrlen + (elements-1)*strlen
2168 : elements*strlen;
2169 else
2170 return elements*strlen;
2d5b90b2
TB
2171}
2172
2173
59be8071
TB
2174/* Given an expression, check whether it is an array section
2175 which has a vector subscript. If it has, one is returned,
2176 otherwise zero. */
2177
03af1e4c
DK
2178int
2179gfc_has_vector_subscript (gfc_expr *e)
59be8071
TB
2180{
2181 int i;
2182 gfc_ref *ref;
2183
2184 if (e == NULL || e->rank == 0 || e->expr_type != EXPR_VARIABLE)
2185 return 0;
2186
2187 for (ref = e->ref; ref; ref = ref->next)
2188 if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION)
2189 for (i = 0; i < ref->u.ar.dimen; i++)
2190 if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
2191 return 1;
2192
2193 return 0;
2194}
2195
2196
6de9cd9a
DN
2197/* Given formal and actual argument lists, see if they are compatible.
2198 If they are compatible, the actual argument list is sorted to
2199 correspond with the formal list, and elements for missing optional
2200 arguments are inserted. If WHERE pointer is nonnull, then we issue
2201 errors when things don't match instead of just returning the status
2202 code. */
2203
f0ac18b7
DK
2204static int
2205compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
2206 int ranks_must_agree, int is_elemental, locus *where)
6de9cd9a 2207{
7b901ac4 2208 gfc_actual_arglist **new_arg, *a, *actual, temp;
6de9cd9a
DN
2209 gfc_formal_arglist *f;
2210 int i, n, na;
2d5b90b2 2211 unsigned long actual_size, formal_size;
c49ea23d 2212 bool full_array = false;
6de9cd9a
DN
2213
2214 actual = *ap;
2215
2216 if (actual == NULL && formal == NULL)
2217 return 1;
2218
2219 n = 0;
2220 for (f = formal; f; f = f->next)
2221 n++;
2222
1145e690 2223 new_arg = XALLOCAVEC (gfc_actual_arglist *, n);
6de9cd9a
DN
2224
2225 for (i = 0; i < n; i++)
7b901ac4 2226 new_arg[i] = NULL;
6de9cd9a
DN
2227
2228 na = 0;
2229 f = formal;
2230 i = 0;
2231
2232 for (a = actual; a; a = a->next, f = f->next)
2233 {
7fcafa71
PT
2234 /* Look for keywords but ignore g77 extensions like %VAL. */
2235 if (a->name != NULL && a->name[0] != '%')
6de9cd9a
DN
2236 {
2237 i = 0;
2238 for (f = formal; f; f = f->next, i++)
2239 {
2240 if (f->sym == NULL)
2241 continue;
2242 if (strcmp (f->sym->name, a->name) == 0)
2243 break;
2244 }
2245
2246 if (f == NULL)
2247 {
2248 if (where)
b251af97
SK
2249 gfc_error ("Keyword argument '%s' at %L is not in "
2250 "the procedure", a->name, &a->expr->where);
6de9cd9a
DN
2251 return 0;
2252 }
2253
7b901ac4 2254 if (new_arg[i] != NULL)
6de9cd9a
DN
2255 {
2256 if (where)
b251af97
SK
2257 gfc_error ("Keyword argument '%s' at %L is already associated "
2258 "with another actual argument", a->name,
2259 &a->expr->where);
6de9cd9a
DN
2260 return 0;
2261 }
2262 }
2263
2264 if (f == NULL)
2265 {
2266 if (where)
b251af97
SK
2267 gfc_error ("More actual than formal arguments in procedure "
2268 "call at %L", where);
6de9cd9a
DN
2269
2270 return 0;
2271 }
2272
2273 if (f->sym == NULL && a->expr == NULL)
2274 goto match;
2275
2276 if (f->sym == NULL)
2277 {
2278 if (where)
b251af97
SK
2279 gfc_error ("Missing alternate return spec in subroutine call "
2280 "at %L", where);
6de9cd9a
DN
2281 return 0;
2282 }
2283
2284 if (a->expr == NULL)
2285 {
2286 if (where)
b251af97
SK
2287 gfc_error ("Unexpected alternate return spec in subroutine "
2288 "call at %L", where);
6de9cd9a
DN
2289 return 0;
2290 }
08857b61
TB
2291
2292 if (a->expr->expr_type == EXPR_NULL && !f->sym->attr.pointer
2293 && (f->sym->attr.allocatable || !f->sym->attr.optional
2294 || (gfc_option.allow_std & GFC_STD_F2008) == 0))
2295 {
2296 if (where && (f->sym->attr.allocatable || !f->sym->attr.optional))
2297 gfc_error ("Unexpected NULL() intrinsic at %L to dummy '%s'",
2298 where, f->sym->name);
2299 else if (where)
2300 gfc_error ("Fortran 2008: Null pointer at %L to non-pointer "
2301 "dummy '%s'", where, f->sym->name);
2302
2303 return 0;
2304 }
5ad6345e
TB
2305
2306 if (!compare_parameter (f->sym, a->expr, ranks_must_agree,
2307 is_elemental, where))
2308 return 0;
6de9cd9a 2309
45a69325
TB
2310 /* TS 29113, 6.3p2. */
2311 if (f->sym->ts.type == BT_ASSUMED
2312 && (a->expr->ts.type == BT_DERIVED
2313 || (a->expr->ts.type == BT_CLASS && CLASS_DATA (a->expr))))
2314 {
2315 gfc_namespace *f2k_derived;
2316
2317 f2k_derived = a->expr->ts.type == BT_DERIVED
2318 ? a->expr->ts.u.derived->f2k_derived
2319 : CLASS_DATA (a->expr)->ts.u.derived->f2k_derived;
2320
2321 if (f2k_derived
2322 && (f2k_derived->finalizers || f2k_derived->tb_sym_root))
2323 {
2324 gfc_error ("Actual argument at %L to assumed-type dummy is of "
2325 "derived type with type-bound or FINAL procedures",
2326 &a->expr->where);
2327 return FAILURE;
2328 }
2329 }
2330
a0710c29
TB
2331 /* Special case for character arguments. For allocatable, pointer
2332 and assumed-shape dummies, the string length needs to match
2333 exactly. */
2d5b90b2 2334 if (a->expr->ts.type == BT_CHARACTER
bc21d315
JW
2335 && a->expr->ts.u.cl && a->expr->ts.u.cl->length
2336 && a->expr->ts.u.cl->length->expr_type == EXPR_CONSTANT
2337 && f->sym->ts.u.cl && f->sym->ts.u.cl && f->sym->ts.u.cl->length
2338 && f->sym->ts.u.cl->length->expr_type == EXPR_CONSTANT
a0710c29
TB
2339 && (f->sym->attr.pointer || f->sym->attr.allocatable
2340 || (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
bc21d315
JW
2341 && (mpz_cmp (a->expr->ts.u.cl->length->value.integer,
2342 f->sym->ts.u.cl->length->value.integer) != 0))
a0324f7b 2343 {
a0710c29
TB
2344 if (where && (f->sym->attr.pointer || f->sym->attr.allocatable))
2345 gfc_warning ("Character length mismatch (%ld/%ld) between actual "
2346 "argument and pointer or allocatable dummy argument "
2347 "'%s' at %L",
bc21d315
JW
2348 mpz_get_si (a->expr->ts.u.cl->length->value.integer),
2349 mpz_get_si (f->sym->ts.u.cl->length->value.integer),
a0710c29
TB
2350 f->sym->name, &a->expr->where);
2351 else if (where)
2352 gfc_warning ("Character length mismatch (%ld/%ld) between actual "
2353 "argument and assumed-shape dummy argument '%s' "
2354 "at %L",
bc21d315
JW
2355 mpz_get_si (a->expr->ts.u.cl->length->value.integer),
2356 mpz_get_si (f->sym->ts.u.cl->length->value.integer),
a0710c29
TB
2357 f->sym->name, &a->expr->where);
2358 return 0;
a0324f7b
TB
2359 }
2360
8d51f26f
PT
2361 if ((f->sym->attr.pointer || f->sym->attr.allocatable)
2362 && f->sym->ts.deferred != a->expr->ts.deferred
2363 && a->expr->ts.type == BT_CHARACTER)
2364 {
2365 if (where)
0c133211 2366 gfc_error ("Actual argument at %L to allocatable or "
8d51f26f
PT
2367 "pointer dummy argument '%s' must have a deferred "
2368 "length type parameter if and only if the dummy has one",
2369 &a->expr->where, f->sym->name);
2370 return 0;
2371 }
2372
c49ea23d
PT
2373 if (f->sym->ts.type == BT_CLASS)
2374 goto skip_size_check;
2375
37639728
TB
2376 actual_size = get_expr_storage_size (a->expr);
2377 formal_size = get_sym_storage_size (f->sym);
93302a24
JW
2378 if (actual_size != 0 && actual_size < formal_size
2379 && a->expr->ts.type != BT_PROCEDURE
2380 && f->sym->attr.flavor != FL_PROCEDURE)
2d5b90b2
TB
2381 {
2382 if (a->expr->ts.type == BT_CHARACTER && !f->sym->as && where)
2383 gfc_warning ("Character length of actual argument shorter "
8d51f26f
PT
2384 "than of dummy argument '%s' (%lu/%lu) at %L",
2385 f->sym->name, actual_size, formal_size,
2386 &a->expr->where);
2d5b90b2
TB
2387 else if (where)
2388 gfc_warning ("Actual argument contains too few "
8d51f26f
PT
2389 "elements for dummy argument '%s' (%lu/%lu) at %L",
2390 f->sym->name, actual_size, formal_size,
2391 &a->expr->where);
2d5b90b2
TB
2392 return 0;
2393 }
2394
c49ea23d
PT
2395 skip_size_check:
2396
8fb74da4
JW
2397 /* Satisfy 12.4.1.3 by ensuring that a procedure pointer actual argument
2398 is provided for a procedure pointer formal argument. */
2399 if (f->sym->attr.proc_pointer
a7c0b11d
JW
2400 && !((a->expr->expr_type == EXPR_VARIABLE
2401 && a->expr->symtree->n.sym->attr.proc_pointer)
2402 || (a->expr->expr_type == EXPR_FUNCTION
2403 && a->expr->symtree->n.sym->result->attr.proc_pointer)
f64edc8b 2404 || gfc_is_proc_ptr_comp (a->expr, NULL)))
8fb74da4
JW
2405 {
2406 if (where)
2407 gfc_error ("Expected a procedure pointer for argument '%s' at %L",
2408 f->sym->name, &a->expr->where);
2409 return 0;
2410 }
2411
699fa7aa
PT
2412 /* Satisfy 12.4.1.2 by ensuring that a procedure actual argument is
2413 provided for a procedure formal argument. */
f64edc8b 2414 if (a->expr->ts.type != BT_PROCEDURE && !gfc_is_proc_ptr_comp (a->expr, NULL)
699fa7aa
PT
2415 && a->expr->expr_type == EXPR_VARIABLE
2416 && f->sym->attr.flavor == FL_PROCEDURE)
2417 {
9914f8cf
PT
2418 if (where)
2419 gfc_error ("Expected a procedure for argument '%s' at %L",
2420 f->sym->name, &a->expr->where);
2421 return 0;
699fa7aa
PT
2422 }
2423
b251af97 2424 if (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE
bf9d2177
JJ
2425 && a->expr->expr_type == EXPR_VARIABLE
2426 && a->expr->symtree->n.sym->as
2427 && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SIZE
2428 && (a->expr->ref == NULL
2429 || (a->expr->ref->type == REF_ARRAY
2430 && a->expr->ref->u.ar.type == AR_FULL)))
2431 {
2432 if (where)
2433 gfc_error ("Actual argument for '%s' cannot be an assumed-size"
2434 " array at %L", f->sym->name, where);
2435 return 0;
2436 }
2437
1600fe22
TS
2438 if (a->expr->expr_type != EXPR_NULL
2439 && compare_pointer (f->sym, a->expr) == 0)
6de9cd9a
DN
2440 {
2441 if (where)
2442 gfc_error ("Actual argument for '%s' must be a pointer at %L",
2443 f->sym->name, &a->expr->where);
2444 return 0;
2445 }
2446
7d54ef80
TB
2447 if (a->expr->expr_type != EXPR_NULL
2448 && (gfc_option.allow_std & GFC_STD_F2008) == 0
2449 && compare_pointer (f->sym, a->expr) == 2)
2450 {
2451 if (where)
2452 gfc_error ("Fortran 2008: Non-pointer actual argument at %L to "
2453 "pointer dummy '%s'", &a->expr->where,f->sym->name);
2454 return 0;
2455 }
2456
2457
d3a9eea2
TB
2458 /* Fortran 2008, C1242. */
2459 if (f->sym->attr.pointer && gfc_is_coindexed (a->expr))
2460 {
2461 if (where)
2462 gfc_error ("Coindexed actual argument at %L to pointer "
2463 "dummy '%s'",
2464 &a->expr->where, f->sym->name);
2465 return 0;
2466 }
2467
2468 /* Fortran 2008, 12.5.2.5 (no constraint). */
2469 if (a->expr->expr_type == EXPR_VARIABLE
2470 && f->sym->attr.intent != INTENT_IN
2471 && f->sym->attr.allocatable
2472 && gfc_is_coindexed (a->expr))
2473 {
2474 if (where)
2475 gfc_error ("Coindexed actual argument at %L to allocatable "
2476 "dummy '%s' requires INTENT(IN)",
2477 &a->expr->where, f->sym->name);
2478 return 0;
2479 }
2480
2481 /* Fortran 2008, C1237. */
2482 if (a->expr->expr_type == EXPR_VARIABLE
2483 && (f->sym->attr.asynchronous || f->sym->attr.volatile_)
2484 && gfc_is_coindexed (a->expr)
2485 && (a->expr->symtree->n.sym->attr.volatile_
2486 || a->expr->symtree->n.sym->attr.asynchronous))
2487 {
2488 if (where)
2489 gfc_error ("Coindexed ASYNCHRONOUS or VOLATILE actual argument at "
b5912b10 2490 "%L requires that dummy '%s' has neither "
d3a9eea2
TB
2491 "ASYNCHRONOUS nor VOLATILE", &a->expr->where,
2492 f->sym->name);
2493 return 0;
2494 }
2495
2496 /* Fortran 2008, 12.5.2.4 (no constraint). */
2497 if (a->expr->expr_type == EXPR_VARIABLE
2498 && f->sym->attr.intent != INTENT_IN && !f->sym->attr.value
2499 && gfc_is_coindexed (a->expr)
2500 && gfc_has_ultimate_allocatable (a->expr))
2501 {
2502 if (where)
2503 gfc_error ("Coindexed actual argument at %L with allocatable "
2504 "ultimate component to dummy '%s' requires either VALUE "
2505 "or INTENT(IN)", &a->expr->where, f->sym->name);
2506 return 0;
2507 }
2508
c49ea23d
PT
2509 if (f->sym->ts.type == BT_CLASS
2510 && CLASS_DATA (f->sym)->attr.allocatable
2511 && gfc_is_class_array_ref (a->expr, &full_array)
2512 && !full_array)
2513 {
2514 if (where)
2515 gfc_error ("Actual CLASS array argument for '%s' must be a full "
2516 "array at %L", f->sym->name, &a->expr->where);
2517 return 0;
2518 }
2519
2520
aa08038d
EE
2521 if (a->expr->expr_type != EXPR_NULL
2522 && compare_allocatable (f->sym, a->expr) == 0)
2523 {
2524 if (where)
2525 gfc_error ("Actual argument for '%s' must be ALLOCATABLE at %L",
2526 f->sym->name, &a->expr->where);
2527 return 0;
2528 }
2529
a920e94a 2530 /* Check intent = OUT/INOUT for definable actual argument. */
8c91ab34
DK
2531 if ((f->sym->attr.intent == INTENT_OUT
2532 || f->sym->attr.intent == INTENT_INOUT))
a920e94a 2533 {
8c91ab34
DK
2534 const char* context = (where
2535 ? _("actual argument to INTENT = OUT/INOUT")
2536 : NULL);
a920e94a 2537
bcb4ad36
TB
2538 if (((f->sym->ts.type == BT_CLASS && f->sym->attr.class_ok
2539 && CLASS_DATA (f->sym)->attr.class_pointer)
2540 || (f->sym->ts.type != BT_CLASS && f->sym->attr.pointer))
fea54935 2541 && gfc_check_vardef_context (a->expr, true, false, context)
8c91ab34
DK
2542 == FAILURE)
2543 return 0;
fea54935 2544 if (gfc_check_vardef_context (a->expr, false, false, context)
8c91ab34
DK
2545 == FAILURE)
2546 return 0;
ee7e677f
TB
2547 }
2548
59be8071
TB
2549 if ((f->sym->attr.intent == INTENT_OUT
2550 || f->sym->attr.intent == INTENT_INOUT
84efddb2
DF
2551 || f->sym->attr.volatile_
2552 || f->sym->attr.asynchronous)
03af1e4c 2553 && gfc_has_vector_subscript (a->expr))
59be8071
TB
2554 {
2555 if (where)
84efddb2
DF
2556 gfc_error ("Array-section actual argument with vector "
2557 "subscripts at %L is incompatible with INTENT(OUT), "
2558 "INTENT(INOUT), VOLATILE or ASYNCHRONOUS attribute "
2559 "of the dummy argument '%s'",
59be8071
TB
2560 &a->expr->where, f->sym->name);
2561 return 0;
2562 }
2563
9bce3c1c
TB
2564 /* C1232 (R1221) For an actual argument which is an array section or
2565 an assumed-shape array, the dummy argument shall be an assumed-
2566 shape array, if the dummy argument has the VOLATILE attribute. */
2567
2568 if (f->sym->attr.volatile_
2569 && a->expr->symtree->n.sym->as
2570 && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
2571 && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2572 {
2573 if (where)
2574 gfc_error ("Assumed-shape actual argument at %L is "
2575 "incompatible with the non-assumed-shape "
2576 "dummy argument '%s' due to VOLATILE attribute",
2577 &a->expr->where,f->sym->name);
2578 return 0;
2579 }
2580
2581 if (f->sym->attr.volatile_
2582 && a->expr->ref && a->expr->ref->u.ar.type == AR_SECTION
2583 && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE))
2584 {
2585 if (where)
2586 gfc_error ("Array-section actual argument at %L is "
2587 "incompatible with the non-assumed-shape "
2588 "dummy argument '%s' due to VOLATILE attribute",
2589 &a->expr->where,f->sym->name);
2590 return 0;
2591 }
2592
2593 /* C1233 (R1221) For an actual argument which is a pointer array, the
2594 dummy argument shall be an assumed-shape or pointer array, if the
2595 dummy argument has the VOLATILE attribute. */
2596
2597 if (f->sym->attr.volatile_
2598 && a->expr->symtree->n.sym->attr.pointer
2599 && a->expr->symtree->n.sym->as
2600 && !(f->sym->as
2601 && (f->sym->as->type == AS_ASSUMED_SHAPE
2602 || f->sym->attr.pointer)))
2603 {
2604 if (where)
2605 gfc_error ("Pointer-array actual argument at %L requires "
2606 "an assumed-shape or pointer-array dummy "
2607 "argument '%s' due to VOLATILE attribute",
2608 &a->expr->where,f->sym->name);
2609 return 0;
2610 }
2611
6de9cd9a
DN
2612 match:
2613 if (a == actual)
2614 na = i;
2615
7b901ac4 2616 new_arg[i++] = a;
6de9cd9a
DN
2617 }
2618
2619 /* Make sure missing actual arguments are optional. */
2620 i = 0;
2621 for (f = formal; f; f = f->next, i++)
2622 {
7b901ac4 2623 if (new_arg[i] != NULL)
6de9cd9a 2624 continue;
3ab7b3de
BM
2625 if (f->sym == NULL)
2626 {
2627 if (where)
b251af97
SK
2628 gfc_error ("Missing alternate return spec in subroutine call "
2629 "at %L", where);
3ab7b3de
BM
2630 return 0;
2631 }
6de9cd9a
DN
2632 if (!f->sym->attr.optional)
2633 {
2634 if (where)
2635 gfc_error ("Missing actual argument for argument '%s' at %L",
2636 f->sym->name, where);
2637 return 0;
2638 }
2639 }
2640
2641 /* The argument lists are compatible. We now relink a new actual
2642 argument list with null arguments in the right places. The head
2643 of the list remains the head. */
2644 for (i = 0; i < n; i++)
7b901ac4
KG
2645 if (new_arg[i] == NULL)
2646 new_arg[i] = gfc_get_actual_arglist ();
6de9cd9a
DN
2647
2648 if (na != 0)
2649 {
7b901ac4
KG
2650 temp = *new_arg[0];
2651 *new_arg[0] = *actual;
6de9cd9a
DN
2652 *actual = temp;
2653
7b901ac4
KG
2654 a = new_arg[0];
2655 new_arg[0] = new_arg[na];
2656 new_arg[na] = a;
6de9cd9a
DN
2657 }
2658
2659 for (i = 0; i < n - 1; i++)
7b901ac4 2660 new_arg[i]->next = new_arg[i + 1];
6de9cd9a 2661
7b901ac4 2662 new_arg[i]->next = NULL;
6de9cd9a
DN
2663
2664 if (*ap == NULL && n > 0)
7b901ac4 2665 *ap = new_arg[0];
6de9cd9a 2666
1600fe22 2667 /* Note the types of omitted optional arguments. */
b5ca4fd2 2668 for (a = *ap, f = formal; a; a = a->next, f = f->next)
1600fe22
TS
2669 if (a->expr == NULL && a->label == NULL)
2670 a->missing_arg_type = f->sym->ts.type;
2671
6de9cd9a
DN
2672 return 1;
2673}
2674
2675
2676typedef struct
2677{
2678 gfc_formal_arglist *f;
2679 gfc_actual_arglist *a;
2680}
2681argpair;
2682
2683/* qsort comparison function for argument pairs, with the following
2684 order:
2685 - p->a->expr == NULL
2686 - p->a->expr->expr_type != EXPR_VARIABLE
f7b529fa 2687 - growing p->a->expr->symbol. */
6de9cd9a
DN
2688
2689static int
2690pair_cmp (const void *p1, const void *p2)
2691{
2692 const gfc_actual_arglist *a1, *a2;
2693
2694 /* *p1 and *p2 are elements of the to-be-sorted array. */
2695 a1 = ((const argpair *) p1)->a;
2696 a2 = ((const argpair *) p2)->a;
2697 if (!a1->expr)
2698 {
2699 if (!a2->expr)
2700 return 0;
2701 return -1;
2702 }
2703 if (!a2->expr)
2704 return 1;
2705 if (a1->expr->expr_type != EXPR_VARIABLE)
2706 {
2707 if (a2->expr->expr_type != EXPR_VARIABLE)
2708 return 0;
2709 return -1;
2710 }
2711 if (a2->expr->expr_type != EXPR_VARIABLE)
2712 return 1;
2713 return a1->expr->symtree->n.sym < a2->expr->symtree->n.sym;
2714}
2715
2716
2717/* Given two expressions from some actual arguments, test whether they
2718 refer to the same expression. The analysis is conservative.
2719 Returning FAILURE will produce no warning. */
2720
17b1d2a0 2721static gfc_try
b251af97 2722compare_actual_expr (gfc_expr *e1, gfc_expr *e2)
6de9cd9a
DN
2723{
2724 const gfc_ref *r1, *r2;
2725
2726 if (!e1 || !e2
2727 || e1->expr_type != EXPR_VARIABLE
2728 || e2->expr_type != EXPR_VARIABLE
2729 || e1->symtree->n.sym != e2->symtree->n.sym)
2730 return FAILURE;
2731
2732 /* TODO: improve comparison, see expr.c:show_ref(). */
2733 for (r1 = e1->ref, r2 = e2->ref; r1 && r2; r1 = r1->next, r2 = r2->next)
2734 {
2735 if (r1->type != r2->type)
2736 return FAILURE;
2737 switch (r1->type)
2738 {
2739 case REF_ARRAY:
2740 if (r1->u.ar.type != r2->u.ar.type)
2741 return FAILURE;
2742 /* TODO: At the moment, consider only full arrays;
2743 we could do better. */
2744 if (r1->u.ar.type != AR_FULL || r2->u.ar.type != AR_FULL)
2745 return FAILURE;
2746 break;
2747
2748 case REF_COMPONENT:
2749 if (r1->u.c.component != r2->u.c.component)
2750 return FAILURE;
2751 break;
2752
2753 case REF_SUBSTRING:
2754 return FAILURE;
2755
2756 default:
2757 gfc_internal_error ("compare_actual_expr(): Bad component code");
2758 }
2759 }
2760 if (!r1 && !r2)
2761 return SUCCESS;
2762 return FAILURE;
2763}
2764
b251af97 2765
6de9cd9a
DN
2766/* Given formal and actual argument lists that correspond to one
2767 another, check that identical actual arguments aren't not
2768 associated with some incompatible INTENTs. */
2769
17b1d2a0 2770static gfc_try
b251af97 2771check_some_aliasing (gfc_formal_arglist *f, gfc_actual_arglist *a)
6de9cd9a
DN
2772{
2773 sym_intent f1_intent, f2_intent;
2774 gfc_formal_arglist *f1;
2775 gfc_actual_arglist *a1;
2776 size_t n, i, j;
2777 argpair *p;
17b1d2a0 2778 gfc_try t = SUCCESS;
6de9cd9a
DN
2779
2780 n = 0;
2781 for (f1 = f, a1 = a;; f1 = f1->next, a1 = a1->next)
2782 {
2783 if (f1 == NULL && a1 == NULL)
2784 break;
2785 if (f1 == NULL || a1 == NULL)
2786 gfc_internal_error ("check_some_aliasing(): List mismatch");
2787 n++;
2788 }
2789 if (n == 0)
2790 return t;
1145e690 2791 p = XALLOCAVEC (argpair, n);
6de9cd9a
DN
2792
2793 for (i = 0, f1 = f, a1 = a; i < n; i++, f1 = f1->next, a1 = a1->next)
2794 {
2795 p[i].f = f1;
2796 p[i].a = a1;
2797 }
2798
2799 qsort (p, n, sizeof (argpair), pair_cmp);
2800
2801 for (i = 0; i < n; i++)
2802 {
2803 if (!p[i].a->expr
2804 || p[i].a->expr->expr_type != EXPR_VARIABLE
2805 || p[i].a->expr->ts.type == BT_PROCEDURE)
2806 continue;
2807 f1_intent = p[i].f->sym->attr.intent;
2808 for (j = i + 1; j < n; j++)
2809 {
2810 /* Expected order after the sort. */
2811 if (!p[j].a->expr || p[j].a->expr->expr_type != EXPR_VARIABLE)
2812 gfc_internal_error ("check_some_aliasing(): corrupted data");
2813
2814 /* Are the expression the same? */
2815 if (compare_actual_expr (p[i].a->expr, p[j].a->expr) == FAILURE)
2816 break;
2817 f2_intent = p[j].f->sym->attr.intent;
2818 if ((f1_intent == INTENT_IN && f2_intent == INTENT_OUT)
2819 || (f1_intent == INTENT_OUT && f2_intent == INTENT_IN))
2820 {
2821 gfc_warning ("Same actual argument associated with INTENT(%s) "
2822 "argument '%s' and INTENT(%s) argument '%s' at %L",
2823 gfc_intent_string (f1_intent), p[i].f->sym->name,
2824 gfc_intent_string (f2_intent), p[j].f->sym->name,
2825 &p[i].a->expr->where);
2826 t = FAILURE;
2827 }
2828 }
2829 }
2830
2831 return t;
2832}
2833
2834
2835/* Given formal and actual argument lists that correspond to one
2836 another, check that they are compatible in the sense that intents
2837 are not mismatched. */
2838
17b1d2a0 2839static gfc_try
b251af97 2840check_intents (gfc_formal_arglist *f, gfc_actual_arglist *a)
6de9cd9a 2841{
f17facac 2842 sym_intent f_intent;
6de9cd9a
DN
2843
2844 for (;; f = f->next, a = a->next)
2845 {
2846 if (f == NULL && a == NULL)
2847 break;
2848 if (f == NULL || a == NULL)
2849 gfc_internal_error ("check_intents(): List mismatch");
2850
2851 if (a->expr == NULL || a->expr->expr_type != EXPR_VARIABLE)
2852 continue;
2853
6de9cd9a
DN
2854 f_intent = f->sym->attr.intent;
2855
6de9cd9a
DN
2856 if (gfc_pure (NULL) && gfc_impure_variable (a->expr->symtree->n.sym))
2857 {
bcb4ad36
TB
2858 if ((f->sym->ts.type == BT_CLASS && f->sym->attr.class_ok
2859 && CLASS_DATA (f->sym)->attr.class_pointer)
2860 || (f->sym->ts.type != BT_CLASS && f->sym->attr.pointer))
6de9cd9a 2861 {
b251af97
SK
2862 gfc_error ("Procedure argument at %L is local to a PURE "
2863 "procedure and has the POINTER attribute",
2864 &a->expr->where);
6de9cd9a
DN
2865 return FAILURE;
2866 }
2867 }
d3a9eea2
TB
2868
2869 /* Fortran 2008, C1283. */
2870 if (gfc_pure (NULL) && gfc_is_coindexed (a->expr))
2871 {
2872 if (f_intent == INTENT_INOUT || f_intent == INTENT_OUT)
2873 {
2874 gfc_error ("Coindexed actual argument at %L in PURE procedure "
2875 "is passed to an INTENT(%s) argument",
2876 &a->expr->where, gfc_intent_string (f_intent));
2877 return FAILURE;
2878 }
2879
bcb4ad36
TB
2880 if ((f->sym->ts.type == BT_CLASS && f->sym->attr.class_ok
2881 && CLASS_DATA (f->sym)->attr.class_pointer)
2882 || (f->sym->ts.type != BT_CLASS && f->sym->attr.pointer))
d3a9eea2
TB
2883 {
2884 gfc_error ("Coindexed actual argument at %L in PURE procedure "
2885 "is passed to a POINTER dummy argument",
2886 &a->expr->where);
2887 return FAILURE;
2888 }
2889 }
2890
2891 /* F2008, Section 12.5.2.4. */
2892 if (a->expr->ts.type == BT_CLASS && f->sym->ts.type == BT_CLASS
2893 && gfc_is_coindexed (a->expr))
2894 {
2895 gfc_error ("Coindexed polymorphic actual argument at %L is passed "
2896 "polymorphic dummy argument '%s'",
2897 &a->expr->where, f->sym->name);
2898 return FAILURE;
2899 }
6de9cd9a
DN
2900 }
2901
2902 return SUCCESS;
2903}
2904
2905
2906/* Check how a procedure is used against its interface. If all goes
2907 well, the actual argument list will also end up being properly
2908 sorted. */
2909
2910void
b251af97 2911gfc_procedure_use (gfc_symbol *sym, gfc_actual_arglist **ap, locus *where)
6de9cd9a 2912{
a9c5fe7e
TK
2913 /* Warn about calls with an implicit interface. Special case
2914 for calling a ISO_C_BINDING becase c_loc and c_funloc
ca071303
FXC
2915 are pseudo-unknown. Additionally, warn about procedures not
2916 explicitly declared at all if requested. */
2917 if (sym->attr.if_source == IFSRC_UNKNOWN && ! sym->attr.is_iso_c)
2918 {
2919 if (gfc_option.warn_implicit_interface)
2920 gfc_warning ("Procedure '%s' called with an implicit interface at %L",
2921 sym->name, where);
2922 else if (gfc_option.warn_implicit_procedure
2923 && sym->attr.proc == PROC_UNKNOWN)
2924 gfc_warning ("Procedure '%s' called at %L is not explicitly declared",
2925 sym->name, where);
2926 }
6de9cd9a 2927
e6895430 2928 if (sym->attr.if_source == IFSRC_UNKNOWN)
ac05557c
DF
2929 {
2930 gfc_actual_arglist *a;
86d7449c
TB
2931
2932 if (sym->attr.pointer)
2933 {
2934 gfc_error("The pointer object '%s' at %L must have an explicit "
2935 "function interface or be declared as array",
2936 sym->name, where);
2937 return;
2938 }
2939
2940 if (sym->attr.allocatable && !sym->attr.external)
2941 {
2942 gfc_error("The allocatable object '%s' at %L must have an explicit "
2943 "function interface or be declared as array",
2944 sym->name, where);
2945 return;
2946 }
2947
2948 if (sym->attr.allocatable)
2949 {
2950 gfc_error("Allocatable function '%s' at %L must have an explicit "
2951 "function interface", sym->name, where);
2952 return;
2953 }
2954
ac05557c
DF
2955 for (a = *ap; a; a = a->next)
2956 {
2957 /* Skip g77 keyword extensions like %VAL, %REF, %LOC. */
2958 if (a->name != NULL && a->name[0] != '%')
2959 {
2960 gfc_error("Keyword argument requires explicit interface "
2961 "for procedure '%s' at %L", sym->name, &a->expr->where);
2962 break;
2963 }
fea54935 2964
45a69325
TB
2965 /* TS 29113, 6.2. */
2966 if (a->expr && a->expr->ts.type == BT_ASSUMED
2967 && sym->intmod_sym_id != ISOCBINDING_LOC)
2968 {
2969 gfc_error ("Assumed-type argument %s at %L requires an explicit "
2970 "interface", a->expr->symtree->n.sym->name,
2971 &a->expr->where);
2972 break;
2973 }
2974
fea54935
TB
2975 /* F2008, C1303 and C1304. */
2976 if (a->expr
2977 && (a->expr->ts.type == BT_DERIVED || a->expr->ts.type == BT_CLASS)
2978 && ((a->expr->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
2979 && a->expr->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)
2980 || gfc_expr_attr (a->expr).lock_comp))
2981 {
2982 gfc_error("Actual argument of LOCK_TYPE or with LOCK_TYPE "
2983 "component at %L requires an explicit interface for "
2984 "procedure '%s'", &a->expr->where, sym->name);
2985 break;
2986 }
ea8ad3e5
TB
2987
2988 if (a->expr && a->expr->expr_type == EXPR_NULL
2989 && a->expr->ts.type == BT_UNKNOWN)
2990 {
2991 gfc_error ("MOLD argument to NULL required at %L", &a->expr->where);
2992 return;
2993 }
ac05557c
DF
2994 }
2995
2996 return;
2997 }
2998
f0ac18b7 2999 if (!compare_actual_formal (ap, sym->formal, 0, sym->attr.elemental, where))
6de9cd9a
DN
3000 return;
3001
3002 check_intents (sym->formal, *ap);
3003 if (gfc_option.warn_aliasing)
3004 check_some_aliasing (sym->formal, *ap);
3005}
3006
3007
7e196f89
JW
3008/* Check how a procedure pointer component is used against its interface.
3009 If all goes well, the actual argument list will also end up being properly
3010 sorted. Completely analogous to gfc_procedure_use. */
3011
3012void
3013gfc_ppc_use (gfc_component *comp, gfc_actual_arglist **ap, locus *where)
3014{
3015
3016 /* Warn about calls with an implicit interface. Special case
3017 for calling a ISO_C_BINDING becase c_loc and c_funloc
3018 are pseudo-unknown. */
3019 if (gfc_option.warn_implicit_interface
3020 && comp->attr.if_source == IFSRC_UNKNOWN
3021 && !comp->attr.is_iso_c)
3022 gfc_warning ("Procedure pointer component '%s' called with an implicit "
3023 "interface at %L", comp->name, where);
3024
3025 if (comp->attr.if_source == IFSRC_UNKNOWN)
3026 {
3027 gfc_actual_arglist *a;
3028 for (a = *ap; a; a = a->next)
3029 {
3030 /* Skip g77 keyword extensions like %VAL, %REF, %LOC. */
3031 if (a->name != NULL && a->name[0] != '%')
3032 {
3033 gfc_error("Keyword argument requires explicit interface "
3034 "for procedure pointer component '%s' at %L",
3035 comp->name, &a->expr->where);
3036 break;
3037 }
3038 }
3039
3040 return;
3041 }
3042
3043 if (!compare_actual_formal (ap, comp->formal, 0, comp->attr.elemental, where))
3044 return;
3045
3046 check_intents (comp->formal, *ap);
3047 if (gfc_option.warn_aliasing)
3048 check_some_aliasing (comp->formal, *ap);
3049}
3050
3051
f0ac18b7
DK
3052/* Try if an actual argument list matches the formal list of a symbol,
3053 respecting the symbol's attributes like ELEMENTAL. This is used for
3054 GENERIC resolution. */
3055
3056bool
3057gfc_arglist_matches_symbol (gfc_actual_arglist** args, gfc_symbol* sym)
3058{
3059 bool r;
3060
3061 gcc_assert (sym->attr.flavor == FL_PROCEDURE);
3062
3063 r = !sym->attr.elemental;
3064 if (compare_actual_formal (args, sym->formal, r, !r, NULL))
3065 {
3066 check_intents (sym->formal, *args);
3067 if (gfc_option.warn_aliasing)
3068 check_some_aliasing (sym->formal, *args);
3069 return true;
3070 }
3071
3072 return false;
3073}
3074
3075
6de9cd9a
DN
3076/* Given an interface pointer and an actual argument list, search for
3077 a formal argument list that matches the actual. If found, returns
3078 a pointer to the symbol of the correct interface. Returns NULL if
3079 not found. */
3080
3081gfc_symbol *
b251af97
SK
3082gfc_search_interface (gfc_interface *intr, int sub_flag,
3083 gfc_actual_arglist **ap)
6de9cd9a 3084{
22a0a780 3085 gfc_symbol *elem_sym = NULL;
ea8ad3e5
TB
3086 gfc_symbol *null_sym = NULL;
3087 locus null_expr_loc;
3088 gfc_actual_arglist *a;
3089 bool has_null_arg = false;
3090
3091 for (a = *ap; a; a = a->next)
3092 if (a->expr && a->expr->expr_type == EXPR_NULL
3093 && a->expr->ts.type == BT_UNKNOWN)
3094 {
3095 has_null_arg = true;
3096 null_expr_loc = a->expr->where;
3097 break;
3098 }
3099
6de9cd9a
DN
3100 for (; intr; intr = intr->next)
3101 {
c3f34952
TB
3102 if (intr->sym->attr.flavor == FL_DERIVED)
3103 continue;
6de9cd9a
DN
3104 if (sub_flag && intr->sym->attr.function)
3105 continue;
3106 if (!sub_flag && intr->sym->attr.subroutine)
3107 continue;
3108
f0ac18b7 3109 if (gfc_arglist_matches_symbol (ap, intr->sym))
22a0a780 3110 {
ea8ad3e5
TB
3111 if (has_null_arg && null_sym)
3112 {
3113 gfc_error ("MOLD= required in NULL() argument at %L: Ambiguity "
3114 "between specific functions %s and %s",
3115 &null_expr_loc, null_sym->name, intr->sym->name);
3116 return NULL;
3117 }
3118 else if (has_null_arg)
3119 {
3120 null_sym = intr->sym;
3121 continue;
3122 }
3123
22a0a780
PT
3124 /* Satisfy 12.4.4.1 such that an elemental match has lower
3125 weight than a non-elemental match. */
3126 if (intr->sym->attr.elemental)
3127 {
3128 elem_sym = intr->sym;
3129 continue;
3130 }
3131 return intr->sym;
3132 }
6de9cd9a
DN
3133 }
3134
ea8ad3e5
TB
3135 if (null_sym)
3136 return null_sym;
3137
22a0a780 3138 return elem_sym ? elem_sym : NULL;
6de9cd9a
DN
3139}
3140
3141
3142/* Do a brute force recursive search for a symbol. */
3143
3144static gfc_symtree *
b251af97 3145find_symtree0 (gfc_symtree *root, gfc_symbol *sym)
6de9cd9a
DN
3146{
3147 gfc_symtree * st;
3148
3149 if (root->n.sym == sym)
3150 return root;
3151
3152 st = NULL;
3153 if (root->left)
3154 st = find_symtree0 (root->left, sym);
3155 if (root->right && ! st)
3156 st = find_symtree0 (root->right, sym);
3157 return st;
3158}
3159
3160
3161/* Find a symtree for a symbol. */
3162
f6fad28e
DK
3163gfc_symtree *
3164gfc_find_sym_in_symtree (gfc_symbol *sym)
6de9cd9a
DN
3165{
3166 gfc_symtree *st;
3167 gfc_namespace *ns;
3168
3169 /* First try to find it by name. */
3170 gfc_find_sym_tree (sym->name, gfc_current_ns, 1, &st);
3171 if (st && st->n.sym == sym)
3172 return st;
3173
66e4ab31 3174 /* If it's been renamed, resort to a brute-force search. */
6de9cd9a
DN
3175 /* TODO: avoid having to do this search. If the symbol doesn't exist
3176 in the symtree for the current namespace, it should probably be added. */
3177 for (ns = gfc_current_ns; ns; ns = ns->parent)
3178 {
3179 st = find_symtree0 (ns->sym_root, sym);
3180 if (st)
b251af97 3181 return st;
6de9cd9a
DN
3182 }
3183 gfc_internal_error ("Unable to find symbol %s", sym->name);
66e4ab31 3184 /* Not reached. */
6de9cd9a
DN
3185}
3186
3187
4a44a72d
DK
3188/* See if the arglist to an operator-call contains a derived-type argument
3189 with a matching type-bound operator. If so, return the matching specific
3190 procedure defined as operator-target as well as the base-object to use
974df0f8
PT
3191 (which is the found derived-type argument with operator). The generic
3192 name, if any, is transmitted to the final expression via 'gname'. */
4a44a72d
DK
3193
3194static gfc_typebound_proc*
3195matching_typebound_op (gfc_expr** tb_base,
3196 gfc_actual_arglist* args,
974df0f8
PT
3197 gfc_intrinsic_op op, const char* uop,
3198 const char ** gname)
4a44a72d
DK
3199{
3200 gfc_actual_arglist* base;
3201
3202 for (base = args; base; base = base->next)
4b7dd692 3203 if (base->expr->ts.type == BT_DERIVED || base->expr->ts.type == BT_CLASS)
4a44a72d
DK
3204 {
3205 gfc_typebound_proc* tb;
3206 gfc_symbol* derived;
3207 gfc_try result;
3208
efd2e969
PT
3209 while (base->expr->expr_type == EXPR_OP
3210 && base->expr->value.op.op == INTRINSIC_PARENTHESES)
3211 base->expr = base->expr->value.op.op1;
3212
4b7dd692 3213 if (base->expr->ts.type == BT_CLASS)
528622fd 3214 {
efd2e969 3215 if (CLASS_DATA (base->expr) == NULL)
528622fd
JW
3216 continue;
3217 derived = CLASS_DATA (base->expr)->ts.u.derived;
3218 }
4b7dd692
JW
3219 else
3220 derived = base->expr->ts.u.derived;
4a44a72d
DK
3221
3222 if (op == INTRINSIC_USER)
3223 {
3224 gfc_symtree* tb_uop;
3225
3226 gcc_assert (uop);
3227 tb_uop = gfc_find_typebound_user_op (derived, &result, uop,
3228 false, NULL);
3229
3230 if (tb_uop)
3231 tb = tb_uop->n.tb;
3232 else
3233 tb = NULL;
3234 }
3235 else
3236 tb = gfc_find_typebound_intrinsic_op (derived, &result, op,
3237 false, NULL);
3238
3239 /* This means we hit a PRIVATE operator which is use-associated and
3240 should thus not be seen. */
3241 if (result == FAILURE)
3242 tb = NULL;
3243
3244 /* Look through the super-type hierarchy for a matching specific
3245 binding. */
3246 for (; tb; tb = tb->overridden)
3247 {
3248 gfc_tbp_generic* g;
3249
3250 gcc_assert (tb->is_generic);
3251 for (g = tb->u.generic; g; g = g->next)
3252 {
3253 gfc_symbol* target;
3254 gfc_actual_arglist* argcopy;
3255 bool matches;
3256
3257 gcc_assert (g->specific);
3258 if (g->specific->error)
3259 continue;
3260
3261 target = g->specific->u.specific->n.sym;
3262
3263 /* Check if this arglist matches the formal. */
3264 argcopy = gfc_copy_actual_arglist (args);
3265 matches = gfc_arglist_matches_symbol (&argcopy, target);
3266 gfc_free_actual_arglist (argcopy);
3267
3268 /* Return if we found a match. */
3269 if (matches)
3270 {
3271 *tb_base = base->expr;
974df0f8 3272 *gname = g->specific_st->name;
4a44a72d
DK
3273 return g->specific;
3274 }
3275 }
3276 }
3277 }
3278
3279 return NULL;
3280}
3281
3282
3283/* For the 'actual arglist' of an operator call and a specific typebound
3284 procedure that has been found the target of a type-bound operator, build the
3285 appropriate EXPR_COMPCALL and resolve it. We take this indirection over
3286 type-bound procedures rather than resolving type-bound operators 'directly'
3287 so that we can reuse the existing logic. */
3288
3289static void
3290build_compcall_for_operator (gfc_expr* e, gfc_actual_arglist* actual,
974df0f8
PT
3291 gfc_expr* base, gfc_typebound_proc* target,
3292 const char *gname)
4a44a72d
DK
3293{
3294 e->expr_type = EXPR_COMPCALL;
3295 e->value.compcall.tbp = target;
974df0f8 3296 e->value.compcall.name = gname ? gname : "$op";
4a44a72d
DK
3297 e->value.compcall.actual = actual;
3298 e->value.compcall.base_object = base;
3299 e->value.compcall.ignore_pass = 1;
3300 e->value.compcall.assign = 0;
94fae14b
PT
3301 if (e->ts.type == BT_UNKNOWN
3302 && target->function)
3303 {
3304 if (target->is_generic)
3305 e->ts = target->u.generic->specific->u.specific->n.sym->ts;
3306 else
3307 e->ts = target->u.specific->n.sym->ts;
3308 }
4a44a72d
DK
3309}
3310
3311
6de9cd9a
DN
3312/* This subroutine is called when an expression is being resolved.
3313 The expression node in question is either a user defined operator
1f2959f0 3314 or an intrinsic operator with arguments that aren't compatible
6de9cd9a
DN
3315 with the operator. This subroutine builds an actual argument list
3316 corresponding to the operands, then searches for a compatible
3317 interface. If one is found, the expression node is replaced with
eaee02a5
JW
3318 the appropriate function call. We use the 'match' enum to specify
3319 whether a replacement has been made or not, or if an error occurred. */
6de9cd9a 3320
eaee02a5
JW
3321match
3322gfc_extend_expr (gfc_expr *e)
6de9cd9a
DN
3323{
3324 gfc_actual_arglist *actual;
3325 gfc_symbol *sym;
3326 gfc_namespace *ns;
3327 gfc_user_op *uop;
3328 gfc_intrinsic_op i;
974df0f8 3329 const char *gname;
6de9cd9a
DN
3330
3331 sym = NULL;
3332
3333 actual = gfc_get_actual_arglist ();
58b03ab2 3334 actual->expr = e->value.op.op1;
6de9cd9a 3335
974df0f8 3336 gname = NULL;
4a44a72d 3337
58b03ab2 3338 if (e->value.op.op2 != NULL)
6de9cd9a
DN
3339 {
3340 actual->next = gfc_get_actual_arglist ();
58b03ab2 3341 actual->next->expr = e->value.op.op2;
6de9cd9a
DN
3342 }
3343
e8d4f3fc 3344 i = fold_unary_intrinsic (e->value.op.op);
6de9cd9a
DN
3345
3346 if (i == INTRINSIC_USER)
3347 {
3348 for (ns = gfc_current_ns; ns; ns = ns->parent)
3349 {
58b03ab2 3350 uop = gfc_find_uop (e->value.op.uop->name, ns);
6de9cd9a
DN
3351 if (uop == NULL)
3352 continue;
3353
a1ee985f 3354 sym = gfc_search_interface (uop->op, 0, &actual);
6de9cd9a
DN
3355 if (sym != NULL)
3356 break;
3357 }
3358 }
3359 else
3360 {
3361 for (ns = gfc_current_ns; ns; ns = ns->parent)
3362 {
3bed9dd0
DF
3363 /* Due to the distinction between '==' and '.eq.' and friends, one has
3364 to check if either is defined. */
3365 switch (i)
3366 {
4a44a72d
DK
3367#define CHECK_OS_COMPARISON(comp) \
3368 case INTRINSIC_##comp: \
3369 case INTRINSIC_##comp##_OS: \
3370 sym = gfc_search_interface (ns->op[INTRINSIC_##comp], 0, &actual); \
3371 if (!sym) \
3372 sym = gfc_search_interface (ns->op[INTRINSIC_##comp##_OS], 0, &actual); \
3373 break;
3374 CHECK_OS_COMPARISON(EQ)
3375 CHECK_OS_COMPARISON(NE)
3376 CHECK_OS_COMPARISON(GT)
3377 CHECK_OS_COMPARISON(GE)
3378 CHECK_OS_COMPARISON(LT)
3379 CHECK_OS_COMPARISON(LE)
3380#undef CHECK_OS_COMPARISON
3bed9dd0
DF
3381
3382 default:
a1ee985f 3383 sym = gfc_search_interface (ns->op[i], 0, &actual);
3bed9dd0
DF
3384 }
3385
6de9cd9a
DN
3386 if (sym != NULL)
3387 break;
3388 }
3389 }
3390
4a44a72d
DK
3391 /* TODO: Do an ambiguity-check and error if multiple matching interfaces are
3392 found rather than just taking the first one and not checking further. */
3393
6de9cd9a
DN
3394 if (sym == NULL)
3395 {
4a44a72d
DK
3396 gfc_typebound_proc* tbo;
3397 gfc_expr* tb_base;
3398
3399 /* See if we find a matching type-bound operator. */
3400 if (i == INTRINSIC_USER)
3401 tbo = matching_typebound_op (&tb_base, actual,
974df0f8 3402 i, e->value.op.uop->name, &gname);
4a44a72d
DK
3403 else
3404 switch (i)
3405 {
3406#define CHECK_OS_COMPARISON(comp) \
3407 case INTRINSIC_##comp: \
3408 case INTRINSIC_##comp##_OS: \
3409 tbo = matching_typebound_op (&tb_base, actual, \
974df0f8 3410 INTRINSIC_##comp, NULL, &gname); \
4a44a72d
DK
3411 if (!tbo) \
3412 tbo = matching_typebound_op (&tb_base, actual, \
974df0f8 3413 INTRINSIC_##comp##_OS, NULL, &gname); \
4a44a72d
DK
3414 break;
3415 CHECK_OS_COMPARISON(EQ)
3416 CHECK_OS_COMPARISON(NE)
3417 CHECK_OS_COMPARISON(GT)
3418 CHECK_OS_COMPARISON(GE)
3419 CHECK_OS_COMPARISON(LT)
3420 CHECK_OS_COMPARISON(LE)
3421#undef CHECK_OS_COMPARISON
3422
3423 default:
974df0f8 3424 tbo = matching_typebound_op (&tb_base, actual, i, NULL, &gname);
4a44a72d
DK
3425 break;
3426 }
3427
3428 /* If there is a matching typebound-operator, replace the expression with
3429 a call to it and succeed. */
3430 if (tbo)
3431 {
3432 gfc_try result;
3433
3434 gcc_assert (tb_base);
974df0f8 3435 build_compcall_for_operator (e, actual, tb_base, tbo, gname);
4a44a72d
DK
3436
3437 result = gfc_resolve_expr (e);
3438 if (result == FAILURE)
eaee02a5 3439 return MATCH_ERROR;
4a44a72d 3440
eaee02a5 3441 return MATCH_YES;
4a44a72d
DK
3442 }
3443
66e4ab31 3444 /* Don't use gfc_free_actual_arglist(). */
04695783 3445 free (actual->next);
cede9502 3446 free (actual);
6de9cd9a 3447
eaee02a5 3448 return MATCH_NO;
6de9cd9a
DN
3449 }
3450
3451 /* Change the expression node to a function call. */
3452 e->expr_type = EXPR_FUNCTION;
f6fad28e 3453 e->symtree = gfc_find_sym_in_symtree (sym);
6de9cd9a 3454 e->value.function.actual = actual;
58b03ab2
TS
3455 e->value.function.esym = NULL;
3456 e->value.function.isym = NULL;
cf013e9f 3457 e->value.function.name = NULL;
a1ab6660 3458 e->user_operator = 1;
6de9cd9a 3459
4a44a72d 3460 if (gfc_resolve_expr (e) == FAILURE)
eaee02a5 3461 return MATCH_ERROR;
6de9cd9a 3462
eaee02a5 3463 return MATCH_YES;
6de9cd9a
DN
3464}
3465
3466
3467/* Tries to replace an assignment code node with a subroutine call to
3468 the subroutine associated with the assignment operator. Return
3469 SUCCESS if the node was replaced. On FAILURE, no error is
3470 generated. */
3471
17b1d2a0 3472gfc_try
b251af97 3473gfc_extend_assign (gfc_code *c, gfc_namespace *ns)
6de9cd9a
DN
3474{
3475 gfc_actual_arglist *actual;
3476 gfc_expr *lhs, *rhs;
3477 gfc_symbol *sym;
974df0f8
PT
3478 const char *gname;
3479
3480 gname = NULL;
6de9cd9a 3481
a513927a 3482 lhs = c->expr1;
6de9cd9a
DN
3483 rhs = c->expr2;
3484
3485 /* Don't allow an intrinsic assignment to be replaced. */
4b7dd692 3486 if (lhs->ts.type != BT_DERIVED && lhs->ts.type != BT_CLASS
e19bb186 3487 && (rhs->rank == 0 || rhs->rank == lhs->rank)
6de9cd9a 3488 && (lhs->ts.type == rhs->ts.type
b251af97 3489 || (gfc_numeric_ts (&lhs->ts) && gfc_numeric_ts (&rhs->ts))))
6de9cd9a
DN
3490 return FAILURE;
3491
3492 actual = gfc_get_actual_arglist ();
3493 actual->expr = lhs;
3494
3495 actual->next = gfc_get_actual_arglist ();
3496 actual->next->expr = rhs;
3497
3498 sym = NULL;
3499
3500 for (; ns; ns = ns->parent)
3501 {
a1ee985f 3502 sym = gfc_search_interface (ns->op[INTRINSIC_ASSIGN], 1, &actual);
6de9cd9a
DN
3503 if (sym != NULL)
3504 break;
3505 }
3506
4a44a72d
DK
3507 /* TODO: Ambiguity-check, see above for gfc_extend_expr. */
3508
6de9cd9a
DN
3509 if (sym == NULL)
3510 {
4a44a72d
DK
3511 gfc_typebound_proc* tbo;
3512 gfc_expr* tb_base;
3513
3514 /* See if we find a matching type-bound assignment. */
3515 tbo = matching_typebound_op (&tb_base, actual,
974df0f8 3516 INTRINSIC_ASSIGN, NULL, &gname);
4a44a72d
DK
3517
3518 /* If there is one, replace the expression with a call to it and
3519 succeed. */
3520 if (tbo)
3521 {
3522 gcc_assert (tb_base);
3523 c->expr1 = gfc_get_expr ();
974df0f8 3524 build_compcall_for_operator (c->expr1, actual, tb_base, tbo, gname);
4a44a72d 3525 c->expr1->value.compcall.assign = 1;
67a7c837 3526 c->expr1->where = c->loc;
4a44a72d
DK
3527 c->expr2 = NULL;
3528 c->op = EXEC_COMPCALL;
3529
3530 /* c is resolved from the caller, so no need to do it here. */
3531
3532 return SUCCESS;
3533 }
3534
cede9502
JM
3535 free (actual->next);
3536 free (actual);
6de9cd9a
DN
3537 return FAILURE;
3538 }
3539
3540 /* Replace the assignment with the call. */
476220e7 3541 c->op = EXEC_ASSIGN_CALL;
f6fad28e 3542 c->symtree = gfc_find_sym_in_symtree (sym);
a513927a 3543 c->expr1 = NULL;
6de9cd9a
DN
3544 c->expr2 = NULL;
3545 c->ext.actual = actual;
3546
6de9cd9a
DN
3547 return SUCCESS;
3548}
3549
3550
3551/* Make sure that the interface just parsed is not already present in
3552 the given interface list. Ambiguity isn't checked yet since module
3553 procedures can be present without interfaces. */
3554
362aa474
JW
3555gfc_try
3556gfc_check_new_interface (gfc_interface *base, gfc_symbol *new_sym, locus loc)
6de9cd9a
DN
3557{
3558 gfc_interface *ip;
3559
3560 for (ip = base; ip; ip = ip->next)
3561 {
7b901ac4 3562 if (ip->sym == new_sym)
6de9cd9a 3563 {
362aa474
JW
3564 gfc_error ("Entity '%s' at %L is already present in the interface",
3565 new_sym->name, &loc);
6de9cd9a
DN
3566 return FAILURE;
3567 }
3568 }
3569
3570 return SUCCESS;
3571}
3572
3573
3574/* Add a symbol to the current interface. */
3575
17b1d2a0 3576gfc_try
7b901ac4 3577gfc_add_interface (gfc_symbol *new_sym)
6de9cd9a
DN
3578{
3579 gfc_interface **head, *intr;
3580 gfc_namespace *ns;
3581 gfc_symbol *sym;
3582
3583 switch (current_interface.type)
3584 {
3585 case INTERFACE_NAMELESS:
9e1d712c 3586 case INTERFACE_ABSTRACT:
6de9cd9a
DN
3587 return SUCCESS;
3588
3589 case INTERFACE_INTRINSIC_OP:
3590 for (ns = current_interface.ns; ns; ns = ns->parent)
3bed9dd0
DF
3591 switch (current_interface.op)
3592 {
3593 case INTRINSIC_EQ:
3594 case INTRINSIC_EQ_OS:
362aa474
JW
3595 if (gfc_check_new_interface (ns->op[INTRINSIC_EQ], new_sym,
3596 gfc_current_locus) == FAILURE
3597 || gfc_check_new_interface (ns->op[INTRINSIC_EQ_OS], new_sym,
3598 gfc_current_locus) == FAILURE)
3bed9dd0
DF
3599 return FAILURE;
3600 break;
3601
3602 case INTRINSIC_NE:
3603 case INTRINSIC_NE_OS:
362aa474
JW
3604 if (gfc_check_new_interface (ns->op[INTRINSIC_NE], new_sym,
3605 gfc_current_locus) == FAILURE
3606 || gfc_check_new_interface (ns->op[INTRINSIC_NE_OS], new_sym,
3607 gfc_current_locus) == FAILURE)
3bed9dd0
DF
3608 return FAILURE;
3609 break;
3610
3611 case INTRINSIC_GT:
3612 case INTRINSIC_GT_OS:
362aa474
JW
3613 if (gfc_check_new_interface (ns->op[INTRINSIC_GT], new_sym,
3614 gfc_current_locus) == FAILURE
3615 || gfc_check_new_interface (ns->op[INTRINSIC_GT_OS], new_sym,
3616 gfc_current_locus) == FAILURE)
3bed9dd0
DF
3617 return FAILURE;
3618 break;
3619
3620 case INTRINSIC_GE:
3621 case INTRINSIC_GE_OS:
362aa474
JW
3622 if (gfc_check_new_interface (ns->op[INTRINSIC_GE], new_sym,
3623 gfc_current_locus) == FAILURE
3624 || gfc_check_new_interface (ns->op[INTRINSIC_GE_OS], new_sym,
3625 gfc_current_locus) == FAILURE)
3bed9dd0
DF
3626 return FAILURE;
3627 break;
3628
3629 case INTRINSIC_LT:
3630 case INTRINSIC_LT_OS:
362aa474
JW
3631 if (gfc_check_new_interface (ns->op[INTRINSIC_LT], new_sym,
3632 gfc_current_locus) == FAILURE
3633 || gfc_check_new_interface (ns->op[INTRINSIC_LT_OS], new_sym,
3634 gfc_current_locus) == FAILURE)
3bed9dd0
DF
3635 return FAILURE;
3636 break;
3637
3638 case INTRINSIC_LE:
3639 case INTRINSIC_LE_OS:
362aa474
JW
3640 if (gfc_check_new_interface (ns->op[INTRINSIC_LE], new_sym,
3641 gfc_current_locus) == FAILURE
3642 || gfc_check_new_interface (ns->op[INTRINSIC_LE_OS], new_sym,
3643 gfc_current_locus) == FAILURE)
3bed9dd0
DF
3644 return FAILURE;
3645 break;
3646
3647 default:
362aa474
JW
3648 if (gfc_check_new_interface (ns->op[current_interface.op], new_sym,
3649 gfc_current_locus) == FAILURE)
3bed9dd0
DF
3650 return FAILURE;
3651 }
6de9cd9a 3652
a1ee985f 3653 head = &current_interface.ns->op[current_interface.op];
6de9cd9a
DN
3654 break;
3655
3656 case INTERFACE_GENERIC:
3657 for (ns = current_interface.ns; ns; ns = ns->parent)
3658 {
3659 gfc_find_symbol (current_interface.sym->name, ns, 0, &sym);
3660 if (sym == NULL)
3661 continue;
3662
362aa474
JW
3663 if (gfc_check_new_interface (sym->generic, new_sym, gfc_current_locus)
3664 == FAILURE)
6de9cd9a
DN
3665 return FAILURE;
3666 }
3667
3668 head = &current_interface.sym->generic;
3669 break;
3670
3671 case INTERFACE_USER_OP:
362aa474
JW
3672 if (gfc_check_new_interface (current_interface.uop->op, new_sym,
3673 gfc_current_locus) == FAILURE)
6de9cd9a
DN
3674 return FAILURE;
3675
a1ee985f 3676 head = &current_interface.uop->op;
6de9cd9a
DN
3677 break;
3678
3679 default:
3680 gfc_internal_error ("gfc_add_interface(): Bad interface type");
3681 }
3682
3683 intr = gfc_get_interface ();
7b901ac4 3684 intr->sym = new_sym;
63645982 3685 intr->where = gfc_current_locus;
6de9cd9a
DN
3686
3687 intr->next = *head;
3688 *head = intr;
3689
3690 return SUCCESS;
3691}
3692
3693
2b77e908
FXC
3694gfc_interface *
3695gfc_current_interface_head (void)
3696{
3697 switch (current_interface.type)
3698 {
3699 case INTERFACE_INTRINSIC_OP:
a1ee985f 3700 return current_interface.ns->op[current_interface.op];
2b77e908
FXC
3701 break;
3702
3703 case INTERFACE_GENERIC:
3704 return current_interface.sym->generic;
3705 break;
3706
3707 case INTERFACE_USER_OP:
a1ee985f 3708 return current_interface.uop->op;
2b77e908
FXC
3709 break;
3710
3711 default:
3712 gcc_unreachable ();
3713 }
3714}
3715
3716
3717void
3718gfc_set_current_interface_head (gfc_interface *i)
3719{
3720 switch (current_interface.type)
3721 {
3722 case INTERFACE_INTRINSIC_OP:
a1ee985f 3723 current_interface.ns->op[current_interface.op] = i;
2b77e908
FXC
3724 break;
3725
3726 case INTERFACE_GENERIC:
3727 current_interface.sym->generic = i;
3728 break;
3729
3730 case INTERFACE_USER_OP:
a1ee985f 3731 current_interface.uop->op = i;
2b77e908
FXC
3732 break;
3733
3734 default:
3735 gcc_unreachable ();
3736 }
3737}
3738
3739
6de9cd9a
DN
3740/* Gets rid of a formal argument list. We do not free symbols.
3741 Symbols are freed when a namespace is freed. */
3742
3743void
b251af97 3744gfc_free_formal_arglist (gfc_formal_arglist *p)
6de9cd9a
DN
3745{
3746 gfc_formal_arglist *q;
3747
3748 for (; p; p = q)
3749 {
3750 q = p->next;
cede9502 3751 free (p);
6de9cd9a
DN
3752 }
3753}
99fc1b90
JW
3754
3755
9795c594
JW
3756/* Check that it is ok for the type-bound procedure 'proc' to override the
3757 procedure 'old', cf. F08:4.5.7.3. */
99fc1b90
JW
3758
3759gfc_try
3760gfc_check_typebound_override (gfc_symtree* proc, gfc_symtree* old)
3761{
3762 locus where;
9795c594 3763 const gfc_symbol *proc_target, *old_target;
99fc1b90 3764 unsigned proc_pass_arg, old_pass_arg, argpos;
9795c594
JW
3765 gfc_formal_arglist *proc_formal, *old_formal;
3766 bool check_type;
3767 char err[200];
99fc1b90
JW
3768
3769 /* This procedure should only be called for non-GENERIC proc. */
3770 gcc_assert (!proc->n.tb->is_generic);
3771
3772 /* If the overwritten procedure is GENERIC, this is an error. */
3773 if (old->n.tb->is_generic)
3774 {
3775 gfc_error ("Can't overwrite GENERIC '%s' at %L",
3776 old->name, &proc->n.tb->where);
3777 return FAILURE;
3778 }
3779
3780 where = proc->n.tb->where;
3781 proc_target = proc->n.tb->u.specific->n.sym;
3782 old_target = old->n.tb->u.specific->n.sym;
3783
3784 /* Check that overridden binding is not NON_OVERRIDABLE. */
3785 if (old->n.tb->non_overridable)
3786 {
3787 gfc_error ("'%s' at %L overrides a procedure binding declared"
3788 " NON_OVERRIDABLE", proc->name, &where);
3789 return FAILURE;
3790 }
3791
3792 /* It's an error to override a non-DEFERRED procedure with a DEFERRED one. */
3793 if (!old->n.tb->deferred && proc->n.tb->deferred)
3794 {
3795 gfc_error ("'%s' at %L must not be DEFERRED as it overrides a"
3796 " non-DEFERRED binding", proc->name, &where);
3797 return FAILURE;
3798 }
3799
3800 /* If the overridden binding is PURE, the overriding must be, too. */
3801 if (old_target->attr.pure && !proc_target->attr.pure)
3802 {
3803 gfc_error ("'%s' at %L overrides a PURE procedure and must also be PURE",
3804 proc->name, &where);
3805 return FAILURE;
3806 }
3807
3808 /* If the overridden binding is ELEMENTAL, the overriding must be, too. If it
3809 is not, the overriding must not be either. */
3810 if (old_target->attr.elemental && !proc_target->attr.elemental)
3811 {
3812 gfc_error ("'%s' at %L overrides an ELEMENTAL procedure and must also be"
3813 " ELEMENTAL", proc->name, &where);
3814 return FAILURE;
3815 }
3816 if (!old_target->attr.elemental && proc_target->attr.elemental)
3817 {
3818 gfc_error ("'%s' at %L overrides a non-ELEMENTAL procedure and must not"
3819 " be ELEMENTAL, either", proc->name, &where);
3820 return FAILURE;
3821 }
3822
3823 /* If the overridden binding is a SUBROUTINE, the overriding must also be a
3824 SUBROUTINE. */
3825 if (old_target->attr.subroutine && !proc_target->attr.subroutine)
3826 {
3827 gfc_error ("'%s' at %L overrides a SUBROUTINE and must also be a"
3828 " SUBROUTINE", proc->name, &where);
3829 return FAILURE;
3830 }
3831
3832 /* If the overridden binding is a FUNCTION, the overriding must also be a
3833 FUNCTION and have the same characteristics. */
3834 if (old_target->attr.function)
3835 {
3836 if (!proc_target->attr.function)
3837 {
3838 gfc_error ("'%s' at %L overrides a FUNCTION and must also be a"
3839 " FUNCTION", proc->name, &where);
3840 return FAILURE;
3841 }
3842
3843 /* FIXME: Do more comprehensive checking (including, for instance, the
2240d1cf 3844 array-shape). */
99fc1b90 3845 gcc_assert (proc_target->result && old_target->result);
2240d1cf 3846 if (!compare_type_rank (proc_target->result, old_target->result))
99fc1b90
JW
3847 {
3848 gfc_error ("'%s' at %L and the overridden FUNCTION should have"
2240d1cf 3849 " matching result types and ranks", proc->name, &where);
99fc1b90
JW
3850 return FAILURE;
3851 }
2240d1cf
JW
3852
3853 /* Check string length. */
3854 if (proc_target->result->ts.type == BT_CHARACTER
3855 && proc_target->result->ts.u.cl && old_target->result->ts.u.cl)
3856 {
3857 int compval = gfc_dep_compare_expr (proc_target->result->ts.u.cl->length,
3858 old_target->result->ts.u.cl->length);
3859 switch (compval)
3860 {
3861 case -1:
13001f33
JW
3862 case 1:
3863 case -3:
2240d1cf
JW
3864 gfc_error ("Character length mismatch between '%s' at '%L' and "
3865 "overridden FUNCTION", proc->name, &where);
3866 return FAILURE;
3867
3868 case -2:
3869 gfc_warning ("Possible character length mismatch between '%s' at"
3870 " '%L' and overridden FUNCTION", proc->name, &where);
3871 break;
3872
3873 case 0:
3874 break;
3875
3876 default:
3877 gfc_internal_error ("gfc_check_typebound_override: Unexpected "
3878 "result %i of gfc_dep_compare_expr", compval);
3879 break;
3880 }
3881 }
99fc1b90
JW
3882 }
3883
3884 /* If the overridden binding is PUBLIC, the overriding one must not be
3885 PRIVATE. */
3886 if (old->n.tb->access == ACCESS_PUBLIC
3887 && proc->n.tb->access == ACCESS_PRIVATE)
3888 {
3889 gfc_error ("'%s' at %L overrides a PUBLIC procedure and must not be"
3890 " PRIVATE", proc->name, &where);
3891 return FAILURE;
3892 }
3893
3894 /* Compare the formal argument lists of both procedures. This is also abused
3895 to find the position of the passed-object dummy arguments of both
3896 bindings as at least the overridden one might not yet be resolved and we
3897 need those positions in the check below. */
3898 proc_pass_arg = old_pass_arg = 0;
3899 if (!proc->n.tb->nopass && !proc->n.tb->pass_arg)
3900 proc_pass_arg = 1;
3901 if (!old->n.tb->nopass && !old->n.tb->pass_arg)
3902 old_pass_arg = 1;
3903 argpos = 1;
3904 for (proc_formal = proc_target->formal, old_formal = old_target->formal;
3905 proc_formal && old_formal;
3906 proc_formal = proc_formal->next, old_formal = old_formal->next)
3907 {
3908 if (proc->n.tb->pass_arg
3909 && !strcmp (proc->n.tb->pass_arg, proc_formal->sym->name))
3910 proc_pass_arg = argpos;
3911 if (old->n.tb->pass_arg
3912 && !strcmp (old->n.tb->pass_arg, old_formal->sym->name))
3913 old_pass_arg = argpos;
3914
3915 /* Check that the names correspond. */
3916 if (strcmp (proc_formal->sym->name, old_formal->sym->name))
3917 {
3918 gfc_error ("Dummy argument '%s' of '%s' at %L should be named '%s' as"
3919 " to match the corresponding argument of the overridden"
3920 " procedure", proc_formal->sym->name, proc->name, &where,
3921 old_formal->sym->name);
3922 return FAILURE;
3923 }
3924
9795c594
JW
3925 check_type = proc_pass_arg != argpos && old_pass_arg != argpos;
3926 if (check_dummy_characteristics (proc_formal->sym, old_formal->sym,
3927 check_type, err, sizeof(err)) == FAILURE)
99fc1b90 3928 {
9795c594
JW
3929 gfc_error ("Argument mismatch for the overriding procedure "
3930 "'%s' at %L: %s", proc->name, &where, err);
99fc1b90
JW
3931 return FAILURE;
3932 }
3933
3934 ++argpos;
3935 }
3936 if (proc_formal || old_formal)
3937 {
3938 gfc_error ("'%s' at %L must have the same number of formal arguments as"
3939 " the overridden procedure", proc->name, &where);
3940 return FAILURE;
3941 }
3942
3943 /* If the overridden binding is NOPASS, the overriding one must also be
3944 NOPASS. */
3945 if (old->n.tb->nopass && !proc->n.tb->nopass)
3946 {
3947 gfc_error ("'%s' at %L overrides a NOPASS binding and must also be"
3948 " NOPASS", proc->name, &where);
3949 return FAILURE;
3950 }
3951
3952 /* If the overridden binding is PASS(x), the overriding one must also be
3953 PASS and the passed-object dummy arguments must correspond. */
3954 if (!old->n.tb->nopass)
3955 {
3956 if (proc->n.tb->nopass)
3957 {
3958 gfc_error ("'%s' at %L overrides a binding with PASS and must also be"
3959 " PASS", proc->name, &where);
3960 return FAILURE;
3961 }
3962
3963 if (proc_pass_arg != old_pass_arg)
3964 {
3965 gfc_error ("Passed-object dummy argument of '%s' at %L must be at"
3966 " the same position as the passed-object dummy argument of"
3967 " the overridden procedure", proc->name, &where);
3968 return FAILURE;
3969 }
3970 }
3971
3972 return SUCCESS;
3973}