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 attr1
, attr2
;
592 where
= &pointer
->where
;
594 if (pointer
->expr_type
== EXPR_VARIABLE
)
595 attr1
= gfc_variable_attr (pointer
, NULL
);
596 else if (pointer
->expr_type
== EXPR_FUNCTION
)
597 attr1
= 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. */
603 if (!attr1
.pointer
&& !attr1
.proc_pointer
)
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 attr2
= gfc_variable_attr (target
, NULL
);
621 else if (target
->expr_type
== EXPR_FUNCTION
)
622 attr2
= 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 (attr1
.pointer
&& !attr2
.pointer
&& !attr2
.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
)
879 else if (shift
->rank
!= array
->rank
- 1 && shift
->rank
!= 0)
881 gfc_error ("SHIFT argument at %L of CSHIFT must have rank %d or be a "
882 "scalar", &shift
->where
, array
->rank
- 1);
886 /* TODO: Add shape conformance check between array (w/o dimension dim)
889 if (dim_check (dim
, 2, true) == FAILURE
)
897 gfc_check_ctime (gfc_expr
*time
)
899 if (scalar_check (time
, 0) == FAILURE
)
902 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
909 gfc_try
gfc_check_datan2 (gfc_expr
*y
, gfc_expr
*x
)
911 if (double_check (y
, 0) == FAILURE
|| double_check (x
, 1) == FAILURE
)
918 gfc_check_dcmplx (gfc_expr
*x
, gfc_expr
*y
)
920 if (numeric_check (x
, 0) == FAILURE
)
925 if (numeric_check (y
, 1) == FAILURE
)
928 if (x
->ts
.type
== BT_COMPLEX
)
930 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
931 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg
[1],
932 gfc_current_intrinsic
, &y
->where
);
942 gfc_check_dble (gfc_expr
*x
)
944 if (numeric_check (x
, 0) == FAILURE
)
952 gfc_check_digits (gfc_expr
*x
)
954 if (int_or_real_check (x
, 0) == FAILURE
)
962 gfc_check_dot_product (gfc_expr
*vector_a
, gfc_expr
*vector_b
)
964 switch (vector_a
->ts
.type
)
967 if (type_check (vector_b
, 1, BT_LOGICAL
) == FAILURE
)
974 if (numeric_check (vector_b
, 1) == FAILURE
)
979 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
980 "or LOGICAL", gfc_current_intrinsic_arg
[0],
981 gfc_current_intrinsic
, &vector_a
->where
);
985 if (rank_check (vector_a
, 0, 1) == FAILURE
)
988 if (rank_check (vector_b
, 1, 1) == FAILURE
)
991 if (! identical_dimen_shape (vector_a
, 0, vector_b
, 0))
993 gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
994 "intrinsic 'dot_product'", gfc_current_intrinsic_arg
[0],
995 gfc_current_intrinsic_arg
[1], &vector_a
->where
);
1004 gfc_check_dprod (gfc_expr
*x
, gfc_expr
*y
)
1006 if (type_check (x
, 0, BT_REAL
) == FAILURE
1007 || type_check (y
, 1, BT_REAL
) == FAILURE
)
1010 if (x
->ts
.kind
!= gfc_default_real_kind
)
1012 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1013 "real", gfc_current_intrinsic_arg
[0],
1014 gfc_current_intrinsic
, &x
->where
);
1018 if (y
->ts
.kind
!= gfc_default_real_kind
)
1020 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1021 "real", gfc_current_intrinsic_arg
[1],
1022 gfc_current_intrinsic
, &y
->where
);
1031 gfc_check_eoshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*boundary
,
1034 if (array_check (array
, 0) == FAILURE
)
1037 if (type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1040 if (array
->rank
== 1)
1042 if (scalar_check (shift
, 2) == FAILURE
)
1045 else if (shift
->rank
!= array
->rank
- 1 && shift
->rank
!= 0)
1047 gfc_error ("SHIFT argument at %L of EOSHIFT must have rank %d or be a "
1048 "scalar", &shift
->where
, array
->rank
- 1);
1052 /* TODO: Add shape conformance check between array (w/o dimension dim)
1055 if (boundary
!= NULL
)
1057 if (same_type_check (array
, 0, boundary
, 2) == FAILURE
)
1060 if (array
->rank
== 1)
1062 if (scalar_check (boundary
, 2) == FAILURE
)
1065 else if (boundary
->rank
!= array
->rank
- 1 && boundary
->rank
!= 0)
1067 gfc_error ("BOUNDARY argument at %L of EOSHIFT must have rank %d or be "
1068 "a scalar", &boundary
->where
, array
->rank
- 1);
1072 if (shift
->rank
== boundary
->rank
)
1075 for (i
= 0; i
< shift
->rank
; i
++)
1076 if (! identical_dimen_shape (shift
, i
, boundary
, i
))
1078 gfc_error ("Different shape in dimension %d for SHIFT and "
1079 "BOUNDARY arguments of EOSHIFT at %L", shift
->rank
,
1086 if (dim_check (dim
, 4, true) == FAILURE
)
1093 /* A single complex argument. */
1096 gfc_check_fn_c (gfc_expr
*a
)
1098 if (type_check (a
, 0, BT_COMPLEX
) == FAILURE
)
1105 /* A single real argument. */
1108 gfc_check_fn_r (gfc_expr
*a
)
1110 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
1116 /* A single double argument. */
1119 gfc_check_fn_d (gfc_expr
*a
)
1121 if (double_check (a
, 0) == FAILURE
)
1127 /* A single real or complex argument. */
1130 gfc_check_fn_rc (gfc_expr
*a
)
1132 if (real_or_complex_check (a
, 0) == FAILURE
)
1140 gfc_check_fnum (gfc_expr
*unit
)
1142 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
1145 if (scalar_check (unit
, 0) == FAILURE
)
1153 gfc_check_huge (gfc_expr
*x
)
1155 if (int_or_real_check (x
, 0) == FAILURE
)
1163 gfc_check_hypot (gfc_expr
*x
, gfc_expr
*y
)
1165 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1167 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
1174 /* Check that the single argument is an integer. */
1177 gfc_check_i (gfc_expr
*i
)
1179 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1187 gfc_check_iand (gfc_expr
*i
, gfc_expr
*j
)
1189 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1192 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1195 if (i
->ts
.kind
!= j
->ts
.kind
)
1197 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1198 &i
->where
) == FAILURE
)
1207 gfc_check_ibclr (gfc_expr
*i
, gfc_expr
*pos
)
1209 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1212 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
1220 gfc_check_ibits (gfc_expr
*i
, gfc_expr
*pos
, gfc_expr
*len
)
1222 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1225 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
1228 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
1236 gfc_check_ibset (gfc_expr
*i
, gfc_expr
*pos
)
1238 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1241 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
1249 gfc_check_ichar_iachar (gfc_expr
*c
, gfc_expr
*kind
)
1253 if (type_check (c
, 0, BT_CHARACTER
) == FAILURE
)
1256 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1259 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1260 "with KIND argument at %L",
1261 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1264 if (c
->expr_type
== EXPR_VARIABLE
|| c
->expr_type
== EXPR_SUBSTRING
)
1270 /* Substring references don't have the charlength set. */
1272 while (ref
&& ref
->type
!= REF_SUBSTRING
)
1275 gcc_assert (ref
== NULL
|| ref
->type
== REF_SUBSTRING
);
1279 /* Check that the argument is length one. Non-constant lengths
1280 can't be checked here, so assume they are ok. */
1281 if (c
->ts
.cl
&& c
->ts
.cl
->length
)
1283 /* If we already have a length for this expression then use it. */
1284 if (c
->ts
.cl
->length
->expr_type
!= EXPR_CONSTANT
)
1286 i
= mpz_get_si (c
->ts
.cl
->length
->value
.integer
);
1293 start
= ref
->u
.ss
.start
;
1294 end
= ref
->u
.ss
.end
;
1297 if (end
== NULL
|| end
->expr_type
!= EXPR_CONSTANT
1298 || start
->expr_type
!= EXPR_CONSTANT
)
1301 i
= mpz_get_si (end
->value
.integer
) + 1
1302 - mpz_get_si (start
->value
.integer
);
1310 gfc_error ("Argument of %s at %L must be of length one",
1311 gfc_current_intrinsic
, &c
->where
);
1320 gfc_check_idnint (gfc_expr
*a
)
1322 if (double_check (a
, 0) == FAILURE
)
1330 gfc_check_ieor (gfc_expr
*i
, gfc_expr
*j
)
1332 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1335 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1338 if (i
->ts
.kind
!= j
->ts
.kind
)
1340 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1341 &i
->where
) == FAILURE
)
1350 gfc_check_index (gfc_expr
*string
, gfc_expr
*substring
, gfc_expr
*back
,
1353 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
1354 || type_check (substring
, 1, BT_CHARACTER
) == FAILURE
)
1357 if (back
!= NULL
&& type_check (back
, 2, BT_LOGICAL
) == FAILURE
)
1360 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
1362 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1363 "with KIND argument at %L",
1364 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1367 if (string
->ts
.kind
!= substring
->ts
.kind
)
1369 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1370 "kind as '%s'", gfc_current_intrinsic_arg
[1],
1371 gfc_current_intrinsic
, &substring
->where
,
1372 gfc_current_intrinsic_arg
[0]);
1381 gfc_check_int (gfc_expr
*x
, gfc_expr
*kind
)
1383 if (numeric_check (x
, 0) == FAILURE
)
1386 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1394 gfc_check_intconv (gfc_expr
*x
)
1396 if (numeric_check (x
, 0) == FAILURE
)
1404 gfc_check_ior (gfc_expr
*i
, gfc_expr
*j
)
1406 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1409 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1412 if (i
->ts
.kind
!= j
->ts
.kind
)
1414 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1415 &i
->where
) == FAILURE
)
1424 gfc_check_ishft (gfc_expr
*i
, gfc_expr
*shift
)
1426 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
1427 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1435 gfc_check_ishftc (gfc_expr
*i
, gfc_expr
*shift
, gfc_expr
*size
)
1437 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
1438 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1441 if (size
!= NULL
&& type_check (size
, 2, BT_INTEGER
) == FAILURE
)
1449 gfc_check_kill (gfc_expr
*pid
, gfc_expr
*sig
)
1451 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
1454 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
1462 gfc_check_kill_sub (gfc_expr
*pid
, gfc_expr
*sig
, gfc_expr
*status
)
1464 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
1467 if (scalar_check (pid
, 0) == FAILURE
)
1470 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
1473 if (scalar_check (sig
, 1) == FAILURE
)
1479 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1482 if (scalar_check (status
, 2) == FAILURE
)
1490 gfc_check_kind (gfc_expr
*x
)
1492 if (x
->ts
.type
== BT_DERIVED
)
1494 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1495 "non-derived type", gfc_current_intrinsic_arg
[0],
1496 gfc_current_intrinsic
, &x
->where
);
1505 gfc_check_lbound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
1507 if (array_check (array
, 0) == FAILURE
)
1512 if (dim_check (dim
, 1, false) == FAILURE
)
1515 if (dim_rank_check (dim
, array
, 1) == FAILURE
)
1519 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
1521 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1522 "with KIND argument at %L",
1523 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1531 gfc_check_len_lentrim (gfc_expr
*s
, gfc_expr
*kind
)
1533 if (type_check (s
, 0, BT_CHARACTER
) == FAILURE
)
1536 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1538 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1539 "with KIND argument at %L",
1540 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1548 gfc_check_lge_lgt_lle_llt (gfc_expr
*a
, gfc_expr
*b
)
1550 if (type_check (a
, 0, BT_CHARACTER
) == FAILURE
)
1552 if (kind_value_check (a
, 0, gfc_default_character_kind
) == FAILURE
)
1555 if (type_check (b
, 1, BT_CHARACTER
) == FAILURE
)
1557 if (kind_value_check (b
, 1, gfc_default_character_kind
) == FAILURE
)
1565 gfc_check_link (gfc_expr
*path1
, gfc_expr
*path2
)
1567 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1569 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
1572 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1574 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
1582 gfc_check_link_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
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
, 0, gfc_default_character_kind
) == FAILURE
)
1597 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1600 if (scalar_check (status
, 2) == FAILURE
)
1608 gfc_check_loc (gfc_expr
*expr
)
1610 return variable_check (expr
, 0);
1615 gfc_check_symlnk (gfc_expr
*path1
, gfc_expr
*path2
)
1617 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1619 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
1622 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1624 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
1632 gfc_check_symlnk_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
1634 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
1636 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
1639 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
1641 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
1647 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1650 if (scalar_check (status
, 2) == FAILURE
)
1658 gfc_check_logical (gfc_expr
*a
, gfc_expr
*kind
)
1660 if (type_check (a
, 0, BT_LOGICAL
) == FAILURE
)
1662 if (kind_check (kind
, 1, BT_LOGICAL
) == FAILURE
)
1669 /* Min/max family. */
1672 min_max_args (gfc_actual_arglist
*arg
)
1674 if (arg
== NULL
|| arg
->next
== NULL
)
1676 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1677 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
1686 check_rest (bt type
, int kind
, gfc_actual_arglist
*arglist
)
1688 gfc_actual_arglist
*arg
, *tmp
;
1693 if (min_max_args (arglist
) == FAILURE
)
1696 for (arg
= arglist
, n
=1; arg
; arg
= arg
->next
, n
++)
1699 if (x
->ts
.type
!= type
|| x
->ts
.kind
!= kind
)
1701 if (x
->ts
.type
== type
)
1703 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type "
1704 "kinds at %L", &x
->where
) == FAILURE
)
1709 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
1710 "%s(%d)", n
, gfc_current_intrinsic
, &x
->where
,
1711 gfc_basic_typename (type
), kind
);
1716 for (tmp
= arglist
, m
=1; tmp
!= arg
; tmp
= tmp
->next
, m
++)
1719 snprintf (buffer
, 80, "arguments 'a%d' and 'a%d' for intrinsic '%s'",
1720 m
, n
, gfc_current_intrinsic
);
1721 if (gfc_check_conformance (buffer
, tmp
->expr
, x
) == FAILURE
)
1731 gfc_check_min_max (gfc_actual_arglist
*arg
)
1735 if (min_max_args (arg
) == FAILURE
)
1740 if (x
->ts
.type
== BT_CHARACTER
)
1742 if (gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1743 "with CHARACTER argument at %L",
1744 gfc_current_intrinsic
, &x
->where
) == FAILURE
)
1747 else if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
1749 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
1750 "REAL or CHARACTER", gfc_current_intrinsic
, &x
->where
);
1754 return check_rest (x
->ts
.type
, x
->ts
.kind
, arg
);
1759 gfc_check_min_max_integer (gfc_actual_arglist
*arg
)
1761 return check_rest (BT_INTEGER
, gfc_default_integer_kind
, arg
);
1766 gfc_check_min_max_real (gfc_actual_arglist
*arg
)
1768 return check_rest (BT_REAL
, gfc_default_real_kind
, arg
);
1773 gfc_check_min_max_double (gfc_actual_arglist
*arg
)
1775 return check_rest (BT_REAL
, gfc_default_double_kind
, arg
);
1779 /* End of min/max family. */
1782 gfc_check_malloc (gfc_expr
*size
)
1784 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
1787 if (scalar_check (size
, 0) == FAILURE
)
1795 gfc_check_matmul (gfc_expr
*matrix_a
, gfc_expr
*matrix_b
)
1797 if ((matrix_a
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_b
->ts
))
1799 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1800 "or LOGICAL", gfc_current_intrinsic_arg
[0],
1801 gfc_current_intrinsic
, &matrix_a
->where
);
1805 if ((matrix_b
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_a
->ts
))
1807 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1808 "or LOGICAL", gfc_current_intrinsic_arg
[1],
1809 gfc_current_intrinsic
, &matrix_b
->where
);
1813 switch (matrix_a
->rank
)
1816 if (rank_check (matrix_b
, 1, 2) == FAILURE
)
1818 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
1819 if (!identical_dimen_shape (matrix_a
, 0, matrix_b
, 0))
1821 gfc_error ("Different shape on dimension 1 for arguments '%s' "
1822 "and '%s' at %L for intrinsic matmul",
1823 gfc_current_intrinsic_arg
[0],
1824 gfc_current_intrinsic_arg
[1], &matrix_a
->where
);
1830 if (matrix_b
->rank
!= 2)
1832 if (rank_check (matrix_b
, 1, 1) == FAILURE
)
1835 /* matrix_b has rank 1 or 2 here. Common check for the cases
1836 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
1837 - matrix_a has shape (n,m) and matrix_b has shape (m). */
1838 if (!identical_dimen_shape (matrix_a
, 1, matrix_b
, 0))
1840 gfc_error ("Different shape on dimension 2 for argument '%s' and "
1841 "dimension 1 for argument '%s' at %L for intrinsic "
1842 "matmul", gfc_current_intrinsic_arg
[0],
1843 gfc_current_intrinsic_arg
[1], &matrix_a
->where
);
1849 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
1850 "1 or 2", gfc_current_intrinsic_arg
[0],
1851 gfc_current_intrinsic
, &matrix_a
->where
);
1859 /* Whoever came up with this interface was probably on something.
1860 The possibilities for the occupation of the second and third
1867 NULL MASK minloc(array, mask=m)
1870 I.e. in the case of minloc(array,mask), mask will be in the second
1871 position of the argument list and we'll have to fix that up. */
1874 gfc_check_minloc_maxloc (gfc_actual_arglist
*ap
)
1876 gfc_expr
*a
, *m
, *d
;
1879 if (int_or_real_check (a
, 0) == FAILURE
|| array_check (a
, 0) == FAILURE
)
1883 m
= ap
->next
->next
->expr
;
1885 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
1886 && ap
->next
->name
== NULL
)
1890 ap
->next
->expr
= NULL
;
1891 ap
->next
->next
->expr
= m
;
1894 if (d
&& dim_check (d
, 1, false) == FAILURE
)
1897 if (d
&& dim_rank_check (d
, a
, 0) == FAILURE
)
1900 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
1906 snprintf (buffer
, 80, "arguments '%s' and '%s' for intrinsic %s",
1907 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic_arg
[2],
1908 gfc_current_intrinsic
);
1909 if (gfc_check_conformance (buffer
, a
, m
) == FAILURE
)
1917 /* Similar to minloc/maxloc, the argument list might need to be
1918 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1919 difference is that MINLOC/MAXLOC take an additional KIND argument.
1920 The possibilities are:
1926 NULL MASK minval(array, mask=m)
1929 I.e. in the case of minval(array,mask), mask will be in the second
1930 position of the argument list and we'll have to fix that up. */
1933 check_reduction (gfc_actual_arglist
*ap
)
1935 gfc_expr
*a
, *m
, *d
;
1939 m
= ap
->next
->next
->expr
;
1941 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
1942 && ap
->next
->name
== NULL
)
1946 ap
->next
->expr
= NULL
;
1947 ap
->next
->next
->expr
= m
;
1950 if (d
&& dim_check (d
, 1, false) == FAILURE
)
1953 if (d
&& dim_rank_check (d
, a
, 0) == FAILURE
)
1956 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
1962 snprintf (buffer
, 80, "arguments '%s' and '%s' for intrinsic %s",
1963 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic_arg
[2],
1964 gfc_current_intrinsic
);
1965 if (gfc_check_conformance (buffer
, a
, m
) == FAILURE
)
1974 gfc_check_minval_maxval (gfc_actual_arglist
*ap
)
1976 if (int_or_real_check (ap
->expr
, 0) == FAILURE
1977 || array_check (ap
->expr
, 0) == FAILURE
)
1980 return check_reduction (ap
);
1985 gfc_check_product_sum (gfc_actual_arglist
*ap
)
1987 if (numeric_check (ap
->expr
, 0) == FAILURE
1988 || array_check (ap
->expr
, 0) == FAILURE
)
1991 return check_reduction (ap
);
1996 gfc_check_merge (gfc_expr
*tsource
, gfc_expr
*fsource
, gfc_expr
*mask
)
1998 if (same_type_check (tsource
, 0, fsource
, 1) == FAILURE
)
2001 if (type_check (mask
, 2, BT_LOGICAL
) == FAILURE
)
2004 if (tsource
->ts
.type
== BT_CHARACTER
)
2005 return check_same_strlen (tsource
, fsource
, "MERGE");
2012 gfc_check_move_alloc (gfc_expr
*from
, gfc_expr
*to
)
2014 symbol_attribute attr
;
2016 if (variable_check (from
, 0) == FAILURE
)
2019 if (array_check (from
, 0) == FAILURE
)
2022 attr
= gfc_variable_attr (from
, NULL
);
2023 if (!attr
.allocatable
)
2025 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
2026 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic
,
2031 if (variable_check (to
, 0) == FAILURE
)
2034 if (array_check (to
, 0) == FAILURE
)
2037 attr
= gfc_variable_attr (to
, NULL
);
2038 if (!attr
.allocatable
)
2040 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
2041 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic
,
2046 if (same_type_check (from
, 0, to
, 1) == FAILURE
)
2049 if (to
->rank
!= from
->rank
)
2051 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
2052 "have the same rank %d/%d", gfc_current_intrinsic_arg
[0],
2053 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
,
2054 &to
->where
, from
->rank
, to
->rank
);
2058 if (to
->ts
.kind
!= from
->ts
.kind
)
2060 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
2061 "be of the same kind %d/%d", gfc_current_intrinsic_arg
[0],
2062 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
,
2063 &to
->where
, from
->ts
.kind
, to
->ts
.kind
);
2072 gfc_check_nearest (gfc_expr
*x
, gfc_expr
*s
)
2074 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2077 if (type_check (s
, 1, BT_REAL
) == FAILURE
)
2085 gfc_check_new_line (gfc_expr
*a
)
2087 if (type_check (a
, 0, BT_CHARACTER
) == FAILURE
)
2095 gfc_check_null (gfc_expr
*mold
)
2097 symbol_attribute attr
;
2102 if (variable_check (mold
, 0) == FAILURE
)
2105 attr
= gfc_variable_attr (mold
, NULL
);
2107 if (!attr
.pointer
&& !attr
.proc_pointer
)
2109 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
2110 gfc_current_intrinsic_arg
[0],
2111 gfc_current_intrinsic
, &mold
->where
);
2120 gfc_check_pack (gfc_expr
*array
, gfc_expr
*mask
, gfc_expr
*vector
)
2124 if (array_check (array
, 0) == FAILURE
)
2127 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
2130 snprintf (buffer
, 80, "arguments '%s' and '%s' for intrinsic '%s'",
2131 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic_arg
[1],
2132 gfc_current_intrinsic
);
2133 if (gfc_check_conformance (buffer
, array
, mask
) == FAILURE
)
2138 if (same_type_check (array
, 0, vector
, 2) == FAILURE
)
2141 if (rank_check (vector
, 2, 1) == FAILURE
)
2144 /* TODO: More constraints here. */
2152 gfc_check_precision (gfc_expr
*x
)
2154 if (x
->ts
.type
!= BT_REAL
&& x
->ts
.type
!= BT_COMPLEX
)
2156 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of type "
2157 "REAL or COMPLEX", gfc_current_intrinsic_arg
[0],
2158 gfc_current_intrinsic
, &x
->where
);
2167 gfc_check_present (gfc_expr
*a
)
2171 if (variable_check (a
, 0) == FAILURE
)
2174 sym
= a
->symtree
->n
.sym
;
2175 if (!sym
->attr
.dummy
)
2177 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
2178 "dummy variable", gfc_current_intrinsic_arg
[0],
2179 gfc_current_intrinsic
, &a
->where
);
2183 if (!sym
->attr
.optional
)
2185 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
2186 "an OPTIONAL dummy variable", gfc_current_intrinsic_arg
[0],
2187 gfc_current_intrinsic
, &a
->where
);
2191 /* 13.14.82 PRESENT(A)
2193 Argument. A shall be the name of an optional dummy argument that is
2194 accessible in the subprogram in which the PRESENT function reference
2198 && !(a
->ref
->next
== NULL
&& a
->ref
->type
== REF_ARRAY
2199 && a
->ref
->u
.ar
.type
== AR_FULL
))
2201 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
2202 "subobject of '%s'", gfc_current_intrinsic_arg
[0],
2203 gfc_current_intrinsic
, &a
->where
, sym
->name
);
2212 gfc_check_radix (gfc_expr
*x
)
2214 if (int_or_real_check (x
, 0) == FAILURE
)
2222 gfc_check_range (gfc_expr
*x
)
2224 if (numeric_check (x
, 0) == FAILURE
)
2231 /* real, float, sngl. */
2233 gfc_check_real (gfc_expr
*a
, gfc_expr
*kind
)
2235 if (numeric_check (a
, 0) == FAILURE
)
2238 if (kind_check (kind
, 1, BT_REAL
) == FAILURE
)
2246 gfc_check_rename (gfc_expr
*path1
, gfc_expr
*path2
)
2248 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2250 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2253 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2255 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2263 gfc_check_rename_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2265 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2267 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2270 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2272 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2278 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2281 if (scalar_check (status
, 2) == FAILURE
)
2289 gfc_check_repeat (gfc_expr
*x
, gfc_expr
*y
)
2291 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
2294 if (scalar_check (x
, 0) == FAILURE
)
2297 if (type_check (y
, 0, BT_INTEGER
) == FAILURE
)
2300 if (scalar_check (y
, 1) == FAILURE
)
2308 gfc_check_reshape (gfc_expr
*source
, gfc_expr
*shape
,
2309 gfc_expr
*pad
, gfc_expr
*order
)
2315 if (array_check (source
, 0) == FAILURE
)
2318 if (rank_check (shape
, 1, 1) == FAILURE
)
2321 if (type_check (shape
, 1, BT_INTEGER
) == FAILURE
)
2324 if (gfc_array_size (shape
, &size
) != SUCCESS
)
2326 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
2327 "array of constant size", &shape
->where
);
2331 m
= mpz_cmp_ui (size
, GFC_MAX_DIMENSIONS
);
2336 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
2337 "than %d elements", &shape
->where
, GFC_MAX_DIMENSIONS
);
2343 if (same_type_check (source
, 0, pad
, 2) == FAILURE
)
2345 if (array_check (pad
, 2) == FAILURE
)
2349 if (order
!= NULL
&& array_check (order
, 3) == FAILURE
)
2352 if (pad
== NULL
&& shape
->expr_type
== EXPR_ARRAY
2353 && gfc_is_constant_expr (shape
)
2354 && !(source
->expr_type
== EXPR_VARIABLE
&& source
->symtree
->n
.sym
->as
2355 && source
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
))
2357 /* Check the match in size between source and destination. */
2358 if (gfc_array_size (source
, &nelems
) == SUCCESS
)
2363 c
= shape
->value
.constructor
;
2364 mpz_init_set_ui (size
, 1);
2365 for (; c
; c
= c
->next
)
2366 mpz_mul (size
, size
, c
->expr
->value
.integer
);
2368 test
= mpz_cmp (nelems
, size
) < 0 && mpz_cmp_ui (size
, 0) > 0;
2374 gfc_error ("Without padding, there are not enough elements "
2375 "in the intrinsic RESHAPE source at %L to match "
2376 "the shape", &source
->where
);
2387 gfc_check_scale (gfc_expr
*x
, gfc_expr
*i
)
2389 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2392 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
2400 gfc_check_scan (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
2402 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
2405 if (type_check (y
, 1, BT_CHARACTER
) == FAILURE
)
2408 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
2411 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
2413 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2414 "with KIND argument at %L",
2415 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2418 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
2426 gfc_check_secnds (gfc_expr
*r
)
2428 if (type_check (r
, 0, BT_REAL
) == FAILURE
)
2431 if (kind_value_check (r
, 0, 4) == FAILURE
)
2434 if (scalar_check (r
, 0) == FAILURE
)
2442 gfc_check_selected_char_kind (gfc_expr
*name
)
2444 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2447 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
2450 if (scalar_check (name
, 0) == FAILURE
)
2458 gfc_check_selected_int_kind (gfc_expr
*r
)
2460 if (type_check (r
, 0, BT_INTEGER
) == FAILURE
)
2463 if (scalar_check (r
, 0) == FAILURE
)
2471 gfc_check_selected_real_kind (gfc_expr
*p
, gfc_expr
*r
)
2473 if (p
== NULL
&& r
== NULL
)
2475 gfc_error ("Missing arguments to %s intrinsic at %L",
2476 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
2481 if (p
!= NULL
&& type_check (p
, 0, BT_INTEGER
) == FAILURE
)
2484 if (r
!= NULL
&& type_check (r
, 1, BT_INTEGER
) == FAILURE
)
2492 gfc_check_set_exponent (gfc_expr
*x
, gfc_expr
*i
)
2494 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2497 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
2505 gfc_check_shape (gfc_expr
*source
)
2509 if (source
->rank
== 0 || source
->expr_type
!= EXPR_VARIABLE
)
2512 ar
= gfc_find_array_ref (source
);
2514 if (ar
->as
&& ar
->as
->type
== AS_ASSUMED_SIZE
&& ar
->type
== AR_FULL
)
2516 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
2517 "an assumed size array", &source
->where
);
2526 gfc_check_sign (gfc_expr
*a
, gfc_expr
*b
)
2528 if (int_or_real_check (a
, 0) == FAILURE
)
2531 if (same_type_check (a
, 0, b
, 1) == FAILURE
)
2539 gfc_check_size (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
2541 if (array_check (array
, 0) == FAILURE
)
2546 if (dim_check (dim
, 1, true) == FAILURE
)
2549 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
2553 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
2555 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2556 "with KIND argument at %L",
2557 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2566 gfc_check_sizeof (gfc_expr
*arg ATTRIBUTE_UNUSED
)
2573 gfc_check_sleep_sub (gfc_expr
*seconds
)
2575 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
2578 if (scalar_check (seconds
, 0) == FAILURE
)
2586 gfc_check_spread (gfc_expr
*source
, gfc_expr
*dim
, gfc_expr
*ncopies
)
2588 if (source
->rank
>= GFC_MAX_DIMENSIONS
)
2590 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
2591 "than rank %d", gfc_current_intrinsic_arg
[0],
2592 gfc_current_intrinsic
, &source
->where
, GFC_MAX_DIMENSIONS
);
2600 if (dim_check (dim
, 1, false) == FAILURE
)
2603 if (type_check (ncopies
, 2, BT_INTEGER
) == FAILURE
)
2606 if (scalar_check (ncopies
, 2) == FAILURE
)
2613 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
2617 gfc_check_fgetputc_sub (gfc_expr
*unit
, gfc_expr
*c
, gfc_expr
*status
)
2619 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2622 if (scalar_check (unit
, 0) == FAILURE
)
2625 if (type_check (c
, 1, BT_CHARACTER
) == FAILURE
)
2627 if (kind_value_check (c
, 1, gfc_default_character_kind
) == FAILURE
)
2633 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
2634 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
2635 || scalar_check (status
, 2) == FAILURE
)
2643 gfc_check_fgetputc (gfc_expr
*unit
, gfc_expr
*c
)
2645 return gfc_check_fgetputc_sub (unit
, c
, NULL
);
2650 gfc_check_fgetput_sub (gfc_expr
*c
, gfc_expr
*status
)
2652 if (type_check (c
, 0, BT_CHARACTER
) == FAILURE
)
2654 if (kind_value_check (c
, 0, gfc_default_character_kind
) == FAILURE
)
2660 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
2661 || kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
2662 || scalar_check (status
, 1) == FAILURE
)
2670 gfc_check_fgetput (gfc_expr
*c
)
2672 return gfc_check_fgetput_sub (c
, NULL
);
2677 gfc_check_fseek_sub (gfc_expr
*unit
, gfc_expr
*offset
, gfc_expr
*whence
, gfc_expr
*status
)
2679 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2682 if (scalar_check (unit
, 0) == FAILURE
)
2685 if (type_check (offset
, 1, BT_INTEGER
) == FAILURE
)
2688 if (scalar_check (offset
, 1) == FAILURE
)
2691 if (type_check (whence
, 2, BT_INTEGER
) == FAILURE
)
2694 if (scalar_check (whence
, 2) == FAILURE
)
2700 if (type_check (status
, 3, BT_INTEGER
) == FAILURE
)
2703 if (kind_value_check (status
, 3, 4) == FAILURE
)
2706 if (scalar_check (status
, 3) == FAILURE
)
2715 gfc_check_fstat (gfc_expr
*unit
, gfc_expr
*array
)
2717 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2720 if (scalar_check (unit
, 0) == FAILURE
)
2723 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
2724 || kind_value_check (unit
, 0, gfc_default_integer_kind
) == FAILURE
)
2727 if (array_check (array
, 1) == FAILURE
)
2735 gfc_check_fstat_sub (gfc_expr
*unit
, gfc_expr
*array
, gfc_expr
*status
)
2737 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2740 if (scalar_check (unit
, 0) == FAILURE
)
2743 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
2744 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
2747 if (array_check (array
, 1) == FAILURE
)
2753 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
2754 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
2757 if (scalar_check (status
, 2) == FAILURE
)
2765 gfc_check_ftell (gfc_expr
*unit
)
2767 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2770 if (scalar_check (unit
, 0) == FAILURE
)
2778 gfc_check_ftell_sub (gfc_expr
*unit
, gfc_expr
*offset
)
2780 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2783 if (scalar_check (unit
, 0) == FAILURE
)
2786 if (type_check (offset
, 1, BT_INTEGER
) == FAILURE
)
2789 if (scalar_check (offset
, 1) == FAILURE
)
2797 gfc_check_stat (gfc_expr
*name
, gfc_expr
*array
)
2799 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2801 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
2804 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
2805 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
2808 if (array_check (array
, 1) == FAILURE
)
2816 gfc_check_stat_sub (gfc_expr
*name
, gfc_expr
*array
, gfc_expr
*status
)
2818 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
2820 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
2823 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
2824 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
2827 if (array_check (array
, 1) == FAILURE
)
2833 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
2834 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
2837 if (scalar_check (status
, 2) == FAILURE
)
2845 gfc_check_transfer (gfc_expr
*source ATTRIBUTE_UNUSED
,
2846 gfc_expr
*mold ATTRIBUTE_UNUSED
, gfc_expr
*size
)
2848 if (mold
->ts
.type
== BT_HOLLERITH
)
2850 gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
2851 &mold
->where
, gfc_basic_typename (BT_HOLLERITH
));
2857 if (type_check (size
, 2, BT_INTEGER
) == FAILURE
)
2860 if (scalar_check (size
, 2) == FAILURE
)
2863 if (nonoptional_check (size
, 2) == FAILURE
)
2872 gfc_check_transpose (gfc_expr
*matrix
)
2874 if (rank_check (matrix
, 0, 2) == FAILURE
)
2882 gfc_check_ubound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
2884 if (array_check (array
, 0) == FAILURE
)
2889 if (dim_check (dim
, 1, false) == FAILURE
)
2892 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
2896 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
2898 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2899 "with KIND argument at %L",
2900 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2908 gfc_check_unpack (gfc_expr
*vector
, gfc_expr
*mask
, gfc_expr
*field
)
2910 if (rank_check (vector
, 0, 1) == FAILURE
)
2913 if (array_check (mask
, 1) == FAILURE
)
2916 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
2919 if (same_type_check (vector
, 0, field
, 2) == FAILURE
)
2922 if (mask
->rank
!= field
->rank
&& field
->rank
!= 0)
2924 gfc_error ("FIELD argument at %L of UNPACK must have the same rank as "
2925 "MASK or be a scalar", &field
->where
);
2929 if (mask
->rank
== field
->rank
)
2932 for (i
= 0; i
< field
->rank
; i
++)
2933 if (! identical_dimen_shape (mask
, i
, field
, i
))
2935 gfc_error ("Different shape in dimension %d for MASK and FIELD "
2936 "arguments of UNPACK at %L", mask
->rank
, &field
->where
);
2946 gfc_check_verify (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
2948 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
2951 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
2954 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
2957 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
2959 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2960 "with KIND argument at %L",
2961 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2969 gfc_check_trim (gfc_expr
*x
)
2971 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
2974 if (scalar_check (x
, 0) == FAILURE
)
2982 gfc_check_ttynam (gfc_expr
*unit
)
2984 if (scalar_check (unit
, 0) == FAILURE
)
2987 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
2994 /* Common check function for the half a dozen intrinsics that have a
2995 single real argument. */
2998 gfc_check_x (gfc_expr
*x
)
3000 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
3007 /************* Check functions for intrinsic subroutines *************/
3010 gfc_check_cpu_time (gfc_expr
*time
)
3012 if (scalar_check (time
, 0) == FAILURE
)
3015 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
3018 if (variable_check (time
, 0) == FAILURE
)
3026 gfc_check_date_and_time (gfc_expr
*date
, gfc_expr
*time
,
3027 gfc_expr
*zone
, gfc_expr
*values
)
3031 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
3033 if (kind_value_check (date
, 0, gfc_default_character_kind
) == FAILURE
)
3035 if (scalar_check (date
, 0) == FAILURE
)
3037 if (variable_check (date
, 0) == FAILURE
)
3043 if (type_check (time
, 1, BT_CHARACTER
) == FAILURE
)
3045 if (kind_value_check (time
, 1, gfc_default_character_kind
) == FAILURE
)
3047 if (scalar_check (time
, 1) == FAILURE
)
3049 if (variable_check (time
, 1) == FAILURE
)
3055 if (type_check (zone
, 2, BT_CHARACTER
) == FAILURE
)
3057 if (kind_value_check (zone
, 2, gfc_default_character_kind
) == FAILURE
)
3059 if (scalar_check (zone
, 2) == FAILURE
)
3061 if (variable_check (zone
, 2) == FAILURE
)
3067 if (type_check (values
, 3, BT_INTEGER
) == FAILURE
)
3069 if (array_check (values
, 3) == FAILURE
)
3071 if (rank_check (values
, 3, 1) == FAILURE
)
3073 if (variable_check (values
, 3) == FAILURE
)
3082 gfc_check_mvbits (gfc_expr
*from
, gfc_expr
*frompos
, gfc_expr
*len
,
3083 gfc_expr
*to
, gfc_expr
*topos
)
3085 if (type_check (from
, 0, BT_INTEGER
) == FAILURE
)
3088 if (type_check (frompos
, 1, BT_INTEGER
) == FAILURE
)
3091 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
3094 if (same_type_check (from
, 0, to
, 3) == FAILURE
)
3097 if (variable_check (to
, 3) == FAILURE
)
3100 if (type_check (topos
, 4, BT_INTEGER
) == FAILURE
)
3108 gfc_check_random_number (gfc_expr
*harvest
)
3110 if (type_check (harvest
, 0, BT_REAL
) == FAILURE
)
3113 if (variable_check (harvest
, 0) == FAILURE
)
3121 gfc_check_random_seed (gfc_expr
*size
, gfc_expr
*put
, gfc_expr
*get
)
3123 unsigned int nargs
= 0;
3124 locus
*where
= NULL
;
3128 if (size
->expr_type
!= EXPR_VARIABLE
3129 || !size
->symtree
->n
.sym
->attr
.optional
)
3132 if (scalar_check (size
, 0) == FAILURE
)
3135 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
3138 if (variable_check (size
, 0) == FAILURE
)
3141 if (kind_value_check (size
, 0, gfc_default_integer_kind
) == FAILURE
)
3147 if (put
->expr_type
!= EXPR_VARIABLE
3148 || !put
->symtree
->n
.sym
->attr
.optional
)
3151 where
= &put
->where
;
3154 if (array_check (put
, 1) == FAILURE
)
3157 if (rank_check (put
, 1, 1) == FAILURE
)
3160 if (type_check (put
, 1, BT_INTEGER
) == FAILURE
)
3163 if (kind_value_check (put
, 1, gfc_default_integer_kind
) == FAILURE
)
3169 if (get
->expr_type
!= EXPR_VARIABLE
3170 || !get
->symtree
->n
.sym
->attr
.optional
)
3173 where
= &get
->where
;
3176 if (array_check (get
, 2) == FAILURE
)
3179 if (rank_check (get
, 2, 1) == FAILURE
)
3182 if (type_check (get
, 2, BT_INTEGER
) == FAILURE
)
3185 if (variable_check (get
, 2) == FAILURE
)
3188 if (kind_value_check (get
, 2, gfc_default_integer_kind
) == FAILURE
)
3192 /* RANDOM_SEED may not have more than one non-optional argument. */
3194 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
, where
);
3201 gfc_check_second_sub (gfc_expr
*time
)
3203 if (scalar_check (time
, 0) == FAILURE
)
3206 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
3209 if (kind_value_check(time
, 0, 4) == FAILURE
)
3216 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
3217 count, count_rate, and count_max are all optional arguments */
3220 gfc_check_system_clock (gfc_expr
*count
, gfc_expr
*count_rate
,
3221 gfc_expr
*count_max
)
3225 if (scalar_check (count
, 0) == FAILURE
)
3228 if (type_check (count
, 0, BT_INTEGER
) == FAILURE
)
3231 if (variable_check (count
, 0) == FAILURE
)
3235 if (count_rate
!= NULL
)
3237 if (scalar_check (count_rate
, 1) == FAILURE
)
3240 if (type_check (count_rate
, 1, BT_INTEGER
) == FAILURE
)
3243 if (variable_check (count_rate
, 1) == FAILURE
)
3247 && same_type_check (count
, 0, count_rate
, 1) == FAILURE
)
3252 if (count_max
!= NULL
)
3254 if (scalar_check (count_max
, 2) == FAILURE
)
3257 if (type_check (count_max
, 2, BT_INTEGER
) == FAILURE
)
3260 if (variable_check (count_max
, 2) == FAILURE
)
3264 && same_type_check (count
, 0, count_max
, 2) == FAILURE
)
3267 if (count_rate
!= NULL
3268 && same_type_check (count_rate
, 1, count_max
, 2) == FAILURE
)
3277 gfc_check_irand (gfc_expr
*x
)
3282 if (scalar_check (x
, 0) == FAILURE
)
3285 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
3288 if (kind_value_check(x
, 0, 4) == FAILURE
)
3296 gfc_check_alarm_sub (gfc_expr
*seconds
, gfc_expr
*handler
, gfc_expr
*status
)
3298 if (scalar_check (seconds
, 0) == FAILURE
)
3301 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
3304 if (handler
->ts
.type
!= BT_INTEGER
&& handler
->ts
.type
!= BT_PROCEDURE
)
3306 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3307 "or PROCEDURE", gfc_current_intrinsic_arg
[1],
3308 gfc_current_intrinsic
, &handler
->where
);
3312 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
3318 if (scalar_check (status
, 2) == FAILURE
)
3321 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
3324 if (kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
3332 gfc_check_rand (gfc_expr
*x
)
3337 if (scalar_check (x
, 0) == FAILURE
)
3340 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
3343 if (kind_value_check(x
, 0, 4) == FAILURE
)
3351 gfc_check_srand (gfc_expr
*x
)
3353 if (scalar_check (x
, 0) == FAILURE
)
3356 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
3359 if (kind_value_check(x
, 0, 4) == FAILURE
)
3367 gfc_check_ctime_sub (gfc_expr
*time
, gfc_expr
*result
)
3369 if (scalar_check (time
, 0) == FAILURE
)
3371 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
3374 if (type_check (result
, 1, BT_CHARACTER
) == FAILURE
)
3376 if (kind_value_check (result
, 1, gfc_default_character_kind
) == FAILURE
)
3384 gfc_check_dtime_etime (gfc_expr
*x
)
3386 if (array_check (x
, 0) == FAILURE
)
3389 if (rank_check (x
, 0, 1) == FAILURE
)
3392 if (variable_check (x
, 0) == FAILURE
)
3395 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
3398 if (kind_value_check(x
, 0, 4) == FAILURE
)
3406 gfc_check_dtime_etime_sub (gfc_expr
*values
, gfc_expr
*time
)
3408 if (array_check (values
, 0) == FAILURE
)
3411 if (rank_check (values
, 0, 1) == FAILURE
)
3414 if (variable_check (values
, 0) == FAILURE
)
3417 if (type_check (values
, 0, BT_REAL
) == FAILURE
)
3420 if (kind_value_check(values
, 0, 4) == FAILURE
)
3423 if (scalar_check (time
, 1) == FAILURE
)
3426 if (type_check (time
, 1, BT_REAL
) == FAILURE
)
3429 if (kind_value_check(time
, 1, 4) == FAILURE
)
3437 gfc_check_fdate_sub (gfc_expr
*date
)
3439 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
3441 if (kind_value_check (date
, 0, gfc_default_character_kind
) == FAILURE
)
3449 gfc_check_gerror (gfc_expr
*msg
)
3451 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
3453 if (kind_value_check (msg
, 0, gfc_default_character_kind
) == FAILURE
)
3461 gfc_check_getcwd_sub (gfc_expr
*cwd
, gfc_expr
*status
)
3463 if (type_check (cwd
, 0, BT_CHARACTER
) == FAILURE
)
3465 if (kind_value_check (cwd
, 0, gfc_default_character_kind
) == FAILURE
)
3471 if (scalar_check (status
, 1) == FAILURE
)
3474 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
3482 gfc_check_getarg (gfc_expr
*pos
, gfc_expr
*value
)
3484 if (type_check (pos
, 0, BT_INTEGER
) == FAILURE
)
3487 if (pos
->ts
.kind
> gfc_default_integer_kind
)
3489 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
3490 "not wider than the default kind (%d)",
3491 gfc_current_intrinsic_arg
[0], gfc_current_intrinsic
,
3492 &pos
->where
, gfc_default_integer_kind
);
3496 if (type_check (value
, 1, BT_CHARACTER
) == FAILURE
)
3498 if (kind_value_check (value
, 1, gfc_default_character_kind
) == FAILURE
)
3506 gfc_check_getlog (gfc_expr
*msg
)
3508 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
3510 if (kind_value_check (msg
, 0, gfc_default_character_kind
) == FAILURE
)
3518 gfc_check_exit (gfc_expr
*status
)
3523 if (type_check (status
, 0, BT_INTEGER
) == FAILURE
)
3526 if (scalar_check (status
, 0) == FAILURE
)
3534 gfc_check_flush (gfc_expr
*unit
)
3539 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3542 if (scalar_check (unit
, 0) == FAILURE
)
3550 gfc_check_free (gfc_expr
*i
)
3552 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
3555 if (scalar_check (i
, 0) == FAILURE
)
3563 gfc_check_hostnm (gfc_expr
*name
)
3565 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3567 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3575 gfc_check_hostnm_sub (gfc_expr
*name
, gfc_expr
*status
)
3577 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3579 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3585 if (scalar_check (status
, 1) == FAILURE
)
3588 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
3596 gfc_check_itime_idate (gfc_expr
*values
)
3598 if (array_check (values
, 0) == FAILURE
)
3601 if (rank_check (values
, 0, 1) == FAILURE
)
3604 if (variable_check (values
, 0) == FAILURE
)
3607 if (type_check (values
, 0, BT_INTEGER
) == FAILURE
)
3610 if (kind_value_check(values
, 0, gfc_default_integer_kind
) == FAILURE
)
3618 gfc_check_ltime_gmtime (gfc_expr
*time
, gfc_expr
*values
)
3620 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
3623 if (kind_value_check(time
, 0, gfc_default_integer_kind
) == FAILURE
)
3626 if (scalar_check (time
, 0) == FAILURE
)
3629 if (array_check (values
, 1) == FAILURE
)
3632 if (rank_check (values
, 1, 1) == FAILURE
)
3635 if (variable_check (values
, 1) == FAILURE
)
3638 if (type_check (values
, 1, BT_INTEGER
) == FAILURE
)
3641 if (kind_value_check(values
, 1, gfc_default_integer_kind
) == FAILURE
)
3649 gfc_check_ttynam_sub (gfc_expr
*unit
, gfc_expr
*name
)
3651 if (scalar_check (unit
, 0) == FAILURE
)
3654 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3657 if (type_check (name
, 1, BT_CHARACTER
) == FAILURE
)
3659 if (kind_value_check (name
, 1, gfc_default_character_kind
) == FAILURE
)
3667 gfc_check_isatty (gfc_expr
*unit
)
3672 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3675 if (scalar_check (unit
, 0) == FAILURE
)
3683 gfc_check_isnan (gfc_expr
*x
)
3685 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
3693 gfc_check_perror (gfc_expr
*string
)
3695 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
)
3697 if (kind_value_check (string
, 0, gfc_default_character_kind
) == FAILURE
)
3705 gfc_check_umask (gfc_expr
*mask
)
3707 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
3710 if (scalar_check (mask
, 0) == FAILURE
)
3718 gfc_check_umask_sub (gfc_expr
*mask
, gfc_expr
*old
)
3720 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
3723 if (scalar_check (mask
, 0) == FAILURE
)
3729 if (scalar_check (old
, 1) == FAILURE
)
3732 if (type_check (old
, 1, BT_INTEGER
) == FAILURE
)
3740 gfc_check_unlink (gfc_expr
*name
)
3742 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3744 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3752 gfc_check_unlink_sub (gfc_expr
*name
, gfc_expr
*status
)
3754 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3756 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3762 if (scalar_check (status
, 1) == FAILURE
)
3765 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
3773 gfc_check_signal (gfc_expr
*number
, gfc_expr
*handler
)
3775 if (scalar_check (number
, 0) == FAILURE
)
3778 if (type_check (number
, 0, BT_INTEGER
) == FAILURE
)
3781 if (handler
->ts
.type
!= BT_INTEGER
&& handler
->ts
.type
!= BT_PROCEDURE
)
3783 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3784 "or PROCEDURE", gfc_current_intrinsic_arg
[1],
3785 gfc_current_intrinsic
, &handler
->where
);
3789 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
3797 gfc_check_signal_sub (gfc_expr
*number
, gfc_expr
*handler
, gfc_expr
*status
)
3799 if (scalar_check (number
, 0) == FAILURE
)
3802 if (type_check (number
, 0, BT_INTEGER
) == FAILURE
)
3805 if (handler
->ts
.type
!= BT_INTEGER
&& handler
->ts
.type
!= BT_PROCEDURE
)
3807 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3808 "or PROCEDURE", gfc_current_intrinsic_arg
[1],
3809 gfc_current_intrinsic
, &handler
->where
);
3813 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
3819 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
3822 if (scalar_check (status
, 2) == FAILURE
)
3830 gfc_check_system_sub (gfc_expr
*cmd
, gfc_expr
*status
)
3832 if (type_check (cmd
, 0, BT_CHARACTER
) == FAILURE
)
3834 if (kind_value_check (cmd
, 0, gfc_default_character_kind
) == FAILURE
)
3837 if (scalar_check (status
, 1) == FAILURE
)
3840 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
3843 if (kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
)
3850 /* This is used for the GNU intrinsics AND, OR and XOR. */
3852 gfc_check_and (gfc_expr
*i
, gfc_expr
*j
)
3854 if (i
->ts
.type
!= BT_INTEGER
&& i
->ts
.type
!= BT_LOGICAL
)
3856 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3857 "or LOGICAL", gfc_current_intrinsic_arg
[0],
3858 gfc_current_intrinsic
, &i
->where
);
3862 if (j
->ts
.type
!= BT_INTEGER
&& j
->ts
.type
!= BT_LOGICAL
)
3864 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3865 "or LOGICAL", gfc_current_intrinsic_arg
[1],
3866 gfc_current_intrinsic
, &j
->where
);
3870 if (i
->ts
.type
!= j
->ts
.type
)
3872 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
3873 "have the same type", gfc_current_intrinsic_arg
[0],
3874 gfc_current_intrinsic_arg
[1], gfc_current_intrinsic
,
3879 if (scalar_check (i
, 0) == FAILURE
)
3882 if (scalar_check (j
, 1) == FAILURE
)