2 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
3 Free Software Foundation, Inc.
4 Contributed by Andy Vaught & Katherine Holcomb
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
23 /* These functions check to see if an argument list is compatible with
24 a particular intrinsic function or subroutine. Presence of
25 required arguments has already been established, the argument list
26 has been sorted into the right order and has NULL arguments in the
27 correct places for missing optional arguments. */
33 #include "intrinsic.h"
36 /* Make sure an expression is a scalar. */
39 scalar_check (gfc_expr
*e
, int n
)
44 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a scalar",
45 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &e
->where
);
51 /* Check the type of an expression. */
54 type_check (gfc_expr
*e
, int n
, bt type
)
56 if (e
->ts
.type
== type
)
59 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
60 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &e
->where
,
61 gfc_basic_typename (type
));
67 /* Check that the expression is a numeric type. */
70 numeric_check (gfc_expr
*e
, int n
)
72 if (gfc_numeric_ts (&e
->ts
))
75 /* If the expression has not got a type, check if its namespace can
76 offer a default type. */
77 if ((e
->expr_type
== EXPR_VARIABLE
|| e
->expr_type
== EXPR_VARIABLE
)
78 && e
->symtree
->n
.sym
->ts
.type
== BT_UNKNOWN
79 && gfc_set_default_type (e
->symtree
->n
.sym
, 0,
80 e
->symtree
->n
.sym
->ns
) == SUCCESS
81 && gfc_numeric_ts (&e
->symtree
->n
.sym
->ts
))
83 e
->ts
= e
->symtree
->n
.sym
->ts
;
87 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a numeric type",
88 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &e
->where
);
94 /* Check that an expression is integer or real. */
97 int_or_real_check (gfc_expr
*e
, int n
)
99 if (e
->ts
.type
!= BT_INTEGER
&& e
->ts
.type
!= BT_REAL
)
101 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
102 "or REAL", gfc_current_intrinsic_arg
[n
],
103 gfc_current_intrinsic
, &e
->where
);
111 /* Check that an expression is real or complex. */
114 real_or_complex_check (gfc_expr
*e
, int n
)
116 if (e
->ts
.type
!= BT_REAL
&& e
->ts
.type
!= BT_COMPLEX
)
118 gfc_error ("'%s' argument of '%s' intrinsic at %L must be REAL "
119 "or COMPLEX", gfc_current_intrinsic_arg
[n
],
120 gfc_current_intrinsic
, &e
->where
);
128 /* Check that the expression is an optional constant integer
129 and that it specifies a valid kind for that type. */
132 kind_check (gfc_expr
*k
, int n
, bt type
)
139 if (type_check (k
, n
, BT_INTEGER
) == FAILURE
)
142 if (scalar_check (k
, n
) == FAILURE
)
145 if (k
->expr_type
!= EXPR_CONSTANT
)
147 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
148 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
153 if (gfc_extract_int (k
, &kind
) != NULL
154 || gfc_validate_kind (type
, kind
, true) < 0)
156 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type
),
165 /* Make sure the expression is a double precision real. */
168 double_check (gfc_expr
*d
, int n
)
170 if (type_check (d
, n
, BT_REAL
) == FAILURE
)
173 if (d
->ts
.kind
!= gfc_default_double_kind
)
175 gfc_error ("'%s' argument of '%s' intrinsic at %L must be double "
176 "precision", gfc_current_intrinsic_arg
[n
],
177 gfc_current_intrinsic
, &d
->where
);
185 /* Make sure the expression is a logical array. */
188 logical_array_check (gfc_expr
*array
, int n
)
190 if (array
->ts
.type
!= BT_LOGICAL
|| array
->rank
== 0)
192 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a logical "
193 "array", gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
202 /* Make sure an expression is an array. */
205 array_check (gfc_expr
*e
, int n
)
210 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array",
211 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &e
->where
);
217 /* Make sure two expressions have the same type. */
220 same_type_check (gfc_expr
*e
, int n
, gfc_expr
*f
, int m
)
222 if (gfc_compare_types (&e
->ts
, &f
->ts
))
225 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same type "
226 "and kind as '%s'", gfc_current_intrinsic_arg
[m
],
227 gfc_current_intrinsic
, &f
->where
, gfc_current_intrinsic_arg
[n
]);
233 /* Make sure that an expression has a certain (nonzero) rank. */
236 rank_check (gfc_expr
*e
, int n
, int rank
)
241 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank %d",
242 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
249 /* Make sure a variable expression is not an optional dummy argument. */
252 nonoptional_check (gfc_expr
*e
, int n
)
254 if (e
->expr_type
== EXPR_VARIABLE
&& e
->symtree
->n
.sym
->attr
.optional
)
256 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
257 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
261 /* TODO: Recursive check on nonoptional variables? */
267 /* Check that an expression has a particular kind. */
270 kind_value_check (gfc_expr
*e
, int n
, int k
)
275 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of kind %d",
276 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
283 /* Make sure an expression is a variable. */
286 variable_check (gfc_expr
*e
, int n
)
288 if ((e
->expr_type
== EXPR_VARIABLE
289 && e
->symtree
->n
.sym
->attr
.flavor
!= FL_PARAMETER
)
290 || (e
->expr_type
== EXPR_FUNCTION
291 && e
->symtree
->n
.sym
->result
== e
->symtree
->n
.sym
))
294 if (e
->expr_type
== EXPR_VARIABLE
295 && e
->symtree
->n
.sym
->attr
.intent
== INTENT_IN
)
297 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
298 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
303 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a variable",
304 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &e
->where
);
310 /* Check the common DIM parameter for correctness. */
313 dim_check (gfc_expr
*dim
, int n
, bool optional
)
320 gfc_error ("Missing DIM parameter in intrinsic '%s' at %L",
321 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
325 if (type_check (dim
, n
, BT_INTEGER
) == FAILURE
)
328 if (scalar_check (dim
, n
) == FAILURE
)
331 if (!optional
&& nonoptional_check (dim
, n
) == FAILURE
)
338 /* If a DIM parameter is a constant, make sure that it is greater than
339 zero and less than or equal to the rank of the given array. If
340 allow_assumed is zero then dim must be less than the rank of the array
341 for assumed size arrays. */
344 dim_rank_check (gfc_expr
*dim
, gfc_expr
*array
, int allow_assumed
)
349 if (dim
->expr_type
!= EXPR_CONSTANT
|| array
->expr_type
!= EXPR_VARIABLE
)
352 ar
= gfc_find_array_ref (array
);
354 if (ar
->as
->type
== AS_ASSUMED_SIZE
356 && ar
->type
!= AR_ELEMENT
357 && ar
->type
!= AR_SECTION
)
360 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
361 || mpz_cmp_ui (dim
->value
.integer
, rank
) > 0)
363 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
364 "dimension index", gfc_current_intrinsic
, &dim
->where
);
373 /* Compare the size of a along dimension ai with the size of b along
374 dimension bi, returning 0 if they are known not to be identical,
375 and 1 if they are identical, or if this cannot be determined. */
378 identical_dimen_shape (gfc_expr
*a
, int ai
, gfc_expr
*b
, int bi
)
380 mpz_t a_size
, b_size
;
383 gcc_assert (a
->rank
> ai
);
384 gcc_assert (b
->rank
> bi
);
388 if (gfc_array_dimen_size (a
, ai
, &a_size
) == SUCCESS
)
390 if (gfc_array_dimen_size (b
, bi
, &b_size
) == SUCCESS
)
392 if (mpz_cmp (a_size
, b_size
) != 0)
403 /* Check whether two character expressions have the same length;
404 returns SUCCESS if they have or if the length cannot be determined. */
407 check_same_strlen (const gfc_expr
*a
, const gfc_expr
*b
, const char *name
)
412 if (a
->ts
.cl
&& a
->ts
.cl
->length
413 && a
->ts
.cl
->length
->expr_type
== EXPR_CONSTANT
)
414 len_a
= mpz_get_si (a
->ts
.cl
->length
->value
.integer
);
415 else if (a
->expr_type
== EXPR_CONSTANT
416 && (a
->ts
.cl
== NULL
|| a
->ts
.cl
->length
== NULL
))
417 len_a
= a
->value
.character
.length
;
421 if (b
->ts
.cl
&& b
->ts
.cl
->length
422 && b
->ts
.cl
->length
->expr_type
== EXPR_CONSTANT
)
423 len_b
= mpz_get_si (b
->ts
.cl
->length
->value
.integer
);
424 else if (b
->expr_type
== EXPR_CONSTANT
425 && (b
->ts
.cl
== NULL
|| b
->ts
.cl
->length
== NULL
))
426 len_b
= b
->value
.character
.length
;
433 gfc_error ("Unequal character lengths (%ld and %ld) in %s intrinsic "
434 "at %L", len_a
, len_b
, name
, &a
->where
);
439 /***** Check functions *****/
441 /* Check subroutine suitable for intrinsics taking a real argument and
442 a kind argument for the result. */
445 check_a_kind (gfc_expr
*a
, gfc_expr
*kind
, bt type
)
447 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
449 if (kind_check (kind
, 1, type
) == FAILURE
)
456 /* Check subroutine suitable for ceiling, floor and nint. */
459 gfc_check_a_ikind (gfc_expr
*a
, gfc_expr
*kind
)
461 return check_a_kind (a
, kind
, BT_INTEGER
);
465 /* Check subroutine suitable for aint, anint. */
468 gfc_check_a_xkind (gfc_expr
*a
, gfc_expr
*kind
)
470 return check_a_kind (a
, kind
, BT_REAL
);
475 gfc_check_abs (gfc_expr
*a
)
477 if (numeric_check (a
, 0) == FAILURE
)
485 gfc_check_achar (gfc_expr
*a
, gfc_expr
*kind
)
487 if (type_check (a
, 0, BT_INTEGER
) == FAILURE
)
489 if (kind_check (kind
, 1, BT_CHARACTER
) == FAILURE
)
497 gfc_check_access_func (gfc_expr
*name
, gfc_expr
*mode
)
499 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
500 || scalar_check (name
, 0) == FAILURE
)
503 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
504 || scalar_check (mode
, 1) == FAILURE
)
512 gfc_check_all_any (gfc_expr
*mask
, gfc_expr
*dim
)
514 if (logical_array_check (mask
, 0) == FAILURE
)
517 if (dim_check (dim
, 1, false) == FAILURE
)
525 gfc_check_allocated (gfc_expr
*array
)
527 symbol_attribute attr
;
529 if (variable_check (array
, 0) == FAILURE
)
532 attr
= gfc_variable_attr (array
, NULL
);
533 if (!attr
.allocatable
)
535 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
536 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic
,
541 if (array_check (array
, 0) == FAILURE
)
548 /* Common check function where the first argument must be real or
549 integer and the second argument must be the same as the first. */
552 gfc_check_a_p (gfc_expr
*a
, gfc_expr
*p
)
554 if (int_or_real_check (a
, 0) == FAILURE
)
557 if (a
->ts
.type
!= p
->ts
.type
)
559 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
560 "have the same type", gfc_current_intrinsic_arg
[0],
561 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
,
566 if (a
->ts
.kind
!= p
->ts
.kind
)
568 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
569 &p
->where
) == FAILURE
)
578 gfc_check_x_yd (gfc_expr
*x
, gfc_expr
*y
)
580 if (double_check (x
, 0) == FAILURE
|| double_check (y
, 1) == FAILURE
)
588 gfc_check_associated (gfc_expr
*pointer
, gfc_expr
*target
)
590 symbol_attribute attr
;
595 where
= &pointer
->where
;
597 if (pointer
->expr_type
== EXPR_VARIABLE
)
598 attr
= gfc_variable_attr (pointer
, NULL
);
599 else if (pointer
->expr_type
== EXPR_FUNCTION
)
600 attr
= pointer
->symtree
->n
.sym
->attr
;
601 else if (pointer
->expr_type
== EXPR_NULL
)
604 gcc_assert (0); /* Pointer must be a variable or a function. */
608 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
609 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic
,
614 /* Target argument is optional. */
618 where
= &target
->where
;
619 if (target
->expr_type
== EXPR_NULL
)
622 if (target
->expr_type
== EXPR_VARIABLE
)
623 attr
= gfc_variable_attr (target
, NULL
);
624 else if (target
->expr_type
== EXPR_FUNCTION
)
625 attr
= target
->symtree
->n
.sym
->attr
;
628 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
629 "or target VARIABLE or FUNCTION", gfc_current_intrinsic_arg
[1],
630 gfc_current_intrinsic
, &target
->where
);
634 if (!attr
.pointer
&& !attr
.target
)
636 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
637 "or a TARGET", gfc_current_intrinsic_arg
[1],
638 gfc_current_intrinsic
, &target
->where
);
643 if (same_type_check (pointer
, 0, target
, 1) == FAILURE
)
645 if (rank_check (target
, 0, pointer
->rank
) == FAILURE
)
647 if (target
->rank
> 0)
649 for (i
= 0; i
< target
->rank
; i
++)
650 if (target
->ref
->u
.ar
.dimen_type
[i
] == DIMEN_VECTOR
)
652 gfc_error ("Array section with a vector subscript at %L shall not "
653 "be the target of a pointer",
663 gfc_error ("NULL pointer at %L is not permitted as actual argument "
664 "of '%s' intrinsic function", where
, gfc_current_intrinsic
);
671 gfc_check_atan2 (gfc_expr
*y
, gfc_expr
*x
)
673 if (type_check (y
, 0, BT_REAL
) == FAILURE
)
675 if (same_type_check (y
, 0, x
, 1) == FAILURE
)
682 /* BESJN and BESYN functions. */
685 gfc_check_besn (gfc_expr
*n
, gfc_expr
*x
)
687 if (type_check (n
, 0, BT_INTEGER
) == FAILURE
)
690 if (type_check (x
, 1, BT_REAL
) == FAILURE
)
698 gfc_check_btest (gfc_expr
*i
, gfc_expr
*pos
)
700 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
702 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
710 gfc_check_char (gfc_expr
*i
, gfc_expr
*kind
)
712 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
714 if (kind_check (kind
, 1, BT_CHARACTER
) == FAILURE
)
722 gfc_check_chdir (gfc_expr
*dir
)
724 if (type_check (dir
, 0, BT_CHARACTER
) == FAILURE
)
732 gfc_check_chdir_sub (gfc_expr
*dir
, gfc_expr
*status
)
734 if (type_check (dir
, 0, BT_CHARACTER
) == FAILURE
)
740 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
743 if (scalar_check (status
, 1) == FAILURE
)
751 gfc_check_chmod (gfc_expr
*name
, gfc_expr
*mode
)
753 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
756 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
)
764 gfc_check_chmod_sub (gfc_expr
*name
, gfc_expr
*mode
, gfc_expr
*status
)
766 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
769 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
)
775 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
778 if (scalar_check (status
, 2) == FAILURE
)
786 gfc_check_cmplx (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*kind
)
788 if (numeric_check (x
, 0) == FAILURE
)
793 if (numeric_check (y
, 1) == FAILURE
)
796 if (x
->ts
.type
== BT_COMPLEX
)
798 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
799 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg
[1],
800 gfc_current_intrinsic
, &y
->where
);
805 if (kind_check (kind
, 2, BT_COMPLEX
) == FAILURE
)
813 gfc_check_complex (gfc_expr
*x
, gfc_expr
*y
)
815 if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
817 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
818 "or REAL", gfc_current_intrinsic_arg
[0],
819 gfc_current_intrinsic
, &x
->where
);
822 if (scalar_check (x
, 0) == FAILURE
)
825 if (y
->ts
.type
!= BT_INTEGER
&& y
->ts
.type
!= BT_REAL
)
827 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
828 "or REAL", gfc_current_intrinsic_arg
[1],
829 gfc_current_intrinsic
, &y
->where
);
832 if (scalar_check (y
, 1) == FAILURE
)
840 gfc_check_count (gfc_expr
*mask
, gfc_expr
*dim
, gfc_expr
*kind
)
842 if (logical_array_check (mask
, 0) == FAILURE
)
844 if (dim_check (dim
, 1, false) == FAILURE
)
846 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
848 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
849 "with KIND argument at %L",
850 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
858 gfc_check_cshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*dim
)
860 if (array_check (array
, 0) == FAILURE
)
863 if (array
->rank
== 1)
865 if (scalar_check (shift
, 1) == FAILURE
)
870 /* TODO: more requirements on shift parameter. */
873 /* FIXME (PR33317): Allow optional DIM=. */
874 if (dim_check (dim
, 2, false) == FAILURE
)
882 gfc_check_ctime (gfc_expr
*time
)
884 if (scalar_check (time
, 0) == FAILURE
)
887 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
894 try gfc_check_datan2 (gfc_expr
*y
, gfc_expr
*x
)
896 if (double_check (y
, 0) == FAILURE
|| double_check (x
, 1) == FAILURE
)
903 gfc_check_dcmplx (gfc_expr
*x
, gfc_expr
*y
)
905 if (numeric_check (x
, 0) == FAILURE
)
910 if (numeric_check (y
, 1) == FAILURE
)
913 if (x
->ts
.type
== BT_COMPLEX
)
915 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
916 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg
[1],
917 gfc_current_intrinsic
, &y
->where
);
927 gfc_check_dble (gfc_expr
*x
)
929 if (numeric_check (x
, 0) == FAILURE
)
937 gfc_check_digits (gfc_expr
*x
)
939 if (int_or_real_check (x
, 0) == FAILURE
)
947 gfc_check_dot_product (gfc_expr
*vector_a
, gfc_expr
*vector_b
)
949 switch (vector_a
->ts
.type
)
952 if (type_check (vector_b
, 1, BT_LOGICAL
) == FAILURE
)
959 if (numeric_check (vector_b
, 1) == FAILURE
)
964 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
965 "or LOGICAL", gfc_current_intrinsic_arg
[0],
966 gfc_current_intrinsic
, &vector_a
->where
);
970 if (rank_check (vector_a
, 0, 1) == FAILURE
)
973 if (rank_check (vector_b
, 1, 1) == FAILURE
)
976 if (! identical_dimen_shape (vector_a
, 0, vector_b
, 0))
978 gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
979 "intrinsic 'dot_product'", gfc_current_intrinsic_arg
[0],
980 gfc_current_intrinsic_arg
[1], &vector_a
->where
);
989 gfc_check_dprod (gfc_expr
*x
, gfc_expr
*y
)
991 if (type_check (x
, 0, BT_REAL
) == FAILURE
992 || type_check (y
, 1, BT_REAL
) == FAILURE
)
995 if (x
->ts
.kind
!= gfc_default_real_kind
)
997 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
998 "real", gfc_current_intrinsic_arg
[0],
999 gfc_current_intrinsic
, &x
->where
);
1003 if (y
->ts
.kind
!= gfc_default_real_kind
)
1005 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1006 "real", gfc_current_intrinsic_arg
[1],
1007 gfc_current_intrinsic
, &y
->where
);
1016 gfc_check_eoshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*boundary
,
1019 if (array_check (array
, 0) == FAILURE
)
1022 if (type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1025 if (array
->rank
== 1)
1027 if (scalar_check (shift
, 2) == FAILURE
)
1032 /* TODO: more weird restrictions on shift. */
1035 if (boundary
!= NULL
)
1037 if (same_type_check (array
, 0, boundary
, 2) == FAILURE
)
1040 /* TODO: more restrictions on boundary. */
1043 /* FIXME (PR33317): Allow optional DIM=. */
1044 if (dim_check (dim
, 4, false) == FAILURE
)
1051 /* A single complex argument. */
1054 gfc_check_fn_c (gfc_expr
*a
)
1056 if (type_check (a
, 0, BT_COMPLEX
) == FAILURE
)
1063 /* A single real argument. */
1066 gfc_check_fn_r (gfc_expr
*a
)
1068 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
1074 /* A single double argument. */
1077 gfc_check_fn_d (gfc_expr
*a
)
1079 if (double_check (a
, 0) == FAILURE
)
1085 /* A single real or complex argument. */
1088 gfc_check_fn_rc (gfc_expr
*a
)
1090 if (real_or_complex_check (a
, 0) == FAILURE
)
1098 gfc_check_fnum (gfc_expr
*unit
)
1100 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
1103 if (scalar_check (unit
, 0) == FAILURE
)
1111 gfc_check_huge (gfc_expr
*x
)
1113 if (int_or_real_check (x
, 0) == FAILURE
)
1120 /* Check that the single argument is an integer. */
1123 gfc_check_i (gfc_expr
*i
)
1125 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1133 gfc_check_iand (gfc_expr
*i
, gfc_expr
*j
)
1135 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1138 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1141 if (i
->ts
.kind
!= j
->ts
.kind
)
1143 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1144 &i
->where
) == FAILURE
)
1153 gfc_check_ibclr (gfc_expr
*i
, gfc_expr
*pos
)
1155 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1158 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
1166 gfc_check_ibits (gfc_expr
*i
, gfc_expr
*pos
, gfc_expr
*len
)
1168 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1171 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
1174 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
1182 gfc_check_ibset (gfc_expr
*i
, gfc_expr
*pos
)
1184 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1187 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
1195 gfc_check_ichar_iachar (gfc_expr
*c
, gfc_expr
*kind
)
1199 if (type_check (c
, 0, BT_CHARACTER
) == FAILURE
)
1202 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1205 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1206 "with KIND argument at %L",
1207 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1210 if (c
->expr_type
== EXPR_VARIABLE
|| c
->expr_type
== EXPR_SUBSTRING
)
1216 /* Substring references don't have the charlength set. */
1218 while (ref
&& ref
->type
!= REF_SUBSTRING
)
1221 gcc_assert (ref
== NULL
|| ref
->type
== REF_SUBSTRING
);
1225 /* Check that the argument is length one. Non-constant lengths
1226 can't be checked here, so assume they are ok. */
1227 if (c
->ts
.cl
&& c
->ts
.cl
->length
)
1229 /* If we already have a length for this expression then use it. */
1230 if (c
->ts
.cl
->length
->expr_type
!= EXPR_CONSTANT
)
1232 i
= mpz_get_si (c
->ts
.cl
->length
->value
.integer
);
1239 start
= ref
->u
.ss
.start
;
1240 end
= ref
->u
.ss
.end
;
1243 if (end
== NULL
|| end
->expr_type
!= EXPR_CONSTANT
1244 || start
->expr_type
!= EXPR_CONSTANT
)
1247 i
= mpz_get_si (end
->value
.integer
) + 1
1248 - mpz_get_si (start
->value
.integer
);
1256 gfc_error ("Argument of %s at %L must be of length one",
1257 gfc_current_intrinsic
, &c
->where
);
1266 gfc_check_idnint (gfc_expr
*a
)
1268 if (double_check (a
, 0) == FAILURE
)
1276 gfc_check_ieor (gfc_expr
*i
, gfc_expr
*j
)
1278 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1281 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1284 if (i
->ts
.kind
!= j
->ts
.kind
)
1286 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1287 &i
->where
) == FAILURE
)
1296 gfc_check_index (gfc_expr
*string
, gfc_expr
*substring
, gfc_expr
*back
,
1299 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
1300 || type_check (substring
, 1, BT_CHARACTER
) == FAILURE
)
1303 if (back
!= NULL
&& type_check (back
, 2, BT_LOGICAL
) == FAILURE
)
1306 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
1308 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1309 "with KIND argument at %L",
1310 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1313 if (string
->ts
.kind
!= substring
->ts
.kind
)
1315 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1316 "kind as '%s'", gfc_current_intrinsic_arg
[1],
1317 gfc_current_intrinsic
, &substring
->where
,
1318 gfc_current_intrinsic_arg
[0]);
1327 gfc_check_int (gfc_expr
*x
, gfc_expr
*kind
)
1329 if (numeric_check (x
, 0) == FAILURE
)
1332 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1340 gfc_check_intconv (gfc_expr
*x
)
1342 if (numeric_check (x
, 0) == FAILURE
)
1350 gfc_check_ior (gfc_expr
*i
, gfc_expr
*j
)
1352 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1355 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1358 if (i
->ts
.kind
!= j
->ts
.kind
)
1360 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1361 &i
->where
) == FAILURE
)
1370 gfc_check_ishft (gfc_expr
*i
, gfc_expr
*shift
)
1372 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
1373 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1381 gfc_check_ishftc (gfc_expr
*i
, gfc_expr
*shift
, gfc_expr
*size
)
1383 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
1384 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1387 if (size
!= NULL
&& type_check (size
, 2, BT_INTEGER
) == FAILURE
)
1395 gfc_check_kill (gfc_expr
*pid
, gfc_expr
*sig
)
1397 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
1400 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
1408 gfc_check_kill_sub (gfc_expr
*pid
, gfc_expr
*sig
, gfc_expr
*status
)
1410 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
1413 if (scalar_check (pid
, 0) == FAILURE
)
1416 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
1419 if (scalar_check (sig
, 1) == FAILURE
)
1425 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1428 if (scalar_check (status
, 2) == FAILURE
)
1436 gfc_check_kind (gfc_expr
*x
)
1438 if (x
->ts
.type
== BT_DERIVED
)
1440 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1441 "non-derived type", gfc_current_intrinsic_arg
[0],
1442 gfc_current_intrinsic
, &x
->where
);
1451 gfc_check_lbound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
1453 if (array_check (array
, 0) == FAILURE
)
1458 if (dim_check (dim
, 1, false) == FAILURE
)
1461 if (dim_rank_check (dim
, array
, 1) == FAILURE
)
1465 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
1467 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1468 "with KIND argument at %L",
1469 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1477 gfc_check_len_lentrim (gfc_expr
*s
, gfc_expr
*kind
)
1479 if (type_check (s
, 0, BT_CHARACTER
) == FAILURE
)
1482 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1484 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1485 "with KIND argument at %L",
1486 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1494 gfc_check_link (gfc_expr
*path1
, gfc_expr
*path2
)
1496 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1499 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1507 gfc_check_link_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
1509 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1512 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1518 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1521 if (scalar_check (status
, 2) == FAILURE
)
1529 gfc_check_loc (gfc_expr
*expr
)
1531 return variable_check (expr
, 0);
1536 gfc_check_symlnk (gfc_expr
*path1
, gfc_expr
*path2
)
1538 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1541 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1549 gfc_check_symlnk_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
1551 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1554 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1560 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1563 if (scalar_check (status
, 2) == FAILURE
)
1571 gfc_check_logical (gfc_expr
*a
, gfc_expr
*kind
)
1573 if (type_check (a
, 0, BT_LOGICAL
) == FAILURE
)
1575 if (kind_check (kind
, 1, BT_LOGICAL
) == FAILURE
)
1582 /* Min/max family. */
1585 min_max_args (gfc_actual_arglist
*arg
)
1587 if (arg
== NULL
|| arg
->next
== NULL
)
1589 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1590 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
1599 check_rest (bt type
, int kind
, gfc_actual_arglist
*arglist
)
1601 gfc_actual_arglist
*arg
, *tmp
;
1606 if (min_max_args (arglist
) == FAILURE
)
1609 for (arg
= arglist
, n
=1; arg
; arg
= arg
->next
, n
++)
1612 if (x
->ts
.type
!= type
|| x
->ts
.kind
!= kind
)
1614 if (x
->ts
.type
== type
)
1616 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type "
1617 "kinds at %L", &x
->where
) == FAILURE
)
1622 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
1623 "%s(%d)", n
, gfc_current_intrinsic
, &x
->where
,
1624 gfc_basic_typename (type
), kind
);
1629 for (tmp
= arglist
, m
=1; tmp
!= arg
; tmp
= tmp
->next
, m
++)
1632 snprintf (buffer
, 80, "arguments 'a%d' and 'a%d' for intrinsic '%s'",
1633 m
, n
, gfc_current_intrinsic
);
1634 if (gfc_check_conformance (buffer
, tmp
->expr
, x
) == FAILURE
)
1644 gfc_check_min_max (gfc_actual_arglist
*arg
)
1648 if (min_max_args (arg
) == FAILURE
)
1653 if (x
->ts
.type
== BT_CHARACTER
)
1655 if (gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1656 "with CHARACTER argument at %L",
1657 gfc_current_intrinsic
, &x
->where
) == FAILURE
)
1660 else if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
1662 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
1663 "REAL or CHARACTER", gfc_current_intrinsic
, &x
->where
);
1667 return check_rest (x
->ts
.type
, x
->ts
.kind
, arg
);
1672 gfc_check_min_max_integer (gfc_actual_arglist
*arg
)
1674 return check_rest (BT_INTEGER
, gfc_default_integer_kind
, arg
);
1679 gfc_check_min_max_real (gfc_actual_arglist
*arg
)
1681 return check_rest (BT_REAL
, gfc_default_real_kind
, arg
);
1686 gfc_check_min_max_double (gfc_actual_arglist
*arg
)
1688 return check_rest (BT_REAL
, gfc_default_double_kind
, arg
);
1692 /* End of min/max family. */
1695 gfc_check_malloc (gfc_expr
*size
)
1697 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
1700 if (scalar_check (size
, 0) == FAILURE
)
1708 gfc_check_matmul (gfc_expr
*matrix_a
, gfc_expr
*matrix_b
)
1710 if ((matrix_a
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_b
->ts
))
1712 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1713 "or LOGICAL", gfc_current_intrinsic_arg
[0],
1714 gfc_current_intrinsic
, &matrix_a
->where
);
1718 if ((matrix_b
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_a
->ts
))
1720 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1721 "or LOGICAL", gfc_current_intrinsic_arg
[1],
1722 gfc_current_intrinsic
, &matrix_b
->where
);
1726 switch (matrix_a
->rank
)
1729 if (rank_check (matrix_b
, 1, 2) == FAILURE
)
1731 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
1732 if (!identical_dimen_shape (matrix_a
, 0, matrix_b
, 0))
1734 gfc_error ("Different shape on dimension 1 for arguments '%s' "
1735 "and '%s' at %L for intrinsic matmul",
1736 gfc_current_intrinsic_arg
[0],
1737 gfc_current_intrinsic_arg
[1], &matrix_a
->where
);
1743 if (matrix_b
->rank
!= 2)
1745 if (rank_check (matrix_b
, 1, 1) == FAILURE
)
1748 /* matrix_b has rank 1 or 2 here. Common check for the cases
1749 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
1750 - matrix_a has shape (n,m) and matrix_b has shape (m). */
1751 if (!identical_dimen_shape (matrix_a
, 1, matrix_b
, 0))
1753 gfc_error ("Different shape on dimension 2 for argument '%s' and "
1754 "dimension 1 for argument '%s' at %L for intrinsic "
1755 "matmul", gfc_current_intrinsic_arg
[0],
1756 gfc_current_intrinsic_arg
[1], &matrix_a
->where
);
1762 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
1763 "1 or 2", gfc_current_intrinsic_arg
[0],
1764 gfc_current_intrinsic
, &matrix_a
->where
);
1772 /* Whoever came up with this interface was probably on something.
1773 The possibilities for the occupation of the second and third
1780 NULL MASK minloc(array, mask=m)
1783 I.e. in the case of minloc(array,mask), mask will be in the second
1784 position of the argument list and we'll have to fix that up. */
1787 gfc_check_minloc_maxloc (gfc_actual_arglist
*ap
)
1789 gfc_expr
*a
, *m
, *d
;
1792 if (int_or_real_check (a
, 0) == FAILURE
|| array_check (a
, 0) == FAILURE
)
1796 m
= ap
->next
->next
->expr
;
1798 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
1799 && ap
->next
->name
== NULL
)
1803 ap
->next
->expr
= NULL
;
1804 ap
->next
->next
->expr
= m
;
1807 if (d
&& dim_check (d
, 1, false) == FAILURE
)
1810 if (d
&& dim_rank_check (d
, a
, 0) == FAILURE
)
1813 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
1819 snprintf (buffer
, 80, "arguments '%s' and '%s' for intrinsic %s",
1820 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic_arg
[2],
1821 gfc_current_intrinsic
);
1822 if (gfc_check_conformance (buffer
, a
, m
) == FAILURE
)
1830 /* Similar to minloc/maxloc, the argument list might need to be
1831 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1832 difference is that MINLOC/MAXLOC take an additional KIND argument.
1833 The possibilities are:
1839 NULL MASK minval(array, mask=m)
1842 I.e. in the case of minval(array,mask), mask will be in the second
1843 position of the argument list and we'll have to fix that up. */
1846 check_reduction (gfc_actual_arglist
*ap
)
1848 gfc_expr
*a
, *m
, *d
;
1852 m
= ap
->next
->next
->expr
;
1854 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
1855 && ap
->next
->name
== NULL
)
1859 ap
->next
->expr
= NULL
;
1860 ap
->next
->next
->expr
= m
;
1863 if (d
&& dim_check (d
, 1, false) == FAILURE
)
1866 if (d
&& dim_rank_check (d
, a
, 0) == FAILURE
)
1869 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
1875 snprintf (buffer
, 80, "arguments '%s' and '%s' for intrinsic %s",
1876 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic_arg
[2],
1877 gfc_current_intrinsic
);
1878 if (gfc_check_conformance (buffer
, a
, m
) == FAILURE
)
1887 gfc_check_minval_maxval (gfc_actual_arglist
*ap
)
1889 if (int_or_real_check (ap
->expr
, 0) == FAILURE
1890 || array_check (ap
->expr
, 0) == FAILURE
)
1893 return check_reduction (ap
);
1898 gfc_check_product_sum (gfc_actual_arglist
*ap
)
1900 if (numeric_check (ap
->expr
, 0) == FAILURE
1901 || array_check (ap
->expr
, 0) == FAILURE
)
1904 return check_reduction (ap
);
1909 gfc_check_merge (gfc_expr
*tsource
, gfc_expr
*fsource
, gfc_expr
*mask
)
1911 if (same_type_check (tsource
, 0, fsource
, 1) == FAILURE
)
1914 if (type_check (mask
, 2, BT_LOGICAL
) == FAILURE
)
1917 if (tsource
->ts
.type
== BT_CHARACTER
)
1918 return check_same_strlen (tsource
, fsource
, "MERGE");
1925 gfc_check_move_alloc (gfc_expr
*from
, gfc_expr
*to
)
1927 symbol_attribute attr
;
1929 if (variable_check (from
, 0) == FAILURE
)
1932 if (array_check (from
, 0) == FAILURE
)
1935 attr
= gfc_variable_attr (from
, NULL
);
1936 if (!attr
.allocatable
)
1938 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
1939 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic
,
1944 if (variable_check (to
, 0) == FAILURE
)
1947 if (array_check (to
, 0) == FAILURE
)
1950 attr
= gfc_variable_attr (to
, NULL
);
1951 if (!attr
.allocatable
)
1953 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
1954 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic
,
1959 if (same_type_check (from
, 0, to
, 1) == FAILURE
)
1962 if (to
->rank
!= from
->rank
)
1964 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
1965 "have the same rank %d/%d", gfc_current_intrinsic_arg
[0],
1966 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
,
1967 &to
->where
, from
->rank
, to
->rank
);
1971 if (to
->ts
.kind
!= from
->ts
.kind
)
1973 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
1974 "be of the same kind %d/%d", gfc_current_intrinsic_arg
[0],
1975 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
,
1976 &to
->where
, from
->ts
.kind
, to
->ts
.kind
);
1985 gfc_check_nearest (gfc_expr
*x
, gfc_expr
*s
)
1987 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1990 if (type_check (s
, 1, BT_REAL
) == FAILURE
)
1998 gfc_check_new_line (gfc_expr
*a
)
2000 if (type_check (a
, 0, BT_CHARACTER
) == FAILURE
)
2008 gfc_check_null (gfc_expr
*mold
)
2010 symbol_attribute attr
;
2015 if (variable_check (mold
, 0) == FAILURE
)
2018 attr
= gfc_variable_attr (mold
, NULL
);
2022 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
2023 gfc_current_intrinsic_arg
[0],
2024 gfc_current_intrinsic
, &mold
->where
);
2033 gfc_check_pack (gfc_expr
*array
, gfc_expr
*mask
, gfc_expr
*vector
)
2037 if (array_check (array
, 0) == FAILURE
)
2040 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
2043 snprintf (buffer
, 80, "arguments '%s' and '%s' for intrinsic '%s'",
2044 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic_arg
[1],
2045 gfc_current_intrinsic
);
2046 if (gfc_check_conformance (buffer
, array
, mask
) == FAILURE
)
2051 if (same_type_check (array
, 0, vector
, 2) == FAILURE
)
2054 if (rank_check (vector
, 2, 1) == FAILURE
)
2057 /* TODO: More constraints here. */
2065 gfc_check_precision (gfc_expr
*x
)
2067 if (x
->ts
.type
!= BT_REAL
&& x
->ts
.type
!= BT_COMPLEX
)
2069 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of type "
2070 "REAL or COMPLEX", gfc_current_intrinsic_arg
[0],
2071 gfc_current_intrinsic
, &x
->where
);
2080 gfc_check_present (gfc_expr
*a
)
2084 if (variable_check (a
, 0) == FAILURE
)
2087 sym
= a
->symtree
->n
.sym
;
2088 if (!sym
->attr
.dummy
)
2090 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
2091 "dummy variable", gfc_current_intrinsic_arg
[0],
2092 gfc_current_intrinsic
, &a
->where
);
2096 if (!sym
->attr
.optional
)
2098 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
2099 "an OPTIONAL dummy variable", gfc_current_intrinsic_arg
[0],
2100 gfc_current_intrinsic
, &a
->where
);
2104 /* 13.14.82 PRESENT(A)
2106 Argument. A shall be the name of an optional dummy argument that is
2107 accessible in the subprogram in which the PRESENT function reference
2111 && !(a
->ref
->next
== NULL
&& a
->ref
->type
== REF_ARRAY
2112 && a
->ref
->u
.ar
.type
== AR_FULL
))
2114 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
2115 "subobject of '%s'", gfc_current_intrinsic_arg
[0],
2116 gfc_current_intrinsic
, &a
->where
, sym
->name
);
2125 gfc_check_radix (gfc_expr
*x
)
2127 if (int_or_real_check (x
, 0) == FAILURE
)
2135 gfc_check_range (gfc_expr
*x
)
2137 if (numeric_check (x
, 0) == FAILURE
)
2144 /* real, float, sngl. */
2146 gfc_check_real (gfc_expr
*a
, gfc_expr
*kind
)
2148 if (numeric_check (a
, 0) == FAILURE
)
2151 if (kind_check (kind
, 1, BT_REAL
) == FAILURE
)
2159 gfc_check_rename (gfc_expr
*path1
, gfc_expr
*path2
)
2161 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2164 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2172 gfc_check_rename_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2174 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2177 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2183 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2186 if (scalar_check (status
, 2) == FAILURE
)
2194 gfc_check_repeat (gfc_expr
*x
, gfc_expr
*y
)
2196 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
2199 if (scalar_check (x
, 0) == FAILURE
)
2202 if (type_check (y
, 0, BT_INTEGER
) == FAILURE
)
2205 if (scalar_check (y
, 1) == FAILURE
)
2213 gfc_check_reshape (gfc_expr
*source
, gfc_expr
*shape
,
2214 gfc_expr
*pad
, gfc_expr
*order
)
2220 if (array_check (source
, 0) == FAILURE
)
2223 if (rank_check (shape
, 1, 1) == FAILURE
)
2226 if (type_check (shape
, 1, BT_INTEGER
) == FAILURE
)
2229 if (gfc_array_size (shape
, &size
) != SUCCESS
)
2231 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
2232 "array of constant size", &shape
->where
);
2236 m
= mpz_cmp_ui (size
, GFC_MAX_DIMENSIONS
);
2241 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
2242 "than %d elements", &shape
->where
, GFC_MAX_DIMENSIONS
);
2248 if (same_type_check (source
, 0, pad
, 2) == FAILURE
)
2250 if (array_check (pad
, 2) == FAILURE
)
2254 if (order
!= NULL
&& array_check (order
, 3) == FAILURE
)
2257 if (pad
== NULL
&& shape
->expr_type
== EXPR_ARRAY
2258 && gfc_is_constant_expr (shape
)
2259 && !(source
->expr_type
== EXPR_VARIABLE
&& source
->symtree
->n
.sym
->as
2260 && source
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
))
2262 /* Check the match in size between source and destination. */
2263 if (gfc_array_size (source
, &nelems
) == SUCCESS
)
2268 c
= shape
->value
.constructor
;
2269 mpz_init_set_ui (size
, 1);
2270 for (; c
; c
= c
->next
)
2271 mpz_mul (size
, size
, c
->expr
->value
.integer
);
2273 test
= mpz_cmp (nelems
, size
) < 0 && mpz_cmp_ui (size
, 0) > 0;
2279 gfc_error ("Without padding, there are not enough elements "
2280 "in the intrinsic RESHAPE source at %L to match "
2281 "the shape", &source
->where
);
2292 gfc_check_scale (gfc_expr
*x
, gfc_expr
*i
)
2294 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2297 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
2305 gfc_check_scan (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
2307 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
2310 if (type_check (y
, 1, BT_CHARACTER
) == FAILURE
)
2313 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
2316 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
2318 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2319 "with KIND argument at %L",
2320 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2323 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
2331 gfc_check_secnds (gfc_expr
*r
)
2333 if (type_check (r
, 0, BT_REAL
) == FAILURE
)
2336 if (kind_value_check (r
, 0, 4) == FAILURE
)
2339 if (scalar_check (r
, 0) == FAILURE
)
2347 gfc_check_selected_int_kind (gfc_expr
*r
)
2349 if (type_check (r
, 0, BT_INTEGER
) == FAILURE
)
2352 if (scalar_check (r
, 0) == FAILURE
)
2360 gfc_check_selected_real_kind (gfc_expr
*p
, gfc_expr
*r
)
2362 if (p
== NULL
&& r
== NULL
)
2364 gfc_error ("Missing arguments to %s intrinsic at %L",
2365 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
2370 if (p
!= NULL
&& type_check (p
, 0, BT_INTEGER
) == FAILURE
)
2373 if (r
!= NULL
&& type_check (r
, 1, BT_INTEGER
) == FAILURE
)
2381 gfc_check_set_exponent (gfc_expr
*x
, gfc_expr
*i
)
2383 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2386 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
2394 gfc_check_shape (gfc_expr
*source
)
2398 if (source
->rank
== 0 || source
->expr_type
!= EXPR_VARIABLE
)
2401 ar
= gfc_find_array_ref (source
);
2403 if (ar
->as
&& ar
->as
->type
== AS_ASSUMED_SIZE
)
2405 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
2406 "an assumed size array", &source
->where
);
2415 gfc_check_sign (gfc_expr
*a
, gfc_expr
*b
)
2417 if (int_or_real_check (a
, 0) == FAILURE
)
2420 if (same_type_check (a
, 0, b
, 1) == FAILURE
)
2428 gfc_check_size (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
2430 if (array_check (array
, 0) == FAILURE
)
2435 if (dim_check (dim
, 1, true) == FAILURE
)
2438 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
2442 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
2444 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2445 "with KIND argument at %L",
2446 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2455 gfc_check_sizeof (gfc_expr
*arg
__attribute__((unused
)))
2462 gfc_check_sleep_sub (gfc_expr
*seconds
)
2464 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
2467 if (scalar_check (seconds
, 0) == FAILURE
)
2475 gfc_check_spread (gfc_expr
*source
, gfc_expr
*dim
, gfc_expr
*ncopies
)
2477 if (source
->rank
>= GFC_MAX_DIMENSIONS
)
2479 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
2480 "than rank %d", gfc_current_intrinsic_arg
[0],
2481 gfc_current_intrinsic
, &source
->where
, GFC_MAX_DIMENSIONS
);
2489 if (dim_check (dim
, 1, false) == FAILURE
)
2492 if (type_check (ncopies
, 2, BT_INTEGER
) == FAILURE
)
2495 if (scalar_check (ncopies
, 2) == FAILURE
)
2502 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
2506 gfc_check_fgetputc_sub (gfc_expr
*unit
, gfc_expr
*c
, gfc_expr
*status
)
2508 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2511 if (scalar_check (unit
, 0) == FAILURE
)
2514 if (type_check (c
, 1, BT_CHARACTER
) == FAILURE
)
2520 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
2521 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
2522 || scalar_check (status
, 2) == FAILURE
)
2530 gfc_check_fgetputc (gfc_expr
*unit
, gfc_expr
*c
)
2532 return gfc_check_fgetputc_sub (unit
, c
, NULL
);
2537 gfc_check_fgetput_sub (gfc_expr
*c
, gfc_expr
*status
)
2539 if (type_check (c
, 0, BT_CHARACTER
) == FAILURE
)
2545 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
2546 || kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
2547 || scalar_check (status
, 1) == FAILURE
)
2555 gfc_check_fgetput (gfc_expr
*c
)
2557 return gfc_check_fgetput_sub (c
, NULL
);
2562 gfc_check_fseek_sub (gfc_expr
*unit
, gfc_expr
*offset
, gfc_expr
*whence
, gfc_expr
*status
)
2564 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2567 if (scalar_check (unit
, 0) == FAILURE
)
2570 if (type_check (offset
, 1, BT_INTEGER
) == FAILURE
)
2573 if (scalar_check (offset
, 1) == FAILURE
)
2576 if (type_check (whence
, 2, BT_INTEGER
) == FAILURE
)
2579 if (scalar_check (whence
, 2) == FAILURE
)
2585 if (type_check (status
, 3, BT_INTEGER
) == FAILURE
)
2588 if (kind_value_check (status
, 3, 4) == FAILURE
)
2591 if (scalar_check (status
, 3) == FAILURE
)
2600 gfc_check_fstat (gfc_expr
*unit
, gfc_expr
*array
)
2602 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2605 if (scalar_check (unit
, 0) == FAILURE
)
2608 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
2609 || kind_value_check (unit
, 0, gfc_default_integer_kind
) == FAILURE
)
2612 if (array_check (array
, 1) == FAILURE
)
2620 gfc_check_fstat_sub (gfc_expr
*unit
, gfc_expr
*array
, gfc_expr
*status
)
2622 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2625 if (scalar_check (unit
, 0) == FAILURE
)
2628 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
2629 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
2632 if (array_check (array
, 1) == FAILURE
)
2638 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
2639 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
2642 if (scalar_check (status
, 2) == FAILURE
)
2650 gfc_check_ftell (gfc_expr
*unit
)
2652 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2655 if (scalar_check (unit
, 0) == FAILURE
)
2663 gfc_check_ftell_sub (gfc_expr
*unit
, gfc_expr
*offset
)
2665 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2668 if (scalar_check (unit
, 0) == FAILURE
)
2671 if (type_check (offset
, 1, BT_INTEGER
) == FAILURE
)
2674 if (scalar_check (offset
, 1) == FAILURE
)
2682 gfc_check_stat (gfc_expr
*name
, gfc_expr
*array
)
2684 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2687 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
2688 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
2691 if (array_check (array
, 1) == FAILURE
)
2699 gfc_check_stat_sub (gfc_expr
*name
, gfc_expr
*array
, gfc_expr
*status
)
2701 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2704 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
2705 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
2708 if (array_check (array
, 1) == FAILURE
)
2714 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
2715 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
2718 if (scalar_check (status
, 2) == FAILURE
)
2726 gfc_check_transfer (gfc_expr
*source ATTRIBUTE_UNUSED
,
2727 gfc_expr
*mold ATTRIBUTE_UNUSED
, gfc_expr
*size
)
2729 if (mold
->ts
.type
== BT_HOLLERITH
)
2731 gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
2732 &mold
->where
, gfc_basic_typename (BT_HOLLERITH
));
2738 if (type_check (size
, 2, BT_INTEGER
) == FAILURE
)
2741 if (scalar_check (size
, 2) == FAILURE
)
2744 if (nonoptional_check (size
, 2) == FAILURE
)
2753 gfc_check_transpose (gfc_expr
*matrix
)
2755 if (rank_check (matrix
, 0, 2) == FAILURE
)
2763 gfc_check_ubound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
2765 if (array_check (array
, 0) == FAILURE
)
2770 if (dim_check (dim
, 1, false) == FAILURE
)
2773 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
2777 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
2779 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2780 "with KIND argument at %L",
2781 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2789 gfc_check_unpack (gfc_expr
*vector
, gfc_expr
*mask
, gfc_expr
*field
)
2791 if (rank_check (vector
, 0, 1) == FAILURE
)
2794 if (array_check (mask
, 1) == FAILURE
)
2797 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
2800 if (same_type_check (vector
, 0, field
, 2) == FAILURE
)
2808 gfc_check_verify (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
2810 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
2813 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
2816 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
2819 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
2821 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2822 "with KIND argument at %L",
2823 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2831 gfc_check_trim (gfc_expr
*x
)
2833 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
2836 if (scalar_check (x
, 0) == FAILURE
)
2844 gfc_check_ttynam (gfc_expr
*unit
)
2846 if (scalar_check (unit
, 0) == FAILURE
)
2849 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2856 /* Common check function for the half a dozen intrinsics that have a
2857 single real argument. */
2860 gfc_check_x (gfc_expr
*x
)
2862 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2869 /************* Check functions for intrinsic subroutines *************/
2872 gfc_check_cpu_time (gfc_expr
*time
)
2874 if (scalar_check (time
, 0) == FAILURE
)
2877 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
2880 if (variable_check (time
, 0) == FAILURE
)
2888 gfc_check_date_and_time (gfc_expr
*date
, gfc_expr
*time
,
2889 gfc_expr
*zone
, gfc_expr
*values
)
2893 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
2895 if (scalar_check (date
, 0) == FAILURE
)
2897 if (variable_check (date
, 0) == FAILURE
)
2903 if (type_check (time
, 1, BT_CHARACTER
) == FAILURE
)
2905 if (scalar_check (time
, 1) == FAILURE
)
2907 if (variable_check (time
, 1) == FAILURE
)
2913 if (type_check (zone
, 2, BT_CHARACTER
) == FAILURE
)
2915 if (scalar_check (zone
, 2) == FAILURE
)
2917 if (variable_check (zone
, 2) == FAILURE
)
2923 if (type_check (values
, 3, BT_INTEGER
) == FAILURE
)
2925 if (array_check (values
, 3) == FAILURE
)
2927 if (rank_check (values
, 3, 1) == FAILURE
)
2929 if (variable_check (values
, 3) == FAILURE
)
2938 gfc_check_mvbits (gfc_expr
*from
, gfc_expr
*frompos
, gfc_expr
*len
,
2939 gfc_expr
*to
, gfc_expr
*topos
)
2941 if (type_check (from
, 0, BT_INTEGER
) == FAILURE
)
2944 if (type_check (frompos
, 1, BT_INTEGER
) == FAILURE
)
2947 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
2950 if (same_type_check (from
, 0, to
, 3) == FAILURE
)
2953 if (variable_check (to
, 3) == FAILURE
)
2956 if (type_check (topos
, 4, BT_INTEGER
) == FAILURE
)
2964 gfc_check_random_number (gfc_expr
*harvest
)
2966 if (type_check (harvest
, 0, BT_REAL
) == FAILURE
)
2969 if (variable_check (harvest
, 0) == FAILURE
)
2977 gfc_check_random_seed (gfc_expr
*size
, gfc_expr
*put
, gfc_expr
*get
)
2979 unsigned int nargs
= 0;
2980 locus
*where
= NULL
;
2984 if (size
->expr_type
!= EXPR_VARIABLE
2985 || !size
->symtree
->n
.sym
->attr
.optional
)
2988 if (scalar_check (size
, 0) == FAILURE
)
2991 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
2994 if (variable_check (size
, 0) == FAILURE
)
2997 if (kind_value_check (size
, 0, gfc_default_integer_kind
) == FAILURE
)
3003 if (put
->expr_type
!= EXPR_VARIABLE
3004 || !put
->symtree
->n
.sym
->attr
.optional
)
3007 where
= &put
->where
;
3010 if (array_check (put
, 1) == FAILURE
)
3013 if (rank_check (put
, 1, 1) == FAILURE
)
3016 if (type_check (put
, 1, BT_INTEGER
) == FAILURE
)
3019 if (kind_value_check (put
, 1, gfc_default_integer_kind
) == FAILURE
)
3025 if (get
->expr_type
!= EXPR_VARIABLE
3026 || !get
->symtree
->n
.sym
->attr
.optional
)
3029 where
= &get
->where
;
3032 if (array_check (get
, 2) == FAILURE
)
3035 if (rank_check (get
, 2, 1) == FAILURE
)
3038 if (type_check (get
, 2, BT_INTEGER
) == FAILURE
)
3041 if (variable_check (get
, 2) == FAILURE
)
3044 if (kind_value_check (get
, 2, gfc_default_integer_kind
) == FAILURE
)
3048 /* RANDOM_SEED may not have more than one non-optional argument. */
3050 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
, where
);
3057 gfc_check_second_sub (gfc_expr
*time
)
3059 if (scalar_check (time
, 0) == FAILURE
)
3062 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
3065 if (kind_value_check(time
, 0, 4) == FAILURE
)
3072 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
3073 count, count_rate, and count_max are all optional arguments */
3076 gfc_check_system_clock (gfc_expr
*count
, gfc_expr
*count_rate
,
3077 gfc_expr
*count_max
)
3081 if (scalar_check (count
, 0) == FAILURE
)
3084 if (type_check (count
, 0, BT_INTEGER
) == FAILURE
)
3087 if (variable_check (count
, 0) == FAILURE
)
3091 if (count_rate
!= NULL
)
3093 if (scalar_check (count_rate
, 1) == FAILURE
)
3096 if (type_check (count_rate
, 1, BT_INTEGER
) == FAILURE
)
3099 if (variable_check (count_rate
, 1) == FAILURE
)
3103 && same_type_check (count
, 0, count_rate
, 1) == FAILURE
)
3108 if (count_max
!= NULL
)
3110 if (scalar_check (count_max
, 2) == FAILURE
)
3113 if (type_check (count_max
, 2, BT_INTEGER
) == FAILURE
)
3116 if (variable_check (count_max
, 2) == FAILURE
)
3120 && same_type_check (count
, 0, count_max
, 2) == FAILURE
)
3123 if (count_rate
!= NULL
3124 && same_type_check (count_rate
, 1, count_max
, 2) == FAILURE
)
3133 gfc_check_irand (gfc_expr
*x
)
3138 if (scalar_check (x
, 0) == FAILURE
)
3141 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
3144 if (kind_value_check(x
, 0, 4) == FAILURE
)
3152 gfc_check_alarm_sub (gfc_expr
*seconds
, gfc_expr
*handler
, gfc_expr
*status
)
3154 if (scalar_check (seconds
, 0) == FAILURE
)
3157 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
3160 if (handler
->ts
.type
!= BT_INTEGER
&& handler
->ts
.type
!= BT_PROCEDURE
)
3162 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3163 "or PROCEDURE", gfc_current_intrinsic_arg
[1],
3164 gfc_current_intrinsic
, &handler
->where
);
3168 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
3174 if (scalar_check (status
, 2) == FAILURE
)
3177 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
3180 if (kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
3188 gfc_check_rand (gfc_expr
*x
)
3193 if (scalar_check (x
, 0) == FAILURE
)
3196 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
3199 if (kind_value_check(x
, 0, 4) == FAILURE
)
3207 gfc_check_srand (gfc_expr
*x
)
3209 if (scalar_check (x
, 0) == FAILURE
)
3212 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
3215 if (kind_value_check(x
, 0, 4) == FAILURE
)
3223 gfc_check_ctime_sub (gfc_expr
*time
, gfc_expr
*result
)
3225 if (scalar_check (time
, 0) == FAILURE
)
3228 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
3231 if (type_check (result
, 1, BT_CHARACTER
) == FAILURE
)
3239 gfc_check_etime (gfc_expr
*x
)
3241 if (array_check (x
, 0) == FAILURE
)
3244 if (rank_check (x
, 0, 1) == FAILURE
)
3247 if (variable_check (x
, 0) == FAILURE
)
3250 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
3253 if (kind_value_check(x
, 0, 4) == FAILURE
)
3261 gfc_check_etime_sub (gfc_expr
*values
, gfc_expr
*time
)
3263 if (array_check (values
, 0) == FAILURE
)
3266 if (rank_check (values
, 0, 1) == FAILURE
)
3269 if (variable_check (values
, 0) == FAILURE
)
3272 if (type_check (values
, 0, BT_REAL
) == FAILURE
)
3275 if (kind_value_check(values
, 0, 4) == FAILURE
)
3278 if (scalar_check (time
, 1) == FAILURE
)
3281 if (type_check (time
, 1, BT_REAL
) == FAILURE
)
3284 if (kind_value_check(time
, 1, 4) == FAILURE
)
3292 gfc_check_fdate_sub (gfc_expr
*date
)
3294 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
3302 gfc_check_gerror (gfc_expr
*msg
)
3304 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
3312 gfc_check_getcwd_sub (gfc_expr
*cwd
, gfc_expr
*status
)
3314 if (type_check (cwd
, 0, BT_CHARACTER
) == FAILURE
)
3320 if (scalar_check (status
, 1) == FAILURE
)
3323 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
3331 gfc_check_getarg (gfc_expr
*pos
, gfc_expr
*value
)
3333 if (type_check (pos
, 0, BT_INTEGER
) == FAILURE
)
3336 if (pos
->ts
.kind
> gfc_default_integer_kind
)
3338 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
3339 "not wider than the default kind (%d)",
3340 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic
,
3341 &pos
->where
, gfc_default_integer_kind
);
3345 if (type_check (value
, 1, BT_CHARACTER
) == FAILURE
)
3353 gfc_check_getlog (gfc_expr
*msg
)
3355 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
3363 gfc_check_exit (gfc_expr
*status
)
3368 if (type_check (status
, 0, BT_INTEGER
) == FAILURE
)
3371 if (scalar_check (status
, 0) == FAILURE
)
3379 gfc_check_flush (gfc_expr
*unit
)
3384 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3387 if (scalar_check (unit
, 0) == FAILURE
)
3395 gfc_check_free (gfc_expr
*i
)
3397 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
3400 if (scalar_check (i
, 0) == FAILURE
)
3408 gfc_check_hostnm (gfc_expr
*name
)
3410 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3418 gfc_check_hostnm_sub (gfc_expr
*name
, gfc_expr
*status
)
3420 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3426 if (scalar_check (status
, 1) == FAILURE
)
3429 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
3437 gfc_check_itime_idate (gfc_expr
*values
)
3439 if (array_check (values
, 0) == FAILURE
)
3442 if (rank_check (values
, 0, 1) == FAILURE
)
3445 if (variable_check (values
, 0) == FAILURE
)
3448 if (type_check (values
, 0, BT_INTEGER
) == FAILURE
)
3451 if (kind_value_check(values
, 0, gfc_default_integer_kind
) == FAILURE
)
3459 gfc_check_ltime_gmtime (gfc_expr
*time
, gfc_expr
*values
)
3461 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
3464 if (kind_value_check(time
, 0, gfc_default_integer_kind
) == FAILURE
)
3467 if (scalar_check (time
, 0) == FAILURE
)
3470 if (array_check (values
, 1) == FAILURE
)
3473 if (rank_check (values
, 1, 1) == FAILURE
)
3476 if (variable_check (values
, 1) == FAILURE
)
3479 if (type_check (values
, 1, BT_INTEGER
) == FAILURE
)
3482 if (kind_value_check(values
, 1, gfc_default_integer_kind
) == FAILURE
)
3490 gfc_check_ttynam_sub (gfc_expr
*unit
, gfc_expr
*name
)
3492 if (scalar_check (unit
, 0) == FAILURE
)
3495 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3498 if (type_check (name
, 1, BT_CHARACTER
) == FAILURE
)
3506 gfc_check_isatty (gfc_expr
*unit
)
3511 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3514 if (scalar_check (unit
, 0) == FAILURE
)
3522 gfc_check_isnan (gfc_expr
*x
)
3524 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
3532 gfc_check_perror (gfc_expr
*string
)
3534 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
)
3542 gfc_check_umask (gfc_expr
*mask
)
3544 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
3547 if (scalar_check (mask
, 0) == FAILURE
)
3555 gfc_check_umask_sub (gfc_expr
*mask
, gfc_expr
*old
)
3557 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
3560 if (scalar_check (mask
, 0) == FAILURE
)
3566 if (scalar_check (old
, 1) == FAILURE
)
3569 if (type_check (old
, 1, BT_INTEGER
) == FAILURE
)
3577 gfc_check_unlink (gfc_expr
*name
)
3579 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3587 gfc_check_unlink_sub (gfc_expr
*name
, gfc_expr
*status
)
3589 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3595 if (scalar_check (status
, 1) == FAILURE
)
3598 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
3606 gfc_check_signal (gfc_expr
*number
, gfc_expr
*handler
)
3608 if (scalar_check (number
, 0) == FAILURE
)
3611 if (type_check (number
, 0, BT_INTEGER
) == FAILURE
)
3614 if (handler
->ts
.type
!= BT_INTEGER
&& handler
->ts
.type
!= BT_PROCEDURE
)
3616 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3617 "or PROCEDURE", gfc_current_intrinsic_arg
[1],
3618 gfc_current_intrinsic
, &handler
->where
);
3622 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
3630 gfc_check_signal_sub (gfc_expr
*number
, gfc_expr
*handler
, gfc_expr
*status
)
3632 if (scalar_check (number
, 0) == FAILURE
)
3635 if (type_check (number
, 0, BT_INTEGER
) == FAILURE
)
3638 if (handler
->ts
.type
!= BT_INTEGER
&& handler
->ts
.type
!= BT_PROCEDURE
)
3640 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3641 "or PROCEDURE", gfc_current_intrinsic_arg
[1],
3642 gfc_current_intrinsic
, &handler
->where
);
3646 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
3652 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
3655 if (scalar_check (status
, 2) == FAILURE
)
3663 gfc_check_system_sub (gfc_expr
*cmd
, gfc_expr
*status
)
3665 if (type_check (cmd
, 0, BT_CHARACTER
) == FAILURE
)
3668 if (scalar_check (status
, 1) == FAILURE
)
3671 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
3674 if (kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
)
3681 /* This is used for the GNU intrinsics AND, OR and XOR. */
3683 gfc_check_and (gfc_expr
*i
, gfc_expr
*j
)
3685 if (i
->ts
.type
!= BT_INTEGER
&& i
->ts
.type
!= BT_LOGICAL
)
3687 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3688 "or LOGICAL", gfc_current_intrinsic_arg
[0],
3689 gfc_current_intrinsic
, &i
->where
);
3693 if (j
->ts
.type
!= BT_INTEGER
&& j
->ts
.type
!= BT_LOGICAL
)
3695 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3696 "or LOGICAL", gfc_current_intrinsic_arg
[1],
3697 gfc_current_intrinsic
, &j
->where
);
3701 if (i
->ts
.type
!= j
->ts
.type
)
3703 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
3704 "have the same type", gfc_current_intrinsic_arg
[0],
3705 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
,
3710 if (scalar_check (i
, 0) == FAILURE
)
3713 if (scalar_check (j
, 1) == FAILURE
)