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. */
37 #include "intrinsic.h"
40 /* The fundamental complaint function of this source file. This
41 function can be called in all kinds of ways. */
44 must_be (gfc_expr
* e
, int n
, const char *thing
)
47 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
48 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &e
->where
,
53 /* Check the type of an expression. */
56 type_check (gfc_expr
* e
, int n
, bt type
)
59 if (e
->ts
.type
== type
)
62 must_be (e
, n
, gfc_basic_typename (type
));
68 /* Check that the expression is a numeric type. */
71 numeric_check (gfc_expr
* e
, int n
)
74 if (gfc_numeric_ts (&e
->ts
))
77 must_be (e
, n
, "a numeric type");
83 /* Check that an expression is integer or real. */
86 int_or_real_check (gfc_expr
* e
, int n
)
89 if (e
->ts
.type
!= BT_INTEGER
&& e
->ts
.type
!= BT_REAL
)
91 must_be (e
, n
, "INTEGER or REAL");
99 /* Check that the expression is an optional constant integer
100 and that it specifies a valid kind for that type. */
103 kind_check (gfc_expr
* k
, int n
, bt type
)
110 if (type_check (k
, n
, BT_INTEGER
) == FAILURE
)
113 if (k
->expr_type
!= EXPR_CONSTANT
)
115 must_be (k
, n
, "a constant");
119 if (gfc_extract_int (k
, &kind
) != NULL
120 || gfc_validate_kind (type
, kind
, true) < 0)
122 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type
),
131 /* Make sure the expression is a double precision real. */
134 double_check (gfc_expr
* d
, int n
)
136 if (type_check (d
, n
, BT_REAL
) == FAILURE
)
139 if (d
->ts
.kind
!= gfc_default_double_kind
)
141 must_be (d
, n
, "double precision");
149 /* Make sure the expression is a logical array. */
152 logical_array_check (gfc_expr
* array
, int n
)
155 if (array
->ts
.type
!= BT_LOGICAL
|| array
->rank
== 0)
157 must_be (array
, n
, "a logical array");
165 /* Make sure an expression is an array. */
168 array_check (gfc_expr
* e
, int n
)
174 must_be (e
, n
, "an array");
180 /* Make sure an expression is a scalar. */
183 scalar_check (gfc_expr
* e
, int n
)
189 must_be (e
, n
, "a scalar");
195 /* Make sure two expression have the same type. */
198 same_type_check (gfc_expr
* e
, int n
, gfc_expr
* f
, int m
)
202 if (gfc_compare_types (&e
->ts
, &f
->ts
))
205 sprintf (message
, "the same type and kind as '%s'",
206 gfc_current_intrinsic_arg
[n
]);
208 must_be (f
, m
, message
);
214 /* Make sure that an expression has a certain (nonzero) rank. */
217 rank_check (gfc_expr
* e
, int n
, int rank
)
224 sprintf (message
, "of rank %d", rank
);
226 must_be (e
, n
, message
);
232 /* Make sure a variable expression is not an optional dummy argument. */
235 nonoptional_check (gfc_expr
* e
, int n
)
238 if (e
->expr_type
== EXPR_VARIABLE
&& e
->symtree
->n
.sym
->attr
.optional
)
240 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
241 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
246 /* TODO: Recursive check on nonoptional variables? */
252 /* Check that an expression has a particular kind. */
255 kind_value_check (gfc_expr
* e
, int n
, int k
)
262 sprintf (message
, "of kind %d", k
);
264 must_be (e
, n
, message
);
269 /* Make sure an expression is a variable. */
272 variable_check (gfc_expr
* e
, int n
)
275 if ((e
->expr_type
== EXPR_VARIABLE
276 && e
->symtree
->n
.sym
->attr
.flavor
!= FL_PARAMETER
)
277 || (e
->expr_type
== EXPR_FUNCTION
278 && e
->symtree
->n
.sym
->result
== e
->symtree
->n
.sym
))
281 if (e
->expr_type
== EXPR_VARIABLE
282 && e
->symtree
->n
.sym
->attr
.intent
== INTENT_IN
)
284 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
285 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
290 must_be (e
, n
, "a variable");
296 /* Check the common DIM parameter for correctness. */
299 dim_check (gfc_expr
* dim
, int n
, int optional
)
307 if (nonoptional_check (dim
, n
) == FAILURE
)
315 gfc_error ("Missing DIM parameter in intrinsic '%s' at %L",
316 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
320 if (type_check (dim
, n
, BT_INTEGER
) == FAILURE
)
323 if (scalar_check (dim
, n
) == FAILURE
)
330 /* If a DIM parameter is a constant, make sure that it is greater than
331 zero and less than or equal to the rank of the given array. If
332 allow_assumed is zero then dim must be less than the rank of the array
333 for assumed size arrays. */
336 dim_rank_check (gfc_expr
* dim
, gfc_expr
* array
, int allow_assumed
)
341 if (dim
->expr_type
!= EXPR_CONSTANT
|| array
->expr_type
!= EXPR_VARIABLE
)
344 ar
= gfc_find_array_ref (array
);
346 if (ar
->as
->type
== AS_ASSUMED_SIZE
&& !allow_assumed
)
349 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
350 || mpz_cmp_ui (dim
->value
.integer
, rank
) > 0)
352 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
353 "dimension index", gfc_current_intrinsic
, &dim
->where
);
362 /***** Check functions *****/
364 /* Check subroutine suitable for intrinsics taking a real argument and
365 a kind argument for the result. */
368 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
)
385 return check_a_kind (a
, kind
, BT_INTEGER
);
388 /* Check subroutine suitable for aint, anint. */
391 gfc_check_a_xkind (gfc_expr
* a
, gfc_expr
* kind
)
394 return check_a_kind (a
, kind
, BT_REAL
);
398 gfc_check_abs (gfc_expr
* a
)
401 if (numeric_check (a
, 0) == FAILURE
)
409 gfc_check_all_any (gfc_expr
* mask
, gfc_expr
* dim
)
412 if (logical_array_check (mask
, 0) == FAILURE
)
415 if (dim_check (dim
, 1, 1) == FAILURE
)
423 gfc_check_allocated (gfc_expr
* array
)
426 if (variable_check (array
, 0) == FAILURE
)
429 if (array_check (array
, 0) == FAILURE
)
432 if (!array
->symtree
->n
.sym
->attr
.allocatable
)
434 must_be (array
, 0, "ALLOCATABLE");
442 /* Common check function where the first argument must be real or
443 integer and the second argument must be the same as the first. */
446 gfc_check_a_p (gfc_expr
* a
, gfc_expr
* p
)
449 if (int_or_real_check (a
, 0) == FAILURE
)
452 if (same_type_check (a
, 0, p
, 1) == FAILURE
)
460 gfc_check_associated (gfc_expr
* pointer
, gfc_expr
* target
)
462 symbol_attribute attr
;
466 if (variable_check (pointer
, 0) == FAILURE
)
469 attr
= gfc_variable_attr (pointer
, NULL
);
472 must_be (pointer
, 0, "a POINTER");
479 /* Target argument is optional. */
480 if (target
->expr_type
== EXPR_NULL
)
482 gfc_error ("NULL pointer at %L is not permitted as actual argument "
483 "of '%s' intrinsic function",
484 &target
->where
, gfc_current_intrinsic
);
488 attr
= gfc_variable_attr (target
, NULL
);
489 if (!attr
.pointer
&& !attr
.target
)
491 must_be (target
, 1, "a POINTER or a TARGET");
496 if (same_type_check (pointer
, 0, target
, 1) == FAILURE
)
498 if (rank_check (target
, 0, pointer
->rank
) == FAILURE
)
500 if (target
->rank
> 0)
502 for (i
= 0; i
< target
->rank
; i
++)
503 if (target
->ref
->u
.ar
.dimen_type
[i
] == DIMEN_VECTOR
)
505 gfc_error ("Array section with a vector subscript at %L shall not "
506 "be the target of an pointer",
517 gfc_check_atan2 (gfc_expr
* y
, gfc_expr
* x
)
519 if (type_check (y
, 0, BT_REAL
) == FAILURE
)
521 if (same_type_check (y
, 0, x
, 1) == FAILURE
)
528 /* BESJN and BESYN functions. */
531 gfc_check_besn (gfc_expr
* n
, gfc_expr
* x
)
534 if (scalar_check (n
, 0) == FAILURE
)
537 if (type_check (n
, 0, BT_INTEGER
) == FAILURE
)
540 if (scalar_check (x
, 1) == FAILURE
)
543 if (type_check (x
, 1, BT_REAL
) == FAILURE
)
551 gfc_check_btest (gfc_expr
* i
, gfc_expr
* pos
)
554 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
556 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
564 gfc_check_char (gfc_expr
* i
, gfc_expr
* kind
)
567 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
569 if (kind_check (kind
, 1, BT_CHARACTER
) == FAILURE
)
577 gfc_check_cmplx (gfc_expr
* x
, gfc_expr
* y
, gfc_expr
* kind
)
580 if (numeric_check (x
, 0) == FAILURE
)
585 if (numeric_check (y
, 1) == FAILURE
)
588 if (x
->ts
.type
== BT_COMPLEX
)
590 must_be (y
, 1, "not be present if 'x' is COMPLEX");
595 if (kind_check (kind
, 2, BT_COMPLEX
) == FAILURE
)
603 gfc_check_count (gfc_expr
* mask
, gfc_expr
* dim
)
606 if (logical_array_check (mask
, 0) == FAILURE
)
608 if (dim_check (dim
, 1, 1) == FAILURE
)
616 gfc_check_cshift (gfc_expr
* array
, gfc_expr
* shift
, gfc_expr
* dim
)
619 if (array_check (array
, 0) == FAILURE
)
622 if (array
->rank
== 1)
624 if (scalar_check (shift
, 1) == FAILURE
)
629 /* TODO: more requirements on shift parameter. */
632 if (dim_check (dim
, 2, 1) == FAILURE
)
640 gfc_check_dcmplx (gfc_expr
* x
, gfc_expr
* y
)
643 if (numeric_check (x
, 0) == FAILURE
)
648 if (numeric_check (y
, 1) == FAILURE
)
651 if (x
->ts
.type
== BT_COMPLEX
)
653 must_be (y
, 1, "not be present if 'x' is COMPLEX");
663 gfc_check_dble (gfc_expr
* x
)
666 if (numeric_check (x
, 0) == FAILURE
)
674 gfc_check_digits (gfc_expr
* x
)
677 if (int_or_real_check (x
, 0) == FAILURE
)
685 gfc_check_dot_product (gfc_expr
* vector_a
, gfc_expr
* vector_b
)
688 switch (vector_a
->ts
.type
)
691 if (type_check (vector_b
, 1, BT_LOGICAL
) == FAILURE
)
698 if (numeric_check (vector_b
, 1) == FAILURE
)
703 must_be (vector_a
, 0, "numeric or LOGICAL");
707 if (rank_check (vector_a
, 0, 1) == FAILURE
)
710 if (rank_check (vector_b
, 1, 1) == FAILURE
)
718 gfc_check_eoshift (gfc_expr
* array
, gfc_expr
* shift
, gfc_expr
* boundary
,
722 if (array_check (array
, 0) == FAILURE
)
725 if (type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
728 if (array
->rank
== 1)
730 if (scalar_check (shift
, 2) == FAILURE
)
735 /* TODO: more weird restrictions on shift. */
738 if (boundary
!= NULL
)
740 if (same_type_check (array
, 0, boundary
, 2) == FAILURE
)
743 /* TODO: more restrictions on boundary. */
746 if (dim_check (dim
, 1, 1) == FAILURE
)
753 /* This is used for the g77 one-argument Bessel functions, and the
757 gfc_check_g77_math1 (gfc_expr
* x
)
760 if (scalar_check (x
, 0) == FAILURE
)
763 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
771 gfc_check_huge (gfc_expr
* x
)
774 if (int_or_real_check (x
, 0) == FAILURE
)
781 /* Check that the single argument is an integer. */
784 gfc_check_i (gfc_expr
* i
)
787 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
795 gfc_check_iand (gfc_expr
* i
, gfc_expr
* j
)
798 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
799 || type_check (j
, 1, BT_INTEGER
) == FAILURE
)
802 if (same_type_check (i
, 0, j
, 1) == FAILURE
)
810 gfc_check_ibclr (gfc_expr
* i
, gfc_expr
* pos
)
813 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
814 || type_check (pos
, 1, BT_INTEGER
) == FAILURE
815 || kind_value_check (pos
, 1, gfc_default_integer_kind
) == FAILURE
)
823 gfc_check_ibits (gfc_expr
* i
, gfc_expr
* pos
, gfc_expr
* len
)
826 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
827 || type_check (pos
, 1, BT_INTEGER
) == FAILURE
828 || kind_value_check (pos
, 1, gfc_default_integer_kind
) == FAILURE
829 || type_check (len
, 2, BT_INTEGER
) == FAILURE
)
837 gfc_check_ibset (gfc_expr
* i
, gfc_expr
* pos
)
840 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
841 || type_check (pos
, 1, BT_INTEGER
) == FAILURE
842 || kind_value_check (pos
, 1, gfc_default_integer_kind
) == FAILURE
)
850 gfc_check_idnint (gfc_expr
* a
)
853 if (double_check (a
, 0) == FAILURE
)
861 gfc_check_ieor (gfc_expr
* i
, gfc_expr
* j
)
864 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
865 || type_check (j
, 1, BT_INTEGER
) == FAILURE
)
868 if (same_type_check (i
, 0, j
, 1) == FAILURE
)
876 gfc_check_index (gfc_expr
* string
, gfc_expr
* substring
, gfc_expr
* back
)
879 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
880 || type_check (substring
, 1, BT_CHARACTER
) == FAILURE
)
884 if (back
!= NULL
&& type_check (back
, 2, BT_LOGICAL
) == FAILURE
)
887 if (string
->ts
.kind
!= substring
->ts
.kind
)
889 must_be (substring
, 1, "the same kind as 'string'");
898 gfc_check_int (gfc_expr
* x
, gfc_expr
* kind
)
901 if (numeric_check (x
, 0) == FAILURE
902 || kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
910 gfc_check_ior (gfc_expr
* i
, gfc_expr
* j
)
913 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
914 || type_check (j
, 1, BT_INTEGER
) == FAILURE
)
917 if (same_type_check (i
, 0, j
, 1) == FAILURE
)
925 gfc_check_ishft (gfc_expr
* i
, gfc_expr
* shift
)
928 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
929 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
937 gfc_check_ishftc (gfc_expr
* i
, gfc_expr
* shift
, gfc_expr
* size
)
940 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
941 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
944 if (size
!= NULL
&& type_check (size
, 2, BT_INTEGER
) == FAILURE
)
952 gfc_check_kind (gfc_expr
* x
)
955 if (x
->ts
.type
== BT_DERIVED
)
957 must_be (x
, 0, "a non-derived type");
966 gfc_check_lbound (gfc_expr
* array
, gfc_expr
* dim
)
969 if (array_check (array
, 0) == FAILURE
)
974 if (dim_check (dim
, 1, 1) == FAILURE
)
977 if (dim_rank_check (dim
, array
, 1) == FAILURE
)
985 gfc_check_logical (gfc_expr
* a
, gfc_expr
* kind
)
988 if (type_check (a
, 0, BT_LOGICAL
) == FAILURE
)
990 if (kind_check (kind
, 1, BT_LOGICAL
) == FAILURE
)
997 /* Min/max family. */
1000 min_max_args (gfc_actual_arglist
* arg
)
1003 if (arg
== NULL
|| arg
->next
== NULL
)
1005 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1006 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
1015 check_rest (bt type
, int kind
, gfc_actual_arglist
* arg
)
1020 if (min_max_args (arg
) == FAILURE
)
1025 for (; arg
; arg
= arg
->next
, n
++)
1028 if (x
->ts
.type
!= type
|| x
->ts
.kind
!= kind
)
1030 if (x
->ts
.type
== type
)
1032 if (gfc_notify_std (GFC_STD_GNU
,
1033 "Extension: Different type kinds at %L", &x
->where
)
1039 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be %s(%d)",
1040 n
, gfc_current_intrinsic
, &x
->where
,
1041 gfc_basic_typename (type
), kind
);
1052 gfc_check_min_max (gfc_actual_arglist
* arg
)
1056 if (min_max_args (arg
) == FAILURE
)
1061 if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
1064 ("'a1' argument of '%s' intrinsic at %L must be INTEGER or REAL",
1065 gfc_current_intrinsic
, &x
->where
);
1069 return check_rest (x
->ts
.type
, x
->ts
.kind
, arg
);
1074 gfc_check_min_max_integer (gfc_actual_arglist
* arg
)
1077 return check_rest (BT_INTEGER
, gfc_default_integer_kind
, arg
);
1082 gfc_check_min_max_real (gfc_actual_arglist
* arg
)
1085 return check_rest (BT_REAL
, gfc_default_real_kind
, arg
);
1090 gfc_check_min_max_double (gfc_actual_arglist
* arg
)
1093 return check_rest (BT_REAL
, gfc_default_double_kind
, arg
);
1096 /* End of min/max family. */
1100 gfc_check_matmul (gfc_expr
* matrix_a
, gfc_expr
* matrix_b
)
1103 if ((matrix_a
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_b
->ts
))
1105 must_be (matrix_a
, 0, "numeric or LOGICAL");
1109 if ((matrix_b
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_a
->ts
))
1111 must_be (matrix_b
, 0, "numeric or LOGICAL");
1115 switch (matrix_a
->rank
)
1118 if (rank_check (matrix_b
, 1, 2) == FAILURE
)
1123 if (matrix_b
->rank
== 2)
1125 if (rank_check (matrix_b
, 1, 1) == FAILURE
)
1130 must_be (matrix_a
, 0, "of rank 1 or 2");
1138 /* Whoever came up with this interface was probably on something.
1139 The possibilities for the occupation of the second and third
1146 NULL MASK minloc(array, mask=m)
1149 I.e. in the case of minloc(array,mask), mask will be in the second
1150 position of the argument list and we'll have to fix that up. */
1153 gfc_check_minloc_maxloc (gfc_actual_arglist
* ap
)
1155 gfc_expr
*a
, *m
, *d
;
1158 if (int_or_real_check (a
, 0) == FAILURE
1159 || array_check (a
, 0) == FAILURE
)
1163 m
= ap
->next
->next
->expr
;
1165 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
1166 && ap
->next
->name
[0] == '\0')
1171 ap
->next
->expr
= NULL
;
1172 ap
->next
->next
->expr
= m
;
1176 && (scalar_check (d
, 1) == FAILURE
1177 || type_check (d
, 1, BT_INTEGER
) == FAILURE
))
1180 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
1187 /* Similar to minloc/maxloc, the argument list might need to be
1188 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1189 difference is that MINLOC/MAXLOC take an additional KIND argument.
1190 The possibilities are:
1196 NULL MASK minval(array, mask=m)
1199 I.e. in the case of minval(array,mask), mask will be in the second
1200 position of the argument list and we'll have to fix that up. */
1203 check_reduction (gfc_actual_arglist
* ap
)
1208 m
= ap
->next
->next
->expr
;
1210 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
1211 && ap
->next
->name
[0] == '\0')
1216 ap
->next
->expr
= NULL
;
1217 ap
->next
->next
->expr
= m
;
1221 && (scalar_check (d
, 1) == FAILURE
1222 || type_check (d
, 1, BT_INTEGER
) == FAILURE
))
1225 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
1233 gfc_check_minval_maxval (gfc_actual_arglist
* ap
)
1236 if (int_or_real_check (ap
->expr
, 0) == FAILURE
1237 || array_check (ap
->expr
, 0) == FAILURE
)
1240 return check_reduction (ap
);
1245 gfc_check_product_sum (gfc_actual_arglist
* ap
)
1248 if (numeric_check (ap
->expr
, 0) == FAILURE
1249 || array_check (ap
->expr
, 0) == FAILURE
)
1252 return check_reduction (ap
);
1257 gfc_check_merge (gfc_expr
* tsource
, gfc_expr
* fsource
, gfc_expr
* mask
)
1260 if (same_type_check (tsource
, 0, fsource
, 1) == FAILURE
)
1263 if (type_check (mask
, 2, BT_LOGICAL
) == FAILURE
)
1271 gfc_check_nearest (gfc_expr
* x
, gfc_expr
* s
)
1274 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1277 if (type_check (s
, 1, BT_REAL
) == FAILURE
)
1285 gfc_check_null (gfc_expr
* mold
)
1287 symbol_attribute attr
;
1292 if (variable_check (mold
, 0) == FAILURE
)
1295 attr
= gfc_variable_attr (mold
, NULL
);
1299 must_be (mold
, 0, "a POINTER");
1308 gfc_check_pack (gfc_expr
* array
, gfc_expr
* mask
, gfc_expr
* vector
)
1311 if (array_check (array
, 0) == FAILURE
)
1314 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
1317 if (mask
->rank
!= 0 && mask
->rank
!= array
->rank
)
1319 must_be (array
, 0, "conformable with 'mask' argument");
1325 if (same_type_check (array
, 0, vector
, 2) == FAILURE
)
1328 if (rank_check (vector
, 2, 1) == FAILURE
)
1331 /* TODO: More constraints here. */
1339 gfc_check_precision (gfc_expr
* x
)
1342 if (x
->ts
.type
!= BT_REAL
&& x
->ts
.type
!= BT_COMPLEX
)
1344 must_be (x
, 0, "of type REAL or COMPLEX");
1353 gfc_check_present (gfc_expr
* a
)
1357 if (variable_check (a
, 0) == FAILURE
)
1360 sym
= a
->symtree
->n
.sym
;
1361 if (!sym
->attr
.dummy
)
1363 must_be (a
, 0, "a dummy variable");
1367 if (!sym
->attr
.optional
)
1369 must_be (a
, 0, "an OPTIONAL dummy variable");
1378 gfc_check_radix (gfc_expr
* x
)
1381 if (int_or_real_check (x
, 0) == FAILURE
)
1389 gfc_check_range (gfc_expr
* x
)
1392 if (numeric_check (x
, 0) == FAILURE
)
1399 /* real, float, sngl. */
1401 gfc_check_real (gfc_expr
* a
, gfc_expr
* kind
)
1404 if (numeric_check (a
, 0) == FAILURE
)
1407 if (kind_check (kind
, 1, BT_REAL
) == FAILURE
)
1415 gfc_check_repeat (gfc_expr
* x
, gfc_expr
* y
)
1418 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
1421 if (scalar_check (x
, 0) == FAILURE
)
1424 if (type_check (y
, 0, BT_INTEGER
) == FAILURE
)
1427 if (scalar_check (y
, 1) == FAILURE
)
1435 gfc_check_reshape (gfc_expr
* source
, gfc_expr
* shape
,
1436 gfc_expr
* pad
, gfc_expr
* order
)
1441 if (array_check (source
, 0) == FAILURE
)
1444 if (rank_check (shape
, 1, 1) == FAILURE
)
1447 if (type_check (shape
, 1, BT_INTEGER
) == FAILURE
)
1450 if (gfc_array_size (shape
, &size
) != SUCCESS
)
1452 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
1453 "array of constant size", &shape
->where
);
1457 m
= mpz_cmp_ui (size
, GFC_MAX_DIMENSIONS
);
1463 ("'shape' argument of 'reshape' intrinsic at %L has more than "
1464 stringize (GFC_MAX_DIMENSIONS
) " elements", &shape
->where
);
1470 if (same_type_check (source
, 0, pad
, 2) == FAILURE
)
1472 if (array_check (pad
, 2) == FAILURE
)
1476 if (order
!= NULL
&& array_check (order
, 3) == FAILURE
)
1484 gfc_check_scale (gfc_expr
* x
, gfc_expr
* i
)
1487 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1490 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
1498 gfc_check_scan (gfc_expr
* x
, gfc_expr
* y
, gfc_expr
* z
)
1501 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
1504 if (type_check (y
, 1, BT_CHARACTER
) == FAILURE
)
1507 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
1510 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
1518 gfc_check_selected_real_kind (gfc_expr
* p
, gfc_expr
* r
)
1521 if (p
== NULL
&& r
== NULL
)
1523 gfc_error ("Missing arguments to %s intrinsic at %L",
1524 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
1529 if (p
!= NULL
&& type_check (p
, 0, BT_INTEGER
) == FAILURE
)
1532 if (r
!= NULL
&& type_check (r
, 1, BT_INTEGER
) == FAILURE
)
1540 gfc_check_set_exponent (gfc_expr
* x
, gfc_expr
* i
)
1543 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1546 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
1554 gfc_check_shape (gfc_expr
* source
)
1558 if (source
->rank
== 0 || source
->expr_type
!= EXPR_VARIABLE
)
1561 ar
= gfc_find_array_ref (source
);
1563 if (ar
->as
&& ar
->as
->type
== AS_ASSUMED_SIZE
)
1565 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
1566 "an assumed size array", &source
->where
);
1575 gfc_check_size (gfc_expr
* array
, gfc_expr
* dim
)
1578 if (array_check (array
, 0) == FAILURE
)
1583 if (type_check (dim
, 1, BT_INTEGER
) == FAILURE
)
1586 if (kind_value_check (dim
, 1, gfc_default_integer_kind
) == FAILURE
)
1589 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
1598 gfc_check_sign (gfc_expr
* a
, gfc_expr
* b
)
1601 if (int_or_real_check (a
, 0) == FAILURE
)
1604 if (same_type_check (a
, 0, b
, 1) == FAILURE
)
1612 gfc_check_spread (gfc_expr
* source
, gfc_expr
* dim
, gfc_expr
* ncopies
)
1615 if (source
->rank
>= GFC_MAX_DIMENSIONS
)
1617 must_be (source
, 0, "less than rank " stringize (GFC_MAX_DIMENSIONS
));
1621 if (dim_check (dim
, 1, 0) == FAILURE
)
1624 if (type_check (ncopies
, 2, BT_INTEGER
) == FAILURE
)
1626 if (scalar_check (ncopies
, 2) == FAILURE
)
1634 gfc_check_transfer (gfc_expr
* source ATTRIBUTE_UNUSED
,
1635 gfc_expr
* mold ATTRIBUTE_UNUSED
,
1641 if (type_check (size
, 2, BT_INTEGER
) == FAILURE
)
1644 if (scalar_check (size
, 2) == FAILURE
)
1647 if (nonoptional_check (size
, 2) == FAILURE
)
1656 gfc_check_transpose (gfc_expr
* matrix
)
1659 if (rank_check (matrix
, 0, 2) == FAILURE
)
1667 gfc_check_ubound (gfc_expr
* array
, gfc_expr
* dim
)
1670 if (array_check (array
, 0) == FAILURE
)
1675 if (dim_check (dim
, 1, 1) == FAILURE
)
1678 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
1686 gfc_check_unpack (gfc_expr
* vector
, gfc_expr
* mask
, gfc_expr
* field
)
1689 if (rank_check (vector
, 0, 1) == FAILURE
)
1692 if (array_check (mask
, 1) == FAILURE
)
1695 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
1698 if (same_type_check (vector
, 0, field
, 2) == FAILURE
)
1706 gfc_check_verify (gfc_expr
* x
, gfc_expr
* y
, gfc_expr
* z
)
1709 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
1712 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
1715 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
1723 gfc_check_trim (gfc_expr
* x
)
1725 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
1728 if (scalar_check (x
, 0) == FAILURE
)
1735 /* Common check function for the half a dozen intrinsics that have a
1736 single real argument. */
1739 gfc_check_x (gfc_expr
* x
)
1742 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1749 /************* Check functions for intrinsic subroutines *************/
1752 gfc_check_cpu_time (gfc_expr
* time
)
1755 if (scalar_check (time
, 0) == FAILURE
)
1758 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
1761 if (variable_check (time
, 0) == FAILURE
)
1769 gfc_check_date_and_time (gfc_expr
* date
, gfc_expr
* time
,
1770 gfc_expr
* zone
, gfc_expr
* values
)
1775 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
1777 if (scalar_check (date
, 0) == FAILURE
)
1779 if (variable_check (date
, 0) == FAILURE
)
1785 if (type_check (time
, 1, BT_CHARACTER
) == FAILURE
)
1787 if (scalar_check (time
, 1) == FAILURE
)
1789 if (variable_check (time
, 1) == FAILURE
)
1795 if (type_check (zone
, 2, BT_CHARACTER
) == FAILURE
)
1797 if (scalar_check (zone
, 2) == FAILURE
)
1799 if (variable_check (zone
, 2) == FAILURE
)
1805 if (type_check (values
, 3, BT_INTEGER
) == FAILURE
)
1807 if (array_check (values
, 3) == FAILURE
)
1809 if (rank_check (values
, 3, 1) == FAILURE
)
1811 if (variable_check (values
, 3) == FAILURE
)
1820 gfc_check_mvbits (gfc_expr
* from
, gfc_expr
* frompos
, gfc_expr
* len
,
1821 gfc_expr
* to
, gfc_expr
* topos
)
1824 if (type_check (from
, 0, BT_INTEGER
) == FAILURE
)
1827 if (type_check (frompos
, 1, BT_INTEGER
) == FAILURE
)
1830 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
1833 if (same_type_check (from
, 0, to
, 3) == FAILURE
)
1836 if (variable_check (to
, 3) == FAILURE
)
1839 if (type_check (topos
, 4, BT_INTEGER
) == FAILURE
)
1847 gfc_check_random_number (gfc_expr
* harvest
)
1850 if (type_check (harvest
, 0, BT_REAL
) == FAILURE
)
1853 if (variable_check (harvest
, 0) == FAILURE
)
1861 gfc_check_random_seed (gfc_expr
* size
, gfc_expr
* put
, gfc_expr
* get
)
1866 if (scalar_check (size
, 0) == FAILURE
)
1869 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
1872 if (variable_check (size
, 0) == FAILURE
)
1875 if (kind_value_check (size
, 0, gfc_default_integer_kind
) == FAILURE
)
1883 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
,
1886 if (array_check (put
, 1) == FAILURE
)
1889 if (rank_check (put
, 1, 1) == FAILURE
)
1892 if (type_check (put
, 1, BT_INTEGER
) == FAILURE
)
1895 if (kind_value_check (put
, 1, gfc_default_integer_kind
) == FAILURE
)
1902 if (size
!= NULL
|| put
!= NULL
)
1903 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
,
1906 if (array_check (get
, 2) == FAILURE
)
1909 if (rank_check (get
, 2, 1) == FAILURE
)
1912 if (type_check (get
, 2, BT_INTEGER
) == FAILURE
)
1915 if (variable_check (get
, 2) == FAILURE
)
1918 if (kind_value_check (get
, 2, gfc_default_integer_kind
) == FAILURE
)
1926 gfc_check_second_sub (gfc_expr
* time
)
1929 if (scalar_check (time
, 0) == FAILURE
)
1932 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
1935 if (kind_value_check(time
, 0, 4) == FAILURE
)
1942 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
1943 count, count_rate, and count_max are all optional arguments */
1946 gfc_check_system_clock (gfc_expr
* count
, gfc_expr
* count_rate
,
1947 gfc_expr
* count_max
)
1952 if (scalar_check (count
, 0) == FAILURE
)
1955 if (type_check (count
, 0, BT_INTEGER
) == FAILURE
)
1958 if (variable_check (count
, 0) == FAILURE
)
1962 if (count_rate
!= NULL
)
1964 if (scalar_check (count_rate
, 1) == FAILURE
)
1967 if (type_check (count_rate
, 1, BT_INTEGER
) == FAILURE
)
1970 if (variable_check (count_rate
, 1) == FAILURE
)
1973 if (count
!= NULL
&& same_type_check(count
, 0, count_rate
, 1) == FAILURE
)
1978 if (count_max
!= NULL
)
1980 if (scalar_check (count_max
, 2) == FAILURE
)
1983 if (type_check (count_max
, 2, BT_INTEGER
) == FAILURE
)
1986 if (variable_check (count_max
, 2) == FAILURE
)
1989 if (count
!= NULL
&& same_type_check(count
, 0, count_max
, 2) == FAILURE
)
1992 if (count_rate
!= NULL
1993 && same_type_check(count_rate
, 1, count_max
, 2) == FAILURE
)
2002 gfc_check_irand (gfc_expr
* x
)
2007 if (scalar_check (x
, 0) == FAILURE
)
2010 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
2013 if (kind_value_check(x
, 0, 4) == FAILURE
)
2020 gfc_check_rand (gfc_expr
* x
)
2025 if (scalar_check (x
, 0) == FAILURE
)
2028 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
2031 if (kind_value_check(x
, 0, 4) == FAILURE
)
2038 gfc_check_srand (gfc_expr
* x
)
2040 if (scalar_check (x
, 0) == FAILURE
)
2043 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
2046 if (kind_value_check(x
, 0, 4) == FAILURE
)
2053 gfc_check_etime (gfc_expr
* x
)
2055 if (array_check (x
, 0) == FAILURE
)
2058 if (rank_check (x
, 0, 1) == FAILURE
)
2061 if (variable_check (x
, 0) == FAILURE
)
2064 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2067 if (kind_value_check(x
, 0, 4) == FAILURE
)
2074 gfc_check_etime_sub (gfc_expr
* values
, gfc_expr
* time
)
2076 if (array_check (values
, 0) == FAILURE
)
2079 if (rank_check (values
, 0, 1) == FAILURE
)
2082 if (variable_check (values
, 0) == FAILURE
)
2085 if (type_check (values
, 0, BT_REAL
) == FAILURE
)
2088 if (kind_value_check(values
, 0, 4) == FAILURE
)
2091 if (scalar_check (time
, 1) == FAILURE
)
2094 if (type_check (time
, 1, BT_REAL
) == FAILURE
)
2097 if (kind_value_check(time
, 1, 4) == FAILURE
)
2105 gfc_check_getcwd_sub (gfc_expr
* cwd
, gfc_expr
* status
)
2108 if (type_check (cwd
, 0, BT_CHARACTER
) == FAILURE
)
2111 if (scalar_check (status
, 1) == FAILURE
)
2114 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
2122 gfc_check_system_sub (gfc_expr
* cmd
, gfc_expr
* status
)
2124 if (type_check (cmd
, 0, BT_CHARACTER
) == FAILURE
)
2127 if (scalar_check (status
, 1) == FAILURE
)
2130 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
2133 if (kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
)