2 Copyright (C) 2002-2014 Free Software Foundation, Inc.
3 Contributed by Andy Vaught & Katherine Holcomb
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
22 /* These functions check to see if an argument list is compatible with
23 a particular intrinsic function or subroutine. Presence of
24 required arguments has already been established, the argument list
25 has been sorted into the right order and has NULL arguments in the
26 correct places for missing optional arguments. */
30 #include "coretypes.h"
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_FUNCTION
)
81 && e
->symtree
->n
.sym
->ts
.type
== BT_UNKNOWN
82 && gfc_set_default_type (e
->symtree
->n
.sym
, 0, e
->symtree
->n
.sym
->ns
)
83 && gfc_numeric_ts (&e
->symtree
->n
.sym
->ts
))
85 e
->ts
= e
->symtree
->n
.sym
->ts
;
89 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a numeric type",
90 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
97 /* Check that an expression is integer or real. */
100 int_or_real_check (gfc_expr
*e
, int n
)
102 if (e
->ts
.type
!= BT_INTEGER
&& e
->ts
.type
!= BT_REAL
)
104 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
105 "or REAL", gfc_current_intrinsic_arg
[n
]->name
,
106 gfc_current_intrinsic
, &e
->where
);
114 /* Check that an expression is real or complex. */
117 real_or_complex_check (gfc_expr
*e
, int n
)
119 if (e
->ts
.type
!= BT_REAL
&& e
->ts
.type
!= BT_COMPLEX
)
121 gfc_error ("'%s' argument of '%s' intrinsic at %L must be REAL "
122 "or COMPLEX", gfc_current_intrinsic_arg
[n
]->name
,
123 gfc_current_intrinsic
, &e
->where
);
131 /* Check that an expression is INTEGER or PROCEDURE. */
134 int_or_proc_check (gfc_expr
*e
, int n
)
136 if (e
->ts
.type
!= BT_INTEGER
&& e
->ts
.type
!= BT_PROCEDURE
)
138 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
139 "or PROCEDURE", gfc_current_intrinsic_arg
[n
]->name
,
140 gfc_current_intrinsic
, &e
->where
);
148 /* Check that the expression is an optional constant integer
149 and that it specifies a valid kind for that type. */
152 kind_check (gfc_expr
*k
, int n
, bt type
)
159 if (!type_check (k
, n
, BT_INTEGER
))
162 if (!scalar_check (k
, n
))
165 if (!gfc_check_init_expr (k
))
167 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
168 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
173 if (gfc_extract_int (k
, &kind
) != NULL
174 || gfc_validate_kind (type
, kind
, true) < 0)
176 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type
),
185 /* Make sure the expression is a double precision real. */
188 double_check (gfc_expr
*d
, int n
)
190 if (!type_check (d
, n
, BT_REAL
))
193 if (d
->ts
.kind
!= gfc_default_double_kind
)
195 gfc_error ("'%s' argument of '%s' intrinsic at %L must be double "
196 "precision", gfc_current_intrinsic_arg
[n
]->name
,
197 gfc_current_intrinsic
, &d
->where
);
206 coarray_check (gfc_expr
*e
, int n
)
208 if (e
->ts
.type
== BT_CLASS
&& gfc_expr_attr (e
).class_ok
209 && CLASS_DATA (e
)->attr
.codimension
210 && CLASS_DATA (e
)->as
->corank
)
212 gfc_add_class_array_ref (e
);
216 if (!gfc_is_coarray (e
))
218 gfc_error ("Expected coarray variable as '%s' argument to the %s "
219 "intrinsic at %L", gfc_current_intrinsic_arg
[n
]->name
,
220 gfc_current_intrinsic
, &e
->where
);
228 /* Make sure the expression is a logical array. */
231 logical_array_check (gfc_expr
*array
, int n
)
233 if (array
->ts
.type
!= BT_LOGICAL
|| array
->rank
== 0)
235 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a logical "
236 "array", gfc_current_intrinsic_arg
[n
]->name
,
237 gfc_current_intrinsic
, &array
->where
);
245 /* Make sure an expression is an array. */
248 array_check (gfc_expr
*e
, int n
)
250 if (e
->ts
.type
== BT_CLASS
&& gfc_expr_attr (e
).class_ok
251 && CLASS_DATA (e
)->attr
.dimension
252 && CLASS_DATA (e
)->as
->rank
)
254 gfc_add_class_array_ref (e
);
258 if (e
->rank
!= 0 && e
->ts
.type
!= BT_PROCEDURE
)
261 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array",
262 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
269 /* If expr is a constant, then check to ensure that it is greater than
273 nonnegative_check (const char *arg
, gfc_expr
*expr
)
277 if (expr
->expr_type
== EXPR_CONSTANT
)
279 gfc_extract_int (expr
, &i
);
282 gfc_error ("'%s' at %L must be nonnegative", arg
, &expr
->where
);
291 /* If expr2 is constant, then check that the value is less than
292 (less than or equal to, if 'or_equal' is true) bit_size(expr1). */
295 less_than_bitsize1 (const char *arg1
, gfc_expr
*expr1
, const char *arg2
,
296 gfc_expr
*expr2
, bool or_equal
)
300 if (expr2
->expr_type
== EXPR_CONSTANT
)
302 gfc_extract_int (expr2
, &i2
);
303 i3
= gfc_validate_kind (BT_INTEGER
, expr1
->ts
.kind
, false);
305 /* For ISHFT[C], check that |shift| <= bit_size(i). */
311 if (i2
> gfc_integer_kinds
[i3
].bit_size
)
313 gfc_error ("The absolute value of SHIFT at %L must be less "
314 "than or equal to BIT_SIZE('%s')",
315 &expr2
->where
, arg1
);
322 if (i2
> gfc_integer_kinds
[i3
].bit_size
)
324 gfc_error ("'%s' at %L must be less than "
325 "or equal to BIT_SIZE('%s')",
326 arg2
, &expr2
->where
, arg1
);
332 if (i2
>= gfc_integer_kinds
[i3
].bit_size
)
334 gfc_error ("'%s' at %L must be less than BIT_SIZE('%s')",
335 arg2
, &expr2
->where
, arg1
);
345 /* If expr is constant, then check that the value is less than or equal
346 to the bit_size of the kind k. */
349 less_than_bitsizekind (const char *arg
, gfc_expr
*expr
, int k
)
353 if (expr
->expr_type
!= EXPR_CONSTANT
)
356 i
= gfc_validate_kind (BT_INTEGER
, k
, false);
357 gfc_extract_int (expr
, &val
);
359 if (val
> gfc_integer_kinds
[i
].bit_size
)
361 gfc_error ("'%s' at %L must be less than or equal to the BIT_SIZE of "
362 "INTEGER(KIND=%d)", arg
, &expr
->where
, k
);
370 /* If expr2 and expr3 are constants, then check that the value is less than
371 or equal to bit_size(expr1). */
374 less_than_bitsize2 (const char *arg1
, gfc_expr
*expr1
, const char *arg2
,
375 gfc_expr
*expr2
, const char *arg3
, gfc_expr
*expr3
)
379 if (expr2
->expr_type
== EXPR_CONSTANT
&& expr3
->expr_type
== EXPR_CONSTANT
)
381 gfc_extract_int (expr2
, &i2
);
382 gfc_extract_int (expr3
, &i3
);
384 i3
= gfc_validate_kind (BT_INTEGER
, expr1
->ts
.kind
, false);
385 if (i2
> gfc_integer_kinds
[i3
].bit_size
)
387 gfc_error ("'%s + %s' at %L must be less than or equal "
389 arg2
, arg3
, &expr2
->where
, arg1
);
397 /* Make sure two expressions have the same type. */
400 same_type_check (gfc_expr
*e
, int n
, gfc_expr
*f
, int m
)
402 if (gfc_compare_types (&e
->ts
, &f
->ts
))
405 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same type "
406 "and kind as '%s'", gfc_current_intrinsic_arg
[m
]->name
,
407 gfc_current_intrinsic
, &f
->where
,
408 gfc_current_intrinsic_arg
[n
]->name
);
414 /* Make sure that an expression has a certain (nonzero) rank. */
417 rank_check (gfc_expr
*e
, int n
, int rank
)
422 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank %d",
423 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
430 /* Make sure a variable expression is not an optional dummy argument. */
433 nonoptional_check (gfc_expr
*e
, int n
)
435 if (e
->expr_type
== EXPR_VARIABLE
&& e
->symtree
->n
.sym
->attr
.optional
)
437 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
438 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
442 /* TODO: Recursive check on nonoptional variables? */
448 /* Check for ALLOCATABLE attribute. */
451 allocatable_check (gfc_expr
*e
, int n
)
453 symbol_attribute attr
;
455 attr
= gfc_variable_attr (e
, NULL
);
456 if (!attr
.allocatable
|| attr
.associate_var
)
458 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
459 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
468 /* Check that an expression has a particular kind. */
471 kind_value_check (gfc_expr
*e
, int n
, int k
)
476 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of kind %d",
477 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
484 /* Make sure an expression is a variable. */
487 variable_check (gfc_expr
*e
, int n
, bool allow_proc
)
489 if (e
->expr_type
== EXPR_VARIABLE
490 && e
->symtree
->n
.sym
->attr
.intent
== INTENT_IN
491 && (gfc_current_intrinsic_arg
[n
]->intent
== INTENT_OUT
492 || gfc_current_intrinsic_arg
[n
]->intent
== INTENT_INOUT
))
495 bool pointer
= e
->symtree
->n
.sym
->ts
.type
== BT_CLASS
496 && CLASS_DATA (e
->symtree
->n
.sym
)
497 ? CLASS_DATA (e
->symtree
->n
.sym
)->attr
.class_pointer
498 : e
->symtree
->n
.sym
->attr
.pointer
;
500 for (ref
= e
->ref
; ref
; ref
= ref
->next
)
502 if (pointer
&& ref
->type
== REF_COMPONENT
)
504 if (ref
->type
== REF_COMPONENT
505 && ((ref
->u
.c
.component
->ts
.type
== BT_CLASS
506 && CLASS_DATA (ref
->u
.c
.component
)->attr
.class_pointer
)
507 || (ref
->u
.c
.component
->ts
.type
!= BT_CLASS
508 && ref
->u
.c
.component
->attr
.pointer
)))
514 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be "
515 "INTENT(IN)", gfc_current_intrinsic_arg
[n
]->name
,
516 gfc_current_intrinsic
, &e
->where
);
521 if (e
->expr_type
== EXPR_VARIABLE
522 && e
->symtree
->n
.sym
->attr
.flavor
!= FL_PARAMETER
523 && (allow_proc
|| !e
->symtree
->n
.sym
->attr
.function
))
526 if (e
->expr_type
== EXPR_VARIABLE
&& e
->symtree
->n
.sym
->attr
.function
527 && e
->symtree
->n
.sym
== e
->symtree
->n
.sym
->result
)
530 for (ns
= gfc_current_ns
; ns
; ns
= ns
->parent
)
531 if (ns
->proc_name
== e
->symtree
->n
.sym
)
535 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a variable",
536 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
, &e
->where
);
542 /* Check the common DIM parameter for correctness. */
545 dim_check (gfc_expr
*dim
, int n
, bool optional
)
550 if (!type_check (dim
, n
, BT_INTEGER
))
553 if (!scalar_check (dim
, n
))
556 if (!optional
&& !nonoptional_check (dim
, n
))
563 /* If a coarray DIM parameter is a constant, make sure that it is greater than
564 zero and less than or equal to the corank of the given array. */
567 dim_corank_check (gfc_expr
*dim
, gfc_expr
*array
)
571 gcc_assert (array
->expr_type
== EXPR_VARIABLE
);
573 if (dim
->expr_type
!= EXPR_CONSTANT
)
576 if (array
->ts
.type
== BT_CLASS
)
579 corank
= gfc_get_corank (array
);
581 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
582 || mpz_cmp_ui (dim
->value
.integer
, corank
) > 0)
584 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
585 "codimension index", gfc_current_intrinsic
, &dim
->where
);
594 /* If a DIM parameter is a constant, make sure that it is greater than
595 zero and less than or equal to the rank of the given array. If
596 allow_assumed is zero then dim must be less than the rank of the array
597 for assumed size arrays. */
600 dim_rank_check (gfc_expr
*dim
, gfc_expr
*array
, int allow_assumed
)
608 if (dim
->expr_type
!= EXPR_CONSTANT
)
611 if (array
->expr_type
== EXPR_FUNCTION
&& array
->value
.function
.isym
612 && array
->value
.function
.isym
->id
== GFC_ISYM_SPREAD
)
613 rank
= array
->rank
+ 1;
617 /* Assumed-rank array. */
619 rank
= GFC_MAX_DIMENSIONS
;
621 if (array
->expr_type
== EXPR_VARIABLE
)
623 ar
= gfc_find_array_ref (array
);
624 if (ar
->as
->type
== AS_ASSUMED_SIZE
626 && ar
->type
!= AR_ELEMENT
627 && ar
->type
!= AR_SECTION
)
631 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
632 || mpz_cmp_ui (dim
->value
.integer
, rank
) > 0)
634 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
635 "dimension index", gfc_current_intrinsic
, &dim
->where
);
644 /* Compare the size of a along dimension ai with the size of b along
645 dimension bi, returning 0 if they are known not to be identical,
646 and 1 if they are identical, or if this cannot be determined. */
649 identical_dimen_shape (gfc_expr
*a
, int ai
, gfc_expr
*b
, int bi
)
651 mpz_t a_size
, b_size
;
654 gcc_assert (a
->rank
> ai
);
655 gcc_assert (b
->rank
> bi
);
659 if (gfc_array_dimen_size (a
, ai
, &a_size
))
661 if (gfc_array_dimen_size (b
, bi
, &b_size
))
663 if (mpz_cmp (a_size
, b_size
) != 0)
673 /* Calculate the length of a character variable, including substrings.
674 Strip away parentheses if necessary. Return -1 if no length could
678 gfc_var_strlen (const gfc_expr
*a
)
682 while (a
->expr_type
== EXPR_OP
&& a
->value
.op
.op
== INTRINSIC_PARENTHESES
)
685 for (ra
= a
->ref
; ra
!= NULL
&& ra
->type
!= REF_SUBSTRING
; ra
= ra
->next
)
695 if ((!ra
->u
.ss
.start
|| ra
->u
.ss
.start
->expr_type
== EXPR_CONSTANT
)
696 && ra
->u
.ss
.end
->expr_type
== EXPR_CONSTANT
)
698 start_a
= ra
->u
.ss
.start
? mpz_get_si (ra
->u
.ss
.start
->value
.integer
)
700 end_a
= mpz_get_si (ra
->u
.ss
.end
->value
.integer
);
701 return (end_a
< start_a
) ? 0 : end_a
- start_a
+ 1;
703 else if (ra
->u
.ss
.start
704 && gfc_dep_compare_expr (ra
->u
.ss
.start
, ra
->u
.ss
.end
) == 0)
710 if (a
->ts
.u
.cl
&& a
->ts
.u
.cl
->length
711 && a
->ts
.u
.cl
->length
->expr_type
== EXPR_CONSTANT
)
712 return mpz_get_si (a
->ts
.u
.cl
->length
->value
.integer
);
713 else if (a
->expr_type
== EXPR_CONSTANT
714 && (a
->ts
.u
.cl
== NULL
|| a
->ts
.u
.cl
->length
== NULL
))
715 return a
->value
.character
.length
;
721 /* Check whether two character expressions have the same length;
722 returns true if they have or if the length cannot be determined,
723 otherwise return false and raise a gfc_error. */
726 gfc_check_same_strlen (const gfc_expr
*a
, const gfc_expr
*b
, const char *name
)
730 len_a
= gfc_var_strlen(a
);
731 len_b
= gfc_var_strlen(b
);
733 if (len_a
== -1 || len_b
== -1 || len_a
== len_b
)
737 gfc_error ("Unequal character lengths (%ld/%ld) in %s at %L",
738 len_a
, len_b
, name
, &a
->where
);
744 /***** Check functions *****/
746 /* Check subroutine suitable for intrinsics taking a real argument and
747 a kind argument for the result. */
750 check_a_kind (gfc_expr
*a
, gfc_expr
*kind
, bt type
)
752 if (!type_check (a
, 0, BT_REAL
))
754 if (!kind_check (kind
, 1, type
))
761 /* Check subroutine suitable for ceiling, floor and nint. */
764 gfc_check_a_ikind (gfc_expr
*a
, gfc_expr
*kind
)
766 return check_a_kind (a
, kind
, BT_INTEGER
);
770 /* Check subroutine suitable for aint, anint. */
773 gfc_check_a_xkind (gfc_expr
*a
, gfc_expr
*kind
)
775 return check_a_kind (a
, kind
, BT_REAL
);
780 gfc_check_abs (gfc_expr
*a
)
782 if (!numeric_check (a
, 0))
790 gfc_check_achar (gfc_expr
*a
, gfc_expr
*kind
)
792 if (!type_check (a
, 0, BT_INTEGER
))
794 if (!kind_check (kind
, 1, BT_CHARACTER
))
802 gfc_check_access_func (gfc_expr
*name
, gfc_expr
*mode
)
804 if (!type_check (name
, 0, BT_CHARACTER
)
805 || !scalar_check (name
, 0))
807 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
810 if (!type_check (mode
, 1, BT_CHARACTER
)
811 || !scalar_check (mode
, 1))
813 if (!kind_value_check (mode
, 1, gfc_default_character_kind
))
821 gfc_check_all_any (gfc_expr
*mask
, gfc_expr
*dim
)
823 if (!logical_array_check (mask
, 0))
826 if (!dim_check (dim
, 1, false))
829 if (!dim_rank_check (dim
, mask
, 0))
837 gfc_check_allocated (gfc_expr
*array
)
839 if (!variable_check (array
, 0, false))
841 if (!allocatable_check (array
, 0))
848 /* Common check function where the first argument must be real or
849 integer and the second argument must be the same as the first. */
852 gfc_check_a_p (gfc_expr
*a
, gfc_expr
*p
)
854 if (!int_or_real_check (a
, 0))
857 if (a
->ts
.type
!= p
->ts
.type
)
859 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
860 "have the same type", gfc_current_intrinsic_arg
[0]->name
,
861 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
866 if (a
->ts
.kind
!= p
->ts
.kind
)
868 if (!gfc_notify_std (GFC_STD_GNU
, "Different type kinds at %L",
878 gfc_check_x_yd (gfc_expr
*x
, gfc_expr
*y
)
880 if (!double_check (x
, 0) || !double_check (y
, 1))
888 gfc_check_associated (gfc_expr
*pointer
, gfc_expr
*target
)
890 symbol_attribute attr1
, attr2
;
895 where
= &pointer
->where
;
897 if (pointer
->expr_type
== EXPR_NULL
)
900 attr1
= gfc_expr_attr (pointer
);
902 if (!attr1
.pointer
&& !attr1
.proc_pointer
)
904 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
905 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
911 if (attr1
.pointer
&& gfc_is_coindexed (pointer
))
913 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
914 "coindexed", gfc_current_intrinsic_arg
[0]->name
,
915 gfc_current_intrinsic
, &pointer
->where
);
919 /* Target argument is optional. */
923 where
= &target
->where
;
924 if (target
->expr_type
== EXPR_NULL
)
927 if (target
->expr_type
== EXPR_VARIABLE
|| target
->expr_type
== EXPR_FUNCTION
)
928 attr2
= gfc_expr_attr (target
);
931 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
932 "or target VARIABLE or FUNCTION",
933 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
938 if (attr1
.pointer
&& !attr2
.pointer
&& !attr2
.target
)
940 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
941 "or a TARGET", gfc_current_intrinsic_arg
[1]->name
,
942 gfc_current_intrinsic
, &target
->where
);
947 if (attr1
.pointer
&& gfc_is_coindexed (target
))
949 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
950 "coindexed", gfc_current_intrinsic_arg
[1]->name
,
951 gfc_current_intrinsic
, &target
->where
);
956 if (!same_type_check (pointer
, 0, target
, 1))
958 if (!rank_check (target
, 0, pointer
->rank
))
960 if (target
->rank
> 0)
962 for (i
= 0; i
< target
->rank
; i
++)
963 if (target
->ref
->u
.ar
.dimen_type
[i
] == DIMEN_VECTOR
)
965 gfc_error ("Array section with a vector subscript at %L shall not "
966 "be the target of a pointer",
976 gfc_error ("NULL pointer at %L is not permitted as actual argument "
977 "of '%s' intrinsic function", where
, gfc_current_intrinsic
);
984 gfc_check_atan_2 (gfc_expr
*y
, gfc_expr
*x
)
986 /* gfc_notify_std would be a waste of time as the return value
987 is seemingly used only for the generic resolution. The error
988 will be: Too many arguments. */
989 if ((gfc_option
.allow_std
& GFC_STD_F2008
) == 0)
992 return gfc_check_atan2 (y
, x
);
997 gfc_check_atan2 (gfc_expr
*y
, gfc_expr
*x
)
999 if (!type_check (y
, 0, BT_REAL
))
1001 if (!same_type_check (y
, 0, x
, 1))
1009 gfc_check_atomic (gfc_expr
*atom
, gfc_expr
*value
)
1011 if (atom
->expr_type
== EXPR_FUNCTION
1012 && atom
->value
.function
.isym
1013 && atom
->value
.function
.isym
->id
== GFC_ISYM_CAF_GET
)
1014 atom
= atom
->value
.function
.actual
->expr
;
1016 if (!(atom
->ts
.type
== BT_INTEGER
&& atom
->ts
.kind
== gfc_atomic_int_kind
)
1017 && !(atom
->ts
.type
== BT_LOGICAL
1018 && atom
->ts
.kind
== gfc_atomic_logical_kind
))
1020 gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1021 "integer of ATOMIC_INT_KIND or a logical of "
1022 "ATOMIC_LOGICAL_KIND", &atom
->where
, gfc_current_intrinsic
);
1026 if (!gfc_expr_attr (atom
).codimension
)
1028 gfc_error ("ATOM argument at %L of the %s intrinsic function shall be a "
1029 "coarray or coindexed", &atom
->where
, gfc_current_intrinsic
);
1033 if (atom
->ts
.type
!= value
->ts
.type
)
1035 gfc_error ("ATOM and VALUE argument of the %s intrinsic function shall "
1036 "have the same type at %L", gfc_current_intrinsic
,
1046 gfc_check_atomic_def (gfc_expr
*atom
, gfc_expr
*value
)
1048 if (atom
->expr_type
== EXPR_FUNCTION
1049 && atom
->value
.function
.isym
1050 && atom
->value
.function
.isym
->id
== GFC_ISYM_CAF_GET
)
1051 atom
= atom
->value
.function
.actual
->expr
;
1053 if (!scalar_check (atom
, 0) || !scalar_check (value
, 1))
1056 if (!gfc_check_vardef_context (atom
, false, false, false, NULL
))
1058 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1059 "definable", gfc_current_intrinsic
, &atom
->where
);
1063 return gfc_check_atomic (atom
, value
);
1068 gfc_check_atomic_ref (gfc_expr
*value
, gfc_expr
*atom
)
1070 if (!scalar_check (value
, 0) || !scalar_check (atom
, 1))
1073 if (!gfc_check_vardef_context (value
, false, false, false, NULL
))
1075 gfc_error ("VALUE argument of the %s intrinsic function at %L shall be "
1076 "definable", gfc_current_intrinsic
, &value
->where
);
1080 return gfc_check_atomic (atom
, value
);
1084 /* BESJN and BESYN functions. */
1087 gfc_check_besn (gfc_expr
*n
, gfc_expr
*x
)
1089 if (!type_check (n
, 0, BT_INTEGER
))
1091 if (n
->expr_type
== EXPR_CONSTANT
)
1094 gfc_extract_int (n
, &i
);
1095 if (i
< 0 && !gfc_notify_std (GFC_STD_GNU
, "Negative argument "
1096 "N at %L", &n
->where
))
1100 if (!type_check (x
, 1, BT_REAL
))
1107 /* Transformational version of the Bessel JN and YN functions. */
1110 gfc_check_bessel_n2 (gfc_expr
*n1
, gfc_expr
*n2
, gfc_expr
*x
)
1112 if (!type_check (n1
, 0, BT_INTEGER
))
1114 if (!scalar_check (n1
, 0))
1116 if (!nonnegative_check ("N1", n1
))
1119 if (!type_check (n2
, 1, BT_INTEGER
))
1121 if (!scalar_check (n2
, 1))
1123 if (!nonnegative_check ("N2", n2
))
1126 if (!type_check (x
, 2, BT_REAL
))
1128 if (!scalar_check (x
, 2))
1136 gfc_check_bge_bgt_ble_blt (gfc_expr
*i
, gfc_expr
*j
)
1138 if (!type_check (i
, 0, BT_INTEGER
))
1141 if (!type_check (j
, 1, BT_INTEGER
))
1149 gfc_check_bitfcn (gfc_expr
*i
, gfc_expr
*pos
)
1151 if (!type_check (i
, 0, BT_INTEGER
))
1154 if (!type_check (pos
, 1, BT_INTEGER
))
1157 if (!nonnegative_check ("pos", pos
))
1160 if (!less_than_bitsize1 ("i", i
, "pos", pos
, false))
1168 gfc_check_char (gfc_expr
*i
, gfc_expr
*kind
)
1170 if (!type_check (i
, 0, BT_INTEGER
))
1172 if (!kind_check (kind
, 1, BT_CHARACTER
))
1180 gfc_check_chdir (gfc_expr
*dir
)
1182 if (!type_check (dir
, 0, BT_CHARACTER
))
1184 if (!kind_value_check (dir
, 0, gfc_default_character_kind
))
1192 gfc_check_chdir_sub (gfc_expr
*dir
, gfc_expr
*status
)
1194 if (!type_check (dir
, 0, BT_CHARACTER
))
1196 if (!kind_value_check (dir
, 0, gfc_default_character_kind
))
1202 if (!type_check (status
, 1, BT_INTEGER
))
1204 if (!scalar_check (status
, 1))
1212 gfc_check_chmod (gfc_expr
*name
, gfc_expr
*mode
)
1214 if (!type_check (name
, 0, BT_CHARACTER
))
1216 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
1219 if (!type_check (mode
, 1, BT_CHARACTER
))
1221 if (!kind_value_check (mode
, 1, gfc_default_character_kind
))
1229 gfc_check_chmod_sub (gfc_expr
*name
, gfc_expr
*mode
, gfc_expr
*status
)
1231 if (!type_check (name
, 0, BT_CHARACTER
))
1233 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
1236 if (!type_check (mode
, 1, BT_CHARACTER
))
1238 if (!kind_value_check (mode
, 1, gfc_default_character_kind
))
1244 if (!type_check (status
, 2, BT_INTEGER
))
1247 if (!scalar_check (status
, 2))
1255 gfc_check_cmplx (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*kind
)
1257 if (!numeric_check (x
, 0))
1262 if (!numeric_check (y
, 1))
1265 if (x
->ts
.type
== BT_COMPLEX
)
1267 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1268 "present if 'x' is COMPLEX",
1269 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1274 if (y
->ts
.type
== BT_COMPLEX
)
1276 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1277 "of either REAL or INTEGER",
1278 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1285 if (!kind_check (kind
, 2, BT_COMPLEX
))
1288 if (!kind
&& gfc_option
.gfc_warn_conversion
1289 && x
->ts
.type
== BT_REAL
&& x
->ts
.kind
> gfc_default_real_kind
)
1290 gfc_warning_now ("Conversion from %s to default-kind COMPLEX(%d) at %L "
1291 "might lose precision, consider using the KIND argument",
1292 gfc_typename (&x
->ts
), gfc_default_real_kind
, &x
->where
);
1293 else if (y
&& !kind
&& gfc_option
.gfc_warn_conversion
1294 && y
->ts
.type
== BT_REAL
&& y
->ts
.kind
> gfc_default_real_kind
)
1295 gfc_warning_now ("Conversion from %s to default-kind COMPLEX(%d) at %L "
1296 "might lose precision, consider using the KIND argument",
1297 gfc_typename (&y
->ts
), gfc_default_real_kind
, &y
->where
);
1304 check_co_minmaxsum (gfc_expr
*a
, gfc_expr
*result_image
, gfc_expr
*stat
,
1307 if (!variable_check (a
, 0, false))
1310 if (result_image
!= NULL
)
1312 if (!type_check (result_image
, 1, BT_INTEGER
))
1314 if (!scalar_check (result_image
, 1))
1320 if (!type_check (stat
, 2, BT_INTEGER
))
1322 if (!scalar_check (stat
, 2))
1324 if (!variable_check (stat
, 2, false))
1326 if (stat
->ts
.kind
!= 4)
1328 gfc_error ("The stat= argument at %L must be a kind=4 integer "
1329 "variable", &stat
->where
);
1336 if (!type_check (errmsg
, 3, BT_CHARACTER
))
1338 if (!scalar_check (errmsg
, 3))
1340 if (!variable_check (errmsg
, 3, false))
1342 if (errmsg
->ts
.kind
!= 1)
1344 gfc_error ("The errmsg= argument at %L must be a default-kind "
1345 "character variable", &errmsg
->where
);
1350 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
1352 gfc_fatal_error ("Coarrays disabled at %L, use -fcoarray= to enable",
1362 gfc_check_co_minmax (gfc_expr
*a
, gfc_expr
*result_image
, gfc_expr
*stat
,
1365 if (a
->ts
.type
!= BT_INTEGER
&& a
->ts
.type
!= BT_REAL
1366 && a
->ts
.type
!= BT_CHARACTER
)
1368 gfc_error ("'%s' argument of '%s' intrinsic at %L shall be of type "
1369 "integer, real or character",
1370 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
1374 return check_co_minmaxsum (a
, result_image
, stat
, errmsg
);
1379 gfc_check_co_sum (gfc_expr
*a
, gfc_expr
*result_image
, gfc_expr
*stat
,
1382 if (!numeric_check (a
, 0))
1384 return check_co_minmaxsum (a
, result_image
, stat
, errmsg
);
1389 gfc_check_complex (gfc_expr
*x
, gfc_expr
*y
)
1391 if (!int_or_real_check (x
, 0))
1393 if (!scalar_check (x
, 0))
1396 if (!int_or_real_check (y
, 1))
1398 if (!scalar_check (y
, 1))
1406 gfc_check_count (gfc_expr
*mask
, gfc_expr
*dim
, gfc_expr
*kind
)
1408 if (!logical_array_check (mask
, 0))
1410 if (!dim_check (dim
, 1, false))
1412 if (!dim_rank_check (dim
, mask
, 0))
1414 if (!kind_check (kind
, 2, BT_INTEGER
))
1416 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
1417 "with KIND argument at %L",
1418 gfc_current_intrinsic
, &kind
->where
))
1426 gfc_check_cshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*dim
)
1428 if (!array_check (array
, 0))
1431 if (!type_check (shift
, 1, BT_INTEGER
))
1434 if (!dim_check (dim
, 2, true))
1437 if (!dim_rank_check (dim
, array
, false))
1440 if (array
->rank
== 1 || shift
->rank
== 0)
1442 if (!scalar_check (shift
, 1))
1445 else if (shift
->rank
== array
->rank
- 1)
1450 else if (dim
->expr_type
== EXPR_CONSTANT
)
1451 gfc_extract_int (dim
, &d
);
1458 for (i
= 0, j
= 0; i
< array
->rank
; i
++)
1461 if (!identical_dimen_shape (array
, i
, shift
, j
))
1463 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1464 "invalid shape in dimension %d (%ld/%ld)",
1465 gfc_current_intrinsic_arg
[1]->name
,
1466 gfc_current_intrinsic
, &shift
->where
, i
+ 1,
1467 mpz_get_si (array
->shape
[i
]),
1468 mpz_get_si (shift
->shape
[j
]));
1478 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1479 "%d or be a scalar", gfc_current_intrinsic_arg
[1]->name
,
1480 gfc_current_intrinsic
, &shift
->where
, array
->rank
- 1);
1489 gfc_check_ctime (gfc_expr
*time
)
1491 if (!scalar_check (time
, 0))
1494 if (!type_check (time
, 0, BT_INTEGER
))
1501 bool gfc_check_datan2 (gfc_expr
*y
, gfc_expr
*x
)
1503 if (!double_check (y
, 0) || !double_check (x
, 1))
1510 gfc_check_dcmplx (gfc_expr
*x
, gfc_expr
*y
)
1512 if (!numeric_check (x
, 0))
1517 if (!numeric_check (y
, 1))
1520 if (x
->ts
.type
== BT_COMPLEX
)
1522 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1523 "present if 'x' is COMPLEX",
1524 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1529 if (y
->ts
.type
== BT_COMPLEX
)
1531 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1532 "of either REAL or INTEGER",
1533 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1544 gfc_check_dble (gfc_expr
*x
)
1546 if (!numeric_check (x
, 0))
1554 gfc_check_digits (gfc_expr
*x
)
1556 if (!int_or_real_check (x
, 0))
1564 gfc_check_dot_product (gfc_expr
*vector_a
, gfc_expr
*vector_b
)
1566 switch (vector_a
->ts
.type
)
1569 if (!type_check (vector_b
, 1, BT_LOGICAL
))
1576 if (!numeric_check (vector_b
, 1))
1581 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1582 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
1583 gfc_current_intrinsic
, &vector_a
->where
);
1587 if (!rank_check (vector_a
, 0, 1))
1590 if (!rank_check (vector_b
, 1, 1))
1593 if (! identical_dimen_shape (vector_a
, 0, vector_b
, 0))
1595 gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
1596 "intrinsic 'dot_product'", gfc_current_intrinsic_arg
[0]->name
,
1597 gfc_current_intrinsic_arg
[1]->name
, &vector_a
->where
);
1606 gfc_check_dprod (gfc_expr
*x
, gfc_expr
*y
)
1608 if (!type_check (x
, 0, BT_REAL
)
1609 || !type_check (y
, 1, BT_REAL
))
1612 if (x
->ts
.kind
!= gfc_default_real_kind
)
1614 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1615 "real", gfc_current_intrinsic_arg
[0]->name
,
1616 gfc_current_intrinsic
, &x
->where
);
1620 if (y
->ts
.kind
!= gfc_default_real_kind
)
1622 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1623 "real", gfc_current_intrinsic_arg
[1]->name
,
1624 gfc_current_intrinsic
, &y
->where
);
1633 gfc_check_dshift (gfc_expr
*i
, gfc_expr
*j
, gfc_expr
*shift
)
1635 if (!type_check (i
, 0, BT_INTEGER
))
1638 if (!type_check (j
, 1, BT_INTEGER
))
1641 if (i
->is_boz
&& j
->is_boz
)
1643 gfc_error ("'I' at %L and 'J' at %L cannot both be BOZ literal "
1644 "constants", &i
->where
, &j
->where
);
1648 if (!i
->is_boz
&& !j
->is_boz
&& !same_type_check (i
, 0, j
, 1))
1651 if (!type_check (shift
, 2, BT_INTEGER
))
1654 if (!nonnegative_check ("SHIFT", shift
))
1659 if (!less_than_bitsize1 ("J", j
, "SHIFT", shift
, true))
1661 i
->ts
.kind
= j
->ts
.kind
;
1665 if (!less_than_bitsize1 ("I", i
, "SHIFT", shift
, true))
1667 j
->ts
.kind
= i
->ts
.kind
;
1675 gfc_check_eoshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*boundary
,
1678 if (!array_check (array
, 0))
1681 if (!type_check (shift
, 1, BT_INTEGER
))
1684 if (!dim_check (dim
, 3, true))
1687 if (!dim_rank_check (dim
, array
, false))
1690 if (array
->rank
== 1 || shift
->rank
== 0)
1692 if (!scalar_check (shift
, 1))
1695 else if (shift
->rank
== array
->rank
- 1)
1700 else if (dim
->expr_type
== EXPR_CONSTANT
)
1701 gfc_extract_int (dim
, &d
);
1708 for (i
= 0, j
= 0; i
< array
->rank
; i
++)
1711 if (!identical_dimen_shape (array
, i
, shift
, j
))
1713 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1714 "invalid shape in dimension %d (%ld/%ld)",
1715 gfc_current_intrinsic_arg
[1]->name
,
1716 gfc_current_intrinsic
, &shift
->where
, i
+ 1,
1717 mpz_get_si (array
->shape
[i
]),
1718 mpz_get_si (shift
->shape
[j
]));
1728 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1729 "%d or be a scalar", gfc_current_intrinsic_arg
[1]->name
,
1730 gfc_current_intrinsic
, &shift
->where
, array
->rank
- 1);
1734 if (boundary
!= NULL
)
1736 if (!same_type_check (array
, 0, boundary
, 2))
1739 if (array
->rank
== 1 || boundary
->rank
== 0)
1741 if (!scalar_check (boundary
, 2))
1744 else if (boundary
->rank
== array
->rank
- 1)
1746 if (!gfc_check_conformance (shift
, boundary
,
1747 "arguments '%s' and '%s' for "
1749 gfc_current_intrinsic_arg
[1]->name
,
1750 gfc_current_intrinsic_arg
[2]->name
,
1751 gfc_current_intrinsic
))
1756 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have "
1757 "rank %d or be a scalar",
1758 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1759 &shift
->where
, array
->rank
- 1);
1768 gfc_check_float (gfc_expr
*a
)
1770 if (!type_check (a
, 0, BT_INTEGER
))
1773 if ((a
->ts
.kind
!= gfc_default_integer_kind
)
1774 && !gfc_notify_std (GFC_STD_GNU
, "non-default INTEGER "
1775 "kind argument to %s intrinsic at %L",
1776 gfc_current_intrinsic
, &a
->where
))
1782 /* A single complex argument. */
1785 gfc_check_fn_c (gfc_expr
*a
)
1787 if (!type_check (a
, 0, BT_COMPLEX
))
1793 /* A single real argument. */
1796 gfc_check_fn_r (gfc_expr
*a
)
1798 if (!type_check (a
, 0, BT_REAL
))
1804 /* A single double argument. */
1807 gfc_check_fn_d (gfc_expr
*a
)
1809 if (!double_check (a
, 0))
1815 /* A single real or complex argument. */
1818 gfc_check_fn_rc (gfc_expr
*a
)
1820 if (!real_or_complex_check (a
, 0))
1828 gfc_check_fn_rc2008 (gfc_expr
*a
)
1830 if (!real_or_complex_check (a
, 0))
1833 if (a
->ts
.type
== BT_COMPLEX
1834 && !gfc_notify_std (GFC_STD_F2008
, "COMPLEX argument '%s' "
1835 "of '%s' intrinsic at %L",
1836 gfc_current_intrinsic_arg
[0]->name
,
1837 gfc_current_intrinsic
, &a
->where
))
1845 gfc_check_fnum (gfc_expr
*unit
)
1847 if (!type_check (unit
, 0, BT_INTEGER
))
1850 if (!scalar_check (unit
, 0))
1858 gfc_check_huge (gfc_expr
*x
)
1860 if (!int_or_real_check (x
, 0))
1868 gfc_check_hypot (gfc_expr
*x
, gfc_expr
*y
)
1870 if (!type_check (x
, 0, BT_REAL
))
1872 if (!same_type_check (x
, 0, y
, 1))
1879 /* Check that the single argument is an integer. */
1882 gfc_check_i (gfc_expr
*i
)
1884 if (!type_check (i
, 0, BT_INTEGER
))
1892 gfc_check_iand (gfc_expr
*i
, gfc_expr
*j
)
1894 if (!type_check (i
, 0, BT_INTEGER
))
1897 if (!type_check (j
, 1, BT_INTEGER
))
1900 if (i
->ts
.kind
!= j
->ts
.kind
)
1902 if (!gfc_notify_std (GFC_STD_GNU
, "Different type kinds at %L",
1912 gfc_check_ibits (gfc_expr
*i
, gfc_expr
*pos
, gfc_expr
*len
)
1914 if (!type_check (i
, 0, BT_INTEGER
))
1917 if (!type_check (pos
, 1, BT_INTEGER
))
1920 if (!type_check (len
, 2, BT_INTEGER
))
1923 if (!nonnegative_check ("pos", pos
))
1926 if (!nonnegative_check ("len", len
))
1929 if (!less_than_bitsize2 ("i", i
, "pos", pos
, "len", len
))
1937 gfc_check_ichar_iachar (gfc_expr
*c
, gfc_expr
*kind
)
1941 if (!type_check (c
, 0, BT_CHARACTER
))
1944 if (!kind_check (kind
, 1, BT_INTEGER
))
1947 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
1948 "with KIND argument at %L",
1949 gfc_current_intrinsic
, &kind
->where
))
1952 if (c
->expr_type
== EXPR_VARIABLE
|| c
->expr_type
== EXPR_SUBSTRING
)
1958 /* Substring references don't have the charlength set. */
1960 while (ref
&& ref
->type
!= REF_SUBSTRING
)
1963 gcc_assert (ref
== NULL
|| ref
->type
== REF_SUBSTRING
);
1967 /* Check that the argument is length one. Non-constant lengths
1968 can't be checked here, so assume they are ok. */
1969 if (c
->ts
.u
.cl
&& c
->ts
.u
.cl
->length
)
1971 /* If we already have a length for this expression then use it. */
1972 if (c
->ts
.u
.cl
->length
->expr_type
!= EXPR_CONSTANT
)
1974 i
= mpz_get_si (c
->ts
.u
.cl
->length
->value
.integer
);
1981 start
= ref
->u
.ss
.start
;
1982 end
= ref
->u
.ss
.end
;
1985 if (end
== NULL
|| end
->expr_type
!= EXPR_CONSTANT
1986 || start
->expr_type
!= EXPR_CONSTANT
)
1989 i
= mpz_get_si (end
->value
.integer
) + 1
1990 - mpz_get_si (start
->value
.integer
);
1998 gfc_error ("Argument of %s at %L must be of length one",
1999 gfc_current_intrinsic
, &c
->where
);
2008 gfc_check_idnint (gfc_expr
*a
)
2010 if (!double_check (a
, 0))
2018 gfc_check_ieor (gfc_expr
*i
, gfc_expr
*j
)
2020 if (!type_check (i
, 0, BT_INTEGER
))
2023 if (!type_check (j
, 1, BT_INTEGER
))
2026 if (i
->ts
.kind
!= j
->ts
.kind
)
2028 if (!gfc_notify_std (GFC_STD_GNU
, "Different type kinds at %L",
2038 gfc_check_index (gfc_expr
*string
, gfc_expr
*substring
, gfc_expr
*back
,
2041 if (!type_check (string
, 0, BT_CHARACTER
)
2042 || !type_check (substring
, 1, BT_CHARACTER
))
2045 if (back
!= NULL
&& !type_check (back
, 2, BT_LOGICAL
))
2048 if (!kind_check (kind
, 3, BT_INTEGER
))
2050 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
2051 "with KIND argument at %L",
2052 gfc_current_intrinsic
, &kind
->where
))
2055 if (string
->ts
.kind
!= substring
->ts
.kind
)
2057 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
2058 "kind as '%s'", gfc_current_intrinsic_arg
[1]->name
,
2059 gfc_current_intrinsic
, &substring
->where
,
2060 gfc_current_intrinsic_arg
[0]->name
);
2069 gfc_check_int (gfc_expr
*x
, gfc_expr
*kind
)
2071 if (!numeric_check (x
, 0))
2074 if (!kind_check (kind
, 1, BT_INTEGER
))
2082 gfc_check_intconv (gfc_expr
*x
)
2084 if (!numeric_check (x
, 0))
2092 gfc_check_ior (gfc_expr
*i
, gfc_expr
*j
)
2094 if (!type_check (i
, 0, BT_INTEGER
))
2097 if (!type_check (j
, 1, BT_INTEGER
))
2100 if (i
->ts
.kind
!= j
->ts
.kind
)
2102 if (!gfc_notify_std (GFC_STD_GNU
, "Different type kinds at %L",
2112 gfc_check_ishft (gfc_expr
*i
, gfc_expr
*shift
)
2114 if (!type_check (i
, 0, BT_INTEGER
)
2115 || !type_check (shift
, 1, BT_INTEGER
))
2118 if (!less_than_bitsize1 ("I", i
, NULL
, shift
, true))
2126 gfc_check_ishftc (gfc_expr
*i
, gfc_expr
*shift
, gfc_expr
*size
)
2128 if (!type_check (i
, 0, BT_INTEGER
)
2129 || !type_check (shift
, 1, BT_INTEGER
))
2136 if (!type_check (size
, 2, BT_INTEGER
))
2139 if (!less_than_bitsize1 ("I", i
, "SIZE", size
, true))
2142 if (size
->expr_type
== EXPR_CONSTANT
)
2144 gfc_extract_int (size
, &i3
);
2147 gfc_error ("SIZE at %L must be positive", &size
->where
);
2151 if (shift
->expr_type
== EXPR_CONSTANT
)
2153 gfc_extract_int (shift
, &i2
);
2159 gfc_error ("The absolute value of SHIFT at %L must be less "
2160 "than or equal to SIZE at %L", &shift
->where
,
2167 else if (!less_than_bitsize1 ("I", i
, NULL
, shift
, true))
2175 gfc_check_kill (gfc_expr
*pid
, gfc_expr
*sig
)
2177 if (!type_check (pid
, 0, BT_INTEGER
))
2180 if (!type_check (sig
, 1, BT_INTEGER
))
2188 gfc_check_kill_sub (gfc_expr
*pid
, gfc_expr
*sig
, gfc_expr
*status
)
2190 if (!type_check (pid
, 0, BT_INTEGER
))
2193 if (!scalar_check (pid
, 0))
2196 if (!type_check (sig
, 1, BT_INTEGER
))
2199 if (!scalar_check (sig
, 1))
2205 if (!type_check (status
, 2, BT_INTEGER
))
2208 if (!scalar_check (status
, 2))
2216 gfc_check_kind (gfc_expr
*x
)
2218 if (x
->ts
.type
== BT_DERIVED
)
2220 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
2221 "non-derived type", gfc_current_intrinsic_arg
[0]->name
,
2222 gfc_current_intrinsic
, &x
->where
);
2231 gfc_check_lbound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
2233 if (!array_check (array
, 0))
2236 if (!dim_check (dim
, 1, false))
2239 if (!dim_rank_check (dim
, array
, 1))
2242 if (!kind_check (kind
, 2, BT_INTEGER
))
2244 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
2245 "with KIND argument at %L",
2246 gfc_current_intrinsic
, &kind
->where
))
2254 gfc_check_lcobound (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*kind
)
2256 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
2258 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
2262 if (!coarray_check (coarray
, 0))
2267 if (!dim_check (dim
, 1, false))
2270 if (!dim_corank_check (dim
, coarray
))
2274 if (!kind_check (kind
, 2, BT_INTEGER
))
2282 gfc_check_len_lentrim (gfc_expr
*s
, gfc_expr
*kind
)
2284 if (!type_check (s
, 0, BT_CHARACTER
))
2287 if (!kind_check (kind
, 1, BT_INTEGER
))
2289 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
2290 "with KIND argument at %L",
2291 gfc_current_intrinsic
, &kind
->where
))
2299 gfc_check_lge_lgt_lle_llt (gfc_expr
*a
, gfc_expr
*b
)
2301 if (!type_check (a
, 0, BT_CHARACTER
))
2303 if (!kind_value_check (a
, 0, gfc_default_character_kind
))
2306 if (!type_check (b
, 1, BT_CHARACTER
))
2308 if (!kind_value_check (b
, 1, gfc_default_character_kind
))
2316 gfc_check_link (gfc_expr
*path1
, gfc_expr
*path2
)
2318 if (!type_check (path1
, 0, BT_CHARACTER
))
2320 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
2323 if (!type_check (path2
, 1, BT_CHARACTER
))
2325 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
2333 gfc_check_link_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2335 if (!type_check (path1
, 0, BT_CHARACTER
))
2337 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
2340 if (!type_check (path2
, 1, BT_CHARACTER
))
2342 if (!kind_value_check (path2
, 0, gfc_default_character_kind
))
2348 if (!type_check (status
, 2, BT_INTEGER
))
2351 if (!scalar_check (status
, 2))
2359 gfc_check_loc (gfc_expr
*expr
)
2361 return variable_check (expr
, 0, true);
2366 gfc_check_symlnk (gfc_expr
*path1
, gfc_expr
*path2
)
2368 if (!type_check (path1
, 0, BT_CHARACTER
))
2370 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
2373 if (!type_check (path2
, 1, BT_CHARACTER
))
2375 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
2383 gfc_check_symlnk_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2385 if (!type_check (path1
, 0, BT_CHARACTER
))
2387 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
2390 if (!type_check (path2
, 1, BT_CHARACTER
))
2392 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
2398 if (!type_check (status
, 2, BT_INTEGER
))
2401 if (!scalar_check (status
, 2))
2409 gfc_check_logical (gfc_expr
*a
, gfc_expr
*kind
)
2411 if (!type_check (a
, 0, BT_LOGICAL
))
2413 if (!kind_check (kind
, 1, BT_LOGICAL
))
2420 /* Min/max family. */
2423 min_max_args (gfc_actual_arglist
*args
)
2425 gfc_actual_arglist
*arg
;
2426 int i
, j
, nargs
, *nlabels
, nlabelless
;
2427 bool a1
= false, a2
= false;
2429 if (args
== NULL
|| args
->next
== NULL
)
2431 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
2432 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
2439 if (!args
->next
->name
)
2443 for (arg
= args
; arg
; arg
= arg
->next
)
2450 /* Note: Having a keywordless argument after an "arg=" is checked before. */
2452 nlabels
= XALLOCAVEC (int, nargs
);
2453 for (arg
= args
, i
= 0; arg
; arg
= arg
->next
, i
++)
2459 if (arg
->name
[0] != 'a' || arg
->name
[1] < '1' || arg
->name
[1] > '9')
2461 n
= strtol (&arg
->name
[1], &endp
, 10);
2462 if (endp
[0] != '\0')
2466 if (n
<= nlabelless
)
2479 gfc_error ("Missing '%s' argument to the %s intrinsic at %L",
2480 !a1
? "a1" : "a2", gfc_current_intrinsic
,
2481 gfc_current_intrinsic_where
);
2485 /* Check for duplicates. */
2486 for (i
= 0; i
< nargs
; i
++)
2487 for (j
= i
+ 1; j
< nargs
; j
++)
2488 if (nlabels
[i
] == nlabels
[j
])
2494 gfc_error ("Duplicate argument '%s' at %L to intrinsic %s", arg
->name
,
2495 &arg
->expr
->where
, gfc_current_intrinsic
);
2499 gfc_error ("Unknown argument '%s' at %L to intrinsic %s", arg
->name
,
2500 &arg
->expr
->where
, gfc_current_intrinsic
);
2506 check_rest (bt type
, int kind
, gfc_actual_arglist
*arglist
)
2508 gfc_actual_arglist
*arg
, *tmp
;
2512 if (!min_max_args (arglist
))
2515 for (arg
= arglist
, n
=1; arg
; arg
= arg
->next
, n
++)
2518 if (x
->ts
.type
!= type
|| x
->ts
.kind
!= kind
)
2520 if (x
->ts
.type
== type
)
2522 if (!gfc_notify_std (GFC_STD_GNU
, "Different type "
2523 "kinds at %L", &x
->where
))
2528 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
2529 "%s(%d)", n
, gfc_current_intrinsic
, &x
->where
,
2530 gfc_basic_typename (type
), kind
);
2535 for (tmp
= arglist
, m
=1; tmp
!= arg
; tmp
= tmp
->next
, m
++)
2536 if (!gfc_check_conformance (tmp
->expr
, x
,
2537 "arguments 'a%d' and 'a%d' for "
2538 "intrinsic '%s'", m
, n
,
2539 gfc_current_intrinsic
))
2548 gfc_check_min_max (gfc_actual_arglist
*arg
)
2552 if (!min_max_args (arg
))
2557 if (x
->ts
.type
== BT_CHARACTER
)
2559 if (!gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
2560 "with CHARACTER argument at %L",
2561 gfc_current_intrinsic
, &x
->where
))
2564 else if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
2566 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
2567 "REAL or CHARACTER", gfc_current_intrinsic
, &x
->where
);
2571 return check_rest (x
->ts
.type
, x
->ts
.kind
, arg
);
2576 gfc_check_min_max_integer (gfc_actual_arglist
*arg
)
2578 return check_rest (BT_INTEGER
, gfc_default_integer_kind
, arg
);
2583 gfc_check_min_max_real (gfc_actual_arglist
*arg
)
2585 return check_rest (BT_REAL
, gfc_default_real_kind
, arg
);
2590 gfc_check_min_max_double (gfc_actual_arglist
*arg
)
2592 return check_rest (BT_REAL
, gfc_default_double_kind
, arg
);
2596 /* End of min/max family. */
2599 gfc_check_malloc (gfc_expr
*size
)
2601 if (!type_check (size
, 0, BT_INTEGER
))
2604 if (!scalar_check (size
, 0))
2612 gfc_check_matmul (gfc_expr
*matrix_a
, gfc_expr
*matrix_b
)
2614 if ((matrix_a
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_a
->ts
))
2616 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2617 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
2618 gfc_current_intrinsic
, &matrix_a
->where
);
2622 if ((matrix_b
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_b
->ts
))
2624 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2625 "or LOGICAL", gfc_current_intrinsic_arg
[1]->name
,
2626 gfc_current_intrinsic
, &matrix_b
->where
);
2630 if ((matrix_a
->ts
.type
== BT_LOGICAL
&& gfc_numeric_ts (&matrix_b
->ts
))
2631 || (gfc_numeric_ts (&matrix_a
->ts
) && matrix_b
->ts
.type
== BT_LOGICAL
))
2633 gfc_error ("Argument types of '%s' intrinsic at %L must match (%s/%s)",
2634 gfc_current_intrinsic
, &matrix_a
->where
,
2635 gfc_typename(&matrix_a
->ts
), gfc_typename(&matrix_b
->ts
));
2639 switch (matrix_a
->rank
)
2642 if (!rank_check (matrix_b
, 1, 2))
2644 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
2645 if (!identical_dimen_shape (matrix_a
, 0, matrix_b
, 0))
2647 gfc_error ("Different shape on dimension 1 for arguments '%s' "
2648 "and '%s' at %L for intrinsic matmul",
2649 gfc_current_intrinsic_arg
[0]->name
,
2650 gfc_current_intrinsic_arg
[1]->name
, &matrix_a
->where
);
2656 if (matrix_b
->rank
!= 2)
2658 if (!rank_check (matrix_b
, 1, 1))
2661 /* matrix_b has rank 1 or 2 here. Common check for the cases
2662 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
2663 - matrix_a has shape (n,m) and matrix_b has shape (m). */
2664 if (!identical_dimen_shape (matrix_a
, 1, matrix_b
, 0))
2666 gfc_error ("Different shape on dimension 2 for argument '%s' and "
2667 "dimension 1 for argument '%s' at %L for intrinsic "
2668 "matmul", gfc_current_intrinsic_arg
[0]->name
,
2669 gfc_current_intrinsic_arg
[1]->name
, &matrix_a
->where
);
2675 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
2676 "1 or 2", gfc_current_intrinsic_arg
[0]->name
,
2677 gfc_current_intrinsic
, &matrix_a
->where
);
2685 /* Whoever came up with this interface was probably on something.
2686 The possibilities for the occupation of the second and third
2693 NULL MASK minloc(array, mask=m)
2696 I.e. in the case of minloc(array,mask), mask will be in the second
2697 position of the argument list and we'll have to fix that up. */
2700 gfc_check_minloc_maxloc (gfc_actual_arglist
*ap
)
2702 gfc_expr
*a
, *m
, *d
;
2705 if (!int_or_real_check (a
, 0) || !array_check (a
, 0))
2709 m
= ap
->next
->next
->expr
;
2711 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
2712 && ap
->next
->name
== NULL
)
2716 ap
->next
->expr
= NULL
;
2717 ap
->next
->next
->expr
= m
;
2720 if (!dim_check (d
, 1, false))
2723 if (!dim_rank_check (d
, a
, 0))
2726 if (m
!= NULL
&& !type_check (m
, 2, BT_LOGICAL
))
2730 && !gfc_check_conformance (a
, m
,
2731 "arguments '%s' and '%s' for intrinsic %s",
2732 gfc_current_intrinsic_arg
[0]->name
,
2733 gfc_current_intrinsic_arg
[2]->name
,
2734 gfc_current_intrinsic
))
2741 /* Similar to minloc/maxloc, the argument list might need to be
2742 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
2743 difference is that MINLOC/MAXLOC take an additional KIND argument.
2744 The possibilities are:
2750 NULL MASK minval(array, mask=m)
2753 I.e. in the case of minval(array,mask), mask will be in the second
2754 position of the argument list and we'll have to fix that up. */
2757 check_reduction (gfc_actual_arglist
*ap
)
2759 gfc_expr
*a
, *m
, *d
;
2763 m
= ap
->next
->next
->expr
;
2765 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
2766 && ap
->next
->name
== NULL
)
2770 ap
->next
->expr
= NULL
;
2771 ap
->next
->next
->expr
= m
;
2774 if (!dim_check (d
, 1, false))
2777 if (!dim_rank_check (d
, a
, 0))
2780 if (m
!= NULL
&& !type_check (m
, 2, BT_LOGICAL
))
2784 && !gfc_check_conformance (a
, m
,
2785 "arguments '%s' and '%s' for intrinsic %s",
2786 gfc_current_intrinsic_arg
[0]->name
,
2787 gfc_current_intrinsic_arg
[2]->name
,
2788 gfc_current_intrinsic
))
2796 gfc_check_minval_maxval (gfc_actual_arglist
*ap
)
2798 if (!int_or_real_check (ap
->expr
, 0)
2799 || !array_check (ap
->expr
, 0))
2802 return check_reduction (ap
);
2807 gfc_check_product_sum (gfc_actual_arglist
*ap
)
2809 if (!numeric_check (ap
->expr
, 0)
2810 || !array_check (ap
->expr
, 0))
2813 return check_reduction (ap
);
2817 /* For IANY, IALL and IPARITY. */
2820 gfc_check_mask (gfc_expr
*i
, gfc_expr
*kind
)
2824 if (!type_check (i
, 0, BT_INTEGER
))
2827 if (!nonnegative_check ("I", i
))
2830 if (!kind_check (kind
, 1, BT_INTEGER
))
2834 gfc_extract_int (kind
, &k
);
2836 k
= gfc_default_integer_kind
;
2838 if (!less_than_bitsizekind ("I", i
, k
))
2846 gfc_check_transf_bit_intrins (gfc_actual_arglist
*ap
)
2848 if (ap
->expr
->ts
.type
!= BT_INTEGER
)
2850 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER",
2851 gfc_current_intrinsic_arg
[0]->name
,
2852 gfc_current_intrinsic
, &ap
->expr
->where
);
2856 if (!array_check (ap
->expr
, 0))
2859 return check_reduction (ap
);
2864 gfc_check_merge (gfc_expr
*tsource
, gfc_expr
*fsource
, gfc_expr
*mask
)
2866 if (!same_type_check (tsource
, 0, fsource
, 1))
2869 if (!type_check (mask
, 2, BT_LOGICAL
))
2872 if (tsource
->ts
.type
== BT_CHARACTER
)
2873 return gfc_check_same_strlen (tsource
, fsource
, "MERGE intrinsic");
2880 gfc_check_merge_bits (gfc_expr
*i
, gfc_expr
*j
, gfc_expr
*mask
)
2882 if (!type_check (i
, 0, BT_INTEGER
))
2885 if (!type_check (j
, 1, BT_INTEGER
))
2888 if (!type_check (mask
, 2, BT_INTEGER
))
2891 if (!same_type_check (i
, 0, j
, 1))
2894 if (!same_type_check (i
, 0, mask
, 2))
2902 gfc_check_move_alloc (gfc_expr
*from
, gfc_expr
*to
)
2904 if (!variable_check (from
, 0, false))
2906 if (!allocatable_check (from
, 0))
2908 if (gfc_is_coindexed (from
))
2910 gfc_error ("The FROM argument to MOVE_ALLOC at %L shall not be "
2911 "coindexed", &from
->where
);
2915 if (!variable_check (to
, 1, false))
2917 if (!allocatable_check (to
, 1))
2919 if (gfc_is_coindexed (to
))
2921 gfc_error ("The TO argument to MOVE_ALLOC at %L shall not be "
2922 "coindexed", &to
->where
);
2926 if (from
->ts
.type
== BT_CLASS
&& to
->ts
.type
== BT_DERIVED
)
2928 gfc_error ("The TO arguments in MOVE_ALLOC at %L must be "
2929 "polymorphic if FROM is polymorphic",
2934 if (!same_type_check (to
, 1, from
, 0))
2937 if (to
->rank
!= from
->rank
)
2939 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
2940 "must have the same rank %d/%d", &to
->where
, from
->rank
,
2945 /* IR F08/0040; cf. 12-006A. */
2946 if (gfc_get_corank (to
) != gfc_get_corank (from
))
2948 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
2949 "must have the same corank %d/%d", &to
->where
,
2950 gfc_get_corank (from
), gfc_get_corank (to
));
2954 /* CLASS arguments: Make sure the vtab of from is present. */
2955 if (to
->ts
.type
== BT_CLASS
&& !UNLIMITED_POLY (from
))
2956 gfc_find_vtab (&from
->ts
);
2963 gfc_check_nearest (gfc_expr
*x
, gfc_expr
*s
)
2965 if (!type_check (x
, 0, BT_REAL
))
2968 if (!type_check (s
, 1, BT_REAL
))
2971 if (s
->expr_type
== EXPR_CONSTANT
)
2973 if (mpfr_sgn (s
->value
.real
) == 0)
2975 gfc_error ("Argument 'S' of NEAREST at %L shall not be zero",
2986 gfc_check_new_line (gfc_expr
*a
)
2988 if (!type_check (a
, 0, BT_CHARACTER
))
2996 gfc_check_norm2 (gfc_expr
*array
, gfc_expr
*dim
)
2998 if (!type_check (array
, 0, BT_REAL
))
3001 if (!array_check (array
, 0))
3004 if (!dim_rank_check (dim
, array
, false))
3011 gfc_check_null (gfc_expr
*mold
)
3013 symbol_attribute attr
;
3018 if (!variable_check (mold
, 0, true))
3021 attr
= gfc_variable_attr (mold
, NULL
);
3023 if (!attr
.pointer
&& !attr
.proc_pointer
&& !attr
.allocatable
)
3025 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER, "
3026 "ALLOCATABLE or procedure pointer",
3027 gfc_current_intrinsic_arg
[0]->name
,
3028 gfc_current_intrinsic
, &mold
->where
);
3032 if (attr
.allocatable
3033 && !gfc_notify_std (GFC_STD_F2003
, "NULL intrinsic with "
3034 "allocatable MOLD at %L", &mold
->where
))
3038 if (gfc_is_coindexed (mold
))
3040 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
3041 "coindexed", gfc_current_intrinsic_arg
[0]->name
,
3042 gfc_current_intrinsic
, &mold
->where
);
3051 gfc_check_pack (gfc_expr
*array
, gfc_expr
*mask
, gfc_expr
*vector
)
3053 if (!array_check (array
, 0))
3056 if (!type_check (mask
, 1, BT_LOGICAL
))
3059 if (!gfc_check_conformance (array
, mask
,
3060 "arguments '%s' and '%s' for intrinsic '%s'",
3061 gfc_current_intrinsic_arg
[0]->name
,
3062 gfc_current_intrinsic_arg
[1]->name
,
3063 gfc_current_intrinsic
))
3068 mpz_t array_size
, vector_size
;
3069 bool have_array_size
, have_vector_size
;
3071 if (!same_type_check (array
, 0, vector
, 2))
3074 if (!rank_check (vector
, 2, 1))
3077 /* VECTOR requires at least as many elements as MASK
3078 has .TRUE. values. */
3079 have_array_size
= gfc_array_size(array
, &array_size
);
3080 have_vector_size
= gfc_array_size(vector
, &vector_size
);
3082 if (have_vector_size
3083 && (mask
->expr_type
== EXPR_ARRAY
3084 || (mask
->expr_type
== EXPR_CONSTANT
3085 && have_array_size
)))
3087 int mask_true_values
= 0;
3089 if (mask
->expr_type
== EXPR_ARRAY
)
3091 gfc_constructor
*mask_ctor
;
3092 mask_ctor
= gfc_constructor_first (mask
->value
.constructor
);
3095 if (mask_ctor
->expr
->expr_type
!= EXPR_CONSTANT
)
3097 mask_true_values
= 0;
3101 if (mask_ctor
->expr
->value
.logical
)
3104 mask_ctor
= gfc_constructor_next (mask_ctor
);
3107 else if (mask
->expr_type
== EXPR_CONSTANT
&& mask
->value
.logical
)
3108 mask_true_values
= mpz_get_si (array_size
);
3110 if (mpz_get_si (vector_size
) < mask_true_values
)
3112 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
3113 "provide at least as many elements as there "
3114 "are .TRUE. values in '%s' (%ld/%d)",
3115 gfc_current_intrinsic_arg
[2]->name
,
3116 gfc_current_intrinsic
, &vector
->where
,
3117 gfc_current_intrinsic_arg
[1]->name
,
3118 mpz_get_si (vector_size
), mask_true_values
);
3123 if (have_array_size
)
3124 mpz_clear (array_size
);
3125 if (have_vector_size
)
3126 mpz_clear (vector_size
);
3134 gfc_check_parity (gfc_expr
*mask
, gfc_expr
*dim
)
3136 if (!type_check (mask
, 0, BT_LOGICAL
))
3139 if (!array_check (mask
, 0))
3142 if (!dim_rank_check (dim
, mask
, false))
3150 gfc_check_precision (gfc_expr
*x
)
3152 if (!real_or_complex_check (x
, 0))
3160 gfc_check_present (gfc_expr
*a
)
3164 if (!variable_check (a
, 0, true))
3167 sym
= a
->symtree
->n
.sym
;
3168 if (!sym
->attr
.dummy
)
3170 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
3171 "dummy variable", gfc_current_intrinsic_arg
[0]->name
,
3172 gfc_current_intrinsic
, &a
->where
);
3176 if (!sym
->attr
.optional
)
3178 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
3179 "an OPTIONAL dummy variable",
3180 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3185 /* 13.14.82 PRESENT(A)
3187 Argument. A shall be the name of an optional dummy argument that is
3188 accessible in the subprogram in which the PRESENT function reference
3192 && !(a
->ref
->next
== NULL
&& a
->ref
->type
== REF_ARRAY
3193 && (a
->ref
->u
.ar
.type
== AR_FULL
3194 || (a
->ref
->u
.ar
.type
== AR_ELEMENT
3195 && a
->ref
->u
.ar
.as
->rank
== 0))))
3197 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
3198 "subobject of '%s'", gfc_current_intrinsic_arg
[0]->name
,
3199 gfc_current_intrinsic
, &a
->where
, sym
->name
);
3208 gfc_check_radix (gfc_expr
*x
)
3210 if (!int_or_real_check (x
, 0))
3218 gfc_check_range (gfc_expr
*x
)
3220 if (!numeric_check (x
, 0))
3228 gfc_check_rank (gfc_expr
*a ATTRIBUTE_UNUSED
)
3230 /* Any data object is allowed; a "data object" is a "constant (4.1.3),
3231 variable (6), or subobject of a constant (2.4.3.2.3)" (F2008, 1.3.45). */
3233 bool is_variable
= true;
3235 /* Functions returning pointers are regarded as variable, cf. F2008, R602. */
3236 if (a
->expr_type
== EXPR_FUNCTION
)
3237 is_variable
= a
->value
.function
.esym
3238 ? a
->value
.function
.esym
->result
->attr
.pointer
3239 : a
->symtree
->n
.sym
->result
->attr
.pointer
;
3241 if (a
->expr_type
== EXPR_OP
|| a
->expr_type
== EXPR_NULL
3242 || a
->expr_type
== EXPR_COMPCALL
|| a
->expr_type
== EXPR_PPC
3245 gfc_error ("The argument of the RANK intrinsic at %L must be a data "
3246 "object", &a
->where
);
3254 /* real, float, sngl. */
3256 gfc_check_real (gfc_expr
*a
, gfc_expr
*kind
)
3258 if (!numeric_check (a
, 0))
3261 if (!kind_check (kind
, 1, BT_REAL
))
3269 gfc_check_rename (gfc_expr
*path1
, gfc_expr
*path2
)
3271 if (!type_check (path1
, 0, BT_CHARACTER
))
3273 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
3276 if (!type_check (path2
, 1, BT_CHARACTER
))
3278 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
3286 gfc_check_rename_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
3288 if (!type_check (path1
, 0, BT_CHARACTER
))
3290 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
3293 if (!type_check (path2
, 1, BT_CHARACTER
))
3295 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
3301 if (!type_check (status
, 2, BT_INTEGER
))
3304 if (!scalar_check (status
, 2))
3312 gfc_check_repeat (gfc_expr
*x
, gfc_expr
*y
)
3314 if (!type_check (x
, 0, BT_CHARACTER
))
3317 if (!scalar_check (x
, 0))
3320 if (!type_check (y
, 0, BT_INTEGER
))
3323 if (!scalar_check (y
, 1))
3331 gfc_check_reshape (gfc_expr
*source
, gfc_expr
*shape
,
3332 gfc_expr
*pad
, gfc_expr
*order
)
3338 if (!array_check (source
, 0))
3341 if (!rank_check (shape
, 1, 1))
3344 if (!type_check (shape
, 1, BT_INTEGER
))
3347 if (!gfc_array_size (shape
, &size
))
3349 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
3350 "array of constant size", &shape
->where
);
3354 shape_size
= mpz_get_ui (size
);
3357 if (shape_size
<= 0)
3359 gfc_error ("'%s' argument of '%s' intrinsic at %L is empty",
3360 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3364 else if (shape_size
> GFC_MAX_DIMENSIONS
)
3366 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
3367 "than %d elements", &shape
->where
, GFC_MAX_DIMENSIONS
);
3370 else if (shape
->expr_type
== EXPR_ARRAY
&& gfc_is_constant_expr (shape
))
3374 for (i
= 0; i
< shape_size
; ++i
)
3376 e
= gfc_constructor_lookup_expr (shape
->value
.constructor
, i
);
3377 if (e
->expr_type
!= EXPR_CONSTANT
)
3380 gfc_extract_int (e
, &extent
);
3383 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3384 "negative element (%d)",
3385 gfc_current_intrinsic_arg
[1]->name
,
3386 gfc_current_intrinsic
, &e
->where
, extent
);
3394 if (!same_type_check (source
, 0, pad
, 2))
3397 if (!array_check (pad
, 2))
3403 if (!array_check (order
, 3))
3406 if (!type_check (order
, 3, BT_INTEGER
))
3409 if (order
->expr_type
== EXPR_ARRAY
)
3411 int i
, order_size
, dim
, perm
[GFC_MAX_DIMENSIONS
];
3414 for (i
= 0; i
< GFC_MAX_DIMENSIONS
; ++i
)
3417 gfc_array_size (order
, &size
);
3418 order_size
= mpz_get_ui (size
);
3421 if (order_size
!= shape_size
)
3423 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3424 "has wrong number of elements (%d/%d)",
3425 gfc_current_intrinsic_arg
[3]->name
,
3426 gfc_current_intrinsic
, &order
->where
,
3427 order_size
, shape_size
);
3431 for (i
= 1; i
<= order_size
; ++i
)
3433 e
= gfc_constructor_lookup_expr (order
->value
.constructor
, i
-1);
3434 if (e
->expr_type
!= EXPR_CONSTANT
)
3437 gfc_extract_int (e
, &dim
);
3439 if (dim
< 1 || dim
> order_size
)
3441 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3442 "has out-of-range dimension (%d)",
3443 gfc_current_intrinsic_arg
[3]->name
,
3444 gfc_current_intrinsic
, &e
->where
, dim
);
3448 if (perm
[dim
-1] != 0)
3450 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3451 "invalid permutation of dimensions (dimension "
3453 gfc_current_intrinsic_arg
[3]->name
,
3454 gfc_current_intrinsic
, &e
->where
, dim
);
3463 if (pad
== NULL
&& shape
->expr_type
== EXPR_ARRAY
3464 && gfc_is_constant_expr (shape
)
3465 && !(source
->expr_type
== EXPR_VARIABLE
&& source
->symtree
->n
.sym
->as
3466 && source
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
))
3468 /* Check the match in size between source and destination. */
3469 if (gfc_array_size (source
, &nelems
))
3475 mpz_init_set_ui (size
, 1);
3476 for (c
= gfc_constructor_first (shape
->value
.constructor
);
3477 c
; c
= gfc_constructor_next (c
))
3478 mpz_mul (size
, size
, c
->expr
->value
.integer
);
3480 test
= mpz_cmp (nelems
, size
) < 0 && mpz_cmp_ui (size
, 0) > 0;
3486 gfc_error ("Without padding, there are not enough elements "
3487 "in the intrinsic RESHAPE source at %L to match "
3488 "the shape", &source
->where
);
3499 gfc_check_same_type_as (gfc_expr
*a
, gfc_expr
*b
)
3501 if (a
->ts
.type
!= BT_DERIVED
&& a
->ts
.type
!= BT_CLASS
)
3503 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3504 "cannot be of type %s",
3505 gfc_current_intrinsic_arg
[0]->name
,
3506 gfc_current_intrinsic
,
3507 &a
->where
, gfc_typename (&a
->ts
));
3511 if (!(gfc_type_is_extensible (a
->ts
.u
.derived
) || UNLIMITED_POLY (a
)))
3513 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3514 "must be of an extensible type",
3515 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3520 if (b
->ts
.type
!= BT_DERIVED
&& b
->ts
.type
!= BT_CLASS
)
3522 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3523 "cannot be of type %s",
3524 gfc_current_intrinsic_arg
[0]->name
,
3525 gfc_current_intrinsic
,
3526 &b
->where
, gfc_typename (&b
->ts
));
3530 if (!(gfc_type_is_extensible (b
->ts
.u
.derived
) || UNLIMITED_POLY (b
)))
3532 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3533 "must be of an extensible type",
3534 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3544 gfc_check_scale (gfc_expr
*x
, gfc_expr
*i
)
3546 if (!type_check (x
, 0, BT_REAL
))
3549 if (!type_check (i
, 1, BT_INTEGER
))
3557 gfc_check_scan (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
3559 if (!type_check (x
, 0, BT_CHARACTER
))
3562 if (!type_check (y
, 1, BT_CHARACTER
))
3565 if (z
!= NULL
&& !type_check (z
, 2, BT_LOGICAL
))
3568 if (!kind_check (kind
, 3, BT_INTEGER
))
3570 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
3571 "with KIND argument at %L",
3572 gfc_current_intrinsic
, &kind
->where
))
3575 if (!same_type_check (x
, 0, y
, 1))
3583 gfc_check_secnds (gfc_expr
*r
)
3585 if (!type_check (r
, 0, BT_REAL
))
3588 if (!kind_value_check (r
, 0, 4))
3591 if (!scalar_check (r
, 0))
3599 gfc_check_selected_char_kind (gfc_expr
*name
)
3601 if (!type_check (name
, 0, BT_CHARACTER
))
3604 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
3607 if (!scalar_check (name
, 0))
3615 gfc_check_selected_int_kind (gfc_expr
*r
)
3617 if (!type_check (r
, 0, BT_INTEGER
))
3620 if (!scalar_check (r
, 0))
3628 gfc_check_selected_real_kind (gfc_expr
*p
, gfc_expr
*r
, gfc_expr
*radix
)
3630 if (p
== NULL
&& r
== NULL
3631 && !gfc_notify_std (GFC_STD_F2008
, "SELECTED_REAL_KIND with"
3632 " neither 'P' nor 'R' argument at %L",
3633 gfc_current_intrinsic_where
))
3638 if (!type_check (p
, 0, BT_INTEGER
))
3641 if (!scalar_check (p
, 0))
3647 if (!type_check (r
, 1, BT_INTEGER
))
3650 if (!scalar_check (r
, 1))
3656 if (!type_check (radix
, 1, BT_INTEGER
))
3659 if (!scalar_check (radix
, 1))
3662 if (!gfc_notify_std (GFC_STD_F2008
, "'%s' intrinsic with "
3663 "RADIX argument at %L", gfc_current_intrinsic
,
3673 gfc_check_set_exponent (gfc_expr
*x
, gfc_expr
*i
)
3675 if (!type_check (x
, 0, BT_REAL
))
3678 if (!type_check (i
, 1, BT_INTEGER
))
3686 gfc_check_shape (gfc_expr
*source
, gfc_expr
*kind
)
3690 if (source
->rank
== 0 || source
->expr_type
!= EXPR_VARIABLE
)
3693 ar
= gfc_find_array_ref (source
);
3695 if (ar
->as
&& ar
->as
->type
== AS_ASSUMED_SIZE
&& ar
->type
== AR_FULL
)
3697 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
3698 "an assumed size array", &source
->where
);
3702 if (!kind_check (kind
, 1, BT_INTEGER
))
3704 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
3705 "with KIND argument at %L",
3706 gfc_current_intrinsic
, &kind
->where
))
3714 gfc_check_shift (gfc_expr
*i
, gfc_expr
*shift
)
3716 if (!type_check (i
, 0, BT_INTEGER
))
3719 if (!type_check (shift
, 0, BT_INTEGER
))
3722 if (!nonnegative_check ("SHIFT", shift
))
3725 if (!less_than_bitsize1 ("I", i
, "SHIFT", shift
, true))
3733 gfc_check_sign (gfc_expr
*a
, gfc_expr
*b
)
3735 if (!int_or_real_check (a
, 0))
3738 if (!same_type_check (a
, 0, b
, 1))
3746 gfc_check_size (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
3748 if (!array_check (array
, 0))
3751 if (!dim_check (dim
, 1, true))
3754 if (!dim_rank_check (dim
, array
, 0))
3757 if (!kind_check (kind
, 2, BT_INTEGER
))
3759 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
3760 "with KIND argument at %L",
3761 gfc_current_intrinsic
, &kind
->where
))
3770 gfc_check_sizeof (gfc_expr
*arg
)
3772 if (arg
->ts
.type
== BT_PROCEDURE
)
3774 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be a procedure",
3775 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3780 if (arg
->ts
.type
== BT_ASSUMED
)
3782 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be TYPE(*)",
3783 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3788 if (arg
->rank
&& arg
->expr_type
== EXPR_VARIABLE
3789 && arg
->symtree
->n
.sym
->as
!= NULL
3790 && arg
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
&& arg
->ref
3791 && arg
->ref
->type
== REF_ARRAY
&& arg
->ref
->u
.ar
.type
== AR_FULL
)
3793 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be an "
3794 "assumed-size array", gfc_current_intrinsic_arg
[0]->name
,
3795 gfc_current_intrinsic
, &arg
->where
);
3803 /* Check whether an expression is interoperable. When returning false,
3804 msg is set to a string telling why the expression is not interoperable,
3805 otherwise, it is set to NULL. The msg string can be used in diagnostics.
3806 If c_loc is true, character with len > 1 are allowed (cf. Fortran
3807 2003corr5); additionally, assumed-shape/assumed-rank/deferred-shape
3808 arrays are permitted. And if c_f_ptr is true, deferred-shape arrays
3812 is_c_interoperable (gfc_expr
*expr
, const char **msg
, bool c_loc
, bool c_f_ptr
)
3816 if (expr
->ts
.type
== BT_CLASS
)
3818 *msg
= "Expression is polymorphic";
3822 if (expr
->ts
.type
== BT_DERIVED
&& !expr
->ts
.u
.derived
->attr
.is_bind_c
3823 && !expr
->ts
.u
.derived
->ts
.is_iso_c
)
3825 *msg
= "Expression is a noninteroperable derived type";
3829 if (expr
->ts
.type
== BT_PROCEDURE
)
3831 *msg
= "Procedure unexpected as argument";
3835 if (gfc_notification_std (GFC_STD_GNU
) && expr
->ts
.type
== BT_LOGICAL
)
3838 for (i
= 0; gfc_logical_kinds
[i
].kind
; i
++)
3839 if (gfc_logical_kinds
[i
].kind
== expr
->ts
.kind
)
3841 *msg
= "Extension to use a non-C_Bool-kind LOGICAL";
3845 if (gfc_notification_std (GFC_STD_GNU
) && expr
->ts
.type
== BT_CHARACTER
3846 && expr
->ts
.kind
!= 1)
3848 *msg
= "Extension to use a non-C_CHAR-kind CHARACTER";
3852 if (expr
->ts
.type
== BT_CHARACTER
) {
3853 if (expr
->ts
.deferred
)
3855 /* TS 29113 allows deferred-length strings as dummy arguments,
3856 but it is not an interoperable type. */
3857 *msg
= "Expression shall not be a deferred-length string";
3861 if (expr
->ts
.u
.cl
&& expr
->ts
.u
.cl
->length
3862 && !gfc_simplify_expr (expr
, 0))
3863 gfc_internal_error ("is_c_interoperable(): gfc_simplify_expr failed");
3865 if (!c_loc
&& expr
->ts
.u
.cl
3866 && (!expr
->ts
.u
.cl
->length
3867 || expr
->ts
.u
.cl
->length
->expr_type
!= EXPR_CONSTANT
3868 || mpz_cmp_si (expr
->ts
.u
.cl
->length
->value
.integer
, 1) != 0))
3870 *msg
= "Type shall have a character length of 1";
3875 /* Note: The following checks are about interoperatable variables, Fortran
3876 15.3.5/15.3.6. In intrinsics like C_LOC or in procedure interface, more
3877 is allowed, e.g. assumed-shape arrays with TS 29113. */
3879 if (gfc_is_coarray (expr
))
3881 *msg
= "Coarrays are not interoperable";
3885 if (!c_loc
&& expr
->rank
> 0 && expr
->expr_type
!= EXPR_ARRAY
)
3887 gfc_array_ref
*ar
= gfc_find_array_ref (expr
);
3888 if (ar
->type
!= AR_FULL
)
3890 *msg
= "Only whole-arrays are interoperable";
3893 if (!c_f_ptr
&& ar
->as
->type
!= AS_EXPLICIT
3894 && ar
->as
->type
!= AS_ASSUMED_SIZE
)
3896 *msg
= "Only explicit-size and assumed-size arrays are interoperable";
3906 gfc_check_c_sizeof (gfc_expr
*arg
)
3910 if (!is_c_interoperable (arg
, &msg
, false, false))
3912 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an "
3913 "interoperable data entity: %s",
3914 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3919 if (arg
->ts
.type
== BT_ASSUMED
)
3921 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
3923 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3928 if (arg
->rank
&& arg
->expr_type
== EXPR_VARIABLE
3929 && arg
->symtree
->n
.sym
->as
!= NULL
3930 && arg
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
&& arg
->ref
3931 && arg
->ref
->type
== REF_ARRAY
&& arg
->ref
->u
.ar
.type
== AR_FULL
)
3933 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be an "
3934 "assumed-size array", gfc_current_intrinsic_arg
[0]->name
,
3935 gfc_current_intrinsic
, &arg
->where
);
3944 gfc_check_c_associated (gfc_expr
*c_ptr_1
, gfc_expr
*c_ptr_2
)
3946 if (c_ptr_1
->ts
.type
!= BT_DERIVED
3947 || c_ptr_1
->ts
.u
.derived
->from_intmod
!= INTMOD_ISO_C_BINDING
3948 || (c_ptr_1
->ts
.u
.derived
->intmod_sym_id
!= ISOCBINDING_PTR
3949 && c_ptr_1
->ts
.u
.derived
->intmod_sym_id
!= ISOCBINDING_FUNPTR
))
3951 gfc_error ("Argument C_PTR_1 at %L to C_ASSOCIATED shall have the "
3952 "type TYPE(C_PTR) or TYPE(C_FUNPTR)", &c_ptr_1
->where
);
3956 if (!scalar_check (c_ptr_1
, 0))
3960 && (c_ptr_2
->ts
.type
!= BT_DERIVED
3961 || c_ptr_2
->ts
.u
.derived
->from_intmod
!= INTMOD_ISO_C_BINDING
3962 || (c_ptr_1
->ts
.u
.derived
->intmod_sym_id
3963 != c_ptr_2
->ts
.u
.derived
->intmod_sym_id
)))
3965 gfc_error ("Argument C_PTR_2 at %L to C_ASSOCIATED shall have the "
3966 "same type as C_PTR_1: %s instead of %s", &c_ptr_1
->where
,
3967 gfc_typename (&c_ptr_1
->ts
),
3968 gfc_typename (&c_ptr_2
->ts
));
3972 if (c_ptr_2
&& !scalar_check (c_ptr_2
, 1))
3980 gfc_check_c_f_pointer (gfc_expr
*cptr
, gfc_expr
*fptr
, gfc_expr
*shape
)
3982 symbol_attribute attr
;
3985 if (cptr
->ts
.type
!= BT_DERIVED
3986 || cptr
->ts
.u
.derived
->from_intmod
!= INTMOD_ISO_C_BINDING
3987 || cptr
->ts
.u
.derived
->intmod_sym_id
!= ISOCBINDING_PTR
)
3989 gfc_error ("Argument CPTR at %L to C_F_POINTER shall have the "
3990 "type TYPE(C_PTR)", &cptr
->where
);
3994 if (!scalar_check (cptr
, 0))
3997 attr
= gfc_expr_attr (fptr
);
4001 gfc_error ("Argument FPTR at %L to C_F_POINTER must be a pointer",
4006 if (fptr
->ts
.type
== BT_CLASS
)
4008 gfc_error ("FPTR argument at %L to C_F_POINTER shall not be polymorphic",
4013 if (gfc_is_coindexed (fptr
))
4015 gfc_error ("Argument FPTR at %L to C_F_POINTER shall not be "
4016 "coindexed", &fptr
->where
);
4020 if (fptr
->rank
== 0 && shape
)
4022 gfc_error ("Unexpected SHAPE argument at %L to C_F_POINTER with scalar "
4023 "FPTR", &fptr
->where
);
4026 else if (fptr
->rank
&& !shape
)
4028 gfc_error ("Expected SHAPE argument to C_F_POINTER with array "
4029 "FPTR at %L", &fptr
->where
);
4033 if (shape
&& !rank_check (shape
, 2, 1))
4036 if (shape
&& !type_check (shape
, 2, BT_INTEGER
))
4042 if (gfc_array_size (shape
, &size
))
4044 if (mpz_cmp_ui (size
, fptr
->rank
) != 0)
4047 gfc_error ("SHAPE argument at %L to C_F_POINTER must have the same "
4048 "size as the RANK of FPTR", &shape
->where
);
4055 if (fptr
->ts
.type
== BT_CLASS
)
4057 gfc_error ("Polymorphic FPTR at %L to C_F_POINTER", &fptr
->where
);
4061 if (!is_c_interoperable (fptr
, &msg
, false, true))
4062 return gfc_notify_std (GFC_STD_F2008_TS
, "Noninteroperable array FPTR "
4063 "at %L to C_F_POINTER: %s", &fptr
->where
, msg
);
4070 gfc_check_c_f_procpointer (gfc_expr
*cptr
, gfc_expr
*fptr
)
4072 symbol_attribute attr
;
4074 if (cptr
->ts
.type
!= BT_DERIVED
4075 || cptr
->ts
.u
.derived
->from_intmod
!= INTMOD_ISO_C_BINDING
4076 || cptr
->ts
.u
.derived
->intmod_sym_id
!= ISOCBINDING_FUNPTR
)
4078 gfc_error ("Argument CPTR at %L to C_F_PROCPOINTER shall have the "
4079 "type TYPE(C_FUNPTR)", &cptr
->where
);
4083 if (!scalar_check (cptr
, 0))
4086 attr
= gfc_expr_attr (fptr
);
4088 if (!attr
.proc_pointer
)
4090 gfc_error ("Argument FPTR at %L to C_F_PROCPOINTER shall be a procedure "
4091 "pointer", &fptr
->where
);
4095 if (gfc_is_coindexed (fptr
))
4097 gfc_error ("Argument FPTR at %L to C_F_PROCPOINTER shall not be "
4098 "coindexed", &fptr
->where
);
4102 if (!attr
.is_bind_c
)
4103 return gfc_notify_std (GFC_STD_F2008_TS
, "Noninteroperable procedure "
4104 "pointer at %L to C_F_PROCPOINTER", &fptr
->where
);
4111 gfc_check_c_funloc (gfc_expr
*x
)
4113 symbol_attribute attr
;
4115 if (gfc_is_coindexed (x
))
4117 gfc_error ("Argument X at %L to C_FUNLOC shall not be "
4118 "coindexed", &x
->where
);
4122 attr
= gfc_expr_attr (x
);
4124 if (attr
.function
&& !attr
.proc_pointer
&& x
->expr_type
== EXPR_VARIABLE
4125 && x
->symtree
->n
.sym
== x
->symtree
->n
.sym
->result
)
4127 gfc_namespace
*ns
= gfc_current_ns
;
4129 for (ns
= gfc_current_ns
; ns
; ns
= ns
->parent
)
4130 if (x
->symtree
->n
.sym
== ns
->proc_name
)
4132 gfc_error ("Function result '%s' at %L is invalid as X argument "
4133 "to C_FUNLOC", x
->symtree
->n
.sym
->name
, &x
->where
);
4138 if (attr
.flavor
!= FL_PROCEDURE
)
4140 gfc_error ("Argument X at %L to C_FUNLOC shall be a procedure "
4141 "or a procedure pointer", &x
->where
);
4145 if (!attr
.is_bind_c
)
4146 return gfc_notify_std (GFC_STD_F2008_TS
, "Noninteroperable procedure "
4147 "at %L to C_FUNLOC", &x
->where
);
4153 gfc_check_c_loc (gfc_expr
*x
)
4155 symbol_attribute attr
;
4158 if (gfc_is_coindexed (x
))
4160 gfc_error ("Argument X at %L to C_LOC shall not be coindexed", &x
->where
);
4164 if (x
->ts
.type
== BT_CLASS
)
4166 gfc_error ("X argument at %L to C_LOC shall not be polymorphic",
4171 attr
= gfc_expr_attr (x
);
4174 && (x
->expr_type
!= EXPR_VARIABLE
|| !attr
.target
4175 || attr
.flavor
== FL_PARAMETER
))
4177 gfc_error ("Argument X at %L to C_LOC shall have either "
4178 "the POINTER or the TARGET attribute", &x
->where
);
4182 if (x
->ts
.type
== BT_CHARACTER
4183 && gfc_var_strlen (x
) == 0)
4185 gfc_error ("Argument X at %L to C_LOC shall be not be a zero-sized "
4186 "string", &x
->where
);
4190 if (!is_c_interoperable (x
, &msg
, true, false))
4192 if (x
->ts
.type
== BT_CLASS
)
4194 gfc_error ("Argument at %L to C_LOC shall not be polymorphic",
4200 && !gfc_notify_std (GFC_STD_F2008_TS
,
4201 "Noninteroperable array at %L as"
4202 " argument to C_LOC: %s", &x
->where
, msg
))
4205 else if (x
->rank
> 0 && gfc_notification_std (GFC_STD_F2008
))
4207 gfc_array_ref
*ar
= gfc_find_array_ref (x
);
4209 if (ar
->as
->type
!= AS_EXPLICIT
&& ar
->as
->type
!= AS_ASSUMED_SIZE
4210 && !attr
.allocatable
4211 && !gfc_notify_std (GFC_STD_F2008
,
4212 "Array of interoperable type at %L "
4213 "to C_LOC which is nonallocatable and neither "
4214 "assumed size nor explicit size", &x
->where
))
4216 else if (ar
->type
!= AR_FULL
4217 && !gfc_notify_std (GFC_STD_F2008
, "Array section at %L "
4218 "to C_LOC", &x
->where
))
4227 gfc_check_sleep_sub (gfc_expr
*seconds
)
4229 if (!type_check (seconds
, 0, BT_INTEGER
))
4232 if (!scalar_check (seconds
, 0))
4239 gfc_check_sngl (gfc_expr
*a
)
4241 if (!type_check (a
, 0, BT_REAL
))
4244 if ((a
->ts
.kind
!= gfc_default_double_kind
)
4245 && !gfc_notify_std (GFC_STD_GNU
, "non double precision "
4246 "REAL argument to %s intrinsic at %L",
4247 gfc_current_intrinsic
, &a
->where
))
4254 gfc_check_spread (gfc_expr
*source
, gfc_expr
*dim
, gfc_expr
*ncopies
)
4256 if (source
->rank
>= GFC_MAX_DIMENSIONS
)
4258 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
4259 "than rank %d", gfc_current_intrinsic_arg
[0]->name
,
4260 gfc_current_intrinsic
, &source
->where
, GFC_MAX_DIMENSIONS
);
4268 if (!dim_check (dim
, 1, false))
4271 /* dim_rank_check() does not apply here. */
4273 && dim
->expr_type
== EXPR_CONSTANT
4274 && (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
4275 || mpz_cmp_ui (dim
->value
.integer
, source
->rank
+ 1) > 0))
4277 gfc_error ("'%s' argument of '%s' intrinsic at %L is not a valid "
4278 "dimension index", gfc_current_intrinsic_arg
[1]->name
,
4279 gfc_current_intrinsic
, &dim
->where
);
4283 if (!type_check (ncopies
, 2, BT_INTEGER
))
4286 if (!scalar_check (ncopies
, 2))
4293 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
4297 gfc_check_fgetputc_sub (gfc_expr
*unit
, gfc_expr
*c
, gfc_expr
*status
)
4299 if (!type_check (unit
, 0, BT_INTEGER
))
4302 if (!scalar_check (unit
, 0))
4305 if (!type_check (c
, 1, BT_CHARACTER
))
4307 if (!kind_value_check (c
, 1, gfc_default_character_kind
))
4313 if (!type_check (status
, 2, BT_INTEGER
)
4314 || !kind_value_check (status
, 2, gfc_default_integer_kind
)
4315 || !scalar_check (status
, 2))
4323 gfc_check_fgetputc (gfc_expr
*unit
, gfc_expr
*c
)
4325 return gfc_check_fgetputc_sub (unit
, c
, NULL
);
4330 gfc_check_fgetput_sub (gfc_expr
*c
, gfc_expr
*status
)
4332 if (!type_check (c
, 0, BT_CHARACTER
))
4334 if (!kind_value_check (c
, 0, gfc_default_character_kind
))
4340 if (!type_check (status
, 1, BT_INTEGER
)
4341 || !kind_value_check (status
, 1, gfc_default_integer_kind
)
4342 || !scalar_check (status
, 1))
4350 gfc_check_fgetput (gfc_expr
*c
)
4352 return gfc_check_fgetput_sub (c
, NULL
);
4357 gfc_check_fseek_sub (gfc_expr
*unit
, gfc_expr
*offset
, gfc_expr
*whence
, gfc_expr
*status
)
4359 if (!type_check (unit
, 0, BT_INTEGER
))
4362 if (!scalar_check (unit
, 0))
4365 if (!type_check (offset
, 1, BT_INTEGER
))
4368 if (!scalar_check (offset
, 1))
4371 if (!type_check (whence
, 2, BT_INTEGER
))
4374 if (!scalar_check (whence
, 2))
4380 if (!type_check (status
, 3, BT_INTEGER
))
4383 if (!kind_value_check (status
, 3, 4))
4386 if (!scalar_check (status
, 3))
4395 gfc_check_fstat (gfc_expr
*unit
, gfc_expr
*array
)
4397 if (!type_check (unit
, 0, BT_INTEGER
))
4400 if (!scalar_check (unit
, 0))
4403 if (!type_check (array
, 1, BT_INTEGER
)
4404 || !kind_value_check (unit
, 0, gfc_default_integer_kind
))
4407 if (!array_check (array
, 1))
4415 gfc_check_fstat_sub (gfc_expr
*unit
, gfc_expr
*array
, gfc_expr
*status
)
4417 if (!type_check (unit
, 0, BT_INTEGER
))
4420 if (!scalar_check (unit
, 0))
4423 if (!type_check (array
, 1, BT_INTEGER
)
4424 || !kind_value_check (array
, 1, gfc_default_integer_kind
))
4427 if (!array_check (array
, 1))
4433 if (!type_check (status
, 2, BT_INTEGER
)
4434 || !kind_value_check (status
, 2, gfc_default_integer_kind
))
4437 if (!scalar_check (status
, 2))
4445 gfc_check_ftell (gfc_expr
*unit
)
4447 if (!type_check (unit
, 0, BT_INTEGER
))
4450 if (!scalar_check (unit
, 0))
4458 gfc_check_ftell_sub (gfc_expr
*unit
, gfc_expr
*offset
)
4460 if (!type_check (unit
, 0, BT_INTEGER
))
4463 if (!scalar_check (unit
, 0))
4466 if (!type_check (offset
, 1, BT_INTEGER
))
4469 if (!scalar_check (offset
, 1))
4477 gfc_check_stat (gfc_expr
*name
, gfc_expr
*array
)
4479 if (!type_check (name
, 0, BT_CHARACTER
))
4481 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
4484 if (!type_check (array
, 1, BT_INTEGER
)
4485 || !kind_value_check (array
, 1, gfc_default_integer_kind
))
4488 if (!array_check (array
, 1))
4496 gfc_check_stat_sub (gfc_expr
*name
, gfc_expr
*array
, gfc_expr
*status
)
4498 if (!type_check (name
, 0, BT_CHARACTER
))
4500 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
4503 if (!type_check (array
, 1, BT_INTEGER
)
4504 || !kind_value_check (array
, 1, gfc_default_integer_kind
))
4507 if (!array_check (array
, 1))
4513 if (!type_check (status
, 2, BT_INTEGER
)
4514 || !kind_value_check (array
, 1, gfc_default_integer_kind
))
4517 if (!scalar_check (status
, 2))
4525 gfc_check_image_index (gfc_expr
*coarray
, gfc_expr
*sub
)
4529 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
4531 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4535 if (!coarray_check (coarray
, 0))
4540 gfc_error ("%s argument to IMAGE_INDEX must be a rank one array at %L",
4541 gfc_current_intrinsic_arg
[1]->name
, &sub
->where
);
4545 if (gfc_array_size (sub
, &nelems
))
4547 int corank
= gfc_get_corank (coarray
);
4549 if (mpz_cmp_ui (nelems
, corank
) != 0)
4551 gfc_error ("The number of array elements of the SUB argument to "
4552 "IMAGE_INDEX at %L shall be %d (corank) not %d",
4553 &sub
->where
, corank
, (int) mpz_get_si (nelems
));
4565 gfc_check_num_images (gfc_expr
*distance
, gfc_expr
*failed
)
4567 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
4569 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4575 if (!type_check (distance
, 0, BT_INTEGER
))
4578 if (!nonnegative_check ("DISTANCE", distance
))
4581 if (!scalar_check (distance
, 0))
4584 if (!gfc_notify_std (GFC_STD_F2008_TS
, "DISTANCE= argument to "
4585 "NUM_IMAGES at %L", &distance
->where
))
4591 if (!type_check (failed
, 1, BT_LOGICAL
))
4594 if (!scalar_check (failed
, 1))
4597 if (!gfc_notify_std (GFC_STD_F2008_TS
, "FAILED= argument to "
4598 "NUM_IMAGES at %L", &distance
->where
))
4607 gfc_check_this_image (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*distance
)
4609 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
4611 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4615 if (coarray
== NULL
&& dim
== NULL
&& distance
== NULL
)
4618 if (dim
!= NULL
&& coarray
== NULL
)
4620 gfc_error ("DIM argument without COARRAY argument not allowed for "
4621 "THIS_IMAGE intrinsic at %L", &dim
->where
);
4625 if (distance
&& (coarray
|| dim
))
4627 gfc_error ("The DISTANCE argument may not be specified together with the "
4628 "COARRAY or DIM argument in intrinsic at %L",
4633 /* Assume that we have "this_image (distance)". */
4634 if (coarray
&& !gfc_is_coarray (coarray
) && coarray
->ts
.type
== BT_INTEGER
)
4638 gfc_error ("Unexpected DIM argument with noncoarray argument at %L",
4647 if (!type_check (distance
, 2, BT_INTEGER
))
4650 if (!nonnegative_check ("DISTANCE", distance
))
4653 if (!scalar_check (distance
, 2))
4656 if (!gfc_notify_std (GFC_STD_F2008_TS
, "DISTANCE= argument to "
4657 "THIS_IMAGE at %L", &distance
->where
))
4663 if (!coarray_check (coarray
, 0))
4668 if (!dim_check (dim
, 1, false))
4671 if (!dim_corank_check (dim
, coarray
))
4678 /* Calculate the sizes for transfer, used by gfc_check_transfer and also
4679 by gfc_simplify_transfer. Return false if we cannot do so. */
4682 gfc_calculate_transfer_sizes (gfc_expr
*source
, gfc_expr
*mold
, gfc_expr
*size
,
4683 size_t *source_size
, size_t *result_size
,
4684 size_t *result_length_p
)
4686 size_t result_elt_size
;
4688 if (source
->expr_type
== EXPR_FUNCTION
)
4691 if (size
&& size
->expr_type
!= EXPR_CONSTANT
)
4694 /* Calculate the size of the source. */
4695 *source_size
= gfc_target_expr_size (source
);
4696 if (*source_size
== 0)
4699 /* Determine the size of the element. */
4700 result_elt_size
= gfc_element_size (mold
);
4701 if (result_elt_size
== 0)
4704 if (mold
->expr_type
== EXPR_ARRAY
|| mold
->rank
|| size
)
4709 result_length
= (size_t)mpz_get_ui (size
->value
.integer
);
4712 result_length
= *source_size
/ result_elt_size
;
4713 if (result_length
* result_elt_size
< *source_size
)
4717 *result_size
= result_length
* result_elt_size
;
4718 if (result_length_p
)
4719 *result_length_p
= result_length
;
4722 *result_size
= result_elt_size
;
4729 gfc_check_transfer (gfc_expr
*source
, gfc_expr
*mold
, gfc_expr
*size
)
4734 if (mold
->ts
.type
== BT_HOLLERITH
)
4736 gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
4737 &mold
->where
, gfc_basic_typename (BT_HOLLERITH
));
4743 if (!type_check (size
, 2, BT_INTEGER
))
4746 if (!scalar_check (size
, 2))
4749 if (!nonoptional_check (size
, 2))
4753 if (!gfc_option
.warn_surprising
)
4756 /* If we can't calculate the sizes, we cannot check any more.
4757 Return true for that case. */
4759 if (!gfc_calculate_transfer_sizes (source
, mold
, size
, &source_size
,
4760 &result_size
, NULL
))
4763 if (source_size
< result_size
)
4764 gfc_warning("Intrinsic TRANSFER at %L has partly undefined result: "
4765 "source size %ld < result size %ld", &source
->where
,
4766 (long) source_size
, (long) result_size
);
4773 gfc_check_transpose (gfc_expr
*matrix
)
4775 if (!rank_check (matrix
, 0, 2))
4783 gfc_check_ubound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
4785 if (!array_check (array
, 0))
4788 if (!dim_check (dim
, 1, false))
4791 if (!dim_rank_check (dim
, array
, 0))
4794 if (!kind_check (kind
, 2, BT_INTEGER
))
4796 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
4797 "with KIND argument at %L",
4798 gfc_current_intrinsic
, &kind
->where
))
4806 gfc_check_ucobound (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*kind
)
4808 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
4810 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4814 if (!coarray_check (coarray
, 0))
4819 if (!dim_check (dim
, 1, false))
4822 if (!dim_corank_check (dim
, coarray
))
4826 if (!kind_check (kind
, 2, BT_INTEGER
))
4834 gfc_check_unpack (gfc_expr
*vector
, gfc_expr
*mask
, gfc_expr
*field
)
4838 if (!rank_check (vector
, 0, 1))
4841 if (!array_check (mask
, 1))
4844 if (!type_check (mask
, 1, BT_LOGICAL
))
4847 if (!same_type_check (vector
, 0, field
, 2))
4850 if (mask
->expr_type
== EXPR_ARRAY
4851 && gfc_array_size (vector
, &vector_size
))
4853 int mask_true_count
= 0;
4854 gfc_constructor
*mask_ctor
;
4855 mask_ctor
= gfc_constructor_first (mask
->value
.constructor
);
4858 if (mask_ctor
->expr
->expr_type
!= EXPR_CONSTANT
)
4860 mask_true_count
= 0;
4864 if (mask_ctor
->expr
->value
.logical
)
4867 mask_ctor
= gfc_constructor_next (mask_ctor
);
4870 if (mpz_get_si (vector_size
) < mask_true_count
)
4872 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
4873 "provide at least as many elements as there "
4874 "are .TRUE. values in '%s' (%ld/%d)",
4875 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4876 &vector
->where
, gfc_current_intrinsic_arg
[1]->name
,
4877 mpz_get_si (vector_size
), mask_true_count
);
4881 mpz_clear (vector_size
);
4884 if (mask
->rank
!= field
->rank
&& field
->rank
!= 0)
4886 gfc_error ("'%s' argument of '%s' intrinsic at %L must have "
4887 "the same rank as '%s' or be a scalar",
4888 gfc_current_intrinsic_arg
[2]->name
, gfc_current_intrinsic
,
4889 &field
->where
, gfc_current_intrinsic_arg
[1]->name
);
4893 if (mask
->rank
== field
->rank
)
4896 for (i
= 0; i
< field
->rank
; i
++)
4897 if (! identical_dimen_shape (mask
, i
, field
, i
))
4899 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L "
4900 "must have identical shape.",
4901 gfc_current_intrinsic_arg
[2]->name
,
4902 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
4912 gfc_check_verify (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
4914 if (!type_check (x
, 0, BT_CHARACTER
))
4917 if (!same_type_check (x
, 0, y
, 1))
4920 if (z
!= NULL
&& !type_check (z
, 2, BT_LOGICAL
))
4923 if (!kind_check (kind
, 3, BT_INTEGER
))
4925 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
4926 "with KIND argument at %L",
4927 gfc_current_intrinsic
, &kind
->where
))
4935 gfc_check_trim (gfc_expr
*x
)
4937 if (!type_check (x
, 0, BT_CHARACTER
))
4940 if (!scalar_check (x
, 0))
4948 gfc_check_ttynam (gfc_expr
*unit
)
4950 if (!scalar_check (unit
, 0))
4953 if (!type_check (unit
, 0, BT_INTEGER
))
4960 /* Common check function for the half a dozen intrinsics that have a
4961 single real argument. */
4964 gfc_check_x (gfc_expr
*x
)
4966 if (!type_check (x
, 0, BT_REAL
))
4973 /************* Check functions for intrinsic subroutines *************/
4976 gfc_check_cpu_time (gfc_expr
*time
)
4978 if (!scalar_check (time
, 0))
4981 if (!type_check (time
, 0, BT_REAL
))
4984 if (!variable_check (time
, 0, false))
4992 gfc_check_date_and_time (gfc_expr
*date
, gfc_expr
*time
,
4993 gfc_expr
*zone
, gfc_expr
*values
)
4997 if (!type_check (date
, 0, BT_CHARACTER
))
4999 if (!kind_value_check (date
, 0, gfc_default_character_kind
))
5001 if (!scalar_check (date
, 0))
5003 if (!variable_check (date
, 0, false))
5009 if (!type_check (time
, 1, BT_CHARACTER
))
5011 if (!kind_value_check (time
, 1, gfc_default_character_kind
))
5013 if (!scalar_check (time
, 1))
5015 if (!variable_check (time
, 1, false))
5021 if (!type_check (zone
, 2, BT_CHARACTER
))
5023 if (!kind_value_check (zone
, 2, gfc_default_character_kind
))
5025 if (!scalar_check (zone
, 2))
5027 if (!variable_check (zone
, 2, false))
5033 if (!type_check (values
, 3, BT_INTEGER
))
5035 if (!array_check (values
, 3))
5037 if (!rank_check (values
, 3, 1))
5039 if (!variable_check (values
, 3, false))
5048 gfc_check_mvbits (gfc_expr
*from
, gfc_expr
*frompos
, gfc_expr
*len
,
5049 gfc_expr
*to
, gfc_expr
*topos
)
5051 if (!type_check (from
, 0, BT_INTEGER
))
5054 if (!type_check (frompos
, 1, BT_INTEGER
))
5057 if (!type_check (len
, 2, BT_INTEGER
))
5060 if (!same_type_check (from
, 0, to
, 3))
5063 if (!variable_check (to
, 3, false))
5066 if (!type_check (topos
, 4, BT_INTEGER
))
5069 if (!nonnegative_check ("frompos", frompos
))
5072 if (!nonnegative_check ("topos", topos
))
5075 if (!nonnegative_check ("len", len
))
5078 if (!less_than_bitsize2 ("from", from
, "frompos", frompos
, "len", len
))
5081 if (!less_than_bitsize2 ("to", to
, "topos", topos
, "len", len
))
5089 gfc_check_random_number (gfc_expr
*harvest
)
5091 if (!type_check (harvest
, 0, BT_REAL
))
5094 if (!variable_check (harvest
, 0, false))
5102 gfc_check_random_seed (gfc_expr
*size
, gfc_expr
*put
, gfc_expr
*get
)
5104 unsigned int nargs
= 0, kiss_size
;
5105 locus
*where
= NULL
;
5106 mpz_t put_size
, get_size
;
5107 bool have_gfc_real_16
; /* Try and mimic HAVE_GFC_REAL_16 in libgfortran. */
5109 have_gfc_real_16
= gfc_validate_kind (BT_REAL
, 16, true) != -1;
5111 /* Keep the number of bytes in sync with kiss_size in
5112 libgfortran/intrinsics/random.c. */
5113 kiss_size
= (have_gfc_real_16
? 48 : 32) / gfc_default_integer_kind
;
5117 if (size
->expr_type
!= EXPR_VARIABLE
5118 || !size
->symtree
->n
.sym
->attr
.optional
)
5121 if (!scalar_check (size
, 0))
5124 if (!type_check (size
, 0, BT_INTEGER
))
5127 if (!variable_check (size
, 0, false))
5130 if (!kind_value_check (size
, 0, gfc_default_integer_kind
))
5136 if (put
->expr_type
!= EXPR_VARIABLE
5137 || !put
->symtree
->n
.sym
->attr
.optional
)
5140 where
= &put
->where
;
5143 if (!array_check (put
, 1))
5146 if (!rank_check (put
, 1, 1))
5149 if (!type_check (put
, 1, BT_INTEGER
))
5152 if (!kind_value_check (put
, 1, gfc_default_integer_kind
))
5155 if (gfc_array_size (put
, &put_size
)
5156 && mpz_get_ui (put_size
) < kiss_size
)
5157 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
5158 "too small (%i/%i)",
5159 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
5160 where
, (int) mpz_get_ui (put_size
), kiss_size
);
5165 if (get
->expr_type
!= EXPR_VARIABLE
5166 || !get
->symtree
->n
.sym
->attr
.optional
)
5169 where
= &get
->where
;
5172 if (!array_check (get
, 2))
5175 if (!rank_check (get
, 2, 1))
5178 if (!type_check (get
, 2, BT_INTEGER
))
5181 if (!variable_check (get
, 2, false))
5184 if (!kind_value_check (get
, 2, gfc_default_integer_kind
))
5187 if (gfc_array_size (get
, &get_size
)
5188 && mpz_get_ui (get_size
) < kiss_size
)
5189 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
5190 "too small (%i/%i)",
5191 gfc_current_intrinsic_arg
[2]->name
, gfc_current_intrinsic
,
5192 where
, (int) mpz_get_ui (get_size
), kiss_size
);
5195 /* RANDOM_SEED may not have more than one non-optional argument. */
5197 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
, where
);
5204 gfc_check_second_sub (gfc_expr
*time
)
5206 if (!scalar_check (time
, 0))
5209 if (!type_check (time
, 0, BT_REAL
))
5212 if (!kind_value_check (time
, 0, 4))
5219 /* COUNT and COUNT_MAX of SYSTEM_CLOCK are scalar, default-kind integer
5220 variables in Fortran 95. In Fortran 2003 and later, they can be of any
5221 kind, and COUNT_RATE can be of type real. Note, count, count_rate, and
5222 count_max are all optional arguments */
5225 gfc_check_system_clock (gfc_expr
*count
, gfc_expr
*count_rate
,
5226 gfc_expr
*count_max
)
5230 if (!scalar_check (count
, 0))
5233 if (!type_check (count
, 0, BT_INTEGER
))
5236 if (count
->ts
.kind
!= gfc_default_integer_kind
5237 && !gfc_notify_std (GFC_STD_F2003
, "COUNT argument to "
5238 "SYSTEM_CLOCK at %L has non-default kind",
5242 if (!variable_check (count
, 0, false))
5246 if (count_rate
!= NULL
)
5248 if (!scalar_check (count_rate
, 1))
5251 if (!variable_check (count_rate
, 1, false))
5254 if (count_rate
->ts
.type
== BT_REAL
)
5256 if (!gfc_notify_std (GFC_STD_F2003
, "Real COUNT_RATE argument to "
5257 "SYSTEM_CLOCK at %L", &count_rate
->where
))
5262 if (!type_check (count_rate
, 1, BT_INTEGER
))
5265 if (count_rate
->ts
.kind
!= gfc_default_integer_kind
5266 && !gfc_notify_std (GFC_STD_F2003
, "COUNT_RATE argument to "
5267 "SYSTEM_CLOCK at %L has non-default kind",
5268 &count_rate
->where
))
5274 if (count_max
!= NULL
)
5276 if (!scalar_check (count_max
, 2))
5279 if (!type_check (count_max
, 2, BT_INTEGER
))
5282 if (count_max
->ts
.kind
!= gfc_default_integer_kind
5283 && !gfc_notify_std (GFC_STD_F2003
, "COUNT_MAX argument to "
5284 "SYSTEM_CLOCK at %L has non-default kind",
5288 if (!variable_check (count_max
, 2, false))
5297 gfc_check_irand (gfc_expr
*x
)
5302 if (!scalar_check (x
, 0))
5305 if (!type_check (x
, 0, BT_INTEGER
))
5308 if (!kind_value_check (x
, 0, 4))
5316 gfc_check_alarm_sub (gfc_expr
*seconds
, gfc_expr
*handler
, gfc_expr
*status
)
5318 if (!scalar_check (seconds
, 0))
5320 if (!type_check (seconds
, 0, BT_INTEGER
))
5323 if (!int_or_proc_check (handler
, 1))
5325 if (handler
->ts
.type
== BT_INTEGER
&& !scalar_check (handler
, 1))
5331 if (!scalar_check (status
, 2))
5333 if (!type_check (status
, 2, BT_INTEGER
))
5335 if (!kind_value_check (status
, 2, gfc_default_integer_kind
))
5343 gfc_check_rand (gfc_expr
*x
)
5348 if (!scalar_check (x
, 0))
5351 if (!type_check (x
, 0, BT_INTEGER
))
5354 if (!kind_value_check (x
, 0, 4))
5362 gfc_check_srand (gfc_expr
*x
)
5364 if (!scalar_check (x
, 0))
5367 if (!type_check (x
, 0, BT_INTEGER
))
5370 if (!kind_value_check (x
, 0, 4))
5378 gfc_check_ctime_sub (gfc_expr
*time
, gfc_expr
*result
)
5380 if (!scalar_check (time
, 0))
5382 if (!type_check (time
, 0, BT_INTEGER
))
5385 if (!type_check (result
, 1, BT_CHARACTER
))
5387 if (!kind_value_check (result
, 1, gfc_default_character_kind
))
5395 gfc_check_dtime_etime (gfc_expr
*x
)
5397 if (!array_check (x
, 0))
5400 if (!rank_check (x
, 0, 1))
5403 if (!variable_check (x
, 0, false))
5406 if (!type_check (x
, 0, BT_REAL
))
5409 if (!kind_value_check (x
, 0, 4))
5417 gfc_check_dtime_etime_sub (gfc_expr
*values
, gfc_expr
*time
)
5419 if (!array_check (values
, 0))
5422 if (!rank_check (values
, 0, 1))
5425 if (!variable_check (values
, 0, false))
5428 if (!type_check (values
, 0, BT_REAL
))
5431 if (!kind_value_check (values
, 0, 4))
5434 if (!scalar_check (time
, 1))
5437 if (!type_check (time
, 1, BT_REAL
))
5440 if (!kind_value_check (time
, 1, 4))
5448 gfc_check_fdate_sub (gfc_expr
*date
)
5450 if (!type_check (date
, 0, BT_CHARACTER
))
5452 if (!kind_value_check (date
, 0, gfc_default_character_kind
))
5460 gfc_check_gerror (gfc_expr
*msg
)
5462 if (!type_check (msg
, 0, BT_CHARACTER
))
5464 if (!kind_value_check (msg
, 0, gfc_default_character_kind
))
5472 gfc_check_getcwd_sub (gfc_expr
*cwd
, gfc_expr
*status
)
5474 if (!type_check (cwd
, 0, BT_CHARACTER
))
5476 if (!kind_value_check (cwd
, 0, gfc_default_character_kind
))
5482 if (!scalar_check (status
, 1))
5485 if (!type_check (status
, 1, BT_INTEGER
))
5493 gfc_check_getarg (gfc_expr
*pos
, gfc_expr
*value
)
5495 if (!type_check (pos
, 0, BT_INTEGER
))
5498 if (pos
->ts
.kind
> gfc_default_integer_kind
)
5500 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
5501 "not wider than the default kind (%d)",
5502 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
5503 &pos
->where
, gfc_default_integer_kind
);
5507 if (!type_check (value
, 1, BT_CHARACTER
))
5509 if (!kind_value_check (value
, 1, gfc_default_character_kind
))
5517 gfc_check_getlog (gfc_expr
*msg
)
5519 if (!type_check (msg
, 0, BT_CHARACTER
))
5521 if (!kind_value_check (msg
, 0, gfc_default_character_kind
))
5529 gfc_check_exit (gfc_expr
*status
)
5534 if (!type_check (status
, 0, BT_INTEGER
))
5537 if (!scalar_check (status
, 0))
5545 gfc_check_flush (gfc_expr
*unit
)
5550 if (!type_check (unit
, 0, BT_INTEGER
))
5553 if (!scalar_check (unit
, 0))
5561 gfc_check_free (gfc_expr
*i
)
5563 if (!type_check (i
, 0, BT_INTEGER
))
5566 if (!scalar_check (i
, 0))
5574 gfc_check_hostnm (gfc_expr
*name
)
5576 if (!type_check (name
, 0, BT_CHARACTER
))
5578 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
5586 gfc_check_hostnm_sub (gfc_expr
*name
, gfc_expr
*status
)
5588 if (!type_check (name
, 0, BT_CHARACTER
))
5590 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
5596 if (!scalar_check (status
, 1))
5599 if (!type_check (status
, 1, BT_INTEGER
))
5607 gfc_check_itime_idate (gfc_expr
*values
)
5609 if (!array_check (values
, 0))
5612 if (!rank_check (values
, 0, 1))
5615 if (!variable_check (values
, 0, false))
5618 if (!type_check (values
, 0, BT_INTEGER
))
5621 if (!kind_value_check (values
, 0, gfc_default_integer_kind
))
5629 gfc_check_ltime_gmtime (gfc_expr
*time
, gfc_expr
*values
)
5631 if (!type_check (time
, 0, BT_INTEGER
))
5634 if (!kind_value_check (time
, 0, gfc_default_integer_kind
))
5637 if (!scalar_check (time
, 0))
5640 if (!array_check (values
, 1))
5643 if (!rank_check (values
, 1, 1))
5646 if (!variable_check (values
, 1, false))
5649 if (!type_check (values
, 1, BT_INTEGER
))
5652 if (!kind_value_check (values
, 1, gfc_default_integer_kind
))
5660 gfc_check_ttynam_sub (gfc_expr
*unit
, gfc_expr
*name
)
5662 if (!scalar_check (unit
, 0))
5665 if (!type_check (unit
, 0, BT_INTEGER
))
5668 if (!type_check (name
, 1, BT_CHARACTER
))
5670 if (!kind_value_check (name
, 1, gfc_default_character_kind
))
5678 gfc_check_isatty (gfc_expr
*unit
)
5683 if (!type_check (unit
, 0, BT_INTEGER
))
5686 if (!scalar_check (unit
, 0))
5694 gfc_check_isnan (gfc_expr
*x
)
5696 if (!type_check (x
, 0, BT_REAL
))
5704 gfc_check_perror (gfc_expr
*string
)
5706 if (!type_check (string
, 0, BT_CHARACTER
))
5708 if (!kind_value_check (string
, 0, gfc_default_character_kind
))
5716 gfc_check_umask (gfc_expr
*mask
)
5718 if (!type_check (mask
, 0, BT_INTEGER
))
5721 if (!scalar_check (mask
, 0))
5729 gfc_check_umask_sub (gfc_expr
*mask
, gfc_expr
*old
)
5731 if (!type_check (mask
, 0, BT_INTEGER
))
5734 if (!scalar_check (mask
, 0))
5740 if (!scalar_check (old
, 1))
5743 if (!type_check (old
, 1, BT_INTEGER
))
5751 gfc_check_unlink (gfc_expr
*name
)
5753 if (!type_check (name
, 0, BT_CHARACTER
))
5755 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
5763 gfc_check_unlink_sub (gfc_expr
*name
, gfc_expr
*status
)
5765 if (!type_check (name
, 0, BT_CHARACTER
))
5767 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
5773 if (!scalar_check (status
, 1))
5776 if (!type_check (status
, 1, BT_INTEGER
))
5784 gfc_check_signal (gfc_expr
*number
, gfc_expr
*handler
)
5786 if (!scalar_check (number
, 0))
5788 if (!type_check (number
, 0, BT_INTEGER
))
5791 if (!int_or_proc_check (handler
, 1))
5793 if (handler
->ts
.type
== BT_INTEGER
&& !scalar_check (handler
, 1))
5801 gfc_check_signal_sub (gfc_expr
*number
, gfc_expr
*handler
, gfc_expr
*status
)
5803 if (!scalar_check (number
, 0))
5805 if (!type_check (number
, 0, BT_INTEGER
))
5808 if (!int_or_proc_check (handler
, 1))
5810 if (handler
->ts
.type
== BT_INTEGER
&& !scalar_check (handler
, 1))
5816 if (!type_check (status
, 2, BT_INTEGER
))
5818 if (!scalar_check (status
, 2))
5826 gfc_check_system_sub (gfc_expr
*cmd
, gfc_expr
*status
)
5828 if (!type_check (cmd
, 0, BT_CHARACTER
))
5830 if (!kind_value_check (cmd
, 0, gfc_default_character_kind
))
5833 if (!scalar_check (status
, 1))
5836 if (!type_check (status
, 1, BT_INTEGER
))
5839 if (!kind_value_check (status
, 1, gfc_default_integer_kind
))
5846 /* This is used for the GNU intrinsics AND, OR and XOR. */
5848 gfc_check_and (gfc_expr
*i
, gfc_expr
*j
)
5850 if (i
->ts
.type
!= BT_INTEGER
&& i
->ts
.type
!= BT_LOGICAL
)
5852 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
5853 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
5854 gfc_current_intrinsic
, &i
->where
);
5858 if (j
->ts
.type
!= BT_INTEGER
&& j
->ts
.type
!= BT_LOGICAL
)
5860 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
5861 "or LOGICAL", gfc_current_intrinsic_arg
[1]->name
,
5862 gfc_current_intrinsic
, &j
->where
);
5866 if (i
->ts
.type
!= j
->ts
.type
)
5868 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
5869 "have the same type", gfc_current_intrinsic_arg
[0]->name
,
5870 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
5875 if (!scalar_check (i
, 0))
5878 if (!scalar_check (j
, 1))
5886 gfc_check_storage_size (gfc_expr
*a
, gfc_expr
*kind
)
5888 if (a
->ts
.type
== BT_ASSUMED
)
5890 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be TYPE(*)",
5891 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
5896 if (a
->ts
.type
== BT_PROCEDURE
)
5898 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be a "
5899 "procedure", gfc_current_intrinsic_arg
[0]->name
,
5900 gfc_current_intrinsic
, &a
->where
);
5907 if (!type_check (kind
, 1, BT_INTEGER
))
5910 if (!scalar_check (kind
, 1))
5913 if (kind
->expr_type
!= EXPR_CONSTANT
)
5915 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
5916 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,