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