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.u.cl && a->ts.u.cl->length
414 && a->ts.u.cl->length->expr_type == EXPR_CONSTANT)
415 len_a = mpz_get_si (a->ts.u.cl->length->value.integer);
416 else if (a->expr_type == EXPR_CONSTANT
417 && (a->ts.u.cl == NULL || a->ts.u.cl->length == NULL))
418 len_a = a->value.character.length;
422 if (b->ts.u.cl && b->ts.u.cl->length
423 && b->ts.u.cl->length->expr_type == EXPR_CONSTANT)
424 len_b = mpz_get_si (b->ts.u.cl->length->value.integer);
425 else if (b->expr_type == EXPR_CONSTANT
426 && (b->ts.u.cl == NULL || b->ts.u.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,
553 /* Common check function where the first argument must be real or
554 integer and the second argument must be the same as the first. */
557 gfc_check_a_p (gfc_expr *a, gfc_expr *p)
559 if (int_or_real_check (a, 0) == FAILURE)
562 if (a->ts.type != p->ts.type)
564 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
565 "have the same type", gfc_current_intrinsic_arg[0],
566 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
571 if (a->ts.kind != p->ts.kind)
573 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
574 &p->where) == FAILURE)
583 gfc_check_x_yd (gfc_expr *x, gfc_expr *y)
585 if (double_check (x, 0) == FAILURE || double_check (y, 1) == FAILURE)
593 gfc_check_associated (gfc_expr *pointer, gfc_expr *target)
595 symbol_attribute attr1, attr2;
600 where = &pointer->where;
602 if (pointer->expr_type == EXPR_VARIABLE)
603 attr1 = gfc_variable_attr (pointer, NULL);
604 else if (pointer->expr_type == EXPR_FUNCTION)
605 attr1 = pointer->symtree->n.sym->attr;
606 else if (pointer->expr_type == EXPR_NULL)
609 gcc_assert (0); /* Pointer must be a variable or a function. */
611 if (!attr1.pointer && !attr1.proc_pointer)
613 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
614 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
619 /* Target argument is optional. */
623 where = &target->where;
624 if (target->expr_type == EXPR_NULL)
627 if (target->expr_type == EXPR_VARIABLE)
628 attr2 = gfc_variable_attr (target, NULL);
629 else if (target->expr_type == EXPR_FUNCTION)
630 attr2 = target->symtree->n.sym->attr;
633 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
634 "or target VARIABLE or FUNCTION", gfc_current_intrinsic_arg[1],
635 gfc_current_intrinsic, &target->where);
639 if (attr1.pointer && !attr2.pointer && !attr2.target)
641 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
642 "or a TARGET", gfc_current_intrinsic_arg[1],
643 gfc_current_intrinsic, &target->where);
648 if (same_type_check (pointer, 0, target, 1) == FAILURE)
650 if (rank_check (target, 0, pointer->rank) == FAILURE)
652 if (target->rank > 0)
654 for (i = 0; i < target->rank; i++)
655 if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
657 gfc_error ("Array section with a vector subscript at %L shall not "
658 "be the target of a pointer",
668 gfc_error ("NULL pointer at %L is not permitted as actual argument "
669 "of '%s' intrinsic function", where, gfc_current_intrinsic);
676 gfc_check_atan_2 (gfc_expr *y, gfc_expr *x)
678 /* gfc_notify_std would be a wast of time as the return value
679 is seemingly used only for the generic resolution. The error
680 will be: Too many arguments. */
681 if ((gfc_option.allow_std & GFC_STD_F2008) == 0)
684 return gfc_check_atan2 (y, x);
689 gfc_check_atan2 (gfc_expr *y, gfc_expr *x)
691 if (type_check (y, 0, BT_REAL) == FAILURE)
693 if (same_type_check (y, 0, x, 1) == FAILURE)
700 /* BESJN and BESYN functions. */
703 gfc_check_besn (gfc_expr *n, gfc_expr *x)
705 if (type_check (n, 0, BT_INTEGER) == FAILURE)
708 if (type_check (x, 1, BT_REAL) == FAILURE)
716 gfc_check_btest (gfc_expr *i, gfc_expr *pos)
718 if (type_check (i, 0, BT_INTEGER) == FAILURE)
720 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
728 gfc_check_char (gfc_expr *i, gfc_expr *kind)
730 if (type_check (i, 0, BT_INTEGER) == FAILURE)
732 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
740 gfc_check_chdir (gfc_expr *dir)
742 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
744 if (kind_value_check (dir, 0, gfc_default_character_kind) == FAILURE)
752 gfc_check_chdir_sub (gfc_expr *dir, gfc_expr *status)
754 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
756 if (kind_value_check (dir, 0, gfc_default_character_kind) == FAILURE)
762 if (type_check (status, 1, BT_INTEGER) == FAILURE)
764 if (scalar_check (status, 1) == FAILURE)
772 gfc_check_chmod (gfc_expr *name, gfc_expr *mode)
774 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
776 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
779 if (type_check (mode, 1, BT_CHARACTER) == FAILURE)
781 if (kind_value_check (mode, 1, gfc_default_character_kind) == FAILURE)
789 gfc_check_chmod_sub (gfc_expr *name, gfc_expr *mode, gfc_expr *status)
791 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
793 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
796 if (type_check (mode, 1, BT_CHARACTER) == FAILURE)
798 if (kind_value_check (mode, 1, gfc_default_character_kind) == FAILURE)
804 if (type_check (status, 2, BT_INTEGER) == FAILURE)
807 if (scalar_check (status, 2) == FAILURE)
815 gfc_check_cmplx (gfc_expr *x, gfc_expr *y, gfc_expr *kind)
817 if (numeric_check (x, 0) == FAILURE)
822 if (numeric_check (y, 1) == FAILURE)
825 if (x->ts.type == BT_COMPLEX)
827 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
828 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
829 gfc_current_intrinsic, &y->where);
833 if (y->ts.type == BT_COMPLEX)
835 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
836 "of either REAL or INTEGER", gfc_current_intrinsic_arg[1],
837 gfc_current_intrinsic, &y->where);
843 if (kind_check (kind, 2, BT_COMPLEX) == FAILURE)
851 gfc_check_complex (gfc_expr *x, gfc_expr *y)
853 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
855 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
856 "or REAL", gfc_current_intrinsic_arg[0],
857 gfc_current_intrinsic, &x->where);
860 if (scalar_check (x, 0) == FAILURE)
863 if (y->ts.type != BT_INTEGER && y->ts.type != BT_REAL)
865 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
866 "or REAL", gfc_current_intrinsic_arg[1],
867 gfc_current_intrinsic, &y->where);
870 if (scalar_check (y, 1) == FAILURE)
878 gfc_check_count (gfc_expr *mask, gfc_expr *dim, gfc_expr *kind)
880 if (logical_array_check (mask, 0) == FAILURE)
882 if (dim_check (dim, 1, false) == FAILURE)
884 if (dim_rank_check (dim, mask, 0) == FAILURE)
886 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
888 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
889 "with KIND argument at %L",
890 gfc_current_intrinsic, &kind->where) == FAILURE)
898 gfc_check_cshift (gfc_expr *array, gfc_expr *shift, gfc_expr *dim)
900 if (array_check (array, 0) == FAILURE)
903 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
906 if (dim_check (dim, 2, true) == FAILURE)
909 if (dim_rank_check (dim, array, false) == FAILURE)
912 if (array->rank == 1 || shift->rank == 0)
914 if (scalar_check (shift, 1) == FAILURE)
917 else if (shift->rank == array->rank - 1)
922 else if (dim->expr_type == EXPR_CONSTANT)
923 gfc_extract_int (dim, &d);
930 for (i = 0, j = 0; i < array->rank; i++)
933 if (!identical_dimen_shape (array, i, shift, j))
935 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
936 "invalid shape in dimension %d (%ld/%ld)",
937 gfc_current_intrinsic_arg[1],
938 gfc_current_intrinsic, &shift->where, i + 1,
939 mpz_get_si (array->shape[i]),
940 mpz_get_si (shift->shape[j]));
950 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
951 "%d or be a scalar", gfc_current_intrinsic_arg[1],
952 gfc_current_intrinsic, &shift->where, array->rank - 1);
961 gfc_check_ctime (gfc_expr *time)
963 if (scalar_check (time, 0) == FAILURE)
966 if (type_check (time, 0, BT_INTEGER) == FAILURE)
973 gfc_try gfc_check_datan2 (gfc_expr *y, gfc_expr *x)
975 if (double_check (y, 0) == FAILURE || double_check (x, 1) == FAILURE)
982 gfc_check_dcmplx (gfc_expr *x, gfc_expr *y)
984 if (numeric_check (x, 0) == FAILURE)
989 if (numeric_check (y, 1) == FAILURE)
992 if (x->ts.type == BT_COMPLEX)
994 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
995 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
996 gfc_current_intrinsic, &y->where);
1000 if (y->ts.type == BT_COMPLEX)
1002 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1003 "of either REAL or INTEGER", gfc_current_intrinsic_arg[1],
1004 gfc_current_intrinsic, &y->where);
1014 gfc_check_dble (gfc_expr *x)
1016 if (numeric_check (x, 0) == FAILURE)
1024 gfc_check_digits (gfc_expr *x)
1026 if (int_or_real_check (x, 0) == FAILURE)
1034 gfc_check_dot_product (gfc_expr *vector_a, gfc_expr *vector_b)
1036 switch (vector_a->ts.type)
1039 if (type_check (vector_b, 1, BT_LOGICAL) == FAILURE)
1046 if (numeric_check (vector_b, 1) == FAILURE)
1051 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1052 "or LOGICAL", gfc_current_intrinsic_arg[0],
1053 gfc_current_intrinsic, &vector_a->where);
1057 if (rank_check (vector_a, 0, 1) == FAILURE)
1060 if (rank_check (vector_b, 1, 1) == FAILURE)
1063 if (! identical_dimen_shape (vector_a, 0, vector_b, 0))
1065 gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
1066 "intrinsic 'dot_product'", gfc_current_intrinsic_arg[0],
1067 gfc_current_intrinsic_arg[1], &vector_a->where);
1076 gfc_check_dprod (gfc_expr *x, gfc_expr *y)
1078 if (type_check (x, 0, BT_REAL) == FAILURE
1079 || type_check (y, 1, BT_REAL) == FAILURE)
1082 if (x->ts.kind != gfc_default_real_kind)
1084 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1085 "real", gfc_current_intrinsic_arg[0],
1086 gfc_current_intrinsic, &x->where);
1090 if (y->ts.kind != gfc_default_real_kind)
1092 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1093 "real", gfc_current_intrinsic_arg[1],
1094 gfc_current_intrinsic, &y->where);
1103 gfc_check_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary,
1106 if (array_check (array, 0) == FAILURE)
1109 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
1112 if (dim_check (dim, 3, true) == FAILURE)
1115 if (dim_rank_check (dim, array, false) == FAILURE)
1118 if (array->rank == 1 || shift->rank == 0)
1120 if (scalar_check (shift, 1) == FAILURE)
1123 else if (shift->rank == array->rank - 1)
1128 else if (dim->expr_type == EXPR_CONSTANT)
1129 gfc_extract_int (dim, &d);
1136 for (i = 0, j = 0; i < array->rank; i++)
1139 if (!identical_dimen_shape (array, i, shift, j))
1141 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1142 "invalid shape in dimension %d (%ld/%ld)",
1143 gfc_current_intrinsic_arg[1],
1144 gfc_current_intrinsic, &shift->where, i + 1,
1145 mpz_get_si (array->shape[i]),
1146 mpz_get_si (shift->shape[j]));
1156 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1157 "%d or be a scalar", gfc_current_intrinsic_arg[1],
1158 gfc_current_intrinsic, &shift->where, array->rank - 1);
1162 if (boundary != NULL)
1164 if (same_type_check (array, 0, boundary, 2) == FAILURE)
1167 if (array->rank == 1 || boundary->rank == 0)
1169 if (scalar_check (boundary, 2) == FAILURE)
1172 else if (boundary->rank == array->rank - 1)
1174 if (gfc_check_conformance (shift, boundary,
1175 "arguments '%s' and '%s' for "
1177 gfc_current_intrinsic_arg[1],
1178 gfc_current_intrinsic_arg[2],
1179 gfc_current_intrinsic ) == FAILURE)
1184 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have "
1185 "rank %d or be a scalar", gfc_current_intrinsic_arg[1],
1186 gfc_current_intrinsic, &shift->where, array->rank - 1);
1195 /* A single complex argument. */
1198 gfc_check_fn_c (gfc_expr *a)
1200 if (type_check (a, 0, BT_COMPLEX) == FAILURE)
1207 /* A single real argument. */
1210 gfc_check_fn_r (gfc_expr *a)
1212 if (type_check (a, 0, BT_REAL) == FAILURE)
1218 /* A single double argument. */
1221 gfc_check_fn_d (gfc_expr *a)
1223 if (double_check (a, 0) == FAILURE)
1229 /* A single real or complex argument. */
1232 gfc_check_fn_rc (gfc_expr *a)
1234 if (real_or_complex_check (a, 0) == FAILURE)
1242 gfc_check_fn_rc2008 (gfc_expr *a)
1244 if (real_or_complex_check (a, 0) == FAILURE)
1247 if (a->ts.type == BT_COMPLEX
1248 && gfc_notify_std (GFC_STD_F2008, "Fortran 2008: COMPLEX argument '%s' "
1249 "argument of '%s' intrinsic at %L",
1250 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
1251 &a->where) == FAILURE)
1259 gfc_check_fnum (gfc_expr *unit)
1261 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
1264 if (scalar_check (unit, 0) == FAILURE)
1272 gfc_check_huge (gfc_expr *x)
1274 if (int_or_real_check (x, 0) == FAILURE)
1282 gfc_check_hypot (gfc_expr *x, gfc_expr *y)
1284 if (type_check (x, 0, BT_REAL) == FAILURE)
1286 if (same_type_check (x, 0, y, 1) == FAILURE)
1293 /* Check that the single argument is an integer. */
1296 gfc_check_i (gfc_expr *i)
1298 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1306 gfc_check_iand (gfc_expr *i, gfc_expr *j)
1308 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1311 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1314 if (i->ts.kind != j->ts.kind)
1316 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1317 &i->where) == FAILURE)
1326 gfc_check_ibclr (gfc_expr *i, gfc_expr *pos)
1328 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1331 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1339 gfc_check_ibits (gfc_expr *i, gfc_expr *pos, gfc_expr *len)
1341 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1344 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1347 if (type_check (len, 2, BT_INTEGER) == FAILURE)
1355 gfc_check_ibset (gfc_expr *i, gfc_expr *pos)
1357 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1360 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1368 gfc_check_ichar_iachar (gfc_expr *c, gfc_expr *kind)
1372 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
1375 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1378 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1379 "with KIND argument at %L",
1380 gfc_current_intrinsic, &kind->where) == FAILURE)
1383 if (c->expr_type == EXPR_VARIABLE || c->expr_type == EXPR_SUBSTRING)
1389 /* Substring references don't have the charlength set. */
1391 while (ref && ref->type != REF_SUBSTRING)
1394 gcc_assert (ref == NULL || ref->type == REF_SUBSTRING);
1398 /* Check that the argument is length one. Non-constant lengths
1399 can't be checked here, so assume they are ok. */
1400 if (c->ts.u.cl && c->ts.u.cl->length)
1402 /* If we already have a length for this expression then use it. */
1403 if (c->ts.u.cl->length->expr_type != EXPR_CONSTANT)
1405 i = mpz_get_si (c->ts.u.cl->length->value.integer);
1412 start = ref->u.ss.start;
1413 end = ref->u.ss.end;
1416 if (end == NULL || end->expr_type != EXPR_CONSTANT
1417 || start->expr_type != EXPR_CONSTANT)
1420 i = mpz_get_si (end->value.integer) + 1
1421 - mpz_get_si (start->value.integer);
1429 gfc_error ("Argument of %s at %L must be of length one",
1430 gfc_current_intrinsic, &c->where);
1439 gfc_check_idnint (gfc_expr *a)
1441 if (double_check (a, 0) == FAILURE)
1449 gfc_check_ieor (gfc_expr *i, gfc_expr *j)
1451 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1454 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1457 if (i->ts.kind != j->ts.kind)
1459 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1460 &i->where) == FAILURE)
1469 gfc_check_index (gfc_expr *string, gfc_expr *substring, gfc_expr *back,
1472 if (type_check (string, 0, BT_CHARACTER) == FAILURE
1473 || type_check (substring, 1, BT_CHARACTER) == FAILURE)
1476 if (back != NULL && type_check (back, 2, BT_LOGICAL) == FAILURE)
1479 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
1481 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1482 "with KIND argument at %L",
1483 gfc_current_intrinsic, &kind->where) == FAILURE)
1486 if (string->ts.kind != substring->ts.kind)
1488 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1489 "kind as '%s'", gfc_current_intrinsic_arg[1],
1490 gfc_current_intrinsic, &substring->where,
1491 gfc_current_intrinsic_arg[0]);
1500 gfc_check_int (gfc_expr *x, gfc_expr *kind)
1502 if (numeric_check (x, 0) == FAILURE)
1505 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1513 gfc_check_intconv (gfc_expr *x)
1515 if (numeric_check (x, 0) == FAILURE)
1523 gfc_check_ior (gfc_expr *i, gfc_expr *j)
1525 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1528 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1531 if (i->ts.kind != j->ts.kind)
1533 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1534 &i->where) == FAILURE)
1543 gfc_check_ishft (gfc_expr *i, gfc_expr *shift)
1545 if (type_check (i, 0, BT_INTEGER) == FAILURE
1546 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1554 gfc_check_ishftc (gfc_expr *i, gfc_expr *shift, gfc_expr *size)
1556 if (type_check (i, 0, BT_INTEGER) == FAILURE
1557 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1560 if (size != NULL && type_check (size, 2, BT_INTEGER) == FAILURE)
1568 gfc_check_kill (gfc_expr *pid, gfc_expr *sig)
1570 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1573 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1581 gfc_check_kill_sub (gfc_expr *pid, gfc_expr *sig, gfc_expr *status)
1583 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1586 if (scalar_check (pid, 0) == FAILURE)
1589 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1592 if (scalar_check (sig, 1) == FAILURE)
1598 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1601 if (scalar_check (status, 2) == FAILURE)
1609 gfc_check_kind (gfc_expr *x)
1611 if (x->ts.type == BT_DERIVED)
1613 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1614 "non-derived type", gfc_current_intrinsic_arg[0],
1615 gfc_current_intrinsic, &x->where);
1624 gfc_check_lbound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
1626 if (array_check (array, 0) == FAILURE)
1629 if (dim_check (dim, 1, false) == FAILURE)
1632 if (dim_rank_check (dim, array, 1) == FAILURE)
1635 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
1637 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1638 "with KIND argument at %L",
1639 gfc_current_intrinsic, &kind->where) == FAILURE)
1647 gfc_check_len_lentrim (gfc_expr *s, gfc_expr *kind)
1649 if (type_check (s, 0, BT_CHARACTER) == FAILURE)
1652 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1654 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1655 "with KIND argument at %L",
1656 gfc_current_intrinsic, &kind->where) == FAILURE)
1664 gfc_check_lge_lgt_lle_llt (gfc_expr *a, gfc_expr *b)
1666 if (type_check (a, 0, BT_CHARACTER) == FAILURE)
1668 if (kind_value_check (a, 0, gfc_default_character_kind) == FAILURE)
1671 if (type_check (b, 1, BT_CHARACTER) == FAILURE)
1673 if (kind_value_check (b, 1, gfc_default_character_kind) == FAILURE)
1681 gfc_check_link (gfc_expr *path1, gfc_expr *path2)
1683 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1685 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
1688 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1690 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
1698 gfc_check_link_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
1700 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1702 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
1705 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1707 if (kind_value_check (path2, 0, gfc_default_character_kind) == FAILURE)
1713 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1716 if (scalar_check (status, 2) == FAILURE)
1724 gfc_check_loc (gfc_expr *expr)
1726 return variable_check (expr, 0);
1731 gfc_check_symlnk (gfc_expr *path1, gfc_expr *path2)
1733 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1735 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
1738 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1740 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
1748 gfc_check_symlnk_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
1750 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1752 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
1755 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1757 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
1763 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1766 if (scalar_check (status, 2) == FAILURE)
1774 gfc_check_logical (gfc_expr *a, gfc_expr *kind)
1776 if (type_check (a, 0, BT_LOGICAL) == FAILURE)
1778 if (kind_check (kind, 1, BT_LOGICAL) == FAILURE)
1785 /* Min/max family. */
1788 min_max_args (gfc_actual_arglist *arg)
1790 if (arg == NULL || arg->next == NULL)
1792 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1793 gfc_current_intrinsic, gfc_current_intrinsic_where);
1802 check_rest (bt type, int kind, gfc_actual_arglist *arglist)
1804 gfc_actual_arglist *arg, *tmp;
1809 if (min_max_args (arglist) == FAILURE)
1812 for (arg = arglist, n=1; arg; arg = arg->next, n++)
1815 if (x->ts.type != type || x->ts.kind != kind)
1817 if (x->ts.type == type)
1819 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type "
1820 "kinds at %L", &x->where) == FAILURE)
1825 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
1826 "%s(%d)", n, gfc_current_intrinsic, &x->where,
1827 gfc_basic_typename (type), kind);
1832 for (tmp = arglist, m=1; tmp != arg; tmp = tmp->next, m++)
1833 if (gfc_check_conformance (tmp->expr, x,
1834 "arguments 'a%d' and 'a%d' for "
1835 "intrinsic '%s'", m, n,
1836 gfc_current_intrinsic) == FAILURE)
1845 gfc_check_min_max (gfc_actual_arglist *arg)
1849 if (min_max_args (arg) == FAILURE)
1854 if (x->ts.type == BT_CHARACTER)
1856 if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1857 "with CHARACTER argument at %L",
1858 gfc_current_intrinsic, &x->where) == FAILURE)
1861 else if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
1863 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
1864 "REAL or CHARACTER", gfc_current_intrinsic, &x->where);
1868 return check_rest (x->ts.type, x->ts.kind, arg);
1873 gfc_check_min_max_integer (gfc_actual_arglist *arg)
1875 return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
1880 gfc_check_min_max_real (gfc_actual_arglist *arg)
1882 return check_rest (BT_REAL, gfc_default_real_kind, arg);
1887 gfc_check_min_max_double (gfc_actual_arglist *arg)
1889 return check_rest (BT_REAL, gfc_default_double_kind, arg);
1893 /* End of min/max family. */
1896 gfc_check_malloc (gfc_expr *size)
1898 if (type_check (size, 0, BT_INTEGER) == FAILURE)
1901 if (scalar_check (size, 0) == FAILURE)
1909 gfc_check_matmul (gfc_expr *matrix_a, gfc_expr *matrix_b)
1911 if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
1913 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1914 "or LOGICAL", gfc_current_intrinsic_arg[0],
1915 gfc_current_intrinsic, &matrix_a->where);
1919 if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
1921 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1922 "or LOGICAL", gfc_current_intrinsic_arg[1],
1923 gfc_current_intrinsic, &matrix_b->where);
1927 if ((matrix_a->ts.type == BT_LOGICAL && gfc_numeric_ts (&matrix_b->ts))
1928 || (gfc_numeric_ts (&matrix_a->ts) && matrix_b->ts.type == BT_LOGICAL))
1930 gfc_error ("Argument types of '%s' intrinsic at %L must match (%s/%s)",
1931 gfc_current_intrinsic, &matrix_a->where,
1932 gfc_typename(&matrix_a->ts), gfc_typename(&matrix_b->ts));
1936 switch (matrix_a->rank)
1939 if (rank_check (matrix_b, 1, 2) == FAILURE)
1941 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
1942 if (!identical_dimen_shape (matrix_a, 0, matrix_b, 0))
1944 gfc_error ("Different shape on dimension 1 for arguments '%s' "
1945 "and '%s' at %L for intrinsic matmul",
1946 gfc_current_intrinsic_arg[0],
1947 gfc_current_intrinsic_arg[1], &matrix_a->where);
1953 if (matrix_b->rank != 2)
1955 if (rank_check (matrix_b, 1, 1) == FAILURE)
1958 /* matrix_b has rank 1 or 2 here. Common check for the cases
1959 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
1960 - matrix_a has shape (n,m) and matrix_b has shape (m). */
1961 if (!identical_dimen_shape (matrix_a, 1, matrix_b, 0))
1963 gfc_error ("Different shape on dimension 2 for argument '%s' and "
1964 "dimension 1 for argument '%s' at %L for intrinsic "
1965 "matmul", gfc_current_intrinsic_arg[0],
1966 gfc_current_intrinsic_arg[1], &matrix_a->where);
1972 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
1973 "1 or 2", gfc_current_intrinsic_arg[0],
1974 gfc_current_intrinsic, &matrix_a->where);
1982 /* Whoever came up with this interface was probably on something.
1983 The possibilities for the occupation of the second and third
1990 NULL MASK minloc(array, mask=m)
1993 I.e. in the case of minloc(array,mask), mask will be in the second
1994 position of the argument list and we'll have to fix that up. */
1997 gfc_check_minloc_maxloc (gfc_actual_arglist *ap)
1999 gfc_expr *a, *m, *d;
2002 if (int_or_real_check (a, 0) == FAILURE || array_check (a, 0) == FAILURE)
2006 m = ap->next->next->expr;
2008 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
2009 && ap->next->name == NULL)
2013 ap->next->expr = NULL;
2014 ap->next->next->expr = m;
2017 if (dim_check (d, 1, false) == FAILURE)
2020 if (dim_rank_check (d, a, 0) == FAILURE)
2023 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
2027 && gfc_check_conformance (a, m,
2028 "arguments '%s' and '%s' for intrinsic %s",
2029 gfc_current_intrinsic_arg[0],
2030 gfc_current_intrinsic_arg[2],
2031 gfc_current_intrinsic ) == FAILURE)
2038 /* Similar to minloc/maxloc, the argument list might need to be
2039 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
2040 difference is that MINLOC/MAXLOC take an additional KIND argument.
2041 The possibilities are:
2047 NULL MASK minval(array, mask=m)
2050 I.e. in the case of minval(array,mask), mask will be in the second
2051 position of the argument list and we'll have to fix that up. */
2054 check_reduction (gfc_actual_arglist *ap)
2056 gfc_expr *a, *m, *d;
2060 m = ap->next->next->expr;
2062 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
2063 && ap->next->name == NULL)
2067 ap->next->expr = NULL;
2068 ap->next->next->expr = m;
2071 if (dim_check (d, 1, false) == FAILURE)
2074 if (dim_rank_check (d, a, 0) == FAILURE)
2077 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
2081 && gfc_check_conformance (a, m,
2082 "arguments '%s' and '%s' for intrinsic %s",
2083 gfc_current_intrinsic_arg[0],
2084 gfc_current_intrinsic_arg[2],
2085 gfc_current_intrinsic) == FAILURE)
2093 gfc_check_minval_maxval (gfc_actual_arglist *ap)
2095 if (int_or_real_check (ap->expr, 0) == FAILURE
2096 || array_check (ap->expr, 0) == FAILURE)
2099 return check_reduction (ap);
2104 gfc_check_product_sum (gfc_actual_arglist *ap)
2106 if (numeric_check (ap->expr, 0) == FAILURE
2107 || array_check (ap->expr, 0) == FAILURE)
2110 return check_reduction (ap);
2115 gfc_check_merge (gfc_expr *tsource, gfc_expr *fsource, gfc_expr *mask)
2117 if (same_type_check (tsource, 0, fsource, 1) == FAILURE)
2120 if (type_check (mask, 2, BT_LOGICAL) == FAILURE)
2123 if (tsource->ts.type == BT_CHARACTER)
2124 return gfc_check_same_strlen (tsource, fsource, "MERGE intrinsic");
2131 gfc_check_move_alloc (gfc_expr *from, gfc_expr *to)
2133 symbol_attribute attr;
2135 if (variable_check (from, 0) == FAILURE)
2138 attr = gfc_variable_attr (from, NULL);
2139 if (!attr.allocatable)
2141 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
2142 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
2147 if (variable_check (to, 0) == FAILURE)
2150 attr = gfc_variable_attr (to, NULL);
2151 if (!attr.allocatable)
2153 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
2154 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
2159 if (same_type_check (to, 1, from, 0) == FAILURE)
2162 if (to->rank != from->rank)
2164 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
2165 "have the same rank %d/%d", gfc_current_intrinsic_arg[0],
2166 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
2167 &to->where, from->rank, to->rank);
2171 if (to->ts.kind != from->ts.kind)
2173 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
2174 "be of the same kind %d/%d", gfc_current_intrinsic_arg[0],
2175 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
2176 &to->where, from->ts.kind, to->ts.kind);
2185 gfc_check_nearest (gfc_expr *x, gfc_expr *s)
2187 if (type_check (x, 0, BT_REAL) == FAILURE)
2190 if (type_check (s, 1, BT_REAL) == FAILURE)
2198 gfc_check_new_line (gfc_expr *a)
2200 if (type_check (a, 0, BT_CHARACTER) == FAILURE)
2208 gfc_check_null (gfc_expr *mold)
2210 symbol_attribute attr;
2215 if (variable_check (mold, 0) == FAILURE)
2218 attr = gfc_variable_attr (mold, NULL);
2220 if (!attr.pointer && !attr.proc_pointer)
2222 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
2223 gfc_current_intrinsic_arg[0],
2224 gfc_current_intrinsic, &mold->where);
2233 gfc_check_pack (gfc_expr *array, gfc_expr *mask, gfc_expr *vector)
2235 if (array_check (array, 0) == FAILURE)
2238 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
2241 if (gfc_check_conformance (array, mask,
2242 "arguments '%s' and '%s' for intrinsic '%s'",
2243 gfc_current_intrinsic_arg[0],
2244 gfc_current_intrinsic_arg[1],
2245 gfc_current_intrinsic) == FAILURE)
2250 mpz_t array_size, vector_size;
2251 bool have_array_size, have_vector_size;
2253 if (same_type_check (array, 0, vector, 2) == FAILURE)
2256 if (rank_check (vector, 2, 1) == FAILURE)
2259 /* VECTOR requires at least as many elements as MASK
2260 has .TRUE. values. */
2261 have_array_size = gfc_array_size (array, &array_size) == SUCCESS;
2262 have_vector_size = gfc_array_size (vector, &vector_size) == SUCCESS;
2264 if (have_vector_size
2265 && (mask->expr_type == EXPR_ARRAY
2266 || (mask->expr_type == EXPR_CONSTANT
2267 && have_array_size)))
2269 int mask_true_values = 0;
2271 if (mask->expr_type == EXPR_ARRAY)
2273 gfc_constructor *mask_ctor = mask->value.constructor;
2276 if (mask_ctor->expr->expr_type != EXPR_CONSTANT)
2278 mask_true_values = 0;
2282 if (mask_ctor->expr->value.logical)
2285 mask_ctor = mask_ctor->next;
2288 else if (mask->expr_type == EXPR_CONSTANT && mask->value.logical)
2289 mask_true_values = mpz_get_si (array_size);
2291 if (mpz_get_si (vector_size) < mask_true_values)
2293 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
2294 "provide at least as many elements as there "
2295 "are .TRUE. values in '%s' (%ld/%d)",
2296 gfc_current_intrinsic_arg[2],gfc_current_intrinsic,
2297 &vector->where, gfc_current_intrinsic_arg[1],
2298 mpz_get_si (vector_size), mask_true_values);
2303 if (have_array_size)
2304 mpz_clear (array_size);
2305 if (have_vector_size)
2306 mpz_clear (vector_size);
2314 gfc_check_precision (gfc_expr *x)
2316 if (x->ts.type != BT_REAL && x->ts.type != BT_COMPLEX)
2318 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of type "
2319 "REAL or COMPLEX", gfc_current_intrinsic_arg[0],
2320 gfc_current_intrinsic, &x->where);
2329 gfc_check_present (gfc_expr *a)
2333 if (variable_check (a, 0) == FAILURE)
2336 sym = a->symtree->n.sym;
2337 if (!sym->attr.dummy)
2339 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
2340 "dummy variable", gfc_current_intrinsic_arg[0],
2341 gfc_current_intrinsic, &a->where);
2345 if (!sym->attr.optional)
2347 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
2348 "an OPTIONAL dummy variable", gfc_current_intrinsic_arg[0],
2349 gfc_current_intrinsic, &a->where);
2353 /* 13.14.82 PRESENT(A)
2355 Argument. A shall be the name of an optional dummy argument that is
2356 accessible in the subprogram in which the PRESENT function reference
2360 && !(a->ref->next == NULL && a->ref->type == REF_ARRAY
2361 && a->ref->u.ar.type == AR_FULL))
2363 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
2364 "subobject of '%s'", gfc_current_intrinsic_arg[0],
2365 gfc_current_intrinsic, &a->where, sym->name);
2374 gfc_check_radix (gfc_expr *x)
2376 if (int_or_real_check (x, 0) == FAILURE)
2384 gfc_check_range (gfc_expr *x)
2386 if (numeric_check (x, 0) == FAILURE)
2393 /* real, float, sngl. */
2395 gfc_check_real (gfc_expr *a, gfc_expr *kind)
2397 if (numeric_check (a, 0) == FAILURE)
2400 if (kind_check (kind, 1, BT_REAL) == FAILURE)
2408 gfc_check_rename (gfc_expr *path1, gfc_expr *path2)
2410 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2412 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
2415 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2417 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
2425 gfc_check_rename_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
2427 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2429 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
2432 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2434 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
2440 if (type_check (status, 2, BT_INTEGER) == FAILURE)
2443 if (scalar_check (status, 2) == FAILURE)
2451 gfc_check_repeat (gfc_expr *x, gfc_expr *y)
2453 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2456 if (scalar_check (x, 0) == FAILURE)
2459 if (type_check (y, 0, BT_INTEGER) == FAILURE)
2462 if (scalar_check (y, 1) == FAILURE)
2470 gfc_check_reshape (gfc_expr *source, gfc_expr *shape,
2471 gfc_expr *pad, gfc_expr *order)
2477 if (array_check (source, 0) == FAILURE)
2480 if (rank_check (shape, 1, 1) == FAILURE)
2483 if (type_check (shape, 1, BT_INTEGER) == FAILURE)
2486 if (gfc_array_size (shape, &size) != SUCCESS)
2488 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
2489 "array of constant size", &shape->where);
2493 shape_size = mpz_get_ui (size);
2496 if (shape_size <= 0)
2498 gfc_error ("'%s' argument of '%s' intrinsic at %L is empty",
2499 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
2503 else if (shape_size > GFC_MAX_DIMENSIONS)
2505 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
2506 "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
2509 else if (shape->expr_type == EXPR_ARRAY)
2513 for (i = 0; i < shape_size; ++i)
2515 e = gfc_get_array_element (shape, i);
2516 if (e->expr_type != EXPR_CONSTANT)
2522 gfc_extract_int (e, &extent);
2525 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
2526 "negative element (%d)", gfc_current_intrinsic_arg[1],
2527 gfc_current_intrinsic, &e->where, extent);
2537 if (same_type_check (source, 0, pad, 2) == FAILURE)
2540 if (array_check (pad, 2) == FAILURE)
2546 if (array_check (order, 3) == FAILURE)
2549 if (type_check (order, 3, BT_INTEGER) == FAILURE)
2552 if (order->expr_type == EXPR_ARRAY)
2554 int i, order_size, dim, perm[GFC_MAX_DIMENSIONS];
2557 for (i = 0; i < GFC_MAX_DIMENSIONS; ++i)
2560 gfc_array_size (order, &size);
2561 order_size = mpz_get_ui (size);
2564 if (order_size != shape_size)
2566 gfc_error ("'%s' argument of '%s' intrinsic at %L "
2567 "has wrong number of elements (%d/%d)",
2568 gfc_current_intrinsic_arg[3],
2569 gfc_current_intrinsic, &order->where,
2570 order_size, shape_size);
2574 for (i = 1; i <= order_size; ++i)
2576 e = gfc_get_array_element (order, i-1);
2577 if (e->expr_type != EXPR_CONSTANT)
2583 gfc_extract_int (e, &dim);
2585 if (dim < 1 || dim > order_size)
2587 gfc_error ("'%s' argument of '%s' intrinsic at %L "
2588 "has out-of-range dimension (%d)",
2589 gfc_current_intrinsic_arg[3],
2590 gfc_current_intrinsic, &e->where, dim);
2594 if (perm[dim-1] != 0)
2596 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
2597 "invalid permutation of dimensions (dimension "
2598 "'%d' duplicated)", gfc_current_intrinsic_arg[3],
2599 gfc_current_intrinsic, &e->where, dim);
2609 if (pad == NULL && shape->expr_type == EXPR_ARRAY
2610 && gfc_is_constant_expr (shape)
2611 && !(source->expr_type == EXPR_VARIABLE && source->symtree->n.sym->as
2612 && source->symtree->n.sym->as->type == AS_ASSUMED_SIZE))
2614 /* Check the match in size between source and destination. */
2615 if (gfc_array_size (source, &nelems) == SUCCESS)
2620 c = shape->value.constructor;
2621 mpz_init_set_ui (size, 1);
2622 for (; c; c = c->next)
2623 mpz_mul (size, size, c->expr->value.integer);
2625 test = mpz_cmp (nelems, size) < 0 && mpz_cmp_ui (size, 0) > 0;
2631 gfc_error ("Without padding, there are not enough elements "
2632 "in the intrinsic RESHAPE source at %L to match "
2633 "the shape", &source->where);
2644 gfc_check_same_type_as (gfc_expr *a, gfc_expr *b)
2647 if (a->ts.type != BT_DERIVED && a->ts.type != BT_CLASS)
2649 gfc_error ("'%s' argument of '%s' intrinsic at %L "
2650 "must be of a derived type", gfc_current_intrinsic_arg[0],
2651 gfc_current_intrinsic, &a->where);
2655 if (!gfc_type_is_extensible (a->ts.u.derived))
2657 gfc_error ("'%s' argument of '%s' intrinsic at %L "
2658 "must be of an extensible type", gfc_current_intrinsic_arg[0],
2659 gfc_current_intrinsic, &a->where);
2663 if (b->ts.type != BT_DERIVED && b->ts.type != BT_CLASS)
2665 gfc_error ("'%s' argument of '%s' intrinsic at %L "
2666 "must be of a derived type", gfc_current_intrinsic_arg[1],
2667 gfc_current_intrinsic, &b->where);
2671 if (!gfc_type_is_extensible (b->ts.u.derived))
2673 gfc_error ("'%s' argument of '%s' intrinsic at %L "
2674 "must be of an extensible type", gfc_current_intrinsic_arg[1],
2675 gfc_current_intrinsic, &b->where);
2684 gfc_check_scale (gfc_expr *x, gfc_expr *i)
2686 if (type_check (x, 0, BT_REAL) == FAILURE)
2689 if (type_check (i, 1, BT_INTEGER) == FAILURE)
2697 gfc_check_scan (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
2699 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2702 if (type_check (y, 1, BT_CHARACTER) == FAILURE)
2705 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
2708 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
2710 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2711 "with KIND argument at %L",
2712 gfc_current_intrinsic, &kind->where) == FAILURE)
2715 if (same_type_check (x, 0, y, 1) == FAILURE)
2723 gfc_check_secnds (gfc_expr *r)
2725 if (type_check (r, 0, BT_REAL) == FAILURE)
2728 if (kind_value_check (r, 0, 4) == FAILURE)
2731 if (scalar_check (r, 0) == FAILURE)
2739 gfc_check_selected_char_kind (gfc_expr *name)
2741 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2744 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
2747 if (scalar_check (name, 0) == FAILURE)
2755 gfc_check_selected_int_kind (gfc_expr *r)
2757 if (type_check (r, 0, BT_INTEGER) == FAILURE)
2760 if (scalar_check (r, 0) == FAILURE)
2768 gfc_check_selected_real_kind (gfc_expr *p, gfc_expr *r)
2770 if (p == NULL && r == NULL)
2772 gfc_error ("Missing arguments to %s intrinsic at %L",
2773 gfc_current_intrinsic, gfc_current_intrinsic_where);
2778 if (p != NULL && type_check (p, 0, BT_INTEGER) == FAILURE)
2781 if (r != NULL && type_check (r, 1, BT_INTEGER) == FAILURE)
2789 gfc_check_set_exponent (gfc_expr *x, gfc_expr *i)
2791 if (type_check (x, 0, BT_REAL) == FAILURE)
2794 if (type_check (i, 1, BT_INTEGER) == FAILURE)
2802 gfc_check_shape (gfc_expr *source)
2806 if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
2809 ar = gfc_find_array_ref (source);
2811 if (ar->as && ar->as->type == AS_ASSUMED_SIZE && ar->type == AR_FULL)
2813 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
2814 "an assumed size array", &source->where);
2823 gfc_check_sign (gfc_expr *a, gfc_expr *b)
2825 if (int_or_real_check (a, 0) == FAILURE)
2828 if (same_type_check (a, 0, b, 1) == FAILURE)
2836 gfc_check_size (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
2838 if (array_check (array, 0) == FAILURE)
2841 if (dim_check (dim, 1, true) == FAILURE)
2844 if (dim_rank_check (dim, array, 0) == FAILURE)
2847 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
2849 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2850 "with KIND argument at %L",
2851 gfc_current_intrinsic, &kind->where) == FAILURE)
2860 gfc_check_sizeof (gfc_expr *arg ATTRIBUTE_UNUSED)
2867 gfc_check_sleep_sub (gfc_expr *seconds)
2869 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
2872 if (scalar_check (seconds, 0) == FAILURE)
2880 gfc_check_spread (gfc_expr *source, gfc_expr *dim, gfc_expr *ncopies)
2882 if (source->rank >= GFC_MAX_DIMENSIONS)
2884 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
2885 "than rank %d", gfc_current_intrinsic_arg[0],
2886 gfc_current_intrinsic, &source->where, GFC_MAX_DIMENSIONS);
2894 if (dim_check (dim, 1, false) == FAILURE)
2897 /* dim_rank_check() does not apply here. */
2899 && dim->expr_type == EXPR_CONSTANT
2900 && (mpz_cmp_ui (dim->value.integer, 1) < 0
2901 || mpz_cmp_ui (dim->value.integer, source->rank + 1) > 0))
2903 gfc_error ("'%s' argument of '%s' intrinsic at %L is not a valid "
2904 "dimension index", gfc_current_intrinsic_arg[1],
2905 gfc_current_intrinsic, &dim->where);
2909 if (type_check (ncopies, 2, BT_INTEGER) == FAILURE)
2912 if (scalar_check (ncopies, 2) == FAILURE)
2919 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
2923 gfc_check_fgetputc_sub (gfc_expr *unit, gfc_expr *c, gfc_expr *status)
2925 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2928 if (scalar_check (unit, 0) == FAILURE)
2931 if (type_check (c, 1, BT_CHARACTER) == FAILURE)
2933 if (kind_value_check (c, 1, gfc_default_character_kind) == FAILURE)
2939 if (type_check (status, 2, BT_INTEGER) == FAILURE
2940 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE
2941 || scalar_check (status, 2) == FAILURE)
2949 gfc_check_fgetputc (gfc_expr *unit, gfc_expr *c)
2951 return gfc_check_fgetputc_sub (unit, c, NULL);
2956 gfc_check_fgetput_sub (gfc_expr *c, gfc_expr *status)
2958 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
2960 if (kind_value_check (c, 0, gfc_default_character_kind) == FAILURE)
2966 if (type_check (status, 1, BT_INTEGER) == FAILURE
2967 || kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE
2968 || scalar_check (status, 1) == FAILURE)
2976 gfc_check_fgetput (gfc_expr *c)
2978 return gfc_check_fgetput_sub (c, NULL);
2983 gfc_check_fseek_sub (gfc_expr *unit, gfc_expr *offset, gfc_expr *whence, gfc_expr *status)
2985 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2988 if (scalar_check (unit, 0) == FAILURE)
2991 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
2994 if (scalar_check (offset, 1) == FAILURE)
2997 if (type_check (whence, 2, BT_INTEGER) == FAILURE)
3000 if (scalar_check (whence, 2) == FAILURE)
3006 if (type_check (status, 3, BT_INTEGER) == FAILURE)
3009 if (kind_value_check (status, 3, 4) == FAILURE)
3012 if (scalar_check (status, 3) == FAILURE)
3021 gfc_check_fstat (gfc_expr *unit, gfc_expr *array)
3023 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3026 if (scalar_check (unit, 0) == FAILURE)
3029 if (type_check (array, 1, BT_INTEGER) == FAILURE
3030 || kind_value_check (unit, 0, gfc_default_integer_kind) == FAILURE)
3033 if (array_check (array, 1) == FAILURE)
3041 gfc_check_fstat_sub (gfc_expr *unit, gfc_expr *array, gfc_expr *status)
3043 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3046 if (scalar_check (unit, 0) == FAILURE)
3049 if (type_check (array, 1, BT_INTEGER) == FAILURE
3050 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3053 if (array_check (array, 1) == FAILURE)
3059 if (type_check (status, 2, BT_INTEGER) == FAILURE
3060 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
3063 if (scalar_check (status, 2) == FAILURE)
3071 gfc_check_ftell (gfc_expr *unit)
3073 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3076 if (scalar_check (unit, 0) == FAILURE)
3084 gfc_check_ftell_sub (gfc_expr *unit, gfc_expr *offset)
3086 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3089 if (scalar_check (unit, 0) == FAILURE)
3092 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
3095 if (scalar_check (offset, 1) == FAILURE)
3103 gfc_check_stat (gfc_expr *name, gfc_expr *array)
3105 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3107 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
3110 if (type_check (array, 1, BT_INTEGER) == FAILURE
3111 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3114 if (array_check (array, 1) == FAILURE)
3122 gfc_check_stat_sub (gfc_expr *name, gfc_expr *array, gfc_expr *status)
3124 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3126 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
3129 if (type_check (array, 1, BT_INTEGER) == FAILURE
3130 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3133 if (array_check (array, 1) == FAILURE)
3139 if (type_check (status, 2, BT_INTEGER) == FAILURE
3140 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3143 if (scalar_check (status, 2) == FAILURE)
3151 gfc_check_transfer (gfc_expr *source ATTRIBUTE_UNUSED,
3152 gfc_expr *mold ATTRIBUTE_UNUSED, gfc_expr *size)
3154 if (mold->ts.type == BT_HOLLERITH)
3156 gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
3157 &mold->where, gfc_basic_typename (BT_HOLLERITH));
3163 if (type_check (size, 2, BT_INTEGER) == FAILURE)
3166 if (scalar_check (size, 2) == FAILURE)
3169 if (nonoptional_check (size, 2) == FAILURE)
3178 gfc_check_transpose (gfc_expr *matrix)
3180 if (rank_check (matrix, 0, 2) == FAILURE)
3188 gfc_check_ubound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
3190 if (array_check (array, 0) == FAILURE)
3193 if (dim_check (dim, 1, false) == FAILURE)
3196 if (dim_rank_check (dim, array, 0) == FAILURE)
3199 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
3201 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
3202 "with KIND argument at %L",
3203 gfc_current_intrinsic, &kind->where) == FAILURE)
3211 gfc_check_unpack (gfc_expr *vector, gfc_expr *mask, gfc_expr *field)
3215 if (rank_check (vector, 0, 1) == FAILURE)
3218 if (array_check (mask, 1) == FAILURE)
3221 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
3224 if (same_type_check (vector, 0, field, 2) == FAILURE)
3227 if (mask->expr_type == EXPR_ARRAY
3228 && gfc_array_size (vector, &vector_size) == SUCCESS)
3230 int mask_true_count = 0;
3231 gfc_constructor *mask_ctor = mask->value.constructor;
3234 if (mask_ctor->expr->expr_type != EXPR_CONSTANT)
3236 mask_true_count = 0;
3240 if (mask_ctor->expr->value.logical)
3243 mask_ctor = mask_ctor->next;
3246 if (mpz_get_si (vector_size) < mask_true_count)
3248 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
3249 "provide at least as many elements as there "
3250 "are .TRUE. values in '%s' (%ld/%d)",
3251 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
3252 &vector->where, gfc_current_intrinsic_arg[1],
3253 mpz_get_si (vector_size), mask_true_count);
3257 mpz_clear (vector_size);
3260 if (mask->rank != field->rank && field->rank != 0)
3262 gfc_error ("'%s' argument of '%s' intrinsic at %L must have "
3263 "the same rank as '%s' or be a scalar",
3264 gfc_current_intrinsic_arg[2], gfc_current_intrinsic,
3265 &field->where, gfc_current_intrinsic_arg[1]);
3269 if (mask->rank == field->rank)
3272 for (i = 0; i < field->rank; i++)
3273 if (! identical_dimen_shape (mask, i, field, i))
3275 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L "
3276 "must have identical shape.",
3277 gfc_current_intrinsic_arg[2],
3278 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
3288 gfc_check_verify (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
3290 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
3293 if (same_type_check (x, 0, y, 1) == FAILURE)
3296 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
3299 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
3301 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
3302 "with KIND argument at %L",
3303 gfc_current_intrinsic, &kind->where) == FAILURE)
3311 gfc_check_trim (gfc_expr *x)
3313 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
3316 if (scalar_check (x, 0) == FAILURE)
3324 gfc_check_ttynam (gfc_expr *unit)
3326 if (scalar_check (unit, 0) == FAILURE)
3329 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3336 /* Common check function for the half a dozen intrinsics that have a
3337 single real argument. */
3340 gfc_check_x (gfc_expr *x)
3342 if (type_check (x, 0, BT_REAL) == FAILURE)
3349 /************* Check functions for intrinsic subroutines *************/
3352 gfc_check_cpu_time (gfc_expr *time)
3354 if (scalar_check (time, 0) == FAILURE)
3357 if (type_check (time, 0, BT_REAL) == FAILURE)
3360 if (variable_check (time, 0) == FAILURE)
3368 gfc_check_date_and_time (gfc_expr *date, gfc_expr *time,
3369 gfc_expr *zone, gfc_expr *values)
3373 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
3375 if (kind_value_check (date, 0, gfc_default_character_kind) == FAILURE)
3377 if (scalar_check (date, 0) == FAILURE)
3379 if (variable_check (date, 0) == FAILURE)
3385 if (type_check (time, 1, BT_CHARACTER) == FAILURE)
3387 if (kind_value_check (time, 1, gfc_default_character_kind) == FAILURE)
3389 if (scalar_check (time, 1) == FAILURE)
3391 if (variable_check (time, 1) == FAILURE)
3397 if (type_check (zone, 2, BT_CHARACTER) == FAILURE)
3399 if (kind_value_check (zone, 2, gfc_default_character_kind) == FAILURE)
3401 if (scalar_check (zone, 2) == FAILURE)
3403 if (variable_check (zone, 2) == FAILURE)
3409 if (type_check (values, 3, BT_INTEGER) == FAILURE)
3411 if (array_check (values, 3) == FAILURE)
3413 if (rank_check (values, 3, 1) == FAILURE)
3415 if (variable_check (values, 3) == FAILURE)
3424 gfc_check_mvbits (gfc_expr *from, gfc_expr *frompos, gfc_expr *len,
3425 gfc_expr *to, gfc_expr *topos)
3427 if (type_check (from, 0, BT_INTEGER) == FAILURE)
3430 if (type_check (frompos, 1, BT_INTEGER) == FAILURE)
3433 if (type_check (len, 2, BT_INTEGER) == FAILURE)
3436 if (same_type_check (from, 0, to, 3) == FAILURE)
3439 if (variable_check (to, 3) == FAILURE)
3442 if (type_check (topos, 4, BT_INTEGER) == FAILURE)
3450 gfc_check_random_number (gfc_expr *harvest)
3452 if (type_check (harvest, 0, BT_REAL) == FAILURE)
3455 if (variable_check (harvest, 0) == FAILURE)
3463 gfc_check_random_seed (gfc_expr *size, gfc_expr *put, gfc_expr *get)
3465 unsigned int nargs = 0, kiss_size;
3466 locus *where = NULL;
3467 mpz_t put_size, get_size;
3468 bool have_gfc_real_16; /* Try and mimic HAVE_GFC_REAL_16 in libgfortran. */
3470 have_gfc_real_16 = gfc_validate_kind (BT_REAL, 16, true) != -1;
3472 /* Keep the number of bytes in sync with kiss_size in
3473 libgfortran/intrinsics/random.c. */
3474 kiss_size = (have_gfc_real_16 ? 48 : 32) / gfc_default_integer_kind;
3478 if (size->expr_type != EXPR_VARIABLE
3479 || !size->symtree->n.sym->attr.optional)
3482 if (scalar_check (size, 0) == FAILURE)
3485 if (type_check (size, 0, BT_INTEGER) == FAILURE)
3488 if (variable_check (size, 0) == FAILURE)
3491 if (kind_value_check (size, 0, gfc_default_integer_kind) == FAILURE)
3497 if (put->expr_type != EXPR_VARIABLE
3498 || !put->symtree->n.sym->attr.optional)
3501 where = &put->where;
3504 if (array_check (put, 1) == FAILURE)
3507 if (rank_check (put, 1, 1) == FAILURE)
3510 if (type_check (put, 1, BT_INTEGER) == FAILURE)
3513 if (kind_value_check (put, 1, gfc_default_integer_kind) == FAILURE)
3516 if (gfc_array_size (put, &put_size) == SUCCESS
3517 && mpz_get_ui (put_size) < kiss_size)
3518 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
3519 "too small (%i/%i)",
3520 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, where,
3521 (int) mpz_get_ui (put_size), kiss_size);
3526 if (get->expr_type != EXPR_VARIABLE
3527 || !get->symtree->n.sym->attr.optional)
3530 where = &get->where;
3533 if (array_check (get, 2) == FAILURE)
3536 if (rank_check (get, 2, 1) == FAILURE)
3539 if (type_check (get, 2, BT_INTEGER) == FAILURE)
3542 if (variable_check (get, 2) == FAILURE)
3545 if (kind_value_check (get, 2, gfc_default_integer_kind) == FAILURE)
3548 if (gfc_array_size (get, &get_size) == SUCCESS
3549 && mpz_get_ui (get_size) < kiss_size)
3550 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
3551 "too small (%i/%i)",
3552 gfc_current_intrinsic_arg[2], gfc_current_intrinsic, where,
3553 (int) mpz_get_ui (get_size), kiss_size);
3556 /* RANDOM_SEED may not have more than one non-optional argument. */
3558 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic, where);
3565 gfc_check_second_sub (gfc_expr *time)
3567 if (scalar_check (time, 0) == FAILURE)
3570 if (type_check (time, 0, BT_REAL) == FAILURE)
3573 if (kind_value_check(time, 0, 4) == FAILURE)
3580 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
3581 count, count_rate, and count_max are all optional arguments */
3584 gfc_check_system_clock (gfc_expr *count, gfc_expr *count_rate,
3585 gfc_expr *count_max)
3589 if (scalar_check (count, 0) == FAILURE)
3592 if (type_check (count, 0, BT_INTEGER) == FAILURE)
3595 if (variable_check (count, 0) == FAILURE)
3599 if (count_rate != NULL)
3601 if (scalar_check (count_rate, 1) == FAILURE)
3604 if (type_check (count_rate, 1, BT_INTEGER) == FAILURE)
3607 if (variable_check (count_rate, 1) == FAILURE)
3611 && same_type_check (count, 0, count_rate, 1) == FAILURE)
3616 if (count_max != NULL)
3618 if (scalar_check (count_max, 2) == FAILURE)
3621 if (type_check (count_max, 2, BT_INTEGER) == FAILURE)
3624 if (variable_check (count_max, 2) == FAILURE)
3628 && same_type_check (count, 0, count_max, 2) == FAILURE)
3631 if (count_rate != NULL
3632 && same_type_check (count_rate, 1, count_max, 2) == FAILURE)
3641 gfc_check_irand (gfc_expr *x)
3646 if (scalar_check (x, 0) == FAILURE)
3649 if (type_check (x, 0, BT_INTEGER) == FAILURE)
3652 if (kind_value_check(x, 0, 4) == FAILURE)
3660 gfc_check_alarm_sub (gfc_expr *seconds, gfc_expr *handler, gfc_expr *status)
3662 if (scalar_check (seconds, 0) == FAILURE)
3665 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
3668 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3670 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3671 "or PROCEDURE", gfc_current_intrinsic_arg[1],
3672 gfc_current_intrinsic, &handler->where);
3676 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3682 if (scalar_check (status, 2) == FAILURE)
3685 if (type_check (status, 2, BT_INTEGER) == FAILURE)
3688 if (kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
3696 gfc_check_rand (gfc_expr *x)
3701 if (scalar_check (x, 0) == FAILURE)
3704 if (type_check (x, 0, BT_INTEGER) == FAILURE)
3707 if (kind_value_check(x, 0, 4) == FAILURE)
3715 gfc_check_srand (gfc_expr *x)
3717 if (scalar_check (x, 0) == FAILURE)
3720 if (type_check (x, 0, BT_INTEGER) == FAILURE)
3723 if (kind_value_check(x, 0, 4) == FAILURE)
3731 gfc_check_ctime_sub (gfc_expr *time, gfc_expr *result)
3733 if (scalar_check (time, 0) == FAILURE)
3735 if (type_check (time, 0, BT_INTEGER) == FAILURE)
3738 if (type_check (result, 1, BT_CHARACTER) == FAILURE)
3740 if (kind_value_check (result, 1, gfc_default_character_kind) == FAILURE)
3748 gfc_check_dtime_etime (gfc_expr *x)
3750 if (array_check (x, 0) == FAILURE)
3753 if (rank_check (x, 0, 1) == FAILURE)
3756 if (variable_check (x, 0) == FAILURE)
3759 if (type_check (x, 0, BT_REAL) == FAILURE)
3762 if (kind_value_check(x, 0, 4) == FAILURE)
3770 gfc_check_dtime_etime_sub (gfc_expr *values, gfc_expr *time)
3772 if (array_check (values, 0) == FAILURE)
3775 if (rank_check (values, 0, 1) == FAILURE)
3778 if (variable_check (values, 0) == FAILURE)
3781 if (type_check (values, 0, BT_REAL) == FAILURE)
3784 if (kind_value_check(values, 0, 4) == FAILURE)
3787 if (scalar_check (time, 1) == FAILURE)
3790 if (type_check (time, 1, BT_REAL) == FAILURE)
3793 if (kind_value_check(time, 1, 4) == FAILURE)
3801 gfc_check_fdate_sub (gfc_expr *date)
3803 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
3805 if (kind_value_check (date, 0, gfc_default_character_kind) == FAILURE)
3813 gfc_check_gerror (gfc_expr *msg)
3815 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
3817 if (kind_value_check (msg, 0, gfc_default_character_kind) == FAILURE)
3825 gfc_check_getcwd_sub (gfc_expr *cwd, gfc_expr *status)
3827 if (type_check (cwd, 0, BT_CHARACTER) == FAILURE)
3829 if (kind_value_check (cwd, 0, gfc_default_character_kind) == FAILURE)
3835 if (scalar_check (status, 1) == FAILURE)
3838 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3846 gfc_check_getarg (gfc_expr *pos, gfc_expr *value)
3848 if (type_check (pos, 0, BT_INTEGER) == FAILURE)
3851 if (pos->ts.kind > gfc_default_integer_kind)
3853 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
3854 "not wider than the default kind (%d)",
3855 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
3856 &pos->where, gfc_default_integer_kind);
3860 if (type_check (value, 1, BT_CHARACTER) == FAILURE)
3862 if (kind_value_check (value, 1, gfc_default_character_kind) == FAILURE)
3870 gfc_check_getlog (gfc_expr *msg)
3872 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
3874 if (kind_value_check (msg, 0, gfc_default_character_kind) == FAILURE)
3882 gfc_check_exit (gfc_expr *status)
3887 if (type_check (status, 0, BT_INTEGER) == FAILURE)
3890 if (scalar_check (status, 0) == FAILURE)
3898 gfc_check_flush (gfc_expr *unit)
3903 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3906 if (scalar_check (unit, 0) == FAILURE)
3914 gfc_check_free (gfc_expr *i)
3916 if (type_check (i, 0, BT_INTEGER) == FAILURE)
3919 if (scalar_check (i, 0) == FAILURE)
3927 gfc_check_hostnm (gfc_expr *name)
3929 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3931 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
3939 gfc_check_hostnm_sub (gfc_expr *name, gfc_expr *status)
3941 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3943 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
3949 if (scalar_check (status, 1) == FAILURE)
3952 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3960 gfc_check_itime_idate (gfc_expr *values)
3962 if (array_check (values, 0) == FAILURE)
3965 if (rank_check (values, 0, 1) == FAILURE)
3968 if (variable_check (values, 0) == FAILURE)
3971 if (type_check (values, 0, BT_INTEGER) == FAILURE)
3974 if (kind_value_check(values, 0, gfc_default_integer_kind) == FAILURE)
3982 gfc_check_ltime_gmtime (gfc_expr *time, gfc_expr *values)
3984 if (type_check (time, 0, BT_INTEGER) == FAILURE)
3987 if (kind_value_check(time, 0, gfc_default_integer_kind) == FAILURE)
3990 if (scalar_check (time, 0) == FAILURE)
3993 if (array_check (values, 1) == FAILURE)
3996 if (rank_check (values, 1, 1) == FAILURE)
3999 if (variable_check (values, 1) == FAILURE)
4002 if (type_check (values, 1, BT_INTEGER) == FAILURE)
4005 if (kind_value_check(values, 1, gfc_default_integer_kind) == FAILURE)
4013 gfc_check_ttynam_sub (gfc_expr *unit, gfc_expr *name)
4015 if (scalar_check (unit, 0) == FAILURE)
4018 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
4021 if (type_check (name, 1, BT_CHARACTER) == FAILURE)
4023 if (kind_value_check (name, 1, gfc_default_character_kind) == FAILURE)
4031 gfc_check_isatty (gfc_expr *unit)
4036 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
4039 if (scalar_check (unit, 0) == FAILURE)
4047 gfc_check_isnan (gfc_expr *x)
4049 if (type_check (x, 0, BT_REAL) == FAILURE)
4057 gfc_check_perror (gfc_expr *string)
4059 if (type_check (string, 0, BT_CHARACTER) == FAILURE)
4061 if (kind_value_check (string, 0, gfc_default_character_kind) == FAILURE)
4069 gfc_check_umask (gfc_expr *mask)
4071 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
4074 if (scalar_check (mask, 0) == FAILURE)
4082 gfc_check_umask_sub (gfc_expr *mask, gfc_expr *old)
4084 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
4087 if (scalar_check (mask, 0) == FAILURE)
4093 if (scalar_check (old, 1) == FAILURE)
4096 if (type_check (old, 1, BT_INTEGER) == FAILURE)
4104 gfc_check_unlink (gfc_expr *name)
4106 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
4108 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
4116 gfc_check_unlink_sub (gfc_expr *name, gfc_expr *status)
4118 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
4120 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
4126 if (scalar_check (status, 1) == FAILURE)
4129 if (type_check (status, 1, BT_INTEGER) == FAILURE)
4137 gfc_check_signal (gfc_expr *number, gfc_expr *handler)
4139 if (scalar_check (number, 0) == FAILURE)
4142 if (type_check (number, 0, BT_INTEGER) == FAILURE)
4145 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
4147 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
4148 "or PROCEDURE", gfc_current_intrinsic_arg[1],
4149 gfc_current_intrinsic, &handler->where);
4153 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
4161 gfc_check_signal_sub (gfc_expr *number, gfc_expr *handler, gfc_expr *status)
4163 if (scalar_check (number, 0) == FAILURE)
4166 if (type_check (number, 0, BT_INTEGER) == FAILURE)
4169 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
4171 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
4172 "or PROCEDURE", gfc_current_intrinsic_arg[1],
4173 gfc_current_intrinsic, &handler->where);
4177 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
4183 if (type_check (status, 2, BT_INTEGER) == FAILURE)
4186 if (scalar_check (status, 2) == FAILURE)
4194 gfc_check_system_sub (gfc_expr *cmd, gfc_expr *status)
4196 if (type_check (cmd, 0, BT_CHARACTER) == FAILURE)
4198 if (kind_value_check (cmd, 0, gfc_default_character_kind) == FAILURE)
4201 if (scalar_check (status, 1) == FAILURE)
4204 if (type_check (status, 1, BT_INTEGER) == FAILURE)
4207 if (kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE)
4214 /* This is used for the GNU intrinsics AND, OR and XOR. */
4216 gfc_check_and (gfc_expr *i, gfc_expr *j)
4218 if (i->ts.type != BT_INTEGER && i->ts.type != BT_LOGICAL)
4220 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
4221 "or LOGICAL", gfc_current_intrinsic_arg[0],
4222 gfc_current_intrinsic, &i->where);
4226 if (j->ts.type != BT_INTEGER && j->ts.type != BT_LOGICAL)
4228 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
4229 "or LOGICAL", gfc_current_intrinsic_arg[1],
4230 gfc_current_intrinsic, &j->where);
4234 if (i->ts.type != j->ts.type)
4236 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
4237 "have the same type", gfc_current_intrinsic_arg[0],
4238 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
4243 if (scalar_check (i, 0) == FAILURE)
4246 if (scalar_check (j, 1) == FAILURE)