2 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
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"
34 #include "constructor.h"
37 /* Make sure an expression is a scalar. */
40 scalar_check (gfc_expr
*e
, int n
)
45 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a scalar",
46 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
53 /* Check the type of an expression. */
56 type_check (gfc_expr
*e
, int n
, bt type
)
58 if (e
->ts
.type
== type
)
61 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
62 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
63 &e
->where
, gfc_basic_typename (type
));
69 /* Check that the expression is a numeric type. */
72 numeric_check (gfc_expr
*e
, int n
)
74 if (gfc_numeric_ts (&e
->ts
))
77 /* If the expression has not got a type, check if its namespace can
78 offer a default type. */
79 if ((e
->expr_type
== EXPR_VARIABLE
|| e
->expr_type
== EXPR_VARIABLE
)
80 && e
->symtree
->n
.sym
->ts
.type
== BT_UNKNOWN
81 && gfc_set_default_type (e
->symtree
->n
.sym
, 0,
82 e
->symtree
->n
.sym
->ns
) == SUCCESS
83 && gfc_numeric_ts (&e
->symtree
->n
.sym
->ts
))
85 e
->ts
= e
->symtree
->n
.sym
->ts
;
89 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a numeric type",
90 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
97 /* Check that an expression is integer or real. */
100 int_or_real_check (gfc_expr
*e
, int n
)
102 if (e
->ts
.type
!= BT_INTEGER
&& e
->ts
.type
!= BT_REAL
)
104 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
105 "or REAL", gfc_current_intrinsic_arg
[n
]->name
,
106 gfc_current_intrinsic
, &e
->where
);
114 /* Check that an expression is real or complex. */
117 real_or_complex_check (gfc_expr
*e
, int n
)
119 if (e
->ts
.type
!= BT_REAL
&& e
->ts
.type
!= BT_COMPLEX
)
121 gfc_error ("'%s' argument of '%s' intrinsic at %L must be REAL "
122 "or COMPLEX", gfc_current_intrinsic_arg
[n
]->name
,
123 gfc_current_intrinsic
, &e
->where
);
131 /* Check that an expression is INTEGER or PROCEDURE. */
134 int_or_proc_check (gfc_expr
*e
, int n
)
136 if (e
->ts
.type
!= BT_INTEGER
&& e
->ts
.type
!= BT_PROCEDURE
)
138 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
139 "or PROCEDURE", gfc_current_intrinsic_arg
[n
]->name
,
140 gfc_current_intrinsic
, &e
->where
);
148 /* Check that the expression is an optional constant integer
149 and that it specifies a valid kind for that type. */
152 kind_check (gfc_expr
*k
, int n
, bt type
)
159 if (type_check (k
, n
, BT_INTEGER
) == FAILURE
)
162 if (scalar_check (k
, n
) == FAILURE
)
165 if (k
->expr_type
!= EXPR_CONSTANT
)
167 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
168 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
173 if (gfc_extract_int (k
, &kind
) != NULL
174 || gfc_validate_kind (type
, kind
, true) < 0)
176 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type
),
185 /* Make sure the expression is a double precision real. */
188 double_check (gfc_expr
*d
, int n
)
190 if (type_check (d
, n
, BT_REAL
) == FAILURE
)
193 if (d
->ts
.kind
!= gfc_default_double_kind
)
195 gfc_error ("'%s' argument of '%s' intrinsic at %L must be double "
196 "precision", gfc_current_intrinsic_arg
[n
]->name
,
197 gfc_current_intrinsic
, &d
->where
);
205 /* Check whether an expression is a coarray (without array designator). */
208 is_coarray (gfc_expr
*e
)
210 bool coarray
= false;
213 if (e
->expr_type
!= EXPR_VARIABLE
)
216 coarray
= e
->symtree
->n
.sym
->attr
.codimension
;
218 for (ref
= e
->ref
; ref
; ref
= ref
->next
)
220 if (ref
->type
== REF_COMPONENT
)
221 coarray
= ref
->u
.c
.component
->attr
.codimension
;
222 else if (ref
->type
!= REF_ARRAY
|| ref
->u
.ar
.dimen
!= 0)
224 else if (ref
->type
== REF_ARRAY
&& ref
->u
.ar
.codimen
!= 0)
227 for (n
= 0; n
< ref
->u
.ar
.codimen
; n
++)
228 if (ref
->u
.ar
.dimen_type
[n
] != DIMEN_THIS_IMAGE
)
238 coarray_check (gfc_expr
*e
, int n
)
242 gfc_error ("Expected coarray variable as '%s' argument to the %s "
243 "intrinsic at %L", gfc_current_intrinsic_arg
[n
]->name
,
244 gfc_current_intrinsic
, &e
->where
);
252 /* Make sure the expression is a logical array. */
255 logical_array_check (gfc_expr
*array
, int n
)
257 if (array
->ts
.type
!= BT_LOGICAL
|| array
->rank
== 0)
259 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a logical "
260 "array", gfc_current_intrinsic_arg
[n
]->name
,
261 gfc_current_intrinsic
, &array
->where
);
269 /* Make sure an expression is an array. */
272 array_check (gfc_expr
*e
, int n
)
277 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array",
278 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
285 /* If expr is a constant, then check to ensure that it is greater than
289 nonnegative_check (const char *arg
, gfc_expr
*expr
)
293 if (expr
->expr_type
== EXPR_CONSTANT
)
295 gfc_extract_int (expr
, &i
);
298 gfc_error ("'%s' at %L must be nonnegative", arg
, &expr
->where
);
307 /* If expr2 is constant, then check that the value is less than
308 (less than or equal to, if 'or_equal' is true) bit_size(expr1). */
311 less_than_bitsize1 (const char *arg1
, gfc_expr
*expr1
, const char *arg2
,
312 gfc_expr
*expr2
, bool or_equal
)
316 if (expr2
->expr_type
== EXPR_CONSTANT
)
318 gfc_extract_int (expr2
, &i2
);
319 i3
= gfc_validate_kind (BT_INTEGER
, expr1
->ts
.kind
, false);
322 if (i2
> gfc_integer_kinds
[i3
].bit_size
)
324 gfc_error ("'%s' at %L must be less than "
325 "or equal to BIT_SIZE('%s')",
326 arg2
, &expr2
->where
, arg1
);
332 if (i2
>= gfc_integer_kinds
[i3
].bit_size
)
334 gfc_error ("'%s' at %L must be less than BIT_SIZE('%s')",
335 arg2
, &expr2
->where
, arg1
);
345 /* If expr is constant, then check that the value is less than or equal
346 to the bit_size of the kind k. */
349 less_than_bitsizekind (const char *arg
, gfc_expr
*expr
, int k
)
353 if (expr
->expr_type
!= EXPR_CONSTANT
)
356 i
= gfc_validate_kind (BT_INTEGER
, k
, false);
357 gfc_extract_int (expr
, &val
);
359 if (val
> gfc_integer_kinds
[i
].bit_size
)
361 gfc_error ("'%s' at %L must be less than or equal to the BIT_SIZE of "
362 "INTEGER(KIND=%d)", arg
, &expr
->where
, k
);
370 /* If expr2 and expr3 are constants, then check that the value is less than
371 or equal to bit_size(expr1). */
374 less_than_bitsize2 (const char *arg1
, gfc_expr
*expr1
, const char *arg2
,
375 gfc_expr
*expr2
, const char *arg3
, gfc_expr
*expr3
)
379 if (expr2
->expr_type
== EXPR_CONSTANT
&& expr3
->expr_type
== EXPR_CONSTANT
)
381 gfc_extract_int (expr2
, &i2
);
382 gfc_extract_int (expr3
, &i3
);
384 i3
= gfc_validate_kind (BT_INTEGER
, expr1
->ts
.kind
, false);
385 if (i2
> gfc_integer_kinds
[i3
].bit_size
)
387 gfc_error ("'%s + %s' at %L must be less than or equal "
389 arg2
, arg3
, &expr2
->where
, arg1
);
397 /* Make sure two expressions have the same type. */
400 same_type_check (gfc_expr
*e
, int n
, gfc_expr
*f
, int m
)
402 if (gfc_compare_types (&e
->ts
, &f
->ts
))
405 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same type "
406 "and kind as '%s'", gfc_current_intrinsic_arg
[m
]->name
,
407 gfc_current_intrinsic
, &f
->where
,
408 gfc_current_intrinsic_arg
[n
]->name
);
414 /* Make sure that an expression has a certain (nonzero) rank. */
417 rank_check (gfc_expr
*e
, int n
, int rank
)
422 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank %d",
423 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
430 /* Make sure a variable expression is not an optional dummy argument. */
433 nonoptional_check (gfc_expr
*e
, int n
)
435 if (e
->expr_type
== EXPR_VARIABLE
&& e
->symtree
->n
.sym
->attr
.optional
)
437 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
438 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
442 /* TODO: Recursive check on nonoptional variables? */
448 /* Check for ALLOCATABLE attribute. */
451 allocatable_check (gfc_expr
*e
, int n
)
453 symbol_attribute attr
;
455 attr
= gfc_variable_attr (e
, NULL
);
456 if (!attr
.allocatable
)
458 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
459 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
468 /* Check that an expression has a particular kind. */
471 kind_value_check (gfc_expr
*e
, int n
, int k
)
476 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of kind %d",
477 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
484 /* Make sure an expression is a variable. */
487 variable_check (gfc_expr
*e
, int n
, bool allow_proc
)
489 if (e
->expr_type
== EXPR_VARIABLE
490 && e
->symtree
->n
.sym
->attr
.intent
== INTENT_IN
491 && (gfc_current_intrinsic_arg
[n
]->intent
== INTENT_OUT
492 || gfc_current_intrinsic_arg
[n
]->intent
== INTENT_INOUT
))
494 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
495 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
500 if (e
->expr_type
== EXPR_VARIABLE
501 && e
->symtree
->n
.sym
->attr
.flavor
!= FL_PARAMETER
503 || !e
->symtree
->n
.sym
->attr
.function
504 || (e
->symtree
->n
.sym
== e
->symtree
->n
.sym
->result
505 && (e
->symtree
->n
.sym
== gfc_current_ns
->proc_name
506 || (gfc_current_ns
->parent
508 == gfc_current_ns
->parent
->proc_name
)))))
511 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a variable",
512 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
, &e
->where
);
518 /* Check the common DIM parameter for correctness. */
521 dim_check (gfc_expr
*dim
, int n
, bool optional
)
526 if (type_check (dim
, n
, BT_INTEGER
) == FAILURE
)
529 if (scalar_check (dim
, n
) == FAILURE
)
532 if (!optional
&& nonoptional_check (dim
, n
) == FAILURE
)
539 /* If a coarray DIM parameter is a constant, make sure that it is greater than
540 zero and less than or equal to the corank of the given array. */
543 dim_corank_check (gfc_expr
*dim
, gfc_expr
*array
)
548 gcc_assert (array
->expr_type
== EXPR_VARIABLE
);
550 if (dim
->expr_type
!= EXPR_CONSTANT
)
553 ar
= gfc_find_array_ref (array
);
554 corank
= ar
->as
->corank
;
556 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
557 || mpz_cmp_ui (dim
->value
.integer
, corank
) > 0)
559 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
560 "codimension index", gfc_current_intrinsic
, &dim
->where
);
569 /* If a DIM parameter is a constant, make sure that it is greater than
570 zero and less than or equal to the rank of the given array. If
571 allow_assumed is zero then dim must be less than the rank of the array
572 for assumed size arrays. */
575 dim_rank_check (gfc_expr
*dim
, gfc_expr
*array
, int allow_assumed
)
583 if (dim
->expr_type
!= EXPR_CONSTANT
)
586 if (array
->expr_type
== EXPR_FUNCTION
&& array
->value
.function
.isym
587 && array
->value
.function
.isym
->id
== GFC_ISYM_SPREAD
)
588 rank
= array
->rank
+ 1;
592 if (array
->expr_type
== EXPR_VARIABLE
)
594 ar
= gfc_find_array_ref (array
);
595 if (ar
->as
->type
== AS_ASSUMED_SIZE
597 && ar
->type
!= AR_ELEMENT
598 && ar
->type
!= AR_SECTION
)
602 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
603 || mpz_cmp_ui (dim
->value
.integer
, rank
) > 0)
605 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
606 "dimension index", gfc_current_intrinsic
, &dim
->where
);
615 /* Compare the size of a along dimension ai with the size of b along
616 dimension bi, returning 0 if they are known not to be identical,
617 and 1 if they are identical, or if this cannot be determined. */
620 identical_dimen_shape (gfc_expr
*a
, int ai
, gfc_expr
*b
, int bi
)
622 mpz_t a_size
, b_size
;
625 gcc_assert (a
->rank
> ai
);
626 gcc_assert (b
->rank
> bi
);
630 if (gfc_array_dimen_size (a
, ai
, &a_size
) == SUCCESS
)
632 if (gfc_array_dimen_size (b
, bi
, &b_size
) == SUCCESS
)
634 if (mpz_cmp (a_size
, b_size
) != 0)
644 /* Calculate the length of a character variable, including substrings.
645 Strip away parentheses if necessary. Return -1 if no length could
649 gfc_var_strlen (const gfc_expr
*a
)
653 while (a
->expr_type
== EXPR_OP
&& a
->value
.op
.op
== INTRINSIC_PARENTHESES
)
656 for (ra
= a
->ref
; ra
!= NULL
&& ra
->type
!= REF_SUBSTRING
; ra
= ra
->next
)
663 if (ra
->u
.ss
.start
->expr_type
== EXPR_CONSTANT
664 && ra
->u
.ss
.end
->expr_type
== EXPR_CONSTANT
)
666 start_a
= mpz_get_si (ra
->u
.ss
.start
->value
.integer
);
667 end_a
= mpz_get_si (ra
->u
.ss
.end
->value
.integer
);
668 return end_a
- start_a
+ 1;
670 else if (gfc_dep_compare_expr (ra
->u
.ss
.start
, ra
->u
.ss
.end
) == 0)
676 if (a
->ts
.u
.cl
&& a
->ts
.u
.cl
->length
677 && a
->ts
.u
.cl
->length
->expr_type
== EXPR_CONSTANT
)
678 return mpz_get_si (a
->ts
.u
.cl
->length
->value
.integer
);
679 else if (a
->expr_type
== EXPR_CONSTANT
680 && (a
->ts
.u
.cl
== NULL
|| a
->ts
.u
.cl
->length
== NULL
))
681 return a
->value
.character
.length
;
687 /* Check whether two character expressions have the same length;
688 returns SUCCESS if they have or if the length cannot be determined,
689 otherwise return FAILURE and raise a gfc_error. */
692 gfc_check_same_strlen (const gfc_expr
*a
, const gfc_expr
*b
, const char *name
)
696 len_a
= gfc_var_strlen(a
);
697 len_b
= gfc_var_strlen(b
);
699 if (len_a
== -1 || len_b
== -1 || len_a
== len_b
)
703 gfc_error ("Unequal character lengths (%ld/%ld) in %s at %L",
704 len_a
, len_b
, name
, &a
->where
);
710 /***** Check functions *****/
712 /* Check subroutine suitable for intrinsics taking a real argument and
713 a kind argument for the result. */
716 check_a_kind (gfc_expr
*a
, gfc_expr
*kind
, bt type
)
718 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
720 if (kind_check (kind
, 1, type
) == FAILURE
)
727 /* Check subroutine suitable for ceiling, floor and nint. */
730 gfc_check_a_ikind (gfc_expr
*a
, gfc_expr
*kind
)
732 return check_a_kind (a
, kind
, BT_INTEGER
);
736 /* Check subroutine suitable for aint, anint. */
739 gfc_check_a_xkind (gfc_expr
*a
, gfc_expr
*kind
)
741 return check_a_kind (a
, kind
, BT_REAL
);
746 gfc_check_abs (gfc_expr
*a
)
748 if (numeric_check (a
, 0) == FAILURE
)
756 gfc_check_achar (gfc_expr
*a
, gfc_expr
*kind
)
758 if (type_check (a
, 0, BT_INTEGER
) == FAILURE
)
760 if (kind_check (kind
, 1, BT_CHARACTER
) == FAILURE
)
768 gfc_check_access_func (gfc_expr
*name
, gfc_expr
*mode
)
770 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
771 || scalar_check (name
, 0) == FAILURE
)
773 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
776 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
777 || scalar_check (mode
, 1) == FAILURE
)
779 if (kind_value_check (mode
, 1, gfc_default_character_kind
) == FAILURE
)
787 gfc_check_all_any (gfc_expr
*mask
, gfc_expr
*dim
)
789 if (logical_array_check (mask
, 0) == FAILURE
)
792 if (dim_check (dim
, 1, false) == FAILURE
)
795 if (dim_rank_check (dim
, mask
, 0) == FAILURE
)
803 gfc_check_allocated (gfc_expr
*array
)
805 if (variable_check (array
, 0, false) == FAILURE
)
807 if (allocatable_check (array
, 0) == FAILURE
)
814 /* Common check function where the first argument must be real or
815 integer and the second argument must be the same as the first. */
818 gfc_check_a_p (gfc_expr
*a
, gfc_expr
*p
)
820 if (int_or_real_check (a
, 0) == FAILURE
)
823 if (a
->ts
.type
!= p
->ts
.type
)
825 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
826 "have the same type", gfc_current_intrinsic_arg
[0]->name
,
827 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
832 if (a
->ts
.kind
!= p
->ts
.kind
)
834 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
835 &p
->where
) == FAILURE
)
844 gfc_check_x_yd (gfc_expr
*x
, gfc_expr
*y
)
846 if (double_check (x
, 0) == FAILURE
|| double_check (y
, 1) == FAILURE
)
854 gfc_check_associated (gfc_expr
*pointer
, gfc_expr
*target
)
856 symbol_attribute attr1
, attr2
;
861 where
= &pointer
->where
;
863 if (pointer
->expr_type
== EXPR_VARIABLE
|| pointer
->expr_type
== EXPR_FUNCTION
)
864 attr1
= gfc_expr_attr (pointer
);
865 else if (pointer
->expr_type
== EXPR_NULL
)
868 gcc_assert (0); /* Pointer must be a variable or a function. */
870 if (!attr1
.pointer
&& !attr1
.proc_pointer
)
872 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
873 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
878 /* Target argument is optional. */
882 where
= &target
->where
;
883 if (target
->expr_type
== EXPR_NULL
)
886 if (target
->expr_type
== EXPR_VARIABLE
|| target
->expr_type
== EXPR_FUNCTION
)
887 attr2
= gfc_expr_attr (target
);
890 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
891 "or target VARIABLE or FUNCTION",
892 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
897 if (attr1
.pointer
&& !attr2
.pointer
&& !attr2
.target
)
899 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
900 "or a TARGET", gfc_current_intrinsic_arg
[1]->name
,
901 gfc_current_intrinsic
, &target
->where
);
906 if (same_type_check (pointer
, 0, target
, 1) == FAILURE
)
908 if (rank_check (target
, 0, pointer
->rank
) == FAILURE
)
910 if (target
->rank
> 0)
912 for (i
= 0; i
< target
->rank
; i
++)
913 if (target
->ref
->u
.ar
.dimen_type
[i
] == DIMEN_VECTOR
)
915 gfc_error ("Array section with a vector subscript at %L shall not "
916 "be the target of a pointer",
926 gfc_error ("NULL pointer at %L is not permitted as actual argument "
927 "of '%s' intrinsic function", where
, gfc_current_intrinsic
);
934 gfc_check_atan_2 (gfc_expr
*y
, gfc_expr
*x
)
936 /* gfc_notify_std would be a wast of time as the return value
937 is seemingly used only for the generic resolution. The error
938 will be: Too many arguments. */
939 if ((gfc_option
.allow_std
& GFC_STD_F2008
) == 0)
942 return gfc_check_atan2 (y
, x
);
947 gfc_check_atan2 (gfc_expr
*y
, gfc_expr
*x
)
949 if (type_check (y
, 0, BT_REAL
) == FAILURE
)
951 if (same_type_check (y
, 0, x
, 1) == FAILURE
)
958 /* BESJN and BESYN functions. */
961 gfc_check_besn (gfc_expr
*n
, gfc_expr
*x
)
963 if (type_check (n
, 0, BT_INTEGER
) == FAILURE
)
965 if (n
->expr_type
== EXPR_CONSTANT
)
968 gfc_extract_int (n
, &i
);
969 if (i
< 0 && gfc_notify_std (GFC_STD_GNU
, "Extension: Negative argument "
970 "N at %L", &n
->where
) == FAILURE
)
974 if (type_check (x
, 1, BT_REAL
) == FAILURE
)
981 /* Transformational version of the Bessel JN and YN functions. */
984 gfc_check_bessel_n2 (gfc_expr
*n1
, gfc_expr
*n2
, gfc_expr
*x
)
986 if (type_check (n1
, 0, BT_INTEGER
) == FAILURE
)
988 if (scalar_check (n1
, 0) == FAILURE
)
990 if (nonnegative_check("N1", n1
) == FAILURE
)
993 if (type_check (n2
, 1, BT_INTEGER
) == FAILURE
)
995 if (scalar_check (n2
, 1) == FAILURE
)
997 if (nonnegative_check("N2", n2
) == FAILURE
)
1000 if (type_check (x
, 2, BT_REAL
) == FAILURE
)
1002 if (scalar_check (x
, 2) == FAILURE
)
1010 gfc_check_bge_bgt_ble_blt (gfc_expr
*i
, gfc_expr
*j
)
1012 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1015 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1023 gfc_check_bitfcn (gfc_expr
*i
, gfc_expr
*pos
)
1025 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1028 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
1031 if (nonnegative_check ("pos", pos
) == FAILURE
)
1034 if (less_than_bitsize1 ("i", i
, "pos", pos
, false) == FAILURE
)
1042 gfc_check_char (gfc_expr
*i
, gfc_expr
*kind
)
1044 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1046 if (kind_check (kind
, 1, BT_CHARACTER
) == FAILURE
)
1054 gfc_check_chdir (gfc_expr
*dir
)
1056 if (type_check (dir
, 0, BT_CHARACTER
) == FAILURE
)
1058 if (kind_value_check (dir
, 0, gfc_default_character_kind
) == FAILURE
)
1066 gfc_check_chdir_sub (gfc_expr
*dir
, gfc_expr
*status
)
1068 if (type_check (dir
, 0, BT_CHARACTER
) == FAILURE
)
1070 if (kind_value_check (dir
, 0, gfc_default_character_kind
) == FAILURE
)
1076 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
1078 if (scalar_check (status
, 1) == FAILURE
)
1086 gfc_check_chmod (gfc_expr
*name
, gfc_expr
*mode
)
1088 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
1090 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
1093 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
)
1095 if (kind_value_check (mode
, 1, gfc_default_character_kind
) == FAILURE
)
1103 gfc_check_chmod_sub (gfc_expr
*name
, gfc_expr
*mode
, gfc_expr
*status
)
1105 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
1107 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
1110 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
)
1112 if (kind_value_check (mode
, 1, gfc_default_character_kind
) == FAILURE
)
1118 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1121 if (scalar_check (status
, 2) == FAILURE
)
1129 gfc_check_cmplx (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*kind
)
1131 if (numeric_check (x
, 0) == FAILURE
)
1136 if (numeric_check (y
, 1) == FAILURE
)
1139 if (x
->ts
.type
== BT_COMPLEX
)
1141 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1142 "present if 'x' is COMPLEX",
1143 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1148 if (y
->ts
.type
== BT_COMPLEX
)
1150 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1151 "of either REAL or INTEGER",
1152 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1159 if (kind_check (kind
, 2, BT_COMPLEX
) == FAILURE
)
1167 gfc_check_complex (gfc_expr
*x
, gfc_expr
*y
)
1169 if (int_or_real_check (x
, 0) == FAILURE
)
1171 if (scalar_check (x
, 0) == FAILURE
)
1174 if (int_or_real_check (y
, 1) == FAILURE
)
1176 if (scalar_check (y
, 1) == FAILURE
)
1184 gfc_check_count (gfc_expr
*mask
, gfc_expr
*dim
, gfc_expr
*kind
)
1186 if (logical_array_check (mask
, 0) == FAILURE
)
1188 if (dim_check (dim
, 1, false) == FAILURE
)
1190 if (dim_rank_check (dim
, mask
, 0) == FAILURE
)
1192 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
1194 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1195 "with KIND argument at %L",
1196 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1204 gfc_check_cshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*dim
)
1206 if (array_check (array
, 0) == FAILURE
)
1209 if (type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1212 if (dim_check (dim
, 2, true) == FAILURE
)
1215 if (dim_rank_check (dim
, array
, false) == FAILURE
)
1218 if (array
->rank
== 1 || shift
->rank
== 0)
1220 if (scalar_check (shift
, 1) == FAILURE
)
1223 else if (shift
->rank
== array
->rank
- 1)
1228 else if (dim
->expr_type
== EXPR_CONSTANT
)
1229 gfc_extract_int (dim
, &d
);
1236 for (i
= 0, j
= 0; i
< array
->rank
; i
++)
1239 if (!identical_dimen_shape (array
, i
, shift
, j
))
1241 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1242 "invalid shape in dimension %d (%ld/%ld)",
1243 gfc_current_intrinsic_arg
[1]->name
,
1244 gfc_current_intrinsic
, &shift
->where
, i
+ 1,
1245 mpz_get_si (array
->shape
[i
]),
1246 mpz_get_si (shift
->shape
[j
]));
1256 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1257 "%d or be a scalar", gfc_current_intrinsic_arg
[1]->name
,
1258 gfc_current_intrinsic
, &shift
->where
, array
->rank
- 1);
1267 gfc_check_ctime (gfc_expr
*time
)
1269 if (scalar_check (time
, 0) == FAILURE
)
1272 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
1279 gfc_try
gfc_check_datan2 (gfc_expr
*y
, gfc_expr
*x
)
1281 if (double_check (y
, 0) == FAILURE
|| double_check (x
, 1) == FAILURE
)
1288 gfc_check_dcmplx (gfc_expr
*x
, gfc_expr
*y
)
1290 if (numeric_check (x
, 0) == FAILURE
)
1295 if (numeric_check (y
, 1) == FAILURE
)
1298 if (x
->ts
.type
== BT_COMPLEX
)
1300 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1301 "present if 'x' is COMPLEX",
1302 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1307 if (y
->ts
.type
== BT_COMPLEX
)
1309 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1310 "of either REAL or INTEGER",
1311 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1322 gfc_check_dble (gfc_expr
*x
)
1324 if (numeric_check (x
, 0) == FAILURE
)
1332 gfc_check_digits (gfc_expr
*x
)
1334 if (int_or_real_check (x
, 0) == FAILURE
)
1342 gfc_check_dot_product (gfc_expr
*vector_a
, gfc_expr
*vector_b
)
1344 switch (vector_a
->ts
.type
)
1347 if (type_check (vector_b
, 1, BT_LOGICAL
) == FAILURE
)
1354 if (numeric_check (vector_b
, 1) == FAILURE
)
1359 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1360 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
1361 gfc_current_intrinsic
, &vector_a
->where
);
1365 if (rank_check (vector_a
, 0, 1) == FAILURE
)
1368 if (rank_check (vector_b
, 1, 1) == FAILURE
)
1371 if (! identical_dimen_shape (vector_a
, 0, vector_b
, 0))
1373 gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
1374 "intrinsic 'dot_product'", gfc_current_intrinsic_arg
[0]->name
,
1375 gfc_current_intrinsic_arg
[1]->name
, &vector_a
->where
);
1384 gfc_check_dprod (gfc_expr
*x
, gfc_expr
*y
)
1386 if (type_check (x
, 0, BT_REAL
) == FAILURE
1387 || type_check (y
, 1, BT_REAL
) == FAILURE
)
1390 if (x
->ts
.kind
!= gfc_default_real_kind
)
1392 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1393 "real", gfc_current_intrinsic_arg
[0]->name
,
1394 gfc_current_intrinsic
, &x
->where
);
1398 if (y
->ts
.kind
!= gfc_default_real_kind
)
1400 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1401 "real", gfc_current_intrinsic_arg
[1]->name
,
1402 gfc_current_intrinsic
, &y
->where
);
1411 gfc_check_dshift (gfc_expr
*i
, gfc_expr
*j
, gfc_expr
*shift
)
1413 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1416 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1419 if (same_type_check (i
, 0, j
, 1) == FAILURE
)
1422 if (type_check (shift
, 2, BT_INTEGER
) == FAILURE
)
1425 if (nonnegative_check ("SHIFT", shift
) == FAILURE
)
1428 if (less_than_bitsize1 ("I", i
, "SHIFT", shift
, true) == FAILURE
)
1436 gfc_check_eoshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*boundary
,
1439 if (array_check (array
, 0) == FAILURE
)
1442 if (type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1445 if (dim_check (dim
, 3, true) == FAILURE
)
1448 if (dim_rank_check (dim
, array
, false) == FAILURE
)
1451 if (array
->rank
== 1 || shift
->rank
== 0)
1453 if (scalar_check (shift
, 1) == FAILURE
)
1456 else if (shift
->rank
== array
->rank
- 1)
1461 else if (dim
->expr_type
== EXPR_CONSTANT
)
1462 gfc_extract_int (dim
, &d
);
1469 for (i
= 0, j
= 0; i
< array
->rank
; i
++)
1472 if (!identical_dimen_shape (array
, i
, shift
, j
))
1474 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1475 "invalid shape in dimension %d (%ld/%ld)",
1476 gfc_current_intrinsic_arg
[1]->name
,
1477 gfc_current_intrinsic
, &shift
->where
, i
+ 1,
1478 mpz_get_si (array
->shape
[i
]),
1479 mpz_get_si (shift
->shape
[j
]));
1489 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1490 "%d or be a scalar", gfc_current_intrinsic_arg
[1]->name
,
1491 gfc_current_intrinsic
, &shift
->where
, array
->rank
- 1);
1495 if (boundary
!= NULL
)
1497 if (same_type_check (array
, 0, boundary
, 2) == FAILURE
)
1500 if (array
->rank
== 1 || boundary
->rank
== 0)
1502 if (scalar_check (boundary
, 2) == FAILURE
)
1505 else if (boundary
->rank
== array
->rank
- 1)
1507 if (gfc_check_conformance (shift
, boundary
,
1508 "arguments '%s' and '%s' for "
1510 gfc_current_intrinsic_arg
[1]->name
,
1511 gfc_current_intrinsic_arg
[2]->name
,
1512 gfc_current_intrinsic
) == FAILURE
)
1517 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have "
1518 "rank %d or be a scalar",
1519 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1520 &shift
->where
, array
->rank
- 1);
1529 gfc_check_float (gfc_expr
*a
)
1531 if (type_check (a
, 0, BT_INTEGER
) == FAILURE
)
1534 if ((a
->ts
.kind
!= gfc_default_integer_kind
)
1535 && gfc_notify_std (GFC_STD_GNU
, "GNU extension: non-default INTEGER "
1536 "kind argument to %s intrinsic at %L",
1537 gfc_current_intrinsic
, &a
->where
) == FAILURE
)
1543 /* A single complex argument. */
1546 gfc_check_fn_c (gfc_expr
*a
)
1548 if (type_check (a
, 0, BT_COMPLEX
) == FAILURE
)
1554 /* A single real argument. */
1557 gfc_check_fn_r (gfc_expr
*a
)
1559 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
1565 /* A single double argument. */
1568 gfc_check_fn_d (gfc_expr
*a
)
1570 if (double_check (a
, 0) == FAILURE
)
1576 /* A single real or complex argument. */
1579 gfc_check_fn_rc (gfc_expr
*a
)
1581 if (real_or_complex_check (a
, 0) == FAILURE
)
1589 gfc_check_fn_rc2008 (gfc_expr
*a
)
1591 if (real_or_complex_check (a
, 0) == FAILURE
)
1594 if (a
->ts
.type
== BT_COMPLEX
1595 && gfc_notify_std (GFC_STD_F2008
, "Fortran 2008: COMPLEX argument '%s' "
1596 "argument of '%s' intrinsic at %L",
1597 gfc_current_intrinsic_arg
[0]->name
,
1598 gfc_current_intrinsic
, &a
->where
) == FAILURE
)
1606 gfc_check_fnum (gfc_expr
*unit
)
1608 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
1611 if (scalar_check (unit
, 0) == FAILURE
)
1619 gfc_check_huge (gfc_expr
*x
)
1621 if (int_or_real_check (x
, 0) == FAILURE
)
1629 gfc_check_hypot (gfc_expr
*x
, gfc_expr
*y
)
1631 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1633 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
1640 /* Check that the single argument is an integer. */
1643 gfc_check_i (gfc_expr
*i
)
1645 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1653 gfc_check_iand (gfc_expr
*i
, gfc_expr
*j
)
1655 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1658 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1661 if (i
->ts
.kind
!= j
->ts
.kind
)
1663 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1664 &i
->where
) == FAILURE
)
1673 gfc_check_ibits (gfc_expr
*i
, gfc_expr
*pos
, gfc_expr
*len
)
1675 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1678 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
1681 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
1684 if (nonnegative_check ("pos", pos
) == FAILURE
)
1687 if (nonnegative_check ("len", len
) == FAILURE
)
1690 if (less_than_bitsize2 ("i", i
, "pos", pos
, "len", len
) == FAILURE
)
1698 gfc_check_ichar_iachar (gfc_expr
*c
, gfc_expr
*kind
)
1702 if (type_check (c
, 0, BT_CHARACTER
) == FAILURE
)
1705 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1708 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1709 "with KIND argument at %L",
1710 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1713 if (c
->expr_type
== EXPR_VARIABLE
|| c
->expr_type
== EXPR_SUBSTRING
)
1719 /* Substring references don't have the charlength set. */
1721 while (ref
&& ref
->type
!= REF_SUBSTRING
)
1724 gcc_assert (ref
== NULL
|| ref
->type
== REF_SUBSTRING
);
1728 /* Check that the argument is length one. Non-constant lengths
1729 can't be checked here, so assume they are ok. */
1730 if (c
->ts
.u
.cl
&& c
->ts
.u
.cl
->length
)
1732 /* If we already have a length for this expression then use it. */
1733 if (c
->ts
.u
.cl
->length
->expr_type
!= EXPR_CONSTANT
)
1735 i
= mpz_get_si (c
->ts
.u
.cl
->length
->value
.integer
);
1742 start
= ref
->u
.ss
.start
;
1743 end
= ref
->u
.ss
.end
;
1746 if (end
== NULL
|| end
->expr_type
!= EXPR_CONSTANT
1747 || start
->expr_type
!= EXPR_CONSTANT
)
1750 i
= mpz_get_si (end
->value
.integer
) + 1
1751 - mpz_get_si (start
->value
.integer
);
1759 gfc_error ("Argument of %s at %L must be of length one",
1760 gfc_current_intrinsic
, &c
->where
);
1769 gfc_check_idnint (gfc_expr
*a
)
1771 if (double_check (a
, 0) == FAILURE
)
1779 gfc_check_ieor (gfc_expr
*i
, gfc_expr
*j
)
1781 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1784 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1787 if (i
->ts
.kind
!= j
->ts
.kind
)
1789 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1790 &i
->where
) == FAILURE
)
1799 gfc_check_index (gfc_expr
*string
, gfc_expr
*substring
, gfc_expr
*back
,
1802 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
1803 || type_check (substring
, 1, BT_CHARACTER
) == FAILURE
)
1806 if (back
!= NULL
&& type_check (back
, 2, BT_LOGICAL
) == FAILURE
)
1809 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
1811 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1812 "with KIND argument at %L",
1813 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1816 if (string
->ts
.kind
!= substring
->ts
.kind
)
1818 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1819 "kind as '%s'", gfc_current_intrinsic_arg
[1]->name
,
1820 gfc_current_intrinsic
, &substring
->where
,
1821 gfc_current_intrinsic_arg
[0]->name
);
1830 gfc_check_int (gfc_expr
*x
, gfc_expr
*kind
)
1832 if (numeric_check (x
, 0) == FAILURE
)
1835 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1843 gfc_check_intconv (gfc_expr
*x
)
1845 if (numeric_check (x
, 0) == FAILURE
)
1853 gfc_check_ior (gfc_expr
*i
, gfc_expr
*j
)
1855 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1858 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1861 if (i
->ts
.kind
!= j
->ts
.kind
)
1863 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1864 &i
->where
) == FAILURE
)
1873 gfc_check_ishft (gfc_expr
*i
, gfc_expr
*shift
)
1875 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
1876 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1884 gfc_check_ishftc (gfc_expr
*i
, gfc_expr
*shift
, gfc_expr
*size
)
1886 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
1887 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1890 if (size
!= NULL
&& type_check (size
, 2, BT_INTEGER
) == FAILURE
)
1898 gfc_check_kill (gfc_expr
*pid
, gfc_expr
*sig
)
1900 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
1903 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
1911 gfc_check_kill_sub (gfc_expr
*pid
, gfc_expr
*sig
, gfc_expr
*status
)
1913 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
1916 if (scalar_check (pid
, 0) == FAILURE
)
1919 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
1922 if (scalar_check (sig
, 1) == FAILURE
)
1928 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1931 if (scalar_check (status
, 2) == FAILURE
)
1939 gfc_check_kind (gfc_expr
*x
)
1941 if (x
->ts
.type
== BT_DERIVED
)
1943 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1944 "non-derived type", gfc_current_intrinsic_arg
[0]->name
,
1945 gfc_current_intrinsic
, &x
->where
);
1954 gfc_check_lbound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
1956 if (array_check (array
, 0) == FAILURE
)
1959 if (dim_check (dim
, 1, false) == FAILURE
)
1962 if (dim_rank_check (dim
, array
, 1) == FAILURE
)
1965 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
1967 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1968 "with KIND argument at %L",
1969 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1977 gfc_check_lcobound (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*kind
)
1979 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
1981 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
1985 if (coarray_check (coarray
, 0) == FAILURE
)
1990 if (dim_check (dim
, 1, false) == FAILURE
)
1993 if (dim_corank_check (dim
, coarray
) == FAILURE
)
1997 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
2005 gfc_check_len_lentrim (gfc_expr
*s
, gfc_expr
*kind
)
2007 if (type_check (s
, 0, BT_CHARACTER
) == FAILURE
)
2010 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
2012 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2013 "with KIND argument at %L",
2014 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2022 gfc_check_lge_lgt_lle_llt (gfc_expr
*a
, gfc_expr
*b
)
2024 if (type_check (a
, 0, BT_CHARACTER
) == FAILURE
)
2026 if (kind_value_check (a
, 0, gfc_default_character_kind
) == FAILURE
)
2029 if (type_check (b
, 1, BT_CHARACTER
) == FAILURE
)
2031 if (kind_value_check (b
, 1, gfc_default_character_kind
) == FAILURE
)
2039 gfc_check_link (gfc_expr
*path1
, gfc_expr
*path2
)
2041 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2043 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2046 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2048 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2056 gfc_check_link_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2058 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2060 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2063 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2065 if (kind_value_check (path2
, 0, gfc_default_character_kind
) == FAILURE
)
2071 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2074 if (scalar_check (status
, 2) == FAILURE
)
2082 gfc_check_loc (gfc_expr
*expr
)
2084 return variable_check (expr
, 0, true);
2089 gfc_check_symlnk (gfc_expr
*path1
, gfc_expr
*path2
)
2091 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2093 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2096 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2098 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2106 gfc_check_symlnk_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2108 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2110 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2113 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2115 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2121 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2124 if (scalar_check (status
, 2) == FAILURE
)
2132 gfc_check_logical (gfc_expr
*a
, gfc_expr
*kind
)
2134 if (type_check (a
, 0, BT_LOGICAL
) == FAILURE
)
2136 if (kind_check (kind
, 1, BT_LOGICAL
) == FAILURE
)
2143 /* Min/max family. */
2146 min_max_args (gfc_actual_arglist
*arg
)
2148 if (arg
== NULL
|| arg
->next
== NULL
)
2150 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
2151 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
2160 check_rest (bt type
, int kind
, gfc_actual_arglist
*arglist
)
2162 gfc_actual_arglist
*arg
, *tmp
;
2167 if (min_max_args (arglist
) == FAILURE
)
2170 for (arg
= arglist
, n
=1; arg
; arg
= arg
->next
, n
++)
2173 if (x
->ts
.type
!= type
|| x
->ts
.kind
!= kind
)
2175 if (x
->ts
.type
== type
)
2177 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type "
2178 "kinds at %L", &x
->where
) == FAILURE
)
2183 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
2184 "%s(%d)", n
, gfc_current_intrinsic
, &x
->where
,
2185 gfc_basic_typename (type
), kind
);
2190 for (tmp
= arglist
, m
=1; tmp
!= arg
; tmp
= tmp
->next
, m
++)
2191 if (gfc_check_conformance (tmp
->expr
, x
,
2192 "arguments 'a%d' and 'a%d' for "
2193 "intrinsic '%s'", m
, n
,
2194 gfc_current_intrinsic
) == FAILURE
)
2203 gfc_check_min_max (gfc_actual_arglist
*arg
)
2207 if (min_max_args (arg
) == FAILURE
)
2212 if (x
->ts
.type
== BT_CHARACTER
)
2214 if (gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2215 "with CHARACTER argument at %L",
2216 gfc_current_intrinsic
, &x
->where
) == FAILURE
)
2219 else if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
2221 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
2222 "REAL or CHARACTER", gfc_current_intrinsic
, &x
->where
);
2226 return check_rest (x
->ts
.type
, x
->ts
.kind
, arg
);
2231 gfc_check_min_max_integer (gfc_actual_arglist
*arg
)
2233 return check_rest (BT_INTEGER
, gfc_default_integer_kind
, arg
);
2238 gfc_check_min_max_real (gfc_actual_arglist
*arg
)
2240 return check_rest (BT_REAL
, gfc_default_real_kind
, arg
);
2245 gfc_check_min_max_double (gfc_actual_arglist
*arg
)
2247 return check_rest (BT_REAL
, gfc_default_double_kind
, arg
);
2251 /* End of min/max family. */
2254 gfc_check_malloc (gfc_expr
*size
)
2256 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
2259 if (scalar_check (size
, 0) == FAILURE
)
2267 gfc_check_matmul (gfc_expr
*matrix_a
, gfc_expr
*matrix_b
)
2269 if ((matrix_a
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_a
->ts
))
2271 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2272 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
2273 gfc_current_intrinsic
, &matrix_a
->where
);
2277 if ((matrix_b
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_b
->ts
))
2279 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2280 "or LOGICAL", gfc_current_intrinsic_arg
[1]->name
,
2281 gfc_current_intrinsic
, &matrix_b
->where
);
2285 if ((matrix_a
->ts
.type
== BT_LOGICAL
&& gfc_numeric_ts (&matrix_b
->ts
))
2286 || (gfc_numeric_ts (&matrix_a
->ts
) && matrix_b
->ts
.type
== BT_LOGICAL
))
2288 gfc_error ("Argument types of '%s' intrinsic at %L must match (%s/%s)",
2289 gfc_current_intrinsic
, &matrix_a
->where
,
2290 gfc_typename(&matrix_a
->ts
), gfc_typename(&matrix_b
->ts
));
2294 switch (matrix_a
->rank
)
2297 if (rank_check (matrix_b
, 1, 2) == FAILURE
)
2299 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
2300 if (!identical_dimen_shape (matrix_a
, 0, matrix_b
, 0))
2302 gfc_error ("Different shape on dimension 1 for arguments '%s' "
2303 "and '%s' at %L for intrinsic matmul",
2304 gfc_current_intrinsic_arg
[0]->name
,
2305 gfc_current_intrinsic_arg
[1]->name
, &matrix_a
->where
);
2311 if (matrix_b
->rank
!= 2)
2313 if (rank_check (matrix_b
, 1, 1) == FAILURE
)
2316 /* matrix_b has rank 1 or 2 here. Common check for the cases
2317 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
2318 - matrix_a has shape (n,m) and matrix_b has shape (m). */
2319 if (!identical_dimen_shape (matrix_a
, 1, matrix_b
, 0))
2321 gfc_error ("Different shape on dimension 2 for argument '%s' and "
2322 "dimension 1 for argument '%s' at %L for intrinsic "
2323 "matmul", gfc_current_intrinsic_arg
[0]->name
,
2324 gfc_current_intrinsic_arg
[1]->name
, &matrix_a
->where
);
2330 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
2331 "1 or 2", gfc_current_intrinsic_arg
[0]->name
,
2332 gfc_current_intrinsic
, &matrix_a
->where
);
2340 /* Whoever came up with this interface was probably on something.
2341 The possibilities for the occupation of the second and third
2348 NULL MASK minloc(array, mask=m)
2351 I.e. in the case of minloc(array,mask), mask will be in the second
2352 position of the argument list and we'll have to fix that up. */
2355 gfc_check_minloc_maxloc (gfc_actual_arglist
*ap
)
2357 gfc_expr
*a
, *m
, *d
;
2360 if (int_or_real_check (a
, 0) == FAILURE
|| array_check (a
, 0) == FAILURE
)
2364 m
= ap
->next
->next
->expr
;
2366 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
2367 && ap
->next
->name
== NULL
)
2371 ap
->next
->expr
= NULL
;
2372 ap
->next
->next
->expr
= m
;
2375 if (dim_check (d
, 1, false) == FAILURE
)
2378 if (dim_rank_check (d
, a
, 0) == FAILURE
)
2381 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
2385 && gfc_check_conformance (a
, m
,
2386 "arguments '%s' and '%s' for intrinsic %s",
2387 gfc_current_intrinsic_arg
[0]->name
,
2388 gfc_current_intrinsic_arg
[2]->name
,
2389 gfc_current_intrinsic
) == FAILURE
)
2396 /* Similar to minloc/maxloc, the argument list might need to be
2397 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
2398 difference is that MINLOC/MAXLOC take an additional KIND argument.
2399 The possibilities are:
2405 NULL MASK minval(array, mask=m)
2408 I.e. in the case of minval(array,mask), mask will be in the second
2409 position of the argument list and we'll have to fix that up. */
2412 check_reduction (gfc_actual_arglist
*ap
)
2414 gfc_expr
*a
, *m
, *d
;
2418 m
= ap
->next
->next
->expr
;
2420 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
2421 && ap
->next
->name
== NULL
)
2425 ap
->next
->expr
= NULL
;
2426 ap
->next
->next
->expr
= m
;
2429 if (dim_check (d
, 1, false) == FAILURE
)
2432 if (dim_rank_check (d
, a
, 0) == FAILURE
)
2435 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
2439 && gfc_check_conformance (a
, m
,
2440 "arguments '%s' and '%s' for intrinsic %s",
2441 gfc_current_intrinsic_arg
[0]->name
,
2442 gfc_current_intrinsic_arg
[2]->name
,
2443 gfc_current_intrinsic
) == FAILURE
)
2451 gfc_check_minval_maxval (gfc_actual_arglist
*ap
)
2453 if (int_or_real_check (ap
->expr
, 0) == FAILURE
2454 || array_check (ap
->expr
, 0) == FAILURE
)
2457 return check_reduction (ap
);
2462 gfc_check_product_sum (gfc_actual_arglist
*ap
)
2464 if (numeric_check (ap
->expr
, 0) == FAILURE
2465 || array_check (ap
->expr
, 0) == FAILURE
)
2468 return check_reduction (ap
);
2472 /* For IANY, IALL and IPARITY. */
2475 gfc_check_mask (gfc_expr
*i
, gfc_expr
*kind
)
2479 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
2482 if (nonnegative_check ("I", i
) == FAILURE
)
2485 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
2489 gfc_extract_int (kind
, &k
);
2491 k
= gfc_default_integer_kind
;
2493 if (less_than_bitsizekind ("I", i
, k
) == FAILURE
)
2501 gfc_check_transf_bit_intrins (gfc_actual_arglist
*ap
)
2503 if (ap
->expr
->ts
.type
!= BT_INTEGER
)
2505 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER",
2506 gfc_current_intrinsic_arg
[0]->name
,
2507 gfc_current_intrinsic
, &ap
->expr
->where
);
2511 if (array_check (ap
->expr
, 0) == FAILURE
)
2514 return check_reduction (ap
);
2519 gfc_check_merge (gfc_expr
*tsource
, gfc_expr
*fsource
, gfc_expr
*mask
)
2521 if (same_type_check (tsource
, 0, fsource
, 1) == FAILURE
)
2524 if (type_check (mask
, 2, BT_LOGICAL
) == FAILURE
)
2527 if (tsource
->ts
.type
== BT_CHARACTER
)
2528 return gfc_check_same_strlen (tsource
, fsource
, "MERGE intrinsic");
2535 gfc_check_merge_bits (gfc_expr
*i
, gfc_expr
*j
, gfc_expr
*mask
)
2537 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
2540 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
2543 if (type_check (mask
, 2, BT_INTEGER
) == FAILURE
)
2546 if (same_type_check (i
, 0, j
, 1) == FAILURE
)
2549 if (same_type_check (i
, 0, mask
, 2) == FAILURE
)
2557 gfc_check_move_alloc (gfc_expr
*from
, gfc_expr
*to
)
2559 if (variable_check (from
, 0, false) == FAILURE
)
2561 if (allocatable_check (from
, 0) == FAILURE
)
2564 if (variable_check (to
, 1, false) == FAILURE
)
2566 if (allocatable_check (to
, 1) == FAILURE
)
2569 if (same_type_check (to
, 1, from
, 0) == FAILURE
)
2572 if (to
->rank
!= from
->rank
)
2574 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
2575 "have the same rank %d/%d", gfc_current_intrinsic_arg
[0]->name
,
2576 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
2577 &to
->where
, from
->rank
, to
->rank
);
2581 if (to
->ts
.kind
!= from
->ts
.kind
)
2583 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
2584 "be of the same kind %d/%d",
2585 gfc_current_intrinsic_arg
[0]->name
,
2586 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
2587 &to
->where
, from
->ts
.kind
, to
->ts
.kind
);
2596 gfc_check_nearest (gfc_expr
*x
, gfc_expr
*s
)
2598 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2601 if (type_check (s
, 1, BT_REAL
) == FAILURE
)
2609 gfc_check_new_line (gfc_expr
*a
)
2611 if (type_check (a
, 0, BT_CHARACTER
) == FAILURE
)
2619 gfc_check_norm2 (gfc_expr
*array
, gfc_expr
*dim
)
2621 if (type_check (array
, 0, BT_REAL
) == FAILURE
)
2624 if (array_check (array
, 0) == FAILURE
)
2627 if (dim_rank_check (dim
, array
, false) == FAILURE
)
2634 gfc_check_null (gfc_expr
*mold
)
2636 symbol_attribute attr
;
2641 if (variable_check (mold
, 0, true) == FAILURE
)
2644 attr
= gfc_variable_attr (mold
, NULL
);
2646 if (!attr
.pointer
&& !attr
.proc_pointer
)
2648 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
2649 gfc_current_intrinsic_arg
[0]->name
,
2650 gfc_current_intrinsic
, &mold
->where
);
2659 gfc_check_pack (gfc_expr
*array
, gfc_expr
*mask
, gfc_expr
*vector
)
2661 if (array_check (array
, 0) == FAILURE
)
2664 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
2667 if (gfc_check_conformance (array
, mask
,
2668 "arguments '%s' and '%s' for intrinsic '%s'",
2669 gfc_current_intrinsic_arg
[0]->name
,
2670 gfc_current_intrinsic_arg
[1]->name
,
2671 gfc_current_intrinsic
) == FAILURE
)
2676 mpz_t array_size
, vector_size
;
2677 bool have_array_size
, have_vector_size
;
2679 if (same_type_check (array
, 0, vector
, 2) == FAILURE
)
2682 if (rank_check (vector
, 2, 1) == FAILURE
)
2685 /* VECTOR requires at least as many elements as MASK
2686 has .TRUE. values. */
2687 have_array_size
= gfc_array_size (array
, &array_size
) == SUCCESS
;
2688 have_vector_size
= gfc_array_size (vector
, &vector_size
) == SUCCESS
;
2690 if (have_vector_size
2691 && (mask
->expr_type
== EXPR_ARRAY
2692 || (mask
->expr_type
== EXPR_CONSTANT
2693 && have_array_size
)))
2695 int mask_true_values
= 0;
2697 if (mask
->expr_type
== EXPR_ARRAY
)
2699 gfc_constructor
*mask_ctor
;
2700 mask_ctor
= gfc_constructor_first (mask
->value
.constructor
);
2703 if (mask_ctor
->expr
->expr_type
!= EXPR_CONSTANT
)
2705 mask_true_values
= 0;
2709 if (mask_ctor
->expr
->value
.logical
)
2712 mask_ctor
= gfc_constructor_next (mask_ctor
);
2715 else if (mask
->expr_type
== EXPR_CONSTANT
&& mask
->value
.logical
)
2716 mask_true_values
= mpz_get_si (array_size
);
2718 if (mpz_get_si (vector_size
) < mask_true_values
)
2720 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
2721 "provide at least as many elements as there "
2722 "are .TRUE. values in '%s' (%ld/%d)",
2723 gfc_current_intrinsic_arg
[2]->name
,
2724 gfc_current_intrinsic
, &vector
->where
,
2725 gfc_current_intrinsic_arg
[1]->name
,
2726 mpz_get_si (vector_size
), mask_true_values
);
2731 if (have_array_size
)
2732 mpz_clear (array_size
);
2733 if (have_vector_size
)
2734 mpz_clear (vector_size
);
2742 gfc_check_parity (gfc_expr
*mask
, gfc_expr
*dim
)
2744 if (type_check (mask
, 0, BT_LOGICAL
) == FAILURE
)
2747 if (array_check (mask
, 0) == FAILURE
)
2750 if (dim_rank_check (dim
, mask
, false) == FAILURE
)
2758 gfc_check_precision (gfc_expr
*x
)
2760 if (real_or_complex_check (x
, 0) == FAILURE
)
2768 gfc_check_present (gfc_expr
*a
)
2772 if (variable_check (a
, 0, true) == FAILURE
)
2775 sym
= a
->symtree
->n
.sym
;
2776 if (!sym
->attr
.dummy
)
2778 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
2779 "dummy variable", gfc_current_intrinsic_arg
[0]->name
,
2780 gfc_current_intrinsic
, &a
->where
);
2784 if (!sym
->attr
.optional
)
2786 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
2787 "an OPTIONAL dummy variable",
2788 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
2793 /* 13.14.82 PRESENT(A)
2795 Argument. A shall be the name of an optional dummy argument that is
2796 accessible in the subprogram in which the PRESENT function reference
2800 && !(a
->ref
->next
== NULL
&& a
->ref
->type
== REF_ARRAY
2801 && a
->ref
->u
.ar
.type
== AR_FULL
))
2803 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
2804 "subobject of '%s'", gfc_current_intrinsic_arg
[0]->name
,
2805 gfc_current_intrinsic
, &a
->where
, sym
->name
);
2814 gfc_check_radix (gfc_expr
*x
)
2816 if (int_or_real_check (x
, 0) == FAILURE
)
2824 gfc_check_range (gfc_expr
*x
)
2826 if (numeric_check (x
, 0) == FAILURE
)
2833 /* real, float, sngl. */
2835 gfc_check_real (gfc_expr
*a
, gfc_expr
*kind
)
2837 if (numeric_check (a
, 0) == FAILURE
)
2840 if (kind_check (kind
, 1, BT_REAL
) == FAILURE
)
2848 gfc_check_rename (gfc_expr
*path1
, gfc_expr
*path2
)
2850 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2852 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2855 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2857 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2865 gfc_check_rename_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2867 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2869 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2872 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2874 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2880 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2883 if (scalar_check (status
, 2) == FAILURE
)
2891 gfc_check_repeat (gfc_expr
*x
, gfc_expr
*y
)
2893 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
2896 if (scalar_check (x
, 0) == FAILURE
)
2899 if (type_check (y
, 0, BT_INTEGER
) == FAILURE
)
2902 if (scalar_check (y
, 1) == FAILURE
)
2910 gfc_check_reshape (gfc_expr
*source
, gfc_expr
*shape
,
2911 gfc_expr
*pad
, gfc_expr
*order
)
2917 if (array_check (source
, 0) == FAILURE
)
2920 if (rank_check (shape
, 1, 1) == FAILURE
)
2923 if (type_check (shape
, 1, BT_INTEGER
) == FAILURE
)
2926 if (gfc_array_size (shape
, &size
) != SUCCESS
)
2928 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
2929 "array of constant size", &shape
->where
);
2933 shape_size
= mpz_get_ui (size
);
2936 if (shape_size
<= 0)
2938 gfc_error ("'%s' argument of '%s' intrinsic at %L is empty",
2939 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
2943 else if (shape_size
> GFC_MAX_DIMENSIONS
)
2945 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
2946 "than %d elements", &shape
->where
, GFC_MAX_DIMENSIONS
);
2949 else if (shape
->expr_type
== EXPR_ARRAY
)
2953 for (i
= 0; i
< shape_size
; ++i
)
2955 e
= gfc_constructor_lookup_expr (shape
->value
.constructor
, i
);
2956 if (e
->expr_type
!= EXPR_CONSTANT
)
2959 gfc_extract_int (e
, &extent
);
2962 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
2963 "negative element (%d)",
2964 gfc_current_intrinsic_arg
[1]->name
,
2965 gfc_current_intrinsic
, &e
->where
, extent
);
2973 if (same_type_check (source
, 0, pad
, 2) == FAILURE
)
2976 if (array_check (pad
, 2) == FAILURE
)
2982 if (array_check (order
, 3) == FAILURE
)
2985 if (type_check (order
, 3, BT_INTEGER
) == FAILURE
)
2988 if (order
->expr_type
== EXPR_ARRAY
)
2990 int i
, order_size
, dim
, perm
[GFC_MAX_DIMENSIONS
];
2993 for (i
= 0; i
< GFC_MAX_DIMENSIONS
; ++i
)
2996 gfc_array_size (order
, &size
);
2997 order_size
= mpz_get_ui (size
);
3000 if (order_size
!= shape_size
)
3002 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3003 "has wrong number of elements (%d/%d)",
3004 gfc_current_intrinsic_arg
[3]->name
,
3005 gfc_current_intrinsic
, &order
->where
,
3006 order_size
, shape_size
);
3010 for (i
= 1; i
<= order_size
; ++i
)
3012 e
= gfc_constructor_lookup_expr (order
->value
.constructor
, i
-1);
3013 if (e
->expr_type
!= EXPR_CONSTANT
)
3016 gfc_extract_int (e
, &dim
);
3018 if (dim
< 1 || dim
> order_size
)
3020 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3021 "has out-of-range dimension (%d)",
3022 gfc_current_intrinsic_arg
[3]->name
,
3023 gfc_current_intrinsic
, &e
->where
, dim
);
3027 if (perm
[dim
-1] != 0)
3029 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3030 "invalid permutation of dimensions (dimension "
3032 gfc_current_intrinsic_arg
[3]->name
,
3033 gfc_current_intrinsic
, &e
->where
, dim
);
3042 if (pad
== NULL
&& shape
->expr_type
== EXPR_ARRAY
3043 && gfc_is_constant_expr (shape
)
3044 && !(source
->expr_type
== EXPR_VARIABLE
&& source
->symtree
->n
.sym
->as
3045 && source
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
))
3047 /* Check the match in size between source and destination. */
3048 if (gfc_array_size (source
, &nelems
) == SUCCESS
)
3054 mpz_init_set_ui (size
, 1);
3055 for (c
= gfc_constructor_first (shape
->value
.constructor
);
3056 c
; c
= gfc_constructor_next (c
))
3057 mpz_mul (size
, size
, c
->expr
->value
.integer
);
3059 test
= mpz_cmp (nelems
, size
) < 0 && mpz_cmp_ui (size
, 0) > 0;
3065 gfc_error ("Without padding, there are not enough elements "
3066 "in the intrinsic RESHAPE source at %L to match "
3067 "the shape", &source
->where
);
3078 gfc_check_same_type_as (gfc_expr
*a
, gfc_expr
*b
)
3081 if (a
->ts
.type
!= BT_DERIVED
&& a
->ts
.type
!= BT_CLASS
)
3083 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3084 "must be of a derived type",
3085 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3090 if (!gfc_type_is_extensible (a
->ts
.u
.derived
))
3092 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3093 "must be of an extensible type",
3094 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3099 if (b
->ts
.type
!= BT_DERIVED
&& b
->ts
.type
!= BT_CLASS
)
3101 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3102 "must be of a derived type",
3103 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3108 if (!gfc_type_is_extensible (b
->ts
.u
.derived
))
3110 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3111 "must be of an extensible type",
3112 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3122 gfc_check_scale (gfc_expr
*x
, gfc_expr
*i
)
3124 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
3127 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
3135 gfc_check_scan (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
3137 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
3140 if (type_check (y
, 1, BT_CHARACTER
) == FAILURE
)
3143 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
3146 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
3148 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
3149 "with KIND argument at %L",
3150 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
3153 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
3161 gfc_check_secnds (gfc_expr
*r
)
3163 if (type_check (r
, 0, BT_REAL
) == FAILURE
)
3166 if (kind_value_check (r
, 0, 4) == FAILURE
)
3169 if (scalar_check (r
, 0) == FAILURE
)
3177 gfc_check_selected_char_kind (gfc_expr
*name
)
3179 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3182 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3185 if (scalar_check (name
, 0) == FAILURE
)
3193 gfc_check_selected_int_kind (gfc_expr
*r
)
3195 if (type_check (r
, 0, BT_INTEGER
) == FAILURE
)
3198 if (scalar_check (r
, 0) == FAILURE
)
3206 gfc_check_selected_real_kind (gfc_expr
*p
, gfc_expr
*r
, gfc_expr
*radix
)
3208 if (p
== NULL
&& r
== NULL
3209 && gfc_notify_std (GFC_STD_F2008
, "Fortran 2008: SELECTED_REAL_KIND with"
3210 " neither 'P' nor 'R' argument at %L",
3211 gfc_current_intrinsic_where
) == FAILURE
)
3216 if (type_check (p
, 0, BT_INTEGER
) == FAILURE
)
3219 if (scalar_check (p
, 0) == FAILURE
)
3225 if (type_check (r
, 1, BT_INTEGER
) == FAILURE
)
3228 if (scalar_check (r
, 1) == FAILURE
)
3234 if (type_check (radix
, 1, BT_INTEGER
) == FAILURE
)
3237 if (scalar_check (radix
, 1) == FAILURE
)
3240 if (gfc_notify_std (GFC_STD_F2008
, "Fortran 2008: '%s' intrinsic with "
3241 "RADIX argument at %L", gfc_current_intrinsic
,
3242 &radix
->where
) == FAILURE
)
3251 gfc_check_set_exponent (gfc_expr
*x
, gfc_expr
*i
)
3253 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
3256 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
3264 gfc_check_shape (gfc_expr
*source
, gfc_expr
*kind
)
3268 if (source
->rank
== 0 || source
->expr_type
!= EXPR_VARIABLE
)
3271 ar
= gfc_find_array_ref (source
);
3273 if (ar
->as
&& ar
->as
->type
== AS_ASSUMED_SIZE
&& ar
->type
== AR_FULL
)
3275 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
3276 "an assumed size array", &source
->where
);
3280 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
3282 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
3283 "with KIND argument at %L",
3284 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
3292 gfc_check_shift (gfc_expr
*i
, gfc_expr
*shift
)
3294 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
3297 if (type_check (shift
, 0, BT_INTEGER
) == FAILURE
)
3300 if (nonnegative_check ("SHIFT", shift
) == FAILURE
)
3303 if (less_than_bitsize1 ("I", i
, "SHIFT", shift
, true) == FAILURE
)
3311 gfc_check_sign (gfc_expr
*a
, gfc_expr
*b
)
3313 if (int_or_real_check (a
, 0) == FAILURE
)
3316 if (same_type_check (a
, 0, b
, 1) == FAILURE
)
3324 gfc_check_size (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
3326 if (array_check (array
, 0) == FAILURE
)
3329 if (dim_check (dim
, 1, true) == FAILURE
)
3332 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
3335 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
3337 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
3338 "with KIND argument at %L",
3339 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
3348 gfc_check_sizeof (gfc_expr
*arg ATTRIBUTE_UNUSED
)
3355 gfc_check_c_sizeof (gfc_expr
*arg
)
3357 if (verify_c_interop (&arg
->ts
) != SUCCESS
)
3359 gfc_error ("'%s' argument of '%s' intrinsic at %L must be be an "
3360 "interoperable data entity",
3361 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3370 gfc_check_sleep_sub (gfc_expr
*seconds
)
3372 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
3375 if (scalar_check (seconds
, 0) == FAILURE
)
3382 gfc_check_sngl (gfc_expr
*a
)
3384 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
3387 if ((a
->ts
.kind
!= gfc_default_double_kind
)
3388 && gfc_notify_std (GFC_STD_GNU
, "GNU extension: non double precision "
3389 "REAL argument to %s intrinsic at %L",
3390 gfc_current_intrinsic
, &a
->where
) == FAILURE
)
3397 gfc_check_spread (gfc_expr
*source
, gfc_expr
*dim
, gfc_expr
*ncopies
)
3399 if (source
->rank
>= GFC_MAX_DIMENSIONS
)
3401 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
3402 "than rank %d", gfc_current_intrinsic_arg
[0]->name
,
3403 gfc_current_intrinsic
, &source
->where
, GFC_MAX_DIMENSIONS
);
3411 if (dim_check (dim
, 1, false) == FAILURE
)
3414 /* dim_rank_check() does not apply here. */
3416 && dim
->expr_type
== EXPR_CONSTANT
3417 && (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
3418 || mpz_cmp_ui (dim
->value
.integer
, source
->rank
+ 1) > 0))
3420 gfc_error ("'%s' argument of '%s' intrinsic at %L is not a valid "
3421 "dimension index", gfc_current_intrinsic_arg
[1]->name
,
3422 gfc_current_intrinsic
, &dim
->where
);
3426 if (type_check (ncopies
, 2, BT_INTEGER
) == FAILURE
)
3429 if (scalar_check (ncopies
, 2) == FAILURE
)
3436 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
3440 gfc_check_fgetputc_sub (gfc_expr
*unit
, gfc_expr
*c
, gfc_expr
*status
)
3442 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3445 if (scalar_check (unit
, 0) == FAILURE
)
3448 if (type_check (c
, 1, BT_CHARACTER
) == FAILURE
)
3450 if (kind_value_check (c
, 1, gfc_default_character_kind
) == FAILURE
)
3456 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
3457 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
3458 || scalar_check (status
, 2) == FAILURE
)
3466 gfc_check_fgetputc (gfc_expr
*unit
, gfc_expr
*c
)
3468 return gfc_check_fgetputc_sub (unit
, c
, NULL
);
3473 gfc_check_fgetput_sub (gfc_expr
*c
, gfc_expr
*status
)
3475 if (type_check (c
, 0, BT_CHARACTER
) == FAILURE
)
3477 if (kind_value_check (c
, 0, gfc_default_character_kind
) == FAILURE
)
3483 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
3484 || kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
3485 || scalar_check (status
, 1) == FAILURE
)
3493 gfc_check_fgetput (gfc_expr
*c
)
3495 return gfc_check_fgetput_sub (c
, NULL
);
3500 gfc_check_fseek_sub (gfc_expr
*unit
, gfc_expr
*offset
, gfc_expr
*whence
, gfc_expr
*status
)
3502 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3505 if (scalar_check (unit
, 0) == FAILURE
)
3508 if (type_check (offset
, 1, BT_INTEGER
) == FAILURE
)
3511 if (scalar_check (offset
, 1) == FAILURE
)
3514 if (type_check (whence
, 2, BT_INTEGER
) == FAILURE
)
3517 if (scalar_check (whence
, 2) == FAILURE
)
3523 if (type_check (status
, 3, BT_INTEGER
) == FAILURE
)
3526 if (kind_value_check (status
, 3, 4) == FAILURE
)
3529 if (scalar_check (status
, 3) == FAILURE
)
3538 gfc_check_fstat (gfc_expr
*unit
, gfc_expr
*array
)
3540 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3543 if (scalar_check (unit
, 0) == FAILURE
)
3546 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3547 || kind_value_check (unit
, 0, gfc_default_integer_kind
) == FAILURE
)
3550 if (array_check (array
, 1) == FAILURE
)
3558 gfc_check_fstat_sub (gfc_expr
*unit
, gfc_expr
*array
, gfc_expr
*status
)
3560 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3563 if (scalar_check (unit
, 0) == FAILURE
)
3566 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3567 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3570 if (array_check (array
, 1) == FAILURE
)
3576 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
3577 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
3580 if (scalar_check (status
, 2) == FAILURE
)
3588 gfc_check_ftell (gfc_expr
*unit
)
3590 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3593 if (scalar_check (unit
, 0) == FAILURE
)
3601 gfc_check_ftell_sub (gfc_expr
*unit
, gfc_expr
*offset
)
3603 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3606 if (scalar_check (unit
, 0) == FAILURE
)
3609 if (type_check (offset
, 1, BT_INTEGER
) == FAILURE
)
3612 if (scalar_check (offset
, 1) == FAILURE
)
3620 gfc_check_stat (gfc_expr
*name
, gfc_expr
*array
)
3622 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3624 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3627 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3628 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3631 if (array_check (array
, 1) == FAILURE
)
3639 gfc_check_stat_sub (gfc_expr
*name
, gfc_expr
*array
, gfc_expr
*status
)
3641 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3643 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3646 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3647 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3650 if (array_check (array
, 1) == FAILURE
)
3656 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
3657 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3660 if (scalar_check (status
, 2) == FAILURE
)
3668 gfc_check_image_index (gfc_expr
*coarray
, gfc_expr
*sub
)
3670 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
3672 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
3676 if (coarray_check (coarray
, 0) == FAILURE
)
3681 gfc_error ("%s argument to IMAGE_INDEX must be a rank one array at %L",
3682 gfc_current_intrinsic_arg
[1]->name
, &sub
->where
);
3691 gfc_check_this_image (gfc_expr
*coarray
, gfc_expr
*dim
)
3693 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
3695 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
3699 if (dim
!= NULL
&& coarray
== NULL
)
3701 gfc_error ("DIM argument without ARRAY argument not allowed for THIS_IMAGE "
3702 "intrinsic at %L", &dim
->where
);
3706 if (coarray
== NULL
)
3709 if (coarray_check (coarray
, 0) == FAILURE
)
3714 if (dim_check (dim
, 1, false) == FAILURE
)
3717 if (dim_corank_check (dim
, coarray
) == FAILURE
)
3726 gfc_check_transfer (gfc_expr
*source ATTRIBUTE_UNUSED
,
3727 gfc_expr
*mold ATTRIBUTE_UNUSED
, gfc_expr
*size
)
3729 if (mold
->ts
.type
== BT_HOLLERITH
)
3731 gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
3732 &mold
->where
, gfc_basic_typename (BT_HOLLERITH
));
3738 if (type_check (size
, 2, BT_INTEGER
) == FAILURE
)
3741 if (scalar_check (size
, 2) == FAILURE
)
3744 if (nonoptional_check (size
, 2) == FAILURE
)
3753 gfc_check_transpose (gfc_expr
*matrix
)
3755 if (rank_check (matrix
, 0, 2) == FAILURE
)
3763 gfc_check_ubound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
3765 if (array_check (array
, 0) == FAILURE
)
3768 if (dim_check (dim
, 1, false) == FAILURE
)
3771 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
3774 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
3776 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
3777 "with KIND argument at %L",
3778 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
3786 gfc_check_ucobound (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*kind
)
3788 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
3790 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
3794 if (coarray_check (coarray
, 0) == FAILURE
)
3799 if (dim_check (dim
, 1, false) == FAILURE
)
3802 if (dim_corank_check (dim
, coarray
) == FAILURE
)
3806 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
3814 gfc_check_unpack (gfc_expr
*vector
, gfc_expr
*mask
, gfc_expr
*field
)
3818 if (rank_check (vector
, 0, 1) == FAILURE
)
3821 if (array_check (mask
, 1) == FAILURE
)
3824 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
3827 if (same_type_check (vector
, 0, field
, 2) == FAILURE
)
3830 if (mask
->expr_type
== EXPR_ARRAY
3831 && gfc_array_size (vector
, &vector_size
) == SUCCESS
)
3833 int mask_true_count
= 0;
3834 gfc_constructor
*mask_ctor
;
3835 mask_ctor
= gfc_constructor_first (mask
->value
.constructor
);
3838 if (mask_ctor
->expr
->expr_type
!= EXPR_CONSTANT
)
3840 mask_true_count
= 0;
3844 if (mask_ctor
->expr
->value
.logical
)
3847 mask_ctor
= gfc_constructor_next (mask_ctor
);
3850 if (mpz_get_si (vector_size
) < mask_true_count
)
3852 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
3853 "provide at least as many elements as there "
3854 "are .TRUE. values in '%s' (%ld/%d)",
3855 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3856 &vector
->where
, gfc_current_intrinsic_arg
[1]->name
,
3857 mpz_get_si (vector_size
), mask_true_count
);
3861 mpz_clear (vector_size
);
3864 if (mask
->rank
!= field
->rank
&& field
->rank
!= 0)
3866 gfc_error ("'%s' argument of '%s' intrinsic at %L must have "
3867 "the same rank as '%s' or be a scalar",
3868 gfc_current_intrinsic_arg
[2]->name
, gfc_current_intrinsic
,
3869 &field
->where
, gfc_current_intrinsic_arg
[1]->name
);
3873 if (mask
->rank
== field
->rank
)
3876 for (i
= 0; i
< field
->rank
; i
++)
3877 if (! identical_dimen_shape (mask
, i
, field
, i
))
3879 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L "
3880 "must have identical shape.",
3881 gfc_current_intrinsic_arg
[2]->name
,
3882 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3892 gfc_check_verify (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
3894 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
3897 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
3900 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
3903 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
3905 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
3906 "with KIND argument at %L",
3907 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
3915 gfc_check_trim (gfc_expr
*x
)
3917 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
3920 if (scalar_check (x
, 0) == FAILURE
)
3928 gfc_check_ttynam (gfc_expr
*unit
)
3930 if (scalar_check (unit
, 0) == FAILURE
)
3933 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3940 /* Common check function for the half a dozen intrinsics that have a
3941 single real argument. */
3944 gfc_check_x (gfc_expr
*x
)
3946 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
3953 /************* Check functions for intrinsic subroutines *************/
3956 gfc_check_cpu_time (gfc_expr
*time
)
3958 if (scalar_check (time
, 0) == FAILURE
)
3961 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
3964 if (variable_check (time
, 0, false) == FAILURE
)
3972 gfc_check_date_and_time (gfc_expr
*date
, gfc_expr
*time
,
3973 gfc_expr
*zone
, gfc_expr
*values
)
3977 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
3979 if (kind_value_check (date
, 0, gfc_default_character_kind
) == FAILURE
)
3981 if (scalar_check (date
, 0) == FAILURE
)
3983 if (variable_check (date
, 0, false) == FAILURE
)
3989 if (type_check (time
, 1, BT_CHARACTER
) == FAILURE
)
3991 if (kind_value_check (time
, 1, gfc_default_character_kind
) == FAILURE
)
3993 if (scalar_check (time
, 1) == FAILURE
)
3995 if (variable_check (time
, 1, false) == FAILURE
)
4001 if (type_check (zone
, 2, BT_CHARACTER
) == FAILURE
)
4003 if (kind_value_check (zone
, 2, gfc_default_character_kind
) == FAILURE
)
4005 if (scalar_check (zone
, 2) == FAILURE
)
4007 if (variable_check (zone
, 2, false) == FAILURE
)
4013 if (type_check (values
, 3, BT_INTEGER
) == FAILURE
)
4015 if (array_check (values
, 3) == FAILURE
)
4017 if (rank_check (values
, 3, 1) == FAILURE
)
4019 if (variable_check (values
, 3, false) == FAILURE
)
4028 gfc_check_mvbits (gfc_expr
*from
, gfc_expr
*frompos
, gfc_expr
*len
,
4029 gfc_expr
*to
, gfc_expr
*topos
)
4031 if (type_check (from
, 0, BT_INTEGER
) == FAILURE
)
4034 if (type_check (frompos
, 1, BT_INTEGER
) == FAILURE
)
4037 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
4040 if (same_type_check (from
, 0, to
, 3) == FAILURE
)
4043 if (variable_check (to
, 3, false) == FAILURE
)
4046 if (type_check (topos
, 4, BT_INTEGER
) == FAILURE
)
4049 if (nonnegative_check ("frompos", frompos
) == FAILURE
)
4052 if (nonnegative_check ("topos", topos
) == FAILURE
)
4055 if (nonnegative_check ("len", len
) == FAILURE
)
4058 if (less_than_bitsize2 ("from", from
, "frompos", frompos
, "len", len
)
4062 if (less_than_bitsize2 ("to", to
, "topos", topos
, "len", len
) == FAILURE
)
4070 gfc_check_random_number (gfc_expr
*harvest
)
4072 if (type_check (harvest
, 0, BT_REAL
) == FAILURE
)
4075 if (variable_check (harvest
, 0, false) == FAILURE
)
4083 gfc_check_random_seed (gfc_expr
*size
, gfc_expr
*put
, gfc_expr
*get
)
4085 unsigned int nargs
= 0, kiss_size
;
4086 locus
*where
= NULL
;
4087 mpz_t put_size
, get_size
;
4088 bool have_gfc_real_16
; /* Try and mimic HAVE_GFC_REAL_16 in libgfortran. */
4090 have_gfc_real_16
= gfc_validate_kind (BT_REAL
, 16, true) != -1;
4092 /* Keep the number of bytes in sync with kiss_size in
4093 libgfortran/intrinsics/random.c. */
4094 kiss_size
= (have_gfc_real_16
? 48 : 32) / gfc_default_integer_kind
;
4098 if (size
->expr_type
!= EXPR_VARIABLE
4099 || !size
->symtree
->n
.sym
->attr
.optional
)
4102 if (scalar_check (size
, 0) == FAILURE
)
4105 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
4108 if (variable_check (size
, 0, false) == FAILURE
)
4111 if (kind_value_check (size
, 0, gfc_default_integer_kind
) == FAILURE
)
4117 if (put
->expr_type
!= EXPR_VARIABLE
4118 || !put
->symtree
->n
.sym
->attr
.optional
)
4121 where
= &put
->where
;
4124 if (array_check (put
, 1) == FAILURE
)
4127 if (rank_check (put
, 1, 1) == FAILURE
)
4130 if (type_check (put
, 1, BT_INTEGER
) == FAILURE
)
4133 if (kind_value_check (put
, 1, gfc_default_integer_kind
) == FAILURE
)
4136 if (gfc_array_size (put
, &put_size
) == SUCCESS
4137 && mpz_get_ui (put_size
) < kiss_size
)
4138 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
4139 "too small (%i/%i)",
4140 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
4141 where
, (int) mpz_get_ui (put_size
), kiss_size
);
4146 if (get
->expr_type
!= EXPR_VARIABLE
4147 || !get
->symtree
->n
.sym
->attr
.optional
)
4150 where
= &get
->where
;
4153 if (array_check (get
, 2) == FAILURE
)
4156 if (rank_check (get
, 2, 1) == FAILURE
)
4159 if (type_check (get
, 2, BT_INTEGER
) == FAILURE
)
4162 if (variable_check (get
, 2, false) == FAILURE
)
4165 if (kind_value_check (get
, 2, gfc_default_integer_kind
) == FAILURE
)
4168 if (gfc_array_size (get
, &get_size
) == SUCCESS
4169 && mpz_get_ui (get_size
) < kiss_size
)
4170 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
4171 "too small (%i/%i)",
4172 gfc_current_intrinsic_arg
[2]->name
, gfc_current_intrinsic
,
4173 where
, (int) mpz_get_ui (get_size
), kiss_size
);
4176 /* RANDOM_SEED may not have more than one non-optional argument. */
4178 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
, where
);
4185 gfc_check_second_sub (gfc_expr
*time
)
4187 if (scalar_check (time
, 0) == FAILURE
)
4190 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
4193 if (kind_value_check(time
, 0, 4) == FAILURE
)
4200 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
4201 count, count_rate, and count_max are all optional arguments */
4204 gfc_check_system_clock (gfc_expr
*count
, gfc_expr
*count_rate
,
4205 gfc_expr
*count_max
)
4209 if (scalar_check (count
, 0) == FAILURE
)
4212 if (type_check (count
, 0, BT_INTEGER
) == FAILURE
)
4215 if (variable_check (count
, 0, false) == FAILURE
)
4219 if (count_rate
!= NULL
)
4221 if (scalar_check (count_rate
, 1) == FAILURE
)
4224 if (type_check (count_rate
, 1, BT_INTEGER
) == FAILURE
)
4227 if (variable_check (count_rate
, 1, false) == FAILURE
)
4231 && same_type_check (count
, 0, count_rate
, 1) == FAILURE
)
4236 if (count_max
!= NULL
)
4238 if (scalar_check (count_max
, 2) == FAILURE
)
4241 if (type_check (count_max
, 2, BT_INTEGER
) == FAILURE
)
4244 if (variable_check (count_max
, 2, false) == FAILURE
)
4248 && same_type_check (count
, 0, count_max
, 2) == FAILURE
)
4251 if (count_rate
!= NULL
4252 && same_type_check (count_rate
, 1, count_max
, 2) == FAILURE
)
4261 gfc_check_irand (gfc_expr
*x
)
4266 if (scalar_check (x
, 0) == FAILURE
)
4269 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
4272 if (kind_value_check(x
, 0, 4) == FAILURE
)
4280 gfc_check_alarm_sub (gfc_expr
*seconds
, gfc_expr
*handler
, gfc_expr
*status
)
4282 if (scalar_check (seconds
, 0) == FAILURE
)
4284 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
4287 if (int_or_proc_check (handler
, 1) == FAILURE
)
4289 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
4295 if (scalar_check (status
, 2) == FAILURE
)
4297 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
4299 if (kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
4307 gfc_check_rand (gfc_expr
*x
)
4312 if (scalar_check (x
, 0) == FAILURE
)
4315 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
4318 if (kind_value_check(x
, 0, 4) == FAILURE
)
4326 gfc_check_srand (gfc_expr
*x
)
4328 if (scalar_check (x
, 0) == FAILURE
)
4331 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
4334 if (kind_value_check(x
, 0, 4) == FAILURE
)
4342 gfc_check_ctime_sub (gfc_expr
*time
, gfc_expr
*result
)
4344 if (scalar_check (time
, 0) == FAILURE
)
4346 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
4349 if (type_check (result
, 1, BT_CHARACTER
) == FAILURE
)
4351 if (kind_value_check (result
, 1, gfc_default_character_kind
) == FAILURE
)
4359 gfc_check_dtime_etime (gfc_expr
*x
)
4361 if (array_check (x
, 0) == FAILURE
)
4364 if (rank_check (x
, 0, 1) == FAILURE
)
4367 if (variable_check (x
, 0, false) == FAILURE
)
4370 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
4373 if (kind_value_check(x
, 0, 4) == FAILURE
)
4381 gfc_check_dtime_etime_sub (gfc_expr
*values
, gfc_expr
*time
)
4383 if (array_check (values
, 0) == FAILURE
)
4386 if (rank_check (values
, 0, 1) == FAILURE
)
4389 if (variable_check (values
, 0, false) == FAILURE
)
4392 if (type_check (values
, 0, BT_REAL
) == FAILURE
)
4395 if (kind_value_check(values
, 0, 4) == FAILURE
)
4398 if (scalar_check (time
, 1) == FAILURE
)
4401 if (type_check (time
, 1, BT_REAL
) == FAILURE
)
4404 if (kind_value_check(time
, 1, 4) == FAILURE
)
4412 gfc_check_fdate_sub (gfc_expr
*date
)
4414 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
4416 if (kind_value_check (date
, 0, gfc_default_character_kind
) == FAILURE
)
4424 gfc_check_gerror (gfc_expr
*msg
)
4426 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
4428 if (kind_value_check (msg
, 0, gfc_default_character_kind
) == FAILURE
)
4436 gfc_check_getcwd_sub (gfc_expr
*cwd
, gfc_expr
*status
)
4438 if (type_check (cwd
, 0, BT_CHARACTER
) == FAILURE
)
4440 if (kind_value_check (cwd
, 0, gfc_default_character_kind
) == FAILURE
)
4446 if (scalar_check (status
, 1) == FAILURE
)
4449 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
4457 gfc_check_getarg (gfc_expr
*pos
, gfc_expr
*value
)
4459 if (type_check (pos
, 0, BT_INTEGER
) == FAILURE
)
4462 if (pos
->ts
.kind
> gfc_default_integer_kind
)
4464 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
4465 "not wider than the default kind (%d)",
4466 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4467 &pos
->where
, gfc_default_integer_kind
);
4471 if (type_check (value
, 1, BT_CHARACTER
) == FAILURE
)
4473 if (kind_value_check (value
, 1, gfc_default_character_kind
) == FAILURE
)
4481 gfc_check_getlog (gfc_expr
*msg
)
4483 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
4485 if (kind_value_check (msg
, 0, gfc_default_character_kind
) == FAILURE
)
4493 gfc_check_exit (gfc_expr
*status
)
4498 if (type_check (status
, 0, BT_INTEGER
) == FAILURE
)
4501 if (scalar_check (status
, 0) == FAILURE
)
4509 gfc_check_flush (gfc_expr
*unit
)
4514 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
4517 if (scalar_check (unit
, 0) == FAILURE
)
4525 gfc_check_free (gfc_expr
*i
)
4527 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
4530 if (scalar_check (i
, 0) == FAILURE
)
4538 gfc_check_hostnm (gfc_expr
*name
)
4540 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
4542 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
4550 gfc_check_hostnm_sub (gfc_expr
*name
, gfc_expr
*status
)
4552 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
4554 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
4560 if (scalar_check (status
, 1) == FAILURE
)
4563 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
4571 gfc_check_itime_idate (gfc_expr
*values
)
4573 if (array_check (values
, 0) == FAILURE
)
4576 if (rank_check (values
, 0, 1) == FAILURE
)
4579 if (variable_check (values
, 0, false) == FAILURE
)
4582 if (type_check (values
, 0, BT_INTEGER
) == FAILURE
)
4585 if (kind_value_check(values
, 0, gfc_default_integer_kind
) == FAILURE
)
4593 gfc_check_ltime_gmtime (gfc_expr
*time
, gfc_expr
*values
)
4595 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
4598 if (kind_value_check(time
, 0, gfc_default_integer_kind
) == FAILURE
)
4601 if (scalar_check (time
, 0) == FAILURE
)
4604 if (array_check (values
, 1) == FAILURE
)
4607 if (rank_check (values
, 1, 1) == FAILURE
)
4610 if (variable_check (values
, 1, false) == FAILURE
)
4613 if (type_check (values
, 1, BT_INTEGER
) == FAILURE
)
4616 if (kind_value_check(values
, 1, gfc_default_integer_kind
) == FAILURE
)
4624 gfc_check_ttynam_sub (gfc_expr
*unit
, gfc_expr
*name
)
4626 if (scalar_check (unit
, 0) == FAILURE
)
4629 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
4632 if (type_check (name
, 1, BT_CHARACTER
) == FAILURE
)
4634 if (kind_value_check (name
, 1, gfc_default_character_kind
) == FAILURE
)
4642 gfc_check_isatty (gfc_expr
*unit
)
4647 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
4650 if (scalar_check (unit
, 0) == FAILURE
)
4658 gfc_check_isnan (gfc_expr
*x
)
4660 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
4668 gfc_check_perror (gfc_expr
*string
)
4670 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
)
4672 if (kind_value_check (string
, 0, gfc_default_character_kind
) == FAILURE
)
4680 gfc_check_umask (gfc_expr
*mask
)
4682 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
4685 if (scalar_check (mask
, 0) == FAILURE
)
4693 gfc_check_umask_sub (gfc_expr
*mask
, gfc_expr
*old
)
4695 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
4698 if (scalar_check (mask
, 0) == FAILURE
)
4704 if (scalar_check (old
, 1) == FAILURE
)
4707 if (type_check (old
, 1, BT_INTEGER
) == FAILURE
)
4715 gfc_check_unlink (gfc_expr
*name
)
4717 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
4719 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
4727 gfc_check_unlink_sub (gfc_expr
*name
, gfc_expr
*status
)
4729 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
4731 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
4737 if (scalar_check (status
, 1) == FAILURE
)
4740 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
4748 gfc_check_signal (gfc_expr
*number
, gfc_expr
*handler
)
4750 if (scalar_check (number
, 0) == FAILURE
)
4752 if (type_check (number
, 0, BT_INTEGER
) == FAILURE
)
4755 if (int_or_proc_check (handler
, 1) == FAILURE
)
4757 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
4765 gfc_check_signal_sub (gfc_expr
*number
, gfc_expr
*handler
, gfc_expr
*status
)
4767 if (scalar_check (number
, 0) == FAILURE
)
4769 if (type_check (number
, 0, BT_INTEGER
) == FAILURE
)
4772 if (int_or_proc_check (handler
, 1) == FAILURE
)
4774 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
4780 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
4782 if (scalar_check (status
, 2) == FAILURE
)
4790 gfc_check_system_sub (gfc_expr
*cmd
, gfc_expr
*status
)
4792 if (type_check (cmd
, 0, BT_CHARACTER
) == FAILURE
)
4794 if (kind_value_check (cmd
, 0, gfc_default_character_kind
) == FAILURE
)
4797 if (scalar_check (status
, 1) == FAILURE
)
4800 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
4803 if (kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
)
4810 /* This is used for the GNU intrinsics AND, OR and XOR. */
4812 gfc_check_and (gfc_expr
*i
, gfc_expr
*j
)
4814 if (i
->ts
.type
!= BT_INTEGER
&& i
->ts
.type
!= BT_LOGICAL
)
4816 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
4817 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
4818 gfc_current_intrinsic
, &i
->where
);
4822 if (j
->ts
.type
!= BT_INTEGER
&& j
->ts
.type
!= BT_LOGICAL
)
4824 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
4825 "or LOGICAL", gfc_current_intrinsic_arg
[1]->name
,
4826 gfc_current_intrinsic
, &j
->where
);
4830 if (i
->ts
.type
!= j
->ts
.type
)
4832 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
4833 "have the same type", gfc_current_intrinsic_arg
[0]->name
,
4834 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
4839 if (scalar_check (i
, 0) == FAILURE
)
4842 if (scalar_check (j
, 1) == FAILURE
)
4850 gfc_check_storage_size (gfc_expr
*a ATTRIBUTE_UNUSED
, gfc_expr
*kind
)
4855 if (type_check (kind
, 1, BT_INTEGER
) == FAILURE
)
4858 if (scalar_check (kind
, 1) == FAILURE
)
4861 if (kind
->expr_type
!= EXPR_CONSTANT
)
4863 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
4864 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,