PR target/65871
[official-gcc.git] / gcc / fortran / check.c
blobcdb5ff1cba696dde5ebea8d2beb1579fccb4b6ef
1 /* Check functions
2 Copyright (C) 2002-2015 Free Software Foundation, Inc.
3 Contributed by Andy Vaught & Katherine Holcomb
5 This file is part of GCC.
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.
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.
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/>. */
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. */
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"
38 /* Make sure an expression is a scalar. */
40 static bool
41 scalar_check (gfc_expr *e, int n)
43 if (e->rank == 0)
44 return true;
46 gfc_error ("%qs argument of %qs intrinsic at %L must be a scalar",
47 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
48 &e->where);
50 return false;
54 /* Check the type of an expression. */
56 static bool
57 type_check (gfc_expr *e, int n, bt type)
59 if (e->ts.type == type)
60 return true;
62 gfc_error ("%qs argument of %qs intrinsic at %L must be %s",
63 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
64 &e->where, gfc_basic_typename (type));
66 return false;
70 /* Check that the expression is a numeric type. */
72 static bool
73 numeric_check (gfc_expr *e, int n)
75 if (gfc_numeric_ts (&e->ts))
76 return true;
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))
85 e->ts = e->symtree->n.sym->ts;
86 return true;
89 gfc_error ("%qs argument of %qs intrinsic at %L must be a numeric type",
90 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
91 &e->where);
93 return false;
97 /* Check that an expression is integer or real. */
99 static bool
100 int_or_real_check (gfc_expr *e, int n)
102 if (e->ts.type != BT_INTEGER && e->ts.type != BT_REAL)
104 gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER "
105 "or REAL", gfc_current_intrinsic_arg[n]->name,
106 gfc_current_intrinsic, &e->where);
107 return false;
110 return true;
114 /* Check that an expression is real or complex. */
116 static bool
117 real_or_complex_check (gfc_expr *e, int n)
119 if (e->ts.type != BT_REAL && e->ts.type != BT_COMPLEX)
121 gfc_error ("%qs argument of %qs intrinsic at %L must be REAL "
122 "or COMPLEX", gfc_current_intrinsic_arg[n]->name,
123 gfc_current_intrinsic, &e->where);
124 return false;
127 return true;
131 /* Check that an expression is INTEGER or PROCEDURE. */
133 static bool
134 int_or_proc_check (gfc_expr *e, int n)
136 if (e->ts.type != BT_INTEGER && e->ts.type != BT_PROCEDURE)
138 gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER "
139 "or PROCEDURE", gfc_current_intrinsic_arg[n]->name,
140 gfc_current_intrinsic, &e->where);
141 return false;
144 return true;
148 /* Check that the expression is an optional constant integer
149 and that it specifies a valid kind for that type. */
151 static bool
152 kind_check (gfc_expr *k, int n, bt type)
154 int kind;
156 if (k == NULL)
157 return true;
159 if (!type_check (k, n, BT_INTEGER))
160 return false;
162 if (!scalar_check (k, n))
163 return false;
165 if (!gfc_check_init_expr (k))
167 gfc_error ("%qs argument of %qs intrinsic at %L must be a constant",
168 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
169 &k->where);
170 return false;
173 if (gfc_extract_int (k, &kind) != NULL
174 || gfc_validate_kind (type, kind, true) < 0)
176 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type),
177 &k->where);
178 return false;
181 return true;
185 /* Make sure the expression is a double precision real. */
187 static bool
188 double_check (gfc_expr *d, int n)
190 if (!type_check (d, n, BT_REAL))
191 return false;
193 if (d->ts.kind != gfc_default_double_kind)
195 gfc_error ("%qs argument of %qs intrinsic at %L must be double "
196 "precision", gfc_current_intrinsic_arg[n]->name,
197 gfc_current_intrinsic, &d->where);
198 return false;
201 return true;
205 static bool
206 coarray_check (gfc_expr *e, int n)
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)
212 gfc_add_class_array_ref (e);
213 return true;
216 if (!gfc_is_coarray (e))
218 gfc_error ("Expected coarray variable as %qs argument to the %s "
219 "intrinsic at %L", gfc_current_intrinsic_arg[n]->name,
220 gfc_current_intrinsic, &e->where);
221 return false;
224 return true;
228 /* Make sure the expression is a logical array. */
230 static bool
231 logical_array_check (gfc_expr *array, int n)
233 if (array->ts.type != BT_LOGICAL || array->rank == 0)
235 gfc_error ("%qs argument of %qs intrinsic at %L must be a logical "
236 "array", gfc_current_intrinsic_arg[n]->name,
237 gfc_current_intrinsic, &array->where);
238 return false;
241 return true;
245 /* Make sure an expression is an array. */
247 static bool
248 array_check (gfc_expr *e, int n)
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)
254 gfc_add_class_array_ref (e);
255 return true;
258 if (e->rank != 0 && e->ts.type != BT_PROCEDURE)
259 return true;
261 gfc_error ("%qs argument of %qs intrinsic at %L must be an array",
262 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
263 &e->where);
265 return false;
269 /* If expr is a constant, then check to ensure that it is greater than
270 of equal to zero. */
272 static bool
273 nonnegative_check (const char *arg, gfc_expr *expr)
275 int i;
277 if (expr->expr_type == EXPR_CONSTANT)
279 gfc_extract_int (expr, &i);
280 if (i < 0)
282 gfc_error ("%qs at %L must be nonnegative", arg, &expr->where);
283 return false;
287 return true;
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). */
294 static bool
295 less_than_bitsize1 (const char *arg1, gfc_expr *expr1, const char *arg2,
296 gfc_expr *expr2, bool or_equal)
298 int i2, i3;
300 if (expr2->expr_type == EXPR_CONSTANT)
302 gfc_extract_int (expr2, &i2);
303 i3 = gfc_validate_kind (BT_INTEGER, expr1->ts.kind, false);
305 /* For ISHFT[C], check that |shift| <= bit_size(i). */
306 if (arg2 == NULL)
308 if (i2 < 0)
309 i2 = -i2;
311 if (i2 > gfc_integer_kinds[i3].bit_size)
313 gfc_error ("The absolute value of SHIFT at %L must be less "
314 "than or equal to BIT_SIZE(%qs)",
315 &expr2->where, arg1);
316 return false;
320 if (or_equal)
322 if (i2 > gfc_integer_kinds[i3].bit_size)
324 gfc_error ("%qs at %L must be less than "
325 "or equal to BIT_SIZE(%qs)",
326 arg2, &expr2->where, arg1);
327 return false;
330 else
332 if (i2 >= gfc_integer_kinds[i3].bit_size)
334 gfc_error ("%qs at %L must be less than BIT_SIZE(%qs)",
335 arg2, &expr2->where, arg1);
336 return false;
341 return true;
345 /* If expr is constant, then check that the value is less than or equal
346 to the bit_size of the kind k. */
348 static bool
349 less_than_bitsizekind (const char *arg, gfc_expr *expr, int k)
351 int i, val;
353 if (expr->expr_type != EXPR_CONSTANT)
354 return true;
356 i = gfc_validate_kind (BT_INTEGER, k, false);
357 gfc_extract_int (expr, &val);
359 if (val > gfc_integer_kinds[i].bit_size)
361 gfc_error ("%qs at %L must be less than or equal to the BIT_SIZE of "
362 "INTEGER(KIND=%d)", arg, &expr->where, k);
363 return false;
366 return true;
370 /* If expr2 and expr3 are constants, then check that the value is less than
371 or equal to bit_size(expr1). */
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)
377 int i2, i3;
379 if (expr2->expr_type == EXPR_CONSTANT && expr3->expr_type == EXPR_CONSTANT)
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)
387 gfc_error ("%<%s + %s%> at %L must be less than or equal "
388 "to BIT_SIZE(%qs)",
389 arg2, arg3, &expr2->where, arg1);
390 return false;
394 return true;
397 /* Make sure two expressions have the same type. */
399 static bool
400 same_type_check (gfc_expr *e, int n, gfc_expr *f, int m)
402 if (gfc_compare_types (&e->ts, &f->ts))
403 return true;
405 gfc_error ("%qs argument of %qs intrinsic at %L must be the same type "
406 "and kind as %qs", gfc_current_intrinsic_arg[m]->name,
407 gfc_current_intrinsic, &f->where,
408 gfc_current_intrinsic_arg[n]->name);
410 return false;
414 /* Make sure that an expression has a certain (nonzero) rank. */
416 static bool
417 rank_check (gfc_expr *e, int n, int rank)
419 if (e->rank == rank)
420 return true;
422 gfc_error ("%qs argument of %qs intrinsic at %L must be of rank %d",
423 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
424 &e->where, rank);
426 return false;
430 /* Make sure a variable expression is not an optional dummy argument. */
432 static bool
433 nonoptional_check (gfc_expr *e, int n)
435 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.optional)
437 gfc_error ("%qs argument of %qs intrinsic at %L must not be OPTIONAL",
438 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
439 &e->where);
442 /* TODO: Recursive check on nonoptional variables? */
444 return true;
448 /* Check for ALLOCATABLE attribute. */
450 static bool
451 allocatable_check (gfc_expr *e, int n)
453 symbol_attribute attr;
455 attr = gfc_variable_attr (e, NULL);
456 if (!attr.allocatable || attr.associate_var)
458 gfc_error ("%qs argument of %qs intrinsic at %L must be ALLOCATABLE",
459 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
460 &e->where);
461 return false;
464 return true;
468 /* Check that an expression has a particular kind. */
470 static bool
471 kind_value_check (gfc_expr *e, int n, int k)
473 if (e->ts.kind == k)
474 return true;
476 gfc_error ("%qs argument of %qs intrinsic at %L must be of kind %d",
477 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
478 &e->where, k);
480 return false;
484 /* Make sure an expression is a variable. */
486 static bool
487 variable_check (gfc_expr *e, int n, bool allow_proc)
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))
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;
500 for (ref = e->ref; ref; ref = ref->next)
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;
512 if (!ref)
514 gfc_error ("%qs argument of %qs intrinsic at %L cannot be "
515 "INTENT(IN)", gfc_current_intrinsic_arg[n]->name,
516 gfc_current_intrinsic, &e->where);
517 return false;
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;
526 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.function
527 && e->symtree->n.sym == e->symtree->n.sym->result)
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;
535 gfc_error ("%qs argument of %qs intrinsic at %L must be a variable",
536 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic, &e->where);
538 return false;
542 /* Check the common DIM parameter for correctness. */
544 static bool
545 dim_check (gfc_expr *dim, int n, bool optional)
547 if (dim == NULL)
548 return true;
550 if (!type_check (dim, n, BT_INTEGER))
551 return false;
553 if (!scalar_check (dim, n))
554 return false;
556 if (!optional && !nonoptional_check (dim, n))
557 return false;
559 return true;
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. */
566 static bool
567 dim_corank_check (gfc_expr *dim, gfc_expr *array)
569 int corank;
571 gcc_assert (array->expr_type == EXPR_VARIABLE);
573 if (dim->expr_type != EXPR_CONSTANT)
574 return true;
576 if (array->ts.type == BT_CLASS)
577 return true;
579 corank = gfc_get_corank (array);
581 if (mpz_cmp_ui (dim->value.integer, 1) < 0
582 || mpz_cmp_ui (dim->value.integer, corank) > 0)
584 gfc_error ("%<dim%> argument of %qs intrinsic at %L is not a valid "
585 "codimension index", gfc_current_intrinsic, &dim->where);
587 return false;
590 return true;
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. */
599 static bool
600 dim_rank_check (gfc_expr *dim, gfc_expr *array, int allow_assumed)
602 gfc_array_ref *ar;
603 int rank;
605 if (dim == NULL)
606 return true;
608 if (dim->expr_type != EXPR_CONSTANT)
609 return true;
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;
617 /* Assumed-rank array. */
618 if (rank == -1)
619 rank = GFC_MAX_DIMENSIONS;
621 if (array->expr_type == EXPR_VARIABLE)
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--;
631 if (mpz_cmp_ui (dim->value.integer, 1) < 0
632 || mpz_cmp_ui (dim->value.integer, rank) > 0)
634 gfc_error ("%<dim%> argument of %qs intrinsic at %L is not a valid "
635 "dimension index", gfc_current_intrinsic, &dim->where);
637 return false;
640 return true;
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. */
648 static int
649 identical_dimen_shape (gfc_expr *a, int ai, gfc_expr *b, int bi)
651 mpz_t a_size, b_size;
652 int ret;
654 gcc_assert (a->rank > ai);
655 gcc_assert (b->rank > bi);
657 ret = 1;
659 if (gfc_array_dimen_size (a, ai, &a_size))
661 if (gfc_array_dimen_size (b, bi, &b_size))
663 if (mpz_cmp (a_size, b_size) != 0)
664 ret = 0;
666 mpz_clear (b_size);
668 mpz_clear (a_size);
670 return ret;
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. */
677 static long
678 gfc_var_strlen (const gfc_expr *a)
680 gfc_ref *ra;
682 while (a->expr_type == EXPR_OP && a->value.op.op == INTRINSIC_PARENTHESES)
683 a = a->value.op.op1;
685 for (ra = a->ref; ra != NULL && ra->type != REF_SUBSTRING; ra = ra->next)
688 if (ra)
690 long start_a, end_a;
692 if (!ra->u.ss.end)
693 return -1;
695 if ((!ra->u.ss.start || ra->u.ss.start->expr_type == EXPR_CONSTANT)
696 && ra->u.ss.end->expr_type == EXPR_CONSTANT)
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;
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;
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;
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. */
725 bool
726 gfc_check_same_strlen (const gfc_expr *a, const gfc_expr *b, const char *name)
728 long len_a, len_b;
730 len_a = gfc_var_strlen(a);
731 len_b = gfc_var_strlen(b);
733 if (len_a == -1 || len_b == -1 || len_a == len_b)
734 return true;
735 else
737 gfc_error ("Unequal character lengths (%ld/%ld) in %s at %L",
738 len_a, len_b, name, &a->where);
739 return false;
744 /***** Check functions *****/
746 /* Check subroutine suitable for intrinsics taking a real argument and
747 a kind argument for the result. */
749 static bool
750 check_a_kind (gfc_expr *a, gfc_expr *kind, bt type)
752 if (!type_check (a, 0, BT_REAL))
753 return false;
754 if (!kind_check (kind, 1, type))
755 return false;
757 return true;
761 /* Check subroutine suitable for ceiling, floor and nint. */
763 bool
764 gfc_check_a_ikind (gfc_expr *a, gfc_expr *kind)
766 return check_a_kind (a, kind, BT_INTEGER);
770 /* Check subroutine suitable for aint, anint. */
772 bool
773 gfc_check_a_xkind (gfc_expr *a, gfc_expr *kind)
775 return check_a_kind (a, kind, BT_REAL);
779 bool
780 gfc_check_abs (gfc_expr *a)
782 if (!numeric_check (a, 0))
783 return false;
785 return true;
789 bool
790 gfc_check_achar (gfc_expr *a, gfc_expr *kind)
792 if (!type_check (a, 0, BT_INTEGER))
793 return false;
794 if (!kind_check (kind, 1, BT_CHARACTER))
795 return false;
797 return true;
801 bool
802 gfc_check_access_func (gfc_expr *name, gfc_expr *mode)
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;
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;
816 return true;
820 bool
821 gfc_check_all_any (gfc_expr *mask, gfc_expr *dim)
823 if (!logical_array_check (mask, 0))
824 return false;
826 if (!dim_check (dim, 1, false))
827 return false;
829 if (!dim_rank_check (dim, mask, 0))
830 return false;
832 return true;
836 bool
837 gfc_check_allocated (gfc_expr *array)
839 if (!variable_check (array, 0, false))
840 return false;
841 if (!allocatable_check (array, 0))
842 return false;
844 return true;
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. */
851 bool
852 gfc_check_a_p (gfc_expr *a, gfc_expr *p)
854 if (!int_or_real_check (a, 0))
855 return false;
857 if (a->ts.type != p->ts.type)
859 gfc_error ("%qs and %qs arguments of %qs 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;
866 if (a->ts.kind != p->ts.kind)
868 if (!gfc_notify_std (GFC_STD_GNU, "Different type kinds at %L",
869 &p->where))
870 return false;
873 return true;
877 bool
878 gfc_check_x_yd (gfc_expr *x, gfc_expr *y)
880 if (!double_check (x, 0) || !double_check (y, 1))
881 return false;
883 return true;
887 bool
888 gfc_check_associated (gfc_expr *pointer, gfc_expr *target)
890 symbol_attribute attr1, attr2;
891 int i;
892 bool t;
893 locus *where;
895 where = &pointer->where;
897 if (pointer->expr_type == EXPR_NULL)
898 goto null_arg;
900 attr1 = gfc_expr_attr (pointer);
902 if (!attr1.pointer && !attr1.proc_pointer)
904 gfc_error ("%qs argument of %qs intrinsic at %L must be a POINTER",
905 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
906 &pointer->where);
907 return false;
910 /* F2008, C1242. */
911 if (attr1.pointer && gfc_is_coindexed (pointer))
913 gfc_error ("%qs argument of %qs intrinsic at %L shall not be "
914 "coindexed", gfc_current_intrinsic_arg[0]->name,
915 gfc_current_intrinsic, &pointer->where);
916 return false;
919 /* Target argument is optional. */
920 if (target == NULL)
921 return true;
923 where = &target->where;
924 if (target->expr_type == EXPR_NULL)
925 goto null_arg;
927 if (target->expr_type == EXPR_VARIABLE || target->expr_type == EXPR_FUNCTION)
928 attr2 = gfc_expr_attr (target);
929 else
931 gfc_error ("%qs argument of %qs 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;
938 if (attr1.pointer && !attr2.pointer && !attr2.target)
940 gfc_error ("%qs argument of %qs 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;
946 /* F2008, C1242. */
947 if (attr1.pointer && gfc_is_coindexed (target))
949 gfc_error ("%qs argument of %qs intrinsic at %L shall not be "
950 "coindexed", gfc_current_intrinsic_arg[1]->name,
951 gfc_current_intrinsic, &target->where);
952 return false;
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)
962 for (i = 0; i < target->rank; i++)
963 if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
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;
972 return t;
974 null_arg:
976 gfc_error ("NULL pointer at %L is not permitted as actual argument "
977 "of %qs intrinsic function", where, gfc_current_intrinsic);
978 return false;
983 bool
984 gfc_check_atan_2 (gfc_expr *y, gfc_expr *x)
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;
992 return gfc_check_atan2 (y, x);
996 bool
997 gfc_check_atan2 (gfc_expr *y, gfc_expr *x)
999 if (!type_check (y, 0, BT_REAL))
1000 return false;
1001 if (!same_type_check (y, 0, x, 1))
1002 return false;
1004 return true;
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)
1012 if (!scalar_check (atom, atom_no) || !scalar_check (value, val_no))
1013 return false;
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))
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;
1025 if (!gfc_is_coarray (atom) && !gfc_is_coindexed (atom))
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;
1032 if (atom->ts.type != value->ts.type)
1034 gfc_error_1 ("'%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;
1041 if (stat != NULL)
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;
1052 if (!gfc_notify_std (GFC_STD_F2008_TS, "STAT= argument to %s at %L",
1053 gfc_current_intrinsic, &stat->where))
1054 return false;
1057 return true;
1061 bool
1062 gfc_check_atomic_def (gfc_expr *atom, gfc_expr *value, gfc_expr *stat)
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;
1069 if (!gfc_check_vardef_context (atom, false, false, false, NULL))
1071 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1072 "definable", gfc_current_intrinsic, &atom->where);
1073 return false;
1076 return gfc_check_atomic (atom, 0, value, 1, stat, 2);
1080 bool
1081 gfc_check_atomic_op (gfc_expr *atom, gfc_expr *value, gfc_expr *stat)
1083 if (atom->ts.type != BT_INTEGER || atom->ts.kind != gfc_atomic_int_kind)
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;
1091 return gfc_check_atomic_def (atom, value, stat);
1095 bool
1096 gfc_check_atomic_ref (gfc_expr *value, gfc_expr *atom, gfc_expr *stat)
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;
1103 if (!gfc_check_vardef_context (value, false, false, false, NULL))
1105 gfc_error ("VALUE argument of the %s intrinsic function at %L shall be "
1106 "definable", gfc_current_intrinsic, &value->where);
1107 return false;
1110 return gfc_check_atomic (atom, 1, value, 0, stat, 2);
1114 bool
1115 gfc_check_atomic_cas (gfc_expr *atom, gfc_expr *old, gfc_expr *compare,
1116 gfc_expr *new_val, gfc_expr *stat)
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;
1123 if (!gfc_check_atomic (atom, 0, new_val, 3, stat, 4))
1124 return false;
1126 if (!scalar_check (old, 1) || !scalar_check (compare, 2))
1127 return false;
1129 if (!same_type_check (atom, 0, old, 1))
1130 return false;
1132 if (!same_type_check (atom, 0, compare, 2))
1133 return false;
1135 if (!gfc_check_vardef_context (atom, false, false, false, NULL))
1137 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1138 "definable", gfc_current_intrinsic, &atom->where);
1139 return false;
1142 if (!gfc_check_vardef_context (old, false, false, false, NULL))
1144 gfc_error ("OLD argument of the %s intrinsic function at %L shall be "
1145 "definable", gfc_current_intrinsic, &old->where);
1146 return false;
1149 return true;
1153 bool
1154 gfc_check_atomic_fetch_op (gfc_expr *atom, gfc_expr *value, gfc_expr *old,
1155 gfc_expr *stat)
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;
1162 if (atom->ts.type != BT_INTEGER || atom->ts.kind != gfc_atomic_int_kind)
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;
1170 if (!gfc_check_atomic (atom, 0, value, 1, stat, 3))
1171 return false;
1173 if (!scalar_check (old, 2))
1174 return false;
1176 if (!same_type_check (atom, 0, old, 2))
1177 return false;
1179 if (!gfc_check_vardef_context (atom, false, false, false, NULL))
1181 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1182 "definable", gfc_current_intrinsic, &atom->where);
1183 return false;
1186 if (!gfc_check_vardef_context (old, false, false, false, NULL))
1188 gfc_error ("OLD argument of the %s intrinsic function at %L shall be "
1189 "definable", gfc_current_intrinsic, &old->where);
1190 return false;
1193 return true;
1197 /* BESJN and BESYN functions. */
1199 bool
1200 gfc_check_besn (gfc_expr *n, gfc_expr *x)
1202 if (!type_check (n, 0, BT_INTEGER))
1203 return false;
1204 if (n->expr_type == EXPR_CONSTANT)
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;
1213 if (!type_check (x, 1, BT_REAL))
1214 return false;
1216 return true;
1220 /* Transformational version of the Bessel JN and YN functions. */
1222 bool
1223 gfc_check_bessel_n2 (gfc_expr *n1, gfc_expr *n2, gfc_expr *x)
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;
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;
1239 if (!type_check (x, 2, BT_REAL))
1240 return false;
1241 if (!scalar_check (x, 2))
1242 return false;
1244 return true;
1248 bool
1249 gfc_check_bge_bgt_ble_blt (gfc_expr *i, gfc_expr *j)
1251 if (!type_check (i, 0, BT_INTEGER))
1252 return false;
1254 if (!type_check (j, 1, BT_INTEGER))
1255 return false;
1257 return true;
1261 bool
1262 gfc_check_bitfcn (gfc_expr *i, gfc_expr *pos)
1264 if (!type_check (i, 0, BT_INTEGER))
1265 return false;
1267 if (!type_check (pos, 1, BT_INTEGER))
1268 return false;
1270 if (!nonnegative_check ("pos", pos))
1271 return false;
1273 if (!less_than_bitsize1 ("i", i, "pos", pos, false))
1274 return false;
1276 return true;
1280 bool
1281 gfc_check_char (gfc_expr *i, gfc_expr *kind)
1283 if (!type_check (i, 0, BT_INTEGER))
1284 return false;
1285 if (!kind_check (kind, 1, BT_CHARACTER))
1286 return false;
1288 return true;
1292 bool
1293 gfc_check_chdir (gfc_expr *dir)
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;
1300 return true;
1304 bool
1305 gfc_check_chdir_sub (gfc_expr *dir, gfc_expr *status)
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;
1312 if (status == NULL)
1313 return true;
1315 if (!type_check (status, 1, BT_INTEGER))
1316 return false;
1317 if (!scalar_check (status, 1))
1318 return false;
1320 return true;
1324 bool
1325 gfc_check_chmod (gfc_expr *name, gfc_expr *mode)
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;
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;
1337 return true;
1341 bool
1342 gfc_check_chmod_sub (gfc_expr *name, gfc_expr *mode, gfc_expr *status)
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;
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;
1354 if (status == NULL)
1355 return true;
1357 if (!type_check (status, 2, BT_INTEGER))
1358 return false;
1360 if (!scalar_check (status, 2))
1361 return false;
1363 return true;
1367 bool
1368 gfc_check_cmplx (gfc_expr *x, gfc_expr *y, gfc_expr *kind)
1370 if (!numeric_check (x, 0))
1371 return false;
1373 if (y != NULL)
1375 if (!numeric_check (y, 1))
1376 return false;
1378 if (x->ts.type == BT_COMPLEX)
1380 gfc_error ("%qs argument of %qs 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;
1387 if (y->ts.type == BT_COMPLEX)
1389 gfc_error ("%qs argument of %qs 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;
1398 if (!kind_check (kind, 2, BT_COMPLEX))
1399 return false;
1401 if (!kind && warn_conversion
1402 && x->ts.type == BT_REAL && x->ts.kind > gfc_default_real_kind)
1403 gfc_warning_now (OPT_Wconversion, "Conversion from %s to default-kind "
1404 "COMPLEX(%d) at %L might lose precision, consider using "
1405 "the KIND argument", gfc_typename (&x->ts),
1406 gfc_default_real_kind, &x->where);
1407 else if (y && !kind && warn_conversion
1408 && y->ts.type == BT_REAL && y->ts.kind > gfc_default_real_kind)
1409 gfc_warning_now (OPT_Wconversion, "Conversion from %s to default-kind "
1410 "COMPLEX(%d) at %L might lose precision, consider using "
1411 "the KIND argument", gfc_typename (&y->ts),
1412 gfc_default_real_kind, &y->where);
1413 return true;
1417 static bool
1418 check_co_collective (gfc_expr *a, gfc_expr *image_idx, gfc_expr *stat,
1419 gfc_expr *errmsg, bool co_reduce)
1421 if (!variable_check (a, 0, false))
1422 return false;
1424 if (!gfc_check_vardef_context (a, false, false, false, "argument 'A' with "
1425 "INTENT(INOUT)"))
1426 return false;
1428 /* Fortran 2008, 12.5.2.4, paragraph 18. */
1429 if (gfc_has_vector_subscript (a))
1431 gfc_error ("Argument %<A%> with INTENT(INOUT) at %L of the intrinsic "
1432 "subroutine %s shall not have a vector subscript",
1433 &a->where, gfc_current_intrinsic);
1434 return false;
1437 if (gfc_is_coindexed (a))
1439 gfc_error ("The A argument at %L to the intrinsic %s shall not be "
1440 "coindexed", &a->where, gfc_current_intrinsic);
1441 return false;
1444 if (image_idx != NULL)
1446 if (!type_check (image_idx, co_reduce ? 2 : 1, BT_INTEGER))
1447 return false;
1448 if (!scalar_check (image_idx, co_reduce ? 2 : 1))
1449 return false;
1452 if (stat != NULL)
1454 if (!type_check (stat, co_reduce ? 3 : 2, BT_INTEGER))
1455 return false;
1456 if (!scalar_check (stat, co_reduce ? 3 : 2))
1457 return false;
1458 if (!variable_check (stat, co_reduce ? 3 : 2, false))
1459 return false;
1460 if (stat->ts.kind != 4)
1462 gfc_error ("The stat= argument at %L must be a kind=4 integer "
1463 "variable", &stat->where);
1464 return false;
1468 if (errmsg != NULL)
1470 if (!type_check (errmsg, co_reduce ? 4 : 3, BT_CHARACTER))
1471 return false;
1472 if (!scalar_check (errmsg, co_reduce ? 4 : 3))
1473 return false;
1474 if (!variable_check (errmsg, co_reduce ? 4 : 3, false))
1475 return false;
1476 if (errmsg->ts.kind != 1)
1478 gfc_error ("The errmsg= argument at %L must be a default-kind "
1479 "character variable", &errmsg->where);
1480 return false;
1484 if (flag_coarray == GFC_FCOARRAY_NONE)
1486 gfc_fatal_error ("Coarrays disabled at %L, use %<-fcoarray=%> to enable",
1487 &a->where);
1488 return false;
1491 return true;
1495 bool
1496 gfc_check_co_broadcast (gfc_expr *a, gfc_expr *source_image, gfc_expr *stat,
1497 gfc_expr *errmsg)
1499 if (a->ts.type == BT_CLASS || gfc_expr_attr (a).alloc_comp)
1501 gfc_error ("Support for the A argument at %L which is polymorphic A "
1502 "argument or has allocatable components is not yet "
1503 "implemented", &a->where);
1504 return false;
1506 return check_co_collective (a, source_image, stat, errmsg, false);
1510 bool
1511 gfc_check_co_reduce (gfc_expr *a, gfc_expr *op, gfc_expr *result_image,
1512 gfc_expr *stat, gfc_expr *errmsg)
1514 symbol_attribute attr;
1515 gfc_formal_arglist *formal;
1516 gfc_symbol *sym;
1518 if (a->ts.type == BT_CLASS)
1520 gfc_error ("The A argument at %L of CO_REDUCE shall not be polymorphic",
1521 &a->where);
1522 return false;
1525 if (gfc_expr_attr (a).alloc_comp)
1527 gfc_error ("Support for the A argument at %L with allocatable components"
1528 " is not yet implemented", &a->where);
1529 return false;
1532 if (!check_co_collective (a, result_image, stat, errmsg, true))
1533 return false;
1535 if (!gfc_resolve_expr (op))
1536 return false;
1538 attr = gfc_expr_attr (op);
1539 if (!attr.pure || !attr.function)
1541 gfc_error ("OPERATOR argument at %L must be a PURE function",
1542 &op->where);
1543 return false;
1546 if (attr.intrinsic)
1548 /* None of the intrinsics fulfills the criteria of taking two arguments,
1549 returning the same type and kind as the arguments and being permitted
1550 as actual argument. */
1551 gfc_error ("Intrinsic function %s at %L is not permitted for CO_REDUCE",
1552 op->symtree->n.sym->name, &op->where);
1553 return false;
1556 if (gfc_is_proc_ptr_comp (op))
1558 gfc_component *comp = gfc_get_proc_ptr_comp (op);
1559 sym = comp->ts.interface;
1561 else
1562 sym = op->symtree->n.sym;
1564 formal = sym->formal;
1566 if (!formal || !formal->next || formal->next->next)
1568 gfc_error ("The function passed as OPERATOR at %L shall have two "
1569 "arguments", &op->where);
1570 return false;
1573 if (sym->result->ts.type == BT_UNKNOWN)
1574 gfc_set_default_type (sym->result, 0, NULL);
1576 if (!gfc_compare_types (&a->ts, &sym->result->ts))
1578 gfc_error_1 ("A argument at %L has type %s but the function passed as "
1579 "OPERATOR at %L returns %s",
1580 &a->where, gfc_typename (&a->ts), &op->where,
1581 gfc_typename (&sym->result->ts));
1582 return false;
1584 if (!gfc_compare_types (&a->ts, &formal->sym->ts)
1585 || !gfc_compare_types (&a->ts, &formal->next->sym->ts))
1587 gfc_error ("The function passed as OPERATOR at %L has arguments of type "
1588 "%s and %s but shall have type %s", &op->where,
1589 gfc_typename (&formal->sym->ts),
1590 gfc_typename (&formal->next->sym->ts), gfc_typename (&a->ts));
1591 return false;
1593 if (op->rank || attr.allocatable || attr.pointer || formal->sym->as
1594 || formal->next->sym->as || formal->sym->attr.allocatable
1595 || formal->next->sym->attr.allocatable || formal->sym->attr.pointer
1596 || formal->next->sym->attr.pointer)
1598 gfc_error ("The function passed as OPERATOR at %L shall have scalar "
1599 "nonallocatable nonpointer arguments and return a "
1600 "nonallocatable nonpointer scalar", &op->where);
1601 return false;
1604 if (formal->sym->attr.value != formal->next->sym->attr.value)
1606 gfc_error ("The function passed as OPERATOR at %L shall have the VALUE "
1607 "attribute either for none or both arguments", &op->where);
1608 return false;
1611 if (formal->sym->attr.target != formal->next->sym->attr.target)
1613 gfc_error ("The function passed as OPERATOR at %L shall have the TARGET "
1614 "attribute either for none or both arguments", &op->where);
1615 return false;
1618 if (formal->sym->attr.asynchronous != formal->next->sym->attr.asynchronous)
1620 gfc_error ("The function passed as OPERATOR at %L shall have the "
1621 "ASYNCHRONOUS attribute either for none or both arguments",
1622 &op->where);
1623 return false;
1626 if (formal->sym->attr.optional || formal->next->sym->attr.optional)
1628 gfc_error ("The function passed as OPERATOR at %L shall not have the "
1629 "OPTIONAL attribute for either of the arguments", &op->where);
1630 return false;
1633 if (a->ts.type == BT_CHARACTER)
1635 gfc_charlen *cl;
1636 unsigned long actual_size, formal_size1, formal_size2, result_size;
1638 cl = a->ts.u.cl;
1639 actual_size = cl && cl->length && cl->length->expr_type == EXPR_CONSTANT
1640 ? mpz_get_ui (cl->length->value.integer) : 0;
1642 cl = formal->sym->ts.u.cl;
1643 formal_size1 = cl && cl->length && cl->length->expr_type == EXPR_CONSTANT
1644 ? mpz_get_ui (cl->length->value.integer) : 0;
1646 cl = formal->next->sym->ts.u.cl;
1647 formal_size2 = cl && cl->length && cl->length->expr_type == EXPR_CONSTANT
1648 ? mpz_get_ui (cl->length->value.integer) : 0;
1650 cl = sym->ts.u.cl;
1651 result_size = cl && cl->length && cl->length->expr_type == EXPR_CONSTANT
1652 ? mpz_get_ui (cl->length->value.integer) : 0;
1654 if (actual_size
1655 && ((formal_size1 && actual_size != formal_size1)
1656 || (formal_size2 && actual_size != formal_size2)))
1658 gfc_error_1 ("The character length of the A argument at %L and of the "
1659 "arguments of the OPERATOR at %L shall be the same",
1660 &a->where, &op->where);
1661 return false;
1663 if (actual_size && result_size && actual_size != result_size)
1665 gfc_error_1 ("The character length of the A argument at %L and of the "
1666 "function result of the OPERATOR at %L shall be the same",
1667 &a->where, &op->where);
1668 return false;
1672 return true;
1676 bool
1677 gfc_check_co_minmax (gfc_expr *a, gfc_expr *result_image, gfc_expr *stat,
1678 gfc_expr *errmsg)
1680 if (a->ts.type != BT_INTEGER && a->ts.type != BT_REAL
1681 && a->ts.type != BT_CHARACTER)
1683 gfc_error_1 ("'%s' argument of '%s' intrinsic at %L shall be of type "
1684 "integer, real or character",
1685 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
1686 &a->where);
1687 return false;
1689 return check_co_collective (a, result_image, stat, errmsg, false);
1693 bool
1694 gfc_check_co_sum (gfc_expr *a, gfc_expr *result_image, gfc_expr *stat,
1695 gfc_expr *errmsg)
1697 if (!numeric_check (a, 0))
1698 return false;
1699 return check_co_collective (a, result_image, stat, errmsg, false);
1703 bool
1704 gfc_check_complex (gfc_expr *x, gfc_expr *y)
1706 if (!int_or_real_check (x, 0))
1707 return false;
1708 if (!scalar_check (x, 0))
1709 return false;
1711 if (!int_or_real_check (y, 1))
1712 return false;
1713 if (!scalar_check (y, 1))
1714 return false;
1716 return true;
1720 bool
1721 gfc_check_count (gfc_expr *mask, gfc_expr *dim, gfc_expr *kind)
1723 if (!logical_array_check (mask, 0))
1724 return false;
1725 if (!dim_check (dim, 1, false))
1726 return false;
1727 if (!dim_rank_check (dim, mask, 0))
1728 return false;
1729 if (!kind_check (kind, 2, BT_INTEGER))
1730 return false;
1731 if (kind && !gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
1732 "with KIND argument at %L",
1733 gfc_current_intrinsic, &kind->where))
1734 return false;
1736 return true;
1740 bool
1741 gfc_check_cshift (gfc_expr *array, gfc_expr *shift, gfc_expr *dim)
1743 if (!array_check (array, 0))
1744 return false;
1746 if (!type_check (shift, 1, BT_INTEGER))
1747 return false;
1749 if (!dim_check (dim, 2, true))
1750 return false;
1752 if (!dim_rank_check (dim, array, false))
1753 return false;
1755 if (array->rank == 1 || shift->rank == 0)
1757 if (!scalar_check (shift, 1))
1758 return false;
1760 else if (shift->rank == array->rank - 1)
1762 int d;
1763 if (!dim)
1764 d = 1;
1765 else if (dim->expr_type == EXPR_CONSTANT)
1766 gfc_extract_int (dim, &d);
1767 else
1768 d = -1;
1770 if (d > 0)
1772 int i, j;
1773 for (i = 0, j = 0; i < array->rank; i++)
1774 if (i != d - 1)
1776 if (!identical_dimen_shape (array, i, shift, j))
1778 gfc_error ("%qs argument of %qs intrinsic at %L has "
1779 "invalid shape in dimension %d (%ld/%ld)",
1780 gfc_current_intrinsic_arg[1]->name,
1781 gfc_current_intrinsic, &shift->where, i + 1,
1782 mpz_get_si (array->shape[i]),
1783 mpz_get_si (shift->shape[j]));
1784 return false;
1787 j += 1;
1791 else
1793 gfc_error ("%qs argument of intrinsic %qs at %L of must have rank "
1794 "%d or be a scalar", gfc_current_intrinsic_arg[1]->name,
1795 gfc_current_intrinsic, &shift->where, array->rank - 1);
1796 return false;
1799 return true;
1803 bool
1804 gfc_check_ctime (gfc_expr *time)
1806 if (!scalar_check (time, 0))
1807 return false;
1809 if (!type_check (time, 0, BT_INTEGER))
1810 return false;
1812 return true;
1816 bool gfc_check_datan2 (gfc_expr *y, gfc_expr *x)
1818 if (!double_check (y, 0) || !double_check (x, 1))
1819 return false;
1821 return true;
1824 bool
1825 gfc_check_dcmplx (gfc_expr *x, gfc_expr *y)
1827 if (!numeric_check (x, 0))
1828 return false;
1830 if (y != NULL)
1832 if (!numeric_check (y, 1))
1833 return false;
1835 if (x->ts.type == BT_COMPLEX)
1837 gfc_error ("%qs argument of %qs intrinsic at %L must not be "
1838 "present if %<x%> is COMPLEX",
1839 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1840 &y->where);
1841 return false;
1844 if (y->ts.type == BT_COMPLEX)
1846 gfc_error ("%qs argument of %qs intrinsic at %L must have a type "
1847 "of either REAL or INTEGER",
1848 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1849 &y->where);
1850 return false;
1854 return true;
1858 bool
1859 gfc_check_dble (gfc_expr *x)
1861 if (!numeric_check (x, 0))
1862 return false;
1864 return true;
1868 bool
1869 gfc_check_digits (gfc_expr *x)
1871 if (!int_or_real_check (x, 0))
1872 return false;
1874 return true;
1878 bool
1879 gfc_check_dot_product (gfc_expr *vector_a, gfc_expr *vector_b)
1881 switch (vector_a->ts.type)
1883 case BT_LOGICAL:
1884 if (!type_check (vector_b, 1, BT_LOGICAL))
1885 return false;
1886 break;
1888 case BT_INTEGER:
1889 case BT_REAL:
1890 case BT_COMPLEX:
1891 if (!numeric_check (vector_b, 1))
1892 return false;
1893 break;
1895 default:
1896 gfc_error ("%qs argument of %qs intrinsic at %L must be numeric "
1897 "or LOGICAL", gfc_current_intrinsic_arg[0]->name,
1898 gfc_current_intrinsic, &vector_a->where);
1899 return false;
1902 if (!rank_check (vector_a, 0, 1))
1903 return false;
1905 if (!rank_check (vector_b, 1, 1))
1906 return false;
1908 if (! identical_dimen_shape (vector_a, 0, vector_b, 0))
1910 gfc_error ("Different shape for arguments %qs and %qs at %L for "
1911 "intrinsic %<dot_product%>",
1912 gfc_current_intrinsic_arg[0]->name,
1913 gfc_current_intrinsic_arg[1]->name, &vector_a->where);
1914 return false;
1917 return true;
1921 bool
1922 gfc_check_dprod (gfc_expr *x, gfc_expr *y)
1924 if (!type_check (x, 0, BT_REAL)
1925 || !type_check (y, 1, BT_REAL))
1926 return false;
1928 if (x->ts.kind != gfc_default_real_kind)
1930 gfc_error ("%qs argument of %qs intrinsic at %L must be default "
1931 "real", gfc_current_intrinsic_arg[0]->name,
1932 gfc_current_intrinsic, &x->where);
1933 return false;
1936 if (y->ts.kind != gfc_default_real_kind)
1938 gfc_error ("%qs argument of %qs intrinsic at %L must be default "
1939 "real", gfc_current_intrinsic_arg[1]->name,
1940 gfc_current_intrinsic, &y->where);
1941 return false;
1944 return true;
1948 bool
1949 gfc_check_dshift (gfc_expr *i, gfc_expr *j, gfc_expr *shift)
1951 if (!type_check (i, 0, BT_INTEGER))
1952 return false;
1954 if (!type_check (j, 1, BT_INTEGER))
1955 return false;
1957 if (i->is_boz && j->is_boz)
1959 gfc_error_1 ("'I' at %L and 'J' at %L cannot both be BOZ literal "
1960 "constants", &i->where, &j->where);
1961 return false;
1964 if (!i->is_boz && !j->is_boz && !same_type_check (i, 0, j, 1))
1965 return false;
1967 if (!type_check (shift, 2, BT_INTEGER))
1968 return false;
1970 if (!nonnegative_check ("SHIFT", shift))
1971 return false;
1973 if (i->is_boz)
1975 if (!less_than_bitsize1 ("J", j, "SHIFT", shift, true))
1976 return false;
1977 i->ts.kind = j->ts.kind;
1979 else
1981 if (!less_than_bitsize1 ("I", i, "SHIFT", shift, true))
1982 return false;
1983 j->ts.kind = i->ts.kind;
1986 return true;
1990 bool
1991 gfc_check_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary,
1992 gfc_expr *dim)
1994 if (!array_check (array, 0))
1995 return false;
1997 if (!type_check (shift, 1, BT_INTEGER))
1998 return false;
2000 if (!dim_check (dim, 3, true))
2001 return false;
2003 if (!dim_rank_check (dim, array, false))
2004 return false;
2006 if (array->rank == 1 || shift->rank == 0)
2008 if (!scalar_check (shift, 1))
2009 return false;
2011 else if (shift->rank == array->rank - 1)
2013 int d;
2014 if (!dim)
2015 d = 1;
2016 else if (dim->expr_type == EXPR_CONSTANT)
2017 gfc_extract_int (dim, &d);
2018 else
2019 d = -1;
2021 if (d > 0)
2023 int i, j;
2024 for (i = 0, j = 0; i < array->rank; i++)
2025 if (i != d - 1)
2027 if (!identical_dimen_shape (array, i, shift, j))
2029 gfc_error ("%qs argument of %qs intrinsic at %L has "
2030 "invalid shape in dimension %d (%ld/%ld)",
2031 gfc_current_intrinsic_arg[1]->name,
2032 gfc_current_intrinsic, &shift->where, i + 1,
2033 mpz_get_si (array->shape[i]),
2034 mpz_get_si (shift->shape[j]));
2035 return false;
2038 j += 1;
2042 else
2044 gfc_error ("%qs argument of intrinsic %qs at %L of must have rank "
2045 "%d or be a scalar", gfc_current_intrinsic_arg[1]->name,
2046 gfc_current_intrinsic, &shift->where, array->rank - 1);
2047 return false;
2050 if (boundary != NULL)
2052 if (!same_type_check (array, 0, boundary, 2))
2053 return false;
2055 if (array->rank == 1 || boundary->rank == 0)
2057 if (!scalar_check (boundary, 2))
2058 return false;
2060 else if (boundary->rank == array->rank - 1)
2062 if (!gfc_check_conformance (shift, boundary,
2063 "arguments '%s' and '%s' for "
2064 "intrinsic %s",
2065 gfc_current_intrinsic_arg[1]->name,
2066 gfc_current_intrinsic_arg[2]->name,
2067 gfc_current_intrinsic))
2068 return false;
2070 else
2072 gfc_error ("%qs argument of intrinsic %qs at %L of must have "
2073 "rank %d or be a scalar",
2074 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
2075 &shift->where, array->rank - 1);
2076 return false;
2080 return true;
2083 bool
2084 gfc_check_float (gfc_expr *a)
2086 if (!type_check (a, 0, BT_INTEGER))
2087 return false;
2089 if ((a->ts.kind != gfc_default_integer_kind)
2090 && !gfc_notify_std (GFC_STD_GNU, "non-default INTEGER "
2091 "kind argument to %s intrinsic at %L",
2092 gfc_current_intrinsic, &a->where))
2093 return false;
2095 return true;
2098 /* A single complex argument. */
2100 bool
2101 gfc_check_fn_c (gfc_expr *a)
2103 if (!type_check (a, 0, BT_COMPLEX))
2104 return false;
2106 return true;
2109 /* A single real argument. */
2111 bool
2112 gfc_check_fn_r (gfc_expr *a)
2114 if (!type_check (a, 0, BT_REAL))
2115 return false;
2117 return true;
2120 /* A single double argument. */
2122 bool
2123 gfc_check_fn_d (gfc_expr *a)
2125 if (!double_check (a, 0))
2126 return false;
2128 return true;
2131 /* A single real or complex argument. */
2133 bool
2134 gfc_check_fn_rc (gfc_expr *a)
2136 if (!real_or_complex_check (a, 0))
2137 return false;
2139 return true;
2143 bool
2144 gfc_check_fn_rc2008 (gfc_expr *a)
2146 if (!real_or_complex_check (a, 0))
2147 return false;
2149 if (a->ts.type == BT_COMPLEX
2150 && !gfc_notify_std (GFC_STD_F2008, "COMPLEX argument %qs "
2151 "of %qs intrinsic at %L",
2152 gfc_current_intrinsic_arg[0]->name,
2153 gfc_current_intrinsic, &a->where))
2154 return false;
2156 return true;
2160 bool
2161 gfc_check_fnum (gfc_expr *unit)
2163 if (!type_check (unit, 0, BT_INTEGER))
2164 return false;
2166 if (!scalar_check (unit, 0))
2167 return false;
2169 return true;
2173 bool
2174 gfc_check_huge (gfc_expr *x)
2176 if (!int_or_real_check (x, 0))
2177 return false;
2179 return true;
2183 bool
2184 gfc_check_hypot (gfc_expr *x, gfc_expr *y)
2186 if (!type_check (x, 0, BT_REAL))
2187 return false;
2188 if (!same_type_check (x, 0, y, 1))
2189 return false;
2191 return true;
2195 /* Check that the single argument is an integer. */
2197 bool
2198 gfc_check_i (gfc_expr *i)
2200 if (!type_check (i, 0, BT_INTEGER))
2201 return false;
2203 return true;
2207 bool
2208 gfc_check_iand (gfc_expr *i, gfc_expr *j)
2210 if (!type_check (i, 0, BT_INTEGER))
2211 return false;
2213 if (!type_check (j, 1, BT_INTEGER))
2214 return false;
2216 if (i->ts.kind != j->ts.kind)
2218 if (!gfc_notify_std (GFC_STD_GNU, "Different type kinds at %L",
2219 &i->where))
2220 return false;
2223 return true;
2227 bool
2228 gfc_check_ibits (gfc_expr *i, gfc_expr *pos, gfc_expr *len)
2230 if (!type_check (i, 0, BT_INTEGER))
2231 return false;
2233 if (!type_check (pos, 1, BT_INTEGER))
2234 return false;
2236 if (!type_check (len, 2, BT_INTEGER))
2237 return false;
2239 if (!nonnegative_check ("pos", pos))
2240 return false;
2242 if (!nonnegative_check ("len", len))
2243 return false;
2245 if (!less_than_bitsize2 ("i", i, "pos", pos, "len", len))
2246 return false;
2248 return true;
2252 bool
2253 gfc_check_ichar_iachar (gfc_expr *c, gfc_expr *kind)
2255 int i;
2257 if (!type_check (c, 0, BT_CHARACTER))
2258 return false;
2260 if (!kind_check (kind, 1, BT_INTEGER))
2261 return false;
2263 if (kind && !gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
2264 "with KIND argument at %L",
2265 gfc_current_intrinsic, &kind->where))
2266 return false;
2268 if (c->expr_type == EXPR_VARIABLE || c->expr_type == EXPR_SUBSTRING)
2270 gfc_expr *start;
2271 gfc_expr *end;
2272 gfc_ref *ref;
2274 /* Substring references don't have the charlength set. */
2275 ref = c->ref;
2276 while (ref && ref->type != REF_SUBSTRING)
2277 ref = ref->next;
2279 gcc_assert (ref == NULL || ref->type == REF_SUBSTRING);
2281 if (!ref)
2283 /* Check that the argument is length one. Non-constant lengths
2284 can't be checked here, so assume they are ok. */
2285 if (c->ts.u.cl && c->ts.u.cl->length)
2287 /* If we already have a length for this expression then use it. */
2288 if (c->ts.u.cl->length->expr_type != EXPR_CONSTANT)
2289 return true;
2290 i = mpz_get_si (c->ts.u.cl->length->value.integer);
2292 else
2293 return true;
2295 else
2297 start = ref->u.ss.start;
2298 end = ref->u.ss.end;
2300 gcc_assert (start);
2301 if (end == NULL || end->expr_type != EXPR_CONSTANT
2302 || start->expr_type != EXPR_CONSTANT)
2303 return true;
2305 i = mpz_get_si (end->value.integer) + 1
2306 - mpz_get_si (start->value.integer);
2309 else
2310 return true;
2312 if (i != 1)
2314 gfc_error ("Argument of %s at %L must be of length one",
2315 gfc_current_intrinsic, &c->where);
2316 return false;
2319 return true;
2323 bool
2324 gfc_check_idnint (gfc_expr *a)
2326 if (!double_check (a, 0))
2327 return false;
2329 return true;
2333 bool
2334 gfc_check_ieor (gfc_expr *i, gfc_expr *j)
2336 if (!type_check (i, 0, BT_INTEGER))
2337 return false;
2339 if (!type_check (j, 1, BT_INTEGER))
2340 return false;
2342 if (i->ts.kind != j->ts.kind)
2344 if (!gfc_notify_std (GFC_STD_GNU, "Different type kinds at %L",
2345 &i->where))
2346 return false;
2349 return true;
2353 bool
2354 gfc_check_index (gfc_expr *string, gfc_expr *substring, gfc_expr *back,
2355 gfc_expr *kind)
2357 if (!type_check (string, 0, BT_CHARACTER)
2358 || !type_check (substring, 1, BT_CHARACTER))
2359 return false;
2361 if (back != NULL && !type_check (back, 2, BT_LOGICAL))
2362 return false;
2364 if (!kind_check (kind, 3, BT_INTEGER))
2365 return false;
2366 if (kind && !gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
2367 "with KIND argument at %L",
2368 gfc_current_intrinsic, &kind->where))
2369 return false;
2371 if (string->ts.kind != substring->ts.kind)
2373 gfc_error ("%qs argument of %qs intrinsic at %L must be the same "
2374 "kind as %qs", gfc_current_intrinsic_arg[1]->name,
2375 gfc_current_intrinsic, &substring->where,
2376 gfc_current_intrinsic_arg[0]->name);
2377 return false;
2380 return true;
2384 bool
2385 gfc_check_int (gfc_expr *x, gfc_expr *kind)
2387 if (!numeric_check (x, 0))
2388 return false;
2390 if (!kind_check (kind, 1, BT_INTEGER))
2391 return false;
2393 return true;
2397 bool
2398 gfc_check_intconv (gfc_expr *x)
2400 if (!numeric_check (x, 0))
2401 return false;
2403 return true;
2407 bool
2408 gfc_check_ior (gfc_expr *i, gfc_expr *j)
2410 if (!type_check (i, 0, BT_INTEGER))
2411 return false;
2413 if (!type_check (j, 1, BT_INTEGER))
2414 return false;
2416 if (i->ts.kind != j->ts.kind)
2418 if (!gfc_notify_std (GFC_STD_GNU, "Different type kinds at %L",
2419 &i->where))
2420 return false;
2423 return true;
2427 bool
2428 gfc_check_ishft (gfc_expr *i, gfc_expr *shift)
2430 if (!type_check (i, 0, BT_INTEGER)
2431 || !type_check (shift, 1, BT_INTEGER))
2432 return false;
2434 if (!less_than_bitsize1 ("I", i, NULL, shift, true))
2435 return false;
2437 return true;
2441 bool
2442 gfc_check_ishftc (gfc_expr *i, gfc_expr *shift, gfc_expr *size)
2444 if (!type_check (i, 0, BT_INTEGER)
2445 || !type_check (shift, 1, BT_INTEGER))
2446 return false;
2448 if (size != NULL)
2450 int i2, i3;
2452 if (!type_check (size, 2, BT_INTEGER))
2453 return false;
2455 if (!less_than_bitsize1 ("I", i, "SIZE", size, true))
2456 return false;
2458 if (size->expr_type == EXPR_CONSTANT)
2460 gfc_extract_int (size, &i3);
2461 if (i3 <= 0)
2463 gfc_error ("SIZE at %L must be positive", &size->where);
2464 return false;
2467 if (shift->expr_type == EXPR_CONSTANT)
2469 gfc_extract_int (shift, &i2);
2470 if (i2 < 0)
2471 i2 = -i2;
2473 if (i2 > i3)
2475 gfc_error_1 ("The absolute value of SHIFT at %L must be less "
2476 "than or equal to SIZE at %L", &shift->where,
2477 &size->where);
2478 return false;
2483 else if (!less_than_bitsize1 ("I", i, NULL, shift, true))
2484 return false;
2486 return true;
2490 bool
2491 gfc_check_kill (gfc_expr *pid, gfc_expr *sig)
2493 if (!type_check (pid, 0, BT_INTEGER))
2494 return false;
2496 if (!type_check (sig, 1, BT_INTEGER))
2497 return false;
2499 return true;
2503 bool
2504 gfc_check_kill_sub (gfc_expr *pid, gfc_expr *sig, gfc_expr *status)
2506 if (!type_check (pid, 0, BT_INTEGER))
2507 return false;
2509 if (!scalar_check (pid, 0))
2510 return false;
2512 if (!type_check (sig, 1, BT_INTEGER))
2513 return false;
2515 if (!scalar_check (sig, 1))
2516 return false;
2518 if (status == NULL)
2519 return true;
2521 if (!type_check (status, 2, BT_INTEGER))
2522 return false;
2524 if (!scalar_check (status, 2))
2525 return false;
2527 return true;
2531 bool
2532 gfc_check_kind (gfc_expr *x)
2534 if (x->ts.type == BT_DERIVED || x->ts.type == BT_CLASS)
2536 gfc_error ("%qs argument of %qs intrinsic at %L must be of "
2537 "intrinsic type", gfc_current_intrinsic_arg[0]->name,
2538 gfc_current_intrinsic, &x->where);
2539 return false;
2541 if (x->ts.type == BT_PROCEDURE)
2543 gfc_error ("%qs argument of %qs intrinsic at %L must be a data entity",
2544 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
2545 &x->where);
2546 return false;
2549 return true;
2553 bool
2554 gfc_check_lbound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
2556 if (!array_check (array, 0))
2557 return false;
2559 if (!dim_check (dim, 1, false))
2560 return false;
2562 if (!dim_rank_check (dim, array, 1))
2563 return false;
2565 if (!kind_check (kind, 2, BT_INTEGER))
2566 return false;
2567 if (kind && !gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
2568 "with KIND argument at %L",
2569 gfc_current_intrinsic, &kind->where))
2570 return false;
2572 return true;
2576 bool
2577 gfc_check_lcobound (gfc_expr *coarray, gfc_expr *dim, gfc_expr *kind)
2579 if (flag_coarray == GFC_FCOARRAY_NONE)
2581 gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable");
2582 return false;
2585 if (!coarray_check (coarray, 0))
2586 return false;
2588 if (dim != NULL)
2590 if (!dim_check (dim, 1, false))
2591 return false;
2593 if (!dim_corank_check (dim, coarray))
2594 return false;
2597 if (!kind_check (kind, 2, BT_INTEGER))
2598 return false;
2600 return true;
2604 bool
2605 gfc_check_len_lentrim (gfc_expr *s, gfc_expr *kind)
2607 if (!type_check (s, 0, BT_CHARACTER))
2608 return false;
2610 if (!kind_check (kind, 1, BT_INTEGER))
2611 return false;
2612 if (kind && !gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
2613 "with KIND argument at %L",
2614 gfc_current_intrinsic, &kind->where))
2615 return false;
2617 return true;
2621 bool
2622 gfc_check_lge_lgt_lle_llt (gfc_expr *a, gfc_expr *b)
2624 if (!type_check (a, 0, BT_CHARACTER))
2625 return false;
2626 if (!kind_value_check (a, 0, gfc_default_character_kind))
2627 return false;
2629 if (!type_check (b, 1, BT_CHARACTER))
2630 return false;
2631 if (!kind_value_check (b, 1, gfc_default_character_kind))
2632 return false;
2634 return true;
2638 bool
2639 gfc_check_link (gfc_expr *path1, gfc_expr *path2)
2641 if (!type_check (path1, 0, BT_CHARACTER))
2642 return false;
2643 if (!kind_value_check (path1, 0, gfc_default_character_kind))
2644 return false;
2646 if (!type_check (path2, 1, BT_CHARACTER))
2647 return false;
2648 if (!kind_value_check (path2, 1, gfc_default_character_kind))
2649 return false;
2651 return true;
2655 bool
2656 gfc_check_link_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
2658 if (!type_check (path1, 0, BT_CHARACTER))
2659 return false;
2660 if (!kind_value_check (path1, 0, gfc_default_character_kind))
2661 return false;
2663 if (!type_check (path2, 1, BT_CHARACTER))
2664 return false;
2665 if (!kind_value_check (path2, 0, gfc_default_character_kind))
2666 return false;
2668 if (status == NULL)
2669 return true;
2671 if (!type_check (status, 2, BT_INTEGER))
2672 return false;
2674 if (!scalar_check (status, 2))
2675 return false;
2677 return true;
2681 bool
2682 gfc_check_loc (gfc_expr *expr)
2684 return variable_check (expr, 0, true);
2688 bool
2689 gfc_check_symlnk (gfc_expr *path1, gfc_expr *path2)
2691 if (!type_check (path1, 0, BT_CHARACTER))
2692 return false;
2693 if (!kind_value_check (path1, 0, gfc_default_character_kind))
2694 return false;
2696 if (!type_check (path2, 1, BT_CHARACTER))
2697 return false;
2698 if (!kind_value_check (path2, 1, gfc_default_character_kind))
2699 return false;
2701 return true;
2705 bool
2706 gfc_check_symlnk_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
2708 if (!type_check (path1, 0, BT_CHARACTER))
2709 return false;
2710 if (!kind_value_check (path1, 0, gfc_default_character_kind))
2711 return false;
2713 if (!type_check (path2, 1, BT_CHARACTER))
2714 return false;
2715 if (!kind_value_check (path2, 1, gfc_default_character_kind))
2716 return false;
2718 if (status == NULL)
2719 return true;
2721 if (!type_check (status, 2, BT_INTEGER))
2722 return false;
2724 if (!scalar_check (status, 2))
2725 return false;
2727 return true;
2731 bool
2732 gfc_check_logical (gfc_expr *a, gfc_expr *kind)
2734 if (!type_check (a, 0, BT_LOGICAL))
2735 return false;
2736 if (!kind_check (kind, 1, BT_LOGICAL))
2737 return false;
2739 return true;
2743 /* Min/max family. */
2745 static bool
2746 min_max_args (gfc_actual_arglist *args)
2748 gfc_actual_arglist *arg;
2749 int i, j, nargs, *nlabels, nlabelless;
2750 bool a1 = false, a2 = false;
2752 if (args == NULL || args->next == NULL)
2754 gfc_error ("Intrinsic %qs at %L must have at least two arguments",
2755 gfc_current_intrinsic, gfc_current_intrinsic_where);
2756 return false;
2759 if (!args->name)
2760 a1 = true;
2762 if (!args->next->name)
2763 a2 = true;
2765 nargs = 0;
2766 for (arg = args; arg; arg = arg->next)
2767 if (arg->name)
2768 nargs++;
2770 if (nargs == 0)
2771 return true;
2773 /* Note: Having a keywordless argument after an "arg=" is checked before. */
2774 nlabelless = 0;
2775 nlabels = XALLOCAVEC (int, nargs);
2776 for (arg = args, i = 0; arg; arg = arg->next, i++)
2777 if (arg->name)
2779 int n;
2780 char *endp;
2782 if (arg->name[0] != 'a' || arg->name[1] < '1' || arg->name[1] > '9')
2783 goto unknown;
2784 n = strtol (&arg->name[1], &endp, 10);
2785 if (endp[0] != '\0')
2786 goto unknown;
2787 if (n <= 0)
2788 goto unknown;
2789 if (n <= nlabelless)
2790 goto duplicate;
2791 nlabels[i] = n;
2792 if (n == 1)
2793 a1 = true;
2794 if (n == 2)
2795 a2 = true;
2797 else
2798 nlabelless++;
2800 if (!a1 || !a2)
2802 gfc_error ("Missing %qs argument to the %s intrinsic at %L",
2803 !a1 ? "a1" : "a2", gfc_current_intrinsic,
2804 gfc_current_intrinsic_where);
2805 return false;
2808 /* Check for duplicates. */
2809 for (i = 0; i < nargs; i++)
2810 for (j = i + 1; j < nargs; j++)
2811 if (nlabels[i] == nlabels[j])
2812 goto duplicate;
2814 return true;
2816 duplicate:
2817 gfc_error ("Duplicate argument %qs at %L to intrinsic %s", arg->name,
2818 &arg->expr->where, gfc_current_intrinsic);
2819 return false;
2821 unknown:
2822 gfc_error ("Unknown argument %qs at %L to intrinsic %s", arg->name,
2823 &arg->expr->where, gfc_current_intrinsic);
2824 return false;
2828 static bool
2829 check_rest (bt type, int kind, gfc_actual_arglist *arglist)
2831 gfc_actual_arglist *arg, *tmp;
2832 gfc_expr *x;
2833 int m, n;
2835 if (!min_max_args (arglist))
2836 return false;
2838 for (arg = arglist, n=1; arg; arg = arg->next, n++)
2840 x = arg->expr;
2841 if (x->ts.type != type || x->ts.kind != kind)
2843 if (x->ts.type == type)
2845 if (!gfc_notify_std (GFC_STD_GNU, "Different type "
2846 "kinds at %L", &x->where))
2847 return false;
2849 else
2851 gfc_error ("%<a%d%> argument of %qs intrinsic at %L must be "
2852 "%s(%d)", n, gfc_current_intrinsic, &x->where,
2853 gfc_basic_typename (type), kind);
2854 return false;
2858 for (tmp = arglist, m=1; tmp != arg; tmp = tmp->next, m++)
2859 if (!gfc_check_conformance (tmp->expr, x,
2860 "arguments 'a%d' and 'a%d' for "
2861 "intrinsic '%s'", m, n,
2862 gfc_current_intrinsic))
2863 return false;
2866 return true;
2870 bool
2871 gfc_check_min_max (gfc_actual_arglist *arg)
2873 gfc_expr *x;
2875 if (!min_max_args (arg))
2876 return false;
2878 x = arg->expr;
2880 if (x->ts.type == BT_CHARACTER)
2882 if (!gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
2883 "with CHARACTER argument at %L",
2884 gfc_current_intrinsic, &x->where))
2885 return false;
2887 else if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
2889 gfc_error ("%<a1%> argument of %qs intrinsic at %L must be INTEGER, "
2890 "REAL or CHARACTER", gfc_current_intrinsic, &x->where);
2891 return false;
2894 return check_rest (x->ts.type, x->ts.kind, arg);
2898 bool
2899 gfc_check_min_max_integer (gfc_actual_arglist *arg)
2901 return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
2905 bool
2906 gfc_check_min_max_real (gfc_actual_arglist *arg)
2908 return check_rest (BT_REAL, gfc_default_real_kind, arg);
2912 bool
2913 gfc_check_min_max_double (gfc_actual_arglist *arg)
2915 return check_rest (BT_REAL, gfc_default_double_kind, arg);
2919 /* End of min/max family. */
2921 bool
2922 gfc_check_malloc (gfc_expr *size)
2924 if (!type_check (size, 0, BT_INTEGER))
2925 return false;
2927 if (!scalar_check (size, 0))
2928 return false;
2930 return true;
2934 bool
2935 gfc_check_matmul (gfc_expr *matrix_a, gfc_expr *matrix_b)
2937 if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
2939 gfc_error ("%qs argument of %qs intrinsic at %L must be numeric "
2940 "or LOGICAL", gfc_current_intrinsic_arg[0]->name,
2941 gfc_current_intrinsic, &matrix_a->where);
2942 return false;
2945 if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
2947 gfc_error ("%qs argument of %qs intrinsic at %L must be numeric "
2948 "or LOGICAL", gfc_current_intrinsic_arg[1]->name,
2949 gfc_current_intrinsic, &matrix_b->where);
2950 return false;
2953 if ((matrix_a->ts.type == BT_LOGICAL && gfc_numeric_ts (&matrix_b->ts))
2954 || (gfc_numeric_ts (&matrix_a->ts) && matrix_b->ts.type == BT_LOGICAL))
2956 gfc_error ("Argument types of %qs intrinsic at %L must match (%s/%s)",
2957 gfc_current_intrinsic, &matrix_a->where,
2958 gfc_typename(&matrix_a->ts), gfc_typename(&matrix_b->ts));
2959 return false;
2962 switch (matrix_a->rank)
2964 case 1:
2965 if (!rank_check (matrix_b, 1, 2))
2966 return false;
2967 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
2968 if (!identical_dimen_shape (matrix_a, 0, matrix_b, 0))
2970 gfc_error ("Different shape on dimension 1 for arguments %qs "
2971 "and %qs at %L for intrinsic matmul",
2972 gfc_current_intrinsic_arg[0]->name,
2973 gfc_current_intrinsic_arg[1]->name, &matrix_a->where);
2974 return false;
2976 break;
2978 case 2:
2979 if (matrix_b->rank != 2)
2981 if (!rank_check (matrix_b, 1, 1))
2982 return false;
2984 /* matrix_b has rank 1 or 2 here. Common check for the cases
2985 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
2986 - matrix_a has shape (n,m) and matrix_b has shape (m). */
2987 if (!identical_dimen_shape (matrix_a, 1, matrix_b, 0))
2989 gfc_error ("Different shape on dimension 2 for argument %qs and "
2990 "dimension 1 for argument %qs at %L for intrinsic "
2991 "matmul", gfc_current_intrinsic_arg[0]->name,
2992 gfc_current_intrinsic_arg[1]->name, &matrix_a->where);
2993 return false;
2995 break;
2997 default:
2998 gfc_error ("%qs argument of %qs intrinsic at %L must be of rank "
2999 "1 or 2", gfc_current_intrinsic_arg[0]->name,
3000 gfc_current_intrinsic, &matrix_a->where);
3001 return false;
3004 return true;
3008 /* Whoever came up with this interface was probably on something.
3009 The possibilities for the occupation of the second and third
3010 parameters are:
3012 Arg #2 Arg #3
3013 NULL NULL
3014 DIM NULL
3015 MASK NULL
3016 NULL MASK minloc(array, mask=m)
3017 DIM MASK
3019 I.e. in the case of minloc(array,mask), mask will be in the second
3020 position of the argument list and we'll have to fix that up. */
3022 bool
3023 gfc_check_minloc_maxloc (gfc_actual_arglist *ap)
3025 gfc_expr *a, *m, *d;
3027 a = ap->expr;
3028 if (!int_or_real_check (a, 0) || !array_check (a, 0))
3029 return false;
3031 d = ap->next->expr;
3032 m = ap->next->next->expr;
3034 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
3035 && ap->next->name == NULL)
3037 m = d;
3038 d = NULL;
3039 ap->next->expr = NULL;
3040 ap->next->next->expr = m;
3043 if (!dim_check (d, 1, false))
3044 return false;
3046 if (!dim_rank_check (d, a, 0))
3047 return false;
3049 if (m != NULL && !type_check (m, 2, BT_LOGICAL))
3050 return false;
3052 if (m != NULL
3053 && !gfc_check_conformance (a, m,
3054 "arguments '%s' and '%s' for intrinsic %s",
3055 gfc_current_intrinsic_arg[0]->name,
3056 gfc_current_intrinsic_arg[2]->name,
3057 gfc_current_intrinsic))
3058 return false;
3060 return true;
3064 /* Similar to minloc/maxloc, the argument list might need to be
3065 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
3066 difference is that MINLOC/MAXLOC take an additional KIND argument.
3067 The possibilities are:
3069 Arg #2 Arg #3
3070 NULL NULL
3071 DIM NULL
3072 MASK NULL
3073 NULL MASK minval(array, mask=m)
3074 DIM MASK
3076 I.e. in the case of minval(array,mask), mask will be in the second
3077 position of the argument list and we'll have to fix that up. */
3079 static bool
3080 check_reduction (gfc_actual_arglist *ap)
3082 gfc_expr *a, *m, *d;
3084 a = ap->expr;
3085 d = ap->next->expr;
3086 m = ap->next->next->expr;
3088 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
3089 && ap->next->name == NULL)
3091 m = d;
3092 d = NULL;
3093 ap->next->expr = NULL;
3094 ap->next->next->expr = m;
3097 if (!dim_check (d, 1, false))
3098 return false;
3100 if (!dim_rank_check (d, a, 0))
3101 return false;
3103 if (m != NULL && !type_check (m, 2, BT_LOGICAL))
3104 return false;
3106 if (m != NULL
3107 && !gfc_check_conformance (a, m,
3108 "arguments '%s' and '%s' for intrinsic %s",
3109 gfc_current_intrinsic_arg[0]->name,
3110 gfc_current_intrinsic_arg[2]->name,
3111 gfc_current_intrinsic))
3112 return false;
3114 return true;
3118 bool
3119 gfc_check_minval_maxval (gfc_actual_arglist *ap)
3121 if (!int_or_real_check (ap->expr, 0)
3122 || !array_check (ap->expr, 0))
3123 return false;
3125 return check_reduction (ap);
3129 bool
3130 gfc_check_product_sum (gfc_actual_arglist *ap)
3132 if (!numeric_check (ap->expr, 0)
3133 || !array_check (ap->expr, 0))
3134 return false;
3136 return check_reduction (ap);
3140 /* For IANY, IALL and IPARITY. */
3142 bool
3143 gfc_check_mask (gfc_expr *i, gfc_expr *kind)
3145 int k;
3147 if (!type_check (i, 0, BT_INTEGER))
3148 return false;
3150 if (!nonnegative_check ("I", i))
3151 return false;
3153 if (!kind_check (kind, 1, BT_INTEGER))
3154 return false;
3156 if (kind)
3157 gfc_extract_int (kind, &k);
3158 else
3159 k = gfc_default_integer_kind;
3161 if (!less_than_bitsizekind ("I", i, k))
3162 return false;
3164 return true;
3168 bool
3169 gfc_check_transf_bit_intrins (gfc_actual_arglist *ap)
3171 if (ap->expr->ts.type != BT_INTEGER)
3173 gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER",
3174 gfc_current_intrinsic_arg[0]->name,
3175 gfc_current_intrinsic, &ap->expr->where);
3176 return false;
3179 if (!array_check (ap->expr, 0))
3180 return false;
3182 return check_reduction (ap);
3186 bool
3187 gfc_check_merge (gfc_expr *tsource, gfc_expr *fsource, gfc_expr *mask)
3189 if (!same_type_check (tsource, 0, fsource, 1))
3190 return false;
3192 if (!type_check (mask, 2, BT_LOGICAL))
3193 return false;
3195 if (tsource->ts.type == BT_CHARACTER)
3196 return gfc_check_same_strlen (tsource, fsource, "MERGE intrinsic");
3198 return true;
3202 bool
3203 gfc_check_merge_bits (gfc_expr *i, gfc_expr *j, gfc_expr *mask)
3205 if (!type_check (i, 0, BT_INTEGER))
3206 return false;
3208 if (!type_check (j, 1, BT_INTEGER))
3209 return false;
3211 if (!type_check (mask, 2, BT_INTEGER))
3212 return false;
3214 if (!same_type_check (i, 0, j, 1))
3215 return false;
3217 if (!same_type_check (i, 0, mask, 2))
3218 return false;
3220 return true;
3224 bool
3225 gfc_check_move_alloc (gfc_expr *from, gfc_expr *to)
3227 if (!variable_check (from, 0, false))
3228 return false;
3229 if (!allocatable_check (from, 0))
3230 return false;
3231 if (gfc_is_coindexed (from))
3233 gfc_error ("The FROM argument to MOVE_ALLOC at %L shall not be "
3234 "coindexed", &from->where);
3235 return false;
3238 if (!variable_check (to, 1, false))
3239 return false;
3240 if (!allocatable_check (to, 1))
3241 return false;
3242 if (gfc_is_coindexed (to))
3244 gfc_error ("The TO argument to MOVE_ALLOC at %L shall not be "
3245 "coindexed", &to->where);
3246 return false;
3249 if (from->ts.type == BT_CLASS && to->ts.type == BT_DERIVED)
3251 gfc_error ("The TO arguments in MOVE_ALLOC at %L must be "
3252 "polymorphic if FROM is polymorphic",
3253 &to->where);
3254 return false;
3257 if (!same_type_check (to, 1, from, 0))
3258 return false;
3260 if (to->rank != from->rank)
3262 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
3263 "must have the same rank %d/%d", &to->where, from->rank,
3264 to->rank);
3265 return false;
3268 /* IR F08/0040; cf. 12-006A. */
3269 if (gfc_get_corank (to) != gfc_get_corank (from))
3271 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
3272 "must have the same corank %d/%d", &to->where,
3273 gfc_get_corank (from), gfc_get_corank (to));
3274 return false;
3277 /* CLASS arguments: Make sure the vtab of from is present. */
3278 if (to->ts.type == BT_CLASS && !UNLIMITED_POLY (from))
3279 gfc_find_vtab (&from->ts);
3281 return true;
3285 bool
3286 gfc_check_nearest (gfc_expr *x, gfc_expr *s)
3288 if (!type_check (x, 0, BT_REAL))
3289 return false;
3291 if (!type_check (s, 1, BT_REAL))
3292 return false;
3294 if (s->expr_type == EXPR_CONSTANT)
3296 if (mpfr_sgn (s->value.real) == 0)
3298 gfc_error ("Argument %<S%> of NEAREST at %L shall not be zero",
3299 &s->where);
3300 return false;
3304 return true;
3308 bool
3309 gfc_check_new_line (gfc_expr *a)
3311 if (!type_check (a, 0, BT_CHARACTER))
3312 return false;
3314 return true;
3318 bool
3319 gfc_check_norm2 (gfc_expr *array, gfc_expr *dim)
3321 if (!type_check (array, 0, BT_REAL))
3322 return false;
3324 if (!array_check (array, 0))
3325 return false;
3327 if (!dim_rank_check (dim, array, false))
3328 return false;
3330 return true;
3333 bool
3334 gfc_check_null (gfc_expr *mold)
3336 symbol_attribute attr;
3338 if (mold == NULL)
3339 return true;
3341 if (!variable_check (mold, 0, true))
3342 return false;
3344 attr = gfc_variable_attr (mold, NULL);
3346 if (!attr.pointer && !attr.proc_pointer && !attr.allocatable)
3348 gfc_error ("%qs argument of %qs intrinsic at %L must be a POINTER, "
3349 "ALLOCATABLE or procedure pointer",
3350 gfc_current_intrinsic_arg[0]->name,
3351 gfc_current_intrinsic, &mold->where);
3352 return false;
3355 if (attr.allocatable
3356 && !gfc_notify_std (GFC_STD_F2003, "NULL intrinsic with "
3357 "allocatable MOLD at %L", &mold->where))
3358 return false;
3360 /* F2008, C1242. */
3361 if (gfc_is_coindexed (mold))
3363 gfc_error ("%qs argument of %qs intrinsic at %L shall not be "
3364 "coindexed", gfc_current_intrinsic_arg[0]->name,
3365 gfc_current_intrinsic, &mold->where);
3366 return false;
3369 return true;
3373 bool
3374 gfc_check_pack (gfc_expr *array, gfc_expr *mask, gfc_expr *vector)
3376 if (!array_check (array, 0))
3377 return false;
3379 if (!type_check (mask, 1, BT_LOGICAL))
3380 return false;
3382 if (!gfc_check_conformance (array, mask,
3383 "arguments '%s' and '%s' for intrinsic '%s'",
3384 gfc_current_intrinsic_arg[0]->name,
3385 gfc_current_intrinsic_arg[1]->name,
3386 gfc_current_intrinsic))
3387 return false;
3389 if (vector != NULL)
3391 mpz_t array_size, vector_size;
3392 bool have_array_size, have_vector_size;
3394 if (!same_type_check (array, 0, vector, 2))
3395 return false;
3397 if (!rank_check (vector, 2, 1))
3398 return false;
3400 /* VECTOR requires at least as many elements as MASK
3401 has .TRUE. values. */
3402 have_array_size = gfc_array_size(array, &array_size);
3403 have_vector_size = gfc_array_size(vector, &vector_size);
3405 if (have_vector_size
3406 && (mask->expr_type == EXPR_ARRAY
3407 || (mask->expr_type == EXPR_CONSTANT
3408 && have_array_size)))
3410 int mask_true_values = 0;
3412 if (mask->expr_type == EXPR_ARRAY)
3414 gfc_constructor *mask_ctor;
3415 mask_ctor = gfc_constructor_first (mask->value.constructor);
3416 while (mask_ctor)
3418 if (mask_ctor->expr->expr_type != EXPR_CONSTANT)
3420 mask_true_values = 0;
3421 break;
3424 if (mask_ctor->expr->value.logical)
3425 mask_true_values++;
3427 mask_ctor = gfc_constructor_next (mask_ctor);
3430 else if (mask->expr_type == EXPR_CONSTANT && mask->value.logical)
3431 mask_true_values = mpz_get_si (array_size);
3433 if (mpz_get_si (vector_size) < mask_true_values)
3435 gfc_error ("%qs argument of %qs intrinsic at %L must "
3436 "provide at least as many elements as there "
3437 "are .TRUE. values in %qs (%ld/%d)",
3438 gfc_current_intrinsic_arg[2]->name,
3439 gfc_current_intrinsic, &vector->where,
3440 gfc_current_intrinsic_arg[1]->name,
3441 mpz_get_si (vector_size), mask_true_values);
3442 return false;
3446 if (have_array_size)
3447 mpz_clear (array_size);
3448 if (have_vector_size)
3449 mpz_clear (vector_size);
3452 return true;
3456 bool
3457 gfc_check_parity (gfc_expr *mask, gfc_expr *dim)
3459 if (!type_check (mask, 0, BT_LOGICAL))
3460 return false;
3462 if (!array_check (mask, 0))
3463 return false;
3465 if (!dim_rank_check (dim, mask, false))
3466 return false;
3468 return true;
3472 bool
3473 gfc_check_precision (gfc_expr *x)
3475 if (!real_or_complex_check (x, 0))
3476 return false;
3478 return true;
3482 bool
3483 gfc_check_present (gfc_expr *a)
3485 gfc_symbol *sym;
3487 if (!variable_check (a, 0, true))
3488 return false;
3490 sym = a->symtree->n.sym;
3491 if (!sym->attr.dummy)
3493 gfc_error ("%qs argument of %qs intrinsic at %L must be of a "
3494 "dummy variable", gfc_current_intrinsic_arg[0]->name,
3495 gfc_current_intrinsic, &a->where);
3496 return false;
3499 if (!sym->attr.optional)
3501 gfc_error ("%qs argument of %qs intrinsic at %L must be of "
3502 "an OPTIONAL dummy variable",
3503 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3504 &a->where);
3505 return false;
3508 /* 13.14.82 PRESENT(A)
3509 ......
3510 Argument. A shall be the name of an optional dummy argument that is
3511 accessible in the subprogram in which the PRESENT function reference
3512 appears... */
3514 if (a->ref != NULL
3515 && !(a->ref->next == NULL && a->ref->type == REF_ARRAY
3516 && (a->ref->u.ar.type == AR_FULL
3517 || (a->ref->u.ar.type == AR_ELEMENT
3518 && a->ref->u.ar.as->rank == 0))))
3520 gfc_error ("%qs argument of %qs intrinsic at %L must not be a "
3521 "subobject of %qs", gfc_current_intrinsic_arg[0]->name,
3522 gfc_current_intrinsic, &a->where, sym->name);
3523 return false;
3526 return true;
3530 bool
3531 gfc_check_radix (gfc_expr *x)
3533 if (!int_or_real_check (x, 0))
3534 return false;
3536 return true;
3540 bool
3541 gfc_check_range (gfc_expr *x)
3543 if (!numeric_check (x, 0))
3544 return false;
3546 return true;
3550 bool
3551 gfc_check_rank (gfc_expr *a ATTRIBUTE_UNUSED)
3553 /* Any data object is allowed; a "data object" is a "constant (4.1.3),
3554 variable (6), or subobject of a constant (2.4.3.2.3)" (F2008, 1.3.45). */
3556 bool is_variable = true;
3558 /* Functions returning pointers are regarded as variable, cf. F2008, R602. */
3559 if (a->expr_type == EXPR_FUNCTION)
3560 is_variable = a->value.function.esym
3561 ? a->value.function.esym->result->attr.pointer
3562 : a->symtree->n.sym->result->attr.pointer;
3564 if (a->expr_type == EXPR_OP || a->expr_type == EXPR_NULL
3565 || a->expr_type == EXPR_COMPCALL|| a->expr_type == EXPR_PPC
3566 || !is_variable)
3568 gfc_error ("The argument of the RANK intrinsic at %L must be a data "
3569 "object", &a->where);
3570 return false;
3573 return true;
3577 /* real, float, sngl. */
3578 bool
3579 gfc_check_real (gfc_expr *a, gfc_expr *kind)
3581 if (!numeric_check (a, 0))
3582 return false;
3584 if (!kind_check (kind, 1, BT_REAL))
3585 return false;
3587 return true;
3591 bool
3592 gfc_check_rename (gfc_expr *path1, gfc_expr *path2)
3594 if (!type_check (path1, 0, BT_CHARACTER))
3595 return false;
3596 if (!kind_value_check (path1, 0, gfc_default_character_kind))
3597 return false;
3599 if (!type_check (path2, 1, BT_CHARACTER))
3600 return false;
3601 if (!kind_value_check (path2, 1, gfc_default_character_kind))
3602 return false;
3604 return true;
3608 bool
3609 gfc_check_rename_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
3611 if (!type_check (path1, 0, BT_CHARACTER))
3612 return false;
3613 if (!kind_value_check (path1, 0, gfc_default_character_kind))
3614 return false;
3616 if (!type_check (path2, 1, BT_CHARACTER))
3617 return false;
3618 if (!kind_value_check (path2, 1, gfc_default_character_kind))
3619 return false;
3621 if (status == NULL)
3622 return true;
3624 if (!type_check (status, 2, BT_INTEGER))
3625 return false;
3627 if (!scalar_check (status, 2))
3628 return false;
3630 return true;
3634 bool
3635 gfc_check_repeat (gfc_expr *x, gfc_expr *y)
3637 if (!type_check (x, 0, BT_CHARACTER))
3638 return false;
3640 if (!scalar_check (x, 0))
3641 return false;
3643 if (!type_check (y, 0, BT_INTEGER))
3644 return false;
3646 if (!scalar_check (y, 1))
3647 return false;
3649 return true;
3653 bool
3654 gfc_check_reshape (gfc_expr *source, gfc_expr *shape,
3655 gfc_expr *pad, gfc_expr *order)
3657 mpz_t size;
3658 mpz_t nelems;
3659 int shape_size;
3661 if (!array_check (source, 0))
3662 return false;
3664 if (!rank_check (shape, 1, 1))
3665 return false;
3667 if (!type_check (shape, 1, BT_INTEGER))
3668 return false;
3670 if (!gfc_array_size (shape, &size))
3672 gfc_error ("%<shape%> argument of %<reshape%> intrinsic at %L must be an "
3673 "array of constant size", &shape->where);
3674 return false;
3677 shape_size = mpz_get_ui (size);
3678 mpz_clear (size);
3680 if (shape_size <= 0)
3682 gfc_error ("%qs argument of %qs intrinsic at %L is empty",
3683 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
3684 &shape->where);
3685 return false;
3687 else if (shape_size > GFC_MAX_DIMENSIONS)
3689 gfc_error ("%<shape%> argument of %<reshape%> intrinsic at %L has more "
3690 "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
3691 return false;
3693 else if (shape->expr_type == EXPR_ARRAY && gfc_is_constant_expr (shape))
3695 gfc_expr *e;
3696 int i, extent;
3697 for (i = 0; i < shape_size; ++i)
3699 e = gfc_constructor_lookup_expr (shape->value.constructor, i);
3700 if (e->expr_type != EXPR_CONSTANT)
3701 continue;
3703 gfc_extract_int (e, &extent);
3704 if (extent < 0)
3706 gfc_error ("%qs argument of %qs intrinsic at %L has "
3707 "negative element (%d)",
3708 gfc_current_intrinsic_arg[1]->name,
3709 gfc_current_intrinsic, &e->where, extent);
3710 return false;
3715 if (pad != NULL)
3717 if (!same_type_check (source, 0, pad, 2))
3718 return false;
3720 if (!array_check (pad, 2))
3721 return false;
3724 if (order != NULL)
3726 if (!array_check (order, 3))
3727 return false;
3729 if (!type_check (order, 3, BT_INTEGER))
3730 return false;
3732 if (order->expr_type == EXPR_ARRAY)
3734 int i, order_size, dim, perm[GFC_MAX_DIMENSIONS];
3735 gfc_expr *e;
3737 for (i = 0; i < GFC_MAX_DIMENSIONS; ++i)
3738 perm[i] = 0;
3740 gfc_array_size (order, &size);
3741 order_size = mpz_get_ui (size);
3742 mpz_clear (size);
3744 if (order_size != shape_size)
3746 gfc_error ("%qs argument of %qs intrinsic at %L "
3747 "has wrong number of elements (%d/%d)",
3748 gfc_current_intrinsic_arg[3]->name,
3749 gfc_current_intrinsic, &order->where,
3750 order_size, shape_size);
3751 return false;
3754 for (i = 1; i <= order_size; ++i)
3756 e = gfc_constructor_lookup_expr (order->value.constructor, i-1);
3757 if (e->expr_type != EXPR_CONSTANT)
3758 continue;
3760 gfc_extract_int (e, &dim);
3762 if (dim < 1 || dim > order_size)
3764 gfc_error ("%qs argument of %qs intrinsic at %L "
3765 "has out-of-range dimension (%d)",
3766 gfc_current_intrinsic_arg[3]->name,
3767 gfc_current_intrinsic, &e->where, dim);
3768 return false;
3771 if (perm[dim-1] != 0)
3773 gfc_error ("%qs argument of %qs intrinsic at %L has "
3774 "invalid permutation of dimensions (dimension "
3775 "%<%d%> duplicated)",
3776 gfc_current_intrinsic_arg[3]->name,
3777 gfc_current_intrinsic, &e->where, dim);
3778 return false;
3781 perm[dim-1] = 1;
3786 if (pad == NULL && shape->expr_type == EXPR_ARRAY
3787 && gfc_is_constant_expr (shape)
3788 && !(source->expr_type == EXPR_VARIABLE && source->symtree->n.sym->as
3789 && source->symtree->n.sym->as->type == AS_ASSUMED_SIZE))
3791 /* Check the match in size between source and destination. */
3792 if (gfc_array_size (source, &nelems))
3794 gfc_constructor *c;
3795 bool test;
3798 mpz_init_set_ui (size, 1);
3799 for (c = gfc_constructor_first (shape->value.constructor);
3800 c; c = gfc_constructor_next (c))
3801 mpz_mul (size, size, c->expr->value.integer);
3803 test = mpz_cmp (nelems, size) < 0 && mpz_cmp_ui (size, 0) > 0;
3804 mpz_clear (nelems);
3805 mpz_clear (size);
3807 if (test)
3809 gfc_error ("Without padding, there are not enough elements "
3810 "in the intrinsic RESHAPE source at %L to match "
3811 "the shape", &source->where);
3812 return false;
3817 return true;
3821 bool
3822 gfc_check_same_type_as (gfc_expr *a, gfc_expr *b)
3824 if (a->ts.type != BT_DERIVED && a->ts.type != BT_CLASS)
3826 gfc_error ("%qs argument of %qs intrinsic at %L "
3827 "cannot be of type %s",
3828 gfc_current_intrinsic_arg[0]->name,
3829 gfc_current_intrinsic,
3830 &a->where, gfc_typename (&a->ts));
3831 return false;
3834 if (!(gfc_type_is_extensible (a->ts.u.derived) || UNLIMITED_POLY (a)))
3836 gfc_error ("%qs argument of %qs intrinsic at %L "
3837 "must be of an extensible type",
3838 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3839 &a->where);
3840 return false;
3843 if (b->ts.type != BT_DERIVED && b->ts.type != BT_CLASS)
3845 gfc_error ("%qs argument of %qs intrinsic at %L "
3846 "cannot be of type %s",
3847 gfc_current_intrinsic_arg[0]->name,
3848 gfc_current_intrinsic,
3849 &b->where, gfc_typename (&b->ts));
3850 return false;
3853 if (!(gfc_type_is_extensible (b->ts.u.derived) || UNLIMITED_POLY (b)))
3855 gfc_error ("%qs argument of %qs intrinsic at %L "
3856 "must be of an extensible type",
3857 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
3858 &b->where);
3859 return false;
3862 return true;
3866 bool
3867 gfc_check_scale (gfc_expr *x, gfc_expr *i)
3869 if (!type_check (x, 0, BT_REAL))
3870 return false;
3872 if (!type_check (i, 1, BT_INTEGER))
3873 return false;
3875 return true;
3879 bool
3880 gfc_check_scan (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
3882 if (!type_check (x, 0, BT_CHARACTER))
3883 return false;
3885 if (!type_check (y, 1, BT_CHARACTER))
3886 return false;
3888 if (z != NULL && !type_check (z, 2, BT_LOGICAL))
3889 return false;
3891 if (!kind_check (kind, 3, BT_INTEGER))
3892 return false;
3893 if (kind && !gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
3894 "with KIND argument at %L",
3895 gfc_current_intrinsic, &kind->where))
3896 return false;
3898 if (!same_type_check (x, 0, y, 1))
3899 return false;
3901 return true;
3905 bool
3906 gfc_check_secnds (gfc_expr *r)
3908 if (!type_check (r, 0, BT_REAL))
3909 return false;
3911 if (!kind_value_check (r, 0, 4))
3912 return false;
3914 if (!scalar_check (r, 0))
3915 return false;
3917 return true;
3921 bool
3922 gfc_check_selected_char_kind (gfc_expr *name)
3924 if (!type_check (name, 0, BT_CHARACTER))
3925 return false;
3927 if (!kind_value_check (name, 0, gfc_default_character_kind))
3928 return false;
3930 if (!scalar_check (name, 0))
3931 return false;
3933 return true;
3937 bool
3938 gfc_check_selected_int_kind (gfc_expr *r)
3940 if (!type_check (r, 0, BT_INTEGER))
3941 return false;
3943 if (!scalar_check (r, 0))
3944 return false;
3946 return true;
3950 bool
3951 gfc_check_selected_real_kind (gfc_expr *p, gfc_expr *r, gfc_expr *radix)
3953 if (p == NULL && r == NULL
3954 && !gfc_notify_std (GFC_STD_F2008, "SELECTED_REAL_KIND with"
3955 " neither %<P%> nor %<R%> argument at %L",
3956 gfc_current_intrinsic_where))
3957 return false;
3959 if (p)
3961 if (!type_check (p, 0, BT_INTEGER))
3962 return false;
3964 if (!scalar_check (p, 0))
3965 return false;
3968 if (r)
3970 if (!type_check (r, 1, BT_INTEGER))
3971 return false;
3973 if (!scalar_check (r, 1))
3974 return false;
3977 if (radix)
3979 if (!type_check (radix, 1, BT_INTEGER))
3980 return false;
3982 if (!scalar_check (radix, 1))
3983 return false;
3985 if (!gfc_notify_std (GFC_STD_F2008, "%qs intrinsic with "
3986 "RADIX argument at %L", gfc_current_intrinsic,
3987 &radix->where))
3988 return false;
3991 return true;
3995 bool
3996 gfc_check_set_exponent (gfc_expr *x, gfc_expr *i)
3998 if (!type_check (x, 0, BT_REAL))
3999 return false;
4001 if (!type_check (i, 1, BT_INTEGER))
4002 return false;
4004 return true;
4008 bool
4009 gfc_check_shape (gfc_expr *source, gfc_expr *kind)
4011 gfc_array_ref *ar;
4013 if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
4014 return true;
4016 ar = gfc_find_array_ref (source);
4018 if (ar->as && ar->as->type == AS_ASSUMED_SIZE && ar->type == AR_FULL)
4020 gfc_error ("%<source%> argument of %<shape%> intrinsic at %L must not be "
4021 "an assumed size array", &source->where);
4022 return false;
4025 if (!kind_check (kind, 1, BT_INTEGER))
4026 return false;
4027 if (kind && !gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
4028 "with KIND argument at %L",
4029 gfc_current_intrinsic, &kind->where))
4030 return false;
4032 return true;
4036 bool
4037 gfc_check_shift (gfc_expr *i, gfc_expr *shift)
4039 if (!type_check (i, 0, BT_INTEGER))
4040 return false;
4042 if (!type_check (shift, 0, BT_INTEGER))
4043 return false;
4045 if (!nonnegative_check ("SHIFT", shift))
4046 return false;
4048 if (!less_than_bitsize1 ("I", i, "SHIFT", shift, true))
4049 return false;
4051 return true;
4055 bool
4056 gfc_check_sign (gfc_expr *a, gfc_expr *b)
4058 if (!int_or_real_check (a, 0))
4059 return false;
4061 if (!same_type_check (a, 0, b, 1))
4062 return false;
4064 return true;
4068 bool
4069 gfc_check_size (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
4071 if (!array_check (array, 0))
4072 return false;
4074 if (!dim_check (dim, 1, true))
4075 return false;
4077 if (!dim_rank_check (dim, array, 0))
4078 return false;
4080 if (!kind_check (kind, 2, BT_INTEGER))
4081 return false;
4082 if (kind && !gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
4083 "with KIND argument at %L",
4084 gfc_current_intrinsic, &kind->where))
4085 return false;
4088 return true;
4092 bool
4093 gfc_check_sizeof (gfc_expr *arg)
4095 if (arg->ts.type == BT_PROCEDURE)
4097 gfc_error ("%qs argument of %qs intrinsic at %L shall not be a procedure",
4098 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
4099 &arg->where);
4100 return false;
4103 /* TYPE(*) is acceptable if and only if it uses an array descriptor. */
4104 if (arg->ts.type == BT_ASSUMED
4105 && (arg->symtree->n.sym->as == NULL
4106 || (arg->symtree->n.sym->as->type != AS_ASSUMED_SHAPE
4107 && arg->symtree->n.sym->as->type != AS_DEFERRED
4108 && arg->symtree->n.sym->as->type != AS_ASSUMED_RANK)))
4110 gfc_error ("%qs argument of %qs intrinsic at %L shall not be TYPE(*)",
4111 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
4112 &arg->where);
4113 return false;
4116 if (arg->rank && arg->expr_type == EXPR_VARIABLE
4117 && arg->symtree->n.sym->as != NULL
4118 && arg->symtree->n.sym->as->type == AS_ASSUMED_SIZE && arg->ref
4119 && arg->ref->type == REF_ARRAY && arg->ref->u.ar.type == AR_FULL)
4121 gfc_error ("%qs argument of %qs intrinsic at %L shall not be an "
4122 "assumed-size array", gfc_current_intrinsic_arg[0]->name,
4123 gfc_current_intrinsic, &arg->where);
4124 return false;
4127 return true;
4131 /* Check whether an expression is interoperable. When returning false,
4132 msg is set to a string telling why the expression is not interoperable,
4133 otherwise, it is set to NULL. The msg string can be used in diagnostics.
4134 If c_loc is true, character with len > 1 are allowed (cf. Fortran
4135 2003corr5); additionally, assumed-shape/assumed-rank/deferred-shape
4136 arrays are permitted. And if c_f_ptr is true, deferred-shape arrays
4137 are permitted. */
4139 static bool
4140 is_c_interoperable (gfc_expr *expr, const char **msg, bool c_loc, bool c_f_ptr)
4142 *msg = NULL;
4144 if (expr->ts.type == BT_CLASS)
4146 *msg = "Expression is polymorphic";
4147 return false;
4150 if (expr->ts.type == BT_DERIVED && !expr->ts.u.derived->attr.is_bind_c
4151 && !expr->ts.u.derived->ts.is_iso_c)
4153 *msg = "Expression is a noninteroperable derived type";
4154 return false;
4157 if (expr->ts.type == BT_PROCEDURE)
4159 *msg = "Procedure unexpected as argument";
4160 return false;
4163 if (gfc_notification_std (GFC_STD_GNU) && expr->ts.type == BT_LOGICAL)
4165 int i;
4166 for (i = 0; gfc_logical_kinds[i].kind; i++)
4167 if (gfc_logical_kinds[i].kind == expr->ts.kind)
4168 return true;
4169 *msg = "Extension to use a non-C_Bool-kind LOGICAL";
4170 return false;
4173 if (gfc_notification_std (GFC_STD_GNU) && expr->ts.type == BT_CHARACTER
4174 && expr->ts.kind != 1)
4176 *msg = "Extension to use a non-C_CHAR-kind CHARACTER";
4177 return false;
4180 if (expr->ts.type == BT_CHARACTER) {
4181 if (expr->ts.deferred)
4183 /* TS 29113 allows deferred-length strings as dummy arguments,
4184 but it is not an interoperable type. */
4185 *msg = "Expression shall not be a deferred-length string";
4186 return false;
4189 if (expr->ts.u.cl && expr->ts.u.cl->length
4190 && !gfc_simplify_expr (expr, 0))
4191 gfc_internal_error ("is_c_interoperable(): gfc_simplify_expr failed");
4193 if (!c_loc && expr->ts.u.cl
4194 && (!expr->ts.u.cl->length
4195 || expr->ts.u.cl->length->expr_type != EXPR_CONSTANT
4196 || mpz_cmp_si (expr->ts.u.cl->length->value.integer, 1) != 0))
4198 *msg = "Type shall have a character length of 1";
4199 return false;
4203 /* Note: The following checks are about interoperatable variables, Fortran
4204 15.3.5/15.3.6. In intrinsics like C_LOC or in procedure interface, more
4205 is allowed, e.g. assumed-shape arrays with TS 29113. */
4207 if (gfc_is_coarray (expr))
4209 *msg = "Coarrays are not interoperable";
4210 return false;
4213 if (!c_loc && expr->rank > 0 && expr->expr_type != EXPR_ARRAY)
4215 gfc_array_ref *ar = gfc_find_array_ref (expr);
4216 if (ar->type != AR_FULL)
4218 *msg = "Only whole-arrays are interoperable";
4219 return false;
4221 if (!c_f_ptr && ar->as->type != AS_EXPLICIT
4222 && ar->as->type != AS_ASSUMED_SIZE)
4224 *msg = "Only explicit-size and assumed-size arrays are interoperable";
4225 return false;
4229 return true;
4233 bool
4234 gfc_check_c_sizeof (gfc_expr *arg)
4236 const char *msg;
4238 if (!is_c_interoperable (arg, &msg, false, false))
4240 gfc_error ("%qs argument of %qs intrinsic at %L must be an "
4241 "interoperable data entity: %s",
4242 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
4243 &arg->where, msg);
4244 return false;
4247 if (arg->ts.type == BT_ASSUMED)
4249 gfc_error ("%qs argument of %qs intrinsic at %L shall not be "
4250 "TYPE(*)",
4251 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
4252 &arg->where);
4253 return false;
4256 if (arg->rank && arg->expr_type == EXPR_VARIABLE
4257 && arg->symtree->n.sym->as != NULL
4258 && arg->symtree->n.sym->as->type == AS_ASSUMED_SIZE && arg->ref
4259 && arg->ref->type == REF_ARRAY && arg->ref->u.ar.type == AR_FULL)
4261 gfc_error ("%qs argument of %qs intrinsic at %L shall not be an "
4262 "assumed-size array", gfc_current_intrinsic_arg[0]->name,
4263 gfc_current_intrinsic, &arg->where);
4264 return false;
4267 return true;
4271 bool
4272 gfc_check_c_associated (gfc_expr *c_ptr_1, gfc_expr *c_ptr_2)
4274 if (c_ptr_1->ts.type != BT_DERIVED
4275 || c_ptr_1->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
4276 || (c_ptr_1->ts.u.derived->intmod_sym_id != ISOCBINDING_PTR
4277 && c_ptr_1->ts.u.derived->intmod_sym_id != ISOCBINDING_FUNPTR))
4279 gfc_error ("Argument C_PTR_1 at %L to C_ASSOCIATED shall have the "
4280 "type TYPE(C_PTR) or TYPE(C_FUNPTR)", &c_ptr_1->where);
4281 return false;
4284 if (!scalar_check (c_ptr_1, 0))
4285 return false;
4287 if (c_ptr_2
4288 && (c_ptr_2->ts.type != BT_DERIVED
4289 || c_ptr_2->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
4290 || (c_ptr_1->ts.u.derived->intmod_sym_id
4291 != c_ptr_2->ts.u.derived->intmod_sym_id)))
4293 gfc_error ("Argument C_PTR_2 at %L to C_ASSOCIATED shall have the "
4294 "same type as C_PTR_1: %s instead of %s", &c_ptr_1->where,
4295 gfc_typename (&c_ptr_1->ts),
4296 gfc_typename (&c_ptr_2->ts));
4297 return false;
4300 if (c_ptr_2 && !scalar_check (c_ptr_2, 1))
4301 return false;
4303 return true;
4307 bool
4308 gfc_check_c_f_pointer (gfc_expr *cptr, gfc_expr *fptr, gfc_expr *shape)
4310 symbol_attribute attr;
4311 const char *msg;
4313 if (cptr->ts.type != BT_DERIVED
4314 || cptr->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
4315 || cptr->ts.u.derived->intmod_sym_id != ISOCBINDING_PTR)
4317 gfc_error ("Argument CPTR at %L to C_F_POINTER shall have the "
4318 "type TYPE(C_PTR)", &cptr->where);
4319 return false;
4322 if (!scalar_check (cptr, 0))
4323 return false;
4325 attr = gfc_expr_attr (fptr);
4327 if (!attr.pointer)
4329 gfc_error ("Argument FPTR at %L to C_F_POINTER must be a pointer",
4330 &fptr->where);
4331 return false;
4334 if (fptr->ts.type == BT_CLASS)
4336 gfc_error ("FPTR argument at %L to C_F_POINTER shall not be polymorphic",
4337 &fptr->where);
4338 return false;
4341 if (gfc_is_coindexed (fptr))
4343 gfc_error ("Argument FPTR at %L to C_F_POINTER shall not be "
4344 "coindexed", &fptr->where);
4345 return false;
4348 if (fptr->rank == 0 && shape)
4350 gfc_error ("Unexpected SHAPE argument at %L to C_F_POINTER with scalar "
4351 "FPTR", &fptr->where);
4352 return false;
4354 else if (fptr->rank && !shape)
4356 gfc_error ("Expected SHAPE argument to C_F_POINTER with array "
4357 "FPTR at %L", &fptr->where);
4358 return false;
4361 if (shape && !rank_check (shape, 2, 1))
4362 return false;
4364 if (shape && !type_check (shape, 2, BT_INTEGER))
4365 return false;
4367 if (shape)
4369 mpz_t size;
4370 if (gfc_array_size (shape, &size))
4372 if (mpz_cmp_ui (size, fptr->rank) != 0)
4374 mpz_clear (size);
4375 gfc_error ("SHAPE argument at %L to C_F_POINTER must have the same "
4376 "size as the RANK of FPTR", &shape->where);
4377 return false;
4379 mpz_clear (size);
4383 if (fptr->ts.type == BT_CLASS)
4385 gfc_error ("Polymorphic FPTR at %L to C_F_POINTER", &fptr->where);
4386 return false;
4389 if (!is_c_interoperable (fptr, &msg, false, true))
4390 return gfc_notify_std (GFC_STD_F2008_TS, "Noninteroperable array FPTR "
4391 "at %L to C_F_POINTER: %s", &fptr->where, msg);
4393 return true;
4397 bool
4398 gfc_check_c_f_procpointer (gfc_expr *cptr, gfc_expr *fptr)
4400 symbol_attribute attr;
4402 if (cptr->ts.type != BT_DERIVED
4403 || cptr->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
4404 || cptr->ts.u.derived->intmod_sym_id != ISOCBINDING_FUNPTR)
4406 gfc_error ("Argument CPTR at %L to C_F_PROCPOINTER shall have the "
4407 "type TYPE(C_FUNPTR)", &cptr->where);
4408 return false;
4411 if (!scalar_check (cptr, 0))
4412 return false;
4414 attr = gfc_expr_attr (fptr);
4416 if (!attr.proc_pointer)
4418 gfc_error ("Argument FPTR at %L to C_F_PROCPOINTER shall be a procedure "
4419 "pointer", &fptr->where);
4420 return false;
4423 if (gfc_is_coindexed (fptr))
4425 gfc_error ("Argument FPTR at %L to C_F_PROCPOINTER shall not be "
4426 "coindexed", &fptr->where);
4427 return false;
4430 if (!attr.is_bind_c)
4431 return gfc_notify_std (GFC_STD_F2008_TS, "Noninteroperable procedure "
4432 "pointer at %L to C_F_PROCPOINTER", &fptr->where);
4434 return true;
4438 bool
4439 gfc_check_c_funloc (gfc_expr *x)
4441 symbol_attribute attr;
4443 if (gfc_is_coindexed (x))
4445 gfc_error ("Argument X at %L to C_FUNLOC shall not be "
4446 "coindexed", &x->where);
4447 return false;
4450 attr = gfc_expr_attr (x);
4452 if (attr.function && !attr.proc_pointer && x->expr_type == EXPR_VARIABLE
4453 && x->symtree->n.sym == x->symtree->n.sym->result)
4455 gfc_namespace *ns = gfc_current_ns;
4457 for (ns = gfc_current_ns; ns; ns = ns->parent)
4458 if (x->symtree->n.sym == ns->proc_name)
4460 gfc_error ("Function result %qs at %L is invalid as X argument "
4461 "to C_FUNLOC", x->symtree->n.sym->name, &x->where);
4462 return false;
4466 if (attr.flavor != FL_PROCEDURE)
4468 gfc_error ("Argument X at %L to C_FUNLOC shall be a procedure "
4469 "or a procedure pointer", &x->where);
4470 return false;
4473 if (!attr.is_bind_c)
4474 return gfc_notify_std (GFC_STD_F2008_TS, "Noninteroperable procedure "
4475 "at %L to C_FUNLOC", &x->where);
4476 return true;
4480 bool
4481 gfc_check_c_loc (gfc_expr *x)
4483 symbol_attribute attr;
4484 const char *msg;
4486 if (gfc_is_coindexed (x))
4488 gfc_error ("Argument X at %L to C_LOC shall not be coindexed", &x->where);
4489 return false;
4492 if (x->ts.type == BT_CLASS)
4494 gfc_error ("X argument at %L to C_LOC shall not be polymorphic",
4495 &x->where);
4496 return false;
4499 attr = gfc_expr_attr (x);
4501 if (!attr.pointer
4502 && (x->expr_type != EXPR_VARIABLE || !attr.target
4503 || attr.flavor == FL_PARAMETER))
4505 gfc_error ("Argument X at %L to C_LOC shall have either "
4506 "the POINTER or the TARGET attribute", &x->where);
4507 return false;
4510 if (x->ts.type == BT_CHARACTER
4511 && gfc_var_strlen (x) == 0)
4513 gfc_error ("Argument X at %L to C_LOC shall be not be a zero-sized "
4514 "string", &x->where);
4515 return false;
4518 if (!is_c_interoperable (x, &msg, true, false))
4520 if (x->ts.type == BT_CLASS)
4522 gfc_error ("Argument at %L to C_LOC shall not be polymorphic",
4523 &x->where);
4524 return false;
4527 if (x->rank
4528 && !gfc_notify_std (GFC_STD_F2008_TS,
4529 "Noninteroperable array at %L as"
4530 " argument to C_LOC: %s", &x->where, msg))
4531 return false;
4533 else if (x->rank > 0 && gfc_notification_std (GFC_STD_F2008))
4535 gfc_array_ref *ar = gfc_find_array_ref (x);
4537 if (ar->as->type != AS_EXPLICIT && ar->as->type != AS_ASSUMED_SIZE
4538 && !attr.allocatable
4539 && !gfc_notify_std (GFC_STD_F2008,
4540 "Array of interoperable type at %L "
4541 "to C_LOC which is nonallocatable and neither "
4542 "assumed size nor explicit size", &x->where))
4543 return false;
4544 else if (ar->type != AR_FULL
4545 && !gfc_notify_std (GFC_STD_F2008, "Array section at %L "
4546 "to C_LOC", &x->where))
4547 return false;
4550 return true;
4554 bool
4555 gfc_check_sleep_sub (gfc_expr *seconds)
4557 if (!type_check (seconds, 0, BT_INTEGER))
4558 return false;
4560 if (!scalar_check (seconds, 0))
4561 return false;
4563 return true;
4566 bool
4567 gfc_check_sngl (gfc_expr *a)
4569 if (!type_check (a, 0, BT_REAL))
4570 return false;
4572 if ((a->ts.kind != gfc_default_double_kind)
4573 && !gfc_notify_std (GFC_STD_GNU, "non double precision "
4574 "REAL argument to %s intrinsic at %L",
4575 gfc_current_intrinsic, &a->where))
4576 return false;
4578 return true;
4581 bool
4582 gfc_check_spread (gfc_expr *source, gfc_expr *dim, gfc_expr *ncopies)
4584 if (source->rank >= GFC_MAX_DIMENSIONS)
4586 gfc_error ("%qs argument of %qs intrinsic at %L must be less "
4587 "than rank %d", gfc_current_intrinsic_arg[0]->name,
4588 gfc_current_intrinsic, &source->where, GFC_MAX_DIMENSIONS);
4590 return false;
4593 if (dim == NULL)
4594 return false;
4596 if (!dim_check (dim, 1, false))
4597 return false;
4599 /* dim_rank_check() does not apply here. */
4600 if (dim
4601 && dim->expr_type == EXPR_CONSTANT
4602 && (mpz_cmp_ui (dim->value.integer, 1) < 0
4603 || mpz_cmp_ui (dim->value.integer, source->rank + 1) > 0))
4605 gfc_error ("%qs argument of %qs intrinsic at %L is not a valid "
4606 "dimension index", gfc_current_intrinsic_arg[1]->name,
4607 gfc_current_intrinsic, &dim->where);
4608 return false;
4611 if (!type_check (ncopies, 2, BT_INTEGER))
4612 return false;
4614 if (!scalar_check (ncopies, 2))
4615 return false;
4617 return true;
4621 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
4622 functions). */
4624 bool
4625 gfc_check_fgetputc_sub (gfc_expr *unit, gfc_expr *c, gfc_expr *status)
4627 if (!type_check (unit, 0, BT_INTEGER))
4628 return false;
4630 if (!scalar_check (unit, 0))
4631 return false;
4633 if (!type_check (c, 1, BT_CHARACTER))
4634 return false;
4635 if (!kind_value_check (c, 1, gfc_default_character_kind))
4636 return false;
4638 if (status == NULL)
4639 return true;
4641 if (!type_check (status, 2, BT_INTEGER)
4642 || !kind_value_check (status, 2, gfc_default_integer_kind)
4643 || !scalar_check (status, 2))
4644 return false;
4646 return true;
4650 bool
4651 gfc_check_fgetputc (gfc_expr *unit, gfc_expr *c)
4653 return gfc_check_fgetputc_sub (unit, c, NULL);
4657 bool
4658 gfc_check_fgetput_sub (gfc_expr *c, gfc_expr *status)
4660 if (!type_check (c, 0, BT_CHARACTER))
4661 return false;
4662 if (!kind_value_check (c, 0, gfc_default_character_kind))
4663 return false;
4665 if (status == NULL)
4666 return true;
4668 if (!type_check (status, 1, BT_INTEGER)
4669 || !kind_value_check (status, 1, gfc_default_integer_kind)
4670 || !scalar_check (status, 1))
4671 return false;
4673 return true;
4677 bool
4678 gfc_check_fgetput (gfc_expr *c)
4680 return gfc_check_fgetput_sub (c, NULL);
4684 bool
4685 gfc_check_fseek_sub (gfc_expr *unit, gfc_expr *offset, gfc_expr *whence, gfc_expr *status)
4687 if (!type_check (unit, 0, BT_INTEGER))
4688 return false;
4690 if (!scalar_check (unit, 0))
4691 return false;
4693 if (!type_check (offset, 1, BT_INTEGER))
4694 return false;
4696 if (!scalar_check (offset, 1))
4697 return false;
4699 if (!type_check (whence, 2, BT_INTEGER))
4700 return false;
4702 if (!scalar_check (whence, 2))
4703 return false;
4705 if (status == NULL)
4706 return true;
4708 if (!type_check (status, 3, BT_INTEGER))
4709 return false;
4711 if (!kind_value_check (status, 3, 4))
4712 return false;
4714 if (!scalar_check (status, 3))
4715 return false;
4717 return true;
4722 bool
4723 gfc_check_fstat (gfc_expr *unit, gfc_expr *array)
4725 if (!type_check (unit, 0, BT_INTEGER))
4726 return false;
4728 if (!scalar_check (unit, 0))
4729 return false;
4731 if (!type_check (array, 1, BT_INTEGER)
4732 || !kind_value_check (unit, 0, gfc_default_integer_kind))
4733 return false;
4735 if (!array_check (array, 1))
4736 return false;
4738 return true;
4742 bool
4743 gfc_check_fstat_sub (gfc_expr *unit, gfc_expr *array, gfc_expr *status)
4745 if (!type_check (unit, 0, BT_INTEGER))
4746 return false;
4748 if (!scalar_check (unit, 0))
4749 return false;
4751 if (!type_check (array, 1, BT_INTEGER)
4752 || !kind_value_check (array, 1, gfc_default_integer_kind))
4753 return false;
4755 if (!array_check (array, 1))
4756 return false;
4758 if (status == NULL)
4759 return true;
4761 if (!type_check (status, 2, BT_INTEGER)
4762 || !kind_value_check (status, 2, gfc_default_integer_kind))
4763 return false;
4765 if (!scalar_check (status, 2))
4766 return false;
4768 return true;
4772 bool
4773 gfc_check_ftell (gfc_expr *unit)
4775 if (!type_check (unit, 0, BT_INTEGER))
4776 return false;
4778 if (!scalar_check (unit, 0))
4779 return false;
4781 return true;
4785 bool
4786 gfc_check_ftell_sub (gfc_expr *unit, gfc_expr *offset)
4788 if (!type_check (unit, 0, BT_INTEGER))
4789 return false;
4791 if (!scalar_check (unit, 0))
4792 return false;
4794 if (!type_check (offset, 1, BT_INTEGER))
4795 return false;
4797 if (!scalar_check (offset, 1))
4798 return false;
4800 return true;
4804 bool
4805 gfc_check_stat (gfc_expr *name, gfc_expr *array)
4807 if (!type_check (name, 0, BT_CHARACTER))
4808 return false;
4809 if (!kind_value_check (name, 0, gfc_default_character_kind))
4810 return false;
4812 if (!type_check (array, 1, BT_INTEGER)
4813 || !kind_value_check (array, 1, gfc_default_integer_kind))
4814 return false;
4816 if (!array_check (array, 1))
4817 return false;
4819 return true;
4823 bool
4824 gfc_check_stat_sub (gfc_expr *name, gfc_expr *array, gfc_expr *status)
4826 if (!type_check (name, 0, BT_CHARACTER))
4827 return false;
4828 if (!kind_value_check (name, 0, gfc_default_character_kind))
4829 return false;
4831 if (!type_check (array, 1, BT_INTEGER)
4832 || !kind_value_check (array, 1, gfc_default_integer_kind))
4833 return false;
4835 if (!array_check (array, 1))
4836 return false;
4838 if (status == NULL)
4839 return true;
4841 if (!type_check (status, 2, BT_INTEGER)
4842 || !kind_value_check (array, 1, gfc_default_integer_kind))
4843 return false;
4845 if (!scalar_check (status, 2))
4846 return false;
4848 return true;
4852 bool
4853 gfc_check_image_index (gfc_expr *coarray, gfc_expr *sub)
4855 mpz_t nelems;
4857 if (flag_coarray == GFC_FCOARRAY_NONE)
4859 gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable");
4860 return false;
4863 if (!coarray_check (coarray, 0))
4864 return false;
4866 if (sub->rank != 1)
4868 gfc_error ("%s argument to IMAGE_INDEX must be a rank one array at %L",
4869 gfc_current_intrinsic_arg[1]->name, &sub->where);
4870 return false;
4873 if (gfc_array_size (sub, &nelems))
4875 int corank = gfc_get_corank (coarray);
4877 if (mpz_cmp_ui (nelems, corank) != 0)
4879 gfc_error ("The number of array elements of the SUB argument to "
4880 "IMAGE_INDEX at %L shall be %d (corank) not %d",
4881 &sub->where, corank, (int) mpz_get_si (nelems));
4882 mpz_clear (nelems);
4883 return false;
4885 mpz_clear (nelems);
4888 return true;
4892 bool
4893 gfc_check_num_images (gfc_expr *distance, gfc_expr *failed)
4895 if (flag_coarray == GFC_FCOARRAY_NONE)
4897 gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable");
4898 return false;
4901 if (distance)
4903 if (!type_check (distance, 0, BT_INTEGER))
4904 return false;
4906 if (!nonnegative_check ("DISTANCE", distance))
4907 return false;
4909 if (!scalar_check (distance, 0))
4910 return false;
4912 if (!gfc_notify_std (GFC_STD_F2008_TS, "DISTANCE= argument to "
4913 "NUM_IMAGES at %L", &distance->where))
4914 return false;
4917 if (failed)
4919 if (!type_check (failed, 1, BT_LOGICAL))
4920 return false;
4922 if (!scalar_check (failed, 1))
4923 return false;
4925 if (!gfc_notify_std (GFC_STD_F2008_TS, "FAILED= argument to "
4926 "NUM_IMAGES at %L", &distance->where))
4927 return false;
4930 return true;
4934 bool
4935 gfc_check_this_image (gfc_expr *coarray, gfc_expr *dim, gfc_expr *distance)
4937 if (flag_coarray == GFC_FCOARRAY_NONE)
4939 gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable");
4940 return false;
4943 if (coarray == NULL && dim == NULL && distance == NULL)
4944 return true;
4946 if (dim != NULL && coarray == NULL)
4948 gfc_error ("DIM argument without COARRAY argument not allowed for "
4949 "THIS_IMAGE intrinsic at %L", &dim->where);
4950 return false;
4953 if (distance && (coarray || dim))
4955 gfc_error ("The DISTANCE argument may not be specified together with the "
4956 "COARRAY or DIM argument in intrinsic at %L",
4957 &distance->where);
4958 return false;
4961 /* Assume that we have "this_image (distance)". */
4962 if (coarray && !gfc_is_coarray (coarray) && coarray->ts.type == BT_INTEGER)
4964 if (dim)
4966 gfc_error ("Unexpected DIM argument with noncoarray argument at %L",
4967 &coarray->where);
4968 return false;
4970 distance = coarray;
4973 if (distance)
4975 if (!type_check (distance, 2, BT_INTEGER))
4976 return false;
4978 if (!nonnegative_check ("DISTANCE", distance))
4979 return false;
4981 if (!scalar_check (distance, 2))
4982 return false;
4984 if (!gfc_notify_std (GFC_STD_F2008_TS, "DISTANCE= argument to "
4985 "THIS_IMAGE at %L", &distance->where))
4986 return false;
4988 return true;
4991 if (!coarray_check (coarray, 0))
4992 return false;
4994 if (dim != NULL)
4996 if (!dim_check (dim, 1, false))
4997 return false;
4999 if (!dim_corank_check (dim, coarray))
5000 return false;
5003 return true;
5006 /* Calculate the sizes for transfer, used by gfc_check_transfer and also
5007 by gfc_simplify_transfer. Return false if we cannot do so. */
5009 bool
5010 gfc_calculate_transfer_sizes (gfc_expr *source, gfc_expr *mold, gfc_expr *size,
5011 size_t *source_size, size_t *result_size,
5012 size_t *result_length_p)
5014 size_t result_elt_size;
5016 if (source->expr_type == EXPR_FUNCTION)
5017 return false;
5019 if (size && size->expr_type != EXPR_CONSTANT)
5020 return false;
5022 /* Calculate the size of the source. */
5023 *source_size = gfc_target_expr_size (source);
5024 if (*source_size == 0)
5025 return false;
5027 /* Determine the size of the element. */
5028 result_elt_size = gfc_element_size (mold);
5029 if (result_elt_size == 0)
5030 return false;
5032 if (mold->expr_type == EXPR_ARRAY || mold->rank || size)
5034 int result_length;
5036 if (size)
5037 result_length = (size_t)mpz_get_ui (size->value.integer);
5038 else
5040 result_length = *source_size / result_elt_size;
5041 if (result_length * result_elt_size < *source_size)
5042 result_length += 1;
5045 *result_size = result_length * result_elt_size;
5046 if (result_length_p)
5047 *result_length_p = result_length;
5049 else
5050 *result_size = result_elt_size;
5052 return true;
5056 bool
5057 gfc_check_transfer (gfc_expr *source, gfc_expr *mold, gfc_expr *size)
5059 size_t source_size;
5060 size_t result_size;
5062 if (mold->ts.type == BT_HOLLERITH)
5064 gfc_error ("%<MOLD%> argument of %<TRANSFER%> intrinsic at %L must not be"
5065 " %s", &mold->where, gfc_basic_typename (BT_HOLLERITH));
5066 return false;
5069 if (size != NULL)
5071 if (!type_check (size, 2, BT_INTEGER))
5072 return false;
5074 if (!scalar_check (size, 2))
5075 return false;
5077 if (!nonoptional_check (size, 2))
5078 return false;
5081 if (!warn_surprising)
5082 return true;
5084 /* If we can't calculate the sizes, we cannot check any more.
5085 Return true for that case. */
5087 if (!gfc_calculate_transfer_sizes (source, mold, size, &source_size,
5088 &result_size, NULL))
5089 return true;
5091 if (source_size < result_size)
5092 gfc_warning (0, "Intrinsic TRANSFER at %L has partly undefined result: "
5093 "source size %ld < result size %ld", &source->where,
5094 (long) source_size, (long) result_size);
5096 return true;
5100 bool
5101 gfc_check_transpose (gfc_expr *matrix)
5103 if (!rank_check (matrix, 0, 2))
5104 return false;
5106 return true;
5110 bool
5111 gfc_check_ubound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
5113 if (!array_check (array, 0))
5114 return false;
5116 if (!dim_check (dim, 1, false))
5117 return false;
5119 if (!dim_rank_check (dim, array, 0))
5120 return false;
5122 if (!kind_check (kind, 2, BT_INTEGER))
5123 return false;
5124 if (kind && !gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
5125 "with KIND argument at %L",
5126 gfc_current_intrinsic, &kind->where))
5127 return false;
5129 return true;
5133 bool
5134 gfc_check_ucobound (gfc_expr *coarray, gfc_expr *dim, gfc_expr *kind)
5136 if (flag_coarray == GFC_FCOARRAY_NONE)
5138 gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable");
5139 return false;
5142 if (!coarray_check (coarray, 0))
5143 return false;
5145 if (dim != NULL)
5147 if (!dim_check (dim, 1, false))
5148 return false;
5150 if (!dim_corank_check (dim, coarray))
5151 return false;
5154 if (!kind_check (kind, 2, BT_INTEGER))
5155 return false;
5157 return true;
5161 bool
5162 gfc_check_unpack (gfc_expr *vector, gfc_expr *mask, gfc_expr *field)
5164 mpz_t vector_size;
5166 if (!rank_check (vector, 0, 1))
5167 return false;
5169 if (!array_check (mask, 1))
5170 return false;
5172 if (!type_check (mask, 1, BT_LOGICAL))
5173 return false;
5175 if (!same_type_check (vector, 0, field, 2))
5176 return false;
5178 if (mask->expr_type == EXPR_ARRAY
5179 && gfc_array_size (vector, &vector_size))
5181 int mask_true_count = 0;
5182 gfc_constructor *mask_ctor;
5183 mask_ctor = gfc_constructor_first (mask->value.constructor);
5184 while (mask_ctor)
5186 if (mask_ctor->expr->expr_type != EXPR_CONSTANT)
5188 mask_true_count = 0;
5189 break;
5192 if (mask_ctor->expr->value.logical)
5193 mask_true_count++;
5195 mask_ctor = gfc_constructor_next (mask_ctor);
5198 if (mpz_get_si (vector_size) < mask_true_count)
5200 gfc_error ("%qs argument of %qs intrinsic at %L must "
5201 "provide at least as many elements as there "
5202 "are .TRUE. values in %qs (%ld/%d)",
5203 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
5204 &vector->where, gfc_current_intrinsic_arg[1]->name,
5205 mpz_get_si (vector_size), mask_true_count);
5206 return false;
5209 mpz_clear (vector_size);
5212 if (mask->rank != field->rank && field->rank != 0)
5214 gfc_error ("%qs argument of %qs intrinsic at %L must have "
5215 "the same rank as %qs or be a scalar",
5216 gfc_current_intrinsic_arg[2]->name, gfc_current_intrinsic,
5217 &field->where, gfc_current_intrinsic_arg[1]->name);
5218 return false;
5221 if (mask->rank == field->rank)
5223 int i;
5224 for (i = 0; i < field->rank; i++)
5225 if (! identical_dimen_shape (mask, i, field, i))
5227 gfc_error ("%qs and %qs arguments of %qs intrinsic at %L "
5228 "must have identical shape.",
5229 gfc_current_intrinsic_arg[2]->name,
5230 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
5231 &field->where);
5235 return true;
5239 bool
5240 gfc_check_verify (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
5242 if (!type_check (x, 0, BT_CHARACTER))
5243 return false;
5245 if (!same_type_check (x, 0, y, 1))
5246 return false;
5248 if (z != NULL && !type_check (z, 2, BT_LOGICAL))
5249 return false;
5251 if (!kind_check (kind, 3, BT_INTEGER))
5252 return false;
5253 if (kind && !gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
5254 "with KIND argument at %L",
5255 gfc_current_intrinsic, &kind->where))
5256 return false;
5258 return true;
5262 bool
5263 gfc_check_trim (gfc_expr *x)
5265 if (!type_check (x, 0, BT_CHARACTER))
5266 return false;
5268 if (!scalar_check (x, 0))
5269 return false;
5271 return true;
5275 bool
5276 gfc_check_ttynam (gfc_expr *unit)
5278 if (!scalar_check (unit, 0))
5279 return false;
5281 if (!type_check (unit, 0, BT_INTEGER))
5282 return false;
5284 return true;
5288 /* Common check function for the half a dozen intrinsics that have a
5289 single real argument. */
5291 bool
5292 gfc_check_x (gfc_expr *x)
5294 if (!type_check (x, 0, BT_REAL))
5295 return false;
5297 return true;
5301 /************* Check functions for intrinsic subroutines *************/
5303 bool
5304 gfc_check_cpu_time (gfc_expr *time)
5306 if (!scalar_check (time, 0))
5307 return false;
5309 if (!type_check (time, 0, BT_REAL))
5310 return false;
5312 if (!variable_check (time, 0, false))
5313 return false;
5315 return true;
5319 bool
5320 gfc_check_date_and_time (gfc_expr *date, gfc_expr *time,
5321 gfc_expr *zone, gfc_expr *values)
5323 if (date != NULL)
5325 if (!type_check (date, 0, BT_CHARACTER))
5326 return false;
5327 if (!kind_value_check (date, 0, gfc_default_character_kind))
5328 return false;
5329 if (!scalar_check (date, 0))
5330 return false;
5331 if (!variable_check (date, 0, false))
5332 return false;
5335 if (time != NULL)
5337 if (!type_check (time, 1, BT_CHARACTER))
5338 return false;
5339 if (!kind_value_check (time, 1, gfc_default_character_kind))
5340 return false;
5341 if (!scalar_check (time, 1))
5342 return false;
5343 if (!variable_check (time, 1, false))
5344 return false;
5347 if (zone != NULL)
5349 if (!type_check (zone, 2, BT_CHARACTER))
5350 return false;
5351 if (!kind_value_check (zone, 2, gfc_default_character_kind))
5352 return false;
5353 if (!scalar_check (zone, 2))
5354 return false;
5355 if (!variable_check (zone, 2, false))
5356 return false;
5359 if (values != NULL)
5361 if (!type_check (values, 3, BT_INTEGER))
5362 return false;
5363 if (!array_check (values, 3))
5364 return false;
5365 if (!rank_check (values, 3, 1))
5366 return false;
5367 if (!variable_check (values, 3, false))
5368 return false;
5371 return true;
5375 bool
5376 gfc_check_mvbits (gfc_expr *from, gfc_expr *frompos, gfc_expr *len,
5377 gfc_expr *to, gfc_expr *topos)
5379 if (!type_check (from, 0, BT_INTEGER))
5380 return false;
5382 if (!type_check (frompos, 1, BT_INTEGER))
5383 return false;
5385 if (!type_check (len, 2, BT_INTEGER))
5386 return false;
5388 if (!same_type_check (from, 0, to, 3))
5389 return false;
5391 if (!variable_check (to, 3, false))
5392 return false;
5394 if (!type_check (topos, 4, BT_INTEGER))
5395 return false;
5397 if (!nonnegative_check ("frompos", frompos))
5398 return false;
5400 if (!nonnegative_check ("topos", topos))
5401 return false;
5403 if (!nonnegative_check ("len", len))
5404 return false;
5406 if (!less_than_bitsize2 ("from", from, "frompos", frompos, "len", len))
5407 return false;
5409 if (!less_than_bitsize2 ("to", to, "topos", topos, "len", len))
5410 return false;
5412 return true;
5416 bool
5417 gfc_check_random_number (gfc_expr *harvest)
5419 if (!type_check (harvest, 0, BT_REAL))
5420 return false;
5422 if (!variable_check (harvest, 0, false))
5423 return false;
5425 return true;
5429 bool
5430 gfc_check_random_seed (gfc_expr *size, gfc_expr *put, gfc_expr *get)
5432 unsigned int nargs = 0, kiss_size;
5433 locus *where = NULL;
5434 mpz_t put_size, get_size;
5435 bool have_gfc_real_16; /* Try and mimic HAVE_GFC_REAL_16 in libgfortran. */
5437 have_gfc_real_16 = gfc_validate_kind (BT_REAL, 16, true) != -1;
5439 /* Keep the number of bytes in sync with kiss_size in
5440 libgfortran/intrinsics/random.c. */
5441 kiss_size = (have_gfc_real_16 ? 48 : 32) / gfc_default_integer_kind;
5443 if (size != NULL)
5445 if (size->expr_type != EXPR_VARIABLE
5446 || !size->symtree->n.sym->attr.optional)
5447 nargs++;
5449 if (!scalar_check (size, 0))
5450 return false;
5452 if (!type_check (size, 0, BT_INTEGER))
5453 return false;
5455 if (!variable_check (size, 0, false))
5456 return false;
5458 if (!kind_value_check (size, 0, gfc_default_integer_kind))
5459 return false;
5462 if (put != NULL)
5464 if (put->expr_type != EXPR_VARIABLE
5465 || !put->symtree->n.sym->attr.optional)
5467 nargs++;
5468 where = &put->where;
5471 if (!array_check (put, 1))
5472 return false;
5474 if (!rank_check (put, 1, 1))
5475 return false;
5477 if (!type_check (put, 1, BT_INTEGER))
5478 return false;
5480 if (!kind_value_check (put, 1, gfc_default_integer_kind))
5481 return false;
5483 if (gfc_array_size (put, &put_size)
5484 && mpz_get_ui (put_size) < kiss_size)
5485 gfc_error ("Size of %qs argument of %qs intrinsic at %L "
5486 "too small (%i/%i)",
5487 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
5488 where, (int) mpz_get_ui (put_size), kiss_size);
5491 if (get != NULL)
5493 if (get->expr_type != EXPR_VARIABLE
5494 || !get->symtree->n.sym->attr.optional)
5496 nargs++;
5497 where = &get->where;
5500 if (!array_check (get, 2))
5501 return false;
5503 if (!rank_check (get, 2, 1))
5504 return false;
5506 if (!type_check (get, 2, BT_INTEGER))
5507 return false;
5509 if (!variable_check (get, 2, false))
5510 return false;
5512 if (!kind_value_check (get, 2, gfc_default_integer_kind))
5513 return false;
5515 if (gfc_array_size (get, &get_size)
5516 && mpz_get_ui (get_size) < kiss_size)
5517 gfc_error ("Size of %qs argument of %qs intrinsic at %L "
5518 "too small (%i/%i)",
5519 gfc_current_intrinsic_arg[2]->name, gfc_current_intrinsic,
5520 where, (int) mpz_get_ui (get_size), kiss_size);
5523 /* RANDOM_SEED may not have more than one non-optional argument. */
5524 if (nargs > 1)
5525 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic, where);
5527 return true;
5531 bool
5532 gfc_check_second_sub (gfc_expr *time)
5534 if (!scalar_check (time, 0))
5535 return false;
5537 if (!type_check (time, 0, BT_REAL))
5538 return false;
5540 if (!kind_value_check (time, 0, 4))
5541 return false;
5543 return true;
5547 /* COUNT and COUNT_MAX of SYSTEM_CLOCK are scalar, default-kind integer
5548 variables in Fortran 95. In Fortran 2003 and later, they can be of any
5549 kind, and COUNT_RATE can be of type real. Note, count, count_rate, and
5550 count_max are all optional arguments */
5552 bool
5553 gfc_check_system_clock (gfc_expr *count, gfc_expr *count_rate,
5554 gfc_expr *count_max)
5556 if (count != NULL)
5558 if (!scalar_check (count, 0))
5559 return false;
5561 if (!type_check (count, 0, BT_INTEGER))
5562 return false;
5564 if (count->ts.kind != gfc_default_integer_kind
5565 && !gfc_notify_std (GFC_STD_F2003, "COUNT argument to "
5566 "SYSTEM_CLOCK at %L has non-default kind",
5567 &count->where))
5568 return false;
5570 if (!variable_check (count, 0, false))
5571 return false;
5574 if (count_rate != NULL)
5576 if (!scalar_check (count_rate, 1))
5577 return false;
5579 if (!variable_check (count_rate, 1, false))
5580 return false;
5582 if (count_rate->ts.type == BT_REAL)
5584 if (!gfc_notify_std (GFC_STD_F2003, "Real COUNT_RATE argument to "
5585 "SYSTEM_CLOCK at %L", &count_rate->where))
5586 return false;
5588 else
5590 if (!type_check (count_rate, 1, BT_INTEGER))
5591 return false;
5593 if (count_rate->ts.kind != gfc_default_integer_kind
5594 && !gfc_notify_std (GFC_STD_F2003, "COUNT_RATE argument to "
5595 "SYSTEM_CLOCK at %L has non-default kind",
5596 &count_rate->where))
5597 return false;
5602 if (count_max != NULL)
5604 if (!scalar_check (count_max, 2))
5605 return false;
5607 if (!type_check (count_max, 2, BT_INTEGER))
5608 return false;
5610 if (count_max->ts.kind != gfc_default_integer_kind
5611 && !gfc_notify_std (GFC_STD_F2003, "COUNT_MAX argument to "
5612 "SYSTEM_CLOCK at %L has non-default kind",
5613 &count_max->where))
5614 return false;
5616 if (!variable_check (count_max, 2, false))
5617 return false;
5620 return true;
5624 bool
5625 gfc_check_irand (gfc_expr *x)
5627 if (x == NULL)
5628 return true;
5630 if (!scalar_check (x, 0))
5631 return false;
5633 if (!type_check (x, 0, BT_INTEGER))
5634 return false;
5636 if (!kind_value_check (x, 0, 4))
5637 return false;
5639 return true;
5643 bool
5644 gfc_check_alarm_sub (gfc_expr *seconds, gfc_expr *handler, gfc_expr *status)
5646 if (!scalar_check (seconds, 0))
5647 return false;
5648 if (!type_check (seconds, 0, BT_INTEGER))
5649 return false;
5651 if (!int_or_proc_check (handler, 1))
5652 return false;
5653 if (handler->ts.type == BT_INTEGER && !scalar_check (handler, 1))
5654 return false;
5656 if (status == NULL)
5657 return true;
5659 if (!scalar_check (status, 2))
5660 return false;
5661 if (!type_check (status, 2, BT_INTEGER))
5662 return false;
5663 if (!kind_value_check (status, 2, gfc_default_integer_kind))
5664 return false;
5666 return true;
5670 bool
5671 gfc_check_rand (gfc_expr *x)
5673 if (x == NULL)
5674 return true;
5676 if (!scalar_check (x, 0))
5677 return false;
5679 if (!type_check (x, 0, BT_INTEGER))
5680 return false;
5682 if (!kind_value_check (x, 0, 4))
5683 return false;
5685 return true;
5689 bool
5690 gfc_check_srand (gfc_expr *x)
5692 if (!scalar_check (x, 0))
5693 return false;
5695 if (!type_check (x, 0, BT_INTEGER))
5696 return false;
5698 if (!kind_value_check (x, 0, 4))
5699 return false;
5701 return true;
5705 bool
5706 gfc_check_ctime_sub (gfc_expr *time, gfc_expr *result)
5708 if (!scalar_check (time, 0))
5709 return false;
5710 if (!type_check (time, 0, BT_INTEGER))
5711 return false;
5713 if (!type_check (result, 1, BT_CHARACTER))
5714 return false;
5715 if (!kind_value_check (result, 1, gfc_default_character_kind))
5716 return false;
5718 return true;
5722 bool
5723 gfc_check_dtime_etime (gfc_expr *x)
5725 if (!array_check (x, 0))
5726 return false;
5728 if (!rank_check (x, 0, 1))
5729 return false;
5731 if (!variable_check (x, 0, false))
5732 return false;
5734 if (!type_check (x, 0, BT_REAL))
5735 return false;
5737 if (!kind_value_check (x, 0, 4))
5738 return false;
5740 return true;
5744 bool
5745 gfc_check_dtime_etime_sub (gfc_expr *values, gfc_expr *time)
5747 if (!array_check (values, 0))
5748 return false;
5750 if (!rank_check (values, 0, 1))
5751 return false;
5753 if (!variable_check (values, 0, false))
5754 return false;
5756 if (!type_check (values, 0, BT_REAL))
5757 return false;
5759 if (!kind_value_check (values, 0, 4))
5760 return false;
5762 if (!scalar_check (time, 1))
5763 return false;
5765 if (!type_check (time, 1, BT_REAL))
5766 return false;
5768 if (!kind_value_check (time, 1, 4))
5769 return false;
5771 return true;
5775 bool
5776 gfc_check_fdate_sub (gfc_expr *date)
5778 if (!type_check (date, 0, BT_CHARACTER))
5779 return false;
5780 if (!kind_value_check (date, 0, gfc_default_character_kind))
5781 return false;
5783 return true;
5787 bool
5788 gfc_check_gerror (gfc_expr *msg)
5790 if (!type_check (msg, 0, BT_CHARACTER))
5791 return false;
5792 if (!kind_value_check (msg, 0, gfc_default_character_kind))
5793 return false;
5795 return true;
5799 bool
5800 gfc_check_getcwd_sub (gfc_expr *cwd, gfc_expr *status)
5802 if (!type_check (cwd, 0, BT_CHARACTER))
5803 return false;
5804 if (!kind_value_check (cwd, 0, gfc_default_character_kind))
5805 return false;
5807 if (status == NULL)
5808 return true;
5810 if (!scalar_check (status, 1))
5811 return false;
5813 if (!type_check (status, 1, BT_INTEGER))
5814 return false;
5816 return true;
5820 bool
5821 gfc_check_getarg (gfc_expr *pos, gfc_expr *value)
5823 if (!type_check (pos, 0, BT_INTEGER))
5824 return false;
5826 if (pos->ts.kind > gfc_default_integer_kind)
5828 gfc_error ("%qs argument of %qs intrinsic at %L must be of a kind "
5829 "not wider than the default kind (%d)",
5830 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
5831 &pos->where, gfc_default_integer_kind);
5832 return false;
5835 if (!type_check (value, 1, BT_CHARACTER))
5836 return false;
5837 if (!kind_value_check (value, 1, gfc_default_character_kind))
5838 return false;
5840 return true;
5844 bool
5845 gfc_check_getlog (gfc_expr *msg)
5847 if (!type_check (msg, 0, BT_CHARACTER))
5848 return false;
5849 if (!kind_value_check (msg, 0, gfc_default_character_kind))
5850 return false;
5852 return true;
5856 bool
5857 gfc_check_exit (gfc_expr *status)
5859 if (status == NULL)
5860 return true;
5862 if (!type_check (status, 0, BT_INTEGER))
5863 return false;
5865 if (!scalar_check (status, 0))
5866 return false;
5868 return true;
5872 bool
5873 gfc_check_flush (gfc_expr *unit)
5875 if (unit == NULL)
5876 return true;
5878 if (!type_check (unit, 0, BT_INTEGER))
5879 return false;
5881 if (!scalar_check (unit, 0))
5882 return false;
5884 return true;
5888 bool
5889 gfc_check_free (gfc_expr *i)
5891 if (!type_check (i, 0, BT_INTEGER))
5892 return false;
5894 if (!scalar_check (i, 0))
5895 return false;
5897 return true;
5901 bool
5902 gfc_check_hostnm (gfc_expr *name)
5904 if (!type_check (name, 0, BT_CHARACTER))
5905 return false;
5906 if (!kind_value_check (name, 0, gfc_default_character_kind))
5907 return false;
5909 return true;
5913 bool
5914 gfc_check_hostnm_sub (gfc_expr *name, gfc_expr *status)
5916 if (!type_check (name, 0, BT_CHARACTER))
5917 return false;
5918 if (!kind_value_check (name, 0, gfc_default_character_kind))
5919 return false;
5921 if (status == NULL)
5922 return true;
5924 if (!scalar_check (status, 1))
5925 return false;
5927 if (!type_check (status, 1, BT_INTEGER))
5928 return false;
5930 return true;
5934 bool
5935 gfc_check_itime_idate (gfc_expr *values)
5937 if (!array_check (values, 0))
5938 return false;
5940 if (!rank_check (values, 0, 1))
5941 return false;
5943 if (!variable_check (values, 0, false))
5944 return false;
5946 if (!type_check (values, 0, BT_INTEGER))
5947 return false;
5949 if (!kind_value_check (values, 0, gfc_default_integer_kind))
5950 return false;
5952 return true;
5956 bool
5957 gfc_check_ltime_gmtime (gfc_expr *time, gfc_expr *values)
5959 if (!type_check (time, 0, BT_INTEGER))
5960 return false;
5962 if (!kind_value_check (time, 0, gfc_default_integer_kind))
5963 return false;
5965 if (!scalar_check (time, 0))
5966 return false;
5968 if (!array_check (values, 1))
5969 return false;
5971 if (!rank_check (values, 1, 1))
5972 return false;
5974 if (!variable_check (values, 1, false))
5975 return false;
5977 if (!type_check (values, 1, BT_INTEGER))
5978 return false;
5980 if (!kind_value_check (values, 1, gfc_default_integer_kind))
5981 return false;
5983 return true;
5987 bool
5988 gfc_check_ttynam_sub (gfc_expr *unit, gfc_expr *name)
5990 if (!scalar_check (unit, 0))
5991 return false;
5993 if (!type_check (unit, 0, BT_INTEGER))
5994 return false;
5996 if (!type_check (name, 1, BT_CHARACTER))
5997 return false;
5998 if (!kind_value_check (name, 1, gfc_default_character_kind))
5999 return false;
6001 return true;
6005 bool
6006 gfc_check_isatty (gfc_expr *unit)
6008 if (unit == NULL)
6009 return false;
6011 if (!type_check (unit, 0, BT_INTEGER))
6012 return false;
6014 if (!scalar_check (unit, 0))
6015 return false;
6017 return true;
6021 bool
6022 gfc_check_isnan (gfc_expr *x)
6024 if (!type_check (x, 0, BT_REAL))
6025 return false;
6027 return true;
6031 bool
6032 gfc_check_perror (gfc_expr *string)
6034 if (!type_check (string, 0, BT_CHARACTER))
6035 return false;
6036 if (!kind_value_check (string, 0, gfc_default_character_kind))
6037 return false;
6039 return true;
6043 bool
6044 gfc_check_umask (gfc_expr *mask)
6046 if (!type_check (mask, 0, BT_INTEGER))
6047 return false;
6049 if (!scalar_check (mask, 0))
6050 return false;
6052 return true;
6056 bool
6057 gfc_check_umask_sub (gfc_expr *mask, gfc_expr *old)
6059 if (!type_check (mask, 0, BT_INTEGER))
6060 return false;
6062 if (!scalar_check (mask, 0))
6063 return false;
6065 if (old == NULL)
6066 return true;
6068 if (!scalar_check (old, 1))
6069 return false;
6071 if (!type_check (old, 1, BT_INTEGER))
6072 return false;
6074 return true;
6078 bool
6079 gfc_check_unlink (gfc_expr *name)
6081 if (!type_check (name, 0, BT_CHARACTER))
6082 return false;
6083 if (!kind_value_check (name, 0, gfc_default_character_kind))
6084 return false;
6086 return true;
6090 bool
6091 gfc_check_unlink_sub (gfc_expr *name, gfc_expr *status)
6093 if (!type_check (name, 0, BT_CHARACTER))
6094 return false;
6095 if (!kind_value_check (name, 0, gfc_default_character_kind))
6096 return false;
6098 if (status == NULL)
6099 return true;
6101 if (!scalar_check (status, 1))
6102 return false;
6104 if (!type_check (status, 1, BT_INTEGER))
6105 return false;
6107 return true;
6111 bool
6112 gfc_check_signal (gfc_expr *number, gfc_expr *handler)
6114 if (!scalar_check (number, 0))
6115 return false;
6116 if (!type_check (number, 0, BT_INTEGER))
6117 return false;
6119 if (!int_or_proc_check (handler, 1))
6120 return false;
6121 if (handler->ts.type == BT_INTEGER && !scalar_check (handler, 1))
6122 return false;
6124 return true;
6128 bool
6129 gfc_check_signal_sub (gfc_expr *number, gfc_expr *handler, gfc_expr *status)
6131 if (!scalar_check (number, 0))
6132 return false;
6133 if (!type_check (number, 0, BT_INTEGER))
6134 return false;
6136 if (!int_or_proc_check (handler, 1))
6137 return false;
6138 if (handler->ts.type == BT_INTEGER && !scalar_check (handler, 1))
6139 return false;
6141 if (status == NULL)
6142 return true;
6144 if (!type_check (status, 2, BT_INTEGER))
6145 return false;
6146 if (!scalar_check (status, 2))
6147 return false;
6149 return true;
6153 bool
6154 gfc_check_system_sub (gfc_expr *cmd, gfc_expr *status)
6156 if (!type_check (cmd, 0, BT_CHARACTER))
6157 return false;
6158 if (!kind_value_check (cmd, 0, gfc_default_character_kind))
6159 return false;
6161 if (!scalar_check (status, 1))
6162 return false;
6164 if (!type_check (status, 1, BT_INTEGER))
6165 return false;
6167 if (!kind_value_check (status, 1, gfc_default_integer_kind))
6168 return false;
6170 return true;
6174 /* This is used for the GNU intrinsics AND, OR and XOR. */
6175 bool
6176 gfc_check_and (gfc_expr *i, gfc_expr *j)
6178 if (i->ts.type != BT_INTEGER && i->ts.type != BT_LOGICAL)
6180 gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER "
6181 "or LOGICAL", gfc_current_intrinsic_arg[0]->name,
6182 gfc_current_intrinsic, &i->where);
6183 return false;
6186 if (j->ts.type != BT_INTEGER && j->ts.type != BT_LOGICAL)
6188 gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER "
6189 "or LOGICAL", gfc_current_intrinsic_arg[1]->name,
6190 gfc_current_intrinsic, &j->where);
6191 return false;
6194 if (i->ts.type != j->ts.type)
6196 gfc_error ("%qs and %qs arguments of %qs intrinsic at %L must "
6197 "have the same type", gfc_current_intrinsic_arg[0]->name,
6198 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
6199 &j->where);
6200 return false;
6203 if (!scalar_check (i, 0))
6204 return false;
6206 if (!scalar_check (j, 1))
6207 return false;
6209 return true;
6213 bool
6214 gfc_check_storage_size (gfc_expr *a, gfc_expr *kind)
6216 if (a->ts.type == BT_ASSUMED)
6218 gfc_error ("%qs argument of %qs intrinsic at %L shall not be TYPE(*)",
6219 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
6220 &a->where);
6221 return false;
6224 if (a->ts.type == BT_PROCEDURE)
6226 gfc_error ("%qs argument of %qs intrinsic at %L shall not be a "
6227 "procedure", gfc_current_intrinsic_arg[0]->name,
6228 gfc_current_intrinsic, &a->where);
6229 return false;
6232 if (kind == NULL)
6233 return true;
6235 if (!type_check (kind, 1, BT_INTEGER))
6236 return false;
6238 if (!scalar_check (kind, 1))
6239 return false;
6241 if (kind->expr_type != EXPR_CONSTANT)
6243 gfc_error ("%qs argument of %qs intrinsic at %L must be a constant",
6244 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
6245 &kind->where);
6246 return false;
6249 return true;