2 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008
3 Free Software Foundation, Inc.
4 Contributed by Andy Vaught & Katherine Holcomb
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
23 /* These functions check to see if an argument list is compatible with
24 a particular intrinsic function or subroutine. Presence of
25 required arguments has already been established, the argument list
26 has been sorted into the right order and has NULL arguments in the
27 correct places for missing optional arguments. */
33 #include "intrinsic.h"
36 /* Make sure an expression is a scalar. */
39 scalar_check (gfc_expr
*e
, int n
)
44 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a scalar",
45 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &e
->where
);
51 /* Check the type of an expression. */
54 type_check (gfc_expr
*e
, int n
, bt type
)
56 if (e
->ts
.type
== type
)
59 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
60 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &e
->where
,
61 gfc_basic_typename (type
));
67 /* Check that the expression is a numeric type. */
70 numeric_check (gfc_expr
*e
, int n
)
72 if (gfc_numeric_ts (&e
->ts
))
75 /* If the expression has not got a type, check if its namespace can
76 offer a default type. */
77 if ((e
->expr_type
== EXPR_VARIABLE
|| e
->expr_type
== EXPR_VARIABLE
)
78 && e
->symtree
->n
.sym
->ts
.type
== BT_UNKNOWN
79 && gfc_set_default_type (e
->symtree
->n
.sym
, 0,
80 e
->symtree
->n
.sym
->ns
) == SUCCESS
81 && gfc_numeric_ts (&e
->symtree
->n
.sym
->ts
))
83 e
->ts
= e
->symtree
->n
.sym
->ts
;
87 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a numeric type",
88 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &e
->where
);
94 /* Check that an expression is integer or real. */
97 int_or_real_check (gfc_expr
*e
, int n
)
99 if (e
->ts
.type
!= BT_INTEGER
&& e
->ts
.type
!= BT_REAL
)
101 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
102 "or REAL", gfc_current_intrinsic_arg
[n
],
103 gfc_current_intrinsic
, &e
->where
);
111 /* Check that an expression is real or complex. */
114 real_or_complex_check (gfc_expr
*e
, int n
)
116 if (e
->ts
.type
!= BT_REAL
&& e
->ts
.type
!= BT_COMPLEX
)
118 gfc_error ("'%s' argument of '%s' intrinsic at %L must be REAL "
119 "or COMPLEX", gfc_current_intrinsic_arg
[n
],
120 gfc_current_intrinsic
, &e
->where
);
128 /* Check that the expression is an optional constant integer
129 and that it specifies a valid kind for that type. */
132 kind_check (gfc_expr
*k
, int n
, bt type
)
139 if (type_check (k
, n
, BT_INTEGER
) == FAILURE
)
142 if (scalar_check (k
, n
) == FAILURE
)
145 if (k
->expr_type
!= EXPR_CONSTANT
)
147 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
148 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
153 if (gfc_extract_int (k
, &kind
) != NULL
154 || gfc_validate_kind (type
, kind
, true) < 0)
156 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type
),
165 /* Make sure the expression is a double precision real. */
168 double_check (gfc_expr
*d
, int n
)
170 if (type_check (d
, n
, BT_REAL
) == FAILURE
)
173 if (d
->ts
.kind
!= gfc_default_double_kind
)
175 gfc_error ("'%s' argument of '%s' intrinsic at %L must be double "
176 "precision", gfc_current_intrinsic_arg
[n
],
177 gfc_current_intrinsic
, &d
->where
);
185 /* Make sure the expression is a logical array. */
188 logical_array_check (gfc_expr
*array
, int n
)
190 if (array
->ts
.type
!= BT_LOGICAL
|| array
->rank
== 0)
192 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a logical "
193 "array", gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
202 /* Make sure an expression is an array. */
205 array_check (gfc_expr
*e
, int n
)
210 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array",
211 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &e
->where
);
217 /* Make sure two expressions have the same type. */
220 same_type_check (gfc_expr
*e
, int n
, gfc_expr
*f
, int m
)
222 if (gfc_compare_types (&e
->ts
, &f
->ts
))
225 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same type "
226 "and kind as '%s'", gfc_current_intrinsic_arg
[m
],
227 gfc_current_intrinsic
, &f
->where
, gfc_current_intrinsic_arg
[n
]);
233 /* Make sure that an expression has a certain (nonzero) rank. */
236 rank_check (gfc_expr
*e
, int n
, int rank
)
241 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank %d",
242 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
249 /* Make sure a variable expression is not an optional dummy argument. */
252 nonoptional_check (gfc_expr
*e
, int n
)
254 if (e
->expr_type
== EXPR_VARIABLE
&& e
->symtree
->n
.sym
->attr
.optional
)
256 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
257 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
261 /* TODO: Recursive check on nonoptional variables? */
267 /* Check that an expression has a particular kind. */
270 kind_value_check (gfc_expr
*e
, int n
, int k
)
275 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of kind %d",
276 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
283 /* Make sure an expression is a variable. */
286 variable_check (gfc_expr
*e
, int n
)
288 if ((e
->expr_type
== EXPR_VARIABLE
289 && e
->symtree
->n
.sym
->attr
.flavor
!= FL_PARAMETER
)
290 || (e
->expr_type
== EXPR_FUNCTION
291 && e
->symtree
->n
.sym
->result
== e
->symtree
->n
.sym
))
294 if (e
->expr_type
== EXPR_VARIABLE
295 && e
->symtree
->n
.sym
->attr
.intent
== INTENT_IN
)
297 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
298 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
,
303 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a variable",
304 gfc_current_intrinsic_arg
[n
], gfc_current_intrinsic
, &e
->where
);
310 /* Check the common DIM parameter for correctness. */
313 dim_check (gfc_expr
*dim
, int n
, bool optional
)
318 if (type_check (dim
, n
, BT_INTEGER
) == FAILURE
)
321 if (scalar_check (dim
, n
) == FAILURE
)
324 if (!optional
&& nonoptional_check (dim
, n
) == FAILURE
)
331 /* If a DIM parameter is a constant, make sure that it is greater than
332 zero and less than or equal to the rank of the given array. If
333 allow_assumed is zero then dim must be less than the rank of the array
334 for assumed size arrays. */
337 dim_rank_check (gfc_expr
*dim
, gfc_expr
*array
, int allow_assumed
)
342 if (dim
->expr_type
!= EXPR_CONSTANT
|| array
->expr_type
!= EXPR_VARIABLE
)
345 ar
= gfc_find_array_ref (array
);
347 if (ar
->as
->type
== AS_ASSUMED_SIZE
349 && ar
->type
!= AR_ELEMENT
350 && ar
->type
!= AR_SECTION
)
353 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
354 || mpz_cmp_ui (dim
->value
.integer
, rank
) > 0)
356 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
357 "dimension index", gfc_current_intrinsic
, &dim
->where
);
366 /* Compare the size of a along dimension ai with the size of b along
367 dimension bi, returning 0 if they are known not to be identical,
368 and 1 if they are identical, or if this cannot be determined. */
371 identical_dimen_shape (gfc_expr
*a
, int ai
, gfc_expr
*b
, int bi
)
373 mpz_t a_size
, b_size
;
376 gcc_assert (a
->rank
> ai
);
377 gcc_assert (b
->rank
> bi
);
381 if (gfc_array_dimen_size (a
, ai
, &a_size
) == SUCCESS
)
383 if (gfc_array_dimen_size (b
, bi
, &b_size
) == SUCCESS
)
385 if (mpz_cmp (a_size
, b_size
) != 0)
396 /* Check whether two character expressions have the same length;
397 returns SUCCESS if they have or if the length cannot be determined. */
400 check_same_strlen (const gfc_expr
*a
, const gfc_expr
*b
, const char *name
)
405 if (a
->ts
.cl
&& a
->ts
.cl
->length
406 && a
->ts
.cl
->length
->expr_type
== EXPR_CONSTANT
)
407 len_a
= mpz_get_si (a
->ts
.cl
->length
->value
.integer
);
408 else if (a
->expr_type
== EXPR_CONSTANT
409 && (a
->ts
.cl
== NULL
|| a
->ts
.cl
->length
== NULL
))
410 len_a
= a
->value
.character
.length
;
414 if (b
->ts
.cl
&& b
->ts
.cl
->length
415 && b
->ts
.cl
->length
->expr_type
== EXPR_CONSTANT
)
416 len_b
= mpz_get_si (b
->ts
.cl
->length
->value
.integer
);
417 else if (b
->expr_type
== EXPR_CONSTANT
418 && (b
->ts
.cl
== NULL
|| b
->ts
.cl
->length
== NULL
))
419 len_b
= b
->value
.character
.length
;
426 gfc_error ("Unequal character lengths (%ld and %ld) in %s intrinsic "
427 "at %L", len_a
, len_b
, name
, &a
->where
);
432 /***** Check functions *****/
434 /* Check subroutine suitable for intrinsics taking a real argument and
435 a kind argument for the result. */
438 check_a_kind (gfc_expr
*a
, gfc_expr
*kind
, bt type
)
440 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
442 if (kind_check (kind
, 1, type
) == FAILURE
)
449 /* Check subroutine suitable for ceiling, floor and nint. */
452 gfc_check_a_ikind (gfc_expr
*a
, gfc_expr
*kind
)
454 return check_a_kind (a
, kind
, BT_INTEGER
);
458 /* Check subroutine suitable for aint, anint. */
461 gfc_check_a_xkind (gfc_expr
*a
, gfc_expr
*kind
)
463 return check_a_kind (a
, kind
, BT_REAL
);
468 gfc_check_abs (gfc_expr
*a
)
470 if (numeric_check (a
, 0) == FAILURE
)
478 gfc_check_achar (gfc_expr
*a
, gfc_expr
*kind
)
480 if (type_check (a
, 0, BT_INTEGER
) == FAILURE
)
482 if (kind_check (kind
, 1, BT_CHARACTER
) == FAILURE
)
490 gfc_check_access_func (gfc_expr
*name
, gfc_expr
*mode
)
492 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
493 || scalar_check (name
, 0) == FAILURE
)
495 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
498 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
499 || scalar_check (mode
, 1) == FAILURE
)
501 if (kind_value_check (mode
, 1, gfc_default_character_kind
) == FAILURE
)
509 gfc_check_all_any (gfc_expr
*mask
, gfc_expr
*dim
)
511 if (logical_array_check (mask
, 0) == FAILURE
)
514 if (dim_check (dim
, 1, false) == FAILURE
)
522 gfc_check_allocated (gfc_expr
*array
)
524 symbol_attribute attr
;
526 if (variable_check (array
, 0) == FAILURE
)
529 attr
= gfc_variable_attr (array
, NULL
);
530 if (!attr
.allocatable
)
532 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
533 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic
,
538 if (array_check (array
, 0) == FAILURE
)
545 /* Common check function where the first argument must be real or
546 integer and the second argument must be the same as the first. */
549 gfc_check_a_p (gfc_expr
*a
, gfc_expr
*p
)
551 if (int_or_real_check (a
, 0) == FAILURE
)
554 if (a
->ts
.type
!= p
->ts
.type
)
556 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
557 "have the same type", gfc_current_intrinsic_arg
[0],
558 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
,
563 if (a
->ts
.kind
!= p
->ts
.kind
)
565 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
566 &p
->where
) == FAILURE
)
575 gfc_check_x_yd (gfc_expr
*x
, gfc_expr
*y
)
577 if (double_check (x
, 0) == FAILURE
|| double_check (y
, 1) == FAILURE
)
585 gfc_check_associated (gfc_expr
*pointer
, gfc_expr
*target
)
587 symbol_attribute attr
;
592 where
= &pointer
->where
;
594 if (pointer
->expr_type
== EXPR_VARIABLE
)
595 attr
= gfc_variable_attr (pointer
, NULL
);
596 else if (pointer
->expr_type
== EXPR_FUNCTION
)
597 attr
= pointer
->symtree
->n
.sym
->attr
;
598 else if (pointer
->expr_type
== EXPR_NULL
)
601 gcc_assert (0); /* Pointer must be a variable or a function. */
605 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
606 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic
,
611 /* Target argument is optional. */
615 where
= &target
->where
;
616 if (target
->expr_type
== EXPR_NULL
)
619 if (target
->expr_type
== EXPR_VARIABLE
)
620 attr
= gfc_variable_attr (target
, NULL
);
621 else if (target
->expr_type
== EXPR_FUNCTION
)
622 attr
= target
->symtree
->n
.sym
->attr
;
625 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
626 "or target VARIABLE or FUNCTION", gfc_current_intrinsic_arg
[1],
627 gfc_current_intrinsic
, &target
->where
);
631 if (!attr
.pointer
&& !attr
.target
)
633 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
634 "or a TARGET", gfc_current_intrinsic_arg
[1],
635 gfc_current_intrinsic
, &target
->where
);
640 if (same_type_check (pointer
, 0, target
, 1) == FAILURE
)
642 if (rank_check (target
, 0, pointer
->rank
) == FAILURE
)
644 if (target
->rank
> 0)
646 for (i
= 0; i
< target
->rank
; i
++)
647 if (target
->ref
->u
.ar
.dimen_type
[i
] == DIMEN_VECTOR
)
649 gfc_error ("Array section with a vector subscript at %L shall not "
650 "be the target of a pointer",
660 gfc_error ("NULL pointer at %L is not permitted as actual argument "
661 "of '%s' intrinsic function", where
, gfc_current_intrinsic
);
668 gfc_check_atan2 (gfc_expr
*y
, gfc_expr
*x
)
670 if (type_check (y
, 0, BT_REAL
) == FAILURE
)
672 if (same_type_check (y
, 0, x
, 1) == FAILURE
)
679 /* BESJN and BESYN functions. */
682 gfc_check_besn (gfc_expr
*n
, gfc_expr
*x
)
684 if (type_check (n
, 0, BT_INTEGER
) == FAILURE
)
687 if (type_check (x
, 1, BT_REAL
) == FAILURE
)
695 gfc_check_btest (gfc_expr
*i
, gfc_expr
*pos
)
697 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
699 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
707 gfc_check_char (gfc_expr
*i
, gfc_expr
*kind
)
709 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
711 if (kind_check (kind
, 1, BT_CHARACTER
) == FAILURE
)
719 gfc_check_chdir (gfc_expr
*dir
)
721 if (type_check (dir
, 0, BT_CHARACTER
) == FAILURE
)
723 if (kind_value_check (dir
, 0, gfc_default_character_kind
) == FAILURE
)
731 gfc_check_chdir_sub (gfc_expr
*dir
, gfc_expr
*status
)
733 if (type_check (dir
, 0, BT_CHARACTER
) == FAILURE
)
735 if (kind_value_check (dir
, 0, gfc_default_character_kind
) == FAILURE
)
741 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
743 if (scalar_check (status
, 1) == FAILURE
)
751 gfc_check_chmod (gfc_expr
*name
, gfc_expr
*mode
)
753 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
755 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
758 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
)
760 if (kind_value_check (mode
, 1, gfc_default_character_kind
) == FAILURE
)
768 gfc_check_chmod_sub (gfc_expr
*name
, gfc_expr
*mode
, gfc_expr
*status
)
770 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
772 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
775 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
)
777 if (kind_value_check (mode
, 1, gfc_default_character_kind
) == FAILURE
)
783 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
786 if (scalar_check (status
, 2) == FAILURE
)
794 gfc_check_cmplx (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*kind
)
796 if (numeric_check (x
, 0) == FAILURE
)
801 if (numeric_check (y
, 1) == FAILURE
)
804 if (x
->ts
.type
== BT_COMPLEX
)
806 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
807 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg
[1],
808 gfc_current_intrinsic
, &y
->where
);
813 if (kind_check (kind
, 2, BT_COMPLEX
) == FAILURE
)
821 gfc_check_complex (gfc_expr
*x
, gfc_expr
*y
)
823 if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
825 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
826 "or REAL", gfc_current_intrinsic_arg
[0],
827 gfc_current_intrinsic
, &x
->where
);
830 if (scalar_check (x
, 0) == FAILURE
)
833 if (y
->ts
.type
!= BT_INTEGER
&& y
->ts
.type
!= BT_REAL
)
835 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
836 "or REAL", gfc_current_intrinsic_arg
[1],
837 gfc_current_intrinsic
, &y
->where
);
840 if (scalar_check (y
, 1) == FAILURE
)
848 gfc_check_count (gfc_expr
*mask
, gfc_expr
*dim
, gfc_expr
*kind
)
850 if (logical_array_check (mask
, 0) == FAILURE
)
852 if (dim_check (dim
, 1, false) == FAILURE
)
854 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
856 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
857 "with KIND argument at %L",
858 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
866 gfc_check_cshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*dim
)
868 if (array_check (array
, 0) == FAILURE
)
871 if (type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
874 if (array
->rank
== 1)
876 if (scalar_check (shift
, 1) == FAILURE
)
881 /* TODO: more requirements on shift parameter. */
884 if (dim_check (dim
, 2, true) == FAILURE
)
892 gfc_check_ctime (gfc_expr
*time
)
894 if (scalar_check (time
, 0) == FAILURE
)
897 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
904 try gfc_check_datan2 (gfc_expr
*y
, gfc_expr
*x
)
906 if (double_check (y
, 0) == FAILURE
|| double_check (x
, 1) == FAILURE
)
913 gfc_check_dcmplx (gfc_expr
*x
, gfc_expr
*y
)
915 if (numeric_check (x
, 0) == FAILURE
)
920 if (numeric_check (y
, 1) == FAILURE
)
923 if (x
->ts
.type
== BT_COMPLEX
)
925 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
926 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg
[1],
927 gfc_current_intrinsic
, &y
->where
);
937 gfc_check_dble (gfc_expr
*x
)
939 if (numeric_check (x
, 0) == FAILURE
)
947 gfc_check_digits (gfc_expr
*x
)
949 if (int_or_real_check (x
, 0) == FAILURE
)
957 gfc_check_dot_product (gfc_expr
*vector_a
, gfc_expr
*vector_b
)
959 switch (vector_a
->ts
.type
)
962 if (type_check (vector_b
, 1, BT_LOGICAL
) == FAILURE
)
969 if (numeric_check (vector_b
, 1) == FAILURE
)
974 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
975 "or LOGICAL", gfc_current_intrinsic_arg
[0],
976 gfc_current_intrinsic
, &vector_a
->where
);
980 if (rank_check (vector_a
, 0, 1) == FAILURE
)
983 if (rank_check (vector_b
, 1, 1) == FAILURE
)
986 if (! identical_dimen_shape (vector_a
, 0, vector_b
, 0))
988 gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
989 "intrinsic 'dot_product'", gfc_current_intrinsic_arg
[0],
990 gfc_current_intrinsic_arg
[1], &vector_a
->where
);
999 gfc_check_dprod (gfc_expr
*x
, gfc_expr
*y
)
1001 if (type_check (x
, 0, BT_REAL
) == FAILURE
1002 || type_check (y
, 1, BT_REAL
) == FAILURE
)
1005 if (x
->ts
.kind
!= gfc_default_real_kind
)
1007 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1008 "real", gfc_current_intrinsic_arg
[0],
1009 gfc_current_intrinsic
, &x
->where
);
1013 if (y
->ts
.kind
!= gfc_default_real_kind
)
1015 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1016 "real", gfc_current_intrinsic_arg
[1],
1017 gfc_current_intrinsic
, &y
->where
);
1026 gfc_check_eoshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*boundary
,
1029 if (array_check (array
, 0) == FAILURE
)
1032 if (type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1035 if (array
->rank
== 1)
1037 if (scalar_check (shift
, 2) == FAILURE
)
1042 /* TODO: more weird restrictions on shift. */
1045 if (boundary
!= NULL
)
1047 if (same_type_check (array
, 0, boundary
, 2) == FAILURE
)
1050 /* TODO: more restrictions on boundary. */
1053 if (dim_check (dim
, 4, true) == FAILURE
)
1060 /* A single complex argument. */
1063 gfc_check_fn_c (gfc_expr
*a
)
1065 if (type_check (a
, 0, BT_COMPLEX
) == FAILURE
)
1072 /* A single real argument. */
1075 gfc_check_fn_r (gfc_expr
*a
)
1077 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
1083 /* A single double argument. */
1086 gfc_check_fn_d (gfc_expr
*a
)
1088 if (double_check (a
, 0) == FAILURE
)
1094 /* A single real or complex argument. */
1097 gfc_check_fn_rc (gfc_expr
*a
)
1099 if (real_or_complex_check (a
, 0) == FAILURE
)
1107 gfc_check_fnum (gfc_expr
*unit
)
1109 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
1112 if (scalar_check (unit
, 0) == FAILURE
)
1120 gfc_check_huge (gfc_expr
*x
)
1122 if (int_or_real_check (x
, 0) == FAILURE
)
1130 gfc_check_hypot (gfc_expr
*x
, gfc_expr
*y
)
1132 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1134 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
1141 /* Check that the single argument is an integer. */
1144 gfc_check_i (gfc_expr
*i
)
1146 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1154 gfc_check_iand (gfc_expr
*i
, gfc_expr
*j
)
1156 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1159 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1162 if (i
->ts
.kind
!= j
->ts
.kind
)
1164 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1165 &i
->where
) == FAILURE
)
1174 gfc_check_ibclr (gfc_expr
*i
, gfc_expr
*pos
)
1176 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1179 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
1187 gfc_check_ibits (gfc_expr
*i
, gfc_expr
*pos
, gfc_expr
*len
)
1189 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1192 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
1195 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
1203 gfc_check_ibset (gfc_expr
*i
, gfc_expr
*pos
)
1205 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1208 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
1216 gfc_check_ichar_iachar (gfc_expr
*c
, gfc_expr
*kind
)
1220 if (type_check (c
, 0, BT_CHARACTER
) == FAILURE
)
1223 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1226 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1227 "with KIND argument at %L",
1228 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1231 if (c
->expr_type
== EXPR_VARIABLE
|| c
->expr_type
== EXPR_SUBSTRING
)
1237 /* Substring references don't have the charlength set. */
1239 while (ref
&& ref
->type
!= REF_SUBSTRING
)
1242 gcc_assert (ref
== NULL
|| ref
->type
== REF_SUBSTRING
);
1246 /* Check that the argument is length one. Non-constant lengths
1247 can't be checked here, so assume they are ok. */
1248 if (c
->ts
.cl
&& c
->ts
.cl
->length
)
1250 /* If we already have a length for this expression then use it. */
1251 if (c
->ts
.cl
->length
->expr_type
!= EXPR_CONSTANT
)
1253 i
= mpz_get_si (c
->ts
.cl
->length
->value
.integer
);
1260 start
= ref
->u
.ss
.start
;
1261 end
= ref
->u
.ss
.end
;
1264 if (end
== NULL
|| end
->expr_type
!= EXPR_CONSTANT
1265 || start
->expr_type
!= EXPR_CONSTANT
)
1268 i
= mpz_get_si (end
->value
.integer
) + 1
1269 - mpz_get_si (start
->value
.integer
);
1277 gfc_error ("Argument of %s at %L must be of length one",
1278 gfc_current_intrinsic
, &c
->where
);
1287 gfc_check_idnint (gfc_expr
*a
)
1289 if (double_check (a
, 0) == FAILURE
)
1297 gfc_check_ieor (gfc_expr
*i
, gfc_expr
*j
)
1299 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1302 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1305 if (i
->ts
.kind
!= j
->ts
.kind
)
1307 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1308 &i
->where
) == FAILURE
)
1317 gfc_check_index (gfc_expr
*string
, gfc_expr
*substring
, gfc_expr
*back
,
1320 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
1321 || type_check (substring
, 1, BT_CHARACTER
) == FAILURE
)
1324 if (back
!= NULL
&& type_check (back
, 2, BT_LOGICAL
) == FAILURE
)
1327 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
1329 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1330 "with KIND argument at %L",
1331 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1334 if (string
->ts
.kind
!= substring
->ts
.kind
)
1336 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1337 "kind as '%s'", gfc_current_intrinsic_arg
[1],
1338 gfc_current_intrinsic
, &substring
->where
,
1339 gfc_current_intrinsic_arg
[0]);
1348 gfc_check_int (gfc_expr
*x
, gfc_expr
*kind
)
1350 if (numeric_check (x
, 0) == FAILURE
)
1353 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1361 gfc_check_intconv (gfc_expr
*x
)
1363 if (numeric_check (x
, 0) == FAILURE
)
1371 gfc_check_ior (gfc_expr
*i
, gfc_expr
*j
)
1373 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1376 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1379 if (i
->ts
.kind
!= j
->ts
.kind
)
1381 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1382 &i
->where
) == FAILURE
)
1391 gfc_check_ishft (gfc_expr
*i
, gfc_expr
*shift
)
1393 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
1394 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1402 gfc_check_ishftc (gfc_expr
*i
, gfc_expr
*shift
, gfc_expr
*size
)
1404 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
1405 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1408 if (size
!= NULL
&& type_check (size
, 2, BT_INTEGER
) == FAILURE
)
1416 gfc_check_kill (gfc_expr
*pid
, gfc_expr
*sig
)
1418 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
1421 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
1429 gfc_check_kill_sub (gfc_expr
*pid
, gfc_expr
*sig
, gfc_expr
*status
)
1431 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
1434 if (scalar_check (pid
, 0) == FAILURE
)
1437 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
1440 if (scalar_check (sig
, 1) == FAILURE
)
1446 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1449 if (scalar_check (status
, 2) == FAILURE
)
1457 gfc_check_kind (gfc_expr
*x
)
1459 if (x
->ts
.type
== BT_DERIVED
)
1461 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1462 "non-derived type", gfc_current_intrinsic_arg
[0],
1463 gfc_current_intrinsic
, &x
->where
);
1472 gfc_check_lbound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
1474 if (array_check (array
, 0) == FAILURE
)
1479 if (dim_check (dim
, 1, false) == FAILURE
)
1482 if (dim_rank_check (dim
, array
, 1) == FAILURE
)
1486 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
1488 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1489 "with KIND argument at %L",
1490 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1498 gfc_check_len_lentrim (gfc_expr
*s
, gfc_expr
*kind
)
1500 if (type_check (s
, 0, BT_CHARACTER
) == FAILURE
)
1503 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1505 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1506 "with KIND argument at %L",
1507 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1515 gfc_check_lge_lgt_lle_llt (gfc_expr
*a
, gfc_expr
*b
)
1517 if (type_check (a
, 0, BT_CHARACTER
) == FAILURE
)
1519 if (kind_value_check (a
, 0, gfc_default_character_kind
) == FAILURE
)
1522 if (type_check (b
, 1, BT_CHARACTER
) == FAILURE
)
1524 if (kind_value_check (b
, 1, gfc_default_character_kind
) == FAILURE
)
1532 gfc_check_link (gfc_expr
*path1
, gfc_expr
*path2
)
1534 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1536 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
1539 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1541 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
1549 gfc_check_link_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
1551 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1553 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
1556 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1558 if (kind_value_check (path2
, 0, gfc_default_character_kind
) == FAILURE
)
1564 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1567 if (scalar_check (status
, 2) == FAILURE
)
1575 gfc_check_loc (gfc_expr
*expr
)
1577 return variable_check (expr
, 0);
1582 gfc_check_symlnk (gfc_expr
*path1
, gfc_expr
*path2
)
1584 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1586 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
1589 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1591 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
1599 gfc_check_symlnk_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
1601 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1603 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
1606 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1608 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
1614 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1617 if (scalar_check (status
, 2) == FAILURE
)
1625 gfc_check_logical (gfc_expr
*a
, gfc_expr
*kind
)
1627 if (type_check (a
, 0, BT_LOGICAL
) == FAILURE
)
1629 if (kind_check (kind
, 1, BT_LOGICAL
) == FAILURE
)
1636 /* Min/max family. */
1639 min_max_args (gfc_actual_arglist
*arg
)
1641 if (arg
== NULL
|| arg
->next
== NULL
)
1643 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1644 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
1653 check_rest (bt type
, int kind
, gfc_actual_arglist
*arglist
)
1655 gfc_actual_arglist
*arg
, *tmp
;
1660 if (min_max_args (arglist
) == FAILURE
)
1663 for (arg
= arglist
, n
=1; arg
; arg
= arg
->next
, n
++)
1666 if (x
->ts
.type
!= type
|| x
->ts
.kind
!= kind
)
1668 if (x
->ts
.type
== type
)
1670 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type "
1671 "kinds at %L", &x
->where
) == FAILURE
)
1676 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
1677 "%s(%d)", n
, gfc_current_intrinsic
, &x
->where
,
1678 gfc_basic_typename (type
), kind
);
1683 for (tmp
= arglist
, m
=1; tmp
!= arg
; tmp
= tmp
->next
, m
++)
1686 snprintf (buffer
, 80, "arguments 'a%d' and 'a%d' for intrinsic '%s'",
1687 m
, n
, gfc_current_intrinsic
);
1688 if (gfc_check_conformance (buffer
, tmp
->expr
, x
) == FAILURE
)
1698 gfc_check_min_max (gfc_actual_arglist
*arg
)
1702 if (min_max_args (arg
) == FAILURE
)
1707 if (x
->ts
.type
== BT_CHARACTER
)
1709 if (gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1710 "with CHARACTER argument at %L",
1711 gfc_current_intrinsic
, &x
->where
) == FAILURE
)
1714 else if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
1716 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
1717 "REAL or CHARACTER", gfc_current_intrinsic
, &x
->where
);
1721 return check_rest (x
->ts
.type
, x
->ts
.kind
, arg
);
1726 gfc_check_min_max_integer (gfc_actual_arglist
*arg
)
1728 return check_rest (BT_INTEGER
, gfc_default_integer_kind
, arg
);
1733 gfc_check_min_max_real (gfc_actual_arglist
*arg
)
1735 return check_rest (BT_REAL
, gfc_default_real_kind
, arg
);
1740 gfc_check_min_max_double (gfc_actual_arglist
*arg
)
1742 return check_rest (BT_REAL
, gfc_default_double_kind
, arg
);
1746 /* End of min/max family. */
1749 gfc_check_malloc (gfc_expr
*size
)
1751 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
1754 if (scalar_check (size
, 0) == FAILURE
)
1762 gfc_check_matmul (gfc_expr
*matrix_a
, gfc_expr
*matrix_b
)
1764 if ((matrix_a
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_b
->ts
))
1766 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1767 "or LOGICAL", gfc_current_intrinsic_arg
[0],
1768 gfc_current_intrinsic
, &matrix_a
->where
);
1772 if ((matrix_b
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_a
->ts
))
1774 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1775 "or LOGICAL", gfc_current_intrinsic_arg
[1],
1776 gfc_current_intrinsic
, &matrix_b
->where
);
1780 switch (matrix_a
->rank
)
1783 if (rank_check (matrix_b
, 1, 2) == FAILURE
)
1785 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
1786 if (!identical_dimen_shape (matrix_a
, 0, matrix_b
, 0))
1788 gfc_error ("Different shape on dimension 1 for arguments '%s' "
1789 "and '%s' at %L for intrinsic matmul",
1790 gfc_current_intrinsic_arg
[0],
1791 gfc_current_intrinsic_arg
[1], &matrix_a
->where
);
1797 if (matrix_b
->rank
!= 2)
1799 if (rank_check (matrix_b
, 1, 1) == FAILURE
)
1802 /* matrix_b has rank 1 or 2 here. Common check for the cases
1803 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
1804 - matrix_a has shape (n,m) and matrix_b has shape (m). */
1805 if (!identical_dimen_shape (matrix_a
, 1, matrix_b
, 0))
1807 gfc_error ("Different shape on dimension 2 for argument '%s' and "
1808 "dimension 1 for argument '%s' at %L for intrinsic "
1809 "matmul", gfc_current_intrinsic_arg
[0],
1810 gfc_current_intrinsic_arg
[1], &matrix_a
->where
);
1816 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
1817 "1 or 2", gfc_current_intrinsic_arg
[0],
1818 gfc_current_intrinsic
, &matrix_a
->where
);
1826 /* Whoever came up with this interface was probably on something.
1827 The possibilities for the occupation of the second and third
1834 NULL MASK minloc(array, mask=m)
1837 I.e. in the case of minloc(array,mask), mask will be in the second
1838 position of the argument list and we'll have to fix that up. */
1841 gfc_check_minloc_maxloc (gfc_actual_arglist
*ap
)
1843 gfc_expr
*a
, *m
, *d
;
1846 if (int_or_real_check (a
, 0) == FAILURE
|| array_check (a
, 0) == FAILURE
)
1850 m
= ap
->next
->next
->expr
;
1852 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
1853 && ap
->next
->name
== NULL
)
1857 ap
->next
->expr
= NULL
;
1858 ap
->next
->next
->expr
= m
;
1861 if (d
&& dim_check (d
, 1, false) == FAILURE
)
1864 if (d
&& dim_rank_check (d
, a
, 0) == FAILURE
)
1867 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
1873 snprintf (buffer
, 80, "arguments '%s' and '%s' for intrinsic %s",
1874 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic_arg
[2],
1875 gfc_current_intrinsic
);
1876 if (gfc_check_conformance (buffer
, a
, m
) == FAILURE
)
1884 /* Similar to minloc/maxloc, the argument list might need to be
1885 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1886 difference is that MINLOC/MAXLOC take an additional KIND argument.
1887 The possibilities are:
1893 NULL MASK minval(array, mask=m)
1896 I.e. in the case of minval(array,mask), mask will be in the second
1897 position of the argument list and we'll have to fix that up. */
1900 check_reduction (gfc_actual_arglist
*ap
)
1902 gfc_expr
*a
, *m
, *d
;
1906 m
= ap
->next
->next
->expr
;
1908 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
1909 && ap
->next
->name
== NULL
)
1913 ap
->next
->expr
= NULL
;
1914 ap
->next
->next
->expr
= m
;
1917 if (d
&& dim_check (d
, 1, false) == FAILURE
)
1920 if (d
&& dim_rank_check (d
, a
, 0) == FAILURE
)
1923 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
1929 snprintf (buffer
, 80, "arguments '%s' and '%s' for intrinsic %s",
1930 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic_arg
[2],
1931 gfc_current_intrinsic
);
1932 if (gfc_check_conformance (buffer
, a
, m
) == FAILURE
)
1941 gfc_check_minval_maxval (gfc_actual_arglist
*ap
)
1943 if (int_or_real_check (ap
->expr
, 0) == FAILURE
1944 || array_check (ap
->expr
, 0) == FAILURE
)
1947 return check_reduction (ap
);
1952 gfc_check_product_sum (gfc_actual_arglist
*ap
)
1954 if (numeric_check (ap
->expr
, 0) == FAILURE
1955 || array_check (ap
->expr
, 0) == FAILURE
)
1958 return check_reduction (ap
);
1963 gfc_check_merge (gfc_expr
*tsource
, gfc_expr
*fsource
, gfc_expr
*mask
)
1965 if (same_type_check (tsource
, 0, fsource
, 1) == FAILURE
)
1968 if (type_check (mask
, 2, BT_LOGICAL
) == FAILURE
)
1971 if (tsource
->ts
.type
== BT_CHARACTER
)
1972 return check_same_strlen (tsource
, fsource
, "MERGE");
1979 gfc_check_move_alloc (gfc_expr
*from
, gfc_expr
*to
)
1981 symbol_attribute attr
;
1983 if (variable_check (from
, 0) == FAILURE
)
1986 if (array_check (from
, 0) == FAILURE
)
1989 attr
= gfc_variable_attr (from
, NULL
);
1990 if (!attr
.allocatable
)
1992 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
1993 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic
,
1998 if (variable_check (to
, 0) == FAILURE
)
2001 if (array_check (to
, 0) == FAILURE
)
2004 attr
= gfc_variable_attr (to
, NULL
);
2005 if (!attr
.allocatable
)
2007 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
2008 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic
,
2013 if (same_type_check (from
, 0, to
, 1) == FAILURE
)
2016 if (to
->rank
!= from
->rank
)
2018 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
2019 "have the same rank %d/%d", gfc_current_intrinsic_arg
[0],
2020 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
,
2021 &to
->where
, from
->rank
, to
->rank
);
2025 if (to
->ts
.kind
!= from
->ts
.kind
)
2027 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
2028 "be of the same kind %d/%d", gfc_current_intrinsic_arg
[0],
2029 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
,
2030 &to
->where
, from
->ts
.kind
, to
->ts
.kind
);
2039 gfc_check_nearest (gfc_expr
*x
, gfc_expr
*s
)
2041 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2044 if (type_check (s
, 1, BT_REAL
) == FAILURE
)
2052 gfc_check_new_line (gfc_expr
*a
)
2054 if (type_check (a
, 0, BT_CHARACTER
) == FAILURE
)
2062 gfc_check_null (gfc_expr
*mold
)
2064 symbol_attribute attr
;
2069 if (variable_check (mold
, 0) == FAILURE
)
2072 attr
= gfc_variable_attr (mold
, NULL
);
2076 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
2077 gfc_current_intrinsic_arg
[0],
2078 gfc_current_intrinsic
, &mold
->where
);
2087 gfc_check_pack (gfc_expr
*array
, gfc_expr
*mask
, gfc_expr
*vector
)
2091 if (array_check (array
, 0) == FAILURE
)
2094 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
2097 snprintf (buffer
, 80, "arguments '%s' and '%s' for intrinsic '%s'",
2098 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic_arg
[1],
2099 gfc_current_intrinsic
);
2100 if (gfc_check_conformance (buffer
, array
, mask
) == FAILURE
)
2105 if (same_type_check (array
, 0, vector
, 2) == FAILURE
)
2108 if (rank_check (vector
, 2, 1) == FAILURE
)
2111 /* TODO: More constraints here. */
2119 gfc_check_precision (gfc_expr
*x
)
2121 if (x
->ts
.type
!= BT_REAL
&& x
->ts
.type
!= BT_COMPLEX
)
2123 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of type "
2124 "REAL or COMPLEX", gfc_current_intrinsic_arg
[0],
2125 gfc_current_intrinsic
, &x
->where
);
2134 gfc_check_present (gfc_expr
*a
)
2138 if (variable_check (a
, 0) == FAILURE
)
2141 sym
= a
->symtree
->n
.sym
;
2142 if (!sym
->attr
.dummy
)
2144 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
2145 "dummy variable", gfc_current_intrinsic_arg
[0],
2146 gfc_current_intrinsic
, &a
->where
);
2150 if (!sym
->attr
.optional
)
2152 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
2153 "an OPTIONAL dummy variable", gfc_current_intrinsic_arg
[0],
2154 gfc_current_intrinsic
, &a
->where
);
2158 /* 13.14.82 PRESENT(A)
2160 Argument. A shall be the name of an optional dummy argument that is
2161 accessible in the subprogram in which the PRESENT function reference
2165 && !(a
->ref
->next
== NULL
&& a
->ref
->type
== REF_ARRAY
2166 && a
->ref
->u
.ar
.type
== AR_FULL
))
2168 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
2169 "subobject of '%s'", gfc_current_intrinsic_arg
[0],
2170 gfc_current_intrinsic
, &a
->where
, sym
->name
);
2179 gfc_check_radix (gfc_expr
*x
)
2181 if (int_or_real_check (x
, 0) == FAILURE
)
2189 gfc_check_range (gfc_expr
*x
)
2191 if (numeric_check (x
, 0) == FAILURE
)
2198 /* real, float, sngl. */
2200 gfc_check_real (gfc_expr
*a
, gfc_expr
*kind
)
2202 if (numeric_check (a
, 0) == FAILURE
)
2205 if (kind_check (kind
, 1, BT_REAL
) == FAILURE
)
2213 gfc_check_rename (gfc_expr
*path1
, gfc_expr
*path2
)
2215 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2217 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2220 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2222 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2230 gfc_check_rename_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2232 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2234 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2237 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2239 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2245 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2248 if (scalar_check (status
, 2) == FAILURE
)
2256 gfc_check_repeat (gfc_expr
*x
, gfc_expr
*y
)
2258 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
2261 if (scalar_check (x
, 0) == FAILURE
)
2264 if (type_check (y
, 0, BT_INTEGER
) == FAILURE
)
2267 if (scalar_check (y
, 1) == FAILURE
)
2275 gfc_check_reshape (gfc_expr
*source
, gfc_expr
*shape
,
2276 gfc_expr
*pad
, gfc_expr
*order
)
2282 if (array_check (source
, 0) == FAILURE
)
2285 if (rank_check (shape
, 1, 1) == FAILURE
)
2288 if (type_check (shape
, 1, BT_INTEGER
) == FAILURE
)
2291 if (gfc_array_size (shape
, &size
) != SUCCESS
)
2293 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
2294 "array of constant size", &shape
->where
);
2298 m
= mpz_cmp_ui (size
, GFC_MAX_DIMENSIONS
);
2303 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
2304 "than %d elements", &shape
->where
, GFC_MAX_DIMENSIONS
);
2310 if (same_type_check (source
, 0, pad
, 2) == FAILURE
)
2312 if (array_check (pad
, 2) == FAILURE
)
2316 if (order
!= NULL
&& array_check (order
, 3) == FAILURE
)
2319 if (pad
== NULL
&& shape
->expr_type
== EXPR_ARRAY
2320 && gfc_is_constant_expr (shape
)
2321 && !(source
->expr_type
== EXPR_VARIABLE
&& source
->symtree
->n
.sym
->as
2322 && source
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
))
2324 /* Check the match in size between source and destination. */
2325 if (gfc_array_size (source
, &nelems
) == SUCCESS
)
2330 c
= shape
->value
.constructor
;
2331 mpz_init_set_ui (size
, 1);
2332 for (; c
; c
= c
->next
)
2333 mpz_mul (size
, size
, c
->expr
->value
.integer
);
2335 test
= mpz_cmp (nelems
, size
) < 0 && mpz_cmp_ui (size
, 0) > 0;
2341 gfc_error ("Without padding, there are not enough elements "
2342 "in the intrinsic RESHAPE source at %L to match "
2343 "the shape", &source
->where
);
2354 gfc_check_scale (gfc_expr
*x
, gfc_expr
*i
)
2356 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2359 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
2367 gfc_check_scan (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
2369 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
2372 if (type_check (y
, 1, BT_CHARACTER
) == FAILURE
)
2375 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
2378 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
2380 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2381 "with KIND argument at %L",
2382 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2385 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
2393 gfc_check_secnds (gfc_expr
*r
)
2395 if (type_check (r
, 0, BT_REAL
) == FAILURE
)
2398 if (kind_value_check (r
, 0, 4) == FAILURE
)
2401 if (scalar_check (r
, 0) == FAILURE
)
2409 gfc_check_selected_char_kind (gfc_expr
*name
)
2411 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2414 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
2417 if (scalar_check (name
, 0) == FAILURE
)
2425 gfc_check_selected_int_kind (gfc_expr
*r
)
2427 if (type_check (r
, 0, BT_INTEGER
) == FAILURE
)
2430 if (scalar_check (r
, 0) == FAILURE
)
2438 gfc_check_selected_real_kind (gfc_expr
*p
, gfc_expr
*r
)
2440 if (p
== NULL
&& r
== NULL
)
2442 gfc_error ("Missing arguments to %s intrinsic at %L",
2443 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
2448 if (p
!= NULL
&& type_check (p
, 0, BT_INTEGER
) == FAILURE
)
2451 if (r
!= NULL
&& type_check (r
, 1, BT_INTEGER
) == FAILURE
)
2459 gfc_check_set_exponent (gfc_expr
*x
, gfc_expr
*i
)
2461 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2464 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
2472 gfc_check_shape (gfc_expr
*source
)
2476 if (source
->rank
== 0 || source
->expr_type
!= EXPR_VARIABLE
)
2479 ar
= gfc_find_array_ref (source
);
2481 if (ar
->as
&& ar
->as
->type
== AS_ASSUMED_SIZE
&& ar
->type
== AR_FULL
)
2483 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
2484 "an assumed size array", &source
->where
);
2493 gfc_check_sign (gfc_expr
*a
, gfc_expr
*b
)
2495 if (int_or_real_check (a
, 0) == FAILURE
)
2498 if (same_type_check (a
, 0, b
, 1) == FAILURE
)
2506 gfc_check_size (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
2508 if (array_check (array
, 0) == FAILURE
)
2513 if (dim_check (dim
, 1, true) == FAILURE
)
2516 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
2520 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
2522 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2523 "with KIND argument at %L",
2524 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2533 gfc_check_sizeof (gfc_expr
*arg ATTRIBUTE_UNUSED
)
2540 gfc_check_sleep_sub (gfc_expr
*seconds
)
2542 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
2545 if (scalar_check (seconds
, 0) == FAILURE
)
2553 gfc_check_spread (gfc_expr
*source
, gfc_expr
*dim
, gfc_expr
*ncopies
)
2555 if (source
->rank
>= GFC_MAX_DIMENSIONS
)
2557 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
2558 "than rank %d", gfc_current_intrinsic_arg
[0],
2559 gfc_current_intrinsic
, &source
->where
, GFC_MAX_DIMENSIONS
);
2567 if (dim_check (dim
, 1, false) == FAILURE
)
2570 if (type_check (ncopies
, 2, BT_INTEGER
) == FAILURE
)
2573 if (scalar_check (ncopies
, 2) == FAILURE
)
2580 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
2584 gfc_check_fgetputc_sub (gfc_expr
*unit
, gfc_expr
*c
, gfc_expr
*status
)
2586 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2589 if (scalar_check (unit
, 0) == FAILURE
)
2592 if (type_check (c
, 1, BT_CHARACTER
) == FAILURE
)
2594 if (kind_value_check (c
, 1, gfc_default_character_kind
) == FAILURE
)
2600 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
2601 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
2602 || scalar_check (status
, 2) == FAILURE
)
2610 gfc_check_fgetputc (gfc_expr
*unit
, gfc_expr
*c
)
2612 return gfc_check_fgetputc_sub (unit
, c
, NULL
);
2617 gfc_check_fgetput_sub (gfc_expr
*c
, gfc_expr
*status
)
2619 if (type_check (c
, 0, BT_CHARACTER
) == FAILURE
)
2621 if (kind_value_check (c
, 0, gfc_default_character_kind
) == FAILURE
)
2627 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
2628 || kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
2629 || scalar_check (status
, 1) == FAILURE
)
2637 gfc_check_fgetput (gfc_expr
*c
)
2639 return gfc_check_fgetput_sub (c
, NULL
);
2644 gfc_check_fseek_sub (gfc_expr
*unit
, gfc_expr
*offset
, gfc_expr
*whence
, gfc_expr
*status
)
2646 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2649 if (scalar_check (unit
, 0) == FAILURE
)
2652 if (type_check (offset
, 1, BT_INTEGER
) == FAILURE
)
2655 if (scalar_check (offset
, 1) == FAILURE
)
2658 if (type_check (whence
, 2, BT_INTEGER
) == FAILURE
)
2661 if (scalar_check (whence
, 2) == FAILURE
)
2667 if (type_check (status
, 3, BT_INTEGER
) == FAILURE
)
2670 if (kind_value_check (status
, 3, 4) == FAILURE
)
2673 if (scalar_check (status
, 3) == FAILURE
)
2682 gfc_check_fstat (gfc_expr
*unit
, gfc_expr
*array
)
2684 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2687 if (scalar_check (unit
, 0) == FAILURE
)
2690 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
2691 || kind_value_check (unit
, 0, gfc_default_integer_kind
) == FAILURE
)
2694 if (array_check (array
, 1) == FAILURE
)
2702 gfc_check_fstat_sub (gfc_expr
*unit
, gfc_expr
*array
, gfc_expr
*status
)
2704 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2707 if (scalar_check (unit
, 0) == FAILURE
)
2710 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
2711 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
2714 if (array_check (array
, 1) == FAILURE
)
2720 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
2721 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
2724 if (scalar_check (status
, 2) == FAILURE
)
2732 gfc_check_ftell (gfc_expr
*unit
)
2734 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2737 if (scalar_check (unit
, 0) == FAILURE
)
2745 gfc_check_ftell_sub (gfc_expr
*unit
, gfc_expr
*offset
)
2747 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2750 if (scalar_check (unit
, 0) == FAILURE
)
2753 if (type_check (offset
, 1, BT_INTEGER
) == FAILURE
)
2756 if (scalar_check (offset
, 1) == FAILURE
)
2764 gfc_check_stat (gfc_expr
*name
, gfc_expr
*array
)
2766 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2768 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
2771 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
2772 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
2775 if (array_check (array
, 1) == FAILURE
)
2783 gfc_check_stat_sub (gfc_expr
*name
, gfc_expr
*array
, gfc_expr
*status
)
2785 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2787 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
2790 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
2791 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
2794 if (array_check (array
, 1) == FAILURE
)
2800 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
2801 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
2804 if (scalar_check (status
, 2) == FAILURE
)
2812 gfc_check_transfer (gfc_expr
*source ATTRIBUTE_UNUSED
,
2813 gfc_expr
*mold ATTRIBUTE_UNUSED
, gfc_expr
*size
)
2815 if (mold
->ts
.type
== BT_HOLLERITH
)
2817 gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
2818 &mold
->where
, gfc_basic_typename (BT_HOLLERITH
));
2824 if (type_check (size
, 2, BT_INTEGER
) == FAILURE
)
2827 if (scalar_check (size
, 2) == FAILURE
)
2830 if (nonoptional_check (size
, 2) == FAILURE
)
2839 gfc_check_transpose (gfc_expr
*matrix
)
2841 if (rank_check (matrix
, 0, 2) == FAILURE
)
2849 gfc_check_ubound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
2851 if (array_check (array
, 0) == FAILURE
)
2856 if (dim_check (dim
, 1, false) == FAILURE
)
2859 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
2863 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
2865 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2866 "with KIND argument at %L",
2867 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2875 gfc_check_unpack (gfc_expr
*vector
, gfc_expr
*mask
, gfc_expr
*field
)
2877 if (rank_check (vector
, 0, 1) == FAILURE
)
2880 if (array_check (mask
, 1) == FAILURE
)
2883 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
2886 if (same_type_check (vector
, 0, field
, 2) == FAILURE
)
2894 gfc_check_verify (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
2896 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
2899 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
2902 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
2905 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
2907 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2908 "with KIND argument at %L",
2909 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2917 gfc_check_trim (gfc_expr
*x
)
2919 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
2922 if (scalar_check (x
, 0) == FAILURE
)
2930 gfc_check_ttynam (gfc_expr
*unit
)
2932 if (scalar_check (unit
, 0) == FAILURE
)
2935 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2942 /* Common check function for the half a dozen intrinsics that have a
2943 single real argument. */
2946 gfc_check_x (gfc_expr
*x
)
2948 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2955 /************* Check functions for intrinsic subroutines *************/
2958 gfc_check_cpu_time (gfc_expr
*time
)
2960 if (scalar_check (time
, 0) == FAILURE
)
2963 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
2966 if (variable_check (time
, 0) == FAILURE
)
2974 gfc_check_date_and_time (gfc_expr
*date
, gfc_expr
*time
,
2975 gfc_expr
*zone
, gfc_expr
*values
)
2979 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
2981 if (kind_value_check (date
, 0, gfc_default_character_kind
) == FAILURE
)
2983 if (scalar_check (date
, 0) == FAILURE
)
2985 if (variable_check (date
, 0) == FAILURE
)
2991 if (type_check (time
, 1, BT_CHARACTER
) == FAILURE
)
2993 if (kind_value_check (time
, 1, gfc_default_character_kind
) == FAILURE
)
2995 if (scalar_check (time
, 1) == FAILURE
)
2997 if (variable_check (time
, 1) == FAILURE
)
3003 if (type_check (zone
, 2, BT_CHARACTER
) == FAILURE
)
3005 if (kind_value_check (zone
, 2, gfc_default_character_kind
) == FAILURE
)
3007 if (scalar_check (zone
, 2) == FAILURE
)
3009 if (variable_check (zone
, 2) == FAILURE
)
3015 if (type_check (values
, 3, BT_INTEGER
) == FAILURE
)
3017 if (array_check (values
, 3) == FAILURE
)
3019 if (rank_check (values
, 3, 1) == FAILURE
)
3021 if (variable_check (values
, 3) == FAILURE
)
3030 gfc_check_mvbits (gfc_expr
*from
, gfc_expr
*frompos
, gfc_expr
*len
,
3031 gfc_expr
*to
, gfc_expr
*topos
)
3033 if (type_check (from
, 0, BT_INTEGER
) == FAILURE
)
3036 if (type_check (frompos
, 1, BT_INTEGER
) == FAILURE
)
3039 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
3042 if (same_type_check (from
, 0, to
, 3) == FAILURE
)
3045 if (variable_check (to
, 3) == FAILURE
)
3048 if (type_check (topos
, 4, BT_INTEGER
) == FAILURE
)
3056 gfc_check_random_number (gfc_expr
*harvest
)
3058 if (type_check (harvest
, 0, BT_REAL
) == FAILURE
)
3061 if (variable_check (harvest
, 0) == FAILURE
)
3069 gfc_check_random_seed (gfc_expr
*size
, gfc_expr
*put
, gfc_expr
*get
)
3071 unsigned int nargs
= 0;
3072 locus
*where
= NULL
;
3076 if (size
->expr_type
!= EXPR_VARIABLE
3077 || !size
->symtree
->n
.sym
->attr
.optional
)
3080 if (scalar_check (size
, 0) == FAILURE
)
3083 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
3086 if (variable_check (size
, 0) == FAILURE
)
3089 if (kind_value_check (size
, 0, gfc_default_integer_kind
) == FAILURE
)
3095 if (put
->expr_type
!= EXPR_VARIABLE
3096 || !put
->symtree
->n
.sym
->attr
.optional
)
3099 where
= &put
->where
;
3102 if (array_check (put
, 1) == FAILURE
)
3105 if (rank_check (put
, 1, 1) == FAILURE
)
3108 if (type_check (put
, 1, BT_INTEGER
) == FAILURE
)
3111 if (kind_value_check (put
, 1, gfc_default_integer_kind
) == FAILURE
)
3117 if (get
->expr_type
!= EXPR_VARIABLE
3118 || !get
->symtree
->n
.sym
->attr
.optional
)
3121 where
= &get
->where
;
3124 if (array_check (get
, 2) == FAILURE
)
3127 if (rank_check (get
, 2, 1) == FAILURE
)
3130 if (type_check (get
, 2, BT_INTEGER
) == FAILURE
)
3133 if (variable_check (get
, 2) == FAILURE
)
3136 if (kind_value_check (get
, 2, gfc_default_integer_kind
) == FAILURE
)
3140 /* RANDOM_SEED may not have more than one non-optional argument. */
3142 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
, where
);
3149 gfc_check_second_sub (gfc_expr
*time
)
3151 if (scalar_check (time
, 0) == FAILURE
)
3154 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
3157 if (kind_value_check(time
, 0, 4) == FAILURE
)
3164 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
3165 count, count_rate, and count_max are all optional arguments */
3168 gfc_check_system_clock (gfc_expr
*count
, gfc_expr
*count_rate
,
3169 gfc_expr
*count_max
)
3173 if (scalar_check (count
, 0) == FAILURE
)
3176 if (type_check (count
, 0, BT_INTEGER
) == FAILURE
)
3179 if (variable_check (count
, 0) == FAILURE
)
3183 if (count_rate
!= NULL
)
3185 if (scalar_check (count_rate
, 1) == FAILURE
)
3188 if (type_check (count_rate
, 1, BT_INTEGER
) == FAILURE
)
3191 if (variable_check (count_rate
, 1) == FAILURE
)
3195 && same_type_check (count
, 0, count_rate
, 1) == FAILURE
)
3200 if (count_max
!= NULL
)
3202 if (scalar_check (count_max
, 2) == FAILURE
)
3205 if (type_check (count_max
, 2, BT_INTEGER
) == FAILURE
)
3208 if (variable_check (count_max
, 2) == FAILURE
)
3212 && same_type_check (count
, 0, count_max
, 2) == FAILURE
)
3215 if (count_rate
!= NULL
3216 && same_type_check (count_rate
, 1, count_max
, 2) == FAILURE
)
3225 gfc_check_irand (gfc_expr
*x
)
3230 if (scalar_check (x
, 0) == FAILURE
)
3233 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
3236 if (kind_value_check(x
, 0, 4) == FAILURE
)
3244 gfc_check_alarm_sub (gfc_expr
*seconds
, gfc_expr
*handler
, gfc_expr
*status
)
3246 if (scalar_check (seconds
, 0) == FAILURE
)
3249 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
3252 if (handler
->ts
.type
!= BT_INTEGER
&& handler
->ts
.type
!= BT_PROCEDURE
)
3254 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3255 "or PROCEDURE", gfc_current_intrinsic_arg
[1],
3256 gfc_current_intrinsic
, &handler
->where
);
3260 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
3266 if (scalar_check (status
, 2) == FAILURE
)
3269 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
3272 if (kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
3280 gfc_check_rand (gfc_expr
*x
)
3285 if (scalar_check (x
, 0) == FAILURE
)
3288 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
3291 if (kind_value_check(x
, 0, 4) == FAILURE
)
3299 gfc_check_srand (gfc_expr
*x
)
3301 if (scalar_check (x
, 0) == FAILURE
)
3304 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
3307 if (kind_value_check(x
, 0, 4) == FAILURE
)
3315 gfc_check_ctime_sub (gfc_expr
*time
, gfc_expr
*result
)
3317 if (scalar_check (time
, 0) == FAILURE
)
3319 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
3322 if (type_check (result
, 1, BT_CHARACTER
) == FAILURE
)
3324 if (kind_value_check (result
, 1, gfc_default_character_kind
) == FAILURE
)
3332 gfc_check_dtime_etime (gfc_expr
*x
)
3334 if (array_check (x
, 0) == FAILURE
)
3337 if (rank_check (x
, 0, 1) == FAILURE
)
3340 if (variable_check (x
, 0) == FAILURE
)
3343 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
3346 if (kind_value_check(x
, 0, 4) == FAILURE
)
3354 gfc_check_dtime_etime_sub (gfc_expr
*values
, gfc_expr
*time
)
3356 if (array_check (values
, 0) == FAILURE
)
3359 if (rank_check (values
, 0, 1) == FAILURE
)
3362 if (variable_check (values
, 0) == FAILURE
)
3365 if (type_check (values
, 0, BT_REAL
) == FAILURE
)
3368 if (kind_value_check(values
, 0, 4) == FAILURE
)
3371 if (scalar_check (time
, 1) == FAILURE
)
3374 if (type_check (time
, 1, BT_REAL
) == FAILURE
)
3377 if (kind_value_check(time
, 1, 4) == FAILURE
)
3385 gfc_check_fdate_sub (gfc_expr
*date
)
3387 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
3389 if (kind_value_check (date
, 0, gfc_default_character_kind
) == FAILURE
)
3397 gfc_check_gerror (gfc_expr
*msg
)
3399 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
3401 if (kind_value_check (msg
, 0, gfc_default_character_kind
) == FAILURE
)
3409 gfc_check_getcwd_sub (gfc_expr
*cwd
, gfc_expr
*status
)
3411 if (type_check (cwd
, 0, BT_CHARACTER
) == FAILURE
)
3413 if (kind_value_check (cwd
, 0, gfc_default_character_kind
) == FAILURE
)
3419 if (scalar_check (status
, 1) == FAILURE
)
3422 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
3430 gfc_check_getarg (gfc_expr
*pos
, gfc_expr
*value
)
3432 if (type_check (pos
, 0, BT_INTEGER
) == FAILURE
)
3435 if (pos
->ts
.kind
> gfc_default_integer_kind
)
3437 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
3438 "not wider than the default kind (%d)",
3439 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic
,
3440 &pos
->where
, gfc_default_integer_kind
);
3444 if (type_check (value
, 1, BT_CHARACTER
) == FAILURE
)
3446 if (kind_value_check (value
, 1, gfc_default_character_kind
) == FAILURE
)
3454 gfc_check_getlog (gfc_expr
*msg
)
3456 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
3458 if (kind_value_check (msg
, 0, gfc_default_character_kind
) == FAILURE
)
3466 gfc_check_exit (gfc_expr
*status
)
3471 if (type_check (status
, 0, BT_INTEGER
) == FAILURE
)
3474 if (scalar_check (status
, 0) == FAILURE
)
3482 gfc_check_flush (gfc_expr
*unit
)
3487 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3490 if (scalar_check (unit
, 0) == FAILURE
)
3498 gfc_check_free (gfc_expr
*i
)
3500 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
3503 if (scalar_check (i
, 0) == FAILURE
)
3511 gfc_check_hostnm (gfc_expr
*name
)
3513 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3515 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3523 gfc_check_hostnm_sub (gfc_expr
*name
, gfc_expr
*status
)
3525 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3527 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3533 if (scalar_check (status
, 1) == FAILURE
)
3536 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
3544 gfc_check_itime_idate (gfc_expr
*values
)
3546 if (array_check (values
, 0) == FAILURE
)
3549 if (rank_check (values
, 0, 1) == FAILURE
)
3552 if (variable_check (values
, 0) == FAILURE
)
3555 if (type_check (values
, 0, BT_INTEGER
) == FAILURE
)
3558 if (kind_value_check(values
, 0, gfc_default_integer_kind
) == FAILURE
)
3566 gfc_check_ltime_gmtime (gfc_expr
*time
, gfc_expr
*values
)
3568 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
3571 if (kind_value_check(time
, 0, gfc_default_integer_kind
) == FAILURE
)
3574 if (scalar_check (time
, 0) == FAILURE
)
3577 if (array_check (values
, 1) == FAILURE
)
3580 if (rank_check (values
, 1, 1) == FAILURE
)
3583 if (variable_check (values
, 1) == FAILURE
)
3586 if (type_check (values
, 1, BT_INTEGER
) == FAILURE
)
3589 if (kind_value_check(values
, 1, gfc_default_integer_kind
) == FAILURE
)
3597 gfc_check_ttynam_sub (gfc_expr
*unit
, gfc_expr
*name
)
3599 if (scalar_check (unit
, 0) == FAILURE
)
3602 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3605 if (type_check (name
, 1, BT_CHARACTER
) == FAILURE
)
3607 if (kind_value_check (name
, 1, gfc_default_character_kind
) == FAILURE
)
3615 gfc_check_isatty (gfc_expr
*unit
)
3620 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3623 if (scalar_check (unit
, 0) == FAILURE
)
3631 gfc_check_isnan (gfc_expr
*x
)
3633 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
3641 gfc_check_perror (gfc_expr
*string
)
3643 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
)
3645 if (kind_value_check (string
, 0, gfc_default_character_kind
) == FAILURE
)
3653 gfc_check_umask (gfc_expr
*mask
)
3655 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
3658 if (scalar_check (mask
, 0) == FAILURE
)
3666 gfc_check_umask_sub (gfc_expr
*mask
, gfc_expr
*old
)
3668 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
3671 if (scalar_check (mask
, 0) == FAILURE
)
3677 if (scalar_check (old
, 1) == FAILURE
)
3680 if (type_check (old
, 1, BT_INTEGER
) == FAILURE
)
3688 gfc_check_unlink (gfc_expr
*name
)
3690 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3692 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3700 gfc_check_unlink_sub (gfc_expr
*name
, gfc_expr
*status
)
3702 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3704 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3710 if (scalar_check (status
, 1) == FAILURE
)
3713 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
3721 gfc_check_signal (gfc_expr
*number
, gfc_expr
*handler
)
3723 if (scalar_check (number
, 0) == FAILURE
)
3726 if (type_check (number
, 0, BT_INTEGER
) == FAILURE
)
3729 if (handler
->ts
.type
!= BT_INTEGER
&& handler
->ts
.type
!= BT_PROCEDURE
)
3731 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3732 "or PROCEDURE", gfc_current_intrinsic_arg
[1],
3733 gfc_current_intrinsic
, &handler
->where
);
3737 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
3745 gfc_check_signal_sub (gfc_expr
*number
, gfc_expr
*handler
, gfc_expr
*status
)
3747 if (scalar_check (number
, 0) == FAILURE
)
3750 if (type_check (number
, 0, BT_INTEGER
) == FAILURE
)
3753 if (handler
->ts
.type
!= BT_INTEGER
&& handler
->ts
.type
!= BT_PROCEDURE
)
3755 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3756 "or PROCEDURE", gfc_current_intrinsic_arg
[1],
3757 gfc_current_intrinsic
, &handler
->where
);
3761 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
3767 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
3770 if (scalar_check (status
, 2) == FAILURE
)
3778 gfc_check_system_sub (gfc_expr
*cmd
, gfc_expr
*status
)
3780 if (type_check (cmd
, 0, BT_CHARACTER
) == FAILURE
)
3782 if (kind_value_check (cmd
, 0, gfc_default_character_kind
) == FAILURE
)
3785 if (scalar_check (status
, 1) == FAILURE
)
3788 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
3791 if (kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
)
3798 /* This is used for the GNU intrinsics AND, OR and XOR. */
3800 gfc_check_and (gfc_expr
*i
, gfc_expr
*j
)
3802 if (i
->ts
.type
!= BT_INTEGER
&& i
->ts
.type
!= BT_LOGICAL
)
3804 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3805 "or LOGICAL", gfc_current_intrinsic_arg
[0],
3806 gfc_current_intrinsic
, &i
->where
);
3810 if (j
->ts
.type
!= BT_INTEGER
&& j
->ts
.type
!= BT_LOGICAL
)
3812 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3813 "or LOGICAL", gfc_current_intrinsic_arg
[1],
3814 gfc_current_intrinsic
, &j
->where
);
3818 if (i
->ts
.type
!= j
->ts
.type
)
3820 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
3821 "have the same type", gfc_current_intrinsic_arg
[0],
3822 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
,
3827 if (scalar_check (i
, 0) == FAILURE
)
3830 if (scalar_check (j
, 1) == FAILURE
)