2 Copyright (C) 2002-2017 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 ("%qs argument of %qs 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 ("%qs argument of %qs 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 /* Users sometime use a subroutine designator as an actual argument to
76 an intrinsic subprogram that expects an argument with a numeric type. */
77 if (e
->symtree
&& e
->symtree
->n
.sym
->attr
.subroutine
)
80 if (gfc_numeric_ts (&e
->ts
))
83 /* If the expression has not got a type, check if its namespace can
84 offer a default type. */
85 if ((e
->expr_type
== EXPR_VARIABLE
|| e
->expr_type
== EXPR_FUNCTION
)
86 && e
->symtree
->n
.sym
->ts
.type
== BT_UNKNOWN
87 && gfc_set_default_type (e
->symtree
->n
.sym
, 0, e
->symtree
->n
.sym
->ns
)
88 && gfc_numeric_ts (&e
->symtree
->n
.sym
->ts
))
90 e
->ts
= e
->symtree
->n
.sym
->ts
;
96 gfc_error ("%qs argument of %qs intrinsic at %L must have a numeric type",
97 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
104 /* Check that an expression is integer or real. */
107 int_or_real_check (gfc_expr
*e
, int n
)
109 if (e
->ts
.type
!= BT_INTEGER
&& e
->ts
.type
!= BT_REAL
)
111 gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER "
112 "or REAL", gfc_current_intrinsic_arg
[n
]->name
,
113 gfc_current_intrinsic
, &e
->where
);
121 /* Check that an expression is real or complex. */
124 real_or_complex_check (gfc_expr
*e
, int n
)
126 if (e
->ts
.type
!= BT_REAL
&& e
->ts
.type
!= BT_COMPLEX
)
128 gfc_error ("%qs argument of %qs intrinsic at %L must be REAL "
129 "or COMPLEX", gfc_current_intrinsic_arg
[n
]->name
,
130 gfc_current_intrinsic
, &e
->where
);
138 /* Check that an expression is INTEGER or PROCEDURE. */
141 int_or_proc_check (gfc_expr
*e
, int n
)
143 if (e
->ts
.type
!= BT_INTEGER
&& e
->ts
.type
!= BT_PROCEDURE
)
145 gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER "
146 "or PROCEDURE", gfc_current_intrinsic_arg
[n
]->name
,
147 gfc_current_intrinsic
, &e
->where
);
155 /* Check that the expression is an optional constant integer
156 and that it specifies a valid kind for that type. */
159 kind_check (gfc_expr
*k
, int n
, bt type
)
166 if (!type_check (k
, n
, BT_INTEGER
))
169 if (!scalar_check (k
, n
))
172 if (!gfc_check_init_expr (k
))
174 gfc_error ("%qs argument of %qs intrinsic at %L must be a constant",
175 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
180 if (gfc_extract_int (k
, &kind
) != NULL
181 || gfc_validate_kind (type
, kind
, true) < 0)
183 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type
),
192 /* Make sure the expression is a double precision real. */
195 double_check (gfc_expr
*d
, int n
)
197 if (!type_check (d
, n
, BT_REAL
))
200 if (d
->ts
.kind
!= gfc_default_double_kind
)
202 gfc_error ("%qs argument of %qs intrinsic at %L must be double "
203 "precision", gfc_current_intrinsic_arg
[n
]->name
,
204 gfc_current_intrinsic
, &d
->where
);
213 coarray_check (gfc_expr
*e
, int n
)
215 if (e
->ts
.type
== BT_CLASS
&& gfc_expr_attr (e
).class_ok
216 && CLASS_DATA (e
)->attr
.codimension
217 && CLASS_DATA (e
)->as
->corank
)
219 gfc_add_class_array_ref (e
);
223 if (!gfc_is_coarray (e
))
225 gfc_error ("Expected coarray variable as %qs argument to the %s "
226 "intrinsic at %L", gfc_current_intrinsic_arg
[n
]->name
,
227 gfc_current_intrinsic
, &e
->where
);
235 /* Make sure the expression is a logical array. */
238 logical_array_check (gfc_expr
*array
, int n
)
240 if (array
->ts
.type
!= BT_LOGICAL
|| array
->rank
== 0)
242 gfc_error ("%qs argument of %qs intrinsic at %L must be a logical "
243 "array", gfc_current_intrinsic_arg
[n
]->name
,
244 gfc_current_intrinsic
, &array
->where
);
252 /* Make sure an expression is an array. */
255 array_check (gfc_expr
*e
, int n
)
257 if (e
->ts
.type
== BT_CLASS
&& gfc_expr_attr (e
).class_ok
258 && CLASS_DATA (e
)->attr
.dimension
259 && CLASS_DATA (e
)->as
->rank
)
261 gfc_add_class_array_ref (e
);
265 if (e
->rank
!= 0 && e
->ts
.type
!= BT_PROCEDURE
)
268 gfc_error ("%qs argument of %qs intrinsic at %L must be an array",
269 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
276 /* If expr is a constant, then check to ensure that it is greater than
280 nonnegative_check (const char *arg
, gfc_expr
*expr
)
284 if (expr
->expr_type
== EXPR_CONSTANT
)
286 gfc_extract_int (expr
, &i
);
289 gfc_error ("%qs at %L must be nonnegative", arg
, &expr
->where
);
298 /* If expr2 is constant, then check that the value is less than
299 (less than or equal to, if 'or_equal' is true) bit_size(expr1). */
302 less_than_bitsize1 (const char *arg1
, gfc_expr
*expr1
, const char *arg2
,
303 gfc_expr
*expr2
, bool or_equal
)
307 if (expr2
->expr_type
== EXPR_CONSTANT
)
309 gfc_extract_int (expr2
, &i2
);
310 i3
= gfc_validate_kind (BT_INTEGER
, expr1
->ts
.kind
, false);
312 /* For ISHFT[C], check that |shift| <= bit_size(i). */
318 if (i2
> gfc_integer_kinds
[i3
].bit_size
)
320 gfc_error ("The absolute value of SHIFT at %L must be less "
321 "than or equal to BIT_SIZE(%qs)",
322 &expr2
->where
, arg1
);
329 if (i2
> gfc_integer_kinds
[i3
].bit_size
)
331 gfc_error ("%qs at %L must be less than "
332 "or equal to BIT_SIZE(%qs)",
333 arg2
, &expr2
->where
, arg1
);
339 if (i2
>= gfc_integer_kinds
[i3
].bit_size
)
341 gfc_error ("%qs at %L must be less than BIT_SIZE(%qs)",
342 arg2
, &expr2
->where
, arg1
);
352 /* If expr is constant, then check that the value is less than or equal
353 to the bit_size of the kind k. */
356 less_than_bitsizekind (const char *arg
, gfc_expr
*expr
, int k
)
360 if (expr
->expr_type
!= EXPR_CONSTANT
)
363 i
= gfc_validate_kind (BT_INTEGER
, k
, false);
364 gfc_extract_int (expr
, &val
);
366 if (val
> gfc_integer_kinds
[i
].bit_size
)
368 gfc_error ("%qs at %L must be less than or equal to the BIT_SIZE of "
369 "INTEGER(KIND=%d)", arg
, &expr
->where
, k
);
377 /* If expr2 and expr3 are constants, then check that the value is less than
378 or equal to bit_size(expr1). */
381 less_than_bitsize2 (const char *arg1
, gfc_expr
*expr1
, const char *arg2
,
382 gfc_expr
*expr2
, const char *arg3
, gfc_expr
*expr3
)
386 if (expr2
->expr_type
== EXPR_CONSTANT
&& expr3
->expr_type
== EXPR_CONSTANT
)
388 gfc_extract_int (expr2
, &i2
);
389 gfc_extract_int (expr3
, &i3
);
391 i3
= gfc_validate_kind (BT_INTEGER
, expr1
->ts
.kind
, false);
392 if (i2
> gfc_integer_kinds
[i3
].bit_size
)
394 gfc_error ("%<%s + %s%> at %L must be less than or equal "
396 arg2
, arg3
, &expr2
->where
, arg1
);
404 /* Make sure two expressions have the same type. */
407 same_type_check (gfc_expr
*e
, int n
, gfc_expr
*f
, int m
)
409 gfc_typespec
*ets
= &e
->ts
;
410 gfc_typespec
*fts
= &f
->ts
;
412 if (e
->ts
.type
== BT_PROCEDURE
&& e
->symtree
->n
.sym
)
413 ets
= &e
->symtree
->n
.sym
->ts
;
414 if (f
->ts
.type
== BT_PROCEDURE
&& f
->symtree
->n
.sym
)
415 fts
= &f
->symtree
->n
.sym
->ts
;
417 if (gfc_compare_types (ets
, fts
))
420 gfc_error ("%qs argument of %qs intrinsic at %L must be the same type "
421 "and kind as %qs", gfc_current_intrinsic_arg
[m
]->name
,
422 gfc_current_intrinsic
, &f
->where
,
423 gfc_current_intrinsic_arg
[n
]->name
);
429 /* Make sure that an expression has a certain (nonzero) rank. */
432 rank_check (gfc_expr
*e
, int n
, int rank
)
437 gfc_error ("%qs argument of %qs intrinsic at %L must be of rank %d",
438 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
445 /* Make sure a variable expression is not an optional dummy argument. */
448 nonoptional_check (gfc_expr
*e
, int n
)
450 if (e
->expr_type
== EXPR_VARIABLE
&& e
->symtree
->n
.sym
->attr
.optional
)
452 gfc_error ("%qs argument of %qs intrinsic at %L must not be OPTIONAL",
453 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
457 /* TODO: Recursive check on nonoptional variables? */
463 /* Check for ALLOCATABLE attribute. */
466 allocatable_check (gfc_expr
*e
, int n
)
468 symbol_attribute attr
;
470 attr
= gfc_variable_attr (e
, NULL
);
471 if (!attr
.allocatable
|| attr
.associate_var
)
473 gfc_error ("%qs argument of %qs intrinsic at %L must be ALLOCATABLE",
474 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
483 /* Check that an expression has a particular kind. */
486 kind_value_check (gfc_expr
*e
, int n
, int k
)
491 gfc_error ("%qs argument of %qs intrinsic at %L must be of kind %d",
492 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
499 /* Make sure an expression is a variable. */
502 variable_check (gfc_expr
*e
, int n
, bool allow_proc
)
504 if (e
->expr_type
== EXPR_VARIABLE
505 && e
->symtree
->n
.sym
->attr
.intent
== INTENT_IN
506 && (gfc_current_intrinsic_arg
[n
]->intent
== INTENT_OUT
507 || gfc_current_intrinsic_arg
[n
]->intent
== INTENT_INOUT
))
510 bool pointer
= e
->symtree
->n
.sym
->ts
.type
== BT_CLASS
511 && CLASS_DATA (e
->symtree
->n
.sym
)
512 ? CLASS_DATA (e
->symtree
->n
.sym
)->attr
.class_pointer
513 : e
->symtree
->n
.sym
->attr
.pointer
;
515 for (ref
= e
->ref
; ref
; ref
= ref
->next
)
517 if (pointer
&& ref
->type
== REF_COMPONENT
)
519 if (ref
->type
== REF_COMPONENT
520 && ((ref
->u
.c
.component
->ts
.type
== BT_CLASS
521 && CLASS_DATA (ref
->u
.c
.component
)->attr
.class_pointer
)
522 || (ref
->u
.c
.component
->ts
.type
!= BT_CLASS
523 && ref
->u
.c
.component
->attr
.pointer
)))
529 gfc_error ("%qs argument of %qs intrinsic at %L cannot be "
530 "INTENT(IN)", gfc_current_intrinsic_arg
[n
]->name
,
531 gfc_current_intrinsic
, &e
->where
);
536 if (e
->expr_type
== EXPR_VARIABLE
537 && e
->symtree
->n
.sym
->attr
.flavor
!= FL_PARAMETER
538 && (allow_proc
|| !e
->symtree
->n
.sym
->attr
.function
))
541 if (e
->expr_type
== EXPR_VARIABLE
&& e
->symtree
->n
.sym
->attr
.function
542 && e
->symtree
->n
.sym
== e
->symtree
->n
.sym
->result
)
545 for (ns
= gfc_current_ns
; ns
; ns
= ns
->parent
)
546 if (ns
->proc_name
== e
->symtree
->n
.sym
)
550 gfc_error ("%qs argument of %qs intrinsic at %L must be a variable",
551 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
, &e
->where
);
557 /* Check the common DIM parameter for correctness. */
560 dim_check (gfc_expr
*dim
, int n
, bool optional
)
565 if (!type_check (dim
, n
, BT_INTEGER
))
568 if (!scalar_check (dim
, n
))
571 if (!optional
&& !nonoptional_check (dim
, n
))
578 /* If a coarray DIM parameter is a constant, make sure that it is greater than
579 zero and less than or equal to the corank of the given array. */
582 dim_corank_check (gfc_expr
*dim
, gfc_expr
*array
)
586 gcc_assert (array
->expr_type
== EXPR_VARIABLE
);
588 if (dim
->expr_type
!= EXPR_CONSTANT
)
591 if (array
->ts
.type
== BT_CLASS
)
594 corank
= gfc_get_corank (array
);
596 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
597 || mpz_cmp_ui (dim
->value
.integer
, corank
) > 0)
599 gfc_error ("%<dim%> argument of %qs intrinsic at %L is not a valid "
600 "codimension index", gfc_current_intrinsic
, &dim
->where
);
609 /* If a DIM parameter is a constant, make sure that it is greater than
610 zero and less than or equal to the rank of the given array. If
611 allow_assumed is zero then dim must be less than the rank of the array
612 for assumed size arrays. */
615 dim_rank_check (gfc_expr
*dim
, gfc_expr
*array
, int allow_assumed
)
623 if (dim
->expr_type
!= EXPR_CONSTANT
)
626 if (array
->expr_type
== EXPR_FUNCTION
&& array
->value
.function
.isym
627 && array
->value
.function
.isym
->id
== GFC_ISYM_SPREAD
)
628 rank
= array
->rank
+ 1;
632 /* Assumed-rank array. */
634 rank
= GFC_MAX_DIMENSIONS
;
636 if (array
->expr_type
== EXPR_VARIABLE
)
638 ar
= gfc_find_array_ref (array
);
639 if (ar
->as
->type
== AS_ASSUMED_SIZE
641 && ar
->type
!= AR_ELEMENT
642 && ar
->type
!= AR_SECTION
)
646 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
647 || mpz_cmp_ui (dim
->value
.integer
, rank
) > 0)
649 gfc_error ("%<dim%> argument of %qs intrinsic at %L is not a valid "
650 "dimension index", gfc_current_intrinsic
, &dim
->where
);
659 /* Compare the size of a along dimension ai with the size of b along
660 dimension bi, returning 0 if they are known not to be identical,
661 and 1 if they are identical, or if this cannot be determined. */
664 identical_dimen_shape (gfc_expr
*a
, int ai
, gfc_expr
*b
, int bi
)
666 mpz_t a_size
, b_size
;
669 gcc_assert (a
->rank
> ai
);
670 gcc_assert (b
->rank
> bi
);
674 if (gfc_array_dimen_size (a
, ai
, &a_size
))
676 if (gfc_array_dimen_size (b
, bi
, &b_size
))
678 if (mpz_cmp (a_size
, b_size
) != 0)
688 /* Calculate the length of a character variable, including substrings.
689 Strip away parentheses if necessary. Return -1 if no length could
693 gfc_var_strlen (const gfc_expr
*a
)
697 while (a
->expr_type
== EXPR_OP
&& a
->value
.op
.op
== INTRINSIC_PARENTHESES
)
700 for (ra
= a
->ref
; ra
!= NULL
&& ra
->type
!= REF_SUBSTRING
; ra
= ra
->next
)
710 if ((!ra
->u
.ss
.start
|| ra
->u
.ss
.start
->expr_type
== EXPR_CONSTANT
)
711 && ra
->u
.ss
.end
->expr_type
== EXPR_CONSTANT
)
713 start_a
= ra
->u
.ss
.start
? mpz_get_si (ra
->u
.ss
.start
->value
.integer
)
715 end_a
= mpz_get_si (ra
->u
.ss
.end
->value
.integer
);
716 return (end_a
< start_a
) ? 0 : end_a
- start_a
+ 1;
718 else if (ra
->u
.ss
.start
719 && gfc_dep_compare_expr (ra
->u
.ss
.start
, ra
->u
.ss
.end
) == 0)
725 if (a
->ts
.u
.cl
&& a
->ts
.u
.cl
->length
726 && a
->ts
.u
.cl
->length
->expr_type
== EXPR_CONSTANT
)
727 return mpz_get_si (a
->ts
.u
.cl
->length
->value
.integer
);
728 else if (a
->expr_type
== EXPR_CONSTANT
729 && (a
->ts
.u
.cl
== NULL
|| a
->ts
.u
.cl
->length
== NULL
))
730 return a
->value
.character
.length
;
736 /* Check whether two character expressions have the same length;
737 returns true if they have or if the length cannot be determined,
738 otherwise return false and raise a gfc_error. */
741 gfc_check_same_strlen (const gfc_expr
*a
, const gfc_expr
*b
, const char *name
)
745 len_a
= gfc_var_strlen(a
);
746 len_b
= gfc_var_strlen(b
);
748 if (len_a
== -1 || len_b
== -1 || len_a
== len_b
)
752 gfc_error ("Unequal character lengths (%ld/%ld) in %s at %L",
753 len_a
, len_b
, name
, &a
->where
);
759 /***** Check functions *****/
761 /* Check subroutine suitable for intrinsics taking a real argument and
762 a kind argument for the result. */
765 check_a_kind (gfc_expr
*a
, gfc_expr
*kind
, bt type
)
767 if (!type_check (a
, 0, BT_REAL
))
769 if (!kind_check (kind
, 1, type
))
776 /* Check subroutine suitable for ceiling, floor and nint. */
779 gfc_check_a_ikind (gfc_expr
*a
, gfc_expr
*kind
)
781 return check_a_kind (a
, kind
, BT_INTEGER
);
785 /* Check subroutine suitable for aint, anint. */
788 gfc_check_a_xkind (gfc_expr
*a
, gfc_expr
*kind
)
790 return check_a_kind (a
, kind
, BT_REAL
);
795 gfc_check_abs (gfc_expr
*a
)
797 if (!numeric_check (a
, 0))
805 gfc_check_achar (gfc_expr
*a
, gfc_expr
*kind
)
807 if (!type_check (a
, 0, BT_INTEGER
))
809 if (!kind_check (kind
, 1, BT_CHARACTER
))
817 gfc_check_access_func (gfc_expr
*name
, gfc_expr
*mode
)
819 if (!type_check (name
, 0, BT_CHARACTER
)
820 || !scalar_check (name
, 0))
822 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
825 if (!type_check (mode
, 1, BT_CHARACTER
)
826 || !scalar_check (mode
, 1))
828 if (!kind_value_check (mode
, 1, gfc_default_character_kind
))
836 gfc_check_all_any (gfc_expr
*mask
, gfc_expr
*dim
)
838 if (!logical_array_check (mask
, 0))
841 if (!dim_check (dim
, 1, false))
844 if (!dim_rank_check (dim
, mask
, 0))
852 gfc_check_allocated (gfc_expr
*array
)
854 /* Tests on allocated components of coarrays need to detour the check to
855 argument of the _caf_get. */
856 if (flag_coarray
== GFC_FCOARRAY_LIB
&& array
->expr_type
== EXPR_FUNCTION
857 && array
->value
.function
.isym
858 && array
->value
.function
.isym
->id
== GFC_ISYM_CAF_GET
)
860 array
= array
->value
.function
.actual
->expr
;
865 if (!variable_check (array
, 0, false))
867 if (!allocatable_check (array
, 0))
874 /* Common check function where the first argument must be real or
875 integer and the second argument must be the same as the first. */
878 gfc_check_a_p (gfc_expr
*a
, gfc_expr
*p
)
880 if (!int_or_real_check (a
, 0))
883 if (a
->ts
.type
!= p
->ts
.type
)
885 gfc_error ("%qs and %qs arguments of %qs intrinsic at %L must "
886 "have the same type", gfc_current_intrinsic_arg
[0]->name
,
887 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
892 if (a
->ts
.kind
!= p
->ts
.kind
)
894 if (!gfc_notify_std (GFC_STD_GNU
, "Different type kinds at %L",
904 gfc_check_x_yd (gfc_expr
*x
, gfc_expr
*y
)
906 if (!double_check (x
, 0) || !double_check (y
, 1))
914 gfc_check_associated (gfc_expr
*pointer
, gfc_expr
*target
)
916 symbol_attribute attr1
, attr2
;
921 where
= &pointer
->where
;
923 if (pointer
->expr_type
== EXPR_NULL
)
926 attr1
= gfc_expr_attr (pointer
);
928 if (!attr1
.pointer
&& !attr1
.proc_pointer
)
930 gfc_error ("%qs argument of %qs intrinsic at %L must be a POINTER",
931 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
937 if (attr1
.pointer
&& gfc_is_coindexed (pointer
))
939 gfc_error ("%qs argument of %qs intrinsic at %L shall not be "
940 "coindexed", gfc_current_intrinsic_arg
[0]->name
,
941 gfc_current_intrinsic
, &pointer
->where
);
945 /* Target argument is optional. */
949 where
= &target
->where
;
950 if (target
->expr_type
== EXPR_NULL
)
953 if (target
->expr_type
== EXPR_VARIABLE
|| target
->expr_type
== EXPR_FUNCTION
)
954 attr2
= gfc_expr_attr (target
);
957 gfc_error ("%qs argument of %qs intrinsic at %L must be a pointer "
958 "or target VARIABLE or FUNCTION",
959 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
964 if (attr1
.pointer
&& !attr2
.pointer
&& !attr2
.target
)
966 gfc_error ("%qs argument of %qs intrinsic at %L must be a POINTER "
967 "or a TARGET", gfc_current_intrinsic_arg
[1]->name
,
968 gfc_current_intrinsic
, &target
->where
);
973 if (attr1
.pointer
&& gfc_is_coindexed (target
))
975 gfc_error ("%qs argument of %qs intrinsic at %L shall not be "
976 "coindexed", gfc_current_intrinsic_arg
[1]->name
,
977 gfc_current_intrinsic
, &target
->where
);
982 if (!same_type_check (pointer
, 0, target
, 1))
984 if (!rank_check (target
, 0, pointer
->rank
))
986 if (target
->rank
> 0)
988 for (i
= 0; i
< target
->rank
; i
++)
989 if (target
->ref
->u
.ar
.dimen_type
[i
] == DIMEN_VECTOR
)
991 gfc_error ("Array section with a vector subscript at %L shall not "
992 "be the target of a pointer",
1002 gfc_error ("NULL pointer at %L is not permitted as actual argument "
1003 "of %qs intrinsic function", where
, gfc_current_intrinsic
);
1010 gfc_check_atan_2 (gfc_expr
*y
, gfc_expr
*x
)
1012 /* gfc_notify_std would be a waste of time as the return value
1013 is seemingly used only for the generic resolution. The error
1014 will be: Too many arguments. */
1015 if ((gfc_option
.allow_std
& GFC_STD_F2008
) == 0)
1018 return gfc_check_atan2 (y
, x
);
1023 gfc_check_atan2 (gfc_expr
*y
, gfc_expr
*x
)
1025 if (!type_check (y
, 0, BT_REAL
))
1027 if (!same_type_check (y
, 0, x
, 1))
1035 gfc_check_atomic (gfc_expr
*atom
, int atom_no
, gfc_expr
*value
, int val_no
,
1036 gfc_expr
*stat
, int stat_no
)
1038 if (!scalar_check (atom
, atom_no
) || !scalar_check (value
, val_no
))
1041 if (!(atom
->ts
.type
== BT_INTEGER
&& atom
->ts
.kind
== gfc_atomic_int_kind
)
1042 && !(atom
->ts
.type
== BT_LOGICAL
1043 && atom
->ts
.kind
== gfc_atomic_logical_kind
))
1045 gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1046 "integer of ATOMIC_INT_KIND or a logical of "
1047 "ATOMIC_LOGICAL_KIND", &atom
->where
, gfc_current_intrinsic
);
1051 if (!gfc_is_coarray (atom
) && !gfc_is_coindexed (atom
))
1053 gfc_error ("ATOM argument at %L of the %s intrinsic function shall be a "
1054 "coarray or coindexed", &atom
->where
, gfc_current_intrinsic
);
1058 if (atom
->ts
.type
!= value
->ts
.type
)
1060 gfc_error ("%qs argument of %qs intrinsic at %L shall have the same "
1061 "type as %qs at %L", gfc_current_intrinsic_arg
[val_no
]->name
,
1062 gfc_current_intrinsic
, &value
->where
,
1063 gfc_current_intrinsic_arg
[atom_no
]->name
, &atom
->where
);
1069 if (!type_check (stat
, stat_no
, BT_INTEGER
))
1071 if (!scalar_check (stat
, stat_no
))
1073 if (!variable_check (stat
, stat_no
, false))
1075 if (!kind_value_check (stat
, stat_no
, gfc_default_integer_kind
))
1078 if (!gfc_notify_std (GFC_STD_F2008_TS
, "STAT= argument to %s at %L",
1079 gfc_current_intrinsic
, &stat
->where
))
1088 gfc_check_atomic_def (gfc_expr
*atom
, gfc_expr
*value
, gfc_expr
*stat
)
1090 if (atom
->expr_type
== EXPR_FUNCTION
1091 && atom
->value
.function
.isym
1092 && atom
->value
.function
.isym
->id
== GFC_ISYM_CAF_GET
)
1093 atom
= atom
->value
.function
.actual
->expr
;
1095 if (!gfc_check_vardef_context (atom
, false, false, false, NULL
))
1097 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1098 "definable", gfc_current_intrinsic
, &atom
->where
);
1102 return gfc_check_atomic (atom
, 0, value
, 1, stat
, 2);
1107 gfc_check_atomic_op (gfc_expr
*atom
, gfc_expr
*value
, gfc_expr
*stat
)
1109 if (atom
->ts
.type
!= BT_INTEGER
|| atom
->ts
.kind
!= gfc_atomic_int_kind
)
1111 gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1112 "integer of ATOMIC_INT_KIND", &atom
->where
,
1113 gfc_current_intrinsic
);
1117 return gfc_check_atomic_def (atom
, value
, stat
);
1122 gfc_check_atomic_ref (gfc_expr
*value
, gfc_expr
*atom
, gfc_expr
*stat
)
1124 if (atom
->expr_type
== EXPR_FUNCTION
1125 && atom
->value
.function
.isym
1126 && atom
->value
.function
.isym
->id
== GFC_ISYM_CAF_GET
)
1127 atom
= atom
->value
.function
.actual
->expr
;
1129 if (!gfc_check_vardef_context (value
, false, false, false, NULL
))
1131 gfc_error ("VALUE argument of the %s intrinsic function at %L shall be "
1132 "definable", gfc_current_intrinsic
, &value
->where
);
1136 return gfc_check_atomic (atom
, 1, value
, 0, stat
, 2);
1141 gfc_check_atomic_cas (gfc_expr
*atom
, gfc_expr
*old
, gfc_expr
*compare
,
1142 gfc_expr
*new_val
, gfc_expr
*stat
)
1144 if (atom
->expr_type
== EXPR_FUNCTION
1145 && atom
->value
.function
.isym
1146 && atom
->value
.function
.isym
->id
== GFC_ISYM_CAF_GET
)
1147 atom
= atom
->value
.function
.actual
->expr
;
1149 if (!gfc_check_atomic (atom
, 0, new_val
, 3, stat
, 4))
1152 if (!scalar_check (old
, 1) || !scalar_check (compare
, 2))
1155 if (!same_type_check (atom
, 0, old
, 1))
1158 if (!same_type_check (atom
, 0, compare
, 2))
1161 if (!gfc_check_vardef_context (atom
, false, false, false, NULL
))
1163 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1164 "definable", gfc_current_intrinsic
, &atom
->where
);
1168 if (!gfc_check_vardef_context (old
, false, false, false, NULL
))
1170 gfc_error ("OLD argument of the %s intrinsic function at %L shall be "
1171 "definable", gfc_current_intrinsic
, &old
->where
);
1179 gfc_check_event_query (gfc_expr
*event
, gfc_expr
*count
, gfc_expr
*stat
)
1181 if (event
->ts
.type
!= BT_DERIVED
1182 || event
->ts
.u
.derived
->from_intmod
!= INTMOD_ISO_FORTRAN_ENV
1183 || event
->ts
.u
.derived
->intmod_sym_id
!= ISOFORTRAN_EVENT_TYPE
)
1185 gfc_error ("EVENT argument at %L to the intrinsic EVENT_QUERY "
1186 "shall be of type EVENT_TYPE", &event
->where
);
1190 if (!scalar_check (event
, 0))
1193 if (!gfc_check_vardef_context (count
, false, false, false, NULL
))
1195 gfc_error ("COUNT argument of the EVENT_QUERY intrinsic function at %L "
1196 "shall be definable", &count
->where
);
1200 if (!type_check (count
, 1, BT_INTEGER
))
1203 int i
= gfc_validate_kind (BT_INTEGER
, count
->ts
.kind
, false);
1204 int j
= gfc_validate_kind (BT_INTEGER
, gfc_default_integer_kind
, false);
1206 if (gfc_integer_kinds
[i
].range
< gfc_integer_kinds
[j
].range
)
1208 gfc_error ("COUNT argument of the EVENT_QUERY intrinsic function at %L "
1209 "shall have at least the range of the default integer",
1216 if (!type_check (stat
, 2, BT_INTEGER
))
1218 if (!scalar_check (stat
, 2))
1220 if (!variable_check (stat
, 2, false))
1223 if (!gfc_notify_std (GFC_STD_F2008_TS
, "STAT= argument to %s at %L",
1224 gfc_current_intrinsic
, &stat
->where
))
1233 gfc_check_atomic_fetch_op (gfc_expr
*atom
, gfc_expr
*value
, gfc_expr
*old
,
1236 if (atom
->expr_type
== EXPR_FUNCTION
1237 && atom
->value
.function
.isym
1238 && atom
->value
.function
.isym
->id
== GFC_ISYM_CAF_GET
)
1239 atom
= atom
->value
.function
.actual
->expr
;
1241 if (atom
->ts
.type
!= BT_INTEGER
|| atom
->ts
.kind
!= gfc_atomic_int_kind
)
1243 gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1244 "integer of ATOMIC_INT_KIND", &atom
->where
,
1245 gfc_current_intrinsic
);
1249 if (!gfc_check_atomic (atom
, 0, value
, 1, stat
, 3))
1252 if (!scalar_check (old
, 2))
1255 if (!same_type_check (atom
, 0, old
, 2))
1258 if (!gfc_check_vardef_context (atom
, false, false, false, NULL
))
1260 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1261 "definable", gfc_current_intrinsic
, &atom
->where
);
1265 if (!gfc_check_vardef_context (old
, false, false, false, NULL
))
1267 gfc_error ("OLD argument of the %s intrinsic function at %L shall be "
1268 "definable", gfc_current_intrinsic
, &old
->where
);
1276 /* BESJN and BESYN functions. */
1279 gfc_check_besn (gfc_expr
*n
, gfc_expr
*x
)
1281 if (!type_check (n
, 0, BT_INTEGER
))
1283 if (n
->expr_type
== EXPR_CONSTANT
)
1286 gfc_extract_int (n
, &i
);
1287 if (i
< 0 && !gfc_notify_std (GFC_STD_GNU
, "Negative argument "
1288 "N at %L", &n
->where
))
1292 if (!type_check (x
, 1, BT_REAL
))
1299 /* Transformational version of the Bessel JN and YN functions. */
1302 gfc_check_bessel_n2 (gfc_expr
*n1
, gfc_expr
*n2
, gfc_expr
*x
)
1304 if (!type_check (n1
, 0, BT_INTEGER
))
1306 if (!scalar_check (n1
, 0))
1308 if (!nonnegative_check ("N1", n1
))
1311 if (!type_check (n2
, 1, BT_INTEGER
))
1313 if (!scalar_check (n2
, 1))
1315 if (!nonnegative_check ("N2", n2
))
1318 if (!type_check (x
, 2, BT_REAL
))
1320 if (!scalar_check (x
, 2))
1328 gfc_check_bge_bgt_ble_blt (gfc_expr
*i
, gfc_expr
*j
)
1330 if (!type_check (i
, 0, BT_INTEGER
))
1333 if (!type_check (j
, 1, BT_INTEGER
))
1341 gfc_check_bitfcn (gfc_expr
*i
, gfc_expr
*pos
)
1343 if (!type_check (i
, 0, BT_INTEGER
))
1346 if (!type_check (pos
, 1, BT_INTEGER
))
1349 if (!nonnegative_check ("pos", pos
))
1352 if (!less_than_bitsize1 ("i", i
, "pos", pos
, false))
1360 gfc_check_char (gfc_expr
*i
, gfc_expr
*kind
)
1362 if (!type_check (i
, 0, BT_INTEGER
))
1364 if (!kind_check (kind
, 1, BT_CHARACTER
))
1372 gfc_check_chdir (gfc_expr
*dir
)
1374 if (!type_check (dir
, 0, BT_CHARACTER
))
1376 if (!kind_value_check (dir
, 0, gfc_default_character_kind
))
1384 gfc_check_chdir_sub (gfc_expr
*dir
, gfc_expr
*status
)
1386 if (!type_check (dir
, 0, BT_CHARACTER
))
1388 if (!kind_value_check (dir
, 0, gfc_default_character_kind
))
1394 if (!type_check (status
, 1, BT_INTEGER
))
1396 if (!scalar_check (status
, 1))
1404 gfc_check_chmod (gfc_expr
*name
, gfc_expr
*mode
)
1406 if (!type_check (name
, 0, BT_CHARACTER
))
1408 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
1411 if (!type_check (mode
, 1, BT_CHARACTER
))
1413 if (!kind_value_check (mode
, 1, gfc_default_character_kind
))
1421 gfc_check_chmod_sub (gfc_expr
*name
, gfc_expr
*mode
, gfc_expr
*status
)
1423 if (!type_check (name
, 0, BT_CHARACTER
))
1425 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
1428 if (!type_check (mode
, 1, BT_CHARACTER
))
1430 if (!kind_value_check (mode
, 1, gfc_default_character_kind
))
1436 if (!type_check (status
, 2, BT_INTEGER
))
1439 if (!scalar_check (status
, 2))
1447 gfc_check_cmplx (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*kind
)
1449 if (!numeric_check (x
, 0))
1454 if (!numeric_check (y
, 1))
1457 if (x
->ts
.type
== BT_COMPLEX
)
1459 gfc_error ("%qs argument of %qs intrinsic at %L must not be "
1460 "present if %<x%> is COMPLEX",
1461 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1466 if (y
->ts
.type
== BT_COMPLEX
)
1468 gfc_error ("%qs argument of %qs intrinsic at %L must have a type "
1469 "of either REAL or INTEGER",
1470 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1477 if (!kind_check (kind
, 2, BT_COMPLEX
))
1480 if (!kind
&& warn_conversion
1481 && x
->ts
.type
== BT_REAL
&& x
->ts
.kind
> gfc_default_real_kind
)
1482 gfc_warning_now (OPT_Wconversion
, "Conversion from %s to default-kind "
1483 "COMPLEX(%d) at %L might lose precision, consider using "
1484 "the KIND argument", gfc_typename (&x
->ts
),
1485 gfc_default_real_kind
, &x
->where
);
1486 else if (y
&& !kind
&& warn_conversion
1487 && y
->ts
.type
== BT_REAL
&& y
->ts
.kind
> gfc_default_real_kind
)
1488 gfc_warning_now (OPT_Wconversion
, "Conversion from %s to default-kind "
1489 "COMPLEX(%d) at %L might lose precision, consider using "
1490 "the KIND argument", gfc_typename (&y
->ts
),
1491 gfc_default_real_kind
, &y
->where
);
1497 check_co_collective (gfc_expr
*a
, gfc_expr
*image_idx
, gfc_expr
*stat
,
1498 gfc_expr
*errmsg
, bool co_reduce
)
1500 if (!variable_check (a
, 0, false))
1503 if (!gfc_check_vardef_context (a
, false, false, false, "argument 'A' with "
1507 /* Fortran 2008, 12.5.2.4, paragraph 18. */
1508 if (gfc_has_vector_subscript (a
))
1510 gfc_error ("Argument %<A%> with INTENT(INOUT) at %L of the intrinsic "
1511 "subroutine %s shall not have a vector subscript",
1512 &a
->where
, gfc_current_intrinsic
);
1516 if (gfc_is_coindexed (a
))
1518 gfc_error ("The A argument at %L to the intrinsic %s shall not be "
1519 "coindexed", &a
->where
, gfc_current_intrinsic
);
1523 if (image_idx
!= NULL
)
1525 if (!type_check (image_idx
, co_reduce
? 2 : 1, BT_INTEGER
))
1527 if (!scalar_check (image_idx
, co_reduce
? 2 : 1))
1533 if (!type_check (stat
, co_reduce
? 3 : 2, BT_INTEGER
))
1535 if (!scalar_check (stat
, co_reduce
? 3 : 2))
1537 if (!variable_check (stat
, co_reduce
? 3 : 2, false))
1539 if (stat
->ts
.kind
!= 4)
1541 gfc_error ("The stat= argument at %L must be a kind=4 integer "
1542 "variable", &stat
->where
);
1549 if (!type_check (errmsg
, co_reduce
? 4 : 3, BT_CHARACTER
))
1551 if (!scalar_check (errmsg
, co_reduce
? 4 : 3))
1553 if (!variable_check (errmsg
, co_reduce
? 4 : 3, false))
1555 if (errmsg
->ts
.kind
!= 1)
1557 gfc_error ("The errmsg= argument at %L must be a default-kind "
1558 "character variable", &errmsg
->where
);
1563 if (flag_coarray
== GFC_FCOARRAY_NONE
)
1565 gfc_fatal_error ("Coarrays disabled at %L, use %<-fcoarray=%> to enable",
1575 gfc_check_co_broadcast (gfc_expr
*a
, gfc_expr
*source_image
, gfc_expr
*stat
,
1578 if (a
->ts
.type
== BT_CLASS
|| gfc_expr_attr (a
).alloc_comp
)
1580 gfc_error ("Support for the A argument at %L which is polymorphic A "
1581 "argument or has allocatable components is not yet "
1582 "implemented", &a
->where
);
1585 return check_co_collective (a
, source_image
, stat
, errmsg
, false);
1590 gfc_check_co_reduce (gfc_expr
*a
, gfc_expr
*op
, gfc_expr
*result_image
,
1591 gfc_expr
*stat
, gfc_expr
*errmsg
)
1593 symbol_attribute attr
;
1594 gfc_formal_arglist
*formal
;
1597 if (a
->ts
.type
== BT_CLASS
)
1599 gfc_error ("The A argument at %L of CO_REDUCE shall not be polymorphic",
1604 if (gfc_expr_attr (a
).alloc_comp
)
1606 gfc_error ("Support for the A argument at %L with allocatable components"
1607 " is not yet implemented", &a
->where
);
1611 if (!check_co_collective (a
, result_image
, stat
, errmsg
, true))
1614 if (!gfc_resolve_expr (op
))
1617 attr
= gfc_expr_attr (op
);
1618 if (!attr
.pure
|| !attr
.function
)
1620 gfc_error ("OPERATOR argument at %L must be a PURE function",
1627 /* None of the intrinsics fulfills the criteria of taking two arguments,
1628 returning the same type and kind as the arguments and being permitted
1629 as actual argument. */
1630 gfc_error ("Intrinsic function %s at %L is not permitted for CO_REDUCE",
1631 op
->symtree
->n
.sym
->name
, &op
->where
);
1635 if (gfc_is_proc_ptr_comp (op
))
1637 gfc_component
*comp
= gfc_get_proc_ptr_comp (op
);
1638 sym
= comp
->ts
.interface
;
1641 sym
= op
->symtree
->n
.sym
;
1643 formal
= sym
->formal
;
1645 if (!formal
|| !formal
->next
|| formal
->next
->next
)
1647 gfc_error ("The function passed as OPERATOR at %L shall have two "
1648 "arguments", &op
->where
);
1652 if (sym
->result
->ts
.type
== BT_UNKNOWN
)
1653 gfc_set_default_type (sym
->result
, 0, NULL
);
1655 if (!gfc_compare_types (&a
->ts
, &sym
->result
->ts
))
1657 gfc_error ("A argument at %L has type %s but the function passed as "
1658 "OPERATOR at %L returns %s",
1659 &a
->where
, gfc_typename (&a
->ts
), &op
->where
,
1660 gfc_typename (&sym
->result
->ts
));
1663 if (!gfc_compare_types (&a
->ts
, &formal
->sym
->ts
)
1664 || !gfc_compare_types (&a
->ts
, &formal
->next
->sym
->ts
))
1666 gfc_error ("The function passed as OPERATOR at %L has arguments of type "
1667 "%s and %s but shall have type %s", &op
->where
,
1668 gfc_typename (&formal
->sym
->ts
),
1669 gfc_typename (&formal
->next
->sym
->ts
), gfc_typename (&a
->ts
));
1672 if (op
->rank
|| attr
.allocatable
|| attr
.pointer
|| formal
->sym
->as
1673 || formal
->next
->sym
->as
|| formal
->sym
->attr
.allocatable
1674 || formal
->next
->sym
->attr
.allocatable
|| formal
->sym
->attr
.pointer
1675 || formal
->next
->sym
->attr
.pointer
)
1677 gfc_error ("The function passed as OPERATOR at %L shall have scalar "
1678 "nonallocatable nonpointer arguments and return a "
1679 "nonallocatable nonpointer scalar", &op
->where
);
1683 if (formal
->sym
->attr
.value
!= formal
->next
->sym
->attr
.value
)
1685 gfc_error ("The function passed as OPERATOR at %L shall have the VALUE "
1686 "attribute either for none or both arguments", &op
->where
);
1690 if (formal
->sym
->attr
.target
!= formal
->next
->sym
->attr
.target
)
1692 gfc_error ("The function passed as OPERATOR at %L shall have the TARGET "
1693 "attribute either for none or both arguments", &op
->where
);
1697 if (formal
->sym
->attr
.asynchronous
!= formal
->next
->sym
->attr
.asynchronous
)
1699 gfc_error ("The function passed as OPERATOR at %L shall have the "
1700 "ASYNCHRONOUS attribute either for none or both arguments",
1705 if (formal
->sym
->attr
.optional
|| formal
->next
->sym
->attr
.optional
)
1707 gfc_error ("The function passed as OPERATOR at %L shall not have the "
1708 "OPTIONAL attribute for either of the arguments", &op
->where
);
1712 if (a
->ts
.type
== BT_CHARACTER
)
1715 unsigned long actual_size
, formal_size1
, formal_size2
, result_size
;
1718 actual_size
= cl
&& cl
->length
&& cl
->length
->expr_type
== EXPR_CONSTANT
1719 ? mpz_get_ui (cl
->length
->value
.integer
) : 0;
1721 cl
= formal
->sym
->ts
.u
.cl
;
1722 formal_size1
= cl
&& cl
->length
&& cl
->length
->expr_type
== EXPR_CONSTANT
1723 ? mpz_get_ui (cl
->length
->value
.integer
) : 0;
1725 cl
= formal
->next
->sym
->ts
.u
.cl
;
1726 formal_size2
= cl
&& cl
->length
&& cl
->length
->expr_type
== EXPR_CONSTANT
1727 ? mpz_get_ui (cl
->length
->value
.integer
) : 0;
1730 result_size
= cl
&& cl
->length
&& cl
->length
->expr_type
== EXPR_CONSTANT
1731 ? mpz_get_ui (cl
->length
->value
.integer
) : 0;
1734 && ((formal_size1
&& actual_size
!= formal_size1
)
1735 || (formal_size2
&& actual_size
!= formal_size2
)))
1737 gfc_error ("The character length of the A argument at %L and of the "
1738 "arguments of the OPERATOR at %L shall be the same",
1739 &a
->where
, &op
->where
);
1742 if (actual_size
&& result_size
&& actual_size
!= result_size
)
1744 gfc_error ("The character length of the A argument at %L and of the "
1745 "function result of the OPERATOR at %L shall be the same",
1746 &a
->where
, &op
->where
);
1756 gfc_check_co_minmax (gfc_expr
*a
, gfc_expr
*result_image
, gfc_expr
*stat
,
1759 if (a
->ts
.type
!= BT_INTEGER
&& a
->ts
.type
!= BT_REAL
1760 && a
->ts
.type
!= BT_CHARACTER
)
1762 gfc_error ("%qs argument of %qs intrinsic at %L shall be of type "
1763 "integer, real or character",
1764 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
1768 return check_co_collective (a
, result_image
, stat
, errmsg
, false);
1773 gfc_check_co_sum (gfc_expr
*a
, gfc_expr
*result_image
, gfc_expr
*stat
,
1776 if (!numeric_check (a
, 0))
1778 return check_co_collective (a
, result_image
, stat
, errmsg
, false);
1783 gfc_check_complex (gfc_expr
*x
, gfc_expr
*y
)
1785 if (!int_or_real_check (x
, 0))
1787 if (!scalar_check (x
, 0))
1790 if (!int_or_real_check (y
, 1))
1792 if (!scalar_check (y
, 1))
1800 gfc_check_count (gfc_expr
*mask
, gfc_expr
*dim
, gfc_expr
*kind
)
1802 if (!logical_array_check (mask
, 0))
1804 if (!dim_check (dim
, 1, false))
1806 if (!dim_rank_check (dim
, mask
, 0))
1808 if (!kind_check (kind
, 2, BT_INTEGER
))
1810 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "%qs intrinsic "
1811 "with KIND argument at %L",
1812 gfc_current_intrinsic
, &kind
->where
))
1820 gfc_check_cshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*dim
)
1822 if (!array_check (array
, 0))
1825 if (!type_check (shift
, 1, BT_INTEGER
))
1828 if (!dim_check (dim
, 2, true))
1831 if (!dim_rank_check (dim
, array
, false))
1834 if (array
->rank
== 1 || shift
->rank
== 0)
1836 if (!scalar_check (shift
, 1))
1839 else if (shift
->rank
== array
->rank
- 1)
1844 else if (dim
->expr_type
== EXPR_CONSTANT
)
1845 gfc_extract_int (dim
, &d
);
1852 for (i
= 0, j
= 0; i
< array
->rank
; i
++)
1855 if (!identical_dimen_shape (array
, i
, shift
, j
))
1857 gfc_error ("%qs argument of %qs intrinsic at %L has "
1858 "invalid shape in dimension %d (%ld/%ld)",
1859 gfc_current_intrinsic_arg
[1]->name
,
1860 gfc_current_intrinsic
, &shift
->where
, i
+ 1,
1861 mpz_get_si (array
->shape
[i
]),
1862 mpz_get_si (shift
->shape
[j
]));
1872 gfc_error ("%qs argument of intrinsic %qs at %L of must have rank "
1873 "%d or be a scalar", gfc_current_intrinsic_arg
[1]->name
,
1874 gfc_current_intrinsic
, &shift
->where
, array
->rank
- 1);
1883 gfc_check_ctime (gfc_expr
*time
)
1885 if (!scalar_check (time
, 0))
1888 if (!type_check (time
, 0, BT_INTEGER
))
1895 bool gfc_check_datan2 (gfc_expr
*y
, gfc_expr
*x
)
1897 if (!double_check (y
, 0) || !double_check (x
, 1))
1904 gfc_check_dcmplx (gfc_expr
*x
, gfc_expr
*y
)
1906 if (!numeric_check (x
, 0))
1911 if (!numeric_check (y
, 1))
1914 if (x
->ts
.type
== BT_COMPLEX
)
1916 gfc_error ("%qs argument of %qs intrinsic at %L must not be "
1917 "present if %<x%> is COMPLEX",
1918 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1923 if (y
->ts
.type
== BT_COMPLEX
)
1925 gfc_error ("%qs argument of %qs intrinsic at %L must have a type "
1926 "of either REAL or INTEGER",
1927 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1938 gfc_check_dble (gfc_expr
*x
)
1940 if (!numeric_check (x
, 0))
1948 gfc_check_digits (gfc_expr
*x
)
1950 if (!int_or_real_check (x
, 0))
1958 gfc_check_dot_product (gfc_expr
*vector_a
, gfc_expr
*vector_b
)
1960 switch (vector_a
->ts
.type
)
1963 if (!type_check (vector_b
, 1, BT_LOGICAL
))
1970 if (!numeric_check (vector_b
, 1))
1975 gfc_error ("%qs argument of %qs intrinsic at %L must be numeric "
1976 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
1977 gfc_current_intrinsic
, &vector_a
->where
);
1981 if (!rank_check (vector_a
, 0, 1))
1984 if (!rank_check (vector_b
, 1, 1))
1987 if (! identical_dimen_shape (vector_a
, 0, vector_b
, 0))
1989 gfc_error ("Different shape for arguments %qs and %qs at %L for "
1990 "intrinsic %<dot_product%>",
1991 gfc_current_intrinsic_arg
[0]->name
,
1992 gfc_current_intrinsic_arg
[1]->name
, &vector_a
->where
);
2001 gfc_check_dprod (gfc_expr
*x
, gfc_expr
*y
)
2003 if (!type_check (x
, 0, BT_REAL
)
2004 || !type_check (y
, 1, BT_REAL
))
2007 if (x
->ts
.kind
!= gfc_default_real_kind
)
2009 gfc_error ("%qs argument of %qs intrinsic at %L must be default "
2010 "real", gfc_current_intrinsic_arg
[0]->name
,
2011 gfc_current_intrinsic
, &x
->where
);
2015 if (y
->ts
.kind
!= gfc_default_real_kind
)
2017 gfc_error ("%qs argument of %qs intrinsic at %L must be default "
2018 "real", gfc_current_intrinsic_arg
[1]->name
,
2019 gfc_current_intrinsic
, &y
->where
);
2028 gfc_check_dshift (gfc_expr
*i
, gfc_expr
*j
, gfc_expr
*shift
)
2030 if (!type_check (i
, 0, BT_INTEGER
))
2033 if (!type_check (j
, 1, BT_INTEGER
))
2036 if (i
->is_boz
&& j
->is_boz
)
2038 gfc_error ("%<I%> at %L and %<J%>' at %L cannot both be BOZ literal "
2039 "constants", &i
->where
, &j
->where
);
2043 if (!i
->is_boz
&& !j
->is_boz
&& !same_type_check (i
, 0, j
, 1))
2046 if (!type_check (shift
, 2, BT_INTEGER
))
2049 if (!nonnegative_check ("SHIFT", shift
))
2054 if (!less_than_bitsize1 ("J", j
, "SHIFT", shift
, true))
2056 i
->ts
.kind
= j
->ts
.kind
;
2060 if (!less_than_bitsize1 ("I", i
, "SHIFT", shift
, true))
2062 j
->ts
.kind
= i
->ts
.kind
;
2070 gfc_check_eoshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*boundary
,
2073 if (!array_check (array
, 0))
2076 if (!type_check (shift
, 1, BT_INTEGER
))
2079 if (!dim_check (dim
, 3, true))
2082 if (!dim_rank_check (dim
, array
, false))
2085 if (array
->rank
== 1 || shift
->rank
== 0)
2087 if (!scalar_check (shift
, 1))
2090 else if (shift
->rank
== array
->rank
- 1)
2095 else if (dim
->expr_type
== EXPR_CONSTANT
)
2096 gfc_extract_int (dim
, &d
);
2103 for (i
= 0, j
= 0; i
< array
->rank
; i
++)
2106 if (!identical_dimen_shape (array
, i
, shift
, j
))
2108 gfc_error ("%qs argument of %qs intrinsic at %L has "
2109 "invalid shape in dimension %d (%ld/%ld)",
2110 gfc_current_intrinsic_arg
[1]->name
,
2111 gfc_current_intrinsic
, &shift
->where
, i
+ 1,
2112 mpz_get_si (array
->shape
[i
]),
2113 mpz_get_si (shift
->shape
[j
]));
2123 gfc_error ("%qs argument of intrinsic %qs at %L of must have rank "
2124 "%d or be a scalar", gfc_current_intrinsic_arg
[1]->name
,
2125 gfc_current_intrinsic
, &shift
->where
, array
->rank
- 1);
2129 if (boundary
!= NULL
)
2131 if (!same_type_check (array
, 0, boundary
, 2))
2134 if (array
->rank
== 1 || boundary
->rank
== 0)
2136 if (!scalar_check (boundary
, 2))
2139 else if (boundary
->rank
== array
->rank
- 1)
2141 if (!gfc_check_conformance (shift
, boundary
,
2142 "arguments '%s' and '%s' for "
2144 gfc_current_intrinsic_arg
[1]->name
,
2145 gfc_current_intrinsic_arg
[2]->name
,
2146 gfc_current_intrinsic
))
2151 gfc_error ("%qs argument of intrinsic %qs at %L of must have "
2152 "rank %d or be a scalar",
2153 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
2154 &shift
->where
, array
->rank
- 1);
2163 gfc_check_float (gfc_expr
*a
)
2165 if (!type_check (a
, 0, BT_INTEGER
))
2168 if ((a
->ts
.kind
!= gfc_default_integer_kind
)
2169 && !gfc_notify_std (GFC_STD_GNU
, "non-default INTEGER "
2170 "kind argument to %s intrinsic at %L",
2171 gfc_current_intrinsic
, &a
->where
))
2177 /* A single complex argument. */
2180 gfc_check_fn_c (gfc_expr
*a
)
2182 if (!type_check (a
, 0, BT_COMPLEX
))
2188 /* A single real argument. */
2191 gfc_check_fn_r (gfc_expr
*a
)
2193 if (!type_check (a
, 0, BT_REAL
))
2199 /* A single double argument. */
2202 gfc_check_fn_d (gfc_expr
*a
)
2204 if (!double_check (a
, 0))
2210 /* A single real or complex argument. */
2213 gfc_check_fn_rc (gfc_expr
*a
)
2215 if (!real_or_complex_check (a
, 0))
2223 gfc_check_fn_rc2008 (gfc_expr
*a
)
2225 if (!real_or_complex_check (a
, 0))
2228 if (a
->ts
.type
== BT_COMPLEX
2229 && !gfc_notify_std (GFC_STD_F2008
, "COMPLEX argument %qs "
2230 "of %qs intrinsic at %L",
2231 gfc_current_intrinsic_arg
[0]->name
,
2232 gfc_current_intrinsic
, &a
->where
))
2240 gfc_check_fnum (gfc_expr
*unit
)
2242 if (!type_check (unit
, 0, BT_INTEGER
))
2245 if (!scalar_check (unit
, 0))
2253 gfc_check_huge (gfc_expr
*x
)
2255 if (!int_or_real_check (x
, 0))
2263 gfc_check_hypot (gfc_expr
*x
, gfc_expr
*y
)
2265 if (!type_check (x
, 0, BT_REAL
))
2267 if (!same_type_check (x
, 0, y
, 1))
2274 /* Check that the single argument is an integer. */
2277 gfc_check_i (gfc_expr
*i
)
2279 if (!type_check (i
, 0, BT_INTEGER
))
2287 gfc_check_iand (gfc_expr
*i
, gfc_expr
*j
)
2289 if (!type_check (i
, 0, BT_INTEGER
))
2292 if (!type_check (j
, 1, BT_INTEGER
))
2295 if (i
->ts
.kind
!= j
->ts
.kind
)
2297 if (!gfc_notify_std (GFC_STD_GNU
, "Different type kinds at %L",
2307 gfc_check_ibits (gfc_expr
*i
, gfc_expr
*pos
, gfc_expr
*len
)
2309 if (!type_check (i
, 0, BT_INTEGER
))
2312 if (!type_check (pos
, 1, BT_INTEGER
))
2315 if (!type_check (len
, 2, BT_INTEGER
))
2318 if (!nonnegative_check ("pos", pos
))
2321 if (!nonnegative_check ("len", len
))
2324 if (!less_than_bitsize2 ("i", i
, "pos", pos
, "len", len
))
2332 gfc_check_ichar_iachar (gfc_expr
*c
, gfc_expr
*kind
)
2336 if (!type_check (c
, 0, BT_CHARACTER
))
2339 if (!kind_check (kind
, 1, BT_INTEGER
))
2342 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "%qs intrinsic "
2343 "with KIND argument at %L",
2344 gfc_current_intrinsic
, &kind
->where
))
2347 if (c
->expr_type
== EXPR_VARIABLE
|| c
->expr_type
== EXPR_SUBSTRING
)
2353 /* Substring references don't have the charlength set. */
2355 while (ref
&& ref
->type
!= REF_SUBSTRING
)
2358 gcc_assert (ref
== NULL
|| ref
->type
== REF_SUBSTRING
);
2362 /* Check that the argument is length one. Non-constant lengths
2363 can't be checked here, so assume they are ok. */
2364 if (c
->ts
.u
.cl
&& c
->ts
.u
.cl
->length
)
2366 /* If we already have a length for this expression then use it. */
2367 if (c
->ts
.u
.cl
->length
->expr_type
!= EXPR_CONSTANT
)
2369 i
= mpz_get_si (c
->ts
.u
.cl
->length
->value
.integer
);
2376 start
= ref
->u
.ss
.start
;
2377 end
= ref
->u
.ss
.end
;
2380 if (end
== NULL
|| end
->expr_type
!= EXPR_CONSTANT
2381 || start
->expr_type
!= EXPR_CONSTANT
)
2384 i
= mpz_get_si (end
->value
.integer
) + 1
2385 - mpz_get_si (start
->value
.integer
);
2393 gfc_error ("Argument of %s at %L must be of length one",
2394 gfc_current_intrinsic
, &c
->where
);
2403 gfc_check_idnint (gfc_expr
*a
)
2405 if (!double_check (a
, 0))
2413 gfc_check_ieor (gfc_expr
*i
, gfc_expr
*j
)
2415 if (!type_check (i
, 0, BT_INTEGER
))
2418 if (!type_check (j
, 1, BT_INTEGER
))
2421 if (i
->ts
.kind
!= j
->ts
.kind
)
2423 if (!gfc_notify_std (GFC_STD_GNU
, "Different type kinds at %L",
2433 gfc_check_index (gfc_expr
*string
, gfc_expr
*substring
, gfc_expr
*back
,
2436 if (!type_check (string
, 0, BT_CHARACTER
)
2437 || !type_check (substring
, 1, BT_CHARACTER
))
2440 if (back
!= NULL
&& !type_check (back
, 2, BT_LOGICAL
))
2443 if (!kind_check (kind
, 3, BT_INTEGER
))
2445 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "%qs intrinsic "
2446 "with KIND argument at %L",
2447 gfc_current_intrinsic
, &kind
->where
))
2450 if (string
->ts
.kind
!= substring
->ts
.kind
)
2452 gfc_error ("%qs argument of %qs intrinsic at %L must be the same "
2453 "kind as %qs", gfc_current_intrinsic_arg
[1]->name
,
2454 gfc_current_intrinsic
, &substring
->where
,
2455 gfc_current_intrinsic_arg
[0]->name
);
2464 gfc_check_int (gfc_expr
*x
, gfc_expr
*kind
)
2466 if (!numeric_check (x
, 0))
2469 if (!kind_check (kind
, 1, BT_INTEGER
))
2477 gfc_check_intconv (gfc_expr
*x
)
2479 if (!numeric_check (x
, 0))
2487 gfc_check_ior (gfc_expr
*i
, gfc_expr
*j
)
2489 if (!type_check (i
, 0, BT_INTEGER
))
2492 if (!type_check (j
, 1, BT_INTEGER
))
2495 if (i
->ts
.kind
!= j
->ts
.kind
)
2497 if (!gfc_notify_std (GFC_STD_GNU
, "Different type kinds at %L",
2507 gfc_check_ishft (gfc_expr
*i
, gfc_expr
*shift
)
2509 if (!type_check (i
, 0, BT_INTEGER
)
2510 || !type_check (shift
, 1, BT_INTEGER
))
2513 if (!less_than_bitsize1 ("I", i
, NULL
, shift
, true))
2521 gfc_check_ishftc (gfc_expr
*i
, gfc_expr
*shift
, gfc_expr
*size
)
2523 if (!type_check (i
, 0, BT_INTEGER
)
2524 || !type_check (shift
, 1, BT_INTEGER
))
2531 if (!type_check (size
, 2, BT_INTEGER
))
2534 if (!less_than_bitsize1 ("I", i
, "SIZE", size
, true))
2537 if (size
->expr_type
== EXPR_CONSTANT
)
2539 gfc_extract_int (size
, &i3
);
2542 gfc_error ("SIZE at %L must be positive", &size
->where
);
2546 if (shift
->expr_type
== EXPR_CONSTANT
)
2548 gfc_extract_int (shift
, &i2
);
2554 gfc_error ("The absolute value of SHIFT at %L must be less "
2555 "than or equal to SIZE at %L", &shift
->where
,
2562 else if (!less_than_bitsize1 ("I", i
, NULL
, shift
, true))
2570 gfc_check_kill (gfc_expr
*pid
, gfc_expr
*sig
)
2572 if (!type_check (pid
, 0, BT_INTEGER
))
2575 if (!type_check (sig
, 1, BT_INTEGER
))
2583 gfc_check_kill_sub (gfc_expr
*pid
, gfc_expr
*sig
, gfc_expr
*status
)
2585 if (!type_check (pid
, 0, BT_INTEGER
))
2588 if (!scalar_check (pid
, 0))
2591 if (!type_check (sig
, 1, BT_INTEGER
))
2594 if (!scalar_check (sig
, 1))
2600 if (!type_check (status
, 2, BT_INTEGER
))
2603 if (!scalar_check (status
, 2))
2611 gfc_check_kind (gfc_expr
*x
)
2613 if (gfc_bt_struct (x
->ts
.type
) || x
->ts
.type
== BT_CLASS
)
2615 gfc_error ("%qs argument of %qs intrinsic at %L must be of "
2616 "intrinsic type", gfc_current_intrinsic_arg
[0]->name
,
2617 gfc_current_intrinsic
, &x
->where
);
2620 if (x
->ts
.type
== BT_PROCEDURE
)
2622 gfc_error ("%qs argument of %qs intrinsic at %L must be a data entity",
2623 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
2633 gfc_check_lbound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
2635 if (!array_check (array
, 0))
2638 if (!dim_check (dim
, 1, false))
2641 if (!dim_rank_check (dim
, array
, 1))
2644 if (!kind_check (kind
, 2, BT_INTEGER
))
2646 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "%qs intrinsic "
2647 "with KIND argument at %L",
2648 gfc_current_intrinsic
, &kind
->where
))
2656 gfc_check_lcobound (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*kind
)
2658 if (flag_coarray
== GFC_FCOARRAY_NONE
)
2660 gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable");
2664 if (!coarray_check (coarray
, 0))
2669 if (!dim_check (dim
, 1, false))
2672 if (!dim_corank_check (dim
, coarray
))
2676 if (!kind_check (kind
, 2, BT_INTEGER
))
2684 gfc_check_len_lentrim (gfc_expr
*s
, gfc_expr
*kind
)
2686 if (!type_check (s
, 0, BT_CHARACTER
))
2689 if (!kind_check (kind
, 1, BT_INTEGER
))
2691 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "%qs intrinsic "
2692 "with KIND argument at %L",
2693 gfc_current_intrinsic
, &kind
->where
))
2701 gfc_check_lge_lgt_lle_llt (gfc_expr
*a
, gfc_expr
*b
)
2703 if (!type_check (a
, 0, BT_CHARACTER
))
2705 if (!kind_value_check (a
, 0, gfc_default_character_kind
))
2708 if (!type_check (b
, 1, BT_CHARACTER
))
2710 if (!kind_value_check (b
, 1, gfc_default_character_kind
))
2718 gfc_check_link (gfc_expr
*path1
, gfc_expr
*path2
)
2720 if (!type_check (path1
, 0, BT_CHARACTER
))
2722 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
2725 if (!type_check (path2
, 1, BT_CHARACTER
))
2727 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
2735 gfc_check_link_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2737 if (!type_check (path1
, 0, BT_CHARACTER
))
2739 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
2742 if (!type_check (path2
, 1, BT_CHARACTER
))
2744 if (!kind_value_check (path2
, 0, gfc_default_character_kind
))
2750 if (!type_check (status
, 2, BT_INTEGER
))
2753 if (!scalar_check (status
, 2))
2761 gfc_check_loc (gfc_expr
*expr
)
2763 return variable_check (expr
, 0, true);
2768 gfc_check_symlnk (gfc_expr
*path1
, gfc_expr
*path2
)
2770 if (!type_check (path1
, 0, BT_CHARACTER
))
2772 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
2775 if (!type_check (path2
, 1, BT_CHARACTER
))
2777 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
2785 gfc_check_symlnk_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2787 if (!type_check (path1
, 0, BT_CHARACTER
))
2789 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
2792 if (!type_check (path2
, 1, BT_CHARACTER
))
2794 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
2800 if (!type_check (status
, 2, BT_INTEGER
))
2803 if (!scalar_check (status
, 2))
2811 gfc_check_logical (gfc_expr
*a
, gfc_expr
*kind
)
2813 if (!type_check (a
, 0, BT_LOGICAL
))
2815 if (!kind_check (kind
, 1, BT_LOGICAL
))
2822 /* Min/max family. */
2825 min_max_args (gfc_actual_arglist
*args
)
2827 gfc_actual_arglist
*arg
;
2828 int i
, j
, nargs
, *nlabels
, nlabelless
;
2829 bool a1
= false, a2
= false;
2831 if (args
== NULL
|| args
->next
== NULL
)
2833 gfc_error ("Intrinsic %qs at %L must have at least two arguments",
2834 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
2841 if (!args
->next
->name
)
2845 for (arg
= args
; arg
; arg
= arg
->next
)
2852 /* Note: Having a keywordless argument after an "arg=" is checked before. */
2854 nlabels
= XALLOCAVEC (int, nargs
);
2855 for (arg
= args
, i
= 0; arg
; arg
= arg
->next
, i
++)
2861 if (arg
->name
[0] != 'a' || arg
->name
[1] < '1' || arg
->name
[1] > '9')
2863 n
= strtol (&arg
->name
[1], &endp
, 10);
2864 if (endp
[0] != '\0')
2868 if (n
<= nlabelless
)
2881 gfc_error ("Missing %qs argument to the %s intrinsic at %L",
2882 !a1
? "a1" : "a2", gfc_current_intrinsic
,
2883 gfc_current_intrinsic_where
);
2887 /* Check for duplicates. */
2888 for (i
= 0; i
< nargs
; i
++)
2889 for (j
= i
+ 1; j
< nargs
; j
++)
2890 if (nlabels
[i
] == nlabels
[j
])
2896 gfc_error ("Duplicate argument %qs at %L to intrinsic %s", arg
->name
,
2897 &arg
->expr
->where
, gfc_current_intrinsic
);
2901 gfc_error ("Unknown argument %qs at %L to intrinsic %s", arg
->name
,
2902 &arg
->expr
->where
, gfc_current_intrinsic
);
2908 check_rest (bt type
, int kind
, gfc_actual_arglist
*arglist
)
2910 gfc_actual_arglist
*arg
, *tmp
;
2914 if (!min_max_args (arglist
))
2917 for (arg
= arglist
, n
=1; arg
; arg
= arg
->next
, n
++)
2920 if (x
->ts
.type
!= type
|| x
->ts
.kind
!= kind
)
2922 if (x
->ts
.type
== type
)
2924 if (!gfc_notify_std (GFC_STD_GNU
, "Different type "
2925 "kinds at %L", &x
->where
))
2930 gfc_error ("%<a%d%> argument of %qs intrinsic at %L must be "
2931 "%s(%d)", n
, gfc_current_intrinsic
, &x
->where
,
2932 gfc_basic_typename (type
), kind
);
2937 for (tmp
= arglist
, m
=1; tmp
!= arg
; tmp
= tmp
->next
, m
++)
2938 if (!gfc_check_conformance (tmp
->expr
, x
,
2939 "arguments 'a%d' and 'a%d' for "
2940 "intrinsic '%s'", m
, n
,
2941 gfc_current_intrinsic
))
2950 gfc_check_min_max (gfc_actual_arglist
*arg
)
2954 if (!min_max_args (arg
))
2959 if (x
->ts
.type
== BT_CHARACTER
)
2961 if (!gfc_notify_std (GFC_STD_F2003
, "%qs intrinsic "
2962 "with CHARACTER argument at %L",
2963 gfc_current_intrinsic
, &x
->where
))
2966 else if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
2968 gfc_error ("%<a1%> argument of %qs intrinsic at %L must be INTEGER, "
2969 "REAL or CHARACTER", gfc_current_intrinsic
, &x
->where
);
2973 return check_rest (x
->ts
.type
, x
->ts
.kind
, arg
);
2978 gfc_check_min_max_integer (gfc_actual_arglist
*arg
)
2980 return check_rest (BT_INTEGER
, gfc_default_integer_kind
, arg
);
2985 gfc_check_min_max_real (gfc_actual_arglist
*arg
)
2987 return check_rest (BT_REAL
, gfc_default_real_kind
, arg
);
2992 gfc_check_min_max_double (gfc_actual_arglist
*arg
)
2994 return check_rest (BT_REAL
, gfc_default_double_kind
, arg
);
2998 /* End of min/max family. */
3001 gfc_check_malloc (gfc_expr
*size
)
3003 if (!type_check (size
, 0, BT_INTEGER
))
3006 if (!scalar_check (size
, 0))
3014 gfc_check_matmul (gfc_expr
*matrix_a
, gfc_expr
*matrix_b
)
3016 if ((matrix_a
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_a
->ts
))
3018 gfc_error ("%qs argument of %qs intrinsic at %L must be numeric "
3019 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
3020 gfc_current_intrinsic
, &matrix_a
->where
);
3024 if ((matrix_b
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_b
->ts
))
3026 gfc_error ("%qs argument of %qs intrinsic at %L must be numeric "
3027 "or LOGICAL", gfc_current_intrinsic_arg
[1]->name
,
3028 gfc_current_intrinsic
, &matrix_b
->where
);
3032 if ((matrix_a
->ts
.type
== BT_LOGICAL
&& gfc_numeric_ts (&matrix_b
->ts
))
3033 || (gfc_numeric_ts (&matrix_a
->ts
) && matrix_b
->ts
.type
== BT_LOGICAL
))
3035 gfc_error ("Argument types of %qs intrinsic at %L must match (%s/%s)",
3036 gfc_current_intrinsic
, &matrix_a
->where
,
3037 gfc_typename(&matrix_a
->ts
), gfc_typename(&matrix_b
->ts
));
3041 switch (matrix_a
->rank
)
3044 if (!rank_check (matrix_b
, 1, 2))
3046 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
3047 if (!identical_dimen_shape (matrix_a
, 0, matrix_b
, 0))
3049 gfc_error ("Different shape on dimension 1 for arguments %qs "
3050 "and %qs at %L for intrinsic matmul",
3051 gfc_current_intrinsic_arg
[0]->name
,
3052 gfc_current_intrinsic_arg
[1]->name
, &matrix_a
->where
);
3058 if (matrix_b
->rank
!= 2)
3060 if (!rank_check (matrix_b
, 1, 1))
3063 /* matrix_b has rank 1 or 2 here. Common check for the cases
3064 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
3065 - matrix_a has shape (n,m) and matrix_b has shape (m). */
3066 if (!identical_dimen_shape (matrix_a
, 1, matrix_b
, 0))
3068 gfc_error ("Different shape on dimension 2 for argument %qs and "
3069 "dimension 1 for argument %qs at %L for intrinsic "
3070 "matmul", gfc_current_intrinsic_arg
[0]->name
,
3071 gfc_current_intrinsic_arg
[1]->name
, &matrix_a
->where
);
3077 gfc_error ("%qs argument of %qs intrinsic at %L must be of rank "
3078 "1 or 2", gfc_current_intrinsic_arg
[0]->name
,
3079 gfc_current_intrinsic
, &matrix_a
->where
);
3087 /* Whoever came up with this interface was probably on something.
3088 The possibilities for the occupation of the second and third
3095 NULL MASK minloc(array, mask=m)
3098 I.e. in the case of minloc(array,mask), mask will be in the second
3099 position of the argument list and we'll have to fix that up. */
3102 gfc_check_minloc_maxloc (gfc_actual_arglist
*ap
)
3104 gfc_expr
*a
, *m
, *d
;
3107 if (!int_or_real_check (a
, 0) || !array_check (a
, 0))
3111 m
= ap
->next
->next
->expr
;
3113 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
3114 && ap
->next
->name
== NULL
)
3118 ap
->next
->expr
= NULL
;
3119 ap
->next
->next
->expr
= m
;
3122 if (!dim_check (d
, 1, false))
3125 if (!dim_rank_check (d
, a
, 0))
3128 if (m
!= NULL
&& !type_check (m
, 2, BT_LOGICAL
))
3132 && !gfc_check_conformance (a
, m
,
3133 "arguments '%s' and '%s' for intrinsic %s",
3134 gfc_current_intrinsic_arg
[0]->name
,
3135 gfc_current_intrinsic_arg
[2]->name
,
3136 gfc_current_intrinsic
))
3143 /* Similar to minloc/maxloc, the argument list might need to be
3144 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
3145 difference is that MINLOC/MAXLOC take an additional KIND argument.
3146 The possibilities are:
3152 NULL MASK minval(array, mask=m)
3155 I.e. in the case of minval(array,mask), mask will be in the second
3156 position of the argument list and we'll have to fix that up. */
3159 check_reduction (gfc_actual_arglist
*ap
)
3161 gfc_expr
*a
, *m
, *d
;
3165 m
= ap
->next
->next
->expr
;
3167 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
3168 && ap
->next
->name
== NULL
)
3172 ap
->next
->expr
= NULL
;
3173 ap
->next
->next
->expr
= m
;
3176 if (!dim_check (d
, 1, false))
3179 if (!dim_rank_check (d
, a
, 0))
3182 if (m
!= NULL
&& !type_check (m
, 2, BT_LOGICAL
))
3186 && !gfc_check_conformance (a
, m
,
3187 "arguments '%s' and '%s' for intrinsic %s",
3188 gfc_current_intrinsic_arg
[0]->name
,
3189 gfc_current_intrinsic_arg
[2]->name
,
3190 gfc_current_intrinsic
))
3198 gfc_check_minval_maxval (gfc_actual_arglist
*ap
)
3200 if (!int_or_real_check (ap
->expr
, 0)
3201 || !array_check (ap
->expr
, 0))
3204 return check_reduction (ap
);
3209 gfc_check_product_sum (gfc_actual_arglist
*ap
)
3211 if (!numeric_check (ap
->expr
, 0)
3212 || !array_check (ap
->expr
, 0))
3215 return check_reduction (ap
);
3219 /* For IANY, IALL and IPARITY. */
3222 gfc_check_mask (gfc_expr
*i
, gfc_expr
*kind
)
3226 if (!type_check (i
, 0, BT_INTEGER
))
3229 if (!nonnegative_check ("I", i
))
3232 if (!kind_check (kind
, 1, BT_INTEGER
))
3236 gfc_extract_int (kind
, &k
);
3238 k
= gfc_default_integer_kind
;
3240 if (!less_than_bitsizekind ("I", i
, k
))
3248 gfc_check_transf_bit_intrins (gfc_actual_arglist
*ap
)
3250 if (ap
->expr
->ts
.type
!= BT_INTEGER
)
3252 gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER",
3253 gfc_current_intrinsic_arg
[0]->name
,
3254 gfc_current_intrinsic
, &ap
->expr
->where
);
3258 if (!array_check (ap
->expr
, 0))
3261 return check_reduction (ap
);
3266 gfc_check_merge (gfc_expr
*tsource
, gfc_expr
*fsource
, gfc_expr
*mask
)
3268 if (!same_type_check (tsource
, 0, fsource
, 1))
3271 if (!type_check (mask
, 2, BT_LOGICAL
))
3274 if (tsource
->ts
.type
== BT_CHARACTER
)
3275 return gfc_check_same_strlen (tsource
, fsource
, "MERGE intrinsic");
3282 gfc_check_merge_bits (gfc_expr
*i
, gfc_expr
*j
, gfc_expr
*mask
)
3284 if (!type_check (i
, 0, BT_INTEGER
))
3287 if (!type_check (j
, 1, BT_INTEGER
))
3290 if (!type_check (mask
, 2, BT_INTEGER
))
3293 if (!same_type_check (i
, 0, j
, 1))
3296 if (!same_type_check (i
, 0, mask
, 2))
3304 gfc_check_move_alloc (gfc_expr
*from
, gfc_expr
*to
)
3306 if (!variable_check (from
, 0, false))
3308 if (!allocatable_check (from
, 0))
3310 if (gfc_is_coindexed (from
))
3312 gfc_error ("The FROM argument to MOVE_ALLOC at %L shall not be "
3313 "coindexed", &from
->where
);
3317 if (!variable_check (to
, 1, false))
3319 if (!allocatable_check (to
, 1))
3321 if (gfc_is_coindexed (to
))
3323 gfc_error ("The TO argument to MOVE_ALLOC at %L shall not be "
3324 "coindexed", &to
->where
);
3328 if (from
->ts
.type
== BT_CLASS
&& to
->ts
.type
== BT_DERIVED
)
3330 gfc_error ("The TO arguments in MOVE_ALLOC at %L must be "
3331 "polymorphic if FROM is polymorphic",
3336 if (!same_type_check (to
, 1, from
, 0))
3339 if (to
->rank
!= from
->rank
)
3341 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
3342 "must have the same rank %d/%d", &to
->where
, from
->rank
,
3347 /* IR F08/0040; cf. 12-006A. */
3348 if (gfc_get_corank (to
) != gfc_get_corank (from
))
3350 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
3351 "must have the same corank %d/%d", &to
->where
,
3352 gfc_get_corank (from
), gfc_get_corank (to
));
3356 /* This is based losely on F2003 12.4.1.7. It is intended to prevent
3357 the likes of to = sym->cmp1->cmp2 and from = sym->cmp1, where cmp1
3358 and cmp2 are allocatable. After the allocation is transferred,
3359 the 'to' chain is broken by the nullification of the 'from'. A bit
3360 of reflection reveals that this can only occur for derived types
3361 with recursive allocatable components. */
3362 if (to
->expr_type
== EXPR_VARIABLE
&& from
->expr_type
== EXPR_VARIABLE
3363 && !strcmp (to
->symtree
->n
.sym
->name
, from
->symtree
->n
.sym
->name
))
3365 gfc_ref
*to_ref
, *from_ref
;
3367 from_ref
= from
->ref
;
3368 bool aliasing
= true;
3370 for (; from_ref
&& to_ref
;
3371 from_ref
= from_ref
->next
, to_ref
= to_ref
->next
)
3373 if (to_ref
->type
!= from
->ref
->type
)
3375 else if (to_ref
->type
== REF_ARRAY
3376 && to_ref
->u
.ar
.type
!= AR_FULL
3377 && from_ref
->u
.ar
.type
!= AR_FULL
)
3378 /* Play safe; assume sections and elements are different. */
3380 else if (to_ref
->type
== REF_COMPONENT
3381 && to_ref
->u
.c
.component
!= from_ref
->u
.c
.component
)
3390 gfc_error ("The FROM and TO arguments at %L violate aliasing "
3391 "restrictions (F2003 12.4.1.7)", &to
->where
);
3396 /* CLASS arguments: Make sure the vtab of from is present. */
3397 if (to
->ts
.type
== BT_CLASS
&& !UNLIMITED_POLY (from
))
3398 gfc_find_vtab (&from
->ts
);
3405 gfc_check_nearest (gfc_expr
*x
, gfc_expr
*s
)
3407 if (!type_check (x
, 0, BT_REAL
))
3410 if (!type_check (s
, 1, BT_REAL
))
3413 if (s
->expr_type
== EXPR_CONSTANT
)
3415 if (mpfr_sgn (s
->value
.real
) == 0)
3417 gfc_error ("Argument %<S%> of NEAREST at %L shall not be zero",
3428 gfc_check_new_line (gfc_expr
*a
)
3430 if (!type_check (a
, 0, BT_CHARACTER
))
3438 gfc_check_norm2 (gfc_expr
*array
, gfc_expr
*dim
)
3440 if (!type_check (array
, 0, BT_REAL
))
3443 if (!array_check (array
, 0))
3446 if (!dim_rank_check (dim
, array
, false))
3453 gfc_check_null (gfc_expr
*mold
)
3455 symbol_attribute attr
;
3460 if (!variable_check (mold
, 0, true))
3463 attr
= gfc_variable_attr (mold
, NULL
);
3465 if (!attr
.pointer
&& !attr
.proc_pointer
&& !attr
.allocatable
)
3467 gfc_error ("%qs argument of %qs intrinsic at %L must be a POINTER, "
3468 "ALLOCATABLE or procedure pointer",
3469 gfc_current_intrinsic_arg
[0]->name
,
3470 gfc_current_intrinsic
, &mold
->where
);
3474 if (attr
.allocatable
3475 && !gfc_notify_std (GFC_STD_F2003
, "NULL intrinsic with "
3476 "allocatable MOLD at %L", &mold
->where
))
3480 if (gfc_is_coindexed (mold
))
3482 gfc_error ("%qs argument of %qs intrinsic at %L shall not be "
3483 "coindexed", gfc_current_intrinsic_arg
[0]->name
,
3484 gfc_current_intrinsic
, &mold
->where
);
3493 gfc_check_pack (gfc_expr
*array
, gfc_expr
*mask
, gfc_expr
*vector
)
3495 if (!array_check (array
, 0))
3498 if (!type_check (mask
, 1, BT_LOGICAL
))
3501 if (!gfc_check_conformance (array
, mask
,
3502 "arguments '%s' and '%s' for intrinsic '%s'",
3503 gfc_current_intrinsic_arg
[0]->name
,
3504 gfc_current_intrinsic_arg
[1]->name
,
3505 gfc_current_intrinsic
))
3510 mpz_t array_size
, vector_size
;
3511 bool have_array_size
, have_vector_size
;
3513 if (!same_type_check (array
, 0, vector
, 2))
3516 if (!rank_check (vector
, 2, 1))
3519 /* VECTOR requires at least as many elements as MASK
3520 has .TRUE. values. */
3521 have_array_size
= gfc_array_size(array
, &array_size
);
3522 have_vector_size
= gfc_array_size(vector
, &vector_size
);
3524 if (have_vector_size
3525 && (mask
->expr_type
== EXPR_ARRAY
3526 || (mask
->expr_type
== EXPR_CONSTANT
3527 && have_array_size
)))
3529 int mask_true_values
= 0;
3531 if (mask
->expr_type
== EXPR_ARRAY
)
3533 gfc_constructor
*mask_ctor
;
3534 mask_ctor
= gfc_constructor_first (mask
->value
.constructor
);
3537 if (mask_ctor
->expr
->expr_type
!= EXPR_CONSTANT
)
3539 mask_true_values
= 0;
3543 if (mask_ctor
->expr
->value
.logical
)
3546 mask_ctor
= gfc_constructor_next (mask_ctor
);
3549 else if (mask
->expr_type
== EXPR_CONSTANT
&& mask
->value
.logical
)
3550 mask_true_values
= mpz_get_si (array_size
);
3552 if (mpz_get_si (vector_size
) < mask_true_values
)
3554 gfc_error ("%qs argument of %qs intrinsic at %L must "
3555 "provide at least as many elements as there "
3556 "are .TRUE. values in %qs (%ld/%d)",
3557 gfc_current_intrinsic_arg
[2]->name
,
3558 gfc_current_intrinsic
, &vector
->where
,
3559 gfc_current_intrinsic_arg
[1]->name
,
3560 mpz_get_si (vector_size
), mask_true_values
);
3565 if (have_array_size
)
3566 mpz_clear (array_size
);
3567 if (have_vector_size
)
3568 mpz_clear (vector_size
);
3576 gfc_check_parity (gfc_expr
*mask
, gfc_expr
*dim
)
3578 if (!type_check (mask
, 0, BT_LOGICAL
))
3581 if (!array_check (mask
, 0))
3584 if (!dim_rank_check (dim
, mask
, false))
3592 gfc_check_precision (gfc_expr
*x
)
3594 if (!real_or_complex_check (x
, 0))
3602 gfc_check_present (gfc_expr
*a
)
3606 if (!variable_check (a
, 0, true))
3609 sym
= a
->symtree
->n
.sym
;
3610 if (!sym
->attr
.dummy
)
3612 gfc_error ("%qs argument of %qs intrinsic at %L must be of a "
3613 "dummy variable", gfc_current_intrinsic_arg
[0]->name
,
3614 gfc_current_intrinsic
, &a
->where
);
3618 if (!sym
->attr
.optional
)
3620 gfc_error ("%qs argument of %qs intrinsic at %L must be of "
3621 "an OPTIONAL dummy variable",
3622 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3627 /* 13.14.82 PRESENT(A)
3629 Argument. A shall be the name of an optional dummy argument that is
3630 accessible in the subprogram in which the PRESENT function reference
3634 && !(a
->ref
->next
== NULL
&& a
->ref
->type
== REF_ARRAY
3635 && (a
->ref
->u
.ar
.type
== AR_FULL
3636 || (a
->ref
->u
.ar
.type
== AR_ELEMENT
3637 && a
->ref
->u
.ar
.as
->rank
== 0))))
3639 gfc_error ("%qs argument of %qs intrinsic at %L must not be a "
3640 "subobject of %qs", gfc_current_intrinsic_arg
[0]->name
,
3641 gfc_current_intrinsic
, &a
->where
, sym
->name
);
3650 gfc_check_radix (gfc_expr
*x
)
3652 if (!int_or_real_check (x
, 0))
3660 gfc_check_range (gfc_expr
*x
)
3662 if (!numeric_check (x
, 0))
3670 gfc_check_rank (gfc_expr
*a
)
3672 /* Any data object is allowed; a "data object" is a "constant (4.1.3),
3673 variable (6), or subobject of a constant (2.4.3.2.3)" (F2008, 1.3.45). */
3675 bool is_variable
= true;
3677 /* Functions returning pointers are regarded as variable, cf. F2008, R602. */
3678 if (a
->expr_type
== EXPR_FUNCTION
)
3679 is_variable
= a
->value
.function
.esym
3680 ? a
->value
.function
.esym
->result
->attr
.pointer
3681 : a
->symtree
->n
.sym
->result
->attr
.pointer
;
3683 if (a
->expr_type
== EXPR_OP
|| a
->expr_type
== EXPR_NULL
3684 || a
->expr_type
== EXPR_COMPCALL
|| a
->expr_type
== EXPR_PPC
3687 gfc_error ("The argument of the RANK intrinsic at %L must be a data "
3688 "object", &a
->where
);
3696 /* real, float, sngl. */
3698 gfc_check_real (gfc_expr
*a
, gfc_expr
*kind
)
3700 if (!numeric_check (a
, 0))
3703 if (!kind_check (kind
, 1, BT_REAL
))
3711 gfc_check_rename (gfc_expr
*path1
, gfc_expr
*path2
)
3713 if (!type_check (path1
, 0, BT_CHARACTER
))
3715 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
3718 if (!type_check (path2
, 1, BT_CHARACTER
))
3720 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
3728 gfc_check_rename_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
3730 if (!type_check (path1
, 0, BT_CHARACTER
))
3732 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
3735 if (!type_check (path2
, 1, BT_CHARACTER
))
3737 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
3743 if (!type_check (status
, 2, BT_INTEGER
))
3746 if (!scalar_check (status
, 2))
3754 gfc_check_repeat (gfc_expr
*x
, gfc_expr
*y
)
3756 if (!type_check (x
, 0, BT_CHARACTER
))
3759 if (!scalar_check (x
, 0))
3762 if (!type_check (y
, 0, BT_INTEGER
))
3765 if (!scalar_check (y
, 1))
3773 gfc_check_reshape (gfc_expr
*source
, gfc_expr
*shape
,
3774 gfc_expr
*pad
, gfc_expr
*order
)
3780 if (!array_check (source
, 0))
3783 if (!rank_check (shape
, 1, 1))
3786 if (!type_check (shape
, 1, BT_INTEGER
))
3789 if (!gfc_array_size (shape
, &size
))
3791 gfc_error ("%<shape%> argument of %<reshape%> intrinsic at %L must be an "
3792 "array of constant size", &shape
->where
);
3796 shape_size
= mpz_get_ui (size
);
3799 if (shape_size
<= 0)
3801 gfc_error ("%qs argument of %qs intrinsic at %L is empty",
3802 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3806 else if (shape_size
> GFC_MAX_DIMENSIONS
)
3808 gfc_error ("%<shape%> argument of %<reshape%> intrinsic at %L has more "
3809 "than %d elements", &shape
->where
, GFC_MAX_DIMENSIONS
);
3812 else if (shape
->expr_type
== EXPR_ARRAY
&& gfc_is_constant_expr (shape
))
3816 for (i
= 0; i
< shape_size
; ++i
)
3818 e
= gfc_constructor_lookup_expr (shape
->value
.constructor
, i
);
3819 if (e
->expr_type
!= EXPR_CONSTANT
)
3822 gfc_extract_int (e
, &extent
);
3825 gfc_error ("%qs argument of %qs intrinsic at %L has "
3826 "negative element (%d)",
3827 gfc_current_intrinsic_arg
[1]->name
,
3828 gfc_current_intrinsic
, &e
->where
, extent
);
3833 else if (shape
->expr_type
== EXPR_VARIABLE
&& shape
->ref
3834 && shape
->ref
->u
.ar
.type
== AR_FULL
&& shape
->ref
->u
.ar
.dimen
== 1
3835 && shape
->ref
->u
.ar
.as
3836 && shape
->ref
->u
.ar
.as
->lower
[0]->expr_type
== EXPR_CONSTANT
3837 && shape
->ref
->u
.ar
.as
->lower
[0]->ts
.type
== BT_INTEGER
3838 && shape
->ref
->u
.ar
.as
->upper
[0]->expr_type
== EXPR_CONSTANT
3839 && shape
->ref
->u
.ar
.as
->upper
[0]->ts
.type
== BT_INTEGER
3840 && shape
->symtree
->n
.sym
->attr
.flavor
== FL_PARAMETER
)
3845 v
= shape
->symtree
->n
.sym
->value
;
3847 for (i
= 0; i
< shape_size
; i
++)
3849 e
= gfc_constructor_lookup_expr (v
->value
.constructor
, i
);
3853 gfc_extract_int (e
, &extent
);
3857 gfc_error ("Element %d of actual argument of RESHAPE at %L "
3858 "cannot be negative", i
+ 1, &shape
->where
);
3866 if (!same_type_check (source
, 0, pad
, 2))
3869 if (!array_check (pad
, 2))
3875 if (!array_check (order
, 3))
3878 if (!type_check (order
, 3, BT_INTEGER
))
3881 if (order
->expr_type
== EXPR_ARRAY
&& gfc_is_constant_expr (order
))
3883 int i
, order_size
, dim
, perm
[GFC_MAX_DIMENSIONS
];
3886 for (i
= 0; i
< GFC_MAX_DIMENSIONS
; ++i
)
3889 gfc_array_size (order
, &size
);
3890 order_size
= mpz_get_ui (size
);
3893 if (order_size
!= shape_size
)
3895 gfc_error ("%qs argument of %qs intrinsic at %L "
3896 "has wrong number of elements (%d/%d)",
3897 gfc_current_intrinsic_arg
[3]->name
,
3898 gfc_current_intrinsic
, &order
->where
,
3899 order_size
, shape_size
);
3903 for (i
= 1; i
<= order_size
; ++i
)
3905 e
= gfc_constructor_lookup_expr (order
->value
.constructor
, i
-1);
3906 if (e
->expr_type
!= EXPR_CONSTANT
)
3909 gfc_extract_int (e
, &dim
);
3911 if (dim
< 1 || dim
> order_size
)
3913 gfc_error ("%qs argument of %qs intrinsic at %L "
3914 "has out-of-range dimension (%d)",
3915 gfc_current_intrinsic_arg
[3]->name
,
3916 gfc_current_intrinsic
, &e
->where
, dim
);
3920 if (perm
[dim
-1] != 0)
3922 gfc_error ("%qs argument of %qs intrinsic at %L has "
3923 "invalid permutation of dimensions (dimension "
3925 gfc_current_intrinsic_arg
[3]->name
,
3926 gfc_current_intrinsic
, &e
->where
, dim
);
3935 if (pad
== NULL
&& shape
->expr_type
== EXPR_ARRAY
3936 && gfc_is_constant_expr (shape
)
3937 && !(source
->expr_type
== EXPR_VARIABLE
&& source
->symtree
->n
.sym
->as
3938 && source
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
))
3940 /* Check the match in size between source and destination. */
3941 if (gfc_array_size (source
, &nelems
))
3947 mpz_init_set_ui (size
, 1);
3948 for (c
= gfc_constructor_first (shape
->value
.constructor
);
3949 c
; c
= gfc_constructor_next (c
))
3950 mpz_mul (size
, size
, c
->expr
->value
.integer
);
3952 test
= mpz_cmp (nelems
, size
) < 0 && mpz_cmp_ui (size
, 0) > 0;
3958 gfc_error ("Without padding, there are not enough elements "
3959 "in the intrinsic RESHAPE source at %L to match "
3960 "the shape", &source
->where
);
3971 gfc_check_same_type_as (gfc_expr
*a
, gfc_expr
*b
)
3973 if (a
->ts
.type
!= BT_DERIVED
&& a
->ts
.type
!= BT_CLASS
)
3975 gfc_error ("%qs argument of %qs intrinsic at %L "
3976 "cannot be of type %s",
3977 gfc_current_intrinsic_arg
[0]->name
,
3978 gfc_current_intrinsic
,
3979 &a
->where
, gfc_typename (&a
->ts
));
3983 if (!(gfc_type_is_extensible (a
->ts
.u
.derived
) || UNLIMITED_POLY (a
)))
3985 gfc_error ("%qs argument of %qs intrinsic at %L "
3986 "must be of an extensible type",
3987 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3992 if (b
->ts
.type
!= BT_DERIVED
&& b
->ts
.type
!= BT_CLASS
)
3994 gfc_error ("%qs argument of %qs intrinsic at %L "
3995 "cannot be of type %s",
3996 gfc_current_intrinsic_arg
[0]->name
,
3997 gfc_current_intrinsic
,
3998 &b
->where
, gfc_typename (&b
->ts
));
4002 if (!(gfc_type_is_extensible (b
->ts
.u
.derived
) || UNLIMITED_POLY (b
)))
4004 gfc_error ("%qs argument of %qs intrinsic at %L "
4005 "must be of an extensible type",
4006 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
4016 gfc_check_scale (gfc_expr
*x
, gfc_expr
*i
)
4018 if (!type_check (x
, 0, BT_REAL
))
4021 if (!type_check (i
, 1, BT_INTEGER
))
4029 gfc_check_scan (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
4031 if (!type_check (x
, 0, BT_CHARACTER
))
4034 if (!type_check (y
, 1, BT_CHARACTER
))
4037 if (z
!= NULL
&& !type_check (z
, 2, BT_LOGICAL
))
4040 if (!kind_check (kind
, 3, BT_INTEGER
))
4042 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "%qs intrinsic "
4043 "with KIND argument at %L",
4044 gfc_current_intrinsic
, &kind
->where
))
4047 if (!same_type_check (x
, 0, y
, 1))
4055 gfc_check_secnds (gfc_expr
*r
)
4057 if (!type_check (r
, 0, BT_REAL
))
4060 if (!kind_value_check (r
, 0, 4))
4063 if (!scalar_check (r
, 0))
4071 gfc_check_selected_char_kind (gfc_expr
*name
)
4073 if (!type_check (name
, 0, BT_CHARACTER
))
4076 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
4079 if (!scalar_check (name
, 0))
4087 gfc_check_selected_int_kind (gfc_expr
*r
)
4089 if (!type_check (r
, 0, BT_INTEGER
))
4092 if (!scalar_check (r
, 0))
4100 gfc_check_selected_real_kind (gfc_expr
*p
, gfc_expr
*r
, gfc_expr
*radix
)
4102 if (p
== NULL
&& r
== NULL
4103 && !gfc_notify_std (GFC_STD_F2008
, "SELECTED_REAL_KIND with"
4104 " neither %<P%> nor %<R%> argument at %L",
4105 gfc_current_intrinsic_where
))
4110 if (!type_check (p
, 0, BT_INTEGER
))
4113 if (!scalar_check (p
, 0))
4119 if (!type_check (r
, 1, BT_INTEGER
))
4122 if (!scalar_check (r
, 1))
4128 if (!type_check (radix
, 1, BT_INTEGER
))
4131 if (!scalar_check (radix
, 1))
4134 if (!gfc_notify_std (GFC_STD_F2008
, "%qs intrinsic with "
4135 "RADIX argument at %L", gfc_current_intrinsic
,
4145 gfc_check_set_exponent (gfc_expr
*x
, gfc_expr
*i
)
4147 if (!type_check (x
, 0, BT_REAL
))
4150 if (!type_check (i
, 1, BT_INTEGER
))
4158 gfc_check_shape (gfc_expr
*source
, gfc_expr
*kind
)
4162 if (source
->rank
== 0 || source
->expr_type
!= EXPR_VARIABLE
)
4165 ar
= gfc_find_array_ref (source
);
4167 if (ar
->as
&& ar
->as
->type
== AS_ASSUMED_SIZE
&& ar
->type
== AR_FULL
)
4169 gfc_error ("%<source%> argument of %<shape%> intrinsic at %L must not be "
4170 "an assumed size array", &source
->where
);
4174 if (!kind_check (kind
, 1, BT_INTEGER
))
4176 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "%qs intrinsic "
4177 "with KIND argument at %L",
4178 gfc_current_intrinsic
, &kind
->where
))
4186 gfc_check_shift (gfc_expr
*i
, gfc_expr
*shift
)
4188 if (!type_check (i
, 0, BT_INTEGER
))
4191 if (!type_check (shift
, 0, BT_INTEGER
))
4194 if (!nonnegative_check ("SHIFT", shift
))
4197 if (!less_than_bitsize1 ("I", i
, "SHIFT", shift
, true))
4205 gfc_check_sign (gfc_expr
*a
, gfc_expr
*b
)
4207 if (!int_or_real_check (a
, 0))
4210 if (!same_type_check (a
, 0, b
, 1))
4218 gfc_check_size (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
4220 if (!array_check (array
, 0))
4223 if (!dim_check (dim
, 1, true))
4226 if (!dim_rank_check (dim
, array
, 0))
4229 if (!kind_check (kind
, 2, BT_INTEGER
))
4231 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "%qs intrinsic "
4232 "with KIND argument at %L",
4233 gfc_current_intrinsic
, &kind
->where
))
4242 gfc_check_sizeof (gfc_expr
*arg
)
4244 if (arg
->ts
.type
== BT_PROCEDURE
)
4246 gfc_error ("%qs argument of %qs intrinsic at %L shall not be a procedure",
4247 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4252 /* TYPE(*) is acceptable if and only if it uses an array descriptor. */
4253 if (arg
->ts
.type
== BT_ASSUMED
4254 && (arg
->symtree
->n
.sym
->as
== NULL
4255 || (arg
->symtree
->n
.sym
->as
->type
!= AS_ASSUMED_SHAPE
4256 && arg
->symtree
->n
.sym
->as
->type
!= AS_DEFERRED
4257 && arg
->symtree
->n
.sym
->as
->type
!= AS_ASSUMED_RANK
)))
4259 gfc_error ("%qs argument of %qs intrinsic at %L shall not be TYPE(*)",
4260 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4265 if (arg
->rank
&& arg
->expr_type
== EXPR_VARIABLE
4266 && arg
->symtree
->n
.sym
->as
!= NULL
4267 && arg
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
&& arg
->ref
4268 && arg
->ref
->type
== REF_ARRAY
&& arg
->ref
->u
.ar
.type
== AR_FULL
)
4270 gfc_error ("%qs argument of %qs intrinsic at %L shall not be an "
4271 "assumed-size array", gfc_current_intrinsic_arg
[0]->name
,
4272 gfc_current_intrinsic
, &arg
->where
);
4280 /* Check whether an expression is interoperable. When returning false,
4281 msg is set to a string telling why the expression is not interoperable,
4282 otherwise, it is set to NULL. The msg string can be used in diagnostics.
4283 If c_loc is true, character with len > 1 are allowed (cf. Fortran
4284 2003corr5); additionally, assumed-shape/assumed-rank/deferred-shape
4285 arrays are permitted. And if c_f_ptr is true, deferred-shape arrays
4289 is_c_interoperable (gfc_expr
*expr
, const char **msg
, bool c_loc
, bool c_f_ptr
)
4293 if (expr
->ts
.type
== BT_CLASS
)
4295 *msg
= "Expression is polymorphic";
4299 if (expr
->ts
.type
== BT_DERIVED
&& !expr
->ts
.u
.derived
->attr
.is_bind_c
4300 && !expr
->ts
.u
.derived
->ts
.is_iso_c
)
4302 *msg
= "Expression is a noninteroperable derived type";
4306 if (expr
->ts
.type
== BT_PROCEDURE
)
4308 *msg
= "Procedure unexpected as argument";
4312 if (gfc_notification_std (GFC_STD_GNU
) && expr
->ts
.type
== BT_LOGICAL
)
4315 for (i
= 0; gfc_logical_kinds
[i
].kind
; i
++)
4316 if (gfc_logical_kinds
[i
].kind
== expr
->ts
.kind
)
4318 *msg
= "Extension to use a non-C_Bool-kind LOGICAL";
4322 if (gfc_notification_std (GFC_STD_GNU
) && expr
->ts
.type
== BT_CHARACTER
4323 && expr
->ts
.kind
!= 1)
4325 *msg
= "Extension to use a non-C_CHAR-kind CHARACTER";
4329 if (expr
->ts
.type
== BT_CHARACTER
) {
4330 if (expr
->ts
.deferred
)
4332 /* TS 29113 allows deferred-length strings as dummy arguments,
4333 but it is not an interoperable type. */
4334 *msg
= "Expression shall not be a deferred-length string";
4338 if (expr
->ts
.u
.cl
&& expr
->ts
.u
.cl
->length
4339 && !gfc_simplify_expr (expr
->ts
.u
.cl
->length
, 0))
4340 gfc_internal_error ("is_c_interoperable(): gfc_simplify_expr failed");
4342 if (!c_loc
&& expr
->ts
.u
.cl
4343 && (!expr
->ts
.u
.cl
->length
4344 || expr
->ts
.u
.cl
->length
->expr_type
!= EXPR_CONSTANT
4345 || mpz_cmp_si (expr
->ts
.u
.cl
->length
->value
.integer
, 1) != 0))
4347 *msg
= "Type shall have a character length of 1";
4352 /* Note: The following checks are about interoperatable variables, Fortran
4353 15.3.5/15.3.6. In intrinsics like C_LOC or in procedure interface, more
4354 is allowed, e.g. assumed-shape arrays with TS 29113. */
4356 if (gfc_is_coarray (expr
))
4358 *msg
= "Coarrays are not interoperable";
4362 if (!c_loc
&& expr
->rank
> 0 && expr
->expr_type
!= EXPR_ARRAY
)
4364 gfc_array_ref
*ar
= gfc_find_array_ref (expr
);
4365 if (ar
->type
!= AR_FULL
)
4367 *msg
= "Only whole-arrays are interoperable";
4370 if (!c_f_ptr
&& ar
->as
->type
!= AS_EXPLICIT
4371 && ar
->as
->type
!= AS_ASSUMED_SIZE
)
4373 *msg
= "Only explicit-size and assumed-size arrays are interoperable";
4383 gfc_check_c_sizeof (gfc_expr
*arg
)
4387 if (!is_c_interoperable (arg
, &msg
, false, false))
4389 gfc_error ("%qs argument of %qs intrinsic at %L must be an "
4390 "interoperable data entity: %s",
4391 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4396 if (arg
->ts
.type
== BT_ASSUMED
)
4398 gfc_error ("%qs argument of %qs intrinsic at %L shall not be "
4400 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4405 if (arg
->rank
&& arg
->expr_type
== EXPR_VARIABLE
4406 && arg
->symtree
->n
.sym
->as
!= NULL
4407 && arg
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
&& arg
->ref
4408 && arg
->ref
->type
== REF_ARRAY
&& arg
->ref
->u
.ar
.type
== AR_FULL
)
4410 gfc_error ("%qs argument of %qs intrinsic at %L shall not be an "
4411 "assumed-size array", gfc_current_intrinsic_arg
[0]->name
,
4412 gfc_current_intrinsic
, &arg
->where
);
4421 gfc_check_c_associated (gfc_expr
*c_ptr_1
, gfc_expr
*c_ptr_2
)
4423 if (c_ptr_1
->ts
.type
!= BT_DERIVED
4424 || c_ptr_1
->ts
.u
.derived
->from_intmod
!= INTMOD_ISO_C_BINDING
4425 || (c_ptr_1
->ts
.u
.derived
->intmod_sym_id
!= ISOCBINDING_PTR
4426 && c_ptr_1
->ts
.u
.derived
->intmod_sym_id
!= ISOCBINDING_FUNPTR
))
4428 gfc_error ("Argument C_PTR_1 at %L to C_ASSOCIATED shall have the "
4429 "type TYPE(C_PTR) or TYPE(C_FUNPTR)", &c_ptr_1
->where
);
4433 if (!scalar_check (c_ptr_1
, 0))
4437 && (c_ptr_2
->ts
.type
!= BT_DERIVED
4438 || c_ptr_2
->ts
.u
.derived
->from_intmod
!= INTMOD_ISO_C_BINDING
4439 || (c_ptr_1
->ts
.u
.derived
->intmod_sym_id
4440 != c_ptr_2
->ts
.u
.derived
->intmod_sym_id
)))
4442 gfc_error ("Argument C_PTR_2 at %L to C_ASSOCIATED shall have the "
4443 "same type as C_PTR_1: %s instead of %s", &c_ptr_1
->where
,
4444 gfc_typename (&c_ptr_1
->ts
),
4445 gfc_typename (&c_ptr_2
->ts
));
4449 if (c_ptr_2
&& !scalar_check (c_ptr_2
, 1))
4457 gfc_check_c_f_pointer (gfc_expr
*cptr
, gfc_expr
*fptr
, gfc_expr
*shape
)
4459 symbol_attribute attr
;
4462 if (cptr
->ts
.type
!= BT_DERIVED
4463 || cptr
->ts
.u
.derived
->from_intmod
!= INTMOD_ISO_C_BINDING
4464 || cptr
->ts
.u
.derived
->intmod_sym_id
!= ISOCBINDING_PTR
)
4466 gfc_error ("Argument CPTR at %L to C_F_POINTER shall have the "
4467 "type TYPE(C_PTR)", &cptr
->where
);
4471 if (!scalar_check (cptr
, 0))
4474 attr
= gfc_expr_attr (fptr
);
4478 gfc_error ("Argument FPTR at %L to C_F_POINTER must be a pointer",
4483 if (fptr
->ts
.type
== BT_CLASS
)
4485 gfc_error ("FPTR argument at %L to C_F_POINTER shall not be polymorphic",
4490 if (gfc_is_coindexed (fptr
))
4492 gfc_error ("Argument FPTR at %L to C_F_POINTER shall not be "
4493 "coindexed", &fptr
->where
);
4497 if (fptr
->rank
== 0 && shape
)
4499 gfc_error ("Unexpected SHAPE argument at %L to C_F_POINTER with scalar "
4500 "FPTR", &fptr
->where
);
4503 else if (fptr
->rank
&& !shape
)
4505 gfc_error ("Expected SHAPE argument to C_F_POINTER with array "
4506 "FPTR at %L", &fptr
->where
);
4510 if (shape
&& !rank_check (shape
, 2, 1))
4513 if (shape
&& !type_check (shape
, 2, BT_INTEGER
))
4519 if (gfc_array_size (shape
, &size
))
4521 if (mpz_cmp_ui (size
, fptr
->rank
) != 0)
4524 gfc_error ("SHAPE argument at %L to C_F_POINTER must have the same "
4525 "size as the RANK of FPTR", &shape
->where
);
4532 if (fptr
->ts
.type
== BT_CLASS
)
4534 gfc_error ("Polymorphic FPTR at %L to C_F_POINTER", &fptr
->where
);
4538 if (!is_c_interoperable (fptr
, &msg
, false, true))
4539 return gfc_notify_std (GFC_STD_F2008_TS
, "Noninteroperable array FPTR "
4540 "at %L to C_F_POINTER: %s", &fptr
->where
, msg
);
4547 gfc_check_c_f_procpointer (gfc_expr
*cptr
, gfc_expr
*fptr
)
4549 symbol_attribute attr
;
4551 if (cptr
->ts
.type
!= BT_DERIVED
4552 || cptr
->ts
.u
.derived
->from_intmod
!= INTMOD_ISO_C_BINDING
4553 || cptr
->ts
.u
.derived
->intmod_sym_id
!= ISOCBINDING_FUNPTR
)
4555 gfc_error ("Argument CPTR at %L to C_F_PROCPOINTER shall have the "
4556 "type TYPE(C_FUNPTR)", &cptr
->where
);
4560 if (!scalar_check (cptr
, 0))
4563 attr
= gfc_expr_attr (fptr
);
4565 if (!attr
.proc_pointer
)
4567 gfc_error ("Argument FPTR at %L to C_F_PROCPOINTER shall be a procedure "
4568 "pointer", &fptr
->where
);
4572 if (gfc_is_coindexed (fptr
))
4574 gfc_error ("Argument FPTR at %L to C_F_PROCPOINTER shall not be "
4575 "coindexed", &fptr
->where
);
4579 if (!attr
.is_bind_c
)
4580 return gfc_notify_std (GFC_STD_F2008_TS
, "Noninteroperable procedure "
4581 "pointer at %L to C_F_PROCPOINTER", &fptr
->where
);
4588 gfc_check_c_funloc (gfc_expr
*x
)
4590 symbol_attribute attr
;
4592 if (gfc_is_coindexed (x
))
4594 gfc_error ("Argument X at %L to C_FUNLOC shall not be "
4595 "coindexed", &x
->where
);
4599 attr
= gfc_expr_attr (x
);
4601 if (attr
.function
&& !attr
.proc_pointer
&& x
->expr_type
== EXPR_VARIABLE
4602 && x
->symtree
->n
.sym
== x
->symtree
->n
.sym
->result
)
4604 gfc_namespace
*ns
= gfc_current_ns
;
4606 for (ns
= gfc_current_ns
; ns
; ns
= ns
->parent
)
4607 if (x
->symtree
->n
.sym
== ns
->proc_name
)
4609 gfc_error ("Function result %qs at %L is invalid as X argument "
4610 "to C_FUNLOC", x
->symtree
->n
.sym
->name
, &x
->where
);
4615 if (attr
.flavor
!= FL_PROCEDURE
)
4617 gfc_error ("Argument X at %L to C_FUNLOC shall be a procedure "
4618 "or a procedure pointer", &x
->where
);
4622 if (!attr
.is_bind_c
)
4623 return gfc_notify_std (GFC_STD_F2008_TS
, "Noninteroperable procedure "
4624 "at %L to C_FUNLOC", &x
->where
);
4630 gfc_check_c_loc (gfc_expr
*x
)
4632 symbol_attribute attr
;
4635 if (gfc_is_coindexed (x
))
4637 gfc_error ("Argument X at %L to C_LOC shall not be coindexed", &x
->where
);
4641 if (x
->ts
.type
== BT_CLASS
)
4643 gfc_error ("X argument at %L to C_LOC shall not be polymorphic",
4648 attr
= gfc_expr_attr (x
);
4651 && (x
->expr_type
!= EXPR_VARIABLE
|| !attr
.target
4652 || attr
.flavor
== FL_PARAMETER
))
4654 gfc_error ("Argument X at %L to C_LOC shall have either "
4655 "the POINTER or the TARGET attribute", &x
->where
);
4659 if (x
->ts
.type
== BT_CHARACTER
4660 && gfc_var_strlen (x
) == 0)
4662 gfc_error ("Argument X at %L to C_LOC shall be not be a zero-sized "
4663 "string", &x
->where
);
4667 if (!is_c_interoperable (x
, &msg
, true, false))
4669 if (x
->ts
.type
== BT_CLASS
)
4671 gfc_error ("Argument at %L to C_LOC shall not be polymorphic",
4677 && !gfc_notify_std (GFC_STD_F2008_TS
,
4678 "Noninteroperable array at %L as"
4679 " argument to C_LOC: %s", &x
->where
, msg
))
4682 else if (x
->rank
> 0 && gfc_notification_std (GFC_STD_F2008
))
4684 gfc_array_ref
*ar
= gfc_find_array_ref (x
);
4686 if (ar
->as
->type
!= AS_EXPLICIT
&& ar
->as
->type
!= AS_ASSUMED_SIZE
4687 && !attr
.allocatable
4688 && !gfc_notify_std (GFC_STD_F2008
,
4689 "Array of interoperable type at %L "
4690 "to C_LOC which is nonallocatable and neither "
4691 "assumed size nor explicit size", &x
->where
))
4693 else if (ar
->type
!= AR_FULL
4694 && !gfc_notify_std (GFC_STD_F2008
, "Array section at %L "
4695 "to C_LOC", &x
->where
))
4704 gfc_check_sleep_sub (gfc_expr
*seconds
)
4706 if (!type_check (seconds
, 0, BT_INTEGER
))
4709 if (!scalar_check (seconds
, 0))
4716 gfc_check_sngl (gfc_expr
*a
)
4718 if (!type_check (a
, 0, BT_REAL
))
4721 if ((a
->ts
.kind
!= gfc_default_double_kind
)
4722 && !gfc_notify_std (GFC_STD_GNU
, "non double precision "
4723 "REAL argument to %s intrinsic at %L",
4724 gfc_current_intrinsic
, &a
->where
))
4731 gfc_check_spread (gfc_expr
*source
, gfc_expr
*dim
, gfc_expr
*ncopies
)
4733 if (source
->rank
>= GFC_MAX_DIMENSIONS
)
4735 gfc_error ("%qs argument of %qs intrinsic at %L must be less "
4736 "than rank %d", gfc_current_intrinsic_arg
[0]->name
,
4737 gfc_current_intrinsic
, &source
->where
, GFC_MAX_DIMENSIONS
);
4745 if (!dim_check (dim
, 1, false))
4748 /* dim_rank_check() does not apply here. */
4750 && dim
->expr_type
== EXPR_CONSTANT
4751 && (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
4752 || mpz_cmp_ui (dim
->value
.integer
, source
->rank
+ 1) > 0))
4754 gfc_error ("%qs argument of %qs intrinsic at %L is not a valid "
4755 "dimension index", gfc_current_intrinsic_arg
[1]->name
,
4756 gfc_current_intrinsic
, &dim
->where
);
4760 if (!type_check (ncopies
, 2, BT_INTEGER
))
4763 if (!scalar_check (ncopies
, 2))
4770 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
4774 gfc_check_fgetputc_sub (gfc_expr
*unit
, gfc_expr
*c
, gfc_expr
*status
)
4776 if (!type_check (unit
, 0, BT_INTEGER
))
4779 if (!scalar_check (unit
, 0))
4782 if (!type_check (c
, 1, BT_CHARACTER
))
4784 if (!kind_value_check (c
, 1, gfc_default_character_kind
))
4790 if (!type_check (status
, 2, BT_INTEGER
)
4791 || !kind_value_check (status
, 2, gfc_default_integer_kind
)
4792 || !scalar_check (status
, 2))
4800 gfc_check_fgetputc (gfc_expr
*unit
, gfc_expr
*c
)
4802 return gfc_check_fgetputc_sub (unit
, c
, NULL
);
4807 gfc_check_fgetput_sub (gfc_expr
*c
, gfc_expr
*status
)
4809 if (!type_check (c
, 0, BT_CHARACTER
))
4811 if (!kind_value_check (c
, 0, gfc_default_character_kind
))
4817 if (!type_check (status
, 1, BT_INTEGER
)
4818 || !kind_value_check (status
, 1, gfc_default_integer_kind
)
4819 || !scalar_check (status
, 1))
4827 gfc_check_fgetput (gfc_expr
*c
)
4829 return gfc_check_fgetput_sub (c
, NULL
);
4834 gfc_check_fseek_sub (gfc_expr
*unit
, gfc_expr
*offset
, gfc_expr
*whence
, gfc_expr
*status
)
4836 if (!type_check (unit
, 0, BT_INTEGER
))
4839 if (!scalar_check (unit
, 0))
4842 if (!type_check (offset
, 1, BT_INTEGER
))
4845 if (!scalar_check (offset
, 1))
4848 if (!type_check (whence
, 2, BT_INTEGER
))
4851 if (!scalar_check (whence
, 2))
4857 if (!type_check (status
, 3, BT_INTEGER
))
4860 if (!kind_value_check (status
, 3, 4))
4863 if (!scalar_check (status
, 3))
4872 gfc_check_fstat (gfc_expr
*unit
, gfc_expr
*array
)
4874 if (!type_check (unit
, 0, BT_INTEGER
))
4877 if (!scalar_check (unit
, 0))
4880 if (!type_check (array
, 1, BT_INTEGER
)
4881 || !kind_value_check (unit
, 0, gfc_default_integer_kind
))
4884 if (!array_check (array
, 1))
4892 gfc_check_fstat_sub (gfc_expr
*unit
, gfc_expr
*array
, gfc_expr
*status
)
4894 if (!type_check (unit
, 0, BT_INTEGER
))
4897 if (!scalar_check (unit
, 0))
4900 if (!type_check (array
, 1, BT_INTEGER
)
4901 || !kind_value_check (array
, 1, gfc_default_integer_kind
))
4904 if (!array_check (array
, 1))
4910 if (!type_check (status
, 2, BT_INTEGER
)
4911 || !kind_value_check (status
, 2, gfc_default_integer_kind
))
4914 if (!scalar_check (status
, 2))
4922 gfc_check_ftell (gfc_expr
*unit
)
4924 if (!type_check (unit
, 0, BT_INTEGER
))
4927 if (!scalar_check (unit
, 0))
4935 gfc_check_ftell_sub (gfc_expr
*unit
, gfc_expr
*offset
)
4937 if (!type_check (unit
, 0, BT_INTEGER
))
4940 if (!scalar_check (unit
, 0))
4943 if (!type_check (offset
, 1, BT_INTEGER
))
4946 if (!scalar_check (offset
, 1))
4954 gfc_check_stat (gfc_expr
*name
, gfc_expr
*array
)
4956 if (!type_check (name
, 0, BT_CHARACTER
))
4958 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
4961 if (!type_check (array
, 1, BT_INTEGER
)
4962 || !kind_value_check (array
, 1, gfc_default_integer_kind
))
4965 if (!array_check (array
, 1))
4973 gfc_check_stat_sub (gfc_expr
*name
, gfc_expr
*array
, gfc_expr
*status
)
4975 if (!type_check (name
, 0, BT_CHARACTER
))
4977 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
4980 if (!type_check (array
, 1, BT_INTEGER
)
4981 || !kind_value_check (array
, 1, gfc_default_integer_kind
))
4984 if (!array_check (array
, 1))
4990 if (!type_check (status
, 2, BT_INTEGER
)
4991 || !kind_value_check (array
, 1, gfc_default_integer_kind
))
4994 if (!scalar_check (status
, 2))
5002 gfc_check_image_index (gfc_expr
*coarray
, gfc_expr
*sub
)
5006 if (flag_coarray
== GFC_FCOARRAY_NONE
)
5008 gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable");
5012 if (!coarray_check (coarray
, 0))
5017 gfc_error ("%s argument to IMAGE_INDEX must be a rank one array at %L",
5018 gfc_current_intrinsic_arg
[1]->name
, &sub
->where
);
5022 if (gfc_array_size (sub
, &nelems
))
5024 int corank
= gfc_get_corank (coarray
);
5026 if (mpz_cmp_ui (nelems
, corank
) != 0)
5028 gfc_error ("The number of array elements of the SUB argument to "
5029 "IMAGE_INDEX at %L shall be %d (corank) not %d",
5030 &sub
->where
, corank
, (int) mpz_get_si (nelems
));
5042 gfc_check_num_images (gfc_expr
*distance
, gfc_expr
*failed
)
5044 if (flag_coarray
== GFC_FCOARRAY_NONE
)
5046 gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable");
5052 if (!type_check (distance
, 0, BT_INTEGER
))
5055 if (!nonnegative_check ("DISTANCE", distance
))
5058 if (!scalar_check (distance
, 0))
5061 if (!gfc_notify_std (GFC_STD_F2008_TS
, "DISTANCE= argument to "
5062 "NUM_IMAGES at %L", &distance
->where
))
5068 if (!type_check (failed
, 1, BT_LOGICAL
))
5071 if (!scalar_check (failed
, 1))
5074 if (!gfc_notify_std (GFC_STD_F2008_TS
, "FAILED= argument to "
5075 "NUM_IMAGES at %L", &distance
->where
))
5084 gfc_check_this_image (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*distance
)
5086 if (flag_coarray
== GFC_FCOARRAY_NONE
)
5088 gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable");
5092 if (coarray
== NULL
&& dim
== NULL
&& distance
== NULL
)
5095 if (dim
!= NULL
&& coarray
== NULL
)
5097 gfc_error ("DIM argument without COARRAY argument not allowed for "
5098 "THIS_IMAGE intrinsic at %L", &dim
->where
);
5102 if (distance
&& (coarray
|| dim
))
5104 gfc_error ("The DISTANCE argument may not be specified together with the "
5105 "COARRAY or DIM argument in intrinsic at %L",
5110 /* Assume that we have "this_image (distance)". */
5111 if (coarray
&& !gfc_is_coarray (coarray
) && coarray
->ts
.type
== BT_INTEGER
)
5115 gfc_error ("Unexpected DIM argument with noncoarray argument at %L",
5124 if (!type_check (distance
, 2, BT_INTEGER
))
5127 if (!nonnegative_check ("DISTANCE", distance
))
5130 if (!scalar_check (distance
, 2))
5133 if (!gfc_notify_std (GFC_STD_F2008_TS
, "DISTANCE= argument to "
5134 "THIS_IMAGE at %L", &distance
->where
))
5140 if (!coarray_check (coarray
, 0))
5145 if (!dim_check (dim
, 1, false))
5148 if (!dim_corank_check (dim
, coarray
))
5155 /* Calculate the sizes for transfer, used by gfc_check_transfer and also
5156 by gfc_simplify_transfer. Return false if we cannot do so. */
5159 gfc_calculate_transfer_sizes (gfc_expr
*source
, gfc_expr
*mold
, gfc_expr
*size
,
5160 size_t *source_size
, size_t *result_size
,
5161 size_t *result_length_p
)
5163 size_t result_elt_size
;
5165 if (source
->expr_type
== EXPR_FUNCTION
)
5168 if (size
&& size
->expr_type
!= EXPR_CONSTANT
)
5171 /* Calculate the size of the source. */
5172 *source_size
= gfc_target_expr_size (source
);
5173 if (*source_size
== 0)
5176 /* Determine the size of the element. */
5177 result_elt_size
= gfc_element_size (mold
);
5178 if (result_elt_size
== 0)
5181 if (mold
->expr_type
== EXPR_ARRAY
|| mold
->rank
|| size
)
5186 result_length
= (size_t)mpz_get_ui (size
->value
.integer
);
5189 result_length
= *source_size
/ result_elt_size
;
5190 if (result_length
* result_elt_size
< *source_size
)
5194 *result_size
= result_length
* result_elt_size
;
5195 if (result_length_p
)
5196 *result_length_p
= result_length
;
5199 *result_size
= result_elt_size
;
5206 gfc_check_transfer (gfc_expr
*source
, gfc_expr
*mold
, gfc_expr
*size
)
5211 if (mold
->ts
.type
== BT_HOLLERITH
)
5213 gfc_error ("%<MOLD%> argument of %<TRANSFER%> intrinsic at %L must not be"
5214 " %s", &mold
->where
, gfc_basic_typename (BT_HOLLERITH
));
5220 if (!type_check (size
, 2, BT_INTEGER
))
5223 if (!scalar_check (size
, 2))
5226 if (!nonoptional_check (size
, 2))
5230 if (!warn_surprising
)
5233 /* If we can't calculate the sizes, we cannot check any more.
5234 Return true for that case. */
5236 if (!gfc_calculate_transfer_sizes (source
, mold
, size
, &source_size
,
5237 &result_size
, NULL
))
5240 if (source_size
< result_size
)
5241 gfc_warning (OPT_Wsurprising
,
5242 "Intrinsic TRANSFER at %L has partly undefined result: "
5243 "source size %ld < result size %ld", &source
->where
,
5244 (long) source_size
, (long) result_size
);
5251 gfc_check_transpose (gfc_expr
*matrix
)
5253 if (!rank_check (matrix
, 0, 2))
5261 gfc_check_ubound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
5263 if (!array_check (array
, 0))
5266 if (!dim_check (dim
, 1, false))
5269 if (!dim_rank_check (dim
, array
, 0))
5272 if (!kind_check (kind
, 2, BT_INTEGER
))
5274 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "%qs intrinsic "
5275 "with KIND argument at %L",
5276 gfc_current_intrinsic
, &kind
->where
))
5284 gfc_check_ucobound (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*kind
)
5286 if (flag_coarray
== GFC_FCOARRAY_NONE
)
5288 gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable");
5292 if (!coarray_check (coarray
, 0))
5297 if (!dim_check (dim
, 1, false))
5300 if (!dim_corank_check (dim
, coarray
))
5304 if (!kind_check (kind
, 2, BT_INTEGER
))
5312 gfc_check_unpack (gfc_expr
*vector
, gfc_expr
*mask
, gfc_expr
*field
)
5316 if (!rank_check (vector
, 0, 1))
5319 if (!array_check (mask
, 1))
5322 if (!type_check (mask
, 1, BT_LOGICAL
))
5325 if (!same_type_check (vector
, 0, field
, 2))
5328 if (mask
->expr_type
== EXPR_ARRAY
5329 && gfc_array_size (vector
, &vector_size
))
5331 int mask_true_count
= 0;
5332 gfc_constructor
*mask_ctor
;
5333 mask_ctor
= gfc_constructor_first (mask
->value
.constructor
);
5336 if (mask_ctor
->expr
->expr_type
!= EXPR_CONSTANT
)
5338 mask_true_count
= 0;
5342 if (mask_ctor
->expr
->value
.logical
)
5345 mask_ctor
= gfc_constructor_next (mask_ctor
);
5348 if (mpz_get_si (vector_size
) < mask_true_count
)
5350 gfc_error ("%qs argument of %qs intrinsic at %L must "
5351 "provide at least as many elements as there "
5352 "are .TRUE. values in %qs (%ld/%d)",
5353 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
5354 &vector
->where
, gfc_current_intrinsic_arg
[1]->name
,
5355 mpz_get_si (vector_size
), mask_true_count
);
5359 mpz_clear (vector_size
);
5362 if (mask
->rank
!= field
->rank
&& field
->rank
!= 0)
5364 gfc_error ("%qs argument of %qs intrinsic at %L must have "
5365 "the same rank as %qs or be a scalar",
5366 gfc_current_intrinsic_arg
[2]->name
, gfc_current_intrinsic
,
5367 &field
->where
, gfc_current_intrinsic_arg
[1]->name
);
5371 if (mask
->rank
== field
->rank
)
5374 for (i
= 0; i
< field
->rank
; i
++)
5375 if (! identical_dimen_shape (mask
, i
, field
, i
))
5377 gfc_error ("%qs and %qs arguments of %qs intrinsic at %L "
5378 "must have identical shape.",
5379 gfc_current_intrinsic_arg
[2]->name
,
5380 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
5390 gfc_check_verify (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
5392 if (!type_check (x
, 0, BT_CHARACTER
))
5395 if (!same_type_check (x
, 0, y
, 1))
5398 if (z
!= NULL
&& !type_check (z
, 2, BT_LOGICAL
))
5401 if (!kind_check (kind
, 3, BT_INTEGER
))
5403 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "%qs intrinsic "
5404 "with KIND argument at %L",
5405 gfc_current_intrinsic
, &kind
->where
))
5413 gfc_check_trim (gfc_expr
*x
)
5415 if (!type_check (x
, 0, BT_CHARACTER
))
5418 if (!scalar_check (x
, 0))
5426 gfc_check_ttynam (gfc_expr
*unit
)
5428 if (!scalar_check (unit
, 0))
5431 if (!type_check (unit
, 0, BT_INTEGER
))
5438 /* Common check function for the half a dozen intrinsics that have a
5439 single real argument. */
5442 gfc_check_x (gfc_expr
*x
)
5444 if (!type_check (x
, 0, BT_REAL
))
5451 /************* Check functions for intrinsic subroutines *************/
5454 gfc_check_cpu_time (gfc_expr
*time
)
5456 if (!scalar_check (time
, 0))
5459 if (!type_check (time
, 0, BT_REAL
))
5462 if (!variable_check (time
, 0, false))
5470 gfc_check_date_and_time (gfc_expr
*date
, gfc_expr
*time
,
5471 gfc_expr
*zone
, gfc_expr
*values
)
5475 if (!type_check (date
, 0, BT_CHARACTER
))
5477 if (!kind_value_check (date
, 0, gfc_default_character_kind
))
5479 if (!scalar_check (date
, 0))
5481 if (!variable_check (date
, 0, false))
5487 if (!type_check (time
, 1, BT_CHARACTER
))
5489 if (!kind_value_check (time
, 1, gfc_default_character_kind
))
5491 if (!scalar_check (time
, 1))
5493 if (!variable_check (time
, 1, false))
5499 if (!type_check (zone
, 2, BT_CHARACTER
))
5501 if (!kind_value_check (zone
, 2, gfc_default_character_kind
))
5503 if (!scalar_check (zone
, 2))
5505 if (!variable_check (zone
, 2, false))
5511 if (!type_check (values
, 3, BT_INTEGER
))
5513 if (!array_check (values
, 3))
5515 if (!rank_check (values
, 3, 1))
5517 if (!variable_check (values
, 3, false))
5526 gfc_check_mvbits (gfc_expr
*from
, gfc_expr
*frompos
, gfc_expr
*len
,
5527 gfc_expr
*to
, gfc_expr
*topos
)
5529 if (!type_check (from
, 0, BT_INTEGER
))
5532 if (!type_check (frompos
, 1, BT_INTEGER
))
5535 if (!type_check (len
, 2, BT_INTEGER
))
5538 if (!same_type_check (from
, 0, to
, 3))
5541 if (!variable_check (to
, 3, false))
5544 if (!type_check (topos
, 4, BT_INTEGER
))
5547 if (!nonnegative_check ("frompos", frompos
))
5550 if (!nonnegative_check ("topos", topos
))
5553 if (!nonnegative_check ("len", len
))
5556 if (!less_than_bitsize2 ("from", from
, "frompos", frompos
, "len", len
))
5559 if (!less_than_bitsize2 ("to", to
, "topos", topos
, "len", len
))
5567 gfc_check_random_number (gfc_expr
*harvest
)
5569 if (!type_check (harvest
, 0, BT_REAL
))
5572 if (!variable_check (harvest
, 0, false))
5580 gfc_check_random_seed (gfc_expr
*size
, gfc_expr
*put
, gfc_expr
*get
)
5582 unsigned int nargs
= 0, seed_size
;
5583 locus
*where
= NULL
;
5584 mpz_t put_size
, get_size
;
5586 /* Keep the number of bytes in sync with master_state in
5587 libgfortran/intrinsics/random.c. +1 due to the integer p which is
5588 part of the state too. */
5589 seed_size
= 128 / gfc_default_integer_kind
+ 1;
5593 if (size
->expr_type
!= EXPR_VARIABLE
5594 || !size
->symtree
->n
.sym
->attr
.optional
)
5597 if (!scalar_check (size
, 0))
5600 if (!type_check (size
, 0, BT_INTEGER
))
5603 if (!variable_check (size
, 0, false))
5606 if (!kind_value_check (size
, 0, gfc_default_integer_kind
))
5612 if (put
->expr_type
!= EXPR_VARIABLE
5613 || !put
->symtree
->n
.sym
->attr
.optional
)
5616 where
= &put
->where
;
5619 if (!array_check (put
, 1))
5622 if (!rank_check (put
, 1, 1))
5625 if (!type_check (put
, 1, BT_INTEGER
))
5628 if (!kind_value_check (put
, 1, gfc_default_integer_kind
))
5631 if (gfc_array_size (put
, &put_size
)
5632 && mpz_get_ui (put_size
) < seed_size
)
5633 gfc_error ("Size of %qs argument of %qs intrinsic at %L "
5634 "too small (%i/%i)",
5635 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
5636 where
, (int) mpz_get_ui (put_size
), seed_size
);
5641 if (get
->expr_type
!= EXPR_VARIABLE
5642 || !get
->symtree
->n
.sym
->attr
.optional
)
5645 where
= &get
->where
;
5648 if (!array_check (get
, 2))
5651 if (!rank_check (get
, 2, 1))
5654 if (!type_check (get
, 2, BT_INTEGER
))
5657 if (!variable_check (get
, 2, false))
5660 if (!kind_value_check (get
, 2, gfc_default_integer_kind
))
5663 if (gfc_array_size (get
, &get_size
)
5664 && mpz_get_ui (get_size
) < seed_size
)
5665 gfc_error ("Size of %qs argument of %qs intrinsic at %L "
5666 "too small (%i/%i)",
5667 gfc_current_intrinsic_arg
[2]->name
, gfc_current_intrinsic
,
5668 where
, (int) mpz_get_ui (get_size
), seed_size
);
5671 /* RANDOM_SEED may not have more than one non-optional argument. */
5673 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
, where
);
5679 gfc_check_fe_runtime_error (gfc_actual_arglist
*a
)
5683 int num_percent
, nargs
;
5686 if (e
->expr_type
!= EXPR_CONSTANT
)
5689 len
= e
->value
.character
.length
;
5690 if (e
->value
.character
.string
[len
-1] != '\0')
5691 gfc_internal_error ("fe_runtime_error string must be null terminated");
5694 for (i
=0; i
<len
-1; i
++)
5695 if (e
->value
.character
.string
[i
] == '%')
5699 for (; a
; a
= a
->next
)
5702 if (nargs
-1 != num_percent
)
5703 gfc_internal_error ("fe_runtime_error: Wrong number of arguments (%d instead of %d)",
5704 nargs
, num_percent
++);
5710 gfc_check_second_sub (gfc_expr
*time
)
5712 if (!scalar_check (time
, 0))
5715 if (!type_check (time
, 0, BT_REAL
))
5718 if (!kind_value_check (time
, 0, 4))
5725 /* COUNT and COUNT_MAX of SYSTEM_CLOCK are scalar, default-kind integer
5726 variables in Fortran 95. In Fortran 2003 and later, they can be of any
5727 kind, and COUNT_RATE can be of type real. Note, count, count_rate, and
5728 count_max are all optional arguments */
5731 gfc_check_system_clock (gfc_expr
*count
, gfc_expr
*count_rate
,
5732 gfc_expr
*count_max
)
5736 if (!scalar_check (count
, 0))
5739 if (!type_check (count
, 0, BT_INTEGER
))
5742 if (count
->ts
.kind
!= gfc_default_integer_kind
5743 && !gfc_notify_std (GFC_STD_F2003
, "COUNT argument to "
5744 "SYSTEM_CLOCK at %L has non-default kind",
5748 if (!variable_check (count
, 0, false))
5752 if (count_rate
!= NULL
)
5754 if (!scalar_check (count_rate
, 1))
5757 if (!variable_check (count_rate
, 1, false))
5760 if (count_rate
->ts
.type
== BT_REAL
)
5762 if (!gfc_notify_std (GFC_STD_F2003
, "Real COUNT_RATE argument to "
5763 "SYSTEM_CLOCK at %L", &count_rate
->where
))
5768 if (!type_check (count_rate
, 1, BT_INTEGER
))
5771 if (count_rate
->ts
.kind
!= gfc_default_integer_kind
5772 && !gfc_notify_std (GFC_STD_F2003
, "COUNT_RATE argument to "
5773 "SYSTEM_CLOCK at %L has non-default kind",
5774 &count_rate
->where
))
5780 if (count_max
!= NULL
)
5782 if (!scalar_check (count_max
, 2))
5785 if (!type_check (count_max
, 2, BT_INTEGER
))
5788 if (count_max
->ts
.kind
!= gfc_default_integer_kind
5789 && !gfc_notify_std (GFC_STD_F2003
, "COUNT_MAX argument to "
5790 "SYSTEM_CLOCK at %L has non-default kind",
5794 if (!variable_check (count_max
, 2, false))
5803 gfc_check_irand (gfc_expr
*x
)
5808 if (!scalar_check (x
, 0))
5811 if (!type_check (x
, 0, BT_INTEGER
))
5814 if (!kind_value_check (x
, 0, 4))
5822 gfc_check_alarm_sub (gfc_expr
*seconds
, gfc_expr
*handler
, gfc_expr
*status
)
5824 if (!scalar_check (seconds
, 0))
5826 if (!type_check (seconds
, 0, BT_INTEGER
))
5829 if (!int_or_proc_check (handler
, 1))
5831 if (handler
->ts
.type
== BT_INTEGER
&& !scalar_check (handler
, 1))
5837 if (!scalar_check (status
, 2))
5839 if (!type_check (status
, 2, BT_INTEGER
))
5841 if (!kind_value_check (status
, 2, gfc_default_integer_kind
))
5849 gfc_check_rand (gfc_expr
*x
)
5854 if (!scalar_check (x
, 0))
5857 if (!type_check (x
, 0, BT_INTEGER
))
5860 if (!kind_value_check (x
, 0, 4))
5868 gfc_check_srand (gfc_expr
*x
)
5870 if (!scalar_check (x
, 0))
5873 if (!type_check (x
, 0, BT_INTEGER
))
5876 if (!kind_value_check (x
, 0, 4))
5884 gfc_check_ctime_sub (gfc_expr
*time
, gfc_expr
*result
)
5886 if (!scalar_check (time
, 0))
5888 if (!type_check (time
, 0, BT_INTEGER
))
5891 if (!type_check (result
, 1, BT_CHARACTER
))
5893 if (!kind_value_check (result
, 1, gfc_default_character_kind
))
5901 gfc_check_dtime_etime (gfc_expr
*x
)
5903 if (!array_check (x
, 0))
5906 if (!rank_check (x
, 0, 1))
5909 if (!variable_check (x
, 0, false))
5912 if (!type_check (x
, 0, BT_REAL
))
5915 if (!kind_value_check (x
, 0, 4))
5923 gfc_check_dtime_etime_sub (gfc_expr
*values
, gfc_expr
*time
)
5925 if (!array_check (values
, 0))
5928 if (!rank_check (values
, 0, 1))
5931 if (!variable_check (values
, 0, false))
5934 if (!type_check (values
, 0, BT_REAL
))
5937 if (!kind_value_check (values
, 0, 4))
5940 if (!scalar_check (time
, 1))
5943 if (!type_check (time
, 1, BT_REAL
))
5946 if (!kind_value_check (time
, 1, 4))
5954 gfc_check_fdate_sub (gfc_expr
*date
)
5956 if (!type_check (date
, 0, BT_CHARACTER
))
5958 if (!kind_value_check (date
, 0, gfc_default_character_kind
))
5966 gfc_check_gerror (gfc_expr
*msg
)
5968 if (!type_check (msg
, 0, BT_CHARACTER
))
5970 if (!kind_value_check (msg
, 0, gfc_default_character_kind
))
5978 gfc_check_getcwd_sub (gfc_expr
*cwd
, gfc_expr
*status
)
5980 if (!type_check (cwd
, 0, BT_CHARACTER
))
5982 if (!kind_value_check (cwd
, 0, gfc_default_character_kind
))
5988 if (!scalar_check (status
, 1))
5991 if (!type_check (status
, 1, BT_INTEGER
))
5999 gfc_check_getarg (gfc_expr
*pos
, gfc_expr
*value
)
6001 if (!type_check (pos
, 0, BT_INTEGER
))
6004 if (pos
->ts
.kind
> gfc_default_integer_kind
)
6006 gfc_error ("%qs argument of %qs intrinsic at %L must be of a kind "
6007 "not wider than the default kind (%d)",
6008 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
6009 &pos
->where
, gfc_default_integer_kind
);
6013 if (!type_check (value
, 1, BT_CHARACTER
))
6015 if (!kind_value_check (value
, 1, gfc_default_character_kind
))
6023 gfc_check_getlog (gfc_expr
*msg
)
6025 if (!type_check (msg
, 0, BT_CHARACTER
))
6027 if (!kind_value_check (msg
, 0, gfc_default_character_kind
))
6035 gfc_check_exit (gfc_expr
*status
)
6040 if (!type_check (status
, 0, BT_INTEGER
))
6043 if (!scalar_check (status
, 0))
6051 gfc_check_flush (gfc_expr
*unit
)
6056 if (!type_check (unit
, 0, BT_INTEGER
))
6059 if (!scalar_check (unit
, 0))
6067 gfc_check_free (gfc_expr
*i
)
6069 if (!type_check (i
, 0, BT_INTEGER
))
6072 if (!scalar_check (i
, 0))
6080 gfc_check_hostnm (gfc_expr
*name
)
6082 if (!type_check (name
, 0, BT_CHARACTER
))
6084 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
6092 gfc_check_hostnm_sub (gfc_expr
*name
, gfc_expr
*status
)
6094 if (!type_check (name
, 0, BT_CHARACTER
))
6096 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
6102 if (!scalar_check (status
, 1))
6105 if (!type_check (status
, 1, BT_INTEGER
))
6113 gfc_check_itime_idate (gfc_expr
*values
)
6115 if (!array_check (values
, 0))
6118 if (!rank_check (values
, 0, 1))
6121 if (!variable_check (values
, 0, false))
6124 if (!type_check (values
, 0, BT_INTEGER
))
6127 if (!kind_value_check (values
, 0, gfc_default_integer_kind
))
6135 gfc_check_ltime_gmtime (gfc_expr
*time
, gfc_expr
*values
)
6137 if (!type_check (time
, 0, BT_INTEGER
))
6140 if (!kind_value_check (time
, 0, gfc_default_integer_kind
))
6143 if (!scalar_check (time
, 0))
6146 if (!array_check (values
, 1))
6149 if (!rank_check (values
, 1, 1))
6152 if (!variable_check (values
, 1, false))
6155 if (!type_check (values
, 1, BT_INTEGER
))
6158 if (!kind_value_check (values
, 1, gfc_default_integer_kind
))
6166 gfc_check_ttynam_sub (gfc_expr
*unit
, gfc_expr
*name
)
6168 if (!scalar_check (unit
, 0))
6171 if (!type_check (unit
, 0, BT_INTEGER
))
6174 if (!type_check (name
, 1, BT_CHARACTER
))
6176 if (!kind_value_check (name
, 1, gfc_default_character_kind
))
6184 gfc_check_isatty (gfc_expr
*unit
)
6189 if (!type_check (unit
, 0, BT_INTEGER
))
6192 if (!scalar_check (unit
, 0))
6200 gfc_check_isnan (gfc_expr
*x
)
6202 if (!type_check (x
, 0, BT_REAL
))
6210 gfc_check_perror (gfc_expr
*string
)
6212 if (!type_check (string
, 0, BT_CHARACTER
))
6214 if (!kind_value_check (string
, 0, gfc_default_character_kind
))
6222 gfc_check_umask (gfc_expr
*mask
)
6224 if (!type_check (mask
, 0, BT_INTEGER
))
6227 if (!scalar_check (mask
, 0))
6235 gfc_check_umask_sub (gfc_expr
*mask
, gfc_expr
*old
)
6237 if (!type_check (mask
, 0, BT_INTEGER
))
6240 if (!scalar_check (mask
, 0))
6246 if (!scalar_check (old
, 1))
6249 if (!type_check (old
, 1, BT_INTEGER
))
6257 gfc_check_unlink (gfc_expr
*name
)
6259 if (!type_check (name
, 0, BT_CHARACTER
))
6261 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
6269 gfc_check_unlink_sub (gfc_expr
*name
, gfc_expr
*status
)
6271 if (!type_check (name
, 0, BT_CHARACTER
))
6273 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
6279 if (!scalar_check (status
, 1))
6282 if (!type_check (status
, 1, BT_INTEGER
))
6290 gfc_check_signal (gfc_expr
*number
, gfc_expr
*handler
)
6292 if (!scalar_check (number
, 0))
6294 if (!type_check (number
, 0, BT_INTEGER
))
6297 if (!int_or_proc_check (handler
, 1))
6299 if (handler
->ts
.type
== BT_INTEGER
&& !scalar_check (handler
, 1))
6307 gfc_check_signal_sub (gfc_expr
*number
, gfc_expr
*handler
, gfc_expr
*status
)
6309 if (!scalar_check (number
, 0))
6311 if (!type_check (number
, 0, BT_INTEGER
))
6314 if (!int_or_proc_check (handler
, 1))
6316 if (handler
->ts
.type
== BT_INTEGER
&& !scalar_check (handler
, 1))
6322 if (!type_check (status
, 2, BT_INTEGER
))
6324 if (!scalar_check (status
, 2))
6332 gfc_check_system_sub (gfc_expr
*cmd
, gfc_expr
*status
)
6334 if (!type_check (cmd
, 0, BT_CHARACTER
))
6336 if (!kind_value_check (cmd
, 0, gfc_default_character_kind
))
6339 if (!scalar_check (status
, 1))
6342 if (!type_check (status
, 1, BT_INTEGER
))
6345 if (!kind_value_check (status
, 1, gfc_default_integer_kind
))
6352 /* This is used for the GNU intrinsics AND, OR and XOR. */
6354 gfc_check_and (gfc_expr
*i
, gfc_expr
*j
)
6356 if (i
->ts
.type
!= BT_INTEGER
&& i
->ts
.type
!= BT_LOGICAL
)
6358 gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER "
6359 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
6360 gfc_current_intrinsic
, &i
->where
);
6364 if (j
->ts
.type
!= BT_INTEGER
&& j
->ts
.type
!= BT_LOGICAL
)
6366 gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER "
6367 "or LOGICAL", gfc_current_intrinsic_arg
[1]->name
,
6368 gfc_current_intrinsic
, &j
->where
);
6372 if (i
->ts
.type
!= j
->ts
.type
)
6374 gfc_error ("%qs and %qs arguments of %qs intrinsic at %L must "
6375 "have the same type", gfc_current_intrinsic_arg
[0]->name
,
6376 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
6381 if (!scalar_check (i
, 0))
6384 if (!scalar_check (j
, 1))
6392 gfc_check_storage_size (gfc_expr
*a
, gfc_expr
*kind
)
6395 if (a
->expr_type
== EXPR_NULL
)
6397 gfc_error ("Intrinsic function NULL at %L cannot be an actual "
6398 "argument to STORAGE_SIZE, because it returns a "
6399 "disassociated pointer", &a
->where
);
6403 if (a
->ts
.type
== BT_ASSUMED
)
6405 gfc_error ("%qs argument of %qs intrinsic at %L shall not be TYPE(*)",
6406 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
6411 if (a
->ts
.type
== BT_PROCEDURE
)
6413 gfc_error ("%qs argument of %qs intrinsic at %L shall not be a "
6414 "procedure", gfc_current_intrinsic_arg
[0]->name
,
6415 gfc_current_intrinsic
, &a
->where
);
6422 if (!type_check (kind
, 1, BT_INTEGER
))
6425 if (!scalar_check (kind
, 1))
6428 if (kind
->expr_type
!= EXPR_CONSTANT
)
6430 gfc_error ("%qs argument of %qs intrinsic at %L must be a constant",
6431 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,