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 the expression is an optional constant integer
92 and that it specifies a valid kind for that type. */
95 kind_check (gfc_expr
* k
, int n
, bt type
)
102 if (type_check (k
, n
, BT_INTEGER
) == FAILURE
)
105 if (k
->expr_type
!= EXPR_CONSTANT
)
107 must_be (k
, n
, "a constant");
111 if (gfc_extract_int (k
, &kind
) != NULL
112 || gfc_validate_kind (type
, kind
, true) < 0)
114 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type
),
123 /* Make sure the expression is a double precision real. */
126 double_check (gfc_expr
* d
, int n
)
128 if (type_check (d
, n
, BT_REAL
) == FAILURE
)
131 if (d
->ts
.kind
!= gfc_default_double_kind
)
133 must_be (d
, n
, "double precision");
141 /* Make sure the expression is a logical array. */
144 logical_array_check (gfc_expr
* array
, int n
)
146 if (array
->ts
.type
!= BT_LOGICAL
|| array
->rank
== 0)
148 must_be (array
, n
, "a logical array");
156 /* Make sure an expression is an array. */
159 array_check (gfc_expr
* e
, int n
)
164 must_be (e
, n
, "an array");
170 /* Make sure an expression is a scalar. */
173 scalar_check (gfc_expr
* e
, int n
)
178 must_be (e
, n
, "a scalar");
184 /* Make sure two expression have the same type. */
187 same_type_check (gfc_expr
* e
, int n
, gfc_expr
* f
, int m
)
191 if (gfc_compare_types (&e
->ts
, &f
->ts
))
194 sprintf (message
, "the same type and kind as '%s'",
195 gfc_current_intrinsic_arg
[n
]);
197 must_be (f
, m
, message
);
203 /* Make sure that an expression has a certain (nonzero) rank. */
206 rank_check (gfc_expr
* e
, int n
, int rank
)
213 sprintf (message
, "of rank %d", rank
);
215 must_be (e
, n
, message
);
221 /* Make sure a variable expression is not an optional dummy argument. */
224 nonoptional_check (gfc_expr
* e
, int n
)
226 if (e
->expr_type
== EXPR_VARIABLE
&& e
->symtree
->n
.sym
->attr
.optional
)
228 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
229 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
234 /* TODO: Recursive check on nonoptional variables? */
240 /* Check that an expression has a particular kind. */
243 kind_value_check (gfc_expr
* e
, int n
, int k
)
250 sprintf (message
, "of kind %d", k
);
252 must_be (e
, n
, message
);
257 /* Make sure an expression is a variable. */
260 variable_check (gfc_expr
* e
, int n
)
262 if ((e
->expr_type
== EXPR_VARIABLE
263 && e
->symtree
->n
.sym
->attr
.flavor
!= FL_PARAMETER
)
264 || (e
->expr_type
== EXPR_FUNCTION
265 && e
->symtree
->n
.sym
->result
== e
->symtree
->n
.sym
))
268 if (e
->expr_type
== EXPR_VARIABLE
269 && e
->symtree
->n
.sym
->attr
.intent
== INTENT_IN
)
271 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
272 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
277 must_be (e
, n
, "a variable");
283 /* Check the common DIM parameter for correctness. */
286 dim_check (gfc_expr
* dim
, int n
, int optional
)
293 if (nonoptional_check (dim
, n
) == FAILURE
)
301 gfc_error ("Missing DIM parameter in intrinsic '%s' at %L",
302 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
306 if (type_check (dim
, n
, BT_INTEGER
) == FAILURE
)
309 if (scalar_check (dim
, n
) == FAILURE
)
316 /* If a DIM parameter is a constant, make sure that it is greater than
317 zero and less than or equal to the rank of the given array. If
318 allow_assumed is zero then dim must be less than the rank of the array
319 for assumed size arrays. */
322 dim_rank_check (gfc_expr
* dim
, gfc_expr
* array
, int allow_assumed
)
327 if (dim
->expr_type
!= EXPR_CONSTANT
|| array
->expr_type
!= EXPR_VARIABLE
)
330 ar
= gfc_find_array_ref (array
);
332 if (ar
->as
->type
== AS_ASSUMED_SIZE
&& !allow_assumed
)
335 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
336 || mpz_cmp_ui (dim
->value
.integer
, rank
) > 0)
338 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
339 "dimension index", gfc_current_intrinsic
, &dim
->where
);
348 /***** Check functions *****/
350 /* Check subroutine suitable for intrinsics taking a real argument and
351 a kind argument for the result. */
354 check_a_kind (gfc_expr
* a
, gfc_expr
* kind
, bt type
)
356 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
358 if (kind_check (kind
, 1, type
) == FAILURE
)
364 /* Check subroutine suitable for ceiling, floor and nint. */
367 gfc_check_a_ikind (gfc_expr
* a
, gfc_expr
* kind
)
369 return check_a_kind (a
, kind
, BT_INTEGER
);
372 /* Check subroutine suitable for aint, anint. */
375 gfc_check_a_xkind (gfc_expr
* a
, gfc_expr
* kind
)
377 return check_a_kind (a
, kind
, BT_REAL
);
381 gfc_check_abs (gfc_expr
* a
)
383 if (numeric_check (a
, 0) == FAILURE
)
391 gfc_check_all_any (gfc_expr
* mask
, gfc_expr
* dim
)
393 if (logical_array_check (mask
, 0) == FAILURE
)
396 if (dim_check (dim
, 1, 1) == FAILURE
)
404 gfc_check_allocated (gfc_expr
* array
)
406 if (variable_check (array
, 0) == FAILURE
)
409 if (array_check (array
, 0) == FAILURE
)
412 if (!array
->symtree
->n
.sym
->attr
.allocatable
)
414 must_be (array
, 0, "ALLOCATABLE");
422 /* Common check function where the first argument must be real or
423 integer and the second argument must be the same as the first. */
426 gfc_check_a_p (gfc_expr
* a
, gfc_expr
* p
)
428 if (int_or_real_check (a
, 0) == FAILURE
)
431 if (same_type_check (a
, 0, p
, 1) == FAILURE
)
439 gfc_check_associated (gfc_expr
* pointer
, gfc_expr
* target
)
441 symbol_attribute attr
;
445 if (variable_check (pointer
, 0) == FAILURE
)
448 attr
= gfc_variable_attr (pointer
, NULL
);
451 must_be (pointer
, 0, "a POINTER");
458 /* Target argument is optional. */
459 if (target
->expr_type
== EXPR_NULL
)
461 gfc_error ("NULL pointer at %L is not permitted as actual argument "
462 "of '%s' intrinsic function",
463 &target
->where
, gfc_current_intrinsic
);
467 attr
= gfc_variable_attr (target
, NULL
);
468 if (!attr
.pointer
&& !attr
.target
)
470 must_be (target
, 1, "a POINTER or a TARGET");
475 if (same_type_check (pointer
, 0, target
, 1) == FAILURE
)
477 if (rank_check (target
, 0, pointer
->rank
) == FAILURE
)
479 if (target
->rank
> 0)
481 for (i
= 0; i
< target
->rank
; i
++)
482 if (target
->ref
->u
.ar
.dimen_type
[i
] == DIMEN_VECTOR
)
484 gfc_error ("Array section with a vector subscript at %L shall not "
485 "be the target of an pointer",
496 gfc_check_atan2 (gfc_expr
* y
, gfc_expr
* x
)
498 if (type_check (y
, 0, BT_REAL
) == FAILURE
)
500 if (same_type_check (y
, 0, x
, 1) == FAILURE
)
507 /* BESJN and BESYN functions. */
510 gfc_check_besn (gfc_expr
* n
, gfc_expr
* x
)
512 if (scalar_check (n
, 0) == FAILURE
)
515 if (type_check (n
, 0, BT_INTEGER
) == FAILURE
)
518 if (scalar_check (x
, 1) == FAILURE
)
521 if (type_check (x
, 1, BT_REAL
) == FAILURE
)
529 gfc_check_btest (gfc_expr
* i
, gfc_expr
* pos
)
531 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
533 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
541 gfc_check_char (gfc_expr
* i
, gfc_expr
* kind
)
543 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
545 if (kind_check (kind
, 1, BT_CHARACTER
) == FAILURE
)
553 gfc_check_cmplx (gfc_expr
* x
, gfc_expr
* y
, gfc_expr
* kind
)
555 if (numeric_check (x
, 0) == FAILURE
)
560 if (numeric_check (y
, 1) == FAILURE
)
563 if (x
->ts
.type
== BT_COMPLEX
)
565 must_be (y
, 1, "not be present if 'x' is COMPLEX");
570 if (kind_check (kind
, 2, BT_COMPLEX
) == FAILURE
)
578 gfc_check_count (gfc_expr
* mask
, gfc_expr
* dim
)
580 if (logical_array_check (mask
, 0) == FAILURE
)
582 if (dim_check (dim
, 1, 1) == FAILURE
)
590 gfc_check_cshift (gfc_expr
* array
, gfc_expr
* shift
, gfc_expr
* dim
)
592 if (array_check (array
, 0) == FAILURE
)
595 if (array
->rank
== 1)
597 if (scalar_check (shift
, 1) == FAILURE
)
602 /* TODO: more requirements on shift parameter. */
605 if (dim_check (dim
, 2, 1) == FAILURE
)
613 gfc_check_dcmplx (gfc_expr
* x
, gfc_expr
* y
)
615 if (numeric_check (x
, 0) == FAILURE
)
620 if (numeric_check (y
, 1) == FAILURE
)
623 if (x
->ts
.type
== BT_COMPLEX
)
625 must_be (y
, 1, "not be present if 'x' is COMPLEX");
635 gfc_check_dble (gfc_expr
* x
)
637 if (numeric_check (x
, 0) == FAILURE
)
645 gfc_check_digits (gfc_expr
* x
)
647 if (int_or_real_check (x
, 0) == FAILURE
)
655 gfc_check_dot_product (gfc_expr
* vector_a
, gfc_expr
* vector_b
)
657 switch (vector_a
->ts
.type
)
660 if (type_check (vector_b
, 1, BT_LOGICAL
) == FAILURE
)
667 if (numeric_check (vector_b
, 1) == FAILURE
)
672 must_be (vector_a
, 0, "numeric or LOGICAL");
676 if (rank_check (vector_a
, 0, 1) == FAILURE
)
679 if (rank_check (vector_b
, 1, 1) == FAILURE
)
687 gfc_check_eoshift (gfc_expr
* array
, gfc_expr
* shift
, gfc_expr
* boundary
,
690 if (array_check (array
, 0) == FAILURE
)
693 if (type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
696 if (array
->rank
== 1)
698 if (scalar_check (shift
, 2) == FAILURE
)
703 /* TODO: more weird restrictions on shift. */
706 if (boundary
!= NULL
)
708 if (same_type_check (array
, 0, boundary
, 2) == FAILURE
)
711 /* TODO: more restrictions on boundary. */
714 if (dim_check (dim
, 1, 1) == FAILURE
)
722 gfc_check_fnum (gfc_expr
* unit
)
724 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
727 if (scalar_check (unit
, 0) == FAILURE
)
734 /* This is used for the g77 one-argument Bessel functions, and the
738 gfc_check_g77_math1 (gfc_expr
* x
)
740 if (scalar_check (x
, 0) == FAILURE
)
743 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
751 gfc_check_huge (gfc_expr
* x
)
753 if (int_or_real_check (x
, 0) == FAILURE
)
760 /* Check that the single argument is an integer. */
763 gfc_check_i (gfc_expr
* i
)
765 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
773 gfc_check_iand (gfc_expr
* i
, gfc_expr
* j
)
775 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
778 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
781 if (i
->ts
.kind
!= j
->ts
.kind
)
783 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
784 &i
->where
) == FAILURE
)
793 gfc_check_ibclr (gfc_expr
* i
, gfc_expr
* pos
)
795 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
798 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
806 gfc_check_ibits (gfc_expr
* i
, gfc_expr
* pos
, gfc_expr
* len
)
808 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
811 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
814 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
822 gfc_check_ibset (gfc_expr
* i
, gfc_expr
* pos
)
824 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
827 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
835 gfc_check_idnint (gfc_expr
* a
)
837 if (double_check (a
, 0) == FAILURE
)
845 gfc_check_ieor (gfc_expr
* i
, gfc_expr
* j
)
847 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
850 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
853 if (i
->ts
.kind
!= j
->ts
.kind
)
855 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
856 &i
->where
) == FAILURE
)
865 gfc_check_index (gfc_expr
* string
, gfc_expr
* substring
, gfc_expr
* back
)
867 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
868 || type_check (substring
, 1, BT_CHARACTER
) == FAILURE
)
872 if (back
!= NULL
&& type_check (back
, 2, BT_LOGICAL
) == FAILURE
)
875 if (string
->ts
.kind
!= substring
->ts
.kind
)
877 must_be (substring
, 1, "the same kind as 'string'");
886 gfc_check_int (gfc_expr
* x
, gfc_expr
* kind
)
888 if (numeric_check (x
, 0) == FAILURE
889 || kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
897 gfc_check_ior (gfc_expr
* i
, gfc_expr
* j
)
899 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
902 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
905 if (i
->ts
.kind
!= j
->ts
.kind
)
907 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
908 &i
->where
) == FAILURE
)
917 gfc_check_ishft (gfc_expr
* i
, gfc_expr
* shift
)
919 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
920 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
928 gfc_check_ishftc (gfc_expr
* i
, gfc_expr
* shift
, gfc_expr
* size
)
930 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
931 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
934 if (size
!= NULL
&& type_check (size
, 2, BT_INTEGER
) == FAILURE
)
942 gfc_check_kind (gfc_expr
* x
)
944 if (x
->ts
.type
== BT_DERIVED
)
946 must_be (x
, 0, "a non-derived type");
955 gfc_check_lbound (gfc_expr
* array
, gfc_expr
* dim
)
957 if (array_check (array
, 0) == FAILURE
)
962 if (dim_check (dim
, 1, 1) == FAILURE
)
965 if (dim_rank_check (dim
, array
, 1) == FAILURE
)
973 gfc_check_logical (gfc_expr
* a
, gfc_expr
* kind
)
975 if (type_check (a
, 0, BT_LOGICAL
) == FAILURE
)
977 if (kind_check (kind
, 1, BT_LOGICAL
) == FAILURE
)
984 /* Min/max family. */
987 min_max_args (gfc_actual_arglist
* arg
)
989 if (arg
== NULL
|| arg
->next
== NULL
)
991 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
992 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
1001 check_rest (bt type
, int kind
, gfc_actual_arglist
* arg
)
1006 if (min_max_args (arg
) == FAILURE
)
1011 for (; arg
; arg
= arg
->next
, n
++)
1014 if (x
->ts
.type
!= type
|| x
->ts
.kind
!= kind
)
1016 if (x
->ts
.type
== type
)
1018 if (gfc_notify_std (GFC_STD_GNU
,
1019 "Extension: Different type kinds at %L", &x
->where
)
1025 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be %s(%d)",
1026 n
, gfc_current_intrinsic
, &x
->where
,
1027 gfc_basic_typename (type
), kind
);
1038 gfc_check_min_max (gfc_actual_arglist
* arg
)
1042 if (min_max_args (arg
) == FAILURE
)
1047 if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
1050 ("'a1' argument of '%s' intrinsic at %L must be INTEGER or REAL",
1051 gfc_current_intrinsic
, &x
->where
);
1055 return check_rest (x
->ts
.type
, x
->ts
.kind
, arg
);
1060 gfc_check_min_max_integer (gfc_actual_arglist
* arg
)
1062 return check_rest (BT_INTEGER
, gfc_default_integer_kind
, arg
);
1067 gfc_check_min_max_real (gfc_actual_arglist
* arg
)
1069 return check_rest (BT_REAL
, gfc_default_real_kind
, arg
);
1074 gfc_check_min_max_double (gfc_actual_arglist
* arg
)
1076 return check_rest (BT_REAL
, gfc_default_double_kind
, arg
);
1079 /* End of min/max family. */
1083 gfc_check_matmul (gfc_expr
* matrix_a
, gfc_expr
* matrix_b
)
1085 if ((matrix_a
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_b
->ts
))
1087 must_be (matrix_a
, 0, "numeric or LOGICAL");
1091 if ((matrix_b
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_a
->ts
))
1093 must_be (matrix_b
, 0, "numeric or LOGICAL");
1097 switch (matrix_a
->rank
)
1100 if (rank_check (matrix_b
, 1, 2) == FAILURE
)
1105 if (matrix_b
->rank
== 2)
1107 if (rank_check (matrix_b
, 1, 1) == FAILURE
)
1112 must_be (matrix_a
, 0, "of rank 1 or 2");
1120 /* Whoever came up with this interface was probably on something.
1121 The possibilities for the occupation of the second and third
1128 NULL MASK minloc(array, mask=m)
1131 I.e. in the case of minloc(array,mask), mask will be in the second
1132 position of the argument list and we'll have to fix that up. */
1135 gfc_check_minloc_maxloc (gfc_actual_arglist
* ap
)
1137 gfc_expr
*a
, *m
, *d
;
1140 if (int_or_real_check (a
, 0) == FAILURE
1141 || array_check (a
, 0) == FAILURE
)
1145 m
= ap
->next
->next
->expr
;
1147 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
1148 && ap
->next
->name
[0] == '\0')
1153 ap
->next
->expr
= NULL
;
1154 ap
->next
->next
->expr
= m
;
1158 && (scalar_check (d
, 1) == FAILURE
1159 || type_check (d
, 1, BT_INTEGER
) == FAILURE
))
1162 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
1169 /* Similar to minloc/maxloc, the argument list might need to be
1170 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1171 difference is that MINLOC/MAXLOC take an additional KIND argument.
1172 The possibilities are:
1178 NULL MASK minval(array, mask=m)
1181 I.e. in the case of minval(array,mask), mask will be in the second
1182 position of the argument list and we'll have to fix that up. */
1185 check_reduction (gfc_actual_arglist
* ap
)
1190 m
= ap
->next
->next
->expr
;
1192 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
1193 && ap
->next
->name
[0] == '\0')
1198 ap
->next
->expr
= NULL
;
1199 ap
->next
->next
->expr
= m
;
1203 && (scalar_check (d
, 1) == FAILURE
1204 || type_check (d
, 1, BT_INTEGER
) == FAILURE
))
1207 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
1215 gfc_check_minval_maxval (gfc_actual_arglist
* ap
)
1217 if (int_or_real_check (ap
->expr
, 0) == FAILURE
1218 || array_check (ap
->expr
, 0) == FAILURE
)
1221 return check_reduction (ap
);
1226 gfc_check_product_sum (gfc_actual_arglist
* ap
)
1228 if (numeric_check (ap
->expr
, 0) == FAILURE
1229 || array_check (ap
->expr
, 0) == FAILURE
)
1232 return check_reduction (ap
);
1237 gfc_check_merge (gfc_expr
* tsource
, gfc_expr
* fsource
, gfc_expr
* mask
)
1239 if (same_type_check (tsource
, 0, fsource
, 1) == FAILURE
)
1242 if (type_check (mask
, 2, BT_LOGICAL
) == FAILURE
)
1250 gfc_check_nearest (gfc_expr
* x
, gfc_expr
* s
)
1252 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1255 if (type_check (s
, 1, BT_REAL
) == FAILURE
)
1263 gfc_check_null (gfc_expr
* mold
)
1265 symbol_attribute attr
;
1270 if (variable_check (mold
, 0) == FAILURE
)
1273 attr
= gfc_variable_attr (mold
, NULL
);
1277 must_be (mold
, 0, "a POINTER");
1286 gfc_check_pack (gfc_expr
* array
, gfc_expr
* mask
, gfc_expr
* vector
)
1288 if (array_check (array
, 0) == FAILURE
)
1291 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
1294 if (mask
->rank
!= 0 && mask
->rank
!= array
->rank
)
1296 must_be (array
, 0, "conformable with 'mask' argument");
1302 if (same_type_check (array
, 0, vector
, 2) == FAILURE
)
1305 if (rank_check (vector
, 2, 1) == FAILURE
)
1308 /* TODO: More constraints here. */
1316 gfc_check_precision (gfc_expr
* x
)
1318 if (x
->ts
.type
!= BT_REAL
&& x
->ts
.type
!= BT_COMPLEX
)
1320 must_be (x
, 0, "of type REAL or COMPLEX");
1329 gfc_check_present (gfc_expr
* a
)
1333 if (variable_check (a
, 0) == FAILURE
)
1336 sym
= a
->symtree
->n
.sym
;
1337 if (!sym
->attr
.dummy
)
1339 must_be (a
, 0, "a dummy variable");
1343 if (!sym
->attr
.optional
)
1345 must_be (a
, 0, "an OPTIONAL dummy variable");
1354 gfc_check_radix (gfc_expr
* x
)
1356 if (int_or_real_check (x
, 0) == FAILURE
)
1364 gfc_check_range (gfc_expr
* x
)
1366 if (numeric_check (x
, 0) == FAILURE
)
1373 /* real, float, sngl. */
1375 gfc_check_real (gfc_expr
* a
, gfc_expr
* kind
)
1377 if (numeric_check (a
, 0) == FAILURE
)
1380 if (kind_check (kind
, 1, BT_REAL
) == FAILURE
)
1388 gfc_check_repeat (gfc_expr
* x
, gfc_expr
* y
)
1390 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
1393 if (scalar_check (x
, 0) == FAILURE
)
1396 if (type_check (y
, 0, BT_INTEGER
) == FAILURE
)
1399 if (scalar_check (y
, 1) == FAILURE
)
1407 gfc_check_reshape (gfc_expr
* source
, gfc_expr
* shape
,
1408 gfc_expr
* pad
, gfc_expr
* order
)
1413 if (array_check (source
, 0) == FAILURE
)
1416 if (rank_check (shape
, 1, 1) == FAILURE
)
1419 if (type_check (shape
, 1, BT_INTEGER
) == FAILURE
)
1422 if (gfc_array_size (shape
, &size
) != SUCCESS
)
1424 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
1425 "array of constant size", &shape
->where
);
1429 m
= mpz_cmp_ui (size
, GFC_MAX_DIMENSIONS
);
1435 ("'shape' argument of 'reshape' intrinsic at %L has more than "
1436 stringize (GFC_MAX_DIMENSIONS
) " elements", &shape
->where
);
1442 if (same_type_check (source
, 0, pad
, 2) == FAILURE
)
1444 if (array_check (pad
, 2) == FAILURE
)
1448 if (order
!= NULL
&& array_check (order
, 3) == FAILURE
)
1456 gfc_check_scale (gfc_expr
* x
, gfc_expr
* i
)
1458 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1461 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
1469 gfc_check_scan (gfc_expr
* x
, gfc_expr
* y
, gfc_expr
* z
)
1471 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
1474 if (type_check (y
, 1, BT_CHARACTER
) == FAILURE
)
1477 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
1480 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
1488 gfc_check_selected_real_kind (gfc_expr
* p
, gfc_expr
* r
)
1490 if (p
== NULL
&& r
== NULL
)
1492 gfc_error ("Missing arguments to %s intrinsic at %L",
1493 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
1498 if (p
!= NULL
&& type_check (p
, 0, BT_INTEGER
) == FAILURE
)
1501 if (r
!= NULL
&& type_check (r
, 1, BT_INTEGER
) == FAILURE
)
1509 gfc_check_set_exponent (gfc_expr
* x
, gfc_expr
* i
)
1511 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1514 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
1522 gfc_check_shape (gfc_expr
* source
)
1526 if (source
->rank
== 0 || source
->expr_type
!= EXPR_VARIABLE
)
1529 ar
= gfc_find_array_ref (source
);
1531 if (ar
->as
&& ar
->as
->type
== AS_ASSUMED_SIZE
)
1533 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
1534 "an assumed size array", &source
->where
);
1543 gfc_check_sign (gfc_expr
* a
, gfc_expr
* b
)
1545 if (int_or_real_check (a
, 0) == FAILURE
)
1548 if (same_type_check (a
, 0, b
, 1) == FAILURE
)
1556 gfc_check_size (gfc_expr
* array
, gfc_expr
* dim
)
1558 if (array_check (array
, 0) == FAILURE
)
1563 if (type_check (dim
, 1, BT_INTEGER
) == FAILURE
)
1566 if (kind_value_check (dim
, 1, gfc_default_integer_kind
) == FAILURE
)
1569 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
1578 gfc_check_spread (gfc_expr
* source
, gfc_expr
* dim
, gfc_expr
* ncopies
)
1580 if (source
->rank
>= GFC_MAX_DIMENSIONS
)
1582 must_be (source
, 0, "less than rank " stringize (GFC_MAX_DIMENSIONS
));
1586 if (dim_check (dim
, 1, 0) == FAILURE
)
1589 if (type_check (ncopies
, 2, BT_INTEGER
) == FAILURE
)
1592 if (scalar_check (ncopies
, 2) == FAILURE
)
1600 gfc_check_fstat (gfc_expr
* unit
, gfc_expr
* array
)
1602 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
1605 if (scalar_check (unit
, 0) == FAILURE
)
1608 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
1609 || kind_value_check (unit
, 0, gfc_default_integer_kind
) == FAILURE
)
1612 if (array_check (array
, 1) == FAILURE
)
1620 gfc_check_fstat_sub (gfc_expr
* unit
, gfc_expr
* array
, gfc_expr
* status
)
1622 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
1625 if (scalar_check (unit
, 0) == FAILURE
)
1628 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
1629 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
1632 if (array_check (array
, 1) == FAILURE
)
1638 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
1639 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
1642 if (scalar_check (status
, 2) == FAILURE
)
1650 gfc_check_stat (gfc_expr
* name
, gfc_expr
* array
)
1652 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
1655 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
1656 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
1659 if (array_check (array
, 1) == FAILURE
)
1667 gfc_check_stat_sub (gfc_expr
* name
, gfc_expr
* array
, gfc_expr
* status
)
1669 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
1672 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
1673 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
1676 if (array_check (array
, 1) == FAILURE
)
1682 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
1683 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
1686 if (scalar_check (status
, 2) == FAILURE
)
1694 gfc_check_transfer (gfc_expr
* source ATTRIBUTE_UNUSED
,
1695 gfc_expr
* mold ATTRIBUTE_UNUSED
,
1700 if (type_check (size
, 2, BT_INTEGER
) == FAILURE
)
1703 if (scalar_check (size
, 2) == FAILURE
)
1706 if (nonoptional_check (size
, 2) == FAILURE
)
1715 gfc_check_transpose (gfc_expr
* matrix
)
1717 if (rank_check (matrix
, 0, 2) == FAILURE
)
1725 gfc_check_ubound (gfc_expr
* array
, gfc_expr
* dim
)
1727 if (array_check (array
, 0) == FAILURE
)
1732 if (dim_check (dim
, 1, 1) == FAILURE
)
1735 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
1744 gfc_check_unpack (gfc_expr
* vector
, gfc_expr
* mask
, gfc_expr
* field
)
1746 if (rank_check (vector
, 0, 1) == FAILURE
)
1749 if (array_check (mask
, 1) == FAILURE
)
1752 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
1755 if (same_type_check (vector
, 0, field
, 2) == FAILURE
)
1763 gfc_check_verify (gfc_expr
* x
, gfc_expr
* y
, gfc_expr
* z
)
1765 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
1768 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
1771 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
1779 gfc_check_trim (gfc_expr
* x
)
1781 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
1784 if (scalar_check (x
, 0) == FAILURE
)
1791 /* Common check function for the half a dozen intrinsics that have a
1792 single real argument. */
1795 gfc_check_x (gfc_expr
* x
)
1797 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1804 /************* Check functions for intrinsic subroutines *************/
1807 gfc_check_cpu_time (gfc_expr
* time
)
1809 if (scalar_check (time
, 0) == FAILURE
)
1812 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
1815 if (variable_check (time
, 0) == FAILURE
)
1823 gfc_check_date_and_time (gfc_expr
* date
, gfc_expr
* time
,
1824 gfc_expr
* zone
, gfc_expr
* values
)
1828 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
1830 if (scalar_check (date
, 0) == FAILURE
)
1832 if (variable_check (date
, 0) == FAILURE
)
1838 if (type_check (time
, 1, BT_CHARACTER
) == FAILURE
)
1840 if (scalar_check (time
, 1) == FAILURE
)
1842 if (variable_check (time
, 1) == FAILURE
)
1848 if (type_check (zone
, 2, BT_CHARACTER
) == FAILURE
)
1850 if (scalar_check (zone
, 2) == FAILURE
)
1852 if (variable_check (zone
, 2) == FAILURE
)
1858 if (type_check (values
, 3, BT_INTEGER
) == FAILURE
)
1860 if (array_check (values
, 3) == FAILURE
)
1862 if (rank_check (values
, 3, 1) == FAILURE
)
1864 if (variable_check (values
, 3) == FAILURE
)
1873 gfc_check_mvbits (gfc_expr
* from
, gfc_expr
* frompos
, gfc_expr
* len
,
1874 gfc_expr
* to
, gfc_expr
* topos
)
1876 if (type_check (from
, 0, BT_INTEGER
) == FAILURE
)
1879 if (type_check (frompos
, 1, BT_INTEGER
) == FAILURE
)
1882 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
1885 if (same_type_check (from
, 0, to
, 3) == FAILURE
)
1888 if (variable_check (to
, 3) == FAILURE
)
1891 if (type_check (topos
, 4, BT_INTEGER
) == FAILURE
)
1899 gfc_check_random_number (gfc_expr
* harvest
)
1901 if (type_check (harvest
, 0, BT_REAL
) == FAILURE
)
1904 if (variable_check (harvest
, 0) == FAILURE
)
1912 gfc_check_random_seed (gfc_expr
* size
, gfc_expr
* put
, gfc_expr
* get
)
1916 if (scalar_check (size
, 0) == FAILURE
)
1919 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
1922 if (variable_check (size
, 0) == FAILURE
)
1925 if (kind_value_check (size
, 0, gfc_default_integer_kind
) == FAILURE
)
1933 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
,
1936 if (array_check (put
, 1) == FAILURE
)
1939 if (rank_check (put
, 1, 1) == FAILURE
)
1942 if (type_check (put
, 1, BT_INTEGER
) == FAILURE
)
1945 if (kind_value_check (put
, 1, gfc_default_integer_kind
) == FAILURE
)
1952 if (size
!= NULL
|| put
!= NULL
)
1953 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
,
1956 if (array_check (get
, 2) == FAILURE
)
1959 if (rank_check (get
, 2, 1) == FAILURE
)
1962 if (type_check (get
, 2, BT_INTEGER
) == FAILURE
)
1965 if (variable_check (get
, 2) == FAILURE
)
1968 if (kind_value_check (get
, 2, gfc_default_integer_kind
) == FAILURE
)
1976 gfc_check_second_sub (gfc_expr
* time
)
1978 if (scalar_check (time
, 0) == FAILURE
)
1981 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
1984 if (kind_value_check(time
, 0, 4) == FAILURE
)
1991 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
1992 count, count_rate, and count_max are all optional arguments */
1995 gfc_check_system_clock (gfc_expr
* count
, gfc_expr
* count_rate
,
1996 gfc_expr
* count_max
)
2000 if (scalar_check (count
, 0) == FAILURE
)
2003 if (type_check (count
, 0, BT_INTEGER
) == FAILURE
)
2006 if (variable_check (count
, 0) == FAILURE
)
2010 if (count_rate
!= NULL
)
2012 if (scalar_check (count_rate
, 1) == FAILURE
)
2015 if (type_check (count_rate
, 1, BT_INTEGER
) == FAILURE
)
2018 if (variable_check (count_rate
, 1) == FAILURE
)
2022 && same_type_check (count
, 0, count_rate
, 1) == FAILURE
)
2027 if (count_max
!= NULL
)
2029 if (scalar_check (count_max
, 2) == FAILURE
)
2032 if (type_check (count_max
, 2, BT_INTEGER
) == FAILURE
)
2035 if (variable_check (count_max
, 2) == FAILURE
)
2039 && same_type_check (count
, 0, count_max
, 2) == FAILURE
)
2042 if (count_rate
!= NULL
2043 && same_type_check (count_rate
, 1, count_max
, 2) == FAILURE
)
2051 gfc_check_irand (gfc_expr
* x
)
2056 if (scalar_check (x
, 0) == FAILURE
)
2059 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
2062 if (kind_value_check(x
, 0, 4) == FAILURE
)
2069 gfc_check_rand (gfc_expr
* x
)
2074 if (scalar_check (x
, 0) == FAILURE
)
2077 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
2080 if (kind_value_check(x
, 0, 4) == FAILURE
)
2087 gfc_check_srand (gfc_expr
* x
)
2089 if (scalar_check (x
, 0) == FAILURE
)
2092 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
2095 if (kind_value_check(x
, 0, 4) == FAILURE
)
2102 gfc_check_etime (gfc_expr
* x
)
2104 if (array_check (x
, 0) == FAILURE
)
2107 if (rank_check (x
, 0, 1) == FAILURE
)
2110 if (variable_check (x
, 0) == FAILURE
)
2113 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2116 if (kind_value_check(x
, 0, 4) == FAILURE
)
2123 gfc_check_etime_sub (gfc_expr
* values
, gfc_expr
* time
)
2125 if (array_check (values
, 0) == FAILURE
)
2128 if (rank_check (values
, 0, 1) == FAILURE
)
2131 if (variable_check (values
, 0) == FAILURE
)
2134 if (type_check (values
, 0, BT_REAL
) == FAILURE
)
2137 if (kind_value_check(values
, 0, 4) == FAILURE
)
2140 if (scalar_check (time
, 1) == FAILURE
)
2143 if (type_check (time
, 1, BT_REAL
) == FAILURE
)
2146 if (kind_value_check(time
, 1, 4) == FAILURE
)
2154 gfc_check_getcwd_sub (gfc_expr
* cwd
, gfc_expr
* status
)
2156 if (type_check (cwd
, 0, BT_CHARACTER
) == FAILURE
)
2162 if (scalar_check (status
, 1) == FAILURE
)
2165 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
2173 gfc_check_exit (gfc_expr
* status
)
2178 if (type_check (status
, 0, BT_INTEGER
) == FAILURE
)
2181 if (scalar_check (status
, 0) == FAILURE
)
2189 gfc_check_flush (gfc_expr
* unit
)
2194 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2197 if (scalar_check (unit
, 0) == FAILURE
)
2205 gfc_check_umask (gfc_expr
* mask
)
2207 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
2210 if (scalar_check (mask
, 0) == FAILURE
)
2218 gfc_check_umask_sub (gfc_expr
* mask
, gfc_expr
* old
)
2220 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
2223 if (scalar_check (mask
, 0) == FAILURE
)
2229 if (scalar_check (old
, 1) == FAILURE
)
2232 if (type_check (old
, 1, BT_INTEGER
) == FAILURE
)
2240 gfc_check_unlink (gfc_expr
* name
)
2242 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2250 gfc_check_unlink_sub (gfc_expr
* name
, gfc_expr
* status
)
2252 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2258 if (scalar_check (status
, 1) == FAILURE
)
2261 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
2269 gfc_check_system_sub (gfc_expr
* cmd
, gfc_expr
* status
)
2271 if (type_check (cmd
, 0, BT_CHARACTER
) == FAILURE
)
2274 if (scalar_check (status
, 1) == FAILURE
)
2277 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
2280 if (kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
)