2 Copyright (C) 2002, 2003, 2004, 2005 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
)
42 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
43 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &e
->where
,
48 /* Check the type of an expression. */
51 type_check (gfc_expr
* e
, int n
, bt type
)
53 if (e
->ts
.type
== type
)
56 must_be (e
, n
, gfc_basic_typename (type
));
62 /* Check that the expression is a numeric type. */
65 numeric_check (gfc_expr
* e
, int n
)
67 if (gfc_numeric_ts (&e
->ts
))
70 must_be (e
, n
, "a numeric type");
76 /* Check that an expression is integer or real. */
79 int_or_real_check (gfc_expr
* e
, int n
)
81 if (e
->ts
.type
!= BT_INTEGER
&& e
->ts
.type
!= BT_REAL
)
83 must_be (e
, n
, "INTEGER or REAL");
91 /* Check that an expression is real or complex. */
94 real_or_complex_check (gfc_expr
* e
, int n
)
96 if (e
->ts
.type
!= BT_REAL
&& e
->ts
.type
!= BT_COMPLEX
)
98 must_be (e
, n
, "REAL or COMPLEX");
106 /* Check that the expression is an optional constant integer
107 and that it specifies a valid kind for that type. */
110 kind_check (gfc_expr
* k
, int n
, bt type
)
117 if (type_check (k
, n
, BT_INTEGER
) == FAILURE
)
120 if (k
->expr_type
!= EXPR_CONSTANT
)
122 must_be (k
, n
, "a constant");
126 if (gfc_extract_int (k
, &kind
) != NULL
127 || gfc_validate_kind (type
, kind
, true) < 0)
129 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type
),
138 /* Make sure the expression is a double precision real. */
141 double_check (gfc_expr
* d
, int n
)
143 if (type_check (d
, n
, BT_REAL
) == FAILURE
)
146 if (d
->ts
.kind
!= gfc_default_double_kind
)
148 must_be (d
, n
, "double precision");
156 /* Make sure the expression is a logical array. */
159 logical_array_check (gfc_expr
* array
, int n
)
161 if (array
->ts
.type
!= BT_LOGICAL
|| array
->rank
== 0)
163 must_be (array
, n
, "a logical array");
171 /* Make sure an expression is an array. */
174 array_check (gfc_expr
* e
, int n
)
179 must_be (e
, n
, "an array");
185 /* Make sure an expression is a scalar. */
188 scalar_check (gfc_expr
* e
, int n
)
193 must_be (e
, n
, "a scalar");
199 /* Make sure two expression have the same type. */
202 same_type_check (gfc_expr
* e
, int n
, gfc_expr
* f
, int m
)
206 if (gfc_compare_types (&e
->ts
, &f
->ts
))
209 sprintf (message
, "the same type and kind as '%s'",
210 gfc_current_intrinsic_arg
[n
]);
212 must_be (f
, m
, message
);
218 /* Make sure that an expression has a certain (nonzero) rank. */
221 rank_check (gfc_expr
* e
, int n
, int rank
)
228 sprintf (message
, "of rank %d", rank
);
230 must_be (e
, n
, message
);
236 /* Make sure a variable expression is not an optional dummy argument. */
239 nonoptional_check (gfc_expr
* e
, int n
)
241 if (e
->expr_type
== EXPR_VARIABLE
&& e
->symtree
->n
.sym
->attr
.optional
)
243 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
244 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
249 /* TODO: Recursive check on nonoptional variables? */
255 /* Check that an expression has a particular kind. */
258 kind_value_check (gfc_expr
* e
, int n
, int k
)
265 sprintf (message
, "of kind %d", k
);
267 must_be (e
, n
, message
);
272 /* Make sure an expression is a variable. */
275 variable_check (gfc_expr
* e
, int n
)
277 if ((e
->expr_type
== EXPR_VARIABLE
278 && e
->symtree
->n
.sym
->attr
.flavor
!= FL_PARAMETER
)
279 || (e
->expr_type
== EXPR_FUNCTION
280 && e
->symtree
->n
.sym
->result
== e
->symtree
->n
.sym
))
283 if (e
->expr_type
== EXPR_VARIABLE
284 && e
->symtree
->n
.sym
->attr
.intent
== INTENT_IN
)
286 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
287 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
292 must_be (e
, n
, "a variable");
298 /* Check the common DIM parameter for correctness. */
301 dim_check (gfc_expr
* dim
, int n
, int optional
)
308 if (nonoptional_check (dim
, n
) == FAILURE
)
316 gfc_error ("Missing DIM parameter in intrinsic '%s' at %L",
317 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
321 if (type_check (dim
, n
, BT_INTEGER
) == FAILURE
)
324 if (scalar_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
)
342 if (dim
->expr_type
!= EXPR_CONSTANT
|| array
->expr_type
!= EXPR_VARIABLE
)
345 ar
= gfc_find_array_ref (array
);
347 if (ar
->as
->type
== AS_ASSUMED_SIZE
&& !allow_assumed
)
350 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
351 || mpz_cmp_ui (dim
->value
.integer
, rank
) > 0)
353 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
354 "dimension index", gfc_current_intrinsic
, &dim
->where
);
363 /***** Check functions *****/
365 /* Check subroutine suitable for intrinsics taking a real argument and
366 a kind argument for the result. */
369 check_a_kind (gfc_expr
* a
, gfc_expr
* kind
, bt type
)
371 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
373 if (kind_check (kind
, 1, type
) == FAILURE
)
379 /* Check subroutine suitable for ceiling, floor and nint. */
382 gfc_check_a_ikind (gfc_expr
* a
, gfc_expr
* kind
)
384 return check_a_kind (a
, kind
, BT_INTEGER
);
387 /* Check subroutine suitable for aint, anint. */
390 gfc_check_a_xkind (gfc_expr
* a
, gfc_expr
* kind
)
392 return check_a_kind (a
, kind
, BT_REAL
);
396 gfc_check_abs (gfc_expr
* a
)
398 if (numeric_check (a
, 0) == FAILURE
)
405 gfc_check_achar (gfc_expr
* a
)
408 if (type_check (a
, 0, BT_INTEGER
) == FAILURE
)
416 gfc_check_all_any (gfc_expr
* mask
, gfc_expr
* dim
)
418 if (logical_array_check (mask
, 0) == FAILURE
)
421 if (dim_check (dim
, 1, 1) == FAILURE
)
429 gfc_check_allocated (gfc_expr
* array
)
431 if (variable_check (array
, 0) == FAILURE
)
434 if (array_check (array
, 0) == FAILURE
)
437 if (!array
->symtree
->n
.sym
->attr
.allocatable
)
439 must_be (array
, 0, "ALLOCATABLE");
447 /* Common check function where the first argument must be real or
448 integer and the second argument must be the same as the first. */
451 gfc_check_a_p (gfc_expr
* a
, gfc_expr
* p
)
453 if (int_or_real_check (a
, 0) == FAILURE
)
456 if (same_type_check (a
, 0, p
, 1) == FAILURE
)
464 gfc_check_associated (gfc_expr
* pointer
, gfc_expr
* target
)
466 symbol_attribute attr
;
470 if (variable_check (pointer
, 0) == FAILURE
)
473 attr
= gfc_variable_attr (pointer
, NULL
);
476 must_be (pointer
, 0, "a POINTER");
483 /* Target argument is optional. */
484 if (target
->expr_type
== EXPR_NULL
)
486 gfc_error ("NULL pointer at %L is not permitted as actual argument "
487 "of '%s' intrinsic function",
488 &target
->where
, gfc_current_intrinsic
);
492 attr
= gfc_variable_attr (target
, NULL
);
493 if (!attr
.pointer
&& !attr
.target
)
495 must_be (target
, 1, "a POINTER or a TARGET");
500 if (same_type_check (pointer
, 0, target
, 1) == FAILURE
)
502 if (rank_check (target
, 0, pointer
->rank
) == FAILURE
)
504 if (target
->rank
> 0)
506 for (i
= 0; i
< target
->rank
; i
++)
507 if (target
->ref
->u
.ar
.dimen_type
[i
] == DIMEN_VECTOR
)
509 gfc_error ("Array section with a vector subscript at %L shall not "
510 "be the target of an pointer",
521 gfc_check_atan2 (gfc_expr
* y
, gfc_expr
* x
)
523 if (type_check (y
, 0, BT_REAL
) == FAILURE
)
525 if (same_type_check (y
, 0, x
, 1) == FAILURE
)
532 /* BESJN and BESYN functions. */
535 gfc_check_besn (gfc_expr
* n
, gfc_expr
* x
)
537 if (scalar_check (n
, 0) == FAILURE
)
540 if (type_check (n
, 0, BT_INTEGER
) == FAILURE
)
543 if (scalar_check (x
, 1) == FAILURE
)
546 if (type_check (x
, 1, BT_REAL
) == FAILURE
)
554 gfc_check_btest (gfc_expr
* i
, gfc_expr
* pos
)
556 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
558 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
566 gfc_check_char (gfc_expr
* i
, gfc_expr
* kind
)
568 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
570 if (kind_check (kind
, 1, BT_CHARACTER
) == FAILURE
)
578 gfc_check_chdir (gfc_expr
* dir
)
580 if (type_check (dir
, 0, BT_CHARACTER
) == FAILURE
)
588 gfc_check_chdir_sub (gfc_expr
* dir
, gfc_expr
* status
)
590 if (type_check (dir
, 0, BT_CHARACTER
) == FAILURE
)
596 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
599 if (scalar_check (status
, 1) == FAILURE
)
607 gfc_check_cmplx (gfc_expr
* x
, gfc_expr
* y
, gfc_expr
* kind
)
609 if (numeric_check (x
, 0) == FAILURE
)
614 if (numeric_check (y
, 1) == FAILURE
)
617 if (x
->ts
.type
== BT_COMPLEX
)
619 must_be (y
, 1, "not be present if 'x' is COMPLEX");
624 if (kind_check (kind
, 2, BT_COMPLEX
) == FAILURE
)
632 gfc_check_count (gfc_expr
* mask
, gfc_expr
* dim
)
634 if (logical_array_check (mask
, 0) == FAILURE
)
636 if (dim_check (dim
, 1, 1) == FAILURE
)
644 gfc_check_cshift (gfc_expr
* array
, gfc_expr
* shift
, gfc_expr
* dim
)
646 if (array_check (array
, 0) == FAILURE
)
649 if (array
->rank
== 1)
651 if (scalar_check (shift
, 1) == FAILURE
)
656 /* TODO: more requirements on shift parameter. */
659 if (dim_check (dim
, 2, 1) == FAILURE
)
667 gfc_check_dcmplx (gfc_expr
* x
, gfc_expr
* y
)
669 if (numeric_check (x
, 0) == FAILURE
)
674 if (numeric_check (y
, 1) == FAILURE
)
677 if (x
->ts
.type
== BT_COMPLEX
)
679 must_be (y
, 1, "not be present if 'x' is COMPLEX");
689 gfc_check_dble (gfc_expr
* x
)
691 if (numeric_check (x
, 0) == FAILURE
)
699 gfc_check_digits (gfc_expr
* x
)
701 if (int_or_real_check (x
, 0) == FAILURE
)
709 gfc_check_dot_product (gfc_expr
* vector_a
, gfc_expr
* vector_b
)
711 switch (vector_a
->ts
.type
)
714 if (type_check (vector_b
, 1, BT_LOGICAL
) == FAILURE
)
721 if (numeric_check (vector_b
, 1) == FAILURE
)
726 must_be (vector_a
, 0, "numeric or LOGICAL");
730 if (rank_check (vector_a
, 0, 1) == FAILURE
)
733 if (rank_check (vector_b
, 1, 1) == FAILURE
)
741 gfc_check_eoshift (gfc_expr
* array
, gfc_expr
* shift
, gfc_expr
* boundary
,
744 if (array_check (array
, 0) == FAILURE
)
747 if (type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
750 if (array
->rank
== 1)
752 if (scalar_check (shift
, 2) == FAILURE
)
757 /* TODO: more weird restrictions on shift. */
760 if (boundary
!= NULL
)
762 if (same_type_check (array
, 0, boundary
, 2) == FAILURE
)
765 /* TODO: more restrictions on boundary. */
768 if (dim_check (dim
, 1, 1) == FAILURE
)
775 /* A single complex argument. */
778 gfc_check_fn_c (gfc_expr
* a
)
780 if (type_check (a
, 0, BT_COMPLEX
) == FAILURE
)
787 /* A single real argument. */
790 gfc_check_fn_r (gfc_expr
* a
)
792 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
799 /* A single real or complex argument. */
802 gfc_check_fn_rc (gfc_expr
* a
)
804 if (real_or_complex_check (a
, 0) == FAILURE
)
812 gfc_check_fnum (gfc_expr
* unit
)
814 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
817 if (scalar_check (unit
, 0) == FAILURE
)
824 /* This is used for the g77 one-argument Bessel functions, and the
828 gfc_check_g77_math1 (gfc_expr
* x
)
830 if (scalar_check (x
, 0) == FAILURE
)
833 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
841 gfc_check_huge (gfc_expr
* x
)
843 if (int_or_real_check (x
, 0) == FAILURE
)
850 /* Check that the single argument is an integer. */
853 gfc_check_i (gfc_expr
* i
)
855 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
863 gfc_check_iand (gfc_expr
* i
, gfc_expr
* j
)
865 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
868 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
871 if (i
->ts
.kind
!= j
->ts
.kind
)
873 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
874 &i
->where
) == FAILURE
)
883 gfc_check_ibclr (gfc_expr
* i
, gfc_expr
* pos
)
885 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
888 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
896 gfc_check_ibits (gfc_expr
* i
, gfc_expr
* pos
, gfc_expr
* len
)
898 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
901 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
904 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
912 gfc_check_ibset (gfc_expr
* i
, gfc_expr
* pos
)
914 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
917 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
925 gfc_check_idnint (gfc_expr
* a
)
927 if (double_check (a
, 0) == FAILURE
)
935 gfc_check_ieor (gfc_expr
* i
, gfc_expr
* j
)
937 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
940 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
943 if (i
->ts
.kind
!= j
->ts
.kind
)
945 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
946 &i
->where
) == FAILURE
)
955 gfc_check_index (gfc_expr
* string
, gfc_expr
* substring
, gfc_expr
* back
)
957 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
958 || type_check (substring
, 1, BT_CHARACTER
) == FAILURE
)
962 if (back
!= NULL
&& type_check (back
, 2, BT_LOGICAL
) == FAILURE
)
965 if (string
->ts
.kind
!= substring
->ts
.kind
)
967 must_be (substring
, 1, "the same kind as 'string'");
976 gfc_check_int (gfc_expr
* x
, gfc_expr
* kind
)
978 if (numeric_check (x
, 0) == FAILURE
)
983 if (type_check (kind
, 1, BT_INTEGER
) == FAILURE
)
986 if (scalar_check (kind
, 1) == FAILURE
)
995 gfc_check_ior (gfc_expr
* i
, gfc_expr
* j
)
997 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1000 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1003 if (i
->ts
.kind
!= j
->ts
.kind
)
1005 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1006 &i
->where
) == FAILURE
)
1015 gfc_check_ishft (gfc_expr
* i
, gfc_expr
* shift
)
1017 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
1018 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1026 gfc_check_ishftc (gfc_expr
* i
, gfc_expr
* shift
, gfc_expr
* size
)
1028 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
1029 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1032 if (size
!= NULL
&& type_check (size
, 2, BT_INTEGER
) == FAILURE
)
1040 gfc_check_kill (gfc_expr
* pid
, gfc_expr
* sig
)
1042 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
1045 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
1053 gfc_check_kill_sub (gfc_expr
* pid
, gfc_expr
* sig
, gfc_expr
* status
)
1055 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
1058 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
1064 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1067 if (scalar_check (status
, 2) == FAILURE
)
1075 gfc_check_kind (gfc_expr
* x
)
1077 if (x
->ts
.type
== BT_DERIVED
)
1079 must_be (x
, 0, "a non-derived type");
1088 gfc_check_lbound (gfc_expr
* array
, gfc_expr
* dim
)
1090 if (array_check (array
, 0) == FAILURE
)
1095 if (dim_check (dim
, 1, 1) == FAILURE
)
1098 if (dim_rank_check (dim
, array
, 1) == FAILURE
)
1106 gfc_check_link (gfc_expr
* path1
, gfc_expr
* path2
)
1108 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1111 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1119 gfc_check_link_sub (gfc_expr
* path1
, gfc_expr
* path2
, gfc_expr
* status
)
1121 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1124 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1130 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1133 if (scalar_check (status
, 2) == FAILURE
)
1141 gfc_check_symlnk (gfc_expr
* path1
, gfc_expr
* path2
)
1143 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1146 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1154 gfc_check_symlnk_sub (gfc_expr
* path1
, gfc_expr
* path2
, gfc_expr
* status
)
1156 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1159 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1165 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1168 if (scalar_check (status
, 2) == FAILURE
)
1176 gfc_check_logical (gfc_expr
* a
, gfc_expr
* kind
)
1178 if (type_check (a
, 0, BT_LOGICAL
) == FAILURE
)
1180 if (kind_check (kind
, 1, BT_LOGICAL
) == FAILURE
)
1187 /* Min/max family. */
1190 min_max_args (gfc_actual_arglist
* arg
)
1192 if (arg
== NULL
|| arg
->next
== NULL
)
1194 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1195 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
1204 check_rest (bt type
, int kind
, gfc_actual_arglist
* arg
)
1209 if (min_max_args (arg
) == FAILURE
)
1214 for (; arg
; arg
= arg
->next
, n
++)
1217 if (x
->ts
.type
!= type
|| x
->ts
.kind
!= kind
)
1219 if (x
->ts
.type
== type
)
1221 if (gfc_notify_std (GFC_STD_GNU
,
1222 "Extension: Different type kinds at %L", &x
->where
)
1228 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be %s(%d)",
1229 n
, gfc_current_intrinsic
, &x
->where
,
1230 gfc_basic_typename (type
), kind
);
1241 gfc_check_min_max (gfc_actual_arglist
* arg
)
1245 if (min_max_args (arg
) == FAILURE
)
1250 if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
1253 ("'a1' argument of '%s' intrinsic at %L must be INTEGER or REAL",
1254 gfc_current_intrinsic
, &x
->where
);
1258 return check_rest (x
->ts
.type
, x
->ts
.kind
, arg
);
1263 gfc_check_min_max_integer (gfc_actual_arglist
* arg
)
1265 return check_rest (BT_INTEGER
, gfc_default_integer_kind
, arg
);
1270 gfc_check_min_max_real (gfc_actual_arglist
* arg
)
1272 return check_rest (BT_REAL
, gfc_default_real_kind
, arg
);
1277 gfc_check_min_max_double (gfc_actual_arglist
* arg
)
1279 return check_rest (BT_REAL
, gfc_default_double_kind
, arg
);
1282 /* End of min/max family. */
1286 gfc_check_matmul (gfc_expr
* matrix_a
, gfc_expr
* matrix_b
)
1288 if ((matrix_a
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_b
->ts
))
1290 must_be (matrix_a
, 0, "numeric or LOGICAL");
1294 if ((matrix_b
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_a
->ts
))
1296 must_be (matrix_b
, 0, "numeric or LOGICAL");
1300 switch (matrix_a
->rank
)
1303 if (rank_check (matrix_b
, 1, 2) == FAILURE
)
1308 if (matrix_b
->rank
== 2)
1310 if (rank_check (matrix_b
, 1, 1) == FAILURE
)
1315 must_be (matrix_a
, 0, "of rank 1 or 2");
1323 /* Whoever came up with this interface was probably on something.
1324 The possibilities for the occupation of the second and third
1331 NULL MASK minloc(array, mask=m)
1334 I.e. in the case of minloc(array,mask), mask will be in the second
1335 position of the argument list and we'll have to fix that up. */
1338 gfc_check_minloc_maxloc (gfc_actual_arglist
* ap
)
1340 gfc_expr
*a
, *m
, *d
;
1343 if (int_or_real_check (a
, 0) == FAILURE
1344 || array_check (a
, 0) == FAILURE
)
1348 m
= ap
->next
->next
->expr
;
1350 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
1351 && ap
->next
->name
== NULL
)
1356 ap
->next
->expr
= NULL
;
1357 ap
->next
->next
->expr
= m
;
1361 && (scalar_check (d
, 1) == FAILURE
1362 || type_check (d
, 1, BT_INTEGER
) == FAILURE
))
1365 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
1372 /* Similar to minloc/maxloc, the argument list might need to be
1373 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1374 difference is that MINLOC/MAXLOC take an additional KIND argument.
1375 The possibilities are:
1381 NULL MASK minval(array, mask=m)
1384 I.e. in the case of minval(array,mask), mask will be in the second
1385 position of the argument list and we'll have to fix that up. */
1388 check_reduction (gfc_actual_arglist
* ap
)
1393 m
= ap
->next
->next
->expr
;
1395 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
1396 && ap
->next
->name
== NULL
)
1401 ap
->next
->expr
= NULL
;
1402 ap
->next
->next
->expr
= m
;
1406 && (scalar_check (d
, 1) == FAILURE
1407 || type_check (d
, 1, BT_INTEGER
) == FAILURE
))
1410 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
1418 gfc_check_minval_maxval (gfc_actual_arglist
* ap
)
1420 if (int_or_real_check (ap
->expr
, 0) == FAILURE
1421 || array_check (ap
->expr
, 0) == FAILURE
)
1424 return check_reduction (ap
);
1429 gfc_check_product_sum (gfc_actual_arglist
* ap
)
1431 if (numeric_check (ap
->expr
, 0) == FAILURE
1432 || array_check (ap
->expr
, 0) == FAILURE
)
1435 return check_reduction (ap
);
1440 gfc_check_merge (gfc_expr
* tsource
, gfc_expr
* fsource
, gfc_expr
* mask
)
1442 if (same_type_check (tsource
, 0, fsource
, 1) == FAILURE
)
1445 if (type_check (mask
, 2, BT_LOGICAL
) == FAILURE
)
1453 gfc_check_nearest (gfc_expr
* x
, gfc_expr
* s
)
1455 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1458 if (type_check (s
, 1, BT_REAL
) == FAILURE
)
1466 gfc_check_null (gfc_expr
* mold
)
1468 symbol_attribute attr
;
1473 if (variable_check (mold
, 0) == FAILURE
)
1476 attr
= gfc_variable_attr (mold
, NULL
);
1480 must_be (mold
, 0, "a POINTER");
1489 gfc_check_pack (gfc_expr
* array
, gfc_expr
* mask
, gfc_expr
* vector
)
1491 if (array_check (array
, 0) == FAILURE
)
1494 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
1497 if (mask
->rank
!= 0 && mask
->rank
!= array
->rank
)
1499 must_be (array
, 0, "conformable with 'mask' argument");
1505 if (same_type_check (array
, 0, vector
, 2) == FAILURE
)
1508 if (rank_check (vector
, 2, 1) == FAILURE
)
1511 /* TODO: More constraints here. */
1519 gfc_check_precision (gfc_expr
* x
)
1521 if (x
->ts
.type
!= BT_REAL
&& x
->ts
.type
!= BT_COMPLEX
)
1523 must_be (x
, 0, "of type REAL or COMPLEX");
1532 gfc_check_present (gfc_expr
* a
)
1536 if (variable_check (a
, 0) == FAILURE
)
1539 sym
= a
->symtree
->n
.sym
;
1540 if (!sym
->attr
.dummy
)
1542 must_be (a
, 0, "a dummy variable");
1546 if (!sym
->attr
.optional
)
1548 must_be (a
, 0, "an OPTIONAL dummy variable");
1557 gfc_check_radix (gfc_expr
* x
)
1559 if (int_or_real_check (x
, 0) == FAILURE
)
1567 gfc_check_range (gfc_expr
* x
)
1569 if (numeric_check (x
, 0) == FAILURE
)
1576 /* real, float, sngl. */
1578 gfc_check_real (gfc_expr
* a
, gfc_expr
* kind
)
1580 if (numeric_check (a
, 0) == FAILURE
)
1583 if (kind_check (kind
, 1, BT_REAL
) == FAILURE
)
1591 gfc_check_rename (gfc_expr
* path1
, gfc_expr
* path2
)
1593 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1596 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1604 gfc_check_rename_sub (gfc_expr
* path1
, gfc_expr
* path2
, gfc_expr
* status
)
1606 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1609 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1615 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1618 if (scalar_check (status
, 2) == FAILURE
)
1626 gfc_check_repeat (gfc_expr
* x
, gfc_expr
* y
)
1628 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
1631 if (scalar_check (x
, 0) == FAILURE
)
1634 if (type_check (y
, 0, BT_INTEGER
) == FAILURE
)
1637 if (scalar_check (y
, 1) == FAILURE
)
1645 gfc_check_reshape (gfc_expr
* source
, gfc_expr
* shape
,
1646 gfc_expr
* pad
, gfc_expr
* order
)
1651 if (array_check (source
, 0) == FAILURE
)
1654 if (rank_check (shape
, 1, 1) == FAILURE
)
1657 if (type_check (shape
, 1, BT_INTEGER
) == FAILURE
)
1660 if (gfc_array_size (shape
, &size
) != SUCCESS
)
1662 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
1663 "array of constant size", &shape
->where
);
1667 m
= mpz_cmp_ui (size
, GFC_MAX_DIMENSIONS
);
1673 ("'shape' argument of 'reshape' intrinsic at %L has more than "
1674 stringize (GFC_MAX_DIMENSIONS
) " elements", &shape
->where
);
1680 if (same_type_check (source
, 0, pad
, 2) == FAILURE
)
1682 if (array_check (pad
, 2) == FAILURE
)
1686 if (order
!= NULL
&& array_check (order
, 3) == FAILURE
)
1694 gfc_check_scale (gfc_expr
* x
, gfc_expr
* i
)
1696 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1699 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
1707 gfc_check_scan (gfc_expr
* x
, gfc_expr
* y
, gfc_expr
* z
)
1709 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
1712 if (type_check (y
, 1, BT_CHARACTER
) == FAILURE
)
1715 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
1718 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
1726 gfc_check_selected_int_kind (gfc_expr
* r
)
1729 if (type_check (r
, 0, BT_INTEGER
) == FAILURE
)
1732 if (scalar_check (r
, 0) == FAILURE
)
1740 gfc_check_selected_real_kind (gfc_expr
* p
, gfc_expr
* r
)
1742 if (p
== NULL
&& r
== NULL
)
1744 gfc_error ("Missing arguments to %s intrinsic at %L",
1745 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
1750 if (p
!= NULL
&& type_check (p
, 0, BT_INTEGER
) == FAILURE
)
1753 if (r
!= NULL
&& type_check (r
, 1, BT_INTEGER
) == FAILURE
)
1761 gfc_check_set_exponent (gfc_expr
* x
, gfc_expr
* i
)
1763 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1766 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
1774 gfc_check_shape (gfc_expr
* source
)
1778 if (source
->rank
== 0 || source
->expr_type
!= EXPR_VARIABLE
)
1781 ar
= gfc_find_array_ref (source
);
1783 if (ar
->as
&& ar
->as
->type
== AS_ASSUMED_SIZE
)
1785 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
1786 "an assumed size array", &source
->where
);
1795 gfc_check_sign (gfc_expr
* a
, gfc_expr
* b
)
1797 if (int_or_real_check (a
, 0) == FAILURE
)
1800 if (same_type_check (a
, 0, b
, 1) == FAILURE
)
1808 gfc_check_size (gfc_expr
* array
, gfc_expr
* dim
)
1810 if (array_check (array
, 0) == FAILURE
)
1815 if (type_check (dim
, 1, BT_INTEGER
) == FAILURE
)
1818 if (kind_value_check (dim
, 1, gfc_default_integer_kind
) == FAILURE
)
1821 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
1830 gfc_check_sleep_sub (gfc_expr
* seconds
)
1832 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
1835 if (scalar_check (seconds
, 0) == FAILURE
)
1843 gfc_check_spread (gfc_expr
* source
, gfc_expr
* dim
, gfc_expr
* ncopies
)
1845 if (source
->rank
>= GFC_MAX_DIMENSIONS
)
1847 must_be (source
, 0, "less than rank " stringize (GFC_MAX_DIMENSIONS
));
1851 if (dim_check (dim
, 1, 0) == FAILURE
)
1854 if (type_check (ncopies
, 2, BT_INTEGER
) == FAILURE
)
1857 if (scalar_check (ncopies
, 2) == FAILURE
)
1865 gfc_check_fstat (gfc_expr
* unit
, gfc_expr
* array
)
1867 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
1870 if (scalar_check (unit
, 0) == FAILURE
)
1873 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
1874 || kind_value_check (unit
, 0, gfc_default_integer_kind
) == FAILURE
)
1877 if (array_check (array
, 1) == FAILURE
)
1885 gfc_check_fstat_sub (gfc_expr
* unit
, gfc_expr
* array
, gfc_expr
* status
)
1887 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
1890 if (scalar_check (unit
, 0) == FAILURE
)
1893 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
1894 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
1897 if (array_check (array
, 1) == FAILURE
)
1903 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
1904 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
1907 if (scalar_check (status
, 2) == FAILURE
)
1915 gfc_check_stat (gfc_expr
* name
, gfc_expr
* array
)
1917 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
1920 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
1921 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
1924 if (array_check (array
, 1) == FAILURE
)
1932 gfc_check_stat_sub (gfc_expr
* name
, gfc_expr
* array
, gfc_expr
* status
)
1934 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
1937 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
1938 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
1941 if (array_check (array
, 1) == FAILURE
)
1947 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
1948 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
1951 if (scalar_check (status
, 2) == FAILURE
)
1959 gfc_check_transfer (gfc_expr
* source ATTRIBUTE_UNUSED
,
1960 gfc_expr
* mold ATTRIBUTE_UNUSED
,
1965 if (type_check (size
, 2, BT_INTEGER
) == FAILURE
)
1968 if (scalar_check (size
, 2) == FAILURE
)
1971 if (nonoptional_check (size
, 2) == FAILURE
)
1980 gfc_check_transpose (gfc_expr
* matrix
)
1982 if (rank_check (matrix
, 0, 2) == FAILURE
)
1990 gfc_check_ubound (gfc_expr
* array
, gfc_expr
* dim
)
1992 if (array_check (array
, 0) == FAILURE
)
1997 if (dim_check (dim
, 1, 1) == FAILURE
)
2000 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
2009 gfc_check_unpack (gfc_expr
* vector
, gfc_expr
* mask
, gfc_expr
* field
)
2011 if (rank_check (vector
, 0, 1) == FAILURE
)
2014 if (array_check (mask
, 1) == FAILURE
)
2017 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
2020 if (same_type_check (vector
, 0, field
, 2) == FAILURE
)
2028 gfc_check_verify (gfc_expr
* x
, gfc_expr
* y
, gfc_expr
* z
)
2030 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
2033 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
2036 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
2044 gfc_check_trim (gfc_expr
* x
)
2046 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
2049 if (scalar_check (x
, 0) == FAILURE
)
2056 /* Common check function for the half a dozen intrinsics that have a
2057 single real argument. */
2060 gfc_check_x (gfc_expr
* x
)
2062 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2069 /************* Check functions for intrinsic subroutines *************/
2072 gfc_check_cpu_time (gfc_expr
* time
)
2074 if (scalar_check (time
, 0) == FAILURE
)
2077 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
2080 if (variable_check (time
, 0) == FAILURE
)
2088 gfc_check_date_and_time (gfc_expr
* date
, gfc_expr
* time
,
2089 gfc_expr
* zone
, gfc_expr
* values
)
2093 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
2095 if (scalar_check (date
, 0) == FAILURE
)
2097 if (variable_check (date
, 0) == FAILURE
)
2103 if (type_check (time
, 1, BT_CHARACTER
) == FAILURE
)
2105 if (scalar_check (time
, 1) == FAILURE
)
2107 if (variable_check (time
, 1) == FAILURE
)
2113 if (type_check (zone
, 2, BT_CHARACTER
) == FAILURE
)
2115 if (scalar_check (zone
, 2) == FAILURE
)
2117 if (variable_check (zone
, 2) == FAILURE
)
2123 if (type_check (values
, 3, BT_INTEGER
) == FAILURE
)
2125 if (array_check (values
, 3) == FAILURE
)
2127 if (rank_check (values
, 3, 1) == FAILURE
)
2129 if (variable_check (values
, 3) == FAILURE
)
2138 gfc_check_mvbits (gfc_expr
* from
, gfc_expr
* frompos
, gfc_expr
* len
,
2139 gfc_expr
* to
, gfc_expr
* topos
)
2141 if (type_check (from
, 0, BT_INTEGER
) == FAILURE
)
2144 if (type_check (frompos
, 1, BT_INTEGER
) == FAILURE
)
2147 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
2150 if (same_type_check (from
, 0, to
, 3) == FAILURE
)
2153 if (variable_check (to
, 3) == FAILURE
)
2156 if (type_check (topos
, 4, BT_INTEGER
) == FAILURE
)
2164 gfc_check_random_number (gfc_expr
* harvest
)
2166 if (type_check (harvest
, 0, BT_REAL
) == FAILURE
)
2169 if (variable_check (harvest
, 0) == FAILURE
)
2177 gfc_check_random_seed (gfc_expr
* size
, gfc_expr
* put
, gfc_expr
* get
)
2181 if (scalar_check (size
, 0) == FAILURE
)
2184 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
2187 if (variable_check (size
, 0) == FAILURE
)
2190 if (kind_value_check (size
, 0, gfc_default_integer_kind
) == FAILURE
)
2198 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
,
2201 if (array_check (put
, 1) == FAILURE
)
2204 if (rank_check (put
, 1, 1) == FAILURE
)
2207 if (type_check (put
, 1, BT_INTEGER
) == FAILURE
)
2210 if (kind_value_check (put
, 1, gfc_default_integer_kind
) == FAILURE
)
2217 if (size
!= NULL
|| put
!= NULL
)
2218 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
,
2221 if (array_check (get
, 2) == FAILURE
)
2224 if (rank_check (get
, 2, 1) == FAILURE
)
2227 if (type_check (get
, 2, BT_INTEGER
) == FAILURE
)
2230 if (variable_check (get
, 2) == FAILURE
)
2233 if (kind_value_check (get
, 2, gfc_default_integer_kind
) == FAILURE
)
2241 gfc_check_second_sub (gfc_expr
* time
)
2243 if (scalar_check (time
, 0) == FAILURE
)
2246 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
2249 if (kind_value_check(time
, 0, 4) == FAILURE
)
2256 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
2257 count, count_rate, and count_max are all optional arguments */
2260 gfc_check_system_clock (gfc_expr
* count
, gfc_expr
* count_rate
,
2261 gfc_expr
* count_max
)
2265 if (scalar_check (count
, 0) == FAILURE
)
2268 if (type_check (count
, 0, BT_INTEGER
) == FAILURE
)
2271 if (variable_check (count
, 0) == FAILURE
)
2275 if (count_rate
!= NULL
)
2277 if (scalar_check (count_rate
, 1) == FAILURE
)
2280 if (type_check (count_rate
, 1, BT_INTEGER
) == FAILURE
)
2283 if (variable_check (count_rate
, 1) == FAILURE
)
2287 && same_type_check (count
, 0, count_rate
, 1) == FAILURE
)
2292 if (count_max
!= NULL
)
2294 if (scalar_check (count_max
, 2) == FAILURE
)
2297 if (type_check (count_max
, 2, BT_INTEGER
) == FAILURE
)
2300 if (variable_check (count_max
, 2) == FAILURE
)
2304 && same_type_check (count
, 0, count_max
, 2) == FAILURE
)
2307 if (count_rate
!= NULL
2308 && same_type_check (count_rate
, 1, count_max
, 2) == FAILURE
)
2316 gfc_check_irand (gfc_expr
* x
)
2321 if (scalar_check (x
, 0) == FAILURE
)
2324 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
2327 if (kind_value_check(x
, 0, 4) == FAILURE
)
2334 gfc_check_rand (gfc_expr
* x
)
2339 if (scalar_check (x
, 0) == FAILURE
)
2342 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
2345 if (kind_value_check(x
, 0, 4) == FAILURE
)
2352 gfc_check_srand (gfc_expr
* x
)
2354 if (scalar_check (x
, 0) == FAILURE
)
2357 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
2360 if (kind_value_check(x
, 0, 4) == FAILURE
)
2367 gfc_check_etime (gfc_expr
* x
)
2369 if (array_check (x
, 0) == FAILURE
)
2372 if (rank_check (x
, 0, 1) == FAILURE
)
2375 if (variable_check (x
, 0) == FAILURE
)
2378 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2381 if (kind_value_check(x
, 0, 4) == FAILURE
)
2388 gfc_check_etime_sub (gfc_expr
* values
, gfc_expr
* time
)
2390 if (array_check (values
, 0) == FAILURE
)
2393 if (rank_check (values
, 0, 1) == FAILURE
)
2396 if (variable_check (values
, 0) == FAILURE
)
2399 if (type_check (values
, 0, BT_REAL
) == FAILURE
)
2402 if (kind_value_check(values
, 0, 4) == FAILURE
)
2405 if (scalar_check (time
, 1) == FAILURE
)
2408 if (type_check (time
, 1, BT_REAL
) == FAILURE
)
2411 if (kind_value_check(time
, 1, 4) == FAILURE
)
2419 gfc_check_gerror (gfc_expr
* msg
)
2421 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
2429 gfc_check_getcwd_sub (gfc_expr
* cwd
, gfc_expr
* status
)
2431 if (type_check (cwd
, 0, BT_CHARACTER
) == FAILURE
)
2437 if (scalar_check (status
, 1) == FAILURE
)
2440 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
2448 gfc_check_getlog (gfc_expr
* msg
)
2450 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
2458 gfc_check_exit (gfc_expr
* status
)
2463 if (type_check (status
, 0, BT_INTEGER
) == FAILURE
)
2466 if (scalar_check (status
, 0) == FAILURE
)
2474 gfc_check_flush (gfc_expr
* unit
)
2479 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2482 if (scalar_check (unit
, 0) == FAILURE
)
2490 gfc_check_hostnm (gfc_expr
* name
)
2492 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2500 gfc_check_hostnm_sub (gfc_expr
* name
, gfc_expr
* status
)
2502 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2508 if (scalar_check (status
, 1) == FAILURE
)
2511 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
2519 gfc_check_perror (gfc_expr
* string
)
2521 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
)
2529 gfc_check_umask (gfc_expr
* mask
)
2531 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
2534 if (scalar_check (mask
, 0) == FAILURE
)
2542 gfc_check_umask_sub (gfc_expr
* mask
, gfc_expr
* old
)
2544 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
2547 if (scalar_check (mask
, 0) == FAILURE
)
2553 if (scalar_check (old
, 1) == FAILURE
)
2556 if (type_check (old
, 1, BT_INTEGER
) == FAILURE
)
2564 gfc_check_unlink (gfc_expr
* name
)
2566 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2574 gfc_check_unlink_sub (gfc_expr
* name
, gfc_expr
* status
)
2576 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2582 if (scalar_check (status
, 1) == FAILURE
)
2585 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
2593 gfc_check_system_sub (gfc_expr
* cmd
, gfc_expr
* status
)
2595 if (type_check (cmd
, 0, BT_CHARACTER
) == FAILURE
)
2598 if (scalar_check (status
, 1) == FAILURE
)
2601 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
2604 if (kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
)