2 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
3 Free Software Foundation, Inc.
4 Contributed by Andy Vaught & Katherine Holcomb
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
23 /* These functions check to see if an argument list is compatible with
24 a particular intrinsic function or subroutine. Presence of
25 required arguments has already been established, the argument list
26 has been sorted into the right order and has NULL arguments in the
27 correct places for missing optional arguments. */
33 #include "intrinsic.h"
34 #include "constructor.h"
35 #include "target-memory.h"
38 /* Make sure an expression is a scalar. */
41 scalar_check (gfc_expr
*e
, int n
)
46 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a scalar",
47 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
54 /* Check the type of an expression. */
57 type_check (gfc_expr
*e
, int n
, bt type
)
59 if (e
->ts
.type
== type
)
62 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
63 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
64 &e
->where
, gfc_basic_typename (type
));
70 /* Check that the expression is a numeric type. */
73 numeric_check (gfc_expr
*e
, int n
)
75 if (gfc_numeric_ts (&e
->ts
))
78 /* If the expression has not got a type, check if its namespace can
79 offer a default type. */
80 if ((e
->expr_type
== EXPR_VARIABLE
|| e
->expr_type
== EXPR_VARIABLE
)
81 && e
->symtree
->n
.sym
->ts
.type
== BT_UNKNOWN
82 && gfc_set_default_type (e
->symtree
->n
.sym
, 0,
83 e
->symtree
->n
.sym
->ns
) == SUCCESS
84 && gfc_numeric_ts (&e
->symtree
->n
.sym
->ts
))
86 e
->ts
= e
->symtree
->n
.sym
->ts
;
90 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a numeric type",
91 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
98 /* Check that an expression is integer or real. */
101 int_or_real_check (gfc_expr
*e
, int n
)
103 if (e
->ts
.type
!= BT_INTEGER
&& e
->ts
.type
!= BT_REAL
)
105 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
106 "or REAL", gfc_current_intrinsic_arg
[n
]->name
,
107 gfc_current_intrinsic
, &e
->where
);
115 /* Check that an expression is real or complex. */
118 real_or_complex_check (gfc_expr
*e
, int n
)
120 if (e
->ts
.type
!= BT_REAL
&& e
->ts
.type
!= BT_COMPLEX
)
122 gfc_error ("'%s' argument of '%s' intrinsic at %L must be REAL "
123 "or COMPLEX", gfc_current_intrinsic_arg
[n
]->name
,
124 gfc_current_intrinsic
, &e
->where
);
132 /* Check that an expression is INTEGER or PROCEDURE. */
135 int_or_proc_check (gfc_expr
*e
, int n
)
137 if (e
->ts
.type
!= BT_INTEGER
&& e
->ts
.type
!= BT_PROCEDURE
)
139 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
140 "or PROCEDURE", gfc_current_intrinsic_arg
[n
]->name
,
141 gfc_current_intrinsic
, &e
->where
);
149 /* Check that the expression is an optional constant integer
150 and that it specifies a valid kind for that type. */
153 kind_check (gfc_expr
*k
, int n
, bt type
)
160 if (type_check (k
, n
, BT_INTEGER
) == FAILURE
)
163 if (scalar_check (k
, n
) == FAILURE
)
166 if (k
->expr_type
!= EXPR_CONSTANT
)
168 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
169 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
174 if (gfc_extract_int (k
, &kind
) != NULL
175 || gfc_validate_kind (type
, kind
, true) < 0)
177 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type
),
186 /* Make sure the expression is a double precision real. */
189 double_check (gfc_expr
*d
, int n
)
191 if (type_check (d
, n
, BT_REAL
) == FAILURE
)
194 if (d
->ts
.kind
!= gfc_default_double_kind
)
196 gfc_error ("'%s' argument of '%s' intrinsic at %L must be double "
197 "precision", gfc_current_intrinsic_arg
[n
]->name
,
198 gfc_current_intrinsic
, &d
->where
);
207 coarray_check (gfc_expr
*e
, int n
)
209 if (!gfc_is_coarray (e
))
211 gfc_error ("Expected coarray variable as '%s' argument to the %s "
212 "intrinsic at %L", gfc_current_intrinsic_arg
[n
]->name
,
213 gfc_current_intrinsic
, &e
->where
);
221 /* Make sure the expression is a logical array. */
224 logical_array_check (gfc_expr
*array
, int n
)
226 if (array
->ts
.type
!= BT_LOGICAL
|| array
->rank
== 0)
228 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a logical "
229 "array", gfc_current_intrinsic_arg
[n
]->name
,
230 gfc_current_intrinsic
, &array
->where
);
238 /* Make sure an expression is an array. */
241 array_check (gfc_expr
*e
, int n
)
246 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array",
247 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
254 /* If expr is a constant, then check to ensure that it is greater than
258 nonnegative_check (const char *arg
, gfc_expr
*expr
)
262 if (expr
->expr_type
== EXPR_CONSTANT
)
264 gfc_extract_int (expr
, &i
);
267 gfc_error ("'%s' at %L must be nonnegative", arg
, &expr
->where
);
276 /* If expr2 is constant, then check that the value is less than
277 (less than or equal to, if 'or_equal' is true) bit_size(expr1). */
280 less_than_bitsize1 (const char *arg1
, gfc_expr
*expr1
, const char *arg2
,
281 gfc_expr
*expr2
, bool or_equal
)
285 if (expr2
->expr_type
== EXPR_CONSTANT
)
287 gfc_extract_int (expr2
, &i2
);
288 i3
= gfc_validate_kind (BT_INTEGER
, expr1
->ts
.kind
, false);
291 if (i2
> gfc_integer_kinds
[i3
].bit_size
)
293 gfc_error ("'%s' at %L must be less than "
294 "or equal to BIT_SIZE('%s')",
295 arg2
, &expr2
->where
, arg1
);
301 if (i2
>= gfc_integer_kinds
[i3
].bit_size
)
303 gfc_error ("'%s' at %L must be less than BIT_SIZE('%s')",
304 arg2
, &expr2
->where
, arg1
);
314 /* If expr is constant, then check that the value is less than or equal
315 to the bit_size of the kind k. */
318 less_than_bitsizekind (const char *arg
, gfc_expr
*expr
, int k
)
322 if (expr
->expr_type
!= EXPR_CONSTANT
)
325 i
= gfc_validate_kind (BT_INTEGER
, k
, false);
326 gfc_extract_int (expr
, &val
);
328 if (val
> gfc_integer_kinds
[i
].bit_size
)
330 gfc_error ("'%s' at %L must be less than or equal to the BIT_SIZE of "
331 "INTEGER(KIND=%d)", arg
, &expr
->where
, k
);
339 /* If expr2 and expr3 are constants, then check that the value is less than
340 or equal to bit_size(expr1). */
343 less_than_bitsize2 (const char *arg1
, gfc_expr
*expr1
, const char *arg2
,
344 gfc_expr
*expr2
, const char *arg3
, gfc_expr
*expr3
)
348 if (expr2
->expr_type
== EXPR_CONSTANT
&& expr3
->expr_type
== EXPR_CONSTANT
)
350 gfc_extract_int (expr2
, &i2
);
351 gfc_extract_int (expr3
, &i3
);
353 i3
= gfc_validate_kind (BT_INTEGER
, expr1
->ts
.kind
, false);
354 if (i2
> gfc_integer_kinds
[i3
].bit_size
)
356 gfc_error ("'%s + %s' at %L must be less than or equal "
358 arg2
, arg3
, &expr2
->where
, arg1
);
366 /* Make sure two expressions have the same type. */
369 same_type_check (gfc_expr
*e
, int n
, gfc_expr
*f
, int m
)
371 if (gfc_compare_types (&e
->ts
, &f
->ts
))
374 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same type "
375 "and kind as '%s'", gfc_current_intrinsic_arg
[m
]->name
,
376 gfc_current_intrinsic
, &f
->where
,
377 gfc_current_intrinsic_arg
[n
]->name
);
383 /* Make sure that an expression has a certain (nonzero) rank. */
386 rank_check (gfc_expr
*e
, int n
, int rank
)
391 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank %d",
392 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
399 /* Make sure a variable expression is not an optional dummy argument. */
402 nonoptional_check (gfc_expr
*e
, int n
)
404 if (e
->expr_type
== EXPR_VARIABLE
&& e
->symtree
->n
.sym
->attr
.optional
)
406 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
407 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
411 /* TODO: Recursive check on nonoptional variables? */
417 /* Check for ALLOCATABLE attribute. */
420 allocatable_check (gfc_expr
*e
, int n
)
422 symbol_attribute attr
;
424 attr
= gfc_variable_attr (e
, NULL
);
425 if (!attr
.allocatable
)
427 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
428 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
437 /* Check that an expression has a particular kind. */
440 kind_value_check (gfc_expr
*e
, int n
, int k
)
445 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of kind %d",
446 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
453 /* Make sure an expression is a variable. */
456 variable_check (gfc_expr
*e
, int n
, bool allow_proc
)
458 if (e
->expr_type
== EXPR_VARIABLE
459 && e
->symtree
->n
.sym
->attr
.intent
== INTENT_IN
460 && (gfc_current_intrinsic_arg
[n
]->intent
== INTENT_OUT
461 || gfc_current_intrinsic_arg
[n
]->intent
== INTENT_INOUT
))
463 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
464 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
469 if (e
->expr_type
== EXPR_VARIABLE
470 && e
->symtree
->n
.sym
->attr
.flavor
!= FL_PARAMETER
472 || !e
->symtree
->n
.sym
->attr
.function
473 || (e
->symtree
->n
.sym
== e
->symtree
->n
.sym
->result
474 && (e
->symtree
->n
.sym
== gfc_current_ns
->proc_name
475 || (gfc_current_ns
->parent
477 == gfc_current_ns
->parent
->proc_name
)))))
480 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a variable",
481 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
, &e
->where
);
487 /* Check the common DIM parameter for correctness. */
490 dim_check (gfc_expr
*dim
, int n
, bool optional
)
495 if (type_check (dim
, n
, BT_INTEGER
) == FAILURE
)
498 if (scalar_check (dim
, n
) == FAILURE
)
501 if (!optional
&& nonoptional_check (dim
, n
) == FAILURE
)
508 /* If a coarray DIM parameter is a constant, make sure that it is greater than
509 zero and less than or equal to the corank of the given array. */
512 dim_corank_check (gfc_expr
*dim
, gfc_expr
*array
)
517 gcc_assert (array
->expr_type
== EXPR_VARIABLE
);
519 if (dim
->expr_type
!= EXPR_CONSTANT
)
522 ar
= gfc_find_array_ref (array
);
523 corank
= ar
->as
->corank
;
525 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
526 || mpz_cmp_ui (dim
->value
.integer
, corank
) > 0)
528 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
529 "codimension index", gfc_current_intrinsic
, &dim
->where
);
538 /* If a DIM parameter is a constant, make sure that it is greater than
539 zero and less than or equal to the rank of the given array. If
540 allow_assumed is zero then dim must be less than the rank of the array
541 for assumed size arrays. */
544 dim_rank_check (gfc_expr
*dim
, gfc_expr
*array
, int allow_assumed
)
552 if (dim
->expr_type
!= EXPR_CONSTANT
)
555 if (array
->expr_type
== EXPR_FUNCTION
&& array
->value
.function
.isym
556 && array
->value
.function
.isym
->id
== GFC_ISYM_SPREAD
)
557 rank
= array
->rank
+ 1;
561 if (array
->expr_type
== EXPR_VARIABLE
)
563 ar
= gfc_find_array_ref (array
);
564 if (ar
->as
->type
== AS_ASSUMED_SIZE
566 && ar
->type
!= AR_ELEMENT
567 && ar
->type
!= AR_SECTION
)
571 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
572 || mpz_cmp_ui (dim
->value
.integer
, rank
) > 0)
574 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
575 "dimension index", gfc_current_intrinsic
, &dim
->where
);
584 /* Compare the size of a along dimension ai with the size of b along
585 dimension bi, returning 0 if they are known not to be identical,
586 and 1 if they are identical, or if this cannot be determined. */
589 identical_dimen_shape (gfc_expr
*a
, int ai
, gfc_expr
*b
, int bi
)
591 mpz_t a_size
, b_size
;
594 gcc_assert (a
->rank
> ai
);
595 gcc_assert (b
->rank
> bi
);
599 if (gfc_array_dimen_size (a
, ai
, &a_size
) == SUCCESS
)
601 if (gfc_array_dimen_size (b
, bi
, &b_size
) == SUCCESS
)
603 if (mpz_cmp (a_size
, b_size
) != 0)
613 /* Calculate the length of a character variable, including substrings.
614 Strip away parentheses if necessary. Return -1 if no length could
618 gfc_var_strlen (const gfc_expr
*a
)
622 while (a
->expr_type
== EXPR_OP
&& a
->value
.op
.op
== INTRINSIC_PARENTHESES
)
625 for (ra
= a
->ref
; ra
!= NULL
&& ra
->type
!= REF_SUBSTRING
; ra
= ra
->next
)
632 if (ra
->u
.ss
.start
->expr_type
== EXPR_CONSTANT
633 && ra
->u
.ss
.end
->expr_type
== EXPR_CONSTANT
)
635 start_a
= mpz_get_si (ra
->u
.ss
.start
->value
.integer
);
636 end_a
= mpz_get_si (ra
->u
.ss
.end
->value
.integer
);
637 return end_a
- start_a
+ 1;
639 else if (gfc_dep_compare_expr (ra
->u
.ss
.start
, ra
->u
.ss
.end
) == 0)
645 if (a
->ts
.u
.cl
&& a
->ts
.u
.cl
->length
646 && a
->ts
.u
.cl
->length
->expr_type
== EXPR_CONSTANT
)
647 return mpz_get_si (a
->ts
.u
.cl
->length
->value
.integer
);
648 else if (a
->expr_type
== EXPR_CONSTANT
649 && (a
->ts
.u
.cl
== NULL
|| a
->ts
.u
.cl
->length
== NULL
))
650 return a
->value
.character
.length
;
656 /* Check whether two character expressions have the same length;
657 returns SUCCESS if they have or if the length cannot be determined,
658 otherwise return FAILURE and raise a gfc_error. */
661 gfc_check_same_strlen (const gfc_expr
*a
, const gfc_expr
*b
, const char *name
)
665 len_a
= gfc_var_strlen(a
);
666 len_b
= gfc_var_strlen(b
);
668 if (len_a
== -1 || len_b
== -1 || len_a
== len_b
)
672 gfc_error ("Unequal character lengths (%ld/%ld) in %s at %L",
673 len_a
, len_b
, name
, &a
->where
);
679 /***** Check functions *****/
681 /* Check subroutine suitable for intrinsics taking a real argument and
682 a kind argument for the result. */
685 check_a_kind (gfc_expr
*a
, gfc_expr
*kind
, bt type
)
687 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
689 if (kind_check (kind
, 1, type
) == FAILURE
)
696 /* Check subroutine suitable for ceiling, floor and nint. */
699 gfc_check_a_ikind (gfc_expr
*a
, gfc_expr
*kind
)
701 return check_a_kind (a
, kind
, BT_INTEGER
);
705 /* Check subroutine suitable for aint, anint. */
708 gfc_check_a_xkind (gfc_expr
*a
, gfc_expr
*kind
)
710 return check_a_kind (a
, kind
, BT_REAL
);
715 gfc_check_abs (gfc_expr
*a
)
717 if (numeric_check (a
, 0) == FAILURE
)
725 gfc_check_achar (gfc_expr
*a
, gfc_expr
*kind
)
727 if (type_check (a
, 0, BT_INTEGER
) == FAILURE
)
729 if (kind_check (kind
, 1, BT_CHARACTER
) == FAILURE
)
737 gfc_check_access_func (gfc_expr
*name
, gfc_expr
*mode
)
739 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
740 || scalar_check (name
, 0) == FAILURE
)
742 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
745 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
746 || scalar_check (mode
, 1) == FAILURE
)
748 if (kind_value_check (mode
, 1, gfc_default_character_kind
) == FAILURE
)
756 gfc_check_all_any (gfc_expr
*mask
, gfc_expr
*dim
)
758 if (logical_array_check (mask
, 0) == FAILURE
)
761 if (dim_check (dim
, 1, false) == FAILURE
)
764 if (dim_rank_check (dim
, mask
, 0) == FAILURE
)
772 gfc_check_allocated (gfc_expr
*array
)
774 if (variable_check (array
, 0, false) == FAILURE
)
776 if (allocatable_check (array
, 0) == FAILURE
)
783 /* Common check function where the first argument must be real or
784 integer and the second argument must be the same as the first. */
787 gfc_check_a_p (gfc_expr
*a
, gfc_expr
*p
)
789 if (int_or_real_check (a
, 0) == FAILURE
)
792 if (a
->ts
.type
!= p
->ts
.type
)
794 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
795 "have the same type", gfc_current_intrinsic_arg
[0]->name
,
796 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
801 if (a
->ts
.kind
!= p
->ts
.kind
)
803 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
804 &p
->where
) == FAILURE
)
813 gfc_check_x_yd (gfc_expr
*x
, gfc_expr
*y
)
815 if (double_check (x
, 0) == FAILURE
|| double_check (y
, 1) == FAILURE
)
823 gfc_check_associated (gfc_expr
*pointer
, gfc_expr
*target
)
825 symbol_attribute attr1
, attr2
;
830 where
= &pointer
->where
;
832 if (pointer
->expr_type
== EXPR_VARIABLE
|| pointer
->expr_type
== EXPR_FUNCTION
)
833 attr1
= gfc_expr_attr (pointer
);
834 else if (pointer
->expr_type
== EXPR_NULL
)
837 gcc_assert (0); /* Pointer must be a variable or a function. */
839 if (!attr1
.pointer
&& !attr1
.proc_pointer
)
841 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
842 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
848 if (attr1
.pointer
&& gfc_is_coindexed (pointer
))
850 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
851 "conindexed", gfc_current_intrinsic_arg
[0]->name
,
852 gfc_current_intrinsic
, &pointer
->where
);
856 /* Target argument is optional. */
860 where
= &target
->where
;
861 if (target
->expr_type
== EXPR_NULL
)
864 if (target
->expr_type
== EXPR_VARIABLE
|| target
->expr_type
== EXPR_FUNCTION
)
865 attr2
= gfc_expr_attr (target
);
868 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
869 "or target VARIABLE or FUNCTION",
870 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
875 if (attr1
.pointer
&& !attr2
.pointer
&& !attr2
.target
)
877 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
878 "or a TARGET", gfc_current_intrinsic_arg
[1]->name
,
879 gfc_current_intrinsic
, &target
->where
);
884 if (attr1
.pointer
&& gfc_is_coindexed (target
))
886 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
887 "conindexed", gfc_current_intrinsic_arg
[1]->name
,
888 gfc_current_intrinsic
, &target
->where
);
893 if (same_type_check (pointer
, 0, target
, 1) == FAILURE
)
895 if (rank_check (target
, 0, pointer
->rank
) == FAILURE
)
897 if (target
->rank
> 0)
899 for (i
= 0; i
< target
->rank
; i
++)
900 if (target
->ref
->u
.ar
.dimen_type
[i
] == DIMEN_VECTOR
)
902 gfc_error ("Array section with a vector subscript at %L shall not "
903 "be the target of a pointer",
913 gfc_error ("NULL pointer at %L is not permitted as actual argument "
914 "of '%s' intrinsic function", where
, gfc_current_intrinsic
);
921 gfc_check_atan_2 (gfc_expr
*y
, gfc_expr
*x
)
923 /* gfc_notify_std would be a wast of time as the return value
924 is seemingly used only for the generic resolution. The error
925 will be: Too many arguments. */
926 if ((gfc_option
.allow_std
& GFC_STD_F2008
) == 0)
929 return gfc_check_atan2 (y
, x
);
934 gfc_check_atan2 (gfc_expr
*y
, gfc_expr
*x
)
936 if (type_check (y
, 0, BT_REAL
) == FAILURE
)
938 if (same_type_check (y
, 0, x
, 1) == FAILURE
)
946 gfc_check_atomic (gfc_expr
*atom
, gfc_expr
*value
)
948 if (!(atom
->ts
.type
== BT_INTEGER
&& atom
->ts
.kind
== gfc_atomic_int_kind
)
949 && !(atom
->ts
.type
== BT_LOGICAL
950 && atom
->ts
.kind
== gfc_atomic_logical_kind
))
952 gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
953 "integer of ATOMIC_INT_KIND or a logical of "
954 "ATOMIC_LOGICAL_KIND", &atom
->where
, gfc_current_intrinsic
);
958 if (!gfc_expr_attr (atom
).codimension
)
960 gfc_error ("ATOM argument at %L of the %s intrinsic function shall be a "
961 "coarray or coindexed", &atom
->where
, gfc_current_intrinsic
);
965 if (atom
->ts
.type
!= value
->ts
.type
)
967 gfc_error ("ATOM and VALUE argument of the %s intrinsic function shall "
968 "have the same type at %L", gfc_current_intrinsic
,
978 gfc_check_atomic_def (gfc_expr
*atom
, gfc_expr
*value
)
980 if (scalar_check (atom
, 0) == FAILURE
|| scalar_check (value
, 1) == FAILURE
)
983 if (gfc_check_vardef_context (atom
, false, false, NULL
) == FAILURE
)
985 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
986 "definable", gfc_current_intrinsic
, &atom
->where
);
990 return gfc_check_atomic (atom
, value
);
995 gfc_check_atomic_ref (gfc_expr
*value
, gfc_expr
*atom
)
997 if (scalar_check (value
, 0) == FAILURE
|| scalar_check (atom
, 1) == FAILURE
)
1000 if (gfc_check_vardef_context (value
, false, false, NULL
) == FAILURE
)
1002 gfc_error ("VALUE argument of the %s intrinsic function at %L shall be "
1003 "definable", gfc_current_intrinsic
, &value
->where
);
1007 return gfc_check_atomic (atom
, value
);
1011 /* BESJN and BESYN functions. */
1014 gfc_check_besn (gfc_expr
*n
, gfc_expr
*x
)
1016 if (type_check (n
, 0, BT_INTEGER
) == FAILURE
)
1018 if (n
->expr_type
== EXPR_CONSTANT
)
1021 gfc_extract_int (n
, &i
);
1022 if (i
< 0 && gfc_notify_std (GFC_STD_GNU
, "Extension: Negative argument "
1023 "N at %L", &n
->where
) == FAILURE
)
1027 if (type_check (x
, 1, BT_REAL
) == FAILURE
)
1034 /* Transformational version of the Bessel JN and YN functions. */
1037 gfc_check_bessel_n2 (gfc_expr
*n1
, gfc_expr
*n2
, gfc_expr
*x
)
1039 if (type_check (n1
, 0, BT_INTEGER
) == FAILURE
)
1041 if (scalar_check (n1
, 0) == FAILURE
)
1043 if (nonnegative_check("N1", n1
) == FAILURE
)
1046 if (type_check (n2
, 1, BT_INTEGER
) == FAILURE
)
1048 if (scalar_check (n2
, 1) == FAILURE
)
1050 if (nonnegative_check("N2", n2
) == FAILURE
)
1053 if (type_check (x
, 2, BT_REAL
) == FAILURE
)
1055 if (scalar_check (x
, 2) == FAILURE
)
1063 gfc_check_bge_bgt_ble_blt (gfc_expr
*i
, gfc_expr
*j
)
1065 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1068 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1076 gfc_check_bitfcn (gfc_expr
*i
, gfc_expr
*pos
)
1078 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1081 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
1084 if (nonnegative_check ("pos", pos
) == FAILURE
)
1087 if (less_than_bitsize1 ("i", i
, "pos", pos
, false) == FAILURE
)
1095 gfc_check_char (gfc_expr
*i
, gfc_expr
*kind
)
1097 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1099 if (kind_check (kind
, 1, BT_CHARACTER
) == FAILURE
)
1107 gfc_check_chdir (gfc_expr
*dir
)
1109 if (type_check (dir
, 0, BT_CHARACTER
) == FAILURE
)
1111 if (kind_value_check (dir
, 0, gfc_default_character_kind
) == FAILURE
)
1119 gfc_check_chdir_sub (gfc_expr
*dir
, gfc_expr
*status
)
1121 if (type_check (dir
, 0, BT_CHARACTER
) == FAILURE
)
1123 if (kind_value_check (dir
, 0, gfc_default_character_kind
) == FAILURE
)
1129 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
1131 if (scalar_check (status
, 1) == FAILURE
)
1139 gfc_check_chmod (gfc_expr
*name
, gfc_expr
*mode
)
1141 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
1143 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
1146 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
)
1148 if (kind_value_check (mode
, 1, gfc_default_character_kind
) == FAILURE
)
1156 gfc_check_chmod_sub (gfc_expr
*name
, gfc_expr
*mode
, gfc_expr
*status
)
1158 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
1160 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
1163 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
)
1165 if (kind_value_check (mode
, 1, gfc_default_character_kind
) == FAILURE
)
1171 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1174 if (scalar_check (status
, 2) == FAILURE
)
1182 gfc_check_cmplx (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*kind
)
1184 if (numeric_check (x
, 0) == FAILURE
)
1189 if (numeric_check (y
, 1) == FAILURE
)
1192 if (x
->ts
.type
== BT_COMPLEX
)
1194 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1195 "present if 'x' is COMPLEX",
1196 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1201 if (y
->ts
.type
== BT_COMPLEX
)
1203 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1204 "of either REAL or INTEGER",
1205 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1212 if (kind_check (kind
, 2, BT_COMPLEX
) == FAILURE
)
1220 gfc_check_complex (gfc_expr
*x
, gfc_expr
*y
)
1222 if (int_or_real_check (x
, 0) == FAILURE
)
1224 if (scalar_check (x
, 0) == FAILURE
)
1227 if (int_or_real_check (y
, 1) == FAILURE
)
1229 if (scalar_check (y
, 1) == FAILURE
)
1237 gfc_check_count (gfc_expr
*mask
, gfc_expr
*dim
, gfc_expr
*kind
)
1239 if (logical_array_check (mask
, 0) == FAILURE
)
1241 if (dim_check (dim
, 1, false) == FAILURE
)
1243 if (dim_rank_check (dim
, mask
, 0) == FAILURE
)
1245 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
1247 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1248 "with KIND argument at %L",
1249 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1257 gfc_check_cshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*dim
)
1259 if (array_check (array
, 0) == FAILURE
)
1262 if (type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1265 if (dim_check (dim
, 2, true) == FAILURE
)
1268 if (dim_rank_check (dim
, array
, false) == FAILURE
)
1271 if (array
->rank
== 1 || shift
->rank
== 0)
1273 if (scalar_check (shift
, 1) == FAILURE
)
1276 else if (shift
->rank
== array
->rank
- 1)
1281 else if (dim
->expr_type
== EXPR_CONSTANT
)
1282 gfc_extract_int (dim
, &d
);
1289 for (i
= 0, j
= 0; i
< array
->rank
; i
++)
1292 if (!identical_dimen_shape (array
, i
, shift
, j
))
1294 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1295 "invalid shape in dimension %d (%ld/%ld)",
1296 gfc_current_intrinsic_arg
[1]->name
,
1297 gfc_current_intrinsic
, &shift
->where
, i
+ 1,
1298 mpz_get_si (array
->shape
[i
]),
1299 mpz_get_si (shift
->shape
[j
]));
1309 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1310 "%d or be a scalar", gfc_current_intrinsic_arg
[1]->name
,
1311 gfc_current_intrinsic
, &shift
->where
, array
->rank
- 1);
1320 gfc_check_ctime (gfc_expr
*time
)
1322 if (scalar_check (time
, 0) == FAILURE
)
1325 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
1332 gfc_try
gfc_check_datan2 (gfc_expr
*y
, gfc_expr
*x
)
1334 if (double_check (y
, 0) == FAILURE
|| double_check (x
, 1) == FAILURE
)
1341 gfc_check_dcmplx (gfc_expr
*x
, gfc_expr
*y
)
1343 if (numeric_check (x
, 0) == FAILURE
)
1348 if (numeric_check (y
, 1) == FAILURE
)
1351 if (x
->ts
.type
== BT_COMPLEX
)
1353 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1354 "present if 'x' is COMPLEX",
1355 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1360 if (y
->ts
.type
== BT_COMPLEX
)
1362 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1363 "of either REAL or INTEGER",
1364 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1375 gfc_check_dble (gfc_expr
*x
)
1377 if (numeric_check (x
, 0) == FAILURE
)
1385 gfc_check_digits (gfc_expr
*x
)
1387 if (int_or_real_check (x
, 0) == FAILURE
)
1395 gfc_check_dot_product (gfc_expr
*vector_a
, gfc_expr
*vector_b
)
1397 switch (vector_a
->ts
.type
)
1400 if (type_check (vector_b
, 1, BT_LOGICAL
) == FAILURE
)
1407 if (numeric_check (vector_b
, 1) == FAILURE
)
1412 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1413 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
1414 gfc_current_intrinsic
, &vector_a
->where
);
1418 if (rank_check (vector_a
, 0, 1) == FAILURE
)
1421 if (rank_check (vector_b
, 1, 1) == FAILURE
)
1424 if (! identical_dimen_shape (vector_a
, 0, vector_b
, 0))
1426 gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
1427 "intrinsic 'dot_product'", gfc_current_intrinsic_arg
[0]->name
,
1428 gfc_current_intrinsic_arg
[1]->name
, &vector_a
->where
);
1437 gfc_check_dprod (gfc_expr
*x
, gfc_expr
*y
)
1439 if (type_check (x
, 0, BT_REAL
) == FAILURE
1440 || type_check (y
, 1, BT_REAL
) == FAILURE
)
1443 if (x
->ts
.kind
!= gfc_default_real_kind
)
1445 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1446 "real", gfc_current_intrinsic_arg
[0]->name
,
1447 gfc_current_intrinsic
, &x
->where
);
1451 if (y
->ts
.kind
!= gfc_default_real_kind
)
1453 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1454 "real", gfc_current_intrinsic_arg
[1]->name
,
1455 gfc_current_intrinsic
, &y
->where
);
1464 gfc_check_dshift (gfc_expr
*i
, gfc_expr
*j
, gfc_expr
*shift
)
1466 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1469 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1472 if (same_type_check (i
, 0, j
, 1) == FAILURE
)
1475 if (type_check (shift
, 2, BT_INTEGER
) == FAILURE
)
1478 if (nonnegative_check ("SHIFT", shift
) == FAILURE
)
1481 if (less_than_bitsize1 ("I", i
, "SHIFT", shift
, true) == FAILURE
)
1489 gfc_check_eoshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*boundary
,
1492 if (array_check (array
, 0) == FAILURE
)
1495 if (type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1498 if (dim_check (dim
, 3, true) == FAILURE
)
1501 if (dim_rank_check (dim
, array
, false) == FAILURE
)
1504 if (array
->rank
== 1 || shift
->rank
== 0)
1506 if (scalar_check (shift
, 1) == FAILURE
)
1509 else if (shift
->rank
== array
->rank
- 1)
1514 else if (dim
->expr_type
== EXPR_CONSTANT
)
1515 gfc_extract_int (dim
, &d
);
1522 for (i
= 0, j
= 0; i
< array
->rank
; i
++)
1525 if (!identical_dimen_shape (array
, i
, shift
, j
))
1527 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1528 "invalid shape in dimension %d (%ld/%ld)",
1529 gfc_current_intrinsic_arg
[1]->name
,
1530 gfc_current_intrinsic
, &shift
->where
, i
+ 1,
1531 mpz_get_si (array
->shape
[i
]),
1532 mpz_get_si (shift
->shape
[j
]));
1542 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1543 "%d or be a scalar", gfc_current_intrinsic_arg
[1]->name
,
1544 gfc_current_intrinsic
, &shift
->where
, array
->rank
- 1);
1548 if (boundary
!= NULL
)
1550 if (same_type_check (array
, 0, boundary
, 2) == FAILURE
)
1553 if (array
->rank
== 1 || boundary
->rank
== 0)
1555 if (scalar_check (boundary
, 2) == FAILURE
)
1558 else if (boundary
->rank
== array
->rank
- 1)
1560 if (gfc_check_conformance (shift
, boundary
,
1561 "arguments '%s' and '%s' for "
1563 gfc_current_intrinsic_arg
[1]->name
,
1564 gfc_current_intrinsic_arg
[2]->name
,
1565 gfc_current_intrinsic
) == FAILURE
)
1570 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have "
1571 "rank %d or be a scalar",
1572 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1573 &shift
->where
, array
->rank
- 1);
1582 gfc_check_float (gfc_expr
*a
)
1584 if (type_check (a
, 0, BT_INTEGER
) == FAILURE
)
1587 if ((a
->ts
.kind
!= gfc_default_integer_kind
)
1588 && gfc_notify_std (GFC_STD_GNU
, "GNU extension: non-default INTEGER "
1589 "kind argument to %s intrinsic at %L",
1590 gfc_current_intrinsic
, &a
->where
) == FAILURE
)
1596 /* A single complex argument. */
1599 gfc_check_fn_c (gfc_expr
*a
)
1601 if (type_check (a
, 0, BT_COMPLEX
) == FAILURE
)
1607 /* A single real argument. */
1610 gfc_check_fn_r (gfc_expr
*a
)
1612 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
1618 /* A single double argument. */
1621 gfc_check_fn_d (gfc_expr
*a
)
1623 if (double_check (a
, 0) == FAILURE
)
1629 /* A single real or complex argument. */
1632 gfc_check_fn_rc (gfc_expr
*a
)
1634 if (real_or_complex_check (a
, 0) == FAILURE
)
1642 gfc_check_fn_rc2008 (gfc_expr
*a
)
1644 if (real_or_complex_check (a
, 0) == FAILURE
)
1647 if (a
->ts
.type
== BT_COMPLEX
1648 && gfc_notify_std (GFC_STD_F2008
, "Fortran 2008: COMPLEX argument '%s' "
1649 "argument of '%s' intrinsic at %L",
1650 gfc_current_intrinsic_arg
[0]->name
,
1651 gfc_current_intrinsic
, &a
->where
) == FAILURE
)
1659 gfc_check_fnum (gfc_expr
*unit
)
1661 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
1664 if (scalar_check (unit
, 0) == FAILURE
)
1672 gfc_check_huge (gfc_expr
*x
)
1674 if (int_or_real_check (x
, 0) == FAILURE
)
1682 gfc_check_hypot (gfc_expr
*x
, gfc_expr
*y
)
1684 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1686 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
1693 /* Check that the single argument is an integer. */
1696 gfc_check_i (gfc_expr
*i
)
1698 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1706 gfc_check_iand (gfc_expr
*i
, gfc_expr
*j
)
1708 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1711 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1714 if (i
->ts
.kind
!= j
->ts
.kind
)
1716 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1717 &i
->where
) == FAILURE
)
1726 gfc_check_ibits (gfc_expr
*i
, gfc_expr
*pos
, gfc_expr
*len
)
1728 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1731 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
1734 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
1737 if (nonnegative_check ("pos", pos
) == FAILURE
)
1740 if (nonnegative_check ("len", len
) == FAILURE
)
1743 if (less_than_bitsize2 ("i", i
, "pos", pos
, "len", len
) == FAILURE
)
1751 gfc_check_ichar_iachar (gfc_expr
*c
, gfc_expr
*kind
)
1755 if (type_check (c
, 0, BT_CHARACTER
) == FAILURE
)
1758 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1761 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1762 "with KIND argument at %L",
1763 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1766 if (c
->expr_type
== EXPR_VARIABLE
|| c
->expr_type
== EXPR_SUBSTRING
)
1772 /* Substring references don't have the charlength set. */
1774 while (ref
&& ref
->type
!= REF_SUBSTRING
)
1777 gcc_assert (ref
== NULL
|| ref
->type
== REF_SUBSTRING
);
1781 /* Check that the argument is length one. Non-constant lengths
1782 can't be checked here, so assume they are ok. */
1783 if (c
->ts
.u
.cl
&& c
->ts
.u
.cl
->length
)
1785 /* If we already have a length for this expression then use it. */
1786 if (c
->ts
.u
.cl
->length
->expr_type
!= EXPR_CONSTANT
)
1788 i
= mpz_get_si (c
->ts
.u
.cl
->length
->value
.integer
);
1795 start
= ref
->u
.ss
.start
;
1796 end
= ref
->u
.ss
.end
;
1799 if (end
== NULL
|| end
->expr_type
!= EXPR_CONSTANT
1800 || start
->expr_type
!= EXPR_CONSTANT
)
1803 i
= mpz_get_si (end
->value
.integer
) + 1
1804 - mpz_get_si (start
->value
.integer
);
1812 gfc_error ("Argument of %s at %L must be of length one",
1813 gfc_current_intrinsic
, &c
->where
);
1822 gfc_check_idnint (gfc_expr
*a
)
1824 if (double_check (a
, 0) == FAILURE
)
1832 gfc_check_ieor (gfc_expr
*i
, gfc_expr
*j
)
1834 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1837 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1840 if (i
->ts
.kind
!= j
->ts
.kind
)
1842 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1843 &i
->where
) == FAILURE
)
1852 gfc_check_index (gfc_expr
*string
, gfc_expr
*substring
, gfc_expr
*back
,
1855 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
1856 || type_check (substring
, 1, BT_CHARACTER
) == FAILURE
)
1859 if (back
!= NULL
&& type_check (back
, 2, BT_LOGICAL
) == FAILURE
)
1862 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
1864 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1865 "with KIND argument at %L",
1866 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1869 if (string
->ts
.kind
!= substring
->ts
.kind
)
1871 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1872 "kind as '%s'", gfc_current_intrinsic_arg
[1]->name
,
1873 gfc_current_intrinsic
, &substring
->where
,
1874 gfc_current_intrinsic_arg
[0]->name
);
1883 gfc_check_int (gfc_expr
*x
, gfc_expr
*kind
)
1885 if (numeric_check (x
, 0) == FAILURE
)
1888 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1896 gfc_check_intconv (gfc_expr
*x
)
1898 if (numeric_check (x
, 0) == FAILURE
)
1906 gfc_check_ior (gfc_expr
*i
, gfc_expr
*j
)
1908 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1911 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1914 if (i
->ts
.kind
!= j
->ts
.kind
)
1916 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1917 &i
->where
) == FAILURE
)
1926 gfc_check_ishft (gfc_expr
*i
, gfc_expr
*shift
)
1928 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
1929 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1937 gfc_check_ishftc (gfc_expr
*i
, gfc_expr
*shift
, gfc_expr
*size
)
1939 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
1940 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1943 if (size
!= NULL
&& type_check (size
, 2, BT_INTEGER
) == FAILURE
)
1951 gfc_check_kill (gfc_expr
*pid
, gfc_expr
*sig
)
1953 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
1956 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
1964 gfc_check_kill_sub (gfc_expr
*pid
, gfc_expr
*sig
, gfc_expr
*status
)
1966 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
1969 if (scalar_check (pid
, 0) == FAILURE
)
1972 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
1975 if (scalar_check (sig
, 1) == FAILURE
)
1981 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1984 if (scalar_check (status
, 2) == FAILURE
)
1992 gfc_check_kind (gfc_expr
*x
)
1994 if (x
->ts
.type
== BT_DERIVED
)
1996 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1997 "non-derived type", gfc_current_intrinsic_arg
[0]->name
,
1998 gfc_current_intrinsic
, &x
->where
);
2007 gfc_check_lbound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
2009 if (array_check (array
, 0) == FAILURE
)
2012 if (dim_check (dim
, 1, false) == FAILURE
)
2015 if (dim_rank_check (dim
, array
, 1) == FAILURE
)
2018 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
2020 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2021 "with KIND argument at %L",
2022 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2030 gfc_check_lcobound (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*kind
)
2032 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
2034 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
2038 if (coarray_check (coarray
, 0) == FAILURE
)
2043 if (dim_check (dim
, 1, false) == FAILURE
)
2046 if (dim_corank_check (dim
, coarray
) == FAILURE
)
2050 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
2058 gfc_check_len_lentrim (gfc_expr
*s
, gfc_expr
*kind
)
2060 if (type_check (s
, 0, BT_CHARACTER
) == FAILURE
)
2063 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
2065 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2066 "with KIND argument at %L",
2067 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2075 gfc_check_lge_lgt_lle_llt (gfc_expr
*a
, gfc_expr
*b
)
2077 if (type_check (a
, 0, BT_CHARACTER
) == FAILURE
)
2079 if (kind_value_check (a
, 0, gfc_default_character_kind
) == FAILURE
)
2082 if (type_check (b
, 1, BT_CHARACTER
) == FAILURE
)
2084 if (kind_value_check (b
, 1, gfc_default_character_kind
) == FAILURE
)
2092 gfc_check_link (gfc_expr
*path1
, gfc_expr
*path2
)
2094 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2096 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2099 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2101 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2109 gfc_check_link_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2111 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2113 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2116 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2118 if (kind_value_check (path2
, 0, gfc_default_character_kind
) == FAILURE
)
2124 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2127 if (scalar_check (status
, 2) == FAILURE
)
2135 gfc_check_loc (gfc_expr
*expr
)
2137 return variable_check (expr
, 0, true);
2142 gfc_check_symlnk (gfc_expr
*path1
, gfc_expr
*path2
)
2144 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2146 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2149 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2151 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2159 gfc_check_symlnk_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2161 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2163 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2166 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2168 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2174 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2177 if (scalar_check (status
, 2) == FAILURE
)
2185 gfc_check_logical (gfc_expr
*a
, gfc_expr
*kind
)
2187 if (type_check (a
, 0, BT_LOGICAL
) == FAILURE
)
2189 if (kind_check (kind
, 1, BT_LOGICAL
) == FAILURE
)
2196 /* Min/max family. */
2199 min_max_args (gfc_actual_arglist
*arg
)
2201 if (arg
== NULL
|| arg
->next
== NULL
)
2203 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
2204 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
2213 check_rest (bt type
, int kind
, gfc_actual_arglist
*arglist
)
2215 gfc_actual_arglist
*arg
, *tmp
;
2220 if (min_max_args (arglist
) == FAILURE
)
2223 for (arg
= arglist
, n
=1; arg
; arg
= arg
->next
, n
++)
2226 if (x
->ts
.type
!= type
|| x
->ts
.kind
!= kind
)
2228 if (x
->ts
.type
== type
)
2230 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type "
2231 "kinds at %L", &x
->where
) == FAILURE
)
2236 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
2237 "%s(%d)", n
, gfc_current_intrinsic
, &x
->where
,
2238 gfc_basic_typename (type
), kind
);
2243 for (tmp
= arglist
, m
=1; tmp
!= arg
; tmp
= tmp
->next
, m
++)
2244 if (gfc_check_conformance (tmp
->expr
, x
,
2245 "arguments 'a%d' and 'a%d' for "
2246 "intrinsic '%s'", m
, n
,
2247 gfc_current_intrinsic
) == FAILURE
)
2256 gfc_check_min_max (gfc_actual_arglist
*arg
)
2260 if (min_max_args (arg
) == FAILURE
)
2265 if (x
->ts
.type
== BT_CHARACTER
)
2267 if (gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2268 "with CHARACTER argument at %L",
2269 gfc_current_intrinsic
, &x
->where
) == FAILURE
)
2272 else if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
2274 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
2275 "REAL or CHARACTER", gfc_current_intrinsic
, &x
->where
);
2279 return check_rest (x
->ts
.type
, x
->ts
.kind
, arg
);
2284 gfc_check_min_max_integer (gfc_actual_arglist
*arg
)
2286 return check_rest (BT_INTEGER
, gfc_default_integer_kind
, arg
);
2291 gfc_check_min_max_real (gfc_actual_arglist
*arg
)
2293 return check_rest (BT_REAL
, gfc_default_real_kind
, arg
);
2298 gfc_check_min_max_double (gfc_actual_arglist
*arg
)
2300 return check_rest (BT_REAL
, gfc_default_double_kind
, arg
);
2304 /* End of min/max family. */
2307 gfc_check_malloc (gfc_expr
*size
)
2309 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
2312 if (scalar_check (size
, 0) == FAILURE
)
2320 gfc_check_matmul (gfc_expr
*matrix_a
, gfc_expr
*matrix_b
)
2322 if ((matrix_a
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_a
->ts
))
2324 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2325 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
2326 gfc_current_intrinsic
, &matrix_a
->where
);
2330 if ((matrix_b
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_b
->ts
))
2332 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2333 "or LOGICAL", gfc_current_intrinsic_arg
[1]->name
,
2334 gfc_current_intrinsic
, &matrix_b
->where
);
2338 if ((matrix_a
->ts
.type
== BT_LOGICAL
&& gfc_numeric_ts (&matrix_b
->ts
))
2339 || (gfc_numeric_ts (&matrix_a
->ts
) && matrix_b
->ts
.type
== BT_LOGICAL
))
2341 gfc_error ("Argument types of '%s' intrinsic at %L must match (%s/%s)",
2342 gfc_current_intrinsic
, &matrix_a
->where
,
2343 gfc_typename(&matrix_a
->ts
), gfc_typename(&matrix_b
->ts
));
2347 switch (matrix_a
->rank
)
2350 if (rank_check (matrix_b
, 1, 2) == FAILURE
)
2352 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
2353 if (!identical_dimen_shape (matrix_a
, 0, matrix_b
, 0))
2355 gfc_error ("Different shape on dimension 1 for arguments '%s' "
2356 "and '%s' at %L for intrinsic matmul",
2357 gfc_current_intrinsic_arg
[0]->name
,
2358 gfc_current_intrinsic_arg
[1]->name
, &matrix_a
->where
);
2364 if (matrix_b
->rank
!= 2)
2366 if (rank_check (matrix_b
, 1, 1) == FAILURE
)
2369 /* matrix_b has rank 1 or 2 here. Common check for the cases
2370 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
2371 - matrix_a has shape (n,m) and matrix_b has shape (m). */
2372 if (!identical_dimen_shape (matrix_a
, 1, matrix_b
, 0))
2374 gfc_error ("Different shape on dimension 2 for argument '%s' and "
2375 "dimension 1 for argument '%s' at %L for intrinsic "
2376 "matmul", gfc_current_intrinsic_arg
[0]->name
,
2377 gfc_current_intrinsic_arg
[1]->name
, &matrix_a
->where
);
2383 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
2384 "1 or 2", gfc_current_intrinsic_arg
[0]->name
,
2385 gfc_current_intrinsic
, &matrix_a
->where
);
2393 /* Whoever came up with this interface was probably on something.
2394 The possibilities for the occupation of the second and third
2401 NULL MASK minloc(array, mask=m)
2404 I.e. in the case of minloc(array,mask), mask will be in the second
2405 position of the argument list and we'll have to fix that up. */
2408 gfc_check_minloc_maxloc (gfc_actual_arglist
*ap
)
2410 gfc_expr
*a
, *m
, *d
;
2413 if (int_or_real_check (a
, 0) == FAILURE
|| array_check (a
, 0) == FAILURE
)
2417 m
= ap
->next
->next
->expr
;
2419 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
2420 && ap
->next
->name
== NULL
)
2424 ap
->next
->expr
= NULL
;
2425 ap
->next
->next
->expr
= m
;
2428 if (dim_check (d
, 1, false) == FAILURE
)
2431 if (dim_rank_check (d
, a
, 0) == FAILURE
)
2434 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
2438 && gfc_check_conformance (a
, m
,
2439 "arguments '%s' and '%s' for intrinsic %s",
2440 gfc_current_intrinsic_arg
[0]->name
,
2441 gfc_current_intrinsic_arg
[2]->name
,
2442 gfc_current_intrinsic
) == FAILURE
)
2449 /* Similar to minloc/maxloc, the argument list might need to be
2450 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
2451 difference is that MINLOC/MAXLOC take an additional KIND argument.
2452 The possibilities are:
2458 NULL MASK minval(array, mask=m)
2461 I.e. in the case of minval(array,mask), mask will be in the second
2462 position of the argument list and we'll have to fix that up. */
2465 check_reduction (gfc_actual_arglist
*ap
)
2467 gfc_expr
*a
, *m
, *d
;
2471 m
= ap
->next
->next
->expr
;
2473 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
2474 && ap
->next
->name
== NULL
)
2478 ap
->next
->expr
= NULL
;
2479 ap
->next
->next
->expr
= m
;
2482 if (dim_check (d
, 1, false) == FAILURE
)
2485 if (dim_rank_check (d
, a
, 0) == FAILURE
)
2488 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
2492 && gfc_check_conformance (a
, m
,
2493 "arguments '%s' and '%s' for intrinsic %s",
2494 gfc_current_intrinsic_arg
[0]->name
,
2495 gfc_current_intrinsic_arg
[2]->name
,
2496 gfc_current_intrinsic
) == FAILURE
)
2504 gfc_check_minval_maxval (gfc_actual_arglist
*ap
)
2506 if (int_or_real_check (ap
->expr
, 0) == FAILURE
2507 || array_check (ap
->expr
, 0) == FAILURE
)
2510 return check_reduction (ap
);
2515 gfc_check_product_sum (gfc_actual_arglist
*ap
)
2517 if (numeric_check (ap
->expr
, 0) == FAILURE
2518 || array_check (ap
->expr
, 0) == FAILURE
)
2521 return check_reduction (ap
);
2525 /* For IANY, IALL and IPARITY. */
2528 gfc_check_mask (gfc_expr
*i
, gfc_expr
*kind
)
2532 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
2535 if (nonnegative_check ("I", i
) == FAILURE
)
2538 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
2542 gfc_extract_int (kind
, &k
);
2544 k
= gfc_default_integer_kind
;
2546 if (less_than_bitsizekind ("I", i
, k
) == FAILURE
)
2554 gfc_check_transf_bit_intrins (gfc_actual_arglist
*ap
)
2556 if (ap
->expr
->ts
.type
!= BT_INTEGER
)
2558 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER",
2559 gfc_current_intrinsic_arg
[0]->name
,
2560 gfc_current_intrinsic
, &ap
->expr
->where
);
2564 if (array_check (ap
->expr
, 0) == FAILURE
)
2567 return check_reduction (ap
);
2572 gfc_check_merge (gfc_expr
*tsource
, gfc_expr
*fsource
, gfc_expr
*mask
)
2574 if (same_type_check (tsource
, 0, fsource
, 1) == FAILURE
)
2577 if (type_check (mask
, 2, BT_LOGICAL
) == FAILURE
)
2580 if (tsource
->ts
.type
== BT_CHARACTER
)
2581 return gfc_check_same_strlen (tsource
, fsource
, "MERGE intrinsic");
2588 gfc_check_merge_bits (gfc_expr
*i
, gfc_expr
*j
, gfc_expr
*mask
)
2590 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
2593 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
2596 if (type_check (mask
, 2, BT_INTEGER
) == FAILURE
)
2599 if (same_type_check (i
, 0, j
, 1) == FAILURE
)
2602 if (same_type_check (i
, 0, mask
, 2) == FAILURE
)
2610 gfc_check_move_alloc (gfc_expr
*from
, gfc_expr
*to
)
2612 if (variable_check (from
, 0, false) == FAILURE
)
2614 if (allocatable_check (from
, 0) == FAILURE
)
2617 if (variable_check (to
, 1, false) == FAILURE
)
2619 if (allocatable_check (to
, 1) == FAILURE
)
2622 if (same_type_check (to
, 1, from
, 0) == FAILURE
)
2625 if (to
->rank
!= from
->rank
)
2627 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
2628 "have the same rank %d/%d", gfc_current_intrinsic_arg
[0]->name
,
2629 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
2630 &to
->where
, from
->rank
, to
->rank
);
2634 if (to
->ts
.kind
!= from
->ts
.kind
)
2636 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
2637 "be of the same kind %d/%d",
2638 gfc_current_intrinsic_arg
[0]->name
,
2639 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
2640 &to
->where
, from
->ts
.kind
, to
->ts
.kind
);
2644 /* CLASS arguments: Make sure the vtab is present. */
2645 if (to
->ts
.type
== BT_CLASS
)
2646 gfc_find_derived_vtab (from
->ts
.u
.derived
);
2653 gfc_check_nearest (gfc_expr
*x
, gfc_expr
*s
)
2655 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2658 if (type_check (s
, 1, BT_REAL
) == FAILURE
)
2666 gfc_check_new_line (gfc_expr
*a
)
2668 if (type_check (a
, 0, BT_CHARACTER
) == FAILURE
)
2676 gfc_check_norm2 (gfc_expr
*array
, gfc_expr
*dim
)
2678 if (type_check (array
, 0, BT_REAL
) == FAILURE
)
2681 if (array_check (array
, 0) == FAILURE
)
2684 if (dim_rank_check (dim
, array
, false) == FAILURE
)
2691 gfc_check_null (gfc_expr
*mold
)
2693 symbol_attribute attr
;
2698 if (variable_check (mold
, 0, true) == FAILURE
)
2701 attr
= gfc_variable_attr (mold
, NULL
);
2703 if (!attr
.pointer
&& !attr
.proc_pointer
&& !attr
.allocatable
)
2705 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER, "
2706 "ALLOCATABLE or procedure pointer",
2707 gfc_current_intrinsic_arg
[0]->name
,
2708 gfc_current_intrinsic
, &mold
->where
);
2712 if (attr
.allocatable
2713 && gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: NULL intrinsic with "
2714 "allocatable MOLD at %L", &mold
->where
) == FAILURE
)
2718 if (gfc_is_coindexed (mold
))
2720 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
2721 "conindexed", gfc_current_intrinsic_arg
[0]->name
,
2722 gfc_current_intrinsic
, &mold
->where
);
2731 gfc_check_pack (gfc_expr
*array
, gfc_expr
*mask
, gfc_expr
*vector
)
2733 if (array_check (array
, 0) == FAILURE
)
2736 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
2739 if (gfc_check_conformance (array
, mask
,
2740 "arguments '%s' and '%s' for intrinsic '%s'",
2741 gfc_current_intrinsic_arg
[0]->name
,
2742 gfc_current_intrinsic_arg
[1]->name
,
2743 gfc_current_intrinsic
) == FAILURE
)
2748 mpz_t array_size
, vector_size
;
2749 bool have_array_size
, have_vector_size
;
2751 if (same_type_check (array
, 0, vector
, 2) == FAILURE
)
2754 if (rank_check (vector
, 2, 1) == FAILURE
)
2757 /* VECTOR requires at least as many elements as MASK
2758 has .TRUE. values. */
2759 have_array_size
= gfc_array_size (array
, &array_size
) == SUCCESS
;
2760 have_vector_size
= gfc_array_size (vector
, &vector_size
) == SUCCESS
;
2762 if (have_vector_size
2763 && (mask
->expr_type
== EXPR_ARRAY
2764 || (mask
->expr_type
== EXPR_CONSTANT
2765 && have_array_size
)))
2767 int mask_true_values
= 0;
2769 if (mask
->expr_type
== EXPR_ARRAY
)
2771 gfc_constructor
*mask_ctor
;
2772 mask_ctor
= gfc_constructor_first (mask
->value
.constructor
);
2775 if (mask_ctor
->expr
->expr_type
!= EXPR_CONSTANT
)
2777 mask_true_values
= 0;
2781 if (mask_ctor
->expr
->value
.logical
)
2784 mask_ctor
= gfc_constructor_next (mask_ctor
);
2787 else if (mask
->expr_type
== EXPR_CONSTANT
&& mask
->value
.logical
)
2788 mask_true_values
= mpz_get_si (array_size
);
2790 if (mpz_get_si (vector_size
) < mask_true_values
)
2792 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
2793 "provide at least as many elements as there "
2794 "are .TRUE. values in '%s' (%ld/%d)",
2795 gfc_current_intrinsic_arg
[2]->name
,
2796 gfc_current_intrinsic
, &vector
->where
,
2797 gfc_current_intrinsic_arg
[1]->name
,
2798 mpz_get_si (vector_size
), mask_true_values
);
2803 if (have_array_size
)
2804 mpz_clear (array_size
);
2805 if (have_vector_size
)
2806 mpz_clear (vector_size
);
2814 gfc_check_parity (gfc_expr
*mask
, gfc_expr
*dim
)
2816 if (type_check (mask
, 0, BT_LOGICAL
) == FAILURE
)
2819 if (array_check (mask
, 0) == FAILURE
)
2822 if (dim_rank_check (dim
, mask
, false) == FAILURE
)
2830 gfc_check_precision (gfc_expr
*x
)
2832 if (real_or_complex_check (x
, 0) == FAILURE
)
2840 gfc_check_present (gfc_expr
*a
)
2844 if (variable_check (a
, 0, true) == FAILURE
)
2847 sym
= a
->symtree
->n
.sym
;
2848 if (!sym
->attr
.dummy
)
2850 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
2851 "dummy variable", gfc_current_intrinsic_arg
[0]->name
,
2852 gfc_current_intrinsic
, &a
->where
);
2856 if (!sym
->attr
.optional
)
2858 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
2859 "an OPTIONAL dummy variable",
2860 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
2865 /* 13.14.82 PRESENT(A)
2867 Argument. A shall be the name of an optional dummy argument that is
2868 accessible in the subprogram in which the PRESENT function reference
2872 && !(a
->ref
->next
== NULL
&& a
->ref
->type
== REF_ARRAY
2873 && (a
->ref
->u
.ar
.type
== AR_FULL
2874 || (a
->ref
->u
.ar
.type
== AR_ELEMENT
2875 && a
->ref
->u
.ar
.as
->rank
== 0))))
2877 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
2878 "subobject of '%s'", gfc_current_intrinsic_arg
[0]->name
,
2879 gfc_current_intrinsic
, &a
->where
, sym
->name
);
2888 gfc_check_radix (gfc_expr
*x
)
2890 if (int_or_real_check (x
, 0) == FAILURE
)
2898 gfc_check_range (gfc_expr
*x
)
2900 if (numeric_check (x
, 0) == FAILURE
)
2908 gfc_check_rank (gfc_expr
*a ATTRIBUTE_UNUSED
)
2910 /* Any data object is allowed; a "data object" is a "constant (4.1.3),
2911 variable (6), or subobject of a constant (2.4.3.2.3)" (F2008, 1.3.45). */
2913 bool is_variable
= true;
2915 /* Functions returning pointers are regarded as variable, cf. F2008, R602. */
2916 if (a
->expr_type
== EXPR_FUNCTION
)
2917 is_variable
= a
->value
.function
.esym
2918 ? a
->value
.function
.esym
->result
->attr
.pointer
2919 : a
->symtree
->n
.sym
->result
->attr
.pointer
;
2921 if (a
->expr_type
== EXPR_OP
|| a
->expr_type
== EXPR_NULL
2922 || a
->expr_type
== EXPR_COMPCALL
|| a
->expr_type
== EXPR_PPC
2925 gfc_error ("The argument of the RANK intrinsic at %L must be a data "
2926 "object", &a
->where
);
2934 /* real, float, sngl. */
2936 gfc_check_real (gfc_expr
*a
, gfc_expr
*kind
)
2938 if (numeric_check (a
, 0) == FAILURE
)
2941 if (kind_check (kind
, 1, BT_REAL
) == FAILURE
)
2949 gfc_check_rename (gfc_expr
*path1
, gfc_expr
*path2
)
2951 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2953 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2956 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2958 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2966 gfc_check_rename_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2968 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2970 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2973 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2975 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2981 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2984 if (scalar_check (status
, 2) == FAILURE
)
2992 gfc_check_repeat (gfc_expr
*x
, gfc_expr
*y
)
2994 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
2997 if (scalar_check (x
, 0) == FAILURE
)
3000 if (type_check (y
, 0, BT_INTEGER
) == FAILURE
)
3003 if (scalar_check (y
, 1) == FAILURE
)
3011 gfc_check_reshape (gfc_expr
*source
, gfc_expr
*shape
,
3012 gfc_expr
*pad
, gfc_expr
*order
)
3018 if (array_check (source
, 0) == FAILURE
)
3021 if (rank_check (shape
, 1, 1) == FAILURE
)
3024 if (type_check (shape
, 1, BT_INTEGER
) == FAILURE
)
3027 if (gfc_array_size (shape
, &size
) != SUCCESS
)
3029 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
3030 "array of constant size", &shape
->where
);
3034 shape_size
= mpz_get_ui (size
);
3037 if (shape_size
<= 0)
3039 gfc_error ("'%s' argument of '%s' intrinsic at %L is empty",
3040 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3044 else if (shape_size
> GFC_MAX_DIMENSIONS
)
3046 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
3047 "than %d elements", &shape
->where
, GFC_MAX_DIMENSIONS
);
3050 else if (shape
->expr_type
== EXPR_ARRAY
)
3054 for (i
= 0; i
< shape_size
; ++i
)
3056 e
= gfc_constructor_lookup_expr (shape
->value
.constructor
, i
);
3057 if (e
->expr_type
!= EXPR_CONSTANT
)
3060 gfc_extract_int (e
, &extent
);
3063 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3064 "negative element (%d)",
3065 gfc_current_intrinsic_arg
[1]->name
,
3066 gfc_current_intrinsic
, &e
->where
, extent
);
3074 if (same_type_check (source
, 0, pad
, 2) == FAILURE
)
3077 if (array_check (pad
, 2) == FAILURE
)
3083 if (array_check (order
, 3) == FAILURE
)
3086 if (type_check (order
, 3, BT_INTEGER
) == FAILURE
)
3089 if (order
->expr_type
== EXPR_ARRAY
)
3091 int i
, order_size
, dim
, perm
[GFC_MAX_DIMENSIONS
];
3094 for (i
= 0; i
< GFC_MAX_DIMENSIONS
; ++i
)
3097 gfc_array_size (order
, &size
);
3098 order_size
= mpz_get_ui (size
);
3101 if (order_size
!= shape_size
)
3103 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3104 "has wrong number of elements (%d/%d)",
3105 gfc_current_intrinsic_arg
[3]->name
,
3106 gfc_current_intrinsic
, &order
->where
,
3107 order_size
, shape_size
);
3111 for (i
= 1; i
<= order_size
; ++i
)
3113 e
= gfc_constructor_lookup_expr (order
->value
.constructor
, i
-1);
3114 if (e
->expr_type
!= EXPR_CONSTANT
)
3117 gfc_extract_int (e
, &dim
);
3119 if (dim
< 1 || dim
> order_size
)
3121 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3122 "has out-of-range dimension (%d)",
3123 gfc_current_intrinsic_arg
[3]->name
,
3124 gfc_current_intrinsic
, &e
->where
, dim
);
3128 if (perm
[dim
-1] != 0)
3130 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3131 "invalid permutation of dimensions (dimension "
3133 gfc_current_intrinsic_arg
[3]->name
,
3134 gfc_current_intrinsic
, &e
->where
, dim
);
3143 if (pad
== NULL
&& shape
->expr_type
== EXPR_ARRAY
3144 && gfc_is_constant_expr (shape
)
3145 && !(source
->expr_type
== EXPR_VARIABLE
&& source
->symtree
->n
.sym
->as
3146 && source
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
))
3148 /* Check the match in size between source and destination. */
3149 if (gfc_array_size (source
, &nelems
) == SUCCESS
)
3155 mpz_init_set_ui (size
, 1);
3156 for (c
= gfc_constructor_first (shape
->value
.constructor
);
3157 c
; c
= gfc_constructor_next (c
))
3158 mpz_mul (size
, size
, c
->expr
->value
.integer
);
3160 test
= mpz_cmp (nelems
, size
) < 0 && mpz_cmp_ui (size
, 0) > 0;
3166 gfc_error ("Without padding, there are not enough elements "
3167 "in the intrinsic RESHAPE source at %L to match "
3168 "the shape", &source
->where
);
3179 gfc_check_same_type_as (gfc_expr
*a
, gfc_expr
*b
)
3182 if (a
->ts
.type
!= BT_DERIVED
&& a
->ts
.type
!= BT_CLASS
)
3184 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3185 "must be of a derived type",
3186 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3191 if (!gfc_type_is_extensible (a
->ts
.u
.derived
))
3193 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3194 "must be of an extensible type",
3195 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3200 if (b
->ts
.type
!= BT_DERIVED
&& b
->ts
.type
!= BT_CLASS
)
3202 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3203 "must be of a derived type",
3204 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3209 if (!gfc_type_is_extensible (b
->ts
.u
.derived
))
3211 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3212 "must be of an extensible type",
3213 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3223 gfc_check_scale (gfc_expr
*x
, gfc_expr
*i
)
3225 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
3228 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
3236 gfc_check_scan (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
3238 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
3241 if (type_check (y
, 1, BT_CHARACTER
) == FAILURE
)
3244 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
3247 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
3249 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
3250 "with KIND argument at %L",
3251 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
3254 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
3262 gfc_check_secnds (gfc_expr
*r
)
3264 if (type_check (r
, 0, BT_REAL
) == FAILURE
)
3267 if (kind_value_check (r
, 0, 4) == FAILURE
)
3270 if (scalar_check (r
, 0) == FAILURE
)
3278 gfc_check_selected_char_kind (gfc_expr
*name
)
3280 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3283 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3286 if (scalar_check (name
, 0) == FAILURE
)
3294 gfc_check_selected_int_kind (gfc_expr
*r
)
3296 if (type_check (r
, 0, BT_INTEGER
) == FAILURE
)
3299 if (scalar_check (r
, 0) == FAILURE
)
3307 gfc_check_selected_real_kind (gfc_expr
*p
, gfc_expr
*r
, gfc_expr
*radix
)
3309 if (p
== NULL
&& r
== NULL
3310 && gfc_notify_std (GFC_STD_F2008
, "Fortran 2008: SELECTED_REAL_KIND with"
3311 " neither 'P' nor 'R' argument at %L",
3312 gfc_current_intrinsic_where
) == FAILURE
)
3317 if (type_check (p
, 0, BT_INTEGER
) == FAILURE
)
3320 if (scalar_check (p
, 0) == FAILURE
)
3326 if (type_check (r
, 1, BT_INTEGER
) == FAILURE
)
3329 if (scalar_check (r
, 1) == FAILURE
)
3335 if (type_check (radix
, 1, BT_INTEGER
) == FAILURE
)
3338 if (scalar_check (radix
, 1) == FAILURE
)
3341 if (gfc_notify_std (GFC_STD_F2008
, "Fortran 2008: '%s' intrinsic with "
3342 "RADIX argument at %L", gfc_current_intrinsic
,
3343 &radix
->where
) == FAILURE
)
3352 gfc_check_set_exponent (gfc_expr
*x
, gfc_expr
*i
)
3354 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
3357 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
3365 gfc_check_shape (gfc_expr
*source
, gfc_expr
*kind
)
3369 if (source
->rank
== 0 || source
->expr_type
!= EXPR_VARIABLE
)
3372 ar
= gfc_find_array_ref (source
);
3374 if (ar
->as
&& ar
->as
->type
== AS_ASSUMED_SIZE
&& ar
->type
== AR_FULL
)
3376 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
3377 "an assumed size array", &source
->where
);
3381 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
3383 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
3384 "with KIND argument at %L",
3385 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
3393 gfc_check_shift (gfc_expr
*i
, gfc_expr
*shift
)
3395 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
3398 if (type_check (shift
, 0, BT_INTEGER
) == FAILURE
)
3401 if (nonnegative_check ("SHIFT", shift
) == FAILURE
)
3404 if (less_than_bitsize1 ("I", i
, "SHIFT", shift
, true) == FAILURE
)
3412 gfc_check_sign (gfc_expr
*a
, gfc_expr
*b
)
3414 if (int_or_real_check (a
, 0) == FAILURE
)
3417 if (same_type_check (a
, 0, b
, 1) == FAILURE
)
3425 gfc_check_size (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
3427 if (array_check (array
, 0) == FAILURE
)
3430 if (dim_check (dim
, 1, true) == FAILURE
)
3433 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
3436 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
3438 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
3439 "with KIND argument at %L",
3440 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
3449 gfc_check_sizeof (gfc_expr
*arg ATTRIBUTE_UNUSED
)
3456 gfc_check_c_sizeof (gfc_expr
*arg
)
3458 if (verify_c_interop (&arg
->ts
) != SUCCESS
)
3460 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an "
3461 "interoperable data entity",
3462 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3471 gfc_check_sleep_sub (gfc_expr
*seconds
)
3473 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
3476 if (scalar_check (seconds
, 0) == FAILURE
)
3483 gfc_check_sngl (gfc_expr
*a
)
3485 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
3488 if ((a
->ts
.kind
!= gfc_default_double_kind
)
3489 && gfc_notify_std (GFC_STD_GNU
, "GNU extension: non double precision "
3490 "REAL argument to %s intrinsic at %L",
3491 gfc_current_intrinsic
, &a
->where
) == FAILURE
)
3498 gfc_check_spread (gfc_expr
*source
, gfc_expr
*dim
, gfc_expr
*ncopies
)
3500 if (source
->rank
>= GFC_MAX_DIMENSIONS
)
3502 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
3503 "than rank %d", gfc_current_intrinsic_arg
[0]->name
,
3504 gfc_current_intrinsic
, &source
->where
, GFC_MAX_DIMENSIONS
);
3512 if (dim_check (dim
, 1, false) == FAILURE
)
3515 /* dim_rank_check() does not apply here. */
3517 && dim
->expr_type
== EXPR_CONSTANT
3518 && (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
3519 || mpz_cmp_ui (dim
->value
.integer
, source
->rank
+ 1) > 0))
3521 gfc_error ("'%s' argument of '%s' intrinsic at %L is not a valid "
3522 "dimension index", gfc_current_intrinsic_arg
[1]->name
,
3523 gfc_current_intrinsic
, &dim
->where
);
3527 if (type_check (ncopies
, 2, BT_INTEGER
) == FAILURE
)
3530 if (scalar_check (ncopies
, 2) == FAILURE
)
3537 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
3541 gfc_check_fgetputc_sub (gfc_expr
*unit
, gfc_expr
*c
, gfc_expr
*status
)
3543 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3546 if (scalar_check (unit
, 0) == FAILURE
)
3549 if (type_check (c
, 1, BT_CHARACTER
) == FAILURE
)
3551 if (kind_value_check (c
, 1, gfc_default_character_kind
) == FAILURE
)
3557 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
3558 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
3559 || scalar_check (status
, 2) == FAILURE
)
3567 gfc_check_fgetputc (gfc_expr
*unit
, gfc_expr
*c
)
3569 return gfc_check_fgetputc_sub (unit
, c
, NULL
);
3574 gfc_check_fgetput_sub (gfc_expr
*c
, gfc_expr
*status
)
3576 if (type_check (c
, 0, BT_CHARACTER
) == FAILURE
)
3578 if (kind_value_check (c
, 0, gfc_default_character_kind
) == FAILURE
)
3584 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
3585 || kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
3586 || scalar_check (status
, 1) == FAILURE
)
3594 gfc_check_fgetput (gfc_expr
*c
)
3596 return gfc_check_fgetput_sub (c
, NULL
);
3601 gfc_check_fseek_sub (gfc_expr
*unit
, gfc_expr
*offset
, gfc_expr
*whence
, gfc_expr
*status
)
3603 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3606 if (scalar_check (unit
, 0) == FAILURE
)
3609 if (type_check (offset
, 1, BT_INTEGER
) == FAILURE
)
3612 if (scalar_check (offset
, 1) == FAILURE
)
3615 if (type_check (whence
, 2, BT_INTEGER
) == FAILURE
)
3618 if (scalar_check (whence
, 2) == FAILURE
)
3624 if (type_check (status
, 3, BT_INTEGER
) == FAILURE
)
3627 if (kind_value_check (status
, 3, 4) == FAILURE
)
3630 if (scalar_check (status
, 3) == FAILURE
)
3639 gfc_check_fstat (gfc_expr
*unit
, gfc_expr
*array
)
3641 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3644 if (scalar_check (unit
, 0) == FAILURE
)
3647 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3648 || kind_value_check (unit
, 0, gfc_default_integer_kind
) == FAILURE
)
3651 if (array_check (array
, 1) == FAILURE
)
3659 gfc_check_fstat_sub (gfc_expr
*unit
, gfc_expr
*array
, gfc_expr
*status
)
3661 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3664 if (scalar_check (unit
, 0) == FAILURE
)
3667 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3668 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3671 if (array_check (array
, 1) == FAILURE
)
3677 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
3678 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
3681 if (scalar_check (status
, 2) == FAILURE
)
3689 gfc_check_ftell (gfc_expr
*unit
)
3691 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3694 if (scalar_check (unit
, 0) == FAILURE
)
3702 gfc_check_ftell_sub (gfc_expr
*unit
, gfc_expr
*offset
)
3704 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3707 if (scalar_check (unit
, 0) == FAILURE
)
3710 if (type_check (offset
, 1, BT_INTEGER
) == FAILURE
)
3713 if (scalar_check (offset
, 1) == FAILURE
)
3721 gfc_check_stat (gfc_expr
*name
, gfc_expr
*array
)
3723 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3725 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3728 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3729 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3732 if (array_check (array
, 1) == FAILURE
)
3740 gfc_check_stat_sub (gfc_expr
*name
, gfc_expr
*array
, gfc_expr
*status
)
3742 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3744 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3747 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3748 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3751 if (array_check (array
, 1) == FAILURE
)
3757 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
3758 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3761 if (scalar_check (status
, 2) == FAILURE
)
3769 gfc_check_image_index (gfc_expr
*coarray
, gfc_expr
*sub
)
3773 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
3775 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
3779 if (coarray_check (coarray
, 0) == FAILURE
)
3784 gfc_error ("%s argument to IMAGE_INDEX must be a rank one array at %L",
3785 gfc_current_intrinsic_arg
[1]->name
, &sub
->where
);
3789 if (gfc_array_size (sub
, &nelems
) == SUCCESS
)
3791 int corank
= gfc_get_corank (coarray
);
3793 if (mpz_cmp_ui (nelems
, corank
) != 0)
3795 gfc_error ("The number of array elements of the SUB argument to "
3796 "IMAGE_INDEX at %L shall be %d (corank) not %d",
3797 &sub
->where
, corank
, (int) mpz_get_si (nelems
));
3809 gfc_check_this_image (gfc_expr
*coarray
, gfc_expr
*dim
)
3811 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
3813 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
3817 if (dim
!= NULL
&& coarray
== NULL
)
3819 gfc_error ("DIM argument without ARRAY argument not allowed for THIS_IMAGE "
3820 "intrinsic at %L", &dim
->where
);
3824 if (coarray
== NULL
)
3827 if (coarray_check (coarray
, 0) == FAILURE
)
3832 if (dim_check (dim
, 1, false) == FAILURE
)
3835 if (dim_corank_check (dim
, coarray
) == FAILURE
)
3842 /* Calculate the sizes for transfer, used by gfc_check_transfer and also
3843 by gfc_simplify_transfer. Return FAILURE if we cannot do so. */
3846 gfc_calculate_transfer_sizes (gfc_expr
*source
, gfc_expr
*mold
, gfc_expr
*size
,
3847 size_t *source_size
, size_t *result_size
,
3848 size_t *result_length_p
)
3851 size_t result_elt_size
;
3853 gfc_expr
*mold_element
;
3855 if (source
->expr_type
== EXPR_FUNCTION
)
3858 /* Calculate the size of the source. */
3859 if (source
->expr_type
== EXPR_ARRAY
3860 && gfc_array_size (source
, &tmp
) == FAILURE
)
3863 *source_size
= gfc_target_expr_size (source
);
3865 mold_element
= mold
->expr_type
== EXPR_ARRAY
3866 ? gfc_constructor_first (mold
->value
.constructor
)->expr
3869 /* Determine the size of the element. */
3870 result_elt_size
= gfc_target_expr_size (mold_element
);
3871 if (result_elt_size
== 0)
3874 if (mold
->expr_type
== EXPR_ARRAY
|| mold
->rank
|| size
)
3879 result_length
= (size_t)mpz_get_ui (size
->value
.integer
);
3882 result_length
= *source_size
/ result_elt_size
;
3883 if (result_length
* result_elt_size
< *source_size
)
3887 *result_size
= result_length
* result_elt_size
;
3888 if (result_length_p
)
3889 *result_length_p
= result_length
;
3892 *result_size
= result_elt_size
;
3899 gfc_check_transfer (gfc_expr
*source
, gfc_expr
*mold
, gfc_expr
*size
)
3904 if (mold
->ts
.type
== BT_HOLLERITH
)
3906 gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
3907 &mold
->where
, gfc_basic_typename (BT_HOLLERITH
));
3913 if (type_check (size
, 2, BT_INTEGER
) == FAILURE
)
3916 if (scalar_check (size
, 2) == FAILURE
)
3919 if (nonoptional_check (size
, 2) == FAILURE
)
3923 if (!gfc_option
.warn_surprising
)
3926 /* If we can't calculate the sizes, we cannot check any more.
3927 Return SUCCESS for that case. */
3929 if (gfc_calculate_transfer_sizes (source
, mold
, size
, &source_size
,
3930 &result_size
, NULL
) == FAILURE
)
3933 if (source_size
< result_size
)
3934 gfc_warning("Intrinsic TRANSFER at %L has partly undefined result: "
3935 "source size %ld < result size %ld", &source
->where
,
3936 (long) source_size
, (long) result_size
);
3943 gfc_check_transpose (gfc_expr
*matrix
)
3945 if (rank_check (matrix
, 0, 2) == FAILURE
)
3953 gfc_check_ubound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
3955 if (array_check (array
, 0) == FAILURE
)
3958 if (dim_check (dim
, 1, false) == FAILURE
)
3961 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
3964 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
3966 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
3967 "with KIND argument at %L",
3968 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
3976 gfc_check_ucobound (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*kind
)
3978 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
3980 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
3984 if (coarray_check (coarray
, 0) == FAILURE
)
3989 if (dim_check (dim
, 1, false) == FAILURE
)
3992 if (dim_corank_check (dim
, coarray
) == FAILURE
)
3996 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
4004 gfc_check_unpack (gfc_expr
*vector
, gfc_expr
*mask
, gfc_expr
*field
)
4008 if (rank_check (vector
, 0, 1) == FAILURE
)
4011 if (array_check (mask
, 1) == FAILURE
)
4014 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
4017 if (same_type_check (vector
, 0, field
, 2) == FAILURE
)
4020 if (mask
->expr_type
== EXPR_ARRAY
4021 && gfc_array_size (vector
, &vector_size
) == SUCCESS
)
4023 int mask_true_count
= 0;
4024 gfc_constructor
*mask_ctor
;
4025 mask_ctor
= gfc_constructor_first (mask
->value
.constructor
);
4028 if (mask_ctor
->expr
->expr_type
!= EXPR_CONSTANT
)
4030 mask_true_count
= 0;
4034 if (mask_ctor
->expr
->value
.logical
)
4037 mask_ctor
= gfc_constructor_next (mask_ctor
);
4040 if (mpz_get_si (vector_size
) < mask_true_count
)
4042 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
4043 "provide at least as many elements as there "
4044 "are .TRUE. values in '%s' (%ld/%d)",
4045 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4046 &vector
->where
, gfc_current_intrinsic_arg
[1]->name
,
4047 mpz_get_si (vector_size
), mask_true_count
);
4051 mpz_clear (vector_size
);
4054 if (mask
->rank
!= field
->rank
&& field
->rank
!= 0)
4056 gfc_error ("'%s' argument of '%s' intrinsic at %L must have "
4057 "the same rank as '%s' or be a scalar",
4058 gfc_current_intrinsic_arg
[2]->name
, gfc_current_intrinsic
,
4059 &field
->where
, gfc_current_intrinsic_arg
[1]->name
);
4063 if (mask
->rank
== field
->rank
)
4066 for (i
= 0; i
< field
->rank
; i
++)
4067 if (! identical_dimen_shape (mask
, i
, field
, i
))
4069 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L "
4070 "must have identical shape.",
4071 gfc_current_intrinsic_arg
[2]->name
,
4072 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
4082 gfc_check_verify (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
4084 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
4087 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
4090 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
4093 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
4095 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
4096 "with KIND argument at %L",
4097 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
4105 gfc_check_trim (gfc_expr
*x
)
4107 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
4110 if (scalar_check (x
, 0) == FAILURE
)
4118 gfc_check_ttynam (gfc_expr
*unit
)
4120 if (scalar_check (unit
, 0) == FAILURE
)
4123 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
4130 /* Common check function for the half a dozen intrinsics that have a
4131 single real argument. */
4134 gfc_check_x (gfc_expr
*x
)
4136 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
4143 /************* Check functions for intrinsic subroutines *************/
4146 gfc_check_cpu_time (gfc_expr
*time
)
4148 if (scalar_check (time
, 0) == FAILURE
)
4151 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
4154 if (variable_check (time
, 0, false) == FAILURE
)
4162 gfc_check_date_and_time (gfc_expr
*date
, gfc_expr
*time
,
4163 gfc_expr
*zone
, gfc_expr
*values
)
4167 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
4169 if (kind_value_check (date
, 0, gfc_default_character_kind
) == FAILURE
)
4171 if (scalar_check (date
, 0) == FAILURE
)
4173 if (variable_check (date
, 0, false) == FAILURE
)
4179 if (type_check (time
, 1, BT_CHARACTER
) == FAILURE
)
4181 if (kind_value_check (time
, 1, gfc_default_character_kind
) == FAILURE
)
4183 if (scalar_check (time
, 1) == FAILURE
)
4185 if (variable_check (time
, 1, false) == FAILURE
)
4191 if (type_check (zone
, 2, BT_CHARACTER
) == FAILURE
)
4193 if (kind_value_check (zone
, 2, gfc_default_character_kind
) == FAILURE
)
4195 if (scalar_check (zone
, 2) == FAILURE
)
4197 if (variable_check (zone
, 2, false) == FAILURE
)
4203 if (type_check (values
, 3, BT_INTEGER
) == FAILURE
)
4205 if (array_check (values
, 3) == FAILURE
)
4207 if (rank_check (values
, 3, 1) == FAILURE
)
4209 if (variable_check (values
, 3, false) == FAILURE
)
4218 gfc_check_mvbits (gfc_expr
*from
, gfc_expr
*frompos
, gfc_expr
*len
,
4219 gfc_expr
*to
, gfc_expr
*topos
)
4221 if (type_check (from
, 0, BT_INTEGER
) == FAILURE
)
4224 if (type_check (frompos
, 1, BT_INTEGER
) == FAILURE
)
4227 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
4230 if (same_type_check (from
, 0, to
, 3) == FAILURE
)
4233 if (variable_check (to
, 3, false) == FAILURE
)
4236 if (type_check (topos
, 4, BT_INTEGER
) == FAILURE
)
4239 if (nonnegative_check ("frompos", frompos
) == FAILURE
)
4242 if (nonnegative_check ("topos", topos
) == FAILURE
)
4245 if (nonnegative_check ("len", len
) == FAILURE
)
4248 if (less_than_bitsize2 ("from", from
, "frompos", frompos
, "len", len
)
4252 if (less_than_bitsize2 ("to", to
, "topos", topos
, "len", len
) == FAILURE
)
4260 gfc_check_random_number (gfc_expr
*harvest
)
4262 if (type_check (harvest
, 0, BT_REAL
) == FAILURE
)
4265 if (variable_check (harvest
, 0, false) == FAILURE
)
4273 gfc_check_random_seed (gfc_expr
*size
, gfc_expr
*put
, gfc_expr
*get
)
4275 unsigned int nargs
= 0, kiss_size
;
4276 locus
*where
= NULL
;
4277 mpz_t put_size
, get_size
;
4278 bool have_gfc_real_16
; /* Try and mimic HAVE_GFC_REAL_16 in libgfortran. */
4280 have_gfc_real_16
= gfc_validate_kind (BT_REAL
, 16, true) != -1;
4282 /* Keep the number of bytes in sync with kiss_size in
4283 libgfortran/intrinsics/random.c. */
4284 kiss_size
= (have_gfc_real_16
? 48 : 32) / gfc_default_integer_kind
;
4288 if (size
->expr_type
!= EXPR_VARIABLE
4289 || !size
->symtree
->n
.sym
->attr
.optional
)
4292 if (scalar_check (size
, 0) == FAILURE
)
4295 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
4298 if (variable_check (size
, 0, false) == FAILURE
)
4301 if (kind_value_check (size
, 0, gfc_default_integer_kind
) == FAILURE
)
4307 if (put
->expr_type
!= EXPR_VARIABLE
4308 || !put
->symtree
->n
.sym
->attr
.optional
)
4311 where
= &put
->where
;
4314 if (array_check (put
, 1) == FAILURE
)
4317 if (rank_check (put
, 1, 1) == FAILURE
)
4320 if (type_check (put
, 1, BT_INTEGER
) == FAILURE
)
4323 if (kind_value_check (put
, 1, gfc_default_integer_kind
) == FAILURE
)
4326 if (gfc_array_size (put
, &put_size
) == SUCCESS
4327 && mpz_get_ui (put_size
) < kiss_size
)
4328 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
4329 "too small (%i/%i)",
4330 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
4331 where
, (int) mpz_get_ui (put_size
), kiss_size
);
4336 if (get
->expr_type
!= EXPR_VARIABLE
4337 || !get
->symtree
->n
.sym
->attr
.optional
)
4340 where
= &get
->where
;
4343 if (array_check (get
, 2) == FAILURE
)
4346 if (rank_check (get
, 2, 1) == FAILURE
)
4349 if (type_check (get
, 2, BT_INTEGER
) == FAILURE
)
4352 if (variable_check (get
, 2, false) == FAILURE
)
4355 if (kind_value_check (get
, 2, gfc_default_integer_kind
) == FAILURE
)
4358 if (gfc_array_size (get
, &get_size
) == SUCCESS
4359 && mpz_get_ui (get_size
) < kiss_size
)
4360 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
4361 "too small (%i/%i)",
4362 gfc_current_intrinsic_arg
[2]->name
, gfc_current_intrinsic
,
4363 where
, (int) mpz_get_ui (get_size
), kiss_size
);
4366 /* RANDOM_SEED may not have more than one non-optional argument. */
4368 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
, where
);
4375 gfc_check_second_sub (gfc_expr
*time
)
4377 if (scalar_check (time
, 0) == FAILURE
)
4380 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
4383 if (kind_value_check(time
, 0, 4) == FAILURE
)
4390 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
4391 count, count_rate, and count_max are all optional arguments */
4394 gfc_check_system_clock (gfc_expr
*count
, gfc_expr
*count_rate
,
4395 gfc_expr
*count_max
)
4399 if (scalar_check (count
, 0) == FAILURE
)
4402 if (type_check (count
, 0, BT_INTEGER
) == FAILURE
)
4405 if (variable_check (count
, 0, false) == FAILURE
)
4409 if (count_rate
!= NULL
)
4411 if (scalar_check (count_rate
, 1) == FAILURE
)
4414 if (type_check (count_rate
, 1, BT_INTEGER
) == FAILURE
)
4417 if (variable_check (count_rate
, 1, false) == FAILURE
)
4421 && same_type_check (count
, 0, count_rate
, 1) == FAILURE
)
4426 if (count_max
!= NULL
)
4428 if (scalar_check (count_max
, 2) == FAILURE
)
4431 if (type_check (count_max
, 2, BT_INTEGER
) == FAILURE
)
4434 if (variable_check (count_max
, 2, false) == FAILURE
)
4438 && same_type_check (count
, 0, count_max
, 2) == FAILURE
)
4441 if (count_rate
!= NULL
4442 && same_type_check (count_rate
, 1, count_max
, 2) == FAILURE
)
4451 gfc_check_irand (gfc_expr
*x
)
4456 if (scalar_check (x
, 0) == FAILURE
)
4459 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
4462 if (kind_value_check(x
, 0, 4) == FAILURE
)
4470 gfc_check_alarm_sub (gfc_expr
*seconds
, gfc_expr
*handler
, gfc_expr
*status
)
4472 if (scalar_check (seconds
, 0) == FAILURE
)
4474 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
4477 if (int_or_proc_check (handler
, 1) == FAILURE
)
4479 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
4485 if (scalar_check (status
, 2) == FAILURE
)
4487 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
4489 if (kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
4497 gfc_check_rand (gfc_expr
*x
)
4502 if (scalar_check (x
, 0) == FAILURE
)
4505 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
4508 if (kind_value_check(x
, 0, 4) == FAILURE
)
4516 gfc_check_srand (gfc_expr
*x
)
4518 if (scalar_check (x
, 0) == FAILURE
)
4521 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
4524 if (kind_value_check(x
, 0, 4) == FAILURE
)
4532 gfc_check_ctime_sub (gfc_expr
*time
, gfc_expr
*result
)
4534 if (scalar_check (time
, 0) == FAILURE
)
4536 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
4539 if (type_check (result
, 1, BT_CHARACTER
) == FAILURE
)
4541 if (kind_value_check (result
, 1, gfc_default_character_kind
) == FAILURE
)
4549 gfc_check_dtime_etime (gfc_expr
*x
)
4551 if (array_check (x
, 0) == FAILURE
)
4554 if (rank_check (x
, 0, 1) == FAILURE
)
4557 if (variable_check (x
, 0, false) == FAILURE
)
4560 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
4563 if (kind_value_check(x
, 0, 4) == FAILURE
)
4571 gfc_check_dtime_etime_sub (gfc_expr
*values
, gfc_expr
*time
)
4573 if (array_check (values
, 0) == FAILURE
)
4576 if (rank_check (values
, 0, 1) == FAILURE
)
4579 if (variable_check (values
, 0, false) == FAILURE
)
4582 if (type_check (values
, 0, BT_REAL
) == FAILURE
)
4585 if (kind_value_check(values
, 0, 4) == FAILURE
)
4588 if (scalar_check (time
, 1) == FAILURE
)
4591 if (type_check (time
, 1, BT_REAL
) == FAILURE
)
4594 if (kind_value_check(time
, 1, 4) == FAILURE
)
4602 gfc_check_fdate_sub (gfc_expr
*date
)
4604 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
4606 if (kind_value_check (date
, 0, gfc_default_character_kind
) == FAILURE
)
4614 gfc_check_gerror (gfc_expr
*msg
)
4616 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
4618 if (kind_value_check (msg
, 0, gfc_default_character_kind
) == FAILURE
)
4626 gfc_check_getcwd_sub (gfc_expr
*cwd
, gfc_expr
*status
)
4628 if (type_check (cwd
, 0, BT_CHARACTER
) == FAILURE
)
4630 if (kind_value_check (cwd
, 0, gfc_default_character_kind
) == FAILURE
)
4636 if (scalar_check (status
, 1) == FAILURE
)
4639 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
4647 gfc_check_getarg (gfc_expr
*pos
, gfc_expr
*value
)
4649 if (type_check (pos
, 0, BT_INTEGER
) == FAILURE
)
4652 if (pos
->ts
.kind
> gfc_default_integer_kind
)
4654 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
4655 "not wider than the default kind (%d)",
4656 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4657 &pos
->where
, gfc_default_integer_kind
);
4661 if (type_check (value
, 1, BT_CHARACTER
) == FAILURE
)
4663 if (kind_value_check (value
, 1, gfc_default_character_kind
) == FAILURE
)
4671 gfc_check_getlog (gfc_expr
*msg
)
4673 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
4675 if (kind_value_check (msg
, 0, gfc_default_character_kind
) == FAILURE
)
4683 gfc_check_exit (gfc_expr
*status
)
4688 if (type_check (status
, 0, BT_INTEGER
) == FAILURE
)
4691 if (scalar_check (status
, 0) == FAILURE
)
4699 gfc_check_flush (gfc_expr
*unit
)
4704 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
4707 if (scalar_check (unit
, 0) == FAILURE
)
4715 gfc_check_free (gfc_expr
*i
)
4717 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
4720 if (scalar_check (i
, 0) == FAILURE
)
4728 gfc_check_hostnm (gfc_expr
*name
)
4730 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
4732 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
4740 gfc_check_hostnm_sub (gfc_expr
*name
, gfc_expr
*status
)
4742 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
4744 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
4750 if (scalar_check (status
, 1) == FAILURE
)
4753 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
4761 gfc_check_itime_idate (gfc_expr
*values
)
4763 if (array_check (values
, 0) == FAILURE
)
4766 if (rank_check (values
, 0, 1) == FAILURE
)
4769 if (variable_check (values
, 0, false) == FAILURE
)
4772 if (type_check (values
, 0, BT_INTEGER
) == FAILURE
)
4775 if (kind_value_check(values
, 0, gfc_default_integer_kind
) == FAILURE
)
4783 gfc_check_ltime_gmtime (gfc_expr
*time
, gfc_expr
*values
)
4785 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
4788 if (kind_value_check(time
, 0, gfc_default_integer_kind
) == FAILURE
)
4791 if (scalar_check (time
, 0) == FAILURE
)
4794 if (array_check (values
, 1) == FAILURE
)
4797 if (rank_check (values
, 1, 1) == FAILURE
)
4800 if (variable_check (values
, 1, false) == FAILURE
)
4803 if (type_check (values
, 1, BT_INTEGER
) == FAILURE
)
4806 if (kind_value_check(values
, 1, gfc_default_integer_kind
) == FAILURE
)
4814 gfc_check_ttynam_sub (gfc_expr
*unit
, gfc_expr
*name
)
4816 if (scalar_check (unit
, 0) == FAILURE
)
4819 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
4822 if (type_check (name
, 1, BT_CHARACTER
) == FAILURE
)
4824 if (kind_value_check (name
, 1, gfc_default_character_kind
) == FAILURE
)
4832 gfc_check_isatty (gfc_expr
*unit
)
4837 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
4840 if (scalar_check (unit
, 0) == FAILURE
)
4848 gfc_check_isnan (gfc_expr
*x
)
4850 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
4858 gfc_check_perror (gfc_expr
*string
)
4860 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
)
4862 if (kind_value_check (string
, 0, gfc_default_character_kind
) == FAILURE
)
4870 gfc_check_umask (gfc_expr
*mask
)
4872 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
4875 if (scalar_check (mask
, 0) == FAILURE
)
4883 gfc_check_umask_sub (gfc_expr
*mask
, gfc_expr
*old
)
4885 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
4888 if (scalar_check (mask
, 0) == FAILURE
)
4894 if (scalar_check (old
, 1) == FAILURE
)
4897 if (type_check (old
, 1, BT_INTEGER
) == FAILURE
)
4905 gfc_check_unlink (gfc_expr
*name
)
4907 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
4909 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
4917 gfc_check_unlink_sub (gfc_expr
*name
, gfc_expr
*status
)
4919 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
4921 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
4927 if (scalar_check (status
, 1) == FAILURE
)
4930 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
4938 gfc_check_signal (gfc_expr
*number
, gfc_expr
*handler
)
4940 if (scalar_check (number
, 0) == FAILURE
)
4942 if (type_check (number
, 0, BT_INTEGER
) == FAILURE
)
4945 if (int_or_proc_check (handler
, 1) == FAILURE
)
4947 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
4955 gfc_check_signal_sub (gfc_expr
*number
, gfc_expr
*handler
, gfc_expr
*status
)
4957 if (scalar_check (number
, 0) == FAILURE
)
4959 if (type_check (number
, 0, BT_INTEGER
) == FAILURE
)
4962 if (int_or_proc_check (handler
, 1) == FAILURE
)
4964 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
4970 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
4972 if (scalar_check (status
, 2) == FAILURE
)
4980 gfc_check_system_sub (gfc_expr
*cmd
, gfc_expr
*status
)
4982 if (type_check (cmd
, 0, BT_CHARACTER
) == FAILURE
)
4984 if (kind_value_check (cmd
, 0, gfc_default_character_kind
) == FAILURE
)
4987 if (scalar_check (status
, 1) == FAILURE
)
4990 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
4993 if (kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
)
5000 /* This is used for the GNU intrinsics AND, OR and XOR. */
5002 gfc_check_and (gfc_expr
*i
, gfc_expr
*j
)
5004 if (i
->ts
.type
!= BT_INTEGER
&& i
->ts
.type
!= BT_LOGICAL
)
5006 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
5007 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
5008 gfc_current_intrinsic
, &i
->where
);
5012 if (j
->ts
.type
!= BT_INTEGER
&& j
->ts
.type
!= BT_LOGICAL
)
5014 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
5015 "or LOGICAL", gfc_current_intrinsic_arg
[1]->name
,
5016 gfc_current_intrinsic
, &j
->where
);
5020 if (i
->ts
.type
!= j
->ts
.type
)
5022 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
5023 "have the same type", gfc_current_intrinsic_arg
[0]->name
,
5024 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
5029 if (scalar_check (i
, 0) == FAILURE
)
5032 if (scalar_check (j
, 1) == FAILURE
)
5040 gfc_check_storage_size (gfc_expr
*a ATTRIBUTE_UNUSED
, gfc_expr
*kind
)
5045 if (type_check (kind
, 1, BT_INTEGER
) == FAILURE
)
5048 if (scalar_check (kind
, 1) == FAILURE
)
5051 if (kind
->expr_type
!= EXPR_CONSTANT
)
5053 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
5054 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,