2 Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
3 Contributed by Andy Vaught & Katherine Holcomb
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
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 /* The fundamental complaint function of this source file. This
37 function can be called in all kinds of ways. */
40 must_be (gfc_expr
* e
, int n
, const char *thing
)
43 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
44 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &e
->where
,
49 /* Check the type of an expression. */
52 type_check (gfc_expr
* e
, int n
, bt type
)
55 if (e
->ts
.type
== type
)
58 must_be (e
, n
, gfc_basic_typename (type
));
64 /* Check that the expression is a numeric type. */
67 numeric_check (gfc_expr
* e
, int n
)
70 if (gfc_numeric_ts (&e
->ts
))
73 must_be (e
, n
, "a numeric type");
79 /* Check that an expression is integer or real. */
82 int_or_real_check (gfc_expr
* e
, int n
)
85 if (e
->ts
.type
!= BT_INTEGER
&& e
->ts
.type
!= BT_REAL
)
87 must_be (e
, n
, "INTEGER or REAL");
95 /* Check that the expression is an optional constant integer
96 and that it specifies a valid kind for that type. */
99 kind_check (gfc_expr
* k
, int n
, bt type
)
106 if (type_check (k
, n
, BT_INTEGER
) == FAILURE
)
109 if (k
->expr_type
!= EXPR_CONSTANT
)
111 must_be (k
, n
, "a constant");
115 if (gfc_extract_int (k
, &kind
) != NULL
116 || gfc_validate_kind (type
, kind
, true) < 0)
118 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type
),
127 /* Make sure the expression is a double precision real. */
130 double_check (gfc_expr
* d
, int n
)
132 if (type_check (d
, n
, BT_REAL
) == FAILURE
)
135 if (d
->ts
.kind
!= gfc_default_double_kind
)
137 must_be (d
, n
, "double precision");
145 /* Make sure the expression is a logical array. */
148 logical_array_check (gfc_expr
* array
, int n
)
151 if (array
->ts
.type
!= BT_LOGICAL
|| array
->rank
== 0)
153 must_be (array
, n
, "a logical array");
161 /* Make sure an expression is an array. */
164 array_check (gfc_expr
* e
, int n
)
170 must_be (e
, n
, "an array");
176 /* Make sure an expression is a scalar. */
179 scalar_check (gfc_expr
* e
, int n
)
185 must_be (e
, n
, "a scalar");
191 /* Make sure two expression have the same type. */
194 same_type_check (gfc_expr
* e
, int n
, gfc_expr
* f
, int m
)
198 if (gfc_compare_types (&e
->ts
, &f
->ts
))
201 sprintf (message
, "the same type and kind as '%s'",
202 gfc_current_intrinsic_arg
[n
]);
204 must_be (f
, m
, message
);
210 /* Make sure that an expression has a certain (nonzero) rank. */
213 rank_check (gfc_expr
* e
, int n
, int rank
)
220 sprintf (message
, "of rank %d", rank
);
222 must_be (e
, n
, message
);
228 /* Make sure a variable expression is not an optional dummy argument. */
231 nonoptional_check (gfc_expr
* e
, int n
)
234 if (e
->expr_type
== EXPR_VARIABLE
&& e
->symtree
->n
.sym
->attr
.optional
)
236 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
237 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
242 /* TODO: Recursive check on nonoptional variables? */
248 /* Check that an expression has a particular kind. */
251 kind_value_check (gfc_expr
* e
, int n
, int k
)
258 sprintf (message
, "of kind %d", k
);
260 must_be (e
, n
, message
);
265 /* Make sure an expression is a variable. */
268 variable_check (gfc_expr
* e
, int n
)
271 if ((e
->expr_type
== EXPR_VARIABLE
272 && e
->symtree
->n
.sym
->attr
.flavor
!= FL_PARAMETER
)
273 || (e
->expr_type
== EXPR_FUNCTION
274 && e
->symtree
->n
.sym
->result
== e
->symtree
->n
.sym
))
277 if (e
->expr_type
== EXPR_VARIABLE
278 && e
->symtree
->n
.sym
->attr
.intent
== INTENT_IN
)
280 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
281 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
286 must_be (e
, n
, "a variable");
292 /* Check the common DIM parameter for correctness. */
295 dim_check (gfc_expr
* dim
, int n
, int optional
)
303 if (nonoptional_check (dim
, n
) == FAILURE
)
311 gfc_error ("Missing DIM parameter in intrinsic '%s' at %L",
312 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
316 if (type_check (dim
, n
, BT_INTEGER
) == FAILURE
)
319 if (scalar_check (dim
, n
) == FAILURE
)
326 /* If a DIM parameter is a constant, make sure that it is greater than
327 zero and less than or equal to the rank of the given array. If
328 allow_assumed is zero then dim must be less than the rank of the array
329 for assumed size arrays. */
332 dim_rank_check (gfc_expr
* dim
, gfc_expr
* array
, int allow_assumed
)
337 if (dim
->expr_type
!= EXPR_CONSTANT
|| array
->expr_type
!= EXPR_VARIABLE
)
340 ar
= gfc_find_array_ref (array
);
342 if (ar
->as
->type
== AS_ASSUMED_SIZE
&& !allow_assumed
)
345 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
346 || mpz_cmp_ui (dim
->value
.integer
, rank
) > 0)
348 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
349 "dimension index", gfc_current_intrinsic
, &dim
->where
);
358 /***** Check functions *****/
360 /* Check subroutine suitable for intrinsics taking a real argument and
361 a kind argument for the result. */
364 check_a_kind (gfc_expr
* a
, gfc_expr
* kind
, bt type
)
367 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
369 if (kind_check (kind
, 1, type
) == FAILURE
)
375 /* Check subroutine suitable for ceiling, floor and nint. */
378 gfc_check_a_ikind (gfc_expr
* a
, gfc_expr
* kind
)
381 return check_a_kind (a
, kind
, BT_INTEGER
);
384 /* Check subroutine suitable for aint, anint. */
387 gfc_check_a_xkind (gfc_expr
* a
, gfc_expr
* kind
)
390 return check_a_kind (a
, kind
, BT_REAL
);
394 gfc_check_abs (gfc_expr
* a
)
397 if (numeric_check (a
, 0) == FAILURE
)
405 gfc_check_all_any (gfc_expr
* mask
, gfc_expr
* dim
)
408 if (logical_array_check (mask
, 0) == FAILURE
)
411 if (dim_check (dim
, 1, 1) == FAILURE
)
419 gfc_check_allocated (gfc_expr
* array
)
422 if (variable_check (array
, 0) == FAILURE
)
425 if (array_check (array
, 0) == FAILURE
)
428 if (!array
->symtree
->n
.sym
->attr
.allocatable
)
430 must_be (array
, 0, "ALLOCATABLE");
438 /* Common check function where the first argument must be real or
439 integer and the second argument must be the same as the first. */
442 gfc_check_a_p (gfc_expr
* a
, gfc_expr
* p
)
445 if (int_or_real_check (a
, 0) == FAILURE
)
448 if (same_type_check (a
, 0, p
, 1) == FAILURE
)
456 gfc_check_associated (gfc_expr
* pointer
, gfc_expr
* target
)
458 symbol_attribute attr
;
462 if (variable_check (pointer
, 0) == FAILURE
)
465 attr
= gfc_variable_attr (pointer
, NULL
);
468 must_be (pointer
, 0, "a POINTER");
475 /* Target argument is optional. */
476 if (target
->expr_type
== EXPR_NULL
)
478 gfc_error ("NULL pointer at %L is not permitted as actual argument "
479 "of '%s' intrinsic function",
480 &target
->where
, gfc_current_intrinsic
);
484 attr
= gfc_variable_attr (target
, NULL
);
485 if (!attr
.pointer
&& !attr
.target
)
487 must_be (target
, 1, "a POINTER or a TARGET");
492 if (same_type_check (pointer
, 0, target
, 1) == FAILURE
)
494 if (rank_check (target
, 0, pointer
->rank
) == FAILURE
)
496 if (target
->rank
> 0)
498 for (i
= 0; i
< target
->rank
; i
++)
499 if (target
->ref
->u
.ar
.dimen_type
[i
] == DIMEN_VECTOR
)
501 gfc_error ("Array section with a vector subscript at %L shall not "
502 "be the target of an pointer",
513 gfc_check_atan2 (gfc_expr
* y
, gfc_expr
* x
)
515 if (type_check (y
, 0, BT_REAL
) == FAILURE
)
517 if (same_type_check (y
, 0, x
, 1) == FAILURE
)
524 /* BESJN and BESYN functions. */
527 gfc_check_besn (gfc_expr
* n
, gfc_expr
* x
)
530 if (scalar_check (n
, 0) == FAILURE
)
533 if (type_check (n
, 0, BT_INTEGER
) == FAILURE
)
536 if (scalar_check (x
, 1) == FAILURE
)
539 if (type_check (x
, 1, BT_REAL
) == FAILURE
)
547 gfc_check_btest (gfc_expr
* i
, gfc_expr
* pos
)
550 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
552 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
560 gfc_check_char (gfc_expr
* i
, gfc_expr
* kind
)
563 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
565 if (kind_check (kind
, 1, BT_CHARACTER
) == FAILURE
)
573 gfc_check_cmplx (gfc_expr
* x
, gfc_expr
* y
, gfc_expr
* kind
)
576 if (numeric_check (x
, 0) == FAILURE
)
581 if (numeric_check (y
, 1) == FAILURE
)
584 if (x
->ts
.type
== BT_COMPLEX
)
586 must_be (y
, 1, "not be present if 'x' is COMPLEX");
591 if (kind_check (kind
, 2, BT_COMPLEX
) == FAILURE
)
599 gfc_check_count (gfc_expr
* mask
, gfc_expr
* dim
)
602 if (logical_array_check (mask
, 0) == FAILURE
)
604 if (dim_check (dim
, 1, 1) == FAILURE
)
612 gfc_check_cshift (gfc_expr
* array
, gfc_expr
* shift
, gfc_expr
* dim
)
615 if (array_check (array
, 0) == FAILURE
)
618 if (array
->rank
== 1)
620 if (scalar_check (shift
, 1) == FAILURE
)
625 /* TODO: more requirements on shift parameter. */
628 if (dim_check (dim
, 2, 1) == FAILURE
)
636 gfc_check_dcmplx (gfc_expr
* x
, gfc_expr
* y
)
639 if (numeric_check (x
, 0) == FAILURE
)
644 if (numeric_check (y
, 1) == FAILURE
)
647 if (x
->ts
.type
== BT_COMPLEX
)
649 must_be (y
, 1, "not be present if 'x' is COMPLEX");
659 gfc_check_dble (gfc_expr
* x
)
662 if (numeric_check (x
, 0) == FAILURE
)
670 gfc_check_digits (gfc_expr
* x
)
673 if (int_or_real_check (x
, 0) == FAILURE
)
681 gfc_check_dot_product (gfc_expr
* vector_a
, gfc_expr
* vector_b
)
684 switch (vector_a
->ts
.type
)
687 if (type_check (vector_b
, 1, BT_LOGICAL
) == FAILURE
)
694 if (numeric_check (vector_b
, 1) == FAILURE
)
699 must_be (vector_a
, 0, "numeric or LOGICAL");
703 if (rank_check (vector_a
, 0, 1) == FAILURE
)
706 if (rank_check (vector_b
, 1, 1) == FAILURE
)
714 gfc_check_eoshift (gfc_expr
* array
, gfc_expr
* shift
, gfc_expr
* boundary
,
718 if (array_check (array
, 0) == FAILURE
)
721 if (type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
724 if (array
->rank
== 1)
726 if (scalar_check (shift
, 2) == FAILURE
)
731 /* TODO: more weird restrictions on shift. */
734 if (boundary
!= NULL
)
736 if (same_type_check (array
, 0, boundary
, 2) == FAILURE
)
739 /* TODO: more restrictions on boundary. */
742 if (dim_check (dim
, 1, 1) == FAILURE
)
750 gfc_check_fnum (gfc_expr
* unit
)
753 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
756 if (scalar_check (unit
, 0) == FAILURE
)
763 /* This is used for the g77 one-argument Bessel functions, and the
767 gfc_check_g77_math1 (gfc_expr
* x
)
770 if (scalar_check (x
, 0) == FAILURE
)
773 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
781 gfc_check_huge (gfc_expr
* x
)
784 if (int_or_real_check (x
, 0) == FAILURE
)
791 /* Check that the single argument is an integer. */
794 gfc_check_i (gfc_expr
* i
)
797 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
805 gfc_check_iand (gfc_expr
* i
, gfc_expr
* j
)
808 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
811 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
814 if (i
->ts
.kind
!= j
->ts
.kind
)
816 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
817 &i
->where
) == FAILURE
)
826 gfc_check_ibclr (gfc_expr
* i
, gfc_expr
* pos
)
829 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
832 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
840 gfc_check_ibits (gfc_expr
* i
, gfc_expr
* pos
, gfc_expr
* len
)
843 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
846 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
849 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
857 gfc_check_ibset (gfc_expr
* i
, gfc_expr
* pos
)
860 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
863 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
871 gfc_check_idnint (gfc_expr
* a
)
874 if (double_check (a
, 0) == FAILURE
)
882 gfc_check_ieor (gfc_expr
* i
, gfc_expr
* j
)
885 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
888 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
891 if (i
->ts
.kind
!= j
->ts
.kind
)
893 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
894 &i
->where
) == FAILURE
)
903 gfc_check_index (gfc_expr
* string
, gfc_expr
* substring
, gfc_expr
* back
)
906 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
907 || type_check (substring
, 1, BT_CHARACTER
) == FAILURE
)
911 if (back
!= NULL
&& type_check (back
, 2, BT_LOGICAL
) == FAILURE
)
914 if (string
->ts
.kind
!= substring
->ts
.kind
)
916 must_be (substring
, 1, "the same kind as 'string'");
925 gfc_check_int (gfc_expr
* x
, gfc_expr
* kind
)
928 if (numeric_check (x
, 0) == FAILURE
929 || kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
937 gfc_check_ior (gfc_expr
* i
, gfc_expr
* j
)
940 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
943 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
946 if (i
->ts
.kind
!= j
->ts
.kind
)
948 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
949 &i
->where
) == FAILURE
)
958 gfc_check_ishft (gfc_expr
* i
, gfc_expr
* shift
)
961 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
962 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
970 gfc_check_ishftc (gfc_expr
* i
, gfc_expr
* shift
, gfc_expr
* size
)
973 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
974 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
977 if (size
!= NULL
&& type_check (size
, 2, BT_INTEGER
) == FAILURE
)
985 gfc_check_kind (gfc_expr
* x
)
988 if (x
->ts
.type
== BT_DERIVED
)
990 must_be (x
, 0, "a non-derived type");
999 gfc_check_lbound (gfc_expr
* array
, gfc_expr
* dim
)
1002 if (array_check (array
, 0) == FAILURE
)
1007 if (dim_check (dim
, 1, 1) == FAILURE
)
1010 if (dim_rank_check (dim
, array
, 1) == FAILURE
)
1018 gfc_check_logical (gfc_expr
* a
, gfc_expr
* kind
)
1021 if (type_check (a
, 0, BT_LOGICAL
) == FAILURE
)
1023 if (kind_check (kind
, 1, BT_LOGICAL
) == FAILURE
)
1030 /* Min/max family. */
1033 min_max_args (gfc_actual_arglist
* arg
)
1036 if (arg
== NULL
|| arg
->next
== NULL
)
1038 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1039 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
1048 check_rest (bt type
, int kind
, gfc_actual_arglist
* arg
)
1053 if (min_max_args (arg
) == FAILURE
)
1058 for (; arg
; arg
= arg
->next
, n
++)
1061 if (x
->ts
.type
!= type
|| x
->ts
.kind
!= kind
)
1063 if (x
->ts
.type
== type
)
1065 if (gfc_notify_std (GFC_STD_GNU
,
1066 "Extension: Different type kinds at %L", &x
->where
)
1072 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be %s(%d)",
1073 n
, gfc_current_intrinsic
, &x
->where
,
1074 gfc_basic_typename (type
), kind
);
1085 gfc_check_min_max (gfc_actual_arglist
* arg
)
1089 if (min_max_args (arg
) == FAILURE
)
1094 if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
1097 ("'a1' argument of '%s' intrinsic at %L must be INTEGER or REAL",
1098 gfc_current_intrinsic
, &x
->where
);
1102 return check_rest (x
->ts
.type
, x
->ts
.kind
, arg
);
1107 gfc_check_min_max_integer (gfc_actual_arglist
* arg
)
1110 return check_rest (BT_INTEGER
, gfc_default_integer_kind
, arg
);
1115 gfc_check_min_max_real (gfc_actual_arglist
* arg
)
1118 return check_rest (BT_REAL
, gfc_default_real_kind
, arg
);
1123 gfc_check_min_max_double (gfc_actual_arglist
* arg
)
1126 return check_rest (BT_REAL
, gfc_default_double_kind
, arg
);
1129 /* End of min/max family. */
1133 gfc_check_matmul (gfc_expr
* matrix_a
, gfc_expr
* matrix_b
)
1136 if ((matrix_a
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_b
->ts
))
1138 must_be (matrix_a
, 0, "numeric or LOGICAL");
1142 if ((matrix_b
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_a
->ts
))
1144 must_be (matrix_b
, 0, "numeric or LOGICAL");
1148 switch (matrix_a
->rank
)
1151 if (rank_check (matrix_b
, 1, 2) == FAILURE
)
1156 if (matrix_b
->rank
== 2)
1158 if (rank_check (matrix_b
, 1, 1) == FAILURE
)
1163 must_be (matrix_a
, 0, "of rank 1 or 2");
1171 /* Whoever came up with this interface was probably on something.
1172 The possibilities for the occupation of the second and third
1179 NULL MASK minloc(array, mask=m)
1182 I.e. in the case of minloc(array,mask), mask will be in the second
1183 position of the argument list and we'll have to fix that up. */
1186 gfc_check_minloc_maxloc (gfc_actual_arglist
* ap
)
1188 gfc_expr
*a
, *m
, *d
;
1191 if (int_or_real_check (a
, 0) == FAILURE
1192 || array_check (a
, 0) == FAILURE
)
1196 m
= ap
->next
->next
->expr
;
1198 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
1199 && ap
->next
->name
[0] == '\0')
1204 ap
->next
->expr
= NULL
;
1205 ap
->next
->next
->expr
= m
;
1209 && (scalar_check (d
, 1) == FAILURE
1210 || type_check (d
, 1, BT_INTEGER
) == FAILURE
))
1213 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
1220 /* Similar to minloc/maxloc, the argument list might need to be
1221 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1222 difference is that MINLOC/MAXLOC take an additional KIND argument.
1223 The possibilities are:
1229 NULL MASK minval(array, mask=m)
1232 I.e. in the case of minval(array,mask), mask will be in the second
1233 position of the argument list and we'll have to fix that up. */
1236 check_reduction (gfc_actual_arglist
* ap
)
1241 m
= ap
->next
->next
->expr
;
1243 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
1244 && ap
->next
->name
[0] == '\0')
1249 ap
->next
->expr
= NULL
;
1250 ap
->next
->next
->expr
= m
;
1254 && (scalar_check (d
, 1) == FAILURE
1255 || type_check (d
, 1, BT_INTEGER
) == FAILURE
))
1258 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
1266 gfc_check_minval_maxval (gfc_actual_arglist
* ap
)
1269 if (int_or_real_check (ap
->expr
, 0) == FAILURE
1270 || array_check (ap
->expr
, 0) == FAILURE
)
1273 return check_reduction (ap
);
1278 gfc_check_product_sum (gfc_actual_arglist
* ap
)
1281 if (numeric_check (ap
->expr
, 0) == FAILURE
1282 || array_check (ap
->expr
, 0) == FAILURE
)
1285 return check_reduction (ap
);
1290 gfc_check_merge (gfc_expr
* tsource
, gfc_expr
* fsource
, gfc_expr
* mask
)
1293 if (same_type_check (tsource
, 0, fsource
, 1) == FAILURE
)
1296 if (type_check (mask
, 2, BT_LOGICAL
) == FAILURE
)
1304 gfc_check_nearest (gfc_expr
* x
, gfc_expr
* s
)
1307 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1310 if (type_check (s
, 1, BT_REAL
) == FAILURE
)
1318 gfc_check_null (gfc_expr
* mold
)
1320 symbol_attribute attr
;
1325 if (variable_check (mold
, 0) == FAILURE
)
1328 attr
= gfc_variable_attr (mold
, NULL
);
1332 must_be (mold
, 0, "a POINTER");
1341 gfc_check_pack (gfc_expr
* array
, gfc_expr
* mask
, gfc_expr
* vector
)
1344 if (array_check (array
, 0) == FAILURE
)
1347 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
1350 if (mask
->rank
!= 0 && mask
->rank
!= array
->rank
)
1352 must_be (array
, 0, "conformable with 'mask' argument");
1358 if (same_type_check (array
, 0, vector
, 2) == FAILURE
)
1361 if (rank_check (vector
, 2, 1) == FAILURE
)
1364 /* TODO: More constraints here. */
1372 gfc_check_precision (gfc_expr
* x
)
1375 if (x
->ts
.type
!= BT_REAL
&& x
->ts
.type
!= BT_COMPLEX
)
1377 must_be (x
, 0, "of type REAL or COMPLEX");
1386 gfc_check_present (gfc_expr
* a
)
1390 if (variable_check (a
, 0) == FAILURE
)
1393 sym
= a
->symtree
->n
.sym
;
1394 if (!sym
->attr
.dummy
)
1396 must_be (a
, 0, "a dummy variable");
1400 if (!sym
->attr
.optional
)
1402 must_be (a
, 0, "an OPTIONAL dummy variable");
1411 gfc_check_radix (gfc_expr
* x
)
1414 if (int_or_real_check (x
, 0) == FAILURE
)
1422 gfc_check_range (gfc_expr
* x
)
1425 if (numeric_check (x
, 0) == FAILURE
)
1432 /* real, float, sngl. */
1434 gfc_check_real (gfc_expr
* a
, gfc_expr
* kind
)
1437 if (numeric_check (a
, 0) == FAILURE
)
1440 if (kind_check (kind
, 1, BT_REAL
) == FAILURE
)
1448 gfc_check_repeat (gfc_expr
* x
, gfc_expr
* y
)
1451 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
1454 if (scalar_check (x
, 0) == FAILURE
)
1457 if (type_check (y
, 0, BT_INTEGER
) == FAILURE
)
1460 if (scalar_check (y
, 1) == FAILURE
)
1468 gfc_check_reshape (gfc_expr
* source
, gfc_expr
* shape
,
1469 gfc_expr
* pad
, gfc_expr
* order
)
1474 if (array_check (source
, 0) == FAILURE
)
1477 if (rank_check (shape
, 1, 1) == FAILURE
)
1480 if (type_check (shape
, 1, BT_INTEGER
) == FAILURE
)
1483 if (gfc_array_size (shape
, &size
) != SUCCESS
)
1485 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
1486 "array of constant size", &shape
->where
);
1490 m
= mpz_cmp_ui (size
, GFC_MAX_DIMENSIONS
);
1496 ("'shape' argument of 'reshape' intrinsic at %L has more than "
1497 stringize (GFC_MAX_DIMENSIONS
) " elements", &shape
->where
);
1503 if (same_type_check (source
, 0, pad
, 2) == FAILURE
)
1505 if (array_check (pad
, 2) == FAILURE
)
1509 if (order
!= NULL
&& array_check (order
, 3) == FAILURE
)
1517 gfc_check_scale (gfc_expr
* x
, gfc_expr
* i
)
1520 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1523 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
1531 gfc_check_scan (gfc_expr
* x
, gfc_expr
* y
, gfc_expr
* z
)
1534 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
1537 if (type_check (y
, 1, BT_CHARACTER
) == FAILURE
)
1540 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
1543 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
1551 gfc_check_selected_real_kind (gfc_expr
* p
, gfc_expr
* r
)
1554 if (p
== NULL
&& r
== NULL
)
1556 gfc_error ("Missing arguments to %s intrinsic at %L",
1557 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
1562 if (p
!= NULL
&& type_check (p
, 0, BT_INTEGER
) == FAILURE
)
1565 if (r
!= NULL
&& type_check (r
, 1, BT_INTEGER
) == FAILURE
)
1573 gfc_check_set_exponent (gfc_expr
* x
, gfc_expr
* i
)
1576 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1579 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
1587 gfc_check_shape (gfc_expr
* source
)
1591 if (source
->rank
== 0 || source
->expr_type
!= EXPR_VARIABLE
)
1594 ar
= gfc_find_array_ref (source
);
1596 if (ar
->as
&& ar
->as
->type
== AS_ASSUMED_SIZE
)
1598 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
1599 "an assumed size array", &source
->where
);
1608 gfc_check_size (gfc_expr
* array
, gfc_expr
* dim
)
1611 if (array_check (array
, 0) == FAILURE
)
1616 if (type_check (dim
, 1, BT_INTEGER
) == FAILURE
)
1619 if (kind_value_check (dim
, 1, gfc_default_integer_kind
) == FAILURE
)
1622 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
1631 gfc_check_sign (gfc_expr
* a
, gfc_expr
* b
)
1634 if (int_or_real_check (a
, 0) == FAILURE
)
1637 if (same_type_check (a
, 0, b
, 1) == FAILURE
)
1645 gfc_check_spread (gfc_expr
* source
, gfc_expr
* dim
, gfc_expr
* ncopies
)
1648 if (source
->rank
>= GFC_MAX_DIMENSIONS
)
1650 must_be (source
, 0, "less than rank " stringize (GFC_MAX_DIMENSIONS
));
1654 if (dim_check (dim
, 1, 0) == FAILURE
)
1657 if (type_check (ncopies
, 2, BT_INTEGER
) == FAILURE
)
1660 if (scalar_check (ncopies
, 2) == FAILURE
)
1668 gfc_check_fstat (gfc_expr
* unit
, gfc_expr
* array
)
1671 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
1674 if (scalar_check (unit
, 0) == FAILURE
)
1677 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
1678 || kind_value_check (unit
, 0, gfc_default_integer_kind
) == FAILURE
)
1681 if (array_check (array
, 1) == FAILURE
)
1689 gfc_check_fstat_sub (gfc_expr
* unit
, gfc_expr
* array
, gfc_expr
* status
)
1692 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
1695 if (scalar_check (unit
, 0) == FAILURE
)
1698 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
1699 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
1702 if (array_check (array
, 1) == FAILURE
)
1708 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
1709 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
1712 if (scalar_check (status
, 2) == FAILURE
)
1720 gfc_check_stat (gfc_expr
* name
, gfc_expr
* array
)
1723 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
1726 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
1727 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
1730 if (array_check (array
, 1) == FAILURE
)
1738 gfc_check_stat_sub (gfc_expr
* name
, gfc_expr
* array
, gfc_expr
* status
)
1741 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
1744 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
1745 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
1748 if (array_check (array
, 1) == FAILURE
)
1754 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
1755 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
1758 if (scalar_check (status
, 2) == FAILURE
)
1766 gfc_check_transfer (gfc_expr
* source ATTRIBUTE_UNUSED
,
1767 gfc_expr
* mold ATTRIBUTE_UNUSED
,
1773 if (type_check (size
, 2, BT_INTEGER
) == FAILURE
)
1776 if (scalar_check (size
, 2) == FAILURE
)
1779 if (nonoptional_check (size
, 2) == FAILURE
)
1788 gfc_check_transpose (gfc_expr
* matrix
)
1791 if (rank_check (matrix
, 0, 2) == FAILURE
)
1799 gfc_check_ubound (gfc_expr
* array
, gfc_expr
* dim
)
1802 if (array_check (array
, 0) == FAILURE
)
1807 if (dim_check (dim
, 1, 1) == FAILURE
)
1810 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
1818 gfc_check_unpack (gfc_expr
* vector
, gfc_expr
* mask
, gfc_expr
* field
)
1821 if (rank_check (vector
, 0, 1) == FAILURE
)
1824 if (array_check (mask
, 1) == FAILURE
)
1827 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
1830 if (same_type_check (vector
, 0, field
, 2) == FAILURE
)
1838 gfc_check_verify (gfc_expr
* x
, gfc_expr
* y
, gfc_expr
* z
)
1841 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
1844 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
1847 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
1855 gfc_check_trim (gfc_expr
* x
)
1857 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
1860 if (scalar_check (x
, 0) == FAILURE
)
1867 /* Common check function for the half a dozen intrinsics that have a
1868 single real argument. */
1871 gfc_check_x (gfc_expr
* x
)
1874 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1881 /************* Check functions for intrinsic subroutines *************/
1884 gfc_check_cpu_time (gfc_expr
* time
)
1887 if (scalar_check (time
, 0) == FAILURE
)
1890 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
1893 if (variable_check (time
, 0) == FAILURE
)
1901 gfc_check_date_and_time (gfc_expr
* date
, gfc_expr
* time
,
1902 gfc_expr
* zone
, gfc_expr
* values
)
1907 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
1909 if (scalar_check (date
, 0) == FAILURE
)
1911 if (variable_check (date
, 0) == FAILURE
)
1917 if (type_check (time
, 1, BT_CHARACTER
) == FAILURE
)
1919 if (scalar_check (time
, 1) == FAILURE
)
1921 if (variable_check (time
, 1) == FAILURE
)
1927 if (type_check (zone
, 2, BT_CHARACTER
) == FAILURE
)
1929 if (scalar_check (zone
, 2) == FAILURE
)
1931 if (variable_check (zone
, 2) == FAILURE
)
1937 if (type_check (values
, 3, BT_INTEGER
) == FAILURE
)
1939 if (array_check (values
, 3) == FAILURE
)
1941 if (rank_check (values
, 3, 1) == FAILURE
)
1943 if (variable_check (values
, 3) == FAILURE
)
1952 gfc_check_mvbits (gfc_expr
* from
, gfc_expr
* frompos
, gfc_expr
* len
,
1953 gfc_expr
* to
, gfc_expr
* topos
)
1956 if (type_check (from
, 0, BT_INTEGER
) == FAILURE
)
1959 if (type_check (frompos
, 1, BT_INTEGER
) == FAILURE
)
1962 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
1965 if (same_type_check (from
, 0, to
, 3) == FAILURE
)
1968 if (variable_check (to
, 3) == FAILURE
)
1971 if (type_check (topos
, 4, BT_INTEGER
) == FAILURE
)
1979 gfc_check_random_number (gfc_expr
* harvest
)
1982 if (type_check (harvest
, 0, BT_REAL
) == FAILURE
)
1985 if (variable_check (harvest
, 0) == FAILURE
)
1993 gfc_check_random_seed (gfc_expr
* size
, gfc_expr
* put
, gfc_expr
* get
)
1998 if (scalar_check (size
, 0) == FAILURE
)
2001 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
2004 if (variable_check (size
, 0) == FAILURE
)
2007 if (kind_value_check (size
, 0, gfc_default_integer_kind
) == FAILURE
)
2015 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
,
2018 if (array_check (put
, 1) == FAILURE
)
2021 if (rank_check (put
, 1, 1) == FAILURE
)
2024 if (type_check (put
, 1, BT_INTEGER
) == FAILURE
)
2027 if (kind_value_check (put
, 1, gfc_default_integer_kind
) == FAILURE
)
2034 if (size
!= NULL
|| put
!= NULL
)
2035 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
,
2038 if (array_check (get
, 2) == FAILURE
)
2041 if (rank_check (get
, 2, 1) == FAILURE
)
2044 if (type_check (get
, 2, BT_INTEGER
) == FAILURE
)
2047 if (variable_check (get
, 2) == FAILURE
)
2050 if (kind_value_check (get
, 2, gfc_default_integer_kind
) == FAILURE
)
2058 gfc_check_second_sub (gfc_expr
* time
)
2061 if (scalar_check (time
, 0) == FAILURE
)
2064 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
2067 if (kind_value_check(time
, 0, 4) == FAILURE
)
2074 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
2075 count, count_rate, and count_max are all optional arguments */
2078 gfc_check_system_clock (gfc_expr
* count
, gfc_expr
* count_rate
,
2079 gfc_expr
* count_max
)
2084 if (scalar_check (count
, 0) == FAILURE
)
2087 if (type_check (count
, 0, BT_INTEGER
) == FAILURE
)
2090 if (variable_check (count
, 0) == FAILURE
)
2094 if (count_rate
!= NULL
)
2096 if (scalar_check (count_rate
, 1) == FAILURE
)
2099 if (type_check (count_rate
, 1, BT_INTEGER
) == FAILURE
)
2102 if (variable_check (count_rate
, 1) == FAILURE
)
2105 if (count
!= NULL
&& same_type_check(count
, 0, count_rate
, 1) == FAILURE
)
2110 if (count_max
!= NULL
)
2112 if (scalar_check (count_max
, 2) == FAILURE
)
2115 if (type_check (count_max
, 2, BT_INTEGER
) == FAILURE
)
2118 if (variable_check (count_max
, 2) == FAILURE
)
2121 if (count
!= NULL
&& same_type_check(count
, 0, count_max
, 2) == FAILURE
)
2124 if (count_rate
!= NULL
2125 && same_type_check(count_rate
, 1, count_max
, 2) == FAILURE
)
2134 gfc_check_irand (gfc_expr
* x
)
2139 if (scalar_check (x
, 0) == FAILURE
)
2142 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
2145 if (kind_value_check(x
, 0, 4) == FAILURE
)
2152 gfc_check_rand (gfc_expr
* x
)
2157 if (scalar_check (x
, 0) == FAILURE
)
2160 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
2163 if (kind_value_check(x
, 0, 4) == FAILURE
)
2170 gfc_check_srand (gfc_expr
* x
)
2172 if (scalar_check (x
, 0) == FAILURE
)
2175 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
2178 if (kind_value_check(x
, 0, 4) == FAILURE
)
2185 gfc_check_etime (gfc_expr
* x
)
2187 if (array_check (x
, 0) == FAILURE
)
2190 if (rank_check (x
, 0, 1) == FAILURE
)
2193 if (variable_check (x
, 0) == FAILURE
)
2196 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2199 if (kind_value_check(x
, 0, 4) == FAILURE
)
2206 gfc_check_etime_sub (gfc_expr
* values
, gfc_expr
* time
)
2208 if (array_check (values
, 0) == FAILURE
)
2211 if (rank_check (values
, 0, 1) == FAILURE
)
2214 if (variable_check (values
, 0) == FAILURE
)
2217 if (type_check (values
, 0, BT_REAL
) == FAILURE
)
2220 if (kind_value_check(values
, 0, 4) == FAILURE
)
2223 if (scalar_check (time
, 1) == FAILURE
)
2226 if (type_check (time
, 1, BT_REAL
) == FAILURE
)
2229 if (kind_value_check(time
, 1, 4) == FAILURE
)
2237 gfc_check_getcwd_sub (gfc_expr
* cwd
, gfc_expr
* status
)
2240 if (type_check (cwd
, 0, BT_CHARACTER
) == FAILURE
)
2246 if (scalar_check (status
, 1) == FAILURE
)
2249 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
2257 gfc_check_exit (gfc_expr
* status
)
2263 if (type_check (status
, 0, BT_INTEGER
) == FAILURE
)
2266 if (scalar_check (status
, 0) == FAILURE
)
2274 gfc_check_flush (gfc_expr
* unit
)
2280 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2283 if (scalar_check (unit
, 0) == FAILURE
)
2291 gfc_check_umask (gfc_expr
* mask
)
2294 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
2297 if (scalar_check (mask
, 0) == FAILURE
)
2305 gfc_check_umask_sub (gfc_expr
* mask
, gfc_expr
* old
)
2308 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
2311 if (scalar_check (mask
, 0) == FAILURE
)
2317 if (scalar_check (old
, 1) == FAILURE
)
2320 if (type_check (old
, 1, BT_INTEGER
) == FAILURE
)
2328 gfc_check_unlink (gfc_expr
* name
)
2331 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2339 gfc_check_unlink_sub (gfc_expr
* name
, gfc_expr
* status
)
2342 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2348 if (scalar_check (status
, 1) == FAILURE
)
2351 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
2359 gfc_check_system_sub (gfc_expr
* cmd
, gfc_expr
* status
)
2361 if (type_check (cmd
, 0, BT_CHARACTER
) == FAILURE
)
2364 if (scalar_check (status
, 1) == FAILURE
)
2367 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
2370 if (kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
)