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
, int atom_no
, gfc_expr
*value
, int val_no
,
1010 gfc_expr
*stat
, int stat_no
)
1012 if (!scalar_check (atom
, atom_no
) || !scalar_check (value
, val_no
))
1015 if (!(atom
->ts
.type
== BT_INTEGER
&& atom
->ts
.kind
== gfc_atomic_int_kind
)
1016 && !(atom
->ts
.type
== BT_LOGICAL
1017 && atom
->ts
.kind
== gfc_atomic_logical_kind
))
1019 gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1020 "integer of ATOMIC_INT_KIND or a logical of "
1021 "ATOMIC_LOGICAL_KIND", &atom
->where
, gfc_current_intrinsic
);
1025 if (!gfc_expr_attr (atom
).codimension
)
1027 gfc_error ("ATOM argument at %L of the %s intrinsic function shall be a "
1028 "coarray or coindexed", &atom
->where
, gfc_current_intrinsic
);
1032 if (atom
->ts
.type
!= value
->ts
.type
)
1034 gfc_error ("'%s' argument of '%s' intrinsic at %L shall have the same "
1035 "type as '%s' at %L", gfc_current_intrinsic_arg
[val_no
]->name
,
1036 gfc_current_intrinsic
, &value
->where
,
1037 gfc_current_intrinsic_arg
[atom_no
]->name
, &atom
->where
);
1043 if (!type_check (stat
, stat_no
, BT_INTEGER
))
1045 if (!scalar_check (stat
, stat_no
))
1047 if (!variable_check (stat
, stat_no
, false))
1049 if (!kind_value_check (stat
, stat_no
, gfc_default_integer_kind
))
1052 if (!gfc_notify_std (GFC_STD_F2008_TS
, "STAT= argument to %s at %L",
1053 gfc_current_intrinsic
, &stat
->where
))
1062 gfc_check_atomic_def (gfc_expr
*atom
, gfc_expr
*value
, gfc_expr
*stat
)
1064 if (atom
->expr_type
== EXPR_FUNCTION
1065 && atom
->value
.function
.isym
1066 && atom
->value
.function
.isym
->id
== GFC_ISYM_CAF_GET
)
1067 atom
= atom
->value
.function
.actual
->expr
;
1069 if (!gfc_check_vardef_context (atom
, false, false, false, NULL
))
1071 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1072 "definable", gfc_current_intrinsic
, &atom
->where
);
1076 return gfc_check_atomic (atom
, 0, value
, 1, stat
, 2);
1081 gfc_check_atomic_op (gfc_expr
*atom
, gfc_expr
*value
, gfc_expr
*stat
)
1083 if (atom
->ts
.type
!= BT_INTEGER
|| atom
->ts
.kind
!= gfc_atomic_int_kind
)
1085 gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1086 "integer of ATOMIC_INT_KIND", &atom
->where
,
1087 gfc_current_intrinsic
);
1091 return gfc_check_atomic_def (atom
, value
, stat
);
1096 gfc_check_atomic_ref (gfc_expr
*value
, gfc_expr
*atom
, gfc_expr
*stat
)
1098 if (atom
->expr_type
== EXPR_FUNCTION
1099 && atom
->value
.function
.isym
1100 && atom
->value
.function
.isym
->id
== GFC_ISYM_CAF_GET
)
1101 atom
= atom
->value
.function
.actual
->expr
;
1103 if (!gfc_check_vardef_context (value
, false, false, false, NULL
))
1105 gfc_error ("VALUE argument of the %s intrinsic function at %L shall be "
1106 "definable", gfc_current_intrinsic
, &value
->where
);
1110 return gfc_check_atomic (atom
, 1, value
, 0, stat
, 2);
1115 gfc_check_atomic_cas (gfc_expr
*atom
, gfc_expr
*old
, gfc_expr
*compare
,
1116 gfc_expr
*new_val
, gfc_expr
*stat
)
1118 if (atom
->expr_type
== EXPR_FUNCTION
1119 && atom
->value
.function
.isym
1120 && atom
->value
.function
.isym
->id
== GFC_ISYM_CAF_GET
)
1121 atom
= atom
->value
.function
.actual
->expr
;
1123 if (!gfc_check_atomic (atom
, 0, new_val
, 3, stat
, 4))
1126 if (!scalar_check (old
, 1) || !scalar_check (compare
, 2))
1129 if (!same_type_check (atom
, 0, old
, 1))
1132 if (!same_type_check (atom
, 0, compare
, 2))
1135 if (!gfc_check_vardef_context (atom
, false, false, false, NULL
))
1137 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1138 "definable", gfc_current_intrinsic
, &atom
->where
);
1142 if (!gfc_check_vardef_context (old
, false, false, false, NULL
))
1144 gfc_error ("OLD argument of the %s intrinsic function at %L shall be "
1145 "definable", gfc_current_intrinsic
, &old
->where
);
1154 gfc_check_atomic_fetch_op (gfc_expr
*atom
, gfc_expr
*value
, gfc_expr
*old
,
1157 if (atom
->expr_type
== EXPR_FUNCTION
1158 && atom
->value
.function
.isym
1159 && atom
->value
.function
.isym
->id
== GFC_ISYM_CAF_GET
)
1160 atom
= atom
->value
.function
.actual
->expr
;
1162 if (atom
->ts
.type
!= BT_INTEGER
|| atom
->ts
.kind
!= gfc_atomic_int_kind
)
1164 gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1165 "integer of ATOMIC_INT_KIND", &atom
->where
,
1166 gfc_current_intrinsic
);
1170 if (!gfc_check_atomic (atom
, 0, value
, 1, stat
, 3))
1173 if (!scalar_check (old
, 2))
1176 if (!same_type_check (atom
, 0, old
, 2))
1179 if (!gfc_check_vardef_context (atom
, false, false, false, NULL
))
1181 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1182 "definable", gfc_current_intrinsic
, &atom
->where
);
1186 if (!gfc_check_vardef_context (old
, false, false, false, NULL
))
1188 gfc_error ("OLD argument of the %s intrinsic function at %L shall be "
1189 "definable", gfc_current_intrinsic
, &old
->where
);
1197 /* BESJN and BESYN functions. */
1200 gfc_check_besn (gfc_expr
*n
, gfc_expr
*x
)
1202 if (!type_check (n
, 0, BT_INTEGER
))
1204 if (n
->expr_type
== EXPR_CONSTANT
)
1207 gfc_extract_int (n
, &i
);
1208 if (i
< 0 && !gfc_notify_std (GFC_STD_GNU
, "Negative argument "
1209 "N at %L", &n
->where
))
1213 if (!type_check (x
, 1, BT_REAL
))
1220 /* Transformational version of the Bessel JN and YN functions. */
1223 gfc_check_bessel_n2 (gfc_expr
*n1
, gfc_expr
*n2
, gfc_expr
*x
)
1225 if (!type_check (n1
, 0, BT_INTEGER
))
1227 if (!scalar_check (n1
, 0))
1229 if (!nonnegative_check ("N1", n1
))
1232 if (!type_check (n2
, 1, BT_INTEGER
))
1234 if (!scalar_check (n2
, 1))
1236 if (!nonnegative_check ("N2", n2
))
1239 if (!type_check (x
, 2, BT_REAL
))
1241 if (!scalar_check (x
, 2))
1249 gfc_check_bge_bgt_ble_blt (gfc_expr
*i
, gfc_expr
*j
)
1251 if (!type_check (i
, 0, BT_INTEGER
))
1254 if (!type_check (j
, 1, BT_INTEGER
))
1262 gfc_check_bitfcn (gfc_expr
*i
, gfc_expr
*pos
)
1264 if (!type_check (i
, 0, BT_INTEGER
))
1267 if (!type_check (pos
, 1, BT_INTEGER
))
1270 if (!nonnegative_check ("pos", pos
))
1273 if (!less_than_bitsize1 ("i", i
, "pos", pos
, false))
1281 gfc_check_char (gfc_expr
*i
, gfc_expr
*kind
)
1283 if (!type_check (i
, 0, BT_INTEGER
))
1285 if (!kind_check (kind
, 1, BT_CHARACTER
))
1293 gfc_check_chdir (gfc_expr
*dir
)
1295 if (!type_check (dir
, 0, BT_CHARACTER
))
1297 if (!kind_value_check (dir
, 0, gfc_default_character_kind
))
1305 gfc_check_chdir_sub (gfc_expr
*dir
, gfc_expr
*status
)
1307 if (!type_check (dir
, 0, BT_CHARACTER
))
1309 if (!kind_value_check (dir
, 0, gfc_default_character_kind
))
1315 if (!type_check (status
, 1, BT_INTEGER
))
1317 if (!scalar_check (status
, 1))
1325 gfc_check_chmod (gfc_expr
*name
, gfc_expr
*mode
)
1327 if (!type_check (name
, 0, BT_CHARACTER
))
1329 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
1332 if (!type_check (mode
, 1, BT_CHARACTER
))
1334 if (!kind_value_check (mode
, 1, gfc_default_character_kind
))
1342 gfc_check_chmod_sub (gfc_expr
*name
, gfc_expr
*mode
, gfc_expr
*status
)
1344 if (!type_check (name
, 0, BT_CHARACTER
))
1346 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
1349 if (!type_check (mode
, 1, BT_CHARACTER
))
1351 if (!kind_value_check (mode
, 1, gfc_default_character_kind
))
1357 if (!type_check (status
, 2, BT_INTEGER
))
1360 if (!scalar_check (status
, 2))
1368 gfc_check_cmplx (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*kind
)
1370 if (!numeric_check (x
, 0))
1375 if (!numeric_check (y
, 1))
1378 if (x
->ts
.type
== BT_COMPLEX
)
1380 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1381 "present if 'x' is COMPLEX",
1382 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1387 if (y
->ts
.type
== BT_COMPLEX
)
1389 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1390 "of either REAL or INTEGER",
1391 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1398 if (!kind_check (kind
, 2, BT_COMPLEX
))
1401 if (!kind
&& gfc_option
.gfc_warn_conversion
1402 && x
->ts
.type
== BT_REAL
&& x
->ts
.kind
> gfc_default_real_kind
)
1403 gfc_warning_now ("Conversion from %s to default-kind COMPLEX(%d) at %L "
1404 "might lose precision, consider using the KIND argument",
1405 gfc_typename (&x
->ts
), gfc_default_real_kind
, &x
->where
);
1406 else if (y
&& !kind
&& gfc_option
.gfc_warn_conversion
1407 && y
->ts
.type
== BT_REAL
&& y
->ts
.kind
> gfc_default_real_kind
)
1408 gfc_warning_now ("Conversion from %s to default-kind COMPLEX(%d) at %L "
1409 "might lose precision, consider using the KIND argument",
1410 gfc_typename (&y
->ts
), gfc_default_real_kind
, &y
->where
);
1417 check_co_minmaxsum (gfc_expr
*a
, gfc_expr
*result_image
, gfc_expr
*stat
,
1420 if (!variable_check (a
, 0, false))
1423 if (!gfc_check_vardef_context (a
, false, false, false, "argument 'A' with "
1427 if (gfc_has_vector_subscript (a
))
1429 gfc_error ("Argument 'A' with INTENT(INOUT) at %L of the intrinsic "
1430 "subroutine %s shall not have a vector subscript",
1431 &a
->where
, gfc_current_intrinsic
);
1435 if (result_image
!= NULL
)
1437 if (!type_check (result_image
, 1, BT_INTEGER
))
1439 if (!scalar_check (result_image
, 1))
1445 if (!type_check (stat
, 2, BT_INTEGER
))
1447 if (!scalar_check (stat
, 2))
1449 if (!variable_check (stat
, 2, false))
1451 if (stat
->ts
.kind
!= 4)
1453 gfc_error ("The stat= argument at %L must be a kind=4 integer "
1454 "variable", &stat
->where
);
1461 if (!type_check (errmsg
, 3, BT_CHARACTER
))
1463 if (!scalar_check (errmsg
, 3))
1465 if (!variable_check (errmsg
, 3, false))
1467 if (errmsg
->ts
.kind
!= 1)
1469 gfc_error ("The errmsg= argument at %L must be a default-kind "
1470 "character variable", &errmsg
->where
);
1475 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
1477 gfc_fatal_error ("Coarrays disabled at %L, use -fcoarray= to enable",
1487 gfc_check_co_minmax (gfc_expr
*a
, gfc_expr
*result_image
, gfc_expr
*stat
,
1490 if (a
->ts
.type
!= BT_INTEGER
&& a
->ts
.type
!= BT_REAL
1491 && a
->ts
.type
!= BT_CHARACTER
)
1493 gfc_error ("'%s' argument of '%s' intrinsic at %L shall be of type "
1494 "integer, real or character",
1495 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
1499 return check_co_minmaxsum (a
, result_image
, stat
, errmsg
);
1504 gfc_check_co_sum (gfc_expr
*a
, gfc_expr
*result_image
, gfc_expr
*stat
,
1507 if (!numeric_check (a
, 0))
1509 return check_co_minmaxsum (a
, result_image
, stat
, errmsg
);
1514 gfc_check_complex (gfc_expr
*x
, gfc_expr
*y
)
1516 if (!int_or_real_check (x
, 0))
1518 if (!scalar_check (x
, 0))
1521 if (!int_or_real_check (y
, 1))
1523 if (!scalar_check (y
, 1))
1531 gfc_check_count (gfc_expr
*mask
, gfc_expr
*dim
, gfc_expr
*kind
)
1533 if (!logical_array_check (mask
, 0))
1535 if (!dim_check (dim
, 1, false))
1537 if (!dim_rank_check (dim
, mask
, 0))
1539 if (!kind_check (kind
, 2, BT_INTEGER
))
1541 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
1542 "with KIND argument at %L",
1543 gfc_current_intrinsic
, &kind
->where
))
1551 gfc_check_cshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*dim
)
1553 if (!array_check (array
, 0))
1556 if (!type_check (shift
, 1, BT_INTEGER
))
1559 if (!dim_check (dim
, 2, true))
1562 if (!dim_rank_check (dim
, array
, false))
1565 if (array
->rank
== 1 || shift
->rank
== 0)
1567 if (!scalar_check (shift
, 1))
1570 else if (shift
->rank
== array
->rank
- 1)
1575 else if (dim
->expr_type
== EXPR_CONSTANT
)
1576 gfc_extract_int (dim
, &d
);
1583 for (i
= 0, j
= 0; i
< array
->rank
; i
++)
1586 if (!identical_dimen_shape (array
, i
, shift
, j
))
1588 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1589 "invalid shape in dimension %d (%ld/%ld)",
1590 gfc_current_intrinsic_arg
[1]->name
,
1591 gfc_current_intrinsic
, &shift
->where
, i
+ 1,
1592 mpz_get_si (array
->shape
[i
]),
1593 mpz_get_si (shift
->shape
[j
]));
1603 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1604 "%d or be a scalar", gfc_current_intrinsic_arg
[1]->name
,
1605 gfc_current_intrinsic
, &shift
->where
, array
->rank
- 1);
1614 gfc_check_ctime (gfc_expr
*time
)
1616 if (!scalar_check (time
, 0))
1619 if (!type_check (time
, 0, BT_INTEGER
))
1626 bool gfc_check_datan2 (gfc_expr
*y
, gfc_expr
*x
)
1628 if (!double_check (y
, 0) || !double_check (x
, 1))
1635 gfc_check_dcmplx (gfc_expr
*x
, gfc_expr
*y
)
1637 if (!numeric_check (x
, 0))
1642 if (!numeric_check (y
, 1))
1645 if (x
->ts
.type
== BT_COMPLEX
)
1647 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1648 "present if 'x' is COMPLEX",
1649 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1654 if (y
->ts
.type
== BT_COMPLEX
)
1656 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1657 "of either REAL or INTEGER",
1658 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1669 gfc_check_dble (gfc_expr
*x
)
1671 if (!numeric_check (x
, 0))
1679 gfc_check_digits (gfc_expr
*x
)
1681 if (!int_or_real_check (x
, 0))
1689 gfc_check_dot_product (gfc_expr
*vector_a
, gfc_expr
*vector_b
)
1691 switch (vector_a
->ts
.type
)
1694 if (!type_check (vector_b
, 1, BT_LOGICAL
))
1701 if (!numeric_check (vector_b
, 1))
1706 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1707 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
1708 gfc_current_intrinsic
, &vector_a
->where
);
1712 if (!rank_check (vector_a
, 0, 1))
1715 if (!rank_check (vector_b
, 1, 1))
1718 if (! identical_dimen_shape (vector_a
, 0, vector_b
, 0))
1720 gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
1721 "intrinsic 'dot_product'", gfc_current_intrinsic_arg
[0]->name
,
1722 gfc_current_intrinsic_arg
[1]->name
, &vector_a
->where
);
1731 gfc_check_dprod (gfc_expr
*x
, gfc_expr
*y
)
1733 if (!type_check (x
, 0, BT_REAL
)
1734 || !type_check (y
, 1, BT_REAL
))
1737 if (x
->ts
.kind
!= gfc_default_real_kind
)
1739 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1740 "real", gfc_current_intrinsic_arg
[0]->name
,
1741 gfc_current_intrinsic
, &x
->where
);
1745 if (y
->ts
.kind
!= gfc_default_real_kind
)
1747 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1748 "real", gfc_current_intrinsic_arg
[1]->name
,
1749 gfc_current_intrinsic
, &y
->where
);
1758 gfc_check_dshift (gfc_expr
*i
, gfc_expr
*j
, gfc_expr
*shift
)
1760 if (!type_check (i
, 0, BT_INTEGER
))
1763 if (!type_check (j
, 1, BT_INTEGER
))
1766 if (i
->is_boz
&& j
->is_boz
)
1768 gfc_error ("'I' at %L and 'J' at %L cannot both be BOZ literal "
1769 "constants", &i
->where
, &j
->where
);
1773 if (!i
->is_boz
&& !j
->is_boz
&& !same_type_check (i
, 0, j
, 1))
1776 if (!type_check (shift
, 2, BT_INTEGER
))
1779 if (!nonnegative_check ("SHIFT", shift
))
1784 if (!less_than_bitsize1 ("J", j
, "SHIFT", shift
, true))
1786 i
->ts
.kind
= j
->ts
.kind
;
1790 if (!less_than_bitsize1 ("I", i
, "SHIFT", shift
, true))
1792 j
->ts
.kind
= i
->ts
.kind
;
1800 gfc_check_eoshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*boundary
,
1803 if (!array_check (array
, 0))
1806 if (!type_check (shift
, 1, BT_INTEGER
))
1809 if (!dim_check (dim
, 3, true))
1812 if (!dim_rank_check (dim
, array
, false))
1815 if (array
->rank
== 1 || shift
->rank
== 0)
1817 if (!scalar_check (shift
, 1))
1820 else if (shift
->rank
== array
->rank
- 1)
1825 else if (dim
->expr_type
== EXPR_CONSTANT
)
1826 gfc_extract_int (dim
, &d
);
1833 for (i
= 0, j
= 0; i
< array
->rank
; i
++)
1836 if (!identical_dimen_shape (array
, i
, shift
, j
))
1838 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1839 "invalid shape in dimension %d (%ld/%ld)",
1840 gfc_current_intrinsic_arg
[1]->name
,
1841 gfc_current_intrinsic
, &shift
->where
, i
+ 1,
1842 mpz_get_si (array
->shape
[i
]),
1843 mpz_get_si (shift
->shape
[j
]));
1853 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1854 "%d or be a scalar", gfc_current_intrinsic_arg
[1]->name
,
1855 gfc_current_intrinsic
, &shift
->where
, array
->rank
- 1);
1859 if (boundary
!= NULL
)
1861 if (!same_type_check (array
, 0, boundary
, 2))
1864 if (array
->rank
== 1 || boundary
->rank
== 0)
1866 if (!scalar_check (boundary
, 2))
1869 else if (boundary
->rank
== array
->rank
- 1)
1871 if (!gfc_check_conformance (shift
, boundary
,
1872 "arguments '%s' and '%s' for "
1874 gfc_current_intrinsic_arg
[1]->name
,
1875 gfc_current_intrinsic_arg
[2]->name
,
1876 gfc_current_intrinsic
))
1881 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have "
1882 "rank %d or be a scalar",
1883 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1884 &shift
->where
, array
->rank
- 1);
1893 gfc_check_float (gfc_expr
*a
)
1895 if (!type_check (a
, 0, BT_INTEGER
))
1898 if ((a
->ts
.kind
!= gfc_default_integer_kind
)
1899 && !gfc_notify_std (GFC_STD_GNU
, "non-default INTEGER "
1900 "kind argument to %s intrinsic at %L",
1901 gfc_current_intrinsic
, &a
->where
))
1907 /* A single complex argument. */
1910 gfc_check_fn_c (gfc_expr
*a
)
1912 if (!type_check (a
, 0, BT_COMPLEX
))
1918 /* A single real argument. */
1921 gfc_check_fn_r (gfc_expr
*a
)
1923 if (!type_check (a
, 0, BT_REAL
))
1929 /* A single double argument. */
1932 gfc_check_fn_d (gfc_expr
*a
)
1934 if (!double_check (a
, 0))
1940 /* A single real or complex argument. */
1943 gfc_check_fn_rc (gfc_expr
*a
)
1945 if (!real_or_complex_check (a
, 0))
1953 gfc_check_fn_rc2008 (gfc_expr
*a
)
1955 if (!real_or_complex_check (a
, 0))
1958 if (a
->ts
.type
== BT_COMPLEX
1959 && !gfc_notify_std (GFC_STD_F2008
, "COMPLEX argument '%s' "
1960 "of '%s' intrinsic at %L",
1961 gfc_current_intrinsic_arg
[0]->name
,
1962 gfc_current_intrinsic
, &a
->where
))
1970 gfc_check_fnum (gfc_expr
*unit
)
1972 if (!type_check (unit
, 0, BT_INTEGER
))
1975 if (!scalar_check (unit
, 0))
1983 gfc_check_huge (gfc_expr
*x
)
1985 if (!int_or_real_check (x
, 0))
1993 gfc_check_hypot (gfc_expr
*x
, gfc_expr
*y
)
1995 if (!type_check (x
, 0, BT_REAL
))
1997 if (!same_type_check (x
, 0, y
, 1))
2004 /* Check that the single argument is an integer. */
2007 gfc_check_i (gfc_expr
*i
)
2009 if (!type_check (i
, 0, BT_INTEGER
))
2017 gfc_check_iand (gfc_expr
*i
, gfc_expr
*j
)
2019 if (!type_check (i
, 0, BT_INTEGER
))
2022 if (!type_check (j
, 1, BT_INTEGER
))
2025 if (i
->ts
.kind
!= j
->ts
.kind
)
2027 if (!gfc_notify_std (GFC_STD_GNU
, "Different type kinds at %L",
2037 gfc_check_ibits (gfc_expr
*i
, gfc_expr
*pos
, gfc_expr
*len
)
2039 if (!type_check (i
, 0, BT_INTEGER
))
2042 if (!type_check (pos
, 1, BT_INTEGER
))
2045 if (!type_check (len
, 2, BT_INTEGER
))
2048 if (!nonnegative_check ("pos", pos
))
2051 if (!nonnegative_check ("len", len
))
2054 if (!less_than_bitsize2 ("i", i
, "pos", pos
, "len", len
))
2062 gfc_check_ichar_iachar (gfc_expr
*c
, gfc_expr
*kind
)
2066 if (!type_check (c
, 0, BT_CHARACTER
))
2069 if (!kind_check (kind
, 1, BT_INTEGER
))
2072 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
2073 "with KIND argument at %L",
2074 gfc_current_intrinsic
, &kind
->where
))
2077 if (c
->expr_type
== EXPR_VARIABLE
|| c
->expr_type
== EXPR_SUBSTRING
)
2083 /* Substring references don't have the charlength set. */
2085 while (ref
&& ref
->type
!= REF_SUBSTRING
)
2088 gcc_assert (ref
== NULL
|| ref
->type
== REF_SUBSTRING
);
2092 /* Check that the argument is length one. Non-constant lengths
2093 can't be checked here, so assume they are ok. */
2094 if (c
->ts
.u
.cl
&& c
->ts
.u
.cl
->length
)
2096 /* If we already have a length for this expression then use it. */
2097 if (c
->ts
.u
.cl
->length
->expr_type
!= EXPR_CONSTANT
)
2099 i
= mpz_get_si (c
->ts
.u
.cl
->length
->value
.integer
);
2106 start
= ref
->u
.ss
.start
;
2107 end
= ref
->u
.ss
.end
;
2110 if (end
== NULL
|| end
->expr_type
!= EXPR_CONSTANT
2111 || start
->expr_type
!= EXPR_CONSTANT
)
2114 i
= mpz_get_si (end
->value
.integer
) + 1
2115 - mpz_get_si (start
->value
.integer
);
2123 gfc_error ("Argument of %s at %L must be of length one",
2124 gfc_current_intrinsic
, &c
->where
);
2133 gfc_check_idnint (gfc_expr
*a
)
2135 if (!double_check (a
, 0))
2143 gfc_check_ieor (gfc_expr
*i
, gfc_expr
*j
)
2145 if (!type_check (i
, 0, BT_INTEGER
))
2148 if (!type_check (j
, 1, BT_INTEGER
))
2151 if (i
->ts
.kind
!= j
->ts
.kind
)
2153 if (!gfc_notify_std (GFC_STD_GNU
, "Different type kinds at %L",
2163 gfc_check_index (gfc_expr
*string
, gfc_expr
*substring
, gfc_expr
*back
,
2166 if (!type_check (string
, 0, BT_CHARACTER
)
2167 || !type_check (substring
, 1, BT_CHARACTER
))
2170 if (back
!= NULL
&& !type_check (back
, 2, BT_LOGICAL
))
2173 if (!kind_check (kind
, 3, BT_INTEGER
))
2175 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
2176 "with KIND argument at %L",
2177 gfc_current_intrinsic
, &kind
->where
))
2180 if (string
->ts
.kind
!= substring
->ts
.kind
)
2182 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
2183 "kind as '%s'", gfc_current_intrinsic_arg
[1]->name
,
2184 gfc_current_intrinsic
, &substring
->where
,
2185 gfc_current_intrinsic_arg
[0]->name
);
2194 gfc_check_int (gfc_expr
*x
, gfc_expr
*kind
)
2196 if (!numeric_check (x
, 0))
2199 if (!kind_check (kind
, 1, BT_INTEGER
))
2207 gfc_check_intconv (gfc_expr
*x
)
2209 if (!numeric_check (x
, 0))
2217 gfc_check_ior (gfc_expr
*i
, gfc_expr
*j
)
2219 if (!type_check (i
, 0, BT_INTEGER
))
2222 if (!type_check (j
, 1, BT_INTEGER
))
2225 if (i
->ts
.kind
!= j
->ts
.kind
)
2227 if (!gfc_notify_std (GFC_STD_GNU
, "Different type kinds at %L",
2237 gfc_check_ishft (gfc_expr
*i
, gfc_expr
*shift
)
2239 if (!type_check (i
, 0, BT_INTEGER
)
2240 || !type_check (shift
, 1, BT_INTEGER
))
2243 if (!less_than_bitsize1 ("I", i
, NULL
, shift
, true))
2251 gfc_check_ishftc (gfc_expr
*i
, gfc_expr
*shift
, gfc_expr
*size
)
2253 if (!type_check (i
, 0, BT_INTEGER
)
2254 || !type_check (shift
, 1, BT_INTEGER
))
2261 if (!type_check (size
, 2, BT_INTEGER
))
2264 if (!less_than_bitsize1 ("I", i
, "SIZE", size
, true))
2267 if (size
->expr_type
== EXPR_CONSTANT
)
2269 gfc_extract_int (size
, &i3
);
2272 gfc_error ("SIZE at %L must be positive", &size
->where
);
2276 if (shift
->expr_type
== EXPR_CONSTANT
)
2278 gfc_extract_int (shift
, &i2
);
2284 gfc_error ("The absolute value of SHIFT at %L must be less "
2285 "than or equal to SIZE at %L", &shift
->where
,
2292 else if (!less_than_bitsize1 ("I", i
, NULL
, shift
, true))
2300 gfc_check_kill (gfc_expr
*pid
, gfc_expr
*sig
)
2302 if (!type_check (pid
, 0, BT_INTEGER
))
2305 if (!type_check (sig
, 1, BT_INTEGER
))
2313 gfc_check_kill_sub (gfc_expr
*pid
, gfc_expr
*sig
, gfc_expr
*status
)
2315 if (!type_check (pid
, 0, BT_INTEGER
))
2318 if (!scalar_check (pid
, 0))
2321 if (!type_check (sig
, 1, BT_INTEGER
))
2324 if (!scalar_check (sig
, 1))
2330 if (!type_check (status
, 2, BT_INTEGER
))
2333 if (!scalar_check (status
, 2))
2341 gfc_check_kind (gfc_expr
*x
)
2343 if (x
->ts
.type
== BT_DERIVED
)
2345 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
2346 "non-derived type", gfc_current_intrinsic_arg
[0]->name
,
2347 gfc_current_intrinsic
, &x
->where
);
2356 gfc_check_lbound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
2358 if (!array_check (array
, 0))
2361 if (!dim_check (dim
, 1, false))
2364 if (!dim_rank_check (dim
, array
, 1))
2367 if (!kind_check (kind
, 2, BT_INTEGER
))
2369 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
2370 "with KIND argument at %L",
2371 gfc_current_intrinsic
, &kind
->where
))
2379 gfc_check_lcobound (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*kind
)
2381 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
2383 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
2387 if (!coarray_check (coarray
, 0))
2392 if (!dim_check (dim
, 1, false))
2395 if (!dim_corank_check (dim
, coarray
))
2399 if (!kind_check (kind
, 2, BT_INTEGER
))
2407 gfc_check_len_lentrim (gfc_expr
*s
, gfc_expr
*kind
)
2409 if (!type_check (s
, 0, BT_CHARACTER
))
2412 if (!kind_check (kind
, 1, BT_INTEGER
))
2414 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
2415 "with KIND argument at %L",
2416 gfc_current_intrinsic
, &kind
->where
))
2424 gfc_check_lge_lgt_lle_llt (gfc_expr
*a
, gfc_expr
*b
)
2426 if (!type_check (a
, 0, BT_CHARACTER
))
2428 if (!kind_value_check (a
, 0, gfc_default_character_kind
))
2431 if (!type_check (b
, 1, BT_CHARACTER
))
2433 if (!kind_value_check (b
, 1, gfc_default_character_kind
))
2441 gfc_check_link (gfc_expr
*path1
, gfc_expr
*path2
)
2443 if (!type_check (path1
, 0, BT_CHARACTER
))
2445 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
2448 if (!type_check (path2
, 1, BT_CHARACTER
))
2450 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
2458 gfc_check_link_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2460 if (!type_check (path1
, 0, BT_CHARACTER
))
2462 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
2465 if (!type_check (path2
, 1, BT_CHARACTER
))
2467 if (!kind_value_check (path2
, 0, gfc_default_character_kind
))
2473 if (!type_check (status
, 2, BT_INTEGER
))
2476 if (!scalar_check (status
, 2))
2484 gfc_check_loc (gfc_expr
*expr
)
2486 return variable_check (expr
, 0, true);
2491 gfc_check_symlnk (gfc_expr
*path1
, gfc_expr
*path2
)
2493 if (!type_check (path1
, 0, BT_CHARACTER
))
2495 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
2498 if (!type_check (path2
, 1, BT_CHARACTER
))
2500 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
2508 gfc_check_symlnk_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2510 if (!type_check (path1
, 0, BT_CHARACTER
))
2512 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
2515 if (!type_check (path2
, 1, BT_CHARACTER
))
2517 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
2523 if (!type_check (status
, 2, BT_INTEGER
))
2526 if (!scalar_check (status
, 2))
2534 gfc_check_logical (gfc_expr
*a
, gfc_expr
*kind
)
2536 if (!type_check (a
, 0, BT_LOGICAL
))
2538 if (!kind_check (kind
, 1, BT_LOGICAL
))
2545 /* Min/max family. */
2548 min_max_args (gfc_actual_arglist
*args
)
2550 gfc_actual_arglist
*arg
;
2551 int i
, j
, nargs
, *nlabels
, nlabelless
;
2552 bool a1
= false, a2
= false;
2554 if (args
== NULL
|| args
->next
== NULL
)
2556 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
2557 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
2564 if (!args
->next
->name
)
2568 for (arg
= args
; arg
; arg
= arg
->next
)
2575 /* Note: Having a keywordless argument after an "arg=" is checked before. */
2577 nlabels
= XALLOCAVEC (int, nargs
);
2578 for (arg
= args
, i
= 0; arg
; arg
= arg
->next
, i
++)
2584 if (arg
->name
[0] != 'a' || arg
->name
[1] < '1' || arg
->name
[1] > '9')
2586 n
= strtol (&arg
->name
[1], &endp
, 10);
2587 if (endp
[0] != '\0')
2591 if (n
<= nlabelless
)
2604 gfc_error ("Missing '%s' argument to the %s intrinsic at %L",
2605 !a1
? "a1" : "a2", gfc_current_intrinsic
,
2606 gfc_current_intrinsic_where
);
2610 /* Check for duplicates. */
2611 for (i
= 0; i
< nargs
; i
++)
2612 for (j
= i
+ 1; j
< nargs
; j
++)
2613 if (nlabels
[i
] == nlabels
[j
])
2619 gfc_error ("Duplicate argument '%s' at %L to intrinsic %s", arg
->name
,
2620 &arg
->expr
->where
, gfc_current_intrinsic
);
2624 gfc_error ("Unknown argument '%s' at %L to intrinsic %s", arg
->name
,
2625 &arg
->expr
->where
, gfc_current_intrinsic
);
2631 check_rest (bt type
, int kind
, gfc_actual_arglist
*arglist
)
2633 gfc_actual_arglist
*arg
, *tmp
;
2637 if (!min_max_args (arglist
))
2640 for (arg
= arglist
, n
=1; arg
; arg
= arg
->next
, n
++)
2643 if (x
->ts
.type
!= type
|| x
->ts
.kind
!= kind
)
2645 if (x
->ts
.type
== type
)
2647 if (!gfc_notify_std (GFC_STD_GNU
, "Different type "
2648 "kinds at %L", &x
->where
))
2653 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
2654 "%s(%d)", n
, gfc_current_intrinsic
, &x
->where
,
2655 gfc_basic_typename (type
), kind
);
2660 for (tmp
= arglist
, m
=1; tmp
!= arg
; tmp
= tmp
->next
, m
++)
2661 if (!gfc_check_conformance (tmp
->expr
, x
,
2662 "arguments 'a%d' and 'a%d' for "
2663 "intrinsic '%s'", m
, n
,
2664 gfc_current_intrinsic
))
2673 gfc_check_min_max (gfc_actual_arglist
*arg
)
2677 if (!min_max_args (arg
))
2682 if (x
->ts
.type
== BT_CHARACTER
)
2684 if (!gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
2685 "with CHARACTER argument at %L",
2686 gfc_current_intrinsic
, &x
->where
))
2689 else if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
2691 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
2692 "REAL or CHARACTER", gfc_current_intrinsic
, &x
->where
);
2696 return check_rest (x
->ts
.type
, x
->ts
.kind
, arg
);
2701 gfc_check_min_max_integer (gfc_actual_arglist
*arg
)
2703 return check_rest (BT_INTEGER
, gfc_default_integer_kind
, arg
);
2708 gfc_check_min_max_real (gfc_actual_arglist
*arg
)
2710 return check_rest (BT_REAL
, gfc_default_real_kind
, arg
);
2715 gfc_check_min_max_double (gfc_actual_arglist
*arg
)
2717 return check_rest (BT_REAL
, gfc_default_double_kind
, arg
);
2721 /* End of min/max family. */
2724 gfc_check_malloc (gfc_expr
*size
)
2726 if (!type_check (size
, 0, BT_INTEGER
))
2729 if (!scalar_check (size
, 0))
2737 gfc_check_matmul (gfc_expr
*matrix_a
, gfc_expr
*matrix_b
)
2739 if ((matrix_a
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_a
->ts
))
2741 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2742 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
2743 gfc_current_intrinsic
, &matrix_a
->where
);
2747 if ((matrix_b
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_b
->ts
))
2749 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2750 "or LOGICAL", gfc_current_intrinsic_arg
[1]->name
,
2751 gfc_current_intrinsic
, &matrix_b
->where
);
2755 if ((matrix_a
->ts
.type
== BT_LOGICAL
&& gfc_numeric_ts (&matrix_b
->ts
))
2756 || (gfc_numeric_ts (&matrix_a
->ts
) && matrix_b
->ts
.type
== BT_LOGICAL
))
2758 gfc_error ("Argument types of '%s' intrinsic at %L must match (%s/%s)",
2759 gfc_current_intrinsic
, &matrix_a
->where
,
2760 gfc_typename(&matrix_a
->ts
), gfc_typename(&matrix_b
->ts
));
2764 switch (matrix_a
->rank
)
2767 if (!rank_check (matrix_b
, 1, 2))
2769 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
2770 if (!identical_dimen_shape (matrix_a
, 0, matrix_b
, 0))
2772 gfc_error ("Different shape on dimension 1 for arguments '%s' "
2773 "and '%s' at %L for intrinsic matmul",
2774 gfc_current_intrinsic_arg
[0]->name
,
2775 gfc_current_intrinsic_arg
[1]->name
, &matrix_a
->where
);
2781 if (matrix_b
->rank
!= 2)
2783 if (!rank_check (matrix_b
, 1, 1))
2786 /* matrix_b has rank 1 or 2 here. Common check for the cases
2787 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
2788 - matrix_a has shape (n,m) and matrix_b has shape (m). */
2789 if (!identical_dimen_shape (matrix_a
, 1, matrix_b
, 0))
2791 gfc_error ("Different shape on dimension 2 for argument '%s' and "
2792 "dimension 1 for argument '%s' at %L for intrinsic "
2793 "matmul", gfc_current_intrinsic_arg
[0]->name
,
2794 gfc_current_intrinsic_arg
[1]->name
, &matrix_a
->where
);
2800 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
2801 "1 or 2", gfc_current_intrinsic_arg
[0]->name
,
2802 gfc_current_intrinsic
, &matrix_a
->where
);
2810 /* Whoever came up with this interface was probably on something.
2811 The possibilities for the occupation of the second and third
2818 NULL MASK minloc(array, mask=m)
2821 I.e. in the case of minloc(array,mask), mask will be in the second
2822 position of the argument list and we'll have to fix that up. */
2825 gfc_check_minloc_maxloc (gfc_actual_arglist
*ap
)
2827 gfc_expr
*a
, *m
, *d
;
2830 if (!int_or_real_check (a
, 0) || !array_check (a
, 0))
2834 m
= ap
->next
->next
->expr
;
2836 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
2837 && ap
->next
->name
== NULL
)
2841 ap
->next
->expr
= NULL
;
2842 ap
->next
->next
->expr
= m
;
2845 if (!dim_check (d
, 1, false))
2848 if (!dim_rank_check (d
, a
, 0))
2851 if (m
!= NULL
&& !type_check (m
, 2, BT_LOGICAL
))
2855 && !gfc_check_conformance (a
, m
,
2856 "arguments '%s' and '%s' for intrinsic %s",
2857 gfc_current_intrinsic_arg
[0]->name
,
2858 gfc_current_intrinsic_arg
[2]->name
,
2859 gfc_current_intrinsic
))
2866 /* Similar to minloc/maxloc, the argument list might need to be
2867 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
2868 difference is that MINLOC/MAXLOC take an additional KIND argument.
2869 The possibilities are:
2875 NULL MASK minval(array, mask=m)
2878 I.e. in the case of minval(array,mask), mask will be in the second
2879 position of the argument list and we'll have to fix that up. */
2882 check_reduction (gfc_actual_arglist
*ap
)
2884 gfc_expr
*a
, *m
, *d
;
2888 m
= ap
->next
->next
->expr
;
2890 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
2891 && ap
->next
->name
== NULL
)
2895 ap
->next
->expr
= NULL
;
2896 ap
->next
->next
->expr
= m
;
2899 if (!dim_check (d
, 1, false))
2902 if (!dim_rank_check (d
, a
, 0))
2905 if (m
!= NULL
&& !type_check (m
, 2, BT_LOGICAL
))
2909 && !gfc_check_conformance (a
, m
,
2910 "arguments '%s' and '%s' for intrinsic %s",
2911 gfc_current_intrinsic_arg
[0]->name
,
2912 gfc_current_intrinsic_arg
[2]->name
,
2913 gfc_current_intrinsic
))
2921 gfc_check_minval_maxval (gfc_actual_arglist
*ap
)
2923 if (!int_or_real_check (ap
->expr
, 0)
2924 || !array_check (ap
->expr
, 0))
2927 return check_reduction (ap
);
2932 gfc_check_product_sum (gfc_actual_arglist
*ap
)
2934 if (!numeric_check (ap
->expr
, 0)
2935 || !array_check (ap
->expr
, 0))
2938 return check_reduction (ap
);
2942 /* For IANY, IALL and IPARITY. */
2945 gfc_check_mask (gfc_expr
*i
, gfc_expr
*kind
)
2949 if (!type_check (i
, 0, BT_INTEGER
))
2952 if (!nonnegative_check ("I", i
))
2955 if (!kind_check (kind
, 1, BT_INTEGER
))
2959 gfc_extract_int (kind
, &k
);
2961 k
= gfc_default_integer_kind
;
2963 if (!less_than_bitsizekind ("I", i
, k
))
2971 gfc_check_transf_bit_intrins (gfc_actual_arglist
*ap
)
2973 if (ap
->expr
->ts
.type
!= BT_INTEGER
)
2975 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER",
2976 gfc_current_intrinsic_arg
[0]->name
,
2977 gfc_current_intrinsic
, &ap
->expr
->where
);
2981 if (!array_check (ap
->expr
, 0))
2984 return check_reduction (ap
);
2989 gfc_check_merge (gfc_expr
*tsource
, gfc_expr
*fsource
, gfc_expr
*mask
)
2991 if (!same_type_check (tsource
, 0, fsource
, 1))
2994 if (!type_check (mask
, 2, BT_LOGICAL
))
2997 if (tsource
->ts
.type
== BT_CHARACTER
)
2998 return gfc_check_same_strlen (tsource
, fsource
, "MERGE intrinsic");
3005 gfc_check_merge_bits (gfc_expr
*i
, gfc_expr
*j
, gfc_expr
*mask
)
3007 if (!type_check (i
, 0, BT_INTEGER
))
3010 if (!type_check (j
, 1, BT_INTEGER
))
3013 if (!type_check (mask
, 2, BT_INTEGER
))
3016 if (!same_type_check (i
, 0, j
, 1))
3019 if (!same_type_check (i
, 0, mask
, 2))
3027 gfc_check_move_alloc (gfc_expr
*from
, gfc_expr
*to
)
3029 if (!variable_check (from
, 0, false))
3031 if (!allocatable_check (from
, 0))
3033 if (gfc_is_coindexed (from
))
3035 gfc_error ("The FROM argument to MOVE_ALLOC at %L shall not be "
3036 "coindexed", &from
->where
);
3040 if (!variable_check (to
, 1, false))
3042 if (!allocatable_check (to
, 1))
3044 if (gfc_is_coindexed (to
))
3046 gfc_error ("The TO argument to MOVE_ALLOC at %L shall not be "
3047 "coindexed", &to
->where
);
3051 if (from
->ts
.type
== BT_CLASS
&& to
->ts
.type
== BT_DERIVED
)
3053 gfc_error ("The TO arguments in MOVE_ALLOC at %L must be "
3054 "polymorphic if FROM is polymorphic",
3059 if (!same_type_check (to
, 1, from
, 0))
3062 if (to
->rank
!= from
->rank
)
3064 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
3065 "must have the same rank %d/%d", &to
->where
, from
->rank
,
3070 /* IR F08/0040; cf. 12-006A. */
3071 if (gfc_get_corank (to
) != gfc_get_corank (from
))
3073 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
3074 "must have the same corank %d/%d", &to
->where
,
3075 gfc_get_corank (from
), gfc_get_corank (to
));
3079 /* CLASS arguments: Make sure the vtab of from is present. */
3080 if (to
->ts
.type
== BT_CLASS
&& !UNLIMITED_POLY (from
))
3081 gfc_find_vtab (&from
->ts
);
3088 gfc_check_nearest (gfc_expr
*x
, gfc_expr
*s
)
3090 if (!type_check (x
, 0, BT_REAL
))
3093 if (!type_check (s
, 1, BT_REAL
))
3096 if (s
->expr_type
== EXPR_CONSTANT
)
3098 if (mpfr_sgn (s
->value
.real
) == 0)
3100 gfc_error ("Argument 'S' of NEAREST at %L shall not be zero",
3111 gfc_check_new_line (gfc_expr
*a
)
3113 if (!type_check (a
, 0, BT_CHARACTER
))
3121 gfc_check_norm2 (gfc_expr
*array
, gfc_expr
*dim
)
3123 if (!type_check (array
, 0, BT_REAL
))
3126 if (!array_check (array
, 0))
3129 if (!dim_rank_check (dim
, array
, false))
3136 gfc_check_null (gfc_expr
*mold
)
3138 symbol_attribute attr
;
3143 if (!variable_check (mold
, 0, true))
3146 attr
= gfc_variable_attr (mold
, NULL
);
3148 if (!attr
.pointer
&& !attr
.proc_pointer
&& !attr
.allocatable
)
3150 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER, "
3151 "ALLOCATABLE or procedure pointer",
3152 gfc_current_intrinsic_arg
[0]->name
,
3153 gfc_current_intrinsic
, &mold
->where
);
3157 if (attr
.allocatable
3158 && !gfc_notify_std (GFC_STD_F2003
, "NULL intrinsic with "
3159 "allocatable MOLD at %L", &mold
->where
))
3163 if (gfc_is_coindexed (mold
))
3165 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
3166 "coindexed", gfc_current_intrinsic_arg
[0]->name
,
3167 gfc_current_intrinsic
, &mold
->where
);
3176 gfc_check_pack (gfc_expr
*array
, gfc_expr
*mask
, gfc_expr
*vector
)
3178 if (!array_check (array
, 0))
3181 if (!type_check (mask
, 1, BT_LOGICAL
))
3184 if (!gfc_check_conformance (array
, mask
,
3185 "arguments '%s' and '%s' for intrinsic '%s'",
3186 gfc_current_intrinsic_arg
[0]->name
,
3187 gfc_current_intrinsic_arg
[1]->name
,
3188 gfc_current_intrinsic
))
3193 mpz_t array_size
, vector_size
;
3194 bool have_array_size
, have_vector_size
;
3196 if (!same_type_check (array
, 0, vector
, 2))
3199 if (!rank_check (vector
, 2, 1))
3202 /* VECTOR requires at least as many elements as MASK
3203 has .TRUE. values. */
3204 have_array_size
= gfc_array_size(array
, &array_size
);
3205 have_vector_size
= gfc_array_size(vector
, &vector_size
);
3207 if (have_vector_size
3208 && (mask
->expr_type
== EXPR_ARRAY
3209 || (mask
->expr_type
== EXPR_CONSTANT
3210 && have_array_size
)))
3212 int mask_true_values
= 0;
3214 if (mask
->expr_type
== EXPR_ARRAY
)
3216 gfc_constructor
*mask_ctor
;
3217 mask_ctor
= gfc_constructor_first (mask
->value
.constructor
);
3220 if (mask_ctor
->expr
->expr_type
!= EXPR_CONSTANT
)
3222 mask_true_values
= 0;
3226 if (mask_ctor
->expr
->value
.logical
)
3229 mask_ctor
= gfc_constructor_next (mask_ctor
);
3232 else if (mask
->expr_type
== EXPR_CONSTANT
&& mask
->value
.logical
)
3233 mask_true_values
= mpz_get_si (array_size
);
3235 if (mpz_get_si (vector_size
) < mask_true_values
)
3237 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
3238 "provide at least as many elements as there "
3239 "are .TRUE. values in '%s' (%ld/%d)",
3240 gfc_current_intrinsic_arg
[2]->name
,
3241 gfc_current_intrinsic
, &vector
->where
,
3242 gfc_current_intrinsic_arg
[1]->name
,
3243 mpz_get_si (vector_size
), mask_true_values
);
3248 if (have_array_size
)
3249 mpz_clear (array_size
);
3250 if (have_vector_size
)
3251 mpz_clear (vector_size
);
3259 gfc_check_parity (gfc_expr
*mask
, gfc_expr
*dim
)
3261 if (!type_check (mask
, 0, BT_LOGICAL
))
3264 if (!array_check (mask
, 0))
3267 if (!dim_rank_check (dim
, mask
, false))
3275 gfc_check_precision (gfc_expr
*x
)
3277 if (!real_or_complex_check (x
, 0))
3285 gfc_check_present (gfc_expr
*a
)
3289 if (!variable_check (a
, 0, true))
3292 sym
= a
->symtree
->n
.sym
;
3293 if (!sym
->attr
.dummy
)
3295 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
3296 "dummy variable", gfc_current_intrinsic_arg
[0]->name
,
3297 gfc_current_intrinsic
, &a
->where
);
3301 if (!sym
->attr
.optional
)
3303 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
3304 "an OPTIONAL dummy variable",
3305 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3310 /* 13.14.82 PRESENT(A)
3312 Argument. A shall be the name of an optional dummy argument that is
3313 accessible in the subprogram in which the PRESENT function reference
3317 && !(a
->ref
->next
== NULL
&& a
->ref
->type
== REF_ARRAY
3318 && (a
->ref
->u
.ar
.type
== AR_FULL
3319 || (a
->ref
->u
.ar
.type
== AR_ELEMENT
3320 && a
->ref
->u
.ar
.as
->rank
== 0))))
3322 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
3323 "subobject of '%s'", gfc_current_intrinsic_arg
[0]->name
,
3324 gfc_current_intrinsic
, &a
->where
, sym
->name
);
3333 gfc_check_radix (gfc_expr
*x
)
3335 if (!int_or_real_check (x
, 0))
3343 gfc_check_range (gfc_expr
*x
)
3345 if (!numeric_check (x
, 0))
3353 gfc_check_rank (gfc_expr
*a ATTRIBUTE_UNUSED
)
3355 /* Any data object is allowed; a "data object" is a "constant (4.1.3),
3356 variable (6), or subobject of a constant (2.4.3.2.3)" (F2008, 1.3.45). */
3358 bool is_variable
= true;
3360 /* Functions returning pointers are regarded as variable, cf. F2008, R602. */
3361 if (a
->expr_type
== EXPR_FUNCTION
)
3362 is_variable
= a
->value
.function
.esym
3363 ? a
->value
.function
.esym
->result
->attr
.pointer
3364 : a
->symtree
->n
.sym
->result
->attr
.pointer
;
3366 if (a
->expr_type
== EXPR_OP
|| a
->expr_type
== EXPR_NULL
3367 || a
->expr_type
== EXPR_COMPCALL
|| a
->expr_type
== EXPR_PPC
3370 gfc_error ("The argument of the RANK intrinsic at %L must be a data "
3371 "object", &a
->where
);
3379 /* real, float, sngl. */
3381 gfc_check_real (gfc_expr
*a
, gfc_expr
*kind
)
3383 if (!numeric_check (a
, 0))
3386 if (!kind_check (kind
, 1, BT_REAL
))
3394 gfc_check_rename (gfc_expr
*path1
, gfc_expr
*path2
)
3396 if (!type_check (path1
, 0, BT_CHARACTER
))
3398 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
3401 if (!type_check (path2
, 1, BT_CHARACTER
))
3403 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
3411 gfc_check_rename_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
3413 if (!type_check (path1
, 0, BT_CHARACTER
))
3415 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
3418 if (!type_check (path2
, 1, BT_CHARACTER
))
3420 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
3426 if (!type_check (status
, 2, BT_INTEGER
))
3429 if (!scalar_check (status
, 2))
3437 gfc_check_repeat (gfc_expr
*x
, gfc_expr
*y
)
3439 if (!type_check (x
, 0, BT_CHARACTER
))
3442 if (!scalar_check (x
, 0))
3445 if (!type_check (y
, 0, BT_INTEGER
))
3448 if (!scalar_check (y
, 1))
3456 gfc_check_reshape (gfc_expr
*source
, gfc_expr
*shape
,
3457 gfc_expr
*pad
, gfc_expr
*order
)
3463 if (!array_check (source
, 0))
3466 if (!rank_check (shape
, 1, 1))
3469 if (!type_check (shape
, 1, BT_INTEGER
))
3472 if (!gfc_array_size (shape
, &size
))
3474 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
3475 "array of constant size", &shape
->where
);
3479 shape_size
= mpz_get_ui (size
);
3482 if (shape_size
<= 0)
3484 gfc_error ("'%s' argument of '%s' intrinsic at %L is empty",
3485 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3489 else if (shape_size
> GFC_MAX_DIMENSIONS
)
3491 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
3492 "than %d elements", &shape
->where
, GFC_MAX_DIMENSIONS
);
3495 else if (shape
->expr_type
== EXPR_ARRAY
&& gfc_is_constant_expr (shape
))
3499 for (i
= 0; i
< shape_size
; ++i
)
3501 e
= gfc_constructor_lookup_expr (shape
->value
.constructor
, i
);
3502 if (e
->expr_type
!= EXPR_CONSTANT
)
3505 gfc_extract_int (e
, &extent
);
3508 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3509 "negative element (%d)",
3510 gfc_current_intrinsic_arg
[1]->name
,
3511 gfc_current_intrinsic
, &e
->where
, extent
);
3519 if (!same_type_check (source
, 0, pad
, 2))
3522 if (!array_check (pad
, 2))
3528 if (!array_check (order
, 3))
3531 if (!type_check (order
, 3, BT_INTEGER
))
3534 if (order
->expr_type
== EXPR_ARRAY
)
3536 int i
, order_size
, dim
, perm
[GFC_MAX_DIMENSIONS
];
3539 for (i
= 0; i
< GFC_MAX_DIMENSIONS
; ++i
)
3542 gfc_array_size (order
, &size
);
3543 order_size
= mpz_get_ui (size
);
3546 if (order_size
!= shape_size
)
3548 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3549 "has wrong number of elements (%d/%d)",
3550 gfc_current_intrinsic_arg
[3]->name
,
3551 gfc_current_intrinsic
, &order
->where
,
3552 order_size
, shape_size
);
3556 for (i
= 1; i
<= order_size
; ++i
)
3558 e
= gfc_constructor_lookup_expr (order
->value
.constructor
, i
-1);
3559 if (e
->expr_type
!= EXPR_CONSTANT
)
3562 gfc_extract_int (e
, &dim
);
3564 if (dim
< 1 || dim
> order_size
)
3566 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3567 "has out-of-range dimension (%d)",
3568 gfc_current_intrinsic_arg
[3]->name
,
3569 gfc_current_intrinsic
, &e
->where
, dim
);
3573 if (perm
[dim
-1] != 0)
3575 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3576 "invalid permutation of dimensions (dimension "
3578 gfc_current_intrinsic_arg
[3]->name
,
3579 gfc_current_intrinsic
, &e
->where
, dim
);
3588 if (pad
== NULL
&& shape
->expr_type
== EXPR_ARRAY
3589 && gfc_is_constant_expr (shape
)
3590 && !(source
->expr_type
== EXPR_VARIABLE
&& source
->symtree
->n
.sym
->as
3591 && source
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
))
3593 /* Check the match in size between source and destination. */
3594 if (gfc_array_size (source
, &nelems
))
3600 mpz_init_set_ui (size
, 1);
3601 for (c
= gfc_constructor_first (shape
->value
.constructor
);
3602 c
; c
= gfc_constructor_next (c
))
3603 mpz_mul (size
, size
, c
->expr
->value
.integer
);
3605 test
= mpz_cmp (nelems
, size
) < 0 && mpz_cmp_ui (size
, 0) > 0;
3611 gfc_error ("Without padding, there are not enough elements "
3612 "in the intrinsic RESHAPE source at %L to match "
3613 "the shape", &source
->where
);
3624 gfc_check_same_type_as (gfc_expr
*a
, gfc_expr
*b
)
3626 if (a
->ts
.type
!= BT_DERIVED
&& a
->ts
.type
!= BT_CLASS
)
3628 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3629 "cannot be of type %s",
3630 gfc_current_intrinsic_arg
[0]->name
,
3631 gfc_current_intrinsic
,
3632 &a
->where
, gfc_typename (&a
->ts
));
3636 if (!(gfc_type_is_extensible (a
->ts
.u
.derived
) || UNLIMITED_POLY (a
)))
3638 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3639 "must be of an extensible type",
3640 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3645 if (b
->ts
.type
!= BT_DERIVED
&& b
->ts
.type
!= BT_CLASS
)
3647 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3648 "cannot be of type %s",
3649 gfc_current_intrinsic_arg
[0]->name
,
3650 gfc_current_intrinsic
,
3651 &b
->where
, gfc_typename (&b
->ts
));
3655 if (!(gfc_type_is_extensible (b
->ts
.u
.derived
) || UNLIMITED_POLY (b
)))
3657 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3658 "must be of an extensible type",
3659 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3669 gfc_check_scale (gfc_expr
*x
, gfc_expr
*i
)
3671 if (!type_check (x
, 0, BT_REAL
))
3674 if (!type_check (i
, 1, BT_INTEGER
))
3682 gfc_check_scan (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
3684 if (!type_check (x
, 0, BT_CHARACTER
))
3687 if (!type_check (y
, 1, BT_CHARACTER
))
3690 if (z
!= NULL
&& !type_check (z
, 2, BT_LOGICAL
))
3693 if (!kind_check (kind
, 3, BT_INTEGER
))
3695 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
3696 "with KIND argument at %L",
3697 gfc_current_intrinsic
, &kind
->where
))
3700 if (!same_type_check (x
, 0, y
, 1))
3708 gfc_check_secnds (gfc_expr
*r
)
3710 if (!type_check (r
, 0, BT_REAL
))
3713 if (!kind_value_check (r
, 0, 4))
3716 if (!scalar_check (r
, 0))
3724 gfc_check_selected_char_kind (gfc_expr
*name
)
3726 if (!type_check (name
, 0, BT_CHARACTER
))
3729 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
3732 if (!scalar_check (name
, 0))
3740 gfc_check_selected_int_kind (gfc_expr
*r
)
3742 if (!type_check (r
, 0, BT_INTEGER
))
3745 if (!scalar_check (r
, 0))
3753 gfc_check_selected_real_kind (gfc_expr
*p
, gfc_expr
*r
, gfc_expr
*radix
)
3755 if (p
== NULL
&& r
== NULL
3756 && !gfc_notify_std (GFC_STD_F2008
, "SELECTED_REAL_KIND with"
3757 " neither 'P' nor 'R' argument at %L",
3758 gfc_current_intrinsic_where
))
3763 if (!type_check (p
, 0, BT_INTEGER
))
3766 if (!scalar_check (p
, 0))
3772 if (!type_check (r
, 1, BT_INTEGER
))
3775 if (!scalar_check (r
, 1))
3781 if (!type_check (radix
, 1, BT_INTEGER
))
3784 if (!scalar_check (radix
, 1))
3787 if (!gfc_notify_std (GFC_STD_F2008
, "'%s' intrinsic with "
3788 "RADIX argument at %L", gfc_current_intrinsic
,
3798 gfc_check_set_exponent (gfc_expr
*x
, gfc_expr
*i
)
3800 if (!type_check (x
, 0, BT_REAL
))
3803 if (!type_check (i
, 1, BT_INTEGER
))
3811 gfc_check_shape (gfc_expr
*source
, gfc_expr
*kind
)
3815 if (source
->rank
== 0 || source
->expr_type
!= EXPR_VARIABLE
)
3818 ar
= gfc_find_array_ref (source
);
3820 if (ar
->as
&& ar
->as
->type
== AS_ASSUMED_SIZE
&& ar
->type
== AR_FULL
)
3822 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
3823 "an assumed size array", &source
->where
);
3827 if (!kind_check (kind
, 1, BT_INTEGER
))
3829 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
3830 "with KIND argument at %L",
3831 gfc_current_intrinsic
, &kind
->where
))
3839 gfc_check_shift (gfc_expr
*i
, gfc_expr
*shift
)
3841 if (!type_check (i
, 0, BT_INTEGER
))
3844 if (!type_check (shift
, 0, BT_INTEGER
))
3847 if (!nonnegative_check ("SHIFT", shift
))
3850 if (!less_than_bitsize1 ("I", i
, "SHIFT", shift
, true))
3858 gfc_check_sign (gfc_expr
*a
, gfc_expr
*b
)
3860 if (!int_or_real_check (a
, 0))
3863 if (!same_type_check (a
, 0, b
, 1))
3871 gfc_check_size (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
3873 if (!array_check (array
, 0))
3876 if (!dim_check (dim
, 1, true))
3879 if (!dim_rank_check (dim
, array
, 0))
3882 if (!kind_check (kind
, 2, BT_INTEGER
))
3884 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
3885 "with KIND argument at %L",
3886 gfc_current_intrinsic
, &kind
->where
))
3895 gfc_check_sizeof (gfc_expr
*arg
)
3897 if (arg
->ts
.type
== BT_PROCEDURE
)
3899 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be a procedure",
3900 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3905 if (arg
->ts
.type
== BT_ASSUMED
)
3907 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be TYPE(*)",
3908 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3913 if (arg
->rank
&& arg
->expr_type
== EXPR_VARIABLE
3914 && arg
->symtree
->n
.sym
->as
!= NULL
3915 && arg
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
&& arg
->ref
3916 && arg
->ref
->type
== REF_ARRAY
&& arg
->ref
->u
.ar
.type
== AR_FULL
)
3918 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be an "
3919 "assumed-size array", gfc_current_intrinsic_arg
[0]->name
,
3920 gfc_current_intrinsic
, &arg
->where
);
3928 /* Check whether an expression is interoperable. When returning false,
3929 msg is set to a string telling why the expression is not interoperable,
3930 otherwise, it is set to NULL. The msg string can be used in diagnostics.
3931 If c_loc is true, character with len > 1 are allowed (cf. Fortran
3932 2003corr5); additionally, assumed-shape/assumed-rank/deferred-shape
3933 arrays are permitted. And if c_f_ptr is true, deferred-shape arrays
3937 is_c_interoperable (gfc_expr
*expr
, const char **msg
, bool c_loc
, bool c_f_ptr
)
3941 if (expr
->ts
.type
== BT_CLASS
)
3943 *msg
= "Expression is polymorphic";
3947 if (expr
->ts
.type
== BT_DERIVED
&& !expr
->ts
.u
.derived
->attr
.is_bind_c
3948 && !expr
->ts
.u
.derived
->ts
.is_iso_c
)
3950 *msg
= "Expression is a noninteroperable derived type";
3954 if (expr
->ts
.type
== BT_PROCEDURE
)
3956 *msg
= "Procedure unexpected as argument";
3960 if (gfc_notification_std (GFC_STD_GNU
) && expr
->ts
.type
== BT_LOGICAL
)
3963 for (i
= 0; gfc_logical_kinds
[i
].kind
; i
++)
3964 if (gfc_logical_kinds
[i
].kind
== expr
->ts
.kind
)
3966 *msg
= "Extension to use a non-C_Bool-kind LOGICAL";
3970 if (gfc_notification_std (GFC_STD_GNU
) && expr
->ts
.type
== BT_CHARACTER
3971 && expr
->ts
.kind
!= 1)
3973 *msg
= "Extension to use a non-C_CHAR-kind CHARACTER";
3977 if (expr
->ts
.type
== BT_CHARACTER
) {
3978 if (expr
->ts
.deferred
)
3980 /* TS 29113 allows deferred-length strings as dummy arguments,
3981 but it is not an interoperable type. */
3982 *msg
= "Expression shall not be a deferred-length string";
3986 if (expr
->ts
.u
.cl
&& expr
->ts
.u
.cl
->length
3987 && !gfc_simplify_expr (expr
, 0))
3988 gfc_internal_error ("is_c_interoperable(): gfc_simplify_expr failed");
3990 if (!c_loc
&& expr
->ts
.u
.cl
3991 && (!expr
->ts
.u
.cl
->length
3992 || expr
->ts
.u
.cl
->length
->expr_type
!= EXPR_CONSTANT
3993 || mpz_cmp_si (expr
->ts
.u
.cl
->length
->value
.integer
, 1) != 0))
3995 *msg
= "Type shall have a character length of 1";
4000 /* Note: The following checks are about interoperatable variables, Fortran
4001 15.3.5/15.3.6. In intrinsics like C_LOC or in procedure interface, more
4002 is allowed, e.g. assumed-shape arrays with TS 29113. */
4004 if (gfc_is_coarray (expr
))
4006 *msg
= "Coarrays are not interoperable";
4010 if (!c_loc
&& expr
->rank
> 0 && expr
->expr_type
!= EXPR_ARRAY
)
4012 gfc_array_ref
*ar
= gfc_find_array_ref (expr
);
4013 if (ar
->type
!= AR_FULL
)
4015 *msg
= "Only whole-arrays are interoperable";
4018 if (!c_f_ptr
&& ar
->as
->type
!= AS_EXPLICIT
4019 && ar
->as
->type
!= AS_ASSUMED_SIZE
)
4021 *msg
= "Only explicit-size and assumed-size arrays are interoperable";
4031 gfc_check_c_sizeof (gfc_expr
*arg
)
4035 if (!is_c_interoperable (arg
, &msg
, false, false))
4037 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an "
4038 "interoperable data entity: %s",
4039 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4044 if (arg
->ts
.type
== BT_ASSUMED
)
4046 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
4048 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4053 if (arg
->rank
&& arg
->expr_type
== EXPR_VARIABLE
4054 && arg
->symtree
->n
.sym
->as
!= NULL
4055 && arg
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
&& arg
->ref
4056 && arg
->ref
->type
== REF_ARRAY
&& arg
->ref
->u
.ar
.type
== AR_FULL
)
4058 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be an "
4059 "assumed-size array", gfc_current_intrinsic_arg
[0]->name
,
4060 gfc_current_intrinsic
, &arg
->where
);
4069 gfc_check_c_associated (gfc_expr
*c_ptr_1
, gfc_expr
*c_ptr_2
)
4071 if (c_ptr_1
->ts
.type
!= BT_DERIVED
4072 || c_ptr_1
->ts
.u
.derived
->from_intmod
!= INTMOD_ISO_C_BINDING
4073 || (c_ptr_1
->ts
.u
.derived
->intmod_sym_id
!= ISOCBINDING_PTR
4074 && c_ptr_1
->ts
.u
.derived
->intmod_sym_id
!= ISOCBINDING_FUNPTR
))
4076 gfc_error ("Argument C_PTR_1 at %L to C_ASSOCIATED shall have the "
4077 "type TYPE(C_PTR) or TYPE(C_FUNPTR)", &c_ptr_1
->where
);
4081 if (!scalar_check (c_ptr_1
, 0))
4085 && (c_ptr_2
->ts
.type
!= BT_DERIVED
4086 || c_ptr_2
->ts
.u
.derived
->from_intmod
!= INTMOD_ISO_C_BINDING
4087 || (c_ptr_1
->ts
.u
.derived
->intmod_sym_id
4088 != c_ptr_2
->ts
.u
.derived
->intmod_sym_id
)))
4090 gfc_error ("Argument C_PTR_2 at %L to C_ASSOCIATED shall have the "
4091 "same type as C_PTR_1: %s instead of %s", &c_ptr_1
->where
,
4092 gfc_typename (&c_ptr_1
->ts
),
4093 gfc_typename (&c_ptr_2
->ts
));
4097 if (c_ptr_2
&& !scalar_check (c_ptr_2
, 1))
4105 gfc_check_c_f_pointer (gfc_expr
*cptr
, gfc_expr
*fptr
, gfc_expr
*shape
)
4107 symbol_attribute attr
;
4110 if (cptr
->ts
.type
!= BT_DERIVED
4111 || cptr
->ts
.u
.derived
->from_intmod
!= INTMOD_ISO_C_BINDING
4112 || cptr
->ts
.u
.derived
->intmod_sym_id
!= ISOCBINDING_PTR
)
4114 gfc_error ("Argument CPTR at %L to C_F_POINTER shall have the "
4115 "type TYPE(C_PTR)", &cptr
->where
);
4119 if (!scalar_check (cptr
, 0))
4122 attr
= gfc_expr_attr (fptr
);
4126 gfc_error ("Argument FPTR at %L to C_F_POINTER must be a pointer",
4131 if (fptr
->ts
.type
== BT_CLASS
)
4133 gfc_error ("FPTR argument at %L to C_F_POINTER shall not be polymorphic",
4138 if (gfc_is_coindexed (fptr
))
4140 gfc_error ("Argument FPTR at %L to C_F_POINTER shall not be "
4141 "coindexed", &fptr
->where
);
4145 if (fptr
->rank
== 0 && shape
)
4147 gfc_error ("Unexpected SHAPE argument at %L to C_F_POINTER with scalar "
4148 "FPTR", &fptr
->where
);
4151 else if (fptr
->rank
&& !shape
)
4153 gfc_error ("Expected SHAPE argument to C_F_POINTER with array "
4154 "FPTR at %L", &fptr
->where
);
4158 if (shape
&& !rank_check (shape
, 2, 1))
4161 if (shape
&& !type_check (shape
, 2, BT_INTEGER
))
4167 if (gfc_array_size (shape
, &size
))
4169 if (mpz_cmp_ui (size
, fptr
->rank
) != 0)
4172 gfc_error ("SHAPE argument at %L to C_F_POINTER must have the same "
4173 "size as the RANK of FPTR", &shape
->where
);
4180 if (fptr
->ts
.type
== BT_CLASS
)
4182 gfc_error ("Polymorphic FPTR at %L to C_F_POINTER", &fptr
->where
);
4186 if (!is_c_interoperable (fptr
, &msg
, false, true))
4187 return gfc_notify_std (GFC_STD_F2008_TS
, "Noninteroperable array FPTR "
4188 "at %L to C_F_POINTER: %s", &fptr
->where
, msg
);
4195 gfc_check_c_f_procpointer (gfc_expr
*cptr
, gfc_expr
*fptr
)
4197 symbol_attribute attr
;
4199 if (cptr
->ts
.type
!= BT_DERIVED
4200 || cptr
->ts
.u
.derived
->from_intmod
!= INTMOD_ISO_C_BINDING
4201 || cptr
->ts
.u
.derived
->intmod_sym_id
!= ISOCBINDING_FUNPTR
)
4203 gfc_error ("Argument CPTR at %L to C_F_PROCPOINTER shall have the "
4204 "type TYPE(C_FUNPTR)", &cptr
->where
);
4208 if (!scalar_check (cptr
, 0))
4211 attr
= gfc_expr_attr (fptr
);
4213 if (!attr
.proc_pointer
)
4215 gfc_error ("Argument FPTR at %L to C_F_PROCPOINTER shall be a procedure "
4216 "pointer", &fptr
->where
);
4220 if (gfc_is_coindexed (fptr
))
4222 gfc_error ("Argument FPTR at %L to C_F_PROCPOINTER shall not be "
4223 "coindexed", &fptr
->where
);
4227 if (!attr
.is_bind_c
)
4228 return gfc_notify_std (GFC_STD_F2008_TS
, "Noninteroperable procedure "
4229 "pointer at %L to C_F_PROCPOINTER", &fptr
->where
);
4236 gfc_check_c_funloc (gfc_expr
*x
)
4238 symbol_attribute attr
;
4240 if (gfc_is_coindexed (x
))
4242 gfc_error ("Argument X at %L to C_FUNLOC shall not be "
4243 "coindexed", &x
->where
);
4247 attr
= gfc_expr_attr (x
);
4249 if (attr
.function
&& !attr
.proc_pointer
&& x
->expr_type
== EXPR_VARIABLE
4250 && x
->symtree
->n
.sym
== x
->symtree
->n
.sym
->result
)
4252 gfc_namespace
*ns
= gfc_current_ns
;
4254 for (ns
= gfc_current_ns
; ns
; ns
= ns
->parent
)
4255 if (x
->symtree
->n
.sym
== ns
->proc_name
)
4257 gfc_error ("Function result '%s' at %L is invalid as X argument "
4258 "to C_FUNLOC", x
->symtree
->n
.sym
->name
, &x
->where
);
4263 if (attr
.flavor
!= FL_PROCEDURE
)
4265 gfc_error ("Argument X at %L to C_FUNLOC shall be a procedure "
4266 "or a procedure pointer", &x
->where
);
4270 if (!attr
.is_bind_c
)
4271 return gfc_notify_std (GFC_STD_F2008_TS
, "Noninteroperable procedure "
4272 "at %L to C_FUNLOC", &x
->where
);
4278 gfc_check_c_loc (gfc_expr
*x
)
4280 symbol_attribute attr
;
4283 if (gfc_is_coindexed (x
))
4285 gfc_error ("Argument X at %L to C_LOC shall not be coindexed", &x
->where
);
4289 if (x
->ts
.type
== BT_CLASS
)
4291 gfc_error ("X argument at %L to C_LOC shall not be polymorphic",
4296 attr
= gfc_expr_attr (x
);
4299 && (x
->expr_type
!= EXPR_VARIABLE
|| !attr
.target
4300 || attr
.flavor
== FL_PARAMETER
))
4302 gfc_error ("Argument X at %L to C_LOC shall have either "
4303 "the POINTER or the TARGET attribute", &x
->where
);
4307 if (x
->ts
.type
== BT_CHARACTER
4308 && gfc_var_strlen (x
) == 0)
4310 gfc_error ("Argument X at %L to C_LOC shall be not be a zero-sized "
4311 "string", &x
->where
);
4315 if (!is_c_interoperable (x
, &msg
, true, false))
4317 if (x
->ts
.type
== BT_CLASS
)
4319 gfc_error ("Argument at %L to C_LOC shall not be polymorphic",
4325 && !gfc_notify_std (GFC_STD_F2008_TS
,
4326 "Noninteroperable array at %L as"
4327 " argument to C_LOC: %s", &x
->where
, msg
))
4330 else if (x
->rank
> 0 && gfc_notification_std (GFC_STD_F2008
))
4332 gfc_array_ref
*ar
= gfc_find_array_ref (x
);
4334 if (ar
->as
->type
!= AS_EXPLICIT
&& ar
->as
->type
!= AS_ASSUMED_SIZE
4335 && !attr
.allocatable
4336 && !gfc_notify_std (GFC_STD_F2008
,
4337 "Array of interoperable type at %L "
4338 "to C_LOC which is nonallocatable and neither "
4339 "assumed size nor explicit size", &x
->where
))
4341 else if (ar
->type
!= AR_FULL
4342 && !gfc_notify_std (GFC_STD_F2008
, "Array section at %L "
4343 "to C_LOC", &x
->where
))
4352 gfc_check_sleep_sub (gfc_expr
*seconds
)
4354 if (!type_check (seconds
, 0, BT_INTEGER
))
4357 if (!scalar_check (seconds
, 0))
4364 gfc_check_sngl (gfc_expr
*a
)
4366 if (!type_check (a
, 0, BT_REAL
))
4369 if ((a
->ts
.kind
!= gfc_default_double_kind
)
4370 && !gfc_notify_std (GFC_STD_GNU
, "non double precision "
4371 "REAL argument to %s intrinsic at %L",
4372 gfc_current_intrinsic
, &a
->where
))
4379 gfc_check_spread (gfc_expr
*source
, gfc_expr
*dim
, gfc_expr
*ncopies
)
4381 if (source
->rank
>= GFC_MAX_DIMENSIONS
)
4383 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
4384 "than rank %d", gfc_current_intrinsic_arg
[0]->name
,
4385 gfc_current_intrinsic
, &source
->where
, GFC_MAX_DIMENSIONS
);
4393 if (!dim_check (dim
, 1, false))
4396 /* dim_rank_check() does not apply here. */
4398 && dim
->expr_type
== EXPR_CONSTANT
4399 && (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
4400 || mpz_cmp_ui (dim
->value
.integer
, source
->rank
+ 1) > 0))
4402 gfc_error ("'%s' argument of '%s' intrinsic at %L is not a valid "
4403 "dimension index", gfc_current_intrinsic_arg
[1]->name
,
4404 gfc_current_intrinsic
, &dim
->where
);
4408 if (!type_check (ncopies
, 2, BT_INTEGER
))
4411 if (!scalar_check (ncopies
, 2))
4418 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
4422 gfc_check_fgetputc_sub (gfc_expr
*unit
, gfc_expr
*c
, gfc_expr
*status
)
4424 if (!type_check (unit
, 0, BT_INTEGER
))
4427 if (!scalar_check (unit
, 0))
4430 if (!type_check (c
, 1, BT_CHARACTER
))
4432 if (!kind_value_check (c
, 1, gfc_default_character_kind
))
4438 if (!type_check (status
, 2, BT_INTEGER
)
4439 || !kind_value_check (status
, 2, gfc_default_integer_kind
)
4440 || !scalar_check (status
, 2))
4448 gfc_check_fgetputc (gfc_expr
*unit
, gfc_expr
*c
)
4450 return gfc_check_fgetputc_sub (unit
, c
, NULL
);
4455 gfc_check_fgetput_sub (gfc_expr
*c
, gfc_expr
*status
)
4457 if (!type_check (c
, 0, BT_CHARACTER
))
4459 if (!kind_value_check (c
, 0, gfc_default_character_kind
))
4465 if (!type_check (status
, 1, BT_INTEGER
)
4466 || !kind_value_check (status
, 1, gfc_default_integer_kind
)
4467 || !scalar_check (status
, 1))
4475 gfc_check_fgetput (gfc_expr
*c
)
4477 return gfc_check_fgetput_sub (c
, NULL
);
4482 gfc_check_fseek_sub (gfc_expr
*unit
, gfc_expr
*offset
, gfc_expr
*whence
, gfc_expr
*status
)
4484 if (!type_check (unit
, 0, BT_INTEGER
))
4487 if (!scalar_check (unit
, 0))
4490 if (!type_check (offset
, 1, BT_INTEGER
))
4493 if (!scalar_check (offset
, 1))
4496 if (!type_check (whence
, 2, BT_INTEGER
))
4499 if (!scalar_check (whence
, 2))
4505 if (!type_check (status
, 3, BT_INTEGER
))
4508 if (!kind_value_check (status
, 3, 4))
4511 if (!scalar_check (status
, 3))
4520 gfc_check_fstat (gfc_expr
*unit
, gfc_expr
*array
)
4522 if (!type_check (unit
, 0, BT_INTEGER
))
4525 if (!scalar_check (unit
, 0))
4528 if (!type_check (array
, 1, BT_INTEGER
)
4529 || !kind_value_check (unit
, 0, gfc_default_integer_kind
))
4532 if (!array_check (array
, 1))
4540 gfc_check_fstat_sub (gfc_expr
*unit
, gfc_expr
*array
, gfc_expr
*status
)
4542 if (!type_check (unit
, 0, BT_INTEGER
))
4545 if (!scalar_check (unit
, 0))
4548 if (!type_check (array
, 1, BT_INTEGER
)
4549 || !kind_value_check (array
, 1, gfc_default_integer_kind
))
4552 if (!array_check (array
, 1))
4558 if (!type_check (status
, 2, BT_INTEGER
)
4559 || !kind_value_check (status
, 2, gfc_default_integer_kind
))
4562 if (!scalar_check (status
, 2))
4570 gfc_check_ftell (gfc_expr
*unit
)
4572 if (!type_check (unit
, 0, BT_INTEGER
))
4575 if (!scalar_check (unit
, 0))
4583 gfc_check_ftell_sub (gfc_expr
*unit
, gfc_expr
*offset
)
4585 if (!type_check (unit
, 0, BT_INTEGER
))
4588 if (!scalar_check (unit
, 0))
4591 if (!type_check (offset
, 1, BT_INTEGER
))
4594 if (!scalar_check (offset
, 1))
4602 gfc_check_stat (gfc_expr
*name
, gfc_expr
*array
)
4604 if (!type_check (name
, 0, BT_CHARACTER
))
4606 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
4609 if (!type_check (array
, 1, BT_INTEGER
)
4610 || !kind_value_check (array
, 1, gfc_default_integer_kind
))
4613 if (!array_check (array
, 1))
4621 gfc_check_stat_sub (gfc_expr
*name
, gfc_expr
*array
, gfc_expr
*status
)
4623 if (!type_check (name
, 0, BT_CHARACTER
))
4625 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
4628 if (!type_check (array
, 1, BT_INTEGER
)
4629 || !kind_value_check (array
, 1, gfc_default_integer_kind
))
4632 if (!array_check (array
, 1))
4638 if (!type_check (status
, 2, BT_INTEGER
)
4639 || !kind_value_check (array
, 1, gfc_default_integer_kind
))
4642 if (!scalar_check (status
, 2))
4650 gfc_check_image_index (gfc_expr
*coarray
, gfc_expr
*sub
)
4654 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
4656 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4660 if (!coarray_check (coarray
, 0))
4665 gfc_error ("%s argument to IMAGE_INDEX must be a rank one array at %L",
4666 gfc_current_intrinsic_arg
[1]->name
, &sub
->where
);
4670 if (gfc_array_size (sub
, &nelems
))
4672 int corank
= gfc_get_corank (coarray
);
4674 if (mpz_cmp_ui (nelems
, corank
) != 0)
4676 gfc_error ("The number of array elements of the SUB argument to "
4677 "IMAGE_INDEX at %L shall be %d (corank) not %d",
4678 &sub
->where
, corank
, (int) mpz_get_si (nelems
));
4690 gfc_check_num_images (gfc_expr
*distance
, gfc_expr
*failed
)
4692 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
4694 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4700 if (!type_check (distance
, 0, BT_INTEGER
))
4703 if (!nonnegative_check ("DISTANCE", distance
))
4706 if (!scalar_check (distance
, 0))
4709 if (!gfc_notify_std (GFC_STD_F2008_TS
, "DISTANCE= argument to "
4710 "NUM_IMAGES at %L", &distance
->where
))
4716 if (!type_check (failed
, 1, BT_LOGICAL
))
4719 if (!scalar_check (failed
, 1))
4722 if (!gfc_notify_std (GFC_STD_F2008_TS
, "FAILED= argument to "
4723 "NUM_IMAGES at %L", &distance
->where
))
4732 gfc_check_this_image (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*distance
)
4734 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
4736 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4740 if (coarray
== NULL
&& dim
== NULL
&& distance
== NULL
)
4743 if (dim
!= NULL
&& coarray
== NULL
)
4745 gfc_error ("DIM argument without COARRAY argument not allowed for "
4746 "THIS_IMAGE intrinsic at %L", &dim
->where
);
4750 if (distance
&& (coarray
|| dim
))
4752 gfc_error ("The DISTANCE argument may not be specified together with the "
4753 "COARRAY or DIM argument in intrinsic at %L",
4758 /* Assume that we have "this_image (distance)". */
4759 if (coarray
&& !gfc_is_coarray (coarray
) && coarray
->ts
.type
== BT_INTEGER
)
4763 gfc_error ("Unexpected DIM argument with noncoarray argument at %L",
4772 if (!type_check (distance
, 2, BT_INTEGER
))
4775 if (!nonnegative_check ("DISTANCE", distance
))
4778 if (!scalar_check (distance
, 2))
4781 if (!gfc_notify_std (GFC_STD_F2008_TS
, "DISTANCE= argument to "
4782 "THIS_IMAGE at %L", &distance
->where
))
4788 if (!coarray_check (coarray
, 0))
4793 if (!dim_check (dim
, 1, false))
4796 if (!dim_corank_check (dim
, coarray
))
4803 /* Calculate the sizes for transfer, used by gfc_check_transfer and also
4804 by gfc_simplify_transfer. Return false if we cannot do so. */
4807 gfc_calculate_transfer_sizes (gfc_expr
*source
, gfc_expr
*mold
, gfc_expr
*size
,
4808 size_t *source_size
, size_t *result_size
,
4809 size_t *result_length_p
)
4811 size_t result_elt_size
;
4813 if (source
->expr_type
== EXPR_FUNCTION
)
4816 if (size
&& size
->expr_type
!= EXPR_CONSTANT
)
4819 /* Calculate the size of the source. */
4820 *source_size
= gfc_target_expr_size (source
);
4821 if (*source_size
== 0)
4824 /* Determine the size of the element. */
4825 result_elt_size
= gfc_element_size (mold
);
4826 if (result_elt_size
== 0)
4829 if (mold
->expr_type
== EXPR_ARRAY
|| mold
->rank
|| size
)
4834 result_length
= (size_t)mpz_get_ui (size
->value
.integer
);
4837 result_length
= *source_size
/ result_elt_size
;
4838 if (result_length
* result_elt_size
< *source_size
)
4842 *result_size
= result_length
* result_elt_size
;
4843 if (result_length_p
)
4844 *result_length_p
= result_length
;
4847 *result_size
= result_elt_size
;
4854 gfc_check_transfer (gfc_expr
*source
, gfc_expr
*mold
, gfc_expr
*size
)
4859 if (mold
->ts
.type
== BT_HOLLERITH
)
4861 gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
4862 &mold
->where
, gfc_basic_typename (BT_HOLLERITH
));
4868 if (!type_check (size
, 2, BT_INTEGER
))
4871 if (!scalar_check (size
, 2))
4874 if (!nonoptional_check (size
, 2))
4878 if (!gfc_option
.warn_surprising
)
4881 /* If we can't calculate the sizes, we cannot check any more.
4882 Return true for that case. */
4884 if (!gfc_calculate_transfer_sizes (source
, mold
, size
, &source_size
,
4885 &result_size
, NULL
))
4888 if (source_size
< result_size
)
4889 gfc_warning("Intrinsic TRANSFER at %L has partly undefined result: "
4890 "source size %ld < result size %ld", &source
->where
,
4891 (long) source_size
, (long) result_size
);
4898 gfc_check_transpose (gfc_expr
*matrix
)
4900 if (!rank_check (matrix
, 0, 2))
4908 gfc_check_ubound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
4910 if (!array_check (array
, 0))
4913 if (!dim_check (dim
, 1, false))
4916 if (!dim_rank_check (dim
, array
, 0))
4919 if (!kind_check (kind
, 2, BT_INTEGER
))
4921 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
4922 "with KIND argument at %L",
4923 gfc_current_intrinsic
, &kind
->where
))
4931 gfc_check_ucobound (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*kind
)
4933 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
4935 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4939 if (!coarray_check (coarray
, 0))
4944 if (!dim_check (dim
, 1, false))
4947 if (!dim_corank_check (dim
, coarray
))
4951 if (!kind_check (kind
, 2, BT_INTEGER
))
4959 gfc_check_unpack (gfc_expr
*vector
, gfc_expr
*mask
, gfc_expr
*field
)
4963 if (!rank_check (vector
, 0, 1))
4966 if (!array_check (mask
, 1))
4969 if (!type_check (mask
, 1, BT_LOGICAL
))
4972 if (!same_type_check (vector
, 0, field
, 2))
4975 if (mask
->expr_type
== EXPR_ARRAY
4976 && gfc_array_size (vector
, &vector_size
))
4978 int mask_true_count
= 0;
4979 gfc_constructor
*mask_ctor
;
4980 mask_ctor
= gfc_constructor_first (mask
->value
.constructor
);
4983 if (mask_ctor
->expr
->expr_type
!= EXPR_CONSTANT
)
4985 mask_true_count
= 0;
4989 if (mask_ctor
->expr
->value
.logical
)
4992 mask_ctor
= gfc_constructor_next (mask_ctor
);
4995 if (mpz_get_si (vector_size
) < mask_true_count
)
4997 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
4998 "provide at least as many elements as there "
4999 "are .TRUE. values in '%s' (%ld/%d)",
5000 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
5001 &vector
->where
, gfc_current_intrinsic_arg
[1]->name
,
5002 mpz_get_si (vector_size
), mask_true_count
);
5006 mpz_clear (vector_size
);
5009 if (mask
->rank
!= field
->rank
&& field
->rank
!= 0)
5011 gfc_error ("'%s' argument of '%s' intrinsic at %L must have "
5012 "the same rank as '%s' or be a scalar",
5013 gfc_current_intrinsic_arg
[2]->name
, gfc_current_intrinsic
,
5014 &field
->where
, gfc_current_intrinsic_arg
[1]->name
);
5018 if (mask
->rank
== field
->rank
)
5021 for (i
= 0; i
< field
->rank
; i
++)
5022 if (! identical_dimen_shape (mask
, i
, field
, i
))
5024 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L "
5025 "must have identical shape.",
5026 gfc_current_intrinsic_arg
[2]->name
,
5027 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
5037 gfc_check_verify (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
5039 if (!type_check (x
, 0, BT_CHARACTER
))
5042 if (!same_type_check (x
, 0, y
, 1))
5045 if (z
!= NULL
&& !type_check (z
, 2, BT_LOGICAL
))
5048 if (!kind_check (kind
, 3, BT_INTEGER
))
5050 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
5051 "with KIND argument at %L",
5052 gfc_current_intrinsic
, &kind
->where
))
5060 gfc_check_trim (gfc_expr
*x
)
5062 if (!type_check (x
, 0, BT_CHARACTER
))
5065 if (!scalar_check (x
, 0))
5073 gfc_check_ttynam (gfc_expr
*unit
)
5075 if (!scalar_check (unit
, 0))
5078 if (!type_check (unit
, 0, BT_INTEGER
))
5085 /* Common check function for the half a dozen intrinsics that have a
5086 single real argument. */
5089 gfc_check_x (gfc_expr
*x
)
5091 if (!type_check (x
, 0, BT_REAL
))
5098 /************* Check functions for intrinsic subroutines *************/
5101 gfc_check_cpu_time (gfc_expr
*time
)
5103 if (!scalar_check (time
, 0))
5106 if (!type_check (time
, 0, BT_REAL
))
5109 if (!variable_check (time
, 0, false))
5117 gfc_check_date_and_time (gfc_expr
*date
, gfc_expr
*time
,
5118 gfc_expr
*zone
, gfc_expr
*values
)
5122 if (!type_check (date
, 0, BT_CHARACTER
))
5124 if (!kind_value_check (date
, 0, gfc_default_character_kind
))
5126 if (!scalar_check (date
, 0))
5128 if (!variable_check (date
, 0, false))
5134 if (!type_check (time
, 1, BT_CHARACTER
))
5136 if (!kind_value_check (time
, 1, gfc_default_character_kind
))
5138 if (!scalar_check (time
, 1))
5140 if (!variable_check (time
, 1, false))
5146 if (!type_check (zone
, 2, BT_CHARACTER
))
5148 if (!kind_value_check (zone
, 2, gfc_default_character_kind
))
5150 if (!scalar_check (zone
, 2))
5152 if (!variable_check (zone
, 2, false))
5158 if (!type_check (values
, 3, BT_INTEGER
))
5160 if (!array_check (values
, 3))
5162 if (!rank_check (values
, 3, 1))
5164 if (!variable_check (values
, 3, false))
5173 gfc_check_mvbits (gfc_expr
*from
, gfc_expr
*frompos
, gfc_expr
*len
,
5174 gfc_expr
*to
, gfc_expr
*topos
)
5176 if (!type_check (from
, 0, BT_INTEGER
))
5179 if (!type_check (frompos
, 1, BT_INTEGER
))
5182 if (!type_check (len
, 2, BT_INTEGER
))
5185 if (!same_type_check (from
, 0, to
, 3))
5188 if (!variable_check (to
, 3, false))
5191 if (!type_check (topos
, 4, BT_INTEGER
))
5194 if (!nonnegative_check ("frompos", frompos
))
5197 if (!nonnegative_check ("topos", topos
))
5200 if (!nonnegative_check ("len", len
))
5203 if (!less_than_bitsize2 ("from", from
, "frompos", frompos
, "len", len
))
5206 if (!less_than_bitsize2 ("to", to
, "topos", topos
, "len", len
))
5214 gfc_check_random_number (gfc_expr
*harvest
)
5216 if (!type_check (harvest
, 0, BT_REAL
))
5219 if (!variable_check (harvest
, 0, false))
5227 gfc_check_random_seed (gfc_expr
*size
, gfc_expr
*put
, gfc_expr
*get
)
5229 unsigned int nargs
= 0, kiss_size
;
5230 locus
*where
= NULL
;
5231 mpz_t put_size
, get_size
;
5232 bool have_gfc_real_16
; /* Try and mimic HAVE_GFC_REAL_16 in libgfortran. */
5234 have_gfc_real_16
= gfc_validate_kind (BT_REAL
, 16, true) != -1;
5236 /* Keep the number of bytes in sync with kiss_size in
5237 libgfortran/intrinsics/random.c. */
5238 kiss_size
= (have_gfc_real_16
? 48 : 32) / gfc_default_integer_kind
;
5242 if (size
->expr_type
!= EXPR_VARIABLE
5243 || !size
->symtree
->n
.sym
->attr
.optional
)
5246 if (!scalar_check (size
, 0))
5249 if (!type_check (size
, 0, BT_INTEGER
))
5252 if (!variable_check (size
, 0, false))
5255 if (!kind_value_check (size
, 0, gfc_default_integer_kind
))
5261 if (put
->expr_type
!= EXPR_VARIABLE
5262 || !put
->symtree
->n
.sym
->attr
.optional
)
5265 where
= &put
->where
;
5268 if (!array_check (put
, 1))
5271 if (!rank_check (put
, 1, 1))
5274 if (!type_check (put
, 1, BT_INTEGER
))
5277 if (!kind_value_check (put
, 1, gfc_default_integer_kind
))
5280 if (gfc_array_size (put
, &put_size
)
5281 && mpz_get_ui (put_size
) < kiss_size
)
5282 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
5283 "too small (%i/%i)",
5284 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
5285 where
, (int) mpz_get_ui (put_size
), kiss_size
);
5290 if (get
->expr_type
!= EXPR_VARIABLE
5291 || !get
->symtree
->n
.sym
->attr
.optional
)
5294 where
= &get
->where
;
5297 if (!array_check (get
, 2))
5300 if (!rank_check (get
, 2, 1))
5303 if (!type_check (get
, 2, BT_INTEGER
))
5306 if (!variable_check (get
, 2, false))
5309 if (!kind_value_check (get
, 2, gfc_default_integer_kind
))
5312 if (gfc_array_size (get
, &get_size
)
5313 && mpz_get_ui (get_size
) < kiss_size
)
5314 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
5315 "too small (%i/%i)",
5316 gfc_current_intrinsic_arg
[2]->name
, gfc_current_intrinsic
,
5317 where
, (int) mpz_get_ui (get_size
), kiss_size
);
5320 /* RANDOM_SEED may not have more than one non-optional argument. */
5322 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
, where
);
5329 gfc_check_second_sub (gfc_expr
*time
)
5331 if (!scalar_check (time
, 0))
5334 if (!type_check (time
, 0, BT_REAL
))
5337 if (!kind_value_check (time
, 0, 4))
5344 /* COUNT and COUNT_MAX of SYSTEM_CLOCK are scalar, default-kind integer
5345 variables in Fortran 95. In Fortran 2003 and later, they can be of any
5346 kind, and COUNT_RATE can be of type real. Note, count, count_rate, and
5347 count_max are all optional arguments */
5350 gfc_check_system_clock (gfc_expr
*count
, gfc_expr
*count_rate
,
5351 gfc_expr
*count_max
)
5355 if (!scalar_check (count
, 0))
5358 if (!type_check (count
, 0, BT_INTEGER
))
5361 if (count
->ts
.kind
!= gfc_default_integer_kind
5362 && !gfc_notify_std (GFC_STD_F2003
, "COUNT argument to "
5363 "SYSTEM_CLOCK at %L has non-default kind",
5367 if (!variable_check (count
, 0, false))
5371 if (count_rate
!= NULL
)
5373 if (!scalar_check (count_rate
, 1))
5376 if (!variable_check (count_rate
, 1, false))
5379 if (count_rate
->ts
.type
== BT_REAL
)
5381 if (!gfc_notify_std (GFC_STD_F2003
, "Real COUNT_RATE argument to "
5382 "SYSTEM_CLOCK at %L", &count_rate
->where
))
5387 if (!type_check (count_rate
, 1, BT_INTEGER
))
5390 if (count_rate
->ts
.kind
!= gfc_default_integer_kind
5391 && !gfc_notify_std (GFC_STD_F2003
, "COUNT_RATE argument to "
5392 "SYSTEM_CLOCK at %L has non-default kind",
5393 &count_rate
->where
))
5399 if (count_max
!= NULL
)
5401 if (!scalar_check (count_max
, 2))
5404 if (!type_check (count_max
, 2, BT_INTEGER
))
5407 if (count_max
->ts
.kind
!= gfc_default_integer_kind
5408 && !gfc_notify_std (GFC_STD_F2003
, "COUNT_MAX argument to "
5409 "SYSTEM_CLOCK at %L has non-default kind",
5413 if (!variable_check (count_max
, 2, false))
5422 gfc_check_irand (gfc_expr
*x
)
5427 if (!scalar_check (x
, 0))
5430 if (!type_check (x
, 0, BT_INTEGER
))
5433 if (!kind_value_check (x
, 0, 4))
5441 gfc_check_alarm_sub (gfc_expr
*seconds
, gfc_expr
*handler
, gfc_expr
*status
)
5443 if (!scalar_check (seconds
, 0))
5445 if (!type_check (seconds
, 0, BT_INTEGER
))
5448 if (!int_or_proc_check (handler
, 1))
5450 if (handler
->ts
.type
== BT_INTEGER
&& !scalar_check (handler
, 1))
5456 if (!scalar_check (status
, 2))
5458 if (!type_check (status
, 2, BT_INTEGER
))
5460 if (!kind_value_check (status
, 2, gfc_default_integer_kind
))
5468 gfc_check_rand (gfc_expr
*x
)
5473 if (!scalar_check (x
, 0))
5476 if (!type_check (x
, 0, BT_INTEGER
))
5479 if (!kind_value_check (x
, 0, 4))
5487 gfc_check_srand (gfc_expr
*x
)
5489 if (!scalar_check (x
, 0))
5492 if (!type_check (x
, 0, BT_INTEGER
))
5495 if (!kind_value_check (x
, 0, 4))
5503 gfc_check_ctime_sub (gfc_expr
*time
, gfc_expr
*result
)
5505 if (!scalar_check (time
, 0))
5507 if (!type_check (time
, 0, BT_INTEGER
))
5510 if (!type_check (result
, 1, BT_CHARACTER
))
5512 if (!kind_value_check (result
, 1, gfc_default_character_kind
))
5520 gfc_check_dtime_etime (gfc_expr
*x
)
5522 if (!array_check (x
, 0))
5525 if (!rank_check (x
, 0, 1))
5528 if (!variable_check (x
, 0, false))
5531 if (!type_check (x
, 0, BT_REAL
))
5534 if (!kind_value_check (x
, 0, 4))
5542 gfc_check_dtime_etime_sub (gfc_expr
*values
, gfc_expr
*time
)
5544 if (!array_check (values
, 0))
5547 if (!rank_check (values
, 0, 1))
5550 if (!variable_check (values
, 0, false))
5553 if (!type_check (values
, 0, BT_REAL
))
5556 if (!kind_value_check (values
, 0, 4))
5559 if (!scalar_check (time
, 1))
5562 if (!type_check (time
, 1, BT_REAL
))
5565 if (!kind_value_check (time
, 1, 4))
5573 gfc_check_fdate_sub (gfc_expr
*date
)
5575 if (!type_check (date
, 0, BT_CHARACTER
))
5577 if (!kind_value_check (date
, 0, gfc_default_character_kind
))
5585 gfc_check_gerror (gfc_expr
*msg
)
5587 if (!type_check (msg
, 0, BT_CHARACTER
))
5589 if (!kind_value_check (msg
, 0, gfc_default_character_kind
))
5597 gfc_check_getcwd_sub (gfc_expr
*cwd
, gfc_expr
*status
)
5599 if (!type_check (cwd
, 0, BT_CHARACTER
))
5601 if (!kind_value_check (cwd
, 0, gfc_default_character_kind
))
5607 if (!scalar_check (status
, 1))
5610 if (!type_check (status
, 1, BT_INTEGER
))
5618 gfc_check_getarg (gfc_expr
*pos
, gfc_expr
*value
)
5620 if (!type_check (pos
, 0, BT_INTEGER
))
5623 if (pos
->ts
.kind
> gfc_default_integer_kind
)
5625 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
5626 "not wider than the default kind (%d)",
5627 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
5628 &pos
->where
, gfc_default_integer_kind
);
5632 if (!type_check (value
, 1, BT_CHARACTER
))
5634 if (!kind_value_check (value
, 1, gfc_default_character_kind
))
5642 gfc_check_getlog (gfc_expr
*msg
)
5644 if (!type_check (msg
, 0, BT_CHARACTER
))
5646 if (!kind_value_check (msg
, 0, gfc_default_character_kind
))
5654 gfc_check_exit (gfc_expr
*status
)
5659 if (!type_check (status
, 0, BT_INTEGER
))
5662 if (!scalar_check (status
, 0))
5670 gfc_check_flush (gfc_expr
*unit
)
5675 if (!type_check (unit
, 0, BT_INTEGER
))
5678 if (!scalar_check (unit
, 0))
5686 gfc_check_free (gfc_expr
*i
)
5688 if (!type_check (i
, 0, BT_INTEGER
))
5691 if (!scalar_check (i
, 0))
5699 gfc_check_hostnm (gfc_expr
*name
)
5701 if (!type_check (name
, 0, BT_CHARACTER
))
5703 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
5711 gfc_check_hostnm_sub (gfc_expr
*name
, gfc_expr
*status
)
5713 if (!type_check (name
, 0, BT_CHARACTER
))
5715 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
5721 if (!scalar_check (status
, 1))
5724 if (!type_check (status
, 1, BT_INTEGER
))
5732 gfc_check_itime_idate (gfc_expr
*values
)
5734 if (!array_check (values
, 0))
5737 if (!rank_check (values
, 0, 1))
5740 if (!variable_check (values
, 0, false))
5743 if (!type_check (values
, 0, BT_INTEGER
))
5746 if (!kind_value_check (values
, 0, gfc_default_integer_kind
))
5754 gfc_check_ltime_gmtime (gfc_expr
*time
, gfc_expr
*values
)
5756 if (!type_check (time
, 0, BT_INTEGER
))
5759 if (!kind_value_check (time
, 0, gfc_default_integer_kind
))
5762 if (!scalar_check (time
, 0))
5765 if (!array_check (values
, 1))
5768 if (!rank_check (values
, 1, 1))
5771 if (!variable_check (values
, 1, false))
5774 if (!type_check (values
, 1, BT_INTEGER
))
5777 if (!kind_value_check (values
, 1, gfc_default_integer_kind
))
5785 gfc_check_ttynam_sub (gfc_expr
*unit
, gfc_expr
*name
)
5787 if (!scalar_check (unit
, 0))
5790 if (!type_check (unit
, 0, BT_INTEGER
))
5793 if (!type_check (name
, 1, BT_CHARACTER
))
5795 if (!kind_value_check (name
, 1, gfc_default_character_kind
))
5803 gfc_check_isatty (gfc_expr
*unit
)
5808 if (!type_check (unit
, 0, BT_INTEGER
))
5811 if (!scalar_check (unit
, 0))
5819 gfc_check_isnan (gfc_expr
*x
)
5821 if (!type_check (x
, 0, BT_REAL
))
5829 gfc_check_perror (gfc_expr
*string
)
5831 if (!type_check (string
, 0, BT_CHARACTER
))
5833 if (!kind_value_check (string
, 0, gfc_default_character_kind
))
5841 gfc_check_umask (gfc_expr
*mask
)
5843 if (!type_check (mask
, 0, BT_INTEGER
))
5846 if (!scalar_check (mask
, 0))
5854 gfc_check_umask_sub (gfc_expr
*mask
, gfc_expr
*old
)
5856 if (!type_check (mask
, 0, BT_INTEGER
))
5859 if (!scalar_check (mask
, 0))
5865 if (!scalar_check (old
, 1))
5868 if (!type_check (old
, 1, BT_INTEGER
))
5876 gfc_check_unlink (gfc_expr
*name
)
5878 if (!type_check (name
, 0, BT_CHARACTER
))
5880 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
5888 gfc_check_unlink_sub (gfc_expr
*name
, gfc_expr
*status
)
5890 if (!type_check (name
, 0, BT_CHARACTER
))
5892 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
5898 if (!scalar_check (status
, 1))
5901 if (!type_check (status
, 1, BT_INTEGER
))
5909 gfc_check_signal (gfc_expr
*number
, gfc_expr
*handler
)
5911 if (!scalar_check (number
, 0))
5913 if (!type_check (number
, 0, BT_INTEGER
))
5916 if (!int_or_proc_check (handler
, 1))
5918 if (handler
->ts
.type
== BT_INTEGER
&& !scalar_check (handler
, 1))
5926 gfc_check_signal_sub (gfc_expr
*number
, gfc_expr
*handler
, gfc_expr
*status
)
5928 if (!scalar_check (number
, 0))
5930 if (!type_check (number
, 0, BT_INTEGER
))
5933 if (!int_or_proc_check (handler
, 1))
5935 if (handler
->ts
.type
== BT_INTEGER
&& !scalar_check (handler
, 1))
5941 if (!type_check (status
, 2, BT_INTEGER
))
5943 if (!scalar_check (status
, 2))
5951 gfc_check_system_sub (gfc_expr
*cmd
, gfc_expr
*status
)
5953 if (!type_check (cmd
, 0, BT_CHARACTER
))
5955 if (!kind_value_check (cmd
, 0, gfc_default_character_kind
))
5958 if (!scalar_check (status
, 1))
5961 if (!type_check (status
, 1, BT_INTEGER
))
5964 if (!kind_value_check (status
, 1, gfc_default_integer_kind
))
5971 /* This is used for the GNU intrinsics AND, OR and XOR. */
5973 gfc_check_and (gfc_expr
*i
, gfc_expr
*j
)
5975 if (i
->ts
.type
!= BT_INTEGER
&& i
->ts
.type
!= BT_LOGICAL
)
5977 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
5978 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
5979 gfc_current_intrinsic
, &i
->where
);
5983 if (j
->ts
.type
!= BT_INTEGER
&& j
->ts
.type
!= BT_LOGICAL
)
5985 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
5986 "or LOGICAL", gfc_current_intrinsic_arg
[1]->name
,
5987 gfc_current_intrinsic
, &j
->where
);
5991 if (i
->ts
.type
!= j
->ts
.type
)
5993 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
5994 "have the same type", gfc_current_intrinsic_arg
[0]->name
,
5995 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
6000 if (!scalar_check (i
, 0))
6003 if (!scalar_check (j
, 1))
6011 gfc_check_storage_size (gfc_expr
*a
, gfc_expr
*kind
)
6013 if (a
->ts
.type
== BT_ASSUMED
)
6015 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be TYPE(*)",
6016 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
6021 if (a
->ts
.type
== BT_PROCEDURE
)
6023 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be a "
6024 "procedure", gfc_current_intrinsic_arg
[0]->name
,
6025 gfc_current_intrinsic
, &a
->where
);
6032 if (!type_check (kind
, 1, BT_INTEGER
))
6035 if (!scalar_check (kind
, 1))
6038 if (kind
->expr_type
!= EXPR_CONSTANT
)
6040 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
6041 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,