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
)
516 gcc_assert (array
->expr_type
== EXPR_VARIABLE
);
518 if (dim
->expr_type
!= EXPR_CONSTANT
)
521 corank
= gfc_get_corank (array
);
523 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
524 || mpz_cmp_ui (dim
->value
.integer
, corank
) > 0)
526 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
527 "codimension index", gfc_current_intrinsic
, &dim
->where
);
536 /* If a DIM parameter is a constant, make sure that it is greater than
537 zero and less than or equal to the rank of the given array. If
538 allow_assumed is zero then dim must be less than the rank of the array
539 for assumed size arrays. */
542 dim_rank_check (gfc_expr
*dim
, gfc_expr
*array
, int allow_assumed
)
550 if (dim
->expr_type
!= EXPR_CONSTANT
)
553 if (array
->expr_type
== EXPR_FUNCTION
&& array
->value
.function
.isym
554 && array
->value
.function
.isym
->id
== GFC_ISYM_SPREAD
)
555 rank
= array
->rank
+ 1;
559 if (array
->expr_type
== EXPR_VARIABLE
)
561 ar
= gfc_find_array_ref (array
);
562 if (ar
->as
->type
== AS_ASSUMED_SIZE
564 && ar
->type
!= AR_ELEMENT
565 && ar
->type
!= AR_SECTION
)
569 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
570 || mpz_cmp_ui (dim
->value
.integer
, rank
) > 0)
572 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
573 "dimension index", gfc_current_intrinsic
, &dim
->where
);
582 /* Compare the size of a along dimension ai with the size of b along
583 dimension bi, returning 0 if they are known not to be identical,
584 and 1 if they are identical, or if this cannot be determined. */
587 identical_dimen_shape (gfc_expr
*a
, int ai
, gfc_expr
*b
, int bi
)
589 mpz_t a_size
, b_size
;
592 gcc_assert (a
->rank
> ai
);
593 gcc_assert (b
->rank
> bi
);
597 if (gfc_array_dimen_size (a
, ai
, &a_size
) == SUCCESS
)
599 if (gfc_array_dimen_size (b
, bi
, &b_size
) == SUCCESS
)
601 if (mpz_cmp (a_size
, b_size
) != 0)
611 /* Calculate the length of a character variable, including substrings.
612 Strip away parentheses if necessary. Return -1 if no length could
616 gfc_var_strlen (const gfc_expr
*a
)
620 while (a
->expr_type
== EXPR_OP
&& a
->value
.op
.op
== INTRINSIC_PARENTHESES
)
623 for (ra
= a
->ref
; ra
!= NULL
&& ra
->type
!= REF_SUBSTRING
; ra
= ra
->next
)
630 if (ra
->u
.ss
.start
->expr_type
== EXPR_CONSTANT
631 && ra
->u
.ss
.end
->expr_type
== EXPR_CONSTANT
)
633 start_a
= mpz_get_si (ra
->u
.ss
.start
->value
.integer
);
634 end_a
= mpz_get_si (ra
->u
.ss
.end
->value
.integer
);
635 return end_a
- start_a
+ 1;
637 else if (gfc_dep_compare_expr (ra
->u
.ss
.start
, ra
->u
.ss
.end
) == 0)
643 if (a
->ts
.u
.cl
&& a
->ts
.u
.cl
->length
644 && a
->ts
.u
.cl
->length
->expr_type
== EXPR_CONSTANT
)
645 return mpz_get_si (a
->ts
.u
.cl
->length
->value
.integer
);
646 else if (a
->expr_type
== EXPR_CONSTANT
647 && (a
->ts
.u
.cl
== NULL
|| a
->ts
.u
.cl
->length
== NULL
))
648 return a
->value
.character
.length
;
654 /* Check whether two character expressions have the same length;
655 returns SUCCESS if they have or if the length cannot be determined,
656 otherwise return FAILURE and raise a gfc_error. */
659 gfc_check_same_strlen (const gfc_expr
*a
, const gfc_expr
*b
, const char *name
)
663 len_a
= gfc_var_strlen(a
);
664 len_b
= gfc_var_strlen(b
);
666 if (len_a
== -1 || len_b
== -1 || len_a
== len_b
)
670 gfc_error ("Unequal character lengths (%ld/%ld) in %s at %L",
671 len_a
, len_b
, name
, &a
->where
);
677 /***** Check functions *****/
679 /* Check subroutine suitable for intrinsics taking a real argument and
680 a kind argument for the result. */
683 check_a_kind (gfc_expr
*a
, gfc_expr
*kind
, bt type
)
685 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
687 if (kind_check (kind
, 1, type
) == FAILURE
)
694 /* Check subroutine suitable for ceiling, floor and nint. */
697 gfc_check_a_ikind (gfc_expr
*a
, gfc_expr
*kind
)
699 return check_a_kind (a
, kind
, BT_INTEGER
);
703 /* Check subroutine suitable for aint, anint. */
706 gfc_check_a_xkind (gfc_expr
*a
, gfc_expr
*kind
)
708 return check_a_kind (a
, kind
, BT_REAL
);
713 gfc_check_abs (gfc_expr
*a
)
715 if (numeric_check (a
, 0) == FAILURE
)
723 gfc_check_achar (gfc_expr
*a
, gfc_expr
*kind
)
725 if (type_check (a
, 0, BT_INTEGER
) == FAILURE
)
727 if (kind_check (kind
, 1, BT_CHARACTER
) == FAILURE
)
735 gfc_check_access_func (gfc_expr
*name
, gfc_expr
*mode
)
737 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
738 || scalar_check (name
, 0) == FAILURE
)
740 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
743 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
744 || scalar_check (mode
, 1) == FAILURE
)
746 if (kind_value_check (mode
, 1, gfc_default_character_kind
) == FAILURE
)
754 gfc_check_all_any (gfc_expr
*mask
, gfc_expr
*dim
)
756 if (logical_array_check (mask
, 0) == FAILURE
)
759 if (dim_check (dim
, 1, false) == FAILURE
)
762 if (dim_rank_check (dim
, mask
, 0) == FAILURE
)
770 gfc_check_allocated (gfc_expr
*array
)
772 if (variable_check (array
, 0, false) == FAILURE
)
774 if (allocatable_check (array
, 0) == FAILURE
)
781 /* Common check function where the first argument must be real or
782 integer and the second argument must be the same as the first. */
785 gfc_check_a_p (gfc_expr
*a
, gfc_expr
*p
)
787 if (int_or_real_check (a
, 0) == FAILURE
)
790 if (a
->ts
.type
!= p
->ts
.type
)
792 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
793 "have the same type", gfc_current_intrinsic_arg
[0]->name
,
794 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
799 if (a
->ts
.kind
!= p
->ts
.kind
)
801 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
802 &p
->where
) == FAILURE
)
811 gfc_check_x_yd (gfc_expr
*x
, gfc_expr
*y
)
813 if (double_check (x
, 0) == FAILURE
|| double_check (y
, 1) == FAILURE
)
821 gfc_check_associated (gfc_expr
*pointer
, gfc_expr
*target
)
823 symbol_attribute attr1
, attr2
;
828 where
= &pointer
->where
;
830 if (pointer
->expr_type
== EXPR_VARIABLE
|| pointer
->expr_type
== EXPR_FUNCTION
)
831 attr1
= gfc_expr_attr (pointer
);
832 else if (pointer
->expr_type
== EXPR_NULL
)
835 gcc_assert (0); /* Pointer must be a variable or a function. */
837 if (!attr1
.pointer
&& !attr1
.proc_pointer
)
839 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
840 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
846 if (attr1
.pointer
&& gfc_is_coindexed (pointer
))
848 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
849 "conindexed", gfc_current_intrinsic_arg
[0]->name
,
850 gfc_current_intrinsic
, &pointer
->where
);
854 /* Target argument is optional. */
858 where
= &target
->where
;
859 if (target
->expr_type
== EXPR_NULL
)
862 if (target
->expr_type
== EXPR_VARIABLE
|| target
->expr_type
== EXPR_FUNCTION
)
863 attr2
= gfc_expr_attr (target
);
866 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
867 "or target VARIABLE or FUNCTION",
868 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
873 if (attr1
.pointer
&& !attr2
.pointer
&& !attr2
.target
)
875 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
876 "or a TARGET", gfc_current_intrinsic_arg
[1]->name
,
877 gfc_current_intrinsic
, &target
->where
);
882 if (attr1
.pointer
&& gfc_is_coindexed (target
))
884 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
885 "conindexed", gfc_current_intrinsic_arg
[1]->name
,
886 gfc_current_intrinsic
, &target
->where
);
891 if (same_type_check (pointer
, 0, target
, 1) == FAILURE
)
893 if (rank_check (target
, 0, pointer
->rank
) == FAILURE
)
895 if (target
->rank
> 0)
897 for (i
= 0; i
< target
->rank
; i
++)
898 if (target
->ref
->u
.ar
.dimen_type
[i
] == DIMEN_VECTOR
)
900 gfc_error ("Array section with a vector subscript at %L shall not "
901 "be the target of a pointer",
911 gfc_error ("NULL pointer at %L is not permitted as actual argument "
912 "of '%s' intrinsic function", where
, gfc_current_intrinsic
);
919 gfc_check_atan_2 (gfc_expr
*y
, gfc_expr
*x
)
921 /* gfc_notify_std would be a wast of time as the return value
922 is seemingly used only for the generic resolution. The error
923 will be: Too many arguments. */
924 if ((gfc_option
.allow_std
& GFC_STD_F2008
) == 0)
927 return gfc_check_atan2 (y
, x
);
932 gfc_check_atan2 (gfc_expr
*y
, gfc_expr
*x
)
934 if (type_check (y
, 0, BT_REAL
) == FAILURE
)
936 if (same_type_check (y
, 0, x
, 1) == FAILURE
)
944 gfc_check_atomic (gfc_expr
*atom
, gfc_expr
*value
)
946 if (!(atom
->ts
.type
== BT_INTEGER
&& atom
->ts
.kind
== gfc_atomic_int_kind
)
947 && !(atom
->ts
.type
== BT_LOGICAL
948 && atom
->ts
.kind
== gfc_atomic_logical_kind
))
950 gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
951 "integer of ATOMIC_INT_KIND or a logical of "
952 "ATOMIC_LOGICAL_KIND", &atom
->where
, gfc_current_intrinsic
);
956 if (!gfc_expr_attr (atom
).codimension
)
958 gfc_error ("ATOM argument at %L of the %s intrinsic function shall be a "
959 "coarray or coindexed", &atom
->where
, gfc_current_intrinsic
);
963 if (atom
->ts
.type
!= value
->ts
.type
)
965 gfc_error ("ATOM and VALUE argument of the %s intrinsic function shall "
966 "have the same type at %L", gfc_current_intrinsic
,
976 gfc_check_atomic_def (gfc_expr
*atom
, gfc_expr
*value
)
978 if (scalar_check (atom
, 0) == FAILURE
|| scalar_check (value
, 1) == FAILURE
)
981 if (gfc_check_vardef_context (atom
, false, false, NULL
) == FAILURE
)
983 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
984 "definable", gfc_current_intrinsic
, &atom
->where
);
988 return gfc_check_atomic (atom
, value
);
993 gfc_check_atomic_ref (gfc_expr
*value
, gfc_expr
*atom
)
995 if (scalar_check (value
, 0) == FAILURE
|| scalar_check (atom
, 1) == FAILURE
)
998 if (gfc_check_vardef_context (value
, false, false, NULL
) == FAILURE
)
1000 gfc_error ("VALUE argument of the %s intrinsic function at %L shall be "
1001 "definable", gfc_current_intrinsic
, &value
->where
);
1005 return gfc_check_atomic (atom
, value
);
1009 /* BESJN and BESYN functions. */
1012 gfc_check_besn (gfc_expr
*n
, gfc_expr
*x
)
1014 if (type_check (n
, 0, BT_INTEGER
) == FAILURE
)
1016 if (n
->expr_type
== EXPR_CONSTANT
)
1019 gfc_extract_int (n
, &i
);
1020 if (i
< 0 && gfc_notify_std (GFC_STD_GNU
, "Extension: Negative argument "
1021 "N at %L", &n
->where
) == FAILURE
)
1025 if (type_check (x
, 1, BT_REAL
) == FAILURE
)
1032 /* Transformational version of the Bessel JN and YN functions. */
1035 gfc_check_bessel_n2 (gfc_expr
*n1
, gfc_expr
*n2
, gfc_expr
*x
)
1037 if (type_check (n1
, 0, BT_INTEGER
) == FAILURE
)
1039 if (scalar_check (n1
, 0) == FAILURE
)
1041 if (nonnegative_check("N1", n1
) == FAILURE
)
1044 if (type_check (n2
, 1, BT_INTEGER
) == FAILURE
)
1046 if (scalar_check (n2
, 1) == FAILURE
)
1048 if (nonnegative_check("N2", n2
) == FAILURE
)
1051 if (type_check (x
, 2, BT_REAL
) == FAILURE
)
1053 if (scalar_check (x
, 2) == FAILURE
)
1061 gfc_check_bge_bgt_ble_blt (gfc_expr
*i
, gfc_expr
*j
)
1063 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1066 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1074 gfc_check_bitfcn (gfc_expr
*i
, gfc_expr
*pos
)
1076 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1079 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
1082 if (nonnegative_check ("pos", pos
) == FAILURE
)
1085 if (less_than_bitsize1 ("i", i
, "pos", pos
, false) == FAILURE
)
1093 gfc_check_char (gfc_expr
*i
, gfc_expr
*kind
)
1095 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1097 if (kind_check (kind
, 1, BT_CHARACTER
) == FAILURE
)
1105 gfc_check_chdir (gfc_expr
*dir
)
1107 if (type_check (dir
, 0, BT_CHARACTER
) == FAILURE
)
1109 if (kind_value_check (dir
, 0, gfc_default_character_kind
) == FAILURE
)
1117 gfc_check_chdir_sub (gfc_expr
*dir
, gfc_expr
*status
)
1119 if (type_check (dir
, 0, BT_CHARACTER
) == FAILURE
)
1121 if (kind_value_check (dir
, 0, gfc_default_character_kind
) == FAILURE
)
1127 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
1129 if (scalar_check (status
, 1) == FAILURE
)
1137 gfc_check_chmod (gfc_expr
*name
, gfc_expr
*mode
)
1139 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
1141 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
1144 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
)
1146 if (kind_value_check (mode
, 1, gfc_default_character_kind
) == FAILURE
)
1154 gfc_check_chmod_sub (gfc_expr
*name
, gfc_expr
*mode
, gfc_expr
*status
)
1156 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
1158 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
1161 if (type_check (mode
, 1, BT_CHARACTER
) == FAILURE
)
1163 if (kind_value_check (mode
, 1, gfc_default_character_kind
) == FAILURE
)
1169 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1172 if (scalar_check (status
, 2) == FAILURE
)
1180 gfc_check_cmplx (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*kind
)
1182 if (numeric_check (x
, 0) == FAILURE
)
1187 if (numeric_check (y
, 1) == FAILURE
)
1190 if (x
->ts
.type
== BT_COMPLEX
)
1192 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1193 "present if 'x' is COMPLEX",
1194 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1199 if (y
->ts
.type
== BT_COMPLEX
)
1201 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1202 "of either REAL or INTEGER",
1203 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1210 if (kind_check (kind
, 2, BT_COMPLEX
) == FAILURE
)
1218 gfc_check_complex (gfc_expr
*x
, gfc_expr
*y
)
1220 if (int_or_real_check (x
, 0) == FAILURE
)
1222 if (scalar_check (x
, 0) == FAILURE
)
1225 if (int_or_real_check (y
, 1) == FAILURE
)
1227 if (scalar_check (y
, 1) == FAILURE
)
1235 gfc_check_count (gfc_expr
*mask
, gfc_expr
*dim
, gfc_expr
*kind
)
1237 if (logical_array_check (mask
, 0) == FAILURE
)
1239 if (dim_check (dim
, 1, false) == FAILURE
)
1241 if (dim_rank_check (dim
, mask
, 0) == FAILURE
)
1243 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
1245 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1246 "with KIND argument at %L",
1247 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1255 gfc_check_cshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*dim
)
1257 if (array_check (array
, 0) == FAILURE
)
1260 if (type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1263 if (dim_check (dim
, 2, true) == FAILURE
)
1266 if (dim_rank_check (dim
, array
, false) == FAILURE
)
1269 if (array
->rank
== 1 || shift
->rank
== 0)
1271 if (scalar_check (shift
, 1) == FAILURE
)
1274 else if (shift
->rank
== array
->rank
- 1)
1279 else if (dim
->expr_type
== EXPR_CONSTANT
)
1280 gfc_extract_int (dim
, &d
);
1287 for (i
= 0, j
= 0; i
< array
->rank
; i
++)
1290 if (!identical_dimen_shape (array
, i
, shift
, j
))
1292 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1293 "invalid shape in dimension %d (%ld/%ld)",
1294 gfc_current_intrinsic_arg
[1]->name
,
1295 gfc_current_intrinsic
, &shift
->where
, i
+ 1,
1296 mpz_get_si (array
->shape
[i
]),
1297 mpz_get_si (shift
->shape
[j
]));
1307 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1308 "%d or be a scalar", gfc_current_intrinsic_arg
[1]->name
,
1309 gfc_current_intrinsic
, &shift
->where
, array
->rank
- 1);
1318 gfc_check_ctime (gfc_expr
*time
)
1320 if (scalar_check (time
, 0) == FAILURE
)
1323 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
1330 gfc_try
gfc_check_datan2 (gfc_expr
*y
, gfc_expr
*x
)
1332 if (double_check (y
, 0) == FAILURE
|| double_check (x
, 1) == FAILURE
)
1339 gfc_check_dcmplx (gfc_expr
*x
, gfc_expr
*y
)
1341 if (numeric_check (x
, 0) == FAILURE
)
1346 if (numeric_check (y
, 1) == FAILURE
)
1349 if (x
->ts
.type
== BT_COMPLEX
)
1351 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1352 "present if 'x' is COMPLEX",
1353 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1358 if (y
->ts
.type
== BT_COMPLEX
)
1360 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1361 "of either REAL or INTEGER",
1362 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1373 gfc_check_dble (gfc_expr
*x
)
1375 if (numeric_check (x
, 0) == FAILURE
)
1383 gfc_check_digits (gfc_expr
*x
)
1385 if (int_or_real_check (x
, 0) == FAILURE
)
1393 gfc_check_dot_product (gfc_expr
*vector_a
, gfc_expr
*vector_b
)
1395 switch (vector_a
->ts
.type
)
1398 if (type_check (vector_b
, 1, BT_LOGICAL
) == FAILURE
)
1405 if (numeric_check (vector_b
, 1) == FAILURE
)
1410 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1411 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
1412 gfc_current_intrinsic
, &vector_a
->where
);
1416 if (rank_check (vector_a
, 0, 1) == FAILURE
)
1419 if (rank_check (vector_b
, 1, 1) == FAILURE
)
1422 if (! identical_dimen_shape (vector_a
, 0, vector_b
, 0))
1424 gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
1425 "intrinsic 'dot_product'", gfc_current_intrinsic_arg
[0]->name
,
1426 gfc_current_intrinsic_arg
[1]->name
, &vector_a
->where
);
1435 gfc_check_dprod (gfc_expr
*x
, gfc_expr
*y
)
1437 if (type_check (x
, 0, BT_REAL
) == FAILURE
1438 || type_check (y
, 1, BT_REAL
) == FAILURE
)
1441 if (x
->ts
.kind
!= gfc_default_real_kind
)
1443 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1444 "real", gfc_current_intrinsic_arg
[0]->name
,
1445 gfc_current_intrinsic
, &x
->where
);
1449 if (y
->ts
.kind
!= gfc_default_real_kind
)
1451 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1452 "real", gfc_current_intrinsic_arg
[1]->name
,
1453 gfc_current_intrinsic
, &y
->where
);
1462 gfc_check_dshift (gfc_expr
*i
, gfc_expr
*j
, gfc_expr
*shift
)
1464 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1467 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1470 if (same_type_check (i
, 0, j
, 1) == FAILURE
)
1473 if (type_check (shift
, 2, BT_INTEGER
) == FAILURE
)
1476 if (nonnegative_check ("SHIFT", shift
) == FAILURE
)
1479 if (less_than_bitsize1 ("I", i
, "SHIFT", shift
, true) == FAILURE
)
1487 gfc_check_eoshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*boundary
,
1490 if (array_check (array
, 0) == FAILURE
)
1493 if (type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1496 if (dim_check (dim
, 3, true) == FAILURE
)
1499 if (dim_rank_check (dim
, array
, false) == FAILURE
)
1502 if (array
->rank
== 1 || shift
->rank
== 0)
1504 if (scalar_check (shift
, 1) == FAILURE
)
1507 else if (shift
->rank
== array
->rank
- 1)
1512 else if (dim
->expr_type
== EXPR_CONSTANT
)
1513 gfc_extract_int (dim
, &d
);
1520 for (i
= 0, j
= 0; i
< array
->rank
; i
++)
1523 if (!identical_dimen_shape (array
, i
, shift
, j
))
1525 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1526 "invalid shape in dimension %d (%ld/%ld)",
1527 gfc_current_intrinsic_arg
[1]->name
,
1528 gfc_current_intrinsic
, &shift
->where
, i
+ 1,
1529 mpz_get_si (array
->shape
[i
]),
1530 mpz_get_si (shift
->shape
[j
]));
1540 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1541 "%d or be a scalar", gfc_current_intrinsic_arg
[1]->name
,
1542 gfc_current_intrinsic
, &shift
->where
, array
->rank
- 1);
1546 if (boundary
!= NULL
)
1548 if (same_type_check (array
, 0, boundary
, 2) == FAILURE
)
1551 if (array
->rank
== 1 || boundary
->rank
== 0)
1553 if (scalar_check (boundary
, 2) == FAILURE
)
1556 else if (boundary
->rank
== array
->rank
- 1)
1558 if (gfc_check_conformance (shift
, boundary
,
1559 "arguments '%s' and '%s' for "
1561 gfc_current_intrinsic_arg
[1]->name
,
1562 gfc_current_intrinsic_arg
[2]->name
,
1563 gfc_current_intrinsic
) == FAILURE
)
1568 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have "
1569 "rank %d or be a scalar",
1570 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1571 &shift
->where
, array
->rank
- 1);
1580 gfc_check_float (gfc_expr
*a
)
1582 if (type_check (a
, 0, BT_INTEGER
) == FAILURE
)
1585 if ((a
->ts
.kind
!= gfc_default_integer_kind
)
1586 && gfc_notify_std (GFC_STD_GNU
, "GNU extension: non-default INTEGER "
1587 "kind argument to %s intrinsic at %L",
1588 gfc_current_intrinsic
, &a
->where
) == FAILURE
)
1594 /* A single complex argument. */
1597 gfc_check_fn_c (gfc_expr
*a
)
1599 if (type_check (a
, 0, BT_COMPLEX
) == FAILURE
)
1605 /* A single real argument. */
1608 gfc_check_fn_r (gfc_expr
*a
)
1610 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
1616 /* A single double argument. */
1619 gfc_check_fn_d (gfc_expr
*a
)
1621 if (double_check (a
, 0) == FAILURE
)
1627 /* A single real or complex argument. */
1630 gfc_check_fn_rc (gfc_expr
*a
)
1632 if (real_or_complex_check (a
, 0) == FAILURE
)
1640 gfc_check_fn_rc2008 (gfc_expr
*a
)
1642 if (real_or_complex_check (a
, 0) == FAILURE
)
1645 if (a
->ts
.type
== BT_COMPLEX
1646 && gfc_notify_std (GFC_STD_F2008
, "Fortran 2008: COMPLEX argument '%s' "
1647 "argument of '%s' intrinsic at %L",
1648 gfc_current_intrinsic_arg
[0]->name
,
1649 gfc_current_intrinsic
, &a
->where
) == FAILURE
)
1657 gfc_check_fnum (gfc_expr
*unit
)
1659 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
1662 if (scalar_check (unit
, 0) == FAILURE
)
1670 gfc_check_huge (gfc_expr
*x
)
1672 if (int_or_real_check (x
, 0) == FAILURE
)
1680 gfc_check_hypot (gfc_expr
*x
, gfc_expr
*y
)
1682 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
1684 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
1691 /* Check that the single argument is an integer. */
1694 gfc_check_i (gfc_expr
*i
)
1696 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1704 gfc_check_iand (gfc_expr
*i
, gfc_expr
*j
)
1706 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1709 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1712 if (i
->ts
.kind
!= j
->ts
.kind
)
1714 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1715 &i
->where
) == FAILURE
)
1724 gfc_check_ibits (gfc_expr
*i
, gfc_expr
*pos
, gfc_expr
*len
)
1726 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1729 if (type_check (pos
, 1, BT_INTEGER
) == FAILURE
)
1732 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
1735 if (nonnegative_check ("pos", pos
) == FAILURE
)
1738 if (nonnegative_check ("len", len
) == FAILURE
)
1741 if (less_than_bitsize2 ("i", i
, "pos", pos
, "len", len
) == FAILURE
)
1749 gfc_check_ichar_iachar (gfc_expr
*c
, gfc_expr
*kind
)
1753 if (type_check (c
, 0, BT_CHARACTER
) == FAILURE
)
1756 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1759 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1760 "with KIND argument at %L",
1761 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1764 if (c
->expr_type
== EXPR_VARIABLE
|| c
->expr_type
== EXPR_SUBSTRING
)
1770 /* Substring references don't have the charlength set. */
1772 while (ref
&& ref
->type
!= REF_SUBSTRING
)
1775 gcc_assert (ref
== NULL
|| ref
->type
== REF_SUBSTRING
);
1779 /* Check that the argument is length one. Non-constant lengths
1780 can't be checked here, so assume they are ok. */
1781 if (c
->ts
.u
.cl
&& c
->ts
.u
.cl
->length
)
1783 /* If we already have a length for this expression then use it. */
1784 if (c
->ts
.u
.cl
->length
->expr_type
!= EXPR_CONSTANT
)
1786 i
= mpz_get_si (c
->ts
.u
.cl
->length
->value
.integer
);
1793 start
= ref
->u
.ss
.start
;
1794 end
= ref
->u
.ss
.end
;
1797 if (end
== NULL
|| end
->expr_type
!= EXPR_CONSTANT
1798 || start
->expr_type
!= EXPR_CONSTANT
)
1801 i
= mpz_get_si (end
->value
.integer
) + 1
1802 - mpz_get_si (start
->value
.integer
);
1810 gfc_error ("Argument of %s at %L must be of length one",
1811 gfc_current_intrinsic
, &c
->where
);
1820 gfc_check_idnint (gfc_expr
*a
)
1822 if (double_check (a
, 0) == FAILURE
)
1830 gfc_check_ieor (gfc_expr
*i
, gfc_expr
*j
)
1832 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1835 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1838 if (i
->ts
.kind
!= j
->ts
.kind
)
1840 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1841 &i
->where
) == FAILURE
)
1850 gfc_check_index (gfc_expr
*string
, gfc_expr
*substring
, gfc_expr
*back
,
1853 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
1854 || type_check (substring
, 1, BT_CHARACTER
) == FAILURE
)
1857 if (back
!= NULL
&& type_check (back
, 2, BT_LOGICAL
) == FAILURE
)
1860 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
1862 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
1863 "with KIND argument at %L",
1864 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
1867 if (string
->ts
.kind
!= substring
->ts
.kind
)
1869 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1870 "kind as '%s'", gfc_current_intrinsic_arg
[1]->name
,
1871 gfc_current_intrinsic
, &substring
->where
,
1872 gfc_current_intrinsic_arg
[0]->name
);
1881 gfc_check_int (gfc_expr
*x
, gfc_expr
*kind
)
1883 if (numeric_check (x
, 0) == FAILURE
)
1886 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
1894 gfc_check_intconv (gfc_expr
*x
)
1896 if (numeric_check (x
, 0) == FAILURE
)
1904 gfc_check_ior (gfc_expr
*i
, gfc_expr
*j
)
1906 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
1909 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
1912 if (i
->ts
.kind
!= j
->ts
.kind
)
1914 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type kinds at %L",
1915 &i
->where
) == FAILURE
)
1924 gfc_check_ishft (gfc_expr
*i
, gfc_expr
*shift
)
1926 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
1927 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1935 gfc_check_ishftc (gfc_expr
*i
, gfc_expr
*shift
, gfc_expr
*size
)
1937 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
1938 || type_check (shift
, 1, BT_INTEGER
) == FAILURE
)
1941 if (size
!= NULL
&& type_check (size
, 2, BT_INTEGER
) == FAILURE
)
1949 gfc_check_kill (gfc_expr
*pid
, gfc_expr
*sig
)
1951 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
1954 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
1962 gfc_check_kill_sub (gfc_expr
*pid
, gfc_expr
*sig
, gfc_expr
*status
)
1964 if (type_check (pid
, 0, BT_INTEGER
) == FAILURE
)
1967 if (scalar_check (pid
, 0) == FAILURE
)
1970 if (type_check (sig
, 1, BT_INTEGER
) == FAILURE
)
1973 if (scalar_check (sig
, 1) == FAILURE
)
1979 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
1982 if (scalar_check (status
, 2) == FAILURE
)
1990 gfc_check_kind (gfc_expr
*x
)
1992 if (x
->ts
.type
== BT_DERIVED
)
1994 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1995 "non-derived type", gfc_current_intrinsic_arg
[0]->name
,
1996 gfc_current_intrinsic
, &x
->where
);
2005 gfc_check_lbound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
2007 if (array_check (array
, 0) == FAILURE
)
2010 if (dim_check (dim
, 1, false) == FAILURE
)
2013 if (dim_rank_check (dim
, array
, 1) == FAILURE
)
2016 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
2018 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2019 "with KIND argument at %L",
2020 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2028 gfc_check_lcobound (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*kind
)
2030 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
2032 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
2036 if (coarray_check (coarray
, 0) == FAILURE
)
2041 if (dim_check (dim
, 1, false) == FAILURE
)
2044 if (dim_corank_check (dim
, coarray
) == FAILURE
)
2048 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
2056 gfc_check_len_lentrim (gfc_expr
*s
, gfc_expr
*kind
)
2058 if (type_check (s
, 0, BT_CHARACTER
) == FAILURE
)
2061 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
2063 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2064 "with KIND argument at %L",
2065 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
2073 gfc_check_lge_lgt_lle_llt (gfc_expr
*a
, gfc_expr
*b
)
2075 if (type_check (a
, 0, BT_CHARACTER
) == FAILURE
)
2077 if (kind_value_check (a
, 0, gfc_default_character_kind
) == FAILURE
)
2080 if (type_check (b
, 1, BT_CHARACTER
) == FAILURE
)
2082 if (kind_value_check (b
, 1, gfc_default_character_kind
) == FAILURE
)
2090 gfc_check_link (gfc_expr
*path1
, gfc_expr
*path2
)
2092 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2094 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2097 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2099 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2107 gfc_check_link_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2109 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2111 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2114 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2116 if (kind_value_check (path2
, 0, gfc_default_character_kind
) == FAILURE
)
2122 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2125 if (scalar_check (status
, 2) == FAILURE
)
2133 gfc_check_loc (gfc_expr
*expr
)
2135 return variable_check (expr
, 0, true);
2140 gfc_check_symlnk (gfc_expr
*path1
, gfc_expr
*path2
)
2142 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2144 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2147 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2149 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2157 gfc_check_symlnk_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2159 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2161 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2164 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2166 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2172 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2175 if (scalar_check (status
, 2) == FAILURE
)
2183 gfc_check_logical (gfc_expr
*a
, gfc_expr
*kind
)
2185 if (type_check (a
, 0, BT_LOGICAL
) == FAILURE
)
2187 if (kind_check (kind
, 1, BT_LOGICAL
) == FAILURE
)
2194 /* Min/max family. */
2197 min_max_args (gfc_actual_arglist
*arg
)
2199 if (arg
== NULL
|| arg
->next
== NULL
)
2201 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
2202 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
2211 check_rest (bt type
, int kind
, gfc_actual_arglist
*arglist
)
2213 gfc_actual_arglist
*arg
, *tmp
;
2218 if (min_max_args (arglist
) == FAILURE
)
2221 for (arg
= arglist
, n
=1; arg
; arg
= arg
->next
, n
++)
2224 if (x
->ts
.type
!= type
|| x
->ts
.kind
!= kind
)
2226 if (x
->ts
.type
== type
)
2228 if (gfc_notify_std (GFC_STD_GNU
, "Extension: Different type "
2229 "kinds at %L", &x
->where
) == FAILURE
)
2234 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
2235 "%s(%d)", n
, gfc_current_intrinsic
, &x
->where
,
2236 gfc_basic_typename (type
), kind
);
2241 for (tmp
= arglist
, m
=1; tmp
!= arg
; tmp
= tmp
->next
, m
++)
2242 if (gfc_check_conformance (tmp
->expr
, x
,
2243 "arguments 'a%d' and 'a%d' for "
2244 "intrinsic '%s'", m
, n
,
2245 gfc_current_intrinsic
) == FAILURE
)
2254 gfc_check_min_max (gfc_actual_arglist
*arg
)
2258 if (min_max_args (arg
) == FAILURE
)
2263 if (x
->ts
.type
== BT_CHARACTER
)
2265 if (gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
2266 "with CHARACTER argument at %L",
2267 gfc_current_intrinsic
, &x
->where
) == FAILURE
)
2270 else if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
2272 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
2273 "REAL or CHARACTER", gfc_current_intrinsic
, &x
->where
);
2277 return check_rest (x
->ts
.type
, x
->ts
.kind
, arg
);
2282 gfc_check_min_max_integer (gfc_actual_arglist
*arg
)
2284 return check_rest (BT_INTEGER
, gfc_default_integer_kind
, arg
);
2289 gfc_check_min_max_real (gfc_actual_arglist
*arg
)
2291 return check_rest (BT_REAL
, gfc_default_real_kind
, arg
);
2296 gfc_check_min_max_double (gfc_actual_arglist
*arg
)
2298 return check_rest (BT_REAL
, gfc_default_double_kind
, arg
);
2302 /* End of min/max family. */
2305 gfc_check_malloc (gfc_expr
*size
)
2307 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
2310 if (scalar_check (size
, 0) == FAILURE
)
2318 gfc_check_matmul (gfc_expr
*matrix_a
, gfc_expr
*matrix_b
)
2320 if ((matrix_a
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_a
->ts
))
2322 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2323 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
2324 gfc_current_intrinsic
, &matrix_a
->where
);
2328 if ((matrix_b
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_b
->ts
))
2330 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2331 "or LOGICAL", gfc_current_intrinsic_arg
[1]->name
,
2332 gfc_current_intrinsic
, &matrix_b
->where
);
2336 if ((matrix_a
->ts
.type
== BT_LOGICAL
&& gfc_numeric_ts (&matrix_b
->ts
))
2337 || (gfc_numeric_ts (&matrix_a
->ts
) && matrix_b
->ts
.type
== BT_LOGICAL
))
2339 gfc_error ("Argument types of '%s' intrinsic at %L must match (%s/%s)",
2340 gfc_current_intrinsic
, &matrix_a
->where
,
2341 gfc_typename(&matrix_a
->ts
), gfc_typename(&matrix_b
->ts
));
2345 switch (matrix_a
->rank
)
2348 if (rank_check (matrix_b
, 1, 2) == FAILURE
)
2350 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
2351 if (!identical_dimen_shape (matrix_a
, 0, matrix_b
, 0))
2353 gfc_error ("Different shape on dimension 1 for arguments '%s' "
2354 "and '%s' at %L for intrinsic matmul",
2355 gfc_current_intrinsic_arg
[0]->name
,
2356 gfc_current_intrinsic_arg
[1]->name
, &matrix_a
->where
);
2362 if (matrix_b
->rank
!= 2)
2364 if (rank_check (matrix_b
, 1, 1) == FAILURE
)
2367 /* matrix_b has rank 1 or 2 here. Common check for the cases
2368 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
2369 - matrix_a has shape (n,m) and matrix_b has shape (m). */
2370 if (!identical_dimen_shape (matrix_a
, 1, matrix_b
, 0))
2372 gfc_error ("Different shape on dimension 2 for argument '%s' and "
2373 "dimension 1 for argument '%s' at %L for intrinsic "
2374 "matmul", gfc_current_intrinsic_arg
[0]->name
,
2375 gfc_current_intrinsic_arg
[1]->name
, &matrix_a
->where
);
2381 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
2382 "1 or 2", gfc_current_intrinsic_arg
[0]->name
,
2383 gfc_current_intrinsic
, &matrix_a
->where
);
2391 /* Whoever came up with this interface was probably on something.
2392 The possibilities for the occupation of the second and third
2399 NULL MASK minloc(array, mask=m)
2402 I.e. in the case of minloc(array,mask), mask will be in the second
2403 position of the argument list and we'll have to fix that up. */
2406 gfc_check_minloc_maxloc (gfc_actual_arglist
*ap
)
2408 gfc_expr
*a
, *m
, *d
;
2411 if (int_or_real_check (a
, 0) == FAILURE
|| array_check (a
, 0) == FAILURE
)
2415 m
= ap
->next
->next
->expr
;
2417 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
2418 && ap
->next
->name
== NULL
)
2422 ap
->next
->expr
= NULL
;
2423 ap
->next
->next
->expr
= m
;
2426 if (dim_check (d
, 1, false) == FAILURE
)
2429 if (dim_rank_check (d
, a
, 0) == FAILURE
)
2432 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
2436 && gfc_check_conformance (a
, m
,
2437 "arguments '%s' and '%s' for intrinsic %s",
2438 gfc_current_intrinsic_arg
[0]->name
,
2439 gfc_current_intrinsic_arg
[2]->name
,
2440 gfc_current_intrinsic
) == FAILURE
)
2447 /* Similar to minloc/maxloc, the argument list might need to be
2448 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
2449 difference is that MINLOC/MAXLOC take an additional KIND argument.
2450 The possibilities are:
2456 NULL MASK minval(array, mask=m)
2459 I.e. in the case of minval(array,mask), mask will be in the second
2460 position of the argument list and we'll have to fix that up. */
2463 check_reduction (gfc_actual_arglist
*ap
)
2465 gfc_expr
*a
, *m
, *d
;
2469 m
= ap
->next
->next
->expr
;
2471 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
2472 && ap
->next
->name
== NULL
)
2476 ap
->next
->expr
= NULL
;
2477 ap
->next
->next
->expr
= m
;
2480 if (dim_check (d
, 1, false) == FAILURE
)
2483 if (dim_rank_check (d
, a
, 0) == FAILURE
)
2486 if (m
!= NULL
&& type_check (m
, 2, BT_LOGICAL
) == FAILURE
)
2490 && gfc_check_conformance (a
, m
,
2491 "arguments '%s' and '%s' for intrinsic %s",
2492 gfc_current_intrinsic_arg
[0]->name
,
2493 gfc_current_intrinsic_arg
[2]->name
,
2494 gfc_current_intrinsic
) == FAILURE
)
2502 gfc_check_minval_maxval (gfc_actual_arglist
*ap
)
2504 if (int_or_real_check (ap
->expr
, 0) == FAILURE
2505 || array_check (ap
->expr
, 0) == FAILURE
)
2508 return check_reduction (ap
);
2513 gfc_check_product_sum (gfc_actual_arglist
*ap
)
2515 if (numeric_check (ap
->expr
, 0) == FAILURE
2516 || array_check (ap
->expr
, 0) == FAILURE
)
2519 return check_reduction (ap
);
2523 /* For IANY, IALL and IPARITY. */
2526 gfc_check_mask (gfc_expr
*i
, gfc_expr
*kind
)
2530 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
2533 if (nonnegative_check ("I", i
) == FAILURE
)
2536 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
2540 gfc_extract_int (kind
, &k
);
2542 k
= gfc_default_integer_kind
;
2544 if (less_than_bitsizekind ("I", i
, k
) == FAILURE
)
2552 gfc_check_transf_bit_intrins (gfc_actual_arglist
*ap
)
2554 if (ap
->expr
->ts
.type
!= BT_INTEGER
)
2556 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER",
2557 gfc_current_intrinsic_arg
[0]->name
,
2558 gfc_current_intrinsic
, &ap
->expr
->where
);
2562 if (array_check (ap
->expr
, 0) == FAILURE
)
2565 return check_reduction (ap
);
2570 gfc_check_merge (gfc_expr
*tsource
, gfc_expr
*fsource
, gfc_expr
*mask
)
2572 if (same_type_check (tsource
, 0, fsource
, 1) == FAILURE
)
2575 if (type_check (mask
, 2, BT_LOGICAL
) == FAILURE
)
2578 if (tsource
->ts
.type
== BT_CHARACTER
)
2579 return gfc_check_same_strlen (tsource
, fsource
, "MERGE intrinsic");
2586 gfc_check_merge_bits (gfc_expr
*i
, gfc_expr
*j
, gfc_expr
*mask
)
2588 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
2591 if (type_check (j
, 1, BT_INTEGER
) == FAILURE
)
2594 if (type_check (mask
, 2, BT_INTEGER
) == FAILURE
)
2597 if (same_type_check (i
, 0, j
, 1) == FAILURE
)
2600 if (same_type_check (i
, 0, mask
, 2) == FAILURE
)
2608 gfc_check_move_alloc (gfc_expr
*from
, gfc_expr
*to
)
2610 if (variable_check (from
, 0, false) == FAILURE
)
2612 if (allocatable_check (from
, 0) == FAILURE
)
2615 if (variable_check (to
, 1, false) == FAILURE
)
2617 if (allocatable_check (to
, 1) == FAILURE
)
2620 if (same_type_check (to
, 1, from
, 0) == FAILURE
)
2623 if (to
->rank
!= from
->rank
)
2625 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
2626 "have the same rank %d/%d", gfc_current_intrinsic_arg
[0]->name
,
2627 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
2628 &to
->where
, from
->rank
, to
->rank
);
2632 if (to
->ts
.kind
!= from
->ts
.kind
)
2634 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
2635 "be of the same kind %d/%d",
2636 gfc_current_intrinsic_arg
[0]->name
,
2637 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
2638 &to
->where
, from
->ts
.kind
, to
->ts
.kind
);
2642 /* CLASS arguments: Make sure the vtab is present. */
2643 if (to
->ts
.type
== BT_CLASS
)
2644 gfc_find_derived_vtab (from
->ts
.u
.derived
);
2651 gfc_check_nearest (gfc_expr
*x
, gfc_expr
*s
)
2653 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
2656 if (type_check (s
, 1, BT_REAL
) == FAILURE
)
2664 gfc_check_new_line (gfc_expr
*a
)
2666 if (type_check (a
, 0, BT_CHARACTER
) == FAILURE
)
2674 gfc_check_norm2 (gfc_expr
*array
, gfc_expr
*dim
)
2676 if (type_check (array
, 0, BT_REAL
) == FAILURE
)
2679 if (array_check (array
, 0) == FAILURE
)
2682 if (dim_rank_check (dim
, array
, false) == FAILURE
)
2689 gfc_check_null (gfc_expr
*mold
)
2691 symbol_attribute attr
;
2696 if (variable_check (mold
, 0, true) == FAILURE
)
2699 attr
= gfc_variable_attr (mold
, NULL
);
2701 if (!attr
.pointer
&& !attr
.proc_pointer
&& !attr
.allocatable
)
2703 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER, "
2704 "ALLOCATABLE or procedure pointer",
2705 gfc_current_intrinsic_arg
[0]->name
,
2706 gfc_current_intrinsic
, &mold
->where
);
2710 if (attr
.allocatable
2711 && gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: NULL intrinsic with "
2712 "allocatable MOLD at %L", &mold
->where
) == FAILURE
)
2716 if (gfc_is_coindexed (mold
))
2718 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
2719 "conindexed", gfc_current_intrinsic_arg
[0]->name
,
2720 gfc_current_intrinsic
, &mold
->where
);
2729 gfc_check_pack (gfc_expr
*array
, gfc_expr
*mask
, gfc_expr
*vector
)
2731 if (array_check (array
, 0) == FAILURE
)
2734 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
2737 if (gfc_check_conformance (array
, mask
,
2738 "arguments '%s' and '%s' for intrinsic '%s'",
2739 gfc_current_intrinsic_arg
[0]->name
,
2740 gfc_current_intrinsic_arg
[1]->name
,
2741 gfc_current_intrinsic
) == FAILURE
)
2746 mpz_t array_size
, vector_size
;
2747 bool have_array_size
, have_vector_size
;
2749 if (same_type_check (array
, 0, vector
, 2) == FAILURE
)
2752 if (rank_check (vector
, 2, 1) == FAILURE
)
2755 /* VECTOR requires at least as many elements as MASK
2756 has .TRUE. values. */
2757 have_array_size
= gfc_array_size (array
, &array_size
) == SUCCESS
;
2758 have_vector_size
= gfc_array_size (vector
, &vector_size
) == SUCCESS
;
2760 if (have_vector_size
2761 && (mask
->expr_type
== EXPR_ARRAY
2762 || (mask
->expr_type
== EXPR_CONSTANT
2763 && have_array_size
)))
2765 int mask_true_values
= 0;
2767 if (mask
->expr_type
== EXPR_ARRAY
)
2769 gfc_constructor
*mask_ctor
;
2770 mask_ctor
= gfc_constructor_first (mask
->value
.constructor
);
2773 if (mask_ctor
->expr
->expr_type
!= EXPR_CONSTANT
)
2775 mask_true_values
= 0;
2779 if (mask_ctor
->expr
->value
.logical
)
2782 mask_ctor
= gfc_constructor_next (mask_ctor
);
2785 else if (mask
->expr_type
== EXPR_CONSTANT
&& mask
->value
.logical
)
2786 mask_true_values
= mpz_get_si (array_size
);
2788 if (mpz_get_si (vector_size
) < mask_true_values
)
2790 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
2791 "provide at least as many elements as there "
2792 "are .TRUE. values in '%s' (%ld/%d)",
2793 gfc_current_intrinsic_arg
[2]->name
,
2794 gfc_current_intrinsic
, &vector
->where
,
2795 gfc_current_intrinsic_arg
[1]->name
,
2796 mpz_get_si (vector_size
), mask_true_values
);
2801 if (have_array_size
)
2802 mpz_clear (array_size
);
2803 if (have_vector_size
)
2804 mpz_clear (vector_size
);
2812 gfc_check_parity (gfc_expr
*mask
, gfc_expr
*dim
)
2814 if (type_check (mask
, 0, BT_LOGICAL
) == FAILURE
)
2817 if (array_check (mask
, 0) == FAILURE
)
2820 if (dim_rank_check (dim
, mask
, false) == FAILURE
)
2828 gfc_check_precision (gfc_expr
*x
)
2830 if (real_or_complex_check (x
, 0) == FAILURE
)
2838 gfc_check_present (gfc_expr
*a
)
2842 if (variable_check (a
, 0, true) == FAILURE
)
2845 sym
= a
->symtree
->n
.sym
;
2846 if (!sym
->attr
.dummy
)
2848 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
2849 "dummy variable", gfc_current_intrinsic_arg
[0]->name
,
2850 gfc_current_intrinsic
, &a
->where
);
2854 if (!sym
->attr
.optional
)
2856 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
2857 "an OPTIONAL dummy variable",
2858 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
2863 /* 13.14.82 PRESENT(A)
2865 Argument. A shall be the name of an optional dummy argument that is
2866 accessible in the subprogram in which the PRESENT function reference
2870 && !(a
->ref
->next
== NULL
&& a
->ref
->type
== REF_ARRAY
2871 && (a
->ref
->u
.ar
.type
== AR_FULL
2872 || (a
->ref
->u
.ar
.type
== AR_ELEMENT
2873 && a
->ref
->u
.ar
.as
->rank
== 0))))
2875 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
2876 "subobject of '%s'", gfc_current_intrinsic_arg
[0]->name
,
2877 gfc_current_intrinsic
, &a
->where
, sym
->name
);
2886 gfc_check_radix (gfc_expr
*x
)
2888 if (int_or_real_check (x
, 0) == FAILURE
)
2896 gfc_check_range (gfc_expr
*x
)
2898 if (numeric_check (x
, 0) == FAILURE
)
2906 gfc_check_rank (gfc_expr
*a ATTRIBUTE_UNUSED
)
2908 /* Any data object is allowed; a "data object" is a "constant (4.1.3),
2909 variable (6), or subobject of a constant (2.4.3.2.3)" (F2008, 1.3.45). */
2911 bool is_variable
= true;
2913 /* Functions returning pointers are regarded as variable, cf. F2008, R602. */
2914 if (a
->expr_type
== EXPR_FUNCTION
)
2915 is_variable
= a
->value
.function
.esym
2916 ? a
->value
.function
.esym
->result
->attr
.pointer
2917 : a
->symtree
->n
.sym
->result
->attr
.pointer
;
2919 if (a
->expr_type
== EXPR_OP
|| a
->expr_type
== EXPR_NULL
2920 || a
->expr_type
== EXPR_COMPCALL
|| a
->expr_type
== EXPR_PPC
2923 gfc_error ("The argument of the RANK intrinsic at %L must be a data "
2924 "object", &a
->where
);
2932 /* real, float, sngl. */
2934 gfc_check_real (gfc_expr
*a
, gfc_expr
*kind
)
2936 if (numeric_check (a
, 0) == FAILURE
)
2939 if (kind_check (kind
, 1, BT_REAL
) == FAILURE
)
2947 gfc_check_rename (gfc_expr
*path1
, gfc_expr
*path2
)
2949 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2951 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2954 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2956 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2964 gfc_check_rename_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2966 if (type_check (path1
, 0, BT_CHARACTER
) == FAILURE
)
2968 if (kind_value_check (path1
, 0, gfc_default_character_kind
) == FAILURE
)
2971 if (type_check (path2
, 1, BT_CHARACTER
) == FAILURE
)
2973 if (kind_value_check (path2
, 1, gfc_default_character_kind
) == FAILURE
)
2979 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
2982 if (scalar_check (status
, 2) == FAILURE
)
2990 gfc_check_repeat (gfc_expr
*x
, gfc_expr
*y
)
2992 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
2995 if (scalar_check (x
, 0) == FAILURE
)
2998 if (type_check (y
, 0, BT_INTEGER
) == FAILURE
)
3001 if (scalar_check (y
, 1) == FAILURE
)
3009 gfc_check_reshape (gfc_expr
*source
, gfc_expr
*shape
,
3010 gfc_expr
*pad
, gfc_expr
*order
)
3016 if (array_check (source
, 0) == FAILURE
)
3019 if (rank_check (shape
, 1, 1) == FAILURE
)
3022 if (type_check (shape
, 1, BT_INTEGER
) == FAILURE
)
3025 if (gfc_array_size (shape
, &size
) != SUCCESS
)
3027 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
3028 "array of constant size", &shape
->where
);
3032 shape_size
= mpz_get_ui (size
);
3035 if (shape_size
<= 0)
3037 gfc_error ("'%s' argument of '%s' intrinsic at %L is empty",
3038 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3042 else if (shape_size
> GFC_MAX_DIMENSIONS
)
3044 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
3045 "than %d elements", &shape
->where
, GFC_MAX_DIMENSIONS
);
3048 else if (shape
->expr_type
== EXPR_ARRAY
)
3052 for (i
= 0; i
< shape_size
; ++i
)
3054 e
= gfc_constructor_lookup_expr (shape
->value
.constructor
, i
);
3055 if (e
->expr_type
!= EXPR_CONSTANT
)
3058 gfc_extract_int (e
, &extent
);
3061 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3062 "negative element (%d)",
3063 gfc_current_intrinsic_arg
[1]->name
,
3064 gfc_current_intrinsic
, &e
->where
, extent
);
3072 if (same_type_check (source
, 0, pad
, 2) == FAILURE
)
3075 if (array_check (pad
, 2) == FAILURE
)
3081 if (array_check (order
, 3) == FAILURE
)
3084 if (type_check (order
, 3, BT_INTEGER
) == FAILURE
)
3087 if (order
->expr_type
== EXPR_ARRAY
)
3089 int i
, order_size
, dim
, perm
[GFC_MAX_DIMENSIONS
];
3092 for (i
= 0; i
< GFC_MAX_DIMENSIONS
; ++i
)
3095 gfc_array_size (order
, &size
);
3096 order_size
= mpz_get_ui (size
);
3099 if (order_size
!= shape_size
)
3101 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3102 "has wrong number of elements (%d/%d)",
3103 gfc_current_intrinsic_arg
[3]->name
,
3104 gfc_current_intrinsic
, &order
->where
,
3105 order_size
, shape_size
);
3109 for (i
= 1; i
<= order_size
; ++i
)
3111 e
= gfc_constructor_lookup_expr (order
->value
.constructor
, i
-1);
3112 if (e
->expr_type
!= EXPR_CONSTANT
)
3115 gfc_extract_int (e
, &dim
);
3117 if (dim
< 1 || dim
> order_size
)
3119 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3120 "has out-of-range dimension (%d)",
3121 gfc_current_intrinsic_arg
[3]->name
,
3122 gfc_current_intrinsic
, &e
->where
, dim
);
3126 if (perm
[dim
-1] != 0)
3128 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3129 "invalid permutation of dimensions (dimension "
3131 gfc_current_intrinsic_arg
[3]->name
,
3132 gfc_current_intrinsic
, &e
->where
, dim
);
3141 if (pad
== NULL
&& shape
->expr_type
== EXPR_ARRAY
3142 && gfc_is_constant_expr (shape
)
3143 && !(source
->expr_type
== EXPR_VARIABLE
&& source
->symtree
->n
.sym
->as
3144 && source
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
))
3146 /* Check the match in size between source and destination. */
3147 if (gfc_array_size (source
, &nelems
) == SUCCESS
)
3153 mpz_init_set_ui (size
, 1);
3154 for (c
= gfc_constructor_first (shape
->value
.constructor
);
3155 c
; c
= gfc_constructor_next (c
))
3156 mpz_mul (size
, size
, c
->expr
->value
.integer
);
3158 test
= mpz_cmp (nelems
, size
) < 0 && mpz_cmp_ui (size
, 0) > 0;
3164 gfc_error ("Without padding, there are not enough elements "
3165 "in the intrinsic RESHAPE source at %L to match "
3166 "the shape", &source
->where
);
3177 gfc_check_same_type_as (gfc_expr
*a
, gfc_expr
*b
)
3180 if (a
->ts
.type
!= BT_DERIVED
&& a
->ts
.type
!= BT_CLASS
)
3182 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3183 "must be of a derived type",
3184 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3189 if (!gfc_type_is_extensible (a
->ts
.u
.derived
))
3191 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3192 "must be of an extensible type",
3193 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3198 if (b
->ts
.type
!= BT_DERIVED
&& b
->ts
.type
!= BT_CLASS
)
3200 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3201 "must be of a derived type",
3202 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3207 if (!gfc_type_is_extensible (b
->ts
.u
.derived
))
3209 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3210 "must be of an extensible type",
3211 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3221 gfc_check_scale (gfc_expr
*x
, gfc_expr
*i
)
3223 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
3226 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
3234 gfc_check_scan (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
3236 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
3239 if (type_check (y
, 1, BT_CHARACTER
) == FAILURE
)
3242 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
3245 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
3247 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
3248 "with KIND argument at %L",
3249 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
3252 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
3260 gfc_check_secnds (gfc_expr
*r
)
3262 if (type_check (r
, 0, BT_REAL
) == FAILURE
)
3265 if (kind_value_check (r
, 0, 4) == FAILURE
)
3268 if (scalar_check (r
, 0) == FAILURE
)
3276 gfc_check_selected_char_kind (gfc_expr
*name
)
3278 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3281 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3284 if (scalar_check (name
, 0) == FAILURE
)
3292 gfc_check_selected_int_kind (gfc_expr
*r
)
3294 if (type_check (r
, 0, BT_INTEGER
) == FAILURE
)
3297 if (scalar_check (r
, 0) == FAILURE
)
3305 gfc_check_selected_real_kind (gfc_expr
*p
, gfc_expr
*r
, gfc_expr
*radix
)
3307 if (p
== NULL
&& r
== NULL
3308 && gfc_notify_std (GFC_STD_F2008
, "Fortran 2008: SELECTED_REAL_KIND with"
3309 " neither 'P' nor 'R' argument at %L",
3310 gfc_current_intrinsic_where
) == FAILURE
)
3315 if (type_check (p
, 0, BT_INTEGER
) == FAILURE
)
3318 if (scalar_check (p
, 0) == FAILURE
)
3324 if (type_check (r
, 1, BT_INTEGER
) == FAILURE
)
3327 if (scalar_check (r
, 1) == FAILURE
)
3333 if (type_check (radix
, 1, BT_INTEGER
) == FAILURE
)
3336 if (scalar_check (radix
, 1) == FAILURE
)
3339 if (gfc_notify_std (GFC_STD_F2008
, "Fortran 2008: '%s' intrinsic with "
3340 "RADIX argument at %L", gfc_current_intrinsic
,
3341 &radix
->where
) == FAILURE
)
3350 gfc_check_set_exponent (gfc_expr
*x
, gfc_expr
*i
)
3352 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
3355 if (type_check (i
, 1, BT_INTEGER
) == FAILURE
)
3363 gfc_check_shape (gfc_expr
*source
, gfc_expr
*kind
)
3367 if (source
->rank
== 0 || source
->expr_type
!= EXPR_VARIABLE
)
3370 ar
= gfc_find_array_ref (source
);
3372 if (ar
->as
&& ar
->as
->type
== AS_ASSUMED_SIZE
&& ar
->type
== AR_FULL
)
3374 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
3375 "an assumed size array", &source
->where
);
3379 if (kind_check (kind
, 1, BT_INTEGER
) == FAILURE
)
3381 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
3382 "with KIND argument at %L",
3383 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
3391 gfc_check_shift (gfc_expr
*i
, gfc_expr
*shift
)
3393 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
3396 if (type_check (shift
, 0, BT_INTEGER
) == FAILURE
)
3399 if (nonnegative_check ("SHIFT", shift
) == FAILURE
)
3402 if (less_than_bitsize1 ("I", i
, "SHIFT", shift
, true) == FAILURE
)
3410 gfc_check_sign (gfc_expr
*a
, gfc_expr
*b
)
3412 if (int_or_real_check (a
, 0) == FAILURE
)
3415 if (same_type_check (a
, 0, b
, 1) == FAILURE
)
3423 gfc_check_size (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
3425 if (array_check (array
, 0) == FAILURE
)
3428 if (dim_check (dim
, 1, true) == FAILURE
)
3431 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
3434 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
3436 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
3437 "with KIND argument at %L",
3438 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
3447 gfc_check_sizeof (gfc_expr
*arg ATTRIBUTE_UNUSED
)
3454 gfc_check_c_sizeof (gfc_expr
*arg
)
3456 if (gfc_verify_c_interop (&arg
->ts
) != SUCCESS
)
3458 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an "
3459 "interoperable data entity",
3460 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3469 gfc_check_sleep_sub (gfc_expr
*seconds
)
3471 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
3474 if (scalar_check (seconds
, 0) == FAILURE
)
3481 gfc_check_sngl (gfc_expr
*a
)
3483 if (type_check (a
, 0, BT_REAL
) == FAILURE
)
3486 if ((a
->ts
.kind
!= gfc_default_double_kind
)
3487 && gfc_notify_std (GFC_STD_GNU
, "GNU extension: non double precision "
3488 "REAL argument to %s intrinsic at %L",
3489 gfc_current_intrinsic
, &a
->where
) == FAILURE
)
3496 gfc_check_spread (gfc_expr
*source
, gfc_expr
*dim
, gfc_expr
*ncopies
)
3498 if (source
->rank
>= GFC_MAX_DIMENSIONS
)
3500 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
3501 "than rank %d", gfc_current_intrinsic_arg
[0]->name
,
3502 gfc_current_intrinsic
, &source
->where
, GFC_MAX_DIMENSIONS
);
3510 if (dim_check (dim
, 1, false) == FAILURE
)
3513 /* dim_rank_check() does not apply here. */
3515 && dim
->expr_type
== EXPR_CONSTANT
3516 && (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
3517 || mpz_cmp_ui (dim
->value
.integer
, source
->rank
+ 1) > 0))
3519 gfc_error ("'%s' argument of '%s' intrinsic at %L is not a valid "
3520 "dimension index", gfc_current_intrinsic_arg
[1]->name
,
3521 gfc_current_intrinsic
, &dim
->where
);
3525 if (type_check (ncopies
, 2, BT_INTEGER
) == FAILURE
)
3528 if (scalar_check (ncopies
, 2) == FAILURE
)
3535 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
3539 gfc_check_fgetputc_sub (gfc_expr
*unit
, gfc_expr
*c
, gfc_expr
*status
)
3541 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3544 if (scalar_check (unit
, 0) == FAILURE
)
3547 if (type_check (c
, 1, BT_CHARACTER
) == FAILURE
)
3549 if (kind_value_check (c
, 1, gfc_default_character_kind
) == FAILURE
)
3555 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
3556 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
3557 || scalar_check (status
, 2) == FAILURE
)
3565 gfc_check_fgetputc (gfc_expr
*unit
, gfc_expr
*c
)
3567 return gfc_check_fgetputc_sub (unit
, c
, NULL
);
3572 gfc_check_fgetput_sub (gfc_expr
*c
, gfc_expr
*status
)
3574 if (type_check (c
, 0, BT_CHARACTER
) == FAILURE
)
3576 if (kind_value_check (c
, 0, gfc_default_character_kind
) == FAILURE
)
3582 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
3583 || kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
3584 || scalar_check (status
, 1) == FAILURE
)
3592 gfc_check_fgetput (gfc_expr
*c
)
3594 return gfc_check_fgetput_sub (c
, NULL
);
3599 gfc_check_fseek_sub (gfc_expr
*unit
, gfc_expr
*offset
, gfc_expr
*whence
, gfc_expr
*status
)
3601 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3604 if (scalar_check (unit
, 0) == FAILURE
)
3607 if (type_check (offset
, 1, BT_INTEGER
) == FAILURE
)
3610 if (scalar_check (offset
, 1) == FAILURE
)
3613 if (type_check (whence
, 2, BT_INTEGER
) == FAILURE
)
3616 if (scalar_check (whence
, 2) == FAILURE
)
3622 if (type_check (status
, 3, BT_INTEGER
) == FAILURE
)
3625 if (kind_value_check (status
, 3, 4) == FAILURE
)
3628 if (scalar_check (status
, 3) == FAILURE
)
3637 gfc_check_fstat (gfc_expr
*unit
, gfc_expr
*array
)
3639 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3642 if (scalar_check (unit
, 0) == FAILURE
)
3645 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3646 || kind_value_check (unit
, 0, gfc_default_integer_kind
) == FAILURE
)
3649 if (array_check (array
, 1) == FAILURE
)
3657 gfc_check_fstat_sub (gfc_expr
*unit
, gfc_expr
*array
, gfc_expr
*status
)
3659 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3662 if (scalar_check (unit
, 0) == FAILURE
)
3665 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3666 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3669 if (array_check (array
, 1) == FAILURE
)
3675 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
3676 || kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
3679 if (scalar_check (status
, 2) == FAILURE
)
3687 gfc_check_ftell (gfc_expr
*unit
)
3689 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3692 if (scalar_check (unit
, 0) == FAILURE
)
3700 gfc_check_ftell_sub (gfc_expr
*unit
, gfc_expr
*offset
)
3702 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
3705 if (scalar_check (unit
, 0) == FAILURE
)
3708 if (type_check (offset
, 1, BT_INTEGER
) == FAILURE
)
3711 if (scalar_check (offset
, 1) == FAILURE
)
3719 gfc_check_stat (gfc_expr
*name
, gfc_expr
*array
)
3721 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3723 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3726 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3727 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3730 if (array_check (array
, 1) == FAILURE
)
3738 gfc_check_stat_sub (gfc_expr
*name
, gfc_expr
*array
, gfc_expr
*status
)
3740 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
3742 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
3745 if (type_check (array
, 1, BT_INTEGER
) == FAILURE
3746 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3749 if (array_check (array
, 1) == FAILURE
)
3755 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
3756 || kind_value_check (array
, 1, gfc_default_integer_kind
) == FAILURE
)
3759 if (scalar_check (status
, 2) == FAILURE
)
3767 gfc_check_image_index (gfc_expr
*coarray
, gfc_expr
*sub
)
3771 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
3773 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
3777 if (coarray_check (coarray
, 0) == FAILURE
)
3782 gfc_error ("%s argument to IMAGE_INDEX must be a rank one array at %L",
3783 gfc_current_intrinsic_arg
[1]->name
, &sub
->where
);
3787 if (gfc_array_size (sub
, &nelems
) == SUCCESS
)
3789 int corank
= gfc_get_corank (coarray
);
3791 if (mpz_cmp_ui (nelems
, corank
) != 0)
3793 gfc_error ("The number of array elements of the SUB argument to "
3794 "IMAGE_INDEX at %L shall be %d (corank) not %d",
3795 &sub
->where
, corank
, (int) mpz_get_si (nelems
));
3807 gfc_check_this_image (gfc_expr
*coarray
, gfc_expr
*dim
)
3809 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
3811 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
3815 if (dim
!= NULL
&& coarray
== NULL
)
3817 gfc_error ("DIM argument without ARRAY argument not allowed for THIS_IMAGE "
3818 "intrinsic at %L", &dim
->where
);
3822 if (coarray
== NULL
)
3825 if (coarray_check (coarray
, 0) == FAILURE
)
3830 if (dim_check (dim
, 1, false) == FAILURE
)
3833 if (dim_corank_check (dim
, coarray
) == FAILURE
)
3840 /* Calculate the sizes for transfer, used by gfc_check_transfer and also
3841 by gfc_simplify_transfer. Return FAILURE if we cannot do so. */
3844 gfc_calculate_transfer_sizes (gfc_expr
*source
, gfc_expr
*mold
, gfc_expr
*size
,
3845 size_t *source_size
, size_t *result_size
,
3846 size_t *result_length_p
)
3849 size_t result_elt_size
;
3851 gfc_expr
*mold_element
;
3853 if (source
->expr_type
== EXPR_FUNCTION
)
3856 /* Calculate the size of the source. */
3857 if (source
->expr_type
== EXPR_ARRAY
3858 && gfc_array_size (source
, &tmp
) == FAILURE
)
3861 *source_size
= gfc_target_expr_size (source
);
3863 mold_element
= mold
->expr_type
== EXPR_ARRAY
3864 ? gfc_constructor_first (mold
->value
.constructor
)->expr
3867 /* Determine the size of the element. */
3868 result_elt_size
= gfc_target_expr_size (mold_element
);
3869 if (result_elt_size
== 0)
3872 if (mold
->expr_type
== EXPR_ARRAY
|| mold
->rank
|| size
)
3877 result_length
= (size_t)mpz_get_ui (size
->value
.integer
);
3880 result_length
= *source_size
/ result_elt_size
;
3881 if (result_length
* result_elt_size
< *source_size
)
3885 *result_size
= result_length
* result_elt_size
;
3886 if (result_length_p
)
3887 *result_length_p
= result_length
;
3890 *result_size
= result_elt_size
;
3897 gfc_check_transfer (gfc_expr
*source
, gfc_expr
*mold
, gfc_expr
*size
)
3902 if (mold
->ts
.type
== BT_HOLLERITH
)
3904 gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
3905 &mold
->where
, gfc_basic_typename (BT_HOLLERITH
));
3911 if (type_check (size
, 2, BT_INTEGER
) == FAILURE
)
3914 if (scalar_check (size
, 2) == FAILURE
)
3917 if (nonoptional_check (size
, 2) == FAILURE
)
3921 if (!gfc_option
.warn_surprising
)
3924 /* If we can't calculate the sizes, we cannot check any more.
3925 Return SUCCESS for that case. */
3927 if (gfc_calculate_transfer_sizes (source
, mold
, size
, &source_size
,
3928 &result_size
, NULL
) == FAILURE
)
3931 if (source_size
< result_size
)
3932 gfc_warning("Intrinsic TRANSFER at %L has partly undefined result: "
3933 "source size %ld < result size %ld", &source
->where
,
3934 (long) source_size
, (long) result_size
);
3941 gfc_check_transpose (gfc_expr
*matrix
)
3943 if (rank_check (matrix
, 0, 2) == FAILURE
)
3951 gfc_check_ubound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
3953 if (array_check (array
, 0) == FAILURE
)
3956 if (dim_check (dim
, 1, false) == FAILURE
)
3959 if (dim_rank_check (dim
, array
, 0) == FAILURE
)
3962 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
3964 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
3965 "with KIND argument at %L",
3966 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
3974 gfc_check_ucobound (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*kind
)
3976 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
3978 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
3982 if (coarray_check (coarray
, 0) == FAILURE
)
3987 if (dim_check (dim
, 1, false) == FAILURE
)
3990 if (dim_corank_check (dim
, coarray
) == FAILURE
)
3994 if (kind_check (kind
, 2, BT_INTEGER
) == FAILURE
)
4002 gfc_check_unpack (gfc_expr
*vector
, gfc_expr
*mask
, gfc_expr
*field
)
4006 if (rank_check (vector
, 0, 1) == FAILURE
)
4009 if (array_check (mask
, 1) == FAILURE
)
4012 if (type_check (mask
, 1, BT_LOGICAL
) == FAILURE
)
4015 if (same_type_check (vector
, 0, field
, 2) == FAILURE
)
4018 if (mask
->expr_type
== EXPR_ARRAY
4019 && gfc_array_size (vector
, &vector_size
) == SUCCESS
)
4021 int mask_true_count
= 0;
4022 gfc_constructor
*mask_ctor
;
4023 mask_ctor
= gfc_constructor_first (mask
->value
.constructor
);
4026 if (mask_ctor
->expr
->expr_type
!= EXPR_CONSTANT
)
4028 mask_true_count
= 0;
4032 if (mask_ctor
->expr
->value
.logical
)
4035 mask_ctor
= gfc_constructor_next (mask_ctor
);
4038 if (mpz_get_si (vector_size
) < mask_true_count
)
4040 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
4041 "provide at least as many elements as there "
4042 "are .TRUE. values in '%s' (%ld/%d)",
4043 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4044 &vector
->where
, gfc_current_intrinsic_arg
[1]->name
,
4045 mpz_get_si (vector_size
), mask_true_count
);
4049 mpz_clear (vector_size
);
4052 if (mask
->rank
!= field
->rank
&& field
->rank
!= 0)
4054 gfc_error ("'%s' argument of '%s' intrinsic at %L must have "
4055 "the same rank as '%s' or be a scalar",
4056 gfc_current_intrinsic_arg
[2]->name
, gfc_current_intrinsic
,
4057 &field
->where
, gfc_current_intrinsic_arg
[1]->name
);
4061 if (mask
->rank
== field
->rank
)
4064 for (i
= 0; i
< field
->rank
; i
++)
4065 if (! identical_dimen_shape (mask
, i
, field
, i
))
4067 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L "
4068 "must have identical shape.",
4069 gfc_current_intrinsic_arg
[2]->name
,
4070 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
4080 gfc_check_verify (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
4082 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
4085 if (same_type_check (x
, 0, y
, 1) == FAILURE
)
4088 if (z
!= NULL
&& type_check (z
, 2, BT_LOGICAL
) == FAILURE
)
4091 if (kind_check (kind
, 3, BT_INTEGER
) == FAILURE
)
4093 if (kind
&& gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: '%s' intrinsic "
4094 "with KIND argument at %L",
4095 gfc_current_intrinsic
, &kind
->where
) == FAILURE
)
4103 gfc_check_trim (gfc_expr
*x
)
4105 if (type_check (x
, 0, BT_CHARACTER
) == FAILURE
)
4108 if (scalar_check (x
, 0) == FAILURE
)
4116 gfc_check_ttynam (gfc_expr
*unit
)
4118 if (scalar_check (unit
, 0) == FAILURE
)
4121 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
4128 /* Common check function for the half a dozen intrinsics that have a
4129 single real argument. */
4132 gfc_check_x (gfc_expr
*x
)
4134 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
4141 /************* Check functions for intrinsic subroutines *************/
4144 gfc_check_cpu_time (gfc_expr
*time
)
4146 if (scalar_check (time
, 0) == FAILURE
)
4149 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
4152 if (variable_check (time
, 0, false) == FAILURE
)
4160 gfc_check_date_and_time (gfc_expr
*date
, gfc_expr
*time
,
4161 gfc_expr
*zone
, gfc_expr
*values
)
4165 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
4167 if (kind_value_check (date
, 0, gfc_default_character_kind
) == FAILURE
)
4169 if (scalar_check (date
, 0) == FAILURE
)
4171 if (variable_check (date
, 0, false) == FAILURE
)
4177 if (type_check (time
, 1, BT_CHARACTER
) == FAILURE
)
4179 if (kind_value_check (time
, 1, gfc_default_character_kind
) == FAILURE
)
4181 if (scalar_check (time
, 1) == FAILURE
)
4183 if (variable_check (time
, 1, false) == FAILURE
)
4189 if (type_check (zone
, 2, BT_CHARACTER
) == FAILURE
)
4191 if (kind_value_check (zone
, 2, gfc_default_character_kind
) == FAILURE
)
4193 if (scalar_check (zone
, 2) == FAILURE
)
4195 if (variable_check (zone
, 2, false) == FAILURE
)
4201 if (type_check (values
, 3, BT_INTEGER
) == FAILURE
)
4203 if (array_check (values
, 3) == FAILURE
)
4205 if (rank_check (values
, 3, 1) == FAILURE
)
4207 if (variable_check (values
, 3, false) == FAILURE
)
4216 gfc_check_mvbits (gfc_expr
*from
, gfc_expr
*frompos
, gfc_expr
*len
,
4217 gfc_expr
*to
, gfc_expr
*topos
)
4219 if (type_check (from
, 0, BT_INTEGER
) == FAILURE
)
4222 if (type_check (frompos
, 1, BT_INTEGER
) == FAILURE
)
4225 if (type_check (len
, 2, BT_INTEGER
) == FAILURE
)
4228 if (same_type_check (from
, 0, to
, 3) == FAILURE
)
4231 if (variable_check (to
, 3, false) == FAILURE
)
4234 if (type_check (topos
, 4, BT_INTEGER
) == FAILURE
)
4237 if (nonnegative_check ("frompos", frompos
) == FAILURE
)
4240 if (nonnegative_check ("topos", topos
) == FAILURE
)
4243 if (nonnegative_check ("len", len
) == FAILURE
)
4246 if (less_than_bitsize2 ("from", from
, "frompos", frompos
, "len", len
)
4250 if (less_than_bitsize2 ("to", to
, "topos", topos
, "len", len
) == FAILURE
)
4258 gfc_check_random_number (gfc_expr
*harvest
)
4260 if (type_check (harvest
, 0, BT_REAL
) == FAILURE
)
4263 if (variable_check (harvest
, 0, false) == FAILURE
)
4271 gfc_check_random_seed (gfc_expr
*size
, gfc_expr
*put
, gfc_expr
*get
)
4273 unsigned int nargs
= 0, kiss_size
;
4274 locus
*where
= NULL
;
4275 mpz_t put_size
, get_size
;
4276 bool have_gfc_real_16
; /* Try and mimic HAVE_GFC_REAL_16 in libgfortran. */
4278 have_gfc_real_16
= gfc_validate_kind (BT_REAL
, 16, true) != -1;
4280 /* Keep the number of bytes in sync with kiss_size in
4281 libgfortran/intrinsics/random.c. */
4282 kiss_size
= (have_gfc_real_16
? 48 : 32) / gfc_default_integer_kind
;
4286 if (size
->expr_type
!= EXPR_VARIABLE
4287 || !size
->symtree
->n
.sym
->attr
.optional
)
4290 if (scalar_check (size
, 0) == FAILURE
)
4293 if (type_check (size
, 0, BT_INTEGER
) == FAILURE
)
4296 if (variable_check (size
, 0, false) == FAILURE
)
4299 if (kind_value_check (size
, 0, gfc_default_integer_kind
) == FAILURE
)
4305 if (put
->expr_type
!= EXPR_VARIABLE
4306 || !put
->symtree
->n
.sym
->attr
.optional
)
4309 where
= &put
->where
;
4312 if (array_check (put
, 1) == FAILURE
)
4315 if (rank_check (put
, 1, 1) == FAILURE
)
4318 if (type_check (put
, 1, BT_INTEGER
) == FAILURE
)
4321 if (kind_value_check (put
, 1, gfc_default_integer_kind
) == FAILURE
)
4324 if (gfc_array_size (put
, &put_size
) == SUCCESS
4325 && mpz_get_ui (put_size
) < kiss_size
)
4326 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
4327 "too small (%i/%i)",
4328 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
4329 where
, (int) mpz_get_ui (put_size
), kiss_size
);
4334 if (get
->expr_type
!= EXPR_VARIABLE
4335 || !get
->symtree
->n
.sym
->attr
.optional
)
4338 where
= &get
->where
;
4341 if (array_check (get
, 2) == FAILURE
)
4344 if (rank_check (get
, 2, 1) == FAILURE
)
4347 if (type_check (get
, 2, BT_INTEGER
) == FAILURE
)
4350 if (variable_check (get
, 2, false) == FAILURE
)
4353 if (kind_value_check (get
, 2, gfc_default_integer_kind
) == FAILURE
)
4356 if (gfc_array_size (get
, &get_size
) == SUCCESS
4357 && mpz_get_ui (get_size
) < kiss_size
)
4358 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
4359 "too small (%i/%i)",
4360 gfc_current_intrinsic_arg
[2]->name
, gfc_current_intrinsic
,
4361 where
, (int) mpz_get_ui (get_size
), kiss_size
);
4364 /* RANDOM_SEED may not have more than one non-optional argument. */
4366 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
, where
);
4373 gfc_check_second_sub (gfc_expr
*time
)
4375 if (scalar_check (time
, 0) == FAILURE
)
4378 if (type_check (time
, 0, BT_REAL
) == FAILURE
)
4381 if (kind_value_check(time
, 0, 4) == FAILURE
)
4388 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
4389 count, count_rate, and count_max are all optional arguments */
4392 gfc_check_system_clock (gfc_expr
*count
, gfc_expr
*count_rate
,
4393 gfc_expr
*count_max
)
4397 if (scalar_check (count
, 0) == FAILURE
)
4400 if (type_check (count
, 0, BT_INTEGER
) == FAILURE
)
4403 if (variable_check (count
, 0, false) == FAILURE
)
4407 if (count_rate
!= NULL
)
4409 if (scalar_check (count_rate
, 1) == FAILURE
)
4412 if (type_check (count_rate
, 1, BT_INTEGER
) == FAILURE
)
4415 if (variable_check (count_rate
, 1, false) == FAILURE
)
4419 && same_type_check (count
, 0, count_rate
, 1) == FAILURE
)
4424 if (count_max
!= NULL
)
4426 if (scalar_check (count_max
, 2) == FAILURE
)
4429 if (type_check (count_max
, 2, BT_INTEGER
) == FAILURE
)
4432 if (variable_check (count_max
, 2, false) == FAILURE
)
4436 && same_type_check (count
, 0, count_max
, 2) == FAILURE
)
4439 if (count_rate
!= NULL
4440 && same_type_check (count_rate
, 1, count_max
, 2) == FAILURE
)
4449 gfc_check_irand (gfc_expr
*x
)
4454 if (scalar_check (x
, 0) == FAILURE
)
4457 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
4460 if (kind_value_check(x
, 0, 4) == FAILURE
)
4468 gfc_check_alarm_sub (gfc_expr
*seconds
, gfc_expr
*handler
, gfc_expr
*status
)
4470 if (scalar_check (seconds
, 0) == FAILURE
)
4472 if (type_check (seconds
, 0, BT_INTEGER
) == FAILURE
)
4475 if (int_or_proc_check (handler
, 1) == FAILURE
)
4477 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
4483 if (scalar_check (status
, 2) == FAILURE
)
4485 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
4487 if (kind_value_check (status
, 2, gfc_default_integer_kind
) == FAILURE
)
4495 gfc_check_rand (gfc_expr
*x
)
4500 if (scalar_check (x
, 0) == FAILURE
)
4503 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
4506 if (kind_value_check(x
, 0, 4) == FAILURE
)
4514 gfc_check_srand (gfc_expr
*x
)
4516 if (scalar_check (x
, 0) == FAILURE
)
4519 if (type_check (x
, 0, BT_INTEGER
) == FAILURE
)
4522 if (kind_value_check(x
, 0, 4) == FAILURE
)
4530 gfc_check_ctime_sub (gfc_expr
*time
, gfc_expr
*result
)
4532 if (scalar_check (time
, 0) == FAILURE
)
4534 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
4537 if (type_check (result
, 1, BT_CHARACTER
) == FAILURE
)
4539 if (kind_value_check (result
, 1, gfc_default_character_kind
) == FAILURE
)
4547 gfc_check_dtime_etime (gfc_expr
*x
)
4549 if (array_check (x
, 0) == FAILURE
)
4552 if (rank_check (x
, 0, 1) == FAILURE
)
4555 if (variable_check (x
, 0, false) == FAILURE
)
4558 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
4561 if (kind_value_check(x
, 0, 4) == FAILURE
)
4569 gfc_check_dtime_etime_sub (gfc_expr
*values
, gfc_expr
*time
)
4571 if (array_check (values
, 0) == FAILURE
)
4574 if (rank_check (values
, 0, 1) == FAILURE
)
4577 if (variable_check (values
, 0, false) == FAILURE
)
4580 if (type_check (values
, 0, BT_REAL
) == FAILURE
)
4583 if (kind_value_check(values
, 0, 4) == FAILURE
)
4586 if (scalar_check (time
, 1) == FAILURE
)
4589 if (type_check (time
, 1, BT_REAL
) == FAILURE
)
4592 if (kind_value_check(time
, 1, 4) == FAILURE
)
4600 gfc_check_fdate_sub (gfc_expr
*date
)
4602 if (type_check (date
, 0, BT_CHARACTER
) == FAILURE
)
4604 if (kind_value_check (date
, 0, gfc_default_character_kind
) == FAILURE
)
4612 gfc_check_gerror (gfc_expr
*msg
)
4614 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
4616 if (kind_value_check (msg
, 0, gfc_default_character_kind
) == FAILURE
)
4624 gfc_check_getcwd_sub (gfc_expr
*cwd
, gfc_expr
*status
)
4626 if (type_check (cwd
, 0, BT_CHARACTER
) == FAILURE
)
4628 if (kind_value_check (cwd
, 0, gfc_default_character_kind
) == FAILURE
)
4634 if (scalar_check (status
, 1) == FAILURE
)
4637 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
4645 gfc_check_getarg (gfc_expr
*pos
, gfc_expr
*value
)
4647 if (type_check (pos
, 0, BT_INTEGER
) == FAILURE
)
4650 if (pos
->ts
.kind
> gfc_default_integer_kind
)
4652 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
4653 "not wider than the default kind (%d)",
4654 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4655 &pos
->where
, gfc_default_integer_kind
);
4659 if (type_check (value
, 1, BT_CHARACTER
) == FAILURE
)
4661 if (kind_value_check (value
, 1, gfc_default_character_kind
) == FAILURE
)
4669 gfc_check_getlog (gfc_expr
*msg
)
4671 if (type_check (msg
, 0, BT_CHARACTER
) == FAILURE
)
4673 if (kind_value_check (msg
, 0, gfc_default_character_kind
) == FAILURE
)
4681 gfc_check_exit (gfc_expr
*status
)
4686 if (type_check (status
, 0, BT_INTEGER
) == FAILURE
)
4689 if (scalar_check (status
, 0) == FAILURE
)
4697 gfc_check_flush (gfc_expr
*unit
)
4702 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
4705 if (scalar_check (unit
, 0) == FAILURE
)
4713 gfc_check_free (gfc_expr
*i
)
4715 if (type_check (i
, 0, BT_INTEGER
) == FAILURE
)
4718 if (scalar_check (i
, 0) == FAILURE
)
4726 gfc_check_hostnm (gfc_expr
*name
)
4728 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
4730 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
4738 gfc_check_hostnm_sub (gfc_expr
*name
, gfc_expr
*status
)
4740 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
4742 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
4748 if (scalar_check (status
, 1) == FAILURE
)
4751 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
4759 gfc_check_itime_idate (gfc_expr
*values
)
4761 if (array_check (values
, 0) == FAILURE
)
4764 if (rank_check (values
, 0, 1) == FAILURE
)
4767 if (variable_check (values
, 0, false) == FAILURE
)
4770 if (type_check (values
, 0, BT_INTEGER
) == FAILURE
)
4773 if (kind_value_check(values
, 0, gfc_default_integer_kind
) == FAILURE
)
4781 gfc_check_ltime_gmtime (gfc_expr
*time
, gfc_expr
*values
)
4783 if (type_check (time
, 0, BT_INTEGER
) == FAILURE
)
4786 if (kind_value_check(time
, 0, gfc_default_integer_kind
) == FAILURE
)
4789 if (scalar_check (time
, 0) == FAILURE
)
4792 if (array_check (values
, 1) == FAILURE
)
4795 if (rank_check (values
, 1, 1) == FAILURE
)
4798 if (variable_check (values
, 1, false) == FAILURE
)
4801 if (type_check (values
, 1, BT_INTEGER
) == FAILURE
)
4804 if (kind_value_check(values
, 1, gfc_default_integer_kind
) == FAILURE
)
4812 gfc_check_ttynam_sub (gfc_expr
*unit
, gfc_expr
*name
)
4814 if (scalar_check (unit
, 0) == FAILURE
)
4817 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
4820 if (type_check (name
, 1, BT_CHARACTER
) == FAILURE
)
4822 if (kind_value_check (name
, 1, gfc_default_character_kind
) == FAILURE
)
4830 gfc_check_isatty (gfc_expr
*unit
)
4835 if (type_check (unit
, 0, BT_INTEGER
) == FAILURE
)
4838 if (scalar_check (unit
, 0) == FAILURE
)
4846 gfc_check_isnan (gfc_expr
*x
)
4848 if (type_check (x
, 0, BT_REAL
) == FAILURE
)
4856 gfc_check_perror (gfc_expr
*string
)
4858 if (type_check (string
, 0, BT_CHARACTER
) == FAILURE
)
4860 if (kind_value_check (string
, 0, gfc_default_character_kind
) == FAILURE
)
4868 gfc_check_umask (gfc_expr
*mask
)
4870 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
4873 if (scalar_check (mask
, 0) == FAILURE
)
4881 gfc_check_umask_sub (gfc_expr
*mask
, gfc_expr
*old
)
4883 if (type_check (mask
, 0, BT_INTEGER
) == FAILURE
)
4886 if (scalar_check (mask
, 0) == FAILURE
)
4892 if (scalar_check (old
, 1) == FAILURE
)
4895 if (type_check (old
, 1, BT_INTEGER
) == FAILURE
)
4903 gfc_check_unlink (gfc_expr
*name
)
4905 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
4907 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
4915 gfc_check_unlink_sub (gfc_expr
*name
, gfc_expr
*status
)
4917 if (type_check (name
, 0, BT_CHARACTER
) == FAILURE
)
4919 if (kind_value_check (name
, 0, gfc_default_character_kind
) == FAILURE
)
4925 if (scalar_check (status
, 1) == FAILURE
)
4928 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
4936 gfc_check_signal (gfc_expr
*number
, gfc_expr
*handler
)
4938 if (scalar_check (number
, 0) == FAILURE
)
4940 if (type_check (number
, 0, BT_INTEGER
) == FAILURE
)
4943 if (int_or_proc_check (handler
, 1) == FAILURE
)
4945 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
4953 gfc_check_signal_sub (gfc_expr
*number
, gfc_expr
*handler
, gfc_expr
*status
)
4955 if (scalar_check (number
, 0) == FAILURE
)
4957 if (type_check (number
, 0, BT_INTEGER
) == FAILURE
)
4960 if (int_or_proc_check (handler
, 1) == FAILURE
)
4962 if (handler
->ts
.type
== BT_INTEGER
&& scalar_check (handler
, 1) == FAILURE
)
4968 if (type_check (status
, 2, BT_INTEGER
) == FAILURE
)
4970 if (scalar_check (status
, 2) == FAILURE
)
4978 gfc_check_system_sub (gfc_expr
*cmd
, gfc_expr
*status
)
4980 if (type_check (cmd
, 0, BT_CHARACTER
) == FAILURE
)
4982 if (kind_value_check (cmd
, 0, gfc_default_character_kind
) == FAILURE
)
4985 if (scalar_check (status
, 1) == FAILURE
)
4988 if (type_check (status
, 1, BT_INTEGER
) == FAILURE
)
4991 if (kind_value_check (status
, 1, gfc_default_integer_kind
) == FAILURE
)
4998 /* This is used for the GNU intrinsics AND, OR and XOR. */
5000 gfc_check_and (gfc_expr
*i
, gfc_expr
*j
)
5002 if (i
->ts
.type
!= BT_INTEGER
&& i
->ts
.type
!= BT_LOGICAL
)
5004 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
5005 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
5006 gfc_current_intrinsic
, &i
->where
);
5010 if (j
->ts
.type
!= BT_INTEGER
&& j
->ts
.type
!= BT_LOGICAL
)
5012 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
5013 "or LOGICAL", gfc_current_intrinsic_arg
[1]->name
,
5014 gfc_current_intrinsic
, &j
->where
);
5018 if (i
->ts
.type
!= j
->ts
.type
)
5020 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
5021 "have the same type", gfc_current_intrinsic_arg
[0]->name
,
5022 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
5027 if (scalar_check (i
, 0) == FAILURE
)
5030 if (scalar_check (j
, 1) == FAILURE
)
5038 gfc_check_storage_size (gfc_expr
*a ATTRIBUTE_UNUSED
, gfc_expr
*kind
)
5043 if (type_check (kind
, 1, BT_INTEGER
) == FAILURE
)
5046 if (scalar_check (kind
, 1) == FAILURE
)
5049 if (kind
->expr_type
!= EXPR_CONSTANT
)
5051 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
5052 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,