]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/fortran/check.c
check.c (check_co_collective): Renamed from
[thirdparty/gcc.git] / gcc / fortran / check.c
1 /* Check functions
2 Copyright (C) 2002-2014 Free Software Foundation, Inc.
3 Contributed by Andy Vaught & Katherine Holcomb
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
20
21
22 /* These functions check to see if an argument list is compatible with
23 a particular intrinsic function or subroutine. Presence of
24 required arguments has already been established, the argument list
25 has been sorted into the right order and has NULL arguments in the
26 correct places for missing optional arguments. */
27
28 #include "config.h"
29 #include "system.h"
30 #include "coretypes.h"
31 #include "flags.h"
32 #include "gfortran.h"
33 #include "intrinsic.h"
34 #include "constructor.h"
35 #include "target-memory.h"
36
37
38 /* Make sure an expression is a scalar. */
39
40 static bool
41 scalar_check (gfc_expr *e, int n)
42 {
43 if (e->rank == 0)
44 return true;
45
46 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a scalar",
47 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
48 &e->where);
49
50 return false;
51 }
52
53
54 /* Check the type of an expression. */
55
56 static bool
57 type_check (gfc_expr *e, int n, bt type)
58 {
59 if (e->ts.type == type)
60 return true;
61
62 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
63 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
64 &e->where, gfc_basic_typename (type));
65
66 return false;
67 }
68
69
70 /* Check that the expression is a numeric type. */
71
72 static bool
73 numeric_check (gfc_expr *e, int n)
74 {
75 if (gfc_numeric_ts (&e->ts))
76 return true;
77
78 /* If the expression has not got a type, check if its namespace can
79 offer a default type. */
80 if ((e->expr_type == EXPR_VARIABLE || e->expr_type == EXPR_FUNCTION)
81 && e->symtree->n.sym->ts.type == BT_UNKNOWN
82 && gfc_set_default_type (e->symtree->n.sym, 0, e->symtree->n.sym->ns)
83 && gfc_numeric_ts (&e->symtree->n.sym->ts))
84 {
85 e->ts = e->symtree->n.sym->ts;
86 return true;
87 }
88
89 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a numeric type",
90 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
91 &e->where);
92
93 return false;
94 }
95
96
97 /* Check that an expression is integer or real. */
98
99 static bool
100 int_or_real_check (gfc_expr *e, int n)
101 {
102 if (e->ts.type != BT_INTEGER && e->ts.type != BT_REAL)
103 {
104 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
105 "or REAL", gfc_current_intrinsic_arg[n]->name,
106 gfc_current_intrinsic, &e->where);
107 return false;
108 }
109
110 return true;
111 }
112
113
114 /* Check that an expression is real or complex. */
115
116 static bool
117 real_or_complex_check (gfc_expr *e, int n)
118 {
119 if (e->ts.type != BT_REAL && e->ts.type != BT_COMPLEX)
120 {
121 gfc_error ("'%s' argument of '%s' intrinsic at %L must be REAL "
122 "or COMPLEX", gfc_current_intrinsic_arg[n]->name,
123 gfc_current_intrinsic, &e->where);
124 return false;
125 }
126
127 return true;
128 }
129
130
131 /* Check that an expression is INTEGER or PROCEDURE. */
132
133 static bool
134 int_or_proc_check (gfc_expr *e, int n)
135 {
136 if (e->ts.type != BT_INTEGER && e->ts.type != BT_PROCEDURE)
137 {
138 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
139 "or PROCEDURE", gfc_current_intrinsic_arg[n]->name,
140 gfc_current_intrinsic, &e->where);
141 return false;
142 }
143
144 return true;
145 }
146
147
148 /* Check that the expression is an optional constant integer
149 and that it specifies a valid kind for that type. */
150
151 static bool
152 kind_check (gfc_expr *k, int n, bt type)
153 {
154 int kind;
155
156 if (k == NULL)
157 return true;
158
159 if (!type_check (k, n, BT_INTEGER))
160 return false;
161
162 if (!scalar_check (k, n))
163 return false;
164
165 if (!gfc_check_init_expr (k))
166 {
167 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
168 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
169 &k->where);
170 return false;
171 }
172
173 if (gfc_extract_int (k, &kind) != NULL
174 || gfc_validate_kind (type, kind, true) < 0)
175 {
176 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type),
177 &k->where);
178 return false;
179 }
180
181 return true;
182 }
183
184
185 /* Make sure the expression is a double precision real. */
186
187 static bool
188 double_check (gfc_expr *d, int n)
189 {
190 if (!type_check (d, n, BT_REAL))
191 return false;
192
193 if (d->ts.kind != gfc_default_double_kind)
194 {
195 gfc_error ("'%s' argument of '%s' intrinsic at %L must be double "
196 "precision", gfc_current_intrinsic_arg[n]->name,
197 gfc_current_intrinsic, &d->where);
198 return false;
199 }
200
201 return true;
202 }
203
204
205 static bool
206 coarray_check (gfc_expr *e, int n)
207 {
208 if (e->ts.type == BT_CLASS && gfc_expr_attr (e).class_ok
209 && CLASS_DATA (e)->attr.codimension
210 && CLASS_DATA (e)->as->corank)
211 {
212 gfc_add_class_array_ref (e);
213 return true;
214 }
215
216 if (!gfc_is_coarray (e))
217 {
218 gfc_error ("Expected coarray variable as '%s' argument to the %s "
219 "intrinsic at %L", gfc_current_intrinsic_arg[n]->name,
220 gfc_current_intrinsic, &e->where);
221 return false;
222 }
223
224 return true;
225 }
226
227
228 /* Make sure the expression is a logical array. */
229
230 static bool
231 logical_array_check (gfc_expr *array, int n)
232 {
233 if (array->ts.type != BT_LOGICAL || array->rank == 0)
234 {
235 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a logical "
236 "array", gfc_current_intrinsic_arg[n]->name,
237 gfc_current_intrinsic, &array->where);
238 return false;
239 }
240
241 return true;
242 }
243
244
245 /* Make sure an expression is an array. */
246
247 static bool
248 array_check (gfc_expr *e, int n)
249 {
250 if (e->ts.type == BT_CLASS && gfc_expr_attr (e).class_ok
251 && CLASS_DATA (e)->attr.dimension
252 && CLASS_DATA (e)->as->rank)
253 {
254 gfc_add_class_array_ref (e);
255 return true;
256 }
257
258 if (e->rank != 0 && e->ts.type != BT_PROCEDURE)
259 return true;
260
261 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array",
262 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
263 &e->where);
264
265 return false;
266 }
267
268
269 /* If expr is a constant, then check to ensure that it is greater than
270 of equal to zero. */
271
272 static bool
273 nonnegative_check (const char *arg, gfc_expr *expr)
274 {
275 int i;
276
277 if (expr->expr_type == EXPR_CONSTANT)
278 {
279 gfc_extract_int (expr, &i);
280 if (i < 0)
281 {
282 gfc_error ("'%s' at %L must be nonnegative", arg, &expr->where);
283 return false;
284 }
285 }
286
287 return true;
288 }
289
290
291 /* If expr2 is constant, then check that the value is less than
292 (less than or equal to, if 'or_equal' is true) bit_size(expr1). */
293
294 static bool
295 less_than_bitsize1 (const char *arg1, gfc_expr *expr1, const char *arg2,
296 gfc_expr *expr2, bool or_equal)
297 {
298 int i2, i3;
299
300 if (expr2->expr_type == EXPR_CONSTANT)
301 {
302 gfc_extract_int (expr2, &i2);
303 i3 = gfc_validate_kind (BT_INTEGER, expr1->ts.kind, false);
304
305 /* For ISHFT[C], check that |shift| <= bit_size(i). */
306 if (arg2 == NULL)
307 {
308 if (i2 < 0)
309 i2 = -i2;
310
311 if (i2 > gfc_integer_kinds[i3].bit_size)
312 {
313 gfc_error ("The absolute value of SHIFT at %L must be less "
314 "than or equal to BIT_SIZE('%s')",
315 &expr2->where, arg1);
316 return false;
317 }
318 }
319
320 if (or_equal)
321 {
322 if (i2 > gfc_integer_kinds[i3].bit_size)
323 {
324 gfc_error ("'%s' at %L must be less than "
325 "or equal to BIT_SIZE('%s')",
326 arg2, &expr2->where, arg1);
327 return false;
328 }
329 }
330 else
331 {
332 if (i2 >= gfc_integer_kinds[i3].bit_size)
333 {
334 gfc_error ("'%s' at %L must be less than BIT_SIZE('%s')",
335 arg2, &expr2->where, arg1);
336 return false;
337 }
338 }
339 }
340
341 return true;
342 }
343
344
345 /* If expr is constant, then check that the value is less than or equal
346 to the bit_size of the kind k. */
347
348 static bool
349 less_than_bitsizekind (const char *arg, gfc_expr *expr, int k)
350 {
351 int i, val;
352
353 if (expr->expr_type != EXPR_CONSTANT)
354 return true;
355
356 i = gfc_validate_kind (BT_INTEGER, k, false);
357 gfc_extract_int (expr, &val);
358
359 if (val > gfc_integer_kinds[i].bit_size)
360 {
361 gfc_error ("'%s' at %L must be less than or equal to the BIT_SIZE of "
362 "INTEGER(KIND=%d)", arg, &expr->where, k);
363 return false;
364 }
365
366 return true;
367 }
368
369
370 /* If expr2 and expr3 are constants, then check that the value is less than
371 or equal to bit_size(expr1). */
372
373 static bool
374 less_than_bitsize2 (const char *arg1, gfc_expr *expr1, const char *arg2,
375 gfc_expr *expr2, const char *arg3, gfc_expr *expr3)
376 {
377 int i2, i3;
378
379 if (expr2->expr_type == EXPR_CONSTANT && expr3->expr_type == EXPR_CONSTANT)
380 {
381 gfc_extract_int (expr2, &i2);
382 gfc_extract_int (expr3, &i3);
383 i2 += i3;
384 i3 = gfc_validate_kind (BT_INTEGER, expr1->ts.kind, false);
385 if (i2 > gfc_integer_kinds[i3].bit_size)
386 {
387 gfc_error ("'%s + %s' at %L must be less than or equal "
388 "to BIT_SIZE('%s')",
389 arg2, arg3, &expr2->where, arg1);
390 return false;
391 }
392 }
393
394 return true;
395 }
396
397 /* Make sure two expressions have the same type. */
398
399 static bool
400 same_type_check (gfc_expr *e, int n, gfc_expr *f, int m)
401 {
402 if (gfc_compare_types (&e->ts, &f->ts))
403 return true;
404
405 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same type "
406 "and kind as '%s'", gfc_current_intrinsic_arg[m]->name,
407 gfc_current_intrinsic, &f->where,
408 gfc_current_intrinsic_arg[n]->name);
409
410 return false;
411 }
412
413
414 /* Make sure that an expression has a certain (nonzero) rank. */
415
416 static bool
417 rank_check (gfc_expr *e, int n, int rank)
418 {
419 if (e->rank == rank)
420 return true;
421
422 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank %d",
423 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
424 &e->where, rank);
425
426 return false;
427 }
428
429
430 /* Make sure a variable expression is not an optional dummy argument. */
431
432 static bool
433 nonoptional_check (gfc_expr *e, int n)
434 {
435 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.optional)
436 {
437 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
438 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
439 &e->where);
440 }
441
442 /* TODO: Recursive check on nonoptional variables? */
443
444 return true;
445 }
446
447
448 /* Check for ALLOCATABLE attribute. */
449
450 static bool
451 allocatable_check (gfc_expr *e, int n)
452 {
453 symbol_attribute attr;
454
455 attr = gfc_variable_attr (e, NULL);
456 if (!attr.allocatable || attr.associate_var)
457 {
458 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
459 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
460 &e->where);
461 return false;
462 }
463
464 return true;
465 }
466
467
468 /* Check that an expression has a particular kind. */
469
470 static bool
471 kind_value_check (gfc_expr *e, int n, int k)
472 {
473 if (e->ts.kind == k)
474 return true;
475
476 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of kind %d",
477 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
478 &e->where, k);
479
480 return false;
481 }
482
483
484 /* Make sure an expression is a variable. */
485
486 static bool
487 variable_check (gfc_expr *e, int n, bool allow_proc)
488 {
489 if (e->expr_type == EXPR_VARIABLE
490 && e->symtree->n.sym->attr.intent == INTENT_IN
491 && (gfc_current_intrinsic_arg[n]->intent == INTENT_OUT
492 || gfc_current_intrinsic_arg[n]->intent == INTENT_INOUT))
493 {
494 gfc_ref *ref;
495 bool pointer = e->symtree->n.sym->ts.type == BT_CLASS
496 && CLASS_DATA (e->symtree->n.sym)
497 ? CLASS_DATA (e->symtree->n.sym)->attr.class_pointer
498 : e->symtree->n.sym->attr.pointer;
499
500 for (ref = e->ref; ref; ref = ref->next)
501 {
502 if (pointer && ref->type == REF_COMPONENT)
503 break;
504 if (ref->type == REF_COMPONENT
505 && ((ref->u.c.component->ts.type == BT_CLASS
506 && CLASS_DATA (ref->u.c.component)->attr.class_pointer)
507 || (ref->u.c.component->ts.type != BT_CLASS
508 && ref->u.c.component->attr.pointer)))
509 break;
510 }
511
512 if (!ref)
513 {
514 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be "
515 "INTENT(IN)", gfc_current_intrinsic_arg[n]->name,
516 gfc_current_intrinsic, &e->where);
517 return false;
518 }
519 }
520
521 if (e->expr_type == EXPR_VARIABLE
522 && e->symtree->n.sym->attr.flavor != FL_PARAMETER
523 && (allow_proc || !e->symtree->n.sym->attr.function))
524 return true;
525
526 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.function
527 && e->symtree->n.sym == e->symtree->n.sym->result)
528 {
529 gfc_namespace *ns;
530 for (ns = gfc_current_ns; ns; ns = ns->parent)
531 if (ns->proc_name == e->symtree->n.sym)
532 return true;
533 }
534
535 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a variable",
536 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic, &e->where);
537
538 return false;
539 }
540
541
542 /* Check the common DIM parameter for correctness. */
543
544 static bool
545 dim_check (gfc_expr *dim, int n, bool optional)
546 {
547 if (dim == NULL)
548 return true;
549
550 if (!type_check (dim, n, BT_INTEGER))
551 return false;
552
553 if (!scalar_check (dim, n))
554 return false;
555
556 if (!optional && !nonoptional_check (dim, n))
557 return false;
558
559 return true;
560 }
561
562
563 /* If a coarray DIM parameter is a constant, make sure that it is greater than
564 zero and less than or equal to the corank of the given array. */
565
566 static bool
567 dim_corank_check (gfc_expr *dim, gfc_expr *array)
568 {
569 int corank;
570
571 gcc_assert (array->expr_type == EXPR_VARIABLE);
572
573 if (dim->expr_type != EXPR_CONSTANT)
574 return true;
575
576 if (array->ts.type == BT_CLASS)
577 return true;
578
579 corank = gfc_get_corank (array);
580
581 if (mpz_cmp_ui (dim->value.integer, 1) < 0
582 || mpz_cmp_ui (dim->value.integer, corank) > 0)
583 {
584 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
585 "codimension index", gfc_current_intrinsic, &dim->where);
586
587 return false;
588 }
589
590 return true;
591 }
592
593
594 /* If a DIM parameter is a constant, make sure that it is greater than
595 zero and less than or equal to the rank of the given array. If
596 allow_assumed is zero then dim must be less than the rank of the array
597 for assumed size arrays. */
598
599 static bool
600 dim_rank_check (gfc_expr *dim, gfc_expr *array, int allow_assumed)
601 {
602 gfc_array_ref *ar;
603 int rank;
604
605 if (dim == NULL)
606 return true;
607
608 if (dim->expr_type != EXPR_CONSTANT)
609 return true;
610
611 if (array->expr_type == EXPR_FUNCTION && array->value.function.isym
612 && array->value.function.isym->id == GFC_ISYM_SPREAD)
613 rank = array->rank + 1;
614 else
615 rank = array->rank;
616
617 /* Assumed-rank array. */
618 if (rank == -1)
619 rank = GFC_MAX_DIMENSIONS;
620
621 if (array->expr_type == EXPR_VARIABLE)
622 {
623 ar = gfc_find_array_ref (array);
624 if (ar->as->type == AS_ASSUMED_SIZE
625 && !allow_assumed
626 && ar->type != AR_ELEMENT
627 && ar->type != AR_SECTION)
628 rank--;
629 }
630
631 if (mpz_cmp_ui (dim->value.integer, 1) < 0
632 || mpz_cmp_ui (dim->value.integer, rank) > 0)
633 {
634 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
635 "dimension index", gfc_current_intrinsic, &dim->where);
636
637 return false;
638 }
639
640 return true;
641 }
642
643
644 /* Compare the size of a along dimension ai with the size of b along
645 dimension bi, returning 0 if they are known not to be identical,
646 and 1 if they are identical, or if this cannot be determined. */
647
648 static int
649 identical_dimen_shape (gfc_expr *a, int ai, gfc_expr *b, int bi)
650 {
651 mpz_t a_size, b_size;
652 int ret;
653
654 gcc_assert (a->rank > ai);
655 gcc_assert (b->rank > bi);
656
657 ret = 1;
658
659 if (gfc_array_dimen_size (a, ai, &a_size))
660 {
661 if (gfc_array_dimen_size (b, bi, &b_size))
662 {
663 if (mpz_cmp (a_size, b_size) != 0)
664 ret = 0;
665
666 mpz_clear (b_size);
667 }
668 mpz_clear (a_size);
669 }
670 return ret;
671 }
672
673 /* Calculate the length of a character variable, including substrings.
674 Strip away parentheses if necessary. Return -1 if no length could
675 be determined. */
676
677 static long
678 gfc_var_strlen (const gfc_expr *a)
679 {
680 gfc_ref *ra;
681
682 while (a->expr_type == EXPR_OP && a->value.op.op == INTRINSIC_PARENTHESES)
683 a = a->value.op.op1;
684
685 for (ra = a->ref; ra != NULL && ra->type != REF_SUBSTRING; ra = ra->next)
686 ;
687
688 if (ra)
689 {
690 long start_a, end_a;
691
692 if (!ra->u.ss.end)
693 return -1;
694
695 if ((!ra->u.ss.start || ra->u.ss.start->expr_type == EXPR_CONSTANT)
696 && ra->u.ss.end->expr_type == EXPR_CONSTANT)
697 {
698 start_a = ra->u.ss.start ? mpz_get_si (ra->u.ss.start->value.integer)
699 : 1;
700 end_a = mpz_get_si (ra->u.ss.end->value.integer);
701 return (end_a < start_a) ? 0 : end_a - start_a + 1;
702 }
703 else if (ra->u.ss.start
704 && gfc_dep_compare_expr (ra->u.ss.start, ra->u.ss.end) == 0)
705 return 1;
706 else
707 return -1;
708 }
709
710 if (a->ts.u.cl && a->ts.u.cl->length
711 && a->ts.u.cl->length->expr_type == EXPR_CONSTANT)
712 return mpz_get_si (a->ts.u.cl->length->value.integer);
713 else if (a->expr_type == EXPR_CONSTANT
714 && (a->ts.u.cl == NULL || a->ts.u.cl->length == NULL))
715 return a->value.character.length;
716 else
717 return -1;
718
719 }
720
721 /* Check whether two character expressions have the same length;
722 returns true if they have or if the length cannot be determined,
723 otherwise return false and raise a gfc_error. */
724
725 bool
726 gfc_check_same_strlen (const gfc_expr *a, const gfc_expr *b, const char *name)
727 {
728 long len_a, len_b;
729
730 len_a = gfc_var_strlen(a);
731 len_b = gfc_var_strlen(b);
732
733 if (len_a == -1 || len_b == -1 || len_a == len_b)
734 return true;
735 else
736 {
737 gfc_error ("Unequal character lengths (%ld/%ld) in %s at %L",
738 len_a, len_b, name, &a->where);
739 return false;
740 }
741 }
742
743
744 /***** Check functions *****/
745
746 /* Check subroutine suitable for intrinsics taking a real argument and
747 a kind argument for the result. */
748
749 static bool
750 check_a_kind (gfc_expr *a, gfc_expr *kind, bt type)
751 {
752 if (!type_check (a, 0, BT_REAL))
753 return false;
754 if (!kind_check (kind, 1, type))
755 return false;
756
757 return true;
758 }
759
760
761 /* Check subroutine suitable for ceiling, floor and nint. */
762
763 bool
764 gfc_check_a_ikind (gfc_expr *a, gfc_expr *kind)
765 {
766 return check_a_kind (a, kind, BT_INTEGER);
767 }
768
769
770 /* Check subroutine suitable for aint, anint. */
771
772 bool
773 gfc_check_a_xkind (gfc_expr *a, gfc_expr *kind)
774 {
775 return check_a_kind (a, kind, BT_REAL);
776 }
777
778
779 bool
780 gfc_check_abs (gfc_expr *a)
781 {
782 if (!numeric_check (a, 0))
783 return false;
784
785 return true;
786 }
787
788
789 bool
790 gfc_check_achar (gfc_expr *a, gfc_expr *kind)
791 {
792 if (!type_check (a, 0, BT_INTEGER))
793 return false;
794 if (!kind_check (kind, 1, BT_CHARACTER))
795 return false;
796
797 return true;
798 }
799
800
801 bool
802 gfc_check_access_func (gfc_expr *name, gfc_expr *mode)
803 {
804 if (!type_check (name, 0, BT_CHARACTER)
805 || !scalar_check (name, 0))
806 return false;
807 if (!kind_value_check (name, 0, gfc_default_character_kind))
808 return false;
809
810 if (!type_check (mode, 1, BT_CHARACTER)
811 || !scalar_check (mode, 1))
812 return false;
813 if (!kind_value_check (mode, 1, gfc_default_character_kind))
814 return false;
815
816 return true;
817 }
818
819
820 bool
821 gfc_check_all_any (gfc_expr *mask, gfc_expr *dim)
822 {
823 if (!logical_array_check (mask, 0))
824 return false;
825
826 if (!dim_check (dim, 1, false))
827 return false;
828
829 if (!dim_rank_check (dim, mask, 0))
830 return false;
831
832 return true;
833 }
834
835
836 bool
837 gfc_check_allocated (gfc_expr *array)
838 {
839 if (!variable_check (array, 0, false))
840 return false;
841 if (!allocatable_check (array, 0))
842 return false;
843
844 return true;
845 }
846
847
848 /* Common check function where the first argument must be real or
849 integer and the second argument must be the same as the first. */
850
851 bool
852 gfc_check_a_p (gfc_expr *a, gfc_expr *p)
853 {
854 if (!int_or_real_check (a, 0))
855 return false;
856
857 if (a->ts.type != p->ts.type)
858 {
859 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
860 "have the same type", gfc_current_intrinsic_arg[0]->name,
861 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
862 &p->where);
863 return false;
864 }
865
866 if (a->ts.kind != p->ts.kind)
867 {
868 if (!gfc_notify_std (GFC_STD_GNU, "Different type kinds at %L",
869 &p->where))
870 return false;
871 }
872
873 return true;
874 }
875
876
877 bool
878 gfc_check_x_yd (gfc_expr *x, gfc_expr *y)
879 {
880 if (!double_check (x, 0) || !double_check (y, 1))
881 return false;
882
883 return true;
884 }
885
886
887 bool
888 gfc_check_associated (gfc_expr *pointer, gfc_expr *target)
889 {
890 symbol_attribute attr1, attr2;
891 int i;
892 bool t;
893 locus *where;
894
895 where = &pointer->where;
896
897 if (pointer->expr_type == EXPR_NULL)
898 goto null_arg;
899
900 attr1 = gfc_expr_attr (pointer);
901
902 if (!attr1.pointer && !attr1.proc_pointer)
903 {
904 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
905 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
906 &pointer->where);
907 return false;
908 }
909
910 /* F2008, C1242. */
911 if (attr1.pointer && gfc_is_coindexed (pointer))
912 {
913 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
914 "coindexed", gfc_current_intrinsic_arg[0]->name,
915 gfc_current_intrinsic, &pointer->where);
916 return false;
917 }
918
919 /* Target argument is optional. */
920 if (target == NULL)
921 return true;
922
923 where = &target->where;
924 if (target->expr_type == EXPR_NULL)
925 goto null_arg;
926
927 if (target->expr_type == EXPR_VARIABLE || target->expr_type == EXPR_FUNCTION)
928 attr2 = gfc_expr_attr (target);
929 else
930 {
931 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
932 "or target VARIABLE or FUNCTION",
933 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
934 &target->where);
935 return false;
936 }
937
938 if (attr1.pointer && !attr2.pointer && !attr2.target)
939 {
940 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
941 "or a TARGET", gfc_current_intrinsic_arg[1]->name,
942 gfc_current_intrinsic, &target->where);
943 return false;
944 }
945
946 /* F2008, C1242. */
947 if (attr1.pointer && gfc_is_coindexed (target))
948 {
949 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
950 "coindexed", gfc_current_intrinsic_arg[1]->name,
951 gfc_current_intrinsic, &target->where);
952 return false;
953 }
954
955 t = true;
956 if (!same_type_check (pointer, 0, target, 1))
957 t = false;
958 if (!rank_check (target, 0, pointer->rank))
959 t = false;
960 if (target->rank > 0)
961 {
962 for (i = 0; i < target->rank; i++)
963 if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
964 {
965 gfc_error ("Array section with a vector subscript at %L shall not "
966 "be the target of a pointer",
967 &target->where);
968 t = false;
969 break;
970 }
971 }
972 return t;
973
974 null_arg:
975
976 gfc_error ("NULL pointer at %L is not permitted as actual argument "
977 "of '%s' intrinsic function", where, gfc_current_intrinsic);
978 return false;
979
980 }
981
982
983 bool
984 gfc_check_atan_2 (gfc_expr *y, gfc_expr *x)
985 {
986 /* gfc_notify_std would be a waste of time as the return value
987 is seemingly used only for the generic resolution. The error
988 will be: Too many arguments. */
989 if ((gfc_option.allow_std & GFC_STD_F2008) == 0)
990 return false;
991
992 return gfc_check_atan2 (y, x);
993 }
994
995
996 bool
997 gfc_check_atan2 (gfc_expr *y, gfc_expr *x)
998 {
999 if (!type_check (y, 0, BT_REAL))
1000 return false;
1001 if (!same_type_check (y, 0, x, 1))
1002 return false;
1003
1004 return true;
1005 }
1006
1007
1008 static bool
1009 gfc_check_atomic (gfc_expr *atom, int atom_no, gfc_expr *value, int val_no,
1010 gfc_expr *stat, int stat_no)
1011 {
1012 if (!scalar_check (atom, atom_no) || !scalar_check (value, val_no))
1013 return false;
1014
1015 if (!(atom->ts.type == BT_INTEGER && atom->ts.kind == gfc_atomic_int_kind)
1016 && !(atom->ts.type == BT_LOGICAL
1017 && atom->ts.kind == gfc_atomic_logical_kind))
1018 {
1019 gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1020 "integer of ATOMIC_INT_KIND or a logical of "
1021 "ATOMIC_LOGICAL_KIND", &atom->where, gfc_current_intrinsic);
1022 return false;
1023 }
1024
1025 if (!gfc_expr_attr (atom).codimension)
1026 {
1027 gfc_error ("ATOM argument at %L of the %s intrinsic function shall be a "
1028 "coarray or coindexed", &atom->where, gfc_current_intrinsic);
1029 return false;
1030 }
1031
1032 if (atom->ts.type != value->ts.type)
1033 {
1034 gfc_error ("'%s' argument of '%s' intrinsic at %L shall have the same "
1035 "type as '%s' at %L", gfc_current_intrinsic_arg[val_no]->name,
1036 gfc_current_intrinsic, &value->where,
1037 gfc_current_intrinsic_arg[atom_no]->name, &atom->where);
1038 return false;
1039 }
1040
1041 if (stat != NULL)
1042 {
1043 if (!type_check (stat, stat_no, BT_INTEGER))
1044 return false;
1045 if (!scalar_check (stat, stat_no))
1046 return false;
1047 if (!variable_check (stat, stat_no, false))
1048 return false;
1049 if (!kind_value_check (stat, stat_no, gfc_default_integer_kind))
1050 return false;
1051
1052 if (!gfc_notify_std (GFC_STD_F2008_TS, "STAT= argument to %s at %L",
1053 gfc_current_intrinsic, &stat->where))
1054 return false;
1055 }
1056
1057 return true;
1058 }
1059
1060
1061 bool
1062 gfc_check_atomic_def (gfc_expr *atom, gfc_expr *value, gfc_expr *stat)
1063 {
1064 if (atom->expr_type == EXPR_FUNCTION
1065 && atom->value.function.isym
1066 && atom->value.function.isym->id == GFC_ISYM_CAF_GET)
1067 atom = atom->value.function.actual->expr;
1068
1069 if (!gfc_check_vardef_context (atom, false, false, false, NULL))
1070 {
1071 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1072 "definable", gfc_current_intrinsic, &atom->where);
1073 return false;
1074 }
1075
1076 return gfc_check_atomic (atom, 0, value, 1, stat, 2);
1077 }
1078
1079
1080 bool
1081 gfc_check_atomic_op (gfc_expr *atom, gfc_expr *value, gfc_expr *stat)
1082 {
1083 if (atom->ts.type != BT_INTEGER || atom->ts.kind != gfc_atomic_int_kind)
1084 {
1085 gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1086 "integer of ATOMIC_INT_KIND", &atom->where,
1087 gfc_current_intrinsic);
1088 return false;
1089 }
1090
1091 return gfc_check_atomic_def (atom, value, stat);
1092 }
1093
1094
1095 bool
1096 gfc_check_atomic_ref (gfc_expr *value, gfc_expr *atom, gfc_expr *stat)
1097 {
1098 if (atom->expr_type == EXPR_FUNCTION
1099 && atom->value.function.isym
1100 && atom->value.function.isym->id == GFC_ISYM_CAF_GET)
1101 atom = atom->value.function.actual->expr;
1102
1103 if (!gfc_check_vardef_context (value, false, false, false, NULL))
1104 {
1105 gfc_error ("VALUE argument of the %s intrinsic function at %L shall be "
1106 "definable", gfc_current_intrinsic, &value->where);
1107 return false;
1108 }
1109
1110 return gfc_check_atomic (atom, 1, value, 0, stat, 2);
1111 }
1112
1113
1114 bool
1115 gfc_check_atomic_cas (gfc_expr *atom, gfc_expr *old, gfc_expr *compare,
1116 gfc_expr *new_val, gfc_expr *stat)
1117 {
1118 if (atom->expr_type == EXPR_FUNCTION
1119 && atom->value.function.isym
1120 && atom->value.function.isym->id == GFC_ISYM_CAF_GET)
1121 atom = atom->value.function.actual->expr;
1122
1123 if (!gfc_check_atomic (atom, 0, new_val, 3, stat, 4))
1124 return false;
1125
1126 if (!scalar_check (old, 1) || !scalar_check (compare, 2))
1127 return false;
1128
1129 if (!same_type_check (atom, 0, old, 1))
1130 return false;
1131
1132 if (!same_type_check (atom, 0, compare, 2))
1133 return false;
1134
1135 if (!gfc_check_vardef_context (atom, false, false, false, NULL))
1136 {
1137 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1138 "definable", gfc_current_intrinsic, &atom->where);
1139 return false;
1140 }
1141
1142 if (!gfc_check_vardef_context (old, false, false, false, NULL))
1143 {
1144 gfc_error ("OLD argument of the %s intrinsic function at %L shall be "
1145 "definable", gfc_current_intrinsic, &old->where);
1146 return false;
1147 }
1148
1149 return true;
1150 }
1151
1152
1153 bool
1154 gfc_check_atomic_fetch_op (gfc_expr *atom, gfc_expr *value, gfc_expr *old,
1155 gfc_expr *stat)
1156 {
1157 if (atom->expr_type == EXPR_FUNCTION
1158 && atom->value.function.isym
1159 && atom->value.function.isym->id == GFC_ISYM_CAF_GET)
1160 atom = atom->value.function.actual->expr;
1161
1162 if (atom->ts.type != BT_INTEGER || atom->ts.kind != gfc_atomic_int_kind)
1163 {
1164 gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1165 "integer of ATOMIC_INT_KIND", &atom->where,
1166 gfc_current_intrinsic);
1167 return false;
1168 }
1169
1170 if (!gfc_check_atomic (atom, 0, value, 1, stat, 3))
1171 return false;
1172
1173 if (!scalar_check (old, 2))
1174 return false;
1175
1176 if (!same_type_check (atom, 0, old, 2))
1177 return false;
1178
1179 if (!gfc_check_vardef_context (atom, false, false, false, NULL))
1180 {
1181 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1182 "definable", gfc_current_intrinsic, &atom->where);
1183 return false;
1184 }
1185
1186 if (!gfc_check_vardef_context (old, false, false, false, NULL))
1187 {
1188 gfc_error ("OLD argument of the %s intrinsic function at %L shall be "
1189 "definable", gfc_current_intrinsic, &old->where);
1190 return false;
1191 }
1192
1193 return true;
1194 }
1195
1196
1197 /* BESJN and BESYN functions. */
1198
1199 bool
1200 gfc_check_besn (gfc_expr *n, gfc_expr *x)
1201 {
1202 if (!type_check (n, 0, BT_INTEGER))
1203 return false;
1204 if (n->expr_type == EXPR_CONSTANT)
1205 {
1206 int i;
1207 gfc_extract_int (n, &i);
1208 if (i < 0 && !gfc_notify_std (GFC_STD_GNU, "Negative argument "
1209 "N at %L", &n->where))
1210 return false;
1211 }
1212
1213 if (!type_check (x, 1, BT_REAL))
1214 return false;
1215
1216 return true;
1217 }
1218
1219
1220 /* Transformational version of the Bessel JN and YN functions. */
1221
1222 bool
1223 gfc_check_bessel_n2 (gfc_expr *n1, gfc_expr *n2, gfc_expr *x)
1224 {
1225 if (!type_check (n1, 0, BT_INTEGER))
1226 return false;
1227 if (!scalar_check (n1, 0))
1228 return false;
1229 if (!nonnegative_check ("N1", n1))
1230 return false;
1231
1232 if (!type_check (n2, 1, BT_INTEGER))
1233 return false;
1234 if (!scalar_check (n2, 1))
1235 return false;
1236 if (!nonnegative_check ("N2", n2))
1237 return false;
1238
1239 if (!type_check (x, 2, BT_REAL))
1240 return false;
1241 if (!scalar_check (x, 2))
1242 return false;
1243
1244 return true;
1245 }
1246
1247
1248 bool
1249 gfc_check_bge_bgt_ble_blt (gfc_expr *i, gfc_expr *j)
1250 {
1251 if (!type_check (i, 0, BT_INTEGER))
1252 return false;
1253
1254 if (!type_check (j, 1, BT_INTEGER))
1255 return false;
1256
1257 return true;
1258 }
1259
1260
1261 bool
1262 gfc_check_bitfcn (gfc_expr *i, gfc_expr *pos)
1263 {
1264 if (!type_check (i, 0, BT_INTEGER))
1265 return false;
1266
1267 if (!type_check (pos, 1, BT_INTEGER))
1268 return false;
1269
1270 if (!nonnegative_check ("pos", pos))
1271 return false;
1272
1273 if (!less_than_bitsize1 ("i", i, "pos", pos, false))
1274 return false;
1275
1276 return true;
1277 }
1278
1279
1280 bool
1281 gfc_check_char (gfc_expr *i, gfc_expr *kind)
1282 {
1283 if (!type_check (i, 0, BT_INTEGER))
1284 return false;
1285 if (!kind_check (kind, 1, BT_CHARACTER))
1286 return false;
1287
1288 return true;
1289 }
1290
1291
1292 bool
1293 gfc_check_chdir (gfc_expr *dir)
1294 {
1295 if (!type_check (dir, 0, BT_CHARACTER))
1296 return false;
1297 if (!kind_value_check (dir, 0, gfc_default_character_kind))
1298 return false;
1299
1300 return true;
1301 }
1302
1303
1304 bool
1305 gfc_check_chdir_sub (gfc_expr *dir, gfc_expr *status)
1306 {
1307 if (!type_check (dir, 0, BT_CHARACTER))
1308 return false;
1309 if (!kind_value_check (dir, 0, gfc_default_character_kind))
1310 return false;
1311
1312 if (status == NULL)
1313 return true;
1314
1315 if (!type_check (status, 1, BT_INTEGER))
1316 return false;
1317 if (!scalar_check (status, 1))
1318 return false;
1319
1320 return true;
1321 }
1322
1323
1324 bool
1325 gfc_check_chmod (gfc_expr *name, gfc_expr *mode)
1326 {
1327 if (!type_check (name, 0, BT_CHARACTER))
1328 return false;
1329 if (!kind_value_check (name, 0, gfc_default_character_kind))
1330 return false;
1331
1332 if (!type_check (mode, 1, BT_CHARACTER))
1333 return false;
1334 if (!kind_value_check (mode, 1, gfc_default_character_kind))
1335 return false;
1336
1337 return true;
1338 }
1339
1340
1341 bool
1342 gfc_check_chmod_sub (gfc_expr *name, gfc_expr *mode, gfc_expr *status)
1343 {
1344 if (!type_check (name, 0, BT_CHARACTER))
1345 return false;
1346 if (!kind_value_check (name, 0, gfc_default_character_kind))
1347 return false;
1348
1349 if (!type_check (mode, 1, BT_CHARACTER))
1350 return false;
1351 if (!kind_value_check (mode, 1, gfc_default_character_kind))
1352 return false;
1353
1354 if (status == NULL)
1355 return true;
1356
1357 if (!type_check (status, 2, BT_INTEGER))
1358 return false;
1359
1360 if (!scalar_check (status, 2))
1361 return false;
1362
1363 return true;
1364 }
1365
1366
1367 bool
1368 gfc_check_cmplx (gfc_expr *x, gfc_expr *y, gfc_expr *kind)
1369 {
1370 if (!numeric_check (x, 0))
1371 return false;
1372
1373 if (y != NULL)
1374 {
1375 if (!numeric_check (y, 1))
1376 return false;
1377
1378 if (x->ts.type == BT_COMPLEX)
1379 {
1380 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1381 "present if 'x' is COMPLEX",
1382 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1383 &y->where);
1384 return false;
1385 }
1386
1387 if (y->ts.type == BT_COMPLEX)
1388 {
1389 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1390 "of either REAL or INTEGER",
1391 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1392 &y->where);
1393 return false;
1394 }
1395
1396 }
1397
1398 if (!kind_check (kind, 2, BT_COMPLEX))
1399 return false;
1400
1401 if (!kind && gfc_option.gfc_warn_conversion
1402 && x->ts.type == BT_REAL && x->ts.kind > gfc_default_real_kind)
1403 gfc_warning_now ("Conversion from %s to default-kind COMPLEX(%d) at %L "
1404 "might lose precision, consider using the KIND argument",
1405 gfc_typename (&x->ts), gfc_default_real_kind, &x->where);
1406 else if (y && !kind && gfc_option.gfc_warn_conversion
1407 && y->ts.type == BT_REAL && y->ts.kind > gfc_default_real_kind)
1408 gfc_warning_now ("Conversion from %s to default-kind COMPLEX(%d) at %L "
1409 "might lose precision, consider using the KIND argument",
1410 gfc_typename (&y->ts), gfc_default_real_kind, &y->where);
1411
1412 return true;
1413 }
1414
1415
1416 static bool
1417 check_co_collective (gfc_expr *a, gfc_expr *image_idx, gfc_expr *stat,
1418 gfc_expr *errmsg, bool co_reduce)
1419 {
1420 if (!variable_check (a, 0, false))
1421 return false;
1422
1423 if (!gfc_check_vardef_context (a, false, false, false, "argument 'A' with "
1424 "INTENT(INOUT)"))
1425 return false;
1426
1427 /* Fortran 2008, 12.5.2.4, paragraph 18. */
1428 if (gfc_has_vector_subscript (a))
1429 {
1430 gfc_error ("Argument 'A' with INTENT(INOUT) at %L of the intrinsic "
1431 "subroutine %s shall not have a vector subscript",
1432 &a->where, gfc_current_intrinsic);
1433 return false;
1434 }
1435
1436 if (image_idx != NULL)
1437 {
1438 if (!type_check (image_idx, co_reduce ? 2 : 1, BT_INTEGER))
1439 return false;
1440 if (!scalar_check (image_idx, co_reduce ? 2 : 1))
1441 return false;
1442 }
1443
1444 if (stat != NULL)
1445 {
1446 if (!type_check (stat, co_reduce ? 3 : 2, BT_INTEGER))
1447 return false;
1448 if (!scalar_check (stat, co_reduce ? 3 : 2))
1449 return false;
1450 if (!variable_check (stat, co_reduce ? 3 : 2, false))
1451 return false;
1452 if (stat->ts.kind != 4)
1453 {
1454 gfc_error ("The stat= argument at %L must be a kind=4 integer "
1455 "variable", &stat->where);
1456 return false;
1457 }
1458 }
1459
1460 if (errmsg != NULL)
1461 {
1462 if (!type_check (errmsg, co_reduce ? 4 : 3, BT_CHARACTER))
1463 return false;
1464 if (!scalar_check (errmsg, co_reduce ? 4 : 3))
1465 return false;
1466 if (!variable_check (errmsg, co_reduce ? 4 : 3, false))
1467 return false;
1468 if (errmsg->ts.kind != 1)
1469 {
1470 gfc_error ("The errmsg= argument at %L must be a default-kind "
1471 "character variable", &errmsg->where);
1472 return false;
1473 }
1474 }
1475
1476 if (gfc_option.coarray == GFC_FCOARRAY_NONE)
1477 {
1478 gfc_fatal_error ("Coarrays disabled at %L, use -fcoarray= to enable",
1479 &a->where);
1480 return false;
1481 }
1482
1483 return true;
1484 }
1485
1486
1487 bool
1488 gfc_check_co_broadcast (gfc_expr *a, gfc_expr *source_image, gfc_expr *stat,
1489 gfc_expr *errmsg)
1490 {
1491 if (a->ts.type == BT_CLASS || gfc_expr_attr (a).alloc_comp)
1492 {
1493 gfc_error ("Support for the A argument at %L which is polymorphic A "
1494 "argument or has allocatable components is not yet "
1495 "implemented", &a->where);
1496 return false;
1497 }
1498 return check_co_collective (a, source_image, stat, errmsg, false);
1499 }
1500
1501
1502 bool
1503 gfc_check_co_reduce (gfc_expr *a, gfc_expr *op, gfc_expr *result_image,
1504 gfc_expr *stat, gfc_expr *errmsg)
1505 {
1506 symbol_attribute attr;
1507
1508 if (a->ts.type == BT_CLASS)
1509 {
1510 gfc_error ("The A argument at %L of CO_REDUCE shall not be polymorphic",
1511 &a->where);
1512 return false;
1513 }
1514
1515 if (gfc_expr_attr (a).alloc_comp)
1516 {
1517 gfc_error ("Support for the A argument at %L with allocatable components"
1518 " is not yet implemented", &a->where);
1519 return false;
1520 }
1521
1522 attr = gfc_expr_attr (op);
1523 if (!attr.pure || !attr.function)
1524 {
1525 gfc_error ("OPERATOR argument at %L must be a PURE function",
1526 &op->where);
1527 return false;
1528 }
1529
1530 if (!check_co_collective (a, result_image, stat, errmsg, true))
1531 return false;
1532
1533 /* FIXME: After J3/WG5 has decided what they actually exactly want, more
1534 checks such as same-argument checks have to be added, implemented and
1535 intrinsic.texi upated. */
1536
1537 gfc_error("CO_REDUCE at %L is not yet implemented", &a->where);
1538 return false;
1539 }
1540
1541
1542 bool
1543 gfc_check_co_minmax (gfc_expr *a, gfc_expr *result_image, gfc_expr *stat,
1544 gfc_expr *errmsg)
1545 {
1546 if (a->ts.type != BT_INTEGER && a->ts.type != BT_REAL
1547 && a->ts.type != BT_CHARACTER)
1548 {
1549 gfc_error ("'%s' argument of '%s' intrinsic at %L shall be of type "
1550 "integer, real or character",
1551 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
1552 &a->where);
1553 return false;
1554 }
1555 return check_co_collective (a, result_image, stat, errmsg, false);
1556 }
1557
1558
1559 bool
1560 gfc_check_co_sum (gfc_expr *a, gfc_expr *result_image, gfc_expr *stat,
1561 gfc_expr *errmsg)
1562 {
1563 if (!numeric_check (a, 0))
1564 return false;
1565 return check_co_collective (a, result_image, stat, errmsg, false);
1566 }
1567
1568
1569 bool
1570 gfc_check_complex (gfc_expr *x, gfc_expr *y)
1571 {
1572 if (!int_or_real_check (x, 0))
1573 return false;
1574 if (!scalar_check (x, 0))
1575 return false;
1576
1577 if (!int_or_real_check (y, 1))
1578 return false;
1579 if (!scalar_check (y, 1))
1580 return false;
1581
1582 return true;
1583 }
1584
1585
1586 bool
1587 gfc_check_count (gfc_expr *mask, gfc_expr *dim, gfc_expr *kind)
1588 {
1589 if (!logical_array_check (mask, 0))
1590 return false;
1591 if (!dim_check (dim, 1, false))
1592 return false;
1593 if (!dim_rank_check (dim, mask, 0))
1594 return false;
1595 if (!kind_check (kind, 2, BT_INTEGER))
1596 return false;
1597 if (kind && !gfc_notify_std (GFC_STD_F2003, "'%s' intrinsic "
1598 "with KIND argument at %L",
1599 gfc_current_intrinsic, &kind->where))
1600 return false;
1601
1602 return true;
1603 }
1604
1605
1606 bool
1607 gfc_check_cshift (gfc_expr *array, gfc_expr *shift, gfc_expr *dim)
1608 {
1609 if (!array_check (array, 0))
1610 return false;
1611
1612 if (!type_check (shift, 1, BT_INTEGER))
1613 return false;
1614
1615 if (!dim_check (dim, 2, true))
1616 return false;
1617
1618 if (!dim_rank_check (dim, array, false))
1619 return false;
1620
1621 if (array->rank == 1 || shift->rank == 0)
1622 {
1623 if (!scalar_check (shift, 1))
1624 return false;
1625 }
1626 else if (shift->rank == array->rank - 1)
1627 {
1628 int d;
1629 if (!dim)
1630 d = 1;
1631 else if (dim->expr_type == EXPR_CONSTANT)
1632 gfc_extract_int (dim, &d);
1633 else
1634 d = -1;
1635
1636 if (d > 0)
1637 {
1638 int i, j;
1639 for (i = 0, j = 0; i < array->rank; i++)
1640 if (i != d - 1)
1641 {
1642 if (!identical_dimen_shape (array, i, shift, j))
1643 {
1644 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1645 "invalid shape in dimension %d (%ld/%ld)",
1646 gfc_current_intrinsic_arg[1]->name,
1647 gfc_current_intrinsic, &shift->where, i + 1,
1648 mpz_get_si (array->shape[i]),
1649 mpz_get_si (shift->shape[j]));
1650 return false;
1651 }
1652
1653 j += 1;
1654 }
1655 }
1656 }
1657 else
1658 {
1659 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1660 "%d or be a scalar", gfc_current_intrinsic_arg[1]->name,
1661 gfc_current_intrinsic, &shift->where, array->rank - 1);
1662 return false;
1663 }
1664
1665 return true;
1666 }
1667
1668
1669 bool
1670 gfc_check_ctime (gfc_expr *time)
1671 {
1672 if (!scalar_check (time, 0))
1673 return false;
1674
1675 if (!type_check (time, 0, BT_INTEGER))
1676 return false;
1677
1678 return true;
1679 }
1680
1681
1682 bool gfc_check_datan2 (gfc_expr *y, gfc_expr *x)
1683 {
1684 if (!double_check (y, 0) || !double_check (x, 1))
1685 return false;
1686
1687 return true;
1688 }
1689
1690 bool
1691 gfc_check_dcmplx (gfc_expr *x, gfc_expr *y)
1692 {
1693 if (!numeric_check (x, 0))
1694 return false;
1695
1696 if (y != NULL)
1697 {
1698 if (!numeric_check (y, 1))
1699 return false;
1700
1701 if (x->ts.type == BT_COMPLEX)
1702 {
1703 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1704 "present if 'x' is COMPLEX",
1705 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1706 &y->where);
1707 return false;
1708 }
1709
1710 if (y->ts.type == BT_COMPLEX)
1711 {
1712 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1713 "of either REAL or INTEGER",
1714 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1715 &y->where);
1716 return false;
1717 }
1718 }
1719
1720 return true;
1721 }
1722
1723
1724 bool
1725 gfc_check_dble (gfc_expr *x)
1726 {
1727 if (!numeric_check (x, 0))
1728 return false;
1729
1730 return true;
1731 }
1732
1733
1734 bool
1735 gfc_check_digits (gfc_expr *x)
1736 {
1737 if (!int_or_real_check (x, 0))
1738 return false;
1739
1740 return true;
1741 }
1742
1743
1744 bool
1745 gfc_check_dot_product (gfc_expr *vector_a, gfc_expr *vector_b)
1746 {
1747 switch (vector_a->ts.type)
1748 {
1749 case BT_LOGICAL:
1750 if (!type_check (vector_b, 1, BT_LOGICAL))
1751 return false;
1752 break;
1753
1754 case BT_INTEGER:
1755 case BT_REAL:
1756 case BT_COMPLEX:
1757 if (!numeric_check (vector_b, 1))
1758 return false;
1759 break;
1760
1761 default:
1762 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1763 "or LOGICAL", gfc_current_intrinsic_arg[0]->name,
1764 gfc_current_intrinsic, &vector_a->where);
1765 return false;
1766 }
1767
1768 if (!rank_check (vector_a, 0, 1))
1769 return false;
1770
1771 if (!rank_check (vector_b, 1, 1))
1772 return false;
1773
1774 if (! identical_dimen_shape (vector_a, 0, vector_b, 0))
1775 {
1776 gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
1777 "intrinsic 'dot_product'", gfc_current_intrinsic_arg[0]->name,
1778 gfc_current_intrinsic_arg[1]->name, &vector_a->where);
1779 return false;
1780 }
1781
1782 return true;
1783 }
1784
1785
1786 bool
1787 gfc_check_dprod (gfc_expr *x, gfc_expr *y)
1788 {
1789 if (!type_check (x, 0, BT_REAL)
1790 || !type_check (y, 1, BT_REAL))
1791 return false;
1792
1793 if (x->ts.kind != gfc_default_real_kind)
1794 {
1795 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1796 "real", gfc_current_intrinsic_arg[0]->name,
1797 gfc_current_intrinsic, &x->where);
1798 return false;
1799 }
1800
1801 if (y->ts.kind != gfc_default_real_kind)
1802 {
1803 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1804 "real", gfc_current_intrinsic_arg[1]->name,
1805 gfc_current_intrinsic, &y->where);
1806 return false;
1807 }
1808
1809 return true;
1810 }
1811
1812
1813 bool
1814 gfc_check_dshift (gfc_expr *i, gfc_expr *j, gfc_expr *shift)
1815 {
1816 if (!type_check (i, 0, BT_INTEGER))
1817 return false;
1818
1819 if (!type_check (j, 1, BT_INTEGER))
1820 return false;
1821
1822 if (i->is_boz && j->is_boz)
1823 {
1824 gfc_error ("'I' at %L and 'J' at %L cannot both be BOZ literal "
1825 "constants", &i->where, &j->where);
1826 return false;
1827 }
1828
1829 if (!i->is_boz && !j->is_boz && !same_type_check (i, 0, j, 1))
1830 return false;
1831
1832 if (!type_check (shift, 2, BT_INTEGER))
1833 return false;
1834
1835 if (!nonnegative_check ("SHIFT", shift))
1836 return false;
1837
1838 if (i->is_boz)
1839 {
1840 if (!less_than_bitsize1 ("J", j, "SHIFT", shift, true))
1841 return false;
1842 i->ts.kind = j->ts.kind;
1843 }
1844 else
1845 {
1846 if (!less_than_bitsize1 ("I", i, "SHIFT", shift, true))
1847 return false;
1848 j->ts.kind = i->ts.kind;
1849 }
1850
1851 return true;
1852 }
1853
1854
1855 bool
1856 gfc_check_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary,
1857 gfc_expr *dim)
1858 {
1859 if (!array_check (array, 0))
1860 return false;
1861
1862 if (!type_check (shift, 1, BT_INTEGER))
1863 return false;
1864
1865 if (!dim_check (dim, 3, true))
1866 return false;
1867
1868 if (!dim_rank_check (dim, array, false))
1869 return false;
1870
1871 if (array->rank == 1 || shift->rank == 0)
1872 {
1873 if (!scalar_check (shift, 1))
1874 return false;
1875 }
1876 else if (shift->rank == array->rank - 1)
1877 {
1878 int d;
1879 if (!dim)
1880 d = 1;
1881 else if (dim->expr_type == EXPR_CONSTANT)
1882 gfc_extract_int (dim, &d);
1883 else
1884 d = -1;
1885
1886 if (d > 0)
1887 {
1888 int i, j;
1889 for (i = 0, j = 0; i < array->rank; i++)
1890 if (i != d - 1)
1891 {
1892 if (!identical_dimen_shape (array, i, shift, j))
1893 {
1894 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1895 "invalid shape in dimension %d (%ld/%ld)",
1896 gfc_current_intrinsic_arg[1]->name,
1897 gfc_current_intrinsic, &shift->where, i + 1,
1898 mpz_get_si (array->shape[i]),
1899 mpz_get_si (shift->shape[j]));
1900 return false;
1901 }
1902
1903 j += 1;
1904 }
1905 }
1906 }
1907 else
1908 {
1909 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1910 "%d or be a scalar", gfc_current_intrinsic_arg[1]->name,
1911 gfc_current_intrinsic, &shift->where, array->rank - 1);
1912 return false;
1913 }
1914
1915 if (boundary != NULL)
1916 {
1917 if (!same_type_check (array, 0, boundary, 2))
1918 return false;
1919
1920 if (array->rank == 1 || boundary->rank == 0)
1921 {
1922 if (!scalar_check (boundary, 2))
1923 return false;
1924 }
1925 else if (boundary->rank == array->rank - 1)
1926 {
1927 if (!gfc_check_conformance (shift, boundary,
1928 "arguments '%s' and '%s' for "
1929 "intrinsic %s",
1930 gfc_current_intrinsic_arg[1]->name,
1931 gfc_current_intrinsic_arg[2]->name,
1932 gfc_current_intrinsic))
1933 return false;
1934 }
1935 else
1936 {
1937 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have "
1938 "rank %d or be a scalar",
1939 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1940 &shift->where, array->rank - 1);
1941 return false;
1942 }
1943 }
1944
1945 return true;
1946 }
1947
1948 bool
1949 gfc_check_float (gfc_expr *a)
1950 {
1951 if (!type_check (a, 0, BT_INTEGER))
1952 return false;
1953
1954 if ((a->ts.kind != gfc_default_integer_kind)
1955 && !gfc_notify_std (GFC_STD_GNU, "non-default INTEGER "
1956 "kind argument to %s intrinsic at %L",
1957 gfc_current_intrinsic, &a->where))
1958 return false;
1959
1960 return true;
1961 }
1962
1963 /* A single complex argument. */
1964
1965 bool
1966 gfc_check_fn_c (gfc_expr *a)
1967 {
1968 if (!type_check (a, 0, BT_COMPLEX))
1969 return false;
1970
1971 return true;
1972 }
1973
1974 /* A single real argument. */
1975
1976 bool
1977 gfc_check_fn_r (gfc_expr *a)
1978 {
1979 if (!type_check (a, 0, BT_REAL))
1980 return false;
1981
1982 return true;
1983 }
1984
1985 /* A single double argument. */
1986
1987 bool
1988 gfc_check_fn_d (gfc_expr *a)
1989 {
1990 if (!double_check (a, 0))
1991 return false;
1992
1993 return true;
1994 }
1995
1996 /* A single real or complex argument. */
1997
1998 bool
1999 gfc_check_fn_rc (gfc_expr *a)
2000 {
2001 if (!real_or_complex_check (a, 0))
2002 return false;
2003
2004 return true;
2005 }
2006
2007
2008 bool
2009 gfc_check_fn_rc2008 (gfc_expr *a)
2010 {
2011 if (!real_or_complex_check (a, 0))
2012 return false;
2013
2014 if (a->ts.type == BT_COMPLEX
2015 && !gfc_notify_std (GFC_STD_F2008, "COMPLEX argument '%s' "
2016 "of '%s' intrinsic at %L",
2017 gfc_current_intrinsic_arg[0]->name,
2018 gfc_current_intrinsic, &a->where))
2019 return false;
2020
2021 return true;
2022 }
2023
2024
2025 bool
2026 gfc_check_fnum (gfc_expr *unit)
2027 {
2028 if (!type_check (unit, 0, BT_INTEGER))
2029 return false;
2030
2031 if (!scalar_check (unit, 0))
2032 return false;
2033
2034 return true;
2035 }
2036
2037
2038 bool
2039 gfc_check_huge (gfc_expr *x)
2040 {
2041 if (!int_or_real_check (x, 0))
2042 return false;
2043
2044 return true;
2045 }
2046
2047
2048 bool
2049 gfc_check_hypot (gfc_expr *x, gfc_expr *y)
2050 {
2051 if (!type_check (x, 0, BT_REAL))
2052 return false;
2053 if (!same_type_check (x, 0, y, 1))
2054 return false;
2055
2056 return true;
2057 }
2058
2059
2060 /* Check that the single argument is an integer. */
2061
2062 bool
2063 gfc_check_i (gfc_expr *i)
2064 {
2065 if (!type_check (i, 0, BT_INTEGER))
2066 return false;
2067
2068 return true;
2069 }
2070
2071
2072 bool
2073 gfc_check_iand (gfc_expr *i, gfc_expr *j)
2074 {
2075 if (!type_check (i, 0, BT_INTEGER))
2076 return false;
2077
2078 if (!type_check (j, 1, BT_INTEGER))
2079 return false;
2080
2081 if (i->ts.kind != j->ts.kind)
2082 {
2083 if (!gfc_notify_std (GFC_STD_GNU, "Different type kinds at %L",
2084 &i->where))
2085 return false;
2086 }
2087
2088 return true;
2089 }
2090
2091
2092 bool
2093 gfc_check_ibits (gfc_expr *i, gfc_expr *pos, gfc_expr *len)
2094 {
2095 if (!type_check (i, 0, BT_INTEGER))
2096 return false;
2097
2098 if (!type_check (pos, 1, BT_INTEGER))
2099 return false;
2100
2101 if (!type_check (len, 2, BT_INTEGER))
2102 return false;
2103
2104 if (!nonnegative_check ("pos", pos))
2105 return false;
2106
2107 if (!nonnegative_check ("len", len))
2108 return false;
2109
2110 if (!less_than_bitsize2 ("i", i, "pos", pos, "len", len))
2111 return false;
2112
2113 return true;
2114 }
2115
2116
2117 bool
2118 gfc_check_ichar_iachar (gfc_expr *c, gfc_expr *kind)
2119 {
2120 int i;
2121
2122 if (!type_check (c, 0, BT_CHARACTER))
2123 return false;
2124
2125 if (!kind_check (kind, 1, BT_INTEGER))
2126 return false;
2127
2128 if (kind && !gfc_notify_std (GFC_STD_F2003, "'%s' intrinsic "
2129 "with KIND argument at %L",
2130 gfc_current_intrinsic, &kind->where))
2131 return false;
2132
2133 if (c->expr_type == EXPR_VARIABLE || c->expr_type == EXPR_SUBSTRING)
2134 {
2135 gfc_expr *start;
2136 gfc_expr *end;
2137 gfc_ref *ref;
2138
2139 /* Substring references don't have the charlength set. */
2140 ref = c->ref;
2141 while (ref && ref->type != REF_SUBSTRING)
2142 ref = ref->next;
2143
2144 gcc_assert (ref == NULL || ref->type == REF_SUBSTRING);
2145
2146 if (!ref)
2147 {
2148 /* Check that the argument is length one. Non-constant lengths
2149 can't be checked here, so assume they are ok. */
2150 if (c->ts.u.cl && c->ts.u.cl->length)
2151 {
2152 /* If we already have a length for this expression then use it. */
2153 if (c->ts.u.cl->length->expr_type != EXPR_CONSTANT)
2154 return true;
2155 i = mpz_get_si (c->ts.u.cl->length->value.integer);
2156 }
2157 else
2158 return true;
2159 }
2160 else
2161 {
2162 start = ref->u.ss.start;
2163 end = ref->u.ss.end;
2164
2165 gcc_assert (start);
2166 if (end == NULL || end->expr_type != EXPR_CONSTANT
2167 || start->expr_type != EXPR_CONSTANT)
2168 return true;
2169
2170 i = mpz_get_si (end->value.integer) + 1
2171 - mpz_get_si (start->value.integer);
2172 }
2173 }
2174 else
2175 return true;
2176
2177 if (i != 1)
2178 {
2179 gfc_error ("Argument of %s at %L must be of length one",
2180 gfc_current_intrinsic, &c->where);
2181 return false;
2182 }
2183
2184 return true;
2185 }
2186
2187
2188 bool
2189 gfc_check_idnint (gfc_expr *a)
2190 {
2191 if (!double_check (a, 0))
2192 return false;
2193
2194 return true;
2195 }
2196
2197
2198 bool
2199 gfc_check_ieor (gfc_expr *i, gfc_expr *j)
2200 {
2201 if (!type_check (i, 0, BT_INTEGER))
2202 return false;
2203
2204 if (!type_check (j, 1, BT_INTEGER))
2205 return false;
2206
2207 if (i->ts.kind != j->ts.kind)
2208 {
2209 if (!gfc_notify_std (GFC_STD_GNU, "Different type kinds at %L",
2210 &i->where))
2211 return false;
2212 }
2213
2214 return true;
2215 }
2216
2217
2218 bool
2219 gfc_check_index (gfc_expr *string, gfc_expr *substring, gfc_expr *back,
2220 gfc_expr *kind)
2221 {
2222 if (!type_check (string, 0, BT_CHARACTER)
2223 || !type_check (substring, 1, BT_CHARACTER))
2224 return false;
2225
2226 if (back != NULL && !type_check (back, 2, BT_LOGICAL))
2227 return false;
2228
2229 if (!kind_check (kind, 3, BT_INTEGER))
2230 return false;
2231 if (kind && !gfc_notify_std (GFC_STD_F2003, "'%s' intrinsic "
2232 "with KIND argument at %L",
2233 gfc_current_intrinsic, &kind->where))
2234 return false;
2235
2236 if (string->ts.kind != substring->ts.kind)
2237 {
2238 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
2239 "kind as '%s'", gfc_current_intrinsic_arg[1]->name,
2240 gfc_current_intrinsic, &substring->where,
2241 gfc_current_intrinsic_arg[0]->name);
2242 return false;
2243 }
2244
2245 return true;
2246 }
2247
2248
2249 bool
2250 gfc_check_int (gfc_expr *x, gfc_expr *kind)
2251 {
2252 if (!numeric_check (x, 0))
2253 return false;
2254
2255 if (!kind_check (kind, 1, BT_INTEGER))
2256 return false;
2257
2258 return true;
2259 }
2260
2261
2262 bool
2263 gfc_check_intconv (gfc_expr *x)
2264 {
2265 if (!numeric_check (x, 0))
2266 return false;
2267
2268 return true;
2269 }
2270
2271
2272 bool
2273 gfc_check_ior (gfc_expr *i, gfc_expr *j)
2274 {
2275 if (!type_check (i, 0, BT_INTEGER))
2276 return false;
2277
2278 if (!type_check (j, 1, BT_INTEGER))
2279 return false;
2280
2281 if (i->ts.kind != j->ts.kind)
2282 {
2283 if (!gfc_notify_std (GFC_STD_GNU, "Different type kinds at %L",
2284 &i->where))
2285 return false;
2286 }
2287
2288 return true;
2289 }
2290
2291
2292 bool
2293 gfc_check_ishft (gfc_expr *i, gfc_expr *shift)
2294 {
2295 if (!type_check (i, 0, BT_INTEGER)
2296 || !type_check (shift, 1, BT_INTEGER))
2297 return false;
2298
2299 if (!less_than_bitsize1 ("I", i, NULL, shift, true))
2300 return false;
2301
2302 return true;
2303 }
2304
2305
2306 bool
2307 gfc_check_ishftc (gfc_expr *i, gfc_expr *shift, gfc_expr *size)
2308 {
2309 if (!type_check (i, 0, BT_INTEGER)
2310 || !type_check (shift, 1, BT_INTEGER))
2311 return false;
2312
2313 if (size != NULL)
2314 {
2315 int i2, i3;
2316
2317 if (!type_check (size, 2, BT_INTEGER))
2318 return false;
2319
2320 if (!less_than_bitsize1 ("I", i, "SIZE", size, true))
2321 return false;
2322
2323 if (size->expr_type == EXPR_CONSTANT)
2324 {
2325 gfc_extract_int (size, &i3);
2326 if (i3 <= 0)
2327 {
2328 gfc_error ("SIZE at %L must be positive", &size->where);
2329 return false;
2330 }
2331
2332 if (shift->expr_type == EXPR_CONSTANT)
2333 {
2334 gfc_extract_int (shift, &i2);
2335 if (i2 < 0)
2336 i2 = -i2;
2337
2338 if (i2 > i3)
2339 {
2340 gfc_error ("The absolute value of SHIFT at %L must be less "
2341 "than or equal to SIZE at %L", &shift->where,
2342 &size->where);
2343 return false;
2344 }
2345 }
2346 }
2347 }
2348 else if (!less_than_bitsize1 ("I", i, NULL, shift, true))
2349 return false;
2350
2351 return true;
2352 }
2353
2354
2355 bool
2356 gfc_check_kill (gfc_expr *pid, gfc_expr *sig)
2357 {
2358 if (!type_check (pid, 0, BT_INTEGER))
2359 return false;
2360
2361 if (!type_check (sig, 1, BT_INTEGER))
2362 return false;
2363
2364 return true;
2365 }
2366
2367
2368 bool
2369 gfc_check_kill_sub (gfc_expr *pid, gfc_expr *sig, gfc_expr *status)
2370 {
2371 if (!type_check (pid, 0, BT_INTEGER))
2372 return false;
2373
2374 if (!scalar_check (pid, 0))
2375 return false;
2376
2377 if (!type_check (sig, 1, BT_INTEGER))
2378 return false;
2379
2380 if (!scalar_check (sig, 1))
2381 return false;
2382
2383 if (status == NULL)
2384 return true;
2385
2386 if (!type_check (status, 2, BT_INTEGER))
2387 return false;
2388
2389 if (!scalar_check (status, 2))
2390 return false;
2391
2392 return true;
2393 }
2394
2395
2396 bool
2397 gfc_check_kind (gfc_expr *x)
2398 {
2399 if (x->ts.type == BT_DERIVED)
2400 {
2401 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
2402 "non-derived type", gfc_current_intrinsic_arg[0]->name,
2403 gfc_current_intrinsic, &x->where);
2404 return false;
2405 }
2406
2407 return true;
2408 }
2409
2410
2411 bool
2412 gfc_check_lbound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
2413 {
2414 if (!array_check (array, 0))
2415 return false;
2416
2417 if (!dim_check (dim, 1, false))
2418 return false;
2419
2420 if (!dim_rank_check (dim, array, 1))
2421 return false;
2422
2423 if (!kind_check (kind, 2, BT_INTEGER))
2424 return false;
2425 if (kind && !gfc_notify_std (GFC_STD_F2003, "'%s' intrinsic "
2426 "with KIND argument at %L",
2427 gfc_current_intrinsic, &kind->where))
2428 return false;
2429
2430 return true;
2431 }
2432
2433
2434 bool
2435 gfc_check_lcobound (gfc_expr *coarray, gfc_expr *dim, gfc_expr *kind)
2436 {
2437 if (gfc_option.coarray == GFC_FCOARRAY_NONE)
2438 {
2439 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
2440 return false;
2441 }
2442
2443 if (!coarray_check (coarray, 0))
2444 return false;
2445
2446 if (dim != NULL)
2447 {
2448 if (!dim_check (dim, 1, false))
2449 return false;
2450
2451 if (!dim_corank_check (dim, coarray))
2452 return false;
2453 }
2454
2455 if (!kind_check (kind, 2, BT_INTEGER))
2456 return false;
2457
2458 return true;
2459 }
2460
2461
2462 bool
2463 gfc_check_len_lentrim (gfc_expr *s, gfc_expr *kind)
2464 {
2465 if (!type_check (s, 0, BT_CHARACTER))
2466 return false;
2467
2468 if (!kind_check (kind, 1, BT_INTEGER))
2469 return false;
2470 if (kind && !gfc_notify_std (GFC_STD_F2003, "'%s' intrinsic "
2471 "with KIND argument at %L",
2472 gfc_current_intrinsic, &kind->where))
2473 return false;
2474
2475 return true;
2476 }
2477
2478
2479 bool
2480 gfc_check_lge_lgt_lle_llt (gfc_expr *a, gfc_expr *b)
2481 {
2482 if (!type_check (a, 0, BT_CHARACTER))
2483 return false;
2484 if (!kind_value_check (a, 0, gfc_default_character_kind))
2485 return false;
2486
2487 if (!type_check (b, 1, BT_CHARACTER))
2488 return false;
2489 if (!kind_value_check (b, 1, gfc_default_character_kind))
2490 return false;
2491
2492 return true;
2493 }
2494
2495
2496 bool
2497 gfc_check_link (gfc_expr *path1, gfc_expr *path2)
2498 {
2499 if (!type_check (path1, 0, BT_CHARACTER))
2500 return false;
2501 if (!kind_value_check (path1, 0, gfc_default_character_kind))
2502 return false;
2503
2504 if (!type_check (path2, 1, BT_CHARACTER))
2505 return false;
2506 if (!kind_value_check (path2, 1, gfc_default_character_kind))
2507 return false;
2508
2509 return true;
2510 }
2511
2512
2513 bool
2514 gfc_check_link_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
2515 {
2516 if (!type_check (path1, 0, BT_CHARACTER))
2517 return false;
2518 if (!kind_value_check (path1, 0, gfc_default_character_kind))
2519 return false;
2520
2521 if (!type_check (path2, 1, BT_CHARACTER))
2522 return false;
2523 if (!kind_value_check (path2, 0, gfc_default_character_kind))
2524 return false;
2525
2526 if (status == NULL)
2527 return true;
2528
2529 if (!type_check (status, 2, BT_INTEGER))
2530 return false;
2531
2532 if (!scalar_check (status, 2))
2533 return false;
2534
2535 return true;
2536 }
2537
2538
2539 bool
2540 gfc_check_loc (gfc_expr *expr)
2541 {
2542 return variable_check (expr, 0, true);
2543 }
2544
2545
2546 bool
2547 gfc_check_symlnk (gfc_expr *path1, gfc_expr *path2)
2548 {
2549 if (!type_check (path1, 0, BT_CHARACTER))
2550 return false;
2551 if (!kind_value_check (path1, 0, gfc_default_character_kind))
2552 return false;
2553
2554 if (!type_check (path2, 1, BT_CHARACTER))
2555 return false;
2556 if (!kind_value_check (path2, 1, gfc_default_character_kind))
2557 return false;
2558
2559 return true;
2560 }
2561
2562
2563 bool
2564 gfc_check_symlnk_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
2565 {
2566 if (!type_check (path1, 0, BT_CHARACTER))
2567 return false;
2568 if (!kind_value_check (path1, 0, gfc_default_character_kind))
2569 return false;
2570
2571 if (!type_check (path2, 1, BT_CHARACTER))
2572 return false;
2573 if (!kind_value_check (path2, 1, gfc_default_character_kind))
2574 return false;
2575
2576 if (status == NULL)
2577 return true;
2578
2579 if (!type_check (status, 2, BT_INTEGER))
2580 return false;
2581
2582 if (!scalar_check (status, 2))
2583 return false;
2584
2585 return true;
2586 }
2587
2588
2589 bool
2590 gfc_check_logical (gfc_expr *a, gfc_expr *kind)
2591 {
2592 if (!type_check (a, 0, BT_LOGICAL))
2593 return false;
2594 if (!kind_check (kind, 1, BT_LOGICAL))
2595 return false;
2596
2597 return true;
2598 }
2599
2600
2601 /* Min/max family. */
2602
2603 static bool
2604 min_max_args (gfc_actual_arglist *args)
2605 {
2606 gfc_actual_arglist *arg;
2607 int i, j, nargs, *nlabels, nlabelless;
2608 bool a1 = false, a2 = false;
2609
2610 if (args == NULL || args->next == NULL)
2611 {
2612 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
2613 gfc_current_intrinsic, gfc_current_intrinsic_where);
2614 return false;
2615 }
2616
2617 if (!args->name)
2618 a1 = true;
2619
2620 if (!args->next->name)
2621 a2 = true;
2622
2623 nargs = 0;
2624 for (arg = args; arg; arg = arg->next)
2625 if (arg->name)
2626 nargs++;
2627
2628 if (nargs == 0)
2629 return true;
2630
2631 /* Note: Having a keywordless argument after an "arg=" is checked before. */
2632 nlabelless = 0;
2633 nlabels = XALLOCAVEC (int, nargs);
2634 for (arg = args, i = 0; arg; arg = arg->next, i++)
2635 if (arg->name)
2636 {
2637 int n;
2638 char *endp;
2639
2640 if (arg->name[0] != 'a' || arg->name[1] < '1' || arg->name[1] > '9')
2641 goto unknown;
2642 n = strtol (&arg->name[1], &endp, 10);
2643 if (endp[0] != '\0')
2644 goto unknown;
2645 if (n <= 0)
2646 goto unknown;
2647 if (n <= nlabelless)
2648 goto duplicate;
2649 nlabels[i] = n;
2650 if (n == 1)
2651 a1 = true;
2652 if (n == 2)
2653 a2 = true;
2654 }
2655 else
2656 nlabelless++;
2657
2658 if (!a1 || !a2)
2659 {
2660 gfc_error ("Missing '%s' argument to the %s intrinsic at %L",
2661 !a1 ? "a1" : "a2", gfc_current_intrinsic,
2662 gfc_current_intrinsic_where);
2663 return false;
2664 }
2665
2666 /* Check for duplicates. */
2667 for (i = 0; i < nargs; i++)
2668 for (j = i + 1; j < nargs; j++)
2669 if (nlabels[i] == nlabels[j])
2670 goto duplicate;
2671
2672 return true;
2673
2674 duplicate:
2675 gfc_error ("Duplicate argument '%s' at %L to intrinsic %s", arg->name,
2676 &arg->expr->where, gfc_current_intrinsic);
2677 return false;
2678
2679 unknown:
2680 gfc_error ("Unknown argument '%s' at %L to intrinsic %s", arg->name,
2681 &arg->expr->where, gfc_current_intrinsic);
2682 return false;
2683 }
2684
2685
2686 static bool
2687 check_rest (bt type, int kind, gfc_actual_arglist *arglist)
2688 {
2689 gfc_actual_arglist *arg, *tmp;
2690 gfc_expr *x;
2691 int m, n;
2692
2693 if (!min_max_args (arglist))
2694 return false;
2695
2696 for (arg = arglist, n=1; arg; arg = arg->next, n++)
2697 {
2698 x = arg->expr;
2699 if (x->ts.type != type || x->ts.kind != kind)
2700 {
2701 if (x->ts.type == type)
2702 {
2703 if (!gfc_notify_std (GFC_STD_GNU, "Different type "
2704 "kinds at %L", &x->where))
2705 return false;
2706 }
2707 else
2708 {
2709 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
2710 "%s(%d)", n, gfc_current_intrinsic, &x->where,
2711 gfc_basic_typename (type), kind);
2712 return false;
2713 }
2714 }
2715
2716 for (tmp = arglist, m=1; tmp != arg; tmp = tmp->next, m++)
2717 if (!gfc_check_conformance (tmp->expr, x,
2718 "arguments 'a%d' and 'a%d' for "
2719 "intrinsic '%s'", m, n,
2720 gfc_current_intrinsic))
2721 return false;
2722 }
2723
2724 return true;
2725 }
2726
2727
2728 bool
2729 gfc_check_min_max (gfc_actual_arglist *arg)
2730 {
2731 gfc_expr *x;
2732
2733 if (!min_max_args (arg))
2734 return false;
2735
2736 x = arg->expr;
2737
2738 if (x->ts.type == BT_CHARACTER)
2739 {
2740 if (!gfc_notify_std (GFC_STD_F2003, "'%s' intrinsic "
2741 "with CHARACTER argument at %L",
2742 gfc_current_intrinsic, &x->where))
2743 return false;
2744 }
2745 else if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
2746 {
2747 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
2748 "REAL or CHARACTER", gfc_current_intrinsic, &x->where);
2749 return false;
2750 }
2751
2752 return check_rest (x->ts.type, x->ts.kind, arg);
2753 }
2754
2755
2756 bool
2757 gfc_check_min_max_integer (gfc_actual_arglist *arg)
2758 {
2759 return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
2760 }
2761
2762
2763 bool
2764 gfc_check_min_max_real (gfc_actual_arglist *arg)
2765 {
2766 return check_rest (BT_REAL, gfc_default_real_kind, arg);
2767 }
2768
2769
2770 bool
2771 gfc_check_min_max_double (gfc_actual_arglist *arg)
2772 {
2773 return check_rest (BT_REAL, gfc_default_double_kind, arg);
2774 }
2775
2776
2777 /* End of min/max family. */
2778
2779 bool
2780 gfc_check_malloc (gfc_expr *size)
2781 {
2782 if (!type_check (size, 0, BT_INTEGER))
2783 return false;
2784
2785 if (!scalar_check (size, 0))
2786 return false;
2787
2788 return true;
2789 }
2790
2791
2792 bool
2793 gfc_check_matmul (gfc_expr *matrix_a, gfc_expr *matrix_b)
2794 {
2795 if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
2796 {
2797 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2798 "or LOGICAL", gfc_current_intrinsic_arg[0]->name,
2799 gfc_current_intrinsic, &matrix_a->where);
2800 return false;
2801 }
2802
2803 if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
2804 {
2805 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2806 "or LOGICAL", gfc_current_intrinsic_arg[1]->name,
2807 gfc_current_intrinsic, &matrix_b->where);
2808 return false;
2809 }
2810
2811 if ((matrix_a->ts.type == BT_LOGICAL && gfc_numeric_ts (&matrix_b->ts))
2812 || (gfc_numeric_ts (&matrix_a->ts) && matrix_b->ts.type == BT_LOGICAL))
2813 {
2814 gfc_error ("Argument types of '%s' intrinsic at %L must match (%s/%s)",
2815 gfc_current_intrinsic, &matrix_a->where,
2816 gfc_typename(&matrix_a->ts), gfc_typename(&matrix_b->ts));
2817 return false;
2818 }
2819
2820 switch (matrix_a->rank)
2821 {
2822 case 1:
2823 if (!rank_check (matrix_b, 1, 2))
2824 return false;
2825 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
2826 if (!identical_dimen_shape (matrix_a, 0, matrix_b, 0))
2827 {
2828 gfc_error ("Different shape on dimension 1 for arguments '%s' "
2829 "and '%s' at %L for intrinsic matmul",
2830 gfc_current_intrinsic_arg[0]->name,
2831 gfc_current_intrinsic_arg[1]->name, &matrix_a->where);
2832 return false;
2833 }
2834 break;
2835
2836 case 2:
2837 if (matrix_b->rank != 2)
2838 {
2839 if (!rank_check (matrix_b, 1, 1))
2840 return false;
2841 }
2842 /* matrix_b has rank 1 or 2 here. Common check for the cases
2843 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
2844 - matrix_a has shape (n,m) and matrix_b has shape (m). */
2845 if (!identical_dimen_shape (matrix_a, 1, matrix_b, 0))
2846 {
2847 gfc_error ("Different shape on dimension 2 for argument '%s' and "
2848 "dimension 1 for argument '%s' at %L for intrinsic "
2849 "matmul", gfc_current_intrinsic_arg[0]->name,
2850 gfc_current_intrinsic_arg[1]->name, &matrix_a->where);
2851 return false;
2852 }
2853 break;
2854
2855 default:
2856 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
2857 "1 or 2", gfc_current_intrinsic_arg[0]->name,
2858 gfc_current_intrinsic, &matrix_a->where);
2859 return false;
2860 }
2861
2862 return true;
2863 }
2864
2865
2866 /* Whoever came up with this interface was probably on something.
2867 The possibilities for the occupation of the second and third
2868 parameters are:
2869
2870 Arg #2 Arg #3
2871 NULL NULL
2872 DIM NULL
2873 MASK NULL
2874 NULL MASK minloc(array, mask=m)
2875 DIM MASK
2876
2877 I.e. in the case of minloc(array,mask), mask will be in the second
2878 position of the argument list and we'll have to fix that up. */
2879
2880 bool
2881 gfc_check_minloc_maxloc (gfc_actual_arglist *ap)
2882 {
2883 gfc_expr *a, *m, *d;
2884
2885 a = ap->expr;
2886 if (!int_or_real_check (a, 0) || !array_check (a, 0))
2887 return false;
2888
2889 d = ap->next->expr;
2890 m = ap->next->next->expr;
2891
2892 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
2893 && ap->next->name == NULL)
2894 {
2895 m = d;
2896 d = NULL;
2897 ap->next->expr = NULL;
2898 ap->next->next->expr = m;
2899 }
2900
2901 if (!dim_check (d, 1, false))
2902 return false;
2903
2904 if (!dim_rank_check (d, a, 0))
2905 return false;
2906
2907 if (m != NULL && !type_check (m, 2, BT_LOGICAL))
2908 return false;
2909
2910 if (m != NULL
2911 && !gfc_check_conformance (a, m,
2912 "arguments '%s' and '%s' for intrinsic %s",
2913 gfc_current_intrinsic_arg[0]->name,
2914 gfc_current_intrinsic_arg[2]->name,
2915 gfc_current_intrinsic))
2916 return false;
2917
2918 return true;
2919 }
2920
2921
2922 /* Similar to minloc/maxloc, the argument list might need to be
2923 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
2924 difference is that MINLOC/MAXLOC take an additional KIND argument.
2925 The possibilities are:
2926
2927 Arg #2 Arg #3
2928 NULL NULL
2929 DIM NULL
2930 MASK NULL
2931 NULL MASK minval(array, mask=m)
2932 DIM MASK
2933
2934 I.e. in the case of minval(array,mask), mask will be in the second
2935 position of the argument list and we'll have to fix that up. */
2936
2937 static bool
2938 check_reduction (gfc_actual_arglist *ap)
2939 {
2940 gfc_expr *a, *m, *d;
2941
2942 a = ap->expr;
2943 d = ap->next->expr;
2944 m = ap->next->next->expr;
2945
2946 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
2947 && ap->next->name == NULL)
2948 {
2949 m = d;
2950 d = NULL;
2951 ap->next->expr = NULL;
2952 ap->next->next->expr = m;
2953 }
2954
2955 if (!dim_check (d, 1, false))
2956 return false;
2957
2958 if (!dim_rank_check (d, a, 0))
2959 return false;
2960
2961 if (m != NULL && !type_check (m, 2, BT_LOGICAL))
2962 return false;
2963
2964 if (m != NULL
2965 && !gfc_check_conformance (a, m,
2966 "arguments '%s' and '%s' for intrinsic %s",
2967 gfc_current_intrinsic_arg[0]->name,
2968 gfc_current_intrinsic_arg[2]->name,
2969 gfc_current_intrinsic))
2970 return false;
2971
2972 return true;
2973 }
2974
2975
2976 bool
2977 gfc_check_minval_maxval (gfc_actual_arglist *ap)
2978 {
2979 if (!int_or_real_check (ap->expr, 0)
2980 || !array_check (ap->expr, 0))
2981 return false;
2982
2983 return check_reduction (ap);
2984 }
2985
2986
2987 bool
2988 gfc_check_product_sum (gfc_actual_arglist *ap)
2989 {
2990 if (!numeric_check (ap->expr, 0)
2991 || !array_check (ap->expr, 0))
2992 return false;
2993
2994 return check_reduction (ap);
2995 }
2996
2997
2998 /* For IANY, IALL and IPARITY. */
2999
3000 bool
3001 gfc_check_mask (gfc_expr *i, gfc_expr *kind)
3002 {
3003 int k;
3004
3005 if (!type_check (i, 0, BT_INTEGER))
3006 return false;
3007
3008 if (!nonnegative_check ("I", i))
3009 return false;
3010
3011 if (!kind_check (kind, 1, BT_INTEGER))
3012 return false;
3013
3014 if (kind)
3015 gfc_extract_int (kind, &k);
3016 else
3017 k = gfc_default_integer_kind;
3018
3019 if (!less_than_bitsizekind ("I", i, k))
3020 return false;
3021
3022 return true;
3023 }
3024
3025
3026 bool
3027 gfc_check_transf_bit_intrins (gfc_actual_arglist *ap)
3028 {
3029 if (ap->expr->ts.type != BT_INTEGER)
3030 {
3031 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER",
3032 gfc_current_intrinsic_arg[0]->name,
3033 gfc_current_intrinsic, &ap->expr->where);
3034 return false;
3035 }
3036
3037 if (!array_check (ap->expr, 0))
3038 return false;
3039
3040 return check_reduction (ap);
3041 }
3042
3043
3044 bool
3045 gfc_check_merge (gfc_expr *tsource, gfc_expr *fsource, gfc_expr *mask)
3046 {
3047 if (!same_type_check (tsource, 0, fsource, 1))
3048 return false;
3049
3050 if (!type_check (mask, 2, BT_LOGICAL))
3051 return false;
3052
3053 if (tsource->ts.type == BT_CHARACTER)
3054 return gfc_check_same_strlen (tsource, fsource, "MERGE intrinsic");
3055
3056 return true;
3057 }
3058
3059
3060 bool
3061 gfc_check_merge_bits (gfc_expr *i, gfc_expr *j, gfc_expr *mask)
3062 {
3063 if (!type_check (i, 0, BT_INTEGER))
3064 return false;
3065
3066 if (!type_check (j, 1, BT_INTEGER))
3067 return false;
3068
3069 if (!type_check (mask, 2, BT_INTEGER))
3070 return false;
3071
3072 if (!same_type_check (i, 0, j, 1))
3073 return false;
3074
3075 if (!same_type_check (i, 0, mask, 2))
3076 return false;
3077
3078 return true;
3079 }
3080
3081
3082 bool
3083 gfc_check_move_alloc (gfc_expr *from, gfc_expr *to)
3084 {
3085 if (!variable_check (from, 0, false))
3086 return false;
3087 if (!allocatable_check (from, 0))
3088 return false;
3089 if (gfc_is_coindexed (from))
3090 {
3091 gfc_error ("The FROM argument to MOVE_ALLOC at %L shall not be "
3092 "coindexed", &from->where);
3093 return false;
3094 }
3095
3096 if (!variable_check (to, 1, false))
3097 return false;
3098 if (!allocatable_check (to, 1))
3099 return false;
3100 if (gfc_is_coindexed (to))
3101 {
3102 gfc_error ("The TO argument to MOVE_ALLOC at %L shall not be "
3103 "coindexed", &to->where);
3104 return false;
3105 }
3106
3107 if (from->ts.type == BT_CLASS && to->ts.type == BT_DERIVED)
3108 {
3109 gfc_error ("The TO arguments in MOVE_ALLOC at %L must be "
3110 "polymorphic if FROM is polymorphic",
3111 &to->where);
3112 return false;
3113 }
3114
3115 if (!same_type_check (to, 1, from, 0))
3116 return false;
3117
3118 if (to->rank != from->rank)
3119 {
3120 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
3121 "must have the same rank %d/%d", &to->where, from->rank,
3122 to->rank);
3123 return false;
3124 }
3125
3126 /* IR F08/0040; cf. 12-006A. */
3127 if (gfc_get_corank (to) != gfc_get_corank (from))
3128 {
3129 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
3130 "must have the same corank %d/%d", &to->where,
3131 gfc_get_corank (from), gfc_get_corank (to));
3132 return false;
3133 }
3134
3135 /* CLASS arguments: Make sure the vtab of from is present. */
3136 if (to->ts.type == BT_CLASS && !UNLIMITED_POLY (from))
3137 gfc_find_vtab (&from->ts);
3138
3139 return true;
3140 }
3141
3142
3143 bool
3144 gfc_check_nearest (gfc_expr *x, gfc_expr *s)
3145 {
3146 if (!type_check (x, 0, BT_REAL))
3147 return false;
3148
3149 if (!type_check (s, 1, BT_REAL))
3150 return false;
3151
3152 if (s->expr_type == EXPR_CONSTANT)
3153 {
3154 if (mpfr_sgn (s->value.real) == 0)
3155 {
3156 gfc_error ("Argument 'S' of NEAREST at %L shall not be zero",
3157 &s->where);
3158 return false;
3159 }
3160 }
3161
3162 return true;
3163 }
3164
3165
3166 bool
3167 gfc_check_new_line (gfc_expr *a)
3168 {
3169 if (!type_check (a, 0, BT_CHARACTER))
3170 return false;
3171
3172 return true;
3173 }
3174
3175
3176 bool
3177 gfc_check_norm2 (gfc_expr *array, gfc_expr *dim)
3178 {
3179 if (!type_check (array, 0, BT_REAL))
3180 return false;
3181
3182 if (!array_check (array, 0))
3183 return false;
3184
3185 if (!dim_rank_check (dim, array, false))
3186 return false;
3187
3188 return true;
3189 }
3190
3191 bool
3192 gfc_check_null (gfc_expr *mold)
3193 {
3194 symbol_attribute attr;
3195
3196 if (mold == NULL)
3197 return true;
3198
3199 if (!variable_check (mold, 0, true))
3200 return false;
3201
3202 attr = gfc_variable_attr (mold, NULL);
3203
3204 if (!attr.pointer && !attr.proc_pointer && !attr.allocatable)
3205 {
3206 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER, "
3207 "ALLOCATABLE or procedure pointer",
3208 gfc_current_intrinsic_arg[0]->name,
3209 gfc_current_intrinsic, &mold->where);
3210 return false;
3211 }
3212
3213 if (attr.allocatable
3214 && !gfc_notify_std (GFC_STD_F2003, "NULL intrinsic with "
3215 "allocatable MOLD at %L", &mold->where))
3216 return false;
3217
3218 /* F2008, C1242. */
3219 if (gfc_is_coindexed (mold))
3220 {
3221 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
3222 "coindexed", gfc_current_intrinsic_arg[0]->name,
3223 gfc_current_intrinsic, &mold->where);
3224 return false;
3225 }
3226
3227 return true;
3228 }
3229
3230
3231 bool
3232 gfc_check_pack (gfc_expr *array, gfc_expr *mask, gfc_expr *vector)
3233 {
3234 if (!array_check (array, 0))
3235 return false;
3236
3237 if (!type_check (mask, 1, BT_LOGICAL))
3238 return false;
3239
3240 if (!gfc_check_conformance (array, mask,
3241 "arguments '%s' and '%s' for intrinsic '%s'",
3242 gfc_current_intrinsic_arg[0]->name,
3243 gfc_current_intrinsic_arg[1]->name,
3244 gfc_current_intrinsic))
3245 return false;
3246
3247 if (vector != NULL)
3248 {
3249 mpz_t array_size, vector_size;
3250 bool have_array_size, have_vector_size;
3251
3252 if (!same_type_check (array, 0, vector, 2))
3253 return false;
3254
3255 if (!rank_check (vector, 2, 1))
3256 return false;
3257
3258 /* VECTOR requires at least as many elements as MASK
3259 has .TRUE. values. */
3260 have_array_size = gfc_array_size(array, &array_size);
3261 have_vector_size = gfc_array_size(vector, &vector_size);
3262
3263 if (have_vector_size
3264 && (mask->expr_type == EXPR_ARRAY
3265 || (mask->expr_type == EXPR_CONSTANT
3266 && have_array_size)))
3267 {
3268 int mask_true_values = 0;
3269
3270 if (mask->expr_type == EXPR_ARRAY)
3271 {
3272 gfc_constructor *mask_ctor;
3273 mask_ctor = gfc_constructor_first (mask->value.constructor);
3274 while (mask_ctor)
3275 {
3276 if (mask_ctor->expr->expr_type != EXPR_CONSTANT)
3277 {
3278 mask_true_values = 0;
3279 break;
3280 }
3281
3282 if (mask_ctor->expr->value.logical)
3283 mask_true_values++;
3284
3285 mask_ctor = gfc_constructor_next (mask_ctor);
3286 }
3287 }
3288 else if (mask->expr_type == EXPR_CONSTANT && mask->value.logical)
3289 mask_true_values = mpz_get_si (array_size);
3290
3291 if (mpz_get_si (vector_size) < mask_true_values)
3292 {
3293 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
3294 "provide at least as many elements as there "
3295 "are .TRUE. values in '%s' (%ld/%d)",
3296 gfc_current_intrinsic_arg[2]->name,
3297 gfc_current_intrinsic, &vector->where,
3298 gfc_current_intrinsic_arg[1]->name,
3299 mpz_get_si (vector_size), mask_true_values);
3300 return false;
3301 }
3302 }
3303
3304 if (have_array_size)
3305 mpz_clear (array_size);
3306 if (have_vector_size)
3307 mpz_clear (vector_size);
3308 }
3309
3310 return true;
3311 }
3312
3313
3314 bool
3315 gfc_check_parity (gfc_expr *mask, gfc_expr *dim)
3316 {
3317 if (!type_check (mask, 0, BT_LOGICAL))
3318 return false;
3319
3320 if (!array_check (mask, 0))
3321 return false;
3322
3323 if (!dim_rank_check (dim, mask, false))
3324 return false;
3325
3326 return true;
3327 }
3328
3329
3330 bool
3331 gfc_check_precision (gfc_expr *x)
3332 {
3333 if (!real_or_complex_check (x, 0))
3334 return false;
3335
3336 return true;
3337 }
3338
3339
3340 bool
3341 gfc_check_present (gfc_expr *a)
3342 {
3343 gfc_symbol *sym;
3344
3345 if (!variable_check (a, 0, true))
3346 return false;
3347
3348 sym = a->symtree->n.sym;
3349 if (!sym->attr.dummy)
3350 {
3351 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
3352 "dummy variable", gfc_current_intrinsic_arg[0]->name,
3353 gfc_current_intrinsic, &a->where);
3354 return false;
3355 }
3356
3357 if (!sym->attr.optional)
3358 {
3359 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
3360 "an OPTIONAL dummy variable",
3361 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3362 &a->where);
3363 return false;
3364 }
3365
3366 /* 13.14.82 PRESENT(A)
3367 ......
3368 Argument. A shall be the name of an optional dummy argument that is
3369 accessible in the subprogram in which the PRESENT function reference
3370 appears... */
3371
3372 if (a->ref != NULL
3373 && !(a->ref->next == NULL && a->ref->type == REF_ARRAY
3374 && (a->ref->u.ar.type == AR_FULL
3375 || (a->ref->u.ar.type == AR_ELEMENT
3376 && a->ref->u.ar.as->rank == 0))))
3377 {
3378 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
3379 "subobject of '%s'", gfc_current_intrinsic_arg[0]->name,
3380 gfc_current_intrinsic, &a->where, sym->name);
3381 return false;
3382 }
3383
3384 return true;
3385 }
3386
3387
3388 bool
3389 gfc_check_radix (gfc_expr *x)
3390 {
3391 if (!int_or_real_check (x, 0))
3392 return false;
3393
3394 return true;
3395 }
3396
3397
3398 bool
3399 gfc_check_range (gfc_expr *x)
3400 {
3401 if (!numeric_check (x, 0))
3402 return false;
3403
3404 return true;
3405 }
3406
3407
3408 bool
3409 gfc_check_rank (gfc_expr *a ATTRIBUTE_UNUSED)
3410 {
3411 /* Any data object is allowed; a "data object" is a "constant (4.1.3),
3412 variable (6), or subobject of a constant (2.4.3.2.3)" (F2008, 1.3.45). */
3413
3414 bool is_variable = true;
3415
3416 /* Functions returning pointers are regarded as variable, cf. F2008, R602. */
3417 if (a->expr_type == EXPR_FUNCTION)
3418 is_variable = a->value.function.esym
3419 ? a->value.function.esym->result->attr.pointer
3420 : a->symtree->n.sym->result->attr.pointer;
3421
3422 if (a->expr_type == EXPR_OP || a->expr_type == EXPR_NULL
3423 || a->expr_type == EXPR_COMPCALL|| a->expr_type == EXPR_PPC
3424 || !is_variable)
3425 {
3426 gfc_error ("The argument of the RANK intrinsic at %L must be a data "
3427 "object", &a->where);
3428 return false;
3429 }
3430
3431 return true;
3432 }
3433
3434
3435 /* real, float, sngl. */
3436 bool
3437 gfc_check_real (gfc_expr *a, gfc_expr *kind)
3438 {
3439 if (!numeric_check (a, 0))
3440 return false;
3441
3442 if (!kind_check (kind, 1, BT_REAL))
3443 return false;
3444
3445 return true;
3446 }
3447
3448
3449 bool
3450 gfc_check_rename (gfc_expr *path1, gfc_expr *path2)
3451 {
3452 if (!type_check (path1, 0, BT_CHARACTER))
3453 return false;
3454 if (!kind_value_check (path1, 0, gfc_default_character_kind))
3455 return false;
3456
3457 if (!type_check (path2, 1, BT_CHARACTER))
3458 return false;
3459 if (!kind_value_check (path2, 1, gfc_default_character_kind))
3460 return false;
3461
3462 return true;
3463 }
3464
3465
3466 bool
3467 gfc_check_rename_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
3468 {
3469 if (!type_check (path1, 0, BT_CHARACTER))
3470 return false;
3471 if (!kind_value_check (path1, 0, gfc_default_character_kind))
3472 return false;
3473
3474 if (!type_check (path2, 1, BT_CHARACTER))
3475 return false;
3476 if (!kind_value_check (path2, 1, gfc_default_character_kind))
3477 return false;
3478
3479 if (status == NULL)
3480 return true;
3481
3482 if (!type_check (status, 2, BT_INTEGER))
3483 return false;
3484
3485 if (!scalar_check (status, 2))
3486 return false;
3487
3488 return true;
3489 }
3490
3491
3492 bool
3493 gfc_check_repeat (gfc_expr *x, gfc_expr *y)
3494 {
3495 if (!type_check (x, 0, BT_CHARACTER))
3496 return false;
3497
3498 if (!scalar_check (x, 0))
3499 return false;
3500
3501 if (!type_check (y, 0, BT_INTEGER))
3502 return false;
3503
3504 if (!scalar_check (y, 1))
3505 return false;
3506
3507 return true;
3508 }
3509
3510
3511 bool
3512 gfc_check_reshape (gfc_expr *source, gfc_expr *shape,
3513 gfc_expr *pad, gfc_expr *order)
3514 {
3515 mpz_t size;
3516 mpz_t nelems;
3517 int shape_size;
3518
3519 if (!array_check (source, 0))
3520 return false;
3521
3522 if (!rank_check (shape, 1, 1))
3523 return false;
3524
3525 if (!type_check (shape, 1, BT_INTEGER))
3526 return false;
3527
3528 if (!gfc_array_size (shape, &size))
3529 {
3530 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
3531 "array of constant size", &shape->where);
3532 return false;
3533 }
3534
3535 shape_size = mpz_get_ui (size);
3536 mpz_clear (size);
3537
3538 if (shape_size <= 0)
3539 {
3540 gfc_error ("'%s' argument of '%s' intrinsic at %L is empty",
3541 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
3542 &shape->where);
3543 return false;
3544 }
3545 else if (shape_size > GFC_MAX_DIMENSIONS)
3546 {
3547 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
3548 "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
3549 return false;
3550 }
3551 else if (shape->expr_type == EXPR_ARRAY && gfc_is_constant_expr (shape))
3552 {
3553 gfc_expr *e;
3554 int i, extent;
3555 for (i = 0; i < shape_size; ++i)
3556 {
3557 e = gfc_constructor_lookup_expr (shape->value.constructor, i);
3558 if (e->expr_type != EXPR_CONSTANT)
3559 continue;
3560
3561 gfc_extract_int (e, &extent);
3562 if (extent < 0)
3563 {
3564 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3565 "negative element (%d)",
3566 gfc_current_intrinsic_arg[1]->name,
3567 gfc_current_intrinsic, &e->where, extent);
3568 return false;
3569 }
3570 }
3571 }
3572
3573 if (pad != NULL)
3574 {
3575 if (!same_type_check (source, 0, pad, 2))
3576 return false;
3577
3578 if (!array_check (pad, 2))
3579 return false;
3580 }
3581
3582 if (order != NULL)
3583 {
3584 if (!array_check (order, 3))
3585 return false;
3586
3587 if (!type_check (order, 3, BT_INTEGER))
3588 return false;
3589
3590 if (order->expr_type == EXPR_ARRAY)
3591 {
3592 int i, order_size, dim, perm[GFC_MAX_DIMENSIONS];
3593 gfc_expr *e;
3594
3595 for (i = 0; i < GFC_MAX_DIMENSIONS; ++i)
3596 perm[i] = 0;
3597
3598 gfc_array_size (order, &size);
3599 order_size = mpz_get_ui (size);
3600 mpz_clear (size);
3601
3602 if (order_size != shape_size)
3603 {
3604 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3605 "has wrong number of elements (%d/%d)",
3606 gfc_current_intrinsic_arg[3]->name,
3607 gfc_current_intrinsic, &order->where,
3608 order_size, shape_size);
3609 return false;
3610 }
3611
3612 for (i = 1; i <= order_size; ++i)
3613 {
3614 e = gfc_constructor_lookup_expr (order->value.constructor, i-1);
3615 if (e->expr_type != EXPR_CONSTANT)
3616 continue;
3617
3618 gfc_extract_int (e, &dim);
3619
3620 if (dim < 1 || dim > order_size)
3621 {
3622 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3623 "has out-of-range dimension (%d)",
3624 gfc_current_intrinsic_arg[3]->name,
3625 gfc_current_intrinsic, &e->where, dim);
3626 return false;
3627 }
3628
3629 if (perm[dim-1] != 0)
3630 {
3631 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3632 "invalid permutation of dimensions (dimension "
3633 "'%d' duplicated)",
3634 gfc_current_intrinsic_arg[3]->name,
3635 gfc_current_intrinsic, &e->where, dim);
3636 return false;
3637 }
3638
3639 perm[dim-1] = 1;
3640 }
3641 }
3642 }
3643
3644 if (pad == NULL && shape->expr_type == EXPR_ARRAY
3645 && gfc_is_constant_expr (shape)
3646 && !(source->expr_type == EXPR_VARIABLE && source->symtree->n.sym->as
3647 && source->symtree->n.sym->as->type == AS_ASSUMED_SIZE))
3648 {
3649 /* Check the match in size between source and destination. */
3650 if (gfc_array_size (source, &nelems))
3651 {
3652 gfc_constructor *c;
3653 bool test;
3654
3655
3656 mpz_init_set_ui (size, 1);
3657 for (c = gfc_constructor_first (shape->value.constructor);
3658 c; c = gfc_constructor_next (c))
3659 mpz_mul (size, size, c->expr->value.integer);
3660
3661 test = mpz_cmp (nelems, size) < 0 && mpz_cmp_ui (size, 0) > 0;
3662 mpz_clear (nelems);
3663 mpz_clear (size);
3664
3665 if (test)
3666 {
3667 gfc_error ("Without padding, there are not enough elements "
3668 "in the intrinsic RESHAPE source at %L to match "
3669 "the shape", &source->where);
3670 return false;
3671 }
3672 }
3673 }
3674
3675 return true;
3676 }
3677
3678
3679 bool
3680 gfc_check_same_type_as (gfc_expr *a, gfc_expr *b)
3681 {
3682 if (a->ts.type != BT_DERIVED && a->ts.type != BT_CLASS)
3683 {
3684 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3685 "cannot be of type %s",
3686 gfc_current_intrinsic_arg[0]->name,
3687 gfc_current_intrinsic,
3688 &a->where, gfc_typename (&a->ts));
3689 return false;
3690 }
3691
3692 if (!(gfc_type_is_extensible (a->ts.u.derived) || UNLIMITED_POLY (a)))
3693 {
3694 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3695 "must be of an extensible type",
3696 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3697 &a->where);
3698 return false;
3699 }
3700
3701 if (b->ts.type != BT_DERIVED && b->ts.type != BT_CLASS)
3702 {
3703 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3704 "cannot be of type %s",
3705 gfc_current_intrinsic_arg[0]->name,
3706 gfc_current_intrinsic,
3707 &b->where, gfc_typename (&b->ts));
3708 return false;
3709 }
3710
3711 if (!(gfc_type_is_extensible (b->ts.u.derived) || UNLIMITED_POLY (b)))
3712 {
3713 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3714 "must be of an extensible type",
3715 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
3716 &b->where);
3717 return false;
3718 }
3719
3720 return true;
3721 }
3722
3723
3724 bool
3725 gfc_check_scale (gfc_expr *x, gfc_expr *i)
3726 {
3727 if (!type_check (x, 0, BT_REAL))
3728 return false;
3729
3730 if (!type_check (i, 1, BT_INTEGER))
3731 return false;
3732
3733 return true;
3734 }
3735
3736
3737 bool
3738 gfc_check_scan (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
3739 {
3740 if (!type_check (x, 0, BT_CHARACTER))
3741 return false;
3742
3743 if (!type_check (y, 1, BT_CHARACTER))
3744 return false;
3745
3746 if (z != NULL && !type_check (z, 2, BT_LOGICAL))
3747 return false;
3748
3749 if (!kind_check (kind, 3, BT_INTEGER))
3750 return false;
3751 if (kind && !gfc_notify_std (GFC_STD_F2003, "'%s' intrinsic "
3752 "with KIND argument at %L",
3753 gfc_current_intrinsic, &kind->where))
3754 return false;
3755
3756 if (!same_type_check (x, 0, y, 1))
3757 return false;
3758
3759 return true;
3760 }
3761
3762
3763 bool
3764 gfc_check_secnds (gfc_expr *r)
3765 {
3766 if (!type_check (r, 0, BT_REAL))
3767 return false;
3768
3769 if (!kind_value_check (r, 0, 4))
3770 return false;
3771
3772 if (!scalar_check (r, 0))
3773 return false;
3774
3775 return true;
3776 }
3777
3778
3779 bool
3780 gfc_check_selected_char_kind (gfc_expr *name)
3781 {
3782 if (!type_check (name, 0, BT_CHARACTER))
3783 return false;
3784
3785 if (!kind_value_check (name, 0, gfc_default_character_kind))
3786 return false;
3787
3788 if (!scalar_check (name, 0))
3789 return false;
3790
3791 return true;
3792 }
3793
3794
3795 bool
3796 gfc_check_selected_int_kind (gfc_expr *r)
3797 {
3798 if (!type_check (r, 0, BT_INTEGER))
3799 return false;
3800
3801 if (!scalar_check (r, 0))
3802 return false;
3803
3804 return true;
3805 }
3806
3807
3808 bool
3809 gfc_check_selected_real_kind (gfc_expr *p, gfc_expr *r, gfc_expr *radix)
3810 {
3811 if (p == NULL && r == NULL
3812 && !gfc_notify_std (GFC_STD_F2008, "SELECTED_REAL_KIND with"
3813 " neither 'P' nor 'R' argument at %L",
3814 gfc_current_intrinsic_where))
3815 return false;
3816
3817 if (p)
3818 {
3819 if (!type_check (p, 0, BT_INTEGER))
3820 return false;
3821
3822 if (!scalar_check (p, 0))
3823 return false;
3824 }
3825
3826 if (r)
3827 {
3828 if (!type_check (r, 1, BT_INTEGER))
3829 return false;
3830
3831 if (!scalar_check (r, 1))
3832 return false;
3833 }
3834
3835 if (radix)
3836 {
3837 if (!type_check (radix, 1, BT_INTEGER))
3838 return false;
3839
3840 if (!scalar_check (radix, 1))
3841 return false;
3842
3843 if (!gfc_notify_std (GFC_STD_F2008, "'%s' intrinsic with "
3844 "RADIX argument at %L", gfc_current_intrinsic,
3845 &radix->where))
3846 return false;
3847 }
3848
3849 return true;
3850 }
3851
3852
3853 bool
3854 gfc_check_set_exponent (gfc_expr *x, gfc_expr *i)
3855 {
3856 if (!type_check (x, 0, BT_REAL))
3857 return false;
3858
3859 if (!type_check (i, 1, BT_INTEGER))
3860 return false;
3861
3862 return true;
3863 }
3864
3865
3866 bool
3867 gfc_check_shape (gfc_expr *source, gfc_expr *kind)
3868 {
3869 gfc_array_ref *ar;
3870
3871 if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
3872 return true;
3873
3874 ar = gfc_find_array_ref (source);
3875
3876 if (ar->as && ar->as->type == AS_ASSUMED_SIZE && ar->type == AR_FULL)
3877 {
3878 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
3879 "an assumed size array", &source->where);
3880 return false;
3881 }
3882
3883 if (!kind_check (kind, 1, BT_INTEGER))
3884 return false;
3885 if (kind && !gfc_notify_std (GFC_STD_F2003, "'%s' intrinsic "
3886 "with KIND argument at %L",
3887 gfc_current_intrinsic, &kind->where))
3888 return false;
3889
3890 return true;
3891 }
3892
3893
3894 bool
3895 gfc_check_shift (gfc_expr *i, gfc_expr *shift)
3896 {
3897 if (!type_check (i, 0, BT_INTEGER))
3898 return false;
3899
3900 if (!type_check (shift, 0, BT_INTEGER))
3901 return false;
3902
3903 if (!nonnegative_check ("SHIFT", shift))
3904 return false;
3905
3906 if (!less_than_bitsize1 ("I", i, "SHIFT", shift, true))
3907 return false;
3908
3909 return true;
3910 }
3911
3912
3913 bool
3914 gfc_check_sign (gfc_expr *a, gfc_expr *b)
3915 {
3916 if (!int_or_real_check (a, 0))
3917 return false;
3918
3919 if (!same_type_check (a, 0, b, 1))
3920 return false;
3921
3922 return true;
3923 }
3924
3925
3926 bool
3927 gfc_check_size (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
3928 {
3929 if (!array_check (array, 0))
3930 return false;
3931
3932 if (!dim_check (dim, 1, true))
3933 return false;
3934
3935 if (!dim_rank_check (dim, array, 0))
3936 return false;
3937
3938 if (!kind_check (kind, 2, BT_INTEGER))
3939 return false;
3940 if (kind && !gfc_notify_std (GFC_STD_F2003, "'%s' intrinsic "
3941 "with KIND argument at %L",
3942 gfc_current_intrinsic, &kind->where))
3943 return false;
3944
3945
3946 return true;
3947 }
3948
3949
3950 bool
3951 gfc_check_sizeof (gfc_expr *arg)
3952 {
3953 if (arg->ts.type == BT_PROCEDURE)
3954 {
3955 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be a procedure",
3956 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3957 &arg->where);
3958 return false;
3959 }
3960
3961 /* TYPE(*) is acceptable if and only if it uses an array descriptor. */
3962 if (arg->ts.type == BT_ASSUMED
3963 && (arg->symtree->n.sym->as == NULL
3964 || (arg->symtree->n.sym->as->type != AS_ASSUMED_SHAPE
3965 && arg->symtree->n.sym->as->type != AS_DEFERRED
3966 && arg->symtree->n.sym->as->type != AS_ASSUMED_RANK)))
3967 {
3968 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be TYPE(*)",
3969 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3970 &arg->where);
3971 return false;
3972 }
3973
3974 if (arg->rank && arg->expr_type == EXPR_VARIABLE
3975 && arg->symtree->n.sym->as != NULL
3976 && arg->symtree->n.sym->as->type == AS_ASSUMED_SIZE && arg->ref
3977 && arg->ref->type == REF_ARRAY && arg->ref->u.ar.type == AR_FULL)
3978 {
3979 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be an "
3980 "assumed-size array", gfc_current_intrinsic_arg[0]->name,
3981 gfc_current_intrinsic, &arg->where);
3982 return false;
3983 }
3984
3985 return true;
3986 }
3987
3988
3989 /* Check whether an expression is interoperable. When returning false,
3990 msg is set to a string telling why the expression is not interoperable,
3991 otherwise, it is set to NULL. The msg string can be used in diagnostics.
3992 If c_loc is true, character with len > 1 are allowed (cf. Fortran
3993 2003corr5); additionally, assumed-shape/assumed-rank/deferred-shape
3994 arrays are permitted. And if c_f_ptr is true, deferred-shape arrays
3995 are permitted. */
3996
3997 static bool
3998 is_c_interoperable (gfc_expr *expr, const char **msg, bool c_loc, bool c_f_ptr)
3999 {
4000 *msg = NULL;
4001
4002 if (expr->ts.type == BT_CLASS)
4003 {
4004 *msg = "Expression is polymorphic";
4005 return false;
4006 }
4007
4008 if (expr->ts.type == BT_DERIVED && !expr->ts.u.derived->attr.is_bind_c
4009 && !expr->ts.u.derived->ts.is_iso_c)
4010 {
4011 *msg = "Expression is a noninteroperable derived type";
4012 return false;
4013 }
4014
4015 if (expr->ts.type == BT_PROCEDURE)
4016 {
4017 *msg = "Procedure unexpected as argument";
4018 return false;
4019 }
4020
4021 if (gfc_notification_std (GFC_STD_GNU) && expr->ts.type == BT_LOGICAL)
4022 {
4023 int i;
4024 for (i = 0; gfc_logical_kinds[i].kind; i++)
4025 if (gfc_logical_kinds[i].kind == expr->ts.kind)
4026 return true;
4027 *msg = "Extension to use a non-C_Bool-kind LOGICAL";
4028 return false;
4029 }
4030
4031 if (gfc_notification_std (GFC_STD_GNU) && expr->ts.type == BT_CHARACTER
4032 && expr->ts.kind != 1)
4033 {
4034 *msg = "Extension to use a non-C_CHAR-kind CHARACTER";
4035 return false;
4036 }
4037
4038 if (expr->ts.type == BT_CHARACTER) {
4039 if (expr->ts.deferred)
4040 {
4041 /* TS 29113 allows deferred-length strings as dummy arguments,
4042 but it is not an interoperable type. */
4043 *msg = "Expression shall not be a deferred-length string";
4044 return false;
4045 }
4046
4047 if (expr->ts.u.cl && expr->ts.u.cl->length
4048 && !gfc_simplify_expr (expr, 0))
4049 gfc_internal_error ("is_c_interoperable(): gfc_simplify_expr failed");
4050
4051 if (!c_loc && expr->ts.u.cl
4052 && (!expr->ts.u.cl->length
4053 || expr->ts.u.cl->length->expr_type != EXPR_CONSTANT
4054 || mpz_cmp_si (expr->ts.u.cl->length->value.integer, 1) != 0))
4055 {
4056 *msg = "Type shall have a character length of 1";
4057 return false;
4058 }
4059 }
4060
4061 /* Note: The following checks are about interoperatable variables, Fortran
4062 15.3.5/15.3.6. In intrinsics like C_LOC or in procedure interface, more
4063 is allowed, e.g. assumed-shape arrays with TS 29113. */
4064
4065 if (gfc_is_coarray (expr))
4066 {
4067 *msg = "Coarrays are not interoperable";
4068 return false;
4069 }
4070
4071 if (!c_loc && expr->rank > 0 && expr->expr_type != EXPR_ARRAY)
4072 {
4073 gfc_array_ref *ar = gfc_find_array_ref (expr);
4074 if (ar->type != AR_FULL)
4075 {
4076 *msg = "Only whole-arrays are interoperable";
4077 return false;
4078 }
4079 if (!c_f_ptr && ar->as->type != AS_EXPLICIT
4080 && ar->as->type != AS_ASSUMED_SIZE)
4081 {
4082 *msg = "Only explicit-size and assumed-size arrays are interoperable";
4083 return false;
4084 }
4085 }
4086
4087 return true;
4088 }
4089
4090
4091 bool
4092 gfc_check_c_sizeof (gfc_expr *arg)
4093 {
4094 const char *msg;
4095
4096 if (!is_c_interoperable (arg, &msg, false, false))
4097 {
4098 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an "
4099 "interoperable data entity: %s",
4100 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
4101 &arg->where, msg);
4102 return false;
4103 }
4104
4105 if (arg->ts.type == BT_ASSUMED)
4106 {
4107 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
4108 "TYPE(*)",
4109 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
4110 &arg->where);
4111 return false;
4112 }
4113
4114 if (arg->rank && arg->expr_type == EXPR_VARIABLE
4115 && arg->symtree->n.sym->as != NULL
4116 && arg->symtree->n.sym->as->type == AS_ASSUMED_SIZE && arg->ref
4117 && arg->ref->type == REF_ARRAY && arg->ref->u.ar.type == AR_FULL)
4118 {
4119 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be an "
4120 "assumed-size array", gfc_current_intrinsic_arg[0]->name,
4121 gfc_current_intrinsic, &arg->where);
4122 return false;
4123 }
4124
4125 return true;
4126 }
4127
4128
4129 bool
4130 gfc_check_c_associated (gfc_expr *c_ptr_1, gfc_expr *c_ptr_2)
4131 {
4132 if (c_ptr_1->ts.type != BT_DERIVED
4133 || c_ptr_1->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
4134 || (c_ptr_1->ts.u.derived->intmod_sym_id != ISOCBINDING_PTR
4135 && c_ptr_1->ts.u.derived->intmod_sym_id != ISOCBINDING_FUNPTR))
4136 {
4137 gfc_error ("Argument C_PTR_1 at %L to C_ASSOCIATED shall have the "
4138 "type TYPE(C_PTR) or TYPE(C_FUNPTR)", &c_ptr_1->where);
4139 return false;
4140 }
4141
4142 if (!scalar_check (c_ptr_1, 0))
4143 return false;
4144
4145 if (c_ptr_2
4146 && (c_ptr_2->ts.type != BT_DERIVED
4147 || c_ptr_2->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
4148 || (c_ptr_1->ts.u.derived->intmod_sym_id
4149 != c_ptr_2->ts.u.derived->intmod_sym_id)))
4150 {
4151 gfc_error ("Argument C_PTR_2 at %L to C_ASSOCIATED shall have the "
4152 "same type as C_PTR_1: %s instead of %s", &c_ptr_1->where,
4153 gfc_typename (&c_ptr_1->ts),
4154 gfc_typename (&c_ptr_2->ts));
4155 return false;
4156 }
4157
4158 if (c_ptr_2 && !scalar_check (c_ptr_2, 1))
4159 return false;
4160
4161 return true;
4162 }
4163
4164
4165 bool
4166 gfc_check_c_f_pointer (gfc_expr *cptr, gfc_expr *fptr, gfc_expr *shape)
4167 {
4168 symbol_attribute attr;
4169 const char *msg;
4170
4171 if (cptr->ts.type != BT_DERIVED
4172 || cptr->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
4173 || cptr->ts.u.derived->intmod_sym_id != ISOCBINDING_PTR)
4174 {
4175 gfc_error ("Argument CPTR at %L to C_F_POINTER shall have the "
4176 "type TYPE(C_PTR)", &cptr->where);
4177 return false;
4178 }
4179
4180 if (!scalar_check (cptr, 0))
4181 return false;
4182
4183 attr = gfc_expr_attr (fptr);
4184
4185 if (!attr.pointer)
4186 {
4187 gfc_error ("Argument FPTR at %L to C_F_POINTER must be a pointer",
4188 &fptr->where);
4189 return false;
4190 }
4191
4192 if (fptr->ts.type == BT_CLASS)
4193 {
4194 gfc_error ("FPTR argument at %L to C_F_POINTER shall not be polymorphic",
4195 &fptr->where);
4196 return false;
4197 }
4198
4199 if (gfc_is_coindexed (fptr))
4200 {
4201 gfc_error ("Argument FPTR at %L to C_F_POINTER shall not be "
4202 "coindexed", &fptr->where);
4203 return false;
4204 }
4205
4206 if (fptr->rank == 0 && shape)
4207 {
4208 gfc_error ("Unexpected SHAPE argument at %L to C_F_POINTER with scalar "
4209 "FPTR", &fptr->where);
4210 return false;
4211 }
4212 else if (fptr->rank && !shape)
4213 {
4214 gfc_error ("Expected SHAPE argument to C_F_POINTER with array "
4215 "FPTR at %L", &fptr->where);
4216 return false;
4217 }
4218
4219 if (shape && !rank_check (shape, 2, 1))
4220 return false;
4221
4222 if (shape && !type_check (shape, 2, BT_INTEGER))
4223 return false;
4224
4225 if (shape)
4226 {
4227 mpz_t size;
4228 if (gfc_array_size (shape, &size))
4229 {
4230 if (mpz_cmp_ui (size, fptr->rank) != 0)
4231 {
4232 mpz_clear (size);
4233 gfc_error ("SHAPE argument at %L to C_F_POINTER must have the same "
4234 "size as the RANK of FPTR", &shape->where);
4235 return false;
4236 }
4237 mpz_clear (size);
4238 }
4239 }
4240
4241 if (fptr->ts.type == BT_CLASS)
4242 {
4243 gfc_error ("Polymorphic FPTR at %L to C_F_POINTER", &fptr->where);
4244 return false;
4245 }
4246
4247 if (!is_c_interoperable (fptr, &msg, false, true))
4248 return gfc_notify_std (GFC_STD_F2008_TS, "Noninteroperable array FPTR "
4249 "at %L to C_F_POINTER: %s", &fptr->where, msg);
4250
4251 return true;
4252 }
4253
4254
4255 bool
4256 gfc_check_c_f_procpointer (gfc_expr *cptr, gfc_expr *fptr)
4257 {
4258 symbol_attribute attr;
4259
4260 if (cptr->ts.type != BT_DERIVED
4261 || cptr->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
4262 || cptr->ts.u.derived->intmod_sym_id != ISOCBINDING_FUNPTR)
4263 {
4264 gfc_error ("Argument CPTR at %L to C_F_PROCPOINTER shall have the "
4265 "type TYPE(C_FUNPTR)", &cptr->where);
4266 return false;
4267 }
4268
4269 if (!scalar_check (cptr, 0))
4270 return false;
4271
4272 attr = gfc_expr_attr (fptr);
4273
4274 if (!attr.proc_pointer)
4275 {
4276 gfc_error ("Argument FPTR at %L to C_F_PROCPOINTER shall be a procedure "
4277 "pointer", &fptr->where);
4278 return false;
4279 }
4280
4281 if (gfc_is_coindexed (fptr))
4282 {
4283 gfc_error ("Argument FPTR at %L to C_F_PROCPOINTER shall not be "
4284 "coindexed", &fptr->where);
4285 return false;
4286 }
4287
4288 if (!attr.is_bind_c)
4289 return gfc_notify_std (GFC_STD_F2008_TS, "Noninteroperable procedure "
4290 "pointer at %L to C_F_PROCPOINTER", &fptr->where);
4291
4292 return true;
4293 }
4294
4295
4296 bool
4297 gfc_check_c_funloc (gfc_expr *x)
4298 {
4299 symbol_attribute attr;
4300
4301 if (gfc_is_coindexed (x))
4302 {
4303 gfc_error ("Argument X at %L to C_FUNLOC shall not be "
4304 "coindexed", &x->where);
4305 return false;
4306 }
4307
4308 attr = gfc_expr_attr (x);
4309
4310 if (attr.function && !attr.proc_pointer && x->expr_type == EXPR_VARIABLE
4311 && x->symtree->n.sym == x->symtree->n.sym->result)
4312 {
4313 gfc_namespace *ns = gfc_current_ns;
4314
4315 for (ns = gfc_current_ns; ns; ns = ns->parent)
4316 if (x->symtree->n.sym == ns->proc_name)
4317 {
4318 gfc_error ("Function result '%s' at %L is invalid as X argument "
4319 "to C_FUNLOC", x->symtree->n.sym->name, &x->where);
4320 return false;
4321 }
4322 }
4323
4324 if (attr.flavor != FL_PROCEDURE)
4325 {
4326 gfc_error ("Argument X at %L to C_FUNLOC shall be a procedure "
4327 "or a procedure pointer", &x->where);
4328 return false;
4329 }
4330
4331 if (!attr.is_bind_c)
4332 return gfc_notify_std (GFC_STD_F2008_TS, "Noninteroperable procedure "
4333 "at %L to C_FUNLOC", &x->where);
4334 return true;
4335 }
4336
4337
4338 bool
4339 gfc_check_c_loc (gfc_expr *x)
4340 {
4341 symbol_attribute attr;
4342 const char *msg;
4343
4344 if (gfc_is_coindexed (x))
4345 {
4346 gfc_error ("Argument X at %L to C_LOC shall not be coindexed", &x->where);
4347 return false;
4348 }
4349
4350 if (x->ts.type == BT_CLASS)
4351 {
4352 gfc_error ("X argument at %L to C_LOC shall not be polymorphic",
4353 &x->where);
4354 return false;
4355 }
4356
4357 attr = gfc_expr_attr (x);
4358
4359 if (!attr.pointer
4360 && (x->expr_type != EXPR_VARIABLE || !attr.target
4361 || attr.flavor == FL_PARAMETER))
4362 {
4363 gfc_error ("Argument X at %L to C_LOC shall have either "
4364 "the POINTER or the TARGET attribute", &x->where);
4365 return false;
4366 }
4367
4368 if (x->ts.type == BT_CHARACTER
4369 && gfc_var_strlen (x) == 0)
4370 {
4371 gfc_error ("Argument X at %L to C_LOC shall be not be a zero-sized "
4372 "string", &x->where);
4373 return false;
4374 }
4375
4376 if (!is_c_interoperable (x, &msg, true, false))
4377 {
4378 if (x->ts.type == BT_CLASS)
4379 {
4380 gfc_error ("Argument at %L to C_LOC shall not be polymorphic",
4381 &x->where);
4382 return false;
4383 }
4384
4385 if (x->rank
4386 && !gfc_notify_std (GFC_STD_F2008_TS,
4387 "Noninteroperable array at %L as"
4388 " argument to C_LOC: %s", &x->where, msg))
4389 return false;
4390 }
4391 else if (x->rank > 0 && gfc_notification_std (GFC_STD_F2008))
4392 {
4393 gfc_array_ref *ar = gfc_find_array_ref (x);
4394
4395 if (ar->as->type != AS_EXPLICIT && ar->as->type != AS_ASSUMED_SIZE
4396 && !attr.allocatable
4397 && !gfc_notify_std (GFC_STD_F2008,
4398 "Array of interoperable type at %L "
4399 "to C_LOC which is nonallocatable and neither "
4400 "assumed size nor explicit size", &x->where))
4401 return false;
4402 else if (ar->type != AR_FULL
4403 && !gfc_notify_std (GFC_STD_F2008, "Array section at %L "
4404 "to C_LOC", &x->where))
4405 return false;
4406 }
4407
4408 return true;
4409 }
4410
4411
4412 bool
4413 gfc_check_sleep_sub (gfc_expr *seconds)
4414 {
4415 if (!type_check (seconds, 0, BT_INTEGER))
4416 return false;
4417
4418 if (!scalar_check (seconds, 0))
4419 return false;
4420
4421 return true;
4422 }
4423
4424 bool
4425 gfc_check_sngl (gfc_expr *a)
4426 {
4427 if (!type_check (a, 0, BT_REAL))
4428 return false;
4429
4430 if ((a->ts.kind != gfc_default_double_kind)
4431 && !gfc_notify_std (GFC_STD_GNU, "non double precision "
4432 "REAL argument to %s intrinsic at %L",
4433 gfc_current_intrinsic, &a->where))
4434 return false;
4435
4436 return true;
4437 }
4438
4439 bool
4440 gfc_check_spread (gfc_expr *source, gfc_expr *dim, gfc_expr *ncopies)
4441 {
4442 if (source->rank >= GFC_MAX_DIMENSIONS)
4443 {
4444 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
4445 "than rank %d", gfc_current_intrinsic_arg[0]->name,
4446 gfc_current_intrinsic, &source->where, GFC_MAX_DIMENSIONS);
4447
4448 return false;
4449 }
4450
4451 if (dim == NULL)
4452 return false;
4453
4454 if (!dim_check (dim, 1, false))
4455 return false;
4456
4457 /* dim_rank_check() does not apply here. */
4458 if (dim
4459 && dim->expr_type == EXPR_CONSTANT
4460 && (mpz_cmp_ui (dim->value.integer, 1) < 0
4461 || mpz_cmp_ui (dim->value.integer, source->rank + 1) > 0))
4462 {
4463 gfc_error ("'%s' argument of '%s' intrinsic at %L is not a valid "
4464 "dimension index", gfc_current_intrinsic_arg[1]->name,
4465 gfc_current_intrinsic, &dim->where);
4466 return false;
4467 }
4468
4469 if (!type_check (ncopies, 2, BT_INTEGER))
4470 return false;
4471
4472 if (!scalar_check (ncopies, 2))
4473 return false;
4474
4475 return true;
4476 }
4477
4478
4479 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
4480 functions). */
4481
4482 bool
4483 gfc_check_fgetputc_sub (gfc_expr *unit, gfc_expr *c, gfc_expr *status)
4484 {
4485 if (!type_check (unit, 0, BT_INTEGER))
4486 return false;
4487
4488 if (!scalar_check (unit, 0))
4489 return false;
4490
4491 if (!type_check (c, 1, BT_CHARACTER))
4492 return false;
4493 if (!kind_value_check (c, 1, gfc_default_character_kind))
4494 return false;
4495
4496 if (status == NULL)
4497 return true;
4498
4499 if (!type_check (status, 2, BT_INTEGER)
4500 || !kind_value_check (status, 2, gfc_default_integer_kind)
4501 || !scalar_check (status, 2))
4502 return false;
4503
4504 return true;
4505 }
4506
4507
4508 bool
4509 gfc_check_fgetputc (gfc_expr *unit, gfc_expr *c)
4510 {
4511 return gfc_check_fgetputc_sub (unit, c, NULL);
4512 }
4513
4514
4515 bool
4516 gfc_check_fgetput_sub (gfc_expr *c, gfc_expr *status)
4517 {
4518 if (!type_check (c, 0, BT_CHARACTER))
4519 return false;
4520 if (!kind_value_check (c, 0, gfc_default_character_kind))
4521 return false;
4522
4523 if (status == NULL)
4524 return true;
4525
4526 if (!type_check (status, 1, BT_INTEGER)
4527 || !kind_value_check (status, 1, gfc_default_integer_kind)
4528 || !scalar_check (status, 1))
4529 return false;
4530
4531 return true;
4532 }
4533
4534
4535 bool
4536 gfc_check_fgetput (gfc_expr *c)
4537 {
4538 return gfc_check_fgetput_sub (c, NULL);
4539 }
4540
4541
4542 bool
4543 gfc_check_fseek_sub (gfc_expr *unit, gfc_expr *offset, gfc_expr *whence, gfc_expr *status)
4544 {
4545 if (!type_check (unit, 0, BT_INTEGER))
4546 return false;
4547
4548 if (!scalar_check (unit, 0))
4549 return false;
4550
4551 if (!type_check (offset, 1, BT_INTEGER))
4552 return false;
4553
4554 if (!scalar_check (offset, 1))
4555 return false;
4556
4557 if (!type_check (whence, 2, BT_INTEGER))
4558 return false;
4559
4560 if (!scalar_check (whence, 2))
4561 return false;
4562
4563 if (status == NULL)
4564 return true;
4565
4566 if (!type_check (status, 3, BT_INTEGER))
4567 return false;
4568
4569 if (!kind_value_check (status, 3, 4))
4570 return false;
4571
4572 if (!scalar_check (status, 3))
4573 return false;
4574
4575 return true;
4576 }
4577
4578
4579
4580 bool
4581 gfc_check_fstat (gfc_expr *unit, gfc_expr *array)
4582 {
4583 if (!type_check (unit, 0, BT_INTEGER))
4584 return false;
4585
4586 if (!scalar_check (unit, 0))
4587 return false;
4588
4589 if (!type_check (array, 1, BT_INTEGER)
4590 || !kind_value_check (unit, 0, gfc_default_integer_kind))
4591 return false;
4592
4593 if (!array_check (array, 1))
4594 return false;
4595
4596 return true;
4597 }
4598
4599
4600 bool
4601 gfc_check_fstat_sub (gfc_expr *unit, gfc_expr *array, gfc_expr *status)
4602 {
4603 if (!type_check (unit, 0, BT_INTEGER))
4604 return false;
4605
4606 if (!scalar_check (unit, 0))
4607 return false;
4608
4609 if (!type_check (array, 1, BT_INTEGER)
4610 || !kind_value_check (array, 1, gfc_default_integer_kind))
4611 return false;
4612
4613 if (!array_check (array, 1))
4614 return false;
4615
4616 if (status == NULL)
4617 return true;
4618
4619 if (!type_check (status, 2, BT_INTEGER)
4620 || !kind_value_check (status, 2, gfc_default_integer_kind))
4621 return false;
4622
4623 if (!scalar_check (status, 2))
4624 return false;
4625
4626 return true;
4627 }
4628
4629
4630 bool
4631 gfc_check_ftell (gfc_expr *unit)
4632 {
4633 if (!type_check (unit, 0, BT_INTEGER))
4634 return false;
4635
4636 if (!scalar_check (unit, 0))
4637 return false;
4638
4639 return true;
4640 }
4641
4642
4643 bool
4644 gfc_check_ftell_sub (gfc_expr *unit, gfc_expr *offset)
4645 {
4646 if (!type_check (unit, 0, BT_INTEGER))
4647 return false;
4648
4649 if (!scalar_check (unit, 0))
4650 return false;
4651
4652 if (!type_check (offset, 1, BT_INTEGER))
4653 return false;
4654
4655 if (!scalar_check (offset, 1))
4656 return false;
4657
4658 return true;
4659 }
4660
4661
4662 bool
4663 gfc_check_stat (gfc_expr *name, gfc_expr *array)
4664 {
4665 if (!type_check (name, 0, BT_CHARACTER))
4666 return false;
4667 if (!kind_value_check (name, 0, gfc_default_character_kind))
4668 return false;
4669
4670 if (!type_check (array, 1, BT_INTEGER)
4671 || !kind_value_check (array, 1, gfc_default_integer_kind))
4672 return false;
4673
4674 if (!array_check (array, 1))
4675 return false;
4676
4677 return true;
4678 }
4679
4680
4681 bool
4682 gfc_check_stat_sub (gfc_expr *name, gfc_expr *array, gfc_expr *status)
4683 {
4684 if (!type_check (name, 0, BT_CHARACTER))
4685 return false;
4686 if (!kind_value_check (name, 0, gfc_default_character_kind))
4687 return false;
4688
4689 if (!type_check (array, 1, BT_INTEGER)
4690 || !kind_value_check (array, 1, gfc_default_integer_kind))
4691 return false;
4692
4693 if (!array_check (array, 1))
4694 return false;
4695
4696 if (status == NULL)
4697 return true;
4698
4699 if (!type_check (status, 2, BT_INTEGER)
4700 || !kind_value_check (array, 1, gfc_default_integer_kind))
4701 return false;
4702
4703 if (!scalar_check (status, 2))
4704 return false;
4705
4706 return true;
4707 }
4708
4709
4710 bool
4711 gfc_check_image_index (gfc_expr *coarray, gfc_expr *sub)
4712 {
4713 mpz_t nelems;
4714
4715 if (gfc_option.coarray == GFC_FCOARRAY_NONE)
4716 {
4717 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4718 return false;
4719 }
4720
4721 if (!coarray_check (coarray, 0))
4722 return false;
4723
4724 if (sub->rank != 1)
4725 {
4726 gfc_error ("%s argument to IMAGE_INDEX must be a rank one array at %L",
4727 gfc_current_intrinsic_arg[1]->name, &sub->where);
4728 return false;
4729 }
4730
4731 if (gfc_array_size (sub, &nelems))
4732 {
4733 int corank = gfc_get_corank (coarray);
4734
4735 if (mpz_cmp_ui (nelems, corank) != 0)
4736 {
4737 gfc_error ("The number of array elements of the SUB argument to "
4738 "IMAGE_INDEX at %L shall be %d (corank) not %d",
4739 &sub->where, corank, (int) mpz_get_si (nelems));
4740 mpz_clear (nelems);
4741 return false;
4742 }
4743 mpz_clear (nelems);
4744 }
4745
4746 return true;
4747 }
4748
4749
4750 bool
4751 gfc_check_num_images (gfc_expr *distance, gfc_expr *failed)
4752 {
4753 if (gfc_option.coarray == GFC_FCOARRAY_NONE)
4754 {
4755 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4756 return false;
4757 }
4758
4759 if (distance)
4760 {
4761 if (!type_check (distance, 0, BT_INTEGER))
4762 return false;
4763
4764 if (!nonnegative_check ("DISTANCE", distance))
4765 return false;
4766
4767 if (!scalar_check (distance, 0))
4768 return false;
4769
4770 if (!gfc_notify_std (GFC_STD_F2008_TS, "DISTANCE= argument to "
4771 "NUM_IMAGES at %L", &distance->where))
4772 return false;
4773 }
4774
4775 if (failed)
4776 {
4777 if (!type_check (failed, 1, BT_LOGICAL))
4778 return false;
4779
4780 if (!scalar_check (failed, 1))
4781 return false;
4782
4783 if (!gfc_notify_std (GFC_STD_F2008_TS, "FAILED= argument to "
4784 "NUM_IMAGES at %L", &distance->where))
4785 return false;
4786 }
4787
4788 return true;
4789 }
4790
4791
4792 bool
4793 gfc_check_this_image (gfc_expr *coarray, gfc_expr *dim, gfc_expr *distance)
4794 {
4795 if (gfc_option.coarray == GFC_FCOARRAY_NONE)
4796 {
4797 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4798 return false;
4799 }
4800
4801 if (coarray == NULL && dim == NULL && distance == NULL)
4802 return true;
4803
4804 if (dim != NULL && coarray == NULL)
4805 {
4806 gfc_error ("DIM argument without COARRAY argument not allowed for "
4807 "THIS_IMAGE intrinsic at %L", &dim->where);
4808 return false;
4809 }
4810
4811 if (distance && (coarray || dim))
4812 {
4813 gfc_error ("The DISTANCE argument may not be specified together with the "
4814 "COARRAY or DIM argument in intrinsic at %L",
4815 &distance->where);
4816 return false;
4817 }
4818
4819 /* Assume that we have "this_image (distance)". */
4820 if (coarray && !gfc_is_coarray (coarray) && coarray->ts.type == BT_INTEGER)
4821 {
4822 if (dim)
4823 {
4824 gfc_error ("Unexpected DIM argument with noncoarray argument at %L",
4825 &coarray->where);
4826 return false;
4827 }
4828 distance = coarray;
4829 }
4830
4831 if (distance)
4832 {
4833 if (!type_check (distance, 2, BT_INTEGER))
4834 return false;
4835
4836 if (!nonnegative_check ("DISTANCE", distance))
4837 return false;
4838
4839 if (!scalar_check (distance, 2))
4840 return false;
4841
4842 if (!gfc_notify_std (GFC_STD_F2008_TS, "DISTANCE= argument to "
4843 "THIS_IMAGE at %L", &distance->where))
4844 return false;
4845
4846 return true;
4847 }
4848
4849 if (!coarray_check (coarray, 0))
4850 return false;
4851
4852 if (dim != NULL)
4853 {
4854 if (!dim_check (dim, 1, false))
4855 return false;
4856
4857 if (!dim_corank_check (dim, coarray))
4858 return false;
4859 }
4860
4861 return true;
4862 }
4863
4864 /* Calculate the sizes for transfer, used by gfc_check_transfer and also
4865 by gfc_simplify_transfer. Return false if we cannot do so. */
4866
4867 bool
4868 gfc_calculate_transfer_sizes (gfc_expr *source, gfc_expr *mold, gfc_expr *size,
4869 size_t *source_size, size_t *result_size,
4870 size_t *result_length_p)
4871 {
4872 size_t result_elt_size;
4873
4874 if (source->expr_type == EXPR_FUNCTION)
4875 return false;
4876
4877 if (size && size->expr_type != EXPR_CONSTANT)
4878 return false;
4879
4880 /* Calculate the size of the source. */
4881 *source_size = gfc_target_expr_size (source);
4882 if (*source_size == 0)
4883 return false;
4884
4885 /* Determine the size of the element. */
4886 result_elt_size = gfc_element_size (mold);
4887 if (result_elt_size == 0)
4888 return false;
4889
4890 if (mold->expr_type == EXPR_ARRAY || mold->rank || size)
4891 {
4892 int result_length;
4893
4894 if (size)
4895 result_length = (size_t)mpz_get_ui (size->value.integer);
4896 else
4897 {
4898 result_length = *source_size / result_elt_size;
4899 if (result_length * result_elt_size < *source_size)
4900 result_length += 1;
4901 }
4902
4903 *result_size = result_length * result_elt_size;
4904 if (result_length_p)
4905 *result_length_p = result_length;
4906 }
4907 else
4908 *result_size = result_elt_size;
4909
4910 return true;
4911 }
4912
4913
4914 bool
4915 gfc_check_transfer (gfc_expr *source, gfc_expr *mold, gfc_expr *size)
4916 {
4917 size_t source_size;
4918 size_t result_size;
4919
4920 if (mold->ts.type == BT_HOLLERITH)
4921 {
4922 gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
4923 &mold->where, gfc_basic_typename (BT_HOLLERITH));
4924 return false;
4925 }
4926
4927 if (size != NULL)
4928 {
4929 if (!type_check (size, 2, BT_INTEGER))
4930 return false;
4931
4932 if (!scalar_check (size, 2))
4933 return false;
4934
4935 if (!nonoptional_check (size, 2))
4936 return false;
4937 }
4938
4939 if (!gfc_option.warn_surprising)
4940 return true;
4941
4942 /* If we can't calculate the sizes, we cannot check any more.
4943 Return true for that case. */
4944
4945 if (!gfc_calculate_transfer_sizes (source, mold, size, &source_size,
4946 &result_size, NULL))
4947 return true;
4948
4949 if (source_size < result_size)
4950 gfc_warning("Intrinsic TRANSFER at %L has partly undefined result: "
4951 "source size %ld < result size %ld", &source->where,
4952 (long) source_size, (long) result_size);
4953
4954 return true;
4955 }
4956
4957
4958 bool
4959 gfc_check_transpose (gfc_expr *matrix)
4960 {
4961 if (!rank_check (matrix, 0, 2))
4962 return false;
4963
4964 return true;
4965 }
4966
4967
4968 bool
4969 gfc_check_ubound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
4970 {
4971 if (!array_check (array, 0))
4972 return false;
4973
4974 if (!dim_check (dim, 1, false))
4975 return false;
4976
4977 if (!dim_rank_check (dim, array, 0))
4978 return false;
4979
4980 if (!kind_check (kind, 2, BT_INTEGER))
4981 return false;
4982 if (kind && !gfc_notify_std (GFC_STD_F2003, "'%s' intrinsic "
4983 "with KIND argument at %L",
4984 gfc_current_intrinsic, &kind->where))
4985 return false;
4986
4987 return true;
4988 }
4989
4990
4991 bool
4992 gfc_check_ucobound (gfc_expr *coarray, gfc_expr *dim, gfc_expr *kind)
4993 {
4994 if (gfc_option.coarray == GFC_FCOARRAY_NONE)
4995 {
4996 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4997 return false;
4998 }
4999
5000 if (!coarray_check (coarray, 0))
5001 return false;
5002
5003 if (dim != NULL)
5004 {
5005 if (!dim_check (dim, 1, false))
5006 return false;
5007
5008 if (!dim_corank_check (dim, coarray))
5009 return false;
5010 }
5011
5012 if (!kind_check (kind, 2, BT_INTEGER))
5013 return false;
5014
5015 return true;
5016 }
5017
5018
5019 bool
5020 gfc_check_unpack (gfc_expr *vector, gfc_expr *mask, gfc_expr *field)
5021 {
5022 mpz_t vector_size;
5023
5024 if (!rank_check (vector, 0, 1))
5025 return false;
5026
5027 if (!array_check (mask, 1))
5028 return false;
5029
5030 if (!type_check (mask, 1, BT_LOGICAL))
5031 return false;
5032
5033 if (!same_type_check (vector, 0, field, 2))
5034 return false;
5035
5036 if (mask->expr_type == EXPR_ARRAY
5037 && gfc_array_size (vector, &vector_size))
5038 {
5039 int mask_true_count = 0;
5040 gfc_constructor *mask_ctor;
5041 mask_ctor = gfc_constructor_first (mask->value.constructor);
5042 while (mask_ctor)
5043 {
5044 if (mask_ctor->expr->expr_type != EXPR_CONSTANT)
5045 {
5046 mask_true_count = 0;
5047 break;
5048 }
5049
5050 if (mask_ctor->expr->value.logical)
5051 mask_true_count++;
5052
5053 mask_ctor = gfc_constructor_next (mask_ctor);
5054 }
5055
5056 if (mpz_get_si (vector_size) < mask_true_count)
5057 {
5058 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
5059 "provide at least as many elements as there "
5060 "are .TRUE. values in '%s' (%ld/%d)",
5061 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
5062 &vector->where, gfc_current_intrinsic_arg[1]->name,
5063 mpz_get_si (vector_size), mask_true_count);
5064 return false;
5065 }
5066
5067 mpz_clear (vector_size);
5068 }
5069
5070 if (mask->rank != field->rank && field->rank != 0)
5071 {
5072 gfc_error ("'%s' argument of '%s' intrinsic at %L must have "
5073 "the same rank as '%s' or be a scalar",
5074 gfc_current_intrinsic_arg[2]->name, gfc_current_intrinsic,
5075 &field->where, gfc_current_intrinsic_arg[1]->name);
5076 return false;
5077 }
5078
5079 if (mask->rank == field->rank)
5080 {
5081 int i;
5082 for (i = 0; i < field->rank; i++)
5083 if (! identical_dimen_shape (mask, i, field, i))
5084 {
5085 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L "
5086 "must have identical shape.",
5087 gfc_current_intrinsic_arg[2]->name,
5088 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
5089 &field->where);
5090 }
5091 }
5092
5093 return true;
5094 }
5095
5096
5097 bool
5098 gfc_check_verify (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
5099 {
5100 if (!type_check (x, 0, BT_CHARACTER))
5101 return false;
5102
5103 if (!same_type_check (x, 0, y, 1))
5104 return false;
5105
5106 if (z != NULL && !type_check (z, 2, BT_LOGICAL))
5107 return false;
5108
5109 if (!kind_check (kind, 3, BT_INTEGER))
5110 return false;
5111 if (kind && !gfc_notify_std (GFC_STD_F2003, "'%s' intrinsic "
5112 "with KIND argument at %L",
5113 gfc_current_intrinsic, &kind->where))
5114 return false;
5115
5116 return true;
5117 }
5118
5119
5120 bool
5121 gfc_check_trim (gfc_expr *x)
5122 {
5123 if (!type_check (x, 0, BT_CHARACTER))
5124 return false;
5125
5126 if (!scalar_check (x, 0))
5127 return false;
5128
5129 return true;
5130 }
5131
5132
5133 bool
5134 gfc_check_ttynam (gfc_expr *unit)
5135 {
5136 if (!scalar_check (unit, 0))
5137 return false;
5138
5139 if (!type_check (unit, 0, BT_INTEGER))
5140 return false;
5141
5142 return true;
5143 }
5144
5145
5146 /* Common check function for the half a dozen intrinsics that have a
5147 single real argument. */
5148
5149 bool
5150 gfc_check_x (gfc_expr *x)
5151 {
5152 if (!type_check (x, 0, BT_REAL))
5153 return false;
5154
5155 return true;
5156 }
5157
5158
5159 /************* Check functions for intrinsic subroutines *************/
5160
5161 bool
5162 gfc_check_cpu_time (gfc_expr *time)
5163 {
5164 if (!scalar_check (time, 0))
5165 return false;
5166
5167 if (!type_check (time, 0, BT_REAL))
5168 return false;
5169
5170 if (!variable_check (time, 0, false))
5171 return false;
5172
5173 return true;
5174 }
5175
5176
5177 bool
5178 gfc_check_date_and_time (gfc_expr *date, gfc_expr *time,
5179 gfc_expr *zone, gfc_expr *values)
5180 {
5181 if (date != NULL)
5182 {
5183 if (!type_check (date, 0, BT_CHARACTER))
5184 return false;
5185 if (!kind_value_check (date, 0, gfc_default_character_kind))
5186 return false;
5187 if (!scalar_check (date, 0))
5188 return false;
5189 if (!variable_check (date, 0, false))
5190 return false;
5191 }
5192
5193 if (time != NULL)
5194 {
5195 if (!type_check (time, 1, BT_CHARACTER))
5196 return false;
5197 if (!kind_value_check (time, 1, gfc_default_character_kind))
5198 return false;
5199 if (!scalar_check (time, 1))
5200 return false;
5201 if (!variable_check (time, 1, false))
5202 return false;
5203 }
5204
5205 if (zone != NULL)
5206 {
5207 if (!type_check (zone, 2, BT_CHARACTER))
5208 return false;
5209 if (!kind_value_check (zone, 2, gfc_default_character_kind))
5210 return false;
5211 if (!scalar_check (zone, 2))
5212 return false;
5213 if (!variable_check (zone, 2, false))
5214 return false;
5215 }
5216
5217 if (values != NULL)
5218 {
5219 if (!type_check (values, 3, BT_INTEGER))
5220 return false;
5221 if (!array_check (values, 3))
5222 return false;
5223 if (!rank_check (values, 3, 1))
5224 return false;
5225 if (!variable_check (values, 3, false))
5226 return false;
5227 }
5228
5229 return true;
5230 }
5231
5232
5233 bool
5234 gfc_check_mvbits (gfc_expr *from, gfc_expr *frompos, gfc_expr *len,
5235 gfc_expr *to, gfc_expr *topos)
5236 {
5237 if (!type_check (from, 0, BT_INTEGER))
5238 return false;
5239
5240 if (!type_check (frompos, 1, BT_INTEGER))
5241 return false;
5242
5243 if (!type_check (len, 2, BT_INTEGER))
5244 return false;
5245
5246 if (!same_type_check (from, 0, to, 3))
5247 return false;
5248
5249 if (!variable_check (to, 3, false))
5250 return false;
5251
5252 if (!type_check (topos, 4, BT_INTEGER))
5253 return false;
5254
5255 if (!nonnegative_check ("frompos", frompos))
5256 return false;
5257
5258 if (!nonnegative_check ("topos", topos))
5259 return false;
5260
5261 if (!nonnegative_check ("len", len))
5262 return false;
5263
5264 if (!less_than_bitsize2 ("from", from, "frompos", frompos, "len", len))
5265 return false;
5266
5267 if (!less_than_bitsize2 ("to", to, "topos", topos, "len", len))
5268 return false;
5269
5270 return true;
5271 }
5272
5273
5274 bool
5275 gfc_check_random_number (gfc_expr *harvest)
5276 {
5277 if (!type_check (harvest, 0, BT_REAL))
5278 return false;
5279
5280 if (!variable_check (harvest, 0, false))
5281 return false;
5282
5283 return true;
5284 }
5285
5286
5287 bool
5288 gfc_check_random_seed (gfc_expr *size, gfc_expr *put, gfc_expr *get)
5289 {
5290 unsigned int nargs = 0, kiss_size;
5291 locus *where = NULL;
5292 mpz_t put_size, get_size;
5293 bool have_gfc_real_16; /* Try and mimic HAVE_GFC_REAL_16 in libgfortran. */
5294
5295 have_gfc_real_16 = gfc_validate_kind (BT_REAL, 16, true) != -1;
5296
5297 /* Keep the number of bytes in sync with kiss_size in
5298 libgfortran/intrinsics/random.c. */
5299 kiss_size = (have_gfc_real_16 ? 48 : 32) / gfc_default_integer_kind;
5300
5301 if (size != NULL)
5302 {
5303 if (size->expr_type != EXPR_VARIABLE
5304 || !size->symtree->n.sym->attr.optional)
5305 nargs++;
5306
5307 if (!scalar_check (size, 0))
5308 return false;
5309
5310 if (!type_check (size, 0, BT_INTEGER))
5311 return false;
5312
5313 if (!variable_check (size, 0, false))
5314 return false;
5315
5316 if (!kind_value_check (size, 0, gfc_default_integer_kind))
5317 return false;
5318 }
5319
5320 if (put != NULL)
5321 {
5322 if (put->expr_type != EXPR_VARIABLE
5323 || !put->symtree->n.sym->attr.optional)
5324 {
5325 nargs++;
5326 where = &put->where;
5327 }
5328
5329 if (!array_check (put, 1))
5330 return false;
5331
5332 if (!rank_check (put, 1, 1))
5333 return false;
5334
5335 if (!type_check (put, 1, BT_INTEGER))
5336 return false;
5337
5338 if (!kind_value_check (put, 1, gfc_default_integer_kind))
5339 return false;
5340
5341 if (gfc_array_size (put, &put_size)
5342 && mpz_get_ui (put_size) < kiss_size)
5343 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
5344 "too small (%i/%i)",
5345 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
5346 where, (int) mpz_get_ui (put_size), kiss_size);
5347 }
5348
5349 if (get != NULL)
5350 {
5351 if (get->expr_type != EXPR_VARIABLE
5352 || !get->symtree->n.sym->attr.optional)
5353 {
5354 nargs++;
5355 where = &get->where;
5356 }
5357
5358 if (!array_check (get, 2))
5359 return false;
5360
5361 if (!rank_check (get, 2, 1))
5362 return false;
5363
5364 if (!type_check (get, 2, BT_INTEGER))
5365 return false;
5366
5367 if (!variable_check (get, 2, false))
5368 return false;
5369
5370 if (!kind_value_check (get, 2, gfc_default_integer_kind))
5371 return false;
5372
5373 if (gfc_array_size (get, &get_size)
5374 && mpz_get_ui (get_size) < kiss_size)
5375 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
5376 "too small (%i/%i)",
5377 gfc_current_intrinsic_arg[2]->name, gfc_current_intrinsic,
5378 where, (int) mpz_get_ui (get_size), kiss_size);
5379 }
5380
5381 /* RANDOM_SEED may not have more than one non-optional argument. */
5382 if (nargs > 1)
5383 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic, where);
5384
5385 return true;
5386 }
5387
5388
5389 bool
5390 gfc_check_second_sub (gfc_expr *time)
5391 {
5392 if (!scalar_check (time, 0))
5393 return false;
5394
5395 if (!type_check (time, 0, BT_REAL))
5396 return false;
5397
5398 if (!kind_value_check (time, 0, 4))
5399 return false;
5400
5401 return true;
5402 }
5403
5404
5405 /* COUNT and COUNT_MAX of SYSTEM_CLOCK are scalar, default-kind integer
5406 variables in Fortran 95. In Fortran 2003 and later, they can be of any
5407 kind, and COUNT_RATE can be of type real. Note, count, count_rate, and
5408 count_max are all optional arguments */
5409
5410 bool
5411 gfc_check_system_clock (gfc_expr *count, gfc_expr *count_rate,
5412 gfc_expr *count_max)
5413 {
5414 if (count != NULL)
5415 {
5416 if (!scalar_check (count, 0))
5417 return false;
5418
5419 if (!type_check (count, 0, BT_INTEGER))
5420 return false;
5421
5422 if (count->ts.kind != gfc_default_integer_kind
5423 && !gfc_notify_std (GFC_STD_F2003, "COUNT argument to "
5424 "SYSTEM_CLOCK at %L has non-default kind",
5425 &count->where))
5426 return false;
5427
5428 if (!variable_check (count, 0, false))
5429 return false;
5430 }
5431
5432 if (count_rate != NULL)
5433 {
5434 if (!scalar_check (count_rate, 1))
5435 return false;
5436
5437 if (!variable_check (count_rate, 1, false))
5438 return false;
5439
5440 if (count_rate->ts.type == BT_REAL)
5441 {
5442 if (!gfc_notify_std (GFC_STD_F2003, "Real COUNT_RATE argument to "
5443 "SYSTEM_CLOCK at %L", &count_rate->where))
5444 return false;
5445 }
5446 else
5447 {
5448 if (!type_check (count_rate, 1, BT_INTEGER))
5449 return false;
5450
5451 if (count_rate->ts.kind != gfc_default_integer_kind
5452 && !gfc_notify_std (GFC_STD_F2003, "COUNT_RATE argument to "
5453 "SYSTEM_CLOCK at %L has non-default kind",
5454 &count_rate->where))
5455 return false;
5456 }
5457
5458 }
5459
5460 if (count_max != NULL)
5461 {
5462 if (!scalar_check (count_max, 2))
5463 return false;
5464
5465 if (!type_check (count_max, 2, BT_INTEGER))
5466 return false;
5467
5468 if (count_max->ts.kind != gfc_default_integer_kind
5469 && !gfc_notify_std (GFC_STD_F2003, "COUNT_MAX argument to "
5470 "SYSTEM_CLOCK at %L has non-default kind",
5471 &count_max->where))
5472 return false;
5473
5474 if (!variable_check (count_max, 2, false))
5475 return false;
5476 }
5477
5478 return true;
5479 }
5480
5481
5482 bool
5483 gfc_check_irand (gfc_expr *x)
5484 {
5485 if (x == NULL)
5486 return true;
5487
5488 if (!scalar_check (x, 0))
5489 return false;
5490
5491 if (!type_check (x, 0, BT_INTEGER))
5492 return false;
5493
5494 if (!kind_value_check (x, 0, 4))
5495 return false;
5496
5497 return true;
5498 }
5499
5500
5501 bool
5502 gfc_check_alarm_sub (gfc_expr *seconds, gfc_expr *handler, gfc_expr *status)
5503 {
5504 if (!scalar_check (seconds, 0))
5505 return false;
5506 if (!type_check (seconds, 0, BT_INTEGER))
5507 return false;
5508
5509 if (!int_or_proc_check (handler, 1))
5510 return false;
5511 if (handler->ts.type == BT_INTEGER && !scalar_check (handler, 1))
5512 return false;
5513
5514 if (status == NULL)
5515 return true;
5516
5517 if (!scalar_check (status, 2))
5518 return false;
5519 if (!type_check (status, 2, BT_INTEGER))
5520 return false;
5521 if (!kind_value_check (status, 2, gfc_default_integer_kind))
5522 return false;
5523
5524 return true;
5525 }
5526
5527
5528 bool
5529 gfc_check_rand (gfc_expr *x)
5530 {
5531 if (x == NULL)
5532 return true;
5533
5534 if (!scalar_check (x, 0))
5535 return false;
5536
5537 if (!type_check (x, 0, BT_INTEGER))
5538 return false;
5539
5540 if (!kind_value_check (x, 0, 4))
5541 return false;
5542
5543 return true;
5544 }
5545
5546
5547 bool
5548 gfc_check_srand (gfc_expr *x)
5549 {
5550 if (!scalar_check (x, 0))
5551 return false;
5552
5553 if (!type_check (x, 0, BT_INTEGER))
5554 return false;
5555
5556 if (!kind_value_check (x, 0, 4))
5557 return false;
5558
5559 return true;
5560 }
5561
5562
5563 bool
5564 gfc_check_ctime_sub (gfc_expr *time, gfc_expr *result)
5565 {
5566 if (!scalar_check (time, 0))
5567 return false;
5568 if (!type_check (time, 0, BT_INTEGER))
5569 return false;
5570
5571 if (!type_check (result, 1, BT_CHARACTER))
5572 return false;
5573 if (!kind_value_check (result, 1, gfc_default_character_kind))
5574 return false;
5575
5576 return true;
5577 }
5578
5579
5580 bool
5581 gfc_check_dtime_etime (gfc_expr *x)
5582 {
5583 if (!array_check (x, 0))
5584 return false;
5585
5586 if (!rank_check (x, 0, 1))
5587 return false;
5588
5589 if (!variable_check (x, 0, false))
5590 return false;
5591
5592 if (!type_check (x, 0, BT_REAL))
5593 return false;
5594
5595 if (!kind_value_check (x, 0, 4))
5596 return false;
5597
5598 return true;
5599 }
5600
5601
5602 bool
5603 gfc_check_dtime_etime_sub (gfc_expr *values, gfc_expr *time)
5604 {
5605 if (!array_check (values, 0))
5606 return false;
5607
5608 if (!rank_check (values, 0, 1))
5609 return false;
5610
5611 if (!variable_check (values, 0, false))
5612 return false;
5613
5614 if (!type_check (values, 0, BT_REAL))
5615 return false;
5616
5617 if (!kind_value_check (values, 0, 4))
5618 return false;
5619
5620 if (!scalar_check (time, 1))
5621 return false;
5622
5623 if (!type_check (time, 1, BT_REAL))
5624 return false;
5625
5626 if (!kind_value_check (time, 1, 4))
5627 return false;
5628
5629 return true;
5630 }
5631
5632
5633 bool
5634 gfc_check_fdate_sub (gfc_expr *date)
5635 {
5636 if (!type_check (date, 0, BT_CHARACTER))
5637 return false;
5638 if (!kind_value_check (date, 0, gfc_default_character_kind))
5639 return false;
5640
5641 return true;
5642 }
5643
5644
5645 bool
5646 gfc_check_gerror (gfc_expr *msg)
5647 {
5648 if (!type_check (msg, 0, BT_CHARACTER))
5649 return false;
5650 if (!kind_value_check (msg, 0, gfc_default_character_kind))
5651 return false;
5652
5653 return true;
5654 }
5655
5656
5657 bool
5658 gfc_check_getcwd_sub (gfc_expr *cwd, gfc_expr *status)
5659 {
5660 if (!type_check (cwd, 0, BT_CHARACTER))
5661 return false;
5662 if (!kind_value_check (cwd, 0, gfc_default_character_kind))
5663 return false;
5664
5665 if (status == NULL)
5666 return true;
5667
5668 if (!scalar_check (status, 1))
5669 return false;
5670
5671 if (!type_check (status, 1, BT_INTEGER))
5672 return false;
5673
5674 return true;
5675 }
5676
5677
5678 bool
5679 gfc_check_getarg (gfc_expr *pos, gfc_expr *value)
5680 {
5681 if (!type_check (pos, 0, BT_INTEGER))
5682 return false;
5683
5684 if (pos->ts.kind > gfc_default_integer_kind)
5685 {
5686 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
5687 "not wider than the default kind (%d)",
5688 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
5689 &pos->where, gfc_default_integer_kind);
5690 return false;
5691 }
5692
5693 if (!type_check (value, 1, BT_CHARACTER))
5694 return false;
5695 if (!kind_value_check (value, 1, gfc_default_character_kind))
5696 return false;
5697
5698 return true;
5699 }
5700
5701
5702 bool
5703 gfc_check_getlog (gfc_expr *msg)
5704 {
5705 if (!type_check (msg, 0, BT_CHARACTER))
5706 return false;
5707 if (!kind_value_check (msg, 0, gfc_default_character_kind))
5708 return false;
5709
5710 return true;
5711 }
5712
5713
5714 bool
5715 gfc_check_exit (gfc_expr *status)
5716 {
5717 if (status == NULL)
5718 return true;
5719
5720 if (!type_check (status, 0, BT_INTEGER))
5721 return false;
5722
5723 if (!scalar_check (status, 0))
5724 return false;
5725
5726 return true;
5727 }
5728
5729
5730 bool
5731 gfc_check_flush (gfc_expr *unit)
5732 {
5733 if (unit == NULL)
5734 return true;
5735
5736 if (!type_check (unit, 0, BT_INTEGER))
5737 return false;
5738
5739 if (!scalar_check (unit, 0))
5740 return false;
5741
5742 return true;
5743 }
5744
5745
5746 bool
5747 gfc_check_free (gfc_expr *i)
5748 {
5749 if (!type_check (i, 0, BT_INTEGER))
5750 return false;
5751
5752 if (!scalar_check (i, 0))
5753 return false;
5754
5755 return true;
5756 }
5757
5758
5759 bool
5760 gfc_check_hostnm (gfc_expr *name)
5761 {
5762 if (!type_check (name, 0, BT_CHARACTER))
5763 return false;
5764 if (!kind_value_check (name, 0, gfc_default_character_kind))
5765 return false;
5766
5767 return true;
5768 }
5769
5770
5771 bool
5772 gfc_check_hostnm_sub (gfc_expr *name, gfc_expr *status)
5773 {
5774 if (!type_check (name, 0, BT_CHARACTER))
5775 return false;
5776 if (!kind_value_check (name, 0, gfc_default_character_kind))
5777 return false;
5778
5779 if (status == NULL)
5780 return true;
5781
5782 if (!scalar_check (status, 1))
5783 return false;
5784
5785 if (!type_check (status, 1, BT_INTEGER))
5786 return false;
5787
5788 return true;
5789 }
5790
5791
5792 bool
5793 gfc_check_itime_idate (gfc_expr *values)
5794 {
5795 if (!array_check (values, 0))
5796 return false;
5797
5798 if (!rank_check (values, 0, 1))
5799 return false;
5800
5801 if (!variable_check (values, 0, false))
5802 return false;
5803
5804 if (!type_check (values, 0, BT_INTEGER))
5805 return false;
5806
5807 if (!kind_value_check (values, 0, gfc_default_integer_kind))
5808 return false;
5809
5810 return true;
5811 }
5812
5813
5814 bool
5815 gfc_check_ltime_gmtime (gfc_expr *time, gfc_expr *values)
5816 {
5817 if (!type_check (time, 0, BT_INTEGER))
5818 return false;
5819
5820 if (!kind_value_check (time, 0, gfc_default_integer_kind))
5821 return false;
5822
5823 if (!scalar_check (time, 0))
5824 return false;
5825
5826 if (!array_check (values, 1))
5827 return false;
5828
5829 if (!rank_check (values, 1, 1))
5830 return false;
5831
5832 if (!variable_check (values, 1, false))
5833 return false;
5834
5835 if (!type_check (values, 1, BT_INTEGER))
5836 return false;
5837
5838 if (!kind_value_check (values, 1, gfc_default_integer_kind))
5839 return false;
5840
5841 return true;
5842 }
5843
5844
5845 bool
5846 gfc_check_ttynam_sub (gfc_expr *unit, gfc_expr *name)
5847 {
5848 if (!scalar_check (unit, 0))
5849 return false;
5850
5851 if (!type_check (unit, 0, BT_INTEGER))
5852 return false;
5853
5854 if (!type_check (name, 1, BT_CHARACTER))
5855 return false;
5856 if (!kind_value_check (name, 1, gfc_default_character_kind))
5857 return false;
5858
5859 return true;
5860 }
5861
5862
5863 bool
5864 gfc_check_isatty (gfc_expr *unit)
5865 {
5866 if (unit == NULL)
5867 return false;
5868
5869 if (!type_check (unit, 0, BT_INTEGER))
5870 return false;
5871
5872 if (!scalar_check (unit, 0))
5873 return false;
5874
5875 return true;
5876 }
5877
5878
5879 bool
5880 gfc_check_isnan (gfc_expr *x)
5881 {
5882 if (!type_check (x, 0, BT_REAL))
5883 return false;
5884
5885 return true;
5886 }
5887
5888
5889 bool
5890 gfc_check_perror (gfc_expr *string)
5891 {
5892 if (!type_check (string, 0, BT_CHARACTER))
5893 return false;
5894 if (!kind_value_check (string, 0, gfc_default_character_kind))
5895 return false;
5896
5897 return true;
5898 }
5899
5900
5901 bool
5902 gfc_check_umask (gfc_expr *mask)
5903 {
5904 if (!type_check (mask, 0, BT_INTEGER))
5905 return false;
5906
5907 if (!scalar_check (mask, 0))
5908 return false;
5909
5910 return true;
5911 }
5912
5913
5914 bool
5915 gfc_check_umask_sub (gfc_expr *mask, gfc_expr *old)
5916 {
5917 if (!type_check (mask, 0, BT_INTEGER))
5918 return false;
5919
5920 if (!scalar_check (mask, 0))
5921 return false;
5922
5923 if (old == NULL)
5924 return true;
5925
5926 if (!scalar_check (old, 1))
5927 return false;
5928
5929 if (!type_check (old, 1, BT_INTEGER))
5930 return false;
5931
5932 return true;
5933 }
5934
5935
5936 bool
5937 gfc_check_unlink (gfc_expr *name)
5938 {
5939 if (!type_check (name, 0, BT_CHARACTER))
5940 return false;
5941 if (!kind_value_check (name, 0, gfc_default_character_kind))
5942 return false;
5943
5944 return true;
5945 }
5946
5947
5948 bool
5949 gfc_check_unlink_sub (gfc_expr *name, gfc_expr *status)
5950 {
5951 if (!type_check (name, 0, BT_CHARACTER))
5952 return false;
5953 if (!kind_value_check (name, 0, gfc_default_character_kind))
5954 return false;
5955
5956 if (status == NULL)
5957 return true;
5958
5959 if (!scalar_check (status, 1))
5960 return false;
5961
5962 if (!type_check (status, 1, BT_INTEGER))
5963 return false;
5964
5965 return true;
5966 }
5967
5968
5969 bool
5970 gfc_check_signal (gfc_expr *number, gfc_expr *handler)
5971 {
5972 if (!scalar_check (number, 0))
5973 return false;
5974 if (!type_check (number, 0, BT_INTEGER))
5975 return false;
5976
5977 if (!int_or_proc_check (handler, 1))
5978 return false;
5979 if (handler->ts.type == BT_INTEGER && !scalar_check (handler, 1))
5980 return false;
5981
5982 return true;
5983 }
5984
5985
5986 bool
5987 gfc_check_signal_sub (gfc_expr *number, gfc_expr *handler, gfc_expr *status)
5988 {
5989 if (!scalar_check (number, 0))
5990 return false;
5991 if (!type_check (number, 0, BT_INTEGER))
5992 return false;
5993
5994 if (!int_or_proc_check (handler, 1))
5995 return false;
5996 if (handler->ts.type == BT_INTEGER && !scalar_check (handler, 1))
5997 return false;
5998
5999 if (status == NULL)
6000 return true;
6001
6002 if (!type_check (status, 2, BT_INTEGER))
6003 return false;
6004 if (!scalar_check (status, 2))
6005 return false;
6006
6007 return true;
6008 }
6009
6010
6011 bool
6012 gfc_check_system_sub (gfc_expr *cmd, gfc_expr *status)
6013 {
6014 if (!type_check (cmd, 0, BT_CHARACTER))
6015 return false;
6016 if (!kind_value_check (cmd, 0, gfc_default_character_kind))
6017 return false;
6018
6019 if (!scalar_check (status, 1))
6020 return false;
6021
6022 if (!type_check (status, 1, BT_INTEGER))
6023 return false;
6024
6025 if (!kind_value_check (status, 1, gfc_default_integer_kind))
6026 return false;
6027
6028 return true;
6029 }
6030
6031
6032 /* This is used for the GNU intrinsics AND, OR and XOR. */
6033 bool
6034 gfc_check_and (gfc_expr *i, gfc_expr *j)
6035 {
6036 if (i->ts.type != BT_INTEGER && i->ts.type != BT_LOGICAL)
6037 {
6038 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
6039 "or LOGICAL", gfc_current_intrinsic_arg[0]->name,
6040 gfc_current_intrinsic, &i->where);
6041 return false;
6042 }
6043
6044 if (j->ts.type != BT_INTEGER && j->ts.type != BT_LOGICAL)
6045 {
6046 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
6047 "or LOGICAL", gfc_current_intrinsic_arg[1]->name,
6048 gfc_current_intrinsic, &j->where);
6049 return false;
6050 }
6051
6052 if (i->ts.type != j->ts.type)
6053 {
6054 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
6055 "have the same type", gfc_current_intrinsic_arg[0]->name,
6056 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
6057 &j->where);
6058 return false;
6059 }
6060
6061 if (!scalar_check (i, 0))
6062 return false;
6063
6064 if (!scalar_check (j, 1))
6065 return false;
6066
6067 return true;
6068 }
6069
6070
6071 bool
6072 gfc_check_storage_size (gfc_expr *a, gfc_expr *kind)
6073 {
6074 if (a->ts.type == BT_ASSUMED)
6075 {
6076 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be TYPE(*)",
6077 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
6078 &a->where);
6079 return false;
6080 }
6081
6082 if (a->ts.type == BT_PROCEDURE)
6083 {
6084 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be a "
6085 "procedure", gfc_current_intrinsic_arg[0]->name,
6086 gfc_current_intrinsic, &a->where);
6087 return false;
6088 }
6089
6090 if (kind == NULL)
6091 return true;
6092
6093 if (!type_check (kind, 1, BT_INTEGER))
6094 return false;
6095
6096 if (!scalar_check (kind, 1))
6097 return false;
6098
6099 if (kind->expr_type != EXPR_CONSTANT)
6100 {
6101 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
6102 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
6103 &kind->where);
6104 return false;
6105 }
6106
6107 return true;
6108 }