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);
823 if (y->ts.type == BT_COMPLEX)
825 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
826 "of either REAL or INTEGER", gfc_current_intrinsic_arg[1],
827 gfc_current_intrinsic, &y->where);
833 if (kind_check (kind, 2, BT_COMPLEX) == FAILURE)
841 gfc_check_complex (gfc_expr *x, gfc_expr *y)
843 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
845 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
846 "or REAL", gfc_current_intrinsic_arg[0],
847 gfc_current_intrinsic, &x->where);
850 if (scalar_check (x, 0) == FAILURE)
853 if (y->ts.type != BT_INTEGER && y->ts.type != BT_REAL)
855 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
856 "or REAL", gfc_current_intrinsic_arg[1],
857 gfc_current_intrinsic, &y->where);
860 if (scalar_check (y, 1) == FAILURE)
868 gfc_check_count (gfc_expr *mask, gfc_expr *dim, gfc_expr *kind)
870 if (logical_array_check (mask, 0) == FAILURE)
872 if (dim_check (dim, 1, false) == FAILURE)
874 if (dim_rank_check (dim, mask, 0) == FAILURE)
876 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
878 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
879 "with KIND argument at %L",
880 gfc_current_intrinsic, &kind->where) == FAILURE)
888 gfc_check_cshift (gfc_expr *array, gfc_expr *shift, gfc_expr *dim)
890 if (array_check (array, 0) == FAILURE)
893 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
896 if (dim_check (dim, 2, true) == FAILURE)
899 if (dim_rank_check (dim, array, false) == FAILURE)
902 if (array->rank == 1 || shift->rank == 0)
904 if (scalar_check (shift, 1) == FAILURE)
907 else if (shift->rank == array->rank - 1)
912 else if (dim->expr_type == EXPR_CONSTANT)
913 gfc_extract_int (dim, &d);
920 for (i = 0, j = 0; i < array->rank; i++)
923 if (!identical_dimen_shape (array, i, shift, j))
925 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
926 "invalid shape in dimension %d (%ld/%ld)",
927 gfc_current_intrinsic_arg[1],
928 gfc_current_intrinsic, &shift->where, i + 1,
929 mpz_get_si (array->shape[i]),
930 mpz_get_si (shift->shape[j]));
940 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
941 "%d or be a scalar", gfc_current_intrinsic_arg[1],
942 gfc_current_intrinsic, &shift->where, array->rank - 1);
951 gfc_check_ctime (gfc_expr *time)
953 if (scalar_check (time, 0) == FAILURE)
956 if (type_check (time, 0, BT_INTEGER) == FAILURE)
963 gfc_try gfc_check_datan2 (gfc_expr *y, gfc_expr *x)
965 if (double_check (y, 0) == FAILURE || double_check (x, 1) == FAILURE)
972 gfc_check_dcmplx (gfc_expr *x, gfc_expr *y)
974 if (numeric_check (x, 0) == FAILURE)
979 if (numeric_check (y, 1) == FAILURE)
982 if (x->ts.type == BT_COMPLEX)
984 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
985 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
986 gfc_current_intrinsic, &y->where);
990 if (y->ts.type == BT_COMPLEX)
992 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
993 "of either REAL or INTEGER", gfc_current_intrinsic_arg[1],
994 gfc_current_intrinsic, &y->where);
1004 gfc_check_dble (gfc_expr *x)
1006 if (numeric_check (x, 0) == FAILURE)
1014 gfc_check_digits (gfc_expr *x)
1016 if (int_or_real_check (x, 0) == FAILURE)
1024 gfc_check_dot_product (gfc_expr *vector_a, gfc_expr *vector_b)
1026 switch (vector_a->ts.type)
1029 if (type_check (vector_b, 1, BT_LOGICAL) == FAILURE)
1036 if (numeric_check (vector_b, 1) == FAILURE)
1041 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1042 "or LOGICAL", gfc_current_intrinsic_arg[0],
1043 gfc_current_intrinsic, &vector_a->where);
1047 if (rank_check (vector_a, 0, 1) == FAILURE)
1050 if (rank_check (vector_b, 1, 1) == FAILURE)
1053 if (! identical_dimen_shape (vector_a, 0, vector_b, 0))
1055 gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
1056 "intrinsic 'dot_product'", gfc_current_intrinsic_arg[0],
1057 gfc_current_intrinsic_arg[1], &vector_a->where);
1066 gfc_check_dprod (gfc_expr *x, gfc_expr *y)
1068 if (type_check (x, 0, BT_REAL) == FAILURE
1069 || type_check (y, 1, BT_REAL) == FAILURE)
1072 if (x->ts.kind != gfc_default_real_kind)
1074 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1075 "real", gfc_current_intrinsic_arg[0],
1076 gfc_current_intrinsic, &x->where);
1080 if (y->ts.kind != gfc_default_real_kind)
1082 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1083 "real", gfc_current_intrinsic_arg[1],
1084 gfc_current_intrinsic, &y->where);
1093 gfc_check_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary,
1096 if (array_check (array, 0) == FAILURE)
1099 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
1102 if (dim_check (dim, 3, true) == FAILURE)
1105 if (dim_rank_check (dim, array, false) == FAILURE)
1108 if (array->rank == 1 || shift->rank == 0)
1110 if (scalar_check (shift, 1) == FAILURE)
1113 else if (shift->rank == array->rank - 1)
1118 else if (dim->expr_type == EXPR_CONSTANT)
1119 gfc_extract_int (dim, &d);
1126 for (i = 0, j = 0; i < array->rank; i++)
1129 if (!identical_dimen_shape (array, i, shift, j))
1131 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1132 "invalid shape in dimension %d (%ld/%ld)",
1133 gfc_current_intrinsic_arg[1],
1134 gfc_current_intrinsic, &shift->where, i + 1,
1135 mpz_get_si (array->shape[i]),
1136 mpz_get_si (shift->shape[j]));
1146 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1147 "%d or be a scalar", gfc_current_intrinsic_arg[1],
1148 gfc_current_intrinsic, &shift->where, array->rank - 1);
1152 if (boundary != NULL)
1154 if (same_type_check (array, 0, boundary, 2) == FAILURE)
1157 if (array->rank == 1 || boundary->rank == 0)
1159 if (scalar_check (boundary, 2) == FAILURE)
1162 else if (boundary->rank == array->rank - 1)
1164 if (gfc_check_conformance (shift, boundary,
1165 "arguments '%s' and '%s' for "
1167 gfc_current_intrinsic_arg[1],
1168 gfc_current_intrinsic_arg[2],
1169 gfc_current_intrinsic ) == FAILURE)
1174 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have "
1175 "rank %d or be a scalar", gfc_current_intrinsic_arg[1],
1176 gfc_current_intrinsic, &shift->where, array->rank - 1);
1185 /* A single complex argument. */
1188 gfc_check_fn_c (gfc_expr *a)
1190 if (type_check (a, 0, BT_COMPLEX) == FAILURE)
1197 /* A single real argument. */
1200 gfc_check_fn_r (gfc_expr *a)
1202 if (type_check (a, 0, BT_REAL) == FAILURE)
1208 /* A single double argument. */
1211 gfc_check_fn_d (gfc_expr *a)
1213 if (double_check (a, 0) == FAILURE)
1219 /* A single real or complex argument. */
1222 gfc_check_fn_rc (gfc_expr *a)
1224 if (real_or_complex_check (a, 0) == FAILURE)
1232 gfc_check_fn_rc2008 (gfc_expr *a)
1234 if (real_or_complex_check (a, 0) == FAILURE)
1237 if (a->ts.type == BT_COMPLEX
1238 && gfc_notify_std (GFC_STD_F2008, "Fortran 2008: COMPLEX argument '%s' "
1239 "argument of '%s' intrinsic at %L",
1240 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
1241 &a->where) == FAILURE)
1249 gfc_check_fnum (gfc_expr *unit)
1251 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
1254 if (scalar_check (unit, 0) == FAILURE)
1262 gfc_check_huge (gfc_expr *x)
1264 if (int_or_real_check (x, 0) == FAILURE)
1272 gfc_check_hypot (gfc_expr *x, gfc_expr *y)
1274 if (type_check (x, 0, BT_REAL) == FAILURE)
1276 if (same_type_check (x, 0, y, 1) == FAILURE)
1283 /* Check that the single argument is an integer. */
1286 gfc_check_i (gfc_expr *i)
1288 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1296 gfc_check_iand (gfc_expr *i, gfc_expr *j)
1298 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1301 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1304 if (i->ts.kind != j->ts.kind)
1306 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1307 &i->where) == FAILURE)
1316 gfc_check_ibclr (gfc_expr *i, gfc_expr *pos)
1318 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1321 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1329 gfc_check_ibits (gfc_expr *i, gfc_expr *pos, gfc_expr *len)
1331 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1334 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1337 if (type_check (len, 2, BT_INTEGER) == FAILURE)
1345 gfc_check_ibset (gfc_expr *i, gfc_expr *pos)
1347 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1350 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1358 gfc_check_ichar_iachar (gfc_expr *c, gfc_expr *kind)
1362 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
1365 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1368 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1369 "with KIND argument at %L",
1370 gfc_current_intrinsic, &kind->where) == FAILURE)
1373 if (c->expr_type == EXPR_VARIABLE || c->expr_type == EXPR_SUBSTRING)
1379 /* Substring references don't have the charlength set. */
1381 while (ref && ref->type != REF_SUBSTRING)
1384 gcc_assert (ref == NULL || ref->type == REF_SUBSTRING);
1388 /* Check that the argument is length one. Non-constant lengths
1389 can't be checked here, so assume they are ok. */
1390 if (c->ts.cl && c->ts.cl->length)
1392 /* If we already have a length for this expression then use it. */
1393 if (c->ts.cl->length->expr_type != EXPR_CONSTANT)
1395 i = mpz_get_si (c->ts.cl->length->value.integer);
1402 start = ref->u.ss.start;
1403 end = ref->u.ss.end;
1406 if (end == NULL || end->expr_type != EXPR_CONSTANT
1407 || start->expr_type != EXPR_CONSTANT)
1410 i = mpz_get_si (end->value.integer) + 1
1411 - mpz_get_si (start->value.integer);
1419 gfc_error ("Argument of %s at %L must be of length one",
1420 gfc_current_intrinsic, &c->where);
1429 gfc_check_idnint (gfc_expr *a)
1431 if (double_check (a, 0) == FAILURE)
1439 gfc_check_ieor (gfc_expr *i, gfc_expr *j)
1441 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1444 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1447 if (i->ts.kind != j->ts.kind)
1449 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1450 &i->where) == FAILURE)
1459 gfc_check_index (gfc_expr *string, gfc_expr *substring, gfc_expr *back,
1462 if (type_check (string, 0, BT_CHARACTER) == FAILURE
1463 || type_check (substring, 1, BT_CHARACTER) == FAILURE)
1466 if (back != NULL && type_check (back, 2, BT_LOGICAL) == FAILURE)
1469 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
1471 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1472 "with KIND argument at %L",
1473 gfc_current_intrinsic, &kind->where) == FAILURE)
1476 if (string->ts.kind != substring->ts.kind)
1478 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1479 "kind as '%s'", gfc_current_intrinsic_arg[1],
1480 gfc_current_intrinsic, &substring->where,
1481 gfc_current_intrinsic_arg[0]);
1490 gfc_check_int (gfc_expr *x, gfc_expr *kind)
1492 if (numeric_check (x, 0) == FAILURE)
1495 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1503 gfc_check_intconv (gfc_expr *x)
1505 if (numeric_check (x, 0) == FAILURE)
1513 gfc_check_ior (gfc_expr *i, gfc_expr *j)
1515 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1518 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1521 if (i->ts.kind != j->ts.kind)
1523 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1524 &i->where) == FAILURE)
1533 gfc_check_ishft (gfc_expr *i, gfc_expr *shift)
1535 if (type_check (i, 0, BT_INTEGER) == FAILURE
1536 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1544 gfc_check_ishftc (gfc_expr *i, gfc_expr *shift, gfc_expr *size)
1546 if (type_check (i, 0, BT_INTEGER) == FAILURE
1547 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1550 if (size != NULL && type_check (size, 2, BT_INTEGER) == FAILURE)
1558 gfc_check_kill (gfc_expr *pid, gfc_expr *sig)
1560 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1563 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1571 gfc_check_kill_sub (gfc_expr *pid, gfc_expr *sig, gfc_expr *status)
1573 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1576 if (scalar_check (pid, 0) == FAILURE)
1579 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1582 if (scalar_check (sig, 1) == FAILURE)
1588 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1591 if (scalar_check (status, 2) == FAILURE)
1599 gfc_check_kind (gfc_expr *x)
1601 if (x->ts.type == BT_DERIVED)
1603 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1604 "non-derived type", gfc_current_intrinsic_arg[0],
1605 gfc_current_intrinsic, &x->where);
1614 gfc_check_lbound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
1616 if (array_check (array, 0) == FAILURE)
1619 if (dim_check (dim, 1, false) == FAILURE)
1622 if (dim_rank_check (dim, array, 1) == FAILURE)
1625 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
1627 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1628 "with KIND argument at %L",
1629 gfc_current_intrinsic, &kind->where) == FAILURE)
1637 gfc_check_len_lentrim (gfc_expr *s, gfc_expr *kind)
1639 if (type_check (s, 0, BT_CHARACTER) == FAILURE)
1642 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1644 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1645 "with KIND argument at %L",
1646 gfc_current_intrinsic, &kind->where) == FAILURE)
1654 gfc_check_lge_lgt_lle_llt (gfc_expr *a, gfc_expr *b)
1656 if (type_check (a, 0, BT_CHARACTER) == FAILURE)
1658 if (kind_value_check (a, 0, gfc_default_character_kind) == FAILURE)
1661 if (type_check (b, 1, BT_CHARACTER) == FAILURE)
1663 if (kind_value_check (b, 1, gfc_default_character_kind) == FAILURE)
1671 gfc_check_link (gfc_expr *path1, gfc_expr *path2)
1673 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1675 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
1678 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1680 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
1688 gfc_check_link_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
1690 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1692 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
1695 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1697 if (kind_value_check (path2, 0, gfc_default_character_kind) == FAILURE)
1703 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1706 if (scalar_check (status, 2) == FAILURE)
1714 gfc_check_loc (gfc_expr *expr)
1716 return variable_check (expr, 0);
1721 gfc_check_symlnk (gfc_expr *path1, gfc_expr *path2)
1723 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1725 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
1728 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1730 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
1738 gfc_check_symlnk_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
1740 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1742 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
1745 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1747 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
1753 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1756 if (scalar_check (status, 2) == FAILURE)
1764 gfc_check_logical (gfc_expr *a, gfc_expr *kind)
1766 if (type_check (a, 0, BT_LOGICAL) == FAILURE)
1768 if (kind_check (kind, 1, BT_LOGICAL) == FAILURE)
1775 /* Min/max family. */
1778 min_max_args (gfc_actual_arglist *arg)
1780 if (arg == NULL || arg->next == NULL)
1782 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1783 gfc_current_intrinsic, gfc_current_intrinsic_where);
1792 check_rest (bt type, int kind, gfc_actual_arglist *arglist)
1794 gfc_actual_arglist *arg, *tmp;
1799 if (min_max_args (arglist) == FAILURE)
1802 for (arg = arglist, n=1; arg; arg = arg->next, n++)
1805 if (x->ts.type != type || x->ts.kind != kind)
1807 if (x->ts.type == type)
1809 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type "
1810 "kinds at %L", &x->where) == FAILURE)
1815 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
1816 "%s(%d)", n, gfc_current_intrinsic, &x->where,
1817 gfc_basic_typename (type), kind);
1822 for (tmp = arglist, m=1; tmp != arg; tmp = tmp->next, m++)
1823 if (gfc_check_conformance (tmp->expr, x,
1824 "arguments 'a%d' and 'a%d' for "
1825 "intrinsic '%s'", m, n,
1826 gfc_current_intrinsic) == FAILURE)
1835 gfc_check_min_max (gfc_actual_arglist *arg)
1839 if (min_max_args (arg) == FAILURE)
1844 if (x->ts.type == BT_CHARACTER)
1846 if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1847 "with CHARACTER argument at %L",
1848 gfc_current_intrinsic, &x->where) == FAILURE)
1851 else if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
1853 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
1854 "REAL or CHARACTER", gfc_current_intrinsic, &x->where);
1858 return check_rest (x->ts.type, x->ts.kind, arg);
1863 gfc_check_min_max_integer (gfc_actual_arglist *arg)
1865 return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
1870 gfc_check_min_max_real (gfc_actual_arglist *arg)
1872 return check_rest (BT_REAL, gfc_default_real_kind, arg);
1877 gfc_check_min_max_double (gfc_actual_arglist *arg)
1879 return check_rest (BT_REAL, gfc_default_double_kind, arg);
1883 /* End of min/max family. */
1886 gfc_check_malloc (gfc_expr *size)
1888 if (type_check (size, 0, BT_INTEGER) == FAILURE)
1891 if (scalar_check (size, 0) == FAILURE)
1899 gfc_check_matmul (gfc_expr *matrix_a, gfc_expr *matrix_b)
1901 if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
1903 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1904 "or LOGICAL", gfc_current_intrinsic_arg[0],
1905 gfc_current_intrinsic, &matrix_a->where);
1909 if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
1911 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1912 "or LOGICAL", gfc_current_intrinsic_arg[1],
1913 gfc_current_intrinsic, &matrix_b->where);
1917 if ((matrix_a->ts.type == BT_LOGICAL && gfc_numeric_ts (&matrix_b->ts))
1918 || (gfc_numeric_ts (&matrix_a->ts) && matrix_b->ts.type == BT_LOGICAL))
1920 gfc_error ("Argument types of '%s' intrinsic at %L must match (%s/%s)",
1921 gfc_current_intrinsic, &matrix_a->where,
1922 gfc_typename(&matrix_a->ts), gfc_typename(&matrix_b->ts));
1926 switch (matrix_a->rank)
1929 if (rank_check (matrix_b, 1, 2) == FAILURE)
1931 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
1932 if (!identical_dimen_shape (matrix_a, 0, matrix_b, 0))
1934 gfc_error ("Different shape on dimension 1 for arguments '%s' "
1935 "and '%s' at %L for intrinsic matmul",
1936 gfc_current_intrinsic_arg[0],
1937 gfc_current_intrinsic_arg[1], &matrix_a->where);
1943 if (matrix_b->rank != 2)
1945 if (rank_check (matrix_b, 1, 1) == FAILURE)
1948 /* matrix_b has rank 1 or 2 here. Common check for the cases
1949 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
1950 - matrix_a has shape (n,m) and matrix_b has shape (m). */
1951 if (!identical_dimen_shape (matrix_a, 1, matrix_b, 0))
1953 gfc_error ("Different shape on dimension 2 for argument '%s' and "
1954 "dimension 1 for argument '%s' at %L for intrinsic "
1955 "matmul", gfc_current_intrinsic_arg[0],
1956 gfc_current_intrinsic_arg[1], &matrix_a->where);
1962 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
1963 "1 or 2", gfc_current_intrinsic_arg[0],
1964 gfc_current_intrinsic, &matrix_a->where);
1972 /* Whoever came up with this interface was probably on something.
1973 The possibilities for the occupation of the second and third
1980 NULL MASK minloc(array, mask=m)
1983 I.e. in the case of minloc(array,mask), mask will be in the second
1984 position of the argument list and we'll have to fix that up. */
1987 gfc_check_minloc_maxloc (gfc_actual_arglist *ap)
1989 gfc_expr *a, *m, *d;
1992 if (int_or_real_check (a, 0) == FAILURE || array_check (a, 0) == FAILURE)
1996 m = ap->next->next->expr;
1998 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1999 && ap->next->name == NULL)
2003 ap->next->expr = NULL;
2004 ap->next->next->expr = m;
2007 if (dim_check (d, 1, false) == FAILURE)
2010 if (dim_rank_check (d, a, 0) == FAILURE)
2013 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
2017 && gfc_check_conformance (a, m,
2018 "arguments '%s' and '%s' for intrinsic %s",
2019 gfc_current_intrinsic_arg[0],
2020 gfc_current_intrinsic_arg[2],
2021 gfc_current_intrinsic ) == FAILURE)
2028 /* Similar to minloc/maxloc, the argument list might need to be
2029 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
2030 difference is that MINLOC/MAXLOC take an additional KIND argument.
2031 The possibilities are:
2037 NULL MASK minval(array, mask=m)
2040 I.e. in the case of minval(array,mask), mask will be in the second
2041 position of the argument list and we'll have to fix that up. */
2044 check_reduction (gfc_actual_arglist *ap)
2046 gfc_expr *a, *m, *d;
2050 m = ap->next->next->expr;
2052 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
2053 && ap->next->name == NULL)
2057 ap->next->expr = NULL;
2058 ap->next->next->expr = m;
2061 if (dim_check (d, 1, false) == FAILURE)
2064 if (dim_rank_check (d, a, 0) == FAILURE)
2067 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
2071 && gfc_check_conformance (a, m,
2072 "arguments '%s' and '%s' for intrinsic %s",
2073 gfc_current_intrinsic_arg[0],
2074 gfc_current_intrinsic_arg[2],
2075 gfc_current_intrinsic) == FAILURE)
2083 gfc_check_minval_maxval (gfc_actual_arglist *ap)
2085 if (int_or_real_check (ap->expr, 0) == FAILURE
2086 || array_check (ap->expr, 0) == FAILURE)
2089 return check_reduction (ap);
2094 gfc_check_product_sum (gfc_actual_arglist *ap)
2096 if (numeric_check (ap->expr, 0) == FAILURE
2097 || array_check (ap->expr, 0) == FAILURE)
2100 return check_reduction (ap);
2105 gfc_check_merge (gfc_expr *tsource, gfc_expr *fsource, gfc_expr *mask)
2107 if (same_type_check (tsource, 0, fsource, 1) == FAILURE)
2110 if (type_check (mask, 2, BT_LOGICAL) == FAILURE)
2113 if (tsource->ts.type == BT_CHARACTER)
2114 return gfc_check_same_strlen (tsource, fsource, "MERGE intrinsic");
2121 gfc_check_move_alloc (gfc_expr *from, gfc_expr *to)
2123 symbol_attribute attr;
2125 if (variable_check (from, 0) == FAILURE)
2128 if (array_check (from, 0) == FAILURE)
2131 attr = gfc_variable_attr (from, NULL);
2132 if (!attr.allocatable)
2134 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
2135 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
2140 if (variable_check (to, 0) == FAILURE)
2143 if (array_check (to, 0) == FAILURE)
2146 attr = gfc_variable_attr (to, NULL);
2147 if (!attr.allocatable)
2149 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
2150 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
2155 if (same_type_check (from, 0, to, 1) == FAILURE)
2158 if (to->rank != from->rank)
2160 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
2161 "have the same rank %d/%d", gfc_current_intrinsic_arg[0],
2162 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
2163 &to->where, from->rank, to->rank);
2167 if (to->ts.kind != from->ts.kind)
2169 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
2170 "be of the same kind %d/%d", gfc_current_intrinsic_arg[0],
2171 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
2172 &to->where, from->ts.kind, to->ts.kind);
2181 gfc_check_nearest (gfc_expr *x, gfc_expr *s)
2183 if (type_check (x, 0, BT_REAL) == FAILURE)
2186 if (type_check (s, 1, BT_REAL) == FAILURE)
2194 gfc_check_new_line (gfc_expr *a)
2196 if (type_check (a, 0, BT_CHARACTER) == FAILURE)
2204 gfc_check_null (gfc_expr *mold)
2206 symbol_attribute attr;
2211 if (variable_check (mold, 0) == FAILURE)
2214 attr = gfc_variable_attr (mold, NULL);
2216 if (!attr.pointer && !attr.proc_pointer)
2218 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
2219 gfc_current_intrinsic_arg[0],
2220 gfc_current_intrinsic, &mold->where);
2229 gfc_check_pack (gfc_expr *array, gfc_expr *mask, gfc_expr *vector)
2231 if (array_check (array, 0) == FAILURE)
2234 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
2237 if (gfc_check_conformance (array, mask,
2238 "arguments '%s' and '%s' for intrinsic '%s'",
2239 gfc_current_intrinsic_arg[0],
2240 gfc_current_intrinsic_arg[1],
2241 gfc_current_intrinsic) == FAILURE)
2246 mpz_t array_size, vector_size;
2247 bool have_array_size, have_vector_size;
2249 if (same_type_check (array, 0, vector, 2) == FAILURE)
2252 if (rank_check (vector, 2, 1) == FAILURE)
2255 /* VECTOR requires at least as many elements as MASK
2256 has .TRUE. values. */
2257 have_array_size = gfc_array_size (array, &array_size) == SUCCESS;
2258 have_vector_size = gfc_array_size (vector, &vector_size) == SUCCESS;
2260 if (have_vector_size
2261 && (mask->expr_type == EXPR_ARRAY
2262 || (mask->expr_type == EXPR_CONSTANT
2263 && have_array_size)))
2265 int mask_true_values = 0;
2267 if (mask->expr_type == EXPR_ARRAY)
2269 gfc_constructor *mask_ctor = mask->value.constructor;
2272 if (mask_ctor->expr->expr_type != EXPR_CONSTANT)
2274 mask_true_values = 0;
2278 if (mask_ctor->expr->value.logical)
2281 mask_ctor = mask_ctor->next;
2284 else if (mask->expr_type == EXPR_CONSTANT && mask->value.logical)
2285 mask_true_values = mpz_get_si (array_size);
2287 if (mpz_get_si (vector_size) < mask_true_values)
2289 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
2290 "provide at least as many elements as there "
2291 "are .TRUE. values in '%s' (%ld/%d)",
2292 gfc_current_intrinsic_arg[2],gfc_current_intrinsic,
2293 &vector->where, gfc_current_intrinsic_arg[1],
2294 mpz_get_si (vector_size), mask_true_values);
2299 if (have_array_size)
2300 mpz_clear (array_size);
2301 if (have_vector_size)
2302 mpz_clear (vector_size);
2310 gfc_check_precision (gfc_expr *x)
2312 if (x->ts.type != BT_REAL && x->ts.type != BT_COMPLEX)
2314 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of type "
2315 "REAL or COMPLEX", gfc_current_intrinsic_arg[0],
2316 gfc_current_intrinsic, &x->where);
2325 gfc_check_present (gfc_expr *a)
2329 if (variable_check (a, 0) == FAILURE)
2332 sym = a->symtree->n.sym;
2333 if (!sym->attr.dummy)
2335 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
2336 "dummy variable", gfc_current_intrinsic_arg[0],
2337 gfc_current_intrinsic, &a->where);
2341 if (!sym->attr.optional)
2343 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
2344 "an OPTIONAL dummy variable", gfc_current_intrinsic_arg[0],
2345 gfc_current_intrinsic, &a->where);
2349 /* 13.14.82 PRESENT(A)
2351 Argument. A shall be the name of an optional dummy argument that is
2352 accessible in the subprogram in which the PRESENT function reference
2356 && !(a->ref->next == NULL && a->ref->type == REF_ARRAY
2357 && a->ref->u.ar.type == AR_FULL))
2359 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
2360 "subobject of '%s'", gfc_current_intrinsic_arg[0],
2361 gfc_current_intrinsic, &a->where, sym->name);
2370 gfc_check_radix (gfc_expr *x)
2372 if (int_or_real_check (x, 0) == FAILURE)
2380 gfc_check_range (gfc_expr *x)
2382 if (numeric_check (x, 0) == FAILURE)
2389 /* real, float, sngl. */
2391 gfc_check_real (gfc_expr *a, gfc_expr *kind)
2393 if (numeric_check (a, 0) == FAILURE)
2396 if (kind_check (kind, 1, BT_REAL) == FAILURE)
2404 gfc_check_rename (gfc_expr *path1, gfc_expr *path2)
2406 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2408 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
2411 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2413 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
2421 gfc_check_rename_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
2423 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2425 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
2428 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2430 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
2436 if (type_check (status, 2, BT_INTEGER) == FAILURE)
2439 if (scalar_check (status, 2) == FAILURE)
2447 gfc_check_repeat (gfc_expr *x, gfc_expr *y)
2449 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2452 if (scalar_check (x, 0) == FAILURE)
2455 if (type_check (y, 0, BT_INTEGER) == FAILURE)
2458 if (scalar_check (y, 1) == FAILURE)
2466 gfc_check_reshape (gfc_expr *source, gfc_expr *shape,
2467 gfc_expr *pad, gfc_expr *order)
2473 if (array_check (source, 0) == FAILURE)
2476 if (rank_check (shape, 1, 1) == FAILURE)
2479 if (type_check (shape, 1, BT_INTEGER) == FAILURE)
2482 if (gfc_array_size (shape, &size) != SUCCESS)
2484 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
2485 "array of constant size", &shape->where);
2489 shape_size = mpz_get_ui (size);
2492 if (shape_size <= 0)
2494 gfc_error ("'%s' argument of '%s' intrinsic at %L is empty",
2495 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
2499 else if (shape_size > GFC_MAX_DIMENSIONS)
2501 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
2502 "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
2505 else if (shape->expr_type == EXPR_ARRAY)
2509 for (i = 0; i < shape_size; ++i)
2511 e = gfc_get_array_element (shape, i);
2512 if (e->expr_type != EXPR_CONSTANT)
2518 gfc_extract_int (e, &extent);
2521 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
2522 "negative element (%d)", gfc_current_intrinsic_arg[1],
2523 gfc_current_intrinsic, &e->where, extent);
2533 if (same_type_check (source, 0, pad, 2) == FAILURE)
2536 if (array_check (pad, 2) == FAILURE)
2542 if (array_check (order, 3) == FAILURE)
2545 if (type_check (order, 3, BT_INTEGER) == FAILURE)
2548 if (order->expr_type == EXPR_ARRAY)
2550 int i, order_size, dim, perm[GFC_MAX_DIMENSIONS];
2553 for (i = 0; i < GFC_MAX_DIMENSIONS; ++i)
2556 gfc_array_size (order, &size);
2557 order_size = mpz_get_ui (size);
2560 if (order_size != shape_size)
2562 gfc_error ("'%s' argument of '%s' intrinsic at %L "
2563 "has wrong number of elements (%d/%d)",
2564 gfc_current_intrinsic_arg[3],
2565 gfc_current_intrinsic, &order->where,
2566 order_size, shape_size);
2570 for (i = 1; i <= order_size; ++i)
2572 e = gfc_get_array_element (order, i-1);
2573 if (e->expr_type != EXPR_CONSTANT)
2579 gfc_extract_int (e, &dim);
2581 if (dim < 1 || dim > order_size)
2583 gfc_error ("'%s' argument of '%s' intrinsic at %L "
2584 "has out-of-range dimension (%d)",
2585 gfc_current_intrinsic_arg[3],
2586 gfc_current_intrinsic, &e->where, dim);
2590 if (perm[dim-1] != 0)
2592 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
2593 "invalid permutation of dimensions (dimension "
2594 "'%d' duplicated)", gfc_current_intrinsic_arg[3],
2595 gfc_current_intrinsic, &e->where, dim);
2605 if (pad == NULL && shape->expr_type == EXPR_ARRAY
2606 && gfc_is_constant_expr (shape)
2607 && !(source->expr_type == EXPR_VARIABLE && source->symtree->n.sym->as
2608 && source->symtree->n.sym->as->type == AS_ASSUMED_SIZE))
2610 /* Check the match in size between source and destination. */
2611 if (gfc_array_size (source, &nelems) == SUCCESS)
2616 c = shape->value.constructor;
2617 mpz_init_set_ui (size, 1);
2618 for (; c; c = c->next)
2619 mpz_mul (size, size, c->expr->value.integer);
2621 test = mpz_cmp (nelems, size) < 0 && mpz_cmp_ui (size, 0) > 0;
2627 gfc_error ("Without padding, there are not enough elements "
2628 "in the intrinsic RESHAPE source at %L to match "
2629 "the shape", &source->where);
2640 gfc_check_scale (gfc_expr *x, gfc_expr *i)
2642 if (type_check (x, 0, BT_REAL) == FAILURE)
2645 if (type_check (i, 1, BT_INTEGER) == FAILURE)
2653 gfc_check_scan (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
2655 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2658 if (type_check (y, 1, BT_CHARACTER) == FAILURE)
2661 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
2664 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
2666 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2667 "with KIND argument at %L",
2668 gfc_current_intrinsic, &kind->where) == FAILURE)
2671 if (same_type_check (x, 0, y, 1) == FAILURE)
2679 gfc_check_secnds (gfc_expr *r)
2681 if (type_check (r, 0, BT_REAL) == FAILURE)
2684 if (kind_value_check (r, 0, 4) == FAILURE)
2687 if (scalar_check (r, 0) == FAILURE)
2695 gfc_check_selected_char_kind (gfc_expr *name)
2697 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2700 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
2703 if (scalar_check (name, 0) == FAILURE)
2711 gfc_check_selected_int_kind (gfc_expr *r)
2713 if (type_check (r, 0, BT_INTEGER) == FAILURE)
2716 if (scalar_check (r, 0) == FAILURE)
2724 gfc_check_selected_real_kind (gfc_expr *p, gfc_expr *r)
2726 if (p == NULL && r == NULL)
2728 gfc_error ("Missing arguments to %s intrinsic at %L",
2729 gfc_current_intrinsic, gfc_current_intrinsic_where);
2734 if (p != NULL && type_check (p, 0, BT_INTEGER) == FAILURE)
2737 if (r != NULL && type_check (r, 1, BT_INTEGER) == FAILURE)
2745 gfc_check_set_exponent (gfc_expr *x, gfc_expr *i)
2747 if (type_check (x, 0, BT_REAL) == FAILURE)
2750 if (type_check (i, 1, BT_INTEGER) == FAILURE)
2758 gfc_check_shape (gfc_expr *source)
2762 if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
2765 ar = gfc_find_array_ref (source);
2767 if (ar->as && ar->as->type == AS_ASSUMED_SIZE && ar->type == AR_FULL)
2769 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
2770 "an assumed size array", &source->where);
2779 gfc_check_sign (gfc_expr *a, gfc_expr *b)
2781 if (int_or_real_check (a, 0) == FAILURE)
2784 if (same_type_check (a, 0, b, 1) == FAILURE)
2792 gfc_check_size (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
2794 if (array_check (array, 0) == FAILURE)
2797 if (dim_check (dim, 1, true) == FAILURE)
2800 if (dim_rank_check (dim, array, 0) == FAILURE)
2803 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
2805 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2806 "with KIND argument at %L",
2807 gfc_current_intrinsic, &kind->where) == FAILURE)
2816 gfc_check_sizeof (gfc_expr *arg ATTRIBUTE_UNUSED)
2823 gfc_check_sleep_sub (gfc_expr *seconds)
2825 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
2828 if (scalar_check (seconds, 0) == FAILURE)
2836 gfc_check_spread (gfc_expr *source, gfc_expr *dim, gfc_expr *ncopies)
2838 if (source->rank >= GFC_MAX_DIMENSIONS)
2840 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
2841 "than rank %d", gfc_current_intrinsic_arg[0],
2842 gfc_current_intrinsic, &source->where, GFC_MAX_DIMENSIONS);
2850 if (dim_check (dim, 1, false) == FAILURE)
2853 /* dim_rank_check() does not apply here. */
2855 && dim->expr_type == EXPR_CONSTANT
2856 && (mpz_cmp_ui (dim->value.integer, 1) < 0
2857 || mpz_cmp_ui (dim->value.integer, source->rank + 1) > 0))
2859 gfc_error ("'%s' argument of '%s' intrinsic at %L is not a valid "
2860 "dimension index", gfc_current_intrinsic_arg[1],
2861 gfc_current_intrinsic, &dim->where);
2865 if (type_check (ncopies, 2, BT_INTEGER) == FAILURE)
2868 if (scalar_check (ncopies, 2) == FAILURE)
2875 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
2879 gfc_check_fgetputc_sub (gfc_expr *unit, gfc_expr *c, gfc_expr *status)
2881 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2884 if (scalar_check (unit, 0) == FAILURE)
2887 if (type_check (c, 1, BT_CHARACTER) == FAILURE)
2889 if (kind_value_check (c, 1, gfc_default_character_kind) == FAILURE)
2895 if (type_check (status, 2, BT_INTEGER) == FAILURE
2896 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE
2897 || scalar_check (status, 2) == FAILURE)
2905 gfc_check_fgetputc (gfc_expr *unit, gfc_expr *c)
2907 return gfc_check_fgetputc_sub (unit, c, NULL);
2912 gfc_check_fgetput_sub (gfc_expr *c, gfc_expr *status)
2914 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
2916 if (kind_value_check (c, 0, gfc_default_character_kind) == FAILURE)
2922 if (type_check (status, 1, BT_INTEGER) == FAILURE
2923 || kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE
2924 || scalar_check (status, 1) == FAILURE)
2932 gfc_check_fgetput (gfc_expr *c)
2934 return gfc_check_fgetput_sub (c, NULL);
2939 gfc_check_fseek_sub (gfc_expr *unit, gfc_expr *offset, gfc_expr *whence, gfc_expr *status)
2941 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2944 if (scalar_check (unit, 0) == FAILURE)
2947 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
2950 if (scalar_check (offset, 1) == FAILURE)
2953 if (type_check (whence, 2, BT_INTEGER) == FAILURE)
2956 if (scalar_check (whence, 2) == FAILURE)
2962 if (type_check (status, 3, BT_INTEGER) == FAILURE)
2965 if (kind_value_check (status, 3, 4) == FAILURE)
2968 if (scalar_check (status, 3) == FAILURE)
2977 gfc_check_fstat (gfc_expr *unit, gfc_expr *array)
2979 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2982 if (scalar_check (unit, 0) == FAILURE)
2985 if (type_check (array, 1, BT_INTEGER) == FAILURE
2986 || kind_value_check (unit, 0, gfc_default_integer_kind) == FAILURE)
2989 if (array_check (array, 1) == FAILURE)
2997 gfc_check_fstat_sub (gfc_expr *unit, gfc_expr *array, gfc_expr *status)
2999 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3002 if (scalar_check (unit, 0) == FAILURE)
3005 if (type_check (array, 1, BT_INTEGER) == FAILURE
3006 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3009 if (array_check (array, 1) == FAILURE)
3015 if (type_check (status, 2, BT_INTEGER) == FAILURE
3016 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
3019 if (scalar_check (status, 2) == FAILURE)
3027 gfc_check_ftell (gfc_expr *unit)
3029 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3032 if (scalar_check (unit, 0) == FAILURE)
3040 gfc_check_ftell_sub (gfc_expr *unit, gfc_expr *offset)
3042 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3045 if (scalar_check (unit, 0) == FAILURE)
3048 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
3051 if (scalar_check (offset, 1) == FAILURE)
3059 gfc_check_stat (gfc_expr *name, gfc_expr *array)
3061 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3063 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
3066 if (type_check (array, 1, BT_INTEGER) == FAILURE
3067 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3070 if (array_check (array, 1) == FAILURE)
3078 gfc_check_stat_sub (gfc_expr *name, gfc_expr *array, gfc_expr *status)
3080 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3082 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
3085 if (type_check (array, 1, BT_INTEGER) == FAILURE
3086 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3089 if (array_check (array, 1) == FAILURE)
3095 if (type_check (status, 2, BT_INTEGER) == FAILURE
3096 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3099 if (scalar_check (status, 2) == FAILURE)
3107 gfc_check_transfer (gfc_expr *source ATTRIBUTE_UNUSED,
3108 gfc_expr *mold ATTRIBUTE_UNUSED, gfc_expr *size)
3110 if (mold->ts.type == BT_HOLLERITH)
3112 gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
3113 &mold->where, gfc_basic_typename (BT_HOLLERITH));
3119 if (type_check (size, 2, BT_INTEGER) == FAILURE)
3122 if (scalar_check (size, 2) == FAILURE)
3125 if (nonoptional_check (size, 2) == FAILURE)
3134 gfc_check_transpose (gfc_expr *matrix)
3136 if (rank_check (matrix, 0, 2) == FAILURE)
3144 gfc_check_ubound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
3146 if (array_check (array, 0) == FAILURE)
3149 if (dim_check (dim, 1, false) == FAILURE)
3152 if (dim_rank_check (dim, array, 0) == FAILURE)
3155 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
3157 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
3158 "with KIND argument at %L",
3159 gfc_current_intrinsic, &kind->where) == FAILURE)
3167 gfc_check_unpack (gfc_expr *vector, gfc_expr *mask, gfc_expr *field)
3171 if (rank_check (vector, 0, 1) == FAILURE)
3174 if (array_check (mask, 1) == FAILURE)
3177 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
3180 if (same_type_check (vector, 0, field, 2) == FAILURE)
3183 if (mask->expr_type == EXPR_ARRAY
3184 && gfc_array_size (vector, &vector_size) == SUCCESS)
3186 int mask_true_count = 0;
3187 gfc_constructor *mask_ctor = mask->value.constructor;
3190 if (mask_ctor->expr->expr_type != EXPR_CONSTANT)
3192 mask_true_count = 0;
3196 if (mask_ctor->expr->value.logical)
3199 mask_ctor = mask_ctor->next;
3202 if (mpz_get_si (vector_size) < mask_true_count)
3204 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
3205 "provide at least as many elements as there "
3206 "are .TRUE. values in '%s' (%ld/%d)",
3207 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
3208 &vector->where, gfc_current_intrinsic_arg[1],
3209 mpz_get_si (vector_size), mask_true_count);
3213 mpz_clear (vector_size);
3216 if (mask->rank != field->rank && field->rank != 0)
3218 gfc_error ("'%s' argument of '%s' intrinsic at %L must have "
3219 "the same rank as '%s' or be a scalar",
3220 gfc_current_intrinsic_arg[2], gfc_current_intrinsic,
3221 &field->where, gfc_current_intrinsic_arg[1]);
3225 if (mask->rank == field->rank)
3228 for (i = 0; i < field->rank; i++)
3229 if (! identical_dimen_shape (mask, i, field, i))
3231 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L "
3232 "must have identical shape.",
3233 gfc_current_intrinsic_arg[2],
3234 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
3244 gfc_check_verify (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
3246 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
3249 if (same_type_check (x, 0, y, 1) == FAILURE)
3252 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
3255 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
3257 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
3258 "with KIND argument at %L",
3259 gfc_current_intrinsic, &kind->where) == FAILURE)
3267 gfc_check_trim (gfc_expr *x)
3269 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
3272 if (scalar_check (x, 0) == FAILURE)
3280 gfc_check_ttynam (gfc_expr *unit)
3282 if (scalar_check (unit, 0) == FAILURE)
3285 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3292 /* Common check function for the half a dozen intrinsics that have a
3293 single real argument. */
3296 gfc_check_x (gfc_expr *x)
3298 if (type_check (x, 0, BT_REAL) == FAILURE)
3305 /************* Check functions for intrinsic subroutines *************/
3308 gfc_check_cpu_time (gfc_expr *time)
3310 if (scalar_check (time, 0) == FAILURE)
3313 if (type_check (time, 0, BT_REAL) == FAILURE)
3316 if (variable_check (time, 0) == FAILURE)
3324 gfc_check_date_and_time (gfc_expr *date, gfc_expr *time,
3325 gfc_expr *zone, gfc_expr *values)
3329 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
3331 if (kind_value_check (date, 0, gfc_default_character_kind) == FAILURE)
3333 if (scalar_check (date, 0) == FAILURE)
3335 if (variable_check (date, 0) == FAILURE)
3341 if (type_check (time, 1, BT_CHARACTER) == FAILURE)
3343 if (kind_value_check (time, 1, gfc_default_character_kind) == FAILURE)
3345 if (scalar_check (time, 1) == FAILURE)
3347 if (variable_check (time, 1) == FAILURE)
3353 if (type_check (zone, 2, BT_CHARACTER) == FAILURE)
3355 if (kind_value_check (zone, 2, gfc_default_character_kind) == FAILURE)
3357 if (scalar_check (zone, 2) == FAILURE)
3359 if (variable_check (zone, 2) == FAILURE)
3365 if (type_check (values, 3, BT_INTEGER) == FAILURE)
3367 if (array_check (values, 3) == FAILURE)
3369 if (rank_check (values, 3, 1) == FAILURE)
3371 if (variable_check (values, 3) == FAILURE)
3380 gfc_check_mvbits (gfc_expr *from, gfc_expr *frompos, gfc_expr *len,
3381 gfc_expr *to, gfc_expr *topos)
3383 if (type_check (from, 0, BT_INTEGER) == FAILURE)
3386 if (type_check (frompos, 1, BT_INTEGER) == FAILURE)
3389 if (type_check (len, 2, BT_INTEGER) == FAILURE)
3392 if (same_type_check (from, 0, to, 3) == FAILURE)
3395 if (variable_check (to, 3) == FAILURE)
3398 if (type_check (topos, 4, BT_INTEGER) == FAILURE)
3406 gfc_check_random_number (gfc_expr *harvest)
3408 if (type_check (harvest, 0, BT_REAL) == FAILURE)
3411 if (variable_check (harvest, 0) == FAILURE)
3419 gfc_check_random_seed (gfc_expr *size, gfc_expr *put, gfc_expr *get)
3421 unsigned int nargs = 0, kiss_size;
3422 locus *where = NULL;
3423 mpz_t put_size, get_size;
3424 bool have_gfc_real_16; /* Try and mimic HAVE_GFC_REAL_16 in libgfortran. */
3426 have_gfc_real_16 = gfc_validate_kind (BT_REAL, 16, true) != -1;
3428 /* Keep the number of bytes in sync with kiss_size in
3429 libgfortran/intrinsics/random.c. */
3430 kiss_size = (have_gfc_real_16 ? 48 : 32) / gfc_default_integer_kind;
3434 if (size->expr_type != EXPR_VARIABLE
3435 || !size->symtree->n.sym->attr.optional)
3438 if (scalar_check (size, 0) == FAILURE)
3441 if (type_check (size, 0, BT_INTEGER) == FAILURE)
3444 if (variable_check (size, 0) == FAILURE)
3447 if (kind_value_check (size, 0, gfc_default_integer_kind) == FAILURE)
3453 if (put->expr_type != EXPR_VARIABLE
3454 || !put->symtree->n.sym->attr.optional)
3457 where = &put->where;
3460 if (array_check (put, 1) == FAILURE)
3463 if (rank_check (put, 1, 1) == FAILURE)
3466 if (type_check (put, 1, BT_INTEGER) == FAILURE)
3469 if (kind_value_check (put, 1, gfc_default_integer_kind) == FAILURE)
3472 if (gfc_array_size (put, &put_size) == SUCCESS
3473 && mpz_get_ui (put_size) < kiss_size)
3474 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
3475 "too small (%i/%i)",
3476 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, where,
3477 (int) mpz_get_ui (put_size), kiss_size);
3482 if (get->expr_type != EXPR_VARIABLE
3483 || !get->symtree->n.sym->attr.optional)
3486 where = &get->where;
3489 if (array_check (get, 2) == FAILURE)
3492 if (rank_check (get, 2, 1) == FAILURE)
3495 if (type_check (get, 2, BT_INTEGER) == FAILURE)
3498 if (variable_check (get, 2) == FAILURE)
3501 if (kind_value_check (get, 2, gfc_default_integer_kind) == FAILURE)
3504 if (gfc_array_size (get, &get_size) == SUCCESS
3505 && mpz_get_ui (get_size) < kiss_size)
3506 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
3507 "too small (%i/%i)",
3508 gfc_current_intrinsic_arg[2], gfc_current_intrinsic, where,
3509 (int) mpz_get_ui (get_size), kiss_size);
3512 /* RANDOM_SEED may not have more than one non-optional argument. */
3514 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic, where);
3521 gfc_check_second_sub (gfc_expr *time)
3523 if (scalar_check (time, 0) == FAILURE)
3526 if (type_check (time, 0, BT_REAL) == FAILURE)
3529 if (kind_value_check(time, 0, 4) == FAILURE)
3536 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
3537 count, count_rate, and count_max are all optional arguments */
3540 gfc_check_system_clock (gfc_expr *count, gfc_expr *count_rate,
3541 gfc_expr *count_max)
3545 if (scalar_check (count, 0) == FAILURE)
3548 if (type_check (count, 0, BT_INTEGER) == FAILURE)
3551 if (variable_check (count, 0) == FAILURE)
3555 if (count_rate != NULL)
3557 if (scalar_check (count_rate, 1) == FAILURE)
3560 if (type_check (count_rate, 1, BT_INTEGER) == FAILURE)
3563 if (variable_check (count_rate, 1) == FAILURE)
3567 && same_type_check (count, 0, count_rate, 1) == FAILURE)
3572 if (count_max != NULL)
3574 if (scalar_check (count_max, 2) == FAILURE)
3577 if (type_check (count_max, 2, BT_INTEGER) == FAILURE)
3580 if (variable_check (count_max, 2) == FAILURE)
3584 && same_type_check (count, 0, count_max, 2) == FAILURE)
3587 if (count_rate != NULL
3588 && same_type_check (count_rate, 1, count_max, 2) == FAILURE)
3597 gfc_check_irand (gfc_expr *x)
3602 if (scalar_check (x, 0) == FAILURE)
3605 if (type_check (x, 0, BT_INTEGER) == FAILURE)
3608 if (kind_value_check(x, 0, 4) == FAILURE)
3616 gfc_check_alarm_sub (gfc_expr *seconds, gfc_expr *handler, gfc_expr *status)
3618 if (scalar_check (seconds, 0) == FAILURE)
3621 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
3624 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3626 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3627 "or PROCEDURE", gfc_current_intrinsic_arg[1],
3628 gfc_current_intrinsic, &handler->where);
3632 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3638 if (scalar_check (status, 2) == FAILURE)
3641 if (type_check (status, 2, BT_INTEGER) == FAILURE)
3644 if (kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
3652 gfc_check_rand (gfc_expr *x)
3657 if (scalar_check (x, 0) == FAILURE)
3660 if (type_check (x, 0, BT_INTEGER) == FAILURE)
3663 if (kind_value_check(x, 0, 4) == FAILURE)
3671 gfc_check_srand (gfc_expr *x)
3673 if (scalar_check (x, 0) == FAILURE)
3676 if (type_check (x, 0, BT_INTEGER) == FAILURE)
3679 if (kind_value_check(x, 0, 4) == FAILURE)
3687 gfc_check_ctime_sub (gfc_expr *time, gfc_expr *result)
3689 if (scalar_check (time, 0) == FAILURE)
3691 if (type_check (time, 0, BT_INTEGER) == FAILURE)
3694 if (type_check (result, 1, BT_CHARACTER) == FAILURE)
3696 if (kind_value_check (result, 1, gfc_default_character_kind) == FAILURE)
3704 gfc_check_dtime_etime (gfc_expr *x)
3706 if (array_check (x, 0) == FAILURE)
3709 if (rank_check (x, 0, 1) == FAILURE)
3712 if (variable_check (x, 0) == FAILURE)
3715 if (type_check (x, 0, BT_REAL) == FAILURE)
3718 if (kind_value_check(x, 0, 4) == FAILURE)
3726 gfc_check_dtime_etime_sub (gfc_expr *values, gfc_expr *time)
3728 if (array_check (values, 0) == FAILURE)
3731 if (rank_check (values, 0, 1) == FAILURE)
3734 if (variable_check (values, 0) == FAILURE)
3737 if (type_check (values, 0, BT_REAL) == FAILURE)
3740 if (kind_value_check(values, 0, 4) == FAILURE)
3743 if (scalar_check (time, 1) == FAILURE)
3746 if (type_check (time, 1, BT_REAL) == FAILURE)
3749 if (kind_value_check(time, 1, 4) == FAILURE)
3757 gfc_check_fdate_sub (gfc_expr *date)
3759 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
3761 if (kind_value_check (date, 0, gfc_default_character_kind) == FAILURE)
3769 gfc_check_gerror (gfc_expr *msg)
3771 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
3773 if (kind_value_check (msg, 0, gfc_default_character_kind) == FAILURE)
3781 gfc_check_getcwd_sub (gfc_expr *cwd, gfc_expr *status)
3783 if (type_check (cwd, 0, BT_CHARACTER) == FAILURE)
3785 if (kind_value_check (cwd, 0, gfc_default_character_kind) == FAILURE)
3791 if (scalar_check (status, 1) == FAILURE)
3794 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3802 gfc_check_getarg (gfc_expr *pos, gfc_expr *value)
3804 if (type_check (pos, 0, BT_INTEGER) == FAILURE)
3807 if (pos->ts.kind > gfc_default_integer_kind)
3809 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
3810 "not wider than the default kind (%d)",
3811 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
3812 &pos->where, gfc_default_integer_kind);
3816 if (type_check (value, 1, BT_CHARACTER) == FAILURE)
3818 if (kind_value_check (value, 1, gfc_default_character_kind) == FAILURE)
3826 gfc_check_getlog (gfc_expr *msg)
3828 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
3830 if (kind_value_check (msg, 0, gfc_default_character_kind) == FAILURE)
3838 gfc_check_exit (gfc_expr *status)
3843 if (type_check (status, 0, BT_INTEGER) == FAILURE)
3846 if (scalar_check (status, 0) == FAILURE)
3854 gfc_check_flush (gfc_expr *unit)
3859 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3862 if (scalar_check (unit, 0) == FAILURE)
3870 gfc_check_free (gfc_expr *i)
3872 if (type_check (i, 0, BT_INTEGER) == FAILURE)
3875 if (scalar_check (i, 0) == FAILURE)
3883 gfc_check_hostnm (gfc_expr *name)
3885 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3887 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
3895 gfc_check_hostnm_sub (gfc_expr *name, gfc_expr *status)
3897 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3899 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
3905 if (scalar_check (status, 1) == FAILURE)
3908 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3916 gfc_check_itime_idate (gfc_expr *values)
3918 if (array_check (values, 0) == FAILURE)
3921 if (rank_check (values, 0, 1) == FAILURE)
3924 if (variable_check (values, 0) == FAILURE)
3927 if (type_check (values, 0, BT_INTEGER) == FAILURE)
3930 if (kind_value_check(values, 0, gfc_default_integer_kind) == FAILURE)
3938 gfc_check_ltime_gmtime (gfc_expr *time, gfc_expr *values)
3940 if (type_check (time, 0, BT_INTEGER) == FAILURE)
3943 if (kind_value_check(time, 0, gfc_default_integer_kind) == FAILURE)
3946 if (scalar_check (time, 0) == FAILURE)
3949 if (array_check (values, 1) == FAILURE)
3952 if (rank_check (values, 1, 1) == FAILURE)
3955 if (variable_check (values, 1) == FAILURE)
3958 if (type_check (values, 1, BT_INTEGER) == FAILURE)
3961 if (kind_value_check(values, 1, gfc_default_integer_kind) == FAILURE)
3969 gfc_check_ttynam_sub (gfc_expr *unit, gfc_expr *name)
3971 if (scalar_check (unit, 0) == FAILURE)
3974 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3977 if (type_check (name, 1, BT_CHARACTER) == FAILURE)
3979 if (kind_value_check (name, 1, gfc_default_character_kind) == FAILURE)
3987 gfc_check_isatty (gfc_expr *unit)
3992 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3995 if (scalar_check (unit, 0) == FAILURE)
4003 gfc_check_isnan (gfc_expr *x)
4005 if (type_check (x, 0, BT_REAL) == FAILURE)
4013 gfc_check_perror (gfc_expr *string)
4015 if (type_check (string, 0, BT_CHARACTER) == FAILURE)
4017 if (kind_value_check (string, 0, gfc_default_character_kind) == FAILURE)
4025 gfc_check_umask (gfc_expr *mask)
4027 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
4030 if (scalar_check (mask, 0) == FAILURE)
4038 gfc_check_umask_sub (gfc_expr *mask, gfc_expr *old)
4040 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
4043 if (scalar_check (mask, 0) == FAILURE)
4049 if (scalar_check (old, 1) == FAILURE)
4052 if (type_check (old, 1, BT_INTEGER) == FAILURE)
4060 gfc_check_unlink (gfc_expr *name)
4062 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
4064 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
4072 gfc_check_unlink_sub (gfc_expr *name, gfc_expr *status)
4074 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
4076 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
4082 if (scalar_check (status, 1) == FAILURE)
4085 if (type_check (status, 1, BT_INTEGER) == FAILURE)
4093 gfc_check_signal (gfc_expr *number, gfc_expr *handler)
4095 if (scalar_check (number, 0) == FAILURE)
4098 if (type_check (number, 0, BT_INTEGER) == FAILURE)
4101 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
4103 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
4104 "or PROCEDURE", gfc_current_intrinsic_arg[1],
4105 gfc_current_intrinsic, &handler->where);
4109 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
4117 gfc_check_signal_sub (gfc_expr *number, gfc_expr *handler, gfc_expr *status)
4119 if (scalar_check (number, 0) == FAILURE)
4122 if (type_check (number, 0, BT_INTEGER) == FAILURE)
4125 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
4127 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
4128 "or PROCEDURE", gfc_current_intrinsic_arg[1],
4129 gfc_current_intrinsic, &handler->where);
4133 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
4139 if (type_check (status, 2, BT_INTEGER) == FAILURE)
4142 if (scalar_check (status, 2) == FAILURE)
4150 gfc_check_system_sub (gfc_expr *cmd, gfc_expr *status)
4152 if (type_check (cmd, 0, BT_CHARACTER) == FAILURE)
4154 if (kind_value_check (cmd, 0, gfc_default_character_kind) == FAILURE)
4157 if (scalar_check (status, 1) == FAILURE)
4160 if (type_check (status, 1, BT_INTEGER) == FAILURE)
4163 if (kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE)
4170 /* This is used for the GNU intrinsics AND, OR and XOR. */
4172 gfc_check_and (gfc_expr *i, gfc_expr *j)
4174 if (i->ts.type != BT_INTEGER && i->ts.type != BT_LOGICAL)
4176 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
4177 "or LOGICAL", gfc_current_intrinsic_arg[0],
4178 gfc_current_intrinsic, &i->where);
4182 if (j->ts.type != BT_INTEGER && j->ts.type != BT_LOGICAL)
4184 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
4185 "or LOGICAL", gfc_current_intrinsic_arg[1],
4186 gfc_current_intrinsic, &j->where);
4190 if (i->ts.type != j->ts.type)
4192 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
4193 "have the same type", gfc_current_intrinsic_arg[0],
4194 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
4199 if (scalar_check (i, 0) == FAILURE)
4202 if (scalar_check (j, 1) == FAILURE)