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
)
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 expr is a constant, then check to ensure that it is greater than zero. */
301 positive_check (int n
, gfc_expr
*expr
)
305 if (expr
->expr_type
== EXPR_CONSTANT
)
307 gfc_extract_int (expr
, &i
);
310 gfc_error ("%qs argument of %qs intrinsic at %L must be positive",
311 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
321 /* If expr2 is constant, then check that the value is less than
322 (less than or equal to, if 'or_equal' is true) bit_size(expr1). */
325 less_than_bitsize1 (const char *arg1
, gfc_expr
*expr1
, const char *arg2
,
326 gfc_expr
*expr2
, bool or_equal
)
330 if (expr2
->expr_type
== EXPR_CONSTANT
)
332 gfc_extract_int (expr2
, &i2
);
333 i3
= gfc_validate_kind (BT_INTEGER
, expr1
->ts
.kind
, false);
335 /* For ISHFT[C], check that |shift| <= bit_size(i). */
341 if (i2
> gfc_integer_kinds
[i3
].bit_size
)
343 gfc_error ("The absolute value of SHIFT at %L must be less "
344 "than or equal to BIT_SIZE(%qs)",
345 &expr2
->where
, arg1
);
352 if (i2
> gfc_integer_kinds
[i3
].bit_size
)
354 gfc_error ("%qs at %L must be less than "
355 "or equal to BIT_SIZE(%qs)",
356 arg2
, &expr2
->where
, arg1
);
362 if (i2
>= gfc_integer_kinds
[i3
].bit_size
)
364 gfc_error ("%qs at %L must be less than BIT_SIZE(%qs)",
365 arg2
, &expr2
->where
, arg1
);
375 /* If expr is constant, then check that the value is less than or equal
376 to the bit_size of the kind k. */
379 less_than_bitsizekind (const char *arg
, gfc_expr
*expr
, int k
)
383 if (expr
->expr_type
!= EXPR_CONSTANT
)
386 i
= gfc_validate_kind (BT_INTEGER
, k
, false);
387 gfc_extract_int (expr
, &val
);
389 if (val
> gfc_integer_kinds
[i
].bit_size
)
391 gfc_error ("%qs at %L must be less than or equal to the BIT_SIZE of "
392 "INTEGER(KIND=%d)", arg
, &expr
->where
, k
);
400 /* If expr2 and expr3 are constants, then check that the value is less than
401 or equal to bit_size(expr1). */
404 less_than_bitsize2 (const char *arg1
, gfc_expr
*expr1
, const char *arg2
,
405 gfc_expr
*expr2
, const char *arg3
, gfc_expr
*expr3
)
409 if (expr2
->expr_type
== EXPR_CONSTANT
&& expr3
->expr_type
== EXPR_CONSTANT
)
411 gfc_extract_int (expr2
, &i2
);
412 gfc_extract_int (expr3
, &i3
);
414 i3
= gfc_validate_kind (BT_INTEGER
, expr1
->ts
.kind
, false);
415 if (i2
> gfc_integer_kinds
[i3
].bit_size
)
417 gfc_error ("%<%s + %s%> at %L must be less than or equal "
419 arg2
, arg3
, &expr2
->where
, arg1
);
427 /* Make sure two expressions have the same type. */
430 same_type_check (gfc_expr
*e
, int n
, gfc_expr
*f
, int m
)
432 gfc_typespec
*ets
= &e
->ts
;
433 gfc_typespec
*fts
= &f
->ts
;
435 if (e
->ts
.type
== BT_PROCEDURE
&& e
->symtree
->n
.sym
)
436 ets
= &e
->symtree
->n
.sym
->ts
;
437 if (f
->ts
.type
== BT_PROCEDURE
&& f
->symtree
->n
.sym
)
438 fts
= &f
->symtree
->n
.sym
->ts
;
440 if (gfc_compare_types (ets
, fts
))
443 gfc_error ("%qs argument of %qs intrinsic at %L must be the same type "
444 "and kind as %qs", gfc_current_intrinsic_arg
[m
]->name
,
445 gfc_current_intrinsic
, &f
->where
,
446 gfc_current_intrinsic_arg
[n
]->name
);
452 /* Make sure that an expression has a certain (nonzero) rank. */
455 rank_check (gfc_expr
*e
, int n
, int rank
)
460 gfc_error ("%qs argument of %qs intrinsic at %L must be of rank %d",
461 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
468 /* Make sure a variable expression is not an optional dummy argument. */
471 nonoptional_check (gfc_expr
*e
, int n
)
473 if (e
->expr_type
== EXPR_VARIABLE
&& e
->symtree
->n
.sym
->attr
.optional
)
475 gfc_error ("%qs argument of %qs intrinsic at %L must not be OPTIONAL",
476 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
480 /* TODO: Recursive check on nonoptional variables? */
486 /* Check for ALLOCATABLE attribute. */
489 allocatable_check (gfc_expr
*e
, int n
)
491 symbol_attribute attr
;
493 attr
= gfc_variable_attr (e
, NULL
);
494 if (!attr
.allocatable
|| attr
.associate_var
)
496 gfc_error ("%qs argument of %qs intrinsic at %L must be ALLOCATABLE",
497 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
506 /* Check that an expression has a particular kind. */
509 kind_value_check (gfc_expr
*e
, int n
, int k
)
514 gfc_error ("%qs argument of %qs intrinsic at %L must be of kind %d",
515 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
,
522 /* Make sure an expression is a variable. */
525 variable_check (gfc_expr
*e
, int n
, bool allow_proc
)
527 if (e
->expr_type
== EXPR_VARIABLE
528 && e
->symtree
->n
.sym
->attr
.intent
== INTENT_IN
529 && (gfc_current_intrinsic_arg
[n
]->intent
== INTENT_OUT
530 || gfc_current_intrinsic_arg
[n
]->intent
== INTENT_INOUT
))
533 bool pointer
= e
->symtree
->n
.sym
->ts
.type
== BT_CLASS
534 && CLASS_DATA (e
->symtree
->n
.sym
)
535 ? CLASS_DATA (e
->symtree
->n
.sym
)->attr
.class_pointer
536 : e
->symtree
->n
.sym
->attr
.pointer
;
538 for (ref
= e
->ref
; ref
; ref
= ref
->next
)
540 if (pointer
&& ref
->type
== REF_COMPONENT
)
542 if (ref
->type
== REF_COMPONENT
543 && ((ref
->u
.c
.component
->ts
.type
== BT_CLASS
544 && CLASS_DATA (ref
->u
.c
.component
)->attr
.class_pointer
)
545 || (ref
->u
.c
.component
->ts
.type
!= BT_CLASS
546 && ref
->u
.c
.component
->attr
.pointer
)))
552 gfc_error ("%qs argument of %qs intrinsic at %L cannot be "
553 "INTENT(IN)", gfc_current_intrinsic_arg
[n
]->name
,
554 gfc_current_intrinsic
, &e
->where
);
559 if (e
->expr_type
== EXPR_VARIABLE
560 && e
->symtree
->n
.sym
->attr
.flavor
!= FL_PARAMETER
561 && (allow_proc
|| !e
->symtree
->n
.sym
->attr
.function
))
564 if (e
->expr_type
== EXPR_VARIABLE
&& e
->symtree
->n
.sym
->attr
.function
565 && e
->symtree
->n
.sym
== e
->symtree
->n
.sym
->result
)
568 for (ns
= gfc_current_ns
; ns
; ns
= ns
->parent
)
569 if (ns
->proc_name
== e
->symtree
->n
.sym
)
573 gfc_error ("%qs argument of %qs intrinsic at %L must be a variable",
574 gfc_current_intrinsic_arg
[n
]->name
, gfc_current_intrinsic
, &e
->where
);
580 /* Check the common DIM parameter for correctness. */
583 dim_check (gfc_expr
*dim
, int n
, bool optional
)
588 if (!type_check (dim
, n
, BT_INTEGER
))
591 if (!scalar_check (dim
, n
))
594 if (!optional
&& !nonoptional_check (dim
, n
))
601 /* If a coarray DIM parameter is a constant, make sure that it is greater than
602 zero and less than or equal to the corank of the given array. */
605 dim_corank_check (gfc_expr
*dim
, gfc_expr
*array
)
609 gcc_assert (array
->expr_type
== EXPR_VARIABLE
);
611 if (dim
->expr_type
!= EXPR_CONSTANT
)
614 if (array
->ts
.type
== BT_CLASS
)
617 corank
= gfc_get_corank (array
);
619 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
620 || mpz_cmp_ui (dim
->value
.integer
, corank
) > 0)
622 gfc_error ("%<dim%> argument of %qs intrinsic at %L is not a valid "
623 "codimension index", gfc_current_intrinsic
, &dim
->where
);
632 /* If a DIM parameter is a constant, make sure that it is greater than
633 zero and less than or equal to the rank of the given array. If
634 allow_assumed is zero then dim must be less than the rank of the array
635 for assumed size arrays. */
638 dim_rank_check (gfc_expr
*dim
, gfc_expr
*array
, int allow_assumed
)
646 if (dim
->expr_type
!= EXPR_CONSTANT
)
649 if (array
->expr_type
== EXPR_FUNCTION
&& array
->value
.function
.isym
650 && array
->value
.function
.isym
->id
== GFC_ISYM_SPREAD
)
651 rank
= array
->rank
+ 1;
655 /* Assumed-rank array. */
657 rank
= GFC_MAX_DIMENSIONS
;
659 if (array
->expr_type
== EXPR_VARIABLE
)
661 ar
= gfc_find_array_ref (array
);
662 if (ar
->as
->type
== AS_ASSUMED_SIZE
664 && ar
->type
!= AR_ELEMENT
665 && ar
->type
!= AR_SECTION
)
669 if (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
670 || mpz_cmp_ui (dim
->value
.integer
, rank
) > 0)
672 gfc_error ("%<dim%> argument of %qs intrinsic at %L is not a valid "
673 "dimension index", gfc_current_intrinsic
, &dim
->where
);
682 /* Compare the size of a along dimension ai with the size of b along
683 dimension bi, returning 0 if they are known not to be identical,
684 and 1 if they are identical, or if this cannot be determined. */
687 identical_dimen_shape (gfc_expr
*a
, int ai
, gfc_expr
*b
, int bi
)
689 mpz_t a_size
, b_size
;
692 gcc_assert (a
->rank
> ai
);
693 gcc_assert (b
->rank
> bi
);
697 if (gfc_array_dimen_size (a
, ai
, &a_size
))
699 if (gfc_array_dimen_size (b
, bi
, &b_size
))
701 if (mpz_cmp (a_size
, b_size
) != 0)
711 /* Calculate the length of a character variable, including substrings.
712 Strip away parentheses if necessary. Return -1 if no length could
716 gfc_var_strlen (const gfc_expr
*a
)
720 while (a
->expr_type
== EXPR_OP
&& a
->value
.op
.op
== INTRINSIC_PARENTHESES
)
723 for (ra
= a
->ref
; ra
!= NULL
&& ra
->type
!= REF_SUBSTRING
; ra
= ra
->next
)
733 if ((!ra
->u
.ss
.start
|| ra
->u
.ss
.start
->expr_type
== EXPR_CONSTANT
)
734 && ra
->u
.ss
.end
->expr_type
== EXPR_CONSTANT
)
736 start_a
= ra
->u
.ss
.start
? mpz_get_si (ra
->u
.ss
.start
->value
.integer
)
738 end_a
= mpz_get_si (ra
->u
.ss
.end
->value
.integer
);
739 return (end_a
< start_a
) ? 0 : end_a
- start_a
+ 1;
741 else if (ra
->u
.ss
.start
742 && gfc_dep_compare_expr (ra
->u
.ss
.start
, ra
->u
.ss
.end
) == 0)
748 if (a
->ts
.u
.cl
&& a
->ts
.u
.cl
->length
749 && a
->ts
.u
.cl
->length
->expr_type
== EXPR_CONSTANT
)
750 return mpz_get_si (a
->ts
.u
.cl
->length
->value
.integer
);
751 else if (a
->expr_type
== EXPR_CONSTANT
752 && (a
->ts
.u
.cl
== NULL
|| a
->ts
.u
.cl
->length
== NULL
))
753 return a
->value
.character
.length
;
759 /* Check whether two character expressions have the same length;
760 returns true if they have or if the length cannot be determined,
761 otherwise return false and raise a gfc_error. */
764 gfc_check_same_strlen (const gfc_expr
*a
, const gfc_expr
*b
, const char *name
)
768 len_a
= gfc_var_strlen(a
);
769 len_b
= gfc_var_strlen(b
);
771 if (len_a
== -1 || len_b
== -1 || len_a
== len_b
)
775 gfc_error ("Unequal character lengths (%ld/%ld) in %s at %L",
776 len_a
, len_b
, name
, &a
->where
);
782 /***** Check functions *****/
784 /* Check subroutine suitable for intrinsics taking a real argument and
785 a kind argument for the result. */
788 check_a_kind (gfc_expr
*a
, gfc_expr
*kind
, bt type
)
790 if (!type_check (a
, 0, BT_REAL
))
792 if (!kind_check (kind
, 1, type
))
799 /* Check subroutine suitable for ceiling, floor and nint. */
802 gfc_check_a_ikind (gfc_expr
*a
, gfc_expr
*kind
)
804 return check_a_kind (a
, kind
, BT_INTEGER
);
808 /* Check subroutine suitable for aint, anint. */
811 gfc_check_a_xkind (gfc_expr
*a
, gfc_expr
*kind
)
813 return check_a_kind (a
, kind
, BT_REAL
);
818 gfc_check_abs (gfc_expr
*a
)
820 if (!numeric_check (a
, 0))
828 gfc_check_achar (gfc_expr
*a
, gfc_expr
*kind
)
830 if (!type_check (a
, 0, BT_INTEGER
))
832 if (!kind_check (kind
, 1, BT_CHARACTER
))
840 gfc_check_access_func (gfc_expr
*name
, gfc_expr
*mode
)
842 if (!type_check (name
, 0, BT_CHARACTER
)
843 || !scalar_check (name
, 0))
845 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
848 if (!type_check (mode
, 1, BT_CHARACTER
)
849 || !scalar_check (mode
, 1))
851 if (!kind_value_check (mode
, 1, gfc_default_character_kind
))
859 gfc_check_all_any (gfc_expr
*mask
, gfc_expr
*dim
)
861 if (!logical_array_check (mask
, 0))
864 if (!dim_check (dim
, 1, false))
867 if (!dim_rank_check (dim
, mask
, 0))
875 gfc_check_allocated (gfc_expr
*array
)
877 /* Tests on allocated components of coarrays need to detour the check to
878 argument of the _caf_get. */
879 if (flag_coarray
== GFC_FCOARRAY_LIB
&& array
->expr_type
== EXPR_FUNCTION
880 && array
->value
.function
.isym
881 && array
->value
.function
.isym
->id
== GFC_ISYM_CAF_GET
)
883 array
= array
->value
.function
.actual
->expr
;
888 if (!variable_check (array
, 0, false))
890 if (!allocatable_check (array
, 0))
897 /* Common check function where the first argument must be real or
898 integer and the second argument must be the same as the first. */
901 gfc_check_a_p (gfc_expr
*a
, gfc_expr
*p
)
903 if (!int_or_real_check (a
, 0))
906 if (a
->ts
.type
!= p
->ts
.type
)
908 gfc_error ("%qs and %qs arguments of %qs intrinsic at %L must "
909 "have the same type", gfc_current_intrinsic_arg
[0]->name
,
910 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
915 if (a
->ts
.kind
!= p
->ts
.kind
)
917 if (!gfc_notify_std (GFC_STD_GNU
, "Different type kinds at %L",
927 gfc_check_x_yd (gfc_expr
*x
, gfc_expr
*y
)
929 if (!double_check (x
, 0) || !double_check (y
, 1))
937 gfc_check_associated (gfc_expr
*pointer
, gfc_expr
*target
)
939 symbol_attribute attr1
, attr2
;
944 where
= &pointer
->where
;
946 if (pointer
->expr_type
== EXPR_NULL
)
949 attr1
= gfc_expr_attr (pointer
);
951 if (!attr1
.pointer
&& !attr1
.proc_pointer
)
953 gfc_error ("%qs argument of %qs intrinsic at %L must be a POINTER",
954 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
960 if (attr1
.pointer
&& gfc_is_coindexed (pointer
))
962 gfc_error ("%qs argument of %qs intrinsic at %L shall not be "
963 "coindexed", gfc_current_intrinsic_arg
[0]->name
,
964 gfc_current_intrinsic
, &pointer
->where
);
968 /* Target argument is optional. */
972 where
= &target
->where
;
973 if (target
->expr_type
== EXPR_NULL
)
976 if (target
->expr_type
== EXPR_VARIABLE
|| target
->expr_type
== EXPR_FUNCTION
)
977 attr2
= gfc_expr_attr (target
);
980 gfc_error ("%qs argument of %qs intrinsic at %L must be a pointer "
981 "or target VARIABLE or FUNCTION",
982 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
987 if (attr1
.pointer
&& !attr2
.pointer
&& !attr2
.target
)
989 gfc_error ("%qs argument of %qs intrinsic at %L must be a POINTER "
990 "or a TARGET", gfc_current_intrinsic_arg
[1]->name
,
991 gfc_current_intrinsic
, &target
->where
);
996 if (attr1
.pointer
&& gfc_is_coindexed (target
))
998 gfc_error ("%qs argument of %qs intrinsic at %L shall not be "
999 "coindexed", gfc_current_intrinsic_arg
[1]->name
,
1000 gfc_current_intrinsic
, &target
->where
);
1005 if (!same_type_check (pointer
, 0, target
, 1))
1007 if (!rank_check (target
, 0, pointer
->rank
))
1009 if (target
->rank
> 0)
1011 for (i
= 0; i
< target
->rank
; i
++)
1012 if (target
->ref
->u
.ar
.dimen_type
[i
] == DIMEN_VECTOR
)
1014 gfc_error ("Array section with a vector subscript at %L shall not "
1015 "be the target of a pointer",
1025 gfc_error ("NULL pointer at %L is not permitted as actual argument "
1026 "of %qs intrinsic function", where
, gfc_current_intrinsic
);
1033 gfc_check_atan_2 (gfc_expr
*y
, gfc_expr
*x
)
1035 /* gfc_notify_std would be a waste of time as the return value
1036 is seemingly used only for the generic resolution. The error
1037 will be: Too many arguments. */
1038 if ((gfc_option
.allow_std
& GFC_STD_F2008
) == 0)
1041 return gfc_check_atan2 (y
, x
);
1046 gfc_check_atan2 (gfc_expr
*y
, gfc_expr
*x
)
1048 if (!type_check (y
, 0, BT_REAL
))
1050 if (!same_type_check (y
, 0, x
, 1))
1058 gfc_check_atomic (gfc_expr
*atom
, int atom_no
, gfc_expr
*value
, int val_no
,
1059 gfc_expr
*stat
, int stat_no
)
1061 if (!scalar_check (atom
, atom_no
) || !scalar_check (value
, val_no
))
1064 if (!(atom
->ts
.type
== BT_INTEGER
&& atom
->ts
.kind
== gfc_atomic_int_kind
)
1065 && !(atom
->ts
.type
== BT_LOGICAL
1066 && atom
->ts
.kind
== gfc_atomic_logical_kind
))
1068 gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1069 "integer of ATOMIC_INT_KIND or a logical of "
1070 "ATOMIC_LOGICAL_KIND", &atom
->where
, gfc_current_intrinsic
);
1074 if (!gfc_is_coarray (atom
) && !gfc_is_coindexed (atom
))
1076 gfc_error ("ATOM argument at %L of the %s intrinsic function shall be a "
1077 "coarray or coindexed", &atom
->where
, gfc_current_intrinsic
);
1081 if (atom
->ts
.type
!= value
->ts
.type
)
1083 gfc_error ("%qs argument of %qs intrinsic at %L shall have the same "
1084 "type as %qs at %L", gfc_current_intrinsic_arg
[val_no
]->name
,
1085 gfc_current_intrinsic
, &value
->where
,
1086 gfc_current_intrinsic_arg
[atom_no
]->name
, &atom
->where
);
1092 if (!type_check (stat
, stat_no
, BT_INTEGER
))
1094 if (!scalar_check (stat
, stat_no
))
1096 if (!variable_check (stat
, stat_no
, false))
1098 if (!kind_value_check (stat
, stat_no
, gfc_default_integer_kind
))
1101 if (!gfc_notify_std (GFC_STD_F2008_TS
, "STAT= argument to %s at %L",
1102 gfc_current_intrinsic
, &stat
->where
))
1111 gfc_check_atomic_def (gfc_expr
*atom
, gfc_expr
*value
, gfc_expr
*stat
)
1113 if (atom
->expr_type
== EXPR_FUNCTION
1114 && atom
->value
.function
.isym
1115 && atom
->value
.function
.isym
->id
== GFC_ISYM_CAF_GET
)
1116 atom
= atom
->value
.function
.actual
->expr
;
1118 if (!gfc_check_vardef_context (atom
, false, false, false, NULL
))
1120 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1121 "definable", gfc_current_intrinsic
, &atom
->where
);
1125 return gfc_check_atomic (atom
, 0, value
, 1, stat
, 2);
1130 gfc_check_atomic_op (gfc_expr
*atom
, gfc_expr
*value
, gfc_expr
*stat
)
1132 if (atom
->ts
.type
!= BT_INTEGER
|| atom
->ts
.kind
!= gfc_atomic_int_kind
)
1134 gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1135 "integer of ATOMIC_INT_KIND", &atom
->where
,
1136 gfc_current_intrinsic
);
1140 return gfc_check_atomic_def (atom
, value
, stat
);
1145 gfc_check_atomic_ref (gfc_expr
*value
, gfc_expr
*atom
, gfc_expr
*stat
)
1147 if (atom
->expr_type
== EXPR_FUNCTION
1148 && atom
->value
.function
.isym
1149 && atom
->value
.function
.isym
->id
== GFC_ISYM_CAF_GET
)
1150 atom
= atom
->value
.function
.actual
->expr
;
1152 if (!gfc_check_vardef_context (value
, false, false, false, NULL
))
1154 gfc_error ("VALUE argument of the %s intrinsic function at %L shall be "
1155 "definable", gfc_current_intrinsic
, &value
->where
);
1159 return gfc_check_atomic (atom
, 1, value
, 0, stat
, 2);
1164 gfc_check_image_status (gfc_expr
*image
, gfc_expr
*team
)
1166 /* IMAGE has to be a positive, scalar integer. */
1167 if (!type_check (image
, 0, BT_INTEGER
) || !scalar_check (image
, 0)
1168 || !positive_check (0, image
))
1173 gfc_error ("%qs argument of %qs intrinsic at %L not yet supported",
1174 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1183 gfc_check_failed_or_stopped_images (gfc_expr
*team
, gfc_expr
*kind
)
1187 gfc_error ("%qs argument of %qs intrinsic at %L not yet supported",
1188 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
1197 if (!type_check (kind
, 1, BT_INTEGER
) || !scalar_check (kind
, 1)
1198 || !positive_check (1, kind
))
1201 /* Get the kind, reporting error on non-constant or overflow. */
1202 gfc_current_locus
= kind
->where
;
1203 if (gfc_extract_int (kind
, &k
, 1))
1205 if (gfc_validate_kind (BT_INTEGER
, k
, true) == -1)
1207 gfc_error ("%qs argument of %qs intrinsic at %L shall specify a "
1208 "valid integer kind", gfc_current_intrinsic_arg
[1]->name
,
1209 gfc_current_intrinsic
, &kind
->where
);
1218 gfc_check_atomic_cas (gfc_expr
*atom
, gfc_expr
*old
, gfc_expr
*compare
,
1219 gfc_expr
*new_val
, gfc_expr
*stat
)
1221 if (atom
->expr_type
== EXPR_FUNCTION
1222 && atom
->value
.function
.isym
1223 && atom
->value
.function
.isym
->id
== GFC_ISYM_CAF_GET
)
1224 atom
= atom
->value
.function
.actual
->expr
;
1226 if (!gfc_check_atomic (atom
, 0, new_val
, 3, stat
, 4))
1229 if (!scalar_check (old
, 1) || !scalar_check (compare
, 2))
1232 if (!same_type_check (atom
, 0, old
, 1))
1235 if (!same_type_check (atom
, 0, compare
, 2))
1238 if (!gfc_check_vardef_context (atom
, false, false, false, NULL
))
1240 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1241 "definable", gfc_current_intrinsic
, &atom
->where
);
1245 if (!gfc_check_vardef_context (old
, false, false, false, NULL
))
1247 gfc_error ("OLD argument of the %s intrinsic function at %L shall be "
1248 "definable", gfc_current_intrinsic
, &old
->where
);
1256 gfc_check_event_query (gfc_expr
*event
, gfc_expr
*count
, gfc_expr
*stat
)
1258 if (event
->ts
.type
!= BT_DERIVED
1259 || event
->ts
.u
.derived
->from_intmod
!= INTMOD_ISO_FORTRAN_ENV
1260 || event
->ts
.u
.derived
->intmod_sym_id
!= ISOFORTRAN_EVENT_TYPE
)
1262 gfc_error ("EVENT argument at %L to the intrinsic EVENT_QUERY "
1263 "shall be of type EVENT_TYPE", &event
->where
);
1267 if (!scalar_check (event
, 0))
1270 if (!gfc_check_vardef_context (count
, false, false, false, NULL
))
1272 gfc_error ("COUNT argument of the EVENT_QUERY intrinsic function at %L "
1273 "shall be definable", &count
->where
);
1277 if (!type_check (count
, 1, BT_INTEGER
))
1280 int i
= gfc_validate_kind (BT_INTEGER
, count
->ts
.kind
, false);
1281 int j
= gfc_validate_kind (BT_INTEGER
, gfc_default_integer_kind
, false);
1283 if (gfc_integer_kinds
[i
].range
< gfc_integer_kinds
[j
].range
)
1285 gfc_error ("COUNT argument of the EVENT_QUERY intrinsic function at %L "
1286 "shall have at least the range of the default integer",
1293 if (!type_check (stat
, 2, BT_INTEGER
))
1295 if (!scalar_check (stat
, 2))
1297 if (!variable_check (stat
, 2, false))
1300 if (!gfc_notify_std (GFC_STD_F2008_TS
, "STAT= argument to %s at %L",
1301 gfc_current_intrinsic
, &stat
->where
))
1310 gfc_check_atomic_fetch_op (gfc_expr
*atom
, gfc_expr
*value
, gfc_expr
*old
,
1313 if (atom
->expr_type
== EXPR_FUNCTION
1314 && atom
->value
.function
.isym
1315 && atom
->value
.function
.isym
->id
== GFC_ISYM_CAF_GET
)
1316 atom
= atom
->value
.function
.actual
->expr
;
1318 if (atom
->ts
.type
!= BT_INTEGER
|| atom
->ts
.kind
!= gfc_atomic_int_kind
)
1320 gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1321 "integer of ATOMIC_INT_KIND", &atom
->where
,
1322 gfc_current_intrinsic
);
1326 if (!gfc_check_atomic (atom
, 0, value
, 1, stat
, 3))
1329 if (!scalar_check (old
, 2))
1332 if (!same_type_check (atom
, 0, old
, 2))
1335 if (!gfc_check_vardef_context (atom
, false, false, false, NULL
))
1337 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1338 "definable", gfc_current_intrinsic
, &atom
->where
);
1342 if (!gfc_check_vardef_context (old
, false, false, false, NULL
))
1344 gfc_error ("OLD argument of the %s intrinsic function at %L shall be "
1345 "definable", gfc_current_intrinsic
, &old
->where
);
1353 /* BESJN and BESYN functions. */
1356 gfc_check_besn (gfc_expr
*n
, gfc_expr
*x
)
1358 if (!type_check (n
, 0, BT_INTEGER
))
1360 if (n
->expr_type
== EXPR_CONSTANT
)
1363 gfc_extract_int (n
, &i
);
1364 if (i
< 0 && !gfc_notify_std (GFC_STD_GNU
, "Negative argument "
1365 "N at %L", &n
->where
))
1369 if (!type_check (x
, 1, BT_REAL
))
1376 /* Transformational version of the Bessel JN and YN functions. */
1379 gfc_check_bessel_n2 (gfc_expr
*n1
, gfc_expr
*n2
, gfc_expr
*x
)
1381 if (!type_check (n1
, 0, BT_INTEGER
))
1383 if (!scalar_check (n1
, 0))
1385 if (!nonnegative_check ("N1", n1
))
1388 if (!type_check (n2
, 1, BT_INTEGER
))
1390 if (!scalar_check (n2
, 1))
1392 if (!nonnegative_check ("N2", n2
))
1395 if (!type_check (x
, 2, BT_REAL
))
1397 if (!scalar_check (x
, 2))
1405 gfc_check_bge_bgt_ble_blt (gfc_expr
*i
, gfc_expr
*j
)
1407 if (!type_check (i
, 0, BT_INTEGER
))
1410 if (!type_check (j
, 1, BT_INTEGER
))
1418 gfc_check_bitfcn (gfc_expr
*i
, gfc_expr
*pos
)
1420 if (!type_check (i
, 0, BT_INTEGER
))
1423 if (!type_check (pos
, 1, BT_INTEGER
))
1426 if (!nonnegative_check ("pos", pos
))
1429 if (!less_than_bitsize1 ("i", i
, "pos", pos
, false))
1437 gfc_check_char (gfc_expr
*i
, gfc_expr
*kind
)
1439 if (!type_check (i
, 0, BT_INTEGER
))
1441 if (!kind_check (kind
, 1, BT_CHARACTER
))
1449 gfc_check_chdir (gfc_expr
*dir
)
1451 if (!type_check (dir
, 0, BT_CHARACTER
))
1453 if (!kind_value_check (dir
, 0, gfc_default_character_kind
))
1461 gfc_check_chdir_sub (gfc_expr
*dir
, gfc_expr
*status
)
1463 if (!type_check (dir
, 0, BT_CHARACTER
))
1465 if (!kind_value_check (dir
, 0, gfc_default_character_kind
))
1471 if (!type_check (status
, 1, BT_INTEGER
))
1473 if (!scalar_check (status
, 1))
1481 gfc_check_chmod (gfc_expr
*name
, gfc_expr
*mode
)
1483 if (!type_check (name
, 0, BT_CHARACTER
))
1485 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
1488 if (!type_check (mode
, 1, BT_CHARACTER
))
1490 if (!kind_value_check (mode
, 1, gfc_default_character_kind
))
1498 gfc_check_chmod_sub (gfc_expr
*name
, gfc_expr
*mode
, gfc_expr
*status
)
1500 if (!type_check (name
, 0, BT_CHARACTER
))
1502 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
1505 if (!type_check (mode
, 1, BT_CHARACTER
))
1507 if (!kind_value_check (mode
, 1, gfc_default_character_kind
))
1513 if (!type_check (status
, 2, BT_INTEGER
))
1516 if (!scalar_check (status
, 2))
1524 gfc_check_cmplx (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*kind
)
1526 if (!numeric_check (x
, 0))
1531 if (!numeric_check (y
, 1))
1534 if (x
->ts
.type
== BT_COMPLEX
)
1536 gfc_error ("%qs argument of %qs intrinsic at %L must not be "
1537 "present if %<x%> is COMPLEX",
1538 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1543 if (y
->ts
.type
== BT_COMPLEX
)
1545 gfc_error ("%qs argument of %qs intrinsic at %L must have a type "
1546 "of either REAL or INTEGER",
1547 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
1554 if (!kind_check (kind
, 2, BT_COMPLEX
))
1557 if (!kind
&& warn_conversion
1558 && x
->ts
.type
== BT_REAL
&& x
->ts
.kind
> gfc_default_real_kind
)
1559 gfc_warning_now (OPT_Wconversion
, "Conversion from %s to default-kind "
1560 "COMPLEX(%d) at %L might lose precision, consider using "
1561 "the KIND argument", gfc_typename (&x
->ts
),
1562 gfc_default_real_kind
, &x
->where
);
1563 else if (y
&& !kind
&& warn_conversion
1564 && y
->ts
.type
== BT_REAL
&& y
->ts
.kind
> gfc_default_real_kind
)
1565 gfc_warning_now (OPT_Wconversion
, "Conversion from %s to default-kind "
1566 "COMPLEX(%d) at %L might lose precision, consider using "
1567 "the KIND argument", gfc_typename (&y
->ts
),
1568 gfc_default_real_kind
, &y
->where
);
1574 check_co_collective (gfc_expr
*a
, gfc_expr
*image_idx
, gfc_expr
*stat
,
1575 gfc_expr
*errmsg
, bool co_reduce
)
1577 if (!variable_check (a
, 0, false))
1580 if (!gfc_check_vardef_context (a
, false, false, false, "argument 'A' with "
1584 /* Fortran 2008, 12.5.2.4, paragraph 18. */
1585 if (gfc_has_vector_subscript (a
))
1587 gfc_error ("Argument %<A%> with INTENT(INOUT) at %L of the intrinsic "
1588 "subroutine %s shall not have a vector subscript",
1589 &a
->where
, gfc_current_intrinsic
);
1593 if (gfc_is_coindexed (a
))
1595 gfc_error ("The A argument at %L to the intrinsic %s shall not be "
1596 "coindexed", &a
->where
, gfc_current_intrinsic
);
1600 if (image_idx
!= NULL
)
1602 if (!type_check (image_idx
, co_reduce
? 2 : 1, BT_INTEGER
))
1604 if (!scalar_check (image_idx
, co_reduce
? 2 : 1))
1610 if (!type_check (stat
, co_reduce
? 3 : 2, BT_INTEGER
))
1612 if (!scalar_check (stat
, co_reduce
? 3 : 2))
1614 if (!variable_check (stat
, co_reduce
? 3 : 2, false))
1616 if (stat
->ts
.kind
!= 4)
1618 gfc_error ("The stat= argument at %L must be a kind=4 integer "
1619 "variable", &stat
->where
);
1626 if (!type_check (errmsg
, co_reduce
? 4 : 3, BT_CHARACTER
))
1628 if (!scalar_check (errmsg
, co_reduce
? 4 : 3))
1630 if (!variable_check (errmsg
, co_reduce
? 4 : 3, false))
1632 if (errmsg
->ts
.kind
!= 1)
1634 gfc_error ("The errmsg= argument at %L must be a default-kind "
1635 "character variable", &errmsg
->where
);
1640 if (flag_coarray
== GFC_FCOARRAY_NONE
)
1642 gfc_fatal_error ("Coarrays disabled at %L, use %<-fcoarray=%> to enable",
1652 gfc_check_co_broadcast (gfc_expr
*a
, gfc_expr
*source_image
, gfc_expr
*stat
,
1655 if (a
->ts
.type
== BT_CLASS
|| gfc_expr_attr (a
).alloc_comp
)
1657 gfc_error ("Support for the A argument at %L which is polymorphic A "
1658 "argument or has allocatable components is not yet "
1659 "implemented", &a
->where
);
1662 return check_co_collective (a
, source_image
, stat
, errmsg
, false);
1667 gfc_check_co_reduce (gfc_expr
*a
, gfc_expr
*op
, gfc_expr
*result_image
,
1668 gfc_expr
*stat
, gfc_expr
*errmsg
)
1670 symbol_attribute attr
;
1671 gfc_formal_arglist
*formal
;
1674 if (a
->ts
.type
== BT_CLASS
)
1676 gfc_error ("The A argument at %L of CO_REDUCE shall not be polymorphic",
1681 if (gfc_expr_attr (a
).alloc_comp
)
1683 gfc_error ("Support for the A argument at %L with allocatable components"
1684 " is not yet implemented", &a
->where
);
1688 if (!check_co_collective (a
, result_image
, stat
, errmsg
, true))
1691 if (!gfc_resolve_expr (op
))
1694 attr
= gfc_expr_attr (op
);
1695 if (!attr
.pure
|| !attr
.function
)
1697 gfc_error ("OPERATOR argument at %L must be a PURE function",
1704 /* None of the intrinsics fulfills the criteria of taking two arguments,
1705 returning the same type and kind as the arguments and being permitted
1706 as actual argument. */
1707 gfc_error ("Intrinsic function %s at %L is not permitted for CO_REDUCE",
1708 op
->symtree
->n
.sym
->name
, &op
->where
);
1712 if (gfc_is_proc_ptr_comp (op
))
1714 gfc_component
*comp
= gfc_get_proc_ptr_comp (op
);
1715 sym
= comp
->ts
.interface
;
1718 sym
= op
->symtree
->n
.sym
;
1720 formal
= sym
->formal
;
1722 if (!formal
|| !formal
->next
|| formal
->next
->next
)
1724 gfc_error ("The function passed as OPERATOR at %L shall have two "
1725 "arguments", &op
->where
);
1729 if (sym
->result
->ts
.type
== BT_UNKNOWN
)
1730 gfc_set_default_type (sym
->result
, 0, NULL
);
1732 if (!gfc_compare_types (&a
->ts
, &sym
->result
->ts
))
1734 gfc_error ("A argument at %L has type %s but the function passed as "
1735 "OPERATOR at %L returns %s",
1736 &a
->where
, gfc_typename (&a
->ts
), &op
->where
,
1737 gfc_typename (&sym
->result
->ts
));
1740 if (!gfc_compare_types (&a
->ts
, &formal
->sym
->ts
)
1741 || !gfc_compare_types (&a
->ts
, &formal
->next
->sym
->ts
))
1743 gfc_error ("The function passed as OPERATOR at %L has arguments of type "
1744 "%s and %s but shall have type %s", &op
->where
,
1745 gfc_typename (&formal
->sym
->ts
),
1746 gfc_typename (&formal
->next
->sym
->ts
), gfc_typename (&a
->ts
));
1749 if (op
->rank
|| attr
.allocatable
|| attr
.pointer
|| formal
->sym
->as
1750 || formal
->next
->sym
->as
|| formal
->sym
->attr
.allocatable
1751 || formal
->next
->sym
->attr
.allocatable
|| formal
->sym
->attr
.pointer
1752 || formal
->next
->sym
->attr
.pointer
)
1754 gfc_error ("The function passed as OPERATOR at %L shall have scalar "
1755 "nonallocatable nonpointer arguments and return a "
1756 "nonallocatable nonpointer scalar", &op
->where
);
1760 if (formal
->sym
->attr
.value
!= formal
->next
->sym
->attr
.value
)
1762 gfc_error ("The function passed as OPERATOR at %L shall have the VALUE "
1763 "attribute either for none or both arguments", &op
->where
);
1767 if (formal
->sym
->attr
.target
!= formal
->next
->sym
->attr
.target
)
1769 gfc_error ("The function passed as OPERATOR at %L shall have the TARGET "
1770 "attribute either for none or both arguments", &op
->where
);
1774 if (formal
->sym
->attr
.asynchronous
!= formal
->next
->sym
->attr
.asynchronous
)
1776 gfc_error ("The function passed as OPERATOR at %L shall have the "
1777 "ASYNCHRONOUS attribute either for none or both arguments",
1782 if (formal
->sym
->attr
.optional
|| formal
->next
->sym
->attr
.optional
)
1784 gfc_error ("The function passed as OPERATOR at %L shall not have the "
1785 "OPTIONAL attribute for either of the arguments", &op
->where
);
1789 if (a
->ts
.type
== BT_CHARACTER
)
1792 unsigned long actual_size
, formal_size1
, formal_size2
, result_size
;
1795 actual_size
= cl
&& cl
->length
&& cl
->length
->expr_type
== EXPR_CONSTANT
1796 ? mpz_get_ui (cl
->length
->value
.integer
) : 0;
1798 cl
= formal
->sym
->ts
.u
.cl
;
1799 formal_size1
= cl
&& cl
->length
&& cl
->length
->expr_type
== EXPR_CONSTANT
1800 ? mpz_get_ui (cl
->length
->value
.integer
) : 0;
1802 cl
= formal
->next
->sym
->ts
.u
.cl
;
1803 formal_size2
= cl
&& cl
->length
&& cl
->length
->expr_type
== EXPR_CONSTANT
1804 ? mpz_get_ui (cl
->length
->value
.integer
) : 0;
1807 result_size
= cl
&& cl
->length
&& cl
->length
->expr_type
== EXPR_CONSTANT
1808 ? mpz_get_ui (cl
->length
->value
.integer
) : 0;
1811 && ((formal_size1
&& actual_size
!= formal_size1
)
1812 || (formal_size2
&& actual_size
!= formal_size2
)))
1814 gfc_error ("The character length of the A argument at %L and of the "
1815 "arguments of the OPERATOR at %L shall be the same",
1816 &a
->where
, &op
->where
);
1819 if (actual_size
&& result_size
&& actual_size
!= result_size
)
1821 gfc_error ("The character length of the A argument at %L and of the "
1822 "function result of the OPERATOR at %L shall be the same",
1823 &a
->where
, &op
->where
);
1833 gfc_check_co_minmax (gfc_expr
*a
, gfc_expr
*result_image
, gfc_expr
*stat
,
1836 if (a
->ts
.type
!= BT_INTEGER
&& a
->ts
.type
!= BT_REAL
1837 && a
->ts
.type
!= BT_CHARACTER
)
1839 gfc_error ("%qs argument of %qs intrinsic at %L shall be of type "
1840 "integer, real or character",
1841 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
1845 return check_co_collective (a
, result_image
, stat
, errmsg
, false);
1850 gfc_check_co_sum (gfc_expr
*a
, gfc_expr
*result_image
, gfc_expr
*stat
,
1853 if (!numeric_check (a
, 0))
1855 return check_co_collective (a
, result_image
, stat
, errmsg
, false);
1860 gfc_check_complex (gfc_expr
*x
, gfc_expr
*y
)
1862 if (!int_or_real_check (x
, 0))
1864 if (!scalar_check (x
, 0))
1867 if (!int_or_real_check (y
, 1))
1869 if (!scalar_check (y
, 1))
1877 gfc_check_count (gfc_expr
*mask
, gfc_expr
*dim
, gfc_expr
*kind
)
1879 if (!logical_array_check (mask
, 0))
1881 if (!dim_check (dim
, 1, false))
1883 if (!dim_rank_check (dim
, mask
, 0))
1885 if (!kind_check (kind
, 2, BT_INTEGER
))
1887 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "%qs intrinsic "
1888 "with KIND argument at %L",
1889 gfc_current_intrinsic
, &kind
->where
))
1897 gfc_check_cshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*dim
)
1899 if (!array_check (array
, 0))
1902 if (!type_check (shift
, 1, BT_INTEGER
))
1905 if (!dim_check (dim
, 2, true))
1908 if (!dim_rank_check (dim
, array
, false))
1911 if (array
->rank
== 1 || shift
->rank
== 0)
1913 if (!scalar_check (shift
, 1))
1916 else if (shift
->rank
== array
->rank
- 1)
1921 else if (dim
->expr_type
== EXPR_CONSTANT
)
1922 gfc_extract_int (dim
, &d
);
1929 for (i
= 0, j
= 0; i
< array
->rank
; i
++)
1932 if (!identical_dimen_shape (array
, i
, shift
, j
))
1934 gfc_error ("%qs argument of %qs intrinsic at %L has "
1935 "invalid shape in dimension %d (%ld/%ld)",
1936 gfc_current_intrinsic_arg
[1]->name
,
1937 gfc_current_intrinsic
, &shift
->where
, i
+ 1,
1938 mpz_get_si (array
->shape
[i
]),
1939 mpz_get_si (shift
->shape
[j
]));
1949 gfc_error ("%qs argument of intrinsic %qs at %L of must have rank "
1950 "%d or be a scalar", gfc_current_intrinsic_arg
[1]->name
,
1951 gfc_current_intrinsic
, &shift
->where
, array
->rank
- 1);
1960 gfc_check_ctime (gfc_expr
*time
)
1962 if (!scalar_check (time
, 0))
1965 if (!type_check (time
, 0, BT_INTEGER
))
1972 bool gfc_check_datan2 (gfc_expr
*y
, gfc_expr
*x
)
1974 if (!double_check (y
, 0) || !double_check (x
, 1))
1981 gfc_check_dcmplx (gfc_expr
*x
, gfc_expr
*y
)
1983 if (!numeric_check (x
, 0))
1988 if (!numeric_check (y
, 1))
1991 if (x
->ts
.type
== BT_COMPLEX
)
1993 gfc_error ("%qs argument of %qs intrinsic at %L must not be "
1994 "present if %<x%> is COMPLEX",
1995 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
2000 if (y
->ts
.type
== BT_COMPLEX
)
2002 gfc_error ("%qs argument of %qs intrinsic at %L must have a type "
2003 "of either REAL or INTEGER",
2004 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
2015 gfc_check_dble (gfc_expr
*x
)
2017 if (!numeric_check (x
, 0))
2025 gfc_check_digits (gfc_expr
*x
)
2027 if (!int_or_real_check (x
, 0))
2035 gfc_check_dot_product (gfc_expr
*vector_a
, gfc_expr
*vector_b
)
2037 switch (vector_a
->ts
.type
)
2040 if (!type_check (vector_b
, 1, BT_LOGICAL
))
2047 if (!numeric_check (vector_b
, 1))
2052 gfc_error ("%qs argument of %qs intrinsic at %L must be numeric "
2053 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
2054 gfc_current_intrinsic
, &vector_a
->where
);
2058 if (!rank_check (vector_a
, 0, 1))
2061 if (!rank_check (vector_b
, 1, 1))
2064 if (! identical_dimen_shape (vector_a
, 0, vector_b
, 0))
2066 gfc_error ("Different shape for arguments %qs and %qs at %L for "
2067 "intrinsic %<dot_product%>",
2068 gfc_current_intrinsic_arg
[0]->name
,
2069 gfc_current_intrinsic_arg
[1]->name
, &vector_a
->where
);
2078 gfc_check_dprod (gfc_expr
*x
, gfc_expr
*y
)
2080 if (!type_check (x
, 0, BT_REAL
)
2081 || !type_check (y
, 1, BT_REAL
))
2084 if (x
->ts
.kind
!= gfc_default_real_kind
)
2086 gfc_error ("%qs argument of %qs intrinsic at %L must be default "
2087 "real", gfc_current_intrinsic_arg
[0]->name
,
2088 gfc_current_intrinsic
, &x
->where
);
2092 if (y
->ts
.kind
!= gfc_default_real_kind
)
2094 gfc_error ("%qs argument of %qs intrinsic at %L must be default "
2095 "real", gfc_current_intrinsic_arg
[1]->name
,
2096 gfc_current_intrinsic
, &y
->where
);
2105 gfc_check_dshift (gfc_expr
*i
, gfc_expr
*j
, gfc_expr
*shift
)
2107 if (!type_check (i
, 0, BT_INTEGER
))
2110 if (!type_check (j
, 1, BT_INTEGER
))
2113 if (i
->is_boz
&& j
->is_boz
)
2115 gfc_error ("%<I%> at %L and %<J%>' at %L cannot both be BOZ literal "
2116 "constants", &i
->where
, &j
->where
);
2120 if (!i
->is_boz
&& !j
->is_boz
&& !same_type_check (i
, 0, j
, 1))
2123 if (!type_check (shift
, 2, BT_INTEGER
))
2126 if (!nonnegative_check ("SHIFT", shift
))
2131 if (!less_than_bitsize1 ("J", j
, "SHIFT", shift
, true))
2133 i
->ts
.kind
= j
->ts
.kind
;
2137 if (!less_than_bitsize1 ("I", i
, "SHIFT", shift
, true))
2139 j
->ts
.kind
= i
->ts
.kind
;
2147 gfc_check_eoshift (gfc_expr
*array
, gfc_expr
*shift
, gfc_expr
*boundary
,
2150 if (!array_check (array
, 0))
2153 if (!type_check (shift
, 1, BT_INTEGER
))
2156 if (!dim_check (dim
, 3, true))
2159 if (!dim_rank_check (dim
, array
, false))
2162 if (array
->rank
== 1 || shift
->rank
== 0)
2164 if (!scalar_check (shift
, 1))
2167 else if (shift
->rank
== array
->rank
- 1)
2172 else if (dim
->expr_type
== EXPR_CONSTANT
)
2173 gfc_extract_int (dim
, &d
);
2180 for (i
= 0, j
= 0; i
< array
->rank
; i
++)
2183 if (!identical_dimen_shape (array
, i
, shift
, j
))
2185 gfc_error ("%qs argument of %qs intrinsic at %L has "
2186 "invalid shape in dimension %d (%ld/%ld)",
2187 gfc_current_intrinsic_arg
[1]->name
,
2188 gfc_current_intrinsic
, &shift
->where
, i
+ 1,
2189 mpz_get_si (array
->shape
[i
]),
2190 mpz_get_si (shift
->shape
[j
]));
2200 gfc_error ("%qs argument of intrinsic %qs at %L of must have rank "
2201 "%d or be a scalar", gfc_current_intrinsic_arg
[1]->name
,
2202 gfc_current_intrinsic
, &shift
->where
, array
->rank
- 1);
2206 if (boundary
!= NULL
)
2208 if (!same_type_check (array
, 0, boundary
, 2))
2211 if (array
->rank
== 1 || boundary
->rank
== 0)
2213 if (!scalar_check (boundary
, 2))
2216 else if (boundary
->rank
== array
->rank
- 1)
2218 if (!gfc_check_conformance (shift
, boundary
,
2219 "arguments '%s' and '%s' for "
2221 gfc_current_intrinsic_arg
[1]->name
,
2222 gfc_current_intrinsic_arg
[2]->name
,
2223 gfc_current_intrinsic
))
2228 gfc_error ("%qs argument of intrinsic %qs at %L of must have "
2229 "rank %d or be a scalar",
2230 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
2231 &shift
->where
, array
->rank
- 1);
2240 gfc_check_float (gfc_expr
*a
)
2242 if (!type_check (a
, 0, BT_INTEGER
))
2245 if ((a
->ts
.kind
!= gfc_default_integer_kind
)
2246 && !gfc_notify_std (GFC_STD_GNU
, "non-default INTEGER "
2247 "kind argument to %s intrinsic at %L",
2248 gfc_current_intrinsic
, &a
->where
))
2254 /* A single complex argument. */
2257 gfc_check_fn_c (gfc_expr
*a
)
2259 if (!type_check (a
, 0, BT_COMPLEX
))
2265 /* A single real argument. */
2268 gfc_check_fn_r (gfc_expr
*a
)
2270 if (!type_check (a
, 0, BT_REAL
))
2276 /* A single double argument. */
2279 gfc_check_fn_d (gfc_expr
*a
)
2281 if (!double_check (a
, 0))
2287 /* A single real or complex argument. */
2290 gfc_check_fn_rc (gfc_expr
*a
)
2292 if (!real_or_complex_check (a
, 0))
2300 gfc_check_fn_rc2008 (gfc_expr
*a
)
2302 if (!real_or_complex_check (a
, 0))
2305 if (a
->ts
.type
== BT_COMPLEX
2306 && !gfc_notify_std (GFC_STD_F2008
, "COMPLEX argument %qs "
2307 "of %qs intrinsic at %L",
2308 gfc_current_intrinsic_arg
[0]->name
,
2309 gfc_current_intrinsic
, &a
->where
))
2317 gfc_check_fnum (gfc_expr
*unit
)
2319 if (!type_check (unit
, 0, BT_INTEGER
))
2322 if (!scalar_check (unit
, 0))
2330 gfc_check_huge (gfc_expr
*x
)
2332 if (!int_or_real_check (x
, 0))
2340 gfc_check_hypot (gfc_expr
*x
, gfc_expr
*y
)
2342 if (!type_check (x
, 0, BT_REAL
))
2344 if (!same_type_check (x
, 0, y
, 1))
2351 /* Check that the single argument is an integer. */
2354 gfc_check_i (gfc_expr
*i
)
2356 if (!type_check (i
, 0, BT_INTEGER
))
2364 gfc_check_iand (gfc_expr
*i
, gfc_expr
*j
)
2366 if (!type_check (i
, 0, BT_INTEGER
))
2369 if (!type_check (j
, 1, BT_INTEGER
))
2372 if (i
->ts
.kind
!= j
->ts
.kind
)
2374 if (!gfc_notify_std (GFC_STD_GNU
, "Different type kinds at %L",
2384 gfc_check_ibits (gfc_expr
*i
, gfc_expr
*pos
, gfc_expr
*len
)
2386 if (!type_check (i
, 0, BT_INTEGER
))
2389 if (!type_check (pos
, 1, BT_INTEGER
))
2392 if (!type_check (len
, 2, BT_INTEGER
))
2395 if (!nonnegative_check ("pos", pos
))
2398 if (!nonnegative_check ("len", len
))
2401 if (!less_than_bitsize2 ("i", i
, "pos", pos
, "len", len
))
2409 gfc_check_ichar_iachar (gfc_expr
*c
, gfc_expr
*kind
)
2413 if (!type_check (c
, 0, BT_CHARACTER
))
2416 if (!kind_check (kind
, 1, BT_INTEGER
))
2419 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "%qs intrinsic "
2420 "with KIND argument at %L",
2421 gfc_current_intrinsic
, &kind
->where
))
2424 if (c
->expr_type
== EXPR_VARIABLE
|| c
->expr_type
== EXPR_SUBSTRING
)
2430 /* Substring references don't have the charlength set. */
2432 while (ref
&& ref
->type
!= REF_SUBSTRING
)
2435 gcc_assert (ref
== NULL
|| ref
->type
== REF_SUBSTRING
);
2439 /* Check that the argument is length one. Non-constant lengths
2440 can't be checked here, so assume they are ok. */
2441 if (c
->ts
.u
.cl
&& c
->ts
.u
.cl
->length
)
2443 /* If we already have a length for this expression then use it. */
2444 if (c
->ts
.u
.cl
->length
->expr_type
!= EXPR_CONSTANT
)
2446 i
= mpz_get_si (c
->ts
.u
.cl
->length
->value
.integer
);
2453 start
= ref
->u
.ss
.start
;
2454 end
= ref
->u
.ss
.end
;
2457 if (end
== NULL
|| end
->expr_type
!= EXPR_CONSTANT
2458 || start
->expr_type
!= EXPR_CONSTANT
)
2461 i
= mpz_get_si (end
->value
.integer
) + 1
2462 - mpz_get_si (start
->value
.integer
);
2470 gfc_error ("Argument of %s at %L must be of length one",
2471 gfc_current_intrinsic
, &c
->where
);
2480 gfc_check_idnint (gfc_expr
*a
)
2482 if (!double_check (a
, 0))
2490 gfc_check_ieor (gfc_expr
*i
, gfc_expr
*j
)
2492 if (!type_check (i
, 0, BT_INTEGER
))
2495 if (!type_check (j
, 1, BT_INTEGER
))
2498 if (i
->ts
.kind
!= j
->ts
.kind
)
2500 if (!gfc_notify_std (GFC_STD_GNU
, "Different type kinds at %L",
2510 gfc_check_index (gfc_expr
*string
, gfc_expr
*substring
, gfc_expr
*back
,
2513 if (!type_check (string
, 0, BT_CHARACTER
)
2514 || !type_check (substring
, 1, BT_CHARACTER
))
2517 if (back
!= NULL
&& !type_check (back
, 2, BT_LOGICAL
))
2520 if (!kind_check (kind
, 3, BT_INTEGER
))
2522 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "%qs intrinsic "
2523 "with KIND argument at %L",
2524 gfc_current_intrinsic
, &kind
->where
))
2527 if (string
->ts
.kind
!= substring
->ts
.kind
)
2529 gfc_error ("%qs argument of %qs intrinsic at %L must be the same "
2530 "kind as %qs", gfc_current_intrinsic_arg
[1]->name
,
2531 gfc_current_intrinsic
, &substring
->where
,
2532 gfc_current_intrinsic_arg
[0]->name
);
2541 gfc_check_int (gfc_expr
*x
, gfc_expr
*kind
)
2543 if (!numeric_check (x
, 0))
2546 if (!kind_check (kind
, 1, BT_INTEGER
))
2554 gfc_check_intconv (gfc_expr
*x
)
2556 if (!numeric_check (x
, 0))
2564 gfc_check_ior (gfc_expr
*i
, gfc_expr
*j
)
2566 if (!type_check (i
, 0, BT_INTEGER
))
2569 if (!type_check (j
, 1, BT_INTEGER
))
2572 if (i
->ts
.kind
!= j
->ts
.kind
)
2574 if (!gfc_notify_std (GFC_STD_GNU
, "Different type kinds at %L",
2584 gfc_check_ishft (gfc_expr
*i
, gfc_expr
*shift
)
2586 if (!type_check (i
, 0, BT_INTEGER
)
2587 || !type_check (shift
, 1, BT_INTEGER
))
2590 if (!less_than_bitsize1 ("I", i
, NULL
, shift
, true))
2598 gfc_check_ishftc (gfc_expr
*i
, gfc_expr
*shift
, gfc_expr
*size
)
2600 if (!type_check (i
, 0, BT_INTEGER
)
2601 || !type_check (shift
, 1, BT_INTEGER
))
2608 if (!type_check (size
, 2, BT_INTEGER
))
2611 if (!less_than_bitsize1 ("I", i
, "SIZE", size
, true))
2614 if (size
->expr_type
== EXPR_CONSTANT
)
2616 gfc_extract_int (size
, &i3
);
2619 gfc_error ("SIZE at %L must be positive", &size
->where
);
2623 if (shift
->expr_type
== EXPR_CONSTANT
)
2625 gfc_extract_int (shift
, &i2
);
2631 gfc_error ("The absolute value of SHIFT at %L must be less "
2632 "than or equal to SIZE at %L", &shift
->where
,
2639 else if (!less_than_bitsize1 ("I", i
, NULL
, shift
, true))
2647 gfc_check_kill (gfc_expr
*pid
, gfc_expr
*sig
)
2649 if (!type_check (pid
, 0, BT_INTEGER
))
2652 if (!type_check (sig
, 1, BT_INTEGER
))
2660 gfc_check_kill_sub (gfc_expr
*pid
, gfc_expr
*sig
, gfc_expr
*status
)
2662 if (!type_check (pid
, 0, BT_INTEGER
))
2665 if (!scalar_check (pid
, 0))
2668 if (!type_check (sig
, 1, BT_INTEGER
))
2671 if (!scalar_check (sig
, 1))
2677 if (!type_check (status
, 2, BT_INTEGER
))
2680 if (!scalar_check (status
, 2))
2688 gfc_check_kind (gfc_expr
*x
)
2690 if (gfc_bt_struct (x
->ts
.type
) || x
->ts
.type
== BT_CLASS
)
2692 gfc_error ("%qs argument of %qs intrinsic at %L must be of "
2693 "intrinsic type", gfc_current_intrinsic_arg
[0]->name
,
2694 gfc_current_intrinsic
, &x
->where
);
2697 if (x
->ts
.type
== BT_PROCEDURE
)
2699 gfc_error ("%qs argument of %qs intrinsic at %L must be a data entity",
2700 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
2710 gfc_check_lbound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
2712 if (!array_check (array
, 0))
2715 if (!dim_check (dim
, 1, false))
2718 if (!dim_rank_check (dim
, array
, 1))
2721 if (!kind_check (kind
, 2, BT_INTEGER
))
2723 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "%qs intrinsic "
2724 "with KIND argument at %L",
2725 gfc_current_intrinsic
, &kind
->where
))
2733 gfc_check_lcobound (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*kind
)
2735 if (flag_coarray
== GFC_FCOARRAY_NONE
)
2737 gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable");
2741 if (!coarray_check (coarray
, 0))
2746 if (!dim_check (dim
, 1, false))
2749 if (!dim_corank_check (dim
, coarray
))
2753 if (!kind_check (kind
, 2, BT_INTEGER
))
2761 gfc_check_len_lentrim (gfc_expr
*s
, gfc_expr
*kind
)
2763 if (!type_check (s
, 0, BT_CHARACTER
))
2766 if (!kind_check (kind
, 1, BT_INTEGER
))
2768 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "%qs intrinsic "
2769 "with KIND argument at %L",
2770 gfc_current_intrinsic
, &kind
->where
))
2778 gfc_check_lge_lgt_lle_llt (gfc_expr
*a
, gfc_expr
*b
)
2780 if (!type_check (a
, 0, BT_CHARACTER
))
2782 if (!kind_value_check (a
, 0, gfc_default_character_kind
))
2785 if (!type_check (b
, 1, BT_CHARACTER
))
2787 if (!kind_value_check (b
, 1, gfc_default_character_kind
))
2795 gfc_check_link (gfc_expr
*path1
, gfc_expr
*path2
)
2797 if (!type_check (path1
, 0, BT_CHARACTER
))
2799 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
2802 if (!type_check (path2
, 1, BT_CHARACTER
))
2804 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
2812 gfc_check_link_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2814 if (!type_check (path1
, 0, BT_CHARACTER
))
2816 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
2819 if (!type_check (path2
, 1, BT_CHARACTER
))
2821 if (!kind_value_check (path2
, 0, gfc_default_character_kind
))
2827 if (!type_check (status
, 2, BT_INTEGER
))
2830 if (!scalar_check (status
, 2))
2838 gfc_check_loc (gfc_expr
*expr
)
2840 return variable_check (expr
, 0, true);
2845 gfc_check_symlnk (gfc_expr
*path1
, gfc_expr
*path2
)
2847 if (!type_check (path1
, 0, BT_CHARACTER
))
2849 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
2852 if (!type_check (path2
, 1, BT_CHARACTER
))
2854 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
2862 gfc_check_symlnk_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
2864 if (!type_check (path1
, 0, BT_CHARACTER
))
2866 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
2869 if (!type_check (path2
, 1, BT_CHARACTER
))
2871 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
2877 if (!type_check (status
, 2, BT_INTEGER
))
2880 if (!scalar_check (status
, 2))
2888 gfc_check_logical (gfc_expr
*a
, gfc_expr
*kind
)
2890 if (!type_check (a
, 0, BT_LOGICAL
))
2892 if (!kind_check (kind
, 1, BT_LOGICAL
))
2899 /* Min/max family. */
2902 min_max_args (gfc_actual_arglist
*args
)
2904 gfc_actual_arglist
*arg
;
2905 int i
, j
, nargs
, *nlabels
, nlabelless
;
2906 bool a1
= false, a2
= false;
2908 if (args
== NULL
|| args
->next
== NULL
)
2910 gfc_error ("Intrinsic %qs at %L must have at least two arguments",
2911 gfc_current_intrinsic
, gfc_current_intrinsic_where
);
2918 if (!args
->next
->name
)
2922 for (arg
= args
; arg
; arg
= arg
->next
)
2929 /* Note: Having a keywordless argument after an "arg=" is checked before. */
2931 nlabels
= XALLOCAVEC (int, nargs
);
2932 for (arg
= args
, i
= 0; arg
; arg
= arg
->next
, i
++)
2938 if (arg
->name
[0] != 'a' || arg
->name
[1] < '1' || arg
->name
[1] > '9')
2940 n
= strtol (&arg
->name
[1], &endp
, 10);
2941 if (endp
[0] != '\0')
2945 if (n
<= nlabelless
)
2958 gfc_error ("Missing %qs argument to the %s intrinsic at %L",
2959 !a1
? "a1" : "a2", gfc_current_intrinsic
,
2960 gfc_current_intrinsic_where
);
2964 /* Check for duplicates. */
2965 for (i
= 0; i
< nargs
; i
++)
2966 for (j
= i
+ 1; j
< nargs
; j
++)
2967 if (nlabels
[i
] == nlabels
[j
])
2973 gfc_error ("Duplicate argument %qs at %L to intrinsic %s", arg
->name
,
2974 &arg
->expr
->where
, gfc_current_intrinsic
);
2978 gfc_error ("Unknown argument %qs at %L to intrinsic %s", arg
->name
,
2979 &arg
->expr
->where
, gfc_current_intrinsic
);
2985 check_rest (bt type
, int kind
, gfc_actual_arglist
*arglist
)
2987 gfc_actual_arglist
*arg
, *tmp
;
2991 if (!min_max_args (arglist
))
2994 for (arg
= arglist
, n
=1; arg
; arg
= arg
->next
, n
++)
2997 if (x
->ts
.type
!= type
|| x
->ts
.kind
!= kind
)
2999 if (x
->ts
.type
== type
)
3001 if (!gfc_notify_std (GFC_STD_GNU
, "Different type "
3002 "kinds at %L", &x
->where
))
3007 gfc_error ("%<a%d%> argument of %qs intrinsic at %L must be "
3008 "%s(%d)", n
, gfc_current_intrinsic
, &x
->where
,
3009 gfc_basic_typename (type
), kind
);
3014 for (tmp
= arglist
, m
=1; tmp
!= arg
; tmp
= tmp
->next
, m
++)
3015 if (!gfc_check_conformance (tmp
->expr
, x
,
3016 "arguments 'a%d' and 'a%d' for "
3017 "intrinsic '%s'", m
, n
,
3018 gfc_current_intrinsic
))
3027 gfc_check_min_max (gfc_actual_arglist
*arg
)
3031 if (!min_max_args (arg
))
3036 if (x
->ts
.type
== BT_CHARACTER
)
3038 if (!gfc_notify_std (GFC_STD_F2003
, "%qs intrinsic "
3039 "with CHARACTER argument at %L",
3040 gfc_current_intrinsic
, &x
->where
))
3043 else if (x
->ts
.type
!= BT_INTEGER
&& x
->ts
.type
!= BT_REAL
)
3045 gfc_error ("%<a1%> argument of %qs intrinsic at %L must be INTEGER, "
3046 "REAL or CHARACTER", gfc_current_intrinsic
, &x
->where
);
3050 return check_rest (x
->ts
.type
, x
->ts
.kind
, arg
);
3055 gfc_check_min_max_integer (gfc_actual_arglist
*arg
)
3057 return check_rest (BT_INTEGER
, gfc_default_integer_kind
, arg
);
3062 gfc_check_min_max_real (gfc_actual_arglist
*arg
)
3064 return check_rest (BT_REAL
, gfc_default_real_kind
, arg
);
3069 gfc_check_min_max_double (gfc_actual_arglist
*arg
)
3071 return check_rest (BT_REAL
, gfc_default_double_kind
, arg
);
3075 /* End of min/max family. */
3078 gfc_check_malloc (gfc_expr
*size
)
3080 if (!type_check (size
, 0, BT_INTEGER
))
3083 if (!scalar_check (size
, 0))
3091 gfc_check_matmul (gfc_expr
*matrix_a
, gfc_expr
*matrix_b
)
3093 if ((matrix_a
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_a
->ts
))
3095 gfc_error ("%qs argument of %qs intrinsic at %L must be numeric "
3096 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
3097 gfc_current_intrinsic
, &matrix_a
->where
);
3101 if ((matrix_b
->ts
.type
!= BT_LOGICAL
) && !gfc_numeric_ts (&matrix_b
->ts
))
3103 gfc_error ("%qs argument of %qs intrinsic at %L must be numeric "
3104 "or LOGICAL", gfc_current_intrinsic_arg
[1]->name
,
3105 gfc_current_intrinsic
, &matrix_b
->where
);
3109 if ((matrix_a
->ts
.type
== BT_LOGICAL
&& gfc_numeric_ts (&matrix_b
->ts
))
3110 || (gfc_numeric_ts (&matrix_a
->ts
) && matrix_b
->ts
.type
== BT_LOGICAL
))
3112 gfc_error ("Argument types of %qs intrinsic at %L must match (%s/%s)",
3113 gfc_current_intrinsic
, &matrix_a
->where
,
3114 gfc_typename(&matrix_a
->ts
), gfc_typename(&matrix_b
->ts
));
3118 switch (matrix_a
->rank
)
3121 if (!rank_check (matrix_b
, 1, 2))
3123 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
3124 if (!identical_dimen_shape (matrix_a
, 0, matrix_b
, 0))
3126 gfc_error ("Different shape on dimension 1 for arguments %qs "
3127 "and %qs at %L for intrinsic matmul",
3128 gfc_current_intrinsic_arg
[0]->name
,
3129 gfc_current_intrinsic_arg
[1]->name
, &matrix_a
->where
);
3135 if (matrix_b
->rank
!= 2)
3137 if (!rank_check (matrix_b
, 1, 1))
3140 /* matrix_b has rank 1 or 2 here. Common check for the cases
3141 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
3142 - matrix_a has shape (n,m) and matrix_b has shape (m). */
3143 if (!identical_dimen_shape (matrix_a
, 1, matrix_b
, 0))
3145 gfc_error ("Different shape on dimension 2 for argument %qs and "
3146 "dimension 1 for argument %qs at %L for intrinsic "
3147 "matmul", gfc_current_intrinsic_arg
[0]->name
,
3148 gfc_current_intrinsic_arg
[1]->name
, &matrix_a
->where
);
3154 gfc_error ("%qs argument of %qs intrinsic at %L must be of rank "
3155 "1 or 2", gfc_current_intrinsic_arg
[0]->name
,
3156 gfc_current_intrinsic
, &matrix_a
->where
);
3164 /* Whoever came up with this interface was probably on something.
3165 The possibilities for the occupation of the second and third
3172 NULL MASK minloc(array, mask=m)
3175 I.e. in the case of minloc(array,mask), mask will be in the second
3176 position of the argument list and we'll have to fix that up. */
3179 gfc_check_minloc_maxloc (gfc_actual_arglist
*ap
)
3181 gfc_expr
*a
, *m
, *d
;
3184 if (!int_or_real_check (a
, 0) || !array_check (a
, 0))
3188 m
= ap
->next
->next
->expr
;
3190 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
3191 && ap
->next
->name
== NULL
)
3195 ap
->next
->expr
= NULL
;
3196 ap
->next
->next
->expr
= m
;
3199 if (!dim_check (d
, 1, false))
3202 if (!dim_rank_check (d
, a
, 0))
3205 if (m
!= NULL
&& !type_check (m
, 2, BT_LOGICAL
))
3209 && !gfc_check_conformance (a
, m
,
3210 "arguments '%s' and '%s' for intrinsic %s",
3211 gfc_current_intrinsic_arg
[0]->name
,
3212 gfc_current_intrinsic_arg
[2]->name
,
3213 gfc_current_intrinsic
))
3220 /* Similar to minloc/maxloc, the argument list might need to be
3221 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
3222 difference is that MINLOC/MAXLOC take an additional KIND argument.
3223 The possibilities are:
3229 NULL MASK minval(array, mask=m)
3232 I.e. in the case of minval(array,mask), mask will be in the second
3233 position of the argument list and we'll have to fix that up. */
3236 check_reduction (gfc_actual_arglist
*ap
)
3238 gfc_expr
*a
, *m
, *d
;
3242 m
= ap
->next
->next
->expr
;
3244 if (m
== NULL
&& d
!= NULL
&& d
->ts
.type
== BT_LOGICAL
3245 && ap
->next
->name
== NULL
)
3249 ap
->next
->expr
= NULL
;
3250 ap
->next
->next
->expr
= m
;
3253 if (!dim_check (d
, 1, false))
3256 if (!dim_rank_check (d
, a
, 0))
3259 if (m
!= NULL
&& !type_check (m
, 2, BT_LOGICAL
))
3263 && !gfc_check_conformance (a
, m
,
3264 "arguments '%s' and '%s' for intrinsic %s",
3265 gfc_current_intrinsic_arg
[0]->name
,
3266 gfc_current_intrinsic_arg
[2]->name
,
3267 gfc_current_intrinsic
))
3275 gfc_check_minval_maxval (gfc_actual_arglist
*ap
)
3277 if (!int_or_real_check (ap
->expr
, 0)
3278 || !array_check (ap
->expr
, 0))
3281 return check_reduction (ap
);
3286 gfc_check_product_sum (gfc_actual_arglist
*ap
)
3288 if (!numeric_check (ap
->expr
, 0)
3289 || !array_check (ap
->expr
, 0))
3292 return check_reduction (ap
);
3296 /* For IANY, IALL and IPARITY. */
3299 gfc_check_mask (gfc_expr
*i
, gfc_expr
*kind
)
3303 if (!type_check (i
, 0, BT_INTEGER
))
3306 if (!nonnegative_check ("I", i
))
3309 if (!kind_check (kind
, 1, BT_INTEGER
))
3313 gfc_extract_int (kind
, &k
);
3315 k
= gfc_default_integer_kind
;
3317 if (!less_than_bitsizekind ("I", i
, k
))
3325 gfc_check_transf_bit_intrins (gfc_actual_arglist
*ap
)
3327 if (ap
->expr
->ts
.type
!= BT_INTEGER
)
3329 gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER",
3330 gfc_current_intrinsic_arg
[0]->name
,
3331 gfc_current_intrinsic
, &ap
->expr
->where
);
3335 if (!array_check (ap
->expr
, 0))
3338 return check_reduction (ap
);
3343 gfc_check_merge (gfc_expr
*tsource
, gfc_expr
*fsource
, gfc_expr
*mask
)
3345 if (!same_type_check (tsource
, 0, fsource
, 1))
3348 if (!type_check (mask
, 2, BT_LOGICAL
))
3351 if (tsource
->ts
.type
== BT_CHARACTER
)
3352 return gfc_check_same_strlen (tsource
, fsource
, "MERGE intrinsic");
3359 gfc_check_merge_bits (gfc_expr
*i
, gfc_expr
*j
, gfc_expr
*mask
)
3361 if (!type_check (i
, 0, BT_INTEGER
))
3364 if (!type_check (j
, 1, BT_INTEGER
))
3367 if (!type_check (mask
, 2, BT_INTEGER
))
3370 if (!same_type_check (i
, 0, j
, 1))
3373 if (!same_type_check (i
, 0, mask
, 2))
3381 gfc_check_move_alloc (gfc_expr
*from
, gfc_expr
*to
)
3383 if (!variable_check (from
, 0, false))
3385 if (!allocatable_check (from
, 0))
3387 if (gfc_is_coindexed (from
))
3389 gfc_error ("The FROM argument to MOVE_ALLOC at %L shall not be "
3390 "coindexed", &from
->where
);
3394 if (!variable_check (to
, 1, false))
3396 if (!allocatable_check (to
, 1))
3398 if (gfc_is_coindexed (to
))
3400 gfc_error ("The TO argument to MOVE_ALLOC at %L shall not be "
3401 "coindexed", &to
->where
);
3405 if (from
->ts
.type
== BT_CLASS
&& to
->ts
.type
== BT_DERIVED
)
3407 gfc_error ("The TO arguments in MOVE_ALLOC at %L must be "
3408 "polymorphic if FROM is polymorphic",
3413 if (!same_type_check (to
, 1, from
, 0))
3416 if (to
->rank
!= from
->rank
)
3418 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
3419 "must have the same rank %d/%d", &to
->where
, from
->rank
,
3424 /* IR F08/0040; cf. 12-006A. */
3425 if (gfc_get_corank (to
) != gfc_get_corank (from
))
3427 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
3428 "must have the same corank %d/%d", &to
->where
,
3429 gfc_get_corank (from
), gfc_get_corank (to
));
3433 /* This is based losely on F2003 12.4.1.7. It is intended to prevent
3434 the likes of to = sym->cmp1->cmp2 and from = sym->cmp1, where cmp1
3435 and cmp2 are allocatable. After the allocation is transferred,
3436 the 'to' chain is broken by the nullification of the 'from'. A bit
3437 of reflection reveals that this can only occur for derived types
3438 with recursive allocatable components. */
3439 if (to
->expr_type
== EXPR_VARIABLE
&& from
->expr_type
== EXPR_VARIABLE
3440 && !strcmp (to
->symtree
->n
.sym
->name
, from
->symtree
->n
.sym
->name
))
3442 gfc_ref
*to_ref
, *from_ref
;
3444 from_ref
= from
->ref
;
3445 bool aliasing
= true;
3447 for (; from_ref
&& to_ref
;
3448 from_ref
= from_ref
->next
, to_ref
= to_ref
->next
)
3450 if (to_ref
->type
!= from
->ref
->type
)
3452 else if (to_ref
->type
== REF_ARRAY
3453 && to_ref
->u
.ar
.type
!= AR_FULL
3454 && from_ref
->u
.ar
.type
!= AR_FULL
)
3455 /* Play safe; assume sections and elements are different. */
3457 else if (to_ref
->type
== REF_COMPONENT
3458 && to_ref
->u
.c
.component
!= from_ref
->u
.c
.component
)
3467 gfc_error ("The FROM and TO arguments at %L violate aliasing "
3468 "restrictions (F2003 12.4.1.7)", &to
->where
);
3473 /* CLASS arguments: Make sure the vtab of from is present. */
3474 if (to
->ts
.type
== BT_CLASS
&& !UNLIMITED_POLY (from
))
3475 gfc_find_vtab (&from
->ts
);
3482 gfc_check_nearest (gfc_expr
*x
, gfc_expr
*s
)
3484 if (!type_check (x
, 0, BT_REAL
))
3487 if (!type_check (s
, 1, BT_REAL
))
3490 if (s
->expr_type
== EXPR_CONSTANT
)
3492 if (mpfr_sgn (s
->value
.real
) == 0)
3494 gfc_error ("Argument %<S%> of NEAREST at %L shall not be zero",
3505 gfc_check_new_line (gfc_expr
*a
)
3507 if (!type_check (a
, 0, BT_CHARACTER
))
3515 gfc_check_norm2 (gfc_expr
*array
, gfc_expr
*dim
)
3517 if (!type_check (array
, 0, BT_REAL
))
3520 if (!array_check (array
, 0))
3523 if (!dim_rank_check (dim
, array
, false))
3530 gfc_check_null (gfc_expr
*mold
)
3532 symbol_attribute attr
;
3537 if (!variable_check (mold
, 0, true))
3540 attr
= gfc_variable_attr (mold
, NULL
);
3542 if (!attr
.pointer
&& !attr
.proc_pointer
&& !attr
.allocatable
)
3544 gfc_error ("%qs argument of %qs intrinsic at %L must be a POINTER, "
3545 "ALLOCATABLE or procedure pointer",
3546 gfc_current_intrinsic_arg
[0]->name
,
3547 gfc_current_intrinsic
, &mold
->where
);
3551 if (attr
.allocatable
3552 && !gfc_notify_std (GFC_STD_F2003
, "NULL intrinsic with "
3553 "allocatable MOLD at %L", &mold
->where
))
3557 if (gfc_is_coindexed (mold
))
3559 gfc_error ("%qs argument of %qs intrinsic at %L shall not be "
3560 "coindexed", gfc_current_intrinsic_arg
[0]->name
,
3561 gfc_current_intrinsic
, &mold
->where
);
3570 gfc_check_pack (gfc_expr
*array
, gfc_expr
*mask
, gfc_expr
*vector
)
3572 if (!array_check (array
, 0))
3575 if (!type_check (mask
, 1, BT_LOGICAL
))
3578 if (!gfc_check_conformance (array
, mask
,
3579 "arguments '%s' and '%s' for intrinsic '%s'",
3580 gfc_current_intrinsic_arg
[0]->name
,
3581 gfc_current_intrinsic_arg
[1]->name
,
3582 gfc_current_intrinsic
))
3587 mpz_t array_size
, vector_size
;
3588 bool have_array_size
, have_vector_size
;
3590 if (!same_type_check (array
, 0, vector
, 2))
3593 if (!rank_check (vector
, 2, 1))
3596 /* VECTOR requires at least as many elements as MASK
3597 has .TRUE. values. */
3598 have_array_size
= gfc_array_size(array
, &array_size
);
3599 have_vector_size
= gfc_array_size(vector
, &vector_size
);
3601 if (have_vector_size
3602 && (mask
->expr_type
== EXPR_ARRAY
3603 || (mask
->expr_type
== EXPR_CONSTANT
3604 && have_array_size
)))
3606 int mask_true_values
= 0;
3608 if (mask
->expr_type
== EXPR_ARRAY
)
3610 gfc_constructor
*mask_ctor
;
3611 mask_ctor
= gfc_constructor_first (mask
->value
.constructor
);
3614 if (mask_ctor
->expr
->expr_type
!= EXPR_CONSTANT
)
3616 mask_true_values
= 0;
3620 if (mask_ctor
->expr
->value
.logical
)
3623 mask_ctor
= gfc_constructor_next (mask_ctor
);
3626 else if (mask
->expr_type
== EXPR_CONSTANT
&& mask
->value
.logical
)
3627 mask_true_values
= mpz_get_si (array_size
);
3629 if (mpz_get_si (vector_size
) < mask_true_values
)
3631 gfc_error ("%qs argument of %qs intrinsic at %L must "
3632 "provide at least as many elements as there "
3633 "are .TRUE. values in %qs (%ld/%d)",
3634 gfc_current_intrinsic_arg
[2]->name
,
3635 gfc_current_intrinsic
, &vector
->where
,
3636 gfc_current_intrinsic_arg
[1]->name
,
3637 mpz_get_si (vector_size
), mask_true_values
);
3642 if (have_array_size
)
3643 mpz_clear (array_size
);
3644 if (have_vector_size
)
3645 mpz_clear (vector_size
);
3653 gfc_check_parity (gfc_expr
*mask
, gfc_expr
*dim
)
3655 if (!type_check (mask
, 0, BT_LOGICAL
))
3658 if (!array_check (mask
, 0))
3661 if (!dim_rank_check (dim
, mask
, false))
3669 gfc_check_precision (gfc_expr
*x
)
3671 if (!real_or_complex_check (x
, 0))
3679 gfc_check_present (gfc_expr
*a
)
3683 if (!variable_check (a
, 0, true))
3686 sym
= a
->symtree
->n
.sym
;
3687 if (!sym
->attr
.dummy
)
3689 gfc_error ("%qs argument of %qs intrinsic at %L must be of a "
3690 "dummy variable", gfc_current_intrinsic_arg
[0]->name
,
3691 gfc_current_intrinsic
, &a
->where
);
3695 if (!sym
->attr
.optional
)
3697 gfc_error ("%qs argument of %qs intrinsic at %L must be of "
3698 "an OPTIONAL dummy variable",
3699 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
3704 /* 13.14.82 PRESENT(A)
3706 Argument. A shall be the name of an optional dummy argument that is
3707 accessible in the subprogram in which the PRESENT function reference
3711 && !(a
->ref
->next
== NULL
&& a
->ref
->type
== REF_ARRAY
3712 && (a
->ref
->u
.ar
.type
== AR_FULL
3713 || (a
->ref
->u
.ar
.type
== AR_ELEMENT
3714 && a
->ref
->u
.ar
.as
->rank
== 0))))
3716 gfc_error ("%qs argument of %qs intrinsic at %L must not be a "
3717 "subobject of %qs", gfc_current_intrinsic_arg
[0]->name
,
3718 gfc_current_intrinsic
, &a
->where
, sym
->name
);
3727 gfc_check_radix (gfc_expr
*x
)
3729 if (!int_or_real_check (x
, 0))
3737 gfc_check_range (gfc_expr
*x
)
3739 if (!numeric_check (x
, 0))
3747 gfc_check_rank (gfc_expr
*a
)
3749 /* Any data object is allowed; a "data object" is a "constant (4.1.3),
3750 variable (6), or subobject of a constant (2.4.3.2.3)" (F2008, 1.3.45). */
3752 bool is_variable
= true;
3754 /* Functions returning pointers are regarded as variable, cf. F2008, R602. */
3755 if (a
->expr_type
== EXPR_FUNCTION
)
3756 is_variable
= a
->value
.function
.esym
3757 ? a
->value
.function
.esym
->result
->attr
.pointer
3758 : a
->symtree
->n
.sym
->result
->attr
.pointer
;
3760 if (a
->expr_type
== EXPR_OP
|| a
->expr_type
== EXPR_NULL
3761 || a
->expr_type
== EXPR_COMPCALL
|| a
->expr_type
== EXPR_PPC
3764 gfc_error ("The argument of the RANK intrinsic at %L must be a data "
3765 "object", &a
->where
);
3773 /* real, float, sngl. */
3775 gfc_check_real (gfc_expr
*a
, gfc_expr
*kind
)
3777 if (!numeric_check (a
, 0))
3780 if (!kind_check (kind
, 1, BT_REAL
))
3788 gfc_check_rename (gfc_expr
*path1
, gfc_expr
*path2
)
3790 if (!type_check (path1
, 0, BT_CHARACTER
))
3792 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
3795 if (!type_check (path2
, 1, BT_CHARACTER
))
3797 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
3805 gfc_check_rename_sub (gfc_expr
*path1
, gfc_expr
*path2
, gfc_expr
*status
)
3807 if (!type_check (path1
, 0, BT_CHARACTER
))
3809 if (!kind_value_check (path1
, 0, gfc_default_character_kind
))
3812 if (!type_check (path2
, 1, BT_CHARACTER
))
3814 if (!kind_value_check (path2
, 1, gfc_default_character_kind
))
3820 if (!type_check (status
, 2, BT_INTEGER
))
3823 if (!scalar_check (status
, 2))
3831 gfc_check_repeat (gfc_expr
*x
, gfc_expr
*y
)
3833 if (!type_check (x
, 0, BT_CHARACTER
))
3836 if (!scalar_check (x
, 0))
3839 if (!type_check (y
, 0, BT_INTEGER
))
3842 if (!scalar_check (y
, 1))
3850 gfc_check_reshape (gfc_expr
*source
, gfc_expr
*shape
,
3851 gfc_expr
*pad
, gfc_expr
*order
)
3857 if (!array_check (source
, 0))
3860 if (!rank_check (shape
, 1, 1))
3863 if (!type_check (shape
, 1, BT_INTEGER
))
3866 if (!gfc_array_size (shape
, &size
))
3868 gfc_error ("%<shape%> argument of %<reshape%> intrinsic at %L must be an "
3869 "array of constant size", &shape
->where
);
3873 shape_size
= mpz_get_ui (size
);
3876 if (shape_size
<= 0)
3878 gfc_error ("%qs argument of %qs intrinsic at %L is empty",
3879 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
3883 else if (shape_size
> GFC_MAX_DIMENSIONS
)
3885 gfc_error ("%<shape%> argument of %<reshape%> intrinsic at %L has more "
3886 "than %d elements", &shape
->where
, GFC_MAX_DIMENSIONS
);
3889 else if (shape
->expr_type
== EXPR_ARRAY
&& gfc_is_constant_expr (shape
))
3893 for (i
= 0; i
< shape_size
; ++i
)
3895 e
= gfc_constructor_lookup_expr (shape
->value
.constructor
, i
);
3896 if (e
->expr_type
!= EXPR_CONSTANT
)
3899 gfc_extract_int (e
, &extent
);
3902 gfc_error ("%qs argument of %qs intrinsic at %L has "
3903 "negative element (%d)",
3904 gfc_current_intrinsic_arg
[1]->name
,
3905 gfc_current_intrinsic
, &e
->where
, extent
);
3910 else if (shape
->expr_type
== EXPR_VARIABLE
&& shape
->ref
3911 && shape
->ref
->u
.ar
.type
== AR_FULL
&& shape
->ref
->u
.ar
.dimen
== 1
3912 && shape
->ref
->u
.ar
.as
3913 && shape
->ref
->u
.ar
.as
->lower
[0]->expr_type
== EXPR_CONSTANT
3914 && shape
->ref
->u
.ar
.as
->lower
[0]->ts
.type
== BT_INTEGER
3915 && shape
->ref
->u
.ar
.as
->upper
[0]->expr_type
== EXPR_CONSTANT
3916 && shape
->ref
->u
.ar
.as
->upper
[0]->ts
.type
== BT_INTEGER
3917 && shape
->symtree
->n
.sym
->attr
.flavor
== FL_PARAMETER
)
3922 v
= shape
->symtree
->n
.sym
->value
;
3924 for (i
= 0; i
< shape_size
; i
++)
3926 e
= gfc_constructor_lookup_expr (v
->value
.constructor
, i
);
3930 gfc_extract_int (e
, &extent
);
3934 gfc_error ("Element %d of actual argument of RESHAPE at %L "
3935 "cannot be negative", i
+ 1, &shape
->where
);
3943 if (!same_type_check (source
, 0, pad
, 2))
3946 if (!array_check (pad
, 2))
3952 if (!array_check (order
, 3))
3955 if (!type_check (order
, 3, BT_INTEGER
))
3958 if (order
->expr_type
== EXPR_ARRAY
&& gfc_is_constant_expr (order
))
3960 int i
, order_size
, dim
, perm
[GFC_MAX_DIMENSIONS
];
3963 for (i
= 0; i
< GFC_MAX_DIMENSIONS
; ++i
)
3966 gfc_array_size (order
, &size
);
3967 order_size
= mpz_get_ui (size
);
3970 if (order_size
!= shape_size
)
3972 gfc_error ("%qs argument of %qs intrinsic at %L "
3973 "has wrong number of elements (%d/%d)",
3974 gfc_current_intrinsic_arg
[3]->name
,
3975 gfc_current_intrinsic
, &order
->where
,
3976 order_size
, shape_size
);
3980 for (i
= 1; i
<= order_size
; ++i
)
3982 e
= gfc_constructor_lookup_expr (order
->value
.constructor
, i
-1);
3983 if (e
->expr_type
!= EXPR_CONSTANT
)
3986 gfc_extract_int (e
, &dim
);
3988 if (dim
< 1 || dim
> order_size
)
3990 gfc_error ("%qs argument of %qs intrinsic at %L "
3991 "has out-of-range dimension (%d)",
3992 gfc_current_intrinsic_arg
[3]->name
,
3993 gfc_current_intrinsic
, &e
->where
, dim
);
3997 if (perm
[dim
-1] != 0)
3999 gfc_error ("%qs argument of %qs intrinsic at %L has "
4000 "invalid permutation of dimensions (dimension "
4002 gfc_current_intrinsic_arg
[3]->name
,
4003 gfc_current_intrinsic
, &e
->where
, dim
);
4012 if (pad
== NULL
&& shape
->expr_type
== EXPR_ARRAY
4013 && gfc_is_constant_expr (shape
)
4014 && !(source
->expr_type
== EXPR_VARIABLE
&& source
->symtree
->n
.sym
->as
4015 && source
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
))
4017 /* Check the match in size between source and destination. */
4018 if (gfc_array_size (source
, &nelems
))
4024 mpz_init_set_ui (size
, 1);
4025 for (c
= gfc_constructor_first (shape
->value
.constructor
);
4026 c
; c
= gfc_constructor_next (c
))
4027 mpz_mul (size
, size
, c
->expr
->value
.integer
);
4029 test
= mpz_cmp (nelems
, size
) < 0 && mpz_cmp_ui (size
, 0) > 0;
4035 gfc_error ("Without padding, there are not enough elements "
4036 "in the intrinsic RESHAPE source at %L to match "
4037 "the shape", &source
->where
);
4048 gfc_check_same_type_as (gfc_expr
*a
, gfc_expr
*b
)
4050 if (a
->ts
.type
!= BT_DERIVED
&& a
->ts
.type
!= BT_CLASS
)
4052 gfc_error ("%qs argument of %qs intrinsic at %L "
4053 "cannot be of type %s",
4054 gfc_current_intrinsic_arg
[0]->name
,
4055 gfc_current_intrinsic
,
4056 &a
->where
, gfc_typename (&a
->ts
));
4060 if (!(gfc_type_is_extensible (a
->ts
.u
.derived
) || UNLIMITED_POLY (a
)))
4062 gfc_error ("%qs argument of %qs intrinsic at %L "
4063 "must be of an extensible type",
4064 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4069 if (b
->ts
.type
!= BT_DERIVED
&& b
->ts
.type
!= BT_CLASS
)
4071 gfc_error ("%qs argument of %qs intrinsic at %L "
4072 "cannot be of type %s",
4073 gfc_current_intrinsic_arg
[0]->name
,
4074 gfc_current_intrinsic
,
4075 &b
->where
, gfc_typename (&b
->ts
));
4079 if (!(gfc_type_is_extensible (b
->ts
.u
.derived
) || UNLIMITED_POLY (b
)))
4081 gfc_error ("%qs argument of %qs intrinsic at %L "
4082 "must be of an extensible type",
4083 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
4093 gfc_check_scale (gfc_expr
*x
, gfc_expr
*i
)
4095 if (!type_check (x
, 0, BT_REAL
))
4098 if (!type_check (i
, 1, BT_INTEGER
))
4106 gfc_check_scan (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
4108 if (!type_check (x
, 0, BT_CHARACTER
))
4111 if (!type_check (y
, 1, BT_CHARACTER
))
4114 if (z
!= NULL
&& !type_check (z
, 2, BT_LOGICAL
))
4117 if (!kind_check (kind
, 3, BT_INTEGER
))
4119 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "%qs intrinsic "
4120 "with KIND argument at %L",
4121 gfc_current_intrinsic
, &kind
->where
))
4124 if (!same_type_check (x
, 0, y
, 1))
4132 gfc_check_secnds (gfc_expr
*r
)
4134 if (!type_check (r
, 0, BT_REAL
))
4137 if (!kind_value_check (r
, 0, 4))
4140 if (!scalar_check (r
, 0))
4148 gfc_check_selected_char_kind (gfc_expr
*name
)
4150 if (!type_check (name
, 0, BT_CHARACTER
))
4153 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
4156 if (!scalar_check (name
, 0))
4164 gfc_check_selected_int_kind (gfc_expr
*r
)
4166 if (!type_check (r
, 0, BT_INTEGER
))
4169 if (!scalar_check (r
, 0))
4177 gfc_check_selected_real_kind (gfc_expr
*p
, gfc_expr
*r
, gfc_expr
*radix
)
4179 if (p
== NULL
&& r
== NULL
4180 && !gfc_notify_std (GFC_STD_F2008
, "SELECTED_REAL_KIND with"
4181 " neither %<P%> nor %<R%> argument at %L",
4182 gfc_current_intrinsic_where
))
4187 if (!type_check (p
, 0, BT_INTEGER
))
4190 if (!scalar_check (p
, 0))
4196 if (!type_check (r
, 1, BT_INTEGER
))
4199 if (!scalar_check (r
, 1))
4205 if (!type_check (radix
, 1, BT_INTEGER
))
4208 if (!scalar_check (radix
, 1))
4211 if (!gfc_notify_std (GFC_STD_F2008
, "%qs intrinsic with "
4212 "RADIX argument at %L", gfc_current_intrinsic
,
4222 gfc_check_set_exponent (gfc_expr
*x
, gfc_expr
*i
)
4224 if (!type_check (x
, 0, BT_REAL
))
4227 if (!type_check (i
, 1, BT_INTEGER
))
4235 gfc_check_shape (gfc_expr
*source
, gfc_expr
*kind
)
4239 if (source
->rank
== 0 || source
->expr_type
!= EXPR_VARIABLE
)
4242 ar
= gfc_find_array_ref (source
);
4244 if (ar
->as
&& ar
->as
->type
== AS_ASSUMED_SIZE
&& ar
->type
== AR_FULL
)
4246 gfc_error ("%<source%> argument of %<shape%> intrinsic at %L must not be "
4247 "an assumed size array", &source
->where
);
4251 if (!kind_check (kind
, 1, BT_INTEGER
))
4253 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "%qs intrinsic "
4254 "with KIND argument at %L",
4255 gfc_current_intrinsic
, &kind
->where
))
4263 gfc_check_shift (gfc_expr
*i
, gfc_expr
*shift
)
4265 if (!type_check (i
, 0, BT_INTEGER
))
4268 if (!type_check (shift
, 0, BT_INTEGER
))
4271 if (!nonnegative_check ("SHIFT", shift
))
4274 if (!less_than_bitsize1 ("I", i
, "SHIFT", shift
, true))
4282 gfc_check_sign (gfc_expr
*a
, gfc_expr
*b
)
4284 if (!int_or_real_check (a
, 0))
4287 if (!same_type_check (a
, 0, b
, 1))
4295 gfc_check_size (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
4297 if (!array_check (array
, 0))
4300 if (!dim_check (dim
, 1, true))
4303 if (!dim_rank_check (dim
, array
, 0))
4306 if (!kind_check (kind
, 2, BT_INTEGER
))
4308 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "%qs intrinsic "
4309 "with KIND argument at %L",
4310 gfc_current_intrinsic
, &kind
->where
))
4319 gfc_check_sizeof (gfc_expr
*arg
)
4321 if (arg
->ts
.type
== BT_PROCEDURE
)
4323 gfc_error ("%qs argument of %qs intrinsic at %L shall not be a procedure",
4324 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4329 /* TYPE(*) is acceptable if and only if it uses an array descriptor. */
4330 if (arg
->ts
.type
== BT_ASSUMED
4331 && (arg
->symtree
->n
.sym
->as
== NULL
4332 || (arg
->symtree
->n
.sym
->as
->type
!= AS_ASSUMED_SHAPE
4333 && arg
->symtree
->n
.sym
->as
->type
!= AS_DEFERRED
4334 && arg
->symtree
->n
.sym
->as
->type
!= AS_ASSUMED_RANK
)))
4336 gfc_error ("%qs argument of %qs intrinsic at %L shall not be TYPE(*)",
4337 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4342 if (arg
->rank
&& arg
->expr_type
== EXPR_VARIABLE
4343 && arg
->symtree
->n
.sym
->as
!= NULL
4344 && arg
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
&& arg
->ref
4345 && arg
->ref
->type
== REF_ARRAY
&& arg
->ref
->u
.ar
.type
== AR_FULL
)
4347 gfc_error ("%qs argument of %qs intrinsic at %L shall not be an "
4348 "assumed-size array", gfc_current_intrinsic_arg
[0]->name
,
4349 gfc_current_intrinsic
, &arg
->where
);
4357 /* Check whether an expression is interoperable. When returning false,
4358 msg is set to a string telling why the expression is not interoperable,
4359 otherwise, it is set to NULL. The msg string can be used in diagnostics.
4360 If c_loc is true, character with len > 1 are allowed (cf. Fortran
4361 2003corr5); additionally, assumed-shape/assumed-rank/deferred-shape
4362 arrays are permitted. And if c_f_ptr is true, deferred-shape arrays
4366 is_c_interoperable (gfc_expr
*expr
, const char **msg
, bool c_loc
, bool c_f_ptr
)
4370 if (expr
->ts
.type
== BT_CLASS
)
4372 *msg
= "Expression is polymorphic";
4376 if (expr
->ts
.type
== BT_DERIVED
&& !expr
->ts
.u
.derived
->attr
.is_bind_c
4377 && !expr
->ts
.u
.derived
->ts
.is_iso_c
)
4379 *msg
= "Expression is a noninteroperable derived type";
4383 if (expr
->ts
.type
== BT_PROCEDURE
)
4385 *msg
= "Procedure unexpected as argument";
4389 if (gfc_notification_std (GFC_STD_GNU
) && expr
->ts
.type
== BT_LOGICAL
)
4392 for (i
= 0; gfc_logical_kinds
[i
].kind
; i
++)
4393 if (gfc_logical_kinds
[i
].kind
== expr
->ts
.kind
)
4395 *msg
= "Extension to use a non-C_Bool-kind LOGICAL";
4399 if (gfc_notification_std (GFC_STD_GNU
) && expr
->ts
.type
== BT_CHARACTER
4400 && expr
->ts
.kind
!= 1)
4402 *msg
= "Extension to use a non-C_CHAR-kind CHARACTER";
4406 if (expr
->ts
.type
== BT_CHARACTER
) {
4407 if (expr
->ts
.deferred
)
4409 /* TS 29113 allows deferred-length strings as dummy arguments,
4410 but it is not an interoperable type. */
4411 *msg
= "Expression shall not be a deferred-length string";
4415 if (expr
->ts
.u
.cl
&& expr
->ts
.u
.cl
->length
4416 && !gfc_simplify_expr (expr
->ts
.u
.cl
->length
, 0))
4417 gfc_internal_error ("is_c_interoperable(): gfc_simplify_expr failed");
4419 if (!c_loc
&& expr
->ts
.u
.cl
4420 && (!expr
->ts
.u
.cl
->length
4421 || expr
->ts
.u
.cl
->length
->expr_type
!= EXPR_CONSTANT
4422 || mpz_cmp_si (expr
->ts
.u
.cl
->length
->value
.integer
, 1) != 0))
4424 *msg
= "Type shall have a character length of 1";
4429 /* Note: The following checks are about interoperatable variables, Fortran
4430 15.3.5/15.3.6. In intrinsics like C_LOC or in procedure interface, more
4431 is allowed, e.g. assumed-shape arrays with TS 29113. */
4433 if (gfc_is_coarray (expr
))
4435 *msg
= "Coarrays are not interoperable";
4439 if (!c_loc
&& expr
->rank
> 0 && expr
->expr_type
!= EXPR_ARRAY
)
4441 gfc_array_ref
*ar
= gfc_find_array_ref (expr
);
4442 if (ar
->type
!= AR_FULL
)
4444 *msg
= "Only whole-arrays are interoperable";
4447 if (!c_f_ptr
&& ar
->as
->type
!= AS_EXPLICIT
4448 && ar
->as
->type
!= AS_ASSUMED_SIZE
)
4450 *msg
= "Only explicit-size and assumed-size arrays are interoperable";
4460 gfc_check_c_sizeof (gfc_expr
*arg
)
4464 if (!is_c_interoperable (arg
, &msg
, false, false))
4466 gfc_error ("%qs argument of %qs intrinsic at %L must be an "
4467 "interoperable data entity: %s",
4468 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4473 if (arg
->ts
.type
== BT_ASSUMED
)
4475 gfc_error ("%qs argument of %qs intrinsic at %L shall not be "
4477 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
4482 if (arg
->rank
&& arg
->expr_type
== EXPR_VARIABLE
4483 && arg
->symtree
->n
.sym
->as
!= NULL
4484 && arg
->symtree
->n
.sym
->as
->type
== AS_ASSUMED_SIZE
&& arg
->ref
4485 && arg
->ref
->type
== REF_ARRAY
&& arg
->ref
->u
.ar
.type
== AR_FULL
)
4487 gfc_error ("%qs argument of %qs intrinsic at %L shall not be an "
4488 "assumed-size array", gfc_current_intrinsic_arg
[0]->name
,
4489 gfc_current_intrinsic
, &arg
->where
);
4498 gfc_check_c_associated (gfc_expr
*c_ptr_1
, gfc_expr
*c_ptr_2
)
4500 if (c_ptr_1
->ts
.type
!= BT_DERIVED
4501 || c_ptr_1
->ts
.u
.derived
->from_intmod
!= INTMOD_ISO_C_BINDING
4502 || (c_ptr_1
->ts
.u
.derived
->intmod_sym_id
!= ISOCBINDING_PTR
4503 && c_ptr_1
->ts
.u
.derived
->intmod_sym_id
!= ISOCBINDING_FUNPTR
))
4505 gfc_error ("Argument C_PTR_1 at %L to C_ASSOCIATED shall have the "
4506 "type TYPE(C_PTR) or TYPE(C_FUNPTR)", &c_ptr_1
->where
);
4510 if (!scalar_check (c_ptr_1
, 0))
4514 && (c_ptr_2
->ts
.type
!= BT_DERIVED
4515 || c_ptr_2
->ts
.u
.derived
->from_intmod
!= INTMOD_ISO_C_BINDING
4516 || (c_ptr_1
->ts
.u
.derived
->intmod_sym_id
4517 != c_ptr_2
->ts
.u
.derived
->intmod_sym_id
)))
4519 gfc_error ("Argument C_PTR_2 at %L to C_ASSOCIATED shall have the "
4520 "same type as C_PTR_1: %s instead of %s", &c_ptr_1
->where
,
4521 gfc_typename (&c_ptr_1
->ts
),
4522 gfc_typename (&c_ptr_2
->ts
));
4526 if (c_ptr_2
&& !scalar_check (c_ptr_2
, 1))
4534 gfc_check_c_f_pointer (gfc_expr
*cptr
, gfc_expr
*fptr
, gfc_expr
*shape
)
4536 symbol_attribute attr
;
4539 if (cptr
->ts
.type
!= BT_DERIVED
4540 || cptr
->ts
.u
.derived
->from_intmod
!= INTMOD_ISO_C_BINDING
4541 || cptr
->ts
.u
.derived
->intmod_sym_id
!= ISOCBINDING_PTR
)
4543 gfc_error ("Argument CPTR at %L to C_F_POINTER shall have the "
4544 "type TYPE(C_PTR)", &cptr
->where
);
4548 if (!scalar_check (cptr
, 0))
4551 attr
= gfc_expr_attr (fptr
);
4555 gfc_error ("Argument FPTR at %L to C_F_POINTER must be a pointer",
4560 if (fptr
->ts
.type
== BT_CLASS
)
4562 gfc_error ("FPTR argument at %L to C_F_POINTER shall not be polymorphic",
4567 if (gfc_is_coindexed (fptr
))
4569 gfc_error ("Argument FPTR at %L to C_F_POINTER shall not be "
4570 "coindexed", &fptr
->where
);
4574 if (fptr
->rank
== 0 && shape
)
4576 gfc_error ("Unexpected SHAPE argument at %L to C_F_POINTER with scalar "
4577 "FPTR", &fptr
->where
);
4580 else if (fptr
->rank
&& !shape
)
4582 gfc_error ("Expected SHAPE argument to C_F_POINTER with array "
4583 "FPTR at %L", &fptr
->where
);
4587 if (shape
&& !rank_check (shape
, 2, 1))
4590 if (shape
&& !type_check (shape
, 2, BT_INTEGER
))
4596 if (gfc_array_size (shape
, &size
))
4598 if (mpz_cmp_ui (size
, fptr
->rank
) != 0)
4601 gfc_error ("SHAPE argument at %L to C_F_POINTER must have the same "
4602 "size as the RANK of FPTR", &shape
->where
);
4609 if (fptr
->ts
.type
== BT_CLASS
)
4611 gfc_error ("Polymorphic FPTR at %L to C_F_POINTER", &fptr
->where
);
4615 if (!is_c_interoperable (fptr
, &msg
, false, true))
4616 return gfc_notify_std (GFC_STD_F2008_TS
, "Noninteroperable array FPTR "
4617 "at %L to C_F_POINTER: %s", &fptr
->where
, msg
);
4624 gfc_check_c_f_procpointer (gfc_expr
*cptr
, gfc_expr
*fptr
)
4626 symbol_attribute attr
;
4628 if (cptr
->ts
.type
!= BT_DERIVED
4629 || cptr
->ts
.u
.derived
->from_intmod
!= INTMOD_ISO_C_BINDING
4630 || cptr
->ts
.u
.derived
->intmod_sym_id
!= ISOCBINDING_FUNPTR
)
4632 gfc_error ("Argument CPTR at %L to C_F_PROCPOINTER shall have the "
4633 "type TYPE(C_FUNPTR)", &cptr
->where
);
4637 if (!scalar_check (cptr
, 0))
4640 attr
= gfc_expr_attr (fptr
);
4642 if (!attr
.proc_pointer
)
4644 gfc_error ("Argument FPTR at %L to C_F_PROCPOINTER shall be a procedure "
4645 "pointer", &fptr
->where
);
4649 if (gfc_is_coindexed (fptr
))
4651 gfc_error ("Argument FPTR at %L to C_F_PROCPOINTER shall not be "
4652 "coindexed", &fptr
->where
);
4656 if (!attr
.is_bind_c
)
4657 return gfc_notify_std (GFC_STD_F2008_TS
, "Noninteroperable procedure "
4658 "pointer at %L to C_F_PROCPOINTER", &fptr
->where
);
4665 gfc_check_c_funloc (gfc_expr
*x
)
4667 symbol_attribute attr
;
4669 if (gfc_is_coindexed (x
))
4671 gfc_error ("Argument X at %L to C_FUNLOC shall not be "
4672 "coindexed", &x
->where
);
4676 attr
= gfc_expr_attr (x
);
4678 if (attr
.function
&& !attr
.proc_pointer
&& x
->expr_type
== EXPR_VARIABLE
4679 && x
->symtree
->n
.sym
== x
->symtree
->n
.sym
->result
)
4681 gfc_namespace
*ns
= gfc_current_ns
;
4683 for (ns
= gfc_current_ns
; ns
; ns
= ns
->parent
)
4684 if (x
->symtree
->n
.sym
== ns
->proc_name
)
4686 gfc_error ("Function result %qs at %L is invalid as X argument "
4687 "to C_FUNLOC", x
->symtree
->n
.sym
->name
, &x
->where
);
4692 if (attr
.flavor
!= FL_PROCEDURE
)
4694 gfc_error ("Argument X at %L to C_FUNLOC shall be a procedure "
4695 "or a procedure pointer", &x
->where
);
4699 if (!attr
.is_bind_c
)
4700 return gfc_notify_std (GFC_STD_F2008_TS
, "Noninteroperable procedure "
4701 "at %L to C_FUNLOC", &x
->where
);
4707 gfc_check_c_loc (gfc_expr
*x
)
4709 symbol_attribute attr
;
4712 if (gfc_is_coindexed (x
))
4714 gfc_error ("Argument X at %L to C_LOC shall not be coindexed", &x
->where
);
4718 if (x
->ts
.type
== BT_CLASS
)
4720 gfc_error ("X argument at %L to C_LOC shall not be polymorphic",
4725 attr
= gfc_expr_attr (x
);
4728 && (x
->expr_type
!= EXPR_VARIABLE
|| !attr
.target
4729 || attr
.flavor
== FL_PARAMETER
))
4731 gfc_error ("Argument X at %L to C_LOC shall have either "
4732 "the POINTER or the TARGET attribute", &x
->where
);
4736 if (x
->ts
.type
== BT_CHARACTER
4737 && gfc_var_strlen (x
) == 0)
4739 gfc_error ("Argument X at %L to C_LOC shall be not be a zero-sized "
4740 "string", &x
->where
);
4744 if (!is_c_interoperable (x
, &msg
, true, false))
4746 if (x
->ts
.type
== BT_CLASS
)
4748 gfc_error ("Argument at %L to C_LOC shall not be polymorphic",
4754 && !gfc_notify_std (GFC_STD_F2008_TS
,
4755 "Noninteroperable array at %L as"
4756 " argument to C_LOC: %s", &x
->where
, msg
))
4759 else if (x
->rank
> 0 && gfc_notification_std (GFC_STD_F2008
))
4761 gfc_array_ref
*ar
= gfc_find_array_ref (x
);
4763 if (ar
->as
->type
!= AS_EXPLICIT
&& ar
->as
->type
!= AS_ASSUMED_SIZE
4764 && !attr
.allocatable
4765 && !gfc_notify_std (GFC_STD_F2008
,
4766 "Array of interoperable type at %L "
4767 "to C_LOC which is nonallocatable and neither "
4768 "assumed size nor explicit size", &x
->where
))
4770 else if (ar
->type
!= AR_FULL
4771 && !gfc_notify_std (GFC_STD_F2008
, "Array section at %L "
4772 "to C_LOC", &x
->where
))
4781 gfc_check_sleep_sub (gfc_expr
*seconds
)
4783 if (!type_check (seconds
, 0, BT_INTEGER
))
4786 if (!scalar_check (seconds
, 0))
4793 gfc_check_sngl (gfc_expr
*a
)
4795 if (!type_check (a
, 0, BT_REAL
))
4798 if ((a
->ts
.kind
!= gfc_default_double_kind
)
4799 && !gfc_notify_std (GFC_STD_GNU
, "non double precision "
4800 "REAL argument to %s intrinsic at %L",
4801 gfc_current_intrinsic
, &a
->where
))
4808 gfc_check_spread (gfc_expr
*source
, gfc_expr
*dim
, gfc_expr
*ncopies
)
4810 if (source
->rank
>= GFC_MAX_DIMENSIONS
)
4812 gfc_error ("%qs argument of %qs intrinsic at %L must be less "
4813 "than rank %d", gfc_current_intrinsic_arg
[0]->name
,
4814 gfc_current_intrinsic
, &source
->where
, GFC_MAX_DIMENSIONS
);
4822 if (!dim_check (dim
, 1, false))
4825 /* dim_rank_check() does not apply here. */
4827 && dim
->expr_type
== EXPR_CONSTANT
4828 && (mpz_cmp_ui (dim
->value
.integer
, 1) < 0
4829 || mpz_cmp_ui (dim
->value
.integer
, source
->rank
+ 1) > 0))
4831 gfc_error ("%qs argument of %qs intrinsic at %L is not a valid "
4832 "dimension index", gfc_current_intrinsic_arg
[1]->name
,
4833 gfc_current_intrinsic
, &dim
->where
);
4837 if (!type_check (ncopies
, 2, BT_INTEGER
))
4840 if (!scalar_check (ncopies
, 2))
4847 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
4851 gfc_check_fgetputc_sub (gfc_expr
*unit
, gfc_expr
*c
, gfc_expr
*status
)
4853 if (!type_check (unit
, 0, BT_INTEGER
))
4856 if (!scalar_check (unit
, 0))
4859 if (!type_check (c
, 1, BT_CHARACTER
))
4861 if (!kind_value_check (c
, 1, gfc_default_character_kind
))
4867 if (!type_check (status
, 2, BT_INTEGER
)
4868 || !kind_value_check (status
, 2, gfc_default_integer_kind
)
4869 || !scalar_check (status
, 2))
4877 gfc_check_fgetputc (gfc_expr
*unit
, gfc_expr
*c
)
4879 return gfc_check_fgetputc_sub (unit
, c
, NULL
);
4884 gfc_check_fgetput_sub (gfc_expr
*c
, gfc_expr
*status
)
4886 if (!type_check (c
, 0, BT_CHARACTER
))
4888 if (!kind_value_check (c
, 0, gfc_default_character_kind
))
4894 if (!type_check (status
, 1, BT_INTEGER
)
4895 || !kind_value_check (status
, 1, gfc_default_integer_kind
)
4896 || !scalar_check (status
, 1))
4904 gfc_check_fgetput (gfc_expr
*c
)
4906 return gfc_check_fgetput_sub (c
, NULL
);
4911 gfc_check_fseek_sub (gfc_expr
*unit
, gfc_expr
*offset
, gfc_expr
*whence
, gfc_expr
*status
)
4913 if (!type_check (unit
, 0, BT_INTEGER
))
4916 if (!scalar_check (unit
, 0))
4919 if (!type_check (offset
, 1, BT_INTEGER
))
4922 if (!scalar_check (offset
, 1))
4925 if (!type_check (whence
, 2, BT_INTEGER
))
4928 if (!scalar_check (whence
, 2))
4934 if (!type_check (status
, 3, BT_INTEGER
))
4937 if (!kind_value_check (status
, 3, 4))
4940 if (!scalar_check (status
, 3))
4949 gfc_check_fstat (gfc_expr
*unit
, gfc_expr
*array
)
4951 if (!type_check (unit
, 0, BT_INTEGER
))
4954 if (!scalar_check (unit
, 0))
4957 if (!type_check (array
, 1, BT_INTEGER
)
4958 || !kind_value_check (unit
, 0, gfc_default_integer_kind
))
4961 if (!array_check (array
, 1))
4969 gfc_check_fstat_sub (gfc_expr
*unit
, gfc_expr
*array
, gfc_expr
*status
)
4971 if (!type_check (unit
, 0, BT_INTEGER
))
4974 if (!scalar_check (unit
, 0))
4977 if (!type_check (array
, 1, BT_INTEGER
)
4978 || !kind_value_check (array
, 1, gfc_default_integer_kind
))
4981 if (!array_check (array
, 1))
4987 if (!type_check (status
, 2, BT_INTEGER
)
4988 || !kind_value_check (status
, 2, gfc_default_integer_kind
))
4991 if (!scalar_check (status
, 2))
4999 gfc_check_ftell (gfc_expr
*unit
)
5001 if (!type_check (unit
, 0, BT_INTEGER
))
5004 if (!scalar_check (unit
, 0))
5012 gfc_check_ftell_sub (gfc_expr
*unit
, gfc_expr
*offset
)
5014 if (!type_check (unit
, 0, BT_INTEGER
))
5017 if (!scalar_check (unit
, 0))
5020 if (!type_check (offset
, 1, BT_INTEGER
))
5023 if (!scalar_check (offset
, 1))
5031 gfc_check_stat (gfc_expr
*name
, gfc_expr
*array
)
5033 if (!type_check (name
, 0, BT_CHARACTER
))
5035 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
5038 if (!type_check (array
, 1, BT_INTEGER
)
5039 || !kind_value_check (array
, 1, gfc_default_integer_kind
))
5042 if (!array_check (array
, 1))
5050 gfc_check_stat_sub (gfc_expr
*name
, gfc_expr
*array
, gfc_expr
*status
)
5052 if (!type_check (name
, 0, BT_CHARACTER
))
5054 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
5057 if (!type_check (array
, 1, BT_INTEGER
)
5058 || !kind_value_check (array
, 1, gfc_default_integer_kind
))
5061 if (!array_check (array
, 1))
5067 if (!type_check (status
, 2, BT_INTEGER
)
5068 || !kind_value_check (array
, 1, gfc_default_integer_kind
))
5071 if (!scalar_check (status
, 2))
5079 gfc_check_image_index (gfc_expr
*coarray
, gfc_expr
*sub
)
5083 if (flag_coarray
== GFC_FCOARRAY_NONE
)
5085 gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable");
5089 if (!coarray_check (coarray
, 0))
5094 gfc_error ("%s argument to IMAGE_INDEX must be a rank one array at %L",
5095 gfc_current_intrinsic_arg
[1]->name
, &sub
->where
);
5099 if (gfc_array_size (sub
, &nelems
))
5101 int corank
= gfc_get_corank (coarray
);
5103 if (mpz_cmp_ui (nelems
, corank
) != 0)
5105 gfc_error ("The number of array elements of the SUB argument to "
5106 "IMAGE_INDEX at %L shall be %d (corank) not %d",
5107 &sub
->where
, corank
, (int) mpz_get_si (nelems
));
5119 gfc_check_num_images (gfc_expr
*distance
, gfc_expr
*failed
)
5121 if (flag_coarray
== GFC_FCOARRAY_NONE
)
5123 gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable");
5129 if (!type_check (distance
, 0, BT_INTEGER
))
5132 if (!nonnegative_check ("DISTANCE", distance
))
5135 if (!scalar_check (distance
, 0))
5138 if (!gfc_notify_std (GFC_STD_F2008_TS
, "DISTANCE= argument to "
5139 "NUM_IMAGES at %L", &distance
->where
))
5145 if (!type_check (failed
, 1, BT_LOGICAL
))
5148 if (!scalar_check (failed
, 1))
5151 if (!gfc_notify_std (GFC_STD_F2008_TS
, "FAILED= argument to "
5152 "NUM_IMAGES at %L", &distance
->where
))
5161 gfc_check_this_image (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*distance
)
5163 if (flag_coarray
== GFC_FCOARRAY_NONE
)
5165 gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable");
5169 if (coarray
== NULL
&& dim
== NULL
&& distance
== NULL
)
5172 if (dim
!= NULL
&& coarray
== NULL
)
5174 gfc_error ("DIM argument without COARRAY argument not allowed for "
5175 "THIS_IMAGE intrinsic at %L", &dim
->where
);
5179 if (distance
&& (coarray
|| dim
))
5181 gfc_error ("The DISTANCE argument may not be specified together with the "
5182 "COARRAY or DIM argument in intrinsic at %L",
5187 /* Assume that we have "this_image (distance)". */
5188 if (coarray
&& !gfc_is_coarray (coarray
) && coarray
->ts
.type
== BT_INTEGER
)
5192 gfc_error ("Unexpected DIM argument with noncoarray argument at %L",
5201 if (!type_check (distance
, 2, BT_INTEGER
))
5204 if (!nonnegative_check ("DISTANCE", distance
))
5207 if (!scalar_check (distance
, 2))
5210 if (!gfc_notify_std (GFC_STD_F2008_TS
, "DISTANCE= argument to "
5211 "THIS_IMAGE at %L", &distance
->where
))
5217 if (!coarray_check (coarray
, 0))
5222 if (!dim_check (dim
, 1, false))
5225 if (!dim_corank_check (dim
, coarray
))
5232 /* Calculate the sizes for transfer, used by gfc_check_transfer and also
5233 by gfc_simplify_transfer. Return false if we cannot do so. */
5236 gfc_calculate_transfer_sizes (gfc_expr
*source
, gfc_expr
*mold
, gfc_expr
*size
,
5237 size_t *source_size
, size_t *result_size
,
5238 size_t *result_length_p
)
5240 size_t result_elt_size
;
5242 if (source
->expr_type
== EXPR_FUNCTION
)
5245 if (size
&& size
->expr_type
!= EXPR_CONSTANT
)
5248 /* Calculate the size of the source. */
5249 *source_size
= gfc_target_expr_size (source
);
5250 if (*source_size
== 0)
5253 /* Determine the size of the element. */
5254 result_elt_size
= gfc_element_size (mold
);
5255 if (result_elt_size
== 0)
5258 if (mold
->expr_type
== EXPR_ARRAY
|| mold
->rank
|| size
)
5263 result_length
= (size_t)mpz_get_ui (size
->value
.integer
);
5266 result_length
= *source_size
/ result_elt_size
;
5267 if (result_length
* result_elt_size
< *source_size
)
5271 *result_size
= result_length
* result_elt_size
;
5272 if (result_length_p
)
5273 *result_length_p
= result_length
;
5276 *result_size
= result_elt_size
;
5283 gfc_check_transfer (gfc_expr
*source
, gfc_expr
*mold
, gfc_expr
*size
)
5288 if (mold
->ts
.type
== BT_HOLLERITH
)
5290 gfc_error ("%<MOLD%> argument of %<TRANSFER%> intrinsic at %L must not be"
5291 " %s", &mold
->where
, gfc_basic_typename (BT_HOLLERITH
));
5297 if (!type_check (size
, 2, BT_INTEGER
))
5300 if (!scalar_check (size
, 2))
5303 if (!nonoptional_check (size
, 2))
5307 if (!warn_surprising
)
5310 /* If we can't calculate the sizes, we cannot check any more.
5311 Return true for that case. */
5313 if (!gfc_calculate_transfer_sizes (source
, mold
, size
, &source_size
,
5314 &result_size
, NULL
))
5317 if (source_size
< result_size
)
5318 gfc_warning (OPT_Wsurprising
,
5319 "Intrinsic TRANSFER at %L has partly undefined result: "
5320 "source size %ld < result size %ld", &source
->where
,
5321 (long) source_size
, (long) result_size
);
5328 gfc_check_transpose (gfc_expr
*matrix
)
5330 if (!rank_check (matrix
, 0, 2))
5338 gfc_check_ubound (gfc_expr
*array
, gfc_expr
*dim
, gfc_expr
*kind
)
5340 if (!array_check (array
, 0))
5343 if (!dim_check (dim
, 1, false))
5346 if (!dim_rank_check (dim
, array
, 0))
5349 if (!kind_check (kind
, 2, BT_INTEGER
))
5351 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "%qs intrinsic "
5352 "with KIND argument at %L",
5353 gfc_current_intrinsic
, &kind
->where
))
5361 gfc_check_ucobound (gfc_expr
*coarray
, gfc_expr
*dim
, gfc_expr
*kind
)
5363 if (flag_coarray
== GFC_FCOARRAY_NONE
)
5365 gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable");
5369 if (!coarray_check (coarray
, 0))
5374 if (!dim_check (dim
, 1, false))
5377 if (!dim_corank_check (dim
, coarray
))
5381 if (!kind_check (kind
, 2, BT_INTEGER
))
5389 gfc_check_unpack (gfc_expr
*vector
, gfc_expr
*mask
, gfc_expr
*field
)
5393 if (!rank_check (vector
, 0, 1))
5396 if (!array_check (mask
, 1))
5399 if (!type_check (mask
, 1, BT_LOGICAL
))
5402 if (!same_type_check (vector
, 0, field
, 2))
5405 if (mask
->expr_type
== EXPR_ARRAY
5406 && gfc_array_size (vector
, &vector_size
))
5408 int mask_true_count
= 0;
5409 gfc_constructor
*mask_ctor
;
5410 mask_ctor
= gfc_constructor_first (mask
->value
.constructor
);
5413 if (mask_ctor
->expr
->expr_type
!= EXPR_CONSTANT
)
5415 mask_true_count
= 0;
5419 if (mask_ctor
->expr
->value
.logical
)
5422 mask_ctor
= gfc_constructor_next (mask_ctor
);
5425 if (mpz_get_si (vector_size
) < mask_true_count
)
5427 gfc_error ("%qs argument of %qs intrinsic at %L must "
5428 "provide at least as many elements as there "
5429 "are .TRUE. values in %qs (%ld/%d)",
5430 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
5431 &vector
->where
, gfc_current_intrinsic_arg
[1]->name
,
5432 mpz_get_si (vector_size
), mask_true_count
);
5436 mpz_clear (vector_size
);
5439 if (mask
->rank
!= field
->rank
&& field
->rank
!= 0)
5441 gfc_error ("%qs argument of %qs intrinsic at %L must have "
5442 "the same rank as %qs or be a scalar",
5443 gfc_current_intrinsic_arg
[2]->name
, gfc_current_intrinsic
,
5444 &field
->where
, gfc_current_intrinsic_arg
[1]->name
);
5448 if (mask
->rank
== field
->rank
)
5451 for (i
= 0; i
< field
->rank
; i
++)
5452 if (! identical_dimen_shape (mask
, i
, field
, i
))
5454 gfc_error ("%qs and %qs arguments of %qs intrinsic at %L "
5455 "must have identical shape.",
5456 gfc_current_intrinsic_arg
[2]->name
,
5457 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
5467 gfc_check_verify (gfc_expr
*x
, gfc_expr
*y
, gfc_expr
*z
, gfc_expr
*kind
)
5469 if (!type_check (x
, 0, BT_CHARACTER
))
5472 if (!same_type_check (x
, 0, y
, 1))
5475 if (z
!= NULL
&& !type_check (z
, 2, BT_LOGICAL
))
5478 if (!kind_check (kind
, 3, BT_INTEGER
))
5480 if (kind
&& !gfc_notify_std (GFC_STD_F2003
, "%qs intrinsic "
5481 "with KIND argument at %L",
5482 gfc_current_intrinsic
, &kind
->where
))
5490 gfc_check_trim (gfc_expr
*x
)
5492 if (!type_check (x
, 0, BT_CHARACTER
))
5495 if (!scalar_check (x
, 0))
5503 gfc_check_ttynam (gfc_expr
*unit
)
5505 if (!scalar_check (unit
, 0))
5508 if (!type_check (unit
, 0, BT_INTEGER
))
5515 /* Common check function for the half a dozen intrinsics that have a
5516 single real argument. */
5519 gfc_check_x (gfc_expr
*x
)
5521 if (!type_check (x
, 0, BT_REAL
))
5528 /************* Check functions for intrinsic subroutines *************/
5531 gfc_check_cpu_time (gfc_expr
*time
)
5533 if (!scalar_check (time
, 0))
5536 if (!type_check (time
, 0, BT_REAL
))
5539 if (!variable_check (time
, 0, false))
5547 gfc_check_date_and_time (gfc_expr
*date
, gfc_expr
*time
,
5548 gfc_expr
*zone
, gfc_expr
*values
)
5552 if (!type_check (date
, 0, BT_CHARACTER
))
5554 if (!kind_value_check (date
, 0, gfc_default_character_kind
))
5556 if (!scalar_check (date
, 0))
5558 if (!variable_check (date
, 0, false))
5564 if (!type_check (time
, 1, BT_CHARACTER
))
5566 if (!kind_value_check (time
, 1, gfc_default_character_kind
))
5568 if (!scalar_check (time
, 1))
5570 if (!variable_check (time
, 1, false))
5576 if (!type_check (zone
, 2, BT_CHARACTER
))
5578 if (!kind_value_check (zone
, 2, gfc_default_character_kind
))
5580 if (!scalar_check (zone
, 2))
5582 if (!variable_check (zone
, 2, false))
5588 if (!type_check (values
, 3, BT_INTEGER
))
5590 if (!array_check (values
, 3))
5592 if (!rank_check (values
, 3, 1))
5594 if (!variable_check (values
, 3, false))
5603 gfc_check_mvbits (gfc_expr
*from
, gfc_expr
*frompos
, gfc_expr
*len
,
5604 gfc_expr
*to
, gfc_expr
*topos
)
5606 if (!type_check (from
, 0, BT_INTEGER
))
5609 if (!type_check (frompos
, 1, BT_INTEGER
))
5612 if (!type_check (len
, 2, BT_INTEGER
))
5615 if (!same_type_check (from
, 0, to
, 3))
5618 if (!variable_check (to
, 3, false))
5621 if (!type_check (topos
, 4, BT_INTEGER
))
5624 if (!nonnegative_check ("frompos", frompos
))
5627 if (!nonnegative_check ("topos", topos
))
5630 if (!nonnegative_check ("len", len
))
5633 if (!less_than_bitsize2 ("from", from
, "frompos", frompos
, "len", len
))
5636 if (!less_than_bitsize2 ("to", to
, "topos", topos
, "len", len
))
5644 gfc_check_random_number (gfc_expr
*harvest
)
5646 if (!type_check (harvest
, 0, BT_REAL
))
5649 if (!variable_check (harvest
, 0, false))
5657 gfc_check_random_seed (gfc_expr
*size
, gfc_expr
*put
, gfc_expr
*get
)
5659 unsigned int nargs
= 0, seed_size
;
5660 locus
*where
= NULL
;
5661 mpz_t put_size
, get_size
;
5663 /* Keep the number of bytes in sync with master_state in
5664 libgfortran/intrinsics/random.c. +1 due to the integer p which is
5665 part of the state too. */
5666 seed_size
= 128 / gfc_default_integer_kind
+ 1;
5670 if (size
->expr_type
!= EXPR_VARIABLE
5671 || !size
->symtree
->n
.sym
->attr
.optional
)
5674 if (!scalar_check (size
, 0))
5677 if (!type_check (size
, 0, BT_INTEGER
))
5680 if (!variable_check (size
, 0, false))
5683 if (!kind_value_check (size
, 0, gfc_default_integer_kind
))
5689 if (put
->expr_type
!= EXPR_VARIABLE
5690 || !put
->symtree
->n
.sym
->attr
.optional
)
5693 where
= &put
->where
;
5696 if (!array_check (put
, 1))
5699 if (!rank_check (put
, 1, 1))
5702 if (!type_check (put
, 1, BT_INTEGER
))
5705 if (!kind_value_check (put
, 1, gfc_default_integer_kind
))
5708 if (gfc_array_size (put
, &put_size
)
5709 && mpz_get_ui (put_size
) < seed_size
)
5710 gfc_error ("Size of %qs argument of %qs intrinsic at %L "
5711 "too small (%i/%i)",
5712 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
5713 where
, (int) mpz_get_ui (put_size
), seed_size
);
5718 if (get
->expr_type
!= EXPR_VARIABLE
5719 || !get
->symtree
->n
.sym
->attr
.optional
)
5722 where
= &get
->where
;
5725 if (!array_check (get
, 2))
5728 if (!rank_check (get
, 2, 1))
5731 if (!type_check (get
, 2, BT_INTEGER
))
5734 if (!variable_check (get
, 2, false))
5737 if (!kind_value_check (get
, 2, gfc_default_integer_kind
))
5740 if (gfc_array_size (get
, &get_size
)
5741 && mpz_get_ui (get_size
) < seed_size
)
5742 gfc_error ("Size of %qs argument of %qs intrinsic at %L "
5743 "too small (%i/%i)",
5744 gfc_current_intrinsic_arg
[2]->name
, gfc_current_intrinsic
,
5745 where
, (int) mpz_get_ui (get_size
), seed_size
);
5748 /* RANDOM_SEED may not have more than one non-optional argument. */
5750 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic
, where
);
5756 gfc_check_fe_runtime_error (gfc_actual_arglist
*a
)
5760 int num_percent
, nargs
;
5763 if (e
->expr_type
!= EXPR_CONSTANT
)
5766 len
= e
->value
.character
.length
;
5767 if (e
->value
.character
.string
[len
-1] != '\0')
5768 gfc_internal_error ("fe_runtime_error string must be null terminated");
5771 for (i
=0; i
<len
-1; i
++)
5772 if (e
->value
.character
.string
[i
] == '%')
5776 for (; a
; a
= a
->next
)
5779 if (nargs
-1 != num_percent
)
5780 gfc_internal_error ("fe_runtime_error: Wrong number of arguments (%d instead of %d)",
5781 nargs
, num_percent
++);
5787 gfc_check_second_sub (gfc_expr
*time
)
5789 if (!scalar_check (time
, 0))
5792 if (!type_check (time
, 0, BT_REAL
))
5795 if (!kind_value_check (time
, 0, 4))
5802 /* COUNT and COUNT_MAX of SYSTEM_CLOCK are scalar, default-kind integer
5803 variables in Fortran 95. In Fortran 2003 and later, they can be of any
5804 kind, and COUNT_RATE can be of type real. Note, count, count_rate, and
5805 count_max are all optional arguments */
5808 gfc_check_system_clock (gfc_expr
*count
, gfc_expr
*count_rate
,
5809 gfc_expr
*count_max
)
5813 if (!scalar_check (count
, 0))
5816 if (!type_check (count
, 0, BT_INTEGER
))
5819 if (count
->ts
.kind
!= gfc_default_integer_kind
5820 && !gfc_notify_std (GFC_STD_F2003
, "COUNT argument to "
5821 "SYSTEM_CLOCK at %L has non-default kind",
5825 if (!variable_check (count
, 0, false))
5829 if (count_rate
!= NULL
)
5831 if (!scalar_check (count_rate
, 1))
5834 if (!variable_check (count_rate
, 1, false))
5837 if (count_rate
->ts
.type
== BT_REAL
)
5839 if (!gfc_notify_std (GFC_STD_F2003
, "Real COUNT_RATE argument to "
5840 "SYSTEM_CLOCK at %L", &count_rate
->where
))
5845 if (!type_check (count_rate
, 1, BT_INTEGER
))
5848 if (count_rate
->ts
.kind
!= gfc_default_integer_kind
5849 && !gfc_notify_std (GFC_STD_F2003
, "COUNT_RATE argument to "
5850 "SYSTEM_CLOCK at %L has non-default kind",
5851 &count_rate
->where
))
5857 if (count_max
!= NULL
)
5859 if (!scalar_check (count_max
, 2))
5862 if (!type_check (count_max
, 2, BT_INTEGER
))
5865 if (count_max
->ts
.kind
!= gfc_default_integer_kind
5866 && !gfc_notify_std (GFC_STD_F2003
, "COUNT_MAX argument to "
5867 "SYSTEM_CLOCK at %L has non-default kind",
5871 if (!variable_check (count_max
, 2, false))
5880 gfc_check_irand (gfc_expr
*x
)
5885 if (!scalar_check (x
, 0))
5888 if (!type_check (x
, 0, BT_INTEGER
))
5891 if (!kind_value_check (x
, 0, 4))
5899 gfc_check_alarm_sub (gfc_expr
*seconds
, gfc_expr
*handler
, gfc_expr
*status
)
5901 if (!scalar_check (seconds
, 0))
5903 if (!type_check (seconds
, 0, BT_INTEGER
))
5906 if (!int_or_proc_check (handler
, 1))
5908 if (handler
->ts
.type
== BT_INTEGER
&& !scalar_check (handler
, 1))
5914 if (!scalar_check (status
, 2))
5916 if (!type_check (status
, 2, BT_INTEGER
))
5918 if (!kind_value_check (status
, 2, gfc_default_integer_kind
))
5926 gfc_check_rand (gfc_expr
*x
)
5931 if (!scalar_check (x
, 0))
5934 if (!type_check (x
, 0, BT_INTEGER
))
5937 if (!kind_value_check (x
, 0, 4))
5945 gfc_check_srand (gfc_expr
*x
)
5947 if (!scalar_check (x
, 0))
5950 if (!type_check (x
, 0, BT_INTEGER
))
5953 if (!kind_value_check (x
, 0, 4))
5961 gfc_check_ctime_sub (gfc_expr
*time
, gfc_expr
*result
)
5963 if (!scalar_check (time
, 0))
5965 if (!type_check (time
, 0, BT_INTEGER
))
5968 if (!type_check (result
, 1, BT_CHARACTER
))
5970 if (!kind_value_check (result
, 1, gfc_default_character_kind
))
5978 gfc_check_dtime_etime (gfc_expr
*x
)
5980 if (!array_check (x
, 0))
5983 if (!rank_check (x
, 0, 1))
5986 if (!variable_check (x
, 0, false))
5989 if (!type_check (x
, 0, BT_REAL
))
5992 if (!kind_value_check (x
, 0, 4))
6000 gfc_check_dtime_etime_sub (gfc_expr
*values
, gfc_expr
*time
)
6002 if (!array_check (values
, 0))
6005 if (!rank_check (values
, 0, 1))
6008 if (!variable_check (values
, 0, false))
6011 if (!type_check (values
, 0, BT_REAL
))
6014 if (!kind_value_check (values
, 0, 4))
6017 if (!scalar_check (time
, 1))
6020 if (!type_check (time
, 1, BT_REAL
))
6023 if (!kind_value_check (time
, 1, 4))
6031 gfc_check_fdate_sub (gfc_expr
*date
)
6033 if (!type_check (date
, 0, BT_CHARACTER
))
6035 if (!kind_value_check (date
, 0, gfc_default_character_kind
))
6043 gfc_check_gerror (gfc_expr
*msg
)
6045 if (!type_check (msg
, 0, BT_CHARACTER
))
6047 if (!kind_value_check (msg
, 0, gfc_default_character_kind
))
6055 gfc_check_getcwd_sub (gfc_expr
*cwd
, gfc_expr
*status
)
6057 if (!type_check (cwd
, 0, BT_CHARACTER
))
6059 if (!kind_value_check (cwd
, 0, gfc_default_character_kind
))
6065 if (!scalar_check (status
, 1))
6068 if (!type_check (status
, 1, BT_INTEGER
))
6076 gfc_check_getarg (gfc_expr
*pos
, gfc_expr
*value
)
6078 if (!type_check (pos
, 0, BT_INTEGER
))
6081 if (pos
->ts
.kind
> gfc_default_integer_kind
)
6083 gfc_error ("%qs argument of %qs intrinsic at %L must be of a kind "
6084 "not wider than the default kind (%d)",
6085 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
6086 &pos
->where
, gfc_default_integer_kind
);
6090 if (!type_check (value
, 1, BT_CHARACTER
))
6092 if (!kind_value_check (value
, 1, gfc_default_character_kind
))
6100 gfc_check_getlog (gfc_expr
*msg
)
6102 if (!type_check (msg
, 0, BT_CHARACTER
))
6104 if (!kind_value_check (msg
, 0, gfc_default_character_kind
))
6112 gfc_check_exit (gfc_expr
*status
)
6117 if (!type_check (status
, 0, BT_INTEGER
))
6120 if (!scalar_check (status
, 0))
6128 gfc_check_flush (gfc_expr
*unit
)
6133 if (!type_check (unit
, 0, BT_INTEGER
))
6136 if (!scalar_check (unit
, 0))
6144 gfc_check_free (gfc_expr
*i
)
6146 if (!type_check (i
, 0, BT_INTEGER
))
6149 if (!scalar_check (i
, 0))
6157 gfc_check_hostnm (gfc_expr
*name
)
6159 if (!type_check (name
, 0, BT_CHARACTER
))
6161 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
6169 gfc_check_hostnm_sub (gfc_expr
*name
, gfc_expr
*status
)
6171 if (!type_check (name
, 0, BT_CHARACTER
))
6173 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
6179 if (!scalar_check (status
, 1))
6182 if (!type_check (status
, 1, BT_INTEGER
))
6190 gfc_check_itime_idate (gfc_expr
*values
)
6192 if (!array_check (values
, 0))
6195 if (!rank_check (values
, 0, 1))
6198 if (!variable_check (values
, 0, false))
6201 if (!type_check (values
, 0, BT_INTEGER
))
6204 if (!kind_value_check (values
, 0, gfc_default_integer_kind
))
6212 gfc_check_ltime_gmtime (gfc_expr
*time
, gfc_expr
*values
)
6214 if (!type_check (time
, 0, BT_INTEGER
))
6217 if (!kind_value_check (time
, 0, gfc_default_integer_kind
))
6220 if (!scalar_check (time
, 0))
6223 if (!array_check (values
, 1))
6226 if (!rank_check (values
, 1, 1))
6229 if (!variable_check (values
, 1, false))
6232 if (!type_check (values
, 1, BT_INTEGER
))
6235 if (!kind_value_check (values
, 1, gfc_default_integer_kind
))
6243 gfc_check_ttynam_sub (gfc_expr
*unit
, gfc_expr
*name
)
6245 if (!scalar_check (unit
, 0))
6248 if (!type_check (unit
, 0, BT_INTEGER
))
6251 if (!type_check (name
, 1, BT_CHARACTER
))
6253 if (!kind_value_check (name
, 1, gfc_default_character_kind
))
6261 gfc_check_isatty (gfc_expr
*unit
)
6266 if (!type_check (unit
, 0, BT_INTEGER
))
6269 if (!scalar_check (unit
, 0))
6277 gfc_check_isnan (gfc_expr
*x
)
6279 if (!type_check (x
, 0, BT_REAL
))
6287 gfc_check_perror (gfc_expr
*string
)
6289 if (!type_check (string
, 0, BT_CHARACTER
))
6291 if (!kind_value_check (string
, 0, gfc_default_character_kind
))
6299 gfc_check_umask (gfc_expr
*mask
)
6301 if (!type_check (mask
, 0, BT_INTEGER
))
6304 if (!scalar_check (mask
, 0))
6312 gfc_check_umask_sub (gfc_expr
*mask
, gfc_expr
*old
)
6314 if (!type_check (mask
, 0, BT_INTEGER
))
6317 if (!scalar_check (mask
, 0))
6323 if (!scalar_check (old
, 1))
6326 if (!type_check (old
, 1, BT_INTEGER
))
6334 gfc_check_unlink (gfc_expr
*name
)
6336 if (!type_check (name
, 0, BT_CHARACTER
))
6338 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
6346 gfc_check_unlink_sub (gfc_expr
*name
, gfc_expr
*status
)
6348 if (!type_check (name
, 0, BT_CHARACTER
))
6350 if (!kind_value_check (name
, 0, gfc_default_character_kind
))
6356 if (!scalar_check (status
, 1))
6359 if (!type_check (status
, 1, BT_INTEGER
))
6367 gfc_check_signal (gfc_expr
*number
, gfc_expr
*handler
)
6369 if (!scalar_check (number
, 0))
6371 if (!type_check (number
, 0, BT_INTEGER
))
6374 if (!int_or_proc_check (handler
, 1))
6376 if (handler
->ts
.type
== BT_INTEGER
&& !scalar_check (handler
, 1))
6384 gfc_check_signal_sub (gfc_expr
*number
, gfc_expr
*handler
, gfc_expr
*status
)
6386 if (!scalar_check (number
, 0))
6388 if (!type_check (number
, 0, BT_INTEGER
))
6391 if (!int_or_proc_check (handler
, 1))
6393 if (handler
->ts
.type
== BT_INTEGER
&& !scalar_check (handler
, 1))
6399 if (!type_check (status
, 2, BT_INTEGER
))
6401 if (!scalar_check (status
, 2))
6409 gfc_check_system_sub (gfc_expr
*cmd
, gfc_expr
*status
)
6411 if (!type_check (cmd
, 0, BT_CHARACTER
))
6413 if (!kind_value_check (cmd
, 0, gfc_default_character_kind
))
6416 if (!scalar_check (status
, 1))
6419 if (!type_check (status
, 1, BT_INTEGER
))
6422 if (!kind_value_check (status
, 1, gfc_default_integer_kind
))
6429 /* This is used for the GNU intrinsics AND, OR and XOR. */
6431 gfc_check_and (gfc_expr
*i
, gfc_expr
*j
)
6433 if (i
->ts
.type
!= BT_INTEGER
&& i
->ts
.type
!= BT_LOGICAL
)
6435 gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER "
6436 "or LOGICAL", gfc_current_intrinsic_arg
[0]->name
,
6437 gfc_current_intrinsic
, &i
->where
);
6441 if (j
->ts
.type
!= BT_INTEGER
&& j
->ts
.type
!= BT_LOGICAL
)
6443 gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER "
6444 "or LOGICAL", gfc_current_intrinsic_arg
[1]->name
,
6445 gfc_current_intrinsic
, &j
->where
);
6449 if (i
->ts
.type
!= j
->ts
.type
)
6451 gfc_error ("%qs and %qs arguments of %qs intrinsic at %L must "
6452 "have the same type", gfc_current_intrinsic_arg
[0]->name
,
6453 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,
6458 if (!scalar_check (i
, 0))
6461 if (!scalar_check (j
, 1))
6469 gfc_check_storage_size (gfc_expr
*a
, gfc_expr
*kind
)
6472 if (a
->expr_type
== EXPR_NULL
)
6474 gfc_error ("Intrinsic function NULL at %L cannot be an actual "
6475 "argument to STORAGE_SIZE, because it returns a "
6476 "disassociated pointer", &a
->where
);
6480 if (a
->ts
.type
== BT_ASSUMED
)
6482 gfc_error ("%qs argument of %qs intrinsic at %L shall not be TYPE(*)",
6483 gfc_current_intrinsic_arg
[0]->name
, gfc_current_intrinsic
,
6488 if (a
->ts
.type
== BT_PROCEDURE
)
6490 gfc_error ("%qs argument of %qs intrinsic at %L shall not be a "
6491 "procedure", gfc_current_intrinsic_arg
[0]->name
,
6492 gfc_current_intrinsic
, &a
->where
);
6499 if (!type_check (kind
, 1, BT_INTEGER
))
6502 if (!scalar_check (kind
, 1))
6505 if (kind
->expr_type
!= EXPR_CONSTANT
)
6507 gfc_error ("%qs argument of %qs intrinsic at %L must be a constant",
6508 gfc_current_intrinsic_arg
[1]->name
, gfc_current_intrinsic
,