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 (variable_check (pointer
, 0) == FAILURE
)
483 attr
= gfc_variable_attr (pointer
, NULL
);
486 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
487 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic
,
495 /* Target argument is optional. */
496 if (target
->expr_type
== EXPR_NULL
)
498 gfc_error ("NULL pointer at %L is not permitted as actual argument "
499 "of '%s' intrinsic function",
500 &target
->where
, gfc_current_intrinsic
);
504 attr
= gfc_variable_attr (target
, NULL
);
505 if (!attr
.pointer
&& !attr
.target
)
507 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
508 "or a TARGET", gfc_current_intrinsic_arg
[1],
509 gfc_current_intrinsic
, &target
->where
);
514 if (same_type_check (pointer
, 0, target
, 1) == FAILURE
)
516 if (rank_check (target
, 0, pointer
->rank
) == FAILURE
)
518 if (target
->rank
> 0)
520 for (i
= 0; i
< target
->rank
; i
++)
521 if (target
->ref
->u
.ar
.dimen_type
[i
] == DIMEN_VECTOR
)
523 gfc_error ("Array section with a vector subscript at %L shall not "
524 "be the target of a pointer",
535 gfc_check_atan2 (gfc_expr
* y
, gfc_expr
* x
)
537 if (type_check (y
, 0, BT_REAL
) == FAILURE
)
539 if (same_type_check (y
, 0, x
, 1) == FAILURE
)
546 /* BESJN and BESYN functions. */
549 gfc_check_besn (gfc_expr
* n
, gfc_expr
* x
)
551 if (scalar_check (n
, 0) == FAILURE
)
554 if (type_check (n
, 0, BT_INTEGER
) == FAILURE
)
557 if (scalar_check (x
, 1) == FAILURE
)
560 if (type_check (x
, 1, BT_REAL
) == FAILURE
)
568 gfc_check_btest (gfc_expr
* i
, gfc_expr
* pos
)
570 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
572 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
580 gfc_check_char (gfc_expr
* i
, gfc_expr
* kind
)
582 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
584 if (kind_check (kind
, 1, BT_CHARACTER
) == FAILURE
)
592 gfc_check_chdir (gfc_expr
* dir
)
594 if (type_check (dir
, 0, BT_CHARACTER
) == FAILURE
)
602 gfc_check_chdir_sub (gfc_expr
* dir
, gfc_expr
* status
)
604 if (type_check (dir
, 0, BT_CHARACTER
) == FAILURE
)
610 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
613 if (scalar_check (status
, 1) == FAILURE
)
621 gfc_check_cmplx (gfc_expr
* x
, gfc_expr
* y
, gfc_expr
* kind
)
623 if (numeric_check (x
, 0) == FAILURE
)
628 if (numeric_check (y
, 1) == FAILURE
)
631 if (x
->ts
.type
== BT_COMPLEX
)
633 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
634 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg
[1],
635 gfc_current_intrinsic
, &y
->where
);
640 if (kind_check (kind
, 2, BT_COMPLEX
) == FAILURE
)
648 gfc_check_complex (gfc_expr
* x
, gfc_expr
* y
)
650 if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
653 "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL",
654 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic
, &x
->where
);
657 if (scalar_check (x
, 0) == FAILURE
)
660 if (y
->ts
.type
!= BT_INTEGER
&& y
->ts
.type
!= BT_REAL
)
663 "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL",
664 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
, &y
->where
);
667 if (scalar_check (y
, 1) == FAILURE
)
675 gfc_check_count (gfc_expr
* mask
, gfc_expr
* dim
)
677 if (logical_array_check (mask
, 0) == FAILURE
)
679 if (dim_check (dim
, 1, 1) == FAILURE
)
687 gfc_check_cshift (gfc_expr
* array
, gfc_expr
* shift
, gfc_expr
* dim
)
689 if (array_check (array
, 0) == FAILURE
)
692 if (array
->rank
== 1)
694 if (scalar_check (shift
, 1) == FAILURE
)
699 /* TODO: more requirements on shift parameter. */
702 if (dim_check (dim
, 2, 1) == FAILURE
)
710 gfc_check_ctime (gfc_expr
* time
)
712 if (scalar_check (time
, 0) == FAILURE
)
715 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
723 gfc_check_dcmplx (gfc_expr
* x
, gfc_expr
* y
)
725 if (numeric_check (x
, 0) == FAILURE
)
730 if (numeric_check (y
, 1) == FAILURE
)
733 if (x
->ts
.type
== BT_COMPLEX
)
735 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
736 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg
[1],
737 gfc_current_intrinsic
, &y
->where
);
747 gfc_check_dble (gfc_expr
* x
)
749 if (numeric_check (x
, 0) == FAILURE
)
757 gfc_check_digits (gfc_expr
* x
)
759 if (int_or_real_check (x
, 0) == FAILURE
)
767 gfc_check_dot_product (gfc_expr
* vector_a
, gfc_expr
* vector_b
)
769 switch (vector_a
->ts
.type
)
772 if (type_check (vector_b
, 1, BT_LOGICAL
) == FAILURE
)
779 if (numeric_check (vector_b
, 1) == FAILURE
)
784 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
785 "or LOGICAL", gfc_current_intrinsic_arg
[0],
786 gfc_current_intrinsic
, &vector_a
->where
);
790 if (rank_check (vector_a
, 0, 1) == FAILURE
)
793 if (rank_check (vector_b
, 1, 1) == FAILURE
)
801 gfc_check_eoshift (gfc_expr
* array
, gfc_expr
* shift
, gfc_expr
* boundary
,
804 if (array_check (array
, 0) == FAILURE
)
807 if (type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
810 if (array
->rank
== 1)
812 if (scalar_check (shift
, 2) == FAILURE
)
817 /* TODO: more weird restrictions on shift. */
820 if (boundary
!= NULL
)
822 if (same_type_check (array
, 0, boundary
, 2) == FAILURE
)
825 /* TODO: more restrictions on boundary. */
828 if (dim_check (dim
, 1, 1) == FAILURE
)
835 /* A single complex argument. */
838 gfc_check_fn_c (gfc_expr
* a
)
840 if (type_check (a
, 0, BT_COMPLEX
) == FAILURE
)
847 /* A single real argument. */
850 gfc_check_fn_r (gfc_expr
* a
)
852 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
859 /* A single real or complex argument. */
862 gfc_check_fn_rc (gfc_expr
* a
)
864 if (real_or_complex_check (a
, 0) == FAILURE
)
872 gfc_check_fnum (gfc_expr
* unit
)
874 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
877 if (scalar_check (unit
, 0) == FAILURE
)
884 /* This is used for the g77 one-argument Bessel functions, and the
888 gfc_check_g77_math1 (gfc_expr
* x
)
890 if (scalar_check (x
, 0) == FAILURE
)
893 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
901 gfc_check_huge (gfc_expr
* x
)
903 if (int_or_real_check (x
, 0) == FAILURE
)
910 /* Check that the single argument is an integer. */
913 gfc_check_i (gfc_expr
* i
)
915 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
923 gfc_check_iand (gfc_expr
* i
, gfc_expr
* j
)
925 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
928 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
931 if (i
->ts
.kind
!= j
->ts
.kind
)
933 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
934 &i
->where
) == FAILURE
)
943 gfc_check_ibclr (gfc_expr
* i
, gfc_expr
* pos
)
945 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
948 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
956 gfc_check_ibits (gfc_expr
* i
, gfc_expr
* pos
, gfc_expr
* len
)
958 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
961 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
964 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
972 gfc_check_ibset (gfc_expr
* i
, gfc_expr
* pos
)
974 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
977 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
985 gfc_check_ichar_iachar (gfc_expr
* c
)
989 if (type_check (c
, 0, BT_CHARACTER
) == FAILURE
)
992 if (c
->expr_type
== EXPR_VARIABLE
|| c
->expr_type
== EXPR_SUBSTRING
)
998 /* Substring references don't have the charlength set. */
1000 while (ref
&& ref
->type
!= REF_SUBSTRING
)
1003 gcc_assert (ref
== NULL
|| ref
->type
== REF_SUBSTRING
);
1007 /* Check that the argument is length one. Non-constant lengths
1008 can't be checked here, so assume thay are ok. */
1009 if (c
->ts
.cl
&& c
->ts
.cl
->length
)
1011 /* If we already have a length for this expression then use it. */
1012 if (c
->ts
.cl
->length
->expr_type
!= EXPR_CONSTANT
)
1014 i
= mpz_get_si (c
->ts
.cl
->length
->value
.integer
);
1021 start
= ref
->u
.ss
.start
;
1022 end
= ref
->u
.ss
.end
;
1025 if (end
== NULL
|| end
->expr_type
!= EXPR_CONSTANT
1026 || start
->expr_type
!= EXPR_CONSTANT
)
1029 i
= mpz_get_si (end
->value
.integer
) + 1
1030 - mpz_get_si (start
->value
.integer
);
1038 gfc_error ("Argument of %s at %L must be of length one",
1039 gfc_current_intrinsic
, &c
->where
);
1048 gfc_check_idnint (gfc_expr
* a
)
1050 if (double_check (a
, 0) == FAILURE
)
1058 gfc_check_ieor (gfc_expr
* i
, gfc_expr
* j
)
1060 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1063 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1066 if (i
->ts
.kind
!= j
->ts
.kind
)
1068 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1069 &i
->where
) == FAILURE
)
1078 gfc_check_index (gfc_expr
* string
, gfc_expr
* substring
, gfc_expr
* back
)
1080 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
1081 || type_check (substring
, 1, BT_CHARACTER
) == FAILURE
)
1085 if (back
!= NULL
&& type_check (back
, 2, BT_LOGICAL
) == FAILURE
)
1088 if (string
->ts
.kind
!= substring
->ts
.kind
)
1090 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1091 "kind as '%s'", gfc_current_intrinsic_arg
[1],
1092 gfc_current_intrinsic
, &substring
->where
,
1093 gfc_current_intrinsic_arg
[0]);
1102 gfc_check_int (gfc_expr
* x
, gfc_expr
* kind
)
1104 if (numeric_check (x
, 0) == FAILURE
)
1109 if (type_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1112 if (scalar_check (kind
, 1) == FAILURE
)
1121 gfc_check_ior (gfc_expr
* i
, gfc_expr
* j
)
1123 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1126 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1129 if (i
->ts
.kind
!= j
->ts
.kind
)
1131 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1132 &i
->where
) == FAILURE
)
1141 gfc_check_ishft (gfc_expr
* i
, gfc_expr
* shift
)
1143 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
1144 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1152 gfc_check_ishftc (gfc_expr
* i
, gfc_expr
* shift
, gfc_expr
* size
)
1154 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
1155 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1158 if (size
!= NULL
&& type_check (size
, 2, BT_INTEGER
) == FAILURE
)
1166 gfc_check_kill (gfc_expr
* pid
, gfc_expr
* sig
)
1168 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
1171 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
1179 gfc_check_kill_sub (gfc_expr
* pid
, gfc_expr
* sig
, gfc_expr
* status
)
1181 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
1184 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
1190 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1193 if (scalar_check (status
, 2) == FAILURE
)
1201 gfc_check_kind (gfc_expr
* x
)
1203 if (x
->ts
.type
== BT_DERIVED
)
1205 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1206 "non-derived type", gfc_current_intrinsic_arg
[0],
1207 gfc_current_intrinsic
, &x
->where
);
1216 gfc_check_lbound (gfc_expr
* array
, gfc_expr
* dim
)
1218 if (array_check (array
, 0) == FAILURE
)
1223 if (dim_check (dim
, 1, 1) == FAILURE
)
1226 if (dim_rank_check (dim
, array
, 1) == FAILURE
)
1234 gfc_check_link (gfc_expr
* path1
, gfc_expr
* path2
)
1236 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1239 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1247 gfc_check_link_sub (gfc_expr
* path1
, gfc_expr
* path2
, gfc_expr
* status
)
1249 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1252 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1258 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1261 if (scalar_check (status
, 2) == FAILURE
)
1268 gfc_check_loc (gfc_expr
*expr
)
1270 return variable_check (expr
, 0);
1275 gfc_check_symlnk (gfc_expr
* path1
, gfc_expr
* path2
)
1277 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1280 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1288 gfc_check_symlnk_sub (gfc_expr
* path1
, gfc_expr
* path2
, gfc_expr
* status
)
1290 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1293 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1299 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1302 if (scalar_check (status
, 2) == FAILURE
)
1310 gfc_check_logical (gfc_expr
* a
, gfc_expr
* kind
)
1312 if (type_check (a
, 0, BT_LOGICAL
) == FAILURE
)
1314 if (kind_check (kind
, 1, BT_LOGICAL
) == FAILURE
)
1321 /* Min/max family. */
1324 min_max_args (gfc_actual_arglist
* arg
)
1326 if (arg
== NULL
|| arg
->next
== NULL
)
1328 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1329 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
1338 check_rest (bt type
, int kind
, gfc_actual_arglist
* arg
)
1343 if (min_max_args (arg
) == FAILURE
)
1348 for (; arg
; arg
= arg
->next
, n
++)
1351 if (x
->ts
.type
!= type
|| x
->ts
.kind
!= kind
)
1353 if (x
->ts
.type
== type
)
1355 if (gfc_notify_std (GFC_STD_GNU
,
1356 "Extension: Different type kinds at %L", &x
->where
)
1362 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be %s(%d)",
1363 n
, gfc_current_intrinsic
, &x
->where
,
1364 gfc_basic_typename (type
), kind
);
1375 gfc_check_min_max (gfc_actual_arglist
* arg
)
1379 if (min_max_args (arg
) == FAILURE
)
1384 if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
1387 ("'a1' argument of '%s' intrinsic at %L must be INTEGER or REAL",
1388 gfc_current_intrinsic
, &x
->where
);
1392 return check_rest (x
->ts
.type
, x
->ts
.kind
, arg
);
1397 gfc_check_min_max_integer (gfc_actual_arglist
* arg
)
1399 return check_rest (BT_INTEGER
, gfc_default_integer_kind
, arg
);
1404 gfc_check_min_max_real (gfc_actual_arglist
* arg
)
1406 return check_rest (BT_REAL
, gfc_default_real_kind
, arg
);
1411 gfc_check_min_max_double (gfc_actual_arglist
* arg
)
1413 return check_rest (BT_REAL
, gfc_default_double_kind
, arg
);
1416 /* End of min/max family. */
1419 gfc_check_malloc (gfc_expr
* size
)
1421 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
1424 if (scalar_check (size
, 0) == FAILURE
)
1432 gfc_check_matmul (gfc_expr
* matrix_a
, gfc_expr
* matrix_b
)
1434 if ((matrix_a
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_b
->ts
))
1436 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1437 "or LOGICAL", gfc_current_intrinsic_arg
[0],
1438 gfc_current_intrinsic
, &matrix_a
->where
);
1442 if ((matrix_b
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_a
->ts
))
1444 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1445 "or LOGICAL", gfc_current_intrinsic_arg
[1],
1446 gfc_current_intrinsic
, &matrix_b
->where
);
1450 switch (matrix_a
->rank
)
1453 if (rank_check (matrix_b
, 1, 2) == FAILURE
)
1458 if (matrix_b
->rank
== 2)
1460 if (rank_check (matrix_b
, 1, 1) == FAILURE
)
1465 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
1466 "1 or 2", gfc_current_intrinsic_arg
[0],
1467 gfc_current_intrinsic
, &matrix_a
->where
);
1475 /* Whoever came up with this interface was probably on something.
1476 The possibilities for the occupation of the second and third
1483 NULL MASK minloc(array, mask=m)
1486 I.e. in the case of minloc(array,mask), mask will be in the second
1487 position of the argument list and we'll have to fix that up. */
1490 gfc_check_minloc_maxloc (gfc_actual_arglist
* ap
)
1492 gfc_expr
*a
, *m
, *d
;
1495 if (int_or_real_check (a
, 0) == FAILURE
1496 || array_check (a
, 0) == FAILURE
)
1500 m
= ap
->next
->next
->expr
;
1502 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
1503 && ap
->next
->name
== NULL
)
1508 ap
->next
->expr
= NULL
;
1509 ap
->next
->next
->expr
= m
;
1513 && (scalar_check (d
, 1) == FAILURE
1514 || type_check (d
, 1, BT_INTEGER
) == FAILURE
))
1517 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
1524 /* Similar to minloc/maxloc, the argument list might need to be
1525 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1526 difference is that MINLOC/MAXLOC take an additional KIND argument.
1527 The possibilities are:
1533 NULL MASK minval(array, mask=m)
1536 I.e. in the case of minval(array,mask), mask will be in the second
1537 position of the argument list and we'll have to fix that up. */
1540 check_reduction (gfc_actual_arglist
* ap
)
1545 m
= ap
->next
->next
->expr
;
1547 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
1548 && ap
->next
->name
== NULL
)
1553 ap
->next
->expr
= NULL
;
1554 ap
->next
->next
->expr
= m
;
1558 && (scalar_check (d
, 1) == FAILURE
1559 || type_check (d
, 1, BT_INTEGER
) == FAILURE
))
1562 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
1570 gfc_check_minval_maxval (gfc_actual_arglist
* ap
)
1572 if (int_or_real_check (ap
->expr
, 0) == FAILURE
1573 || array_check (ap
->expr
, 0) == FAILURE
)
1576 return check_reduction (ap
);
1581 gfc_check_product_sum (gfc_actual_arglist
* ap
)
1583 if (numeric_check (ap
->expr
, 0) == FAILURE
1584 || array_check (ap
->expr
, 0) == FAILURE
)
1587 return check_reduction (ap
);
1592 gfc_check_merge (gfc_expr
* tsource
, gfc_expr
* fsource
, gfc_expr
* mask
)
1594 if (same_type_check (tsource
, 0, fsource
, 1) == FAILURE
)
1597 if (type_check (mask
, 2, BT_LOGICAL
) == FAILURE
)
1605 gfc_check_nearest (gfc_expr
* x
, gfc_expr
* s
)
1607 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1610 if (type_check (s
, 1, BT_REAL
) == FAILURE
)
1618 gfc_check_null (gfc_expr
* mold
)
1620 symbol_attribute attr
;
1625 if (variable_check (mold
, 0) == FAILURE
)
1628 attr
= gfc_variable_attr (mold
, NULL
);
1632 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
1633 gfc_current_intrinsic_arg
[0],
1634 gfc_current_intrinsic
, &mold
->where
);
1643 gfc_check_pack (gfc_expr
* array
, gfc_expr
* mask
, gfc_expr
* vector
)
1645 if (array_check (array
, 0) == FAILURE
)
1648 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
1651 if (mask
->rank
!= 0 && mask
->rank
!= array
->rank
)
1653 gfc_error ("'%s' argument of '%s' intrinsic at %L must be conformable "
1654 "with '%s' argument", gfc_current_intrinsic_arg
[0],
1655 gfc_current_intrinsic
, &array
->where
,
1656 gfc_current_intrinsic_arg
[1]);
1662 if (same_type_check (array
, 0, vector
, 2) == FAILURE
)
1665 if (rank_check (vector
, 2, 1) == FAILURE
)
1668 /* TODO: More constraints here. */
1676 gfc_check_precision (gfc_expr
* x
)
1678 if (x
->ts
.type
!= BT_REAL
&& x
->ts
.type
!= BT_COMPLEX
)
1680 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of type "
1681 "REAL or COMPLEX", gfc_current_intrinsic_arg
[0],
1682 gfc_current_intrinsic
, &x
->where
);
1691 gfc_check_present (gfc_expr
* a
)
1695 if (variable_check (a
, 0) == FAILURE
)
1698 sym
= a
->symtree
->n
.sym
;
1699 if (!sym
->attr
.dummy
)
1701 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
1702 "dummy variable", gfc_current_intrinsic_arg
[0],
1703 gfc_current_intrinsic
, &a
->where
);
1707 if (!sym
->attr
.optional
)
1709 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
1710 "an OPTIONAL dummy variable", gfc_current_intrinsic_arg
[0],
1711 gfc_current_intrinsic
, &a
->where
);
1720 gfc_check_radix (gfc_expr
* x
)
1722 if (int_or_real_check (x
, 0) == FAILURE
)
1730 gfc_check_range (gfc_expr
* x
)
1732 if (numeric_check (x
, 0) == FAILURE
)
1739 /* real, float, sngl. */
1741 gfc_check_real (gfc_expr
* a
, gfc_expr
* kind
)
1743 if (numeric_check (a
, 0) == FAILURE
)
1746 if (kind_check (kind
, 1, BT_REAL
) == FAILURE
)
1754 gfc_check_rename (gfc_expr
* path1
, gfc_expr
* path2
)
1756 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1759 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1767 gfc_check_rename_sub (gfc_expr
* path1
, gfc_expr
* path2
, gfc_expr
* status
)
1769 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1772 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1778 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1781 if (scalar_check (status
, 2) == FAILURE
)
1789 gfc_check_repeat (gfc_expr
* x
, gfc_expr
* y
)
1791 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
1794 if (scalar_check (x
, 0) == FAILURE
)
1797 if (type_check (y
, 0, BT_INTEGER
) == FAILURE
)
1800 if (scalar_check (y
, 1) == FAILURE
)
1808 gfc_check_reshape (gfc_expr
* source
, gfc_expr
* shape
,
1809 gfc_expr
* pad
, gfc_expr
* order
)
1814 if (array_check (source
, 0) == FAILURE
)
1817 if (rank_check (shape
, 1, 1) == FAILURE
)
1820 if (type_check (shape
, 1, BT_INTEGER
) == FAILURE
)
1823 if (gfc_array_size (shape
, &size
) != SUCCESS
)
1825 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
1826 "array of constant size", &shape
->where
);
1830 m
= mpz_cmp_ui (size
, GFC_MAX_DIMENSIONS
);
1835 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
1836 "than %d elements", &shape
->where
, GFC_MAX_DIMENSIONS
);
1842 if (same_type_check (source
, 0, pad
, 2) == FAILURE
)
1844 if (array_check (pad
, 2) == FAILURE
)
1848 if (order
!= NULL
&& array_check (order
, 3) == FAILURE
)
1856 gfc_check_scale (gfc_expr
* x
, gfc_expr
* i
)
1858 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1861 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
1869 gfc_check_scan (gfc_expr
* x
, gfc_expr
* y
, gfc_expr
* z
)
1871 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
1874 if (type_check (y
, 1, BT_CHARACTER
) == FAILURE
)
1877 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
1880 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
1888 gfc_check_secnds (gfc_expr
* r
)
1891 if (type_check (r
, 0, BT_REAL
) == FAILURE
)
1894 if (kind_value_check (r
, 0, 4) == FAILURE
)
1897 if (scalar_check (r
, 0) == FAILURE
)
1905 gfc_check_selected_int_kind (gfc_expr
* r
)
1908 if (type_check (r
, 0, BT_INTEGER
) == FAILURE
)
1911 if (scalar_check (r
, 0) == FAILURE
)
1919 gfc_check_selected_real_kind (gfc_expr
* p
, gfc_expr
* r
)
1921 if (p
== NULL
&& r
== NULL
)
1923 gfc_error ("Missing arguments to %s intrinsic at %L",
1924 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
1929 if (p
!= NULL
&& type_check (p
, 0, BT_INTEGER
) == FAILURE
)
1932 if (r
!= NULL
&& type_check (r
, 1, BT_INTEGER
) == FAILURE
)
1940 gfc_check_set_exponent (gfc_expr
* x
, gfc_expr
* i
)
1942 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1945 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
1953 gfc_check_shape (gfc_expr
* source
)
1957 if (source
->rank
== 0 || source
->expr_type
!= EXPR_VARIABLE
)
1960 ar
= gfc_find_array_ref (source
);
1962 if (ar
->as
&& ar
->as
->type
== AS_ASSUMED_SIZE
)
1964 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
1965 "an assumed size array", &source
->where
);
1974 gfc_check_sign (gfc_expr
* a
, gfc_expr
* b
)
1976 if (int_or_real_check (a
, 0) == FAILURE
)
1979 if (same_type_check (a
, 0, b
, 1) == FAILURE
)
1987 gfc_check_size (gfc_expr
* array
, gfc_expr
* dim
)
1989 if (array_check (array
, 0) == FAILURE
)
1994 if (type_check (dim
, 1, BT_INTEGER
) == FAILURE
)
1997 if (kind_value_check (dim
, 1, gfc_default_integer_kind
) == FAILURE
)
2000 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
2009 gfc_check_sleep_sub (gfc_expr
* seconds
)
2011 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
2014 if (scalar_check (seconds
, 0) == FAILURE
)
2022 gfc_check_spread (gfc_expr
* source
, gfc_expr
* dim
, gfc_expr
* ncopies
)
2024 if (source
->rank
>= GFC_MAX_DIMENSIONS
)
2026 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
2027 "than rank %d", gfc_current_intrinsic_arg
[0],
2028 gfc_current_intrinsic
, &source
->where
, GFC_MAX_DIMENSIONS
);
2033 if (dim_check (dim
, 1, 0) == FAILURE
)
2036 if (type_check (ncopies
, 2, BT_INTEGER
) == FAILURE
)
2039 if (scalar_check (ncopies
, 2) == FAILURE
)
2046 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
2049 gfc_check_fgetputc_sub (gfc_expr
* unit
, gfc_expr
* c
, gfc_expr
* status
)
2051 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2054 if (scalar_check (unit
, 0) == FAILURE
)
2057 if (type_check (c
, 1, BT_CHARACTER
) == FAILURE
)
2063 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
2064 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
2065 || scalar_check (status
, 2) == FAILURE
)
2073 gfc_check_fgetputc (gfc_expr
* unit
, gfc_expr
* c
)
2075 return gfc_check_fgetputc_sub (unit
, c
, NULL
);
2080 gfc_check_fgetput_sub (gfc_expr
* c
, gfc_expr
* status
)
2082 if (type_check (c
, 0, BT_CHARACTER
) == FAILURE
)
2088 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
2089 || kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
2090 || scalar_check (status
, 1) == FAILURE
)
2098 gfc_check_fgetput (gfc_expr
* c
)
2100 return gfc_check_fgetput_sub (c
, NULL
);
2105 gfc_check_fstat (gfc_expr
* unit
, gfc_expr
* array
)
2107 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2110 if (scalar_check (unit
, 0) == FAILURE
)
2113 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
2114 || kind_value_check (unit
, 0, gfc_default_integer_kind
) == FAILURE
)
2117 if (array_check (array
, 1) == FAILURE
)
2125 gfc_check_fstat_sub (gfc_expr
* unit
, gfc_expr
* array
, gfc_expr
* status
)
2127 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2130 if (scalar_check (unit
, 0) == FAILURE
)
2133 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
2134 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
2137 if (array_check (array
, 1) == FAILURE
)
2143 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
2144 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
2147 if (scalar_check (status
, 2) == FAILURE
)
2155 gfc_check_ftell (gfc_expr
* unit
)
2157 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2160 if (scalar_check (unit
, 0) == FAILURE
)
2168 gfc_check_ftell_sub (gfc_expr
* unit
, gfc_expr
* offset
)
2170 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2173 if (scalar_check (unit
, 0) == FAILURE
)
2176 if (type_check (offset
, 1, BT_INTEGER
) == FAILURE
)
2179 if (scalar_check (offset
, 1) == FAILURE
)
2187 gfc_check_stat (gfc_expr
* name
, gfc_expr
* array
)
2189 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2192 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
2193 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
2196 if (array_check (array
, 1) == FAILURE
)
2204 gfc_check_stat_sub (gfc_expr
* name
, gfc_expr
* array
, gfc_expr
* status
)
2206 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2209 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
2210 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
2213 if (array_check (array
, 1) == FAILURE
)
2219 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
2220 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
2223 if (scalar_check (status
, 2) == FAILURE
)
2231 gfc_check_transfer (gfc_expr
* source ATTRIBUTE_UNUSED
,
2232 gfc_expr
* mold ATTRIBUTE_UNUSED
,
2237 if (type_check (size
, 2, BT_INTEGER
) == FAILURE
)
2240 if (scalar_check (size
, 2) == FAILURE
)
2243 if (nonoptional_check (size
, 2) == FAILURE
)
2252 gfc_check_transpose (gfc_expr
* matrix
)
2254 if (rank_check (matrix
, 0, 2) == FAILURE
)
2262 gfc_check_ubound (gfc_expr
* array
, gfc_expr
* dim
)
2264 if (array_check (array
, 0) == FAILURE
)
2269 if (dim_check (dim
, 1, 1) == FAILURE
)
2272 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
2281 gfc_check_unpack (gfc_expr
* vector
, gfc_expr
* mask
, gfc_expr
* field
)
2283 if (rank_check (vector
, 0, 1) == FAILURE
)
2286 if (array_check (mask
, 1) == FAILURE
)
2289 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
2292 if (same_type_check (vector
, 0, field
, 2) == FAILURE
)
2300 gfc_check_verify (gfc_expr
* x
, gfc_expr
* y
, gfc_expr
* z
)
2302 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
2305 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
2308 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
2316 gfc_check_trim (gfc_expr
* x
)
2318 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
2321 if (scalar_check (x
, 0) == FAILURE
)
2329 gfc_check_ttynam (gfc_expr
* unit
)
2331 if (scalar_check (unit
, 0) == FAILURE
)
2334 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2341 /* Common check function for the half a dozen intrinsics that have a
2342 single real argument. */
2345 gfc_check_x (gfc_expr
* x
)
2347 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2354 /************* Check functions for intrinsic subroutines *************/
2357 gfc_check_cpu_time (gfc_expr
* time
)
2359 if (scalar_check (time
, 0) == FAILURE
)
2362 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
2365 if (variable_check (time
, 0) == FAILURE
)
2373 gfc_check_date_and_time (gfc_expr
* date
, gfc_expr
* time
,
2374 gfc_expr
* zone
, gfc_expr
* values
)
2378 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
2380 if (scalar_check (date
, 0) == FAILURE
)
2382 if (variable_check (date
, 0) == FAILURE
)
2388 if (type_check (time
, 1, BT_CHARACTER
) == FAILURE
)
2390 if (scalar_check (time
, 1) == FAILURE
)
2392 if (variable_check (time
, 1) == FAILURE
)
2398 if (type_check (zone
, 2, BT_CHARACTER
) == FAILURE
)
2400 if (scalar_check (zone
, 2) == FAILURE
)
2402 if (variable_check (zone
, 2) == FAILURE
)
2408 if (type_check (values
, 3, BT_INTEGER
) == FAILURE
)
2410 if (array_check (values
, 3) == FAILURE
)
2412 if (rank_check (values
, 3, 1) == FAILURE
)
2414 if (variable_check (values
, 3) == FAILURE
)
2423 gfc_check_mvbits (gfc_expr
* from
, gfc_expr
* frompos
, gfc_expr
* len
,
2424 gfc_expr
* to
, gfc_expr
* topos
)
2426 if (type_check (from
, 0, BT_INTEGER
) == FAILURE
)
2429 if (type_check (frompos
, 1, BT_INTEGER
) == FAILURE
)
2432 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
2435 if (same_type_check (from
, 0, to
, 3) == FAILURE
)
2438 if (variable_check (to
, 3) == FAILURE
)
2441 if (type_check (topos
, 4, BT_INTEGER
) == FAILURE
)
2449 gfc_check_random_number (gfc_expr
* harvest
)
2451 if (type_check (harvest
, 0, BT_REAL
) == FAILURE
)
2454 if (variable_check (harvest
, 0) == FAILURE
)
2462 gfc_check_random_seed (gfc_expr
* size
, gfc_expr
* put
, gfc_expr
* get
)
2466 if (scalar_check (size
, 0) == FAILURE
)
2469 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
2472 if (variable_check (size
, 0) == FAILURE
)
2475 if (kind_value_check (size
, 0, gfc_default_integer_kind
) == FAILURE
)
2483 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
,
2486 if (array_check (put
, 1) == FAILURE
)
2489 if (rank_check (put
, 1, 1) == FAILURE
)
2492 if (type_check (put
, 1, BT_INTEGER
) == FAILURE
)
2495 if (kind_value_check (put
, 1, gfc_default_integer_kind
) == FAILURE
)
2502 if (size
!= NULL
|| put
!= NULL
)
2503 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
,
2506 if (array_check (get
, 2) == FAILURE
)
2509 if (rank_check (get
, 2, 1) == FAILURE
)
2512 if (type_check (get
, 2, BT_INTEGER
) == FAILURE
)
2515 if (variable_check (get
, 2) == FAILURE
)
2518 if (kind_value_check (get
, 2, gfc_default_integer_kind
) == FAILURE
)
2526 gfc_check_second_sub (gfc_expr
* time
)
2528 if (scalar_check (time
, 0) == FAILURE
)
2531 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
2534 if (kind_value_check(time
, 0, 4) == FAILURE
)
2541 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
2542 count, count_rate, and count_max are all optional arguments */
2545 gfc_check_system_clock (gfc_expr
* count
, gfc_expr
* count_rate
,
2546 gfc_expr
* count_max
)
2550 if (scalar_check (count
, 0) == FAILURE
)
2553 if (type_check (count
, 0, BT_INTEGER
) == FAILURE
)
2556 if (variable_check (count
, 0) == FAILURE
)
2560 if (count_rate
!= NULL
)
2562 if (scalar_check (count_rate
, 1) == FAILURE
)
2565 if (type_check (count_rate
, 1, BT_INTEGER
) == FAILURE
)
2568 if (variable_check (count_rate
, 1) == FAILURE
)
2572 && same_type_check (count
, 0, count_rate
, 1) == FAILURE
)
2577 if (count_max
!= NULL
)
2579 if (scalar_check (count_max
, 2) == FAILURE
)
2582 if (type_check (count_max
, 2, BT_INTEGER
) == FAILURE
)
2585 if (variable_check (count_max
, 2) == FAILURE
)
2589 && same_type_check (count
, 0, count_max
, 2) == FAILURE
)
2592 if (count_rate
!= NULL
2593 && same_type_check (count_rate
, 1, count_max
, 2) == FAILURE
)
2601 gfc_check_irand (gfc_expr
* x
)
2606 if (scalar_check (x
, 0) == FAILURE
)
2609 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
2612 if (kind_value_check(x
, 0, 4) == FAILURE
)
2620 gfc_check_alarm_sub (gfc_expr
* seconds
, gfc_expr
* handler
, gfc_expr
* status
)
2622 if (scalar_check (seconds
, 0) == FAILURE
)
2625 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
2628 if (handler
->ts
.type
!= BT_INTEGER
&& handler
->ts
.type
!= BT_PROCEDURE
)
2631 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
2632 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
, &handler
->where
);
2636 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
2642 if (scalar_check (status
, 2) == FAILURE
)
2645 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2653 gfc_check_rand (gfc_expr
* x
)
2658 if (scalar_check (x
, 0) == FAILURE
)
2661 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
2664 if (kind_value_check(x
, 0, 4) == FAILURE
)
2671 gfc_check_srand (gfc_expr
* x
)
2673 if (scalar_check (x
, 0) == FAILURE
)
2676 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
2679 if (kind_value_check(x
, 0, 4) == FAILURE
)
2686 gfc_check_ctime_sub (gfc_expr
* time
, gfc_expr
* result
)
2688 if (scalar_check (time
, 0) == FAILURE
)
2691 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
2694 if (type_check (result
, 1, BT_CHARACTER
) == FAILURE
)
2701 gfc_check_etime (gfc_expr
* x
)
2703 if (array_check (x
, 0) == FAILURE
)
2706 if (rank_check (x
, 0, 1) == FAILURE
)
2709 if (variable_check (x
, 0) == FAILURE
)
2712 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2715 if (kind_value_check(x
, 0, 4) == FAILURE
)
2722 gfc_check_etime_sub (gfc_expr
* values
, gfc_expr
* time
)
2724 if (array_check (values
, 0) == FAILURE
)
2727 if (rank_check (values
, 0, 1) == FAILURE
)
2730 if (variable_check (values
, 0) == FAILURE
)
2733 if (type_check (values
, 0, BT_REAL
) == FAILURE
)
2736 if (kind_value_check(values
, 0, 4) == FAILURE
)
2739 if (scalar_check (time
, 1) == FAILURE
)
2742 if (type_check (time
, 1, BT_REAL
) == FAILURE
)
2745 if (kind_value_check(time
, 1, 4) == FAILURE
)
2753 gfc_check_fdate_sub (gfc_expr
* date
)
2755 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
2763 gfc_check_gerror (gfc_expr
* msg
)
2765 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
2773 gfc_check_getcwd_sub (gfc_expr
* cwd
, gfc_expr
* status
)
2775 if (type_check (cwd
, 0, BT_CHARACTER
) == FAILURE
)
2781 if (scalar_check (status
, 1) == FAILURE
)
2784 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
2792 gfc_check_getlog (gfc_expr
* msg
)
2794 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
2802 gfc_check_exit (gfc_expr
* status
)
2807 if (type_check (status
, 0, BT_INTEGER
) == FAILURE
)
2810 if (scalar_check (status
, 0) == FAILURE
)
2818 gfc_check_flush (gfc_expr
* unit
)
2823 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2826 if (scalar_check (unit
, 0) == FAILURE
)
2834 gfc_check_free (gfc_expr
* i
)
2836 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
2839 if (scalar_check (i
, 0) == FAILURE
)
2847 gfc_check_hostnm (gfc_expr
* name
)
2849 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2857 gfc_check_hostnm_sub (gfc_expr
* name
, gfc_expr
* status
)
2859 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2865 if (scalar_check (status
, 1) == FAILURE
)
2868 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
2876 gfc_check_ttynam_sub (gfc_expr
* unit
, gfc_expr
* name
)
2878 if (scalar_check (unit
, 0) == FAILURE
)
2881 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2884 if (type_check (name
, 1, BT_CHARACTER
) == FAILURE
)
2892 gfc_check_isatty (gfc_expr
* unit
)
2897 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2900 if (scalar_check (unit
, 0) == FAILURE
)
2908 gfc_check_perror (gfc_expr
* string
)
2910 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
)
2918 gfc_check_umask (gfc_expr
* mask
)
2920 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
2923 if (scalar_check (mask
, 0) == FAILURE
)
2931 gfc_check_umask_sub (gfc_expr
* mask
, gfc_expr
* old
)
2933 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
2936 if (scalar_check (mask
, 0) == FAILURE
)
2942 if (scalar_check (old
, 1) == FAILURE
)
2945 if (type_check (old
, 1, BT_INTEGER
) == FAILURE
)
2953 gfc_check_unlink (gfc_expr
* name
)
2955 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2963 gfc_check_unlink_sub (gfc_expr
* name
, gfc_expr
* status
)
2965 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2971 if (scalar_check (status
, 1) == FAILURE
)
2974 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
2982 gfc_check_signal (gfc_expr
* number
, gfc_expr
* handler
)
2984 if (scalar_check (number
, 0) == FAILURE
)
2987 if (type_check (number
, 0, BT_INTEGER
) == FAILURE
)
2990 if (handler
->ts
.type
!= BT_INTEGER
&& handler
->ts
.type
!= BT_PROCEDURE
)
2993 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
2994 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
, &handler
->where
);
2998 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
3006 gfc_check_signal_sub (gfc_expr
* number
, gfc_expr
* handler
, gfc_expr
* status
)
3008 if (scalar_check (number
, 0) == FAILURE
)
3011 if (type_check (number
, 0, BT_INTEGER
) == FAILURE
)
3014 if (handler
->ts
.type
!= BT_INTEGER
&& handler
->ts
.type
!= BT_PROCEDURE
)
3017 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
3018 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
, &handler
->where
);
3022 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
3028 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
3031 if (scalar_check (status
, 2) == FAILURE
)
3039 gfc_check_system_sub (gfc_expr
* cmd
, gfc_expr
* status
)
3041 if (type_check (cmd
, 0, BT_CHARACTER
) == FAILURE
)
3044 if (scalar_check (status
, 1) == FAILURE
)
3047 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
3050 if (kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
)
3057 /* This is used for the GNU intrinsics AND, OR and XOR. */
3059 gfc_check_and (gfc_expr
* i
, gfc_expr
* j
)
3061 if (i
->ts
.type
!= BT_INTEGER
&& i
->ts
.type
!= BT_LOGICAL
)
3064 "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL",
3065 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic
, &i
->where
);
3069 if (j
->ts
.type
!= BT_INTEGER
&& j
->ts
.type
!= BT_LOGICAL
)
3072 "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL",
3073 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
, &j
->where
);
3077 if (i
->ts
.type
!= j
->ts
.type
)
3079 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
3080 "have the same type", gfc_current_intrinsic_arg
[0],
3081 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
,
3086 if (scalar_check (i
, 0) == FAILURE
)
3089 if (scalar_check (j
, 1) == FAILURE
)