2 Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
3 Contributed by Andy Vaught & Katherine Holcomb
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
23 /* These functions check to see if an argument list is compatible with
24 a particular intrinsic function or subroutine. Presence of
25 required arguments has already been established, the argument list
26 has been sorted into the right order and has NULL arguments in the
27 correct places for missing optional arguments. */
33 #include "intrinsic.h"
36 /* Check the type of an expression. */
39 type_check (gfc_expr
* e
, int n
, bt type
)
41 if (e
->ts
.type
== type
)
44 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
45 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &e
->where
,
46 gfc_basic_typename (type
));
52 /* Check that the expression is a numeric type. */
55 numeric_check (gfc_expr
* e
, int n
)
57 if (gfc_numeric_ts (&e
->ts
))
60 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a numeric type",
61 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &e
->where
);
67 /* Check that an expression is integer or real. */
70 int_or_real_check (gfc_expr
* e
, int n
)
72 if (e
->ts
.type
!= BT_INTEGER
&& e
->ts
.type
!= BT_REAL
)
75 "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL",
76 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &e
->where
);
84 /* Check that an expression is real or complex. */
87 real_or_complex_check (gfc_expr
* e
, int n
)
89 if (e
->ts
.type
!= BT_REAL
&& e
->ts
.type
!= BT_COMPLEX
)
92 "'%s' argument of '%s' intrinsic at %L must be REAL or COMPLEX",
93 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &e
->where
);
101 /* Check that the expression is an optional constant integer
102 and that it specifies a valid kind for that type. */
105 kind_check (gfc_expr
* k
, int n
, bt type
)
112 if (type_check (k
, n
, BT_INTEGER
) == FAILURE
)
115 if (k
->expr_type
!= EXPR_CONSTANT
)
118 "'%s' argument of '%s' intrinsic at %L must be a constant",
119 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &k
->where
);
123 if (gfc_extract_int (k
, &kind
) != NULL
124 || gfc_validate_kind (type
, kind
, true) < 0)
126 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type
),
135 /* Make sure the expression is a double precision real. */
138 double_check (gfc_expr
* d
, int n
)
140 if (type_check (d
, n
, BT_REAL
) == FAILURE
)
143 if (d
->ts
.kind
!= gfc_default_double_kind
)
146 "'%s' argument of '%s' intrinsic at %L must be double precision",
147 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &d
->where
);
155 /* Make sure the expression is a logical array. */
158 logical_array_check (gfc_expr
* array
, int n
)
160 if (array
->ts
.type
!= BT_LOGICAL
|| array
->rank
== 0)
163 "'%s' argument of '%s' intrinsic at %L must be a logical array",
164 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &array
->where
);
172 /* Make sure an expression is an array. */
175 array_check (gfc_expr
* e
, int n
)
180 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array",
181 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &e
->where
);
187 /* Make sure an expression is a scalar. */
190 scalar_check (gfc_expr
* e
, int n
)
195 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a scalar",
196 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &e
->where
);
202 /* Make sure two expression have the same type. */
205 same_type_check (gfc_expr
* e
, int n
, gfc_expr
* f
, int m
)
207 if (gfc_compare_types (&e
->ts
, &f
->ts
))
210 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same type "
211 "and kind as '%s'", gfc_current_intrinsic_arg
[m
],
212 gfc_current_intrinsic
, &f
->where
, gfc_current_intrinsic_arg
[n
]);
217 /* Make sure that an expression has a certain (nonzero) rank. */
220 rank_check (gfc_expr
* e
, int n
, int rank
)
225 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank %d",
226 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
232 /* Make sure a variable expression is not an optional dummy argument. */
235 nonoptional_check (gfc_expr
* e
, int n
)
237 if (e
->expr_type
== EXPR_VARIABLE
&& e
->symtree
->n
.sym
->attr
.optional
)
239 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
240 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
245 /* TODO: Recursive check on nonoptional variables? */
251 /* Check that an expression has a particular kind. */
254 kind_value_check (gfc_expr
* e
, int n
, int k
)
259 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of kind %d",
260 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
266 /* Make sure an expression is a variable. */
269 variable_check (gfc_expr
* e
, int n
)
271 if ((e
->expr_type
== EXPR_VARIABLE
272 && e
->symtree
->n
.sym
->attr
.flavor
!= FL_PARAMETER
)
273 || (e
->expr_type
== EXPR_FUNCTION
274 && e
->symtree
->n
.sym
->result
== e
->symtree
->n
.sym
))
277 if (e
->expr_type
== EXPR_VARIABLE
278 && e
->symtree
->n
.sym
->attr
.intent
== INTENT_IN
)
280 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
281 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
286 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a variable",
287 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &e
->where
);
293 /* Check the common DIM parameter for correctness. */
296 dim_check (gfc_expr
* dim
, int n
, int optional
)
303 if (nonoptional_check (dim
, n
) == FAILURE
)
311 gfc_error ("Missing DIM parameter in intrinsic '%s' at %L",
312 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
316 if (type_check (dim
, n
, BT_INTEGER
) == FAILURE
)
319 if (scalar_check (dim
, n
) == FAILURE
)
326 /* If a DIM parameter is a constant, make sure that it is greater than
327 zero and less than or equal to the rank of the given array. If
328 allow_assumed is zero then dim must be less than the rank of the array
329 for assumed size arrays. */
332 dim_rank_check (gfc_expr
* dim
, gfc_expr
* array
, int allow_assumed
)
337 if (dim
->expr_type
!= EXPR_CONSTANT
|| array
->expr_type
!= EXPR_VARIABLE
)
340 ar
= gfc_find_array_ref (array
);
342 if (ar
->as
->type
== AS_ASSUMED_SIZE
&& !allow_assumed
)
345 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
346 || mpz_cmp_ui (dim
->value
.integer
, rank
) > 0)
348 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
349 "dimension index", gfc_current_intrinsic
, &dim
->where
);
358 /***** Check functions *****/
360 /* Check subroutine suitable for intrinsics taking a real argument and
361 a kind argument for the result. */
364 check_a_kind (gfc_expr
* a
, gfc_expr
* kind
, bt type
)
366 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
368 if (kind_check (kind
, 1, type
) == FAILURE
)
374 /* Check subroutine suitable for ceiling, floor and nint. */
377 gfc_check_a_ikind (gfc_expr
* a
, gfc_expr
* kind
)
379 return check_a_kind (a
, kind
, BT_INTEGER
);
382 /* Check subroutine suitable for aint, anint. */
385 gfc_check_a_xkind (gfc_expr
* a
, gfc_expr
* kind
)
387 return check_a_kind (a
, kind
, BT_REAL
);
391 gfc_check_abs (gfc_expr
* a
)
393 if (numeric_check (a
, 0) == FAILURE
)
400 gfc_check_achar (gfc_expr
* a
)
403 if (type_check (a
, 0, BT_INTEGER
) == FAILURE
)
411 gfc_check_all_any (gfc_expr
* mask
, gfc_expr
* dim
)
413 if (logical_array_check (mask
, 0) == FAILURE
)
416 if (dim_check (dim
, 1, 1) == FAILURE
)
424 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 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
435 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic
,
444 /* Common check function where the first argument must be real or
445 integer and the second argument must be the same as the first. */
448 gfc_check_a_p (gfc_expr
* a
, gfc_expr
* p
)
450 if (int_or_real_check (a
, 0) == FAILURE
)
453 if (a
->ts
.type
!= p
->ts
.type
)
455 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
456 "have the same type", gfc_current_intrinsic_arg
[0],
457 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
,
462 if (a
->ts
.kind
!= p
->ts
.kind
)
464 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
465 &p
->where
) == FAILURE
)
474 gfc_check_associated (gfc_expr
* pointer
, gfc_expr
* target
)
476 symbol_attribute attr
;
480 if (pointer
->expr_type
== EXPR_VARIABLE
)
481 attr
= gfc_variable_attr (pointer
, NULL
);
482 else if (pointer
->expr_type
== EXPR_FUNCTION
)
483 attr
= pointer
->symtree
->n
.sym
->attr
;
485 gcc_assert (0); /* Pointer must be a variable or a function. */
489 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
490 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic
,
495 /* Target argument is optional. */
499 if (target
->expr_type
== EXPR_NULL
)
501 gfc_error ("NULL pointer at %L is not permitted as actual argument "
502 "of '%s' intrinsic function",
503 &target
->where
, gfc_current_intrinsic
);
507 if (target
->expr_type
== EXPR_VARIABLE
)
508 attr
= gfc_variable_attr (target
, NULL
);
509 else if (target
->expr_type
== EXPR_FUNCTION
)
510 attr
= target
->symtree
->n
.sym
->attr
;
512 gcc_assert (0); /* Target must be a variable or a function. */
514 if (!attr
.pointer
&& !attr
.target
)
516 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
517 "or a TARGET", gfc_current_intrinsic_arg
[1],
518 gfc_current_intrinsic
, &target
->where
);
523 if (same_type_check (pointer
, 0, target
, 1) == FAILURE
)
525 if (rank_check (target
, 0, pointer
->rank
) == FAILURE
)
527 if (target
->rank
> 0)
529 for (i
= 0; i
< target
->rank
; i
++)
530 if (target
->ref
->u
.ar
.dimen_type
[i
] == DIMEN_VECTOR
)
532 gfc_error ("Array section with a vector subscript at %L shall not "
533 "be the target of a pointer",
544 gfc_check_atan2 (gfc_expr
* y
, gfc_expr
* x
)
546 if (type_check (y
, 0, BT_REAL
) == FAILURE
)
548 if (same_type_check (y
, 0, x
, 1) == FAILURE
)
555 /* BESJN and BESYN functions. */
558 gfc_check_besn (gfc_expr
* n
, gfc_expr
* x
)
560 if (scalar_check (n
, 0) == FAILURE
)
563 if (type_check (n
, 0, BT_INTEGER
) == FAILURE
)
566 if (scalar_check (x
, 1) == FAILURE
)
569 if (type_check (x
, 1, BT_REAL
) == FAILURE
)
577 gfc_check_btest (gfc_expr
* i
, gfc_expr
* pos
)
579 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
581 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
589 gfc_check_char (gfc_expr
* i
, gfc_expr
* kind
)
591 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
593 if (kind_check (kind
, 1, BT_CHARACTER
) == FAILURE
)
601 gfc_check_chdir (gfc_expr
* dir
)
603 if (type_check (dir
, 0, BT_CHARACTER
) == FAILURE
)
611 gfc_check_chdir_sub (gfc_expr
* dir
, gfc_expr
* status
)
613 if (type_check (dir
, 0, BT_CHARACTER
) == FAILURE
)
619 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
622 if (scalar_check (status
, 1) == FAILURE
)
630 gfc_check_cmplx (gfc_expr
* x
, gfc_expr
* y
, gfc_expr
* kind
)
632 if (numeric_check (x
, 0) == FAILURE
)
637 if (numeric_check (y
, 1) == FAILURE
)
640 if (x
->ts
.type
== BT_COMPLEX
)
642 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
643 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg
[1],
644 gfc_current_intrinsic
, &y
->where
);
649 if (kind_check (kind
, 2, BT_COMPLEX
) == FAILURE
)
657 gfc_check_complex (gfc_expr
* x
, gfc_expr
* y
)
659 if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
662 "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL",
663 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic
, &x
->where
);
666 if (scalar_check (x
, 0) == FAILURE
)
669 if (y
->ts
.type
!= BT_INTEGER
&& y
->ts
.type
!= BT_REAL
)
672 "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL",
673 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
, &y
->where
);
676 if (scalar_check (y
, 1) == FAILURE
)
684 gfc_check_count (gfc_expr
* mask
, gfc_expr
* dim
)
686 if (logical_array_check (mask
, 0) == FAILURE
)
688 if (dim_check (dim
, 1, 1) == FAILURE
)
696 gfc_check_cshift (gfc_expr
* array
, gfc_expr
* shift
, gfc_expr
* dim
)
698 if (array_check (array
, 0) == FAILURE
)
701 if (array
->rank
== 1)
703 if (scalar_check (shift
, 1) == FAILURE
)
708 /* TODO: more requirements on shift parameter. */
711 if (dim_check (dim
, 2, 1) == FAILURE
)
719 gfc_check_ctime (gfc_expr
* time
)
721 if (scalar_check (time
, 0) == FAILURE
)
724 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
732 gfc_check_dcmplx (gfc_expr
* x
, gfc_expr
* y
)
734 if (numeric_check (x
, 0) == FAILURE
)
739 if (numeric_check (y
, 1) == FAILURE
)
742 if (x
->ts
.type
== BT_COMPLEX
)
744 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
745 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg
[1],
746 gfc_current_intrinsic
, &y
->where
);
756 gfc_check_dble (gfc_expr
* x
)
758 if (numeric_check (x
, 0) == FAILURE
)
766 gfc_check_digits (gfc_expr
* x
)
768 if (int_or_real_check (x
, 0) == FAILURE
)
776 gfc_check_dot_product (gfc_expr
* vector_a
, gfc_expr
* vector_b
)
778 switch (vector_a
->ts
.type
)
781 if (type_check (vector_b
, 1, BT_LOGICAL
) == FAILURE
)
788 if (numeric_check (vector_b
, 1) == FAILURE
)
793 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
794 "or LOGICAL", gfc_current_intrinsic_arg
[0],
795 gfc_current_intrinsic
, &vector_a
->where
);
799 if (rank_check (vector_a
, 0, 1) == FAILURE
)
802 if (rank_check (vector_b
, 1, 1) == FAILURE
)
810 gfc_check_eoshift (gfc_expr
* array
, gfc_expr
* shift
, gfc_expr
* boundary
,
813 if (array_check (array
, 0) == FAILURE
)
816 if (type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
819 if (array
->rank
== 1)
821 if (scalar_check (shift
, 2) == FAILURE
)
826 /* TODO: more weird restrictions on shift. */
829 if (boundary
!= NULL
)
831 if (same_type_check (array
, 0, boundary
, 2) == FAILURE
)
834 /* TODO: more restrictions on boundary. */
837 if (dim_check (dim
, 1, 1) == FAILURE
)
844 /* A single complex argument. */
847 gfc_check_fn_c (gfc_expr
* a
)
849 if (type_check (a
, 0, BT_COMPLEX
) == FAILURE
)
856 /* A single real argument. */
859 gfc_check_fn_r (gfc_expr
* a
)
861 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
868 /* A single real or complex argument. */
871 gfc_check_fn_rc (gfc_expr
* a
)
873 if (real_or_complex_check (a
, 0) == FAILURE
)
881 gfc_check_fnum (gfc_expr
* unit
)
883 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
886 if (scalar_check (unit
, 0) == FAILURE
)
893 /* This is used for the g77 one-argument Bessel functions, and the
897 gfc_check_g77_math1 (gfc_expr
* x
)
899 if (scalar_check (x
, 0) == FAILURE
)
902 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
910 gfc_check_huge (gfc_expr
* x
)
912 if (int_or_real_check (x
, 0) == FAILURE
)
919 /* Check that the single argument is an integer. */
922 gfc_check_i (gfc_expr
* i
)
924 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
932 gfc_check_iand (gfc_expr
* i
, gfc_expr
* j
)
934 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
937 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
940 if (i
->ts
.kind
!= j
->ts
.kind
)
942 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
943 &i
->where
) == FAILURE
)
952 gfc_check_ibclr (gfc_expr
* i
, gfc_expr
* pos
)
954 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
957 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
965 gfc_check_ibits (gfc_expr
* i
, gfc_expr
* pos
, gfc_expr
* len
)
967 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
970 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
973 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
981 gfc_check_ibset (gfc_expr
* i
, gfc_expr
* pos
)
983 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
986 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
994 gfc_check_ichar_iachar (gfc_expr
* c
)
998 if (type_check (c
, 0, BT_CHARACTER
) == FAILURE
)
1001 if (c
->expr_type
== EXPR_VARIABLE
|| c
->expr_type
== EXPR_SUBSTRING
)
1007 /* Substring references don't have the charlength set. */
1009 while (ref
&& ref
->type
!= REF_SUBSTRING
)
1012 gcc_assert (ref
== NULL
|| ref
->type
== REF_SUBSTRING
);
1016 /* Check that the argument is length one. Non-constant lengths
1017 can't be checked here, so assume thay are ok. */
1018 if (c
->ts
.cl
&& c
->ts
.cl
->length
)
1020 /* If we already have a length for this expression then use it. */
1021 if (c
->ts
.cl
->length
->expr_type
!= EXPR_CONSTANT
)
1023 i
= mpz_get_si (c
->ts
.cl
->length
->value
.integer
);
1030 start
= ref
->u
.ss
.start
;
1031 end
= ref
->u
.ss
.end
;
1034 if (end
== NULL
|| end
->expr_type
!= EXPR_CONSTANT
1035 || start
->expr_type
!= EXPR_CONSTANT
)
1038 i
= mpz_get_si (end
->value
.integer
) + 1
1039 - mpz_get_si (start
->value
.integer
);
1047 gfc_error ("Argument of %s at %L must be of length one",
1048 gfc_current_intrinsic
, &c
->where
);
1057 gfc_check_idnint (gfc_expr
* a
)
1059 if (double_check (a
, 0) == FAILURE
)
1067 gfc_check_ieor (gfc_expr
* i
, gfc_expr
* j
)
1069 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1072 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1075 if (i
->ts
.kind
!= j
->ts
.kind
)
1077 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1078 &i
->where
) == FAILURE
)
1087 gfc_check_index (gfc_expr
* string
, gfc_expr
* substring
, gfc_expr
* back
)
1089 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
1090 || type_check (substring
, 1, BT_CHARACTER
) == FAILURE
)
1094 if (back
!= NULL
&& type_check (back
, 2, BT_LOGICAL
) == FAILURE
)
1097 if (string
->ts
.kind
!= substring
->ts
.kind
)
1099 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1100 "kind as '%s'", gfc_current_intrinsic_arg
[1],
1101 gfc_current_intrinsic
, &substring
->where
,
1102 gfc_current_intrinsic_arg
[0]);
1111 gfc_check_int (gfc_expr
* x
, gfc_expr
* kind
)
1113 if (numeric_check (x
, 0) == FAILURE
)
1118 if (type_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1121 if (scalar_check (kind
, 1) == FAILURE
)
1130 gfc_check_ior (gfc_expr
* i
, gfc_expr
* j
)
1132 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1135 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1138 if (i
->ts
.kind
!= j
->ts
.kind
)
1140 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1141 &i
->where
) == FAILURE
)
1150 gfc_check_ishft (gfc_expr
* i
, gfc_expr
* shift
)
1152 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
1153 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1161 gfc_check_ishftc (gfc_expr
* i
, gfc_expr
* shift
, gfc_expr
* size
)
1163 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
1164 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1167 if (size
!= NULL
&& type_check (size
, 2, BT_INTEGER
) == FAILURE
)
1175 gfc_check_kill (gfc_expr
* pid
, gfc_expr
* sig
)
1177 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
1180 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
1188 gfc_check_kill_sub (gfc_expr
* pid
, gfc_expr
* sig
, gfc_expr
* status
)
1190 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
1193 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
1199 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1202 if (scalar_check (status
, 2) == FAILURE
)
1210 gfc_check_kind (gfc_expr
* x
)
1212 if (x
->ts
.type
== BT_DERIVED
)
1214 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1215 "non-derived type", gfc_current_intrinsic_arg
[0],
1216 gfc_current_intrinsic
, &x
->where
);
1225 gfc_check_lbound (gfc_expr
* array
, gfc_expr
* dim
)
1227 if (array_check (array
, 0) == FAILURE
)
1232 if (dim_check (dim
, 1, 1) == FAILURE
)
1235 if (dim_rank_check (dim
, array
, 1) == FAILURE
)
1243 gfc_check_link (gfc_expr
* path1
, gfc_expr
* path2
)
1245 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1248 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1256 gfc_check_link_sub (gfc_expr
* path1
, gfc_expr
* path2
, gfc_expr
* status
)
1258 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1261 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1267 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1270 if (scalar_check (status
, 2) == FAILURE
)
1277 gfc_check_loc (gfc_expr
*expr
)
1279 return variable_check (expr
, 0);
1284 gfc_check_symlnk (gfc_expr
* path1
, gfc_expr
* path2
)
1286 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1289 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1297 gfc_check_symlnk_sub (gfc_expr
* path1
, gfc_expr
* path2
, gfc_expr
* status
)
1299 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1302 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1308 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1311 if (scalar_check (status
, 2) == FAILURE
)
1319 gfc_check_logical (gfc_expr
* a
, gfc_expr
* kind
)
1321 if (type_check (a
, 0, BT_LOGICAL
) == FAILURE
)
1323 if (kind_check (kind
, 1, BT_LOGICAL
) == FAILURE
)
1330 /* Min/max family. */
1333 min_max_args (gfc_actual_arglist
* arg
)
1335 if (arg
== NULL
|| arg
->next
== NULL
)
1337 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1338 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
1347 check_rest (bt type
, int kind
, gfc_actual_arglist
* arg
)
1352 if (min_max_args (arg
) == FAILURE
)
1357 for (; arg
; arg
= arg
->next
, n
++)
1360 if (x
->ts
.type
!= type
|| x
->ts
.kind
!= kind
)
1362 if (x
->ts
.type
== type
)
1364 if (gfc_notify_std (GFC_STD_GNU
,
1365 "Extension: Different type kinds at %L", &x
->where
)
1371 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be %s(%d)",
1372 n
, gfc_current_intrinsic
, &x
->where
,
1373 gfc_basic_typename (type
), kind
);
1384 gfc_check_min_max (gfc_actual_arglist
* arg
)
1388 if (min_max_args (arg
) == FAILURE
)
1393 if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
1396 ("'a1' argument of '%s' intrinsic at %L must be INTEGER or REAL",
1397 gfc_current_intrinsic
, &x
->where
);
1401 return check_rest (x
->ts
.type
, x
->ts
.kind
, arg
);
1406 gfc_check_min_max_integer (gfc_actual_arglist
* arg
)
1408 return check_rest (BT_INTEGER
, gfc_default_integer_kind
, arg
);
1413 gfc_check_min_max_real (gfc_actual_arglist
* arg
)
1415 return check_rest (BT_REAL
, gfc_default_real_kind
, arg
);
1420 gfc_check_min_max_double (gfc_actual_arglist
* arg
)
1422 return check_rest (BT_REAL
, gfc_default_double_kind
, arg
);
1425 /* End of min/max family. */
1428 gfc_check_malloc (gfc_expr
* size
)
1430 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
1433 if (scalar_check (size
, 0) == FAILURE
)
1441 gfc_check_matmul (gfc_expr
* matrix_a
, gfc_expr
* matrix_b
)
1443 if ((matrix_a
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_b
->ts
))
1445 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1446 "or LOGICAL", gfc_current_intrinsic_arg
[0],
1447 gfc_current_intrinsic
, &matrix_a
->where
);
1451 if ((matrix_b
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_a
->ts
))
1453 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1454 "or LOGICAL", gfc_current_intrinsic_arg
[1],
1455 gfc_current_intrinsic
, &matrix_b
->where
);
1459 switch (matrix_a
->rank
)
1462 if (rank_check (matrix_b
, 1, 2) == FAILURE
)
1467 if (matrix_b
->rank
== 2)
1469 if (rank_check (matrix_b
, 1, 1) == FAILURE
)
1474 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
1475 "1 or 2", gfc_current_intrinsic_arg
[0],
1476 gfc_current_intrinsic
, &matrix_a
->where
);
1484 /* Whoever came up with this interface was probably on something.
1485 The possibilities for the occupation of the second and third
1492 NULL MASK minloc(array, mask=m)
1495 I.e. in the case of minloc(array,mask), mask will be in the second
1496 position of the argument list and we'll have to fix that up. */
1499 gfc_check_minloc_maxloc (gfc_actual_arglist
* ap
)
1501 gfc_expr
*a
, *m
, *d
;
1504 if (int_or_real_check (a
, 0) == FAILURE
1505 || array_check (a
, 0) == FAILURE
)
1509 m
= ap
->next
->next
->expr
;
1511 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
1512 && ap
->next
->name
== NULL
)
1517 ap
->next
->expr
= NULL
;
1518 ap
->next
->next
->expr
= m
;
1522 && (scalar_check (d
, 1) == FAILURE
1523 || type_check (d
, 1, BT_INTEGER
) == FAILURE
))
1526 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
1533 /* Similar to minloc/maxloc, the argument list might need to be
1534 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1535 difference is that MINLOC/MAXLOC take an additional KIND argument.
1536 The possibilities are:
1542 NULL MASK minval(array, mask=m)
1545 I.e. in the case of minval(array,mask), mask will be in the second
1546 position of the argument list and we'll have to fix that up. */
1549 check_reduction (gfc_actual_arglist
* ap
)
1554 m
= ap
->next
->next
->expr
;
1556 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
1557 && ap
->next
->name
== NULL
)
1562 ap
->next
->expr
= NULL
;
1563 ap
->next
->next
->expr
= m
;
1567 && (scalar_check (d
, 1) == FAILURE
1568 || type_check (d
, 1, BT_INTEGER
) == FAILURE
))
1571 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
1579 gfc_check_minval_maxval (gfc_actual_arglist
* ap
)
1581 if (int_or_real_check (ap
->expr
, 0) == FAILURE
1582 || array_check (ap
->expr
, 0) == FAILURE
)
1585 return check_reduction (ap
);
1590 gfc_check_product_sum (gfc_actual_arglist
* ap
)
1592 if (numeric_check (ap
->expr
, 0) == FAILURE
1593 || array_check (ap
->expr
, 0) == FAILURE
)
1596 return check_reduction (ap
);
1601 gfc_check_merge (gfc_expr
* tsource
, gfc_expr
* fsource
, gfc_expr
* mask
)
1603 if (same_type_check (tsource
, 0, fsource
, 1) == FAILURE
)
1606 if (type_check (mask
, 2, BT_LOGICAL
) == FAILURE
)
1614 gfc_check_nearest (gfc_expr
* x
, gfc_expr
* s
)
1616 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1619 if (type_check (s
, 1, BT_REAL
) == FAILURE
)
1627 gfc_check_null (gfc_expr
* mold
)
1629 symbol_attribute attr
;
1634 if (variable_check (mold
, 0) == FAILURE
)
1637 attr
= gfc_variable_attr (mold
, NULL
);
1641 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
1642 gfc_current_intrinsic_arg
[0],
1643 gfc_current_intrinsic
, &mold
->where
);
1652 gfc_check_pack (gfc_expr
* array
, gfc_expr
* mask
, gfc_expr
* vector
)
1654 if (array_check (array
, 0) == FAILURE
)
1657 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
1660 if (mask
->rank
!= 0 && mask
->rank
!= array
->rank
)
1662 gfc_error ("'%s' argument of '%s' intrinsic at %L must be conformable "
1663 "with '%s' argument", gfc_current_intrinsic_arg
[0],
1664 gfc_current_intrinsic
, &array
->where
,
1665 gfc_current_intrinsic_arg
[1]);
1671 if (same_type_check (array
, 0, vector
, 2) == FAILURE
)
1674 if (rank_check (vector
, 2, 1) == FAILURE
)
1677 /* TODO: More constraints here. */
1685 gfc_check_precision (gfc_expr
* x
)
1687 if (x
->ts
.type
!= BT_REAL
&& x
->ts
.type
!= BT_COMPLEX
)
1689 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of type "
1690 "REAL or COMPLEX", gfc_current_intrinsic_arg
[0],
1691 gfc_current_intrinsic
, &x
->where
);
1700 gfc_check_present (gfc_expr
* a
)
1704 if (variable_check (a
, 0) == FAILURE
)
1707 sym
= a
->symtree
->n
.sym
;
1708 if (!sym
->attr
.dummy
)
1710 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
1711 "dummy variable", gfc_current_intrinsic_arg
[0],
1712 gfc_current_intrinsic
, &a
->where
);
1716 if (!sym
->attr
.optional
)
1718 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
1719 "an OPTIONAL dummy variable", gfc_current_intrinsic_arg
[0],
1720 gfc_current_intrinsic
, &a
->where
);
1729 gfc_check_radix (gfc_expr
* x
)
1731 if (int_or_real_check (x
, 0) == FAILURE
)
1739 gfc_check_range (gfc_expr
* x
)
1741 if (numeric_check (x
, 0) == FAILURE
)
1748 /* real, float, sngl. */
1750 gfc_check_real (gfc_expr
* a
, gfc_expr
* kind
)
1752 if (numeric_check (a
, 0) == FAILURE
)
1755 if (kind_check (kind
, 1, BT_REAL
) == FAILURE
)
1763 gfc_check_rename (gfc_expr
* path1
, gfc_expr
* path2
)
1765 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1768 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1776 gfc_check_rename_sub (gfc_expr
* path1
, gfc_expr
* path2
, gfc_expr
* status
)
1778 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1781 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1787 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1790 if (scalar_check (status
, 2) == FAILURE
)
1798 gfc_check_repeat (gfc_expr
* x
, gfc_expr
* y
)
1800 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
1803 if (scalar_check (x
, 0) == FAILURE
)
1806 if (type_check (y
, 0, BT_INTEGER
) == FAILURE
)
1809 if (scalar_check (y
, 1) == FAILURE
)
1817 gfc_check_reshape (gfc_expr
* source
, gfc_expr
* shape
,
1818 gfc_expr
* pad
, gfc_expr
* order
)
1823 if (array_check (source
, 0) == FAILURE
)
1826 if (rank_check (shape
, 1, 1) == FAILURE
)
1829 if (type_check (shape
, 1, BT_INTEGER
) == FAILURE
)
1832 if (gfc_array_size (shape
, &size
) != SUCCESS
)
1834 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
1835 "array of constant size", &shape
->where
);
1839 m
= mpz_cmp_ui (size
, GFC_MAX_DIMENSIONS
);
1844 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
1845 "than %d elements", &shape
->where
, GFC_MAX_DIMENSIONS
);
1851 if (same_type_check (source
, 0, pad
, 2) == FAILURE
)
1853 if (array_check (pad
, 2) == FAILURE
)
1857 if (order
!= NULL
&& array_check (order
, 3) == FAILURE
)
1865 gfc_check_scale (gfc_expr
* x
, gfc_expr
* i
)
1867 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1870 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
1878 gfc_check_scan (gfc_expr
* x
, gfc_expr
* y
, gfc_expr
* z
)
1880 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
1883 if (type_check (y
, 1, BT_CHARACTER
) == FAILURE
)
1886 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
1889 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
1897 gfc_check_secnds (gfc_expr
* r
)
1900 if (type_check (r
, 0, BT_REAL
) == FAILURE
)
1903 if (kind_value_check (r
, 0, 4) == FAILURE
)
1906 if (scalar_check (r
, 0) == FAILURE
)
1914 gfc_check_selected_int_kind (gfc_expr
* r
)
1917 if (type_check (r
, 0, BT_INTEGER
) == FAILURE
)
1920 if (scalar_check (r
, 0) == FAILURE
)
1928 gfc_check_selected_real_kind (gfc_expr
* p
, gfc_expr
* r
)
1930 if (p
== NULL
&& r
== NULL
)
1932 gfc_error ("Missing arguments to %s intrinsic at %L",
1933 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
1938 if (p
!= NULL
&& type_check (p
, 0, BT_INTEGER
) == FAILURE
)
1941 if (r
!= NULL
&& type_check (r
, 1, BT_INTEGER
) == FAILURE
)
1949 gfc_check_set_exponent (gfc_expr
* x
, gfc_expr
* i
)
1951 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1954 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
1962 gfc_check_shape (gfc_expr
* source
)
1966 if (source
->rank
== 0 || source
->expr_type
!= EXPR_VARIABLE
)
1969 ar
= gfc_find_array_ref (source
);
1971 if (ar
->as
&& ar
->as
->type
== AS_ASSUMED_SIZE
)
1973 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
1974 "an assumed size array", &source
->where
);
1983 gfc_check_sign (gfc_expr
* a
, gfc_expr
* b
)
1985 if (int_or_real_check (a
, 0) == FAILURE
)
1988 if (same_type_check (a
, 0, b
, 1) == FAILURE
)
1996 gfc_check_size (gfc_expr
* array
, gfc_expr
* dim
)
1998 if (array_check (array
, 0) == FAILURE
)
2003 if (type_check (dim
, 1, BT_INTEGER
) == FAILURE
)
2006 if (kind_value_check (dim
, 1, gfc_default_integer_kind
) == FAILURE
)
2009 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
2018 gfc_check_sleep_sub (gfc_expr
* seconds
)
2020 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
2023 if (scalar_check (seconds
, 0) == FAILURE
)
2031 gfc_check_spread (gfc_expr
* source
, gfc_expr
* dim
, gfc_expr
* ncopies
)
2033 if (source
->rank
>= GFC_MAX_DIMENSIONS
)
2035 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
2036 "than rank %d", gfc_current_intrinsic_arg
[0],
2037 gfc_current_intrinsic
, &source
->where
, GFC_MAX_DIMENSIONS
);
2042 if (dim_check (dim
, 1, 0) == FAILURE
)
2045 if (type_check (ncopies
, 2, BT_INTEGER
) == FAILURE
)
2048 if (scalar_check (ncopies
, 2) == FAILURE
)
2055 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
2058 gfc_check_fgetputc_sub (gfc_expr
* unit
, gfc_expr
* c
, gfc_expr
* status
)
2060 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2063 if (scalar_check (unit
, 0) == FAILURE
)
2066 if (type_check (c
, 1, BT_CHARACTER
) == FAILURE
)
2072 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
2073 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
2074 || scalar_check (status
, 2) == FAILURE
)
2082 gfc_check_fgetputc (gfc_expr
* unit
, gfc_expr
* c
)
2084 return gfc_check_fgetputc_sub (unit
, c
, NULL
);
2089 gfc_check_fgetput_sub (gfc_expr
* c
, gfc_expr
* status
)
2091 if (type_check (c
, 0, BT_CHARACTER
) == FAILURE
)
2097 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
2098 || kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
2099 || scalar_check (status
, 1) == FAILURE
)
2107 gfc_check_fgetput (gfc_expr
* c
)
2109 return gfc_check_fgetput_sub (c
, NULL
);
2114 gfc_check_fstat (gfc_expr
* unit
, gfc_expr
* array
)
2116 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2119 if (scalar_check (unit
, 0) == FAILURE
)
2122 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
2123 || kind_value_check (unit
, 0, gfc_default_integer_kind
) == FAILURE
)
2126 if (array_check (array
, 1) == FAILURE
)
2134 gfc_check_fstat_sub (gfc_expr
* unit
, gfc_expr
* array
, gfc_expr
* status
)
2136 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2139 if (scalar_check (unit
, 0) == FAILURE
)
2142 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
2143 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
2146 if (array_check (array
, 1) == FAILURE
)
2152 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
2153 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
2156 if (scalar_check (status
, 2) == FAILURE
)
2164 gfc_check_ftell (gfc_expr
* unit
)
2166 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2169 if (scalar_check (unit
, 0) == FAILURE
)
2177 gfc_check_ftell_sub (gfc_expr
* unit
, gfc_expr
* offset
)
2179 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2182 if (scalar_check (unit
, 0) == FAILURE
)
2185 if (type_check (offset
, 1, BT_INTEGER
) == FAILURE
)
2188 if (scalar_check (offset
, 1) == FAILURE
)
2196 gfc_check_stat (gfc_expr
* name
, gfc_expr
* array
)
2198 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2201 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
2202 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
2205 if (array_check (array
, 1) == FAILURE
)
2213 gfc_check_stat_sub (gfc_expr
* name
, gfc_expr
* array
, gfc_expr
* status
)
2215 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2218 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
2219 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
2222 if (array_check (array
, 1) == FAILURE
)
2228 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
2229 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
2232 if (scalar_check (status
, 2) == FAILURE
)
2240 gfc_check_transfer (gfc_expr
* source ATTRIBUTE_UNUSED
,
2241 gfc_expr
* mold ATTRIBUTE_UNUSED
,
2246 if (type_check (size
, 2, BT_INTEGER
) == FAILURE
)
2249 if (scalar_check (size
, 2) == FAILURE
)
2252 if (nonoptional_check (size
, 2) == FAILURE
)
2261 gfc_check_transpose (gfc_expr
* matrix
)
2263 if (rank_check (matrix
, 0, 2) == FAILURE
)
2271 gfc_check_ubound (gfc_expr
* array
, gfc_expr
* dim
)
2273 if (array_check (array
, 0) == FAILURE
)
2278 if (dim_check (dim
, 1, 1) == FAILURE
)
2281 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
2290 gfc_check_unpack (gfc_expr
* vector
, gfc_expr
* mask
, gfc_expr
* field
)
2292 if (rank_check (vector
, 0, 1) == FAILURE
)
2295 if (array_check (mask
, 1) == FAILURE
)
2298 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
2301 if (same_type_check (vector
, 0, field
, 2) == FAILURE
)
2309 gfc_check_verify (gfc_expr
* x
, gfc_expr
* y
, gfc_expr
* z
)
2311 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
2314 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
2317 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
2325 gfc_check_trim (gfc_expr
* x
)
2327 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
2330 if (scalar_check (x
, 0) == FAILURE
)
2338 gfc_check_ttynam (gfc_expr
* unit
)
2340 if (scalar_check (unit
, 0) == FAILURE
)
2343 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2350 /* Common check function for the half a dozen intrinsics that have a
2351 single real argument. */
2354 gfc_check_x (gfc_expr
* x
)
2356 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2363 /************* Check functions for intrinsic subroutines *************/
2366 gfc_check_cpu_time (gfc_expr
* time
)
2368 if (scalar_check (time
, 0) == FAILURE
)
2371 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
2374 if (variable_check (time
, 0) == FAILURE
)
2382 gfc_check_date_and_time (gfc_expr
* date
, gfc_expr
* time
,
2383 gfc_expr
* zone
, gfc_expr
* values
)
2387 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
2389 if (scalar_check (date
, 0) == FAILURE
)
2391 if (variable_check (date
, 0) == FAILURE
)
2397 if (type_check (time
, 1, BT_CHARACTER
) == FAILURE
)
2399 if (scalar_check (time
, 1) == FAILURE
)
2401 if (variable_check (time
, 1) == FAILURE
)
2407 if (type_check (zone
, 2, BT_CHARACTER
) == FAILURE
)
2409 if (scalar_check (zone
, 2) == FAILURE
)
2411 if (variable_check (zone
, 2) == FAILURE
)
2417 if (type_check (values
, 3, BT_INTEGER
) == FAILURE
)
2419 if (array_check (values
, 3) == FAILURE
)
2421 if (rank_check (values
, 3, 1) == FAILURE
)
2423 if (variable_check (values
, 3) == FAILURE
)
2432 gfc_check_mvbits (gfc_expr
* from
, gfc_expr
* frompos
, gfc_expr
* len
,
2433 gfc_expr
* to
, gfc_expr
* topos
)
2435 if (type_check (from
, 0, BT_INTEGER
) == FAILURE
)
2438 if (type_check (frompos
, 1, BT_INTEGER
) == FAILURE
)
2441 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
2444 if (same_type_check (from
, 0, to
, 3) == FAILURE
)
2447 if (variable_check (to
, 3) == FAILURE
)
2450 if (type_check (topos
, 4, BT_INTEGER
) == FAILURE
)
2458 gfc_check_random_number (gfc_expr
* harvest
)
2460 if (type_check (harvest
, 0, BT_REAL
) == FAILURE
)
2463 if (variable_check (harvest
, 0) == FAILURE
)
2471 gfc_check_random_seed (gfc_expr
* size
, gfc_expr
* put
, gfc_expr
* get
)
2475 if (scalar_check (size
, 0) == FAILURE
)
2478 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
2481 if (variable_check (size
, 0) == FAILURE
)
2484 if (kind_value_check (size
, 0, gfc_default_integer_kind
) == FAILURE
)
2492 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
,
2495 if (array_check (put
, 1) == FAILURE
)
2498 if (rank_check (put
, 1, 1) == FAILURE
)
2501 if (type_check (put
, 1, BT_INTEGER
) == FAILURE
)
2504 if (kind_value_check (put
, 1, gfc_default_integer_kind
) == FAILURE
)
2511 if (size
!= NULL
|| put
!= NULL
)
2512 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
,
2515 if (array_check (get
, 2) == FAILURE
)
2518 if (rank_check (get
, 2, 1) == FAILURE
)
2521 if (type_check (get
, 2, BT_INTEGER
) == FAILURE
)
2524 if (variable_check (get
, 2) == FAILURE
)
2527 if (kind_value_check (get
, 2, gfc_default_integer_kind
) == FAILURE
)
2535 gfc_check_second_sub (gfc_expr
* time
)
2537 if (scalar_check (time
, 0) == FAILURE
)
2540 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
2543 if (kind_value_check(time
, 0, 4) == FAILURE
)
2550 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
2551 count, count_rate, and count_max are all optional arguments */
2554 gfc_check_system_clock (gfc_expr
* count
, gfc_expr
* count_rate
,
2555 gfc_expr
* count_max
)
2559 if (scalar_check (count
, 0) == FAILURE
)
2562 if (type_check (count
, 0, BT_INTEGER
) == FAILURE
)
2565 if (variable_check (count
, 0) == FAILURE
)
2569 if (count_rate
!= NULL
)
2571 if (scalar_check (count_rate
, 1) == FAILURE
)
2574 if (type_check (count_rate
, 1, BT_INTEGER
) == FAILURE
)
2577 if (variable_check (count_rate
, 1) == FAILURE
)
2581 && same_type_check (count
, 0, count_rate
, 1) == FAILURE
)
2586 if (count_max
!= NULL
)
2588 if (scalar_check (count_max
, 2) == FAILURE
)
2591 if (type_check (count_max
, 2, BT_INTEGER
) == FAILURE
)
2594 if (variable_check (count_max
, 2) == FAILURE
)
2598 && same_type_check (count
, 0, count_max
, 2) == FAILURE
)
2601 if (count_rate
!= NULL
2602 && same_type_check (count_rate
, 1, count_max
, 2) == FAILURE
)
2610 gfc_check_irand (gfc_expr
* x
)
2615 if (scalar_check (x
, 0) == FAILURE
)
2618 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
2621 if (kind_value_check(x
, 0, 4) == FAILURE
)
2629 gfc_check_alarm_sub (gfc_expr
* seconds
, gfc_expr
* handler
, gfc_expr
* status
)
2631 if (scalar_check (seconds
, 0) == FAILURE
)
2634 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
2637 if (handler
->ts
.type
!= BT_INTEGER
&& handler
->ts
.type
!= BT_PROCEDURE
)
2640 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
2641 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
, &handler
->where
);
2645 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
2651 if (scalar_check (status
, 2) == FAILURE
)
2654 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2662 gfc_check_rand (gfc_expr
* x
)
2667 if (scalar_check (x
, 0) == FAILURE
)
2670 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
2673 if (kind_value_check(x
, 0, 4) == FAILURE
)
2680 gfc_check_srand (gfc_expr
* x
)
2682 if (scalar_check (x
, 0) == FAILURE
)
2685 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
2688 if (kind_value_check(x
, 0, 4) == FAILURE
)
2695 gfc_check_ctime_sub (gfc_expr
* time
, gfc_expr
* result
)
2697 if (scalar_check (time
, 0) == FAILURE
)
2700 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
2703 if (type_check (result
, 1, BT_CHARACTER
) == FAILURE
)
2710 gfc_check_etime (gfc_expr
* x
)
2712 if (array_check (x
, 0) == FAILURE
)
2715 if (rank_check (x
, 0, 1) == FAILURE
)
2718 if (variable_check (x
, 0) == FAILURE
)
2721 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2724 if (kind_value_check(x
, 0, 4) == FAILURE
)
2731 gfc_check_etime_sub (gfc_expr
* values
, gfc_expr
* time
)
2733 if (array_check (values
, 0) == FAILURE
)
2736 if (rank_check (values
, 0, 1) == FAILURE
)
2739 if (variable_check (values
, 0) == FAILURE
)
2742 if (type_check (values
, 0, BT_REAL
) == FAILURE
)
2745 if (kind_value_check(values
, 0, 4) == FAILURE
)
2748 if (scalar_check (time
, 1) == FAILURE
)
2751 if (type_check (time
, 1, BT_REAL
) == FAILURE
)
2754 if (kind_value_check(time
, 1, 4) == FAILURE
)
2762 gfc_check_fdate_sub (gfc_expr
* date
)
2764 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
2772 gfc_check_gerror (gfc_expr
* msg
)
2774 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
2782 gfc_check_getcwd_sub (gfc_expr
* cwd
, gfc_expr
* status
)
2784 if (type_check (cwd
, 0, BT_CHARACTER
) == FAILURE
)
2790 if (scalar_check (status
, 1) == FAILURE
)
2793 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
2801 gfc_check_getlog (gfc_expr
* msg
)
2803 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
2811 gfc_check_exit (gfc_expr
* status
)
2816 if (type_check (status
, 0, BT_INTEGER
) == FAILURE
)
2819 if (scalar_check (status
, 0) == FAILURE
)
2827 gfc_check_flush (gfc_expr
* unit
)
2832 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2835 if (scalar_check (unit
, 0) == FAILURE
)
2843 gfc_check_free (gfc_expr
* i
)
2845 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
2848 if (scalar_check (i
, 0) == FAILURE
)
2856 gfc_check_hostnm (gfc_expr
* name
)
2858 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2866 gfc_check_hostnm_sub (gfc_expr
* name
, gfc_expr
* status
)
2868 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2874 if (scalar_check (status
, 1) == FAILURE
)
2877 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
2885 gfc_check_ttynam_sub (gfc_expr
* unit
, gfc_expr
* name
)
2887 if (scalar_check (unit
, 0) == FAILURE
)
2890 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2893 if (type_check (name
, 1, BT_CHARACTER
) == FAILURE
)
2901 gfc_check_isatty (gfc_expr
* unit
)
2906 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2909 if (scalar_check (unit
, 0) == FAILURE
)
2917 gfc_check_perror (gfc_expr
* string
)
2919 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
)
2927 gfc_check_umask (gfc_expr
* mask
)
2929 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
2932 if (scalar_check (mask
, 0) == FAILURE
)
2940 gfc_check_umask_sub (gfc_expr
* mask
, gfc_expr
* old
)
2942 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
2945 if (scalar_check (mask
, 0) == FAILURE
)
2951 if (scalar_check (old
, 1) == FAILURE
)
2954 if (type_check (old
, 1, BT_INTEGER
) == FAILURE
)
2962 gfc_check_unlink (gfc_expr
* name
)
2964 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2972 gfc_check_unlink_sub (gfc_expr
* name
, gfc_expr
* status
)
2974 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2980 if (scalar_check (status
, 1) == FAILURE
)
2983 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
2991 gfc_check_signal (gfc_expr
* number
, gfc_expr
* handler
)
2993 if (scalar_check (number
, 0) == FAILURE
)
2996 if (type_check (number
, 0, BT_INTEGER
) == FAILURE
)
2999 if (handler
->ts
.type
!= BT_INTEGER
&& handler
->ts
.type
!= BT_PROCEDURE
)
3002 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
3003 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
, &handler
->where
);
3007 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
3015 gfc_check_signal_sub (gfc_expr
* number
, gfc_expr
* handler
, gfc_expr
* status
)
3017 if (scalar_check (number
, 0) == FAILURE
)
3020 if (type_check (number
, 0, BT_INTEGER
) == FAILURE
)
3023 if (handler
->ts
.type
!= BT_INTEGER
&& handler
->ts
.type
!= BT_PROCEDURE
)
3026 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
3027 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
, &handler
->where
);
3031 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
3037 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
3040 if (scalar_check (status
, 2) == FAILURE
)
3048 gfc_check_system_sub (gfc_expr
* cmd
, gfc_expr
* status
)
3050 if (type_check (cmd
, 0, BT_CHARACTER
) == FAILURE
)
3053 if (scalar_check (status
, 1) == FAILURE
)
3056 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
3059 if (kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
)
3066 /* This is used for the GNU intrinsics AND, OR and XOR. */
3068 gfc_check_and (gfc_expr
* i
, gfc_expr
* j
)
3070 if (i
->ts
.type
!= BT_INTEGER
&& i
->ts
.type
!= BT_LOGICAL
)
3073 "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL",
3074 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic
, &i
->where
);
3078 if (j
->ts
.type
!= BT_INTEGER
&& j
->ts
.type
!= BT_LOGICAL
)
3081 "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL",
3082 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
, &j
->where
);
3086 if (i
->ts
.type
!= j
->ts
.type
)
3088 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
3089 "have the same type", gfc_current_intrinsic_arg
[0],
3090 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
,
3095 if (scalar_check (i
, 0) == FAILURE
)
3098 if (scalar_check (j
, 1) == FAILURE
)