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_collective (gfc_expr
*a
, gfc_expr
*image_idx
, gfc_expr
*stat
,
1418 gfc_expr
*errmsg
, bool co_reduce
)
1420 if (!variable_check (a
, 0, false))
1423 if (!gfc_check_vardef_context (a
, false, false, false, "argument 'A' with "
1427 /* Fortran 2008, 12.5.2.4, paragraph 18. */
1428 if (gfc_has_vector_subscript (a
))
1430 gfc_error ("Argument 'A' with INTENT(INOUT) at %L of the intrinsic "
1431 "subroutine %s shall not have a vector subscript",
1432 &a
->where
, gfc_current_intrinsic
);
1436 if (image_idx
!= NULL
)
1438 if (!type_check (image_idx
, co_reduce
? 2 : 1, BT_INTEGER
))
1440 if (!scalar_check (image_idx
, co_reduce
? 2 : 1))
1446 if (!type_check (stat
, co_reduce
? 3 : 2, BT_INTEGER
))
1448 if (!scalar_check (stat
, co_reduce
? 3 : 2))
1450 if (!variable_check (stat
, co_reduce
? 3 : 2, false))
1452 if (stat
->ts
.kind
!= 4)
1454 gfc_error ("The stat= argument at %L must be a kind=4 integer "
1455 "variable", &stat
->where
);
1462 if (!type_check (errmsg
, co_reduce
? 4 : 3, BT_CHARACTER
))
1464 if (!scalar_check (errmsg
, co_reduce
? 4 : 3))
1466 if (!variable_check (errmsg
, co_reduce
? 4 : 3, false))
1468 if (errmsg
->ts
.kind
!= 1)
1470 gfc_error ("The errmsg= argument at %L must be a default-kind "
1471 "character variable", &errmsg
->where
);
1476 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
1478 gfc_fatal_error ("Coarrays disabled at %L, use -fcoarray= to enable",
1488 gfc_check_co_broadcast (gfc_expr
*a
, gfc_expr
*source_image
, gfc_expr
*stat
,
1491 if (a
->ts
.type
== BT_CLASS
|| gfc_expr_attr (a
).alloc_comp
)
1493 gfc_error ("Support for the A argument at %L which is polymorphic A "
1494 "argument or has allocatable components is not yet "
1495 "implemented", &a
->where
);
1498 return check_co_collective (a
, source_image
, stat
, errmsg
, false);
1503 gfc_check_co_reduce (gfc_expr
*a
, gfc_expr
*op
, gfc_expr
*result_image
,
1504 gfc_expr
*stat
, gfc_expr
*errmsg
)
1506 symbol_attribute attr
;
1508 if (a
->ts
.type
== BT_CLASS
)
1510 gfc_error ("The A argument at %L of CO_REDUCE shall not be polymorphic",
1515 if (gfc_expr_attr (a
).alloc_comp
)
1517 gfc_error ("Support for the A argument at %L with allocatable components"
1518 " is not yet implemented", &a
->where
);
1522 attr
= gfc_expr_attr (op
);
1523 if (!attr
.pure
|| !attr
.function
)
1525 gfc_error ("OPERATOR argument at %L must be a PURE function",
1530 if (!check_co_collective (a
, result_image
, stat
, errmsg
, true))
1533 /* FIXME: After J3/WG5 has decided what they actually exactly want, more
1534 checks such as same-argument checks have to be added, implemented and
1535 intrinsic.texi upated. */
1537 gfc_error("CO_REDUCE at %L is not yet implemented", &a
->where
);
1543 gfc_check_co_minmax (gfc_expr
*a
, gfc_expr
*result_image
, gfc_expr
*stat
,
1546 if (a
->ts
.type
!= BT_INTEGER
&& a
->ts
.type
!= BT_REAL
1547 && a
->ts
.type
!= BT_CHARACTER
)
1549 gfc_error ("'%s' argument of '%s' intrinsic at %L shall be of type "
1550 "integer, real or character",
1551 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
1555 return check_co_collective (a
, result_image
, stat
, errmsg
, false);
1560 gfc_check_co_sum (gfc_expr
*a
, gfc_expr
*result_image
, gfc_expr
*stat
,
1563 if (!numeric_check (a
, 0))
1565 return check_co_collective (a
, result_image
, stat
, errmsg
, false);
1570 gfc_check_complex (gfc_expr
*x
, gfc_expr
*y
)
1572 if (!int_or_real_check (x
, 0))
1574 if (!scalar_check (x
, 0))
1577 if (!int_or_real_check (y
, 1))
1579 if (!scalar_check (y
, 1))
1587 gfc_check_count (gfc_expr
*mask
, gfc_expr
*dim
, gfc_expr
*kind
)
1589 if (!logical_array_check (mask
, 0))
1591 if (!dim_check (dim
, 1, false))
1593 if (!dim_rank_check (dim
, mask
, 0))
1595 if (!kind_check (kind
, 2, BT_INTEGER
))
1597 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
1598 "with KIND argument at %L",
1599 gfc_current_intrinsic
, &kind
->where
))
1607 gfc_check_cshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*dim
)
1609 if (!array_check (array
, 0))
1612 if (!type_check (shift
, 1, BT_INTEGER
))
1615 if (!dim_check (dim
, 2, true))
1618 if (!dim_rank_check (dim
, array
, false))
1621 if (array
->rank
== 1 || shift
->rank
== 0)
1623 if (!scalar_check (shift
, 1))
1626 else if (shift
->rank
== array
->rank
- 1)
1631 else if (dim
->expr_type
== EXPR_CONSTANT
)
1632 gfc_extract_int (dim
, &d
);
1639 for (i
= 0, j
= 0; i
< array
->rank
; i
++)
1642 if (!identical_dimen_shape (array
, i
, shift
, j
))
1644 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1645 "invalid shape in dimension %d (%ld/%ld)",
1646 gfc_current_intrinsic_arg
[1]->name
,
1647 gfc_current_intrinsic
, &shift
->where
, i
+ 1,
1648 mpz_get_si (array
->shape
[i
]),
1649 mpz_get_si (shift
->shape
[j
]));
1659 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1660 "%d or be a scalar", gfc_current_intrinsic_arg
[1]->name
,
1661 gfc_current_intrinsic
, &shift
->where
, array
->rank
- 1);
1670 gfc_check_ctime (gfc_expr
*time
)
1672 if (!scalar_check (time
, 0))
1675 if (!type_check (time
, 0, BT_INTEGER
))
1682 bool gfc_check_datan2 (gfc_expr
*y
, gfc_expr
*x
)
1684 if (!double_check (y
, 0) || !double_check (x
, 1))
1691 gfc_check_dcmplx (gfc_expr
*x
, gfc_expr
*y
)
1693 if (!numeric_check (x
, 0))
1698 if (!numeric_check (y
, 1))
1701 if (x
->ts
.type
== BT_COMPLEX
)
1703 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1704 "present if 'x' is COMPLEX",
1705 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1710 if (y
->ts
.type
== BT_COMPLEX
)
1712 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1713 "of either REAL or INTEGER",
1714 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1725 gfc_check_dble (gfc_expr
*x
)
1727 if (!numeric_check (x
, 0))
1735 gfc_check_digits (gfc_expr
*x
)
1737 if (!int_or_real_check (x
, 0))
1745 gfc_check_dot_product (gfc_expr
*vector_a
, gfc_expr
*vector_b
)
1747 switch (vector_a
->ts
.type
)
1750 if (!type_check (vector_b
, 1, BT_LOGICAL
))
1757 if (!numeric_check (vector_b
, 1))
1762 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1763 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
1764 gfc_current_intrinsic
, &vector_a
->where
);
1768 if (!rank_check (vector_a
, 0, 1))
1771 if (!rank_check (vector_b
, 1, 1))
1774 if (! identical_dimen_shape (vector_a
, 0, vector_b
, 0))
1776 gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
1777 "intrinsic 'dot_product'", gfc_current_intrinsic_arg
[0]->name
,
1778 gfc_current_intrinsic_arg
[1]->name
, &vector_a
->where
);
1787 gfc_check_dprod (gfc_expr
*x
, gfc_expr
*y
)
1789 if (!type_check (x
, 0, BT_REAL
)
1790 || !type_check (y
, 1, BT_REAL
))
1793 if (x
->ts
.kind
!= gfc_default_real_kind
)
1795 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1796 "real", gfc_current_intrinsic_arg
[0]->name
,
1797 gfc_current_intrinsic
, &x
->where
);
1801 if (y
->ts
.kind
!= gfc_default_real_kind
)
1803 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1804 "real", gfc_current_intrinsic_arg
[1]->name
,
1805 gfc_current_intrinsic
, &y
->where
);
1814 gfc_check_dshift (gfc_expr
*i
, gfc_expr
*j
, gfc_expr
*shift
)
1816 if (!type_check (i
, 0, BT_INTEGER
))
1819 if (!type_check (j
, 1, BT_INTEGER
))
1822 if (i
->is_boz
&& j
->is_boz
)
1824 gfc_error ("'I' at %L and 'J' at %L cannot both be BOZ literal "
1825 "constants", &i
->where
, &j
->where
);
1829 if (!i
->is_boz
&& !j
->is_boz
&& !same_type_check (i
, 0, j
, 1))
1832 if (!type_check (shift
, 2, BT_INTEGER
))
1835 if (!nonnegative_check ("SHIFT", shift
))
1840 if (!less_than_bitsize1 ("J", j
, "SHIFT", shift
, true))
1842 i
->ts
.kind
= j
->ts
.kind
;
1846 if (!less_than_bitsize1 ("I", i
, "SHIFT", shift
, true))
1848 j
->ts
.kind
= i
->ts
.kind
;
1856 gfc_check_eoshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*boundary
,
1859 if (!array_check (array
, 0))
1862 if (!type_check (shift
, 1, BT_INTEGER
))
1865 if (!dim_check (dim
, 3, true))
1868 if (!dim_rank_check (dim
, array
, false))
1871 if (array
->rank
== 1 || shift
->rank
== 0)
1873 if (!scalar_check (shift
, 1))
1876 else if (shift
->rank
== array
->rank
- 1)
1881 else if (dim
->expr_type
== EXPR_CONSTANT
)
1882 gfc_extract_int (dim
, &d
);
1889 for (i
= 0, j
= 0; i
< array
->rank
; i
++)
1892 if (!identical_dimen_shape (array
, i
, shift
, j
))
1894 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1895 "invalid shape in dimension %d (%ld/%ld)",
1896 gfc_current_intrinsic_arg
[1]->name
,
1897 gfc_current_intrinsic
, &shift
->where
, i
+ 1,
1898 mpz_get_si (array
->shape
[i
]),
1899 mpz_get_si (shift
->shape
[j
]));
1909 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1910 "%d or be a scalar", gfc_current_intrinsic_arg
[1]->name
,
1911 gfc_current_intrinsic
, &shift
->where
, array
->rank
- 1);
1915 if (boundary
!= NULL
)
1917 if (!same_type_check (array
, 0, boundary
, 2))
1920 if (array
->rank
== 1 || boundary
->rank
== 0)
1922 if (!scalar_check (boundary
, 2))
1925 else if (boundary
->rank
== array
->rank
- 1)
1927 if (!gfc_check_conformance (shift
, boundary
,
1928 "arguments '%s' and '%s' for "
1930 gfc_current_intrinsic_arg
[1]->name
,
1931 gfc_current_intrinsic_arg
[2]->name
,
1932 gfc_current_intrinsic
))
1937 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have "
1938 "rank %d or be a scalar",
1939 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1940 &shift
->where
, array
->rank
- 1);
1949 gfc_check_float (gfc_expr
*a
)
1951 if (!type_check (a
, 0, BT_INTEGER
))
1954 if ((a
->ts
.kind
!= gfc_default_integer_kind
)
1955 && !gfc_notify_std (GFC_STD_GNU
, "non-default INTEGER "
1956 "kind argument to %s intrinsic at %L",
1957 gfc_current_intrinsic
, &a
->where
))
1963 /* A single complex argument. */
1966 gfc_check_fn_c (gfc_expr
*a
)
1968 if (!type_check (a
, 0, BT_COMPLEX
))
1974 /* A single real argument. */
1977 gfc_check_fn_r (gfc_expr
*a
)
1979 if (!type_check (a
, 0, BT_REAL
))
1985 /* A single double argument. */
1988 gfc_check_fn_d (gfc_expr
*a
)
1990 if (!double_check (a
, 0))
1996 /* A single real or complex argument. */
1999 gfc_check_fn_rc (gfc_expr
*a
)
2001 if (!real_or_complex_check (a
, 0))
2009 gfc_check_fn_rc2008 (gfc_expr
*a
)
2011 if (!real_or_complex_check (a
, 0))
2014 if (a
->ts
.type
== BT_COMPLEX
2015 && !gfc_notify_std (GFC_STD_F2008
, "COMPLEX argument '%s' "
2016 "of '%s' intrinsic at %L",
2017 gfc_current_intrinsic_arg
[0]->name
,
2018 gfc_current_intrinsic
, &a
->where
))
2026 gfc_check_fnum (gfc_expr
*unit
)
2028 if (!type_check (unit
, 0, BT_INTEGER
))
2031 if (!scalar_check (unit
, 0))
2039 gfc_check_huge (gfc_expr
*x
)
2041 if (!int_or_real_check (x
, 0))
2049 gfc_check_hypot (gfc_expr
*x
, gfc_expr
*y
)
2051 if (!type_check (x
, 0, BT_REAL
))
2053 if (!same_type_check (x
, 0, y
, 1))
2060 /* Check that the single argument is an integer. */
2063 gfc_check_i (gfc_expr
*i
)
2065 if (!type_check (i
, 0, BT_INTEGER
))
2073 gfc_check_iand (gfc_expr
*i
, gfc_expr
*j
)
2075 if (!type_check (i
, 0, BT_INTEGER
))
2078 if (!type_check (j
, 1, BT_INTEGER
))
2081 if (i
->ts
.kind
!= j
->ts
.kind
)
2083 if (!gfc_notify_std (GFC_STD_GNU
, "Different type kinds at %L",
2093 gfc_check_ibits (gfc_expr
*i
, gfc_expr
*pos
, gfc_expr
*len
)
2095 if (!type_check (i
, 0, BT_INTEGER
))
2098 if (!type_check (pos
, 1, BT_INTEGER
))
2101 if (!type_check (len
, 2, BT_INTEGER
))
2104 if (!nonnegative_check ("pos", pos
))
2107 if (!nonnegative_check ("len", len
))
2110 if (!less_than_bitsize2 ("i", i
, "pos", pos
, "len", len
))
2118 gfc_check_ichar_iachar (gfc_expr
*c
, gfc_expr
*kind
)
2122 if (!type_check (c
, 0, BT_CHARACTER
))
2125 if (!kind_check (kind
, 1, BT_INTEGER
))
2128 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
2129 "with KIND argument at %L",
2130 gfc_current_intrinsic
, &kind
->where
))
2133 if (c
->expr_type
== EXPR_VARIABLE
|| c
->expr_type
== EXPR_SUBSTRING
)
2139 /* Substring references don't have the charlength set. */
2141 while (ref
&& ref
->type
!= REF_SUBSTRING
)
2144 gcc_assert (ref
== NULL
|| ref
->type
== REF_SUBSTRING
);
2148 /* Check that the argument is length one. Non-constant lengths
2149 can't be checked here, so assume they are ok. */
2150 if (c
->ts
.u
.cl
&& c
->ts
.u
.cl
->length
)
2152 /* If we already have a length for this expression then use it. */
2153 if (c
->ts
.u
.cl
->length
->expr_type
!= EXPR_CONSTANT
)
2155 i
= mpz_get_si (c
->ts
.u
.cl
->length
->value
.integer
);
2162 start
= ref
->u
.ss
.start
;
2163 end
= ref
->u
.ss
.end
;
2166 if (end
== NULL
|| end
->expr_type
!= EXPR_CONSTANT
2167 || start
->expr_type
!= EXPR_CONSTANT
)
2170 i
= mpz_get_si (end
->value
.integer
) + 1
2171 - mpz_get_si (start
->value
.integer
);
2179 gfc_error ("Argument of %s at %L must be of length one",
2180 gfc_current_intrinsic
, &c
->where
);
2189 gfc_check_idnint (gfc_expr
*a
)
2191 if (!double_check (a
, 0))
2199 gfc_check_ieor (gfc_expr
*i
, gfc_expr
*j
)
2201 if (!type_check (i
, 0, BT_INTEGER
))
2204 if (!type_check (j
, 1, BT_INTEGER
))
2207 if (i
->ts
.kind
!= j
->ts
.kind
)
2209 if (!gfc_notify_std (GFC_STD_GNU
, "Different type kinds at %L",
2219 gfc_check_index (gfc_expr
*string
, gfc_expr
*substring
, gfc_expr
*back
,
2222 if (!type_check (string
, 0, BT_CHARACTER
)
2223 || !type_check (substring
, 1, BT_CHARACTER
))
2226 if (back
!= NULL
&& !type_check (back
, 2, BT_LOGICAL
))
2229 if (!kind_check (kind
, 3, BT_INTEGER
))
2231 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
2232 "with KIND argument at %L",
2233 gfc_current_intrinsic
, &kind
->where
))
2236 if (string
->ts
.kind
!= substring
->ts
.kind
)
2238 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
2239 "kind as '%s'", gfc_current_intrinsic_arg
[1]->name
,
2240 gfc_current_intrinsic
, &substring
->where
,
2241 gfc_current_intrinsic_arg
[0]->name
);
2250 gfc_check_int (gfc_expr
*x
, gfc_expr
*kind
)
2252 if (!numeric_check (x
, 0))
2255 if (!kind_check (kind
, 1, BT_INTEGER
))
2263 gfc_check_intconv (gfc_expr
*x
)
2265 if (!numeric_check (x
, 0))
2273 gfc_check_ior (gfc_expr
*i
, gfc_expr
*j
)
2275 if (!type_check (i
, 0, BT_INTEGER
))
2278 if (!type_check (j
, 1, BT_INTEGER
))
2281 if (i
->ts
.kind
!= j
->ts
.kind
)
2283 if (!gfc_notify_std (GFC_STD_GNU
, "Different type kinds at %L",
2293 gfc_check_ishft (gfc_expr
*i
, gfc_expr
*shift
)
2295 if (!type_check (i
, 0, BT_INTEGER
)
2296 || !type_check (shift
, 1, BT_INTEGER
))
2299 if (!less_than_bitsize1 ("I", i
, NULL
, shift
, true))
2307 gfc_check_ishftc (gfc_expr
*i
, gfc_expr
*shift
, gfc_expr
*size
)
2309 if (!type_check (i
, 0, BT_INTEGER
)
2310 || !type_check (shift
, 1, BT_INTEGER
))
2317 if (!type_check (size
, 2, BT_INTEGER
))
2320 if (!less_than_bitsize1 ("I", i
, "SIZE", size
, true))
2323 if (size
->expr_type
== EXPR_CONSTANT
)
2325 gfc_extract_int (size
, &i3
);
2328 gfc_error ("SIZE at %L must be positive", &size
->where
);
2332 if (shift
->expr_type
== EXPR_CONSTANT
)
2334 gfc_extract_int (shift
, &i2
);
2340 gfc_error ("The absolute value of SHIFT at %L must be less "
2341 "than or equal to SIZE at %L", &shift
->where
,
2348 else if (!less_than_bitsize1 ("I", i
, NULL
, shift
, true))
2356 gfc_check_kill (gfc_expr
*pid
, gfc_expr
*sig
)
2358 if (!type_check (pid
, 0, BT_INTEGER
))
2361 if (!type_check (sig
, 1, BT_INTEGER
))
2369 gfc_check_kill_sub (gfc_expr
*pid
, gfc_expr
*sig
, gfc_expr
*status
)
2371 if (!type_check (pid
, 0, BT_INTEGER
))
2374 if (!scalar_check (pid
, 0))
2377 if (!type_check (sig
, 1, BT_INTEGER
))
2380 if (!scalar_check (sig
, 1))
2386 if (!type_check (status
, 2, BT_INTEGER
))
2389 if (!scalar_check (status
, 2))
2397 gfc_check_kind (gfc_expr
*x
)
2399 if (x
->ts
.type
== BT_DERIVED
)
2401 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
2402 "non-derived type", gfc_current_intrinsic_arg
[0]->name
,
2403 gfc_current_intrinsic
, &x
->where
);
2412 gfc_check_lbound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
2414 if (!array_check (array
, 0))
2417 if (!dim_check (dim
, 1, false))
2420 if (!dim_rank_check (dim
, array
, 1))
2423 if (!kind_check (kind
, 2, BT_INTEGER
))
2425 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
2426 "with KIND argument at %L",
2427 gfc_current_intrinsic
, &kind
->where
))
2435 gfc_check_lcobound (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*kind
)
2437 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
2439 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
2443 if (!coarray_check (coarray
, 0))
2448 if (!dim_check (dim
, 1, false))
2451 if (!dim_corank_check (dim
, coarray
))
2455 if (!kind_check (kind
, 2, BT_INTEGER
))
2463 gfc_check_len_lentrim (gfc_expr
*s
, gfc_expr
*kind
)
2465 if (!type_check (s
, 0, BT_CHARACTER
))
2468 if (!kind_check (kind
, 1, BT_INTEGER
))
2470 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
2471 "with KIND argument at %L",
2472 gfc_current_intrinsic
, &kind
->where
))
2480 gfc_check_lge_lgt_lle_llt (gfc_expr
*a
, gfc_expr
*b
)
2482 if (!type_check (a
, 0, BT_CHARACTER
))
2484 if (!kind_value_check (a
, 0, gfc_default_character_kind
))
2487 if (!type_check (b
, 1, BT_CHARACTER
))
2489 if (!kind_value_check (b
, 1, gfc_default_character_kind
))
2497 gfc_check_link (gfc_expr
*path1
, gfc_expr
*path2
)
2499 if (!type_check (path1
, 0, BT_CHARACTER
))
2501 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
2504 if (!type_check (path2
, 1, BT_CHARACTER
))
2506 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
2514 gfc_check_link_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2516 if (!type_check (path1
, 0, BT_CHARACTER
))
2518 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
2521 if (!type_check (path2
, 1, BT_CHARACTER
))
2523 if (!kind_value_check (path2
, 0, gfc_default_character_kind
))
2529 if (!type_check (status
, 2, BT_INTEGER
))
2532 if (!scalar_check (status
, 2))
2540 gfc_check_loc (gfc_expr
*expr
)
2542 return variable_check (expr
, 0, true);
2547 gfc_check_symlnk (gfc_expr
*path1
, gfc_expr
*path2
)
2549 if (!type_check (path1
, 0, BT_CHARACTER
))
2551 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
2554 if (!type_check (path2
, 1, BT_CHARACTER
))
2556 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
2564 gfc_check_symlnk_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2566 if (!type_check (path1
, 0, BT_CHARACTER
))
2568 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
2571 if (!type_check (path2
, 1, BT_CHARACTER
))
2573 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
2579 if (!type_check (status
, 2, BT_INTEGER
))
2582 if (!scalar_check (status
, 2))
2590 gfc_check_logical (gfc_expr
*a
, gfc_expr
*kind
)
2592 if (!type_check (a
, 0, BT_LOGICAL
))
2594 if (!kind_check (kind
, 1, BT_LOGICAL
))
2601 /* Min/max family. */
2604 min_max_args (gfc_actual_arglist
*args
)
2606 gfc_actual_arglist
*arg
;
2607 int i
, j
, nargs
, *nlabels
, nlabelless
;
2608 bool a1
= false, a2
= false;
2610 if (args
== NULL
|| args
->next
== NULL
)
2612 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
2613 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
2620 if (!args
->next
->name
)
2624 for (arg
= args
; arg
; arg
= arg
->next
)
2631 /* Note: Having a keywordless argument after an "arg=" is checked before. */
2633 nlabels
= XALLOCAVEC (int, nargs
);
2634 for (arg
= args
, i
= 0; arg
; arg
= arg
->next
, i
++)
2640 if (arg
->name
[0] != 'a' || arg
->name
[1] < '1' || arg
->name
[1] > '9')
2642 n
= strtol (&arg
->name
[1], &endp
, 10);
2643 if (endp
[0] != '\0')
2647 if (n
<= nlabelless
)
2660 gfc_error ("Missing '%s' argument to the %s intrinsic at %L",
2661 !a1
? "a1" : "a2", gfc_current_intrinsic
,
2662 gfc_current_intrinsic_where
);
2666 /* Check for duplicates. */
2667 for (i
= 0; i
< nargs
; i
++)
2668 for (j
= i
+ 1; j
< nargs
; j
++)
2669 if (nlabels
[i
] == nlabels
[j
])
2675 gfc_error ("Duplicate argument '%s' at %L to intrinsic %s", arg
->name
,
2676 &arg
->expr
->where
, gfc_current_intrinsic
);
2680 gfc_error ("Unknown argument '%s' at %L to intrinsic %s", arg
->name
,
2681 &arg
->expr
->where
, gfc_current_intrinsic
);
2687 check_rest (bt type
, int kind
, gfc_actual_arglist
*arglist
)
2689 gfc_actual_arglist
*arg
, *tmp
;
2693 if (!min_max_args (arglist
))
2696 for (arg
= arglist
, n
=1; arg
; arg
= arg
->next
, n
++)
2699 if (x
->ts
.type
!= type
|| x
->ts
.kind
!= kind
)
2701 if (x
->ts
.type
== type
)
2703 if (!gfc_notify_std (GFC_STD_GNU
, "Different type "
2704 "kinds at %L", &x
->where
))
2709 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
2710 "%s(%d)", n
, gfc_current_intrinsic
, &x
->where
,
2711 gfc_basic_typename (type
), kind
);
2716 for (tmp
= arglist
, m
=1; tmp
!= arg
; tmp
= tmp
->next
, m
++)
2717 if (!gfc_check_conformance (tmp
->expr
, x
,
2718 "arguments 'a%d' and 'a%d' for "
2719 "intrinsic '%s'", m
, n
,
2720 gfc_current_intrinsic
))
2729 gfc_check_min_max (gfc_actual_arglist
*arg
)
2733 if (!min_max_args (arg
))
2738 if (x
->ts
.type
== BT_CHARACTER
)
2740 if (!gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
2741 "with CHARACTER argument at %L",
2742 gfc_current_intrinsic
, &x
->where
))
2745 else if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
2747 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
2748 "REAL or CHARACTER", gfc_current_intrinsic
, &x
->where
);
2752 return check_rest (x
->ts
.type
, x
->ts
.kind
, arg
);
2757 gfc_check_min_max_integer (gfc_actual_arglist
*arg
)
2759 return check_rest (BT_INTEGER
, gfc_default_integer_kind
, arg
);
2764 gfc_check_min_max_real (gfc_actual_arglist
*arg
)
2766 return check_rest (BT_REAL
, gfc_default_real_kind
, arg
);
2771 gfc_check_min_max_double (gfc_actual_arglist
*arg
)
2773 return check_rest (BT_REAL
, gfc_default_double_kind
, arg
);
2777 /* End of min/max family. */
2780 gfc_check_malloc (gfc_expr
*size
)
2782 if (!type_check (size
, 0, BT_INTEGER
))
2785 if (!scalar_check (size
, 0))
2793 gfc_check_matmul (gfc_expr
*matrix_a
, gfc_expr
*matrix_b
)
2795 if ((matrix_a
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_a
->ts
))
2797 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2798 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
2799 gfc_current_intrinsic
, &matrix_a
->where
);
2803 if ((matrix_b
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_b
->ts
))
2805 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2806 "or LOGICAL", gfc_current_intrinsic_arg
[1]->name
,
2807 gfc_current_intrinsic
, &matrix_b
->where
);
2811 if ((matrix_a
->ts
.type
== BT_LOGICAL
&& gfc_numeric_ts (&matrix_b
->ts
))
2812 || (gfc_numeric_ts (&matrix_a
->ts
) && matrix_b
->ts
.type
== BT_LOGICAL
))
2814 gfc_error ("Argument types of '%s' intrinsic at %L must match (%s/%s)",
2815 gfc_current_intrinsic
, &matrix_a
->where
,
2816 gfc_typename(&matrix_a
->ts
), gfc_typename(&matrix_b
->ts
));
2820 switch (matrix_a
->rank
)
2823 if (!rank_check (matrix_b
, 1, 2))
2825 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
2826 if (!identical_dimen_shape (matrix_a
, 0, matrix_b
, 0))
2828 gfc_error ("Different shape on dimension 1 for arguments '%s' "
2829 "and '%s' at %L for intrinsic matmul",
2830 gfc_current_intrinsic_arg
[0]->name
,
2831 gfc_current_intrinsic_arg
[1]->name
, &matrix_a
->where
);
2837 if (matrix_b
->rank
!= 2)
2839 if (!rank_check (matrix_b
, 1, 1))
2842 /* matrix_b has rank 1 or 2 here. Common check for the cases
2843 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
2844 - matrix_a has shape (n,m) and matrix_b has shape (m). */
2845 if (!identical_dimen_shape (matrix_a
, 1, matrix_b
, 0))
2847 gfc_error ("Different shape on dimension 2 for argument '%s' and "
2848 "dimension 1 for argument '%s' at %L for intrinsic "
2849 "matmul", gfc_current_intrinsic_arg
[0]->name
,
2850 gfc_current_intrinsic_arg
[1]->name
, &matrix_a
->where
);
2856 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
2857 "1 or 2", gfc_current_intrinsic_arg
[0]->name
,
2858 gfc_current_intrinsic
, &matrix_a
->where
);
2866 /* Whoever came up with this interface was probably on something.
2867 The possibilities for the occupation of the second and third
2874 NULL MASK minloc(array, mask=m)
2877 I.e. in the case of minloc(array,mask), mask will be in the second
2878 position of the argument list and we'll have to fix that up. */
2881 gfc_check_minloc_maxloc (gfc_actual_arglist
*ap
)
2883 gfc_expr
*a
, *m
, *d
;
2886 if (!int_or_real_check (a
, 0) || !array_check (a
, 0))
2890 m
= ap
->next
->next
->expr
;
2892 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
2893 && ap
->next
->name
== NULL
)
2897 ap
->next
->expr
= NULL
;
2898 ap
->next
->next
->expr
= m
;
2901 if (!dim_check (d
, 1, false))
2904 if (!dim_rank_check (d
, a
, 0))
2907 if (m
!= NULL
&& !type_check (m
, 2, BT_LOGICAL
))
2911 && !gfc_check_conformance (a
, m
,
2912 "arguments '%s' and '%s' for intrinsic %s",
2913 gfc_current_intrinsic_arg
[0]->name
,
2914 gfc_current_intrinsic_arg
[2]->name
,
2915 gfc_current_intrinsic
))
2922 /* Similar to minloc/maxloc, the argument list might need to be
2923 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
2924 difference is that MINLOC/MAXLOC take an additional KIND argument.
2925 The possibilities are:
2931 NULL MASK minval(array, mask=m)
2934 I.e. in the case of minval(array,mask), mask will be in the second
2935 position of the argument list and we'll have to fix that up. */
2938 check_reduction (gfc_actual_arglist
*ap
)
2940 gfc_expr
*a
, *m
, *d
;
2944 m
= ap
->next
->next
->expr
;
2946 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
2947 && ap
->next
->name
== NULL
)
2951 ap
->next
->expr
= NULL
;
2952 ap
->next
->next
->expr
= m
;
2955 if (!dim_check (d
, 1, false))
2958 if (!dim_rank_check (d
, a
, 0))
2961 if (m
!= NULL
&& !type_check (m
, 2, BT_LOGICAL
))
2965 && !gfc_check_conformance (a
, m
,
2966 "arguments '%s' and '%s' for intrinsic %s",
2967 gfc_current_intrinsic_arg
[0]->name
,
2968 gfc_current_intrinsic_arg
[2]->name
,
2969 gfc_current_intrinsic
))
2977 gfc_check_minval_maxval (gfc_actual_arglist
*ap
)
2979 if (!int_or_real_check (ap
->expr
, 0)
2980 || !array_check (ap
->expr
, 0))
2983 return check_reduction (ap
);
2988 gfc_check_product_sum (gfc_actual_arglist
*ap
)
2990 if (!numeric_check (ap
->expr
, 0)
2991 || !array_check (ap
->expr
, 0))
2994 return check_reduction (ap
);
2998 /* For IANY, IALL and IPARITY. */
3001 gfc_check_mask (gfc_expr
*i
, gfc_expr
*kind
)
3005 if (!type_check (i
, 0, BT_INTEGER
))
3008 if (!nonnegative_check ("I", i
))
3011 if (!kind_check (kind
, 1, BT_INTEGER
))
3015 gfc_extract_int (kind
, &k
);
3017 k
= gfc_default_integer_kind
;
3019 if (!less_than_bitsizekind ("I", i
, k
))
3027 gfc_check_transf_bit_intrins (gfc_actual_arglist
*ap
)
3029 if (ap
->expr
->ts
.type
!= BT_INTEGER
)
3031 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER",
3032 gfc_current_intrinsic_arg
[0]->name
,
3033 gfc_current_intrinsic
, &ap
->expr
->where
);
3037 if (!array_check (ap
->expr
, 0))
3040 return check_reduction (ap
);
3045 gfc_check_merge (gfc_expr
*tsource
, gfc_expr
*fsource
, gfc_expr
*mask
)
3047 if (!same_type_check (tsource
, 0, fsource
, 1))
3050 if (!type_check (mask
, 2, BT_LOGICAL
))
3053 if (tsource
->ts
.type
== BT_CHARACTER
)
3054 return gfc_check_same_strlen (tsource
, fsource
, "MERGE intrinsic");
3061 gfc_check_merge_bits (gfc_expr
*i
, gfc_expr
*j
, gfc_expr
*mask
)
3063 if (!type_check (i
, 0, BT_INTEGER
))
3066 if (!type_check (j
, 1, BT_INTEGER
))
3069 if (!type_check (mask
, 2, BT_INTEGER
))
3072 if (!same_type_check (i
, 0, j
, 1))
3075 if (!same_type_check (i
, 0, mask
, 2))
3083 gfc_check_move_alloc (gfc_expr
*from
, gfc_expr
*to
)
3085 if (!variable_check (from
, 0, false))
3087 if (!allocatable_check (from
, 0))
3089 if (gfc_is_coindexed (from
))
3091 gfc_error ("The FROM argument to MOVE_ALLOC at %L shall not be "
3092 "coindexed", &from
->where
);
3096 if (!variable_check (to
, 1, false))
3098 if (!allocatable_check (to
, 1))
3100 if (gfc_is_coindexed (to
))
3102 gfc_error ("The TO argument to MOVE_ALLOC at %L shall not be "
3103 "coindexed", &to
->where
);
3107 if (from
->ts
.type
== BT_CLASS
&& to
->ts
.type
== BT_DERIVED
)
3109 gfc_error ("The TO arguments in MOVE_ALLOC at %L must be "
3110 "polymorphic if FROM is polymorphic",
3115 if (!same_type_check (to
, 1, from
, 0))
3118 if (to
->rank
!= from
->rank
)
3120 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
3121 "must have the same rank %d/%d", &to
->where
, from
->rank
,
3126 /* IR F08/0040; cf. 12-006A. */
3127 if (gfc_get_corank (to
) != gfc_get_corank (from
))
3129 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
3130 "must have the same corank %d/%d", &to
->where
,
3131 gfc_get_corank (from
), gfc_get_corank (to
));
3135 /* CLASS arguments: Make sure the vtab of from is present. */
3136 if (to
->ts
.type
== BT_CLASS
&& !UNLIMITED_POLY (from
))
3137 gfc_find_vtab (&from
->ts
);
3144 gfc_check_nearest (gfc_expr
*x
, gfc_expr
*s
)
3146 if (!type_check (x
, 0, BT_REAL
))
3149 if (!type_check (s
, 1, BT_REAL
))
3152 if (s
->expr_type
== EXPR_CONSTANT
)
3154 if (mpfr_sgn (s
->value
.real
) == 0)
3156 gfc_error ("Argument 'S' of NEAREST at %L shall not be zero",
3167 gfc_check_new_line (gfc_expr
*a
)
3169 if (!type_check (a
, 0, BT_CHARACTER
))
3177 gfc_check_norm2 (gfc_expr
*array
, gfc_expr
*dim
)
3179 if (!type_check (array
, 0, BT_REAL
))
3182 if (!array_check (array
, 0))
3185 if (!dim_rank_check (dim
, array
, false))
3192 gfc_check_null (gfc_expr
*mold
)
3194 symbol_attribute attr
;
3199 if (!variable_check (mold
, 0, true))
3202 attr
= gfc_variable_attr (mold
, NULL
);
3204 if (!attr
.pointer
&& !attr
.proc_pointer
&& !attr
.allocatable
)
3206 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER, "
3207 "ALLOCATABLE or procedure pointer",
3208 gfc_current_intrinsic_arg
[0]->name
,
3209 gfc_current_intrinsic
, &mold
->where
);
3213 if (attr
.allocatable
3214 && !gfc_notify_std (GFC_STD_F2003
, "NULL intrinsic with "
3215 "allocatable MOLD at %L", &mold
->where
))
3219 if (gfc_is_coindexed (mold
))
3221 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
3222 "coindexed", gfc_current_intrinsic_arg
[0]->name
,
3223 gfc_current_intrinsic
, &mold
->where
);
3232 gfc_check_pack (gfc_expr
*array
, gfc_expr
*mask
, gfc_expr
*vector
)
3234 if (!array_check (array
, 0))
3237 if (!type_check (mask
, 1, BT_LOGICAL
))
3240 if (!gfc_check_conformance (array
, mask
,
3241 "arguments '%s' and '%s' for intrinsic '%s'",
3242 gfc_current_intrinsic_arg
[0]->name
,
3243 gfc_current_intrinsic_arg
[1]->name
,
3244 gfc_current_intrinsic
))
3249 mpz_t array_size
, vector_size
;
3250 bool have_array_size
, have_vector_size
;
3252 if (!same_type_check (array
, 0, vector
, 2))
3255 if (!rank_check (vector
, 2, 1))
3258 /* VECTOR requires at least as many elements as MASK
3259 has .TRUE. values. */
3260 have_array_size
= gfc_array_size(array
, &array_size
);
3261 have_vector_size
= gfc_array_size(vector
, &vector_size
);
3263 if (have_vector_size
3264 && (mask
->expr_type
== EXPR_ARRAY
3265 || (mask
->expr_type
== EXPR_CONSTANT
3266 && have_array_size
)))
3268 int mask_true_values
= 0;
3270 if (mask
->expr_type
== EXPR_ARRAY
)
3272 gfc_constructor
*mask_ctor
;
3273 mask_ctor
= gfc_constructor_first (mask
->value
.constructor
);
3276 if (mask_ctor
->expr
->expr_type
!= EXPR_CONSTANT
)
3278 mask_true_values
= 0;
3282 if (mask_ctor
->expr
->value
.logical
)
3285 mask_ctor
= gfc_constructor_next (mask_ctor
);
3288 else if (mask
->expr_type
== EXPR_CONSTANT
&& mask
->value
.logical
)
3289 mask_true_values
= mpz_get_si (array_size
);
3291 if (mpz_get_si (vector_size
) < mask_true_values
)
3293 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
3294 "provide at least as many elements as there "
3295 "are .TRUE. values in '%s' (%ld/%d)",
3296 gfc_current_intrinsic_arg
[2]->name
,
3297 gfc_current_intrinsic
, &vector
->where
,
3298 gfc_current_intrinsic_arg
[1]->name
,
3299 mpz_get_si (vector_size
), mask_true_values
);
3304 if (have_array_size
)
3305 mpz_clear (array_size
);
3306 if (have_vector_size
)
3307 mpz_clear (vector_size
);
3315 gfc_check_parity (gfc_expr
*mask
, gfc_expr
*dim
)
3317 if (!type_check (mask
, 0, BT_LOGICAL
))
3320 if (!array_check (mask
, 0))
3323 if (!dim_rank_check (dim
, mask
, false))
3331 gfc_check_precision (gfc_expr
*x
)
3333 if (!real_or_complex_check (x
, 0))
3341 gfc_check_present (gfc_expr
*a
)
3345 if (!variable_check (a
, 0, true))
3348 sym
= a
->symtree
->n
.sym
;
3349 if (!sym
->attr
.dummy
)
3351 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
3352 "dummy variable", gfc_current_intrinsic_arg
[0]->name
,
3353 gfc_current_intrinsic
, &a
->where
);
3357 if (!sym
->attr
.optional
)
3359 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
3360 "an OPTIONAL dummy variable",
3361 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3366 /* 13.14.82 PRESENT(A)
3368 Argument. A shall be the name of an optional dummy argument that is
3369 accessible in the subprogram in which the PRESENT function reference
3373 && !(a
->ref
->next
== NULL
&& a
->ref
->type
== REF_ARRAY
3374 && (a
->ref
->u
.ar
.type
== AR_FULL
3375 || (a
->ref
->u
.ar
.type
== AR_ELEMENT
3376 && a
->ref
->u
.ar
.as
->rank
== 0))))
3378 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
3379 "subobject of '%s'", gfc_current_intrinsic_arg
[0]->name
,
3380 gfc_current_intrinsic
, &a
->where
, sym
->name
);
3389 gfc_check_radix (gfc_expr
*x
)
3391 if (!int_or_real_check (x
, 0))
3399 gfc_check_range (gfc_expr
*x
)
3401 if (!numeric_check (x
, 0))
3409 gfc_check_rank (gfc_expr
*a ATTRIBUTE_UNUSED
)
3411 /* Any data object is allowed; a "data object" is a "constant (4.1.3),
3412 variable (6), or subobject of a constant (2.4.3.2.3)" (F2008, 1.3.45). */
3414 bool is_variable
= true;
3416 /* Functions returning pointers are regarded as variable, cf. F2008, R602. */
3417 if (a
->expr_type
== EXPR_FUNCTION
)
3418 is_variable
= a
->value
.function
.esym
3419 ? a
->value
.function
.esym
->result
->attr
.pointer
3420 : a
->symtree
->n
.sym
->result
->attr
.pointer
;
3422 if (a
->expr_type
== EXPR_OP
|| a
->expr_type
== EXPR_NULL
3423 || a
->expr_type
== EXPR_COMPCALL
|| a
->expr_type
== EXPR_PPC
3426 gfc_error ("The argument of the RANK intrinsic at %L must be a data "
3427 "object", &a
->where
);
3435 /* real, float, sngl. */
3437 gfc_check_real (gfc_expr
*a
, gfc_expr
*kind
)
3439 if (!numeric_check (a
, 0))
3442 if (!kind_check (kind
, 1, BT_REAL
))
3450 gfc_check_rename (gfc_expr
*path1
, gfc_expr
*path2
)
3452 if (!type_check (path1
, 0, BT_CHARACTER
))
3454 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
3457 if (!type_check (path2
, 1, BT_CHARACTER
))
3459 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
3467 gfc_check_rename_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
3469 if (!type_check (path1
, 0, BT_CHARACTER
))
3471 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
3474 if (!type_check (path2
, 1, BT_CHARACTER
))
3476 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
3482 if (!type_check (status
, 2, BT_INTEGER
))
3485 if (!scalar_check (status
, 2))
3493 gfc_check_repeat (gfc_expr
*x
, gfc_expr
*y
)
3495 if (!type_check (x
, 0, BT_CHARACTER
))
3498 if (!scalar_check (x
, 0))
3501 if (!type_check (y
, 0, BT_INTEGER
))
3504 if (!scalar_check (y
, 1))
3512 gfc_check_reshape (gfc_expr
*source
, gfc_expr
*shape
,
3513 gfc_expr
*pad
, gfc_expr
*order
)
3519 if (!array_check (source
, 0))
3522 if (!rank_check (shape
, 1, 1))
3525 if (!type_check (shape
, 1, BT_INTEGER
))
3528 if (!gfc_array_size (shape
, &size
))
3530 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
3531 "array of constant size", &shape
->where
);
3535 shape_size
= mpz_get_ui (size
);
3538 if (shape_size
<= 0)
3540 gfc_error ("'%s' argument of '%s' intrinsic at %L is empty",
3541 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3545 else if (shape_size
> GFC_MAX_DIMENSIONS
)
3547 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
3548 "than %d elements", &shape
->where
, GFC_MAX_DIMENSIONS
);
3551 else if (shape
->expr_type
== EXPR_ARRAY
&& gfc_is_constant_expr (shape
))
3555 for (i
= 0; i
< shape_size
; ++i
)
3557 e
= gfc_constructor_lookup_expr (shape
->value
.constructor
, i
);
3558 if (e
->expr_type
!= EXPR_CONSTANT
)
3561 gfc_extract_int (e
, &extent
);
3564 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3565 "negative element (%d)",
3566 gfc_current_intrinsic_arg
[1]->name
,
3567 gfc_current_intrinsic
, &e
->where
, extent
);
3575 if (!same_type_check (source
, 0, pad
, 2))
3578 if (!array_check (pad
, 2))
3584 if (!array_check (order
, 3))
3587 if (!type_check (order
, 3, BT_INTEGER
))
3590 if (order
->expr_type
== EXPR_ARRAY
)
3592 int i
, order_size
, dim
, perm
[GFC_MAX_DIMENSIONS
];
3595 for (i
= 0; i
< GFC_MAX_DIMENSIONS
; ++i
)
3598 gfc_array_size (order
, &size
);
3599 order_size
= mpz_get_ui (size
);
3602 if (order_size
!= shape_size
)
3604 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3605 "has wrong number of elements (%d/%d)",
3606 gfc_current_intrinsic_arg
[3]->name
,
3607 gfc_current_intrinsic
, &order
->where
,
3608 order_size
, shape_size
);
3612 for (i
= 1; i
<= order_size
; ++i
)
3614 e
= gfc_constructor_lookup_expr (order
->value
.constructor
, i
-1);
3615 if (e
->expr_type
!= EXPR_CONSTANT
)
3618 gfc_extract_int (e
, &dim
);
3620 if (dim
< 1 || dim
> order_size
)
3622 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3623 "has out-of-range dimension (%d)",
3624 gfc_current_intrinsic_arg
[3]->name
,
3625 gfc_current_intrinsic
, &e
->where
, dim
);
3629 if (perm
[dim
-1] != 0)
3631 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3632 "invalid permutation of dimensions (dimension "
3634 gfc_current_intrinsic_arg
[3]->name
,
3635 gfc_current_intrinsic
, &e
->where
, dim
);
3644 if (pad
== NULL
&& shape
->expr_type
== EXPR_ARRAY
3645 && gfc_is_constant_expr (shape
)
3646 && !(source
->expr_type
== EXPR_VARIABLE
&& source
->symtree
->n
.sym
->as
3647 && source
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
))
3649 /* Check the match in size between source and destination. */
3650 if (gfc_array_size (source
, &nelems
))
3656 mpz_init_set_ui (size
, 1);
3657 for (c
= gfc_constructor_first (shape
->value
.constructor
);
3658 c
; c
= gfc_constructor_next (c
))
3659 mpz_mul (size
, size
, c
->expr
->value
.integer
);
3661 test
= mpz_cmp (nelems
, size
) < 0 && mpz_cmp_ui (size
, 0) > 0;
3667 gfc_error ("Without padding, there are not enough elements "
3668 "in the intrinsic RESHAPE source at %L to match "
3669 "the shape", &source
->where
);
3680 gfc_check_same_type_as (gfc_expr
*a
, gfc_expr
*b
)
3682 if (a
->ts
.type
!= BT_DERIVED
&& a
->ts
.type
!= BT_CLASS
)
3684 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3685 "cannot be of type %s",
3686 gfc_current_intrinsic_arg
[0]->name
,
3687 gfc_current_intrinsic
,
3688 &a
->where
, gfc_typename (&a
->ts
));
3692 if (!(gfc_type_is_extensible (a
->ts
.u
.derived
) || UNLIMITED_POLY (a
)))
3694 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3695 "must be of an extensible type",
3696 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3701 if (b
->ts
.type
!= BT_DERIVED
&& b
->ts
.type
!= BT_CLASS
)
3703 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3704 "cannot be of type %s",
3705 gfc_current_intrinsic_arg
[0]->name
,
3706 gfc_current_intrinsic
,
3707 &b
->where
, gfc_typename (&b
->ts
));
3711 if (!(gfc_type_is_extensible (b
->ts
.u
.derived
) || UNLIMITED_POLY (b
)))
3713 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3714 "must be of an extensible type",
3715 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3725 gfc_check_scale (gfc_expr
*x
, gfc_expr
*i
)
3727 if (!type_check (x
, 0, BT_REAL
))
3730 if (!type_check (i
, 1, BT_INTEGER
))
3738 gfc_check_scan (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
3740 if (!type_check (x
, 0, BT_CHARACTER
))
3743 if (!type_check (y
, 1, BT_CHARACTER
))
3746 if (z
!= NULL
&& !type_check (z
, 2, BT_LOGICAL
))
3749 if (!kind_check (kind
, 3, BT_INTEGER
))
3751 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
3752 "with KIND argument at %L",
3753 gfc_current_intrinsic
, &kind
->where
))
3756 if (!same_type_check (x
, 0, y
, 1))
3764 gfc_check_secnds (gfc_expr
*r
)
3766 if (!type_check (r
, 0, BT_REAL
))
3769 if (!kind_value_check (r
, 0, 4))
3772 if (!scalar_check (r
, 0))
3780 gfc_check_selected_char_kind (gfc_expr
*name
)
3782 if (!type_check (name
, 0, BT_CHARACTER
))
3785 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
3788 if (!scalar_check (name
, 0))
3796 gfc_check_selected_int_kind (gfc_expr
*r
)
3798 if (!type_check (r
, 0, BT_INTEGER
))
3801 if (!scalar_check (r
, 0))
3809 gfc_check_selected_real_kind (gfc_expr
*p
, gfc_expr
*r
, gfc_expr
*radix
)
3811 if (p
== NULL
&& r
== NULL
3812 && !gfc_notify_std (GFC_STD_F2008
, "SELECTED_REAL_KIND with"
3813 " neither 'P' nor 'R' argument at %L",
3814 gfc_current_intrinsic_where
))
3819 if (!type_check (p
, 0, BT_INTEGER
))
3822 if (!scalar_check (p
, 0))
3828 if (!type_check (r
, 1, BT_INTEGER
))
3831 if (!scalar_check (r
, 1))
3837 if (!type_check (radix
, 1, BT_INTEGER
))
3840 if (!scalar_check (radix
, 1))
3843 if (!gfc_notify_std (GFC_STD_F2008
, "'%s' intrinsic with "
3844 "RADIX argument at %L", gfc_current_intrinsic
,
3854 gfc_check_set_exponent (gfc_expr
*x
, gfc_expr
*i
)
3856 if (!type_check (x
, 0, BT_REAL
))
3859 if (!type_check (i
, 1, BT_INTEGER
))
3867 gfc_check_shape (gfc_expr
*source
, gfc_expr
*kind
)
3871 if (source
->rank
== 0 || source
->expr_type
!= EXPR_VARIABLE
)
3874 ar
= gfc_find_array_ref (source
);
3876 if (ar
->as
&& ar
->as
->type
== AS_ASSUMED_SIZE
&& ar
->type
== AR_FULL
)
3878 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
3879 "an assumed size array", &source
->where
);
3883 if (!kind_check (kind
, 1, BT_INTEGER
))
3885 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
3886 "with KIND argument at %L",
3887 gfc_current_intrinsic
, &kind
->where
))
3895 gfc_check_shift (gfc_expr
*i
, gfc_expr
*shift
)
3897 if (!type_check (i
, 0, BT_INTEGER
))
3900 if (!type_check (shift
, 0, BT_INTEGER
))
3903 if (!nonnegative_check ("SHIFT", shift
))
3906 if (!less_than_bitsize1 ("I", i
, "SHIFT", shift
, true))
3914 gfc_check_sign (gfc_expr
*a
, gfc_expr
*b
)
3916 if (!int_or_real_check (a
, 0))
3919 if (!same_type_check (a
, 0, b
, 1))
3927 gfc_check_size (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
3929 if (!array_check (array
, 0))
3932 if (!dim_check (dim
, 1, true))
3935 if (!dim_rank_check (dim
, array
, 0))
3938 if (!kind_check (kind
, 2, BT_INTEGER
))
3940 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
3941 "with KIND argument at %L",
3942 gfc_current_intrinsic
, &kind
->where
))
3951 gfc_check_sizeof (gfc_expr
*arg
)
3953 if (arg
->ts
.type
== BT_PROCEDURE
)
3955 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be a procedure",
3956 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3961 /* TYPE(*) is acceptable if and only if it uses an array descriptor. */
3962 if (arg
->ts
.type
== BT_ASSUMED
3963 && (arg
->symtree
->n
.sym
->as
== NULL
3964 || (arg
->symtree
->n
.sym
->as
->type
!= AS_ASSUMED_SHAPE
3965 && arg
->symtree
->n
.sym
->as
->type
!= AS_DEFERRED
3966 && arg
->symtree
->n
.sym
->as
->type
!= AS_ASSUMED_RANK
)))
3968 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be TYPE(*)",
3969 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3974 if (arg
->rank
&& arg
->expr_type
== EXPR_VARIABLE
3975 && arg
->symtree
->n
.sym
->as
!= NULL
3976 && arg
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
&& arg
->ref
3977 && arg
->ref
->type
== REF_ARRAY
&& arg
->ref
->u
.ar
.type
== AR_FULL
)
3979 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be an "
3980 "assumed-size array", gfc_current_intrinsic_arg
[0]->name
,
3981 gfc_current_intrinsic
, &arg
->where
);
3989 /* Check whether an expression is interoperable. When returning false,
3990 msg is set to a string telling why the expression is not interoperable,
3991 otherwise, it is set to NULL. The msg string can be used in diagnostics.
3992 If c_loc is true, character with len > 1 are allowed (cf. Fortran
3993 2003corr5); additionally, assumed-shape/assumed-rank/deferred-shape
3994 arrays are permitted. And if c_f_ptr is true, deferred-shape arrays
3998 is_c_interoperable (gfc_expr
*expr
, const char **msg
, bool c_loc
, bool c_f_ptr
)
4002 if (expr
->ts
.type
== BT_CLASS
)
4004 *msg
= "Expression is polymorphic";
4008 if (expr
->ts
.type
== BT_DERIVED
&& !expr
->ts
.u
.derived
->attr
.is_bind_c
4009 && !expr
->ts
.u
.derived
->ts
.is_iso_c
)
4011 *msg
= "Expression is a noninteroperable derived type";
4015 if (expr
->ts
.type
== BT_PROCEDURE
)
4017 *msg
= "Procedure unexpected as argument";
4021 if (gfc_notification_std (GFC_STD_GNU
) && expr
->ts
.type
== BT_LOGICAL
)
4024 for (i
= 0; gfc_logical_kinds
[i
].kind
; i
++)
4025 if (gfc_logical_kinds
[i
].kind
== expr
->ts
.kind
)
4027 *msg
= "Extension to use a non-C_Bool-kind LOGICAL";
4031 if (gfc_notification_std (GFC_STD_GNU
) && expr
->ts
.type
== BT_CHARACTER
4032 && expr
->ts
.kind
!= 1)
4034 *msg
= "Extension to use a non-C_CHAR-kind CHARACTER";
4038 if (expr
->ts
.type
== BT_CHARACTER
) {
4039 if (expr
->ts
.deferred
)
4041 /* TS 29113 allows deferred-length strings as dummy arguments,
4042 but it is not an interoperable type. */
4043 *msg
= "Expression shall not be a deferred-length string";
4047 if (expr
->ts
.u
.cl
&& expr
->ts
.u
.cl
->length
4048 && !gfc_simplify_expr (expr
, 0))
4049 gfc_internal_error ("is_c_interoperable(): gfc_simplify_expr failed");
4051 if (!c_loc
&& expr
->ts
.u
.cl
4052 && (!expr
->ts
.u
.cl
->length
4053 || expr
->ts
.u
.cl
->length
->expr_type
!= EXPR_CONSTANT
4054 || mpz_cmp_si (expr
->ts
.u
.cl
->length
->value
.integer
, 1) != 0))
4056 *msg
= "Type shall have a character length of 1";
4061 /* Note: The following checks are about interoperatable variables, Fortran
4062 15.3.5/15.3.6. In intrinsics like C_LOC or in procedure interface, more
4063 is allowed, e.g. assumed-shape arrays with TS 29113. */
4065 if (gfc_is_coarray (expr
))
4067 *msg
= "Coarrays are not interoperable";
4071 if (!c_loc
&& expr
->rank
> 0 && expr
->expr_type
!= EXPR_ARRAY
)
4073 gfc_array_ref
*ar
= gfc_find_array_ref (expr
);
4074 if (ar
->type
!= AR_FULL
)
4076 *msg
= "Only whole-arrays are interoperable";
4079 if (!c_f_ptr
&& ar
->as
->type
!= AS_EXPLICIT
4080 && ar
->as
->type
!= AS_ASSUMED_SIZE
)
4082 *msg
= "Only explicit-size and assumed-size arrays are interoperable";
4092 gfc_check_c_sizeof (gfc_expr
*arg
)
4096 if (!is_c_interoperable (arg
, &msg
, false, false))
4098 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an "
4099 "interoperable data entity: %s",
4100 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4105 if (arg
->ts
.type
== BT_ASSUMED
)
4107 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
4109 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4114 if (arg
->rank
&& arg
->expr_type
== EXPR_VARIABLE
4115 && arg
->symtree
->n
.sym
->as
!= NULL
4116 && arg
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
&& arg
->ref
4117 && arg
->ref
->type
== REF_ARRAY
&& arg
->ref
->u
.ar
.type
== AR_FULL
)
4119 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be an "
4120 "assumed-size array", gfc_current_intrinsic_arg
[0]->name
,
4121 gfc_current_intrinsic
, &arg
->where
);
4130 gfc_check_c_associated (gfc_expr
*c_ptr_1
, gfc_expr
*c_ptr_2
)
4132 if (c_ptr_1
->ts
.type
!= BT_DERIVED
4133 || c_ptr_1
->ts
.u
.derived
->from_intmod
!= INTMOD_ISO_C_BINDING
4134 || (c_ptr_1
->ts
.u
.derived
->intmod_sym_id
!= ISOCBINDING_PTR
4135 && c_ptr_1
->ts
.u
.derived
->intmod_sym_id
!= ISOCBINDING_FUNPTR
))
4137 gfc_error ("Argument C_PTR_1 at %L to C_ASSOCIATED shall have the "
4138 "type TYPE(C_PTR) or TYPE(C_FUNPTR)", &c_ptr_1
->where
);
4142 if (!scalar_check (c_ptr_1
, 0))
4146 && (c_ptr_2
->ts
.type
!= BT_DERIVED
4147 || c_ptr_2
->ts
.u
.derived
->from_intmod
!= INTMOD_ISO_C_BINDING
4148 || (c_ptr_1
->ts
.u
.derived
->intmod_sym_id
4149 != c_ptr_2
->ts
.u
.derived
->intmod_sym_id
)))
4151 gfc_error ("Argument C_PTR_2 at %L to C_ASSOCIATED shall have the "
4152 "same type as C_PTR_1: %s instead of %s", &c_ptr_1
->where
,
4153 gfc_typename (&c_ptr_1
->ts
),
4154 gfc_typename (&c_ptr_2
->ts
));
4158 if (c_ptr_2
&& !scalar_check (c_ptr_2
, 1))
4166 gfc_check_c_f_pointer (gfc_expr
*cptr
, gfc_expr
*fptr
, gfc_expr
*shape
)
4168 symbol_attribute attr
;
4171 if (cptr
->ts
.type
!= BT_DERIVED
4172 || cptr
->ts
.u
.derived
->from_intmod
!= INTMOD_ISO_C_BINDING
4173 || cptr
->ts
.u
.derived
->intmod_sym_id
!= ISOCBINDING_PTR
)
4175 gfc_error ("Argument CPTR at %L to C_F_POINTER shall have the "
4176 "type TYPE(C_PTR)", &cptr
->where
);
4180 if (!scalar_check (cptr
, 0))
4183 attr
= gfc_expr_attr (fptr
);
4187 gfc_error ("Argument FPTR at %L to C_F_POINTER must be a pointer",
4192 if (fptr
->ts
.type
== BT_CLASS
)
4194 gfc_error ("FPTR argument at %L to C_F_POINTER shall not be polymorphic",
4199 if (gfc_is_coindexed (fptr
))
4201 gfc_error ("Argument FPTR at %L to C_F_POINTER shall not be "
4202 "coindexed", &fptr
->where
);
4206 if (fptr
->rank
== 0 && shape
)
4208 gfc_error ("Unexpected SHAPE argument at %L to C_F_POINTER with scalar "
4209 "FPTR", &fptr
->where
);
4212 else if (fptr
->rank
&& !shape
)
4214 gfc_error ("Expected SHAPE argument to C_F_POINTER with array "
4215 "FPTR at %L", &fptr
->where
);
4219 if (shape
&& !rank_check (shape
, 2, 1))
4222 if (shape
&& !type_check (shape
, 2, BT_INTEGER
))
4228 if (gfc_array_size (shape
, &size
))
4230 if (mpz_cmp_ui (size
, fptr
->rank
) != 0)
4233 gfc_error ("SHAPE argument at %L to C_F_POINTER must have the same "
4234 "size as the RANK of FPTR", &shape
->where
);
4241 if (fptr
->ts
.type
== BT_CLASS
)
4243 gfc_error ("Polymorphic FPTR at %L to C_F_POINTER", &fptr
->where
);
4247 if (!is_c_interoperable (fptr
, &msg
, false, true))
4248 return gfc_notify_std (GFC_STD_F2008_TS
, "Noninteroperable array FPTR "
4249 "at %L to C_F_POINTER: %s", &fptr
->where
, msg
);
4256 gfc_check_c_f_procpointer (gfc_expr
*cptr
, gfc_expr
*fptr
)
4258 symbol_attribute attr
;
4260 if (cptr
->ts
.type
!= BT_DERIVED
4261 || cptr
->ts
.u
.derived
->from_intmod
!= INTMOD_ISO_C_BINDING
4262 || cptr
->ts
.u
.derived
->intmod_sym_id
!= ISOCBINDING_FUNPTR
)
4264 gfc_error ("Argument CPTR at %L to C_F_PROCPOINTER shall have the "
4265 "type TYPE(C_FUNPTR)", &cptr
->where
);
4269 if (!scalar_check (cptr
, 0))
4272 attr
= gfc_expr_attr (fptr
);
4274 if (!attr
.proc_pointer
)
4276 gfc_error ("Argument FPTR at %L to C_F_PROCPOINTER shall be a procedure "
4277 "pointer", &fptr
->where
);
4281 if (gfc_is_coindexed (fptr
))
4283 gfc_error ("Argument FPTR at %L to C_F_PROCPOINTER shall not be "
4284 "coindexed", &fptr
->where
);
4288 if (!attr
.is_bind_c
)
4289 return gfc_notify_std (GFC_STD_F2008_TS
, "Noninteroperable procedure "
4290 "pointer at %L to C_F_PROCPOINTER", &fptr
->where
);
4297 gfc_check_c_funloc (gfc_expr
*x
)
4299 symbol_attribute attr
;
4301 if (gfc_is_coindexed (x
))
4303 gfc_error ("Argument X at %L to C_FUNLOC shall not be "
4304 "coindexed", &x
->where
);
4308 attr
= gfc_expr_attr (x
);
4310 if (attr
.function
&& !attr
.proc_pointer
&& x
->expr_type
== EXPR_VARIABLE
4311 && x
->symtree
->n
.sym
== x
->symtree
->n
.sym
->result
)
4313 gfc_namespace
*ns
= gfc_current_ns
;
4315 for (ns
= gfc_current_ns
; ns
; ns
= ns
->parent
)
4316 if (x
->symtree
->n
.sym
== ns
->proc_name
)
4318 gfc_error ("Function result '%s' at %L is invalid as X argument "
4319 "to C_FUNLOC", x
->symtree
->n
.sym
->name
, &x
->where
);
4324 if (attr
.flavor
!= FL_PROCEDURE
)
4326 gfc_error ("Argument X at %L to C_FUNLOC shall be a procedure "
4327 "or a procedure pointer", &x
->where
);
4331 if (!attr
.is_bind_c
)
4332 return gfc_notify_std (GFC_STD_F2008_TS
, "Noninteroperable procedure "
4333 "at %L to C_FUNLOC", &x
->where
);
4339 gfc_check_c_loc (gfc_expr
*x
)
4341 symbol_attribute attr
;
4344 if (gfc_is_coindexed (x
))
4346 gfc_error ("Argument X at %L to C_LOC shall not be coindexed", &x
->where
);
4350 if (x
->ts
.type
== BT_CLASS
)
4352 gfc_error ("X argument at %L to C_LOC shall not be polymorphic",
4357 attr
= gfc_expr_attr (x
);
4360 && (x
->expr_type
!= EXPR_VARIABLE
|| !attr
.target
4361 || attr
.flavor
== FL_PARAMETER
))
4363 gfc_error ("Argument X at %L to C_LOC shall have either "
4364 "the POINTER or the TARGET attribute", &x
->where
);
4368 if (x
->ts
.type
== BT_CHARACTER
4369 && gfc_var_strlen (x
) == 0)
4371 gfc_error ("Argument X at %L to C_LOC shall be not be a zero-sized "
4372 "string", &x
->where
);
4376 if (!is_c_interoperable (x
, &msg
, true, false))
4378 if (x
->ts
.type
== BT_CLASS
)
4380 gfc_error ("Argument at %L to C_LOC shall not be polymorphic",
4386 && !gfc_notify_std (GFC_STD_F2008_TS
,
4387 "Noninteroperable array at %L as"
4388 " argument to C_LOC: %s", &x
->where
, msg
))
4391 else if (x
->rank
> 0 && gfc_notification_std (GFC_STD_F2008
))
4393 gfc_array_ref
*ar
= gfc_find_array_ref (x
);
4395 if (ar
->as
->type
!= AS_EXPLICIT
&& ar
->as
->type
!= AS_ASSUMED_SIZE
4396 && !attr
.allocatable
4397 && !gfc_notify_std (GFC_STD_F2008
,
4398 "Array of interoperable type at %L "
4399 "to C_LOC which is nonallocatable and neither "
4400 "assumed size nor explicit size", &x
->where
))
4402 else if (ar
->type
!= AR_FULL
4403 && !gfc_notify_std (GFC_STD_F2008
, "Array section at %L "
4404 "to C_LOC", &x
->where
))
4413 gfc_check_sleep_sub (gfc_expr
*seconds
)
4415 if (!type_check (seconds
, 0, BT_INTEGER
))
4418 if (!scalar_check (seconds
, 0))
4425 gfc_check_sngl (gfc_expr
*a
)
4427 if (!type_check (a
, 0, BT_REAL
))
4430 if ((a
->ts
.kind
!= gfc_default_double_kind
)
4431 && !gfc_notify_std (GFC_STD_GNU
, "non double precision "
4432 "REAL argument to %s intrinsic at %L",
4433 gfc_current_intrinsic
, &a
->where
))
4440 gfc_check_spread (gfc_expr
*source
, gfc_expr
*dim
, gfc_expr
*ncopies
)
4442 if (source
->rank
>= GFC_MAX_DIMENSIONS
)
4444 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
4445 "than rank %d", gfc_current_intrinsic_arg
[0]->name
,
4446 gfc_current_intrinsic
, &source
->where
, GFC_MAX_DIMENSIONS
);
4454 if (!dim_check (dim
, 1, false))
4457 /* dim_rank_check() does not apply here. */
4459 && dim
->expr_type
== EXPR_CONSTANT
4460 && (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
4461 || mpz_cmp_ui (dim
->value
.integer
, source
->rank
+ 1) > 0))
4463 gfc_error ("'%s' argument of '%s' intrinsic at %L is not a valid "
4464 "dimension index", gfc_current_intrinsic_arg
[1]->name
,
4465 gfc_current_intrinsic
, &dim
->where
);
4469 if (!type_check (ncopies
, 2, BT_INTEGER
))
4472 if (!scalar_check (ncopies
, 2))
4479 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
4483 gfc_check_fgetputc_sub (gfc_expr
*unit
, gfc_expr
*c
, gfc_expr
*status
)
4485 if (!type_check (unit
, 0, BT_INTEGER
))
4488 if (!scalar_check (unit
, 0))
4491 if (!type_check (c
, 1, BT_CHARACTER
))
4493 if (!kind_value_check (c
, 1, gfc_default_character_kind
))
4499 if (!type_check (status
, 2, BT_INTEGER
)
4500 || !kind_value_check (status
, 2, gfc_default_integer_kind
)
4501 || !scalar_check (status
, 2))
4509 gfc_check_fgetputc (gfc_expr
*unit
, gfc_expr
*c
)
4511 return gfc_check_fgetputc_sub (unit
, c
, NULL
);
4516 gfc_check_fgetput_sub (gfc_expr
*c
, gfc_expr
*status
)
4518 if (!type_check (c
, 0, BT_CHARACTER
))
4520 if (!kind_value_check (c
, 0, gfc_default_character_kind
))
4526 if (!type_check (status
, 1, BT_INTEGER
)
4527 || !kind_value_check (status
, 1, gfc_default_integer_kind
)
4528 || !scalar_check (status
, 1))
4536 gfc_check_fgetput (gfc_expr
*c
)
4538 return gfc_check_fgetput_sub (c
, NULL
);
4543 gfc_check_fseek_sub (gfc_expr
*unit
, gfc_expr
*offset
, gfc_expr
*whence
, gfc_expr
*status
)
4545 if (!type_check (unit
, 0, BT_INTEGER
))
4548 if (!scalar_check (unit
, 0))
4551 if (!type_check (offset
, 1, BT_INTEGER
))
4554 if (!scalar_check (offset
, 1))
4557 if (!type_check (whence
, 2, BT_INTEGER
))
4560 if (!scalar_check (whence
, 2))
4566 if (!type_check (status
, 3, BT_INTEGER
))
4569 if (!kind_value_check (status
, 3, 4))
4572 if (!scalar_check (status
, 3))
4581 gfc_check_fstat (gfc_expr
*unit
, gfc_expr
*array
)
4583 if (!type_check (unit
, 0, BT_INTEGER
))
4586 if (!scalar_check (unit
, 0))
4589 if (!type_check (array
, 1, BT_INTEGER
)
4590 || !kind_value_check (unit
, 0, gfc_default_integer_kind
))
4593 if (!array_check (array
, 1))
4601 gfc_check_fstat_sub (gfc_expr
*unit
, gfc_expr
*array
, gfc_expr
*status
)
4603 if (!type_check (unit
, 0, BT_INTEGER
))
4606 if (!scalar_check (unit
, 0))
4609 if (!type_check (array
, 1, BT_INTEGER
)
4610 || !kind_value_check (array
, 1, gfc_default_integer_kind
))
4613 if (!array_check (array
, 1))
4619 if (!type_check (status
, 2, BT_INTEGER
)
4620 || !kind_value_check (status
, 2, gfc_default_integer_kind
))
4623 if (!scalar_check (status
, 2))
4631 gfc_check_ftell (gfc_expr
*unit
)
4633 if (!type_check (unit
, 0, BT_INTEGER
))
4636 if (!scalar_check (unit
, 0))
4644 gfc_check_ftell_sub (gfc_expr
*unit
, gfc_expr
*offset
)
4646 if (!type_check (unit
, 0, BT_INTEGER
))
4649 if (!scalar_check (unit
, 0))
4652 if (!type_check (offset
, 1, BT_INTEGER
))
4655 if (!scalar_check (offset
, 1))
4663 gfc_check_stat (gfc_expr
*name
, gfc_expr
*array
)
4665 if (!type_check (name
, 0, BT_CHARACTER
))
4667 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
4670 if (!type_check (array
, 1, BT_INTEGER
)
4671 || !kind_value_check (array
, 1, gfc_default_integer_kind
))
4674 if (!array_check (array
, 1))
4682 gfc_check_stat_sub (gfc_expr
*name
, gfc_expr
*array
, gfc_expr
*status
)
4684 if (!type_check (name
, 0, BT_CHARACTER
))
4686 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
4689 if (!type_check (array
, 1, BT_INTEGER
)
4690 || !kind_value_check (array
, 1, gfc_default_integer_kind
))
4693 if (!array_check (array
, 1))
4699 if (!type_check (status
, 2, BT_INTEGER
)
4700 || !kind_value_check (array
, 1, gfc_default_integer_kind
))
4703 if (!scalar_check (status
, 2))
4711 gfc_check_image_index (gfc_expr
*coarray
, gfc_expr
*sub
)
4715 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
4717 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4721 if (!coarray_check (coarray
, 0))
4726 gfc_error ("%s argument to IMAGE_INDEX must be a rank one array at %L",
4727 gfc_current_intrinsic_arg
[1]->name
, &sub
->where
);
4731 if (gfc_array_size (sub
, &nelems
))
4733 int corank
= gfc_get_corank (coarray
);
4735 if (mpz_cmp_ui (nelems
, corank
) != 0)
4737 gfc_error ("The number of array elements of the SUB argument to "
4738 "IMAGE_INDEX at %L shall be %d (corank) not %d",
4739 &sub
->where
, corank
, (int) mpz_get_si (nelems
));
4751 gfc_check_num_images (gfc_expr
*distance
, gfc_expr
*failed
)
4753 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
4755 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4761 if (!type_check (distance
, 0, BT_INTEGER
))
4764 if (!nonnegative_check ("DISTANCE", distance
))
4767 if (!scalar_check (distance
, 0))
4770 if (!gfc_notify_std (GFC_STD_F2008_TS
, "DISTANCE= argument to "
4771 "NUM_IMAGES at %L", &distance
->where
))
4777 if (!type_check (failed
, 1, BT_LOGICAL
))
4780 if (!scalar_check (failed
, 1))
4783 if (!gfc_notify_std (GFC_STD_F2008_TS
, "FAILED= argument to "
4784 "NUM_IMAGES at %L", &distance
->where
))
4793 gfc_check_this_image (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*distance
)
4795 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
4797 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4801 if (coarray
== NULL
&& dim
== NULL
&& distance
== NULL
)
4804 if (dim
!= NULL
&& coarray
== NULL
)
4806 gfc_error ("DIM argument without COARRAY argument not allowed for "
4807 "THIS_IMAGE intrinsic at %L", &dim
->where
);
4811 if (distance
&& (coarray
|| dim
))
4813 gfc_error ("The DISTANCE argument may not be specified together with the "
4814 "COARRAY or DIM argument in intrinsic at %L",
4819 /* Assume that we have "this_image (distance)". */
4820 if (coarray
&& !gfc_is_coarray (coarray
) && coarray
->ts
.type
== BT_INTEGER
)
4824 gfc_error ("Unexpected DIM argument with noncoarray argument at %L",
4833 if (!type_check (distance
, 2, BT_INTEGER
))
4836 if (!nonnegative_check ("DISTANCE", distance
))
4839 if (!scalar_check (distance
, 2))
4842 if (!gfc_notify_std (GFC_STD_F2008_TS
, "DISTANCE= argument to "
4843 "THIS_IMAGE at %L", &distance
->where
))
4849 if (!coarray_check (coarray
, 0))
4854 if (!dim_check (dim
, 1, false))
4857 if (!dim_corank_check (dim
, coarray
))
4864 /* Calculate the sizes for transfer, used by gfc_check_transfer and also
4865 by gfc_simplify_transfer. Return false if we cannot do so. */
4868 gfc_calculate_transfer_sizes (gfc_expr
*source
, gfc_expr
*mold
, gfc_expr
*size
,
4869 size_t *source_size
, size_t *result_size
,
4870 size_t *result_length_p
)
4872 size_t result_elt_size
;
4874 if (source
->expr_type
== EXPR_FUNCTION
)
4877 if (size
&& size
->expr_type
!= EXPR_CONSTANT
)
4880 /* Calculate the size of the source. */
4881 *source_size
= gfc_target_expr_size (source
);
4882 if (*source_size
== 0)
4885 /* Determine the size of the element. */
4886 result_elt_size
= gfc_element_size (mold
);
4887 if (result_elt_size
== 0)
4890 if (mold
->expr_type
== EXPR_ARRAY
|| mold
->rank
|| size
)
4895 result_length
= (size_t)mpz_get_ui (size
->value
.integer
);
4898 result_length
= *source_size
/ result_elt_size
;
4899 if (result_length
* result_elt_size
< *source_size
)
4903 *result_size
= result_length
* result_elt_size
;
4904 if (result_length_p
)
4905 *result_length_p
= result_length
;
4908 *result_size
= result_elt_size
;
4915 gfc_check_transfer (gfc_expr
*source
, gfc_expr
*mold
, gfc_expr
*size
)
4920 if (mold
->ts
.type
== BT_HOLLERITH
)
4922 gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
4923 &mold
->where
, gfc_basic_typename (BT_HOLLERITH
));
4929 if (!type_check (size
, 2, BT_INTEGER
))
4932 if (!scalar_check (size
, 2))
4935 if (!nonoptional_check (size
, 2))
4939 if (!gfc_option
.warn_surprising
)
4942 /* If we can't calculate the sizes, we cannot check any more.
4943 Return true for that case. */
4945 if (!gfc_calculate_transfer_sizes (source
, mold
, size
, &source_size
,
4946 &result_size
, NULL
))
4949 if (source_size
< result_size
)
4950 gfc_warning("Intrinsic TRANSFER at %L has partly undefined result: "
4951 "source size %ld < result size %ld", &source
->where
,
4952 (long) source_size
, (long) result_size
);
4959 gfc_check_transpose (gfc_expr
*matrix
)
4961 if (!rank_check (matrix
, 0, 2))
4969 gfc_check_ubound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
4971 if (!array_check (array
, 0))
4974 if (!dim_check (dim
, 1, false))
4977 if (!dim_rank_check (dim
, array
, 0))
4980 if (!kind_check (kind
, 2, BT_INTEGER
))
4982 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
4983 "with KIND argument at %L",
4984 gfc_current_intrinsic
, &kind
->where
))
4992 gfc_check_ucobound (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*kind
)
4994 if (gfc_option
.coarray
== GFC_FCOARRAY_NONE
)
4996 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
5000 if (!coarray_check (coarray
, 0))
5005 if (!dim_check (dim
, 1, false))
5008 if (!dim_corank_check (dim
, coarray
))
5012 if (!kind_check (kind
, 2, BT_INTEGER
))
5020 gfc_check_unpack (gfc_expr
*vector
, gfc_expr
*mask
, gfc_expr
*field
)
5024 if (!rank_check (vector
, 0, 1))
5027 if (!array_check (mask
, 1))
5030 if (!type_check (mask
, 1, BT_LOGICAL
))
5033 if (!same_type_check (vector
, 0, field
, 2))
5036 if (mask
->expr_type
== EXPR_ARRAY
5037 && gfc_array_size (vector
, &vector_size
))
5039 int mask_true_count
= 0;
5040 gfc_constructor
*mask_ctor
;
5041 mask_ctor
= gfc_constructor_first (mask
->value
.constructor
);
5044 if (mask_ctor
->expr
->expr_type
!= EXPR_CONSTANT
)
5046 mask_true_count
= 0;
5050 if (mask_ctor
->expr
->value
.logical
)
5053 mask_ctor
= gfc_constructor_next (mask_ctor
);
5056 if (mpz_get_si (vector_size
) < mask_true_count
)
5058 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
5059 "provide at least as many elements as there "
5060 "are .TRUE. values in '%s' (%ld/%d)",
5061 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
5062 &vector
->where
, gfc_current_intrinsic_arg
[1]->name
,
5063 mpz_get_si (vector_size
), mask_true_count
);
5067 mpz_clear (vector_size
);
5070 if (mask
->rank
!= field
->rank
&& field
->rank
!= 0)
5072 gfc_error ("'%s' argument of '%s' intrinsic at %L must have "
5073 "the same rank as '%s' or be a scalar",
5074 gfc_current_intrinsic_arg
[2]->name
, gfc_current_intrinsic
,
5075 &field
->where
, gfc_current_intrinsic_arg
[1]->name
);
5079 if (mask
->rank
== field
->rank
)
5082 for (i
= 0; i
< field
->rank
; i
++)
5083 if (! identical_dimen_shape (mask
, i
, field
, i
))
5085 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L "
5086 "must have identical shape.",
5087 gfc_current_intrinsic_arg
[2]->name
,
5088 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
5098 gfc_check_verify (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
5100 if (!type_check (x
, 0, BT_CHARACTER
))
5103 if (!same_type_check (x
, 0, y
, 1))
5106 if (z
!= NULL
&& !type_check (z
, 2, BT_LOGICAL
))
5109 if (!kind_check (kind
, 3, BT_INTEGER
))
5111 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "'%s' intrinsic "
5112 "with KIND argument at %L",
5113 gfc_current_intrinsic
, &kind
->where
))
5121 gfc_check_trim (gfc_expr
*x
)
5123 if (!type_check (x
, 0, BT_CHARACTER
))
5126 if (!scalar_check (x
, 0))
5134 gfc_check_ttynam (gfc_expr
*unit
)
5136 if (!scalar_check (unit
, 0))
5139 if (!type_check (unit
, 0, BT_INTEGER
))
5146 /* Common check function for the half a dozen intrinsics that have a
5147 single real argument. */
5150 gfc_check_x (gfc_expr
*x
)
5152 if (!type_check (x
, 0, BT_REAL
))
5159 /************* Check functions for intrinsic subroutines *************/
5162 gfc_check_cpu_time (gfc_expr
*time
)
5164 if (!scalar_check (time
, 0))
5167 if (!type_check (time
, 0, BT_REAL
))
5170 if (!variable_check (time
, 0, false))
5178 gfc_check_date_and_time (gfc_expr
*date
, gfc_expr
*time
,
5179 gfc_expr
*zone
, gfc_expr
*values
)
5183 if (!type_check (date
, 0, BT_CHARACTER
))
5185 if (!kind_value_check (date
, 0, gfc_default_character_kind
))
5187 if (!scalar_check (date
, 0))
5189 if (!variable_check (date
, 0, false))
5195 if (!type_check (time
, 1, BT_CHARACTER
))
5197 if (!kind_value_check (time
, 1, gfc_default_character_kind
))
5199 if (!scalar_check (time
, 1))
5201 if (!variable_check (time
, 1, false))
5207 if (!type_check (zone
, 2, BT_CHARACTER
))
5209 if (!kind_value_check (zone
, 2, gfc_default_character_kind
))
5211 if (!scalar_check (zone
, 2))
5213 if (!variable_check (zone
, 2, false))
5219 if (!type_check (values
, 3, BT_INTEGER
))
5221 if (!array_check (values
, 3))
5223 if (!rank_check (values
, 3, 1))
5225 if (!variable_check (values
, 3, false))
5234 gfc_check_mvbits (gfc_expr
*from
, gfc_expr
*frompos
, gfc_expr
*len
,
5235 gfc_expr
*to
, gfc_expr
*topos
)
5237 if (!type_check (from
, 0, BT_INTEGER
))
5240 if (!type_check (frompos
, 1, BT_INTEGER
))
5243 if (!type_check (len
, 2, BT_INTEGER
))
5246 if (!same_type_check (from
, 0, to
, 3))
5249 if (!variable_check (to
, 3, false))
5252 if (!type_check (topos
, 4, BT_INTEGER
))
5255 if (!nonnegative_check ("frompos", frompos
))
5258 if (!nonnegative_check ("topos", topos
))
5261 if (!nonnegative_check ("len", len
))
5264 if (!less_than_bitsize2 ("from", from
, "frompos", frompos
, "len", len
))
5267 if (!less_than_bitsize2 ("to", to
, "topos", topos
, "len", len
))
5275 gfc_check_random_number (gfc_expr
*harvest
)
5277 if (!type_check (harvest
, 0, BT_REAL
))
5280 if (!variable_check (harvest
, 0, false))
5288 gfc_check_random_seed (gfc_expr
*size
, gfc_expr
*put
, gfc_expr
*get
)
5290 unsigned int nargs
= 0, kiss_size
;
5291 locus
*where
= NULL
;
5292 mpz_t put_size
, get_size
;
5293 bool have_gfc_real_16
; /* Try and mimic HAVE_GFC_REAL_16 in libgfortran. */
5295 have_gfc_real_16
= gfc_validate_kind (BT_REAL
, 16, true) != -1;
5297 /* Keep the number of bytes in sync with kiss_size in
5298 libgfortran/intrinsics/random.c. */
5299 kiss_size
= (have_gfc_real_16
? 48 : 32) / gfc_default_integer_kind
;
5303 if (size
->expr_type
!= EXPR_VARIABLE
5304 || !size
->symtree
->n
.sym
->attr
.optional
)
5307 if (!scalar_check (size
, 0))
5310 if (!type_check (size
, 0, BT_INTEGER
))
5313 if (!variable_check (size
, 0, false))
5316 if (!kind_value_check (size
, 0, gfc_default_integer_kind
))
5322 if (put
->expr_type
!= EXPR_VARIABLE
5323 || !put
->symtree
->n
.sym
->attr
.optional
)
5326 where
= &put
->where
;
5329 if (!array_check (put
, 1))
5332 if (!rank_check (put
, 1, 1))
5335 if (!type_check (put
, 1, BT_INTEGER
))
5338 if (!kind_value_check (put
, 1, gfc_default_integer_kind
))
5341 if (gfc_array_size (put
, &put_size
)
5342 && mpz_get_ui (put_size
) < kiss_size
)
5343 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
5344 "too small (%i/%i)",
5345 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
5346 where
, (int) mpz_get_ui (put_size
), kiss_size
);
5351 if (get
->expr_type
!= EXPR_VARIABLE
5352 || !get
->symtree
->n
.sym
->attr
.optional
)
5355 where
= &get
->where
;
5358 if (!array_check (get
, 2))
5361 if (!rank_check (get
, 2, 1))
5364 if (!type_check (get
, 2, BT_INTEGER
))
5367 if (!variable_check (get
, 2, false))
5370 if (!kind_value_check (get
, 2, gfc_default_integer_kind
))
5373 if (gfc_array_size (get
, &get_size
)
5374 && mpz_get_ui (get_size
) < kiss_size
)
5375 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
5376 "too small (%i/%i)",
5377 gfc_current_intrinsic_arg
[2]->name
, gfc_current_intrinsic
,
5378 where
, (int) mpz_get_ui (get_size
), kiss_size
);
5381 /* RANDOM_SEED may not have more than one non-optional argument. */
5383 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
, where
);
5390 gfc_check_second_sub (gfc_expr
*time
)
5392 if (!scalar_check (time
, 0))
5395 if (!type_check (time
, 0, BT_REAL
))
5398 if (!kind_value_check (time
, 0, 4))
5405 /* COUNT and COUNT_MAX of SYSTEM_CLOCK are scalar, default-kind integer
5406 variables in Fortran 95. In Fortran 2003 and later, they can be of any
5407 kind, and COUNT_RATE can be of type real. Note, count, count_rate, and
5408 count_max are all optional arguments */
5411 gfc_check_system_clock (gfc_expr
*count
, gfc_expr
*count_rate
,
5412 gfc_expr
*count_max
)
5416 if (!scalar_check (count
, 0))
5419 if (!type_check (count
, 0, BT_INTEGER
))
5422 if (count
->ts
.kind
!= gfc_default_integer_kind
5423 && !gfc_notify_std (GFC_STD_F2003
, "COUNT argument to "
5424 "SYSTEM_CLOCK at %L has non-default kind",
5428 if (!variable_check (count
, 0, false))
5432 if (count_rate
!= NULL
)
5434 if (!scalar_check (count_rate
, 1))
5437 if (!variable_check (count_rate
, 1, false))
5440 if (count_rate
->ts
.type
== BT_REAL
)
5442 if (!gfc_notify_std (GFC_STD_F2003
, "Real COUNT_RATE argument to "
5443 "SYSTEM_CLOCK at %L", &count_rate
->where
))
5448 if (!type_check (count_rate
, 1, BT_INTEGER
))
5451 if (count_rate
->ts
.kind
!= gfc_default_integer_kind
5452 && !gfc_notify_std (GFC_STD_F2003
, "COUNT_RATE argument to "
5453 "SYSTEM_CLOCK at %L has non-default kind",
5454 &count_rate
->where
))
5460 if (count_max
!= NULL
)
5462 if (!scalar_check (count_max
, 2))
5465 if (!type_check (count_max
, 2, BT_INTEGER
))
5468 if (count_max
->ts
.kind
!= gfc_default_integer_kind
5469 && !gfc_notify_std (GFC_STD_F2003
, "COUNT_MAX argument to "
5470 "SYSTEM_CLOCK at %L has non-default kind",
5474 if (!variable_check (count_max
, 2, false))
5483 gfc_check_irand (gfc_expr
*x
)
5488 if (!scalar_check (x
, 0))
5491 if (!type_check (x
, 0, BT_INTEGER
))
5494 if (!kind_value_check (x
, 0, 4))
5502 gfc_check_alarm_sub (gfc_expr
*seconds
, gfc_expr
*handler
, gfc_expr
*status
)
5504 if (!scalar_check (seconds
, 0))
5506 if (!type_check (seconds
, 0, BT_INTEGER
))
5509 if (!int_or_proc_check (handler
, 1))
5511 if (handler
->ts
.type
== BT_INTEGER
&& !scalar_check (handler
, 1))
5517 if (!scalar_check (status
, 2))
5519 if (!type_check (status
, 2, BT_INTEGER
))
5521 if (!kind_value_check (status
, 2, gfc_default_integer_kind
))
5529 gfc_check_rand (gfc_expr
*x
)
5534 if (!scalar_check (x
, 0))
5537 if (!type_check (x
, 0, BT_INTEGER
))
5540 if (!kind_value_check (x
, 0, 4))
5548 gfc_check_srand (gfc_expr
*x
)
5550 if (!scalar_check (x
, 0))
5553 if (!type_check (x
, 0, BT_INTEGER
))
5556 if (!kind_value_check (x
, 0, 4))
5564 gfc_check_ctime_sub (gfc_expr
*time
, gfc_expr
*result
)
5566 if (!scalar_check (time
, 0))
5568 if (!type_check (time
, 0, BT_INTEGER
))
5571 if (!type_check (result
, 1, BT_CHARACTER
))
5573 if (!kind_value_check (result
, 1, gfc_default_character_kind
))
5581 gfc_check_dtime_etime (gfc_expr
*x
)
5583 if (!array_check (x
, 0))
5586 if (!rank_check (x
, 0, 1))
5589 if (!variable_check (x
, 0, false))
5592 if (!type_check (x
, 0, BT_REAL
))
5595 if (!kind_value_check (x
, 0, 4))
5603 gfc_check_dtime_etime_sub (gfc_expr
*values
, gfc_expr
*time
)
5605 if (!array_check (values
, 0))
5608 if (!rank_check (values
, 0, 1))
5611 if (!variable_check (values
, 0, false))
5614 if (!type_check (values
, 0, BT_REAL
))
5617 if (!kind_value_check (values
, 0, 4))
5620 if (!scalar_check (time
, 1))
5623 if (!type_check (time
, 1, BT_REAL
))
5626 if (!kind_value_check (time
, 1, 4))
5634 gfc_check_fdate_sub (gfc_expr
*date
)
5636 if (!type_check (date
, 0, BT_CHARACTER
))
5638 if (!kind_value_check (date
, 0, gfc_default_character_kind
))
5646 gfc_check_gerror (gfc_expr
*msg
)
5648 if (!type_check (msg
, 0, BT_CHARACTER
))
5650 if (!kind_value_check (msg
, 0, gfc_default_character_kind
))
5658 gfc_check_getcwd_sub (gfc_expr
*cwd
, gfc_expr
*status
)
5660 if (!type_check (cwd
, 0, BT_CHARACTER
))
5662 if (!kind_value_check (cwd
, 0, gfc_default_character_kind
))
5668 if (!scalar_check (status
, 1))
5671 if (!type_check (status
, 1, BT_INTEGER
))
5679 gfc_check_getarg (gfc_expr
*pos
, gfc_expr
*value
)
5681 if (!type_check (pos
, 0, BT_INTEGER
))
5684 if (pos
->ts
.kind
> gfc_default_integer_kind
)
5686 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
5687 "not wider than the default kind (%d)",
5688 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
5689 &pos
->where
, gfc_default_integer_kind
);
5693 if (!type_check (value
, 1, BT_CHARACTER
))
5695 if (!kind_value_check (value
, 1, gfc_default_character_kind
))
5703 gfc_check_getlog (gfc_expr
*msg
)
5705 if (!type_check (msg
, 0, BT_CHARACTER
))
5707 if (!kind_value_check (msg
, 0, gfc_default_character_kind
))
5715 gfc_check_exit (gfc_expr
*status
)
5720 if (!type_check (status
, 0, BT_INTEGER
))
5723 if (!scalar_check (status
, 0))
5731 gfc_check_flush (gfc_expr
*unit
)
5736 if (!type_check (unit
, 0, BT_INTEGER
))
5739 if (!scalar_check (unit
, 0))
5747 gfc_check_free (gfc_expr
*i
)
5749 if (!type_check (i
, 0, BT_INTEGER
))
5752 if (!scalar_check (i
, 0))
5760 gfc_check_hostnm (gfc_expr
*name
)
5762 if (!type_check (name
, 0, BT_CHARACTER
))
5764 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
5772 gfc_check_hostnm_sub (gfc_expr
*name
, gfc_expr
*status
)
5774 if (!type_check (name
, 0, BT_CHARACTER
))
5776 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
5782 if (!scalar_check (status
, 1))
5785 if (!type_check (status
, 1, BT_INTEGER
))
5793 gfc_check_itime_idate (gfc_expr
*values
)
5795 if (!array_check (values
, 0))
5798 if (!rank_check (values
, 0, 1))
5801 if (!variable_check (values
, 0, false))
5804 if (!type_check (values
, 0, BT_INTEGER
))
5807 if (!kind_value_check (values
, 0, gfc_default_integer_kind
))
5815 gfc_check_ltime_gmtime (gfc_expr
*time
, gfc_expr
*values
)
5817 if (!type_check (time
, 0, BT_INTEGER
))
5820 if (!kind_value_check (time
, 0, gfc_default_integer_kind
))
5823 if (!scalar_check (time
, 0))
5826 if (!array_check (values
, 1))
5829 if (!rank_check (values
, 1, 1))
5832 if (!variable_check (values
, 1, false))
5835 if (!type_check (values
, 1, BT_INTEGER
))
5838 if (!kind_value_check (values
, 1, gfc_default_integer_kind
))
5846 gfc_check_ttynam_sub (gfc_expr
*unit
, gfc_expr
*name
)
5848 if (!scalar_check (unit
, 0))
5851 if (!type_check (unit
, 0, BT_INTEGER
))
5854 if (!type_check (name
, 1, BT_CHARACTER
))
5856 if (!kind_value_check (name
, 1, gfc_default_character_kind
))
5864 gfc_check_isatty (gfc_expr
*unit
)
5869 if (!type_check (unit
, 0, BT_INTEGER
))
5872 if (!scalar_check (unit
, 0))
5880 gfc_check_isnan (gfc_expr
*x
)
5882 if (!type_check (x
, 0, BT_REAL
))
5890 gfc_check_perror (gfc_expr
*string
)
5892 if (!type_check (string
, 0, BT_CHARACTER
))
5894 if (!kind_value_check (string
, 0, gfc_default_character_kind
))
5902 gfc_check_umask (gfc_expr
*mask
)
5904 if (!type_check (mask
, 0, BT_INTEGER
))
5907 if (!scalar_check (mask
, 0))
5915 gfc_check_umask_sub (gfc_expr
*mask
, gfc_expr
*old
)
5917 if (!type_check (mask
, 0, BT_INTEGER
))
5920 if (!scalar_check (mask
, 0))
5926 if (!scalar_check (old
, 1))
5929 if (!type_check (old
, 1, BT_INTEGER
))
5937 gfc_check_unlink (gfc_expr
*name
)
5939 if (!type_check (name
, 0, BT_CHARACTER
))
5941 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
5949 gfc_check_unlink_sub (gfc_expr
*name
, gfc_expr
*status
)
5951 if (!type_check (name
, 0, BT_CHARACTER
))
5953 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
5959 if (!scalar_check (status
, 1))
5962 if (!type_check (status
, 1, BT_INTEGER
))
5970 gfc_check_signal (gfc_expr
*number
, gfc_expr
*handler
)
5972 if (!scalar_check (number
, 0))
5974 if (!type_check (number
, 0, BT_INTEGER
))
5977 if (!int_or_proc_check (handler
, 1))
5979 if (handler
->ts
.type
== BT_INTEGER
&& !scalar_check (handler
, 1))
5987 gfc_check_signal_sub (gfc_expr
*number
, gfc_expr
*handler
, gfc_expr
*status
)
5989 if (!scalar_check (number
, 0))
5991 if (!type_check (number
, 0, BT_INTEGER
))
5994 if (!int_or_proc_check (handler
, 1))
5996 if (handler
->ts
.type
== BT_INTEGER
&& !scalar_check (handler
, 1))
6002 if (!type_check (status
, 2, BT_INTEGER
))
6004 if (!scalar_check (status
, 2))
6012 gfc_check_system_sub (gfc_expr
*cmd
, gfc_expr
*status
)
6014 if (!type_check (cmd
, 0, BT_CHARACTER
))
6016 if (!kind_value_check (cmd
, 0, gfc_default_character_kind
))
6019 if (!scalar_check (status
, 1))
6022 if (!type_check (status
, 1, BT_INTEGER
))
6025 if (!kind_value_check (status
, 1, gfc_default_integer_kind
))
6032 /* This is used for the GNU intrinsics AND, OR and XOR. */
6034 gfc_check_and (gfc_expr
*i
, gfc_expr
*j
)
6036 if (i
->ts
.type
!= BT_INTEGER
&& i
->ts
.type
!= BT_LOGICAL
)
6038 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
6039 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
6040 gfc_current_intrinsic
, &i
->where
);
6044 if (j
->ts
.type
!= BT_INTEGER
&& j
->ts
.type
!= BT_LOGICAL
)
6046 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
6047 "or LOGICAL", gfc_current_intrinsic_arg
[1]->name
,
6048 gfc_current_intrinsic
, &j
->where
);
6052 if (i
->ts
.type
!= j
->ts
.type
)
6054 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
6055 "have the same type", gfc_current_intrinsic_arg
[0]->name
,
6056 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
6061 if (!scalar_check (i
, 0))
6064 if (!scalar_check (j
, 1))
6072 gfc_check_storage_size (gfc_expr
*a
, gfc_expr
*kind
)
6074 if (a
->ts
.type
== BT_ASSUMED
)
6076 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be TYPE(*)",
6077 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
6082 if (a
->ts
.type
== BT_PROCEDURE
)
6084 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be a "
6085 "procedure", gfc_current_intrinsic_arg
[0]->name
,
6086 gfc_current_intrinsic
, &a
->where
);
6093 if (!type_check (kind
, 1, BT_INTEGER
))
6096 if (!scalar_check (kind
, 1))
6099 if (kind
->expr_type
!= EXPR_CONSTANT
)
6101 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
6102 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,