2 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
3 Free Software Foundation, Inc.
4 Contributed by Andy Vaught & Katherine Holcomb
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
23 /* These functions check to see if an argument list is compatible with
24 a particular intrinsic function or subroutine. Presence of
25 required arguments has already been established, the argument list
26 has been sorted into the right order and has NULL arguments in the
27 correct places for missing optional arguments. */
33 #include "intrinsic.h"
36 /* Make sure an expression is a scalar. */
39 scalar_check (gfc_expr *e, int n)
44 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a scalar",
45 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
51 /* Check the type of an expression. */
54 type_check (gfc_expr *e, int n, bt type)
56 if (e->ts.type == type)
59 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
60 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where,
61 gfc_basic_typename (type));
67 /* Check that the expression is a numeric type. */
70 numeric_check (gfc_expr *e, int n)
72 if (gfc_numeric_ts (&e->ts))
75 /* If the expression has not got a type, check if its namespace can
76 offer a default type. */
77 if ((e->expr_type == EXPR_VARIABLE || e->expr_type == EXPR_VARIABLE)
78 && e->symtree->n.sym->ts.type == BT_UNKNOWN
79 && gfc_set_default_type (e->symtree->n.sym, 0,
80 e->symtree->n.sym->ns) == SUCCESS
81 && gfc_numeric_ts (&e->symtree->n.sym->ts))
83 e->ts = e->symtree->n.sym->ts;
87 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a numeric type",
88 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
94 /* Check that an expression is integer or real. */
97 int_or_real_check (gfc_expr *e, int n)
99 if (e->ts.type != BT_INTEGER && e->ts.type != BT_REAL)
101 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
102 "or REAL", gfc_current_intrinsic_arg[n],
103 gfc_current_intrinsic, &e->where);
111 /* Check that an expression is real or complex. */
114 real_or_complex_check (gfc_expr *e, int n)
116 if (e->ts.type != BT_REAL && e->ts.type != BT_COMPLEX)
118 gfc_error ("'%s' argument of '%s' intrinsic at %L must be REAL "
119 "or COMPLEX", gfc_current_intrinsic_arg[n],
120 gfc_current_intrinsic, &e->where);
128 /* Check that the expression is an optional constant integer
129 and that it specifies a valid kind for that type. */
132 kind_check (gfc_expr *k, int n, bt type)
139 if (type_check (k, n, BT_INTEGER) == FAILURE)
142 if (scalar_check (k, n) == FAILURE)
145 if (k->expr_type != EXPR_CONSTANT)
147 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
148 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
153 if (gfc_extract_int (k, &kind) != NULL
154 || gfc_validate_kind (type, kind, true) < 0)
156 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type),
165 /* Make sure the expression is a double precision real. */
168 double_check (gfc_expr *d, int n)
170 if (type_check (d, n, BT_REAL) == FAILURE)
173 if (d->ts.kind != gfc_default_double_kind)
175 gfc_error ("'%s' argument of '%s' intrinsic at %L must be double "
176 "precision", gfc_current_intrinsic_arg[n],
177 gfc_current_intrinsic, &d->where);
185 /* Make sure the expression is a logical array. */
188 logical_array_check (gfc_expr *array, int n)
190 if (array->ts.type != BT_LOGICAL || array->rank == 0)
192 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a logical "
193 "array", gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
202 /* Make sure an expression is an array. */
205 array_check (gfc_expr *e, int n)
210 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array",
211 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
217 /* Make sure two expressions have the same type. */
220 same_type_check (gfc_expr *e, int n, gfc_expr *f, int m)
222 if (gfc_compare_types (&e->ts, &f->ts))
225 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same type "
226 "and kind as '%s'", gfc_current_intrinsic_arg[m],
227 gfc_current_intrinsic, &f->where, gfc_current_intrinsic_arg[n]);
233 /* Make sure that an expression has a certain (nonzero) rank. */
236 rank_check (gfc_expr *e, int n, int rank)
241 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank %d",
242 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
249 /* Make sure a variable expression is not an optional dummy argument. */
252 nonoptional_check (gfc_expr *e, int n)
254 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.optional)
256 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
257 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
261 /* TODO: Recursive check on nonoptional variables? */
267 /* Check that an expression has a particular kind. */
270 kind_value_check (gfc_expr *e, int n, int k)
275 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of kind %d",
276 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
283 /* Make sure an expression is a variable. */
286 variable_check (gfc_expr *e, int n)
288 if ((e->expr_type == EXPR_VARIABLE
289 && e->symtree->n.sym->attr.flavor != FL_PARAMETER)
290 || (e->expr_type == EXPR_FUNCTION
291 && e->symtree->n.sym->result == e->symtree->n.sym))
294 if (e->expr_type == EXPR_VARIABLE
295 && e->symtree->n.sym->attr.intent == INTENT_IN)
297 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
298 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
303 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a variable",
304 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
310 /* Check the common DIM parameter for correctness. */
313 dim_check (gfc_expr *dim, int n, bool optional)
318 if (type_check (dim, n, BT_INTEGER) == FAILURE)
321 if (scalar_check (dim, n) == FAILURE)
324 if (!optional && nonoptional_check (dim, n) == FAILURE)
331 /* If a DIM parameter is a constant, make sure that it is greater than
332 zero and less than or equal to the rank of the given array. If
333 allow_assumed is zero then dim must be less than the rank of the array
334 for assumed size arrays. */
337 dim_rank_check (gfc_expr *dim, gfc_expr *array, int allow_assumed)
345 if (dim->expr_type != EXPR_CONSTANT
346 || (array->expr_type != EXPR_VARIABLE
347 && array->expr_type != EXPR_ARRAY))
351 if (array->expr_type == EXPR_VARIABLE)
353 ar = gfc_find_array_ref (array);
354 if (ar->as->type == AS_ASSUMED_SIZE
356 && ar->type != AR_ELEMENT
357 && ar->type != AR_SECTION)
361 if (mpz_cmp_ui (dim->value.integer, 1) < 0
362 || mpz_cmp_ui (dim->value.integer, rank) > 0)
364 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
365 "dimension index", gfc_current_intrinsic, &dim->where);
374 /* Compare the size of a along dimension ai with the size of b along
375 dimension bi, returning 0 if they are known not to be identical,
376 and 1 if they are identical, or if this cannot be determined. */
379 identical_dimen_shape (gfc_expr *a, int ai, gfc_expr *b, int bi)
381 mpz_t a_size, b_size;
384 gcc_assert (a->rank > ai);
385 gcc_assert (b->rank > bi);
389 if (gfc_array_dimen_size (a, ai, &a_size) == SUCCESS)
391 if (gfc_array_dimen_size (b, bi, &b_size) == SUCCESS)
393 if (mpz_cmp (a_size, b_size) != 0)
404 /* Check whether two character expressions have the same length;
405 returns SUCCESS if they have or if the length cannot be determined. */
408 gfc_check_same_strlen (const gfc_expr *a, const gfc_expr *b, const char *name)
413 if (a->ts.cl && a->ts.cl->length
414 && a->ts.cl->length->expr_type == EXPR_CONSTANT)
415 len_a = mpz_get_si (a->ts.cl->length->value.integer);
416 else if (a->expr_type == EXPR_CONSTANT
417 && (a->ts.cl == NULL || a->ts.cl->length == NULL))
418 len_a = a->value.character.length;
422 if (b->ts.cl && b->ts.cl->length
423 && b->ts.cl->length->expr_type == EXPR_CONSTANT)
424 len_b = mpz_get_si (b->ts.cl->length->value.integer);
425 else if (b->expr_type == EXPR_CONSTANT
426 && (b->ts.cl == NULL || b->ts.cl->length == NULL))
427 len_b = b->value.character.length;
434 gfc_error ("Unequal character lengths (%ld/%ld) in %s at %L",
435 len_a, len_b, name, &a->where);
440 /***** Check functions *****/
442 /* Check subroutine suitable for intrinsics taking a real argument and
443 a kind argument for the result. */
446 check_a_kind (gfc_expr *a, gfc_expr *kind, bt type)
448 if (type_check (a, 0, BT_REAL) == FAILURE)
450 if (kind_check (kind, 1, type) == FAILURE)
457 /* Check subroutine suitable for ceiling, floor and nint. */
460 gfc_check_a_ikind (gfc_expr *a, gfc_expr *kind)
462 return check_a_kind (a, kind, BT_INTEGER);
466 /* Check subroutine suitable for aint, anint. */
469 gfc_check_a_xkind (gfc_expr *a, gfc_expr *kind)
471 return check_a_kind (a, kind, BT_REAL);
476 gfc_check_abs (gfc_expr *a)
478 if (numeric_check (a, 0) == FAILURE)
486 gfc_check_achar (gfc_expr *a, gfc_expr *kind)
488 if (type_check (a, 0, BT_INTEGER) == FAILURE)
490 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
498 gfc_check_access_func (gfc_expr *name, gfc_expr *mode)
500 if (type_check (name, 0, BT_CHARACTER) == FAILURE
501 || scalar_check (name, 0) == FAILURE)
503 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
506 if (type_check (mode, 1, BT_CHARACTER) == FAILURE
507 || scalar_check (mode, 1) == FAILURE)
509 if (kind_value_check (mode, 1, gfc_default_character_kind) == FAILURE)
517 gfc_check_all_any (gfc_expr *mask, gfc_expr *dim)
519 if (logical_array_check (mask, 0) == FAILURE)
522 if (dim_check (dim, 1, false) == FAILURE)
525 if (dim_rank_check (dim, mask, 0) == FAILURE)
533 gfc_check_allocated (gfc_expr *array)
535 symbol_attribute attr;
537 if (variable_check (array, 0) == FAILURE)
540 attr = gfc_variable_attr (array, NULL);
541 if (!attr.allocatable)
543 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
544 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
549 if (array_check (array, 0) == FAILURE)
556 /* Common check function where the first argument must be real or
557 integer and the second argument must be the same as the first. */
560 gfc_check_a_p (gfc_expr *a, gfc_expr *p)
562 if (int_or_real_check (a, 0) == FAILURE)
565 if (a->ts.type != p->ts.type)
567 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
568 "have the same type", gfc_current_intrinsic_arg[0],
569 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
574 if (a->ts.kind != p->ts.kind)
576 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
577 &p->where) == FAILURE)
586 gfc_check_x_yd (gfc_expr *x, gfc_expr *y)
588 if (double_check (x, 0) == FAILURE || double_check (y, 1) == FAILURE)
596 gfc_check_associated (gfc_expr *pointer, gfc_expr *target)
598 symbol_attribute attr1, attr2;
603 where = &pointer->where;
605 if (pointer->expr_type == EXPR_VARIABLE)
606 attr1 = gfc_variable_attr (pointer, NULL);
607 else if (pointer->expr_type == EXPR_FUNCTION)
608 attr1 = pointer->symtree->n.sym->attr;
609 else if (pointer->expr_type == EXPR_NULL)
612 gcc_assert (0); /* Pointer must be a variable or a function. */
614 if (!attr1.pointer && !attr1.proc_pointer)
616 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
617 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
622 /* Target argument is optional. */
626 where = &target->where;
627 if (target->expr_type == EXPR_NULL)
630 if (target->expr_type == EXPR_VARIABLE)
631 attr2 = gfc_variable_attr (target, NULL);
632 else if (target->expr_type == EXPR_FUNCTION)
633 attr2 = target->symtree->n.sym->attr;
636 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
637 "or target VARIABLE or FUNCTION", gfc_current_intrinsic_arg[1],
638 gfc_current_intrinsic, &target->where);
642 if (attr1.pointer && !attr2.pointer && !attr2.target)
644 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
645 "or a TARGET", gfc_current_intrinsic_arg[1],
646 gfc_current_intrinsic, &target->where);
651 if (same_type_check (pointer, 0, target, 1) == FAILURE)
653 if (rank_check (target, 0, pointer->rank) == FAILURE)
655 if (target->rank > 0)
657 for (i = 0; i < target->rank; i++)
658 if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
660 gfc_error ("Array section with a vector subscript at %L shall not "
661 "be the target of a pointer",
671 gfc_error ("NULL pointer at %L is not permitted as actual argument "
672 "of '%s' intrinsic function", where, gfc_current_intrinsic);
679 gfc_check_atan2 (gfc_expr *y, gfc_expr *x)
681 if (type_check (y, 0, BT_REAL) == FAILURE)
683 if (same_type_check (y, 0, x, 1) == FAILURE)
690 /* BESJN and BESYN functions. */
693 gfc_check_besn (gfc_expr *n, gfc_expr *x)
695 if (type_check (n, 0, BT_INTEGER) == FAILURE)
698 if (type_check (x, 1, BT_REAL) == FAILURE)
706 gfc_check_btest (gfc_expr *i, gfc_expr *pos)
708 if (type_check (i, 0, BT_INTEGER) == FAILURE)
710 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
718 gfc_check_char (gfc_expr *i, gfc_expr *kind)
720 if (type_check (i, 0, BT_INTEGER) == FAILURE)
722 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
730 gfc_check_chdir (gfc_expr *dir)
732 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
734 if (kind_value_check (dir, 0, gfc_default_character_kind) == FAILURE)
742 gfc_check_chdir_sub (gfc_expr *dir, gfc_expr *status)
744 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
746 if (kind_value_check (dir, 0, gfc_default_character_kind) == FAILURE)
752 if (type_check (status, 1, BT_INTEGER) == FAILURE)
754 if (scalar_check (status, 1) == FAILURE)
762 gfc_check_chmod (gfc_expr *name, gfc_expr *mode)
764 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
766 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
769 if (type_check (mode, 1, BT_CHARACTER) == FAILURE)
771 if (kind_value_check (mode, 1, gfc_default_character_kind) == FAILURE)
779 gfc_check_chmod_sub (gfc_expr *name, gfc_expr *mode, gfc_expr *status)
781 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
783 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
786 if (type_check (mode, 1, BT_CHARACTER) == FAILURE)
788 if (kind_value_check (mode, 1, gfc_default_character_kind) == FAILURE)
794 if (type_check (status, 2, BT_INTEGER) == FAILURE)
797 if (scalar_check (status, 2) == FAILURE)
805 gfc_check_cmplx (gfc_expr *x, gfc_expr *y, gfc_expr *kind)
807 if (numeric_check (x, 0) == FAILURE)
812 if (numeric_check (y, 1) == FAILURE)
815 if (x->ts.type == BT_COMPLEX)
817 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
818 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
819 gfc_current_intrinsic, &y->where);
824 if (kind_check (kind, 2, BT_COMPLEX) == FAILURE)
832 gfc_check_complex (gfc_expr *x, gfc_expr *y)
834 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
836 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
837 "or REAL", gfc_current_intrinsic_arg[0],
838 gfc_current_intrinsic, &x->where);
841 if (scalar_check (x, 0) == FAILURE)
844 if (y->ts.type != BT_INTEGER && y->ts.type != BT_REAL)
846 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
847 "or REAL", gfc_current_intrinsic_arg[1],
848 gfc_current_intrinsic, &y->where);
851 if (scalar_check (y, 1) == FAILURE)
859 gfc_check_count (gfc_expr *mask, gfc_expr *dim, gfc_expr *kind)
861 if (logical_array_check (mask, 0) == FAILURE)
863 if (dim_check (dim, 1, false) == FAILURE)
865 if (dim_rank_check (dim, mask, 0) == FAILURE)
867 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
869 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
870 "with KIND argument at %L",
871 gfc_current_intrinsic, &kind->where) == FAILURE)
879 gfc_check_cshift (gfc_expr *array, gfc_expr *shift, gfc_expr *dim)
881 if (array_check (array, 0) == FAILURE)
884 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
887 if (dim_check (dim, 2, true) == FAILURE)
890 if (dim_rank_check (dim, array, false) == FAILURE)
893 if (array->rank == 1 || shift->rank == 0)
895 if (scalar_check (shift, 1) == FAILURE)
898 else if (shift->rank == array->rank - 1)
903 else if (dim->expr_type == EXPR_CONSTANT)
904 gfc_extract_int (dim, &d);
911 for (i = 0, j = 0; i < array->rank; i++)
914 if (!identical_dimen_shape (array, i, shift, j))
916 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
917 "invalid shape in dimension %d (%ld/%ld)",
918 gfc_current_intrinsic_arg[1],
919 gfc_current_intrinsic, &shift->where, i + 1,
920 mpz_get_si (array->shape[i]),
921 mpz_get_si (shift->shape[j]));
931 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
932 "%d or be a scalar", gfc_current_intrinsic_arg[1],
933 gfc_current_intrinsic, &shift->where, array->rank - 1);
942 gfc_check_ctime (gfc_expr *time)
944 if (scalar_check (time, 0) == FAILURE)
947 if (type_check (time, 0, BT_INTEGER) == FAILURE)
954 gfc_try gfc_check_datan2 (gfc_expr *y, gfc_expr *x)
956 if (double_check (y, 0) == FAILURE || double_check (x, 1) == FAILURE)
963 gfc_check_dcmplx (gfc_expr *x, gfc_expr *y)
965 if (numeric_check (x, 0) == FAILURE)
970 if (numeric_check (y, 1) == FAILURE)
973 if (x->ts.type == BT_COMPLEX)
975 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
976 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
977 gfc_current_intrinsic, &y->where);
987 gfc_check_dble (gfc_expr *x)
989 if (numeric_check (x, 0) == FAILURE)
997 gfc_check_digits (gfc_expr *x)
999 if (int_or_real_check (x, 0) == FAILURE)
1007 gfc_check_dot_product (gfc_expr *vector_a, gfc_expr *vector_b)
1009 switch (vector_a->ts.type)
1012 if (type_check (vector_b, 1, BT_LOGICAL) == FAILURE)
1019 if (numeric_check (vector_b, 1) == FAILURE)
1024 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1025 "or LOGICAL", gfc_current_intrinsic_arg[0],
1026 gfc_current_intrinsic, &vector_a->where);
1030 if (rank_check (vector_a, 0, 1) == FAILURE)
1033 if (rank_check (vector_b, 1, 1) == FAILURE)
1036 if (! identical_dimen_shape (vector_a, 0, vector_b, 0))
1038 gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
1039 "intrinsic 'dot_product'", gfc_current_intrinsic_arg[0],
1040 gfc_current_intrinsic_arg[1], &vector_a->where);
1049 gfc_check_dprod (gfc_expr *x, gfc_expr *y)
1051 if (type_check (x, 0, BT_REAL) == FAILURE
1052 || type_check (y, 1, BT_REAL) == FAILURE)
1055 if (x->ts.kind != gfc_default_real_kind)
1057 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1058 "real", gfc_current_intrinsic_arg[0],
1059 gfc_current_intrinsic, &x->where);
1063 if (y->ts.kind != gfc_default_real_kind)
1065 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1066 "real", gfc_current_intrinsic_arg[1],
1067 gfc_current_intrinsic, &y->where);
1076 gfc_check_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary,
1079 if (array_check (array, 0) == FAILURE)
1082 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
1085 if (dim_check (dim, 3, true) == FAILURE)
1088 if (dim_rank_check (dim, array, false) == FAILURE)
1091 if (array->rank == 1 || shift->rank == 0)
1093 if (scalar_check (shift, 1) == FAILURE)
1096 else if (shift->rank == array->rank - 1)
1101 else if (dim->expr_type == EXPR_CONSTANT)
1102 gfc_extract_int (dim, &d);
1109 for (i = 0, j = 0; i < array->rank; i++)
1112 if (!identical_dimen_shape (array, i, shift, j))
1114 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1115 "invalid shape in dimension %d (%ld/%ld)",
1116 gfc_current_intrinsic_arg[1],
1117 gfc_current_intrinsic, &shift->where, i + 1,
1118 mpz_get_si (array->shape[i]),
1119 mpz_get_si (shift->shape[j]));
1129 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1130 "%d or be a scalar", gfc_current_intrinsic_arg[1],
1131 gfc_current_intrinsic, &shift->where, array->rank - 1);
1135 if (boundary != NULL)
1137 if (same_type_check (array, 0, boundary, 2) == FAILURE)
1140 if (array->rank == 1 || boundary->rank == 0)
1142 if (scalar_check (boundary, 2) == FAILURE)
1145 else if (boundary->rank == array->rank - 1)
1147 if (gfc_check_conformance (shift, boundary,
1148 "arguments '%s' and '%s' for "
1150 gfc_current_intrinsic_arg[1],
1151 gfc_current_intrinsic_arg[2],
1152 gfc_current_intrinsic ) == FAILURE)
1157 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have "
1158 "rank %d or be a scalar", gfc_current_intrinsic_arg[1],
1159 gfc_current_intrinsic, &shift->where, array->rank - 1);
1168 /* A single complex argument. */
1171 gfc_check_fn_c (gfc_expr *a)
1173 if (type_check (a, 0, BT_COMPLEX) == FAILURE)
1180 /* A single real argument. */
1183 gfc_check_fn_r (gfc_expr *a)
1185 if (type_check (a, 0, BT_REAL) == FAILURE)
1191 /* A single double argument. */
1194 gfc_check_fn_d (gfc_expr *a)
1196 if (double_check (a, 0) == FAILURE)
1202 /* A single real or complex argument. */
1205 gfc_check_fn_rc (gfc_expr *a)
1207 if (real_or_complex_check (a, 0) == FAILURE)
1215 gfc_check_fnum (gfc_expr *unit)
1217 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
1220 if (scalar_check (unit, 0) == FAILURE)
1228 gfc_check_huge (gfc_expr *x)
1230 if (int_or_real_check (x, 0) == FAILURE)
1238 gfc_check_hypot (gfc_expr *x, gfc_expr *y)
1240 if (type_check (x, 0, BT_REAL) == FAILURE)
1242 if (same_type_check (x, 0, y, 1) == FAILURE)
1249 /* Check that the single argument is an integer. */
1252 gfc_check_i (gfc_expr *i)
1254 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1262 gfc_check_iand (gfc_expr *i, gfc_expr *j)
1264 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1267 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1270 if (i->ts.kind != j->ts.kind)
1272 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1273 &i->where) == FAILURE)
1282 gfc_check_ibclr (gfc_expr *i, gfc_expr *pos)
1284 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1287 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1295 gfc_check_ibits (gfc_expr *i, gfc_expr *pos, gfc_expr *len)
1297 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1300 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1303 if (type_check (len, 2, BT_INTEGER) == FAILURE)
1311 gfc_check_ibset (gfc_expr *i, gfc_expr *pos)
1313 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1316 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1324 gfc_check_ichar_iachar (gfc_expr *c, gfc_expr *kind)
1328 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
1331 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1334 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1335 "with KIND argument at %L",
1336 gfc_current_intrinsic, &kind->where) == FAILURE)
1339 if (c->expr_type == EXPR_VARIABLE || c->expr_type == EXPR_SUBSTRING)
1345 /* Substring references don't have the charlength set. */
1347 while (ref && ref->type != REF_SUBSTRING)
1350 gcc_assert (ref == NULL || ref->type == REF_SUBSTRING);
1354 /* Check that the argument is length one. Non-constant lengths
1355 can't be checked here, so assume they are ok. */
1356 if (c->ts.cl && c->ts.cl->length)
1358 /* If we already have a length for this expression then use it. */
1359 if (c->ts.cl->length->expr_type != EXPR_CONSTANT)
1361 i = mpz_get_si (c->ts.cl->length->value.integer);
1368 start = ref->u.ss.start;
1369 end = ref->u.ss.end;
1372 if (end == NULL || end->expr_type != EXPR_CONSTANT
1373 || start->expr_type != EXPR_CONSTANT)
1376 i = mpz_get_si (end->value.integer) + 1
1377 - mpz_get_si (start->value.integer);
1385 gfc_error ("Argument of %s at %L must be of length one",
1386 gfc_current_intrinsic, &c->where);
1395 gfc_check_idnint (gfc_expr *a)
1397 if (double_check (a, 0) == FAILURE)
1405 gfc_check_ieor (gfc_expr *i, gfc_expr *j)
1407 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1410 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1413 if (i->ts.kind != j->ts.kind)
1415 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1416 &i->where) == FAILURE)
1425 gfc_check_index (gfc_expr *string, gfc_expr *substring, gfc_expr *back,
1428 if (type_check (string, 0, BT_CHARACTER) == FAILURE
1429 || type_check (substring, 1, BT_CHARACTER) == FAILURE)
1432 if (back != NULL && type_check (back, 2, BT_LOGICAL) == FAILURE)
1435 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
1437 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1438 "with KIND argument at %L",
1439 gfc_current_intrinsic, &kind->where) == FAILURE)
1442 if (string->ts.kind != substring->ts.kind)
1444 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1445 "kind as '%s'", gfc_current_intrinsic_arg[1],
1446 gfc_current_intrinsic, &substring->where,
1447 gfc_current_intrinsic_arg[0]);
1456 gfc_check_int (gfc_expr *x, gfc_expr *kind)
1458 if (numeric_check (x, 0) == FAILURE)
1461 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1469 gfc_check_intconv (gfc_expr *x)
1471 if (numeric_check (x, 0) == FAILURE)
1479 gfc_check_ior (gfc_expr *i, gfc_expr *j)
1481 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1484 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1487 if (i->ts.kind != j->ts.kind)
1489 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1490 &i->where) == FAILURE)
1499 gfc_check_ishft (gfc_expr *i, gfc_expr *shift)
1501 if (type_check (i, 0, BT_INTEGER) == FAILURE
1502 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1510 gfc_check_ishftc (gfc_expr *i, gfc_expr *shift, gfc_expr *size)
1512 if (type_check (i, 0, BT_INTEGER) == FAILURE
1513 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1516 if (size != NULL && type_check (size, 2, BT_INTEGER) == FAILURE)
1524 gfc_check_kill (gfc_expr *pid, gfc_expr *sig)
1526 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1529 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1537 gfc_check_kill_sub (gfc_expr *pid, gfc_expr *sig, gfc_expr *status)
1539 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1542 if (scalar_check (pid, 0) == FAILURE)
1545 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1548 if (scalar_check (sig, 1) == FAILURE)
1554 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1557 if (scalar_check (status, 2) == FAILURE)
1565 gfc_check_kind (gfc_expr *x)
1567 if (x->ts.type == BT_DERIVED)
1569 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1570 "non-derived type", gfc_current_intrinsic_arg[0],
1571 gfc_current_intrinsic, &x->where);
1580 gfc_check_lbound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
1582 if (array_check (array, 0) == FAILURE)
1585 if (dim_check (dim, 1, false) == FAILURE)
1588 if (dim_rank_check (dim, array, 1) == FAILURE)
1591 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
1593 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1594 "with KIND argument at %L",
1595 gfc_current_intrinsic, &kind->where) == FAILURE)
1603 gfc_check_len_lentrim (gfc_expr *s, gfc_expr *kind)
1605 if (type_check (s, 0, BT_CHARACTER) == FAILURE)
1608 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1610 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1611 "with KIND argument at %L",
1612 gfc_current_intrinsic, &kind->where) == FAILURE)
1620 gfc_check_lge_lgt_lle_llt (gfc_expr *a, gfc_expr *b)
1622 if (type_check (a, 0, BT_CHARACTER) == FAILURE)
1624 if (kind_value_check (a, 0, gfc_default_character_kind) == FAILURE)
1627 if (type_check (b, 1, BT_CHARACTER) == FAILURE)
1629 if (kind_value_check (b, 1, gfc_default_character_kind) == FAILURE)
1637 gfc_check_link (gfc_expr *path1, gfc_expr *path2)
1639 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1641 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
1644 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1646 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
1654 gfc_check_link_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
1656 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1658 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
1661 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1663 if (kind_value_check (path2, 0, gfc_default_character_kind) == FAILURE)
1669 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1672 if (scalar_check (status, 2) == FAILURE)
1680 gfc_check_loc (gfc_expr *expr)
1682 return variable_check (expr, 0);
1687 gfc_check_symlnk (gfc_expr *path1, gfc_expr *path2)
1689 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1691 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
1694 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1696 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
1704 gfc_check_symlnk_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
1706 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1708 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
1711 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1713 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
1719 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1722 if (scalar_check (status, 2) == FAILURE)
1730 gfc_check_logical (gfc_expr *a, gfc_expr *kind)
1732 if (type_check (a, 0, BT_LOGICAL) == FAILURE)
1734 if (kind_check (kind, 1, BT_LOGICAL) == FAILURE)
1741 /* Min/max family. */
1744 min_max_args (gfc_actual_arglist *arg)
1746 if (arg == NULL || arg->next == NULL)
1748 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1749 gfc_current_intrinsic, gfc_current_intrinsic_where);
1758 check_rest (bt type, int kind, gfc_actual_arglist *arglist)
1760 gfc_actual_arglist *arg, *tmp;
1765 if (min_max_args (arglist) == FAILURE)
1768 for (arg = arglist, n=1; arg; arg = arg->next, n++)
1771 if (x->ts.type != type || x->ts.kind != kind)
1773 if (x->ts.type == type)
1775 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type "
1776 "kinds at %L", &x->where) == FAILURE)
1781 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
1782 "%s(%d)", n, gfc_current_intrinsic, &x->where,
1783 gfc_basic_typename (type), kind);
1788 for (tmp = arglist, m=1; tmp != arg; tmp = tmp->next, m++)
1789 if (gfc_check_conformance (tmp->expr, x,
1790 "arguments 'a%d' and 'a%d' for "
1791 "intrinsic '%s'", m, n,
1792 gfc_current_intrinsic) == FAILURE)
1801 gfc_check_min_max (gfc_actual_arglist *arg)
1805 if (min_max_args (arg) == FAILURE)
1810 if (x->ts.type == BT_CHARACTER)
1812 if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1813 "with CHARACTER argument at %L",
1814 gfc_current_intrinsic, &x->where) == FAILURE)
1817 else if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
1819 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
1820 "REAL or CHARACTER", gfc_current_intrinsic, &x->where);
1824 return check_rest (x->ts.type, x->ts.kind, arg);
1829 gfc_check_min_max_integer (gfc_actual_arglist *arg)
1831 return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
1836 gfc_check_min_max_real (gfc_actual_arglist *arg)
1838 return check_rest (BT_REAL, gfc_default_real_kind, arg);
1843 gfc_check_min_max_double (gfc_actual_arglist *arg)
1845 return check_rest (BT_REAL, gfc_default_double_kind, arg);
1849 /* End of min/max family. */
1852 gfc_check_malloc (gfc_expr *size)
1854 if (type_check (size, 0, BT_INTEGER) == FAILURE)
1857 if (scalar_check (size, 0) == FAILURE)
1865 gfc_check_matmul (gfc_expr *matrix_a, gfc_expr *matrix_b)
1867 if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
1869 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1870 "or LOGICAL", gfc_current_intrinsic_arg[0],
1871 gfc_current_intrinsic, &matrix_a->where);
1875 if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
1877 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1878 "or LOGICAL", gfc_current_intrinsic_arg[1],
1879 gfc_current_intrinsic, &matrix_b->where);
1883 if ((matrix_a->ts.type == BT_LOGICAL && gfc_numeric_ts (&matrix_b->ts))
1884 || (gfc_numeric_ts (&matrix_a->ts) && matrix_b->ts.type == BT_LOGICAL))
1886 gfc_error ("Argument types of '%s' intrinsic at %L must match (%s/%s)",
1887 gfc_current_intrinsic, &matrix_a->where,
1888 gfc_typename(&matrix_a->ts), gfc_typename(&matrix_b->ts));
1892 switch (matrix_a->rank)
1895 if (rank_check (matrix_b, 1, 2) == FAILURE)
1897 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
1898 if (!identical_dimen_shape (matrix_a, 0, matrix_b, 0))
1900 gfc_error ("Different shape on dimension 1 for arguments '%s' "
1901 "and '%s' at %L for intrinsic matmul",
1902 gfc_current_intrinsic_arg[0],
1903 gfc_current_intrinsic_arg[1], &matrix_a->where);
1909 if (matrix_b->rank != 2)
1911 if (rank_check (matrix_b, 1, 1) == FAILURE)
1914 /* matrix_b has rank 1 or 2 here. Common check for the cases
1915 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
1916 - matrix_a has shape (n,m) and matrix_b has shape (m). */
1917 if (!identical_dimen_shape (matrix_a, 1, matrix_b, 0))
1919 gfc_error ("Different shape on dimension 2 for argument '%s' and "
1920 "dimension 1 for argument '%s' at %L for intrinsic "
1921 "matmul", gfc_current_intrinsic_arg[0],
1922 gfc_current_intrinsic_arg[1], &matrix_a->where);
1928 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
1929 "1 or 2", gfc_current_intrinsic_arg[0],
1930 gfc_current_intrinsic, &matrix_a->where);
1938 /* Whoever came up with this interface was probably on something.
1939 The possibilities for the occupation of the second and third
1946 NULL MASK minloc(array, mask=m)
1949 I.e. in the case of minloc(array,mask), mask will be in the second
1950 position of the argument list and we'll have to fix that up. */
1953 gfc_check_minloc_maxloc (gfc_actual_arglist *ap)
1955 gfc_expr *a, *m, *d;
1958 if (int_or_real_check (a, 0) == FAILURE || array_check (a, 0) == FAILURE)
1962 m = ap->next->next->expr;
1964 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1965 && ap->next->name == NULL)
1969 ap->next->expr = NULL;
1970 ap->next->next->expr = m;
1973 if (dim_check (d, 1, false) == FAILURE)
1976 if (dim_rank_check (d, a, 0) == FAILURE)
1979 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1983 && gfc_check_conformance (a, m,
1984 "arguments '%s' and '%s' for intrinsic %s",
1985 gfc_current_intrinsic_arg[0],
1986 gfc_current_intrinsic_arg[2],
1987 gfc_current_intrinsic ) == FAILURE)
1994 /* Similar to minloc/maxloc, the argument list might need to be
1995 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1996 difference is that MINLOC/MAXLOC take an additional KIND argument.
1997 The possibilities are:
2003 NULL MASK minval(array, mask=m)
2006 I.e. in the case of minval(array,mask), mask will be in the second
2007 position of the argument list and we'll have to fix that up. */
2010 check_reduction (gfc_actual_arglist *ap)
2012 gfc_expr *a, *m, *d;
2016 m = ap->next->next->expr;
2018 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
2019 && ap->next->name == NULL)
2023 ap->next->expr = NULL;
2024 ap->next->next->expr = m;
2027 if (dim_check (d, 1, false) == FAILURE)
2030 if (dim_rank_check (d, a, 0) == FAILURE)
2033 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
2037 && gfc_check_conformance (a, m,
2038 "arguments '%s' and '%s' for intrinsic %s",
2039 gfc_current_intrinsic_arg[0],
2040 gfc_current_intrinsic_arg[2],
2041 gfc_current_intrinsic) == FAILURE)
2049 gfc_check_minval_maxval (gfc_actual_arglist *ap)
2051 if (int_or_real_check (ap->expr, 0) == FAILURE
2052 || array_check (ap->expr, 0) == FAILURE)
2055 return check_reduction (ap);
2060 gfc_check_product_sum (gfc_actual_arglist *ap)
2062 if (numeric_check (ap->expr, 0) == FAILURE
2063 || array_check (ap->expr, 0) == FAILURE)
2066 return check_reduction (ap);
2071 gfc_check_merge (gfc_expr *tsource, gfc_expr *fsource, gfc_expr *mask)
2073 if (same_type_check (tsource, 0, fsource, 1) == FAILURE)
2076 if (type_check (mask, 2, BT_LOGICAL) == FAILURE)
2079 if (tsource->ts.type == BT_CHARACTER)
2080 return gfc_check_same_strlen (tsource, fsource, "MERGE intrinsic");
2087 gfc_check_move_alloc (gfc_expr *from, gfc_expr *to)
2089 symbol_attribute attr;
2091 if (variable_check (from, 0) == FAILURE)
2094 if (array_check (from, 0) == FAILURE)
2097 attr = gfc_variable_attr (from, NULL);
2098 if (!attr.allocatable)
2100 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
2101 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
2106 if (variable_check (to, 0) == FAILURE)
2109 if (array_check (to, 0) == FAILURE)
2112 attr = gfc_variable_attr (to, NULL);
2113 if (!attr.allocatable)
2115 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
2116 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
2121 if (same_type_check (from, 0, to, 1) == FAILURE)
2124 if (to->rank != from->rank)
2126 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
2127 "have the same rank %d/%d", gfc_current_intrinsic_arg[0],
2128 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
2129 &to->where, from->rank, to->rank);
2133 if (to->ts.kind != from->ts.kind)
2135 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
2136 "be of the same kind %d/%d", gfc_current_intrinsic_arg[0],
2137 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
2138 &to->where, from->ts.kind, to->ts.kind);
2147 gfc_check_nearest (gfc_expr *x, gfc_expr *s)
2149 if (type_check (x, 0, BT_REAL) == FAILURE)
2152 if (type_check (s, 1, BT_REAL) == FAILURE)
2160 gfc_check_new_line (gfc_expr *a)
2162 if (type_check (a, 0, BT_CHARACTER) == FAILURE)
2170 gfc_check_null (gfc_expr *mold)
2172 symbol_attribute attr;
2177 if (variable_check (mold, 0) == FAILURE)
2180 attr = gfc_variable_attr (mold, NULL);
2182 if (!attr.pointer && !attr.proc_pointer)
2184 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
2185 gfc_current_intrinsic_arg[0],
2186 gfc_current_intrinsic, &mold->where);
2195 gfc_check_pack (gfc_expr *array, gfc_expr *mask, gfc_expr *vector)
2197 if (array_check (array, 0) == FAILURE)
2200 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
2203 if (gfc_check_conformance (array, mask,
2204 "arguments '%s' and '%s' for intrinsic '%s'",
2205 gfc_current_intrinsic_arg[0],
2206 gfc_current_intrinsic_arg[1],
2207 gfc_current_intrinsic) == FAILURE)
2212 mpz_t array_size, vector_size;
2213 bool have_array_size, have_vector_size;
2215 if (same_type_check (array, 0, vector, 2) == FAILURE)
2218 if (rank_check (vector, 2, 1) == FAILURE)
2221 /* VECTOR requires at least as many elements as MASK
2222 has .TRUE. values. */
2223 have_array_size = gfc_array_size (array, &array_size) == SUCCESS;
2224 have_vector_size = gfc_array_size (vector, &vector_size) == SUCCESS;
2226 if (have_vector_size
2227 && (mask->expr_type == EXPR_ARRAY
2228 || (mask->expr_type == EXPR_CONSTANT
2229 && have_array_size)))
2231 int mask_true_values = 0;
2233 if (mask->expr_type == EXPR_ARRAY)
2235 gfc_constructor *mask_ctor = mask->value.constructor;
2238 if (mask_ctor->expr->expr_type != EXPR_CONSTANT)
2240 mask_true_values = 0;
2244 if (mask_ctor->expr->value.logical)
2247 mask_ctor = mask_ctor->next;
2250 else if (mask->expr_type == EXPR_CONSTANT && mask->value.logical)
2251 mask_true_values = mpz_get_si (array_size);
2253 if (mpz_get_si (vector_size) < mask_true_values)
2255 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
2256 "provide at least as many elements as there "
2257 "are .TRUE. values in '%s' (%ld/%d)",
2258 gfc_current_intrinsic_arg[2],gfc_current_intrinsic,
2259 &vector->where, gfc_current_intrinsic_arg[1],
2260 mpz_get_si (vector_size), mask_true_values);
2265 if (have_array_size)
2266 mpz_clear (array_size);
2267 if (have_vector_size)
2268 mpz_clear (vector_size);
2276 gfc_check_precision (gfc_expr *x)
2278 if (x->ts.type != BT_REAL && x->ts.type != BT_COMPLEX)
2280 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of type "
2281 "REAL or COMPLEX", gfc_current_intrinsic_arg[0],
2282 gfc_current_intrinsic, &x->where);
2291 gfc_check_present (gfc_expr *a)
2295 if (variable_check (a, 0) == FAILURE)
2298 sym = a->symtree->n.sym;
2299 if (!sym->attr.dummy)
2301 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
2302 "dummy variable", gfc_current_intrinsic_arg[0],
2303 gfc_current_intrinsic, &a->where);
2307 if (!sym->attr.optional)
2309 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
2310 "an OPTIONAL dummy variable", gfc_current_intrinsic_arg[0],
2311 gfc_current_intrinsic, &a->where);
2315 /* 13.14.82 PRESENT(A)
2317 Argument. A shall be the name of an optional dummy argument that is
2318 accessible in the subprogram in which the PRESENT function reference
2322 && !(a->ref->next == NULL && a->ref->type == REF_ARRAY
2323 && a->ref->u.ar.type == AR_FULL))
2325 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
2326 "subobject of '%s'", gfc_current_intrinsic_arg[0],
2327 gfc_current_intrinsic, &a->where, sym->name);
2336 gfc_check_radix (gfc_expr *x)
2338 if (int_or_real_check (x, 0) == FAILURE)
2346 gfc_check_range (gfc_expr *x)
2348 if (numeric_check (x, 0) == FAILURE)
2355 /* real, float, sngl. */
2357 gfc_check_real (gfc_expr *a, gfc_expr *kind)
2359 if (numeric_check (a, 0) == FAILURE)
2362 if (kind_check (kind, 1, BT_REAL) == FAILURE)
2370 gfc_check_rename (gfc_expr *path1, gfc_expr *path2)
2372 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2374 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
2377 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2379 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
2387 gfc_check_rename_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
2389 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2391 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
2394 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2396 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
2402 if (type_check (status, 2, BT_INTEGER) == FAILURE)
2405 if (scalar_check (status, 2) == FAILURE)
2413 gfc_check_repeat (gfc_expr *x, gfc_expr *y)
2415 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2418 if (scalar_check (x, 0) == FAILURE)
2421 if (type_check (y, 0, BT_INTEGER) == FAILURE)
2424 if (scalar_check (y, 1) == FAILURE)
2432 gfc_check_reshape (gfc_expr *source, gfc_expr *shape,
2433 gfc_expr *pad, gfc_expr *order)
2439 if (array_check (source, 0) == FAILURE)
2442 if (rank_check (shape, 1, 1) == FAILURE)
2445 if (type_check (shape, 1, BT_INTEGER) == FAILURE)
2448 if (gfc_array_size (shape, &size) != SUCCESS)
2450 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
2451 "array of constant size", &shape->where);
2455 shape_size = mpz_get_ui (size);
2458 if (shape_size <= 0)
2460 gfc_error ("'%s' argument of '%s' intrinsic at %L is empty",
2461 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
2465 else if (shape_size > GFC_MAX_DIMENSIONS)
2467 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
2468 "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
2471 else if (shape->expr_type == EXPR_ARRAY)
2475 for (i = 0; i < shape_size; ++i)
2477 e = gfc_get_array_element (shape, i);
2478 if (e->expr_type != EXPR_CONSTANT)
2484 gfc_extract_int (e, &extent);
2487 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
2488 "negative element (%d)", gfc_current_intrinsic_arg[1],
2489 gfc_current_intrinsic, &e->where, extent);
2499 if (same_type_check (source, 0, pad, 2) == FAILURE)
2502 if (array_check (pad, 2) == FAILURE)
2508 if (array_check (order, 3) == FAILURE)
2511 if (type_check (order, 3, BT_INTEGER) == FAILURE)
2514 if (order->expr_type == EXPR_ARRAY)
2516 int i, order_size, dim, perm[GFC_MAX_DIMENSIONS];
2519 for (i = 0; i < GFC_MAX_DIMENSIONS; ++i)
2522 gfc_array_size (order, &size);
2523 order_size = mpz_get_ui (size);
2526 if (order_size != shape_size)
2528 gfc_error ("'%s' argument of '%s' intrinsic at %L "
2529 "has wrong number of elements (%d/%d)",
2530 gfc_current_intrinsic_arg[3],
2531 gfc_current_intrinsic, &order->where,
2532 order_size, shape_size);
2536 for (i = 1; i <= order_size; ++i)
2538 e = gfc_get_array_element (order, i-1);
2539 if (e->expr_type != EXPR_CONSTANT)
2545 gfc_extract_int (e, &dim);
2547 if (dim < 1 || dim > order_size)
2549 gfc_error ("'%s' argument of '%s' intrinsic at %L "
2550 "has out-of-range dimension (%d)",
2551 gfc_current_intrinsic_arg[3],
2552 gfc_current_intrinsic, &e->where, dim);
2556 if (perm[dim-1] != 0)
2558 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
2559 "invalid permutation of dimensions (dimension "
2560 "'%d' duplicated)", gfc_current_intrinsic_arg[3],
2561 gfc_current_intrinsic, &e->where, dim);
2571 if (pad == NULL && shape->expr_type == EXPR_ARRAY
2572 && gfc_is_constant_expr (shape)
2573 && !(source->expr_type == EXPR_VARIABLE && source->symtree->n.sym->as
2574 && source->symtree->n.sym->as->type == AS_ASSUMED_SIZE))
2576 /* Check the match in size between source and destination. */
2577 if (gfc_array_size (source, &nelems) == SUCCESS)
2582 c = shape->value.constructor;
2583 mpz_init_set_ui (size, 1);
2584 for (; c; c = c->next)
2585 mpz_mul (size, size, c->expr->value.integer);
2587 test = mpz_cmp (nelems, size) < 0 && mpz_cmp_ui (size, 0) > 0;
2593 gfc_error ("Without padding, there are not enough elements "
2594 "in the intrinsic RESHAPE source at %L to match "
2595 "the shape", &source->where);
2606 gfc_check_scale (gfc_expr *x, gfc_expr *i)
2608 if (type_check (x, 0, BT_REAL) == FAILURE)
2611 if (type_check (i, 1, BT_INTEGER) == FAILURE)
2619 gfc_check_scan (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
2621 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2624 if (type_check (y, 1, BT_CHARACTER) == FAILURE)
2627 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
2630 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
2632 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2633 "with KIND argument at %L",
2634 gfc_current_intrinsic, &kind->where) == FAILURE)
2637 if (same_type_check (x, 0, y, 1) == FAILURE)
2645 gfc_check_secnds (gfc_expr *r)
2647 if (type_check (r, 0, BT_REAL) == FAILURE)
2650 if (kind_value_check (r, 0, 4) == FAILURE)
2653 if (scalar_check (r, 0) == FAILURE)
2661 gfc_check_selected_char_kind (gfc_expr *name)
2663 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2666 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
2669 if (scalar_check (name, 0) == FAILURE)
2677 gfc_check_selected_int_kind (gfc_expr *r)
2679 if (type_check (r, 0, BT_INTEGER) == FAILURE)
2682 if (scalar_check (r, 0) == FAILURE)
2690 gfc_check_selected_real_kind (gfc_expr *p, gfc_expr *r)
2692 if (p == NULL && r == NULL)
2694 gfc_error ("Missing arguments to %s intrinsic at %L",
2695 gfc_current_intrinsic, gfc_current_intrinsic_where);
2700 if (p != NULL && type_check (p, 0, BT_INTEGER) == FAILURE)
2703 if (r != NULL && type_check (r, 1, BT_INTEGER) == FAILURE)
2711 gfc_check_set_exponent (gfc_expr *x, gfc_expr *i)
2713 if (type_check (x, 0, BT_REAL) == FAILURE)
2716 if (type_check (i, 1, BT_INTEGER) == FAILURE)
2724 gfc_check_shape (gfc_expr *source)
2728 if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
2731 ar = gfc_find_array_ref (source);
2733 if (ar->as && ar->as->type == AS_ASSUMED_SIZE && ar->type == AR_FULL)
2735 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
2736 "an assumed size array", &source->where);
2745 gfc_check_sign (gfc_expr *a, gfc_expr *b)
2747 if (int_or_real_check (a, 0) == FAILURE)
2750 if (same_type_check (a, 0, b, 1) == FAILURE)
2758 gfc_check_size (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
2760 if (array_check (array, 0) == FAILURE)
2763 if (dim_check (dim, 1, true) == FAILURE)
2766 if (dim_rank_check (dim, array, 0) == FAILURE)
2769 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
2771 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2772 "with KIND argument at %L",
2773 gfc_current_intrinsic, &kind->where) == FAILURE)
2782 gfc_check_sizeof (gfc_expr *arg ATTRIBUTE_UNUSED)
2789 gfc_check_sleep_sub (gfc_expr *seconds)
2791 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
2794 if (scalar_check (seconds, 0) == FAILURE)
2802 gfc_check_spread (gfc_expr *source, gfc_expr *dim, gfc_expr *ncopies)
2804 if (source->rank >= GFC_MAX_DIMENSIONS)
2806 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
2807 "than rank %d", gfc_current_intrinsic_arg[0],
2808 gfc_current_intrinsic, &source->where, GFC_MAX_DIMENSIONS);
2816 if (dim_check (dim, 1, false) == FAILURE)
2819 /* dim_rank_check() does not apply here. */
2821 && dim->expr_type == EXPR_CONSTANT
2822 && (mpz_cmp_ui (dim->value.integer, 1) < 0
2823 || mpz_cmp_ui (dim->value.integer, source->rank + 1) > 0))
2825 gfc_error ("'%s' argument of '%s' intrinsic at %L is not a valid "
2826 "dimension index", gfc_current_intrinsic_arg[1],
2827 gfc_current_intrinsic, &dim->where);
2831 if (type_check (ncopies, 2, BT_INTEGER) == FAILURE)
2834 if (scalar_check (ncopies, 2) == FAILURE)
2841 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
2845 gfc_check_fgetputc_sub (gfc_expr *unit, gfc_expr *c, gfc_expr *status)
2847 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2850 if (scalar_check (unit, 0) == FAILURE)
2853 if (type_check (c, 1, BT_CHARACTER) == FAILURE)
2855 if (kind_value_check (c, 1, gfc_default_character_kind) == FAILURE)
2861 if (type_check (status, 2, BT_INTEGER) == FAILURE
2862 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE
2863 || scalar_check (status, 2) == FAILURE)
2871 gfc_check_fgetputc (gfc_expr *unit, gfc_expr *c)
2873 return gfc_check_fgetputc_sub (unit, c, NULL);
2878 gfc_check_fgetput_sub (gfc_expr *c, gfc_expr *status)
2880 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
2882 if (kind_value_check (c, 0, gfc_default_character_kind) == FAILURE)
2888 if (type_check (status, 1, BT_INTEGER) == FAILURE
2889 || kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE
2890 || scalar_check (status, 1) == FAILURE)
2898 gfc_check_fgetput (gfc_expr *c)
2900 return gfc_check_fgetput_sub (c, NULL);
2905 gfc_check_fseek_sub (gfc_expr *unit, gfc_expr *offset, gfc_expr *whence, gfc_expr *status)
2907 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2910 if (scalar_check (unit, 0) == FAILURE)
2913 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
2916 if (scalar_check (offset, 1) == FAILURE)
2919 if (type_check (whence, 2, BT_INTEGER) == FAILURE)
2922 if (scalar_check (whence, 2) == FAILURE)
2928 if (type_check (status, 3, BT_INTEGER) == FAILURE)
2931 if (kind_value_check (status, 3, 4) == FAILURE)
2934 if (scalar_check (status, 3) == FAILURE)
2943 gfc_check_fstat (gfc_expr *unit, gfc_expr *array)
2945 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2948 if (scalar_check (unit, 0) == FAILURE)
2951 if (type_check (array, 1, BT_INTEGER) == FAILURE
2952 || kind_value_check (unit, 0, gfc_default_integer_kind) == FAILURE)
2955 if (array_check (array, 1) == FAILURE)
2963 gfc_check_fstat_sub (gfc_expr *unit, gfc_expr *array, gfc_expr *status)
2965 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2968 if (scalar_check (unit, 0) == FAILURE)
2971 if (type_check (array, 1, BT_INTEGER) == FAILURE
2972 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2975 if (array_check (array, 1) == FAILURE)
2981 if (type_check (status, 2, BT_INTEGER) == FAILURE
2982 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
2985 if (scalar_check (status, 2) == FAILURE)
2993 gfc_check_ftell (gfc_expr *unit)
2995 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2998 if (scalar_check (unit, 0) == FAILURE)
3006 gfc_check_ftell_sub (gfc_expr *unit, gfc_expr *offset)
3008 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3011 if (scalar_check (unit, 0) == FAILURE)
3014 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
3017 if (scalar_check (offset, 1) == FAILURE)
3025 gfc_check_stat (gfc_expr *name, gfc_expr *array)
3027 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3029 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
3032 if (type_check (array, 1, BT_INTEGER) == FAILURE
3033 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3036 if (array_check (array, 1) == FAILURE)
3044 gfc_check_stat_sub (gfc_expr *name, gfc_expr *array, gfc_expr *status)
3046 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3048 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
3051 if (type_check (array, 1, BT_INTEGER) == FAILURE
3052 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3055 if (array_check (array, 1) == FAILURE)
3061 if (type_check (status, 2, BT_INTEGER) == FAILURE
3062 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3065 if (scalar_check (status, 2) == FAILURE)
3073 gfc_check_transfer (gfc_expr *source ATTRIBUTE_UNUSED,
3074 gfc_expr *mold ATTRIBUTE_UNUSED, gfc_expr *size)
3076 if (mold->ts.type == BT_HOLLERITH)
3078 gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
3079 &mold->where, gfc_basic_typename (BT_HOLLERITH));
3085 if (type_check (size, 2, BT_INTEGER) == FAILURE)
3088 if (scalar_check (size, 2) == FAILURE)
3091 if (nonoptional_check (size, 2) == FAILURE)
3100 gfc_check_transpose (gfc_expr *matrix)
3102 if (rank_check (matrix, 0, 2) == FAILURE)
3110 gfc_check_ubound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
3112 if (array_check (array, 0) == FAILURE)
3115 if (dim_check (dim, 1, false) == FAILURE)
3118 if (dim_rank_check (dim, array, 0) == FAILURE)
3121 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
3123 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
3124 "with KIND argument at %L",
3125 gfc_current_intrinsic, &kind->where) == FAILURE)
3133 gfc_check_unpack (gfc_expr *vector, gfc_expr *mask, gfc_expr *field)
3137 if (rank_check (vector, 0, 1) == FAILURE)
3140 if (array_check (mask, 1) == FAILURE)
3143 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
3146 if (same_type_check (vector, 0, field, 2) == FAILURE)
3149 if (mask->expr_type == EXPR_ARRAY
3150 && gfc_array_size (vector, &vector_size) == SUCCESS)
3152 int mask_true_count = 0;
3153 gfc_constructor *mask_ctor = mask->value.constructor;
3156 if (mask_ctor->expr->expr_type != EXPR_CONSTANT)
3158 mask_true_count = 0;
3162 if (mask_ctor->expr->value.logical)
3165 mask_ctor = mask_ctor->next;
3168 if (mpz_get_si (vector_size) < mask_true_count)
3170 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
3171 "provide at least as many elements as there "
3172 "are .TRUE. values in '%s' (%ld/%d)",
3173 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
3174 &vector->where, gfc_current_intrinsic_arg[1],
3175 mpz_get_si (vector_size), mask_true_count);
3179 mpz_clear (vector_size);
3182 if (mask->rank != field->rank && field->rank != 0)
3184 gfc_error ("'%s' argument of '%s' intrinsic at %L must have "
3185 "the same rank as '%s' or be a scalar",
3186 gfc_current_intrinsic_arg[2], gfc_current_intrinsic,
3187 &field->where, gfc_current_intrinsic_arg[1]);
3191 if (mask->rank == field->rank)
3194 for (i = 0; i < field->rank; i++)
3195 if (! identical_dimen_shape (mask, i, field, i))
3197 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L "
3198 "must have identical shape.",
3199 gfc_current_intrinsic_arg[2],
3200 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
3210 gfc_check_verify (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
3212 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
3215 if (same_type_check (x, 0, y, 1) == FAILURE)
3218 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
3221 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
3223 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
3224 "with KIND argument at %L",
3225 gfc_current_intrinsic, &kind->where) == FAILURE)
3233 gfc_check_trim (gfc_expr *x)
3235 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
3238 if (scalar_check (x, 0) == FAILURE)
3246 gfc_check_ttynam (gfc_expr *unit)
3248 if (scalar_check (unit, 0) == FAILURE)
3251 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3258 /* Common check function for the half a dozen intrinsics that have a
3259 single real argument. */
3262 gfc_check_x (gfc_expr *x)
3264 if (type_check (x, 0, BT_REAL) == FAILURE)
3271 /************* Check functions for intrinsic subroutines *************/
3274 gfc_check_cpu_time (gfc_expr *time)
3276 if (scalar_check (time, 0) == FAILURE)
3279 if (type_check (time, 0, BT_REAL) == FAILURE)
3282 if (variable_check (time, 0) == FAILURE)
3290 gfc_check_date_and_time (gfc_expr *date, gfc_expr *time,
3291 gfc_expr *zone, gfc_expr *values)
3295 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
3297 if (kind_value_check (date, 0, gfc_default_character_kind) == FAILURE)
3299 if (scalar_check (date, 0) == FAILURE)
3301 if (variable_check (date, 0) == FAILURE)
3307 if (type_check (time, 1, BT_CHARACTER) == FAILURE)
3309 if (kind_value_check (time, 1, gfc_default_character_kind) == FAILURE)
3311 if (scalar_check (time, 1) == FAILURE)
3313 if (variable_check (time, 1) == FAILURE)
3319 if (type_check (zone, 2, BT_CHARACTER) == FAILURE)
3321 if (kind_value_check (zone, 2, gfc_default_character_kind) == FAILURE)
3323 if (scalar_check (zone, 2) == FAILURE)
3325 if (variable_check (zone, 2) == FAILURE)
3331 if (type_check (values, 3, BT_INTEGER) == FAILURE)
3333 if (array_check (values, 3) == FAILURE)
3335 if (rank_check (values, 3, 1) == FAILURE)
3337 if (variable_check (values, 3) == FAILURE)
3346 gfc_check_mvbits (gfc_expr *from, gfc_expr *frompos, gfc_expr *len,
3347 gfc_expr *to, gfc_expr *topos)
3349 if (type_check (from, 0, BT_INTEGER) == FAILURE)
3352 if (type_check (frompos, 1, BT_INTEGER) == FAILURE)
3355 if (type_check (len, 2, BT_INTEGER) == FAILURE)
3358 if (same_type_check (from, 0, to, 3) == FAILURE)
3361 if (variable_check (to, 3) == FAILURE)
3364 if (type_check (topos, 4, BT_INTEGER) == FAILURE)
3372 gfc_check_random_number (gfc_expr *harvest)
3374 if (type_check (harvest, 0, BT_REAL) == FAILURE)
3377 if (variable_check (harvest, 0) == FAILURE)
3385 gfc_check_random_seed (gfc_expr *size, gfc_expr *put, gfc_expr *get)
3387 unsigned int nargs = 0, kiss_size;
3388 locus *where = NULL;
3389 mpz_t put_size, get_size;
3390 bool have_gfc_real_16; /* Try and mimic HAVE_GFC_REAL_16 in libgfortran. */
3392 have_gfc_real_16 = gfc_validate_kind (BT_REAL, 16, true) != -1;
3394 /* Keep the number of bytes in sync with kiss_size in
3395 libgfortran/intrinsics/random.c. */
3396 kiss_size = (have_gfc_real_16 ? 48 : 32) / gfc_default_integer_kind;
3400 if (size->expr_type != EXPR_VARIABLE
3401 || !size->symtree->n.sym->attr.optional)
3404 if (scalar_check (size, 0) == FAILURE)
3407 if (type_check (size, 0, BT_INTEGER) == FAILURE)
3410 if (variable_check (size, 0) == FAILURE)
3413 if (kind_value_check (size, 0, gfc_default_integer_kind) == FAILURE)
3419 if (put->expr_type != EXPR_VARIABLE
3420 || !put->symtree->n.sym->attr.optional)
3423 where = &put->where;
3426 if (array_check (put, 1) == FAILURE)
3429 if (rank_check (put, 1, 1) == FAILURE)
3432 if (type_check (put, 1, BT_INTEGER) == FAILURE)
3435 if (kind_value_check (put, 1, gfc_default_integer_kind) == FAILURE)
3438 if (gfc_array_size (put, &put_size) == SUCCESS
3439 && mpz_get_ui (put_size) < kiss_size)
3440 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
3441 "too small (%i/%i)",
3442 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, where,
3443 (int) mpz_get_ui (put_size), kiss_size);
3448 if (get->expr_type != EXPR_VARIABLE
3449 || !get->symtree->n.sym->attr.optional)
3452 where = &get->where;
3455 if (array_check (get, 2) == FAILURE)
3458 if (rank_check (get, 2, 1) == FAILURE)
3461 if (type_check (get, 2, BT_INTEGER) == FAILURE)
3464 if (variable_check (get, 2) == FAILURE)
3467 if (kind_value_check (get, 2, gfc_default_integer_kind) == FAILURE)
3470 if (gfc_array_size (get, &get_size) == SUCCESS
3471 && mpz_get_ui (get_size) < kiss_size)
3472 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
3473 "too small (%i/%i)",
3474 gfc_current_intrinsic_arg[2], gfc_current_intrinsic, where,
3475 (int) mpz_get_ui (get_size), kiss_size);
3478 /* RANDOM_SEED may not have more than one non-optional argument. */
3480 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic, where);
3487 gfc_check_second_sub (gfc_expr *time)
3489 if (scalar_check (time, 0) == FAILURE)
3492 if (type_check (time, 0, BT_REAL) == FAILURE)
3495 if (kind_value_check(time, 0, 4) == FAILURE)
3502 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
3503 count, count_rate, and count_max are all optional arguments */
3506 gfc_check_system_clock (gfc_expr *count, gfc_expr *count_rate,
3507 gfc_expr *count_max)
3511 if (scalar_check (count, 0) == FAILURE)
3514 if (type_check (count, 0, BT_INTEGER) == FAILURE)
3517 if (variable_check (count, 0) == FAILURE)
3521 if (count_rate != NULL)
3523 if (scalar_check (count_rate, 1) == FAILURE)
3526 if (type_check (count_rate, 1, BT_INTEGER) == FAILURE)
3529 if (variable_check (count_rate, 1) == FAILURE)
3533 && same_type_check (count, 0, count_rate, 1) == FAILURE)
3538 if (count_max != NULL)
3540 if (scalar_check (count_max, 2) == FAILURE)
3543 if (type_check (count_max, 2, BT_INTEGER) == FAILURE)
3546 if (variable_check (count_max, 2) == FAILURE)
3550 && same_type_check (count, 0, count_max, 2) == FAILURE)
3553 if (count_rate != NULL
3554 && same_type_check (count_rate, 1, count_max, 2) == FAILURE)
3563 gfc_check_irand (gfc_expr *x)
3568 if (scalar_check (x, 0) == FAILURE)
3571 if (type_check (x, 0, BT_INTEGER) == FAILURE)
3574 if (kind_value_check(x, 0, 4) == FAILURE)
3582 gfc_check_alarm_sub (gfc_expr *seconds, gfc_expr *handler, gfc_expr *status)
3584 if (scalar_check (seconds, 0) == FAILURE)
3587 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
3590 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3592 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3593 "or PROCEDURE", gfc_current_intrinsic_arg[1],
3594 gfc_current_intrinsic, &handler->where);
3598 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3604 if (scalar_check (status, 2) == FAILURE)
3607 if (type_check (status, 2, BT_INTEGER) == FAILURE)
3610 if (kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
3618 gfc_check_rand (gfc_expr *x)
3623 if (scalar_check (x, 0) == FAILURE)
3626 if (type_check (x, 0, BT_INTEGER) == FAILURE)
3629 if (kind_value_check(x, 0, 4) == FAILURE)
3637 gfc_check_srand (gfc_expr *x)
3639 if (scalar_check (x, 0) == FAILURE)
3642 if (type_check (x, 0, BT_INTEGER) == FAILURE)
3645 if (kind_value_check(x, 0, 4) == FAILURE)
3653 gfc_check_ctime_sub (gfc_expr *time, gfc_expr *result)
3655 if (scalar_check (time, 0) == FAILURE)
3657 if (type_check (time, 0, BT_INTEGER) == FAILURE)
3660 if (type_check (result, 1, BT_CHARACTER) == FAILURE)
3662 if (kind_value_check (result, 1, gfc_default_character_kind) == FAILURE)
3670 gfc_check_dtime_etime (gfc_expr *x)
3672 if (array_check (x, 0) == FAILURE)
3675 if (rank_check (x, 0, 1) == FAILURE)
3678 if (variable_check (x, 0) == FAILURE)
3681 if (type_check (x, 0, BT_REAL) == FAILURE)
3684 if (kind_value_check(x, 0, 4) == FAILURE)
3692 gfc_check_dtime_etime_sub (gfc_expr *values, gfc_expr *time)
3694 if (array_check (values, 0) == FAILURE)
3697 if (rank_check (values, 0, 1) == FAILURE)
3700 if (variable_check (values, 0) == FAILURE)
3703 if (type_check (values, 0, BT_REAL) == FAILURE)
3706 if (kind_value_check(values, 0, 4) == FAILURE)
3709 if (scalar_check (time, 1) == FAILURE)
3712 if (type_check (time, 1, BT_REAL) == FAILURE)
3715 if (kind_value_check(time, 1, 4) == FAILURE)
3723 gfc_check_fdate_sub (gfc_expr *date)
3725 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
3727 if (kind_value_check (date, 0, gfc_default_character_kind) == FAILURE)
3735 gfc_check_gerror (gfc_expr *msg)
3737 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
3739 if (kind_value_check (msg, 0, gfc_default_character_kind) == FAILURE)
3747 gfc_check_getcwd_sub (gfc_expr *cwd, gfc_expr *status)
3749 if (type_check (cwd, 0, BT_CHARACTER) == FAILURE)
3751 if (kind_value_check (cwd, 0, gfc_default_character_kind) == FAILURE)
3757 if (scalar_check (status, 1) == FAILURE)
3760 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3768 gfc_check_getarg (gfc_expr *pos, gfc_expr *value)
3770 if (type_check (pos, 0, BT_INTEGER) == FAILURE)
3773 if (pos->ts.kind > gfc_default_integer_kind)
3775 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
3776 "not wider than the default kind (%d)",
3777 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
3778 &pos->where, gfc_default_integer_kind);
3782 if (type_check (value, 1, BT_CHARACTER) == FAILURE)
3784 if (kind_value_check (value, 1, gfc_default_character_kind) == FAILURE)
3792 gfc_check_getlog (gfc_expr *msg)
3794 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
3796 if (kind_value_check (msg, 0, gfc_default_character_kind) == FAILURE)
3804 gfc_check_exit (gfc_expr *status)
3809 if (type_check (status, 0, BT_INTEGER) == FAILURE)
3812 if (scalar_check (status, 0) == FAILURE)
3820 gfc_check_flush (gfc_expr *unit)
3825 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3828 if (scalar_check (unit, 0) == FAILURE)
3836 gfc_check_free (gfc_expr *i)
3838 if (type_check (i, 0, BT_INTEGER) == FAILURE)
3841 if (scalar_check (i, 0) == FAILURE)
3849 gfc_check_hostnm (gfc_expr *name)
3851 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3853 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
3861 gfc_check_hostnm_sub (gfc_expr *name, gfc_expr *status)
3863 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3865 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
3871 if (scalar_check (status, 1) == FAILURE)
3874 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3882 gfc_check_itime_idate (gfc_expr *values)
3884 if (array_check (values, 0) == FAILURE)
3887 if (rank_check (values, 0, 1) == FAILURE)
3890 if (variable_check (values, 0) == FAILURE)
3893 if (type_check (values, 0, BT_INTEGER) == FAILURE)
3896 if (kind_value_check(values, 0, gfc_default_integer_kind) == FAILURE)
3904 gfc_check_ltime_gmtime (gfc_expr *time, gfc_expr *values)
3906 if (type_check (time, 0, BT_INTEGER) == FAILURE)
3909 if (kind_value_check(time, 0, gfc_default_integer_kind) == FAILURE)
3912 if (scalar_check (time, 0) == FAILURE)
3915 if (array_check (values, 1) == FAILURE)
3918 if (rank_check (values, 1, 1) == FAILURE)
3921 if (variable_check (values, 1) == FAILURE)
3924 if (type_check (values, 1, BT_INTEGER) == FAILURE)
3927 if (kind_value_check(values, 1, gfc_default_integer_kind) == FAILURE)
3935 gfc_check_ttynam_sub (gfc_expr *unit, gfc_expr *name)
3937 if (scalar_check (unit, 0) == FAILURE)
3940 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3943 if (type_check (name, 1, BT_CHARACTER) == FAILURE)
3945 if (kind_value_check (name, 1, gfc_default_character_kind) == FAILURE)
3953 gfc_check_isatty (gfc_expr *unit)
3958 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3961 if (scalar_check (unit, 0) == FAILURE)
3969 gfc_check_isnan (gfc_expr *x)
3971 if (type_check (x, 0, BT_REAL) == FAILURE)
3979 gfc_check_perror (gfc_expr *string)
3981 if (type_check (string, 0, BT_CHARACTER) == FAILURE)
3983 if (kind_value_check (string, 0, gfc_default_character_kind) == FAILURE)
3991 gfc_check_umask (gfc_expr *mask)
3993 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
3996 if (scalar_check (mask, 0) == FAILURE)
4004 gfc_check_umask_sub (gfc_expr *mask, gfc_expr *old)
4006 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
4009 if (scalar_check (mask, 0) == FAILURE)
4015 if (scalar_check (old, 1) == FAILURE)
4018 if (type_check (old, 1, BT_INTEGER) == FAILURE)
4026 gfc_check_unlink (gfc_expr *name)
4028 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
4030 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
4038 gfc_check_unlink_sub (gfc_expr *name, gfc_expr *status)
4040 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
4042 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
4048 if (scalar_check (status, 1) == FAILURE)
4051 if (type_check (status, 1, BT_INTEGER) == FAILURE)
4059 gfc_check_signal (gfc_expr *number, gfc_expr *handler)
4061 if (scalar_check (number, 0) == FAILURE)
4064 if (type_check (number, 0, BT_INTEGER) == FAILURE)
4067 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
4069 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
4070 "or PROCEDURE", gfc_current_intrinsic_arg[1],
4071 gfc_current_intrinsic, &handler->where);
4075 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
4083 gfc_check_signal_sub (gfc_expr *number, gfc_expr *handler, gfc_expr *status)
4085 if (scalar_check (number, 0) == FAILURE)
4088 if (type_check (number, 0, BT_INTEGER) == FAILURE)
4091 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
4093 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
4094 "or PROCEDURE", gfc_current_intrinsic_arg[1],
4095 gfc_current_intrinsic, &handler->where);
4099 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
4105 if (type_check (status, 2, BT_INTEGER) == FAILURE)
4108 if (scalar_check (status, 2) == FAILURE)
4116 gfc_check_system_sub (gfc_expr *cmd, gfc_expr *status)
4118 if (type_check (cmd, 0, BT_CHARACTER) == FAILURE)
4120 if (kind_value_check (cmd, 0, gfc_default_character_kind) == FAILURE)
4123 if (scalar_check (status, 1) == FAILURE)
4126 if (type_check (status, 1, BT_INTEGER) == FAILURE)
4129 if (kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE)
4136 /* This is used for the GNU intrinsics AND, OR and XOR. */
4138 gfc_check_and (gfc_expr *i, gfc_expr *j)
4140 if (i->ts.type != BT_INTEGER && i->ts.type != BT_LOGICAL)
4142 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
4143 "or LOGICAL", gfc_current_intrinsic_arg[0],
4144 gfc_current_intrinsic, &i->where);
4148 if (j->ts.type != BT_INTEGER && j->ts.type != BT_LOGICAL)
4150 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
4151 "or LOGICAL", gfc_current_intrinsic_arg[1],
4152 gfc_current_intrinsic, &j->where);
4156 if (i->ts.type != j->ts.type)
4158 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
4159 "have the same type", gfc_current_intrinsic_arg[0],
4160 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
4165 if (scalar_check (i, 0) == FAILURE)
4168 if (scalar_check (j, 1) == FAILURE)