2 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
4 Free Software Foundation, Inc.
5 Contributed by Andy Vaught & Katherine Holcomb
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify it under
10 the terms of the GNU General Public License as published by the Free
11 Software Foundation; either version 3, or (at your option) any later
14 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15 WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
24 /* These functions check to see if an argument list is compatible with
25 a particular intrinsic function or subroutine. Presence of
26 required arguments has already been established, the argument list
27 has been sorted into the right order and has NULL arguments in the
28 correct places for missing optional arguments. */
34 #include "intrinsic.h"
35 #include "constructor.h"
36 #include "target-memory.h"
39 /* Make sure an expression is a scalar. */
42 scalar_check (gfc_expr
*e
, int n
)
47 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a scalar",
48 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
55 /* Check the type of an expression. */
58 type_check (gfc_expr
*e
, int n
, bt type
)
60 if (e
->ts
.type
== type
)
63 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
64 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
65 &e
->where
, gfc_basic_typename (type
));
71 /* Check that the expression is a numeric type. */
74 numeric_check (gfc_expr
*e
, int n
)
76 if (gfc_numeric_ts (&e
->ts
))
79 /* If the expression has not got a type, check if its namespace can
80 offer a default type. */
81 if ((e
->expr_type
== EXPR_VARIABLE
|| e
->expr_type
== EXPR_VARIABLE
)
82 && e
->symtree
->n
.sym
->ts
.type
== BT_UNKNOWN
83 && gfc_set_default_type (e
->symtree
->n
.sym
, 0,
84 e
->symtree
->n
.sym
->ns
) == SUCCESS
85 && gfc_numeric_ts (&e
->symtree
->n
.sym
->ts
))
87 e
->ts
= e
->symtree
->n
.sym
->ts
;
91 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a numeric type",
92 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
99 /* Check that an expression is integer or real. */
102 int_or_real_check (gfc_expr
*e
, int n
)
104 if (e
->ts
.type
!= BT_INTEGER
&& e
->ts
.type
!= BT_REAL
)
106 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
107 "or REAL", gfc_current_intrinsic_arg
[n
]->name
,
108 gfc_current_intrinsic
, &e
->where
);
116 /* Check that an expression is real or complex. */
119 real_or_complex_check (gfc_expr
*e
, int n
)
121 if (e
->ts
.type
!= BT_REAL
&& e
->ts
.type
!= BT_COMPLEX
)
123 gfc_error ("'%s' argument of '%s' intrinsic at %L must be REAL "
124 "or COMPLEX", gfc_current_intrinsic_arg
[n
]->name
,
125 gfc_current_intrinsic
, &e
->where
);
133 /* Check that an expression is INTEGER or PROCEDURE. */
136 int_or_proc_check (gfc_expr
*e
, int n
)
138 if (e
->ts
.type
!= BT_INTEGER
&& e
->ts
.type
!= BT_PROCEDURE
)
140 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
141 "or PROCEDURE", gfc_current_intrinsic_arg
[n
]->name
,
142 gfc_current_intrinsic
, &e
->where
);
150 /* Check that the expression is an optional constant integer
151 and that it specifies a valid kind for that type. */
154 kind_check (gfc_expr
*k
, int n
, bt type
)
161 if (type_check (k
, n
, BT_INTEGER
) == FAILURE
)
164 if (scalar_check (k
, n
) == FAILURE
)
167 if (gfc_check_init_expr (k
) != SUCCESS
)
169 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
170 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
175 if (gfc_extract_int (k
, &kind
) != NULL
176 || gfc_validate_kind (type
, kind
, true) < 0)
178 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type
),
187 /* Make sure the expression is a double precision real. */
190 double_check (gfc_expr
*d
, int n
)
192 if (type_check (d
, n
, BT_REAL
) == FAILURE
)
195 if (d
->ts
.kind
!= gfc_default_double_kind
)
197 gfc_error ("'%s' argument of '%s' intrinsic at %L must be double "
198 "precision", gfc_current_intrinsic_arg
[n
]->name
,
199 gfc_current_intrinsic
, &d
->where
);
208 coarray_check (gfc_expr
*e
, int n
)
210 if (e
->ts
.type
== BT_CLASS
&& gfc_expr_attr (e
).class_ok
211 && CLASS_DATA (e
)->attr
.codimension
212 && CLASS_DATA (e
)->as
->corank
)
214 gfc_add_class_array_ref (e
);
218 if (!gfc_is_coarray (e
))
220 gfc_error ("Expected coarray variable as '%s' argument to the %s "
221 "intrinsic at %L", gfc_current_intrinsic_arg
[n
]->name
,
222 gfc_current_intrinsic
, &e
->where
);
230 /* Make sure the expression is a logical array. */
233 logical_array_check (gfc_expr
*array
, int n
)
235 if (array
->ts
.type
!= BT_LOGICAL
|| array
->rank
== 0)
237 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a logical "
238 "array", gfc_current_intrinsic_arg
[n
]->name
,
239 gfc_current_intrinsic
, &array
->where
);
247 /* Make sure an expression is an array. */
250 array_check (gfc_expr
*e
, int n
)
252 if (e
->ts
.type
== BT_CLASS
&& gfc_expr_attr (e
).class_ok
253 && CLASS_DATA (e
)->attr
.dimension
254 && CLASS_DATA (e
)->as
->rank
)
256 gfc_add_class_array_ref (e
);
263 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array",
264 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
271 /* If expr is a constant, then check to ensure that it is greater than
275 nonnegative_check (const char *arg
, gfc_expr
*expr
)
279 if (expr
->expr_type
== EXPR_CONSTANT
)
281 gfc_extract_int (expr
, &i
);
284 gfc_error ("'%s' at %L must be nonnegative", arg
, &expr
->where
);
293 /* If expr2 is constant, then check that the value is less than
294 (less than or equal to, if 'or_equal' is true) bit_size(expr1). */
297 less_than_bitsize1 (const char *arg1
, gfc_expr
*expr1
, const char *arg2
,
298 gfc_expr
*expr2
, bool or_equal
)
302 if (expr2
->expr_type
== EXPR_CONSTANT
)
304 gfc_extract_int (expr2
, &i2
);
305 i3
= gfc_validate_kind (BT_INTEGER
, expr1
->ts
.kind
, false);
307 /* For ISHFT[C], check that |shift| <= bit_size(i). */
313 if (i2
> gfc_integer_kinds
[i3
].bit_size
)
315 gfc_error ("The absolute value of SHIFT at %L must be less "
316 "than or equal to BIT_SIZE('%s')",
317 &expr2
->where
, arg1
);
324 if (i2
> gfc_integer_kinds
[i3
].bit_size
)
326 gfc_error ("'%s' at %L must be less than "
327 "or equal to BIT_SIZE('%s')",
328 arg2
, &expr2
->where
, arg1
);
334 if (i2
>= gfc_integer_kinds
[i3
].bit_size
)
336 gfc_error ("'%s' at %L must be less than BIT_SIZE('%s')",
337 arg2
, &expr2
->where
, arg1
);
347 /* If expr is constant, then check that the value is less than or equal
348 to the bit_size of the kind k. */
351 less_than_bitsizekind (const char *arg
, gfc_expr
*expr
, int k
)
355 if (expr
->expr_type
!= EXPR_CONSTANT
)
358 i
= gfc_validate_kind (BT_INTEGER
, k
, false);
359 gfc_extract_int (expr
, &val
);
361 if (val
> gfc_integer_kinds
[i
].bit_size
)
363 gfc_error ("'%s' at %L must be less than or equal to the BIT_SIZE of "
364 "INTEGER(KIND=%d)", arg
, &expr
->where
, k
);
372 /* If expr2 and expr3 are constants, then check that the value is less than
373 or equal to bit_size(expr1). */
376 less_than_bitsize2 (const char *arg1
, gfc_expr
*expr1
, const char *arg2
,
377 gfc_expr
*expr2
, const char *arg3
, gfc_expr
*expr3
)
381 if (expr2
->expr_type
== EXPR_CONSTANT
&& expr3
->expr_type
== EXPR_CONSTANT
)
383 gfc_extract_int (expr2
, &i2
);
384 gfc_extract_int (expr3
, &i3
);
386 i3
= gfc_validate_kind (BT_INTEGER
, expr1
->ts
.kind
, false);
387 if (i2
> gfc_integer_kinds
[i3
].bit_size
)
389 gfc_error ("'%s + %s' at %L must be less than or equal "
391 arg2
, arg3
, &expr2
->where
, arg1
);
399 /* Make sure two expressions have the same type. */
402 same_type_check (gfc_expr
*e
, int n
, gfc_expr
*f
, int m
)
404 if (gfc_compare_types (&e
->ts
, &f
->ts
))
407 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same type "
408 "and kind as '%s'", gfc_current_intrinsic_arg
[m
]->name
,
409 gfc_current_intrinsic
, &f
->where
,
410 gfc_current_intrinsic_arg
[n
]->name
);
416 /* Make sure that an expression has a certain (nonzero) rank. */
419 rank_check (gfc_expr
*e
, int n
, int rank
)
424 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank %d",
425 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
432 /* Make sure a variable expression is not an optional dummy argument. */
435 nonoptional_check (gfc_expr
*e
, int n
)
437 if (e
->expr_type
== EXPR_VARIABLE
&& e
->symtree
->n
.sym
->attr
.optional
)
439 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
440 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
444 /* TODO: Recursive check on nonoptional variables? */
450 /* Check for ALLOCATABLE attribute. */
453 allocatable_check (gfc_expr
*e
, int n
)
455 symbol_attribute attr
;
457 attr
= gfc_variable_attr (e
, NULL
);
458 if (!attr
.allocatable
)
460 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
461 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
470 /* Check that an expression has a particular kind. */
473 kind_value_check (gfc_expr
*e
, int n
, int k
)
478 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of kind %d",
479 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
486 /* Make sure an expression is a variable. */
489 variable_check (gfc_expr
*e
, int n
, bool allow_proc
)
491 if (e
->expr_type
== EXPR_VARIABLE
492 && e
->symtree
->n
.sym
->attr
.intent
== INTENT_IN
493 && (gfc_current_intrinsic_arg
[n
]->intent
== INTENT_OUT
494 || gfc_current_intrinsic_arg
[n
]->intent
== INTENT_INOUT
))
497 bool pointer
= e
->symtree
->n
.sym
->ts
.type
== BT_CLASS
498 && CLASS_DATA (e
->symtree
->n
.sym
)
499 ? CLASS_DATA (e
->symtree
->n
.sym
)->attr
.class_pointer
500 : e
->symtree
->n
.sym
->attr
.pointer
;
502 for (ref
= e
->ref
; ref
; ref
= ref
->next
)
504 if (pointer
&& ref
->type
== REF_COMPONENT
)
506 if (ref
->type
== REF_COMPONENT
507 && ((ref
->u
.c
.component
->ts
.type
== BT_CLASS
508 && CLASS_DATA (ref
->u
.c
.component
)->attr
.class_pointer
)
509 || (ref
->u
.c
.component
->ts
.type
!= BT_CLASS
510 && ref
->u
.c
.component
->attr
.pointer
)))
516 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be "
517 "INTENT(IN)", gfc_current_intrinsic_arg
[n
]->name
,
518 gfc_current_intrinsic
, &e
->where
);
523 if (e
->expr_type
== EXPR_VARIABLE
524 && e
->symtree
->n
.sym
->attr
.flavor
!= FL_PARAMETER
525 && (allow_proc
|| !e
->symtree
->n
.sym
->attr
.function
))
528 if (e
->expr_type
== EXPR_VARIABLE
&& e
->symtree
->n
.sym
->attr
.function
529 && e
->symtree
->n
.sym
== e
->symtree
->n
.sym
->result
)
532 for (ns
= gfc_current_ns
; ns
; ns
= ns
->parent
)
533 if (ns
->proc_name
== e
->symtree
->n
.sym
)
537 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a variable",
538 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
, &e
->where
);
544 /* Check the common DIM parameter for correctness. */
547 dim_check (gfc_expr
*dim
, int n
, bool optional
)
552 if (type_check (dim
, n
, BT_INTEGER
) == FAILURE
)
555 if (scalar_check (dim
, n
) == FAILURE
)
558 if (!optional
&& nonoptional_check (dim
, n
) == FAILURE
)
565 /* If a coarray DIM parameter is a constant, make sure that it is greater than
566 zero and less than or equal to the corank of the given array. */
569 dim_corank_check (gfc_expr
*dim
, gfc_expr
*array
)
573 gcc_assert (array
->expr_type
== EXPR_VARIABLE
);
575 if (dim
->expr_type
!= EXPR_CONSTANT
)
578 if (array
->ts
.type
== BT_CLASS
)
581 corank
= gfc_get_corank (array
);
583 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
584 || mpz_cmp_ui (dim
->value
.integer
, corank
) > 0)
586 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
587 "codimension index", gfc_current_intrinsic
, &dim
->where
);
596 /* If a DIM parameter is a constant, make sure that it is greater than
597 zero and less than or equal to the rank of the given array. If
598 allow_assumed is zero then dim must be less than the rank of the array
599 for assumed size arrays. */
602 dim_rank_check (gfc_expr
*dim
, gfc_expr
*array
, int allow_assumed
)
610 if (dim
->expr_type
!= EXPR_CONSTANT
)
613 if (array
->ts
.type
== BT_CLASS
)
616 if (array
->expr_type
== EXPR_FUNCTION
&& array
->value
.function
.isym
617 && array
->value
.function
.isym
->id
== GFC_ISYM_SPREAD
)
618 rank
= array
->rank
+ 1;
622 if (array
->expr_type
== EXPR_VARIABLE
)
624 ar
= gfc_find_array_ref (array
);
625 if (ar
->as
->type
== AS_ASSUMED_SIZE
627 && ar
->type
!= AR_ELEMENT
628 && ar
->type
!= AR_SECTION
)
632 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
633 || mpz_cmp_ui (dim
->value
.integer
, rank
) > 0)
635 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
636 "dimension index", gfc_current_intrinsic
, &dim
->where
);
645 /* Compare the size of a along dimension ai with the size of b along
646 dimension bi, returning 0 if they are known not to be identical,
647 and 1 if they are identical, or if this cannot be determined. */
650 identical_dimen_shape (gfc_expr
*a
, int ai
, gfc_expr
*b
, int bi
)
652 mpz_t a_size
, b_size
;
655 gcc_assert (a
->rank
> ai
);
656 gcc_assert (b
->rank
> bi
);
660 if (gfc_array_dimen_size (a
, ai
, &a_size
) == SUCCESS
)
662 if (gfc_array_dimen_size (b
, bi
, &b_size
) == SUCCESS
)
664 if (mpz_cmp (a_size
, b_size
) != 0)
674 /* Calculate the length of a character variable, including substrings.
675 Strip away parentheses if necessary. Return -1 if no length could
679 gfc_var_strlen (const gfc_expr
*a
)
683 while (a
->expr_type
== EXPR_OP
&& a
->value
.op
.op
== INTRINSIC_PARENTHESES
)
686 for (ra
= a
->ref
; ra
!= NULL
&& ra
->type
!= REF_SUBSTRING
; ra
= ra
->next
)
693 if (ra
->u
.ss
.start
->expr_type
== EXPR_CONSTANT
694 && ra
->u
.ss
.end
->expr_type
== EXPR_CONSTANT
)
696 start_a
= mpz_get_si (ra
->u
.ss
.start
->value
.integer
);
697 end_a
= mpz_get_si (ra
->u
.ss
.end
->value
.integer
);
698 return end_a
- start_a
+ 1;
700 else if (gfc_dep_compare_expr (ra
->u
.ss
.start
, ra
->u
.ss
.end
) == 0)
706 if (a
->ts
.u
.cl
&& a
->ts
.u
.cl
->length
707 && a
->ts
.u
.cl
->length
->expr_type
== EXPR_CONSTANT
)
708 return mpz_get_si (a
->ts
.u
.cl
->length
->value
.integer
);
709 else if (a
->expr_type
== EXPR_CONSTANT
710 && (a
->ts
.u
.cl
== NULL
|| a
->ts
.u
.cl
->length
== NULL
))
711 return a
->value
.character
.length
;
717 /* Check whether two character expressions have the same length;
718 returns SUCCESS if they have or if the length cannot be determined,
719 otherwise return FAILURE and raise a gfc_error. */
722 gfc_check_same_strlen (const gfc_expr
*a
, const gfc_expr
*b
, const char *name
)
726 len_a
= gfc_var_strlen(a
);
727 len_b
= gfc_var_strlen(b
);
729 if (len_a
== -1 || len_b
== -1 || len_a
== len_b
)
733 gfc_error ("Unequal character lengths (%ld/%ld) in %s at %L",
734 len_a
, len_b
, name
, &a
->where
);
740 /***** Check functions *****/
742 /* Check subroutine suitable for intrinsics taking a real argument and
743 a kind argument for the result. */
746 check_a_kind (gfc_expr
*a
, gfc_expr
*kind
, bt type
)
748 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
750 if (kind_check (kind
, 1, type
) == FAILURE
)
757 /* Check subroutine suitable for ceiling, floor and nint. */
760 gfc_check_a_ikind (gfc_expr
*a
, gfc_expr
*kind
)
762 return check_a_kind (a
, kind
, BT_INTEGER
);
766 /* Check subroutine suitable for aint, anint. */
769 gfc_check_a_xkind (gfc_expr
*a
, gfc_expr
*kind
)
771 return check_a_kind (a
, kind
, BT_REAL
);
776 gfc_check_abs (gfc_expr
*a
)
778 if (numeric_check (a
, 0) == FAILURE
)
786 gfc_check_achar (gfc_expr
*a
, gfc_expr
*kind
)
788 if (type_check (a
, 0, BT_INTEGER
) == FAILURE
)
790 if (kind_check (kind
, 1, BT_CHARACTER
) == FAILURE
)
798 gfc_check_access_func (gfc_expr
*name
, gfc_expr
*mode
)
800 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
801 || scalar_check (name
, 0) == FAILURE
)
803 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
806 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
807 || scalar_check (mode
, 1) == FAILURE
)
809 if (kind_value_check (mode
, 1, gfc_default_character_kind
) == FAILURE
)
817 gfc_check_all_any (gfc_expr
*mask
, gfc_expr
*dim
)
819 if (logical_array_check (mask
, 0) == FAILURE
)
822 if (dim_check (dim
, 1, false) == FAILURE
)
825 if (dim_rank_check (dim
, mask
, 0) == FAILURE
)
833 gfc_check_allocated (gfc_expr
*array
)
835 if (variable_check (array
, 0, false) == FAILURE
)
837 if (allocatable_check (array
, 0) == FAILURE
)
844 /* Common check function where the first argument must be real or
845 integer and the second argument must be the same as the first. */
848 gfc_check_a_p (gfc_expr
*a
, gfc_expr
*p
)
850 if (int_or_real_check (a
, 0) == FAILURE
)
853 if (a
->ts
.type
!= p
->ts
.type
)
855 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
856 "have the same type", gfc_current_intrinsic_arg
[0]->name
,
857 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
862 if (a
->ts
.kind
!= p
->ts
.kind
)
864 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
865 &p
->where
) == FAILURE
)
874 gfc_check_x_yd (gfc_expr
*x
, gfc_expr
*y
)
876 if (double_check (x
, 0) == FAILURE
|| double_check (y
, 1) == FAILURE
)
884 gfc_check_associated (gfc_expr
*pointer
, gfc_expr
*target
)
886 symbol_attribute attr1
, attr2
;
891 where
= &pointer
->where
;
893 if (pointer
->expr_type
== EXPR_VARIABLE
|| pointer
->expr_type
== EXPR_FUNCTION
)
894 attr1
= gfc_expr_attr (pointer
);
895 else if (pointer
->expr_type
== EXPR_NULL
)
898 gcc_assert (0); /* Pointer must be a variable or a function. */
900 if (!attr1
.pointer
&& !attr1
.proc_pointer
)
902 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
903 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
909 if (attr1
.pointer
&& gfc_is_coindexed (pointer
))
911 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
912 "coindexed", gfc_current_intrinsic_arg
[0]->name
,
913 gfc_current_intrinsic
, &pointer
->where
);
917 /* Target argument is optional. */
921 where
= &target
->where
;
922 if (target
->expr_type
== EXPR_NULL
)
925 if (target
->expr_type
== EXPR_VARIABLE
|| target
->expr_type
== EXPR_FUNCTION
)
926 attr2
= gfc_expr_attr (target
);
929 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
930 "or target VARIABLE or FUNCTION",
931 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
936 if (attr1
.pointer
&& !attr2
.pointer
&& !attr2
.target
)
938 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
939 "or a TARGET", gfc_current_intrinsic_arg
[1]->name
,
940 gfc_current_intrinsic
, &target
->where
);
945 if (attr1
.pointer
&& gfc_is_coindexed (target
))
947 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
948 "coindexed", gfc_current_intrinsic_arg
[1]->name
,
949 gfc_current_intrinsic
, &target
->where
);
954 if (same_type_check (pointer
, 0, target
, 1) == FAILURE
)
956 if (rank_check (target
, 0, pointer
->rank
) == FAILURE
)
958 if (target
->rank
> 0)
960 for (i
= 0; i
< target
->rank
; i
++)
961 if (target
->ref
->u
.ar
.dimen_type
[i
] == DIMEN_VECTOR
)
963 gfc_error ("Array section with a vector subscript at %L shall not "
964 "be the target of a pointer",
974 gfc_error ("NULL pointer at %L is not permitted as actual argument "
975 "of '%s' intrinsic function", where
, gfc_current_intrinsic
);
982 gfc_check_atan_2 (gfc_expr
*y
, gfc_expr
*x
)
984 /* gfc_notify_std would be a waste of time as the return value
985 is seemingly used only for the generic resolution. The error
986 will be: Too many arguments. */
987 if ((gfc_option
.allow_std
& GFC_STD_F2008
) == 0)
990 return gfc_check_atan2 (y
, x
);
995 gfc_check_atan2 (gfc_expr
*y
, gfc_expr
*x
)
997 if (type_check (y
, 0, BT_REAL
) == FAILURE
)
999 if (same_type_check (y
, 0, x
, 1) == FAILURE
)
1007 gfc_check_atomic (gfc_expr
*atom
, gfc_expr
*value
)
1009 if (!(atom
->ts
.type
== BT_INTEGER
&& atom
->ts
.kind
== gfc_atomic_int_kind
)
1010 && !(atom
->ts
.type
== BT_LOGICAL
1011 && atom
->ts
.kind
== gfc_atomic_logical_kind
))
1013 gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1014 "integer of ATOMIC_INT_KIND or a logical of "
1015 "ATOMIC_LOGICAL_KIND", &atom
->where
, gfc_current_intrinsic
);
1019 if (!gfc_expr_attr (atom
).codimension
)
1021 gfc_error ("ATOM argument at %L of the %s intrinsic function shall be a "
1022 "coarray or coindexed", &atom
->where
, gfc_current_intrinsic
);
1026 if (atom
->ts
.type
!= value
->ts
.type
)
1028 gfc_error ("ATOM and VALUE argument of the %s intrinsic function shall "
1029 "have the same type at %L", gfc_current_intrinsic
,
1039 gfc_check_atomic_def (gfc_expr
*atom
, gfc_expr
*value
)
1041 if (scalar_check (atom
, 0) == FAILURE
|| scalar_check (value
, 1) == FAILURE
)
1044 if (gfc_check_vardef_context (atom
, false, false, NULL
) == FAILURE
)
1046 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1047 "definable", gfc_current_intrinsic
, &atom
->where
);
1051 return gfc_check_atomic (atom
, value
);
1056 gfc_check_atomic_ref (gfc_expr
*value
, gfc_expr
*atom
)
1058 if (scalar_check (value
, 0) == FAILURE
|| scalar_check (atom
, 1) == FAILURE
)
1061 if (gfc_check_vardef_context (value
, false, false, NULL
) == FAILURE
)
1063 gfc_error ("VALUE argument of the %s intrinsic function at %L shall be "
1064 "definable", gfc_current_intrinsic
, &value
->where
);
1068 return gfc_check_atomic (atom
, value
);
1072 /* BESJN and BESYN functions. */
1075 gfc_check_besn (gfc_expr
*n
, gfc_expr
*x
)
1077 if (type_check (n
, 0, BT_INTEGER
) == FAILURE
)
1079 if (n
->expr_type
== EXPR_CONSTANT
)
1082 gfc_extract_int (n
, &i
);
1083 if (i
< 0 && gfc_notify_std (GFC_STD_GNU
, "Extension: Negative argument "
1084 "N at %L", &n
->where
) == FAILURE
)
1088 if (type_check (x
, 1, BT_REAL
) == FAILURE
)
1095 /* Transformational version of the Bessel JN and YN functions. */
1098 gfc_check_bessel_n2 (gfc_expr
*n1
, gfc_expr
*n2
, gfc_expr
*x
)
1100 if (type_check (n1
, 0, BT_INTEGER
) == FAILURE
)
1102 if (scalar_check (n1
, 0) == FAILURE
)
1104 if (nonnegative_check("N1", n1
) == FAILURE
)
1107 if (type_check (n2
, 1, BT_INTEGER
) == FAILURE
)
1109 if (scalar_check (n2
, 1) == FAILURE
)
1111 if (nonnegative_check("N2", n2
) == FAILURE
)
1114 if (type_check (x
, 2, BT_REAL
) == FAILURE
)
1116 if (scalar_check (x
, 2) == FAILURE
)
1124 gfc_check_bge_bgt_ble_blt (gfc_expr
*i
, gfc_expr
*j
)
1126 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1129 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1137 gfc_check_bitfcn (gfc_expr
*i
, gfc_expr
*pos
)
1139 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1142 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
1145 if (nonnegative_check ("pos", pos
) == FAILURE
)
1148 if (less_than_bitsize1 ("i", i
, "pos", pos
, false) == FAILURE
)
1156 gfc_check_char (gfc_expr
*i
, gfc_expr
*kind
)
1158 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1160 if (kind_check (kind
, 1, BT_CHARACTER
) == FAILURE
)
1168 gfc_check_chdir (gfc_expr
*dir
)
1170 if (type_check (dir
, 0, BT_CHARACTER
) == FAILURE
)
1172 if (kind_value_check (dir
, 0, gfc_default_character_kind
) == FAILURE
)
1180 gfc_check_chdir_sub (gfc_expr
*dir
, gfc_expr
*status
)
1182 if (type_check (dir
, 0, BT_CHARACTER
) == FAILURE
)
1184 if (kind_value_check (dir
, 0, gfc_default_character_kind
) == FAILURE
)
1190 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
1192 if (scalar_check (status
, 1) == FAILURE
)
1200 gfc_check_chmod (gfc_expr
*name
, gfc_expr
*mode
)
1202 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
1204 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
1207 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
)
1209 if (kind_value_check (mode
, 1, gfc_default_character_kind
) == FAILURE
)
1217 gfc_check_chmod_sub (gfc_expr
*name
, gfc_expr
*mode
, gfc_expr
*status
)
1219 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
1221 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
1224 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
)
1226 if (kind_value_check (mode
, 1, gfc_default_character_kind
) == FAILURE
)
1232 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1235 if (scalar_check (status
, 2) == FAILURE
)
1243 gfc_check_cmplx (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*kind
)
1245 if (numeric_check (x
, 0) == FAILURE
)
1250 if (numeric_check (y
, 1) == FAILURE
)
1253 if (x
->ts
.type
== BT_COMPLEX
)
1255 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1256 "present if 'x' is COMPLEX",
1257 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1262 if (y
->ts
.type
== BT_COMPLEX
)
1264 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1265 "of either REAL or INTEGER",
1266 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1273 if (kind_check (kind
, 2, BT_COMPLEX
) == FAILURE
)
1281 gfc_check_complex (gfc_expr
*x
, gfc_expr
*y
)
1283 if (int_or_real_check (x
, 0) == FAILURE
)
1285 if (scalar_check (x
, 0) == FAILURE
)
1288 if (int_or_real_check (y
, 1) == FAILURE
)
1290 if (scalar_check (y
, 1) == FAILURE
)
1298 gfc_check_count (gfc_expr
*mask
, gfc_expr
*dim
, gfc_expr
*kind
)
1300 if (logical_array_check (mask
, 0) == FAILURE
)
1302 if (dim_check (dim
, 1, false) == FAILURE
)
1304 if (dim_rank_check (dim
, mask
, 0) == FAILURE
)
1306 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
1308 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1309 "with KIND argument at %L",
1310 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1318 gfc_check_cshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*dim
)
1320 if (array_check (array
, 0) == FAILURE
)
1323 if (type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1326 if (dim_check (dim
, 2, true) == FAILURE
)
1329 if (dim_rank_check (dim
, array
, false) == FAILURE
)
1332 if (array
->rank
== 1 || shift
->rank
== 0)
1334 if (scalar_check (shift
, 1) == FAILURE
)
1337 else if (shift
->rank
== array
->rank
- 1)
1342 else if (dim
->expr_type
== EXPR_CONSTANT
)
1343 gfc_extract_int (dim
, &d
);
1350 for (i
= 0, j
= 0; i
< array
->rank
; i
++)
1353 if (!identical_dimen_shape (array
, i
, shift
, j
))
1355 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1356 "invalid shape in dimension %d (%ld/%ld)",
1357 gfc_current_intrinsic_arg
[1]->name
,
1358 gfc_current_intrinsic
, &shift
->where
, i
+ 1,
1359 mpz_get_si (array
->shape
[i
]),
1360 mpz_get_si (shift
->shape
[j
]));
1370 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1371 "%d or be a scalar", gfc_current_intrinsic_arg
[1]->name
,
1372 gfc_current_intrinsic
, &shift
->where
, array
->rank
- 1);
1381 gfc_check_ctime (gfc_expr
*time
)
1383 if (scalar_check (time
, 0) == FAILURE
)
1386 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
1393 gfc_try
gfc_check_datan2 (gfc_expr
*y
, gfc_expr
*x
)
1395 if (double_check (y
, 0) == FAILURE
|| double_check (x
, 1) == FAILURE
)
1402 gfc_check_dcmplx (gfc_expr
*x
, gfc_expr
*y
)
1404 if (numeric_check (x
, 0) == FAILURE
)
1409 if (numeric_check (y
, 1) == FAILURE
)
1412 if (x
->ts
.type
== BT_COMPLEX
)
1414 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1415 "present if 'x' is COMPLEX",
1416 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1421 if (y
->ts
.type
== BT_COMPLEX
)
1423 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1424 "of either REAL or INTEGER",
1425 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1436 gfc_check_dble (gfc_expr
*x
)
1438 if (numeric_check (x
, 0) == FAILURE
)
1446 gfc_check_digits (gfc_expr
*x
)
1448 if (int_or_real_check (x
, 0) == FAILURE
)
1456 gfc_check_dot_product (gfc_expr
*vector_a
, gfc_expr
*vector_b
)
1458 switch (vector_a
->ts
.type
)
1461 if (type_check (vector_b
, 1, BT_LOGICAL
) == FAILURE
)
1468 if (numeric_check (vector_b
, 1) == FAILURE
)
1473 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1474 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
1475 gfc_current_intrinsic
, &vector_a
->where
);
1479 if (rank_check (vector_a
, 0, 1) == FAILURE
)
1482 if (rank_check (vector_b
, 1, 1) == FAILURE
)
1485 if (! identical_dimen_shape (vector_a
, 0, vector_b
, 0))
1487 gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
1488 "intrinsic 'dot_product'", gfc_current_intrinsic_arg
[0]->name
,
1489 gfc_current_intrinsic_arg
[1]->name
, &vector_a
->where
);
1498 gfc_check_dprod (gfc_expr
*x
, gfc_expr
*y
)
1500 if (type_check (x
, 0, BT_REAL
) == FAILURE
1501 || type_check (y
, 1, BT_REAL
) == FAILURE
)
1504 if (x
->ts
.kind
!= gfc_default_real_kind
)
1506 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1507 "real", gfc_current_intrinsic_arg
[0]->name
,
1508 gfc_current_intrinsic
, &x
->where
);
1512 if (y
->ts
.kind
!= gfc_default_real_kind
)
1514 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1515 "real", gfc_current_intrinsic_arg
[1]->name
,
1516 gfc_current_intrinsic
, &y
->where
);
1525 gfc_check_dshift (gfc_expr
*i
, gfc_expr
*j
, gfc_expr
*shift
)
1527 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1530 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1533 if (i
->is_boz
&& j
->is_boz
)
1535 gfc_error ("'I' at %L and 'J' at %L cannot both be BOZ literal "
1536 "constants", &i
->where
, &j
->where
);
1540 if (!i
->is_boz
&& !j
->is_boz
&& same_type_check (i
, 0, j
, 1) == FAILURE
)
1543 if (type_check (shift
, 2, BT_INTEGER
) == FAILURE
)
1546 if (nonnegative_check ("SHIFT", shift
) == FAILURE
)
1551 if (less_than_bitsize1 ("J", j
, "SHIFT", shift
, true) == FAILURE
)
1553 i
->ts
.kind
= j
->ts
.kind
;
1557 if (less_than_bitsize1 ("I", i
, "SHIFT", shift
, true) == FAILURE
)
1559 j
->ts
.kind
= i
->ts
.kind
;
1567 gfc_check_eoshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*boundary
,
1570 if (array_check (array
, 0) == FAILURE
)
1573 if (type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1576 if (dim_check (dim
, 3, true) == FAILURE
)
1579 if (dim_rank_check (dim
, array
, false) == FAILURE
)
1582 if (array
->rank
== 1 || shift
->rank
== 0)
1584 if (scalar_check (shift
, 1) == FAILURE
)
1587 else if (shift
->rank
== array
->rank
- 1)
1592 else if (dim
->expr_type
== EXPR_CONSTANT
)
1593 gfc_extract_int (dim
, &d
);
1600 for (i
= 0, j
= 0; i
< array
->rank
; i
++)
1603 if (!identical_dimen_shape (array
, i
, shift
, j
))
1605 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1606 "invalid shape in dimension %d (%ld/%ld)",
1607 gfc_current_intrinsic_arg
[1]->name
,
1608 gfc_current_intrinsic
, &shift
->where
, i
+ 1,
1609 mpz_get_si (array
->shape
[i
]),
1610 mpz_get_si (shift
->shape
[j
]));
1620 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1621 "%d or be a scalar", gfc_current_intrinsic_arg
[1]->name
,
1622 gfc_current_intrinsic
, &shift
->where
, array
->rank
- 1);
1626 if (boundary
!= NULL
)
1628 if (same_type_check (array
, 0, boundary
, 2) == FAILURE
)
1631 if (array
->rank
== 1 || boundary
->rank
== 0)
1633 if (scalar_check (boundary
, 2) == FAILURE
)
1636 else if (boundary
->rank
== array
->rank
- 1)
1638 if (gfc_check_conformance (shift
, boundary
,
1639 "arguments '%s' and '%s' for "
1641 gfc_current_intrinsic_arg
[1]->name
,
1642 gfc_current_intrinsic_arg
[2]->name
,
1643 gfc_current_intrinsic
) == FAILURE
)
1648 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have "
1649 "rank %d or be a scalar",
1650 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1651 &shift
->where
, array
->rank
- 1);
1660 gfc_check_float (gfc_expr
*a
)
1662 if (type_check (a
, 0, BT_INTEGER
) == FAILURE
)
1665 if ((a
->ts
.kind
!= gfc_default_integer_kind
)
1666 && gfc_notify_std (GFC_STD_GNU
, "GNU extension: non-default INTEGER "
1667 "kind argument to %s intrinsic at %L",
1668 gfc_current_intrinsic
, &a
->where
) == FAILURE
)
1674 /* A single complex argument. */
1677 gfc_check_fn_c (gfc_expr
*a
)
1679 if (type_check (a
, 0, BT_COMPLEX
) == FAILURE
)
1685 /* A single real argument. */
1688 gfc_check_fn_r (gfc_expr
*a
)
1690 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
1696 /* A single double argument. */
1699 gfc_check_fn_d (gfc_expr
*a
)
1701 if (double_check (a
, 0) == FAILURE
)
1707 /* A single real or complex argument. */
1710 gfc_check_fn_rc (gfc_expr
*a
)
1712 if (real_or_complex_check (a
, 0) == FAILURE
)
1720 gfc_check_fn_rc2008 (gfc_expr
*a
)
1722 if (real_or_complex_check (a
, 0) == FAILURE
)
1725 if (a
->ts
.type
== BT_COMPLEX
1726 && gfc_notify_std (GFC_STD_F2008
, "Fortran 2008: COMPLEX argument '%s' "
1727 "argument of '%s' intrinsic at %L",
1728 gfc_current_intrinsic_arg
[0]->name
,
1729 gfc_current_intrinsic
, &a
->where
) == FAILURE
)
1737 gfc_check_fnum (gfc_expr
*unit
)
1739 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
1742 if (scalar_check (unit
, 0) == FAILURE
)
1750 gfc_check_huge (gfc_expr
*x
)
1752 if (int_or_real_check (x
, 0) == FAILURE
)
1760 gfc_check_hypot (gfc_expr
*x
, gfc_expr
*y
)
1762 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1764 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
1771 /* Check that the single argument is an integer. */
1774 gfc_check_i (gfc_expr
*i
)
1776 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1784 gfc_check_iand (gfc_expr
*i
, gfc_expr
*j
)
1786 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1789 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1792 if (i
->ts
.kind
!= j
->ts
.kind
)
1794 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1795 &i
->where
) == FAILURE
)
1804 gfc_check_ibits (gfc_expr
*i
, gfc_expr
*pos
, gfc_expr
*len
)
1806 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1809 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
1812 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
1815 if (nonnegative_check ("pos", pos
) == FAILURE
)
1818 if (nonnegative_check ("len", len
) == FAILURE
)
1821 if (less_than_bitsize2 ("i", i
, "pos", pos
, "len", len
) == FAILURE
)
1829 gfc_check_ichar_iachar (gfc_expr
*c
, gfc_expr
*kind
)
1833 if (type_check (c
, 0, BT_CHARACTER
) == FAILURE
)
1836 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1839 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1840 "with KIND argument at %L",
1841 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1844 if (c
->expr_type
== EXPR_VARIABLE
|| c
->expr_type
== EXPR_SUBSTRING
)
1850 /* Substring references don't have the charlength set. */
1852 while (ref
&& ref
->type
!= REF_SUBSTRING
)
1855 gcc_assert (ref
== NULL
|| ref
->type
== REF_SUBSTRING
);
1859 /* Check that the argument is length one. Non-constant lengths
1860 can't be checked here, so assume they are ok. */
1861 if (c
->ts
.u
.cl
&& c
->ts
.u
.cl
->length
)
1863 /* If we already have a length for this expression then use it. */
1864 if (c
->ts
.u
.cl
->length
->expr_type
!= EXPR_CONSTANT
)
1866 i
= mpz_get_si (c
->ts
.u
.cl
->length
->value
.integer
);
1873 start
= ref
->u
.ss
.start
;
1874 end
= ref
->u
.ss
.end
;
1877 if (end
== NULL
|| end
->expr_type
!= EXPR_CONSTANT
1878 || start
->expr_type
!= EXPR_CONSTANT
)
1881 i
= mpz_get_si (end
->value
.integer
) + 1
1882 - mpz_get_si (start
->value
.integer
);
1890 gfc_error ("Argument of %s at %L must be of length one",
1891 gfc_current_intrinsic
, &c
->where
);
1900 gfc_check_idnint (gfc_expr
*a
)
1902 if (double_check (a
, 0) == FAILURE
)
1910 gfc_check_ieor (gfc_expr
*i
, gfc_expr
*j
)
1912 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1915 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1918 if (i
->ts
.kind
!= j
->ts
.kind
)
1920 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1921 &i
->where
) == FAILURE
)
1930 gfc_check_index (gfc_expr
*string
, gfc_expr
*substring
, gfc_expr
*back
,
1933 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
1934 || type_check (substring
, 1, BT_CHARACTER
) == FAILURE
)
1937 if (back
!= NULL
&& type_check (back
, 2, BT_LOGICAL
) == FAILURE
)
1940 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
1942 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1943 "with KIND argument at %L",
1944 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1947 if (string
->ts
.kind
!= substring
->ts
.kind
)
1949 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1950 "kind as '%s'", gfc_current_intrinsic_arg
[1]->name
,
1951 gfc_current_intrinsic
, &substring
->where
,
1952 gfc_current_intrinsic_arg
[0]->name
);
1961 gfc_check_int (gfc_expr
*x
, gfc_expr
*kind
)
1963 if (numeric_check (x
, 0) == FAILURE
)
1966 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1974 gfc_check_intconv (gfc_expr
*x
)
1976 if (numeric_check (x
, 0) == FAILURE
)
1984 gfc_check_ior (gfc_expr
*i
, gfc_expr
*j
)
1986 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1989 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1992 if (i
->ts
.kind
!= j
->ts
.kind
)
1994 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1995 &i
->where
) == FAILURE
)
2004 gfc_check_ishft (gfc_expr
*i
, gfc_expr
*shift
)
2006 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
2007 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
2010 if (less_than_bitsize1 ("I", i
, NULL
, shift
, true) == FAILURE
)
2018 gfc_check_ishftc (gfc_expr
*i
, gfc_expr
*shift
, gfc_expr
*size
)
2020 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
2021 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
2028 if (type_check (size
, 2, BT_INTEGER
) == FAILURE
)
2031 if (less_than_bitsize1 ("I", i
, "SIZE", size
, true) == FAILURE
)
2034 if (size
->expr_type
== EXPR_CONSTANT
)
2036 gfc_extract_int (size
, &i3
);
2039 gfc_error ("SIZE at %L must be positive", &size
->where
);
2043 if (shift
->expr_type
== EXPR_CONSTANT
)
2045 gfc_extract_int (shift
, &i2
);
2051 gfc_error ("The absolute value of SHIFT at %L must be less "
2052 "than or equal to SIZE at %L", &shift
->where
,
2059 else if (less_than_bitsize1 ("I", i
, NULL
, shift
, true) == FAILURE
)
2067 gfc_check_kill (gfc_expr
*pid
, gfc_expr
*sig
)
2069 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
2072 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
2080 gfc_check_kill_sub (gfc_expr
*pid
, gfc_expr
*sig
, gfc_expr
*status
)
2082 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
2085 if (scalar_check (pid
, 0) == FAILURE
)
2088 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
2091 if (scalar_check (sig
, 1) == FAILURE
)
2097 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2100 if (scalar_check (status
, 2) == FAILURE
)
2108 gfc_check_kind (gfc_expr
*x
)
2110 if (x
->ts
.type
== BT_DERIVED
)
2112 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
2113 "non-derived type", gfc_current_intrinsic_arg
[0]->name
,
2114 gfc_current_intrinsic
, &x
->where
);
2123 gfc_check_lbound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
2125 if (array_check (array
, 0) == FAILURE
)
2128 if (dim_check (dim
, 1, false) == FAILURE
)
2131 if (dim_rank_check (dim
, array
, 1) == FAILURE
)
2134 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
2136 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2137 "with KIND argument at %L",
2138 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2146 gfc_check_lcobound (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*kind
)
2148 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
2150 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
2154 if (coarray_check (coarray
, 0) == FAILURE
)
2159 if (dim_check (dim
, 1, false) == FAILURE
)
2162 if (dim_corank_check (dim
, coarray
) == FAILURE
)
2166 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
2174 gfc_check_len_lentrim (gfc_expr
*s
, gfc_expr
*kind
)
2176 if (type_check (s
, 0, BT_CHARACTER
) == FAILURE
)
2179 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
2181 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2182 "with KIND argument at %L",
2183 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2191 gfc_check_lge_lgt_lle_llt (gfc_expr
*a
, gfc_expr
*b
)
2193 if (type_check (a
, 0, BT_CHARACTER
) == FAILURE
)
2195 if (kind_value_check (a
, 0, gfc_default_character_kind
) == FAILURE
)
2198 if (type_check (b
, 1, BT_CHARACTER
) == FAILURE
)
2200 if (kind_value_check (b
, 1, gfc_default_character_kind
) == FAILURE
)
2208 gfc_check_link (gfc_expr
*path1
, gfc_expr
*path2
)
2210 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2212 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2215 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2217 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2225 gfc_check_link_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2227 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2229 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2232 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2234 if (kind_value_check (path2
, 0, gfc_default_character_kind
) == FAILURE
)
2240 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2243 if (scalar_check (status
, 2) == FAILURE
)
2251 gfc_check_loc (gfc_expr
*expr
)
2253 return variable_check (expr
, 0, true);
2258 gfc_check_symlnk (gfc_expr
*path1
, gfc_expr
*path2
)
2260 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2262 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2265 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2267 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2275 gfc_check_symlnk_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2277 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2279 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2282 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2284 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2290 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2293 if (scalar_check (status
, 2) == FAILURE
)
2301 gfc_check_logical (gfc_expr
*a
, gfc_expr
*kind
)
2303 if (type_check (a
, 0, BT_LOGICAL
) == FAILURE
)
2305 if (kind_check (kind
, 1, BT_LOGICAL
) == FAILURE
)
2312 /* Min/max family. */
2315 min_max_args (gfc_actual_arglist
*arg
)
2317 if (arg
== NULL
|| arg
->next
== NULL
)
2319 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
2320 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
2329 check_rest (bt type
, int kind
, gfc_actual_arglist
*arglist
)
2331 gfc_actual_arglist
*arg
, *tmp
;
2336 if (min_max_args (arglist
) == FAILURE
)
2339 for (arg
= arglist
, n
=1; arg
; arg
= arg
->next
, n
++)
2342 if (x
->ts
.type
!= type
|| x
->ts
.kind
!= kind
)
2344 if (x
->ts
.type
== type
)
2346 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type "
2347 "kinds at %L", &x
->where
) == FAILURE
)
2352 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
2353 "%s(%d)", n
, gfc_current_intrinsic
, &x
->where
,
2354 gfc_basic_typename (type
), kind
);
2359 for (tmp
= arglist
, m
=1; tmp
!= arg
; tmp
= tmp
->next
, m
++)
2360 if (gfc_check_conformance (tmp
->expr
, x
,
2361 "arguments 'a%d' and 'a%d' for "
2362 "intrinsic '%s'", m
, n
,
2363 gfc_current_intrinsic
) == FAILURE
)
2372 gfc_check_min_max (gfc_actual_arglist
*arg
)
2376 if (min_max_args (arg
) == FAILURE
)
2381 if (x
->ts
.type
== BT_CHARACTER
)
2383 if (gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2384 "with CHARACTER argument at %L",
2385 gfc_current_intrinsic
, &x
->where
) == FAILURE
)
2388 else if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
2390 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
2391 "REAL or CHARACTER", gfc_current_intrinsic
, &x
->where
);
2395 return check_rest (x
->ts
.type
, x
->ts
.kind
, arg
);
2400 gfc_check_min_max_integer (gfc_actual_arglist
*arg
)
2402 return check_rest (BT_INTEGER
, gfc_default_integer_kind
, arg
);
2407 gfc_check_min_max_real (gfc_actual_arglist
*arg
)
2409 return check_rest (BT_REAL
, gfc_default_real_kind
, arg
);
2414 gfc_check_min_max_double (gfc_actual_arglist
*arg
)
2416 return check_rest (BT_REAL
, gfc_default_double_kind
, arg
);
2420 /* End of min/max family. */
2423 gfc_check_malloc (gfc_expr
*size
)
2425 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
2428 if (scalar_check (size
, 0) == FAILURE
)
2436 gfc_check_matmul (gfc_expr
*matrix_a
, gfc_expr
*matrix_b
)
2438 if ((matrix_a
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_a
->ts
))
2440 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2441 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
2442 gfc_current_intrinsic
, &matrix_a
->where
);
2446 if ((matrix_b
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_b
->ts
))
2448 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2449 "or LOGICAL", gfc_current_intrinsic_arg
[1]->name
,
2450 gfc_current_intrinsic
, &matrix_b
->where
);
2454 if ((matrix_a
->ts
.type
== BT_LOGICAL
&& gfc_numeric_ts (&matrix_b
->ts
))
2455 || (gfc_numeric_ts (&matrix_a
->ts
) && matrix_b
->ts
.type
== BT_LOGICAL
))
2457 gfc_error ("Argument types of '%s' intrinsic at %L must match (%s/%s)",
2458 gfc_current_intrinsic
, &matrix_a
->where
,
2459 gfc_typename(&matrix_a
->ts
), gfc_typename(&matrix_b
->ts
));
2463 switch (matrix_a
->rank
)
2466 if (rank_check (matrix_b
, 1, 2) == FAILURE
)
2468 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
2469 if (!identical_dimen_shape (matrix_a
, 0, matrix_b
, 0))
2471 gfc_error ("Different shape on dimension 1 for arguments '%s' "
2472 "and '%s' at %L for intrinsic matmul",
2473 gfc_current_intrinsic_arg
[0]->name
,
2474 gfc_current_intrinsic_arg
[1]->name
, &matrix_a
->where
);
2480 if (matrix_b
->rank
!= 2)
2482 if (rank_check (matrix_b
, 1, 1) == FAILURE
)
2485 /* matrix_b has rank 1 or 2 here. Common check for the cases
2486 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
2487 - matrix_a has shape (n,m) and matrix_b has shape (m). */
2488 if (!identical_dimen_shape (matrix_a
, 1, matrix_b
, 0))
2490 gfc_error ("Different shape on dimension 2 for argument '%s' and "
2491 "dimension 1 for argument '%s' at %L for intrinsic "
2492 "matmul", gfc_current_intrinsic_arg
[0]->name
,
2493 gfc_current_intrinsic_arg
[1]->name
, &matrix_a
->where
);
2499 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
2500 "1 or 2", gfc_current_intrinsic_arg
[0]->name
,
2501 gfc_current_intrinsic
, &matrix_a
->where
);
2509 /* Whoever came up with this interface was probably on something.
2510 The possibilities for the occupation of the second and third
2517 NULL MASK minloc(array, mask=m)
2520 I.e. in the case of minloc(array,mask), mask will be in the second
2521 position of the argument list and we'll have to fix that up. */
2524 gfc_check_minloc_maxloc (gfc_actual_arglist
*ap
)
2526 gfc_expr
*a
, *m
, *d
;
2529 if (int_or_real_check (a
, 0) == FAILURE
|| array_check (a
, 0) == FAILURE
)
2533 m
= ap
->next
->next
->expr
;
2535 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
2536 && ap
->next
->name
== NULL
)
2540 ap
->next
->expr
= NULL
;
2541 ap
->next
->next
->expr
= m
;
2544 if (dim_check (d
, 1, false) == FAILURE
)
2547 if (dim_rank_check (d
, a
, 0) == FAILURE
)
2550 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
2554 && gfc_check_conformance (a
, m
,
2555 "arguments '%s' and '%s' for intrinsic %s",
2556 gfc_current_intrinsic_arg
[0]->name
,
2557 gfc_current_intrinsic_arg
[2]->name
,
2558 gfc_current_intrinsic
) == FAILURE
)
2565 /* Similar to minloc/maxloc, the argument list might need to be
2566 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
2567 difference is that MINLOC/MAXLOC take an additional KIND argument.
2568 The possibilities are:
2574 NULL MASK minval(array, mask=m)
2577 I.e. in the case of minval(array,mask), mask will be in the second
2578 position of the argument list and we'll have to fix that up. */
2581 check_reduction (gfc_actual_arglist
*ap
)
2583 gfc_expr
*a
, *m
, *d
;
2587 m
= ap
->next
->next
->expr
;
2589 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
2590 && ap
->next
->name
== NULL
)
2594 ap
->next
->expr
= NULL
;
2595 ap
->next
->next
->expr
= m
;
2598 if (dim_check (d
, 1, false) == FAILURE
)
2601 if (dim_rank_check (d
, a
, 0) == FAILURE
)
2604 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
2608 && gfc_check_conformance (a
, m
,
2609 "arguments '%s' and '%s' for intrinsic %s",
2610 gfc_current_intrinsic_arg
[0]->name
,
2611 gfc_current_intrinsic_arg
[2]->name
,
2612 gfc_current_intrinsic
) == FAILURE
)
2620 gfc_check_minval_maxval (gfc_actual_arglist
*ap
)
2622 if (int_or_real_check (ap
->expr
, 0) == FAILURE
2623 || array_check (ap
->expr
, 0) == FAILURE
)
2626 return check_reduction (ap
);
2631 gfc_check_product_sum (gfc_actual_arglist
*ap
)
2633 if (numeric_check (ap
->expr
, 0) == FAILURE
2634 || array_check (ap
->expr
, 0) == FAILURE
)
2637 return check_reduction (ap
);
2641 /* For IANY, IALL and IPARITY. */
2644 gfc_check_mask (gfc_expr
*i
, gfc_expr
*kind
)
2648 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
2651 if (nonnegative_check ("I", i
) == FAILURE
)
2654 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
2658 gfc_extract_int (kind
, &k
);
2660 k
= gfc_default_integer_kind
;
2662 if (less_than_bitsizekind ("I", i
, k
) == FAILURE
)
2670 gfc_check_transf_bit_intrins (gfc_actual_arglist
*ap
)
2672 if (ap
->expr
->ts
.type
!= BT_INTEGER
)
2674 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER",
2675 gfc_current_intrinsic_arg
[0]->name
,
2676 gfc_current_intrinsic
, &ap
->expr
->where
);
2680 if (array_check (ap
->expr
, 0) == FAILURE
)
2683 return check_reduction (ap
);
2688 gfc_check_merge (gfc_expr
*tsource
, gfc_expr
*fsource
, gfc_expr
*mask
)
2690 if (same_type_check (tsource
, 0, fsource
, 1) == FAILURE
)
2693 if (type_check (mask
, 2, BT_LOGICAL
) == FAILURE
)
2696 if (tsource
->ts
.type
== BT_CHARACTER
)
2697 return gfc_check_same_strlen (tsource
, fsource
, "MERGE intrinsic");
2704 gfc_check_merge_bits (gfc_expr
*i
, gfc_expr
*j
, gfc_expr
*mask
)
2706 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
2709 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
2712 if (type_check (mask
, 2, BT_INTEGER
) == FAILURE
)
2715 if (same_type_check (i
, 0, j
, 1) == FAILURE
)
2718 if (same_type_check (i
, 0, mask
, 2) == FAILURE
)
2726 gfc_check_move_alloc (gfc_expr
*from
, gfc_expr
*to
)
2728 if (variable_check (from
, 0, false) == FAILURE
)
2730 if (allocatable_check (from
, 0) == FAILURE
)
2732 if (gfc_is_coindexed (from
))
2734 gfc_error ("The FROM argument to MOVE_ALLOC at %L shall not be "
2735 "coindexed", &from
->where
);
2739 if (variable_check (to
, 1, false) == FAILURE
)
2741 if (allocatable_check (to
, 1) == FAILURE
)
2743 if (gfc_is_coindexed (to
))
2745 gfc_error ("The TO argument to MOVE_ALLOC at %L shall not be "
2746 "coindexed", &to
->where
);
2750 if (from
->ts
.type
== BT_CLASS
&& to
->ts
.type
== BT_DERIVED
)
2752 gfc_error ("The TO arguments in MOVE_ALLOC at %L must be "
2753 "polymorphic if FROM is polymorphic",
2758 if (same_type_check (to
, 1, from
, 0) == FAILURE
)
2761 if (to
->rank
!= from
->rank
)
2763 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
2764 "must have the same rank %d/%d", &to
->where
, from
->rank
,
2769 /* IR F08/0040; cf. 12-006A. */
2770 if (gfc_get_corank (to
) != gfc_get_corank (from
))
2772 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
2773 "must have the same corank %d/%d", &to
->where
,
2774 gfc_get_corank (from
), gfc_get_corank (to
));
2778 if (to
->ts
.kind
!= from
->ts
.kind
)
2780 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L"
2781 " must be of the same kind %d/%d", &to
->where
, from
->ts
.kind
,
2786 /* CLASS arguments: Make sure the vtab of from is present. */
2787 if (to
->ts
.type
== BT_CLASS
)
2788 gfc_find_derived_vtab (from
->ts
.u
.derived
);
2795 gfc_check_nearest (gfc_expr
*x
, gfc_expr
*s
)
2797 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2800 if (type_check (s
, 1, BT_REAL
) == FAILURE
)
2803 if (s
->expr_type
== EXPR_CONSTANT
)
2805 if (mpfr_sgn (s
->value
.real
) == 0)
2807 gfc_error ("Argument 'S' of NEAREST at %L shall not be zero",
2818 gfc_check_new_line (gfc_expr
*a
)
2820 if (type_check (a
, 0, BT_CHARACTER
) == FAILURE
)
2828 gfc_check_norm2 (gfc_expr
*array
, gfc_expr
*dim
)
2830 if (type_check (array
, 0, BT_REAL
) == FAILURE
)
2833 if (array_check (array
, 0) == FAILURE
)
2836 if (dim_rank_check (dim
, array
, false) == FAILURE
)
2843 gfc_check_null (gfc_expr
*mold
)
2845 symbol_attribute attr
;
2850 if (variable_check (mold
, 0, true) == FAILURE
)
2853 attr
= gfc_variable_attr (mold
, NULL
);
2855 if (!attr
.pointer
&& !attr
.proc_pointer
&& !attr
.allocatable
)
2857 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER, "
2858 "ALLOCATABLE or procedure pointer",
2859 gfc_current_intrinsic_arg
[0]->name
,
2860 gfc_current_intrinsic
, &mold
->where
);
2864 if (attr
.allocatable
2865 && gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: NULL intrinsic with "
2866 "allocatable MOLD at %L", &mold
->where
) == FAILURE
)
2870 if (gfc_is_coindexed (mold
))
2872 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
2873 "coindexed", gfc_current_intrinsic_arg
[0]->name
,
2874 gfc_current_intrinsic
, &mold
->where
);
2883 gfc_check_pack (gfc_expr
*array
, gfc_expr
*mask
, gfc_expr
*vector
)
2885 if (array_check (array
, 0) == FAILURE
)
2888 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
2891 if (gfc_check_conformance (array
, mask
,
2892 "arguments '%s' and '%s' for intrinsic '%s'",
2893 gfc_current_intrinsic_arg
[0]->name
,
2894 gfc_current_intrinsic_arg
[1]->name
,
2895 gfc_current_intrinsic
) == FAILURE
)
2900 mpz_t array_size
, vector_size
;
2901 bool have_array_size
, have_vector_size
;
2903 if (same_type_check (array
, 0, vector
, 2) == FAILURE
)
2906 if (rank_check (vector
, 2, 1) == FAILURE
)
2909 /* VECTOR requires at least as many elements as MASK
2910 has .TRUE. values. */
2911 have_array_size
= gfc_array_size (array
, &array_size
) == SUCCESS
;
2912 have_vector_size
= gfc_array_size (vector
, &vector_size
) == SUCCESS
;
2914 if (have_vector_size
2915 && (mask
->expr_type
== EXPR_ARRAY
2916 || (mask
->expr_type
== EXPR_CONSTANT
2917 && have_array_size
)))
2919 int mask_true_values
= 0;
2921 if (mask
->expr_type
== EXPR_ARRAY
)
2923 gfc_constructor
*mask_ctor
;
2924 mask_ctor
= gfc_constructor_first (mask
->value
.constructor
);
2927 if (mask_ctor
->expr
->expr_type
!= EXPR_CONSTANT
)
2929 mask_true_values
= 0;
2933 if (mask_ctor
->expr
->value
.logical
)
2936 mask_ctor
= gfc_constructor_next (mask_ctor
);
2939 else if (mask
->expr_type
== EXPR_CONSTANT
&& mask
->value
.logical
)
2940 mask_true_values
= mpz_get_si (array_size
);
2942 if (mpz_get_si (vector_size
) < mask_true_values
)
2944 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
2945 "provide at least as many elements as there "
2946 "are .TRUE. values in '%s' (%ld/%d)",
2947 gfc_current_intrinsic_arg
[2]->name
,
2948 gfc_current_intrinsic
, &vector
->where
,
2949 gfc_current_intrinsic_arg
[1]->name
,
2950 mpz_get_si (vector_size
), mask_true_values
);
2955 if (have_array_size
)
2956 mpz_clear (array_size
);
2957 if (have_vector_size
)
2958 mpz_clear (vector_size
);
2966 gfc_check_parity (gfc_expr
*mask
, gfc_expr
*dim
)
2968 if (type_check (mask
, 0, BT_LOGICAL
) == FAILURE
)
2971 if (array_check (mask
, 0) == FAILURE
)
2974 if (dim_rank_check (dim
, mask
, false) == FAILURE
)
2982 gfc_check_precision (gfc_expr
*x
)
2984 if (real_or_complex_check (x
, 0) == FAILURE
)
2992 gfc_check_present (gfc_expr
*a
)
2996 if (variable_check (a
, 0, true) == FAILURE
)
2999 sym
= a
->symtree
->n
.sym
;
3000 if (!sym
->attr
.dummy
)
3002 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
3003 "dummy variable", gfc_current_intrinsic_arg
[0]->name
,
3004 gfc_current_intrinsic
, &a
->where
);
3008 if (!sym
->attr
.optional
)
3010 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
3011 "an OPTIONAL dummy variable",
3012 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3017 /* 13.14.82 PRESENT(A)
3019 Argument. A shall be the name of an optional dummy argument that is
3020 accessible in the subprogram in which the PRESENT function reference
3024 && !(a
->ref
->next
== NULL
&& a
->ref
->type
== REF_ARRAY
3025 && (a
->ref
->u
.ar
.type
== AR_FULL
3026 || (a
->ref
->u
.ar
.type
== AR_ELEMENT
3027 && a
->ref
->u
.ar
.as
->rank
== 0))))
3029 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
3030 "subobject of '%s'", gfc_current_intrinsic_arg
[0]->name
,
3031 gfc_current_intrinsic
, &a
->where
, sym
->name
);
3040 gfc_check_radix (gfc_expr
*x
)
3042 if (int_or_real_check (x
, 0) == FAILURE
)
3050 gfc_check_range (gfc_expr
*x
)
3052 if (numeric_check (x
, 0) == FAILURE
)
3060 gfc_check_rank (gfc_expr
*a ATTRIBUTE_UNUSED
)
3062 /* Any data object is allowed; a "data object" is a "constant (4.1.3),
3063 variable (6), or subobject of a constant (2.4.3.2.3)" (F2008, 1.3.45). */
3065 bool is_variable
= true;
3067 /* Functions returning pointers are regarded as variable, cf. F2008, R602. */
3068 if (a
->expr_type
== EXPR_FUNCTION
)
3069 is_variable
= a
->value
.function
.esym
3070 ? a
->value
.function
.esym
->result
->attr
.pointer
3071 : a
->symtree
->n
.sym
->result
->attr
.pointer
;
3073 if (a
->expr_type
== EXPR_OP
|| a
->expr_type
== EXPR_NULL
3074 || a
->expr_type
== EXPR_COMPCALL
|| a
->expr_type
== EXPR_PPC
3077 gfc_error ("The argument of the RANK intrinsic at %L must be a data "
3078 "object", &a
->where
);
3086 /* real, float, sngl. */
3088 gfc_check_real (gfc_expr
*a
, gfc_expr
*kind
)
3090 if (numeric_check (a
, 0) == FAILURE
)
3093 if (kind_check (kind
, 1, BT_REAL
) == FAILURE
)
3101 gfc_check_rename (gfc_expr
*path1
, gfc_expr
*path2
)
3103 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
3105 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
3108 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
3110 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
3118 gfc_check_rename_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
3120 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
3122 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
3125 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
3127 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
3133 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
3136 if (scalar_check (status
, 2) == FAILURE
)
3144 gfc_check_repeat (gfc_expr
*x
, gfc_expr
*y
)
3146 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
3149 if (scalar_check (x
, 0) == FAILURE
)
3152 if (type_check (y
, 0, BT_INTEGER
) == FAILURE
)
3155 if (scalar_check (y
, 1) == FAILURE
)
3163 gfc_check_reshape (gfc_expr
*source
, gfc_expr
*shape
,
3164 gfc_expr
*pad
, gfc_expr
*order
)
3170 if (array_check (source
, 0) == FAILURE
)
3173 if (rank_check (shape
, 1, 1) == FAILURE
)
3176 if (type_check (shape
, 1, BT_INTEGER
) == FAILURE
)
3179 if (gfc_array_size (shape
, &size
) != SUCCESS
)
3181 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
3182 "array of constant size", &shape
->where
);
3186 shape_size
= mpz_get_ui (size
);
3189 if (shape_size
<= 0)
3191 gfc_error ("'%s' argument of '%s' intrinsic at %L is empty",
3192 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3196 else if (shape_size
> GFC_MAX_DIMENSIONS
)
3198 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
3199 "than %d elements", &shape
->where
, GFC_MAX_DIMENSIONS
);
3202 else if (shape
->expr_type
== EXPR_ARRAY
)
3206 for (i
= 0; i
< shape_size
; ++i
)
3208 e
= gfc_constructor_lookup_expr (shape
->value
.constructor
, i
);
3209 if (e
->expr_type
!= EXPR_CONSTANT
)
3212 gfc_extract_int (e
, &extent
);
3215 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3216 "negative element (%d)",
3217 gfc_current_intrinsic_arg
[1]->name
,
3218 gfc_current_intrinsic
, &e
->where
, extent
);
3226 if (same_type_check (source
, 0, pad
, 2) == FAILURE
)
3229 if (array_check (pad
, 2) == FAILURE
)
3235 if (array_check (order
, 3) == FAILURE
)
3238 if (type_check (order
, 3, BT_INTEGER
) == FAILURE
)
3241 if (order
->expr_type
== EXPR_ARRAY
)
3243 int i
, order_size
, dim
, perm
[GFC_MAX_DIMENSIONS
];
3246 for (i
= 0; i
< GFC_MAX_DIMENSIONS
; ++i
)
3249 gfc_array_size (order
, &size
);
3250 order_size
= mpz_get_ui (size
);
3253 if (order_size
!= shape_size
)
3255 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3256 "has wrong number of elements (%d/%d)",
3257 gfc_current_intrinsic_arg
[3]->name
,
3258 gfc_current_intrinsic
, &order
->where
,
3259 order_size
, shape_size
);
3263 for (i
= 1; i
<= order_size
; ++i
)
3265 e
= gfc_constructor_lookup_expr (order
->value
.constructor
, i
-1);
3266 if (e
->expr_type
!= EXPR_CONSTANT
)
3269 gfc_extract_int (e
, &dim
);
3271 if (dim
< 1 || dim
> order_size
)
3273 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3274 "has out-of-range dimension (%d)",
3275 gfc_current_intrinsic_arg
[3]->name
,
3276 gfc_current_intrinsic
, &e
->where
, dim
);
3280 if (perm
[dim
-1] != 0)
3282 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3283 "invalid permutation of dimensions (dimension "
3285 gfc_current_intrinsic_arg
[3]->name
,
3286 gfc_current_intrinsic
, &e
->where
, dim
);
3295 if (pad
== NULL
&& shape
->expr_type
== EXPR_ARRAY
3296 && gfc_is_constant_expr (shape
)
3297 && !(source
->expr_type
== EXPR_VARIABLE
&& source
->symtree
->n
.sym
->as
3298 && source
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
))
3300 /* Check the match in size between source and destination. */
3301 if (gfc_array_size (source
, &nelems
) == SUCCESS
)
3307 mpz_init_set_ui (size
, 1);
3308 for (c
= gfc_constructor_first (shape
->value
.constructor
);
3309 c
; c
= gfc_constructor_next (c
))
3310 mpz_mul (size
, size
, c
->expr
->value
.integer
);
3312 test
= mpz_cmp (nelems
, size
) < 0 && mpz_cmp_ui (size
, 0) > 0;
3318 gfc_error ("Without padding, there are not enough elements "
3319 "in the intrinsic RESHAPE source at %L to match "
3320 "the shape", &source
->where
);
3331 gfc_check_same_type_as (gfc_expr
*a
, gfc_expr
*b
)
3334 if (a
->ts
.type
!= BT_DERIVED
&& a
->ts
.type
!= BT_CLASS
)
3336 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3337 "must be of a derived type",
3338 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3343 if (!gfc_type_is_extensible (a
->ts
.u
.derived
))
3345 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3346 "must be of an extensible type",
3347 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3352 if (b
->ts
.type
!= BT_DERIVED
&& b
->ts
.type
!= BT_CLASS
)
3354 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3355 "must be of a derived type",
3356 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3361 if (!gfc_type_is_extensible (b
->ts
.u
.derived
))
3363 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3364 "must be of an extensible type",
3365 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3375 gfc_check_scale (gfc_expr
*x
, gfc_expr
*i
)
3377 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
3380 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
3388 gfc_check_scan (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
3390 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
3393 if (type_check (y
, 1, BT_CHARACTER
) == FAILURE
)
3396 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
3399 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
3401 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
3402 "with KIND argument at %L",
3403 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
3406 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
3414 gfc_check_secnds (gfc_expr
*r
)
3416 if (type_check (r
, 0, BT_REAL
) == FAILURE
)
3419 if (kind_value_check (r
, 0, 4) == FAILURE
)
3422 if (scalar_check (r
, 0) == FAILURE
)
3430 gfc_check_selected_char_kind (gfc_expr
*name
)
3432 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3435 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3438 if (scalar_check (name
, 0) == FAILURE
)
3446 gfc_check_selected_int_kind (gfc_expr
*r
)
3448 if (type_check (r
, 0, BT_INTEGER
) == FAILURE
)
3451 if (scalar_check (r
, 0) == FAILURE
)
3459 gfc_check_selected_real_kind (gfc_expr
*p
, gfc_expr
*r
, gfc_expr
*radix
)
3461 if (p
== NULL
&& r
== NULL
3462 && gfc_notify_std (GFC_STD_F2008
, "Fortran 2008: SELECTED_REAL_KIND with"
3463 " neither 'P' nor 'R' argument at %L",
3464 gfc_current_intrinsic_where
) == FAILURE
)
3469 if (type_check (p
, 0, BT_INTEGER
) == FAILURE
)
3472 if (scalar_check (p
, 0) == FAILURE
)
3478 if (type_check (r
, 1, BT_INTEGER
) == FAILURE
)
3481 if (scalar_check (r
, 1) == FAILURE
)
3487 if (type_check (radix
, 1, BT_INTEGER
) == FAILURE
)
3490 if (scalar_check (radix
, 1) == FAILURE
)
3493 if (gfc_notify_std (GFC_STD_F2008
, "Fortran 2008: '%s' intrinsic with "
3494 "RADIX argument at %L", gfc_current_intrinsic
,
3495 &radix
->where
) == FAILURE
)
3504 gfc_check_set_exponent (gfc_expr
*x
, gfc_expr
*i
)
3506 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
3509 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
3517 gfc_check_shape (gfc_expr
*source
, gfc_expr
*kind
)
3521 if (source
->rank
== 0 || source
->expr_type
!= EXPR_VARIABLE
)
3524 ar
= gfc_find_array_ref (source
);
3526 if (ar
->as
&& ar
->as
->type
== AS_ASSUMED_SIZE
&& ar
->type
== AR_FULL
)
3528 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
3529 "an assumed size array", &source
->where
);
3533 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
3535 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
3536 "with KIND argument at %L",
3537 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
3545 gfc_check_shift (gfc_expr
*i
, gfc_expr
*shift
)
3547 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
3550 if (type_check (shift
, 0, BT_INTEGER
) == FAILURE
)
3553 if (nonnegative_check ("SHIFT", shift
) == FAILURE
)
3556 if (less_than_bitsize1 ("I", i
, "SHIFT", shift
, true) == FAILURE
)
3564 gfc_check_sign (gfc_expr
*a
, gfc_expr
*b
)
3566 if (int_or_real_check (a
, 0) == FAILURE
)
3569 if (same_type_check (a
, 0, b
, 1) == FAILURE
)
3577 gfc_check_size (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
3579 if (array_check (array
, 0) == FAILURE
)
3582 if (dim_check (dim
, 1, true) == FAILURE
)
3585 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
3588 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
3590 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
3591 "with KIND argument at %L",
3592 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
3601 gfc_check_sizeof (gfc_expr
*arg
)
3603 if (arg
->ts
.type
== BT_PROCEDURE
)
3605 gfc_error ("'%s' argument of '%s' intrinsic at %L may not be a procedure",
3606 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3615 gfc_check_c_sizeof (gfc_expr
*arg
)
3617 if (gfc_verify_c_interop (&arg
->ts
) != SUCCESS
)
3619 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an "
3620 "interoperable data entity",
3621 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3630 gfc_check_sleep_sub (gfc_expr
*seconds
)
3632 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
3635 if (scalar_check (seconds
, 0) == FAILURE
)
3642 gfc_check_sngl (gfc_expr
*a
)
3644 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
3647 if ((a
->ts
.kind
!= gfc_default_double_kind
)
3648 && gfc_notify_std (GFC_STD_GNU
, "GNU extension: non double precision "
3649 "REAL argument to %s intrinsic at %L",
3650 gfc_current_intrinsic
, &a
->where
) == FAILURE
)
3657 gfc_check_spread (gfc_expr
*source
, gfc_expr
*dim
, gfc_expr
*ncopies
)
3659 if (source
->rank
>= GFC_MAX_DIMENSIONS
)
3661 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
3662 "than rank %d", gfc_current_intrinsic_arg
[0]->name
,
3663 gfc_current_intrinsic
, &source
->where
, GFC_MAX_DIMENSIONS
);
3671 if (dim_check (dim
, 1, false) == FAILURE
)
3674 /* dim_rank_check() does not apply here. */
3676 && dim
->expr_type
== EXPR_CONSTANT
3677 && (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
3678 || mpz_cmp_ui (dim
->value
.integer
, source
->rank
+ 1) > 0))
3680 gfc_error ("'%s' argument of '%s' intrinsic at %L is not a valid "
3681 "dimension index", gfc_current_intrinsic_arg
[1]->name
,
3682 gfc_current_intrinsic
, &dim
->where
);
3686 if (type_check (ncopies
, 2, BT_INTEGER
) == FAILURE
)
3689 if (scalar_check (ncopies
, 2) == FAILURE
)
3696 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
3700 gfc_check_fgetputc_sub (gfc_expr
*unit
, gfc_expr
*c
, gfc_expr
*status
)
3702 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3705 if (scalar_check (unit
, 0) == FAILURE
)
3708 if (type_check (c
, 1, BT_CHARACTER
) == FAILURE
)
3710 if (kind_value_check (c
, 1, gfc_default_character_kind
) == FAILURE
)
3716 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
3717 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
3718 || scalar_check (status
, 2) == FAILURE
)
3726 gfc_check_fgetputc (gfc_expr
*unit
, gfc_expr
*c
)
3728 return gfc_check_fgetputc_sub (unit
, c
, NULL
);
3733 gfc_check_fgetput_sub (gfc_expr
*c
, gfc_expr
*status
)
3735 if (type_check (c
, 0, BT_CHARACTER
) == FAILURE
)
3737 if (kind_value_check (c
, 0, gfc_default_character_kind
) == FAILURE
)
3743 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
3744 || kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
3745 || scalar_check (status
, 1) == FAILURE
)
3753 gfc_check_fgetput (gfc_expr
*c
)
3755 return gfc_check_fgetput_sub (c
, NULL
);
3760 gfc_check_fseek_sub (gfc_expr
*unit
, gfc_expr
*offset
, gfc_expr
*whence
, gfc_expr
*status
)
3762 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3765 if (scalar_check (unit
, 0) == FAILURE
)
3768 if (type_check (offset
, 1, BT_INTEGER
) == FAILURE
)
3771 if (scalar_check (offset
, 1) == FAILURE
)
3774 if (type_check (whence
, 2, BT_INTEGER
) == FAILURE
)
3777 if (scalar_check (whence
, 2) == FAILURE
)
3783 if (type_check (status
, 3, BT_INTEGER
) == FAILURE
)
3786 if (kind_value_check (status
, 3, 4) == FAILURE
)
3789 if (scalar_check (status
, 3) == FAILURE
)
3798 gfc_check_fstat (gfc_expr
*unit
, gfc_expr
*array
)
3800 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3803 if (scalar_check (unit
, 0) == FAILURE
)
3806 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3807 || kind_value_check (unit
, 0, gfc_default_integer_kind
) == FAILURE
)
3810 if (array_check (array
, 1) == FAILURE
)
3818 gfc_check_fstat_sub (gfc_expr
*unit
, gfc_expr
*array
, gfc_expr
*status
)
3820 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3823 if (scalar_check (unit
, 0) == FAILURE
)
3826 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3827 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3830 if (array_check (array
, 1) == FAILURE
)
3836 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
3837 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
3840 if (scalar_check (status
, 2) == FAILURE
)
3848 gfc_check_ftell (gfc_expr
*unit
)
3850 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3853 if (scalar_check (unit
, 0) == FAILURE
)
3861 gfc_check_ftell_sub (gfc_expr
*unit
, gfc_expr
*offset
)
3863 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3866 if (scalar_check (unit
, 0) == FAILURE
)
3869 if (type_check (offset
, 1, BT_INTEGER
) == FAILURE
)
3872 if (scalar_check (offset
, 1) == FAILURE
)
3880 gfc_check_stat (gfc_expr
*name
, gfc_expr
*array
)
3882 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3884 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3887 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3888 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3891 if (array_check (array
, 1) == FAILURE
)
3899 gfc_check_stat_sub (gfc_expr
*name
, gfc_expr
*array
, gfc_expr
*status
)
3901 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3903 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3906 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3907 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3910 if (array_check (array
, 1) == FAILURE
)
3916 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
3917 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3920 if (scalar_check (status
, 2) == FAILURE
)
3928 gfc_check_image_index (gfc_expr
*coarray
, gfc_expr
*sub
)
3932 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
3934 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
3938 if (coarray_check (coarray
, 0) == FAILURE
)
3943 gfc_error ("%s argument to IMAGE_INDEX must be a rank one array at %L",
3944 gfc_current_intrinsic_arg
[1]->name
, &sub
->where
);
3948 if (gfc_array_size (sub
, &nelems
) == SUCCESS
)
3950 int corank
= gfc_get_corank (coarray
);
3952 if (mpz_cmp_ui (nelems
, corank
) != 0)
3954 gfc_error ("The number of array elements of the SUB argument to "
3955 "IMAGE_INDEX at %L shall be %d (corank) not %d",
3956 &sub
->where
, corank
, (int) mpz_get_si (nelems
));
3968 gfc_check_this_image (gfc_expr
*coarray
, gfc_expr
*dim
)
3970 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
3972 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
3976 if (dim
!= NULL
&& coarray
== NULL
)
3978 gfc_error ("DIM argument without ARRAY argument not allowed for THIS_IMAGE "
3979 "intrinsic at %L", &dim
->where
);
3983 if (coarray
== NULL
)
3986 if (coarray_check (coarray
, 0) == FAILURE
)
3991 if (dim_check (dim
, 1, false) == FAILURE
)
3994 if (dim_corank_check (dim
, coarray
) == FAILURE
)
4001 /* Calculate the sizes for transfer, used by gfc_check_transfer and also
4002 by gfc_simplify_transfer. Return FAILURE if we cannot do so. */
4005 gfc_calculate_transfer_sizes (gfc_expr
*source
, gfc_expr
*mold
, gfc_expr
*size
,
4006 size_t *source_size
, size_t *result_size
,
4007 size_t *result_length_p
)
4009 size_t result_elt_size
;
4011 gfc_expr
*mold_element
;
4013 if (source
->expr_type
== EXPR_FUNCTION
)
4016 if (size
&& size
->expr_type
!= EXPR_CONSTANT
)
4019 /* Calculate the size of the source. */
4020 if (source
->expr_type
== EXPR_ARRAY
4021 && gfc_array_size (source
, &tmp
) == FAILURE
)
4024 *source_size
= gfc_target_expr_size (source
);
4025 if (*source_size
== 0)
4028 mold_element
= mold
->expr_type
== EXPR_ARRAY
4029 ? gfc_constructor_first (mold
->value
.constructor
)->expr
4032 /* Determine the size of the element. */
4033 result_elt_size
= gfc_target_expr_size (mold_element
);
4034 if (result_elt_size
== 0)
4037 if (mold
->expr_type
== EXPR_ARRAY
|| mold
->rank
|| size
)
4042 result_length
= (size_t)mpz_get_ui (size
->value
.integer
);
4045 result_length
= *source_size
/ result_elt_size
;
4046 if (result_length
* result_elt_size
< *source_size
)
4050 *result_size
= result_length
* result_elt_size
;
4051 if (result_length_p
)
4052 *result_length_p
= result_length
;
4055 *result_size
= result_elt_size
;
4062 gfc_check_transfer (gfc_expr
*source
, gfc_expr
*mold
, gfc_expr
*size
)
4067 if (mold
->ts
.type
== BT_HOLLERITH
)
4069 gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
4070 &mold
->where
, gfc_basic_typename (BT_HOLLERITH
));
4076 if (type_check (size
, 2, BT_INTEGER
) == FAILURE
)
4079 if (scalar_check (size
, 2) == FAILURE
)
4082 if (nonoptional_check (size
, 2) == FAILURE
)
4086 if (!gfc_option
.warn_surprising
)
4089 /* If we can't calculate the sizes, we cannot check any more.
4090 Return SUCCESS for that case. */
4092 if (gfc_calculate_transfer_sizes (source
, mold
, size
, &source_size
,
4093 &result_size
, NULL
) == FAILURE
)
4096 if (source_size
< result_size
)
4097 gfc_warning("Intrinsic TRANSFER at %L has partly undefined result: "
4098 "source size %ld < result size %ld", &source
->where
,
4099 (long) source_size
, (long) result_size
);
4106 gfc_check_transpose (gfc_expr
*matrix
)
4108 if (rank_check (matrix
, 0, 2) == FAILURE
)
4116 gfc_check_ubound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
4118 if (array_check (array
, 0) == FAILURE
)
4121 if (dim_check (dim
, 1, false) == FAILURE
)
4124 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
4127 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
4129 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
4130 "with KIND argument at %L",
4131 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
4139 gfc_check_ucobound (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*kind
)
4141 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
4143 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4147 if (coarray_check (coarray
, 0) == FAILURE
)
4152 if (dim_check (dim
, 1, false) == FAILURE
)
4155 if (dim_corank_check (dim
, coarray
) == FAILURE
)
4159 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
4167 gfc_check_unpack (gfc_expr
*vector
, gfc_expr
*mask
, gfc_expr
*field
)
4171 if (rank_check (vector
, 0, 1) == FAILURE
)
4174 if (array_check (mask
, 1) == FAILURE
)
4177 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
4180 if (same_type_check (vector
, 0, field
, 2) == FAILURE
)
4183 if (mask
->expr_type
== EXPR_ARRAY
4184 && gfc_array_size (vector
, &vector_size
) == SUCCESS
)
4186 int mask_true_count
= 0;
4187 gfc_constructor
*mask_ctor
;
4188 mask_ctor
= gfc_constructor_first (mask
->value
.constructor
);
4191 if (mask_ctor
->expr
->expr_type
!= EXPR_CONSTANT
)
4193 mask_true_count
= 0;
4197 if (mask_ctor
->expr
->value
.logical
)
4200 mask_ctor
= gfc_constructor_next (mask_ctor
);
4203 if (mpz_get_si (vector_size
) < mask_true_count
)
4205 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
4206 "provide at least as many elements as there "
4207 "are .TRUE. values in '%s' (%ld/%d)",
4208 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4209 &vector
->where
, gfc_current_intrinsic_arg
[1]->name
,
4210 mpz_get_si (vector_size
), mask_true_count
);
4214 mpz_clear (vector_size
);
4217 if (mask
->rank
!= field
->rank
&& field
->rank
!= 0)
4219 gfc_error ("'%s' argument of '%s' intrinsic at %L must have "
4220 "the same rank as '%s' or be a scalar",
4221 gfc_current_intrinsic_arg
[2]->name
, gfc_current_intrinsic
,
4222 &field
->where
, gfc_current_intrinsic_arg
[1]->name
);
4226 if (mask
->rank
== field
->rank
)
4229 for (i
= 0; i
< field
->rank
; i
++)
4230 if (! identical_dimen_shape (mask
, i
, field
, i
))
4232 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L "
4233 "must have identical shape.",
4234 gfc_current_intrinsic_arg
[2]->name
,
4235 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
4245 gfc_check_verify (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
4247 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
4250 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
4253 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
4256 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
4258 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
4259 "with KIND argument at %L",
4260 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
4268 gfc_check_trim (gfc_expr
*x
)
4270 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
4273 if (scalar_check (x
, 0) == FAILURE
)
4281 gfc_check_ttynam (gfc_expr
*unit
)
4283 if (scalar_check (unit
, 0) == FAILURE
)
4286 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
4293 /* Common check function for the half a dozen intrinsics that have a
4294 single real argument. */
4297 gfc_check_x (gfc_expr
*x
)
4299 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
4306 /************* Check functions for intrinsic subroutines *************/
4309 gfc_check_cpu_time (gfc_expr
*time
)
4311 if (scalar_check (time
, 0) == FAILURE
)
4314 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
4317 if (variable_check (time
, 0, false) == FAILURE
)
4325 gfc_check_date_and_time (gfc_expr
*date
, gfc_expr
*time
,
4326 gfc_expr
*zone
, gfc_expr
*values
)
4330 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
4332 if (kind_value_check (date
, 0, gfc_default_character_kind
) == FAILURE
)
4334 if (scalar_check (date
, 0) == FAILURE
)
4336 if (variable_check (date
, 0, false) == FAILURE
)
4342 if (type_check (time
, 1, BT_CHARACTER
) == FAILURE
)
4344 if (kind_value_check (time
, 1, gfc_default_character_kind
) == FAILURE
)
4346 if (scalar_check (time
, 1) == FAILURE
)
4348 if (variable_check (time
, 1, false) == FAILURE
)
4354 if (type_check (zone
, 2, BT_CHARACTER
) == FAILURE
)
4356 if (kind_value_check (zone
, 2, gfc_default_character_kind
) == FAILURE
)
4358 if (scalar_check (zone
, 2) == FAILURE
)
4360 if (variable_check (zone
, 2, false) == FAILURE
)
4366 if (type_check (values
, 3, BT_INTEGER
) == FAILURE
)
4368 if (array_check (values
, 3) == FAILURE
)
4370 if (rank_check (values
, 3, 1) == FAILURE
)
4372 if (variable_check (values
, 3, false) == FAILURE
)
4381 gfc_check_mvbits (gfc_expr
*from
, gfc_expr
*frompos
, gfc_expr
*len
,
4382 gfc_expr
*to
, gfc_expr
*topos
)
4384 if (type_check (from
, 0, BT_INTEGER
) == FAILURE
)
4387 if (type_check (frompos
, 1, BT_INTEGER
) == FAILURE
)
4390 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
4393 if (same_type_check (from
, 0, to
, 3) == FAILURE
)
4396 if (variable_check (to
, 3, false) == FAILURE
)
4399 if (type_check (topos
, 4, BT_INTEGER
) == FAILURE
)
4402 if (nonnegative_check ("frompos", frompos
) == FAILURE
)
4405 if (nonnegative_check ("topos", topos
) == FAILURE
)
4408 if (nonnegative_check ("len", len
) == FAILURE
)
4411 if (less_than_bitsize2 ("from", from
, "frompos", frompos
, "len", len
)
4415 if (less_than_bitsize2 ("to", to
, "topos", topos
, "len", len
) == FAILURE
)
4423 gfc_check_random_number (gfc_expr
*harvest
)
4425 if (type_check (harvest
, 0, BT_REAL
) == FAILURE
)
4428 if (variable_check (harvest
, 0, false) == FAILURE
)
4436 gfc_check_random_seed (gfc_expr
*size
, gfc_expr
*put
, gfc_expr
*get
)
4438 unsigned int nargs
= 0, kiss_size
;
4439 locus
*where
= NULL
;
4440 mpz_t put_size
, get_size
;
4441 bool have_gfc_real_16
; /* Try and mimic HAVE_GFC_REAL_16 in libgfortran. */
4443 have_gfc_real_16
= gfc_validate_kind (BT_REAL
, 16, true) != -1;
4445 /* Keep the number of bytes in sync with kiss_size in
4446 libgfortran/intrinsics/random.c. */
4447 kiss_size
= (have_gfc_real_16
? 48 : 32) / gfc_default_integer_kind
;
4451 if (size
->expr_type
!= EXPR_VARIABLE
4452 || !size
->symtree
->n
.sym
->attr
.optional
)
4455 if (scalar_check (size
, 0) == FAILURE
)
4458 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
4461 if (variable_check (size
, 0, false) == FAILURE
)
4464 if (kind_value_check (size
, 0, gfc_default_integer_kind
) == FAILURE
)
4470 if (put
->expr_type
!= EXPR_VARIABLE
4471 || !put
->symtree
->n
.sym
->attr
.optional
)
4474 where
= &put
->where
;
4477 if (array_check (put
, 1) == FAILURE
)
4480 if (rank_check (put
, 1, 1) == FAILURE
)
4483 if (type_check (put
, 1, BT_INTEGER
) == FAILURE
)
4486 if (kind_value_check (put
, 1, gfc_default_integer_kind
) == FAILURE
)
4489 if (gfc_array_size (put
, &put_size
) == SUCCESS
4490 && mpz_get_ui (put_size
) < kiss_size
)
4491 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
4492 "too small (%i/%i)",
4493 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
4494 where
, (int) mpz_get_ui (put_size
), kiss_size
);
4499 if (get
->expr_type
!= EXPR_VARIABLE
4500 || !get
->symtree
->n
.sym
->attr
.optional
)
4503 where
= &get
->where
;
4506 if (array_check (get
, 2) == FAILURE
)
4509 if (rank_check (get
, 2, 1) == FAILURE
)
4512 if (type_check (get
, 2, BT_INTEGER
) == FAILURE
)
4515 if (variable_check (get
, 2, false) == FAILURE
)
4518 if (kind_value_check (get
, 2, gfc_default_integer_kind
) == FAILURE
)
4521 if (gfc_array_size (get
, &get_size
) == SUCCESS
4522 && mpz_get_ui (get_size
) < kiss_size
)
4523 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
4524 "too small (%i/%i)",
4525 gfc_current_intrinsic_arg
[2]->name
, gfc_current_intrinsic
,
4526 where
, (int) mpz_get_ui (get_size
), kiss_size
);
4529 /* RANDOM_SEED may not have more than one non-optional argument. */
4531 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
, where
);
4538 gfc_check_second_sub (gfc_expr
*time
)
4540 if (scalar_check (time
, 0) == FAILURE
)
4543 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
4546 if (kind_value_check(time
, 0, 4) == FAILURE
)
4553 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
4554 count, count_rate, and count_max are all optional arguments */
4557 gfc_check_system_clock (gfc_expr
*count
, gfc_expr
*count_rate
,
4558 gfc_expr
*count_max
)
4562 if (scalar_check (count
, 0) == FAILURE
)
4565 if (type_check (count
, 0, BT_INTEGER
) == FAILURE
)
4568 if (variable_check (count
, 0, false) == FAILURE
)
4572 if (count_rate
!= NULL
)
4574 if (scalar_check (count_rate
, 1) == FAILURE
)
4577 if (type_check (count_rate
, 1, BT_INTEGER
) == FAILURE
)
4580 if (variable_check (count_rate
, 1, false) == FAILURE
)
4584 && same_type_check (count
, 0, count_rate
, 1) == FAILURE
)
4589 if (count_max
!= NULL
)
4591 if (scalar_check (count_max
, 2) == FAILURE
)
4594 if (type_check (count_max
, 2, BT_INTEGER
) == FAILURE
)
4597 if (variable_check (count_max
, 2, false) == FAILURE
)
4601 && same_type_check (count
, 0, count_max
, 2) == FAILURE
)
4604 if (count_rate
!= NULL
4605 && same_type_check (count_rate
, 1, count_max
, 2) == FAILURE
)
4614 gfc_check_irand (gfc_expr
*x
)
4619 if (scalar_check (x
, 0) == FAILURE
)
4622 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
4625 if (kind_value_check(x
, 0, 4) == FAILURE
)
4633 gfc_check_alarm_sub (gfc_expr
*seconds
, gfc_expr
*handler
, gfc_expr
*status
)
4635 if (scalar_check (seconds
, 0) == FAILURE
)
4637 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
4640 if (int_or_proc_check (handler
, 1) == FAILURE
)
4642 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
4648 if (scalar_check (status
, 2) == FAILURE
)
4650 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
4652 if (kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
4660 gfc_check_rand (gfc_expr
*x
)
4665 if (scalar_check (x
, 0) == FAILURE
)
4668 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
4671 if (kind_value_check(x
, 0, 4) == FAILURE
)
4679 gfc_check_srand (gfc_expr
*x
)
4681 if (scalar_check (x
, 0) == FAILURE
)
4684 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
4687 if (kind_value_check(x
, 0, 4) == FAILURE
)
4695 gfc_check_ctime_sub (gfc_expr
*time
, gfc_expr
*result
)
4697 if (scalar_check (time
, 0) == FAILURE
)
4699 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
4702 if (type_check (result
, 1, BT_CHARACTER
) == FAILURE
)
4704 if (kind_value_check (result
, 1, gfc_default_character_kind
) == FAILURE
)
4712 gfc_check_dtime_etime (gfc_expr
*x
)
4714 if (array_check (x
, 0) == FAILURE
)
4717 if (rank_check (x
, 0, 1) == FAILURE
)
4720 if (variable_check (x
, 0, false) == FAILURE
)
4723 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
4726 if (kind_value_check(x
, 0, 4) == FAILURE
)
4734 gfc_check_dtime_etime_sub (gfc_expr
*values
, gfc_expr
*time
)
4736 if (array_check (values
, 0) == FAILURE
)
4739 if (rank_check (values
, 0, 1) == FAILURE
)
4742 if (variable_check (values
, 0, false) == FAILURE
)
4745 if (type_check (values
, 0, BT_REAL
) == FAILURE
)
4748 if (kind_value_check(values
, 0, 4) == FAILURE
)
4751 if (scalar_check (time
, 1) == FAILURE
)
4754 if (type_check (time
, 1, BT_REAL
) == FAILURE
)
4757 if (kind_value_check(time
, 1, 4) == FAILURE
)
4765 gfc_check_fdate_sub (gfc_expr
*date
)
4767 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
4769 if (kind_value_check (date
, 0, gfc_default_character_kind
) == FAILURE
)
4777 gfc_check_gerror (gfc_expr
*msg
)
4779 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
4781 if (kind_value_check (msg
, 0, gfc_default_character_kind
) == FAILURE
)
4789 gfc_check_getcwd_sub (gfc_expr
*cwd
, gfc_expr
*status
)
4791 if (type_check (cwd
, 0, BT_CHARACTER
) == FAILURE
)
4793 if (kind_value_check (cwd
, 0, gfc_default_character_kind
) == FAILURE
)
4799 if (scalar_check (status
, 1) == FAILURE
)
4802 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
4810 gfc_check_getarg (gfc_expr
*pos
, gfc_expr
*value
)
4812 if (type_check (pos
, 0, BT_INTEGER
) == FAILURE
)
4815 if (pos
->ts
.kind
> gfc_default_integer_kind
)
4817 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
4818 "not wider than the default kind (%d)",
4819 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4820 &pos
->where
, gfc_default_integer_kind
);
4824 if (type_check (value
, 1, BT_CHARACTER
) == FAILURE
)
4826 if (kind_value_check (value
, 1, gfc_default_character_kind
) == FAILURE
)
4834 gfc_check_getlog (gfc_expr
*msg
)
4836 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
4838 if (kind_value_check (msg
, 0, gfc_default_character_kind
) == FAILURE
)
4846 gfc_check_exit (gfc_expr
*status
)
4851 if (type_check (status
, 0, BT_INTEGER
) == FAILURE
)
4854 if (scalar_check (status
, 0) == FAILURE
)
4862 gfc_check_flush (gfc_expr
*unit
)
4867 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
4870 if (scalar_check (unit
, 0) == FAILURE
)
4878 gfc_check_free (gfc_expr
*i
)
4880 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
4883 if (scalar_check (i
, 0) == FAILURE
)
4891 gfc_check_hostnm (gfc_expr
*name
)
4893 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
4895 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
4903 gfc_check_hostnm_sub (gfc_expr
*name
, gfc_expr
*status
)
4905 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
4907 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
4913 if (scalar_check (status
, 1) == FAILURE
)
4916 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
4924 gfc_check_itime_idate (gfc_expr
*values
)
4926 if (array_check (values
, 0) == FAILURE
)
4929 if (rank_check (values
, 0, 1) == FAILURE
)
4932 if (variable_check (values
, 0, false) == FAILURE
)
4935 if (type_check (values
, 0, BT_INTEGER
) == FAILURE
)
4938 if (kind_value_check(values
, 0, gfc_default_integer_kind
) == FAILURE
)
4946 gfc_check_ltime_gmtime (gfc_expr
*time
, gfc_expr
*values
)
4948 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
4951 if (kind_value_check(time
, 0, gfc_default_integer_kind
) == FAILURE
)
4954 if (scalar_check (time
, 0) == FAILURE
)
4957 if (array_check (values
, 1) == FAILURE
)
4960 if (rank_check (values
, 1, 1) == FAILURE
)
4963 if (variable_check (values
, 1, false) == FAILURE
)
4966 if (type_check (values
, 1, BT_INTEGER
) == FAILURE
)
4969 if (kind_value_check(values
, 1, gfc_default_integer_kind
) == FAILURE
)
4977 gfc_check_ttynam_sub (gfc_expr
*unit
, gfc_expr
*name
)
4979 if (scalar_check (unit
, 0) == FAILURE
)
4982 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
4985 if (type_check (name
, 1, BT_CHARACTER
) == FAILURE
)
4987 if (kind_value_check (name
, 1, gfc_default_character_kind
) == FAILURE
)
4995 gfc_check_isatty (gfc_expr
*unit
)
5000 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
5003 if (scalar_check (unit
, 0) == FAILURE
)
5011 gfc_check_isnan (gfc_expr
*x
)
5013 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
5021 gfc_check_perror (gfc_expr
*string
)
5023 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
)
5025 if (kind_value_check (string
, 0, gfc_default_character_kind
) == FAILURE
)
5033 gfc_check_umask (gfc_expr
*mask
)
5035 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
5038 if (scalar_check (mask
, 0) == FAILURE
)
5046 gfc_check_umask_sub (gfc_expr
*mask
, gfc_expr
*old
)
5048 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
5051 if (scalar_check (mask
, 0) == FAILURE
)
5057 if (scalar_check (old
, 1) == FAILURE
)
5060 if (type_check (old
, 1, BT_INTEGER
) == FAILURE
)
5068 gfc_check_unlink (gfc_expr
*name
)
5070 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
5072 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
5080 gfc_check_unlink_sub (gfc_expr
*name
, gfc_expr
*status
)
5082 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
5084 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
5090 if (scalar_check (status
, 1) == FAILURE
)
5093 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
5101 gfc_check_signal (gfc_expr
*number
, gfc_expr
*handler
)
5103 if (scalar_check (number
, 0) == FAILURE
)
5105 if (type_check (number
, 0, BT_INTEGER
) == FAILURE
)
5108 if (int_or_proc_check (handler
, 1) == FAILURE
)
5110 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
5118 gfc_check_signal_sub (gfc_expr
*number
, gfc_expr
*handler
, gfc_expr
*status
)
5120 if (scalar_check (number
, 0) == FAILURE
)
5122 if (type_check (number
, 0, BT_INTEGER
) == FAILURE
)
5125 if (int_or_proc_check (handler
, 1) == FAILURE
)
5127 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
5133 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
5135 if (scalar_check (status
, 2) == FAILURE
)
5143 gfc_check_system_sub (gfc_expr
*cmd
, gfc_expr
*status
)
5145 if (type_check (cmd
, 0, BT_CHARACTER
) == FAILURE
)
5147 if (kind_value_check (cmd
, 0, gfc_default_character_kind
) == FAILURE
)
5150 if (scalar_check (status
, 1) == FAILURE
)
5153 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
5156 if (kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
)
5163 /* This is used for the GNU intrinsics AND, OR and XOR. */
5165 gfc_check_and (gfc_expr
*i
, gfc_expr
*j
)
5167 if (i
->ts
.type
!= BT_INTEGER
&& i
->ts
.type
!= BT_LOGICAL
)
5169 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
5170 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
5171 gfc_current_intrinsic
, &i
->where
);
5175 if (j
->ts
.type
!= BT_INTEGER
&& j
->ts
.type
!= BT_LOGICAL
)
5177 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
5178 "or LOGICAL", gfc_current_intrinsic_arg
[1]->name
,
5179 gfc_current_intrinsic
, &j
->where
);
5183 if (i
->ts
.type
!= j
->ts
.type
)
5185 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
5186 "have the same type", gfc_current_intrinsic_arg
[0]->name
,
5187 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
5192 if (scalar_check (i
, 0) == FAILURE
)
5195 if (scalar_check (j
, 1) == FAILURE
)
5203 gfc_check_storage_size (gfc_expr
*a ATTRIBUTE_UNUSED
, gfc_expr
*kind
)
5208 if (type_check (kind
, 1, BT_INTEGER
) == FAILURE
)
5211 if (scalar_check (kind
, 1) == FAILURE
)
5214 if (kind
->expr_type
!= EXPR_CONSTANT
)
5216 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
5217 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,