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 if (array
->expr_type
== EXPR_VARIABLE
)
625 ar
= gfc_find_array_ref (array
);
626 if (ar
->as
->type
== AS_ASSUMED_SIZE
628 && ar
->type
!= AR_ELEMENT
629 && ar
->type
!= AR_SECTION
)
633 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
634 || mpz_cmp_ui (dim
->value
.integer
, rank
) > 0)
636 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
637 "dimension index", gfc_current_intrinsic
, &dim
->where
);
646 /* Compare the size of a along dimension ai with the size of b along
647 dimension bi, returning 0 if they are known not to be identical,
648 and 1 if they are identical, or if this cannot be determined. */
651 identical_dimen_shape (gfc_expr
*a
, int ai
, gfc_expr
*b
, int bi
)
653 mpz_t a_size
, b_size
;
656 gcc_assert (a
->rank
> ai
);
657 gcc_assert (b
->rank
> bi
);
661 if (gfc_array_dimen_size (a
, ai
, &a_size
) == SUCCESS
)
663 if (gfc_array_dimen_size (b
, bi
, &b_size
) == SUCCESS
)
665 if (mpz_cmp (a_size
, b_size
) != 0)
675 /* Calculate the length of a character variable, including substrings.
676 Strip away parentheses if necessary. Return -1 if no length could
680 gfc_var_strlen (const gfc_expr
*a
)
684 while (a
->expr_type
== EXPR_OP
&& a
->value
.op
.op
== INTRINSIC_PARENTHESES
)
687 for (ra
= a
->ref
; ra
!= NULL
&& ra
->type
!= REF_SUBSTRING
; ra
= ra
->next
)
694 if (ra
->u
.ss
.start
->expr_type
== EXPR_CONSTANT
695 && ra
->u
.ss
.end
->expr_type
== EXPR_CONSTANT
)
697 start_a
= mpz_get_si (ra
->u
.ss
.start
->value
.integer
);
698 end_a
= mpz_get_si (ra
->u
.ss
.end
->value
.integer
);
699 return end_a
- start_a
+ 1;
701 else if (gfc_dep_compare_expr (ra
->u
.ss
.start
, ra
->u
.ss
.end
) == 0)
707 if (a
->ts
.u
.cl
&& a
->ts
.u
.cl
->length
708 && a
->ts
.u
.cl
->length
->expr_type
== EXPR_CONSTANT
)
709 return mpz_get_si (a
->ts
.u
.cl
->length
->value
.integer
);
710 else if (a
->expr_type
== EXPR_CONSTANT
711 && (a
->ts
.u
.cl
== NULL
|| a
->ts
.u
.cl
->length
== NULL
))
712 return a
->value
.character
.length
;
718 /* Check whether two character expressions have the same length;
719 returns SUCCESS if they have or if the length cannot be determined,
720 otherwise return FAILURE and raise a gfc_error. */
723 gfc_check_same_strlen (const gfc_expr
*a
, const gfc_expr
*b
, const char *name
)
727 len_a
= gfc_var_strlen(a
);
728 len_b
= gfc_var_strlen(b
);
730 if (len_a
== -1 || len_b
== -1 || len_a
== len_b
)
734 gfc_error ("Unequal character lengths (%ld/%ld) in %s at %L",
735 len_a
, len_b
, name
, &a
->where
);
741 /***** Check functions *****/
743 /* Check subroutine suitable for intrinsics taking a real argument and
744 a kind argument for the result. */
747 check_a_kind (gfc_expr
*a
, gfc_expr
*kind
, bt type
)
749 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
751 if (kind_check (kind
, 1, type
) == FAILURE
)
758 /* Check subroutine suitable for ceiling, floor and nint. */
761 gfc_check_a_ikind (gfc_expr
*a
, gfc_expr
*kind
)
763 return check_a_kind (a
, kind
, BT_INTEGER
);
767 /* Check subroutine suitable for aint, anint. */
770 gfc_check_a_xkind (gfc_expr
*a
, gfc_expr
*kind
)
772 return check_a_kind (a
, kind
, BT_REAL
);
777 gfc_check_abs (gfc_expr
*a
)
779 if (numeric_check (a
, 0) == FAILURE
)
787 gfc_check_achar (gfc_expr
*a
, gfc_expr
*kind
)
789 if (type_check (a
, 0, BT_INTEGER
) == FAILURE
)
791 if (kind_check (kind
, 1, BT_CHARACTER
) == FAILURE
)
799 gfc_check_access_func (gfc_expr
*name
, gfc_expr
*mode
)
801 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
802 || scalar_check (name
, 0) == FAILURE
)
804 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
807 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
808 || scalar_check (mode
, 1) == FAILURE
)
810 if (kind_value_check (mode
, 1, gfc_default_character_kind
) == FAILURE
)
818 gfc_check_all_any (gfc_expr
*mask
, gfc_expr
*dim
)
820 if (logical_array_check (mask
, 0) == FAILURE
)
823 if (dim_check (dim
, 1, false) == FAILURE
)
826 if (dim_rank_check (dim
, mask
, 0) == FAILURE
)
834 gfc_check_allocated (gfc_expr
*array
)
836 if (variable_check (array
, 0, false) == FAILURE
)
838 if (allocatable_check (array
, 0) == FAILURE
)
845 /* Common check function where the first argument must be real or
846 integer and the second argument must be the same as the first. */
849 gfc_check_a_p (gfc_expr
*a
, gfc_expr
*p
)
851 if (int_or_real_check (a
, 0) == FAILURE
)
854 if (a
->ts
.type
!= p
->ts
.type
)
856 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
857 "have the same type", gfc_current_intrinsic_arg
[0]->name
,
858 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
863 if (a
->ts
.kind
!= p
->ts
.kind
)
865 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
866 &p
->where
) == FAILURE
)
875 gfc_check_x_yd (gfc_expr
*x
, gfc_expr
*y
)
877 if (double_check (x
, 0) == FAILURE
|| double_check (y
, 1) == FAILURE
)
885 gfc_check_associated (gfc_expr
*pointer
, gfc_expr
*target
)
887 symbol_attribute attr1
, attr2
;
892 where
= &pointer
->where
;
894 if (pointer
->expr_type
== EXPR_VARIABLE
|| pointer
->expr_type
== EXPR_FUNCTION
)
895 attr1
= gfc_expr_attr (pointer
);
896 else if (pointer
->expr_type
== EXPR_NULL
)
899 gcc_assert (0); /* Pointer must be a variable or a function. */
901 if (!attr1
.pointer
&& !attr1
.proc_pointer
)
903 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
904 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
910 if (attr1
.pointer
&& gfc_is_coindexed (pointer
))
912 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
913 "coindexed", gfc_current_intrinsic_arg
[0]->name
,
914 gfc_current_intrinsic
, &pointer
->where
);
918 /* Target argument is optional. */
922 where
= &target
->where
;
923 if (target
->expr_type
== EXPR_NULL
)
926 if (target
->expr_type
== EXPR_VARIABLE
|| target
->expr_type
== EXPR_FUNCTION
)
927 attr2
= gfc_expr_attr (target
);
930 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
931 "or target VARIABLE or FUNCTION",
932 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
937 if (attr1
.pointer
&& !attr2
.pointer
&& !attr2
.target
)
939 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
940 "or a TARGET", gfc_current_intrinsic_arg
[1]->name
,
941 gfc_current_intrinsic
, &target
->where
);
946 if (attr1
.pointer
&& gfc_is_coindexed (target
))
948 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
949 "coindexed", gfc_current_intrinsic_arg
[1]->name
,
950 gfc_current_intrinsic
, &target
->where
);
955 if (same_type_check (pointer
, 0, target
, 1) == FAILURE
)
957 if (rank_check (target
, 0, pointer
->rank
) == FAILURE
)
959 if (target
->rank
> 0)
961 for (i
= 0; i
< target
->rank
; i
++)
962 if (target
->ref
->u
.ar
.dimen_type
[i
] == DIMEN_VECTOR
)
964 gfc_error ("Array section with a vector subscript at %L shall not "
965 "be the target of a pointer",
975 gfc_error ("NULL pointer at %L is not permitted as actual argument "
976 "of '%s' intrinsic function", where
, gfc_current_intrinsic
);
983 gfc_check_atan_2 (gfc_expr
*y
, gfc_expr
*x
)
985 /* gfc_notify_std would be a waste of time as the return value
986 is seemingly used only for the generic resolution. The error
987 will be: Too many arguments. */
988 if ((gfc_option
.allow_std
& GFC_STD_F2008
) == 0)
991 return gfc_check_atan2 (y
, x
);
996 gfc_check_atan2 (gfc_expr
*y
, gfc_expr
*x
)
998 if (type_check (y
, 0, BT_REAL
) == FAILURE
)
1000 if (same_type_check (y
, 0, x
, 1) == FAILURE
)
1008 gfc_check_atomic (gfc_expr
*atom
, gfc_expr
*value
)
1010 if (!(atom
->ts
.type
== BT_INTEGER
&& atom
->ts
.kind
== gfc_atomic_int_kind
)
1011 && !(atom
->ts
.type
== BT_LOGICAL
1012 && atom
->ts
.kind
== gfc_atomic_logical_kind
))
1014 gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1015 "integer of ATOMIC_INT_KIND or a logical of "
1016 "ATOMIC_LOGICAL_KIND", &atom
->where
, gfc_current_intrinsic
);
1020 if (!gfc_expr_attr (atom
).codimension
)
1022 gfc_error ("ATOM argument at %L of the %s intrinsic function shall be a "
1023 "coarray or coindexed", &atom
->where
, gfc_current_intrinsic
);
1027 if (atom
->ts
.type
!= value
->ts
.type
)
1029 gfc_error ("ATOM and VALUE argument of the %s intrinsic function shall "
1030 "have the same type at %L", gfc_current_intrinsic
,
1040 gfc_check_atomic_def (gfc_expr
*atom
, gfc_expr
*value
)
1042 if (scalar_check (atom
, 0) == FAILURE
|| scalar_check (value
, 1) == FAILURE
)
1045 if (gfc_check_vardef_context (atom
, false, false, NULL
) == FAILURE
)
1047 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1048 "definable", gfc_current_intrinsic
, &atom
->where
);
1052 return gfc_check_atomic (atom
, value
);
1057 gfc_check_atomic_ref (gfc_expr
*value
, gfc_expr
*atom
)
1059 if (scalar_check (value
, 0) == FAILURE
|| scalar_check (atom
, 1) == FAILURE
)
1062 if (gfc_check_vardef_context (value
, false, false, NULL
) == FAILURE
)
1064 gfc_error ("VALUE argument of the %s intrinsic function at %L shall be "
1065 "definable", gfc_current_intrinsic
, &value
->where
);
1069 return gfc_check_atomic (atom
, value
);
1073 /* BESJN and BESYN functions. */
1076 gfc_check_besn (gfc_expr
*n
, gfc_expr
*x
)
1078 if (type_check (n
, 0, BT_INTEGER
) == FAILURE
)
1080 if (n
->expr_type
== EXPR_CONSTANT
)
1083 gfc_extract_int (n
, &i
);
1084 if (i
< 0 && gfc_notify_std (GFC_STD_GNU
, "Extension: Negative argument "
1085 "N at %L", &n
->where
) == FAILURE
)
1089 if (type_check (x
, 1, BT_REAL
) == FAILURE
)
1096 /* Transformational version of the Bessel JN and YN functions. */
1099 gfc_check_bessel_n2 (gfc_expr
*n1
, gfc_expr
*n2
, gfc_expr
*x
)
1101 if (type_check (n1
, 0, BT_INTEGER
) == FAILURE
)
1103 if (scalar_check (n1
, 0) == FAILURE
)
1105 if (nonnegative_check("N1", n1
) == FAILURE
)
1108 if (type_check (n2
, 1, BT_INTEGER
) == FAILURE
)
1110 if (scalar_check (n2
, 1) == FAILURE
)
1112 if (nonnegative_check("N2", n2
) == FAILURE
)
1115 if (type_check (x
, 2, BT_REAL
) == FAILURE
)
1117 if (scalar_check (x
, 2) == FAILURE
)
1125 gfc_check_bge_bgt_ble_blt (gfc_expr
*i
, gfc_expr
*j
)
1127 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1130 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1138 gfc_check_bitfcn (gfc_expr
*i
, gfc_expr
*pos
)
1140 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1143 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
1146 if (nonnegative_check ("pos", pos
) == FAILURE
)
1149 if (less_than_bitsize1 ("i", i
, "pos", pos
, false) == FAILURE
)
1157 gfc_check_char (gfc_expr
*i
, gfc_expr
*kind
)
1159 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1161 if (kind_check (kind
, 1, BT_CHARACTER
) == FAILURE
)
1169 gfc_check_chdir (gfc_expr
*dir
)
1171 if (type_check (dir
, 0, BT_CHARACTER
) == FAILURE
)
1173 if (kind_value_check (dir
, 0, gfc_default_character_kind
) == FAILURE
)
1181 gfc_check_chdir_sub (gfc_expr
*dir
, gfc_expr
*status
)
1183 if (type_check (dir
, 0, BT_CHARACTER
) == FAILURE
)
1185 if (kind_value_check (dir
, 0, gfc_default_character_kind
) == FAILURE
)
1191 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
1193 if (scalar_check (status
, 1) == FAILURE
)
1201 gfc_check_chmod (gfc_expr
*name
, gfc_expr
*mode
)
1203 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
1205 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
1208 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
)
1210 if (kind_value_check (mode
, 1, gfc_default_character_kind
) == FAILURE
)
1218 gfc_check_chmod_sub (gfc_expr
*name
, gfc_expr
*mode
, gfc_expr
*status
)
1220 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
1222 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
1225 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
)
1227 if (kind_value_check (mode
, 1, gfc_default_character_kind
) == FAILURE
)
1233 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1236 if (scalar_check (status
, 2) == FAILURE
)
1244 gfc_check_cmplx (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*kind
)
1246 if (numeric_check (x
, 0) == FAILURE
)
1251 if (numeric_check (y
, 1) == FAILURE
)
1254 if (x
->ts
.type
== BT_COMPLEX
)
1256 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1257 "present if 'x' is COMPLEX",
1258 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1263 if (y
->ts
.type
== BT_COMPLEX
)
1265 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1266 "of either REAL or INTEGER",
1267 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1274 if (kind_check (kind
, 2, BT_COMPLEX
) == FAILURE
)
1282 gfc_check_complex (gfc_expr
*x
, gfc_expr
*y
)
1284 if (int_or_real_check (x
, 0) == FAILURE
)
1286 if (scalar_check (x
, 0) == FAILURE
)
1289 if (int_or_real_check (y
, 1) == FAILURE
)
1291 if (scalar_check (y
, 1) == FAILURE
)
1299 gfc_check_count (gfc_expr
*mask
, gfc_expr
*dim
, gfc_expr
*kind
)
1301 if (logical_array_check (mask
, 0) == FAILURE
)
1303 if (dim_check (dim
, 1, false) == FAILURE
)
1305 if (dim_rank_check (dim
, mask
, 0) == FAILURE
)
1307 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
1309 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1310 "with KIND argument at %L",
1311 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1319 gfc_check_cshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*dim
)
1321 if (array_check (array
, 0) == FAILURE
)
1324 if (type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1327 if (dim_check (dim
, 2, true) == FAILURE
)
1330 if (dim_rank_check (dim
, array
, false) == FAILURE
)
1333 if (array
->rank
== 1 || shift
->rank
== 0)
1335 if (scalar_check (shift
, 1) == FAILURE
)
1338 else if (shift
->rank
== array
->rank
- 1)
1343 else if (dim
->expr_type
== EXPR_CONSTANT
)
1344 gfc_extract_int (dim
, &d
);
1351 for (i
= 0, j
= 0; i
< array
->rank
; i
++)
1354 if (!identical_dimen_shape (array
, i
, shift
, j
))
1356 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1357 "invalid shape in dimension %d (%ld/%ld)",
1358 gfc_current_intrinsic_arg
[1]->name
,
1359 gfc_current_intrinsic
, &shift
->where
, i
+ 1,
1360 mpz_get_si (array
->shape
[i
]),
1361 mpz_get_si (shift
->shape
[j
]));
1371 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1372 "%d or be a scalar", gfc_current_intrinsic_arg
[1]->name
,
1373 gfc_current_intrinsic
, &shift
->where
, array
->rank
- 1);
1382 gfc_check_ctime (gfc_expr
*time
)
1384 if (scalar_check (time
, 0) == FAILURE
)
1387 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
1394 gfc_try
gfc_check_datan2 (gfc_expr
*y
, gfc_expr
*x
)
1396 if (double_check (y
, 0) == FAILURE
|| double_check (x
, 1) == FAILURE
)
1403 gfc_check_dcmplx (gfc_expr
*x
, gfc_expr
*y
)
1405 if (numeric_check (x
, 0) == FAILURE
)
1410 if (numeric_check (y
, 1) == FAILURE
)
1413 if (x
->ts
.type
== BT_COMPLEX
)
1415 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1416 "present if 'x' is COMPLEX",
1417 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1422 if (y
->ts
.type
== BT_COMPLEX
)
1424 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1425 "of either REAL or INTEGER",
1426 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1437 gfc_check_dble (gfc_expr
*x
)
1439 if (numeric_check (x
, 0) == FAILURE
)
1447 gfc_check_digits (gfc_expr
*x
)
1449 if (int_or_real_check (x
, 0) == FAILURE
)
1457 gfc_check_dot_product (gfc_expr
*vector_a
, gfc_expr
*vector_b
)
1459 switch (vector_a
->ts
.type
)
1462 if (type_check (vector_b
, 1, BT_LOGICAL
) == FAILURE
)
1469 if (numeric_check (vector_b
, 1) == FAILURE
)
1474 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1475 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
1476 gfc_current_intrinsic
, &vector_a
->where
);
1480 if (rank_check (vector_a
, 0, 1) == FAILURE
)
1483 if (rank_check (vector_b
, 1, 1) == FAILURE
)
1486 if (! identical_dimen_shape (vector_a
, 0, vector_b
, 0))
1488 gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
1489 "intrinsic 'dot_product'", gfc_current_intrinsic_arg
[0]->name
,
1490 gfc_current_intrinsic_arg
[1]->name
, &vector_a
->where
);
1499 gfc_check_dprod (gfc_expr
*x
, gfc_expr
*y
)
1501 if (type_check (x
, 0, BT_REAL
) == FAILURE
1502 || type_check (y
, 1, BT_REAL
) == FAILURE
)
1505 if (x
->ts
.kind
!= gfc_default_real_kind
)
1507 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1508 "real", gfc_current_intrinsic_arg
[0]->name
,
1509 gfc_current_intrinsic
, &x
->where
);
1513 if (y
->ts
.kind
!= gfc_default_real_kind
)
1515 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1516 "real", gfc_current_intrinsic_arg
[1]->name
,
1517 gfc_current_intrinsic
, &y
->where
);
1526 gfc_check_dshift (gfc_expr
*i
, gfc_expr
*j
, gfc_expr
*shift
)
1528 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1531 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1534 if (i
->is_boz
&& j
->is_boz
)
1536 gfc_error ("'I' at %L and 'J' at %L cannot both be BOZ literal "
1537 "constants", &i
->where
, &j
->where
);
1541 if (!i
->is_boz
&& !j
->is_boz
&& same_type_check (i
, 0, j
, 1) == FAILURE
)
1544 if (type_check (shift
, 2, BT_INTEGER
) == FAILURE
)
1547 if (nonnegative_check ("SHIFT", shift
) == FAILURE
)
1552 if (less_than_bitsize1 ("J", j
, "SHIFT", shift
, true) == FAILURE
)
1554 i
->ts
.kind
= j
->ts
.kind
;
1558 if (less_than_bitsize1 ("I", i
, "SHIFT", shift
, true) == FAILURE
)
1560 j
->ts
.kind
= i
->ts
.kind
;
1568 gfc_check_eoshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*boundary
,
1571 if (array_check (array
, 0) == FAILURE
)
1574 if (type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1577 if (dim_check (dim
, 3, true) == FAILURE
)
1580 if (dim_rank_check (dim
, array
, false) == FAILURE
)
1583 if (array
->rank
== 1 || shift
->rank
== 0)
1585 if (scalar_check (shift
, 1) == FAILURE
)
1588 else if (shift
->rank
== array
->rank
- 1)
1593 else if (dim
->expr_type
== EXPR_CONSTANT
)
1594 gfc_extract_int (dim
, &d
);
1601 for (i
= 0, j
= 0; i
< array
->rank
; i
++)
1604 if (!identical_dimen_shape (array
, i
, shift
, j
))
1606 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1607 "invalid shape in dimension %d (%ld/%ld)",
1608 gfc_current_intrinsic_arg
[1]->name
,
1609 gfc_current_intrinsic
, &shift
->where
, i
+ 1,
1610 mpz_get_si (array
->shape
[i
]),
1611 mpz_get_si (shift
->shape
[j
]));
1621 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1622 "%d or be a scalar", gfc_current_intrinsic_arg
[1]->name
,
1623 gfc_current_intrinsic
, &shift
->where
, array
->rank
- 1);
1627 if (boundary
!= NULL
)
1629 if (same_type_check (array
, 0, boundary
, 2) == FAILURE
)
1632 if (array
->rank
== 1 || boundary
->rank
== 0)
1634 if (scalar_check (boundary
, 2) == FAILURE
)
1637 else if (boundary
->rank
== array
->rank
- 1)
1639 if (gfc_check_conformance (shift
, boundary
,
1640 "arguments '%s' and '%s' for "
1642 gfc_current_intrinsic_arg
[1]->name
,
1643 gfc_current_intrinsic_arg
[2]->name
,
1644 gfc_current_intrinsic
) == FAILURE
)
1649 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have "
1650 "rank %d or be a scalar",
1651 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1652 &shift
->where
, array
->rank
- 1);
1661 gfc_check_float (gfc_expr
*a
)
1663 if (type_check (a
, 0, BT_INTEGER
) == FAILURE
)
1666 if ((a
->ts
.kind
!= gfc_default_integer_kind
)
1667 && gfc_notify_std (GFC_STD_GNU
, "GNU extension: non-default INTEGER "
1668 "kind argument to %s intrinsic at %L",
1669 gfc_current_intrinsic
, &a
->where
) == FAILURE
)
1675 /* A single complex argument. */
1678 gfc_check_fn_c (gfc_expr
*a
)
1680 if (type_check (a
, 0, BT_COMPLEX
) == FAILURE
)
1686 /* A single real argument. */
1689 gfc_check_fn_r (gfc_expr
*a
)
1691 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
1697 /* A single double argument. */
1700 gfc_check_fn_d (gfc_expr
*a
)
1702 if (double_check (a
, 0) == FAILURE
)
1708 /* A single real or complex argument. */
1711 gfc_check_fn_rc (gfc_expr
*a
)
1713 if (real_or_complex_check (a
, 0) == FAILURE
)
1721 gfc_check_fn_rc2008 (gfc_expr
*a
)
1723 if (real_or_complex_check (a
, 0) == FAILURE
)
1726 if (a
->ts
.type
== BT_COMPLEX
1727 && gfc_notify_std (GFC_STD_F2008
, "Fortran 2008: COMPLEX argument '%s' "
1728 "argument of '%s' intrinsic at %L",
1729 gfc_current_intrinsic_arg
[0]->name
,
1730 gfc_current_intrinsic
, &a
->where
) == FAILURE
)
1738 gfc_check_fnum (gfc_expr
*unit
)
1740 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
1743 if (scalar_check (unit
, 0) == FAILURE
)
1751 gfc_check_huge (gfc_expr
*x
)
1753 if (int_or_real_check (x
, 0) == FAILURE
)
1761 gfc_check_hypot (gfc_expr
*x
, gfc_expr
*y
)
1763 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1765 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
1772 /* Check that the single argument is an integer. */
1775 gfc_check_i (gfc_expr
*i
)
1777 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1785 gfc_check_iand (gfc_expr
*i
, gfc_expr
*j
)
1787 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1790 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1793 if (i
->ts
.kind
!= j
->ts
.kind
)
1795 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1796 &i
->where
) == FAILURE
)
1805 gfc_check_ibits (gfc_expr
*i
, gfc_expr
*pos
, gfc_expr
*len
)
1807 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1810 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
1813 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
1816 if (nonnegative_check ("pos", pos
) == FAILURE
)
1819 if (nonnegative_check ("len", len
) == FAILURE
)
1822 if (less_than_bitsize2 ("i", i
, "pos", pos
, "len", len
) == FAILURE
)
1830 gfc_check_ichar_iachar (gfc_expr
*c
, gfc_expr
*kind
)
1834 if (type_check (c
, 0, BT_CHARACTER
) == FAILURE
)
1837 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1840 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1841 "with KIND argument at %L",
1842 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1845 if (c
->expr_type
== EXPR_VARIABLE
|| c
->expr_type
== EXPR_SUBSTRING
)
1851 /* Substring references don't have the charlength set. */
1853 while (ref
&& ref
->type
!= REF_SUBSTRING
)
1856 gcc_assert (ref
== NULL
|| ref
->type
== REF_SUBSTRING
);
1860 /* Check that the argument is length one. Non-constant lengths
1861 can't be checked here, so assume they are ok. */
1862 if (c
->ts
.u
.cl
&& c
->ts
.u
.cl
->length
)
1864 /* If we already have a length for this expression then use it. */
1865 if (c
->ts
.u
.cl
->length
->expr_type
!= EXPR_CONSTANT
)
1867 i
= mpz_get_si (c
->ts
.u
.cl
->length
->value
.integer
);
1874 start
= ref
->u
.ss
.start
;
1875 end
= ref
->u
.ss
.end
;
1878 if (end
== NULL
|| end
->expr_type
!= EXPR_CONSTANT
1879 || start
->expr_type
!= EXPR_CONSTANT
)
1882 i
= mpz_get_si (end
->value
.integer
) + 1
1883 - mpz_get_si (start
->value
.integer
);
1891 gfc_error ("Argument of %s at %L must be of length one",
1892 gfc_current_intrinsic
, &c
->where
);
1901 gfc_check_idnint (gfc_expr
*a
)
1903 if (double_check (a
, 0) == FAILURE
)
1911 gfc_check_ieor (gfc_expr
*i
, gfc_expr
*j
)
1913 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1916 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1919 if (i
->ts
.kind
!= j
->ts
.kind
)
1921 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1922 &i
->where
) == FAILURE
)
1931 gfc_check_index (gfc_expr
*string
, gfc_expr
*substring
, gfc_expr
*back
,
1934 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
1935 || type_check (substring
, 1, BT_CHARACTER
) == FAILURE
)
1938 if (back
!= NULL
&& type_check (back
, 2, BT_LOGICAL
) == FAILURE
)
1941 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
1943 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1944 "with KIND argument at %L",
1945 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1948 if (string
->ts
.kind
!= substring
->ts
.kind
)
1950 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1951 "kind as '%s'", gfc_current_intrinsic_arg
[1]->name
,
1952 gfc_current_intrinsic
, &substring
->where
,
1953 gfc_current_intrinsic_arg
[0]->name
);
1962 gfc_check_int (gfc_expr
*x
, gfc_expr
*kind
)
1964 if (numeric_check (x
, 0) == FAILURE
)
1967 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1975 gfc_check_intconv (gfc_expr
*x
)
1977 if (numeric_check (x
, 0) == FAILURE
)
1985 gfc_check_ior (gfc_expr
*i
, gfc_expr
*j
)
1987 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1990 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1993 if (i
->ts
.kind
!= j
->ts
.kind
)
1995 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1996 &i
->where
) == FAILURE
)
2005 gfc_check_ishft (gfc_expr
*i
, gfc_expr
*shift
)
2007 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
2008 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
2011 if (less_than_bitsize1 ("I", i
, NULL
, shift
, true) == FAILURE
)
2019 gfc_check_ishftc (gfc_expr
*i
, gfc_expr
*shift
, gfc_expr
*size
)
2021 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
2022 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
2029 if (type_check (size
, 2, BT_INTEGER
) == FAILURE
)
2032 if (less_than_bitsize1 ("I", i
, "SIZE", size
, true) == FAILURE
)
2035 if (size
->expr_type
== EXPR_CONSTANT
)
2037 gfc_extract_int (size
, &i3
);
2040 gfc_error ("SIZE at %L must be positive", &size
->where
);
2044 if (shift
->expr_type
== EXPR_CONSTANT
)
2046 gfc_extract_int (shift
, &i2
);
2052 gfc_error ("The absolute value of SHIFT at %L must be less "
2053 "than or equal to SIZE at %L", &shift
->where
,
2060 else if (less_than_bitsize1 ("I", i
, NULL
, shift
, true) == FAILURE
)
2068 gfc_check_kill (gfc_expr
*pid
, gfc_expr
*sig
)
2070 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
2073 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
2081 gfc_check_kill_sub (gfc_expr
*pid
, gfc_expr
*sig
, gfc_expr
*status
)
2083 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
2086 if (scalar_check (pid
, 0) == FAILURE
)
2089 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
2092 if (scalar_check (sig
, 1) == FAILURE
)
2098 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2101 if (scalar_check (status
, 2) == FAILURE
)
2109 gfc_check_kind (gfc_expr
*x
)
2111 if (x
->ts
.type
== BT_DERIVED
)
2113 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
2114 "non-derived type", gfc_current_intrinsic_arg
[0]->name
,
2115 gfc_current_intrinsic
, &x
->where
);
2124 gfc_check_lbound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
2126 if (array_check (array
, 0) == FAILURE
)
2129 if (dim_check (dim
, 1, false) == FAILURE
)
2132 if (dim_rank_check (dim
, array
, 1) == FAILURE
)
2135 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
2137 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2138 "with KIND argument at %L",
2139 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2147 gfc_check_lcobound (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*kind
)
2149 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
2151 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
2155 if (coarray_check (coarray
, 0) == FAILURE
)
2160 if (dim_check (dim
, 1, false) == FAILURE
)
2163 if (dim_corank_check (dim
, coarray
) == FAILURE
)
2167 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
2175 gfc_check_len_lentrim (gfc_expr
*s
, gfc_expr
*kind
)
2177 if (type_check (s
, 0, BT_CHARACTER
) == FAILURE
)
2180 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
2182 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2183 "with KIND argument at %L",
2184 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2192 gfc_check_lge_lgt_lle_llt (gfc_expr
*a
, gfc_expr
*b
)
2194 if (type_check (a
, 0, BT_CHARACTER
) == FAILURE
)
2196 if (kind_value_check (a
, 0, gfc_default_character_kind
) == FAILURE
)
2199 if (type_check (b
, 1, BT_CHARACTER
) == FAILURE
)
2201 if (kind_value_check (b
, 1, gfc_default_character_kind
) == FAILURE
)
2209 gfc_check_link (gfc_expr
*path1
, gfc_expr
*path2
)
2211 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2213 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2216 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2218 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2226 gfc_check_link_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2228 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2230 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2233 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2235 if (kind_value_check (path2
, 0, gfc_default_character_kind
) == FAILURE
)
2241 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2244 if (scalar_check (status
, 2) == FAILURE
)
2252 gfc_check_loc (gfc_expr
*expr
)
2254 return variable_check (expr
, 0, true);
2259 gfc_check_symlnk (gfc_expr
*path1
, gfc_expr
*path2
)
2261 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2263 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2266 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2268 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2276 gfc_check_symlnk_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2278 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2280 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2283 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2285 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2291 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2294 if (scalar_check (status
, 2) == FAILURE
)
2302 gfc_check_logical (gfc_expr
*a
, gfc_expr
*kind
)
2304 if (type_check (a
, 0, BT_LOGICAL
) == FAILURE
)
2306 if (kind_check (kind
, 1, BT_LOGICAL
) == FAILURE
)
2313 /* Min/max family. */
2316 min_max_args (gfc_actual_arglist
*arg
)
2318 if (arg
== NULL
|| arg
->next
== NULL
)
2320 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
2321 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
2330 check_rest (bt type
, int kind
, gfc_actual_arglist
*arglist
)
2332 gfc_actual_arglist
*arg
, *tmp
;
2337 if (min_max_args (arglist
) == FAILURE
)
2340 for (arg
= arglist
, n
=1; arg
; arg
= arg
->next
, n
++)
2343 if (x
->ts
.type
!= type
|| x
->ts
.kind
!= kind
)
2345 if (x
->ts
.type
== type
)
2347 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type "
2348 "kinds at %L", &x
->where
) == FAILURE
)
2353 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
2354 "%s(%d)", n
, gfc_current_intrinsic
, &x
->where
,
2355 gfc_basic_typename (type
), kind
);
2360 for (tmp
= arglist
, m
=1; tmp
!= arg
; tmp
= tmp
->next
, m
++)
2361 if (gfc_check_conformance (tmp
->expr
, x
,
2362 "arguments 'a%d' and 'a%d' for "
2363 "intrinsic '%s'", m
, n
,
2364 gfc_current_intrinsic
) == FAILURE
)
2373 gfc_check_min_max (gfc_actual_arglist
*arg
)
2377 if (min_max_args (arg
) == FAILURE
)
2382 if (x
->ts
.type
== BT_CHARACTER
)
2384 if (gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2385 "with CHARACTER argument at %L",
2386 gfc_current_intrinsic
, &x
->where
) == FAILURE
)
2389 else if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
2391 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
2392 "REAL or CHARACTER", gfc_current_intrinsic
, &x
->where
);
2396 return check_rest (x
->ts
.type
, x
->ts
.kind
, arg
);
2401 gfc_check_min_max_integer (gfc_actual_arglist
*arg
)
2403 return check_rest (BT_INTEGER
, gfc_default_integer_kind
, arg
);
2408 gfc_check_min_max_real (gfc_actual_arglist
*arg
)
2410 return check_rest (BT_REAL
, gfc_default_real_kind
, arg
);
2415 gfc_check_min_max_double (gfc_actual_arglist
*arg
)
2417 return check_rest (BT_REAL
, gfc_default_double_kind
, arg
);
2421 /* End of min/max family. */
2424 gfc_check_malloc (gfc_expr
*size
)
2426 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
2429 if (scalar_check (size
, 0) == FAILURE
)
2437 gfc_check_matmul (gfc_expr
*matrix_a
, gfc_expr
*matrix_b
)
2439 if ((matrix_a
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_a
->ts
))
2441 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2442 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
2443 gfc_current_intrinsic
, &matrix_a
->where
);
2447 if ((matrix_b
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_b
->ts
))
2449 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2450 "or LOGICAL", gfc_current_intrinsic_arg
[1]->name
,
2451 gfc_current_intrinsic
, &matrix_b
->where
);
2455 if ((matrix_a
->ts
.type
== BT_LOGICAL
&& gfc_numeric_ts (&matrix_b
->ts
))
2456 || (gfc_numeric_ts (&matrix_a
->ts
) && matrix_b
->ts
.type
== BT_LOGICAL
))
2458 gfc_error ("Argument types of '%s' intrinsic at %L must match (%s/%s)",
2459 gfc_current_intrinsic
, &matrix_a
->where
,
2460 gfc_typename(&matrix_a
->ts
), gfc_typename(&matrix_b
->ts
));
2464 switch (matrix_a
->rank
)
2467 if (rank_check (matrix_b
, 1, 2) == FAILURE
)
2469 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
2470 if (!identical_dimen_shape (matrix_a
, 0, matrix_b
, 0))
2472 gfc_error ("Different shape on dimension 1 for arguments '%s' "
2473 "and '%s' at %L for intrinsic matmul",
2474 gfc_current_intrinsic_arg
[0]->name
,
2475 gfc_current_intrinsic_arg
[1]->name
, &matrix_a
->where
);
2481 if (matrix_b
->rank
!= 2)
2483 if (rank_check (matrix_b
, 1, 1) == FAILURE
)
2486 /* matrix_b has rank 1 or 2 here. Common check for the cases
2487 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
2488 - matrix_a has shape (n,m) and matrix_b has shape (m). */
2489 if (!identical_dimen_shape (matrix_a
, 1, matrix_b
, 0))
2491 gfc_error ("Different shape on dimension 2 for argument '%s' and "
2492 "dimension 1 for argument '%s' at %L for intrinsic "
2493 "matmul", gfc_current_intrinsic_arg
[0]->name
,
2494 gfc_current_intrinsic_arg
[1]->name
, &matrix_a
->where
);
2500 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
2501 "1 or 2", gfc_current_intrinsic_arg
[0]->name
,
2502 gfc_current_intrinsic
, &matrix_a
->where
);
2510 /* Whoever came up with this interface was probably on something.
2511 The possibilities for the occupation of the second and third
2518 NULL MASK minloc(array, mask=m)
2521 I.e. in the case of minloc(array,mask), mask will be in the second
2522 position of the argument list and we'll have to fix that up. */
2525 gfc_check_minloc_maxloc (gfc_actual_arglist
*ap
)
2527 gfc_expr
*a
, *m
, *d
;
2530 if (int_or_real_check (a
, 0) == FAILURE
|| array_check (a
, 0) == FAILURE
)
2534 m
= ap
->next
->next
->expr
;
2536 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
2537 && ap
->next
->name
== NULL
)
2541 ap
->next
->expr
= NULL
;
2542 ap
->next
->next
->expr
= m
;
2545 if (dim_check (d
, 1, false) == FAILURE
)
2548 if (dim_rank_check (d
, a
, 0) == FAILURE
)
2551 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
2555 && gfc_check_conformance (a
, m
,
2556 "arguments '%s' and '%s' for intrinsic %s",
2557 gfc_current_intrinsic_arg
[0]->name
,
2558 gfc_current_intrinsic_arg
[2]->name
,
2559 gfc_current_intrinsic
) == FAILURE
)
2566 /* Similar to minloc/maxloc, the argument list might need to be
2567 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
2568 difference is that MINLOC/MAXLOC take an additional KIND argument.
2569 The possibilities are:
2575 NULL MASK minval(array, mask=m)
2578 I.e. in the case of minval(array,mask), mask will be in the second
2579 position of the argument list and we'll have to fix that up. */
2582 check_reduction (gfc_actual_arglist
*ap
)
2584 gfc_expr
*a
, *m
, *d
;
2588 m
= ap
->next
->next
->expr
;
2590 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
2591 && ap
->next
->name
== NULL
)
2595 ap
->next
->expr
= NULL
;
2596 ap
->next
->next
->expr
= m
;
2599 if (dim_check (d
, 1, false) == FAILURE
)
2602 if (dim_rank_check (d
, a
, 0) == FAILURE
)
2605 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
2609 && gfc_check_conformance (a
, m
,
2610 "arguments '%s' and '%s' for intrinsic %s",
2611 gfc_current_intrinsic_arg
[0]->name
,
2612 gfc_current_intrinsic_arg
[2]->name
,
2613 gfc_current_intrinsic
) == FAILURE
)
2621 gfc_check_minval_maxval (gfc_actual_arglist
*ap
)
2623 if (int_or_real_check (ap
->expr
, 0) == FAILURE
2624 || array_check (ap
->expr
, 0) == FAILURE
)
2627 return check_reduction (ap
);
2632 gfc_check_product_sum (gfc_actual_arglist
*ap
)
2634 if (numeric_check (ap
->expr
, 0) == FAILURE
2635 || array_check (ap
->expr
, 0) == FAILURE
)
2638 return check_reduction (ap
);
2642 /* For IANY, IALL and IPARITY. */
2645 gfc_check_mask (gfc_expr
*i
, gfc_expr
*kind
)
2649 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
2652 if (nonnegative_check ("I", i
) == FAILURE
)
2655 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
2659 gfc_extract_int (kind
, &k
);
2661 k
= gfc_default_integer_kind
;
2663 if (less_than_bitsizekind ("I", i
, k
) == FAILURE
)
2671 gfc_check_transf_bit_intrins (gfc_actual_arglist
*ap
)
2673 if (ap
->expr
->ts
.type
!= BT_INTEGER
)
2675 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER",
2676 gfc_current_intrinsic_arg
[0]->name
,
2677 gfc_current_intrinsic
, &ap
->expr
->where
);
2681 if (array_check (ap
->expr
, 0) == FAILURE
)
2684 return check_reduction (ap
);
2689 gfc_check_merge (gfc_expr
*tsource
, gfc_expr
*fsource
, gfc_expr
*mask
)
2691 if (same_type_check (tsource
, 0, fsource
, 1) == FAILURE
)
2694 if (type_check (mask
, 2, BT_LOGICAL
) == FAILURE
)
2697 if (tsource
->ts
.type
== BT_CHARACTER
)
2698 return gfc_check_same_strlen (tsource
, fsource
, "MERGE intrinsic");
2705 gfc_check_merge_bits (gfc_expr
*i
, gfc_expr
*j
, gfc_expr
*mask
)
2707 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
2710 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
2713 if (type_check (mask
, 2, BT_INTEGER
) == FAILURE
)
2716 if (same_type_check (i
, 0, j
, 1) == FAILURE
)
2719 if (same_type_check (i
, 0, mask
, 2) == FAILURE
)
2727 gfc_check_move_alloc (gfc_expr
*from
, gfc_expr
*to
)
2729 if (variable_check (from
, 0, false) == FAILURE
)
2731 if (allocatable_check (from
, 0) == FAILURE
)
2733 if (gfc_is_coindexed (from
))
2735 gfc_error ("The FROM argument to MOVE_ALLOC at %L shall not be "
2736 "coindexed", &from
->where
);
2740 if (variable_check (to
, 1, false) == FAILURE
)
2742 if (allocatable_check (to
, 1) == FAILURE
)
2744 if (gfc_is_coindexed (to
))
2746 gfc_error ("The TO argument to MOVE_ALLOC at %L shall not be "
2747 "coindexed", &to
->where
);
2751 if (from
->ts
.type
== BT_CLASS
&& to
->ts
.type
== BT_DERIVED
)
2753 gfc_error ("The TO arguments in MOVE_ALLOC at %L must be "
2754 "polymorphic if FROM is polymorphic",
2759 if (same_type_check (to
, 1, from
, 0) == FAILURE
)
2762 if (to
->rank
!= from
->rank
)
2764 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
2765 "must have the same rank %d/%d", &to
->where
, from
->rank
,
2770 /* IR F08/0040; cf. 12-006A. */
2771 if (gfc_get_corank (to
) != gfc_get_corank (from
))
2773 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
2774 "must have the same corank %d/%d", &to
->where
,
2775 gfc_get_corank (from
), gfc_get_corank (to
));
2779 if (to
->ts
.kind
!= from
->ts
.kind
)
2781 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L"
2782 " must be of the same kind %d/%d", &to
->where
, from
->ts
.kind
,
2787 /* CLASS arguments: Make sure the vtab of from is present. */
2788 if (to
->ts
.type
== BT_CLASS
)
2789 gfc_find_derived_vtab (from
->ts
.u
.derived
);
2796 gfc_check_nearest (gfc_expr
*x
, gfc_expr
*s
)
2798 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2801 if (type_check (s
, 1, BT_REAL
) == FAILURE
)
2804 if (s
->expr_type
== EXPR_CONSTANT
)
2806 if (mpfr_sgn (s
->value
.real
) == 0)
2808 gfc_error ("Argument 'S' of NEAREST at %L shall not be zero",
2819 gfc_check_new_line (gfc_expr
*a
)
2821 if (type_check (a
, 0, BT_CHARACTER
) == FAILURE
)
2829 gfc_check_norm2 (gfc_expr
*array
, gfc_expr
*dim
)
2831 if (type_check (array
, 0, BT_REAL
) == FAILURE
)
2834 if (array_check (array
, 0) == FAILURE
)
2837 if (dim_rank_check (dim
, array
, false) == FAILURE
)
2844 gfc_check_null (gfc_expr
*mold
)
2846 symbol_attribute attr
;
2851 if (variable_check (mold
, 0, true) == FAILURE
)
2854 attr
= gfc_variable_attr (mold
, NULL
);
2856 if (!attr
.pointer
&& !attr
.proc_pointer
&& !attr
.allocatable
)
2858 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER, "
2859 "ALLOCATABLE or procedure pointer",
2860 gfc_current_intrinsic_arg
[0]->name
,
2861 gfc_current_intrinsic
, &mold
->where
);
2865 if (attr
.allocatable
2866 && gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: NULL intrinsic with "
2867 "allocatable MOLD at %L", &mold
->where
) == FAILURE
)
2871 if (gfc_is_coindexed (mold
))
2873 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
2874 "coindexed", gfc_current_intrinsic_arg
[0]->name
,
2875 gfc_current_intrinsic
, &mold
->where
);
2884 gfc_check_pack (gfc_expr
*array
, gfc_expr
*mask
, gfc_expr
*vector
)
2886 if (array_check (array
, 0) == FAILURE
)
2889 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
2892 if (gfc_check_conformance (array
, mask
,
2893 "arguments '%s' and '%s' for intrinsic '%s'",
2894 gfc_current_intrinsic_arg
[0]->name
,
2895 gfc_current_intrinsic_arg
[1]->name
,
2896 gfc_current_intrinsic
) == FAILURE
)
2901 mpz_t array_size
, vector_size
;
2902 bool have_array_size
, have_vector_size
;
2904 if (same_type_check (array
, 0, vector
, 2) == FAILURE
)
2907 if (rank_check (vector
, 2, 1) == FAILURE
)
2910 /* VECTOR requires at least as many elements as MASK
2911 has .TRUE. values. */
2912 have_array_size
= gfc_array_size (array
, &array_size
) == SUCCESS
;
2913 have_vector_size
= gfc_array_size (vector
, &vector_size
) == SUCCESS
;
2915 if (have_vector_size
2916 && (mask
->expr_type
== EXPR_ARRAY
2917 || (mask
->expr_type
== EXPR_CONSTANT
2918 && have_array_size
)))
2920 int mask_true_values
= 0;
2922 if (mask
->expr_type
== EXPR_ARRAY
)
2924 gfc_constructor
*mask_ctor
;
2925 mask_ctor
= gfc_constructor_first (mask
->value
.constructor
);
2928 if (mask_ctor
->expr
->expr_type
!= EXPR_CONSTANT
)
2930 mask_true_values
= 0;
2934 if (mask_ctor
->expr
->value
.logical
)
2937 mask_ctor
= gfc_constructor_next (mask_ctor
);
2940 else if (mask
->expr_type
== EXPR_CONSTANT
&& mask
->value
.logical
)
2941 mask_true_values
= mpz_get_si (array_size
);
2943 if (mpz_get_si (vector_size
) < mask_true_values
)
2945 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
2946 "provide at least as many elements as there "
2947 "are .TRUE. values in '%s' (%ld/%d)",
2948 gfc_current_intrinsic_arg
[2]->name
,
2949 gfc_current_intrinsic
, &vector
->where
,
2950 gfc_current_intrinsic_arg
[1]->name
,
2951 mpz_get_si (vector_size
), mask_true_values
);
2956 if (have_array_size
)
2957 mpz_clear (array_size
);
2958 if (have_vector_size
)
2959 mpz_clear (vector_size
);
2967 gfc_check_parity (gfc_expr
*mask
, gfc_expr
*dim
)
2969 if (type_check (mask
, 0, BT_LOGICAL
) == FAILURE
)
2972 if (array_check (mask
, 0) == FAILURE
)
2975 if (dim_rank_check (dim
, mask
, false) == FAILURE
)
2983 gfc_check_precision (gfc_expr
*x
)
2985 if (real_or_complex_check (x
, 0) == FAILURE
)
2993 gfc_check_present (gfc_expr
*a
)
2997 if (variable_check (a
, 0, true) == FAILURE
)
3000 sym
= a
->symtree
->n
.sym
;
3001 if (!sym
->attr
.dummy
)
3003 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
3004 "dummy variable", gfc_current_intrinsic_arg
[0]->name
,
3005 gfc_current_intrinsic
, &a
->where
);
3009 if (!sym
->attr
.optional
)
3011 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
3012 "an OPTIONAL dummy variable",
3013 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3018 /* 13.14.82 PRESENT(A)
3020 Argument. A shall be the name of an optional dummy argument that is
3021 accessible in the subprogram in which the PRESENT function reference
3025 && !(a
->ref
->next
== NULL
&& a
->ref
->type
== REF_ARRAY
3026 && (a
->ref
->u
.ar
.type
== AR_FULL
3027 || (a
->ref
->u
.ar
.type
== AR_ELEMENT
3028 && a
->ref
->u
.ar
.as
->rank
== 0))))
3030 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
3031 "subobject of '%s'", gfc_current_intrinsic_arg
[0]->name
,
3032 gfc_current_intrinsic
, &a
->where
, sym
->name
);
3041 gfc_check_radix (gfc_expr
*x
)
3043 if (int_or_real_check (x
, 0) == FAILURE
)
3051 gfc_check_range (gfc_expr
*x
)
3053 if (numeric_check (x
, 0) == FAILURE
)
3061 gfc_check_rank (gfc_expr
*a ATTRIBUTE_UNUSED
)
3063 /* Any data object is allowed; a "data object" is a "constant (4.1.3),
3064 variable (6), or subobject of a constant (2.4.3.2.3)" (F2008, 1.3.45). */
3066 bool is_variable
= true;
3068 /* Functions returning pointers are regarded as variable, cf. F2008, R602. */
3069 if (a
->expr_type
== EXPR_FUNCTION
)
3070 is_variable
= a
->value
.function
.esym
3071 ? a
->value
.function
.esym
->result
->attr
.pointer
3072 : a
->symtree
->n
.sym
->result
->attr
.pointer
;
3074 if (a
->expr_type
== EXPR_OP
|| a
->expr_type
== EXPR_NULL
3075 || a
->expr_type
== EXPR_COMPCALL
|| a
->expr_type
== EXPR_PPC
3078 gfc_error ("The argument of the RANK intrinsic at %L must be a data "
3079 "object", &a
->where
);
3087 /* real, float, sngl. */
3089 gfc_check_real (gfc_expr
*a
, gfc_expr
*kind
)
3091 if (numeric_check (a
, 0) == FAILURE
)
3094 if (kind_check (kind
, 1, BT_REAL
) == FAILURE
)
3102 gfc_check_rename (gfc_expr
*path1
, gfc_expr
*path2
)
3104 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
3106 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
3109 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
3111 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
3119 gfc_check_rename_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
3121 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
3123 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
3126 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
3128 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
3134 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
3137 if (scalar_check (status
, 2) == FAILURE
)
3145 gfc_check_repeat (gfc_expr
*x
, gfc_expr
*y
)
3147 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
3150 if (scalar_check (x
, 0) == FAILURE
)
3153 if (type_check (y
, 0, BT_INTEGER
) == FAILURE
)
3156 if (scalar_check (y
, 1) == FAILURE
)
3164 gfc_check_reshape (gfc_expr
*source
, gfc_expr
*shape
,
3165 gfc_expr
*pad
, gfc_expr
*order
)
3171 if (array_check (source
, 0) == FAILURE
)
3174 if (rank_check (shape
, 1, 1) == FAILURE
)
3177 if (type_check (shape
, 1, BT_INTEGER
) == FAILURE
)
3180 if (gfc_array_size (shape
, &size
) != SUCCESS
)
3182 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
3183 "array of constant size", &shape
->where
);
3187 shape_size
= mpz_get_ui (size
);
3190 if (shape_size
<= 0)
3192 gfc_error ("'%s' argument of '%s' intrinsic at %L is empty",
3193 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3197 else if (shape_size
> GFC_MAX_DIMENSIONS
)
3199 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
3200 "than %d elements", &shape
->where
, GFC_MAX_DIMENSIONS
);
3203 else if (shape
->expr_type
== EXPR_ARRAY
)
3207 for (i
= 0; i
< shape_size
; ++i
)
3209 e
= gfc_constructor_lookup_expr (shape
->value
.constructor
, i
);
3210 if (e
->expr_type
!= EXPR_CONSTANT
)
3213 gfc_extract_int (e
, &extent
);
3216 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3217 "negative element (%d)",
3218 gfc_current_intrinsic_arg
[1]->name
,
3219 gfc_current_intrinsic
, &e
->where
, extent
);
3227 if (same_type_check (source
, 0, pad
, 2) == FAILURE
)
3230 if (array_check (pad
, 2) == FAILURE
)
3236 if (array_check (order
, 3) == FAILURE
)
3239 if (type_check (order
, 3, BT_INTEGER
) == FAILURE
)
3242 if (order
->expr_type
== EXPR_ARRAY
)
3244 int i
, order_size
, dim
, perm
[GFC_MAX_DIMENSIONS
];
3247 for (i
= 0; i
< GFC_MAX_DIMENSIONS
; ++i
)
3250 gfc_array_size (order
, &size
);
3251 order_size
= mpz_get_ui (size
);
3254 if (order_size
!= shape_size
)
3256 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3257 "has wrong number of elements (%d/%d)",
3258 gfc_current_intrinsic_arg
[3]->name
,
3259 gfc_current_intrinsic
, &order
->where
,
3260 order_size
, shape_size
);
3264 for (i
= 1; i
<= order_size
; ++i
)
3266 e
= gfc_constructor_lookup_expr (order
->value
.constructor
, i
-1);
3267 if (e
->expr_type
!= EXPR_CONSTANT
)
3270 gfc_extract_int (e
, &dim
);
3272 if (dim
< 1 || dim
> order_size
)
3274 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3275 "has out-of-range dimension (%d)",
3276 gfc_current_intrinsic_arg
[3]->name
,
3277 gfc_current_intrinsic
, &e
->where
, dim
);
3281 if (perm
[dim
-1] != 0)
3283 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3284 "invalid permutation of dimensions (dimension "
3286 gfc_current_intrinsic_arg
[3]->name
,
3287 gfc_current_intrinsic
, &e
->where
, dim
);
3296 if (pad
== NULL
&& shape
->expr_type
== EXPR_ARRAY
3297 && gfc_is_constant_expr (shape
)
3298 && !(source
->expr_type
== EXPR_VARIABLE
&& source
->symtree
->n
.sym
->as
3299 && source
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
))
3301 /* Check the match in size between source and destination. */
3302 if (gfc_array_size (source
, &nelems
) == SUCCESS
)
3308 mpz_init_set_ui (size
, 1);
3309 for (c
= gfc_constructor_first (shape
->value
.constructor
);
3310 c
; c
= gfc_constructor_next (c
))
3311 mpz_mul (size
, size
, c
->expr
->value
.integer
);
3313 test
= mpz_cmp (nelems
, size
) < 0 && mpz_cmp_ui (size
, 0) > 0;
3319 gfc_error ("Without padding, there are not enough elements "
3320 "in the intrinsic RESHAPE source at %L to match "
3321 "the shape", &source
->where
);
3332 gfc_check_same_type_as (gfc_expr
*a
, gfc_expr
*b
)
3335 if (a
->ts
.type
!= BT_DERIVED
&& a
->ts
.type
!= BT_CLASS
)
3337 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3338 "must be of a derived type",
3339 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3344 if (!gfc_type_is_extensible (a
->ts
.u
.derived
))
3346 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3347 "must be of an extensible type",
3348 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3353 if (b
->ts
.type
!= BT_DERIVED
&& b
->ts
.type
!= BT_CLASS
)
3355 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3356 "must be of a derived type",
3357 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3362 if (!gfc_type_is_extensible (b
->ts
.u
.derived
))
3364 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3365 "must be of an extensible type",
3366 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3376 gfc_check_scale (gfc_expr
*x
, gfc_expr
*i
)
3378 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
3381 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
3389 gfc_check_scan (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
3391 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
3394 if (type_check (y
, 1, BT_CHARACTER
) == FAILURE
)
3397 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
3400 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
3402 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
3403 "with KIND argument at %L",
3404 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
3407 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
3415 gfc_check_secnds (gfc_expr
*r
)
3417 if (type_check (r
, 0, BT_REAL
) == FAILURE
)
3420 if (kind_value_check (r
, 0, 4) == FAILURE
)
3423 if (scalar_check (r
, 0) == FAILURE
)
3431 gfc_check_selected_char_kind (gfc_expr
*name
)
3433 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3436 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3439 if (scalar_check (name
, 0) == FAILURE
)
3447 gfc_check_selected_int_kind (gfc_expr
*r
)
3449 if (type_check (r
, 0, BT_INTEGER
) == FAILURE
)
3452 if (scalar_check (r
, 0) == FAILURE
)
3460 gfc_check_selected_real_kind (gfc_expr
*p
, gfc_expr
*r
, gfc_expr
*radix
)
3462 if (p
== NULL
&& r
== NULL
3463 && gfc_notify_std (GFC_STD_F2008
, "Fortran 2008: SELECTED_REAL_KIND with"
3464 " neither 'P' nor 'R' argument at %L",
3465 gfc_current_intrinsic_where
) == FAILURE
)
3470 if (type_check (p
, 0, BT_INTEGER
) == FAILURE
)
3473 if (scalar_check (p
, 0) == FAILURE
)
3479 if (type_check (r
, 1, BT_INTEGER
) == FAILURE
)
3482 if (scalar_check (r
, 1) == FAILURE
)
3488 if (type_check (radix
, 1, BT_INTEGER
) == FAILURE
)
3491 if (scalar_check (radix
, 1) == FAILURE
)
3494 if (gfc_notify_std (GFC_STD_F2008
, "Fortran 2008: '%s' intrinsic with "
3495 "RADIX argument at %L", gfc_current_intrinsic
,
3496 &radix
->where
) == FAILURE
)
3505 gfc_check_set_exponent (gfc_expr
*x
, gfc_expr
*i
)
3507 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
3510 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
3518 gfc_check_shape (gfc_expr
*source
, gfc_expr
*kind
)
3522 if (source
->rank
== 0 || source
->expr_type
!= EXPR_VARIABLE
)
3525 ar
= gfc_find_array_ref (source
);
3527 if (ar
->as
&& ar
->as
->type
== AS_ASSUMED_SIZE
&& ar
->type
== AR_FULL
)
3529 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
3530 "an assumed size array", &source
->where
);
3534 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
3536 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
3537 "with KIND argument at %L",
3538 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
3546 gfc_check_shift (gfc_expr
*i
, gfc_expr
*shift
)
3548 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
3551 if (type_check (shift
, 0, BT_INTEGER
) == FAILURE
)
3554 if (nonnegative_check ("SHIFT", shift
) == FAILURE
)
3557 if (less_than_bitsize1 ("I", i
, "SHIFT", shift
, true) == FAILURE
)
3565 gfc_check_sign (gfc_expr
*a
, gfc_expr
*b
)
3567 if (int_or_real_check (a
, 0) == FAILURE
)
3570 if (same_type_check (a
, 0, b
, 1) == FAILURE
)
3578 gfc_check_size (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
3580 if (array_check (array
, 0) == FAILURE
)
3583 if (dim_check (dim
, 1, true) == FAILURE
)
3586 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
3589 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
3591 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
3592 "with KIND argument at %L",
3593 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
3602 gfc_check_sizeof (gfc_expr
*arg
)
3604 if (arg
->ts
.type
== BT_PROCEDURE
)
3606 gfc_error ("'%s' argument of '%s' intrinsic at %L may not be a procedure",
3607 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3616 gfc_check_c_sizeof (gfc_expr
*arg
)
3618 if (gfc_verify_c_interop (&arg
->ts
) != SUCCESS
)
3620 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an "
3621 "interoperable data entity",
3622 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3631 gfc_check_sleep_sub (gfc_expr
*seconds
)
3633 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
3636 if (scalar_check (seconds
, 0) == FAILURE
)
3643 gfc_check_sngl (gfc_expr
*a
)
3645 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
3648 if ((a
->ts
.kind
!= gfc_default_double_kind
)
3649 && gfc_notify_std (GFC_STD_GNU
, "GNU extension: non double precision "
3650 "REAL argument to %s intrinsic at %L",
3651 gfc_current_intrinsic
, &a
->where
) == FAILURE
)
3658 gfc_check_spread (gfc_expr
*source
, gfc_expr
*dim
, gfc_expr
*ncopies
)
3660 if (source
->rank
>= GFC_MAX_DIMENSIONS
)
3662 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
3663 "than rank %d", gfc_current_intrinsic_arg
[0]->name
,
3664 gfc_current_intrinsic
, &source
->where
, GFC_MAX_DIMENSIONS
);
3672 if (dim_check (dim
, 1, false) == FAILURE
)
3675 /* dim_rank_check() does not apply here. */
3677 && dim
->expr_type
== EXPR_CONSTANT
3678 && (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
3679 || mpz_cmp_ui (dim
->value
.integer
, source
->rank
+ 1) > 0))
3681 gfc_error ("'%s' argument of '%s' intrinsic at %L is not a valid "
3682 "dimension index", gfc_current_intrinsic_arg
[1]->name
,
3683 gfc_current_intrinsic
, &dim
->where
);
3687 if (type_check (ncopies
, 2, BT_INTEGER
) == FAILURE
)
3690 if (scalar_check (ncopies
, 2) == FAILURE
)
3697 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
3701 gfc_check_fgetputc_sub (gfc_expr
*unit
, gfc_expr
*c
, gfc_expr
*status
)
3703 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3706 if (scalar_check (unit
, 0) == FAILURE
)
3709 if (type_check (c
, 1, BT_CHARACTER
) == FAILURE
)
3711 if (kind_value_check (c
, 1, gfc_default_character_kind
) == FAILURE
)
3717 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
3718 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
3719 || scalar_check (status
, 2) == FAILURE
)
3727 gfc_check_fgetputc (gfc_expr
*unit
, gfc_expr
*c
)
3729 return gfc_check_fgetputc_sub (unit
, c
, NULL
);
3734 gfc_check_fgetput_sub (gfc_expr
*c
, gfc_expr
*status
)
3736 if (type_check (c
, 0, BT_CHARACTER
) == FAILURE
)
3738 if (kind_value_check (c
, 0, gfc_default_character_kind
) == FAILURE
)
3744 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
3745 || kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
3746 || scalar_check (status
, 1) == FAILURE
)
3754 gfc_check_fgetput (gfc_expr
*c
)
3756 return gfc_check_fgetput_sub (c
, NULL
);
3761 gfc_check_fseek_sub (gfc_expr
*unit
, gfc_expr
*offset
, gfc_expr
*whence
, gfc_expr
*status
)
3763 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3766 if (scalar_check (unit
, 0) == FAILURE
)
3769 if (type_check (offset
, 1, BT_INTEGER
) == FAILURE
)
3772 if (scalar_check (offset
, 1) == FAILURE
)
3775 if (type_check (whence
, 2, BT_INTEGER
) == FAILURE
)
3778 if (scalar_check (whence
, 2) == FAILURE
)
3784 if (type_check (status
, 3, BT_INTEGER
) == FAILURE
)
3787 if (kind_value_check (status
, 3, 4) == FAILURE
)
3790 if (scalar_check (status
, 3) == FAILURE
)
3799 gfc_check_fstat (gfc_expr
*unit
, gfc_expr
*array
)
3801 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3804 if (scalar_check (unit
, 0) == FAILURE
)
3807 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3808 || kind_value_check (unit
, 0, gfc_default_integer_kind
) == FAILURE
)
3811 if (array_check (array
, 1) == FAILURE
)
3819 gfc_check_fstat_sub (gfc_expr
*unit
, gfc_expr
*array
, gfc_expr
*status
)
3821 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3824 if (scalar_check (unit
, 0) == FAILURE
)
3827 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3828 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3831 if (array_check (array
, 1) == FAILURE
)
3837 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
3838 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
3841 if (scalar_check (status
, 2) == FAILURE
)
3849 gfc_check_ftell (gfc_expr
*unit
)
3851 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3854 if (scalar_check (unit
, 0) == FAILURE
)
3862 gfc_check_ftell_sub (gfc_expr
*unit
, gfc_expr
*offset
)
3864 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3867 if (scalar_check (unit
, 0) == FAILURE
)
3870 if (type_check (offset
, 1, BT_INTEGER
) == FAILURE
)
3873 if (scalar_check (offset
, 1) == FAILURE
)
3881 gfc_check_stat (gfc_expr
*name
, gfc_expr
*array
)
3883 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3885 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3888 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3889 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3892 if (array_check (array
, 1) == FAILURE
)
3900 gfc_check_stat_sub (gfc_expr
*name
, gfc_expr
*array
, gfc_expr
*status
)
3902 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3904 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3907 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3908 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3911 if (array_check (array
, 1) == FAILURE
)
3917 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
3918 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3921 if (scalar_check (status
, 2) == FAILURE
)
3929 gfc_check_image_index (gfc_expr
*coarray
, gfc_expr
*sub
)
3933 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
3935 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
3939 if (coarray_check (coarray
, 0) == FAILURE
)
3944 gfc_error ("%s argument to IMAGE_INDEX must be a rank one array at %L",
3945 gfc_current_intrinsic_arg
[1]->name
, &sub
->where
);
3949 if (gfc_array_size (sub
, &nelems
) == SUCCESS
)
3951 int corank
= gfc_get_corank (coarray
);
3953 if (mpz_cmp_ui (nelems
, corank
) != 0)
3955 gfc_error ("The number of array elements of the SUB argument to "
3956 "IMAGE_INDEX at %L shall be %d (corank) not %d",
3957 &sub
->where
, corank
, (int) mpz_get_si (nelems
));
3969 gfc_check_this_image (gfc_expr
*coarray
, gfc_expr
*dim
)
3971 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
3973 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
3977 if (dim
!= NULL
&& coarray
== NULL
)
3979 gfc_error ("DIM argument without ARRAY argument not allowed for THIS_IMAGE "
3980 "intrinsic at %L", &dim
->where
);
3984 if (coarray
== NULL
)
3987 if (coarray_check (coarray
, 0) == FAILURE
)
3992 if (dim_check (dim
, 1, false) == FAILURE
)
3995 if (dim_corank_check (dim
, coarray
) == FAILURE
)
4002 /* Calculate the sizes for transfer, used by gfc_check_transfer and also
4003 by gfc_simplify_transfer. Return FAILURE if we cannot do so. */
4006 gfc_calculate_transfer_sizes (gfc_expr
*source
, gfc_expr
*mold
, gfc_expr
*size
,
4007 size_t *source_size
, size_t *result_size
,
4008 size_t *result_length_p
)
4010 size_t result_elt_size
;
4012 gfc_expr
*mold_element
;
4014 if (source
->expr_type
== EXPR_FUNCTION
)
4017 if (size
&& size
->expr_type
!= EXPR_CONSTANT
)
4020 /* Calculate the size of the source. */
4021 if (source
->expr_type
== EXPR_ARRAY
4022 && gfc_array_size (source
, &tmp
) == FAILURE
)
4025 *source_size
= gfc_target_expr_size (source
);
4026 if (*source_size
== 0)
4029 mold_element
= mold
->expr_type
== EXPR_ARRAY
4030 ? gfc_constructor_first (mold
->value
.constructor
)->expr
4033 /* Determine the size of the element. */
4034 result_elt_size
= gfc_target_expr_size (mold_element
);
4035 if (result_elt_size
== 0)
4038 if (mold
->expr_type
== EXPR_ARRAY
|| mold
->rank
|| size
)
4043 result_length
= (size_t)mpz_get_ui (size
->value
.integer
);
4046 result_length
= *source_size
/ result_elt_size
;
4047 if (result_length
* result_elt_size
< *source_size
)
4051 *result_size
= result_length
* result_elt_size
;
4052 if (result_length_p
)
4053 *result_length_p
= result_length
;
4056 *result_size
= result_elt_size
;
4063 gfc_check_transfer (gfc_expr
*source
, gfc_expr
*mold
, gfc_expr
*size
)
4068 if (mold
->ts
.type
== BT_HOLLERITH
)
4070 gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
4071 &mold
->where
, gfc_basic_typename (BT_HOLLERITH
));
4077 if (type_check (size
, 2, BT_INTEGER
) == FAILURE
)
4080 if (scalar_check (size
, 2) == FAILURE
)
4083 if (nonoptional_check (size
, 2) == FAILURE
)
4087 if (!gfc_option
.warn_surprising
)
4090 /* If we can't calculate the sizes, we cannot check any more.
4091 Return SUCCESS for that case. */
4093 if (gfc_calculate_transfer_sizes (source
, mold
, size
, &source_size
,
4094 &result_size
, NULL
) == FAILURE
)
4097 if (source_size
< result_size
)
4098 gfc_warning("Intrinsic TRANSFER at %L has partly undefined result: "
4099 "source size %ld < result size %ld", &source
->where
,
4100 (long) source_size
, (long) result_size
);
4107 gfc_check_transpose (gfc_expr
*matrix
)
4109 if (rank_check (matrix
, 0, 2) == FAILURE
)
4117 gfc_check_ubound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
4119 if (array_check (array
, 0) == FAILURE
)
4122 if (dim_check (dim
, 1, false) == FAILURE
)
4125 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
4128 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
4130 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
4131 "with KIND argument at %L",
4132 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
4140 gfc_check_ucobound (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*kind
)
4142 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
4144 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4148 if (coarray_check (coarray
, 0) == FAILURE
)
4153 if (dim_check (dim
, 1, false) == FAILURE
)
4156 if (dim_corank_check (dim
, coarray
) == FAILURE
)
4160 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
4168 gfc_check_unpack (gfc_expr
*vector
, gfc_expr
*mask
, gfc_expr
*field
)
4172 if (rank_check (vector
, 0, 1) == FAILURE
)
4175 if (array_check (mask
, 1) == FAILURE
)
4178 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
4181 if (same_type_check (vector
, 0, field
, 2) == FAILURE
)
4184 if (mask
->expr_type
== EXPR_ARRAY
4185 && gfc_array_size (vector
, &vector_size
) == SUCCESS
)
4187 int mask_true_count
= 0;
4188 gfc_constructor
*mask_ctor
;
4189 mask_ctor
= gfc_constructor_first (mask
->value
.constructor
);
4192 if (mask_ctor
->expr
->expr_type
!= EXPR_CONSTANT
)
4194 mask_true_count
= 0;
4198 if (mask_ctor
->expr
->value
.logical
)
4201 mask_ctor
= gfc_constructor_next (mask_ctor
);
4204 if (mpz_get_si (vector_size
) < mask_true_count
)
4206 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
4207 "provide at least as many elements as there "
4208 "are .TRUE. values in '%s' (%ld/%d)",
4209 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4210 &vector
->where
, gfc_current_intrinsic_arg
[1]->name
,
4211 mpz_get_si (vector_size
), mask_true_count
);
4215 mpz_clear (vector_size
);
4218 if (mask
->rank
!= field
->rank
&& field
->rank
!= 0)
4220 gfc_error ("'%s' argument of '%s' intrinsic at %L must have "
4221 "the same rank as '%s' or be a scalar",
4222 gfc_current_intrinsic_arg
[2]->name
, gfc_current_intrinsic
,
4223 &field
->where
, gfc_current_intrinsic_arg
[1]->name
);
4227 if (mask
->rank
== field
->rank
)
4230 for (i
= 0; i
< field
->rank
; i
++)
4231 if (! identical_dimen_shape (mask
, i
, field
, i
))
4233 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L "
4234 "must have identical shape.",
4235 gfc_current_intrinsic_arg
[2]->name
,
4236 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
4246 gfc_check_verify (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
4248 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
4251 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
4254 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
4257 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
4259 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
4260 "with KIND argument at %L",
4261 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
4269 gfc_check_trim (gfc_expr
*x
)
4271 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
4274 if (scalar_check (x
, 0) == FAILURE
)
4282 gfc_check_ttynam (gfc_expr
*unit
)
4284 if (scalar_check (unit
, 0) == FAILURE
)
4287 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
4294 /* Common check function for the half a dozen intrinsics that have a
4295 single real argument. */
4298 gfc_check_x (gfc_expr
*x
)
4300 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
4307 /************* Check functions for intrinsic subroutines *************/
4310 gfc_check_cpu_time (gfc_expr
*time
)
4312 if (scalar_check (time
, 0) == FAILURE
)
4315 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
4318 if (variable_check (time
, 0, false) == FAILURE
)
4326 gfc_check_date_and_time (gfc_expr
*date
, gfc_expr
*time
,
4327 gfc_expr
*zone
, gfc_expr
*values
)
4331 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
4333 if (kind_value_check (date
, 0, gfc_default_character_kind
) == FAILURE
)
4335 if (scalar_check (date
, 0) == FAILURE
)
4337 if (variable_check (date
, 0, false) == FAILURE
)
4343 if (type_check (time
, 1, BT_CHARACTER
) == FAILURE
)
4345 if (kind_value_check (time
, 1, gfc_default_character_kind
) == FAILURE
)
4347 if (scalar_check (time
, 1) == FAILURE
)
4349 if (variable_check (time
, 1, false) == FAILURE
)
4355 if (type_check (zone
, 2, BT_CHARACTER
) == FAILURE
)
4357 if (kind_value_check (zone
, 2, gfc_default_character_kind
) == FAILURE
)
4359 if (scalar_check (zone
, 2) == FAILURE
)
4361 if (variable_check (zone
, 2, false) == FAILURE
)
4367 if (type_check (values
, 3, BT_INTEGER
) == FAILURE
)
4369 if (array_check (values
, 3) == FAILURE
)
4371 if (rank_check (values
, 3, 1) == FAILURE
)
4373 if (variable_check (values
, 3, false) == FAILURE
)
4382 gfc_check_mvbits (gfc_expr
*from
, gfc_expr
*frompos
, gfc_expr
*len
,
4383 gfc_expr
*to
, gfc_expr
*topos
)
4385 if (type_check (from
, 0, BT_INTEGER
) == FAILURE
)
4388 if (type_check (frompos
, 1, BT_INTEGER
) == FAILURE
)
4391 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
4394 if (same_type_check (from
, 0, to
, 3) == FAILURE
)
4397 if (variable_check (to
, 3, false) == FAILURE
)
4400 if (type_check (topos
, 4, BT_INTEGER
) == FAILURE
)
4403 if (nonnegative_check ("frompos", frompos
) == FAILURE
)
4406 if (nonnegative_check ("topos", topos
) == FAILURE
)
4409 if (nonnegative_check ("len", len
) == FAILURE
)
4412 if (less_than_bitsize2 ("from", from
, "frompos", frompos
, "len", len
)
4416 if (less_than_bitsize2 ("to", to
, "topos", topos
, "len", len
) == FAILURE
)
4424 gfc_check_random_number (gfc_expr
*harvest
)
4426 if (type_check (harvest
, 0, BT_REAL
) == FAILURE
)
4429 if (variable_check (harvest
, 0, false) == FAILURE
)
4437 gfc_check_random_seed (gfc_expr
*size
, gfc_expr
*put
, gfc_expr
*get
)
4439 unsigned int nargs
= 0, kiss_size
;
4440 locus
*where
= NULL
;
4441 mpz_t put_size
, get_size
;
4442 bool have_gfc_real_16
; /* Try and mimic HAVE_GFC_REAL_16 in libgfortran. */
4444 have_gfc_real_16
= gfc_validate_kind (BT_REAL
, 16, true) != -1;
4446 /* Keep the number of bytes in sync with kiss_size in
4447 libgfortran/intrinsics/random.c. */
4448 kiss_size
= (have_gfc_real_16
? 48 : 32) / gfc_default_integer_kind
;
4452 if (size
->expr_type
!= EXPR_VARIABLE
4453 || !size
->symtree
->n
.sym
->attr
.optional
)
4456 if (scalar_check (size
, 0) == FAILURE
)
4459 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
4462 if (variable_check (size
, 0, false) == FAILURE
)
4465 if (kind_value_check (size
, 0, gfc_default_integer_kind
) == FAILURE
)
4471 if (put
->expr_type
!= EXPR_VARIABLE
4472 || !put
->symtree
->n
.sym
->attr
.optional
)
4475 where
= &put
->where
;
4478 if (array_check (put
, 1) == FAILURE
)
4481 if (rank_check (put
, 1, 1) == FAILURE
)
4484 if (type_check (put
, 1, BT_INTEGER
) == FAILURE
)
4487 if (kind_value_check (put
, 1, gfc_default_integer_kind
) == FAILURE
)
4490 if (gfc_array_size (put
, &put_size
) == SUCCESS
4491 && mpz_get_ui (put_size
) < kiss_size
)
4492 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
4493 "too small (%i/%i)",
4494 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
4495 where
, (int) mpz_get_ui (put_size
), kiss_size
);
4500 if (get
->expr_type
!= EXPR_VARIABLE
4501 || !get
->symtree
->n
.sym
->attr
.optional
)
4504 where
= &get
->where
;
4507 if (array_check (get
, 2) == FAILURE
)
4510 if (rank_check (get
, 2, 1) == FAILURE
)
4513 if (type_check (get
, 2, BT_INTEGER
) == FAILURE
)
4516 if (variable_check (get
, 2, false) == FAILURE
)
4519 if (kind_value_check (get
, 2, gfc_default_integer_kind
) == FAILURE
)
4522 if (gfc_array_size (get
, &get_size
) == SUCCESS
4523 && mpz_get_ui (get_size
) < kiss_size
)
4524 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
4525 "too small (%i/%i)",
4526 gfc_current_intrinsic_arg
[2]->name
, gfc_current_intrinsic
,
4527 where
, (int) mpz_get_ui (get_size
), kiss_size
);
4530 /* RANDOM_SEED may not have more than one non-optional argument. */
4532 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
, where
);
4539 gfc_check_second_sub (gfc_expr
*time
)
4541 if (scalar_check (time
, 0) == FAILURE
)
4544 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
4547 if (kind_value_check(time
, 0, 4) == FAILURE
)
4554 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
4555 count, count_rate, and count_max are all optional arguments */
4558 gfc_check_system_clock (gfc_expr
*count
, gfc_expr
*count_rate
,
4559 gfc_expr
*count_max
)
4563 if (scalar_check (count
, 0) == FAILURE
)
4566 if (type_check (count
, 0, BT_INTEGER
) == FAILURE
)
4569 if (variable_check (count
, 0, false) == FAILURE
)
4573 if (count_rate
!= NULL
)
4575 if (scalar_check (count_rate
, 1) == FAILURE
)
4578 if (type_check (count_rate
, 1, BT_INTEGER
) == FAILURE
)
4581 if (variable_check (count_rate
, 1, false) == FAILURE
)
4585 && same_type_check (count
, 0, count_rate
, 1) == FAILURE
)
4590 if (count_max
!= NULL
)
4592 if (scalar_check (count_max
, 2) == FAILURE
)
4595 if (type_check (count_max
, 2, BT_INTEGER
) == FAILURE
)
4598 if (variable_check (count_max
, 2, false) == FAILURE
)
4602 && same_type_check (count
, 0, count_max
, 2) == FAILURE
)
4605 if (count_rate
!= NULL
4606 && same_type_check (count_rate
, 1, count_max
, 2) == FAILURE
)
4615 gfc_check_irand (gfc_expr
*x
)
4620 if (scalar_check (x
, 0) == FAILURE
)
4623 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
4626 if (kind_value_check(x
, 0, 4) == FAILURE
)
4634 gfc_check_alarm_sub (gfc_expr
*seconds
, gfc_expr
*handler
, gfc_expr
*status
)
4636 if (scalar_check (seconds
, 0) == FAILURE
)
4638 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
4641 if (int_or_proc_check (handler
, 1) == FAILURE
)
4643 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
4649 if (scalar_check (status
, 2) == FAILURE
)
4651 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
4653 if (kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
4661 gfc_check_rand (gfc_expr
*x
)
4666 if (scalar_check (x
, 0) == FAILURE
)
4669 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
4672 if (kind_value_check(x
, 0, 4) == FAILURE
)
4680 gfc_check_srand (gfc_expr
*x
)
4682 if (scalar_check (x
, 0) == FAILURE
)
4685 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
4688 if (kind_value_check(x
, 0, 4) == FAILURE
)
4696 gfc_check_ctime_sub (gfc_expr
*time
, gfc_expr
*result
)
4698 if (scalar_check (time
, 0) == FAILURE
)
4700 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
4703 if (type_check (result
, 1, BT_CHARACTER
) == FAILURE
)
4705 if (kind_value_check (result
, 1, gfc_default_character_kind
) == FAILURE
)
4713 gfc_check_dtime_etime (gfc_expr
*x
)
4715 if (array_check (x
, 0) == FAILURE
)
4718 if (rank_check (x
, 0, 1) == FAILURE
)
4721 if (variable_check (x
, 0, false) == FAILURE
)
4724 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
4727 if (kind_value_check(x
, 0, 4) == FAILURE
)
4735 gfc_check_dtime_etime_sub (gfc_expr
*values
, gfc_expr
*time
)
4737 if (array_check (values
, 0) == FAILURE
)
4740 if (rank_check (values
, 0, 1) == FAILURE
)
4743 if (variable_check (values
, 0, false) == FAILURE
)
4746 if (type_check (values
, 0, BT_REAL
) == FAILURE
)
4749 if (kind_value_check(values
, 0, 4) == FAILURE
)
4752 if (scalar_check (time
, 1) == FAILURE
)
4755 if (type_check (time
, 1, BT_REAL
) == FAILURE
)
4758 if (kind_value_check(time
, 1, 4) == FAILURE
)
4766 gfc_check_fdate_sub (gfc_expr
*date
)
4768 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
4770 if (kind_value_check (date
, 0, gfc_default_character_kind
) == FAILURE
)
4778 gfc_check_gerror (gfc_expr
*msg
)
4780 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
4782 if (kind_value_check (msg
, 0, gfc_default_character_kind
) == FAILURE
)
4790 gfc_check_getcwd_sub (gfc_expr
*cwd
, gfc_expr
*status
)
4792 if (type_check (cwd
, 0, BT_CHARACTER
) == FAILURE
)
4794 if (kind_value_check (cwd
, 0, gfc_default_character_kind
) == FAILURE
)
4800 if (scalar_check (status
, 1) == FAILURE
)
4803 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
4811 gfc_check_getarg (gfc_expr
*pos
, gfc_expr
*value
)
4813 if (type_check (pos
, 0, BT_INTEGER
) == FAILURE
)
4816 if (pos
->ts
.kind
> gfc_default_integer_kind
)
4818 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
4819 "not wider than the default kind (%d)",
4820 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4821 &pos
->where
, gfc_default_integer_kind
);
4825 if (type_check (value
, 1, BT_CHARACTER
) == FAILURE
)
4827 if (kind_value_check (value
, 1, gfc_default_character_kind
) == FAILURE
)
4835 gfc_check_getlog (gfc_expr
*msg
)
4837 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
4839 if (kind_value_check (msg
, 0, gfc_default_character_kind
) == FAILURE
)
4847 gfc_check_exit (gfc_expr
*status
)
4852 if (type_check (status
, 0, BT_INTEGER
) == FAILURE
)
4855 if (scalar_check (status
, 0) == FAILURE
)
4863 gfc_check_flush (gfc_expr
*unit
)
4868 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
4871 if (scalar_check (unit
, 0) == FAILURE
)
4879 gfc_check_free (gfc_expr
*i
)
4881 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
4884 if (scalar_check (i
, 0) == FAILURE
)
4892 gfc_check_hostnm (gfc_expr
*name
)
4894 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
4896 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
4904 gfc_check_hostnm_sub (gfc_expr
*name
, gfc_expr
*status
)
4906 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
4908 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
4914 if (scalar_check (status
, 1) == FAILURE
)
4917 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
4925 gfc_check_itime_idate (gfc_expr
*values
)
4927 if (array_check (values
, 0) == FAILURE
)
4930 if (rank_check (values
, 0, 1) == FAILURE
)
4933 if (variable_check (values
, 0, false) == FAILURE
)
4936 if (type_check (values
, 0, BT_INTEGER
) == FAILURE
)
4939 if (kind_value_check(values
, 0, gfc_default_integer_kind
) == FAILURE
)
4947 gfc_check_ltime_gmtime (gfc_expr
*time
, gfc_expr
*values
)
4949 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
4952 if (kind_value_check(time
, 0, gfc_default_integer_kind
) == FAILURE
)
4955 if (scalar_check (time
, 0) == FAILURE
)
4958 if (array_check (values
, 1) == FAILURE
)
4961 if (rank_check (values
, 1, 1) == FAILURE
)
4964 if (variable_check (values
, 1, false) == FAILURE
)
4967 if (type_check (values
, 1, BT_INTEGER
) == FAILURE
)
4970 if (kind_value_check(values
, 1, gfc_default_integer_kind
) == FAILURE
)
4978 gfc_check_ttynam_sub (gfc_expr
*unit
, gfc_expr
*name
)
4980 if (scalar_check (unit
, 0) == FAILURE
)
4983 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
4986 if (type_check (name
, 1, BT_CHARACTER
) == FAILURE
)
4988 if (kind_value_check (name
, 1, gfc_default_character_kind
) == FAILURE
)
4996 gfc_check_isatty (gfc_expr
*unit
)
5001 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
5004 if (scalar_check (unit
, 0) == FAILURE
)
5012 gfc_check_isnan (gfc_expr
*x
)
5014 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
5022 gfc_check_perror (gfc_expr
*string
)
5024 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
)
5026 if (kind_value_check (string
, 0, gfc_default_character_kind
) == FAILURE
)
5034 gfc_check_umask (gfc_expr
*mask
)
5036 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
5039 if (scalar_check (mask
, 0) == FAILURE
)
5047 gfc_check_umask_sub (gfc_expr
*mask
, gfc_expr
*old
)
5049 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
5052 if (scalar_check (mask
, 0) == FAILURE
)
5058 if (scalar_check (old
, 1) == FAILURE
)
5061 if (type_check (old
, 1, BT_INTEGER
) == FAILURE
)
5069 gfc_check_unlink (gfc_expr
*name
)
5071 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
5073 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
5081 gfc_check_unlink_sub (gfc_expr
*name
, gfc_expr
*status
)
5083 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
5085 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
5091 if (scalar_check (status
, 1) == FAILURE
)
5094 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
5102 gfc_check_signal (gfc_expr
*number
, gfc_expr
*handler
)
5104 if (scalar_check (number
, 0) == FAILURE
)
5106 if (type_check (number
, 0, BT_INTEGER
) == FAILURE
)
5109 if (int_or_proc_check (handler
, 1) == FAILURE
)
5111 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
5119 gfc_check_signal_sub (gfc_expr
*number
, gfc_expr
*handler
, gfc_expr
*status
)
5121 if (scalar_check (number
, 0) == FAILURE
)
5123 if (type_check (number
, 0, BT_INTEGER
) == FAILURE
)
5126 if (int_or_proc_check (handler
, 1) == FAILURE
)
5128 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
5134 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
5136 if (scalar_check (status
, 2) == FAILURE
)
5144 gfc_check_system_sub (gfc_expr
*cmd
, gfc_expr
*status
)
5146 if (type_check (cmd
, 0, BT_CHARACTER
) == FAILURE
)
5148 if (kind_value_check (cmd
, 0, gfc_default_character_kind
) == FAILURE
)
5151 if (scalar_check (status
, 1) == FAILURE
)
5154 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
5157 if (kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
)
5164 /* This is used for the GNU intrinsics AND, OR and XOR. */
5166 gfc_check_and (gfc_expr
*i
, gfc_expr
*j
)
5168 if (i
->ts
.type
!= BT_INTEGER
&& i
->ts
.type
!= BT_LOGICAL
)
5170 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
5171 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
5172 gfc_current_intrinsic
, &i
->where
);
5176 if (j
->ts
.type
!= BT_INTEGER
&& j
->ts
.type
!= BT_LOGICAL
)
5178 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
5179 "or LOGICAL", gfc_current_intrinsic_arg
[1]->name
,
5180 gfc_current_intrinsic
, &j
->where
);
5184 if (i
->ts
.type
!= j
->ts
.type
)
5186 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
5187 "have the same type", gfc_current_intrinsic_arg
[0]->name
,
5188 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
5193 if (scalar_check (i
, 0) == FAILURE
)
5196 if (scalar_check (j
, 1) == FAILURE
)
5204 gfc_check_storage_size (gfc_expr
*a ATTRIBUTE_UNUSED
, gfc_expr
*kind
)
5209 if (type_check (kind
, 1, BT_INTEGER
) == FAILURE
)
5212 if (scalar_check (kind
, 1) == FAILURE
)
5215 if (kind
->expr_type
!= EXPR_CONSTANT
)
5217 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
5218 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,