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. */
32 #include "coretypes.h"
35 #include "intrinsic.h"
36 #include "constructor.h"
37 #include "target-memory.h"
40 /* Make sure an expression is a scalar. */
43 scalar_check (gfc_expr
*e
, int n
)
48 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a scalar",
49 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
56 /* Check the type of an expression. */
59 type_check (gfc_expr
*e
, int n
, bt type
)
61 if (e
->ts
.type
== type
)
64 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
65 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
66 &e
->where
, gfc_basic_typename (type
));
72 /* Check that the expression is a numeric type. */
75 numeric_check (gfc_expr
*e
, int n
)
77 if (gfc_numeric_ts (&e
->ts
))
80 /* If the expression has not got a type, check if its namespace can
81 offer a default type. */
82 if ((e
->expr_type
== EXPR_VARIABLE
|| e
->expr_type
== EXPR_VARIABLE
)
83 && e
->symtree
->n
.sym
->ts
.type
== BT_UNKNOWN
84 && gfc_set_default_type (e
->symtree
->n
.sym
, 0,
85 e
->symtree
->n
.sym
->ns
) == SUCCESS
86 && gfc_numeric_ts (&e
->symtree
->n
.sym
->ts
))
88 e
->ts
= e
->symtree
->n
.sym
->ts
;
92 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a numeric type",
93 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
100 /* Check that an expression is integer or real. */
103 int_or_real_check (gfc_expr
*e
, int n
)
105 if (e
->ts
.type
!= BT_INTEGER
&& e
->ts
.type
!= BT_REAL
)
107 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
108 "or REAL", gfc_current_intrinsic_arg
[n
]->name
,
109 gfc_current_intrinsic
, &e
->where
);
117 /* Check that an expression is real or complex. */
120 real_or_complex_check (gfc_expr
*e
, int n
)
122 if (e
->ts
.type
!= BT_REAL
&& e
->ts
.type
!= BT_COMPLEX
)
124 gfc_error ("'%s' argument of '%s' intrinsic at %L must be REAL "
125 "or COMPLEX", gfc_current_intrinsic_arg
[n
]->name
,
126 gfc_current_intrinsic
, &e
->where
);
134 /* Check that an expression is INTEGER or PROCEDURE. */
137 int_or_proc_check (gfc_expr
*e
, int n
)
139 if (e
->ts
.type
!= BT_INTEGER
&& e
->ts
.type
!= BT_PROCEDURE
)
141 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
142 "or PROCEDURE", gfc_current_intrinsic_arg
[n
]->name
,
143 gfc_current_intrinsic
, &e
->where
);
151 /* Check that the expression is an optional constant integer
152 and that it specifies a valid kind for that type. */
155 kind_check (gfc_expr
*k
, int n
, bt type
)
162 if (type_check (k
, n
, BT_INTEGER
) == FAILURE
)
165 if (scalar_check (k
, n
) == FAILURE
)
168 if (gfc_check_init_expr (k
) != SUCCESS
)
170 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
171 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
176 if (gfc_extract_int (k
, &kind
) != NULL
177 || gfc_validate_kind (type
, kind
, true) < 0)
179 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type
),
188 /* Make sure the expression is a double precision real. */
191 double_check (gfc_expr
*d
, int n
)
193 if (type_check (d
, n
, BT_REAL
) == FAILURE
)
196 if (d
->ts
.kind
!= gfc_default_double_kind
)
198 gfc_error ("'%s' argument of '%s' intrinsic at %L must be double "
199 "precision", gfc_current_intrinsic_arg
[n
]->name
,
200 gfc_current_intrinsic
, &d
->where
);
209 coarray_check (gfc_expr
*e
, int n
)
211 if (e
->ts
.type
== BT_CLASS
&& gfc_expr_attr (e
).class_ok
212 && CLASS_DATA (e
)->attr
.codimension
213 && CLASS_DATA (e
)->as
->corank
)
215 gfc_add_class_array_ref (e
);
219 if (!gfc_is_coarray (e
))
221 gfc_error ("Expected coarray variable as '%s' argument to the %s "
222 "intrinsic at %L", gfc_current_intrinsic_arg
[n
]->name
,
223 gfc_current_intrinsic
, &e
->where
);
231 /* Make sure the expression is a logical array. */
234 logical_array_check (gfc_expr
*array
, int n
)
236 if (array
->ts
.type
!= BT_LOGICAL
|| array
->rank
== 0)
238 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a logical "
239 "array", gfc_current_intrinsic_arg
[n
]->name
,
240 gfc_current_intrinsic
, &array
->where
);
248 /* Make sure an expression is an array. */
251 array_check (gfc_expr
*e
, int n
)
253 if (e
->ts
.type
== BT_CLASS
&& gfc_expr_attr (e
).class_ok
254 && CLASS_DATA (e
)->attr
.dimension
255 && CLASS_DATA (e
)->as
->rank
)
257 gfc_add_class_array_ref (e
);
264 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array",
265 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
272 /* If expr is a constant, then check to ensure that it is greater than
276 nonnegative_check (const char *arg
, gfc_expr
*expr
)
280 if (expr
->expr_type
== EXPR_CONSTANT
)
282 gfc_extract_int (expr
, &i
);
285 gfc_error ("'%s' at %L must be nonnegative", arg
, &expr
->where
);
294 /* If expr2 is constant, then check that the value is less than
295 (less than or equal to, if 'or_equal' is true) bit_size(expr1). */
298 less_than_bitsize1 (const char *arg1
, gfc_expr
*expr1
, const char *arg2
,
299 gfc_expr
*expr2
, bool or_equal
)
303 if (expr2
->expr_type
== EXPR_CONSTANT
)
305 gfc_extract_int (expr2
, &i2
);
306 i3
= gfc_validate_kind (BT_INTEGER
, expr1
->ts
.kind
, false);
308 /* For ISHFT[C], check that |shift| <= bit_size(i). */
314 if (i2
> gfc_integer_kinds
[i3
].bit_size
)
316 gfc_error ("The absolute value of SHIFT at %L must be less "
317 "than or equal to BIT_SIZE('%s')",
318 &expr2
->where
, arg1
);
325 if (i2
> gfc_integer_kinds
[i3
].bit_size
)
327 gfc_error ("'%s' at %L must be less than "
328 "or equal to BIT_SIZE('%s')",
329 arg2
, &expr2
->where
, arg1
);
335 if (i2
>= gfc_integer_kinds
[i3
].bit_size
)
337 gfc_error ("'%s' at %L must be less than BIT_SIZE('%s')",
338 arg2
, &expr2
->where
, arg1
);
348 /* If expr is constant, then check that the value is less than or equal
349 to the bit_size of the kind k. */
352 less_than_bitsizekind (const char *arg
, gfc_expr
*expr
, int k
)
356 if (expr
->expr_type
!= EXPR_CONSTANT
)
359 i
= gfc_validate_kind (BT_INTEGER
, k
, false);
360 gfc_extract_int (expr
, &val
);
362 if (val
> gfc_integer_kinds
[i
].bit_size
)
364 gfc_error ("'%s' at %L must be less than or equal to the BIT_SIZE of "
365 "INTEGER(KIND=%d)", arg
, &expr
->where
, k
);
373 /* If expr2 and expr3 are constants, then check that the value is less than
374 or equal to bit_size(expr1). */
377 less_than_bitsize2 (const char *arg1
, gfc_expr
*expr1
, const char *arg2
,
378 gfc_expr
*expr2
, const char *arg3
, gfc_expr
*expr3
)
382 if (expr2
->expr_type
== EXPR_CONSTANT
&& expr3
->expr_type
== EXPR_CONSTANT
)
384 gfc_extract_int (expr2
, &i2
);
385 gfc_extract_int (expr3
, &i3
);
387 i3
= gfc_validate_kind (BT_INTEGER
, expr1
->ts
.kind
, false);
388 if (i2
> gfc_integer_kinds
[i3
].bit_size
)
390 gfc_error ("'%s + %s' at %L must be less than or equal "
392 arg2
, arg3
, &expr2
->where
, arg1
);
400 /* Make sure two expressions have the same type. */
403 same_type_check (gfc_expr
*e
, int n
, gfc_expr
*f
, int m
)
405 if (gfc_compare_types (&e
->ts
, &f
->ts
))
408 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same type "
409 "and kind as '%s'", gfc_current_intrinsic_arg
[m
]->name
,
410 gfc_current_intrinsic
, &f
->where
,
411 gfc_current_intrinsic_arg
[n
]->name
);
417 /* Make sure that an expression has a certain (nonzero) rank. */
420 rank_check (gfc_expr
*e
, int n
, int rank
)
425 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank %d",
426 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
433 /* Make sure a variable expression is not an optional dummy argument. */
436 nonoptional_check (gfc_expr
*e
, int n
)
438 if (e
->expr_type
== EXPR_VARIABLE
&& e
->symtree
->n
.sym
->attr
.optional
)
440 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
441 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
445 /* TODO: Recursive check on nonoptional variables? */
451 /* Check for ALLOCATABLE attribute. */
454 allocatable_check (gfc_expr
*e
, int n
)
456 symbol_attribute attr
;
458 attr
= gfc_variable_attr (e
, NULL
);
459 if (!attr
.allocatable
)
461 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
462 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
471 /* Check that an expression has a particular kind. */
474 kind_value_check (gfc_expr
*e
, int n
, int k
)
479 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of kind %d",
480 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
487 /* Make sure an expression is a variable. */
490 variable_check (gfc_expr
*e
, int n
, bool allow_proc
)
492 if (e
->expr_type
== EXPR_VARIABLE
493 && e
->symtree
->n
.sym
->attr
.intent
== INTENT_IN
494 && (gfc_current_intrinsic_arg
[n
]->intent
== INTENT_OUT
495 || gfc_current_intrinsic_arg
[n
]->intent
== INTENT_INOUT
))
498 bool pointer
= e
->symtree
->n
.sym
->ts
.type
== BT_CLASS
499 && CLASS_DATA (e
->symtree
->n
.sym
)
500 ? CLASS_DATA (e
->symtree
->n
.sym
)->attr
.class_pointer
501 : e
->symtree
->n
.sym
->attr
.pointer
;
503 for (ref
= e
->ref
; ref
; ref
= ref
->next
)
505 if (pointer
&& ref
->type
== REF_COMPONENT
)
507 if (ref
->type
== REF_COMPONENT
508 && ((ref
->u
.c
.component
->ts
.type
== BT_CLASS
509 && CLASS_DATA (ref
->u
.c
.component
)->attr
.class_pointer
)
510 || (ref
->u
.c
.component
->ts
.type
!= BT_CLASS
511 && ref
->u
.c
.component
->attr
.pointer
)))
517 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be "
518 "INTENT(IN)", gfc_current_intrinsic_arg
[n
]->name
,
519 gfc_current_intrinsic
, &e
->where
);
524 if (e
->expr_type
== EXPR_VARIABLE
525 && e
->symtree
->n
.sym
->attr
.flavor
!= FL_PARAMETER
526 && (allow_proc
|| !e
->symtree
->n
.sym
->attr
.function
))
529 if (e
->expr_type
== EXPR_VARIABLE
&& e
->symtree
->n
.sym
->attr
.function
530 && e
->symtree
->n
.sym
== e
->symtree
->n
.sym
->result
)
533 for (ns
= gfc_current_ns
; ns
; ns
= ns
->parent
)
534 if (ns
->proc_name
== e
->symtree
->n
.sym
)
538 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a variable",
539 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
, &e
->where
);
545 /* Check the common DIM parameter for correctness. */
548 dim_check (gfc_expr
*dim
, int n
, bool optional
)
553 if (type_check (dim
, n
, BT_INTEGER
) == FAILURE
)
556 if (scalar_check (dim
, n
) == FAILURE
)
559 if (!optional
&& nonoptional_check (dim
, n
) == FAILURE
)
566 /* If a coarray DIM parameter is a constant, make sure that it is greater than
567 zero and less than or equal to the corank of the given array. */
570 dim_corank_check (gfc_expr
*dim
, gfc_expr
*array
)
574 gcc_assert (array
->expr_type
== EXPR_VARIABLE
);
576 if (dim
->expr_type
!= EXPR_CONSTANT
)
579 if (array
->ts
.type
== BT_CLASS
)
582 corank
= gfc_get_corank (array
);
584 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
585 || mpz_cmp_ui (dim
->value
.integer
, corank
) > 0)
587 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
588 "codimension index", gfc_current_intrinsic
, &dim
->where
);
597 /* If a DIM parameter is a constant, make sure that it is greater than
598 zero and less than or equal to the rank of the given array. If
599 allow_assumed is zero then dim must be less than the rank of the array
600 for assumed size arrays. */
603 dim_rank_check (gfc_expr
*dim
, gfc_expr
*array
, int allow_assumed
)
611 if (dim
->expr_type
!= EXPR_CONSTANT
)
614 if (array
->ts
.type
== BT_CLASS
)
617 if (array
->expr_type
== EXPR_FUNCTION
&& array
->value
.function
.isym
618 && array
->value
.function
.isym
->id
== GFC_ISYM_SPREAD
)
619 rank
= array
->rank
+ 1;
623 /* Assumed-rank array. */
625 rank
= GFC_MAX_DIMENSIONS
;
627 if (array
->expr_type
== EXPR_VARIABLE
)
629 ar
= gfc_find_array_ref (array
);
630 if (ar
->as
->type
== AS_ASSUMED_SIZE
632 && ar
->type
!= AR_ELEMENT
633 && ar
->type
!= AR_SECTION
)
637 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
638 || mpz_cmp_ui (dim
->value
.integer
, rank
) > 0)
640 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
641 "dimension index", gfc_current_intrinsic
, &dim
->where
);
650 /* Compare the size of a along dimension ai with the size of b along
651 dimension bi, returning 0 if they are known not to be identical,
652 and 1 if they are identical, or if this cannot be determined. */
655 identical_dimen_shape (gfc_expr
*a
, int ai
, gfc_expr
*b
, int bi
)
657 mpz_t a_size
, b_size
;
660 gcc_assert (a
->rank
> ai
);
661 gcc_assert (b
->rank
> bi
);
665 if (gfc_array_dimen_size (a
, ai
, &a_size
) == SUCCESS
)
667 if (gfc_array_dimen_size (b
, bi
, &b_size
) == SUCCESS
)
669 if (mpz_cmp (a_size
, b_size
) != 0)
679 /* Calculate the length of a character variable, including substrings.
680 Strip away parentheses if necessary. Return -1 if no length could
684 gfc_var_strlen (const gfc_expr
*a
)
688 while (a
->expr_type
== EXPR_OP
&& a
->value
.op
.op
== INTRINSIC_PARENTHESES
)
691 for (ra
= a
->ref
; ra
!= NULL
&& ra
->type
!= REF_SUBSTRING
; ra
= ra
->next
)
698 if (ra
->u
.ss
.start
->expr_type
== EXPR_CONSTANT
699 && ra
->u
.ss
.end
->expr_type
== EXPR_CONSTANT
)
701 start_a
= mpz_get_si (ra
->u
.ss
.start
->value
.integer
);
702 end_a
= mpz_get_si (ra
->u
.ss
.end
->value
.integer
);
703 return end_a
- start_a
+ 1;
705 else if (gfc_dep_compare_expr (ra
->u
.ss
.start
, ra
->u
.ss
.end
) == 0)
711 if (a
->ts
.u
.cl
&& a
->ts
.u
.cl
->length
712 && a
->ts
.u
.cl
->length
->expr_type
== EXPR_CONSTANT
)
713 return mpz_get_si (a
->ts
.u
.cl
->length
->value
.integer
);
714 else if (a
->expr_type
== EXPR_CONSTANT
715 && (a
->ts
.u
.cl
== NULL
|| a
->ts
.u
.cl
->length
== NULL
))
716 return a
->value
.character
.length
;
722 /* Check whether two character expressions have the same length;
723 returns SUCCESS if they have or if the length cannot be determined,
724 otherwise return FAILURE and raise a gfc_error. */
727 gfc_check_same_strlen (const gfc_expr
*a
, const gfc_expr
*b
, const char *name
)
731 len_a
= gfc_var_strlen(a
);
732 len_b
= gfc_var_strlen(b
);
734 if (len_a
== -1 || len_b
== -1 || len_a
== len_b
)
738 gfc_error ("Unequal character lengths (%ld/%ld) in %s at %L",
739 len_a
, len_b
, name
, &a
->where
);
745 /***** Check functions *****/
747 /* Check subroutine suitable for intrinsics taking a real argument and
748 a kind argument for the result. */
751 check_a_kind (gfc_expr
*a
, gfc_expr
*kind
, bt type
)
753 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
755 if (kind_check (kind
, 1, type
) == FAILURE
)
762 /* Check subroutine suitable for ceiling, floor and nint. */
765 gfc_check_a_ikind (gfc_expr
*a
, gfc_expr
*kind
)
767 return check_a_kind (a
, kind
, BT_INTEGER
);
771 /* Check subroutine suitable for aint, anint. */
774 gfc_check_a_xkind (gfc_expr
*a
, gfc_expr
*kind
)
776 return check_a_kind (a
, kind
, BT_REAL
);
781 gfc_check_abs (gfc_expr
*a
)
783 if (numeric_check (a
, 0) == FAILURE
)
791 gfc_check_achar (gfc_expr
*a
, gfc_expr
*kind
)
793 if (type_check (a
, 0, BT_INTEGER
) == FAILURE
)
795 if (kind_check (kind
, 1, BT_CHARACTER
) == FAILURE
)
803 gfc_check_access_func (gfc_expr
*name
, gfc_expr
*mode
)
805 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
806 || scalar_check (name
, 0) == FAILURE
)
808 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
811 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
812 || scalar_check (mode
, 1) == FAILURE
)
814 if (kind_value_check (mode
, 1, gfc_default_character_kind
) == FAILURE
)
822 gfc_check_all_any (gfc_expr
*mask
, gfc_expr
*dim
)
824 if (logical_array_check (mask
, 0) == FAILURE
)
827 if (dim_check (dim
, 1, false) == FAILURE
)
830 if (dim_rank_check (dim
, mask
, 0) == FAILURE
)
838 gfc_check_allocated (gfc_expr
*array
)
840 if (variable_check (array
, 0, false) == FAILURE
)
842 if (allocatable_check (array
, 0) == FAILURE
)
849 /* Common check function where the first argument must be real or
850 integer and the second argument must be the same as the first. */
853 gfc_check_a_p (gfc_expr
*a
, gfc_expr
*p
)
855 if (int_or_real_check (a
, 0) == FAILURE
)
858 if (a
->ts
.type
!= p
->ts
.type
)
860 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
861 "have the same type", gfc_current_intrinsic_arg
[0]->name
,
862 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
867 if (a
->ts
.kind
!= p
->ts
.kind
)
869 if (gfc_notify_std (GFC_STD_GNU
, "Different type kinds at %L",
870 &p
->where
) == FAILURE
)
879 gfc_check_x_yd (gfc_expr
*x
, gfc_expr
*y
)
881 if (double_check (x
, 0) == FAILURE
|| double_check (y
, 1) == FAILURE
)
889 gfc_check_associated (gfc_expr
*pointer
, gfc_expr
*target
)
891 symbol_attribute attr1
, attr2
;
896 where
= &pointer
->where
;
898 if (pointer
->expr_type
== EXPR_VARIABLE
|| pointer
->expr_type
== EXPR_FUNCTION
)
899 attr1
= gfc_expr_attr (pointer
);
900 else if (pointer
->expr_type
== EXPR_NULL
)
903 gcc_assert (0); /* Pointer must be a variable or a function. */
905 if (!attr1
.pointer
&& !attr1
.proc_pointer
)
907 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
908 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
914 if (attr1
.pointer
&& gfc_is_coindexed (pointer
))
916 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
917 "coindexed", gfc_current_intrinsic_arg
[0]->name
,
918 gfc_current_intrinsic
, &pointer
->where
);
922 /* Target argument is optional. */
926 where
= &target
->where
;
927 if (target
->expr_type
== EXPR_NULL
)
930 if (target
->expr_type
== EXPR_VARIABLE
|| target
->expr_type
== EXPR_FUNCTION
)
931 attr2
= gfc_expr_attr (target
);
934 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
935 "or target VARIABLE or FUNCTION",
936 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
941 if (attr1
.pointer
&& !attr2
.pointer
&& !attr2
.target
)
943 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
944 "or a TARGET", gfc_current_intrinsic_arg
[1]->name
,
945 gfc_current_intrinsic
, &target
->where
);
950 if (attr1
.pointer
&& gfc_is_coindexed (target
))
952 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
953 "coindexed", gfc_current_intrinsic_arg
[1]->name
,
954 gfc_current_intrinsic
, &target
->where
);
959 if (same_type_check (pointer
, 0, target
, 1) == FAILURE
)
961 if (rank_check (target
, 0, pointer
->rank
) == FAILURE
)
963 if (target
->rank
> 0)
965 for (i
= 0; i
< target
->rank
; i
++)
966 if (target
->ref
->u
.ar
.dimen_type
[i
] == DIMEN_VECTOR
)
968 gfc_error ("Array section with a vector subscript at %L shall not "
969 "be the target of a pointer",
979 gfc_error ("NULL pointer at %L is not permitted as actual argument "
980 "of '%s' intrinsic function", where
, gfc_current_intrinsic
);
987 gfc_check_atan_2 (gfc_expr
*y
, gfc_expr
*x
)
989 /* gfc_notify_std would be a waste of time as the return value
990 is seemingly used only for the generic resolution. The error
991 will be: Too many arguments. */
992 if ((gfc_option
.allow_std
& GFC_STD_F2008
) == 0)
995 return gfc_check_atan2 (y
, x
);
1000 gfc_check_atan2 (gfc_expr
*y
, gfc_expr
*x
)
1002 if (type_check (y
, 0, BT_REAL
) == FAILURE
)
1004 if (same_type_check (y
, 0, x
, 1) == FAILURE
)
1012 gfc_check_atomic (gfc_expr
*atom
, gfc_expr
*value
)
1014 if (!(atom
->ts
.type
== BT_INTEGER
&& atom
->ts
.kind
== gfc_atomic_int_kind
)
1015 && !(atom
->ts
.type
== BT_LOGICAL
1016 && atom
->ts
.kind
== gfc_atomic_logical_kind
))
1018 gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1019 "integer of ATOMIC_INT_KIND or a logical of "
1020 "ATOMIC_LOGICAL_KIND", &atom
->where
, gfc_current_intrinsic
);
1024 if (!gfc_expr_attr (atom
).codimension
)
1026 gfc_error ("ATOM argument at %L of the %s intrinsic function shall be a "
1027 "coarray or coindexed", &atom
->where
, gfc_current_intrinsic
);
1031 if (atom
->ts
.type
!= value
->ts
.type
)
1033 gfc_error ("ATOM and VALUE argument of the %s intrinsic function shall "
1034 "have the same type at %L", gfc_current_intrinsic
,
1044 gfc_check_atomic_def (gfc_expr
*atom
, gfc_expr
*value
)
1046 if (scalar_check (atom
, 0) == FAILURE
|| scalar_check (value
, 1) == FAILURE
)
1049 if (gfc_check_vardef_context (atom
, false, false, NULL
) == FAILURE
)
1051 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1052 "definable", gfc_current_intrinsic
, &atom
->where
);
1056 return gfc_check_atomic (atom
, value
);
1061 gfc_check_atomic_ref (gfc_expr
*value
, gfc_expr
*atom
)
1063 if (scalar_check (value
, 0) == FAILURE
|| scalar_check (atom
, 1) == FAILURE
)
1066 if (gfc_check_vardef_context (value
, false, false, NULL
) == FAILURE
)
1068 gfc_error ("VALUE argument of the %s intrinsic function at %L shall be "
1069 "definable", gfc_current_intrinsic
, &value
->where
);
1073 return gfc_check_atomic (atom
, value
);
1077 /* BESJN and BESYN functions. */
1080 gfc_check_besn (gfc_expr
*n
, gfc_expr
*x
)
1082 if (type_check (n
, 0, BT_INTEGER
) == FAILURE
)
1084 if (n
->expr_type
== EXPR_CONSTANT
)
1087 gfc_extract_int (n
, &i
);
1088 if (i
< 0 && gfc_notify_std (GFC_STD_GNU
, "Negative argument "
1089 "N at %L", &n
->where
) == FAILURE
)
1093 if (type_check (x
, 1, BT_REAL
) == FAILURE
)
1100 /* Transformational version of the Bessel JN and YN functions. */
1103 gfc_check_bessel_n2 (gfc_expr
*n1
, gfc_expr
*n2
, gfc_expr
*x
)
1105 if (type_check (n1
, 0, BT_INTEGER
) == FAILURE
)
1107 if (scalar_check (n1
, 0) == FAILURE
)
1109 if (nonnegative_check("N1", n1
) == FAILURE
)
1112 if (type_check (n2
, 1, BT_INTEGER
) == FAILURE
)
1114 if (scalar_check (n2
, 1) == FAILURE
)
1116 if (nonnegative_check("N2", n2
) == FAILURE
)
1119 if (type_check (x
, 2, BT_REAL
) == FAILURE
)
1121 if (scalar_check (x
, 2) == FAILURE
)
1129 gfc_check_bge_bgt_ble_blt (gfc_expr
*i
, gfc_expr
*j
)
1131 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1134 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1142 gfc_check_bitfcn (gfc_expr
*i
, gfc_expr
*pos
)
1144 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1147 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
1150 if (nonnegative_check ("pos", pos
) == FAILURE
)
1153 if (less_than_bitsize1 ("i", i
, "pos", pos
, false) == FAILURE
)
1161 gfc_check_char (gfc_expr
*i
, gfc_expr
*kind
)
1163 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1165 if (kind_check (kind
, 1, BT_CHARACTER
) == FAILURE
)
1173 gfc_check_chdir (gfc_expr
*dir
)
1175 if (type_check (dir
, 0, BT_CHARACTER
) == FAILURE
)
1177 if (kind_value_check (dir
, 0, gfc_default_character_kind
) == FAILURE
)
1185 gfc_check_chdir_sub (gfc_expr
*dir
, gfc_expr
*status
)
1187 if (type_check (dir
, 0, BT_CHARACTER
) == FAILURE
)
1189 if (kind_value_check (dir
, 0, gfc_default_character_kind
) == FAILURE
)
1195 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
1197 if (scalar_check (status
, 1) == FAILURE
)
1205 gfc_check_chmod (gfc_expr
*name
, gfc_expr
*mode
)
1207 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
1209 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
1212 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
)
1214 if (kind_value_check (mode
, 1, gfc_default_character_kind
) == FAILURE
)
1222 gfc_check_chmod_sub (gfc_expr
*name
, gfc_expr
*mode
, gfc_expr
*status
)
1224 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
1226 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
1229 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
)
1231 if (kind_value_check (mode
, 1, gfc_default_character_kind
) == FAILURE
)
1237 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1240 if (scalar_check (status
, 2) == FAILURE
)
1248 gfc_check_cmplx (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*kind
)
1250 if (numeric_check (x
, 0) == FAILURE
)
1255 if (numeric_check (y
, 1) == FAILURE
)
1258 if (x
->ts
.type
== BT_COMPLEX
)
1260 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1261 "present if 'x' is COMPLEX",
1262 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1267 if (y
->ts
.type
== BT_COMPLEX
)
1269 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1270 "of either REAL or INTEGER",
1271 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1278 if (kind_check (kind
, 2, BT_COMPLEX
) == FAILURE
)
1286 gfc_check_complex (gfc_expr
*x
, gfc_expr
*y
)
1288 if (int_or_real_check (x
, 0) == FAILURE
)
1290 if (scalar_check (x
, 0) == FAILURE
)
1293 if (int_or_real_check (y
, 1) == FAILURE
)
1295 if (scalar_check (y
, 1) == FAILURE
)
1303 gfc_check_count (gfc_expr
*mask
, gfc_expr
*dim
, gfc_expr
*kind
)
1305 if (logical_array_check (mask
, 0) == FAILURE
)
1307 if (dim_check (dim
, 1, false) == FAILURE
)
1309 if (dim_rank_check (dim
, mask
, 0) == FAILURE
)
1311 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
1313 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
1314 "with KIND argument at %L",
1315 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1323 gfc_check_cshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*dim
)
1325 if (array_check (array
, 0) == FAILURE
)
1328 if (type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1331 if (dim_check (dim
, 2, true) == FAILURE
)
1334 if (dim_rank_check (dim
, array
, false) == FAILURE
)
1337 if (array
->rank
== 1 || shift
->rank
== 0)
1339 if (scalar_check (shift
, 1) == FAILURE
)
1342 else if (shift
->rank
== array
->rank
- 1)
1347 else if (dim
->expr_type
== EXPR_CONSTANT
)
1348 gfc_extract_int (dim
, &d
);
1355 for (i
= 0, j
= 0; i
< array
->rank
; i
++)
1358 if (!identical_dimen_shape (array
, i
, shift
, j
))
1360 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1361 "invalid shape in dimension %d (%ld/%ld)",
1362 gfc_current_intrinsic_arg
[1]->name
,
1363 gfc_current_intrinsic
, &shift
->where
, i
+ 1,
1364 mpz_get_si (array
->shape
[i
]),
1365 mpz_get_si (shift
->shape
[j
]));
1375 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1376 "%d or be a scalar", gfc_current_intrinsic_arg
[1]->name
,
1377 gfc_current_intrinsic
, &shift
->where
, array
->rank
- 1);
1386 gfc_check_ctime (gfc_expr
*time
)
1388 if (scalar_check (time
, 0) == FAILURE
)
1391 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
1398 gfc_try
gfc_check_datan2 (gfc_expr
*y
, gfc_expr
*x
)
1400 if (double_check (y
, 0) == FAILURE
|| double_check (x
, 1) == FAILURE
)
1407 gfc_check_dcmplx (gfc_expr
*x
, gfc_expr
*y
)
1409 if (numeric_check (x
, 0) == FAILURE
)
1414 if (numeric_check (y
, 1) == FAILURE
)
1417 if (x
->ts
.type
== BT_COMPLEX
)
1419 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1420 "present if 'x' is COMPLEX",
1421 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1426 if (y
->ts
.type
== BT_COMPLEX
)
1428 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1429 "of either REAL or INTEGER",
1430 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1441 gfc_check_dble (gfc_expr
*x
)
1443 if (numeric_check (x
, 0) == FAILURE
)
1451 gfc_check_digits (gfc_expr
*x
)
1453 if (int_or_real_check (x
, 0) == FAILURE
)
1461 gfc_check_dot_product (gfc_expr
*vector_a
, gfc_expr
*vector_b
)
1463 switch (vector_a
->ts
.type
)
1466 if (type_check (vector_b
, 1, BT_LOGICAL
) == FAILURE
)
1473 if (numeric_check (vector_b
, 1) == FAILURE
)
1478 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1479 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
1480 gfc_current_intrinsic
, &vector_a
->where
);
1484 if (rank_check (vector_a
, 0, 1) == FAILURE
)
1487 if (rank_check (vector_b
, 1, 1) == FAILURE
)
1490 if (! identical_dimen_shape (vector_a
, 0, vector_b
, 0))
1492 gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
1493 "intrinsic 'dot_product'", gfc_current_intrinsic_arg
[0]->name
,
1494 gfc_current_intrinsic_arg
[1]->name
, &vector_a
->where
);
1503 gfc_check_dprod (gfc_expr
*x
, gfc_expr
*y
)
1505 if (type_check (x
, 0, BT_REAL
) == FAILURE
1506 || type_check (y
, 1, BT_REAL
) == FAILURE
)
1509 if (x
->ts
.kind
!= gfc_default_real_kind
)
1511 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1512 "real", gfc_current_intrinsic_arg
[0]->name
,
1513 gfc_current_intrinsic
, &x
->where
);
1517 if (y
->ts
.kind
!= gfc_default_real_kind
)
1519 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1520 "real", gfc_current_intrinsic_arg
[1]->name
,
1521 gfc_current_intrinsic
, &y
->where
);
1530 gfc_check_dshift (gfc_expr
*i
, gfc_expr
*j
, gfc_expr
*shift
)
1532 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1535 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1538 if (i
->is_boz
&& j
->is_boz
)
1540 gfc_error ("'I' at %L and 'J' at %L cannot both be BOZ literal "
1541 "constants", &i
->where
, &j
->where
);
1545 if (!i
->is_boz
&& !j
->is_boz
&& same_type_check (i
, 0, j
, 1) == FAILURE
)
1548 if (type_check (shift
, 2, BT_INTEGER
) == FAILURE
)
1551 if (nonnegative_check ("SHIFT", shift
) == FAILURE
)
1556 if (less_than_bitsize1 ("J", j
, "SHIFT", shift
, true) == FAILURE
)
1558 i
->ts
.kind
= j
->ts
.kind
;
1562 if (less_than_bitsize1 ("I", i
, "SHIFT", shift
, true) == FAILURE
)
1564 j
->ts
.kind
= i
->ts
.kind
;
1572 gfc_check_eoshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*boundary
,
1575 if (array_check (array
, 0) == FAILURE
)
1578 if (type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1581 if (dim_check (dim
, 3, true) == FAILURE
)
1584 if (dim_rank_check (dim
, array
, false) == FAILURE
)
1587 if (array
->rank
== 1 || shift
->rank
== 0)
1589 if (scalar_check (shift
, 1) == FAILURE
)
1592 else if (shift
->rank
== array
->rank
- 1)
1597 else if (dim
->expr_type
== EXPR_CONSTANT
)
1598 gfc_extract_int (dim
, &d
);
1605 for (i
= 0, j
= 0; i
< array
->rank
; i
++)
1608 if (!identical_dimen_shape (array
, i
, shift
, j
))
1610 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1611 "invalid shape in dimension %d (%ld/%ld)",
1612 gfc_current_intrinsic_arg
[1]->name
,
1613 gfc_current_intrinsic
, &shift
->where
, i
+ 1,
1614 mpz_get_si (array
->shape
[i
]),
1615 mpz_get_si (shift
->shape
[j
]));
1625 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1626 "%d or be a scalar", gfc_current_intrinsic_arg
[1]->name
,
1627 gfc_current_intrinsic
, &shift
->where
, array
->rank
- 1);
1631 if (boundary
!= NULL
)
1633 if (same_type_check (array
, 0, boundary
, 2) == FAILURE
)
1636 if (array
->rank
== 1 || boundary
->rank
== 0)
1638 if (scalar_check (boundary
, 2) == FAILURE
)
1641 else if (boundary
->rank
== array
->rank
- 1)
1643 if (gfc_check_conformance (shift
, boundary
,
1644 "arguments '%s' and '%s' for "
1646 gfc_current_intrinsic_arg
[1]->name
,
1647 gfc_current_intrinsic_arg
[2]->name
,
1648 gfc_current_intrinsic
) == FAILURE
)
1653 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have "
1654 "rank %d or be a scalar",
1655 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1656 &shift
->where
, array
->rank
- 1);
1665 gfc_check_float (gfc_expr
*a
)
1667 if (type_check (a
, 0, BT_INTEGER
) == FAILURE
)
1670 if ((a
->ts
.kind
!= gfc_default_integer_kind
)
1671 && gfc_notify_std (GFC_STD_GNU
, "non-default INTEGER "
1672 "kind argument to %s intrinsic at %L",
1673 gfc_current_intrinsic
, &a
->where
) == FAILURE
)
1679 /* A single complex argument. */
1682 gfc_check_fn_c (gfc_expr
*a
)
1684 if (type_check (a
, 0, BT_COMPLEX
) == FAILURE
)
1690 /* A single real argument. */
1693 gfc_check_fn_r (gfc_expr
*a
)
1695 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
1701 /* A single double argument. */
1704 gfc_check_fn_d (gfc_expr
*a
)
1706 if (double_check (a
, 0) == FAILURE
)
1712 /* A single real or complex argument. */
1715 gfc_check_fn_rc (gfc_expr
*a
)
1717 if (real_or_complex_check (a
, 0) == FAILURE
)
1725 gfc_check_fn_rc2008 (gfc_expr
*a
)
1727 if (real_or_complex_check (a
, 0) == FAILURE
)
1730 if (a
->ts
.type
== BT_COMPLEX
1731 && gfc_notify_std (GFC_STD_F2008
, "COMPLEX argument '%s' "
1732 "argument of '%s' intrinsic at %L",
1733 gfc_current_intrinsic_arg
[0]->name
,
1734 gfc_current_intrinsic
, &a
->where
) == FAILURE
)
1742 gfc_check_fnum (gfc_expr
*unit
)
1744 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
1747 if (scalar_check (unit
, 0) == FAILURE
)
1755 gfc_check_huge (gfc_expr
*x
)
1757 if (int_or_real_check (x
, 0) == FAILURE
)
1765 gfc_check_hypot (gfc_expr
*x
, gfc_expr
*y
)
1767 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1769 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
1776 /* Check that the single argument is an integer. */
1779 gfc_check_i (gfc_expr
*i
)
1781 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1789 gfc_check_iand (gfc_expr
*i
, gfc_expr
*j
)
1791 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1794 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1797 if (i
->ts
.kind
!= j
->ts
.kind
)
1799 if (gfc_notify_std (GFC_STD_GNU
, "Different type kinds at %L",
1800 &i
->where
) == FAILURE
)
1809 gfc_check_ibits (gfc_expr
*i
, gfc_expr
*pos
, gfc_expr
*len
)
1811 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1814 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
1817 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
1820 if (nonnegative_check ("pos", pos
) == FAILURE
)
1823 if (nonnegative_check ("len", len
) == FAILURE
)
1826 if (less_than_bitsize2 ("i", i
, "pos", pos
, "len", len
) == FAILURE
)
1834 gfc_check_ichar_iachar (gfc_expr
*c
, gfc_expr
*kind
)
1838 if (type_check (c
, 0, BT_CHARACTER
) == FAILURE
)
1841 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1844 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
1845 "with KIND argument at %L",
1846 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1849 if (c
->expr_type
== EXPR_VARIABLE
|| c
->expr_type
== EXPR_SUBSTRING
)
1855 /* Substring references don't have the charlength set. */
1857 while (ref
&& ref
->type
!= REF_SUBSTRING
)
1860 gcc_assert (ref
== NULL
|| ref
->type
== REF_SUBSTRING
);
1864 /* Check that the argument is length one. Non-constant lengths
1865 can't be checked here, so assume they are ok. */
1866 if (c
->ts
.u
.cl
&& c
->ts
.u
.cl
->length
)
1868 /* If we already have a length for this expression then use it. */
1869 if (c
->ts
.u
.cl
->length
->expr_type
!= EXPR_CONSTANT
)
1871 i
= mpz_get_si (c
->ts
.u
.cl
->length
->value
.integer
);
1878 start
= ref
->u
.ss
.start
;
1879 end
= ref
->u
.ss
.end
;
1882 if (end
== NULL
|| end
->expr_type
!= EXPR_CONSTANT
1883 || start
->expr_type
!= EXPR_CONSTANT
)
1886 i
= mpz_get_si (end
->value
.integer
) + 1
1887 - mpz_get_si (start
->value
.integer
);
1895 gfc_error ("Argument of %s at %L must be of length one",
1896 gfc_current_intrinsic
, &c
->where
);
1905 gfc_check_idnint (gfc_expr
*a
)
1907 if (double_check (a
, 0) == FAILURE
)
1915 gfc_check_ieor (gfc_expr
*i
, gfc_expr
*j
)
1917 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1920 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1923 if (i
->ts
.kind
!= j
->ts
.kind
)
1925 if (gfc_notify_std (GFC_STD_GNU
, "Different type kinds at %L",
1926 &i
->where
) == FAILURE
)
1935 gfc_check_index (gfc_expr
*string
, gfc_expr
*substring
, gfc_expr
*back
,
1938 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
1939 || type_check (substring
, 1, BT_CHARACTER
) == FAILURE
)
1942 if (back
!= NULL
&& type_check (back
, 2, BT_LOGICAL
) == FAILURE
)
1945 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
1947 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
1948 "with KIND argument at %L",
1949 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1952 if (string
->ts
.kind
!= substring
->ts
.kind
)
1954 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1955 "kind as '%s'", gfc_current_intrinsic_arg
[1]->name
,
1956 gfc_current_intrinsic
, &substring
->where
,
1957 gfc_current_intrinsic_arg
[0]->name
);
1966 gfc_check_int (gfc_expr
*x
, gfc_expr
*kind
)
1968 if (numeric_check (x
, 0) == FAILURE
)
1971 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1979 gfc_check_intconv (gfc_expr
*x
)
1981 if (numeric_check (x
, 0) == FAILURE
)
1989 gfc_check_ior (gfc_expr
*i
, gfc_expr
*j
)
1991 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1994 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1997 if (i
->ts
.kind
!= j
->ts
.kind
)
1999 if (gfc_notify_std (GFC_STD_GNU
, "Different type kinds at %L",
2000 &i
->where
) == FAILURE
)
2009 gfc_check_ishft (gfc_expr
*i
, gfc_expr
*shift
)
2011 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
2012 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
2015 if (less_than_bitsize1 ("I", i
, NULL
, shift
, true) == FAILURE
)
2023 gfc_check_ishftc (gfc_expr
*i
, gfc_expr
*shift
, gfc_expr
*size
)
2025 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
2026 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
2033 if (type_check (size
, 2, BT_INTEGER
) == FAILURE
)
2036 if (less_than_bitsize1 ("I", i
, "SIZE", size
, true) == FAILURE
)
2039 if (size
->expr_type
== EXPR_CONSTANT
)
2041 gfc_extract_int (size
, &i3
);
2044 gfc_error ("SIZE at %L must be positive", &size
->where
);
2048 if (shift
->expr_type
== EXPR_CONSTANT
)
2050 gfc_extract_int (shift
, &i2
);
2056 gfc_error ("The absolute value of SHIFT at %L must be less "
2057 "than or equal to SIZE at %L", &shift
->where
,
2064 else if (less_than_bitsize1 ("I", i
, NULL
, shift
, true) == FAILURE
)
2072 gfc_check_kill (gfc_expr
*pid
, gfc_expr
*sig
)
2074 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
2077 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
2085 gfc_check_kill_sub (gfc_expr
*pid
, gfc_expr
*sig
, gfc_expr
*status
)
2087 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
2090 if (scalar_check (pid
, 0) == FAILURE
)
2093 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
2096 if (scalar_check (sig
, 1) == FAILURE
)
2102 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2105 if (scalar_check (status
, 2) == FAILURE
)
2113 gfc_check_kind (gfc_expr
*x
)
2115 if (x
->ts
.type
== BT_DERIVED
)
2117 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
2118 "non-derived type", gfc_current_intrinsic_arg
[0]->name
,
2119 gfc_current_intrinsic
, &x
->where
);
2128 gfc_check_lbound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
2130 if (array_check (array
, 0) == FAILURE
)
2133 if (dim_check (dim
, 1, false) == FAILURE
)
2136 if (dim_rank_check (dim
, array
, 1) == FAILURE
)
2139 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
2141 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
2142 "with KIND argument at %L",
2143 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2151 gfc_check_lcobound (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*kind
)
2153 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
2155 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
2159 if (coarray_check (coarray
, 0) == FAILURE
)
2164 if (dim_check (dim
, 1, false) == FAILURE
)
2167 if (dim_corank_check (dim
, coarray
) == FAILURE
)
2171 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
2179 gfc_check_len_lentrim (gfc_expr
*s
, gfc_expr
*kind
)
2181 if (type_check (s
, 0, BT_CHARACTER
) == FAILURE
)
2184 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
2186 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
2187 "with KIND argument at %L",
2188 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2196 gfc_check_lge_lgt_lle_llt (gfc_expr
*a
, gfc_expr
*b
)
2198 if (type_check (a
, 0, BT_CHARACTER
) == FAILURE
)
2200 if (kind_value_check (a
, 0, gfc_default_character_kind
) == FAILURE
)
2203 if (type_check (b
, 1, BT_CHARACTER
) == FAILURE
)
2205 if (kind_value_check (b
, 1, gfc_default_character_kind
) == FAILURE
)
2213 gfc_check_link (gfc_expr
*path1
, gfc_expr
*path2
)
2215 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2217 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2220 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2222 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2230 gfc_check_link_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2232 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2234 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2237 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2239 if (kind_value_check (path2
, 0, gfc_default_character_kind
) == FAILURE
)
2245 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2248 if (scalar_check (status
, 2) == FAILURE
)
2256 gfc_check_loc (gfc_expr
*expr
)
2258 return variable_check (expr
, 0, true);
2263 gfc_check_symlnk (gfc_expr
*path1
, gfc_expr
*path2
)
2265 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2267 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2270 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2272 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2280 gfc_check_symlnk_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2282 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2284 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2287 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2289 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2295 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2298 if (scalar_check (status
, 2) == FAILURE
)
2306 gfc_check_logical (gfc_expr
*a
, gfc_expr
*kind
)
2308 if (type_check (a
, 0, BT_LOGICAL
) == FAILURE
)
2310 if (kind_check (kind
, 1, BT_LOGICAL
) == FAILURE
)
2317 /* Min/max family. */
2320 min_max_args (gfc_actual_arglist
*arg
)
2322 if (arg
== NULL
|| arg
->next
== NULL
)
2324 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
2325 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
2334 check_rest (bt type
, int kind
, gfc_actual_arglist
*arglist
)
2336 gfc_actual_arglist
*arg
, *tmp
;
2341 if (min_max_args (arglist
) == FAILURE
)
2344 for (arg
= arglist
, n
=1; arg
; arg
= arg
->next
, n
++)
2347 if (x
->ts
.type
!= type
|| x
->ts
.kind
!= kind
)
2349 if (x
->ts
.type
== type
)
2351 if (gfc_notify_std (GFC_STD_GNU
, "Different type "
2352 "kinds at %L", &x
->where
) == FAILURE
)
2357 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
2358 "%s(%d)", n
, gfc_current_intrinsic
, &x
->where
,
2359 gfc_basic_typename (type
), kind
);
2364 for (tmp
= arglist
, m
=1; tmp
!= arg
; tmp
= tmp
->next
, m
++)
2365 if (gfc_check_conformance (tmp
->expr
, x
,
2366 "arguments 'a%d' and 'a%d' for "
2367 "intrinsic '%s'", m
, n
,
2368 gfc_current_intrinsic
) == FAILURE
)
2377 gfc_check_min_max (gfc_actual_arglist
*arg
)
2381 if (min_max_args (arg
) == FAILURE
)
2386 if (x
->ts
.type
== BT_CHARACTER
)
2388 if (gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
2389 "with CHARACTER argument at %L",
2390 gfc_current_intrinsic
, &x
->where
) == FAILURE
)
2393 else if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
2395 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
2396 "REAL or CHARACTER", gfc_current_intrinsic
, &x
->where
);
2400 return check_rest (x
->ts
.type
, x
->ts
.kind
, arg
);
2405 gfc_check_min_max_integer (gfc_actual_arglist
*arg
)
2407 return check_rest (BT_INTEGER
, gfc_default_integer_kind
, arg
);
2412 gfc_check_min_max_real (gfc_actual_arglist
*arg
)
2414 return check_rest (BT_REAL
, gfc_default_real_kind
, arg
);
2419 gfc_check_min_max_double (gfc_actual_arglist
*arg
)
2421 return check_rest (BT_REAL
, gfc_default_double_kind
, arg
);
2425 /* End of min/max family. */
2428 gfc_check_malloc (gfc_expr
*size
)
2430 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
2433 if (scalar_check (size
, 0) == FAILURE
)
2441 gfc_check_matmul (gfc_expr
*matrix_a
, gfc_expr
*matrix_b
)
2443 if ((matrix_a
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_a
->ts
))
2445 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2446 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
2447 gfc_current_intrinsic
, &matrix_a
->where
);
2451 if ((matrix_b
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_b
->ts
))
2453 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2454 "or LOGICAL", gfc_current_intrinsic_arg
[1]->name
,
2455 gfc_current_intrinsic
, &matrix_b
->where
);
2459 if ((matrix_a
->ts
.type
== BT_LOGICAL
&& gfc_numeric_ts (&matrix_b
->ts
))
2460 || (gfc_numeric_ts (&matrix_a
->ts
) && matrix_b
->ts
.type
== BT_LOGICAL
))
2462 gfc_error ("Argument types of '%s' intrinsic at %L must match (%s/%s)",
2463 gfc_current_intrinsic
, &matrix_a
->where
,
2464 gfc_typename(&matrix_a
->ts
), gfc_typename(&matrix_b
->ts
));
2468 switch (matrix_a
->rank
)
2471 if (rank_check (matrix_b
, 1, 2) == FAILURE
)
2473 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
2474 if (!identical_dimen_shape (matrix_a
, 0, matrix_b
, 0))
2476 gfc_error ("Different shape on dimension 1 for arguments '%s' "
2477 "and '%s' at %L for intrinsic matmul",
2478 gfc_current_intrinsic_arg
[0]->name
,
2479 gfc_current_intrinsic_arg
[1]->name
, &matrix_a
->where
);
2485 if (matrix_b
->rank
!= 2)
2487 if (rank_check (matrix_b
, 1, 1) == FAILURE
)
2490 /* matrix_b has rank 1 or 2 here. Common check for the cases
2491 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
2492 - matrix_a has shape (n,m) and matrix_b has shape (m). */
2493 if (!identical_dimen_shape (matrix_a
, 1, matrix_b
, 0))
2495 gfc_error ("Different shape on dimension 2 for argument '%s' and "
2496 "dimension 1 for argument '%s' at %L for intrinsic "
2497 "matmul", gfc_current_intrinsic_arg
[0]->name
,
2498 gfc_current_intrinsic_arg
[1]->name
, &matrix_a
->where
);
2504 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
2505 "1 or 2", gfc_current_intrinsic_arg
[0]->name
,
2506 gfc_current_intrinsic
, &matrix_a
->where
);
2514 /* Whoever came up with this interface was probably on something.
2515 The possibilities for the occupation of the second and third
2522 NULL MASK minloc(array, mask=m)
2525 I.e. in the case of minloc(array,mask), mask will be in the second
2526 position of the argument list and we'll have to fix that up. */
2529 gfc_check_minloc_maxloc (gfc_actual_arglist
*ap
)
2531 gfc_expr
*a
, *m
, *d
;
2534 if (int_or_real_check (a
, 0) == FAILURE
|| array_check (a
, 0) == FAILURE
)
2538 m
= ap
->next
->next
->expr
;
2540 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
2541 && ap
->next
->name
== NULL
)
2545 ap
->next
->expr
= NULL
;
2546 ap
->next
->next
->expr
= m
;
2549 if (dim_check (d
, 1, false) == FAILURE
)
2552 if (dim_rank_check (d
, a
, 0) == FAILURE
)
2555 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
2559 && gfc_check_conformance (a
, m
,
2560 "arguments '%s' and '%s' for intrinsic %s",
2561 gfc_current_intrinsic_arg
[0]->name
,
2562 gfc_current_intrinsic_arg
[2]->name
,
2563 gfc_current_intrinsic
) == FAILURE
)
2570 /* Similar to minloc/maxloc, the argument list might need to be
2571 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
2572 difference is that MINLOC/MAXLOC take an additional KIND argument.
2573 The possibilities are:
2579 NULL MASK minval(array, mask=m)
2582 I.e. in the case of minval(array,mask), mask will be in the second
2583 position of the argument list and we'll have to fix that up. */
2586 check_reduction (gfc_actual_arglist
*ap
)
2588 gfc_expr
*a
, *m
, *d
;
2592 m
= ap
->next
->next
->expr
;
2594 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
2595 && ap
->next
->name
== NULL
)
2599 ap
->next
->expr
= NULL
;
2600 ap
->next
->next
->expr
= m
;
2603 if (dim_check (d
, 1, false) == FAILURE
)
2606 if (dim_rank_check (d
, a
, 0) == FAILURE
)
2609 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
2613 && gfc_check_conformance (a
, m
,
2614 "arguments '%s' and '%s' for intrinsic %s",
2615 gfc_current_intrinsic_arg
[0]->name
,
2616 gfc_current_intrinsic_arg
[2]->name
,
2617 gfc_current_intrinsic
) == FAILURE
)
2625 gfc_check_minval_maxval (gfc_actual_arglist
*ap
)
2627 if (int_or_real_check (ap
->expr
, 0) == FAILURE
2628 || array_check (ap
->expr
, 0) == FAILURE
)
2631 return check_reduction (ap
);
2636 gfc_check_product_sum (gfc_actual_arglist
*ap
)
2638 if (numeric_check (ap
->expr
, 0) == FAILURE
2639 || array_check (ap
->expr
, 0) == FAILURE
)
2642 return check_reduction (ap
);
2646 /* For IANY, IALL and IPARITY. */
2649 gfc_check_mask (gfc_expr
*i
, gfc_expr
*kind
)
2653 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
2656 if (nonnegative_check ("I", i
) == FAILURE
)
2659 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
2663 gfc_extract_int (kind
, &k
);
2665 k
= gfc_default_integer_kind
;
2667 if (less_than_bitsizekind ("I", i
, k
) == FAILURE
)
2675 gfc_check_transf_bit_intrins (gfc_actual_arglist
*ap
)
2677 if (ap
->expr
->ts
.type
!= BT_INTEGER
)
2679 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER",
2680 gfc_current_intrinsic_arg
[0]->name
,
2681 gfc_current_intrinsic
, &ap
->expr
->where
);
2685 if (array_check (ap
->expr
, 0) == FAILURE
)
2688 return check_reduction (ap
);
2693 gfc_check_merge (gfc_expr
*tsource
, gfc_expr
*fsource
, gfc_expr
*mask
)
2695 if (same_type_check (tsource
, 0, fsource
, 1) == FAILURE
)
2698 if (type_check (mask
, 2, BT_LOGICAL
) == FAILURE
)
2701 if (tsource
->ts
.type
== BT_CHARACTER
)
2702 return gfc_check_same_strlen (tsource
, fsource
, "MERGE intrinsic");
2709 gfc_check_merge_bits (gfc_expr
*i
, gfc_expr
*j
, gfc_expr
*mask
)
2711 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
2714 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
2717 if (type_check (mask
, 2, BT_INTEGER
) == FAILURE
)
2720 if (same_type_check (i
, 0, j
, 1) == FAILURE
)
2723 if (same_type_check (i
, 0, mask
, 2) == FAILURE
)
2731 gfc_check_move_alloc (gfc_expr
*from
, gfc_expr
*to
)
2733 if (variable_check (from
, 0, false) == FAILURE
)
2735 if (allocatable_check (from
, 0) == FAILURE
)
2737 if (gfc_is_coindexed (from
))
2739 gfc_error ("The FROM argument to MOVE_ALLOC at %L shall not be "
2740 "coindexed", &from
->where
);
2744 if (variable_check (to
, 1, false) == FAILURE
)
2746 if (allocatable_check (to
, 1) == FAILURE
)
2748 if (gfc_is_coindexed (to
))
2750 gfc_error ("The TO argument to MOVE_ALLOC at %L shall not be "
2751 "coindexed", &to
->where
);
2755 if (from
->ts
.type
== BT_CLASS
&& to
->ts
.type
== BT_DERIVED
)
2757 gfc_error ("The TO arguments in MOVE_ALLOC at %L must be "
2758 "polymorphic if FROM is polymorphic",
2763 if (same_type_check (to
, 1, from
, 0) == FAILURE
)
2766 if (to
->rank
!= from
->rank
)
2768 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
2769 "must have the same rank %d/%d", &to
->where
, from
->rank
,
2774 /* IR F08/0040; cf. 12-006A. */
2775 if (gfc_get_corank (to
) != gfc_get_corank (from
))
2777 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
2778 "must have the same corank %d/%d", &to
->where
,
2779 gfc_get_corank (from
), gfc_get_corank (to
));
2783 if (to
->ts
.kind
!= from
->ts
.kind
)
2785 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L"
2786 " must be of the same kind %d/%d", &to
->where
, from
->ts
.kind
,
2791 /* CLASS arguments: Make sure the vtab of from is present. */
2792 if (to
->ts
.type
== BT_CLASS
)
2793 gfc_find_derived_vtab (from
->ts
.u
.derived
);
2800 gfc_check_nearest (gfc_expr
*x
, gfc_expr
*s
)
2802 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2805 if (type_check (s
, 1, BT_REAL
) == FAILURE
)
2808 if (s
->expr_type
== EXPR_CONSTANT
)
2810 if (mpfr_sgn (s
->value
.real
) == 0)
2812 gfc_error ("Argument 'S' of NEAREST at %L shall not be zero",
2823 gfc_check_new_line (gfc_expr
*a
)
2825 if (type_check (a
, 0, BT_CHARACTER
) == FAILURE
)
2833 gfc_check_norm2 (gfc_expr
*array
, gfc_expr
*dim
)
2835 if (type_check (array
, 0, BT_REAL
) == FAILURE
)
2838 if (array_check (array
, 0) == FAILURE
)
2841 if (dim_rank_check (dim
, array
, false) == FAILURE
)
2848 gfc_check_null (gfc_expr
*mold
)
2850 symbol_attribute attr
;
2855 if (variable_check (mold
, 0, true) == FAILURE
)
2858 attr
= gfc_variable_attr (mold
, NULL
);
2860 if (!attr
.pointer
&& !attr
.proc_pointer
&& !attr
.allocatable
)
2862 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER, "
2863 "ALLOCATABLE or procedure pointer",
2864 gfc_current_intrinsic_arg
[0]->name
,
2865 gfc_current_intrinsic
, &mold
->where
);
2869 if (attr
.allocatable
2870 && gfc_notify_std (GFC_STD_F2003
, "NULL intrinsic with "
2871 "allocatable MOLD at %L", &mold
->where
) == FAILURE
)
2875 if (gfc_is_coindexed (mold
))
2877 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
2878 "coindexed", gfc_current_intrinsic_arg
[0]->name
,
2879 gfc_current_intrinsic
, &mold
->where
);
2888 gfc_check_pack (gfc_expr
*array
, gfc_expr
*mask
, gfc_expr
*vector
)
2890 if (array_check (array
, 0) == FAILURE
)
2893 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
2896 if (gfc_check_conformance (array
, mask
,
2897 "arguments '%s' and '%s' for intrinsic '%s'",
2898 gfc_current_intrinsic_arg
[0]->name
,
2899 gfc_current_intrinsic_arg
[1]->name
,
2900 gfc_current_intrinsic
) == FAILURE
)
2905 mpz_t array_size
, vector_size
;
2906 bool have_array_size
, have_vector_size
;
2908 if (same_type_check (array
, 0, vector
, 2) == FAILURE
)
2911 if (rank_check (vector
, 2, 1) == FAILURE
)
2914 /* VECTOR requires at least as many elements as MASK
2915 has .TRUE. values. */
2916 have_array_size
= gfc_array_size (array
, &array_size
) == SUCCESS
;
2917 have_vector_size
= gfc_array_size (vector
, &vector_size
) == SUCCESS
;
2919 if (have_vector_size
2920 && (mask
->expr_type
== EXPR_ARRAY
2921 || (mask
->expr_type
== EXPR_CONSTANT
2922 && have_array_size
)))
2924 int mask_true_values
= 0;
2926 if (mask
->expr_type
== EXPR_ARRAY
)
2928 gfc_constructor
*mask_ctor
;
2929 mask_ctor
= gfc_constructor_first (mask
->value
.constructor
);
2932 if (mask_ctor
->expr
->expr_type
!= EXPR_CONSTANT
)
2934 mask_true_values
= 0;
2938 if (mask_ctor
->expr
->value
.logical
)
2941 mask_ctor
= gfc_constructor_next (mask_ctor
);
2944 else if (mask
->expr_type
== EXPR_CONSTANT
&& mask
->value
.logical
)
2945 mask_true_values
= mpz_get_si (array_size
);
2947 if (mpz_get_si (vector_size
) < mask_true_values
)
2949 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
2950 "provide at least as many elements as there "
2951 "are .TRUE. values in '%s' (%ld/%d)",
2952 gfc_current_intrinsic_arg
[2]->name
,
2953 gfc_current_intrinsic
, &vector
->where
,
2954 gfc_current_intrinsic_arg
[1]->name
,
2955 mpz_get_si (vector_size
), mask_true_values
);
2960 if (have_array_size
)
2961 mpz_clear (array_size
);
2962 if (have_vector_size
)
2963 mpz_clear (vector_size
);
2971 gfc_check_parity (gfc_expr
*mask
, gfc_expr
*dim
)
2973 if (type_check (mask
, 0, BT_LOGICAL
) == FAILURE
)
2976 if (array_check (mask
, 0) == FAILURE
)
2979 if (dim_rank_check (dim
, mask
, false) == FAILURE
)
2987 gfc_check_precision (gfc_expr
*x
)
2989 if (real_or_complex_check (x
, 0) == FAILURE
)
2997 gfc_check_present (gfc_expr
*a
)
3001 if (variable_check (a
, 0, true) == FAILURE
)
3004 sym
= a
->symtree
->n
.sym
;
3005 if (!sym
->attr
.dummy
)
3007 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
3008 "dummy variable", gfc_current_intrinsic_arg
[0]->name
,
3009 gfc_current_intrinsic
, &a
->where
);
3013 if (!sym
->attr
.optional
)
3015 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
3016 "an OPTIONAL dummy variable",
3017 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3022 /* 13.14.82 PRESENT(A)
3024 Argument. A shall be the name of an optional dummy argument that is
3025 accessible in the subprogram in which the PRESENT function reference
3029 && !(a
->ref
->next
== NULL
&& a
->ref
->type
== REF_ARRAY
3030 && (a
->ref
->u
.ar
.type
== AR_FULL
3031 || (a
->ref
->u
.ar
.type
== AR_ELEMENT
3032 && a
->ref
->u
.ar
.as
->rank
== 0))))
3034 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
3035 "subobject of '%s'", gfc_current_intrinsic_arg
[0]->name
,
3036 gfc_current_intrinsic
, &a
->where
, sym
->name
);
3045 gfc_check_radix (gfc_expr
*x
)
3047 if (int_or_real_check (x
, 0) == FAILURE
)
3055 gfc_check_range (gfc_expr
*x
)
3057 if (numeric_check (x
, 0) == FAILURE
)
3065 gfc_check_rank (gfc_expr
*a ATTRIBUTE_UNUSED
)
3067 /* Any data object is allowed; a "data object" is a "constant (4.1.3),
3068 variable (6), or subobject of a constant (2.4.3.2.3)" (F2008, 1.3.45). */
3070 bool is_variable
= true;
3072 /* Functions returning pointers are regarded as variable, cf. F2008, R602. */
3073 if (a
->expr_type
== EXPR_FUNCTION
)
3074 is_variable
= a
->value
.function
.esym
3075 ? a
->value
.function
.esym
->result
->attr
.pointer
3076 : a
->symtree
->n
.sym
->result
->attr
.pointer
;
3078 if (a
->expr_type
== EXPR_OP
|| a
->expr_type
== EXPR_NULL
3079 || a
->expr_type
== EXPR_COMPCALL
|| a
->expr_type
== EXPR_PPC
3082 gfc_error ("The argument of the RANK intrinsic at %L must be a data "
3083 "object", &a
->where
);
3091 /* real, float, sngl. */
3093 gfc_check_real (gfc_expr
*a
, gfc_expr
*kind
)
3095 if (numeric_check (a
, 0) == FAILURE
)
3098 if (kind_check (kind
, 1, BT_REAL
) == FAILURE
)
3106 gfc_check_rename (gfc_expr
*path1
, gfc_expr
*path2
)
3108 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
3110 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
3113 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
3115 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
3123 gfc_check_rename_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
3125 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
3127 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
3130 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
3132 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
3138 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
3141 if (scalar_check (status
, 2) == FAILURE
)
3149 gfc_check_repeat (gfc_expr
*x
, gfc_expr
*y
)
3151 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
3154 if (scalar_check (x
, 0) == FAILURE
)
3157 if (type_check (y
, 0, BT_INTEGER
) == FAILURE
)
3160 if (scalar_check (y
, 1) == FAILURE
)
3168 gfc_check_reshape (gfc_expr
*source
, gfc_expr
*shape
,
3169 gfc_expr
*pad
, gfc_expr
*order
)
3175 if (array_check (source
, 0) == FAILURE
)
3178 if (rank_check (shape
, 1, 1) == FAILURE
)
3181 if (type_check (shape
, 1, BT_INTEGER
) == FAILURE
)
3184 if (gfc_array_size (shape
, &size
) != SUCCESS
)
3186 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
3187 "array of constant size", &shape
->where
);
3191 shape_size
= mpz_get_ui (size
);
3194 if (shape_size
<= 0)
3196 gfc_error ("'%s' argument of '%s' intrinsic at %L is empty",
3197 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3201 else if (shape_size
> GFC_MAX_DIMENSIONS
)
3203 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
3204 "than %d elements", &shape
->where
, GFC_MAX_DIMENSIONS
);
3207 else if (shape
->expr_type
== EXPR_ARRAY
)
3211 for (i
= 0; i
< shape_size
; ++i
)
3213 e
= gfc_constructor_lookup_expr (shape
->value
.constructor
, i
);
3214 if (e
->expr_type
!= EXPR_CONSTANT
)
3217 gfc_extract_int (e
, &extent
);
3220 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3221 "negative element (%d)",
3222 gfc_current_intrinsic_arg
[1]->name
,
3223 gfc_current_intrinsic
, &e
->where
, extent
);
3231 if (same_type_check (source
, 0, pad
, 2) == FAILURE
)
3234 if (array_check (pad
, 2) == FAILURE
)
3240 if (array_check (order
, 3) == FAILURE
)
3243 if (type_check (order
, 3, BT_INTEGER
) == FAILURE
)
3246 if (order
->expr_type
== EXPR_ARRAY
)
3248 int i
, order_size
, dim
, perm
[GFC_MAX_DIMENSIONS
];
3251 for (i
= 0; i
< GFC_MAX_DIMENSIONS
; ++i
)
3254 gfc_array_size (order
, &size
);
3255 order_size
= mpz_get_ui (size
);
3258 if (order_size
!= shape_size
)
3260 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3261 "has wrong number of elements (%d/%d)",
3262 gfc_current_intrinsic_arg
[3]->name
,
3263 gfc_current_intrinsic
, &order
->where
,
3264 order_size
, shape_size
);
3268 for (i
= 1; i
<= order_size
; ++i
)
3270 e
= gfc_constructor_lookup_expr (order
->value
.constructor
, i
-1);
3271 if (e
->expr_type
!= EXPR_CONSTANT
)
3274 gfc_extract_int (e
, &dim
);
3276 if (dim
< 1 || dim
> order_size
)
3278 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3279 "has out-of-range dimension (%d)",
3280 gfc_current_intrinsic_arg
[3]->name
,
3281 gfc_current_intrinsic
, &e
->where
, dim
);
3285 if (perm
[dim
-1] != 0)
3287 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3288 "invalid permutation of dimensions (dimension "
3290 gfc_current_intrinsic_arg
[3]->name
,
3291 gfc_current_intrinsic
, &e
->where
, dim
);
3300 if (pad
== NULL
&& shape
->expr_type
== EXPR_ARRAY
3301 && gfc_is_constant_expr (shape
)
3302 && !(source
->expr_type
== EXPR_VARIABLE
&& source
->symtree
->n
.sym
->as
3303 && source
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
))
3305 /* Check the match in size between source and destination. */
3306 if (gfc_array_size (source
, &nelems
) == SUCCESS
)
3312 mpz_init_set_ui (size
, 1);
3313 for (c
= gfc_constructor_first (shape
->value
.constructor
);
3314 c
; c
= gfc_constructor_next (c
))
3315 mpz_mul (size
, size
, c
->expr
->value
.integer
);
3317 test
= mpz_cmp (nelems
, size
) < 0 && mpz_cmp_ui (size
, 0) > 0;
3323 gfc_error ("Without padding, there are not enough elements "
3324 "in the intrinsic RESHAPE source at %L to match "
3325 "the shape", &source
->where
);
3336 gfc_check_same_type_as (gfc_expr
*a
, gfc_expr
*b
)
3339 if (a
->ts
.type
!= BT_DERIVED
&& a
->ts
.type
!= BT_CLASS
)
3341 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3342 "must be of a derived type",
3343 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3348 if (!gfc_type_is_extensible (a
->ts
.u
.derived
))
3350 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3351 "must be of an extensible type",
3352 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3357 if (b
->ts
.type
!= BT_DERIVED
&& b
->ts
.type
!= BT_CLASS
)
3359 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3360 "must be of a derived type",
3361 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3366 if (!gfc_type_is_extensible (b
->ts
.u
.derived
))
3368 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3369 "must be of an extensible type",
3370 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3380 gfc_check_scale (gfc_expr
*x
, gfc_expr
*i
)
3382 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
3385 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
3393 gfc_check_scan (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
3395 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
3398 if (type_check (y
, 1, BT_CHARACTER
) == FAILURE
)
3401 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
3404 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
3406 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
3407 "with KIND argument at %L",
3408 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
3411 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
3419 gfc_check_secnds (gfc_expr
*r
)
3421 if (type_check (r
, 0, BT_REAL
) == FAILURE
)
3424 if (kind_value_check (r
, 0, 4) == FAILURE
)
3427 if (scalar_check (r
, 0) == FAILURE
)
3435 gfc_check_selected_char_kind (gfc_expr
*name
)
3437 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3440 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3443 if (scalar_check (name
, 0) == FAILURE
)
3451 gfc_check_selected_int_kind (gfc_expr
*r
)
3453 if (type_check (r
, 0, BT_INTEGER
) == FAILURE
)
3456 if (scalar_check (r
, 0) == FAILURE
)
3464 gfc_check_selected_real_kind (gfc_expr
*p
, gfc_expr
*r
, gfc_expr
*radix
)
3466 if (p
== NULL
&& r
== NULL
3467 && gfc_notify_std (GFC_STD_F2008
, "SELECTED_REAL_KIND with"
3468 " neither 'P' nor 'R' argument at %L",
3469 gfc_current_intrinsic_where
) == FAILURE
)
3474 if (type_check (p
, 0, BT_INTEGER
) == FAILURE
)
3477 if (scalar_check (p
, 0) == FAILURE
)
3483 if (type_check (r
, 1, BT_INTEGER
) == FAILURE
)
3486 if (scalar_check (r
, 1) == FAILURE
)
3492 if (type_check (radix
, 1, BT_INTEGER
) == FAILURE
)
3495 if (scalar_check (radix
, 1) == FAILURE
)
3498 if (gfc_notify_std (GFC_STD_F2008
, "'%s' intrinsic with "
3499 "RADIX argument at %L", gfc_current_intrinsic
,
3500 &radix
->where
) == FAILURE
)
3509 gfc_check_set_exponent (gfc_expr
*x
, gfc_expr
*i
)
3511 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
3514 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
3522 gfc_check_shape (gfc_expr
*source
, gfc_expr
*kind
)
3526 if (source
->rank
== 0 || source
->expr_type
!= EXPR_VARIABLE
)
3529 ar
= gfc_find_array_ref (source
);
3531 if (ar
->as
&& ar
->as
->type
== AS_ASSUMED_SIZE
&& ar
->type
== AR_FULL
)
3533 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
3534 "an assumed size array", &source
->where
);
3538 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
3540 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
3541 "with KIND argument at %L",
3542 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
3550 gfc_check_shift (gfc_expr
*i
, gfc_expr
*shift
)
3552 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
3555 if (type_check (shift
, 0, BT_INTEGER
) == FAILURE
)
3558 if (nonnegative_check ("SHIFT", shift
) == FAILURE
)
3561 if (less_than_bitsize1 ("I", i
, "SHIFT", shift
, true) == FAILURE
)
3569 gfc_check_sign (gfc_expr
*a
, gfc_expr
*b
)
3571 if (int_or_real_check (a
, 0) == FAILURE
)
3574 if (same_type_check (a
, 0, b
, 1) == FAILURE
)
3582 gfc_check_size (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
3584 if (array_check (array
, 0) == FAILURE
)
3587 if (dim_check (dim
, 1, true) == FAILURE
)
3590 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
3593 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
3595 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
3596 "with KIND argument at %L",
3597 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
3606 gfc_check_sizeof (gfc_expr
*arg
)
3608 if (arg
->ts
.type
== BT_PROCEDURE
)
3610 gfc_error ("'%s' argument of '%s' intrinsic at %L may not be a procedure",
3611 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3620 gfc_check_c_sizeof (gfc_expr
*arg
)
3622 if (gfc_verify_c_interop (&arg
->ts
) != SUCCESS
)
3624 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an "
3625 "interoperable data entity",
3626 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3635 gfc_check_sleep_sub (gfc_expr
*seconds
)
3637 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
3640 if (scalar_check (seconds
, 0) == FAILURE
)
3647 gfc_check_sngl (gfc_expr
*a
)
3649 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
3652 if ((a
->ts
.kind
!= gfc_default_double_kind
)
3653 && gfc_notify_std (GFC_STD_GNU
, "non double precision "
3654 "REAL argument to %s intrinsic at %L",
3655 gfc_current_intrinsic
, &a
->where
) == FAILURE
)
3662 gfc_check_spread (gfc_expr
*source
, gfc_expr
*dim
, gfc_expr
*ncopies
)
3664 if (source
->rank
>= GFC_MAX_DIMENSIONS
)
3666 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
3667 "than rank %d", gfc_current_intrinsic_arg
[0]->name
,
3668 gfc_current_intrinsic
, &source
->where
, GFC_MAX_DIMENSIONS
);
3676 if (dim_check (dim
, 1, false) == FAILURE
)
3679 /* dim_rank_check() does not apply here. */
3681 && dim
->expr_type
== EXPR_CONSTANT
3682 && (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
3683 || mpz_cmp_ui (dim
->value
.integer
, source
->rank
+ 1) > 0))
3685 gfc_error ("'%s' argument of '%s' intrinsic at %L is not a valid "
3686 "dimension index", gfc_current_intrinsic_arg
[1]->name
,
3687 gfc_current_intrinsic
, &dim
->where
);
3691 if (type_check (ncopies
, 2, BT_INTEGER
) == FAILURE
)
3694 if (scalar_check (ncopies
, 2) == FAILURE
)
3701 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
3705 gfc_check_fgetputc_sub (gfc_expr
*unit
, gfc_expr
*c
, gfc_expr
*status
)
3707 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3710 if (scalar_check (unit
, 0) == FAILURE
)
3713 if (type_check (c
, 1, BT_CHARACTER
) == FAILURE
)
3715 if (kind_value_check (c
, 1, gfc_default_character_kind
) == FAILURE
)
3721 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
3722 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
3723 || scalar_check (status
, 2) == FAILURE
)
3731 gfc_check_fgetputc (gfc_expr
*unit
, gfc_expr
*c
)
3733 return gfc_check_fgetputc_sub (unit
, c
, NULL
);
3738 gfc_check_fgetput_sub (gfc_expr
*c
, gfc_expr
*status
)
3740 if (type_check (c
, 0, BT_CHARACTER
) == FAILURE
)
3742 if (kind_value_check (c
, 0, gfc_default_character_kind
) == FAILURE
)
3748 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
3749 || kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
3750 || scalar_check (status
, 1) == FAILURE
)
3758 gfc_check_fgetput (gfc_expr
*c
)
3760 return gfc_check_fgetput_sub (c
, NULL
);
3765 gfc_check_fseek_sub (gfc_expr
*unit
, gfc_expr
*offset
, gfc_expr
*whence
, gfc_expr
*status
)
3767 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3770 if (scalar_check (unit
, 0) == FAILURE
)
3773 if (type_check (offset
, 1, BT_INTEGER
) == FAILURE
)
3776 if (scalar_check (offset
, 1) == FAILURE
)
3779 if (type_check (whence
, 2, BT_INTEGER
) == FAILURE
)
3782 if (scalar_check (whence
, 2) == FAILURE
)
3788 if (type_check (status
, 3, BT_INTEGER
) == FAILURE
)
3791 if (kind_value_check (status
, 3, 4) == FAILURE
)
3794 if (scalar_check (status
, 3) == FAILURE
)
3803 gfc_check_fstat (gfc_expr
*unit
, gfc_expr
*array
)
3805 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3808 if (scalar_check (unit
, 0) == FAILURE
)
3811 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3812 || kind_value_check (unit
, 0, gfc_default_integer_kind
) == FAILURE
)
3815 if (array_check (array
, 1) == FAILURE
)
3823 gfc_check_fstat_sub (gfc_expr
*unit
, gfc_expr
*array
, gfc_expr
*status
)
3825 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3828 if (scalar_check (unit
, 0) == FAILURE
)
3831 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3832 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3835 if (array_check (array
, 1) == FAILURE
)
3841 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
3842 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
3845 if (scalar_check (status
, 2) == FAILURE
)
3853 gfc_check_ftell (gfc_expr
*unit
)
3855 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3858 if (scalar_check (unit
, 0) == FAILURE
)
3866 gfc_check_ftell_sub (gfc_expr
*unit
, gfc_expr
*offset
)
3868 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3871 if (scalar_check (unit
, 0) == FAILURE
)
3874 if (type_check (offset
, 1, BT_INTEGER
) == FAILURE
)
3877 if (scalar_check (offset
, 1) == FAILURE
)
3885 gfc_check_stat (gfc_expr
*name
, gfc_expr
*array
)
3887 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3889 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3892 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3893 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3896 if (array_check (array
, 1) == FAILURE
)
3904 gfc_check_stat_sub (gfc_expr
*name
, gfc_expr
*array
, gfc_expr
*status
)
3906 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3908 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3911 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3912 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3915 if (array_check (array
, 1) == FAILURE
)
3921 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
3922 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3925 if (scalar_check (status
, 2) == FAILURE
)
3933 gfc_check_image_index (gfc_expr
*coarray
, gfc_expr
*sub
)
3937 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
3939 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
3943 if (coarray_check (coarray
, 0) == FAILURE
)
3948 gfc_error ("%s argument to IMAGE_INDEX must be a rank one array at %L",
3949 gfc_current_intrinsic_arg
[1]->name
, &sub
->where
);
3953 if (gfc_array_size (sub
, &nelems
) == SUCCESS
)
3955 int corank
= gfc_get_corank (coarray
);
3957 if (mpz_cmp_ui (nelems
, corank
) != 0)
3959 gfc_error ("The number of array elements of the SUB argument to "
3960 "IMAGE_INDEX at %L shall be %d (corank) not %d",
3961 &sub
->where
, corank
, (int) mpz_get_si (nelems
));
3973 gfc_check_this_image (gfc_expr
*coarray
, gfc_expr
*dim
)
3975 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
3977 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
3981 if (dim
!= NULL
&& coarray
== NULL
)
3983 gfc_error ("DIM argument without ARRAY argument not allowed for THIS_IMAGE "
3984 "intrinsic at %L", &dim
->where
);
3988 if (coarray
== NULL
)
3991 if (coarray_check (coarray
, 0) == FAILURE
)
3996 if (dim_check (dim
, 1, false) == FAILURE
)
3999 if (dim_corank_check (dim
, coarray
) == FAILURE
)
4006 /* Calculate the sizes for transfer, used by gfc_check_transfer and also
4007 by gfc_simplify_transfer. Return FAILURE if we cannot do so. */
4010 gfc_calculate_transfer_sizes (gfc_expr
*source
, gfc_expr
*mold
, gfc_expr
*size
,
4011 size_t *source_size
, size_t *result_size
,
4012 size_t *result_length_p
)
4014 size_t result_elt_size
;
4016 gfc_expr
*mold_element
;
4018 if (source
->expr_type
== EXPR_FUNCTION
)
4021 if (size
&& size
->expr_type
!= EXPR_CONSTANT
)
4024 /* Calculate the size of the source. */
4025 if (source
->expr_type
== EXPR_ARRAY
4026 && gfc_array_size (source
, &tmp
) == FAILURE
)
4029 *source_size
= gfc_target_expr_size (source
);
4030 if (*source_size
== 0)
4033 mold_element
= mold
->expr_type
== EXPR_ARRAY
4034 ? gfc_constructor_first (mold
->value
.constructor
)->expr
4037 /* Determine the size of the element. */
4038 result_elt_size
= gfc_target_expr_size (mold_element
);
4039 if (result_elt_size
== 0)
4042 if (mold
->expr_type
== EXPR_ARRAY
|| mold
->rank
|| size
)
4047 result_length
= (size_t)mpz_get_ui (size
->value
.integer
);
4050 result_length
= *source_size
/ result_elt_size
;
4051 if (result_length
* result_elt_size
< *source_size
)
4055 *result_size
= result_length
* result_elt_size
;
4056 if (result_length_p
)
4057 *result_length_p
= result_length
;
4060 *result_size
= result_elt_size
;
4067 gfc_check_transfer (gfc_expr
*source
, gfc_expr
*mold
, gfc_expr
*size
)
4072 if (mold
->ts
.type
== BT_HOLLERITH
)
4074 gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
4075 &mold
->where
, gfc_basic_typename (BT_HOLLERITH
));
4081 if (type_check (size
, 2, BT_INTEGER
) == FAILURE
)
4084 if (scalar_check (size
, 2) == FAILURE
)
4087 if (nonoptional_check (size
, 2) == FAILURE
)
4091 if (!gfc_option
.warn_surprising
)
4094 /* If we can't calculate the sizes, we cannot check any more.
4095 Return SUCCESS for that case. */
4097 if (gfc_calculate_transfer_sizes (source
, mold
, size
, &source_size
,
4098 &result_size
, NULL
) == FAILURE
)
4101 if (source_size
< result_size
)
4102 gfc_warning("Intrinsic TRANSFER at %L has partly undefined result: "
4103 "source size %ld < result size %ld", &source
->where
,
4104 (long) source_size
, (long) result_size
);
4111 gfc_check_transpose (gfc_expr
*matrix
)
4113 if (rank_check (matrix
, 0, 2) == FAILURE
)
4121 gfc_check_ubound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
4123 if (array_check (array
, 0) == FAILURE
)
4126 if (dim_check (dim
, 1, false) == FAILURE
)
4129 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
4132 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
4134 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
4135 "with KIND argument at %L",
4136 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
4144 gfc_check_ucobound (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*kind
)
4146 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
4148 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4152 if (coarray_check (coarray
, 0) == FAILURE
)
4157 if (dim_check (dim
, 1, false) == FAILURE
)
4160 if (dim_corank_check (dim
, coarray
) == FAILURE
)
4164 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
4172 gfc_check_unpack (gfc_expr
*vector
, gfc_expr
*mask
, gfc_expr
*field
)
4176 if (rank_check (vector
, 0, 1) == FAILURE
)
4179 if (array_check (mask
, 1) == FAILURE
)
4182 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
4185 if (same_type_check (vector
, 0, field
, 2) == FAILURE
)
4188 if (mask
->expr_type
== EXPR_ARRAY
4189 && gfc_array_size (vector
, &vector_size
) == SUCCESS
)
4191 int mask_true_count
= 0;
4192 gfc_constructor
*mask_ctor
;
4193 mask_ctor
= gfc_constructor_first (mask
->value
.constructor
);
4196 if (mask_ctor
->expr
->expr_type
!= EXPR_CONSTANT
)
4198 mask_true_count
= 0;
4202 if (mask_ctor
->expr
->value
.logical
)
4205 mask_ctor
= gfc_constructor_next (mask_ctor
);
4208 if (mpz_get_si (vector_size
) < mask_true_count
)
4210 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
4211 "provide at least as many elements as there "
4212 "are .TRUE. values in '%s' (%ld/%d)",
4213 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4214 &vector
->where
, gfc_current_intrinsic_arg
[1]->name
,
4215 mpz_get_si (vector_size
), mask_true_count
);
4219 mpz_clear (vector_size
);
4222 if (mask
->rank
!= field
->rank
&& field
->rank
!= 0)
4224 gfc_error ("'%s' argument of '%s' intrinsic at %L must have "
4225 "the same rank as '%s' or be a scalar",
4226 gfc_current_intrinsic_arg
[2]->name
, gfc_current_intrinsic
,
4227 &field
->where
, gfc_current_intrinsic_arg
[1]->name
);
4231 if (mask
->rank
== field
->rank
)
4234 for (i
= 0; i
< field
->rank
; i
++)
4235 if (! identical_dimen_shape (mask
, i
, field
, i
))
4237 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L "
4238 "must have identical shape.",
4239 gfc_current_intrinsic_arg
[2]->name
,
4240 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
4250 gfc_check_verify (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
4252 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
4255 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
4258 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
4261 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
4263 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
4264 "with KIND argument at %L",
4265 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
4273 gfc_check_trim (gfc_expr
*x
)
4275 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
4278 if (scalar_check (x
, 0) == FAILURE
)
4286 gfc_check_ttynam (gfc_expr
*unit
)
4288 if (scalar_check (unit
, 0) == FAILURE
)
4291 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
4298 /* Common check function for the half a dozen intrinsics that have a
4299 single real argument. */
4302 gfc_check_x (gfc_expr
*x
)
4304 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
4311 /************* Check functions for intrinsic subroutines *************/
4314 gfc_check_cpu_time (gfc_expr
*time
)
4316 if (scalar_check (time
, 0) == FAILURE
)
4319 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
4322 if (variable_check (time
, 0, false) == FAILURE
)
4330 gfc_check_date_and_time (gfc_expr
*date
, gfc_expr
*time
,
4331 gfc_expr
*zone
, gfc_expr
*values
)
4335 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
4337 if (kind_value_check (date
, 0, gfc_default_character_kind
) == FAILURE
)
4339 if (scalar_check (date
, 0) == FAILURE
)
4341 if (variable_check (date
, 0, false) == FAILURE
)
4347 if (type_check (time
, 1, BT_CHARACTER
) == FAILURE
)
4349 if (kind_value_check (time
, 1, gfc_default_character_kind
) == FAILURE
)
4351 if (scalar_check (time
, 1) == FAILURE
)
4353 if (variable_check (time
, 1, false) == FAILURE
)
4359 if (type_check (zone
, 2, BT_CHARACTER
) == FAILURE
)
4361 if (kind_value_check (zone
, 2, gfc_default_character_kind
) == FAILURE
)
4363 if (scalar_check (zone
, 2) == FAILURE
)
4365 if (variable_check (zone
, 2, false) == FAILURE
)
4371 if (type_check (values
, 3, BT_INTEGER
) == FAILURE
)
4373 if (array_check (values
, 3) == FAILURE
)
4375 if (rank_check (values
, 3, 1) == FAILURE
)
4377 if (variable_check (values
, 3, false) == FAILURE
)
4386 gfc_check_mvbits (gfc_expr
*from
, gfc_expr
*frompos
, gfc_expr
*len
,
4387 gfc_expr
*to
, gfc_expr
*topos
)
4389 if (type_check (from
, 0, BT_INTEGER
) == FAILURE
)
4392 if (type_check (frompos
, 1, BT_INTEGER
) == FAILURE
)
4395 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
4398 if (same_type_check (from
, 0, to
, 3) == FAILURE
)
4401 if (variable_check (to
, 3, false) == FAILURE
)
4404 if (type_check (topos
, 4, BT_INTEGER
) == FAILURE
)
4407 if (nonnegative_check ("frompos", frompos
) == FAILURE
)
4410 if (nonnegative_check ("topos", topos
) == FAILURE
)
4413 if (nonnegative_check ("len", len
) == FAILURE
)
4416 if (less_than_bitsize2 ("from", from
, "frompos", frompos
, "len", len
)
4420 if (less_than_bitsize2 ("to", to
, "topos", topos
, "len", len
) == FAILURE
)
4428 gfc_check_random_number (gfc_expr
*harvest
)
4430 if (type_check (harvest
, 0, BT_REAL
) == FAILURE
)
4433 if (variable_check (harvest
, 0, false) == FAILURE
)
4441 gfc_check_random_seed (gfc_expr
*size
, gfc_expr
*put
, gfc_expr
*get
)
4443 unsigned int nargs
= 0, kiss_size
;
4444 locus
*where
= NULL
;
4445 mpz_t put_size
, get_size
;
4446 bool have_gfc_real_16
; /* Try and mimic HAVE_GFC_REAL_16 in libgfortran. */
4448 have_gfc_real_16
= gfc_validate_kind (BT_REAL
, 16, true) != -1;
4450 /* Keep the number of bytes in sync with kiss_size in
4451 libgfortran/intrinsics/random.c. */
4452 kiss_size
= (have_gfc_real_16
? 48 : 32) / gfc_default_integer_kind
;
4456 if (size
->expr_type
!= EXPR_VARIABLE
4457 || !size
->symtree
->n
.sym
->attr
.optional
)
4460 if (scalar_check (size
, 0) == FAILURE
)
4463 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
4466 if (variable_check (size
, 0, false) == FAILURE
)
4469 if (kind_value_check (size
, 0, gfc_default_integer_kind
) == FAILURE
)
4475 if (put
->expr_type
!= EXPR_VARIABLE
4476 || !put
->symtree
->n
.sym
->attr
.optional
)
4479 where
= &put
->where
;
4482 if (array_check (put
, 1) == FAILURE
)
4485 if (rank_check (put
, 1, 1) == FAILURE
)
4488 if (type_check (put
, 1, BT_INTEGER
) == FAILURE
)
4491 if (kind_value_check (put
, 1, gfc_default_integer_kind
) == FAILURE
)
4494 if (gfc_array_size (put
, &put_size
) == SUCCESS
4495 && mpz_get_ui (put_size
) < kiss_size
)
4496 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
4497 "too small (%i/%i)",
4498 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
4499 where
, (int) mpz_get_ui (put_size
), kiss_size
);
4504 if (get
->expr_type
!= EXPR_VARIABLE
4505 || !get
->symtree
->n
.sym
->attr
.optional
)
4508 where
= &get
->where
;
4511 if (array_check (get
, 2) == FAILURE
)
4514 if (rank_check (get
, 2, 1) == FAILURE
)
4517 if (type_check (get
, 2, BT_INTEGER
) == FAILURE
)
4520 if (variable_check (get
, 2, false) == FAILURE
)
4523 if (kind_value_check (get
, 2, gfc_default_integer_kind
) == FAILURE
)
4526 if (gfc_array_size (get
, &get_size
) == SUCCESS
4527 && mpz_get_ui (get_size
) < kiss_size
)
4528 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
4529 "too small (%i/%i)",
4530 gfc_current_intrinsic_arg
[2]->name
, gfc_current_intrinsic
,
4531 where
, (int) mpz_get_ui (get_size
), kiss_size
);
4534 /* RANDOM_SEED may not have more than one non-optional argument. */
4536 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
, where
);
4543 gfc_check_second_sub (gfc_expr
*time
)
4545 if (scalar_check (time
, 0) == FAILURE
)
4548 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
4551 if (kind_value_check(time
, 0, 4) == FAILURE
)
4558 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
4559 count, count_rate, and count_max are all optional arguments */
4562 gfc_check_system_clock (gfc_expr
*count
, gfc_expr
*count_rate
,
4563 gfc_expr
*count_max
)
4567 if (scalar_check (count
, 0) == FAILURE
)
4570 if (type_check (count
, 0, BT_INTEGER
) == FAILURE
)
4573 if (variable_check (count
, 0, false) == FAILURE
)
4577 if (count_rate
!= NULL
)
4579 if (scalar_check (count_rate
, 1) == FAILURE
)
4582 if (type_check (count_rate
, 1, BT_INTEGER
) == FAILURE
)
4585 if (variable_check (count_rate
, 1, false) == FAILURE
)
4589 && same_type_check (count
, 0, count_rate
, 1) == FAILURE
)
4594 if (count_max
!= NULL
)
4596 if (scalar_check (count_max
, 2) == FAILURE
)
4599 if (type_check (count_max
, 2, BT_INTEGER
) == FAILURE
)
4602 if (variable_check (count_max
, 2, false) == FAILURE
)
4606 && same_type_check (count
, 0, count_max
, 2) == FAILURE
)
4609 if (count_rate
!= NULL
4610 && same_type_check (count_rate
, 1, count_max
, 2) == FAILURE
)
4619 gfc_check_irand (gfc_expr
*x
)
4624 if (scalar_check (x
, 0) == FAILURE
)
4627 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
4630 if (kind_value_check(x
, 0, 4) == FAILURE
)
4638 gfc_check_alarm_sub (gfc_expr
*seconds
, gfc_expr
*handler
, gfc_expr
*status
)
4640 if (scalar_check (seconds
, 0) == FAILURE
)
4642 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
4645 if (int_or_proc_check (handler
, 1) == FAILURE
)
4647 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
4653 if (scalar_check (status
, 2) == FAILURE
)
4655 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
4657 if (kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
4665 gfc_check_rand (gfc_expr
*x
)
4670 if (scalar_check (x
, 0) == FAILURE
)
4673 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
4676 if (kind_value_check(x
, 0, 4) == FAILURE
)
4684 gfc_check_srand (gfc_expr
*x
)
4686 if (scalar_check (x
, 0) == FAILURE
)
4689 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
4692 if (kind_value_check(x
, 0, 4) == FAILURE
)
4700 gfc_check_ctime_sub (gfc_expr
*time
, gfc_expr
*result
)
4702 if (scalar_check (time
, 0) == FAILURE
)
4704 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
4707 if (type_check (result
, 1, BT_CHARACTER
) == FAILURE
)
4709 if (kind_value_check (result
, 1, gfc_default_character_kind
) == FAILURE
)
4717 gfc_check_dtime_etime (gfc_expr
*x
)
4719 if (array_check (x
, 0) == FAILURE
)
4722 if (rank_check (x
, 0, 1) == FAILURE
)
4725 if (variable_check (x
, 0, false) == FAILURE
)
4728 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
4731 if (kind_value_check(x
, 0, 4) == FAILURE
)
4739 gfc_check_dtime_etime_sub (gfc_expr
*values
, gfc_expr
*time
)
4741 if (array_check (values
, 0) == FAILURE
)
4744 if (rank_check (values
, 0, 1) == FAILURE
)
4747 if (variable_check (values
, 0, false) == FAILURE
)
4750 if (type_check (values
, 0, BT_REAL
) == FAILURE
)
4753 if (kind_value_check(values
, 0, 4) == FAILURE
)
4756 if (scalar_check (time
, 1) == FAILURE
)
4759 if (type_check (time
, 1, BT_REAL
) == FAILURE
)
4762 if (kind_value_check(time
, 1, 4) == FAILURE
)
4770 gfc_check_fdate_sub (gfc_expr
*date
)
4772 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
4774 if (kind_value_check (date
, 0, gfc_default_character_kind
) == FAILURE
)
4782 gfc_check_gerror (gfc_expr
*msg
)
4784 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
4786 if (kind_value_check (msg
, 0, gfc_default_character_kind
) == FAILURE
)
4794 gfc_check_getcwd_sub (gfc_expr
*cwd
, gfc_expr
*status
)
4796 if (type_check (cwd
, 0, BT_CHARACTER
) == FAILURE
)
4798 if (kind_value_check (cwd
, 0, gfc_default_character_kind
) == FAILURE
)
4804 if (scalar_check (status
, 1) == FAILURE
)
4807 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
4815 gfc_check_getarg (gfc_expr
*pos
, gfc_expr
*value
)
4817 if (type_check (pos
, 0, BT_INTEGER
) == FAILURE
)
4820 if (pos
->ts
.kind
> gfc_default_integer_kind
)
4822 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
4823 "not wider than the default kind (%d)",
4824 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4825 &pos
->where
, gfc_default_integer_kind
);
4829 if (type_check (value
, 1, BT_CHARACTER
) == FAILURE
)
4831 if (kind_value_check (value
, 1, gfc_default_character_kind
) == FAILURE
)
4839 gfc_check_getlog (gfc_expr
*msg
)
4841 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
4843 if (kind_value_check (msg
, 0, gfc_default_character_kind
) == FAILURE
)
4851 gfc_check_exit (gfc_expr
*status
)
4856 if (type_check (status
, 0, BT_INTEGER
) == FAILURE
)
4859 if (scalar_check (status
, 0) == FAILURE
)
4867 gfc_check_flush (gfc_expr
*unit
)
4872 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
4875 if (scalar_check (unit
, 0) == FAILURE
)
4883 gfc_check_free (gfc_expr
*i
)
4885 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
4888 if (scalar_check (i
, 0) == FAILURE
)
4896 gfc_check_hostnm (gfc_expr
*name
)
4898 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
4900 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
4908 gfc_check_hostnm_sub (gfc_expr
*name
, gfc_expr
*status
)
4910 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
4912 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
4918 if (scalar_check (status
, 1) == FAILURE
)
4921 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
4929 gfc_check_itime_idate (gfc_expr
*values
)
4931 if (array_check (values
, 0) == FAILURE
)
4934 if (rank_check (values
, 0, 1) == FAILURE
)
4937 if (variable_check (values
, 0, false) == FAILURE
)
4940 if (type_check (values
, 0, BT_INTEGER
) == FAILURE
)
4943 if (kind_value_check(values
, 0, gfc_default_integer_kind
) == FAILURE
)
4951 gfc_check_ltime_gmtime (gfc_expr
*time
, gfc_expr
*values
)
4953 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
4956 if (kind_value_check(time
, 0, gfc_default_integer_kind
) == FAILURE
)
4959 if (scalar_check (time
, 0) == FAILURE
)
4962 if (array_check (values
, 1) == FAILURE
)
4965 if (rank_check (values
, 1, 1) == FAILURE
)
4968 if (variable_check (values
, 1, false) == FAILURE
)
4971 if (type_check (values
, 1, BT_INTEGER
) == FAILURE
)
4974 if (kind_value_check(values
, 1, gfc_default_integer_kind
) == FAILURE
)
4982 gfc_check_ttynam_sub (gfc_expr
*unit
, gfc_expr
*name
)
4984 if (scalar_check (unit
, 0) == FAILURE
)
4987 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
4990 if (type_check (name
, 1, BT_CHARACTER
) == FAILURE
)
4992 if (kind_value_check (name
, 1, gfc_default_character_kind
) == FAILURE
)
5000 gfc_check_isatty (gfc_expr
*unit
)
5005 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
5008 if (scalar_check (unit
, 0) == FAILURE
)
5016 gfc_check_isnan (gfc_expr
*x
)
5018 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
5026 gfc_check_perror (gfc_expr
*string
)
5028 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
)
5030 if (kind_value_check (string
, 0, gfc_default_character_kind
) == FAILURE
)
5038 gfc_check_umask (gfc_expr
*mask
)
5040 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
5043 if (scalar_check (mask
, 0) == FAILURE
)
5051 gfc_check_umask_sub (gfc_expr
*mask
, gfc_expr
*old
)
5053 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
5056 if (scalar_check (mask
, 0) == FAILURE
)
5062 if (scalar_check (old
, 1) == FAILURE
)
5065 if (type_check (old
, 1, BT_INTEGER
) == FAILURE
)
5073 gfc_check_unlink (gfc_expr
*name
)
5075 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
5077 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
5085 gfc_check_unlink_sub (gfc_expr
*name
, gfc_expr
*status
)
5087 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
5089 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
5095 if (scalar_check (status
, 1) == FAILURE
)
5098 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
5106 gfc_check_signal (gfc_expr
*number
, gfc_expr
*handler
)
5108 if (scalar_check (number
, 0) == FAILURE
)
5110 if (type_check (number
, 0, BT_INTEGER
) == FAILURE
)
5113 if (int_or_proc_check (handler
, 1) == FAILURE
)
5115 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
5123 gfc_check_signal_sub (gfc_expr
*number
, gfc_expr
*handler
, gfc_expr
*status
)
5125 if (scalar_check (number
, 0) == FAILURE
)
5127 if (type_check (number
, 0, BT_INTEGER
) == FAILURE
)
5130 if (int_or_proc_check (handler
, 1) == FAILURE
)
5132 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
5138 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
5140 if (scalar_check (status
, 2) == FAILURE
)
5148 gfc_check_system_sub (gfc_expr
*cmd
, gfc_expr
*status
)
5150 if (type_check (cmd
, 0, BT_CHARACTER
) == FAILURE
)
5152 if (kind_value_check (cmd
, 0, gfc_default_character_kind
) == FAILURE
)
5155 if (scalar_check (status
, 1) == FAILURE
)
5158 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
5161 if (kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
)
5168 /* This is used for the GNU intrinsics AND, OR and XOR. */
5170 gfc_check_and (gfc_expr
*i
, gfc_expr
*j
)
5172 if (i
->ts
.type
!= BT_INTEGER
&& i
->ts
.type
!= BT_LOGICAL
)
5174 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
5175 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
5176 gfc_current_intrinsic
, &i
->where
);
5180 if (j
->ts
.type
!= BT_INTEGER
&& j
->ts
.type
!= BT_LOGICAL
)
5182 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
5183 "or LOGICAL", gfc_current_intrinsic_arg
[1]->name
,
5184 gfc_current_intrinsic
, &j
->where
);
5188 if (i
->ts
.type
!= j
->ts
.type
)
5190 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
5191 "have the same type", gfc_current_intrinsic_arg
[0]->name
,
5192 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
5197 if (scalar_check (i
, 0) == FAILURE
)
5200 if (scalar_check (j
, 1) == FAILURE
)
5208 gfc_check_storage_size (gfc_expr
*a ATTRIBUTE_UNUSED
, gfc_expr
*kind
)
5213 if (type_check (kind
, 1, BT_INTEGER
) == FAILURE
)
5216 if (scalar_check (kind
, 1) == FAILURE
)
5219 if (kind
->expr_type
!= EXPR_CONSTANT
)
5221 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
5222 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,